@promakeai/cli 0.9.8 → 0.9.10

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 (137) hide show
  1. package/README.md +111 -111
  2. package/dist/index.js +142 -142
  3. package/dist/registry/about-page.json +3 -3
  4. package/dist/registry/about-section.json +4 -4
  5. package/dist/registry/animations.json +2 -2
  6. package/dist/registry/announcement-bar.json +4 -4
  7. package/dist/registry/api.json +1 -1
  8. package/dist/registry/auth-core.json +2 -2
  9. package/dist/registry/bento-grid-section.json +4 -4
  10. package/dist/registry/blog-core.json +5 -5
  11. package/dist/registry/blog-list-page.json +4 -4
  12. package/dist/registry/blog-section.json +4 -4
  13. package/dist/registry/cards-carousel-section.json +4 -4
  14. package/dist/registry/cart-drawer.json +4 -4
  15. package/dist/registry/cart-page.json +4 -4
  16. package/dist/registry/case-study-page.json +3 -3
  17. package/dist/registry/category-section.json +4 -4
  18. package/dist/registry/checkout-page.json +4 -4
  19. package/dist/registry/coming-soon-page-minimal.json +4 -4
  20. package/dist/registry/coming-soon-page.json +4 -4
  21. package/dist/registry/contact-info-grid.json +4 -4
  22. package/dist/registry/contact-page-centered.json +4 -4
  23. package/dist/registry/contact-page-map-overlay.json +3 -3
  24. package/dist/registry/contact-page-map-split.json +3 -3
  25. package/dist/registry/contact-page-split.json +4 -4
  26. package/dist/registry/contact-page.json +4 -4
  27. package/dist/registry/content-section.json +4 -4
  28. package/dist/registry/cookie-consent.json +4 -4
  29. package/dist/registry/cookies-page.json +3 -3
  30. package/dist/registry/cta-section.json +3 -3
  31. package/dist/registry/ecommerce-core.json +8 -8
  32. package/dist/registry/empty-page.json +3 -3
  33. package/dist/registry/faq-categorized.json +4 -4
  34. package/dist/registry/faq-simple.json +4 -4
  35. package/dist/registry/favorites-blog-block.json +1 -1
  36. package/dist/registry/favorites-blog-page.json +4 -4
  37. package/dist/registry/favorites-ecommerce-block.json +1 -1
  38. package/dist/registry/favorites-ecommerce-page.json +4 -4
  39. package/dist/registry/feature-section.json +3 -3
  40. package/dist/registry/featured-products.json +4 -4
  41. package/dist/registry/footer-detailed.json +4 -4
  42. package/dist/registry/footer-minimal.json +3 -3
  43. package/dist/registry/footer.json +3 -3
  44. package/dist/registry/forgot-password-page-split.json +4 -4
  45. package/dist/registry/forgot-password-page.json +4 -4
  46. package/dist/registry/google-adsense.json +4 -4
  47. package/dist/registry/google-map.json +2 -2
  48. package/dist/registry/header-centered-pill.json +4 -4
  49. package/dist/registry/header-ecommerce.json +4 -4
  50. package/dist/registry/header-mega.json +4 -4
  51. package/dist/registry/header-minimal.json +4 -4
  52. package/dist/registry/header-simple.json +3 -3
  53. package/dist/registry/hero-carousel.json +3 -3
  54. package/dist/registry/hero-cta.json +4 -4
  55. package/dist/registry/hero-gradient.json +4 -4
  56. package/dist/registry/hero-grid.json +4 -4
  57. package/dist/registry/hero-profile.json +3 -3
  58. package/dist/registry/hero.json +3 -3
  59. package/dist/registry/index.json +103 -103
  60. package/dist/registry/landing-page-app.json +3 -3
  61. package/dist/registry/landing-page-saas.json +3 -3
  62. package/dist/registry/login-page-split.json +4 -4
  63. package/dist/registry/login-page.json +4 -4
  64. package/dist/registry/logo-cloud.json +4 -4
  65. package/dist/registry/masonry-grid.json +3 -3
  66. package/dist/registry/my-orders-page.json +4 -4
  67. package/dist/registry/newsletter-section.json +4 -4
  68. package/dist/registry/order-card-compact.json +3 -3
  69. package/dist/registry/order-confirmation-page.json +4 -4
  70. package/dist/registry/order-detail-block.json +1 -1
  71. package/dist/registry/orders-list-block.json +1 -1
  72. package/dist/registry/payment-success-block.json +2 -2
  73. package/dist/registry/portfolio-page.json +4 -4
  74. package/dist/registry/post-card.json +4 -4
  75. package/dist/registry/post-detail-block.json +4 -4
  76. package/dist/registry/post-detail-page.json +4 -4
  77. package/dist/registry/pricing-card.json +3 -3
  78. package/dist/registry/pricing-page.json +4 -4
  79. package/dist/registry/pricing-section.json +4 -4
  80. package/dist/registry/privacy-page.json +3 -3
  81. package/dist/registry/product-card-detailed.json +4 -4
  82. package/dist/registry/product-card-hover.json +4 -4
  83. package/dist/registry/product-card.json +4 -4
  84. package/dist/registry/product-detail-block.json +2 -2
  85. package/dist/registry/product-detail-page.json +4 -4
  86. package/dist/registry/product-detail-section.json +4 -4
  87. package/dist/registry/product-quick-view.json +4 -4
  88. package/dist/registry/products-page.json +4 -4
  89. package/dist/registry/reading-progress.json +4 -4
  90. package/dist/registry/register-page-split.json +4 -4
  91. package/dist/registry/register-page.json +4 -4
  92. package/dist/registry/related-posts-block.json +1 -1
  93. package/dist/registry/related-products-block.json +2 -2
  94. package/dist/registry/reset-password-page-split.json +4 -4
  95. package/dist/registry/reset-password-page.json +4 -4
  96. package/dist/registry/service-card.json +1 -1
  97. package/dist/registry/share-buttons.json +4 -4
  98. package/dist/registry/skill-card.json +1 -1
  99. package/dist/registry/team-page.json +4 -4
  100. package/dist/registry/terms-page.json +3 -3
  101. package/dist/registry/testimonials-carousel.json +4 -4
  102. package/dist/registry/testimonials-grid.json +4 -4
  103. package/dist/registry/timeline-section.json +4 -4
  104. package/dist/registry/verify-email-page.json +4 -4
  105. package/dist/registry/video-hero.json +4 -4
  106. package/dist/registry/youtube-embed.json +4 -4
  107. package/package.json +1 -1
  108. package/template/.env +5 -5
  109. package/template/README.md +54 -54
  110. package/template/eslint.config.js +41 -41
  111. package/template/index.html +237 -237
  112. package/template/package.json +96 -96
  113. package/template/public/_redirects +1 -1
  114. package/template/public/robots.txt +14 -14
  115. package/template/scripts/init-db.ts +18 -18
  116. package/template/src/App.tsx +21 -21
  117. package/template/src/components/FormField.tsx +48 -48
  118. package/template/src/components/FormFileInput.tsx +75 -75
  119. package/template/src/components/GoogleAnalytics.tsx +34 -34
  120. package/template/src/components/LanguageSwitcher.tsx +53 -53
  121. package/template/src/components/MetriaAnalytics.tsx +68 -68
  122. package/template/src/components/PasswordInput.tsx +60 -60
  123. package/template/src/components/ScriptInjector.tsx +62 -62
  124. package/template/src/components/Stack.tsx +39 -39
  125. package/template/src/constants/constants.json +71 -71
  126. package/template/src/db/index.ts +21 -21
  127. package/template/src/db/provider.tsx +106 -106
  128. package/template/src/db/schema.json +278 -278
  129. package/template/src/db/types.ts +195 -195
  130. package/template/src/hooks/use-debounced-value.ts +12 -12
  131. package/template/src/hooks/use-page-title.ts +55 -55
  132. package/template/src/lang/index.ts +90 -90
  133. package/template/src/lib/api.ts +345 -345
  134. package/template/src/lib/env.ts +19 -19
  135. package/template/src/router.tsx +14 -14
  136. package/template/src/vite-env.d.ts +1 -1
  137. package/template/vite.config.ts +194 -194
