{"_id":"@damarkuncoro/landing-page","_rev":"9-1b35cbe30d60c631d1ccca330d31c568","name":"@damarkuncoro/landing-page","dist-tags":{"latest":"0.1.8"},"versions":{"0.1.0":{"name":"@damarkuncoro/landing-page","version":"0.1.0","keywords":["landing-page","config-driven","no-code","page-builder"],"author":{"name":"Damar Kuncoro"},"license":"MIT","_id":"@damarkuncoro/landing-page@0.1.0","maintainers":[{"name":"damarkuncoro","email":"damarkuncoro@gmail.com"}],"homepage":"https://damarkuncoro.com/landing-page","bugs":{"url":"https://github.com/damarkuncoro/landing-page/issues"},"dist":{"shasum":"da50c2bc91adcb17e7140a9dba474ee43d356933","tarball":"https://registry.npmjs.org/@damarkuncoro/landing-page/-/landing-page-0.1.0.tgz","fileCount":8,"integrity":"sha512-gAnwL+a8bsmCLh+rc8mWBK5NTLf4NUv6DkOjrJ8FvSRihJhUqqyGwTPZGeId+EnnDY3KlFMcVG/e0sUpRRii6Q==","signatures":[{"sig":"MEUCIQCRB/7xh1B1/e/f6RX8mfGYhIcWFHPn+RmioaJQ+j24fQIgHWK96EYbyGtt/xjjhK3kb25Hnq4T6NE2ldCnoXfPA7A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":437766},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"65ead989c043e913f218e0e0afb519c55e3cadb8","scripts":{"dev":"tsup --watch","lint":"eslint src --ext ts,tsx","test":"vitest run","build":"tsup","test:watch":"vitest"},"_npmUser":{"name":"damarkuncoro","email":"damarkuncoro@gmail.com"},"repository":{"url":"git+https://github.com/damarkuncoro/landing-page.git","type":"git"},"_npmVersion":"10.8.2","description":"Config-driven landing page library","directories":{},"sideEffects":false,"_nodeVersion":"20.20.0","dependencies":{"ajv":"^8.18.0","ajv-formats":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.2.0","eslint":"^8.45.0","vitest":"^0.34.0","prettier":"^3.0.0","@types/ajv":"^0.0.5","typescript":"^5.1.0","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/landing-page_0.1.0_1772434855576_0.4189960776733892","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@damarkuncoro/landing-page","version":"0.1.1","keywords":["landing-page","config-driven","no-code","page-builder"],"author":{"name":"Damar Kuncoro"},"license":"MIT","_id":"@damarkuncoro/landing-page@0.1.1","maintainers":[{"name":"damarkuncoro","email":"damarkuncoro@gmail.com"}],"homepage":"https://damarkuncoro.com/landing-page","bugs":{"url":"https://github.com/damarkuncoro/landing-page/issues"},"dist":{"shasum":"83c8d5a94fc959f589d26d0344eac0d6ea0f2bb9","tarball":"https://registry.npmjs.org/@damarkuncoro/landing-page/-/landing-page-0.1.1.tgz","fileCount":8,"integrity":"sha512-+z1lIx2Hg9qUZ1dmCDKD5PW/QlCZxuoscH1qwf3vS6cpSa9JirWmlKdxBqU+dgvujSxGxHC6tlr6S51nbv6JJw==","signatures":[{"sig":"MEUCIQDcxJ11npCwjAj/yOHPXQdXCfYLFl3Rv0zKXDf5qsEi/AIgb4eZXSw6HOrMlwmrh5NioEPsEB/7y5mnMRFU8OzMLkw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":445460},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"65ead989c043e913f218e0e0afb519c55e3cadb8","scripts":{"dev":"tsup --watch","lint":"eslint src --ext ts,tsx","test":"vitest run","build":"tsup","test:watch":"vitest"},"_npmUser":{"name":"damarkuncoro","email":"damarkuncoro@gmail.com"},"repository":{"url":"git+https://github.com/damarkuncoro/landing-page.git","type":"git"},"_npmVersion":"10.8.2","description":"Config-driven landing page library","directories":{},"sideEffects":false,"_nodeVersion":"20.20.0","dependencies":{"ajv":"^8.18.0","ajv-formats":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.2.0","eslint":"^8.45.0","vitest":"^0.34.0","prettier":"^3.0.0","@types/ajv":"^0.0.5","typescript":"^5.1.0","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/landing-page_0.1.1_1772435231799_0.0824048833495008","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@damarkuncoro/landing-page","version":"0.1.2","keywords":["landing-page","config-driven","no-code","page-builder"],"author":{"name":"Damar Kuncoro"},"license":"MIT","_id":"@damarkuncoro/landing-page@0.1.2","maintainers":[{"name":"damarkuncoro","email":"damarkuncoro@gmail.com"}],"homepage":"https://damarkuncoro.com/landing-page","bugs":{"url":"https://github.com/damarkuncoro/landing-page/issues"},"dist":{"shasum":"1a9fbdda6a98c8d930b74277fe236a802448ee4c","tarball":"https://registry.npmjs.org/@damarkuncoro/landing-page/-/landing-page-0.1.2.tgz","fileCount":8,"integrity":"sha512-blHnGYc+c62NiZ1vU3tv9Fna7daB8n01McpjGxIKfiuKVWnWCIENztbJJLWpI/MpfNgNlNJqiePX+9ERa4Gurw==","signatures":[{"sig":"MEUCIQDfF4VPI7PlxKqiHlO1/ZlUN3QTUmpTb0b3OJb7AEYCPgIgNhezqa1jQG33L27zqGspw46dHrSpeV8mtcLJVWv6NOg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":461224},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"5b6d270f5b0380b41622b5393608c269f3b4dc94","scripts":{"dev":"tsup --watch","lint":"eslint src --ext ts,tsx","test":"vitest run","build":"tsup","test:watch":"vitest"},"_npmUser":{"name":"damarkuncoro","email":"damarkuncoro@gmail.com"},"repository":{"url":"git+https://github.com/damarkuncoro/landing-page.git","type":"git"},"_npmVersion":"10.8.2","description":"Config-driven landing page library","directories":{},"sideEffects":false,"_nodeVersion":"20.20.0","dependencies":{"ajv":"^8.18.0","ajv-formats":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.2.0","eslint":"^8.45.0","vitest":"^0.34.0","prettier":"^3.0.0","@types/ajv":"^0.0.5","typescript":"^5.1.0","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/landing-page_0.1.2_1772436159488_0.49402888145701973","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@damarkuncoro/landing-page","version":"0.1.3","keywords":["landing-page","config-driven","no-code","page-builder"],"author":{"name":"Damar Kuncoro"},"license":"MIT","_id":"@damarkuncoro/landing-page@0.1.3","maintainers":[{"name":"damarkuncoro","email":"damarkuncoro@gmail.com"}],"homepage":"https://damarkuncoro.com/landing-page","bugs":{"url":"https://github.com/damarkuncoro/landing-page/issues"},"dist":{"shasum":"a3600853c08964ff9443804511d581c75d9c4dc6","tarball":"https://registry.npmjs.org/@damarkuncoro/landing-page/-/landing-page-0.1.3.tgz","fileCount":8,"integrity":"sha512-58fpX/js8371Adt6pBC7U0XThGeC3fzZe/Vccx3qikBTg+S3Smb8dUd7s5aTnRa+KkkitxEJu3kaw1JtK8M3qw==","signatures":[{"sig":"MEQCIHOGhCdxSz/rBI6l1BX0UjQS0tpy4QyipwIJt5/BdMCJAiBov9JxSfNIGH3qsvVeBwWj+zwyG4S/IrB4/6B+gSq8Cw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":529482},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"1a687d34330da282171236676f52278f2f2a639b","scripts":{"dev":"tsup --watch","lint":"eslint src --ext ts,tsx","test":"vitest run","build":"tsup","test:watch":"vitest"},"_npmUser":{"name":"damarkuncoro","email":"damarkuncoro@gmail.com"},"repository":{"url":"git+https://github.com/damarkuncoro/landing-page.git","type":"git"},"_npmVersion":"10.8.2","description":"Config-driven landing page library","directories":{},"sideEffects":false,"_nodeVersion":"20.20.0","dependencies":{"ajv":"^8.18.0","ajv-formats":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.2.0","eslint":"^8.45.0","vitest":"^0.34.0","prettier":"^3.0.0","@types/ajv":"^0.0.5","typescript":"^5.1.0","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/landing-page_0.1.3_1772516179854_0.16479013539495413","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@damarkuncoro/landing-page","version":"0.1.4","keywords":["landing-page","config-driven","no-code","page-builder"],"author":{"name":"Damar Kuncoro"},"license":"MIT","_id":"@damarkuncoro/landing-page@0.1.4","maintainers":[{"name":"damarkuncoro","email":"damarkuncoro@gmail.com"}],"homepage":"https://damarkuncoro.com/landing-page","bugs":{"url":"https://github.com/damarkuncoro/landing-page/issues"},"dist":{"shasum":"2fca8b9e21d16135cdcb76d1d33ab7ca0690b116","tarball":"https://registry.npmjs.org/@damarkuncoro/landing-page/-/landing-page-0.1.4.tgz","fileCount":8,"integrity":"sha512-CTFl/S7MffbUgJZTm7KpYJN2ymnabdqquQBH94Qw2yQDqhidjSwOxj05pw+dUzHjyUvNEYqKBT0EFadU9X+X0A==","signatures":[{"sig":"MEUCIEmIS7tXGRQlhlUSG2ccNrr4rJneaE5hROHt1Z7Uf9tLAiEAuXoqUUaR6k2/mmj1IIvy6TmnJpj78e6UjntXGwZ1aIk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":562193},"main":"lib/cjs/index.js","_from":"file:damarkuncoro-landing-page-0.1.4.tgz","types":"lib/index.d.ts","module":"lib/esm/index.js","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/esm/index.js","require":"./lib/cjs/index.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint src --ext ts,tsx","test":"vitest run","build":"tsup","test:watch":"vitest"},"_npmUser":{"name":"damarkuncoro","email":"damarkuncoro@gmail.com"},"_resolved":"/private/var/folders/5q/j90n97w16zd2vsdm445cmp680000gp/T/13815fb9c8a314c2059a80dca94c18c7/damarkuncoro-landing-page-0.1.4.tgz","_integrity":"sha512-CTFl/S7MffbUgJZTm7KpYJN2ymnabdqquQBH94Qw2yQDqhidjSwOxj05pw+dUzHjyUvNEYqKBT0EFadU9X+X0A==","repository":{"url":"git+https://github.com/damarkuncoro/landing-page.git","type":"git"},"_npmVersion":"10.8.2","description":"Config-driven landing page library","directories":{},"sideEffects":false,"_nodeVersion":"20.20.0","dependencies":{"ajv":"^8.18.0","ajv-formats":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.2.0","eslint":"^8.45.0","vitest":"^0.34.0","prettier":"^3.0.0","@types/ajv":"^0.0.5","typescript":"^5.1.0","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/landing-page_0.1.4_1772523618464_0.28753288293775614","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@damarkuncoro/landing-page","version":"0.1.5","keywords":["landing-page","config-driven","no-code","page-builder"],"author":{"name":"Damar Kuncoro"},"license":"MIT","_id":"@damarkuncoro/landing-page@0.1.5","maintainers":[{"name":"damarkuncoro","email":"damarkuncoro@gmail.com"}],"homepage":"https://damarkuncoro.com/landing-page","bugs":{"url":"https://github.com/damarkuncoro/landing-page/issues"},"dist":{"shasum":"8db940c926814605275f9bb9798510c9a1d70544","tarball":"https://registry.npmjs.org/@damarkuncoro/landing-page/-/landing-page-0.1.5.tgz","fileCount":8,"integrity":"sha512-5RDc4bb1FfRiAEthszlWKk1iSKzivkE226Cj6QuSxgFKpV9lAJxZilad634O+R85iiexGYSEErzXSrLhAxTNog==","signatures":[{"sig":"MEUCIFy10XejClibmk8e+WLt7cT1f+FYHF5tTS7hFIUs8uG1AiEAvtWUmpYORSnWNersVt6cPx2GKAirnfEb8FgNlFZRQ3g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":741709},"main":"lib/cjs/index.js","_from":"file:damarkuncoro-landing-page-0.1.5.tgz","types":"lib/esm/index.d.mts","module":"lib/esm/index.mjs","exports":"./lib/esm/index.mjs","scripts":{"dev":"tsup --watch","lint":"eslint src --ext ts,tsx","test":"vitest run","build":"tsup","test:watch":"vitest"},"_npmUser":{"name":"damarkuncoro","email":"damarkuncoro@gmail.com"},"_resolved":"/private/var/folders/5q/j90n97w16zd2vsdm445cmp680000gp/T/79d39876dbd2bef7ca7cb699f38f1d34/damarkuncoro-landing-page-0.1.5.tgz","_integrity":"sha512-5RDc4bb1FfRiAEthszlWKk1iSKzivkE226Cj6QuSxgFKpV9lAJxZilad634O+R85iiexGYSEErzXSrLhAxTNog==","repository":{"url":"git+https://github.com/damarkuncoro/landing-page.git","type":"git"},"_npmVersion":"10.8.2","description":"Config-driven landing page library","directories":{},"sideEffects":false,"_nodeVersion":"20.20.0","dependencies":{"ajv":"^8.18.0","ajv-formats":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.2.0","eslint":"^8.45.0","vitest":"^0.34.0","prettier":"^3.0.0","@types/ajv":"^0.0.5","typescript":"^5.1.0","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/landing-page_0.1.5_1772532104240_0.5132089280099688","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@damarkuncoro/landing-page","version":"0.1.6","keywords":["landing-page","config-driven","no-code","page-builder"],"author":{"name":"Damar Kuncoro"},"license":"MIT","_id":"@damarkuncoro/landing-page@0.1.6","maintainers":[{"name":"damarkuncoro","email":"damarkuncoro@gmail.com"}],"homepage":"https://damarkuncoro.com/landing-page","bugs":{"url":"https://github.com/damarkuncoro/landing-page/issues"},"dist":{"shasum":"f38a4d1a26df31bbc7c495de07c18d3ab8603366","tarball":"https://registry.npmjs.org/@damarkuncoro/landing-page/-/landing-page-0.1.6.tgz","fileCount":8,"integrity":"sha512-j4DOyAxJ7HSWPpsUzKukqByrklhIRqokdXz94cGHGUjZfgIunc9cUbnpvfeXrwbdTH3YLkmT90L5QKHmFT1acA==","signatures":[{"sig":"MEUCIQD/NSyLDXxEBLjhqQI9DIfH37IaOMDIDfmBN9nUV1leOgIgQVRAqJjFFLBowc6FvZKS3HIBRCjxp8E+NQUBDlLqW1k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":869207},"main":"lib/cjs/index.js","types":"lib/esm/index.d.mts","module":"lib/esm/index.mjs","exports":"./lib/esm/index.mjs","gitHead":"88639d261ec4a5880c0ab6beb3bc346f0098fbdd","scripts":{"dev":"tsup --watch","lint":"eslint src --ext ts,tsx","test":"vitest run","build":"tsup","test:watch":"vitest"},"_npmUser":{"name":"damarkuncoro","email":"damarkuncoro@gmail.com"},"repository":{"url":"git+https://github.com/damarkuncoro/landing-page.git","type":"git"},"_npmVersion":"10.8.2","description":"Config-driven landing page library","directories":{},"sideEffects":false,"_nodeVersion":"20.20.0","dependencies":{"ajv":"^8.18.0","ajv-formats":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.2.0","eslint":"^8.45.0","vitest":"^0.34.0","prettier":"^3.0.0","@types/ajv":"^0.0.5","typescript":"^5.1.0","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/landing-page_0.1.6_1772608005644_0.05539106921168524","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@damarkuncoro/landing-page","version":"0.1.7","keywords":["landing-page","config-driven","no-code","page-builder"],"author":{"name":"Damar Kuncoro"},"license":"MIT","_id":"@damarkuncoro/landing-page@0.1.7","maintainers":[{"name":"damarkuncoro","email":"damarkuncoro@gmail.com"}],"homepage":"https://damarkuncoro.com/landing-page","bugs":{"url":"https://github.com/damarkuncoro/landing-page/issues"},"dist":{"shasum":"53f4d7931ac2911eb62927e4f791a7583df211fd","tarball":"https://registry.npmjs.org/@damarkuncoro/landing-page/-/landing-page-0.1.7.tgz","fileCount":8,"integrity":"sha512-7P6w2L9didHgQx8fC9RPIusjwChgNKPkoSm0I/YuVqnsOcluMjuIF5bHbgIR/Hdh1bTP21oAtvxFI2zds7G0ow==","signatures":[{"sig":"MEUCIAzGYfjaxigwcDyMsd23Zplq1XQzW40P4lGqQYhEgEHyAiEAk042LqLkb33r/aYl6rdrnsUUx0Uc4kdmkHKaBFj1hFM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":969450},"main":"lib/cjs/index.js","types":"lib/esm/index.d.mts","module":"lib/esm/index.mjs","exports":"./lib/esm/index.mjs","gitHead":"3a9323f4642305292a7758eb74248828373c5ec3","scripts":{"dev":"tsup --watch","lint":"eslint src --ext ts,tsx","test":"vitest run","build":"tsup","test:watch":"vitest"},"_npmUser":{"name":"damarkuncoro","email":"damarkuncoro@gmail.com"},"repository":{"url":"git+https://github.com/damarkuncoro/landing-page.git","type":"git"},"_npmVersion":"10.8.2","description":"Config-driven landing page library","directories":{},"sideEffects":false,"_nodeVersion":"20.20.0","dependencies":{"ajv":"^8.18.0","ajv-formats":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.2.0","eslint":"^8.45.0","vitest":"^0.34.0","prettier":"^3.0.0","@types/ajv":"^0.0.5","typescript":"^5.1.0","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","lucide-react":"^0.440.0","framer-motion":"^11.0.0"},"_npmOperationalInternal":{"tmp":"tmp/landing-page_0.1.7_1772687715871_0.38434389994163887","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@damarkuncoro/landing-page","version":"0.1.8","description":"Config-driven landing page library","main":"lib/cjs/index.js","module":"lib/esm/index.mjs","types":"lib/esm/index.d.mts","exports":"./lib/esm/index.mjs","bin":{"landing-page":"lib/cjs/cli.js"},"scripts":{"build":"tsup","dev":"tsup --watch","test":"vitest run","test:watch":"vitest","lint":"eslint src --ext ts,tsx","validate":"node lib/cjs/cli.js"},"keywords":["landing-page","config-driven","no-code","page-builder"],"author":{"name":"Damar Kuncoro"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/damarkuncoro/landing-page.git"},"homepage":"https://damarkuncoro.com/landing-page","bugs":{"url":"https://github.com/damarkuncoro/landing-page/issues"},"publishConfig":{"access":"public"},"sideEffects":false,"devDependencies":{"@types/ajv":"^0.0.5","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@typescript-eslint/eslint-plugin":"^6.0.0","@typescript-eslint/parser":"^6.0.0","eslint":"^8.45.0","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","prettier":"^3.0.0","tsup":"^7.2.0","typescript":"^5.1.0","vitest":"^0.34.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","framer-motion":"^11.0.0","lucide-react":"^0.440.0"},"dependencies":{"ajv":"^8.18.0","ajv-formats":"^3.0.1"},"_id":"@damarkuncoro/landing-page@0.1.8","gitHead":"924fdbb447790d05b4348f4adc2a96fe7d10f7cd","_nodeVersion":"20.20.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-YIQXsG2MNJV5SQjGWltg0//utwiFiHVj51FrKKQX2py7retDIKurzcC6i5Y0hcWps8Y2SX03ZGDbeRCPvJlMoA==","shasum":"dc53457e1bbeae697d3d8bee9898868b39b1307b","tarball":"https://registry.npmjs.org/@damarkuncoro/landing-page/-/landing-page-0.1.8.tgz","fileCount":8,"unpackedSize":969544,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC2gq5Jva3QXGFJUZRQ/3Y0i574VY/+sZnHJES54M5oagIhANlkWdlg/xsvM4wS7xIEwiztvQiOVFSw9H8AKh83Yrxg"}]},"_npmUser":{"name":"damarkuncoro","email":"damarkuncoro@gmail.com"},"directories":{},"maintainers":[{"name":"damarkuncoro","email":"damarkuncoro@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/landing-page_0.1.8_1772688906948_0.015428045779755761"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-02T07:00:55.445Z","modified":"2026-03-05T05:35:07.287Z","0.1.0":"2026-03-02T07:00:55.729Z","0.1.1":"2026-03-02T07:07:11.936Z","0.1.2":"2026-03-02T07:22:39.641Z","0.1.3":"2026-03-03T05:36:20.051Z","0.1.4":"2026-03-03T07:40:18.673Z","0.1.5":"2026-03-03T10:01:44.404Z","0.1.6":"2026-03-04T07:06:45.865Z","0.1.7":"2026-03-05T05:15:16.070Z","0.1.8":"2026-03-05T05:35:07.162Z"},"bugs":{"url":"https://github.com/damarkuncoro/landing-page/issues"},"author":{"name":"Damar Kuncoro"},"license":"MIT","homepage":"https://damarkuncoro.com/landing-page","keywords":["landing-page","config-driven","no-code","page-builder"],"repository":{"type":"git","url":"git+https://github.com/damarkuncoro/landing-page.git"},"description":"Config-driven landing page library","maintainers":[{"name":"damarkuncoro","email":"damarkuncoro@gmail.com"}],"readme":"# @damarkuncoro/landing-page\n\n[![npm version](https://img.shields.io/npm/v/%40damarkuncoro%2Flanding-page)](https://www.npmjs.com/package/@damarkuncoro/landing-page)\n[![npm downloads](https://img.shields.io/npm/dm/%40damarkuncoro%2Flanding-page)](https://www.npmjs.com/package/@damarkuncoro/landing-page)\n[![license](https://img.shields.io/npm/l/%40damarkuncoro%2Flanding-page)](./LICENSE)\n\nConfig-driven landing page library for building beautiful, responsive landing pages with minimal code.\n\n## Features\n\n- 🚀 **Config-driven**: Define your landing page with a simple JSON configuration\n- 📦 **Framework-agnostic**: Works with any framework (React, Vue, Svelte, etc.)\n- 🎨 **Themeable**: Customize colors, fonts, spacing, and breakpoints\n- 📱 **Responsive**: Built with mobile-first design principles\n- ⚡ **Fast**: Lightweight and optimized for performance\n- 🔌 **Extensible**: Add custom sections and components\n- 📝 **Type-safe**: Full TypeScript support\n\n## Installation\n\n```bash\nnpm install @damarkuncoro/landing-page\n```\n\n## Using \"No Skin\" (Base UI)\n\nThe library supports a \"no skin\" option that allows you to use the base UI components without any additional styling. This gives you full control over the styling through CSS or inline styles.\n\n### Usage\n\n```typescript\nimport { defineLandingPage } from '@damarkuncoro/landing-page'\n\nconst landingPage = defineLandingPage({\n  title: 'My Landing Page with Base UI',\n  description: 'A landing page using the base UI components',\n  sections: [\n    {\n      id: 'hero',\n      type: 'hero',\n      config: {\n        title: 'Welcome to Our Platform',\n        subtitle: 'Discover amazing features that will transform your workflow',\n        buttons: [\n          {\n            id: 'primary-button',\n            text: 'Get Started',\n            url: '/signup',\n            variant: 'primary',\n            size: 'md',\n            skin: 'none', // Use base UI without skin\n          },\n          {\n            id: 'secondary-button',\n            text: 'Learn More',\n            url: '/about',\n            variant: 'secondary',\n            size: 'md',\n            skin: 'none', // Use base UI without skin\n          },\n        ],\n        skin: 'none', // Use base UI without skin\n      },\n    },\n    {\n      id: 'features',\n      type: 'features',\n      config: {\n        features: [\n          {\n            id: 'feature-1',\n            title: 'Fast Performance',\n            description: 'Our platform is optimized for speed and efficiency',\n          },\n          {\n            id: 'feature-2',\n            title: 'Modern Design',\n            description: 'Beautiful, responsive interface that works on all devices',\n          },\n          {\n            id: 'feature-3',\n            title: 'Secure & Reliable',\n            description: 'Enterprise-grade security and reliability',\n          },\n        ],\n        skin: 'none', // Use base UI without skin\n      },\n    },\n  ],\n})\n```\n\n### Customizing Base UI\n\nWhen using `skin: 'none'`, you can customize the components using the `style` and `className` props:\n\n```typescript\nconst landingPage = defineLandingPage({\n  title: 'My Customized Landing Page',\n  description: 'A landing page with customized base UI components',\n  sections: [\n    {\n      id: 'hero',\n      type: 'hero',\n      config: {\n        title: 'Welcome to Our Platform',\n        subtitle: 'Discover amazing features that will transform your workflow',\n        buttons: [\n          {\n            id: 'primary-button',\n            text: 'Get Started',\n            url: '/signup',\n            variant: 'primary',\n            size: 'md',\n            skin: 'none',\n            className: 'my-custom-button', // Custom CSS class\n            style: {\n              backgroundColor: '#ff0000',\n              color: '#ffffff',\n              padding: '12px 24px',\n              borderRadius: '8px',\n              fontSize: '16px',\n            },\n          },\n        ],\n        skin: 'none',\n        className: 'my-custom-hero', // Custom CSS class\n        style: {\n          padding: '80px 0',\n          backgroundColor: '#f5f5f5',\n        },\n      },\n    },\n  ],\n})\n```\n\n## Quick Start\n\n1. Define your landing page configuration:\n\n```typescript\nimport { defineLandingPage } from '@damarkuncoro/landing-page'\n\nconst landingPage = defineLandingPage({\n  title: 'My Awesome Landing Page',\n  description: 'A beautiful landing page built with @damarkuncoro/landing-page',\n  sections: [\n    {\n      id: 'hero',\n      type: 'hero',\n      config: {\n        title: 'Welcome to Our Platform',\n        subtitle: 'Discover amazing features that will transform your workflow',\n        buttons: [\n          {\n            id: 'primary-button',\n            text: 'Get Started',\n            url: '/signup',\n            variant: 'primary',\n            size: 'md',\n          },\n          {\n            id: 'secondary-button',\n            text: 'Learn More',\n            url: '/about',\n            variant: 'secondary',\n            size: 'md',\n          },\n        ],\n      },\n    },\n    {\n      id: 'features',\n      type: 'features',\n      config: {\n        features: [\n          {\n            id: 'feature-1',\n            title: 'Fast Performance',\n            description: 'Our platform is optimized for speed and efficiency',\n          },\n          {\n            id: 'feature-2',\n            title: 'Modern Design',\n            description: 'Beautiful, responsive interface that works on all devices',\n          },\n          {\n            id: 'feature-3',\n            title: 'Secure & Reliable',\n            description: 'Enterprise-grade security and reliability',\n          },\n        ],\n      },\n    },\n  ],\n})\n```\n\n2. Render it with your framework:\n\n### React\n\n```typescript\nimport React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport { createReactRenderer } from '@damarkuncoro/landing-page'\n\nconst LandingPage = createReactRenderer()\n\nReactDOM.createRoot(document.getElementById('root')!).render(\n  <React.StrictMode>\n    <LandingPage config={landingPage} />\n  </React.StrictMode>\n)\n```\n\n## Using Tailwind CSS\n\nThe library supports Tailwind CSS out of the box through Tailwind-based skins. To use Tailwind CSS:\n\n1. Install Tailwind CSS in your project:\n```bash\nnpm install -D tailwindcss postcss autoprefixer\nnpx tailwindcss init -p\n```\n\n2. Configure Tailwind CSS:\n```javascript\n// tailwind.config.js\n/** @type {import('tailwindcss').Config} */\nexport default {\n  content: [\n    \"./index.html\",\n    \"./src/**/*.{js,ts,jsx,tsx}\",\n  ],\n  theme: {\n    extend: {\n      colors: {\n        primary: '#3b82f6',\n        secondary: '#8b5cf6',\n        accent: '#10b981',\n        background: '#ffffff',\n        text: '#1f2937',\n        muted: '#6b7280',\n      },\n    },\n  },\n  plugins: [],\n}\n```\n\n3. Import Tailwind CSS in your main stylesheet:\n```css\n/* index.css */\n@tailwind base;\n@tailwind components;\n@tailwind utilities;\n```\n\n4. Use Tailwind skins in your configuration:\n```typescript\nimport { defineLandingPage } from '@damarkuncoro/landing-page'\n\nconst landingPage = defineLandingPage({\n  title: 'My Tailwind Landing Page',\n  description: 'A beautiful landing page using Tailwind CSS',\n  sections: [\n    {\n      id: 'hero',\n      type: 'hero',\n      config: {\n        title: 'Welcome to Our Platform',\n        subtitle: 'Discover amazing features that will transform your workflow',\n        buttons: [\n          {\n            id: 'primary-button',\n            text: 'Get Started',\n            url: '/signup',\n            variant: 'primary',\n            size: 'md',\n            skin: 'tailwind',\n          },\n          {\n            id: 'secondary-button',\n            text: 'Learn More',\n            url: '/about',\n            variant: 'secondary',\n            size: 'md',\n            skin: 'tailwind',\n          },\n        ],\n        skin: 'tailwind',\n      },\n    },\n    {\n      id: 'features',\n      type: 'features',\n      config: {\n        features: [\n          {\n            id: 'feature-1',\n            title: 'Fast Performance',\n            description: 'Our platform is optimized for speed and efficiency',\n          },\n          {\n            id: 'feature-2',\n            title: 'Modern Design',\n            description: 'Beautiful, responsive interface that works on all devices',\n          },\n          {\n            id: 'feature-3',\n            title: 'Secure & Reliable',\n            description: 'Enterprise-grade security and reliability',\n          },\n        ],\n        skin: 'tailwind',\n      },\n    },\n  ],\n})\n```\n\n## Schema & Validation\n\nThe library includes comprehensive JSON schemas for validating landing page configurations. You can use these schemas to:\n\n- Validate configurations before rendering\n- Generate documentation\n- Build no-code editors\n\n### Validation API\n\n```typescript\nimport { validateLandingPageConfig, validateSectionConfig } from '@damarkuncoro/landing-page'\n\n// Validate entire landing page\nconst config = {\n  title: 'My Landing Page',\n  description: 'A beautiful landing page',\n  sections: [],\n}\n\nconst errors = validateLandingPageConfig(config)\nconsole.log(errors) // [{ field: 'root', message: 'must NOT have fewer than 1 items', type: 'minItems' }]\n\n// Validate single section\nconst heroSection = {\n  title: 'Welcome',\n  subtitle: 'This is my landing page',\n}\n\nconst sectionErrors = validateSectionConfig('hero', heroSection)\nconsole.log(sectionErrors) // null - valid\n```\n\n### Accessing Schemas\n\n```typescript\nimport { landingPageSchema, sectionSchemas, schemaDefinitions } from '@damarkuncoro/landing-page'\n\n// Get the entire landing page schema\nconsole.log(landingPageSchema)\n\n// Get specific section schemas\nconsole.log(sectionSchemas.hero) // Hero section schema\nconsole.log(sectionSchemas.features) // Features section schema\n```\n\n## Configuration\n\n### LandingPageConfig\n\nThe main configuration object that defines your entire landing page.\n\n```typescript\ninterface LandingPageConfig {\n  id?: string\n  className?: string\n  title: string\n  description: string\n  sections: Section[]\n  theme?: ThemeConfig\n}\n```\n\n### Section Types\n\n#### Hero Section\n\n```typescript\ninterface HeroConfig {\n  title: string\n  subtitle: string\n  image?: string\n  video?: string\n  buttons: ButtonConfig[]\n  alignment?: 'left' | 'center' | 'right'\n  skin?: 'default' | 'skin2' | 'skin3' | 'skin4' | 'skin5' | 'skin6' | 'skin7' | 'skin8' | 'none'\n}\n\n### Hero Skins\n\n#### Default Skin\nSimple centered layout with image below text.\n\n#### Skin 2\nTwo-column layout with image on the left and text on the right.\n\n#### Skin 3\nGradient background with white text.\n\n#### Skin 4\nVideo background with dark overlay.\n\n#### Skin 5\nGambar di atas dengan teks di bawah, latar belakang berwarna terang.\n\n#### Skin 6\nGambar di sebelah kanan dengan teks di kiri, latar belakang hitam dengan gradien.\n\n#### Skin 7\nDesain minimalis dengan latar belakang putih dan elemen yang bersih. Gambar di atas teks.\n\n#### Skin 8\nDesain dengan latar belakang gradien biru muda dan teks berwarna putih. Gambar di sebelah kanan dengan teks di kiri.\n\n#### Skin 9\nTitle, subtitle, dan buttons di atas gambar.\n\n#### Skin 10\nFull screen hero dengan latar belakang gradien dan konten di tengah.\n\n#### Tailwind Skin\nTailwind-based skin that uses Tailwind CSS classes for styling. Requires Tailwind CSS to be installed in your project.\n```\n\n#### Features Section\n\n```typescript\ninterface FeatureConfig {\n  features: Feature[]\n}\n\ninterface Feature {\n  id: string\n  title: string\n  description: string\n  icon?: string\n  image?: string\n}\n```\n\n#### Testimonials Section\n\n```typescript\ninterface TestimonialConfig {\n  testimonials: Testimonial[]\n}\n\ninterface Testimonial {\n  id: string\n  quote: string\n  author: string\n  role?: string\n  avatar?: string\n}\n```\n\n#### Pricing Section\n\n```typescript\ninterface PricingConfig {\n  plans: PricingPlan[]\n}\n\ninterface PricingPlan {\n  id: string\n  title: string\n  description: string\n  price: number\n  period?: string\n  features: string[]\n  button: ButtonConfig\n  featured?: boolean\n}\n```\n\n#### CTA Section\n\n```typescript\ninterface CtaConfig {\n  title: string\n  description: string\n  button: ButtonConfig\n  image?: string\n}\n```\n\n#### Footer Section\n\n```typescript\ninterface FooterConfig {\n  logo?: string\n  title?: string\n  description?: string\n  links: {\n    title: string\n    items: {\n      text: string\n      url: string\n      target?: '_blank' | '_self'\n    }[]\n  }[]\n  socialLinks: {\n    platform: string\n    url: string\n    icon?: string\n  }[]\n  copyright?: string\n}\n```\n\n### Theme Configuration\n\n```typescript\ninterface ThemeConfig {\n  colors: {\n    primary: string\n    secondary: string\n    accent: string\n    background: string\n    text: string\n    muted: string\n  }\n  spacing: {\n    xs: string\n    sm: string\n    md: string\n    lg: string\n    xl: string\n  }\n  fonts: {\n    heading: string\n    body: string\n    mono: string\n  }\n  typography: {\n    h1: string\n    h2: string\n    h3: string\n    body: string\n    small: string\n  }\n  fontWeights: {\n    normal: string | number\n    medium: string | number\n    bold: string | number\n  }\n  breakpoints: {\n    sm: string\n    md: string\n    lg: string\n    xl: string\n  }\n  sizes?: {\n    subtitleMaxWidth?: string\n    containerMaxWidth?: string\n  }\n}\n```\n\n## API\n\n### defineLandingPage(config: LandingPageConfig)\n\nCreates a landing page instance from a configuration object.\n\n```typescript\nconst landingPage = defineLandingPage(config)\n```\n\n### Methods\n\n- **getSection(id: string)**: Returns a section by id\n- **addSection(section: Section)**: Adds a new section\n- **removeSection(id: string)**: Removes a section by id\n- **updateSection(id: string, updates: any)**: Updates a section\n- **validate()**: Validates the configuration\n- **toJSON()**: Returns the raw config\n\n## Extensibility\n\nYou can create custom section types and renderers by extending the library.\n\n### Custom Section Type\n\n```typescript\n// types.ts\nexport type SectionType = 'hero' | 'features' | 'testimonials' | 'pricing' | 'cta' | 'footer' | 'custom'\n\n// components/types.ts\nexport interface CustomSectionConfig {\n  content: string\n}\n\n// renderers/react.tsx\nconst CustomSection = ({ config, theme }: { config: CustomSectionConfig; theme: any }) => (\n  <Section className={config.className}>\n    <Container>\n      <div dangerouslySetInnerHTML={{ __html: config.content }} />\n    </Container>\n  </Section>\n)\n\n// In createReactRenderer\nswitch (section.type) {\n  // ... existing types\n  case 'custom':\n    return <CustomSection config={section.config} theme={theme} key={section.id} />\n}\n```\n\n## Browser Support\n\n- Chrome (latest)\n- Firefox (latest)\n- Safari (latest)\n- Edge (latest)\n\n## License\n\nMIT\n","readmeFilename":"README.md"}