nuxt-layer-core 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/.claude/settings.local.json +8 -0
  2. package/app/app.config.ts +5 -0
  3. package/app/app.vue +11 -0
  4. package/app/assets/css/main.css +113 -0
  5. package/app/components/.gitkeep +0 -0
  6. package/app/components/ui/sonner/Sonner.vue +62 -0
  7. package/app/components/ui/sonner/index.ts +1 -0
  8. package/app/composables/.gitkeep +0 -0
  9. package/app/layers/solution/app/assets/proxmox-css/main.css +89 -0
  10. package/app/layers/solution/app/assets/proxmox-css/proxmox-utils.css +68 -0
  11. package/app/layers/solution/app/components/ClusterDiagram.vue +72 -0
  12. package/app/layers/solution/app/components/CoursesSection.vue +246 -0
  13. package/app/layers/solution/app/components/CtaSection.vue +329 -0
  14. package/app/layers/solution/app/components/FeaturesSection.vue +67 -0
  15. package/app/layers/solution/app/components/HeroSection.vue +144 -0
  16. package/app/layers/solution/app/components/PricingPlansSection.vue +434 -0
  17. package/app/layers/solution/app/components/RegistrationForm.vue +256 -0
  18. package/app/layers/solution/app/components/TestimonialsSection.vue +58 -0
  19. package/app/layers/solution/app/components/TheFooter.vue +61 -0
  20. package/app/layers/solution/app/components/TheHeader.vue +189 -0
  21. package/app/layers/solution/app/components/proxmox/AppIcon.vue +45 -0
  22. package/app/layers/solution/app/components/proxmox/ComparisonSection.vue +54 -0
  23. package/app/layers/solution/app/components/proxmox/FaqSection.vue +58 -0
  24. package/app/layers/solution/app/components/proxmox/HciOverviewSection.vue +37 -0
  25. package/app/layers/solution/app/components/proxmox/HeroSection.vue +74 -0
  26. package/app/layers/solution/app/components/proxmox/TestimonialsSection.vue +44 -0
  27. package/app/layers/solution/app/components/proxmox/TrainingBenefitsSection.vue +37 -0
  28. package/app/layers/solution/app/components/proxmox/VeFeaturesSection.vue +55 -0
  29. package/app/layers/solution/app/composables/useActiveSection.ts +47 -0
  30. package/app/layers/solution/app/composables/useAuthApi.ts +244 -0
  31. package/app/layers/solution/app/composables/useAuthState.ts +16 -0
  32. package/app/layers/solution/app/composables/useCookie.ts +79 -0
  33. package/app/layers/solution/app/composables/useCookieHelper.ts +81 -0
  34. package/app/layers/solution/app/composables/useCrmApi.ts +32 -0
  35. package/app/layers/solution/app/composables/useDynamicCollection.ts +23 -0
  36. package/app/layers/solution/app/composables/useScrollAnimate.ts +40 -0
  37. package/app/layers/solution/app/composables/useScrollToSection.ts +13 -0
  38. package/app/layers/solution/app/composables/useSolutionApi.ts +55 -0
  39. package/app/layers/solution/app/composables/useToast.ts +14 -0
  40. package/app/layers/solution/app/data/proxmox-content.ts +158 -0
  41. package/app/layers/solution/app/images/Proxmox HCI.png +0 -0
  42. package/app/layers/solution/app/images/image_from_https_hercules_cdn.com_file_6dztkvkfnip0ud23tzzvu57c.png +0 -0
  43. package/app/layers/solution/app/layouts/default.vue +5 -0
  44. package/app/layers/solution/app/nuxt.config.ts +9 -0
  45. package/app/layers/solution/app/pages/cap-nhat-thong-tin/index.vue +302 -0
  46. package/app/layers/solution/app/pages/dang-ky/index.vue +627 -0
  47. package/app/layers/solution/app/pages/dang-nhap/index.vue +208 -0
  48. package/app/layers/solution/app/pages/doi-mat-khau/index.vue +237 -0
  49. package/app/layers/solution/app/pages/giai-phap-proxmox/[slug]/index.vue +37 -0
  50. package/app/layers/solution/app/pages/giai-phap-proxmox/[slug]/proxmox-hci/index.vue +45 -0
  51. package/app/layers/solution/app/pages/giai-phap-proxmox/dang-ky-khoa-hoc/[slug].vue +131 -0
  52. package/app/layers/solution/app/pages/quen-mat-khau/index.vue +136 -0
  53. package/app/layers/solution/app/pages/xac-thuc/index.vue +320 -0
  54. package/app/layers/solution/app/plugins/reveal.ts +56 -0
  55. package/app/layers/solution/app/public/images/image_from_https_hercules_cdn.com_file_6dztkvkfnip0ud23tzzvu57c.png +0 -0
  56. package/app/layers/solution/app/public/images/logo-lvs-1300x330.png +0 -0
  57. package/app/layouts/auth.vue +71 -0
  58. package/app/lib/utils.ts +7 -0
  59. package/app/middleware/.gitkeep +0 -0
  60. package/app/modules/layer-route-priority.ts +60 -0
  61. package/app/pages/index.vue +9 -0
  62. package/app/pages/san-pham-proxmox.vue +8 -0
  63. package/app/plugins/.gitkeep +0 -0
  64. package/app/plugins/sdk.ts +29 -0
  65. package/app/stores/.gitkeep +0 -0
  66. package/app/types/sdk.d.ts +15 -0
  67. package/components.json +24 -0
  68. package/nuxt.config.ts +104 -0
  69. package/package.json +52 -0
  70. package/public/.gitkeep +0 -0
  71. package/server/api/.gitkeep +0 -0
  72. package/server/utils/.gitkeep +0 -0
  73. package/tailwind.config.js +96 -0
  74. package/tsconfig.base.json +18 -0
  75. package/tsconfig.json +18 -0
  76. package/website-longvan-1.1.6.tgz +0 -0
  77. package/website-longvan-1.1.7.tgz +0 -0
  78. package/website-longvan-1.1.8.tgz +0 -0
