@fnd-platform/cms 1.0.0-alpha.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 (207) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +283 -0
  3. package/lib/cms-project.d.ts +127 -0
  4. package/lib/cms-project.d.ts.map +1 -0
  5. package/lib/cms-project.js +343 -0
  6. package/lib/cms-project.js.map +1 -0
  7. package/lib/index.d.ts +11 -0
  8. package/lib/index.d.ts.map +1 -0
  9. package/lib/index.js +20 -0
  10. package/lib/index.js.map +1 -0
  11. package/lib/options.d.ts +59 -0
  12. package/lib/options.d.ts.map +1 -0
  13. package/lib/options.js +3 -0
  14. package/lib/options.js.map +1 -0
  15. package/lib/templates/admin-breadcrumbs.d.ts +13 -0
  16. package/lib/templates/admin-breadcrumbs.d.ts.map +1 -0
  17. package/lib/templates/admin-breadcrumbs.js +80 -0
  18. package/lib/templates/admin-breadcrumbs.js.map +1 -0
  19. package/lib/templates/admin-content-route.d.ts +18 -0
  20. package/lib/templates/admin-content-route.d.ts.map +1 -0
  21. package/lib/templates/admin-content-route.js +100 -0
  22. package/lib/templates/admin-content-route.js.map +1 -0
  23. package/lib/templates/admin-content-type-route.d.ts +9 -0
  24. package/lib/templates/admin-content-type-route.d.ts.map +1 -0
  25. package/lib/templates/admin-content-type-route.js +96 -0
  26. package/lib/templates/admin-content-type-route.js.map +1 -0
  27. package/lib/templates/admin-header.d.ts +13 -0
  28. package/lib/templates/admin-header.d.ts.map +1 -0
  29. package/lib/templates/admin-header.js +123 -0
  30. package/lib/templates/admin-header.js.map +1 -0
  31. package/lib/templates/admin-index.d.ts +9 -0
  32. package/lib/templates/admin-index.d.ts.map +1 -0
  33. package/lib/templates/admin-index.js +60 -0
  34. package/lib/templates/admin-index.js.map +1 -0
  35. package/lib/templates/admin-layout.d.ts +10 -0
  36. package/lib/templates/admin-layout.d.ts.map +1 -0
  37. package/lib/templates/admin-layout.js +46 -0
  38. package/lib/templates/admin-layout.js.map +1 -0
  39. package/lib/templates/admin-sidebar.d.ts +13 -0
  40. package/lib/templates/admin-sidebar.d.ts.map +1 -0
  41. package/lib/templates/admin-sidebar.js +149 -0
  42. package/lib/templates/admin-sidebar.js.map +1 -0
  43. package/lib/templates/content-editor.d.ts +10 -0
  44. package/lib/templates/content-editor.d.ts.map +1 -0
  45. package/lib/templates/content-editor.js +354 -0
  46. package/lib/templates/content-editor.js.map +1 -0
  47. package/lib/templates/content-schema.d.ts +10 -0
  48. package/lib/templates/content-schema.d.ts.map +1 -0
  49. package/lib/templates/content-schema.js +274 -0
  50. package/lib/templates/content-schema.js.map +1 -0
  51. package/lib/templates/content-table.d.ts +13 -0
  52. package/lib/templates/content-table.d.ts.map +1 -0
  53. package/lib/templates/content-table.js +177 -0
  54. package/lib/templates/content-table.js.map +1 -0
  55. package/lib/templates/content-types-examples.d.ts +19 -0
  56. package/lib/templates/content-types-examples.d.ts.map +1 -0
  57. package/lib/templates/content-types-examples.js +275 -0
  58. package/lib/templates/content-types-examples.js.map +1 -0
  59. package/lib/templates/content-types-registry.d.ts +10 -0
  60. package/lib/templates/content-types-registry.d.ts.map +1 -0
  61. package/lib/templates/content-types-registry.js +87 -0
  62. package/lib/templates/content-types-registry.js.map +1 -0
  63. package/lib/templates/content-types.d.ts +10 -0
  64. package/lib/templates/content-types.d.ts.map +1 -0
  65. package/lib/templates/content-types.js +384 -0
  66. package/lib/templates/content-types.js.map +1 -0
  67. package/lib/templates/dashboard-stats.d.ts +13 -0
  68. package/lib/templates/dashboard-stats.d.ts.map +1 -0
  69. package/lib/templates/dashboard-stats.js +117 -0
  70. package/lib/templates/dashboard-stats.js.map +1 -0
  71. package/lib/templates/editor/index.d.ts +6 -0
  72. package/lib/templates/editor/index.d.ts.map +1 -0
  73. package/lib/templates/editor/index.js +21 -0
  74. package/lib/templates/editor/index.js.map +1 -0
  75. package/lib/templates/editor/rich-text-editor.d.ts +7 -0
  76. package/lib/templates/editor/rich-text-editor.d.ts.map +1 -0
  77. package/lib/templates/editor/rich-text-editor.js +115 -0
  78. package/lib/templates/editor/rich-text-editor.js.map +1 -0
  79. package/lib/templates/editor/toolbar.d.ts +7 -0
  80. package/lib/templates/editor/toolbar.d.ts.map +1 -0
  81. package/lib/templates/editor/toolbar.js +272 -0
  82. package/lib/templates/editor/toolbar.js.map +1 -0
  83. package/lib/templates/form-fields/boolean-field.d.ts +7 -0
  84. package/lib/templates/form-fields/boolean-field.d.ts.map +1 -0
  85. package/lib/templates/form-fields/boolean-field.js +76 -0
  86. package/lib/templates/form-fields/boolean-field.js.map +1 -0
  87. package/lib/templates/form-fields/date-field.d.ts +7 -0
  88. package/lib/templates/form-fields/date-field.d.ts.map +1 -0
  89. package/lib/templates/form-fields/date-field.js +61 -0
  90. package/lib/templates/form-fields/date-field.js.map +1 -0
  91. package/lib/templates/form-fields/datetime-field.d.ts +7 -0
  92. package/lib/templates/form-fields/datetime-field.d.ts.map +1 -0
  93. package/lib/templates/form-fields/datetime-field.js +87 -0
  94. package/lib/templates/form-fields/datetime-field.js.map +1 -0
  95. package/lib/templates/form-fields/index.d.ts +23 -0
  96. package/lib/templates/form-fields/index.d.ts.map +1 -0
  97. package/lib/templates/form-fields/index.js +275 -0
  98. package/lib/templates/form-fields/index.js.map +1 -0
  99. package/lib/templates/form-fields/media-field.d.ts +10 -0
  100. package/lib/templates/form-fields/media-field.d.ts.map +1 -0
  101. package/lib/templates/form-fields/media-field.js +225 -0
  102. package/lib/templates/form-fields/media-field.js.map +1 -0
  103. package/lib/templates/form-fields/multiselect-field.d.ts +7 -0
  104. package/lib/templates/form-fields/multiselect-field.d.ts.map +1 -0
  105. package/lib/templates/form-fields/multiselect-field.js +121 -0
  106. package/lib/templates/form-fields/multiselect-field.js.map +1 -0
  107. package/lib/templates/form-fields/number-field.d.ts +7 -0
  108. package/lib/templates/form-fields/number-field.d.ts.map +1 -0
  109. package/lib/templates/form-fields/number-field.js +87 -0
  110. package/lib/templates/form-fields/number-field.js.map +1 -0
  111. package/lib/templates/form-fields/reference-field.d.ts +9 -0
  112. package/lib/templates/form-fields/reference-field.d.ts.map +1 -0
  113. package/lib/templates/form-fields/reference-field.js +145 -0
  114. package/lib/templates/form-fields/reference-field.js.map +1 -0
  115. package/lib/templates/form-fields/richtext-field.d.ts +9 -0
  116. package/lib/templates/form-fields/richtext-field.d.ts.map +1 -0
  117. package/lib/templates/form-fields/richtext-field.js +60 -0
  118. package/lib/templates/form-fields/richtext-field.js.map +1 -0
  119. package/lib/templates/form-fields/select-field.d.ts +7 -0
  120. package/lib/templates/form-fields/select-field.d.ts.map +1 -0
  121. package/lib/templates/form-fields/select-field.js +70 -0
  122. package/lib/templates/form-fields/select-field.js.map +1 -0
  123. package/lib/templates/form-fields/slug-field.d.ts +7 -0
  124. package/lib/templates/form-fields/slug-field.d.ts.map +1 -0
  125. package/lib/templates/form-fields/slug-field.js +143 -0
  126. package/lib/templates/form-fields/slug-field.js.map +1 -0
  127. package/lib/templates/form-fields/tags-field.d.ts +7 -0
  128. package/lib/templates/form-fields/tags-field.d.ts.map +1 -0
  129. package/lib/templates/form-fields/tags-field.js +172 -0
  130. package/lib/templates/form-fields/tags-field.js.map +1 -0
  131. package/lib/templates/form-fields/text-field.d.ts +7 -0
  132. package/lib/templates/form-fields/text-field.d.ts.map +1 -0
  133. package/lib/templates/form-fields/text-field.js +63 -0
  134. package/lib/templates/form-fields/text-field.js.map +1 -0
  135. package/lib/templates/form-fields/textarea-field.d.ts +7 -0
  136. package/lib/templates/form-fields/textarea-field.d.ts.map +1 -0
  137. package/lib/templates/form-fields/textarea-field.js +64 -0
  138. package/lib/templates/form-fields/textarea-field.js.map +1 -0
  139. package/lib/templates/index.d.ts +34 -0
  140. package/lib/templates/index.d.ts.map +1 -0
  141. package/lib/templates/index.js +92 -0
  142. package/lib/templates/index.js.map +1 -0
  143. package/lib/templates/media/index.d.ts +12 -0
  144. package/lib/templates/media/index.d.ts.map +1 -0
  145. package/lib/templates/media/index.js +50 -0
  146. package/lib/templates/media/index.js.map +1 -0
  147. package/lib/templates/media/media-api.d.ts +13 -0
  148. package/lib/templates/media/media-api.d.ts.map +1 -0
  149. package/lib/templates/media/media-api.js +274 -0
  150. package/lib/templates/media/media-api.js.map +1 -0
  151. package/lib/templates/media/media-grid.d.ts +14 -0
  152. package/lib/templates/media/media-grid.d.ts.map +1 -0
  153. package/lib/templates/media/media-grid.js +314 -0
  154. package/lib/templates/media/media-grid.js.map +1 -0
  155. package/lib/templates/media/media-library-route.d.ts +13 -0
  156. package/lib/templates/media/media-library-route.d.ts.map +1 -0
  157. package/lib/templates/media/media-library-route.js +105 -0
  158. package/lib/templates/media/media-library-route.js.map +1 -0
  159. package/lib/templates/media/media-picker.d.ts +13 -0
  160. package/lib/templates/media/media-picker.d.ts.map +1 -0
  161. package/lib/templates/media/media-picker.js +152 -0
  162. package/lib/templates/media/media-picker.js.map +1 -0
  163. package/lib/templates/media/media-uploader.d.ts +14 -0
  164. package/lib/templates/media/media-uploader.d.ts.map +1 -0
  165. package/lib/templates/media/media-uploader.js +318 -0
  166. package/lib/templates/media/media-uploader.js.map +1 -0
  167. package/lib/templates/recent-content.d.ts +13 -0
  168. package/lib/templates/recent-content.d.ts.map +1 -0
  169. package/lib/templates/recent-content.js +138 -0
  170. package/lib/templates/recent-content.js.map +1 -0
  171. package/lib/templates/slug-utils.d.ts +10 -0
  172. package/lib/templates/slug-utils.d.ts.map +1 -0
  173. package/lib/templates/slug-utils.js +194 -0
  174. package/lib/templates/slug-utils.js.map +1 -0
  175. package/lib/templates/ui-avatar.d.ts +8 -0
  176. package/lib/templates/ui-avatar.d.ts.map +1 -0
  177. package/lib/templates/ui-avatar.js +60 -0
  178. package/lib/templates/ui-avatar.js.map +1 -0
  179. package/lib/templates/ui-badge.d.ts +8 -0
  180. package/lib/templates/ui-badge.d.ts.map +1 -0
  181. package/lib/templates/ui-badge.js +52 -0
  182. package/lib/templates/ui-badge.js.map +1 -0
  183. package/lib/templates/ui-dialog.d.ts +10 -0
  184. package/lib/templates/ui-dialog.d.ts.map +1 -0
  185. package/lib/templates/ui-dialog.js +134 -0
  186. package/lib/templates/ui-dialog.js.map +1 -0
  187. package/lib/templates/ui-dropdown-menu.d.ts +8 -0
  188. package/lib/templates/ui-dropdown-menu.d.ts.map +1 -0
  189. package/lib/templates/ui-dropdown-menu.js +210 -0
  190. package/lib/templates/ui-dropdown-menu.js.map +1 -0
  191. package/lib/templates/ui-popover.d.ts +8 -0
  192. package/lib/templates/ui-popover.d.ts.map +1 -0
  193. package/lib/templates/ui-popover.js +43 -0
  194. package/lib/templates/ui-popover.js.map +1 -0
  195. package/lib/templates/ui-progress.d.ts +10 -0
  196. package/lib/templates/ui-progress.d.ts.map +1 -0
  197. package/lib/templates/ui-progress.js +40 -0
  198. package/lib/templates/ui-progress.js.map +1 -0
  199. package/lib/templates/ui-table.d.ts +8 -0
  200. package/lib/templates/ui-table.d.ts.map +1 -0
  201. package/lib/templates/ui-table.js +129 -0
  202. package/lib/templates/ui-table.js.map +1 -0
  203. package/lib/templates/ui-tabs.d.ts +10 -0
  204. package/lib/templates/ui-tabs.d.ts.map +1 -0
  205. package/lib/templates/ui-tabs.js +67 -0
  206. package/lib/templates/ui-tabs.js.map +1 -0
  207. package/package.json +52 -0
