diff --git a/package-lock.json b/package-lock.json index 191346d..f0ae95e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,17 +1,17 @@ { - "name": "laravel-shadcn-starter-template", + "name": "DLH-SKL", "lockfileVersion": 3, "requires": true, "packages": { "": { "dependencies": { - "@inertiajs/vue3": "^2.0.0", "@radix-ui/react-alert-dialog": "^1.0.5", "@radix-ui/react-avatar": "^1.1.1", "@radix-ui/react-collapsible": "^1.1.1", "@radix-ui/react-dialog": "^1.1.2", "@radix-ui/react-dropdown-menu": "^2.1.2", "@radix-ui/react-label": "^2.0.2", + "@radix-ui/react-navigation-menu": "^1.2.4", "@radix-ui/react-popover": "^1.0.7", "@radix-ui/react-scroll-area": "^1.0.5", "@radix-ui/react-separator": "^1.1.0", @@ -23,13 +23,15 @@ "lucide-react": "^0.378.0", "next-themes": "^0.3.0", "react-resizable-panels": "^2.0.19", + "react-type-animation": "^3.2.0", "tailwind-merge": "^2.3.0", "tailwindcss-animate": "^1.0.7", + "vaul": "^1.1.2", "zod": "^3.23.8" }, "devDependencies": { "@headlessui/react": "^1.4.2", - "@inertiajs/react": "^1.0.0", + "@inertiajs/react": "^1.3.0", "@tailwindcss/forms": "^0.5.3", "@types/node": "^18.13.0", "@types/react": "^18.0.28", @@ -255,6 +257,7 @@ "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -263,6 +266,7 @@ "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -309,6 +313,7 @@ "version": "7.26.3", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz", "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==", + "dev": true, "dependencies": { "@babel/types": "^7.26.3" }, @@ -399,6 +404,7 @@ "version": "7.26.3", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz", "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==", + "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" @@ -827,10 +833,11 @@ } }, "node_modules/@inertiajs/core": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/@inertiajs/core/-/core-1.0.16.tgz", - "integrity": "sha512-j0nS1KwNv2aNSC10u3qfOswhSMcHSURypPlVSimyRrxKSdrLRmPidow06avunkLU6T7nI9oDXt71WOeO3wCLQg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@inertiajs/core/-/core-1.3.0.tgz", + "integrity": "sha512-TJ8R1eUYY473m9DaKlCPRdHTdznFWTDuy5VvEzXg3t/hohbDQedLj46yn/uAqziJPEUZJrSftZzPI2NMzL9tQA==", "dev": true, + "license": "MIT", "dependencies": { "axios": "^1.6.0", "deepmerge": "^4.0.0", @@ -839,39 +846,17 @@ } }, "node_modules/@inertiajs/react": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/@inertiajs/react/-/react-1.0.16.tgz", - "integrity": "sha512-+cWZ7yUbFHx7XcW8oSvitg7SYTAAS2WbgOrPe/18dPbWt1xNMdUgD/qh375FnO+PwLuM0fhmcze539B7LymOMw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@inertiajs/react/-/react-1.3.0.tgz", + "integrity": "sha512-K+PF23xP6jjMkubs8PbxT1MroSDdH1z3VTEGbO3685Xyf0QNwoNIF95hnyqJxlWaeG4fB0GAag40gh04fefRUA==", "dev": true, + "license": "MIT", "dependencies": { - "@inertiajs/core": "1.0.16", + "@inertiajs/core": "1.3.0", "lodash.isequal": "^4.5.0" }, "peerDependencies": { - "react": "^16.9.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@inertiajs/vue3": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@inertiajs/vue3/-/vue3-2.0.0.tgz", - "integrity": "sha512-U38EM8jqlfX2WmVK/vJWZr+jD71qvnmNPnUuZ+4mS2QNFdNmUeg2M/HbLmvR4WLWsxIl+7GYQySy4sW3tu/uTA==", - "dependencies": { - "@inertiajs/core": "2.0.0", - "lodash.clonedeep": "^4.5.0", - "lodash.isequal": "^4.5.0" - }, - "peerDependencies": { - "vue": "^3.0.0" - } - }, - "node_modules/@inertiajs/vue3/node_modules/@inertiajs/core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@inertiajs/core/-/core-2.0.0.tgz", - "integrity": "sha512-2kvlk731NjwfXUku/ZoXsZNcOzx985icHtTC1dgN+8sAZtJfEg9QBrQ7sBjeLYiWtKgobJdwwpeDaexEneAtLQ==", - "dependencies": { - "axios": "^1.6.0", - "deepmerge": "^4.0.0", - "qs": "^6.9.0" + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "node_modules/@isaacs/cliui": { @@ -2447,6 +2432,318 @@ } } }, + "node_modules/@radix-ui/react-navigation-menu": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.4.tgz", + "integrity": "sha512-wUi01RrTDTOoGtjEPHsxlzPtVzVc3R/AZ5wfh0dyqMAqolhHAHvG5iQjBCTi2AjQqa77FWWbA3kE3RkD+bDMgQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-collection": "1.1.1", + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-dismissable-layer": "1.1.4", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-presence": "1.1.2", + "@radix-ui/react-primitive": "2.0.1", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0", + "@radix-ui/react-use-previous": "1.1.0", + "@radix-ui/react-visually-hidden": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-navigation-menu/node_modules/@radix-ui/primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.1.tgz", + "integrity": "sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-navigation-menu/node_modules/@radix-ui/react-collection": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.1.tgz", + "integrity": "sha512-LwT3pSho9Dljg+wY2KN2mrrh6y3qELfftINERIzBUO9e0N+t0oMTyn3k9iv+ZqgrwGkRnLpNJrsMv9BZlt2yuA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-primitive": "2.0.1", + "@radix-ui/react-slot": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-navigation-menu/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz", + "integrity": "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-navigation-menu/node_modules/@radix-ui/react-context": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-navigation-menu/node_modules/@radix-ui/react-direction": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", + "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-navigation-menu/node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.4.tgz", + "integrity": "sha512-XDUI0IVYVSwjMXxM6P4Dfti7AH+Y4oS/TB+sglZ/EXc7cqLwGAmp1NlMrcUjj7ks6R5WTZuWKv44FBbLpwU3sA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-primitive": "2.0.1", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-escape-keydown": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-navigation-menu/node_modules/@radix-ui/react-id": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz", + "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-navigation-menu/node_modules/@radix-ui/react-presence": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.2.tgz", + "integrity": "sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-navigation-menu/node_modules/@radix-ui/react-primitive": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.1.tgz", + "integrity": "sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-navigation-menu/node_modules/@radix-ui/react-slot": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.1.tgz", + "integrity": "sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-navigation-menu/node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", + "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-navigation-menu/node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", + "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-navigation-menu/node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz", + "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-navigation-menu/node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", + "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-navigation-menu/node_modules/@radix-ui/react-visually-hidden": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.1.tgz", + "integrity": "sha512-vVfA2IZ9q/J+gEamvj761Oq1FpWgCDaNOOIfbPVp2MVPLEomUr5+Vf7kJGwQ24YxZSlQVar7Bes8kyTo5Dshpg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-popover": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.0.7.tgz", @@ -3304,6 +3601,21 @@ } } }, + "node_modules/@radix-ui/react-use-previous": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz", + "integrity": "sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-use-rect": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz", @@ -3739,106 +4051,6 @@ "vite": "^4.2.0 || ^5.0.0" } }, - "node_modules/@vue/compiler-core": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", - "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", - "peer": true, - "dependencies": { - "@babel/parser": "^7.25.3", - "@vue/shared": "3.5.13", - "entities": "^4.5.0", - "estree-walker": "^2.0.2", - "source-map-js": "^1.2.0" - } - }, - "node_modules/@vue/compiler-dom": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", - "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", - "peer": true, - "dependencies": { - "@vue/compiler-core": "3.5.13", - "@vue/shared": "3.5.13" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", - "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", - "peer": true, - "dependencies": { - "@babel/parser": "^7.25.3", - "@vue/compiler-core": "3.5.13", - "@vue/compiler-dom": "3.5.13", - "@vue/compiler-ssr": "3.5.13", - "@vue/shared": "3.5.13", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.11", - "postcss": "^8.4.48", - "source-map-js": "^1.2.0" - } - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", - "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", - "peer": true, - "dependencies": { - "@vue/compiler-dom": "3.5.13", - "@vue/shared": "3.5.13" - } - }, - "node_modules/@vue/reactivity": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz", - "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", - "peer": true, - "dependencies": { - "@vue/shared": "3.5.13" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz", - "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", - "peer": true, - "dependencies": { - "@vue/reactivity": "3.5.13", - "@vue/shared": "3.5.13" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", - "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", - "peer": true, - "dependencies": { - "@vue/reactivity": "3.5.13", - "@vue/runtime-core": "3.5.13", - "@vue/shared": "3.5.13", - "csstype": "^3.1.3" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz", - "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", - "peer": true, - "dependencies": { - "@vue/compiler-ssr": "3.5.13", - "@vue/shared": "3.5.13" - }, - "peerDependencies": { - "vue": "3.5.13" - } - }, - "node_modules/@vue/shared": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", - "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", - "peer": true - }, "node_modules/ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", @@ -3898,7 +4110,8 @@ "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true }, "node_modules/autoprefixer": { "version": "10.4.19", @@ -3941,6 +4154,7 @@ "version": "1.6.8", "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", + "dev": true, "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -4018,6 +4232,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -4160,6 +4375,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, "dependencies": { "delayed-stream": "~1.0.0" }, @@ -4208,7 +4424,8 @@ "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "devOptional": true }, "node_modules/date-fns": { "version": "3.6.0", @@ -4240,6 +4457,7 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4248,6 +4466,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -4264,6 +4483,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, "engines": { "node": ">=0.4.0" } @@ -4299,22 +4519,11 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "peer": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/es-define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, "dependencies": { "get-intrinsic": "^1.2.4" }, @@ -4326,6 +4535,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, "engines": { "node": ">= 0.4" } @@ -4386,12 +4596,6 @@ "node": ">=0.8.0" } }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "peer": true - }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", @@ -4441,6 +4645,7 @@ "version": "1.15.6", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "dev": true, "funding": [ { "type": "individual", @@ -4475,6 +4680,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -4531,6 +4737,7 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", @@ -4598,6 +4805,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -4618,6 +4826,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, "dependencies": { "es-define-property": "^1.0.0" }, @@ -4629,6 +4838,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -4640,6 +4850,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -4814,15 +5025,11 @@ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" - }, "node_modules/lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "dev": true }, "node_modules/loose-envify": { "version": "1.4.0", @@ -4852,15 +5059,6 @@ "react": "^16.5.1 || ^17.0.0 || ^18.0.0" } }, - "node_modules/magic-string": { - "version": "0.30.17", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", - "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", - "peer": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" - } - }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -4885,6 +5083,7 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, "engines": { "node": ">= 0.6" } @@ -4893,6 +5092,7 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, "dependencies": { "mime-db": "1.52.0" }, @@ -5000,7 +5200,8 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/object-assign": { "version": "4.1.1", @@ -5022,6 +5223,7 @@ "version": "1.13.1", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5235,15 +5437,29 @@ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true }, "node_modules/qs": { "version": "6.12.1", "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==", + "dev": true, "dependencies": { "side-channel": "^1.0.6" }, @@ -5296,6 +5512,13 @@ "react": "^18.3.1" } }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT", + "peer": true + }, "node_modules/react-refresh": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", @@ -5381,6 +5604,17 @@ } } }, + "node_modules/react-type-animation": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-type-animation/-/react-type-animation-3.2.0.tgz", + "integrity": "sha512-WXTe0i3rRNKjmggPvT5ntye1QBt0ATGbijeW6V3cQe2W0jaMABXXlPPEdtofnS9tM7wSRHchEvI9SUw+0kUohw==", + "license": "MIT", + "peerDependencies": { + "prop-types": "^15.5.4", + "react": ">= 15.0.0", + "react-dom": ">= 15.0.0" + } + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -5508,6 +5742,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -5543,6 +5778,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -5807,7 +6043,7 @@ "version": "5.4.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", - "devOptional": true, + "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -5898,6 +6134,19 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, + "node_modules/vaul": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vaul/-/vaul-1.1.2.tgz", + "integrity": "sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-dialog": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" + } + }, "node_modules/vite": { "version": "5.2.11", "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.11.tgz", @@ -5963,27 +6212,6 @@ "picomatch": "^2.3.1" } }, - "node_modules/vue": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz", - "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", - "peer": true, - "dependencies": { - "@vue/compiler-dom": "3.5.13", - "@vue/compiler-sfc": "3.5.13", - "@vue/runtime-dom": "3.5.13", - "@vue/server-renderer": "3.5.13", - "@vue/shared": "3.5.13" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index 060c35e..e92ac20 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ }, "devDependencies": { "@headlessui/react": "^1.4.2", - "@inertiajs/react": "^1.0.0", + "@inertiajs/react": "^1.3.0", "@tailwindcss/forms": "^0.5.3", "@types/node": "^18.13.0", "@types/react": "^18.0.28", @@ -24,13 +24,13 @@ "vite": "^5.0" }, "dependencies": { - "@inertiajs/vue3": "^2.0.0", "@radix-ui/react-alert-dialog": "^1.0.5", "@radix-ui/react-avatar": "^1.1.1", "@radix-ui/react-collapsible": "^1.1.1", "@radix-ui/react-dialog": "^1.1.2", "@radix-ui/react-dropdown-menu": "^2.1.2", "@radix-ui/react-label": "^2.0.2", + "@radix-ui/react-navigation-menu": "^1.2.4", "@radix-ui/react-popover": "^1.0.7", "@radix-ui/react-scroll-area": "^1.0.5", "@radix-ui/react-separator": "^1.1.0", @@ -42,8 +42,10 @@ "lucide-react": "^0.378.0", "next-themes": "^0.3.0", "react-resizable-panels": "^2.0.19", + "react-type-animation": "^3.2.0", "tailwind-merge": "^2.3.0", "tailwindcss-animate": "^1.0.7", + "vaul": "^1.1.2", "zod": "^3.23.8" } } diff --git a/public/assets/bg-footer-2.jpg b/public/assets/bg-footer-2.jpg new file mode 100644 index 0000000..d9cea14 Binary files /dev/null and b/public/assets/bg-footer-2.jpg differ diff --git a/public/assets/bg-hero.jpg b/public/assets/bg-hero.jpg new file mode 100644 index 0000000..ed56376 Binary files /dev/null and b/public/assets/bg-hero.jpg differ diff --git a/public/assets/dlh-logo.svg b/public/assets/dlh-logo.svg new file mode 100644 index 0000000..8ca0480 --- /dev/null +++ b/public/assets/dlh-logo.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/assets/elipse.svg b/public/assets/elipse.svg new file mode 100644 index 0000000..c855cca --- /dev/null +++ b/public/assets/elipse.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/assets/hero-second.jpg b/public/assets/hero-second.jpg new file mode 100644 index 0000000..7c4bc0c Binary files /dev/null and b/public/assets/hero-second.jpg differ diff --git a/public/assets/img1.jpg b/public/assets/img1.jpg new file mode 100644 index 0000000..529e40c Binary files /dev/null and b/public/assets/img1.jpg differ diff --git a/public/assets/login.svg b/public/assets/login.svg new file mode 100644 index 0000000..9d52593 --- /dev/null +++ b/public/assets/login.svg @@ -0,0 +1 @@ + diff --git a/public/assets/logo_skl.svg b/public/assets/logo_skl.svg new file mode 100644 index 0000000..d76ee8e --- /dev/null +++ b/public/assets/logo_skl.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/assets/popup-1.jpeg b/public/assets/popup-1.jpeg new file mode 100644 index 0000000..1b5e4d9 Binary files /dev/null and b/public/assets/popup-1.jpeg differ diff --git a/public/assets/popup-2.jpeg b/public/assets/popup-2.jpeg new file mode 100644 index 0000000..3e0e63c Binary files /dev/null and b/public/assets/popup-2.jpeg differ diff --git a/public/assets/wood.svg b/public/assets/wood.svg new file mode 100644 index 0000000..2993ed2 --- /dev/null +++ b/public/assets/wood.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/resources/css/app.css b/resources/css/app.css index a6d35ed..dd947f0 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -4,7 +4,7 @@ @layer base { :root { - --background: 0 0% 100%; + --background: 210 17% 98%; --foreground: 240 10% 3.9%; --card: 0 0% 100%; --card-foreground: 240 10% 3.9%; diff --git a/resources/js/app.tsx b/resources/js/app.tsx index 713d878..2f4049a 100644 --- a/resources/js/app.tsx +++ b/resources/js/app.tsx @@ -21,8 +21,7 @@ createInertiaApp({ root.render( diff --git a/resources/js/components/CardBlog.tsx b/resources/js/components/CardBlog.tsx new file mode 100644 index 0000000..69f4857 --- /dev/null +++ b/resources/js/components/CardBlog.tsx @@ -0,0 +1,38 @@ +import React from "react"; +import { Button } from "@/components/ui/button"; +import { Card, CardContent } from "@/components/ui/card"; +import { Badge } from "@/components/ui/badge"; +import { ArrowRight } from "lucide-react"; + +const CardBlog = ({ + item, +}: { + item: { + id: number; + date: string; + title: string; + title_page: string; + description: string; + image: string; + alt_image: string; + }; +}) => { + return ( + + {item.alt_image} + + {item.date} +