@@ -0,0 +1,29 @@
1
+ // plugins/sdk.ts
2
+
3
+ import { SDK } from "@longvansoftware/service-js-client";
4
+ // import { SDK } from "../../../storefront-js-client/src/lib/SDK";
5
+ import { useRuntimeConfig } from '#app'
6
+
7
+ export default defineNuxtPlugin(nuxtApp => {
8
+ if (nuxtApp?.vueApp?.config?.globalProperties?.$sdk) return;
9
+
10
+ const config = useRuntimeConfig();
11
+
12
+ // Ép kiểu từ `unknown` thành kiểu cụ thể
13
+ const { ORG_ID, STORE_ID, ENVIROMENT } = config.public as unknown as {
14
+ ORG_ID: string;
15
+ STORE_ID: string;
16
+ ENVIROMENT: string;
17
+ };
18
+
19
+ // Tạo instance SDK
20
+ const sdkInstance = new SDK(
21
+ ORG_ID,
22
+ STORE_ID,
23
+ "U2FsdGVkX1/Cci00sR9oVNTJxPhwM7jKkQP6xg97IVI=",
24
+ ENVIROMENT
25
+ );
26
+
27
+ // Inject vào nuxtApp để sử dụng toàn ứng dụng
28
+ nuxtApp.provide("sdk", sdkInstance);
29
+ });
File without changes
@@ -0,0 +1,15 @@
1
+ import type { SDK } from '../../../storefront-js-client/src/lib/SDK'
2
+
3
+ declare module '#app' {
4
+ interface NuxtApp {
5
+ $sdk: SDK
6
+ }
7
+ }
8
+
9
+ declare module 'vue' {
10
+ interface ComponentCustomProperties {
11
+ $sdk: SDK
12
+ }
13
+ }
14
+
15
+ export {}
@@ -0,0 +1,24 @@
1
+ {
2
+ "$schema": "https://shadcn-vue.com/schema.json",
3
+ "style": "reka-nova",
4
+ "font": "inter",
5
+ "typescript": true,
6
+ "tailwind": {
7
+ "config": "tailwind.config.js",
8
+ "css": "app/assets/css/main.css",
9
+ "baseColor": "neutral",
10
+ "cssVariables": true,
11
+ "prefix": ""
12
+ },
13
+ "iconLibrary": "lucide",
14
+ "rtl": false,
15
+ "pointer": false,
16
+ "aliases": {
17
+ "components": "@/components",
18
+ "utils": "@/lib/utils",
19
+ "ui": "@/components/ui",
20
+ "lib": "@/lib",
21
+ "composables": "@/composables"
22
+ },
23
+ "registries": {}
24
+ }
package/nuxt.config.ts ADDED
@@ -0,0 +1,104 @@
1
+ export default defineNuxtConfig({
2
+ srcDir: "app/",
3
+
4
+ compatibilityDate: "2025-04-25",
5
+
6
+ ssr: true,
7
+
8
+ devtools: {
9
+ enabled: true,
10
+ },
11
+
12
+ future: {
13
+ compatibilityVersion: 4,
14
+ },
15
+
16
+ extends: [
17
+ "./app/layers/solution/app"
18
+ ],
19
+
20
+ typescript: {
21
+ strict: true,
22
+ typeCheck: false,
23
+ },
24
+
25
+ modules: [
26
+ "@pinia/nuxt",
27
+ "@nuxt/icon",
28
+ "@nuxt/image",
29
+ "@nuxtjs/tailwindcss",
30
+ "@nuxtjs/sitemap",
31
+ "@nuxtjs/strapi",
32
+ "nuxt-gtag",
33
+ // "./app/modules/layer-route-priority"
34
+ ],
35
+
36
+ // CSS loaded by consuming project via ~/assets/css/layer.css
37
+ // to ensure correct resolution when layer is in node_modules
38
+ // css: [
39
+ // "~/assets/css/main.css",
40
+ // ],
41
+
42
+ imports: {
43
+ dirs: [
44
+ "stores",
45
+ "services",
46
+ "utils",
47
+ "types",
48
+ "constants",
49
+ "hooks",
50
+ ],
51
+ },
52
+
53
+ components: [
54
+ {
55
+ path: "~/components",
56
+ pathPrefix: false,
57
+ },
58
+ ],
59
+
60
+ image: {
61
+ provider: "ipx",
62
+ },
63
+
64
+ icon: {
65
+ serverBundle: {
66
+ collections: ['lucide']
67
+ },
68
+ clientBundle: {
69
+ scan: false,
70
+ }
71
+ },
72
+
73
+ tailwindcss: {
74
+ viewer: false,
75
+ },
76
+
77
+ runtimeConfig: {
78
+ public: {
79
+ ORG_ID: process.env.ORG_ID,
80
+ STORE_ID: process.env.STORE_ID,
81
+ ENVIROMENT: process.env.ENVIROMENT,
82
+ ACCESSTOKEN_NAME: process.env.ACCESSTOKEN_NAME || 'accessToken',
83
+ },
84
+ },
85
+
86
+ hooks: {
87
+ "pages:extend"(pages) {
88
+
89
+ const layerPages = pages.filter(page =>
90
+ page.file?.includes("layers")
91
+ )
92
+
93
+ const sourcePages = pages.filter(page =>
94
+ !page.file?.includes("layers")
95
+ )
96
+
97
+
98
+ console.log("Layer pages", layerPages)
99
+ console.log("Source pages", sourcePages)
100
+
101
+ },
102
+ },
103
+
104
+ });
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "nuxt-layer-core",
3
+ "type": "module",
4
+ "private": false,
5
+ "version": "2.0.1",
6
+ "scripts": {
7
+ "build": "env-cmd -f .env nuxt build",
8
+ "dev": "env-cmd -f .env nuxt dev"
9
+ },
10
+ "dependencies": {
11
+ "@longvansoftware/service-js-client": "2.8.6",
12
+ "@lucide/vue": "^1.28.0",
13
+ "@nuxt/icon": "^2.1.0",
14
+ "@nuxt/image": "^2.0.0",
15
+ "@nuxtjs/sitemap": "^7.4.7",
16
+ "@nuxtjs/strapi": "^2.1.1",
17
+ "@nuxtjs/tailwindcss": "^6.14.0",
18
+ "@pinia/nuxt": "^0.11.3",
19
+ "@splidejs/vue-splide": "^0.6.12",
20
+ "@vueuse/core": "^14.4.0",
21
+ "aos": "^2.3.4",
22
+ "class-variance-authority": "^0.7.1",
23
+ "clsx": "^2.1.1",
24
+ "crypto-js": "^4.2.0",
25
+ "env-cmd": "^11.0.0",
26
+ "feather-icons": "^4.29.2",
27
+ "ipx": "^3.1.1",
28
+ "js-cookie": "^3.0.5",
29
+ "nuxt": "4.2.1",
30
+ "nuxt-gtag": "^4.1.0",
31
+ "pinia": "^3.0.4",
32
+ "qs": "^6.14.0",
33
+ "tailwind-merge": "^3.6.0",
34
+ "vue": "^3.5.24",
35
+ "vue-router": "^4.6.3",
36
+ "vue-sonner": "^2.0.9"
37
+ },
38
+ "packageManager": "yarn@1.22.22+sha1.ac34549e6aa8e7ead463a7407e1c7390f61a6610",
39
+ "devDependencies": {
40
+ "@iconify-json/lucide": "^1.2.120",
41
+ "@types/js-cookie": "^3.0.6",
42
+ "@types/node": "^24.10.1",
43
+ "@types/qs": "^6.14.0",
44
+ "autoprefixer": "10.4.20",
45
+ "postcss": "8.4.35",
46
+ "sass": "^1.94.2",
47
+ "shadcn-vue": "^2.8.1",
48
+ "tailwindcss": "3.4.15",
49
+ "tw-animate-css": "^1.4.0",
50
+ "vite-tsconfig-paths": "^5.1.4"
51
+ }
52
+ }
File without changes
File without changes
File without changes
@@ -0,0 +1,96 @@
1
+ /** @type {import('tailwindcss').Config} */
2
+ module.exports = {
3
+ darkMode: ["class"],
4
+ content: [
5
+ "./components/**/*.{vue,ts,js}",
6
+ "./layouts/**/*.{vue,ts,js}",
7
+ "./pages/**/*.{vue,ts,js}",
8
+ "./app.vue",
9
+ "./layers/**/*.{vue,ts,js}",
10
+ ],
11
+ theme: {
12
+ extend: {
13
+ keyframes: {
14
+ 'gentle-float': {
15
+ '0%, 100%': { transform: 'translateY(0)' },
16
+ '50%': { transform: 'translateY(-8px)' },
17
+ },
18
+ },
19
+ animation: {
20
+ 'float': 'gentle-float 5s ease-in-out infinite',
21
+ 'float-delayed': 'gentle-float 5s ease-in-out 1.2s infinite',
22
+ },
23
+ borderRadius: {
24
+ lg: 'var(--radius)',
25
+ md: 'calc(var(--radius) - 2px)',
26
+ sm: 'calc(var(--radius) - 4px)'
27
+ },
28
+ colors: {
29
+ background: 'hsl(var(--background))',
30
+ foreground: 'hsl(var(--foreground))',
31
+ card: {
32
+ DEFAULT: 'hsl(var(--card))',
33
+ foreground: 'hsl(var(--card-foreground))'
34
+ },
35
+ popover: {
36
+ DEFAULT: 'hsl(var(--popover))',
37
+ foreground: 'hsl(var(--popover-foreground))'
38
+ },
39
+ primary: {
40
+ DEFAULT: 'hsl(var(--primary))',
41
+ foreground: 'hsl(var(--primary-foreground))'
42
+ },
43
+ secondary: {
44
+ DEFAULT: 'hsl(var(--secondary))',
45
+ foreground: 'hsl(var(--secondary-foreground))'
46
+ },
47
+ muted: {
48
+ DEFAULT: 'hsl(var(--muted))',
49
+ foreground: 'hsl(var(--muted-foreground))'
50
+ },
51
+ accent: {
52
+ DEFAULT: 'hsl(var(--accent))',
53
+ foreground: 'hsl(var(--accent-foreground))'
54
+ },
55
+ destructive: {
56
+ DEFAULT: 'hsl(var(--destructive))',
57
+ foreground: 'hsl(var(--destructive-foreground))'
58
+ },
59
+ border: 'hsl(var(--border))',
60
+ input: 'hsl(var(--input))',
61
+ ring: 'hsl(var(--ring))',
62
+ chart: {
63
+ '1': 'hsl(var(--chart-1))',
64
+ '2': 'hsl(var(--chart-2))',
65
+ '3': 'hsl(var(--chart-3))',
66
+ '4': 'hsl(var(--chart-4))',
67
+ '5': 'hsl(var(--chart-5))'
68
+ }
69
+ }
70
+ }
71
+ },
72
+ plugins: [
73
+ function({ addUtilities }) {
74
+ addUtilities({
75
+ '.bg-grid': {
76
+ 'background-image': 'linear-gradient(to right, rgba(15, 23, 42, 0.05) 1px, transparent 1px), linear-gradient(to bottom, rgba(15, 23, 42, 0.05) 1px, transparent 1px)',
77
+ 'background-size': '40px 40px',
78
+ },
79
+ '[data-reveal]': {
80
+ 'opacity': '0',
81
+ 'transform': 'translateY(28px)',
82
+ 'transition': 'opacity 0.7s cubic-bezier(0.16, 1, 0.3, 1), transform 0.7s cubic-bezier(0.16, 1, 0.3, 1)',
83
+ 'will-change': 'opacity, transform',
84
+ },
85
+ '[data-reveal="fade"]': { 'transform': 'translateY(0)' },
86
+ '[data-reveal="left"]': { 'transform': 'translateX(-28px)' },
87
+ '[data-reveal="right"]': { 'transform': 'translateX(28px)' },
88
+ '[data-reveal="scale"]': { 'transform': 'scale(0.94)' },
89
+ '[data-reveal].reveal-visible': {
90
+ 'opacity': '1',
91
+ 'transform': 'translate(0, 0) scale(1)',
92
+ },
93
+ })
94
+ }
95
+ ],
96
+ };
@@ -0,0 +1,18 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ESNext",
4
+ "module": "ESNext",
5
+ "moduleResolution": "Node",
6
+ "strict": true,
7
+ "jsx": "preserve",
8
+ "esModuleInterop": true,
9
+ "skipLibCheck": true,
10
+ "types": ["node", "nuxt"],
11
+ "baseUrl": ".",
12
+ "paths": {
13
+ "#app": [".nuxt/types/app.d.ts"],
14
+ "#app/*": [".nuxt/types/app/*"]
15
+ }
16
+ },
17
+ "exclude": ["node_modules", ".nuxt", "dist"]
18
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,18 @@
1
+ {
2
+ "extends": "./tsconfig.base.json",
3
+ "files": [],
4
+ "references": [
5
+ {
6
+ "path": "./.nuxt/tsconfig.app.json"
7
+ },
8
+ {
9
+ "path": "./.nuxt/tsconfig.server.json"
10
+ },
11
+ {
12
+ "path": "./.nuxt/tsconfig.shared.json"
13
+ },
14
+ {
15
+ "path": "./.nuxt/tsconfig.node.json"
16
+ }
17
+ ]
18
+ }
Binary file
Binary file
Binary file