@@ -1,195 +1,195 @@
1
- // Auto-generated from schemas - DO NOT EDIT
2
-
3
- // From promake schema
4
- export interface DbBlogCategory {
5
- id?: number;
6
- name: string;
7
- slug: string;
8
- description?: string;
9
- image?: string;
10
- created_at?: string;
11
- updated_at?: string;
12
- }
13
-
14
- export interface DbBlogCategoryTranslation {
15
- id: number;
16
- blog_category_id: number;
17
- language_code: string;
18
- name: string;
19
- description?: string;
20
- created_at?: string;
21
- }
22
-
23
- export interface DbBlogCategoryInput {
24
- id?: number;
25
- slug: string;
26
- image?: string;
27
- created_at?: string;
28
- updated_at?: string;
29
- translations?: Record<string, {
30
- name: string;
31
- description?: string;
32
- }>;
33
- }
34
-
35
- export interface DbPost {
36
- id?: number;
37
- title: string;
38
- slug: string;
39
- content: string;
40
- excerpt?: string;
41
- featured_image?: string;
42
- images?: string[];
43
- author?: string;
44
- author_avatar?: string;
45
- created_at?: string;
46
- published_at?: string;
47
- updated_at?: string;
48
- tags?: string[];
49
- categories?: number[];
50
- read_time?: number;
51
- view_count?: number;
52
- featured?: boolean;
53
- published?: boolean;
54
- meta_description?: string;
55
- meta_keywords?: string;
56
- }
57
-
58
- export interface DbPostTranslation {
59
- id: number;
60
- post_id: number;
61
- language_code: string;
62
- title: string;
63
- content: string;
64
- excerpt?: string;
65
- author?: string;
66
- meta_description?: string;
67
- meta_keywords?: string;
68
- created_at?: string;
69
- }
70
-
71
- export interface DbPostInput {
72
- id?: number;
73
- slug: string;
74
- featured_image?: string;
75
- images?: string[];
76
- author_avatar?: string;
77
- created_at?: string;
78
- published_at?: string;
79
- updated_at?: string;
80
- tags?: string[];
81
- categories?: number[];
82
- read_time?: number;
83
- view_count?: number;
84
- featured?: boolean;
85
- published?: boolean;
86
- translations?: Record<string, {
87
- title: string;
88
- content: string;
89
- excerpt?: string;
90
- author?: string;
91
- meta_description?: string;
92
- meta_keywords?: string;
93
- }>;
94
- }
95
-
96
- export interface DbProductCategory {
97
- id?: number;
98
- name: string;
99
- slug: string;
100
- description?: string;
101
- image?: string;
102
- parent_id?: number;
103
- created_at?: string;
104
- updated_at?: string;
105
- }
106
-
107
- export interface DbProductCategoryTranslation {
108
- id: number;
109
- product_category_id: number;
110
- language_code: string;
111
- name: string;
112
- description?: string;
113
- created_at?: string;
114
- }
115
-
116
- export interface DbProductCategoryInput {
117
- id?: number;
118
- slug: string;
119
- image?: string;
120
- parent_id?: number;
121
- created_at?: string;
122
- updated_at?: string;
123
- translations?: Record<string, {
124
- name: string;
125
- description?: string;
126
- }>;
127
- }
128
-
129
- export interface DbProduct {
130
- id?: number;
131
- name: string;
132
- slug: string;
133
- description?: string;
134
- price: number;
135
- sale_price?: number;
136
- on_sale?: boolean;
137
- images?: string[];
138
- brand?: string;
139
- sku?: string;
140
- stock?: number;
141
- tags?: string[];
142
- categories?: number[];
143
- rating?: number;
144
- review_count?: number;
145
- featured?: boolean;
146
- is_new?: boolean;
147
- published?: boolean;
148
- specifications?: Record<string, unknown>;
149
- variants?: Array<{ id: string; name: string; value: string; price?: number; image?: string; stockQuantity: number }>;
150
- created_at?: string;
151
- updated_at?: string;
152
- meta_description?: string;
153
- meta_keywords?: string;
154
- }
155
-
156
- export interface DbProductTranslation {
157
- id: number;
158
- product_id: number;
159
- language_code: string;
160
- name: string;
161
- description?: string;
162
- brand?: string;
163
- meta_description?: string;
164
- meta_keywords?: string;
165
- created_at?: string;
166
- }
167
-
168
- export interface DbProductInput {
169
- id?: number;
170
- slug: string;
171
- price: number;
172
- sale_price?: number;
173
- on_sale?: boolean;
174
- images?: string[];
175
- sku?: string;
176
- stock?: number;
177
- tags?: string[];
178
- categories?: number[];
179
- rating?: number;
180
- review_count?: number;
181
- featured?: boolean;
182
- is_new?: boolean;
183
- published?: boolean;
184
- specifications?: Record<string, unknown>;
185
- variants?: Array<{ id: string; name: string; value: string; price?: number; image?: string; stockQuantity: number }>;
186
- created_at?: string;
187
- updated_at?: string;
188
- translations?: Record<string, {
189
- name: string;
190
- description?: string;
191
- brand?: string;
192
- meta_description?: string;
193
- meta_keywords?: string;
194
- }>;
195
- }
1
+ // Auto-generated from schemas - DO NOT EDIT
2
+
3
+ // From promake schema
4
+ export interface DbBlogCategory {
5
+ id?: number;
6
+ name: string;
7
+ slug: string;
8
+ description?: string;
9
+ image?: string;
10
+ created_at?: string;
11
+ updated_at?: string;
12
+ }
13
+
14
+ export interface DbBlogCategoryTranslation {
15
+ id: number;
16
+ blog_category_id: number;
17
+ language_code: string;
18
+ name: string;
19
+ description?: string;
20
+ created_at?: string;
21
+ }
22
+
23
+ export interface DbBlogCategoryInput {
24
+ id?: number;
25
+ slug: string;
26
+ image?: string;
27
+ created_at?: string;
28
+ updated_at?: string;
29
+ translations?: Record<string, {
30
+ name: string;
31
+ description?: string;
32
+ }>;
33
+ }
34
+
35
+ export interface DbPost {
36
+ id?: number;
37
+ title: string;
38
+ slug: string;
39
+ content: string;
40
+ excerpt?: string;
41
+ featured_image?: string;
42
+ images?: string[];
43
+ author?: string;
44
+ author_avatar?: string;
45
+ created_at?: string;
46
+ published_at?: string;
47
+ updated_at?: string;
48
+ tags?: string[];
49
+ categories?: number[];
50
+ read_time?: number;
51
+ view_count?: number;
52
+ featured?: boolean;
53
+ published?: boolean;
54
+ meta_description?: string;
55
+ meta_keywords?: string;
56
+ }
57
+
58
+ export interface DbPostTranslation {
59
+ id: number;
60
+ post_id: number;
61
+ language_code: string;
62
+ title: string;
63
+ content: string;
64
+ excerpt?: string;
65
+ author?: string;
66
+ meta_description?: string;
67
+ meta_keywords?: string;
68
+ created_at?: string;
69
+ }
70
+
71
+ export interface DbPostInput {
72
+ id?: number;
73
+ slug: string;
74
+ featured_image?: string;
75
+ images?: string[];
76
+ author_avatar?: string;
77
+ created_at?: string;
78
+ published_at?: string;
79
+ updated_at?: string;
80
+ tags?: string[];
81
+ categories?: number[];
82
+ read_time?: number;
83
+ view_count?: number;
84
+ featured?: boolean;
85
+ published?: boolean;
86
+ translations?: Record<string, {
87
+ title: string;
88
+ content: string;
89
+ excerpt?: string;
90
+ author?: string;
91
+ meta_description?: string;
92
+ meta_keywords?: string;
93
+ }>;
94
+ }
95
+
96
+ export interface DbProductCategory {
97
+ id?: number;
98
+ name: string;
99
+ slug: string;
100
+ description?: string;
101
+ image?: string;
102
+ parent_id?: number;
103
+ created_at?: string;
104
+ updated_at?: string;
105
+ }
106
+
107
+ export interface DbProductCategoryTranslation {
108
+ id: number;
109
+ product_category_id: number;
110
+ language_code: string;
111
+ name: string;
112
+ description?: string;
113
+ created_at?: string;
114
+ }
115
+
116
+ export interface DbProductCategoryInput {
117
+ id?: number;
118
+ slug: string;
119
+ image?: string;
120
+ parent_id?: number;
121
+ created_at?: string;
122
+ updated_at?: string;
123
+ translations?: Record<string, {
124
+ name: string;
125
+ description?: string;
126
+ }>;
127
+ }
128
+
129
+ export interface DbProduct {
130
+ id?: number;
131
+ name: string;
132
+ slug: string;
133
+ description?: string;
134
+ price: number;
135
+ sale_price?: number;
136
+ on_sale?: boolean;
137
+ images?: string[];
138
+ brand?: string;
139
+ sku?: string;
140
+ stock?: number;
141
+ tags?: string[];
142
+ categories?: number[];
143
+ rating?: number;
144
+ review_count?: number;
145
+ featured?: boolean;
146
+ is_new?: boolean;
147
+ published?: boolean;
148
+ specifications?: Record<string, unknown>;
149
+ variants?: Array<{ id: string; name: string; value: string; price?: number; image?: string; stockQuantity: number }>;
150
+ created_at?: string;
151
+ updated_at?: string;
152
+ meta_description?: string;
153
+ meta_keywords?: string;
154
+ }
155
+
156
+ export interface DbProductTranslation {
157
+ id: number;
158
+ product_id: number;
159
+ language_code: string;
160
+ name: string;
161
+ description?: string;
162
+ brand?: string;
163
+ meta_description?: string;
164
+ meta_keywords?: string;
165
+ created_at?: string;
166
+ }
167
+
168
+ export interface DbProductInput {
169
+ id?: number;
170
+ slug: string;
171
+ price: number;
172
+ sale_price?: number;
173
+ on_sale?: boolean;
174
+ images?: string[];
175
+ sku?: string;
176
+ stock?: number;
177
+ tags?: string[];
178
+ categories?: number[];
179
+ rating?: number;
180
+ review_count?: number;
181
+ featured?: boolean;
182
+ is_new?: boolean;
183
+ published?: boolean;
184
+ specifications?: Record<string, unknown>;
185
+ variants?: Array<{ id: string; name: string; value: string; price?: number; image?: string; stockQuantity: number }>;
186
+ created_at?: string;
187
+ updated_at?: string;
188
+ translations?: Record<string, {
189
+ name: string;
190
+ description?: string;
191
+ brand?: string;
192
+ meta_description?: string;
193
+ meta_keywords?: string;
194
+ }>;
195
+ }
@@ -1,12 +1,12 @@
1
- import { useState, useEffect } from "react";
2
-
3
- export function useDebouncedValue<T>(value: T, delay = 300): T {
4
- const [debounced, setDebounced] = useState(value);
5
-
6
- useEffect(() => {
7
- const timer = setTimeout(() => setDebounced(value), delay);
8
- return () => clearTimeout(timer);
9
- }, [value, delay]);
10
-
11
- return debounced;
12
- }
1
+ import { useState, useEffect } from "react";
2
+
3
+ export function useDebouncedValue<T>(value: T, delay = 300): T {
4
+ const [debounced, setDebounced] = useState(value);
5
+
6
+ useEffect(() => {
7
+ const timer = setTimeout(() => setDebounced(value), delay);
8
+ return () => clearTimeout(timer);
9
+ }, [value, delay]);
10
+
11
+ return debounced;
12
+ }
@@ -1,55 +1,55 @@
1
- import { useEffect } from "react";
2
- import constants from "@/constants/constants.json";
3
- interface UsePageTitleOptions {
4
- title?: string;
5
- description?: string;
6
- appendSiteName?: boolean;
7
- }
8
-
9
- export const usePageTitle = (options: UsePageTitleOptions = {}) => {
10
- useEffect(() => {
11
- if (!constants) return;
12
-
13
- const { title, description, appendSiteName = true } = options;
14
-
15
- // Set page title
16
- let pageTitle = title || constants.site.name;
17
- if (title && appendSiteName) {
18
- pageTitle = `${title} | ${constants.site.name}`;
19
- }
20
- document.title = pageTitle;
21
-
22
- // Set meta description
23
- const metaDescription = description || constants.site.description;
24
- let descriptionElement = document.querySelector('meta[name="description"]');
25
-
26
- if (!descriptionElement) {
27
- descriptionElement = document.createElement("meta");
28
- descriptionElement.setAttribute("name", "description");
29
- document.head.appendChild(descriptionElement);
30
- }
31
-
32
- descriptionElement.setAttribute("content", metaDescription);
33
-
34
- // Set favicon and apple-touch-icon if provided
35
- if (constants.site.favicon) {
36
- const faviconElement = document.querySelector(
37
- "#favicon",
38
- ) as HTMLLinkElement;
39
- if (faviconElement) {
40
- faviconElement.href = constants.site.favicon;
41
- }
42
- const appleTouchIcon = document.querySelector(
43
- "#apple-touch-icon",
44
- ) as HTMLLinkElement;
45
- if (appleTouchIcon) {
46
- appleTouchIcon.href = constants.site.favicon;
47
- }
48
- }
49
- }, [options]);
50
-
51
- return {
52
- siteName: constants?.site?.name || "",
53
- siteDescription: constants?.site?.description || "",
54
- };
55
- };
1
+ import { useEffect } from "react";
2
+ import constants from "@/constants/constants.json";
3
+ interface UsePageTitleOptions {
4
+ title?: string;
5
+ description?: string;
6
+ appendSiteName?: boolean;
7
+ }
8
+
9
+ export const usePageTitle = (options: UsePageTitleOptions = {}) => {
10
+ useEffect(() => {
11
+ if (!constants) return;
12
+
13
+ const { title, description, appendSiteName = true } = options;
14
+
15
+ // Set page title
16
+ let pageTitle = title || constants.site.name;
17
+ if (title && appendSiteName) {
18
+ pageTitle = `${title} | ${constants.site.name}`;
19
+ }
20
+ document.title = pageTitle;
21
+
22
+ // Set meta description
23
+ const metaDescription = description || constants.site.description;
24
+ let descriptionElement = document.querySelector('meta[name="description"]');
25
+
26
+ if (!descriptionElement) {
27
+ descriptionElement = document.createElement("meta");
28
+ descriptionElement.setAttribute("name", "description");
29
+ document.head.appendChild(descriptionElement);
30
+ }
31
+
32
+ descriptionElement.setAttribute("content", metaDescription);
33
+
34
+ // Set favicon and apple-touch-icon if provided
35
+ if (constants.site.favicon) {
36
+ const faviconElement = document.querySelector(
37
+ "#favicon",
38
+ ) as HTMLLinkElement;
39
+ if (faviconElement) {
40
+ faviconElement.href = constants.site.favicon;
41
+ }
42
+ const appleTouchIcon = document.querySelector(
43
+ "#apple-touch-icon",
44
+ ) as HTMLLinkElement;
45
+ if (appleTouchIcon) {
46
+ appleTouchIcon.href = constants.site.favicon;
47
+ }
48
+ }
49
+ }, [options]);
50
+
51
+ return {
52
+ siteName: constants?.site?.name || "",
53
+ siteDescription: constants?.site?.description || "",
54
+ };
55
+ };