{item.date}

+

+ {item.title} +

+

{item.description}

+ +
+
+ ); +}; + +export default CardBlog; diff --git a/resources/js/components/Home/Footer.tsx b/resources/js/components/Home/Footer.tsx new file mode 100644 index 0000000..45c6adf --- /dev/null +++ b/resources/js/components/Home/Footer.tsx @@ -0,0 +1,69 @@ +import React, { useEffect, useState } from "react"; +import { Button } from "@/components/ui/button"; +import { ArrowRight } from "lucide-react"; +import PopupModal from "@/components/Home/PopupModal"; + +const Footer = () => { + const [showPopup, setShowPopup] = useState(true); + + useEffect(() => { + const hasSeenPopup = localStorage.getItem("hasSeenPopup"); + if (hasSeenPopup) { + setShowPopup(false); + } + }, []); + + const handleClosePopup = () => { + localStorage.setItem("hasSeenPopup", "true"); + setShowPopup(false); + }; + + return ( + <> + {showPopup && } +
+
+

+ Dapatkan Newsletter Terbaru Sekarang! +

+
+ + +
+
+ Logo +

+ Dinas Lingkungan Hidup Provinsi DKI Jakarta +

+

+ Bidang Tata Lingkungan dan Kebersihan +

+

+ Jalan Mandala V No.67, Cililitan, Kramat Jati, + RT.2/RW.3, Cililitan, Kota Jakarta Timur, Daerah + Khusus Ibukota Jakarta 13640 +

+

+ Telepon: (021) 8092744 | Fax: (021) 8091056 +

+

Email: dinaslh@jakarta.go.id

+

© Copyright 2016

+
+
+
+ + ); +}; + +export default Footer; diff --git a/resources/js/components/Home/Hero.tsx b/resources/js/components/Home/Hero.tsx new file mode 100644 index 0000000..09f259f --- /dev/null +++ b/resources/js/components/Home/Hero.tsx @@ -0,0 +1,45 @@ +import React from "react"; +import { Badge } from "@/components/ui/badge"; +import { TypeAnimation } from "react-type-animation"; + +const HeroSection = () => { + return ( +
+
+ {/* Background Image */} + Jakarta Monument + + {/* Overlay Content */} +
+ + Portal Resmi + + +

+ +

+ +

+ Dinas Lingkungan Hidup Provinsi DKI Jakarta +

+
+
+
+ ); +}; + +export default HeroSection; diff --git a/resources/js/components/Home/Navbar.tsx b/resources/js/components/Home/Navbar.tsx new file mode 100644 index 0000000..ffb1322 --- /dev/null +++ b/resources/js/components/Home/Navbar.tsx @@ -0,0 +1,184 @@ +import React, { useState, useEffect } from "react"; +import { Search, LogIn, Menu, X } from "lucide-react"; +import { + NavigationMenu, + NavigationMenuList, + NavigationMenuItem, +} from "@/components/ui/navigation-menu"; +import { Button } from "@/components/ui/button"; +import { Link } from "@inertiajs/react"; +import { + Drawer, + DrawerClose, + DrawerContent, + DrawerHeader, + DrawerTitle, + DrawerTrigger, +} from "@/components/ui/drawer"; +import RunningText from "./RunningText"; + +interface NavItemsProps { + mobile?: boolean; + onClose?: () => void; +} + +const Navbar = () => { + const [isScrolled, setIsScrolled] = useState(false); + const [isDrawerOpen, setIsDrawerOpen] = useState(false); + + // Handle scroll effect + useEffect(() => { + const handleScroll = () => { + const scrollPosition = window.scrollY; + setIsScrolled(scrollPosition > 50); + }; + + window.addEventListener("scroll", handleScroll); + return () => window.removeEventListener("scroll", handleScroll); + }, []); + + const NavItems: React.FC = ({ mobile = false, onClose }) => ( + <> + + + HOME + + + {["PENGUMUMAN", "UNDANGAN", "PERATURAN"].map((item) => ( + + + {item} + + + ))} + + + + + ); + + return ( +
+ + +
+
+
+ + Logo + + + + + + + + +
+ + Login + + + + + + + + + Menu + + +
+ + + + setIsDrawerOpen(false) + } + /> + + +
+ + + +
+
+
+ +
+ + LOGIN + +
+
+
+
+
+ ); +}; + +export default Navbar; diff --git a/resources/js/components/Home/Pengumuman.tsx b/resources/js/components/Home/Pengumuman.tsx new file mode 100644 index 0000000..d639e62 --- /dev/null +++ b/resources/js/components/Home/Pengumuman.tsx @@ -0,0 +1,121 @@ +import React from "react"; +import { Button } from "@/components/ui/button"; +import { Card, CardContent } from "@/components/ui/card"; +import { Badge } from "@/components/ui/badge"; +import { ArrowRight } from "lucide-react"; + +const announcements = [ + { + id: 1, + title_page: "Pengumuman", + alt_image: "Pengumuman", + date: "16 Januari 2025", + title: "Pelatihan & Sertifikasi Online Bidang Pengendalian Pencemaran Air Dan Udara", + description: + "Kegiatan Pelatihan Dan Uji Sertifikasi Tersebut Akan Diselenggarakan Sebagaimana Jadwal Terlampir, Kegiatan Tersebut Bekerjasama Dengan Lembaga P...", + image: "/assets/img1.jpg", + }, + { + id: 2, + title_page: "Pengumuman", + alt_image: "Pengumuman", + date: "12 Desember 2024", + title: "Pembinaan Pelaporan secara Online Pengelolaan Lingkungan melalui situs Status Ketaatan Lingkungan (SKL)", + description: + "Sukolompok Pengawasan Lingkungan Bidang Pengawasan dan Penataan Hukum Dinas Lingkungan Hidup Prov. DKI Jakarta...", + image: "/assets/img1.jpg", + }, + { + id: 3, + title_page: "Pengumuman", + alt_image: "Pengumuman", + date: "12 Desember 2024", + title: "Pembinaan Pelaporan secara Online Pengelolaan Lingkungan melalui situs Status Ketaatan Lingkungan (SKL)", + description: + "Sukolompok Pengawasan Lingkungan Bidang Pengawasan dan Penataan Hukum Dinas Lingkungan Hidup Prov. DKI Jakarta...", + image: "/assets/img1.jpg", + }, +]; + +const AnnouncementSection = () => { + return ( +
+
+

+ Pengumuman +

+ +
+ + {/* Highlight Announcement */} +
+ + {announcements[0].alt_image} + + + {announcements[0].title_page} + +

+ {announcements[0].date} +

+

+ {announcements[0].title} +

+

+ {announcements[0].description} +

+ +
+
+
+ + {/* List of Announcements */} +
+ {announcements.map((item) => ( + + {item.alt_image} + + + {item.title_page} + +

+ {item.date} +

+

+ {item.title} +

+

+ {item.description} +

+ +
+
+ ))} +
+
+ ); +}; + +export default AnnouncementSection; diff --git a/resources/js/components/Home/Peraturan.tsx b/resources/js/components/Home/Peraturan.tsx new file mode 100644 index 0000000..16c42f5 --- /dev/null +++ b/resources/js/components/Home/Peraturan.tsx @@ -0,0 +1,94 @@ +import React from "react"; +import { Button } from "@/components/ui/button"; +import { Card, CardContent } from "@/components/ui/card"; +import { Badge } from "@/components/ui/badge"; +import { ArrowRight, FileText } from "lucide-react"; + +const regulations = [ + { + id: 1, + title_page: "Peraturan", + alt_image: "Peraturan", + date: "16 Januari 2025", + title: "Pelatihan & Sertifikasi Online Bidang Pengendalian Pencemaran Air Dan Udara", + description: + "Kegiatan Pelatihan Dan Uji Sertifikasi Tersebut Akan Diselenggarakan Sebagaimana Jadwal Terlampir, Kegiatan Tersebut Bekerjasama Dengan Lembaga P...", + image: "/assets/img1.jpg", + }, + { + id: 2, + title_page: "Peraturan", + alt_image: "Peraturan", + date: "12 Desember 2024", + title: "Pembinaan Pelaporan secara Online Pengelolaan Lingkungan melalui situs Status Ketaatan Lingkungan (SKL)", + description: + "Sukolompok Pengawasan Lingkungan Bidang Pengawasan dan Penataan Hukum Dinas Lingkungan Hidup Prov. DKI Jakarta...", + image: "/assets/img1.jpg", + }, +]; + +const RegulationSection = () => { + return ( +
+ {/* Background Green Box */} +
+ +
+ {/* Green Info Box */} +
+
+ +
+ + Informasi + +

Peraturan

+

+ Kegiatan Pelatihan Dan Uji Sertifikasi Tersebut Akan + Diselenggarakan Sebagaimana Jadwal Terlampir, Kegiatan + Tersebut Bekerjasama Dengan Lembaga P... +

+ +
+ + {/* List of Regulations */} +
+ {regulations.map((item) => ( + + {item.alt_image} + + + {item.title_page} + +

+ {item.date} +

+

+ {item.title} +

+

+ {item.description} +

+ +
+
+ ))} +
+
+
+ ); +}; + +export default RegulationSection; diff --git a/resources/js/components/Home/PopupModal.tsx b/resources/js/components/Home/PopupModal.tsx new file mode 100644 index 0000000..2a7c43d --- /dev/null +++ b/resources/js/components/Home/PopupModal.tsx @@ -0,0 +1,73 @@ +// PopupModal.js +import React, { useState } from "react"; +import { Button } from "@/components/ui/button"; +import { X, ArrowLeft, ArrowRight } from "lucide-react"; + +const PopupModal = ({ onClose }: { onClose: () => void }) => { + const slides = [ + { + title: "Pelatihan dan Sertifikasi Online Bidang Pengendalian Pencemaran Udara", + image: "/assets/popup-1.jpeg", + description: + "Kegiatan ini diselenggarakan oleh DLH Provinsi DKI Jakarta bekerja sama dengan LSP Tersertifikasi BNSP.", + }, + { + title: "Workshop Peningkatan Kapasitas Pengendalian Pencemaran Udara", + image: "/assets/popup-2.jpeg", + description: + "Workshop ini bertujuan untuk meningkatkan pengetahuan dan keterampilan di bidang lingkungan hidup.", + }, + { + title: "Sosialisasi Program Ramah Lingkungan", + image: "/assets/popup-2.jpeg", + description: + "DLH DKI Jakarta mengajak masyarakat untuk lebih peduli terhadap lingkungan sekitar.", + }, + ]; + + const [currentSlide, setCurrentSlide] = useState(0); + + const nextSlide = () => { + setCurrentSlide((prev) => (prev + 1) % slides.length); + }; + + const prevSlide = () => { + setCurrentSlide((prev) => (prev - 1 + slides.length) % slides.length); + }; + + return ( +
+
+ +