@@ -0,0 +1,172 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, '__esModule', { value: true });
3
+ exports.getTagsFieldTemplate = getTagsFieldTemplate;
4
+ /**
5
+ * Generates the tags field component template.
6
+ *
7
+ * @returns Template string for app/components/form-fields/tags-field.tsx
8
+ */
9
+ function getTagsFieldTemplate() {
10
+ return `import { useState, useRef, type KeyboardEvent } from 'react';
11
+ import { X, Plus } from 'lucide-react';
12
+ import type { TagsFieldDefinition } from '~/lib/content-types';
13
+ import { Input } from '~/components/ui/input';
14
+ import { Label } from '~/components/ui/label';
15
+ import { Button } from '~/components/ui/button';
16
+ import { Badge } from '~/components/ui/badge';
17
+ import { cn } from '~/lib/utils';
18
+ import type { FieldProps } from './index';
19
+
20
+ /**
21
+ * Tag input field with add/remove functionality.
22
+ */
23
+ export function TagsField({
24
+ field,
25
+ value,
26
+ onChange,
27
+ error,
28
+ disabled,
29
+ }: FieldProps<TagsFieldDefinition>) {
30
+ const id = \`field-\${field.name}\`;
31
+ const inputRef = useRef<HTMLInputElement>(null);
32
+ const [inputValue, setInputValue] = useState('');
33
+ const tags = Array.isArray(value) ? value : [];
34
+
35
+ const addTag = (tag: string) => {
36
+ const trimmedTag = tag.trim().toLowerCase();
37
+ if (!trimmedTag) return;
38
+ if (tags.includes(trimmedTag)) return;
39
+ if (field.max !== undefined && tags.length >= field.max) return;
40
+
41
+ onChange([...tags, trimmedTag]);
42
+ setInputValue('');
43
+ };
44
+
45
+ const removeTag = (tagToRemove: string) => {
46
+ if (disabled) return;
47
+ onChange(tags.filter((tag) => tag !== tagToRemove));
48
+ };
49
+
50
+ const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {
51
+ if (e.key === 'Enter') {
52
+ e.preventDefault();
53
+ addTag(inputValue);
54
+ } else if (e.key === 'Backspace' && !inputValue && tags.length > 0) {
55
+ removeTag(tags[tags.length - 1]);
56
+ }
57
+ };
58
+
59
+ const handleSuggestionClick = (suggestion: string) => {
60
+ if (!tags.includes(suggestion)) {
61
+ addTag(suggestion);
62
+ }
63
+ inputRef.current?.focus();
64
+ };
65
+
66
+ // Filter suggestions that aren't already added
67
+ const availableSuggestions = field.suggestions?.filter(
68
+ (s) => !tags.includes(s.toLowerCase())
69
+ );
70
+
71
+ return (
72
+ <div className="space-y-2">
73
+ <Label htmlFor={id} className={cn(field.required && "after:content-['*'] after:ml-0.5 after:text-destructive")}>
74
+ {field.label}
75
+ </Label>
76
+ <div
77
+ className={cn(
78
+ 'flex flex-wrap gap-2 p-2 border rounded-md min-h-[42px]',
79
+ error && 'border-destructive',
80
+ disabled && 'opacity-50 cursor-not-allowed'
81
+ )}
82
+ onClick={() => !disabled && inputRef.current?.focus()}
83
+ >
84
+ {tags.map((tag) => (
85
+ <Badge key={tag} variant="secondary" className="gap-1">
86
+ {tag}
87
+ <button
88
+ type="button"
89
+ onClick={(e) => {
90
+ e.stopPropagation();
91
+ removeTag(tag);
92
+ }}
93
+ disabled={disabled}
94
+ className="rounded-full hover:bg-muted-foreground/20"
95
+ >
96
+ <X className="h-3 w-3" />
97
+ </button>
98
+ </Badge>
99
+ ))}
100
+ <input
101
+ ref={inputRef}
102
+ id={id}
103
+ type="text"
104
+ value={inputValue}
105
+ onChange={(e) => setInputValue(e.target.value)}
106
+ onKeyDown={handleKeyDown}
107
+ placeholder={tags.length === 0 ? (field.placeholder ?? 'Add tags...') : ''}
108
+ disabled={disabled || (field.max !== undefined && tags.length >= field.max)}
109
+ className="flex-1 min-w-[100px] bg-transparent border-none outline-none text-sm"
110
+ aria-describedby={error ? \`\${id}-error\` : field.description ? \`\${id}-description\` : undefined}
111
+ />
112
+ {inputValue && (
113
+ <Button
114
+ type="button"
115
+ variant="ghost"
116
+ size="sm"
117
+ className="h-6 px-2"
118
+ onClick={() => addTag(inputValue)}
119
+ disabled={disabled}
120
+ >
121
+ <Plus className="h-3 w-3 mr-1" />
122
+ Add
123
+ </Button>
124
+ )}
125
+ </div>
126
+ {/* Hidden inputs for form submission */}
127
+ {tags.map((tag) => (
128
+ <input key={tag} type="hidden" name={\`\${field.name}[]\`} value={tag} />
129
+ ))}
130
+ {/* Suggestions */}
131
+ {availableSuggestions && availableSuggestions.length > 0 && (
132
+ <div className="flex flex-wrap gap-1">
133
+ <span className="text-sm text-muted-foreground">Suggestions:</span>
134
+ {availableSuggestions.slice(0, 5).map((suggestion) => (
135
+ <button
136
+ key={suggestion}
137
+ type="button"
138
+ onClick={() => handleSuggestionClick(suggestion)}
139
+ disabled={disabled}
140
+ className="text-sm text-primary hover:underline"
141
+ >
142
+ {suggestion}
143
+ </button>
144
+ ))}
145
+ </div>
146
+ )}
147
+ {(field.min !== undefined || field.max !== undefined) && !error && (
148
+ <p className="text-sm text-muted-foreground">
149
+ {field.min !== undefined && field.max !== undefined
150
+ ? \`Add \${field.min} to \${field.max} tags\`
151
+ : field.min !== undefined
152
+ ? \`Add at least \${field.min} tags\`
153
+ : \`Add up to \${field.max} tags\`}
154
+ {' '}({tags.length} added)
155
+ </p>
156
+ )}
157
+ {field.description && !error && !(field.min !== undefined || field.max !== undefined) && (
158
+ <p id={\`\${id}-description\`} className="text-sm text-muted-foreground">
159
+ {field.description}
160
+ </p>
161
+ )}
162
+ {error && (
163
+ <p id={\`\${id}-error\`} className="text-sm text-destructive">
164
+ {error}
165
+ </p>
166
+ )}
167
+ </div>
168
+ );
169
+ }
170
+ `;
171
+ }
172
+ //# sourceMappingURL=tags-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags-field.js","sourceRoot":"","sources":["../../../src/templates/form-fields/tags-field.ts"],"names":[],"mappings":";;AAKA,oDAkKC;AAvKD;;;;GAIG;AACH,SAAgB,oBAAoB;IAClC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgKR,CAAC;AACF,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Generates the text field component template.
3
+ *
4
+ * @returns Template string for app/components/form-fields/text-field.tsx
5
+ */
6
+ export declare function getTextFieldTemplate(): string;
7
+ //# sourceMappingURL=text-field.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-field.d.ts","sourceRoot":"","sources":["../../../src/templates/form-fields/text-field.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAqD7C"}
@@ -0,0 +1,63 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, '__esModule', { value: true });
3
+ exports.getTextFieldTemplate = getTextFieldTemplate;
4
+ /**
5
+ * Generates the text field component template.
6
+ *
7
+ * @returns Template string for app/components/form-fields/text-field.tsx
8
+ */
9
+ function getTextFieldTemplate() {
10
+ return `import type { TextFieldDefinition } from '~/lib/content-types';
11
+ import { Input } from '~/components/ui/input';
12
+ import { Label } from '~/components/ui/label';
13
+ import { cn } from '~/lib/utils';
14
+ import type { FieldProps } from './index';
15
+
16
+ /**
17
+ * Single-line text input field.
18
+ */
19
+ export function TextField({
20
+ field,
21
+ value,
22
+ onChange,
23
+ error,
24
+ disabled,
25
+ }: FieldProps<TextFieldDefinition>) {
26
+ const id = \`field-\${field.name}\`;
27
+
28
+ return (
29
+ <div className="space-y-2">
30
+ <Label htmlFor={id} className={cn(field.required && "after:content-['*'] after:ml-0.5 after:text-destructive")}>
31
+ {field.label}
32
+ </Label>
33
+ <Input
34
+ id={id}
35
+ name={field.name}
36
+ type="text"
37
+ value={(value as string) ?? ''}
38
+ onChange={(e) => onChange(e.target.value)}
39
+ placeholder={field.placeholder}
40
+ disabled={disabled}
41
+ minLength={field.minLength}
42
+ maxLength={field.maxLength}
43
+ pattern={field.pattern}
44
+ className={cn(error && 'border-destructive')}
45
+ aria-invalid={!!error}
46
+ aria-describedby={error ? \`\${id}-error\` : field.description ? \`\${id}-description\` : undefined}
47
+ />
48
+ {field.description && !error && (
49
+ <p id={\`\${id}-description\`} className="text-sm text-muted-foreground">
50
+ {field.description}
51
+ </p>
52
+ )}
53
+ {error && (
54
+ <p id={\`\${id}-error\`} className="text-sm text-destructive">
55
+ {error}
56
+ </p>
57
+ )}
58
+ </div>
59
+ );
60
+ }
61
+ `;
62
+ }
63
+ //# sourceMappingURL=text-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-field.js","sourceRoot":"","sources":["../../../src/templates/form-fields/text-field.ts"],"names":[],"mappings":";;AAKA,oDAqDC;AA1DD;;;;GAIG;AACH,SAAgB,oBAAoB;IAClC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmDR,CAAC;AACF,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Generates the textarea field component template.
3
+ *
4
+ * @returns Template string for app/components/form-fields/textarea-field.tsx
5
+ */
6
+ export declare function getTextareaFieldTemplate(): string;
7
+ //# sourceMappingURL=textarea-field.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textarea-field.d.ts","sourceRoot":"","sources":["../../../src/templates/form-fields/textarea-field.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAsDjD"}
@@ -0,0 +1,64 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, '__esModule', { value: true });
3
+ exports.getTextareaFieldTemplate = getTextareaFieldTemplate;
4
+ /**
5
+ * Generates the textarea field component template.
6
+ *
7
+ * @returns Template string for app/components/form-fields/textarea-field.tsx
8
+ */
9
+ function getTextareaFieldTemplate() {
10
+ return `import type { TextareaFieldDefinition } from '~/lib/content-types';
11
+ import { Label } from '~/components/ui/label';
12
+ import { cn } from '~/lib/utils';
13
+ import type { FieldProps } from './index';
14
+
15
+ /**
16
+ * Multi-line text input field.
17
+ */
18
+ export function TextareaField({
19
+ field,
20
+ value,
21
+ onChange,
22
+ error,
23
+ disabled,
24
+ }: FieldProps<TextareaFieldDefinition>) {
25
+ const id = \`field-\${field.name}\`;
26
+
27
+ return (
28
+ <div className="space-y-2">
29
+ <Label htmlFor={id} className={cn(field.required && "after:content-['*'] after:ml-0.5 after:text-destructive")}>
30
+ {field.label}
31
+ </Label>
32
+ <textarea
33
+ id={id}
34
+ name={field.name}
35
+ value={(value as string) ?? ''}
36
+ onChange={(e) => onChange(e.target.value)}
37
+ placeholder={field.placeholder}
38
+ disabled={disabled}
39
+ rows={field.rows ?? 4}
40
+ minLength={field.minLength}
41
+ maxLength={field.maxLength}
42
+ className={cn(
43
+ 'flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',
44
+ error && 'border-destructive'
45
+ )}
46
+ aria-invalid={!!error}
47
+ aria-describedby={error ? \`\${id}-error\` : field.description ? \`\${id}-description\` : undefined}
48
+ />
49
+ {field.description && !error && (
50
+ <p id={\`\${id}-description\`} className="text-sm text-muted-foreground">
51
+ {field.description}
52
+ </p>
53
+ )}
54
+ {error && (
55
+ <p id={\`\${id}-error\`} className="text-sm text-destructive">
56
+ {error}
57
+ </p>
58
+ )}
59
+ </div>
60
+ );
61
+ }
62
+ `;
63
+ }
64
+ //# sourceMappingURL=textarea-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textarea-field.js","sourceRoot":"","sources":["../../../src/templates/form-fields/textarea-field.ts"],"names":[],"mappings":";;AAKA,4DAsDC;AA3DD;;;;GAIG;AACH,SAAgB,wBAAwB;IACtC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoDR,CAAC;AACF,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Template generators for FndCmsProject.
3
+ *
4
+ * These functions generate the content for files that will be created
5
+ * in the user's CMS package when FndCmsProject is synthesized.
6
+ */
7
+ export { getAdminLayoutTemplate } from './admin-layout';
8
+ export { getAdminIndexTemplate } from './admin-index';
9
+ export { getAdminContentRouteTemplate, getAdminContentIndexTemplate } from './admin-content-route';
10
+ export { getAdminContentTypeRouteTemplate } from './admin-content-type-route';
11
+ export { getAdminSidebarTemplate } from './admin-sidebar';
12
+ export { getAdminHeaderTemplate } from './admin-header';
13
+ export { getAdminBreadcrumbsTemplate } from './admin-breadcrumbs';
14
+ export { getDashboardStatsTemplate } from './dashboard-stats';
15
+ export { getRecentContentTemplate } from './recent-content';
16
+ export { getContentTableTemplate } from './content-table';
17
+ export { getBadgeTemplate } from './ui-badge';
18
+ export { getAvatarTemplate } from './ui-avatar';
19
+ export { getDropdownMenuTemplate } from './ui-dropdown-menu';
20
+ export { getTableTemplate } from './ui-table';
21
+ export { getPopoverTemplate } from './ui-popover';
22
+ export { getEditorToolbarTemplate, getRichTextEditorTemplate } from './editor';
23
+ export { getContentTypesTemplate } from './content-types';
24
+ export { getContentSchemaTemplate } from './content-schema';
25
+ export { getSlugUtilsTemplate } from './slug-utils';
26
+ export { getContentTypesRegistryTemplate } from './content-types-registry';
27
+ export { getContentEditorTemplate } from './content-editor';
28
+ export { getBlogPostContentTypeTemplate, getPageContentTypeTemplate, } from './content-types-examples';
29
+ export { getFormFieldsIndexTemplate, getTextFieldTemplate, getTextareaFieldTemplate, getRichtextFieldTemplate, getSlugFieldTemplate, getMediaFieldTemplate, getSelectFieldTemplate, getMultiselectFieldTemplate, getDateFieldTemplate, getDatetimeFieldTemplate, getBooleanFieldTemplate, getNumberFieldTemplate, getTagsFieldTemplate, getReferenceFieldTemplate, } from './form-fields';
30
+ export { getMediaUploaderTemplate, getMediaGridTemplate, getMediaPickerTemplate, getMediaApiTemplate, getMediaLibraryRouteTemplate, } from './media';
31
+ export { getProgressTemplate } from './ui-progress';
32
+ export { getDialogTemplate } from './ui-dialog';
33
+ export { getTabsTemplate } from './ui-tabs';
34
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,4BAA4B,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACnG,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAG9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAG1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGlD,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAG/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EACL,8BAA8B,EAC9B,0BAA0B,GAC3B,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,2BAA2B,EAC3B,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,sBAAsB,EACtB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,4BAA4B,GAC7B,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ /**
3
+ * Template generators for FndCmsProject.
4
+ *
5
+ * These functions generate the content for files that will be created
6
+ * in the user's CMS package when FndCmsProject is synthesized.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.getTabsTemplate = exports.getDialogTemplate = exports.getProgressTemplate = exports.getMediaLibraryRouteTemplate = exports.getMediaApiTemplate = exports.getMediaPickerTemplate = exports.getMediaGridTemplate = exports.getMediaUploaderTemplate = exports.getReferenceFieldTemplate = exports.getTagsFieldTemplate = exports.getNumberFieldTemplate = exports.getBooleanFieldTemplate = exports.getDatetimeFieldTemplate = exports.getDateFieldTemplate = exports.getMultiselectFieldTemplate = exports.getSelectFieldTemplate = exports.getMediaFieldTemplate = exports.getSlugFieldTemplate = exports.getRichtextFieldTemplate = exports.getTextareaFieldTemplate = exports.getTextFieldTemplate = exports.getFormFieldsIndexTemplate = exports.getPageContentTypeTemplate = exports.getBlogPostContentTypeTemplate = exports.getContentEditorTemplate = exports.getContentTypesRegistryTemplate = exports.getSlugUtilsTemplate = exports.getContentSchemaTemplate = exports.getContentTypesTemplate = exports.getRichTextEditorTemplate = exports.getEditorToolbarTemplate = exports.getPopoverTemplate = exports.getTableTemplate = exports.getDropdownMenuTemplate = exports.getAvatarTemplate = exports.getBadgeTemplate = exports.getContentTableTemplate = exports.getRecentContentTemplate = exports.getDashboardStatsTemplate = exports.getAdminBreadcrumbsTemplate = exports.getAdminHeaderTemplate = exports.getAdminSidebarTemplate = exports.getAdminContentTypeRouteTemplate = exports.getAdminContentIndexTemplate = exports.getAdminContentRouteTemplate = exports.getAdminIndexTemplate = exports.getAdminLayoutTemplate = void 0;
10
+ // Route templates
11
+ var admin_layout_1 = require("./admin-layout");
12
+ Object.defineProperty(exports, "getAdminLayoutTemplate", { enumerable: true, get: function () { return admin_layout_1.getAdminLayoutTemplate; } });
13
+ var admin_index_1 = require("./admin-index");
14
+ Object.defineProperty(exports, "getAdminIndexTemplate", { enumerable: true, get: function () { return admin_index_1.getAdminIndexTemplate; } });
15
+ var admin_content_route_1 = require("./admin-content-route");
16
+ Object.defineProperty(exports, "getAdminContentRouteTemplate", { enumerable: true, get: function () { return admin_content_route_1.getAdminContentRouteTemplate; } });
17
+ Object.defineProperty(exports, "getAdminContentIndexTemplate", { enumerable: true, get: function () { return admin_content_route_1.getAdminContentIndexTemplate; } });
18
+ var admin_content_type_route_1 = require("./admin-content-type-route");
19
+ Object.defineProperty(exports, "getAdminContentTypeRouteTemplate", { enumerable: true, get: function () { return admin_content_type_route_1.getAdminContentTypeRouteTemplate; } });
20
+ // Admin component templates
21
+ var admin_sidebar_1 = require("./admin-sidebar");
22
+ Object.defineProperty(exports, "getAdminSidebarTemplate", { enumerable: true, get: function () { return admin_sidebar_1.getAdminSidebarTemplate; } });
23
+ var admin_header_1 = require("./admin-header");
24
+ Object.defineProperty(exports, "getAdminHeaderTemplate", { enumerable: true, get: function () { return admin_header_1.getAdminHeaderTemplate; } });
25
+ var admin_breadcrumbs_1 = require("./admin-breadcrumbs");
26
+ Object.defineProperty(exports, "getAdminBreadcrumbsTemplate", { enumerable: true, get: function () { return admin_breadcrumbs_1.getAdminBreadcrumbsTemplate; } });
27
+ var dashboard_stats_1 = require("./dashboard-stats");
28
+ Object.defineProperty(exports, "getDashboardStatsTemplate", { enumerable: true, get: function () { return dashboard_stats_1.getDashboardStatsTemplate; } });
29
+ var recent_content_1 = require("./recent-content");
30
+ Object.defineProperty(exports, "getRecentContentTemplate", { enumerable: true, get: function () { return recent_content_1.getRecentContentTemplate; } });
31
+ var content_table_1 = require("./content-table");
32
+ Object.defineProperty(exports, "getContentTableTemplate", { enumerable: true, get: function () { return content_table_1.getContentTableTemplate; } });
33
+ // UI component templates
34
+ var ui_badge_1 = require("./ui-badge");
35
+ Object.defineProperty(exports, "getBadgeTemplate", { enumerable: true, get: function () { return ui_badge_1.getBadgeTemplate; } });
36
+ var ui_avatar_1 = require("./ui-avatar");
37
+ Object.defineProperty(exports, "getAvatarTemplate", { enumerable: true, get: function () { return ui_avatar_1.getAvatarTemplate; } });
38
+ var ui_dropdown_menu_1 = require("./ui-dropdown-menu");
39
+ Object.defineProperty(exports, "getDropdownMenuTemplate", { enumerable: true, get: function () { return ui_dropdown_menu_1.getDropdownMenuTemplate; } });
40
+ var ui_table_1 = require("./ui-table");
41
+ Object.defineProperty(exports, "getTableTemplate", { enumerable: true, get: function () { return ui_table_1.getTableTemplate; } });
42
+ var ui_popover_1 = require("./ui-popover");
43
+ Object.defineProperty(exports, "getPopoverTemplate", { enumerable: true, get: function () { return ui_popover_1.getPopoverTemplate; } });
44
+ // Editor component templates
45
+ var editor_1 = require("./editor");
46
+ Object.defineProperty(exports, "getEditorToolbarTemplate", { enumerable: true, get: function () { return editor_1.getEditorToolbarTemplate; } });
47
+ Object.defineProperty(exports, "getRichTextEditorTemplate", { enumerable: true, get: function () { return editor_1.getRichTextEditorTemplate; } });
48
+ // Content type system templates
49
+ var content_types_1 = require("./content-types");
50
+ Object.defineProperty(exports, "getContentTypesTemplate", { enumerable: true, get: function () { return content_types_1.getContentTypesTemplate; } });
51
+ var content_schema_1 = require("./content-schema");
52
+ Object.defineProperty(exports, "getContentSchemaTemplate", { enumerable: true, get: function () { return content_schema_1.getContentSchemaTemplate; } });
53
+ var slug_utils_1 = require("./slug-utils");
54
+ Object.defineProperty(exports, "getSlugUtilsTemplate", { enumerable: true, get: function () { return slug_utils_1.getSlugUtilsTemplate; } });
55
+ var content_types_registry_1 = require("./content-types-registry");
56
+ Object.defineProperty(exports, "getContentTypesRegistryTemplate", { enumerable: true, get: function () { return content_types_registry_1.getContentTypesRegistryTemplate; } });
57
+ var content_editor_1 = require("./content-editor");
58
+ Object.defineProperty(exports, "getContentEditorTemplate", { enumerable: true, get: function () { return content_editor_1.getContentEditorTemplate; } });
59
+ var content_types_examples_1 = require("./content-types-examples");
60
+ Object.defineProperty(exports, "getBlogPostContentTypeTemplate", { enumerable: true, get: function () { return content_types_examples_1.getBlogPostContentTypeTemplate; } });
61
+ Object.defineProperty(exports, "getPageContentTypeTemplate", { enumerable: true, get: function () { return content_types_examples_1.getPageContentTypeTemplate; } });
62
+ // Form field component templates
63
+ var form_fields_1 = require("./form-fields");
64
+ Object.defineProperty(exports, "getFormFieldsIndexTemplate", { enumerable: true, get: function () { return form_fields_1.getFormFieldsIndexTemplate; } });
65
+ Object.defineProperty(exports, "getTextFieldTemplate", { enumerable: true, get: function () { return form_fields_1.getTextFieldTemplate; } });
66
+ Object.defineProperty(exports, "getTextareaFieldTemplate", { enumerable: true, get: function () { return form_fields_1.getTextareaFieldTemplate; } });
67
+ Object.defineProperty(exports, "getRichtextFieldTemplate", { enumerable: true, get: function () { return form_fields_1.getRichtextFieldTemplate; } });
68
+ Object.defineProperty(exports, "getSlugFieldTemplate", { enumerable: true, get: function () { return form_fields_1.getSlugFieldTemplate; } });
69
+ Object.defineProperty(exports, "getMediaFieldTemplate", { enumerable: true, get: function () { return form_fields_1.getMediaFieldTemplate; } });
70
+ Object.defineProperty(exports, "getSelectFieldTemplate", { enumerable: true, get: function () { return form_fields_1.getSelectFieldTemplate; } });
71
+ Object.defineProperty(exports, "getMultiselectFieldTemplate", { enumerable: true, get: function () { return form_fields_1.getMultiselectFieldTemplate; } });
72
+ Object.defineProperty(exports, "getDateFieldTemplate", { enumerable: true, get: function () { return form_fields_1.getDateFieldTemplate; } });
73
+ Object.defineProperty(exports, "getDatetimeFieldTemplate", { enumerable: true, get: function () { return form_fields_1.getDatetimeFieldTemplate; } });
74
+ Object.defineProperty(exports, "getBooleanFieldTemplate", { enumerable: true, get: function () { return form_fields_1.getBooleanFieldTemplate; } });
75
+ Object.defineProperty(exports, "getNumberFieldTemplate", { enumerable: true, get: function () { return form_fields_1.getNumberFieldTemplate; } });
76
+ Object.defineProperty(exports, "getTagsFieldTemplate", { enumerable: true, get: function () { return form_fields_1.getTagsFieldTemplate; } });
77
+ Object.defineProperty(exports, "getReferenceFieldTemplate", { enumerable: true, get: function () { return form_fields_1.getReferenceFieldTemplate; } });
78
+ // Media library templates
79
+ var media_1 = require("./media");
80
+ Object.defineProperty(exports, "getMediaUploaderTemplate", { enumerable: true, get: function () { return media_1.getMediaUploaderTemplate; } });
81
+ Object.defineProperty(exports, "getMediaGridTemplate", { enumerable: true, get: function () { return media_1.getMediaGridTemplate; } });
82
+ Object.defineProperty(exports, "getMediaPickerTemplate", { enumerable: true, get: function () { return media_1.getMediaPickerTemplate; } });
83
+ Object.defineProperty(exports, "getMediaApiTemplate", { enumerable: true, get: function () { return media_1.getMediaApiTemplate; } });
84
+ Object.defineProperty(exports, "getMediaLibraryRouteTemplate", { enumerable: true, get: function () { return media_1.getMediaLibraryRouteTemplate; } });
85
+ // Additional UI component templates
86
+ var ui_progress_1 = require("./ui-progress");
87
+ Object.defineProperty(exports, "getProgressTemplate", { enumerable: true, get: function () { return ui_progress_1.getProgressTemplate; } });
88
+ var ui_dialog_1 = require("./ui-dialog");
89
+ Object.defineProperty(exports, "getDialogTemplate", { enumerable: true, get: function () { return ui_dialog_1.getDialogTemplate; } });
90
+ var ui_tabs_1 = require("./ui-tabs");
91
+ Object.defineProperty(exports, "getTabsTemplate", { enumerable: true, get: function () { return ui_tabs_1.getTabsTemplate; } });
92
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,kBAAkB;AAClB,+CAAwD;AAA/C,sHAAA,sBAAsB,OAAA;AAC/B,6CAAsD;AAA7C,oHAAA,qBAAqB,OAAA;AAC9B,6DAAmG;AAA1F,mIAAA,4BAA4B,OAAA;AAAE,mIAAA,4BAA4B,OAAA;AACnE,uEAA8E;AAArE,4IAAA,gCAAgC,OAAA;AAEzC,4BAA4B;AAC5B,iDAA0D;AAAjD,wHAAA,uBAAuB,OAAA;AAChC,+CAAwD;AAA/C,sHAAA,sBAAsB,OAAA;AAC/B,yDAAkE;AAAzD,gIAAA,2BAA2B,OAAA;AACpC,qDAA8D;AAArD,4HAAA,yBAAyB,OAAA;AAClC,mDAA4D;AAAnD,0HAAA,wBAAwB,OAAA;AACjC,iDAA0D;AAAjD,wHAAA,uBAAuB,OAAA;AAEhC,yBAAyB;AACzB,uCAA8C;AAArC,4GAAA,gBAAgB,OAAA;AACzB,yCAAgD;AAAvC,8GAAA,iBAAiB,OAAA;AAC1B,uDAA6D;AAApD,2HAAA,uBAAuB,OAAA;AAChC,uCAA8C;AAArC,4GAAA,gBAAgB,OAAA;AACzB,2CAAkD;AAAzC,gHAAA,kBAAkB,OAAA;AAE3B,6BAA6B;AAC7B,mCAA+E;AAAtE,kHAAA,wBAAwB,OAAA;AAAE,mHAAA,yBAAyB,OAAA;AAE5D,gCAAgC;AAChC,iDAA0D;AAAjD,wHAAA,uBAAuB,OAAA;AAChC,mDAA4D;AAAnD,0HAAA,wBAAwB,OAAA;AACjC,2CAAoD;AAA3C,kHAAA,oBAAoB,OAAA;AAC7B,mEAA2E;AAAlE,yIAAA,+BAA+B,OAAA;AACxC,mDAA4D;AAAnD,0HAAA,wBAAwB,OAAA;AACjC,mEAGkC;AAFhC,wIAAA,8BAA8B,OAAA;AAC9B,oIAAA,0BAA0B,OAAA;AAG5B,iCAAiC;AACjC,6CAeuB;AAdrB,yHAAA,0BAA0B,OAAA;AAC1B,mHAAA,oBAAoB,OAAA;AACpB,uHAAA,wBAAwB,OAAA;AACxB,uHAAA,wBAAwB,OAAA;AACxB,mHAAA,oBAAoB,OAAA;AACpB,oHAAA,qBAAqB,OAAA;AACrB,qHAAA,sBAAsB,OAAA;AACtB,0HAAA,2BAA2B,OAAA;AAC3B,mHAAA,oBAAoB,OAAA;AACpB,uHAAA,wBAAwB,OAAA;AACxB,sHAAA,uBAAuB,OAAA;AACvB,qHAAA,sBAAsB,OAAA;AACtB,mHAAA,oBAAoB,OAAA;AACpB,wHAAA,yBAAyB,OAAA;AAG3B,0BAA0B;AAC1B,iCAMiB;AALf,iHAAA,wBAAwB,OAAA;AACxB,6GAAA,oBAAoB,OAAA;AACpB,+GAAA,sBAAsB,OAAA;AACtB,4GAAA,mBAAmB,OAAA;AACnB,qHAAA,4BAA4B,OAAA;AAG9B,oCAAoC;AACpC,6CAAoD;AAA3C,kHAAA,mBAAmB,OAAA;AAC5B,yCAAgD;AAAvC,8GAAA,iBAAiB,OAAA;AAC1B,qCAA4C;AAAnC,0GAAA,eAAe,OAAA"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Media library template exports.
3
+ *
4
+ * This module exports all template generators for the media library
5
+ * functionality including upload, display, and picker components.
6
+ */
7
+ export { getMediaUploaderTemplate } from './media-uploader';
8
+ export { getMediaGridTemplate } from './media-grid';
9
+ export { getMediaPickerTemplate } from './media-picker';
10
+ export { getMediaApiTemplate } from './media-api';
11
+ export { getMediaLibraryRouteTemplate } from './media-library-route';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/media/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,50 @@
1
+ 'use strict';
2
+ /**
3
+ * Media library template exports.
4
+ *
5
+ * This module exports all template generators for the media library
6
+ * functionality including upload, display, and picker components.
7
+ */
8
+ Object.defineProperty(exports, '__esModule', { value: true });
9
+ exports.getMediaLibraryRouteTemplate =
10
+ exports.getMediaApiTemplate =
11
+ exports.getMediaPickerTemplate =
12
+ exports.getMediaGridTemplate =
13
+ exports.getMediaUploaderTemplate =
14
+ void 0;
15
+ var media_uploader_1 = require('./media-uploader');
16
+ Object.defineProperty(exports, 'getMediaUploaderTemplate', {
17
+ enumerable: true,
18
+ get: function () {
19
+ return media_uploader_1.getMediaUploaderTemplate;
20
+ },
21
+ });
22
+ var media_grid_1 = require('./media-grid');
23
+ Object.defineProperty(exports, 'getMediaGridTemplate', {
24
+ enumerable: true,
25
+ get: function () {
26
+ return media_grid_1.getMediaGridTemplate;
27
+ },
28
+ });
29
+ var media_picker_1 = require('./media-picker');
30
+ Object.defineProperty(exports, 'getMediaPickerTemplate', {
31
+ enumerable: true,
32
+ get: function () {
33
+ return media_picker_1.getMediaPickerTemplate;
34
+ },
35
+ });
36
+ var media_api_1 = require('./media-api');
37
+ Object.defineProperty(exports, 'getMediaApiTemplate', {
38
+ enumerable: true,
39
+ get: function () {
40
+ return media_api_1.getMediaApiTemplate;
41
+ },
42
+ });
43
+ var media_library_route_1 = require('./media-library-route');
44
+ Object.defineProperty(exports, 'getMediaLibraryRouteTemplate', {
45
+ enumerable: true,
46
+ get: function () {
47
+ return media_library_route_1.getMediaLibraryRouteTemplate;
48
+ },
49
+ });
50
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/media/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,mDAA4D;AAAnD,0HAAA,wBAAwB,OAAA;AACjC,2CAAoD;AAA3C,kHAAA,oBAAoB,OAAA;AAC7B,+CAAwD;AAA/C,sHAAA,sBAAsB,OAAA;AAC/B,yCAAkD;AAAzC,gHAAA,mBAAmB,OAAA;AAC5B,6DAAqE;AAA5D,mIAAA,4BAA4B,OAAA"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Generates the media API client template.
3
+ *
4
+ * This template provides client-side helpers for:
5
+ * - Requesting presigned URLs
6
+ * - Uploading files directly to S3
7
+ * - Creating media records
8
+ * - Listing and deleting media
9
+ *
10
+ * @returns Template string for app/lib/media-api.ts
11
+ */
12
+ export declare function getMediaApiTemplate(): string;
13
+ //# sourceMappingURL=media-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-api.d.ts","sourceRoot":"","sources":["../../../src/templates/media/media-api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAkQ5C"}