+ {slides[currentSlide].title} +

+ Popup Slide Image +

+ {slides[currentSlide].description} +

+
+ + +
+
+ +
+
+
+ ); +}; + +export default PopupModal; diff --git a/resources/js/components/Home/RunningText.tsx b/resources/js/components/Home/RunningText.tsx new file mode 100644 index 0000000..39bc7cd --- /dev/null +++ b/resources/js/components/Home/RunningText.tsx @@ -0,0 +1,45 @@ +import React, { useState, useEffect } from "react"; +import { Megaphone } from "lucide-react"; + +const messages = [ + "Peraturan Menteri Lingkungan Hidup dan Kehutanan No. 14 Tahun 2024 Tentang Penyelenggaraan Pengawasan dan Sanksi Administratif Lingkungan Hidup", + "Workshop Peningkatan Kapasitas Pengendalian Pencemaran Udara akan diselenggarakan pada bulan depan.", + "DLH DKI Jakarta mengajak masyarakat untuk berpartisipasi dalam program lingkungan ramah sampah.", +]; + +export default function RunningText() { + const [currentMessageIndex, setCurrentMessageIndex] = useState(0); + const [isVisible, setIsVisible] = useState(true); + + useEffect(() => { + const interval = setInterval(() => { + setIsVisible(false); // Hide current message + + setTimeout(() => { + setCurrentMessageIndex( + (prevIndex) => (prevIndex + 1) % messages.length + ); + setIsVisible(true); // Show new message + }, 500); // Wait for fade out animation + }, 3000); // Change message every 3 seconds + + return () => clearInterval(interval); + }, []); + + return ( +
+
+ +
+

+ {messages[currentMessageIndex]} +

+
+
+
+ ); +} diff --git a/resources/js/components/Home/Tentang.tsx b/resources/js/components/Home/Tentang.tsx new file mode 100644 index 0000000..84b331a --- /dev/null +++ b/resources/js/components/Home/Tentang.tsx @@ -0,0 +1,50 @@ +import React from "react"; +import { Badge } from "../ui/badge"; + +export default function Tentang() { + return ( +
+
+
+ {/* Circle Image */} + Circular gradient + + {/* Text Content */} +
+
+ + Tentang + + +

+ Status Ketaatan Lingkungan +
+ (SKL) +

+ +

+ Lorem Ipsum Is Simply Dummy Text Of The Printing + And Typesetting Industry. Lorem Ipsum Has Been + The Industry's Standard Dummy Text Ever Since + The 1500s, When An Unknown Printer Took A Galley + Of Type And Scrambled It To Make A Type Specimen + Book. It Has Survived Not Only Five Centuries, + But Also The Leap Into Electronic Typesetting, + Remaining Essentially Unchanged. It Was + Popularised In The 1960s With The Release Of + Letraset Sheets Containing Lorem Ipsum Passages, + And More Recently With Desktop Publishing + Software Like Aldus PageMaker Including Versions + Of Lorem Ipsum. +

+
+
+
+
+
+ ); +} diff --git a/resources/js/components/Home/Undangan.tsx b/resources/js/components/Home/Undangan.tsx new file mode 100644 index 0000000..5542616 --- /dev/null +++ b/resources/js/components/Home/Undangan.tsx @@ -0,0 +1,94 @@ +import React from "react"; +import { Button } from "@/components/ui/button"; +import { Badge } from "@/components/ui/badge"; +import { Card, CardContent } from "@/components/ui/card"; +import { ArrowRight } from "lucide-react"; + +const undangans = [ + { + id: 1, + title_page: "Undangan", + alt_image: "Undangan", + date: "16 Januari 2025", + title: "Pelatihan & Sertifikasi Online Bidang Pengendalian Pencemaran Air Dan Udara", + description: + "Kegiatan Pelatihan Dan Uji Sertifikasi Tersebut Akan Diselenggarakan Sebagaimana Jadwal Terlampir, Kegiatan Tersebut Bekerjasama Dengan Lembaga P...", + image: "/assets/img1.jpg", + }, + { + id: 2, + title_page: "Undangan", + alt_image: "Undangan", + date: "12 Desember 2024", + title: "Pembinaan Pelaporan secara Online Pengelolaan Lingkungan melalui situs Status Ketaatan Lingkungan (SKL)", + description: + "Sukolompok Pengawasan Lingkungan Bidang Pengawasan dan Penataan Hukum Dinas Lingkungan Hidup Prov. DKI Jakarta...", + image: "/assets/img1.jpg", + }, + { + id: 3, + title_page: "Undangan", + alt_image: "Undangan", + date: "12 Desember 2024", + title: "Pembinaan Pelaporan secara Online Pengelolaan Lingkungan melalui situs Status Ketaatan Lingkungan (SKL)", + description: + "Sukolompok Pengawasan Lingkungan Bidang Pengawasan dan Penataan Hukum Dinas Lingkungan Hidup Prov. DKI Jakarta...", + image: "/assets/img1.jpg", + }, +]; + +const UndanganSection = () => { + return ( +
+
+
+ + Informasi + +

+ Undangan +

+
+ +
+ + {/* List of Announcements */} +
+ {undangans.map((item) => ( + + {item.alt_image} + + + {item.title_page} + +

+ {item.date} +

+

+ {item.title} +

+

+ {item.description} +

+ +
+
+ ))} +
+
+ ); +}; + +export default UndanganSection; diff --git a/resources/js/components/Pengumuman/CardPengumuman.tsx b/resources/js/components/Pengumuman/CardPengumuman.tsx new file mode 100644 index 0000000..da3dd52 --- /dev/null +++ b/resources/js/components/Pengumuman/CardPengumuman.tsx @@ -0,0 +1,115 @@ +import React from "react"; +import { Button } from "@/components/ui/button"; +import { Badge } from "@/components/ui/badge"; +import { Card, CardContent } from "@/components/ui/card"; +import { ArrowRight } from "lucide-react"; + +const pengumumans = [ + { + id: 1, + title_page: "Pengumuman", + alt_image: "Pengumuman", + date: "16 Januari 2025", + title: "Pelatihan & Sertifikasi Online Bidang Pengendalian Pencemaran Air Dan Udara", + description: + "Kegiatan Pelatihan Dan Uji Sertifikasi Tersebut Akan Diselenggarakan Sebagaimana Jadwal Terlampir, Kegiatan Tersebut Bekerjasama Dengan Lembaga P...", + image: "/assets/img1.jpg", + }, + { + id: 2, + title_page: "Pengumuman", + alt_image: "Pengumuman", + date: "12 Desember 2024", + title: "Pembinaan Pelaporan secara Online Pengelolaan Lingkungan melalui situs Status Ketaatan Lingkungan (SKL)", + description: + "Sukolompok Pengawasan Lingkungan Bidang Pengawasan dan Penataan Hukum Dinas Lingkungan Hidup Prov. DKI Jakarta...", + image: "/assets/img1.jpg", + }, + { + id: 3, + title_page: "Pengumuman", + alt_image: "Pengumuman", + date: "12 Desember 2024", + title: "Pembinaan Pelaporan secara Online Pengelolaan Lingkungan melalui situs Status Ketaatan Lingkungan (SKL)", + description: + "Sukolompok Pengawasan Lingkungan Bidang Pengawasan dan Penataan Hukum Dinas Lingkungan Hidup Prov. DKI Jakarta...", + image: "/assets/img1.jpg", + }, + { + id: 4, + title_page: "Pengumuman", + alt_image: "Pengumuman", + date: "12 Desember 2024", + title: "Pembinaan Pelaporan secara Online Pengelolaan Lingkungan melalui situs Status Ketaatan Lingkungan (SKL)", + description: + "Sukolompok Pengawasan Lingkungan Bidang Pengawasan dan Penataan Hukum Dinas Lingkungan Hidup Prov. DKI Jakarta...", + image: "/assets/img1.jpg", + }, + { + id: 5, + title_page: "Pengumuman", + alt_image: "Pengumuman", + date: "12 Desember 2024", + title: "Pembinaan Pelaporan secara Online Pengelolaan Lingkungan melalui situs Status Ketaatan Lingkungan (SKL)", + description: + "Sukolompok Pengawasan Lingkungan Bidang Pengawasan dan Penataan Hukum Dinas Lingkungan Hidup Prov. DKI Jakarta...", + image: "/assets/img1.jpg", + }, + { + id: 6, + title_page: "Pengumuman", + alt_image: "Pengumuman", + date: "12 Desember 2024", + title: "Pembinaan Pelaporan secara Online Pengelolaan Lingkungan melalui situs Status Ketaatan Lingkungan (SKL)", + description: + "Sukolompok Pengawasan Lingkungan Bidang Pengawasan dan Penataan Hukum Dinas Lingkungan Hidup Prov. DKI Jakarta...", + image: "/assets/img1.jpg", + }, +]; + +const CardPengumuman = () => { + return ( +
+ {/* List of Announcements */} +
+ {pengumumans.map((item) => ( + + {item.alt_image} + + + {item.title_page} + +

+ {item.date} +

+

+ {item.title} +

+

+ {item.description} +

+ +
+
+ ))} +
+
+ +
+
+ ); +}; + +export default CardPengumuman; diff --git a/resources/js/components/Pengumuman/CardPeraturan.tsx b/resources/js/components/Pengumuman/CardPeraturan.tsx new file mode 100644 index 0000000..68b4da9 --- /dev/null +++ b/resources/js/components/Pengumuman/CardPeraturan.tsx @@ -0,0 +1,115 @@ +import React from "react"; +import { Button } from "@/components/ui/button"; +import { Badge } from "@/components/ui/badge"; +import { Card, CardContent } from "@/components/ui/card"; +import { ArrowRight } from "lucide-react"; + +const peraturans = [ + { + id: 1, + title_page: "Peraturan", + alt_image: "Peraturan", + date: "16 Januari 2025", + title: "Pelatihan & Sertifikasi Online Bidang Pengendalian Pencemaran Air Dan Udara", + description: + "Kegiatan Pelatihan Dan Uji Sertifikasi Tersebut Akan Diselenggarakan Sebagaimana Jadwal Terlampir, Kegiatan Tersebut Bekerjasama Dengan Lembaga P...", + image: "/assets/img1.jpg", + }, + { + id: 2, + title_page: "Peraturan", + alt_image: "Peraturan", + date: "12 Desember 2024", + title: "Pembinaan Pelaporan secara Online Pengelolaan Lingkungan melalui situs Status Ketaatan Lingkungan (SKL)", + description: + "Sukolompok Pengawasan Lingkungan Bidang Pengawasan dan Penataan Hukum Dinas Lingkungan Hidup Prov. DKI Jakarta...", + image: "/assets/img1.jpg", + }, + { + id: 3, + title_page: "Peraturan", + alt_image: "Peraturan", + date: "12 Desember 2024", + title: "Pembinaan Pelaporan secara Online Pengelolaan Lingkungan melalui situs Status Ketaatan Lingkungan (SKL)", + description: + "Sukolompok Pengawasan Lingkungan Bidang Pengawasan dan Penataan Hukum Dinas Lingkungan Hidup Prov. DKI Jakarta...", + image: "/assets/img1.jpg", + }, + { + id: 4, + title_page: "Peraturan", + alt_image: "Peraturan", + date: "12 Desember 2024", + title: "Pembinaan Pelaporan secara Online Pengelolaan Lingkungan melalui situs Status Ketaatan Lingkungan (SKL)", + description: + "Sukolompok Pengawasan Lingkungan Bidang Pengawasan dan Penataan Hukum Dinas Lingkungan Hidup Prov. DKI Jakarta...", + image: "/assets/img1.jpg", + }, + { + id: 5, + title_page: "Peraturan", + alt_image: "Peraturan", + date: "12 Desember 2024", + title: "Pembinaan Pelaporan secara Online Pengelolaan Lingkungan melalui situs Status Ketaatan Lingkungan (SKL)", + description: + "Sukolompok Pengawasan Lingkungan Bidang Pengawasan dan Penataan Hukum Dinas Lingkungan Hidup Prov. DKI Jakarta...", + image: "/assets/img1.jpg", + }, + { + id: 6, + title_page: "Peraturan", + alt_image: "Peraturan", + date: "12 Desember 2024", + title: "Pembinaan Pelaporan secara Online Pengelolaan Lingkungan melalui situs Status Ketaatan Lingkungan (SKL)", + description: + "Sukolompok Pengawasan Lingkungan Bidang Pengawasan dan Penataan Hukum Dinas Lingkungan Hidup Prov. DKI Jakarta...", + image: "/assets/img1.jpg", + }, +]; + +const CardPeraturan = () => { + return ( +
+ {/* List of Announcements */} +
+ {peraturans.map((item) => ( + + {item.alt_image} + + + {item.title_page} + +

+ {item.date} +

+

+ {item.title} +

+

+ {item.description} +

+ +
+
+ ))} +
+
+ +
+
+ ); +}; + +export default CardPeraturan; diff --git a/resources/js/components/Pengumuman/CardUndangan.tsx b/resources/js/components/Pengumuman/CardUndangan.tsx new file mode 100644 index 0000000..4a1b0f5 --- /dev/null +++ b/resources/js/components/Pengumuman/CardUndangan.tsx @@ -0,0 +1,115 @@ +import React from "react"; +import { Button } from "@/components/ui/button"; +import { Badge } from "@/components/ui/badge"; +import { Card, CardContent } from "@/components/ui/card"; +import { ArrowRight } from "lucide-react"; + +const undangans = [ + { + id: 1, + title_page: "Undangan", + alt_image: "Undangan", + date: "16 Januari 2025", + title: "Pelatihan & Sertifikasi Online Bidang Pengendalian Pencemaran Air Dan Udara", + description: + "Kegiatan Pelatihan Dan Uji Sertifikasi Tersebut Akan Diselenggarakan Sebagaimana Jadwal Terlampir, Kegiatan Tersebut Bekerjasama Dengan Lembaga P...", + image: "/assets/img1.jpg", + }, + { + id: 2, + title_page: "Undangan", + alt_image: "Undangan", + date: "12 Desember 2024", + title: "Pembinaan Pelaporan secara Online Pengelolaan Lingkungan melalui situs Status Ketaatan Lingkungan (SKL)", + description: + "Sukolompok Pengawasan Lingkungan Bidang Pengawasan dan Penataan Hukum Dinas Lingkungan Hidup Prov. DKI Jakarta...", + image: "/assets/img1.jpg", + }, + { + id: 3, + title_page: "Undangan", + alt_image: "Undangan", + date: "12 Desember 2024", + title: "Pembinaan Pelaporan secara Online Pengelolaan Lingkungan melalui situs Status Ketaatan Lingkungan (SKL)", + description: + "Sukolompok Pengawasan Lingkungan Bidang Pengawasan dan Penataan Hukum Dinas Lingkungan Hidup Prov. DKI Jakarta...", + image: "/assets/img1.jpg", + }, + { + id: 4, + title_page: "Undangan", + alt_image: "Undangan", + date: "12 Desember 2024", + title: "Pembinaan Pelaporan secara Online Pengelolaan Lingkungan melalui situs Status Ketaatan Lingkungan (SKL)", + description: + "Sukolompok Pengawasan Lingkungan Bidang Pengawasan dan Penataan Hukum Dinas Lingkungan Hidup Prov. DKI Jakarta...", + image: "/assets/img1.jpg", + }, + { + id: 5, + title_page: "Undangan", + alt_image: "Undangan", + date: "12 Desember 2024", + title: "Pembinaan Pelaporan secara Online Pengelolaan Lingkungan melalui situs Status Ketaatan Lingkungan (SKL)", + description: + "Sukolompok Pengawasan Lingkungan Bidang Pengawasan dan Penataan Hukum Dinas Lingkungan Hidup Prov. DKI Jakarta...", + image: "/assets/img1.jpg", + }, + { + id: 6, + title_page: "Undangan", + alt_image: "Undangan", + date: "12 Desember 2024", + title: "Pembinaan Pelaporan secara Online Pengelolaan Lingkungan melalui situs Status Ketaatan Lingkungan (SKL)", + description: + "Sukolompok Pengawasan Lingkungan Bidang Pengawasan dan Penataan Hukum Dinas Lingkungan Hidup Prov. DKI Jakarta...", + image: "/assets/img1.jpg", + }, +]; + +const CardUndangan = () => { + return ( +
+ {/* List of Announcements */} +
+ {undangans.map((item) => ( + + {item.alt_image} + + + {item.title_page} + +

+ {item.date} +

+

+ {item.title} +

+

+ {item.description} +

+ +
+
+ ))} +
+
+ +
+
+ ); +}; + +export default CardUndangan; diff --git a/resources/js/components/Pengumuman/HeroSecond.tsx b/resources/js/components/Pengumuman/HeroSecond.tsx new file mode 100644 index 0000000..9d82aef --- /dev/null +++ b/resources/js/components/Pengumuman/HeroSecond.tsx @@ -0,0 +1,29 @@ +import React from "react"; + +interface HeroSecondProps { + title: string; +} + +export default function HeroSecond({ title }: HeroSecondProps) { + return ( + <> +
+
+ {/* Background Image */} + Hero Section + + {/* Overlay Content */} +
+

+ {title} +

+
+
+
+ + ); +} diff --git a/resources/js/components/ui/drawer.tsx b/resources/js/components/ui/drawer.tsx new file mode 100644 index 0000000..92cf2ff --- /dev/null +++ b/resources/js/components/ui/drawer.tsx @@ -0,0 +1,118 @@ +"use client"; + +import * as React from "react"; +import { Drawer as DrawerPrimitive } from "vaul"; + +import { cn } from "@/lib/utils"; + +const Drawer = ({ + shouldScaleBackground = true, + ...props +}: React.ComponentProps) => ( + +); +Drawer.displayName = "Drawer"; + +const DrawerTrigger = DrawerPrimitive.Trigger; + +const DrawerPortal = DrawerPrimitive.Portal; + +const DrawerClose = DrawerPrimitive.Close; + +const DrawerOverlay = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +DrawerOverlay.displayName = DrawerPrimitive.Overlay.displayName; + +const DrawerContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + +
+ {children} + + +)); +DrawerContent.displayName = "DrawerContent"; + +const DrawerHeader = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
+); +DrawerHeader.displayName = "DrawerHeader"; + +const DrawerFooter = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
+); +DrawerFooter.displayName = "DrawerFooter"; + +const DrawerTitle = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +DrawerTitle.displayName = DrawerPrimitive.Title.displayName; + +const DrawerDescription = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +DrawerDescription.displayName = DrawerPrimitive.Description.displayName; + +export { + Drawer, + DrawerPortal, + DrawerOverlay, + DrawerTrigger, + DrawerClose, + DrawerContent, + DrawerHeader, + DrawerFooter, + DrawerTitle, + DrawerDescription, +}; diff --git a/resources/js/components/ui/navigation-menu.tsx b/resources/js/components/ui/navigation-menu.tsx new file mode 100644 index 0000000..1419f56 --- /dev/null +++ b/resources/js/components/ui/navigation-menu.tsx @@ -0,0 +1,128 @@ +import * as React from "react" +import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu" +import { cva } from "class-variance-authority" +import { ChevronDown } from "lucide-react" + +import { cn } from "@/lib/utils" + +const NavigationMenu = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + {children} + + +)) +NavigationMenu.displayName = NavigationMenuPrimitive.Root.displayName + +const NavigationMenuList = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +NavigationMenuList.displayName = NavigationMenuPrimitive.List.displayName + +const NavigationMenuItem = NavigationMenuPrimitive.Item + +const navigationMenuTriggerStyle = cva( + "group inline-flex h-10 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[active]:bg-accent/50 data-[state=open]:bg-accent/50" +) + +const NavigationMenuTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + {children}{" "} + +)) +NavigationMenuTrigger.displayName = NavigationMenuPrimitive.Trigger.displayName + +const NavigationMenuContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +NavigationMenuContent.displayName = NavigationMenuPrimitive.Content.displayName + +const NavigationMenuLink = NavigationMenuPrimitive.Link + +const NavigationMenuViewport = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( +
+ +
+)) +NavigationMenuViewport.displayName = + NavigationMenuPrimitive.Viewport.displayName + +const NavigationMenuIndicator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +
+ +)) +NavigationMenuIndicator.displayName = + NavigationMenuPrimitive.Indicator.displayName + +export { + navigationMenuTriggerStyle, + NavigationMenu, + NavigationMenuList, + NavigationMenuItem, + NavigationMenuContent, + NavigationMenuTrigger, + NavigationMenuLink, + NavigationMenuIndicator, + NavigationMenuViewport, +} diff --git a/resources/js/pages/Pengumuman.tsx b/resources/js/pages/Pengumuman.tsx new file mode 100644 index 0000000..01697e2 --- /dev/null +++ b/resources/js/pages/Pengumuman.tsx @@ -0,0 +1,16 @@ +import React from "react"; +import Navbar from "@/components/Home/Navbar"; +import Footer from "@/components/Home/Footer"; +import HeroSecond from "@/components/Pengumuman/HeroSecond"; +import CardPengumuman from "@/components/Pengumuman/CardPengumuman"; + +export default function Pengumuman() { + return ( + <> + + + +