@qwickapps/cms 0.2.0

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 (259) hide show
  1. package/LICENSE +45 -0
  2. package/README.md +203 -0
  3. package/dist/admin/components/AccordionItemRowLabel.d.ts +20 -0
  4. package/dist/admin/components/AccordionItemRowLabel.d.ts.map +1 -0
  5. package/dist/admin/components/AccordionItemRowLabel.js +47 -0
  6. package/dist/admin/components/AccordionItemRowLabel.js.map +1 -0
  7. package/dist/admin/components/BlockRowLabel.d.ts +19 -0
  8. package/dist/admin/components/BlockRowLabel.d.ts.map +1 -0
  9. package/dist/admin/components/BlockRowLabel.js +52 -0
  10. package/dist/admin/components/BlockRowLabel.js.map +1 -0
  11. package/dist/admin/components/ButtonRowLabel.d.ts +23 -0
  12. package/dist/admin/components/ButtonRowLabel.d.ts.map +1 -0
  13. package/dist/admin/components/ButtonRowLabel.js +63 -0
  14. package/dist/admin/components/ButtonRowLabel.js.map +1 -0
  15. package/dist/admin/components/CardRowLabel.d.ts +23 -0
  16. package/dist/admin/components/CardRowLabel.d.ts.map +1 -0
  17. package/dist/admin/components/CardRowLabel.js +59 -0
  18. package/dist/admin/components/CardRowLabel.js.map +1 -0
  19. package/dist/admin/components/ContentPreview.d.ts +12 -0
  20. package/dist/admin/components/ContentPreview.d.ts.map +1 -0
  21. package/dist/admin/components/ContentPreview.js +95 -0
  22. package/dist/admin/components/ContentPreview.js.map +1 -0
  23. package/dist/admin/components/Dashboard.d.ts +13 -0
  24. package/dist/admin/components/Dashboard.d.ts.map +1 -0
  25. package/dist/admin/components/Dashboard.js +7 -0
  26. package/dist/admin/components/Dashboard.js.map +1 -0
  27. package/dist/admin/components/DashboardContent.d.ts +11 -0
  28. package/dist/admin/components/DashboardContent.d.ts.map +1 -0
  29. package/dist/admin/components/DashboardContent.js +129 -0
  30. package/dist/admin/components/DashboardContent.js.map +1 -0
  31. package/dist/admin/components/FormFieldRowLabel.d.ts +21 -0
  32. package/dist/admin/components/FormFieldRowLabel.d.ts.map +1 -0
  33. package/dist/admin/components/FormFieldRowLabel.js +47 -0
  34. package/dist/admin/components/FormFieldRowLabel.js.map +1 -0
  35. package/dist/admin/components/Icon.d.ts +10 -0
  36. package/dist/admin/components/Icon.d.ts.map +1 -0
  37. package/dist/admin/components/Icon.js +16 -0
  38. package/dist/admin/components/Icon.js.map +1 -0
  39. package/dist/admin/components/Logo.d.ts +10 -0
  40. package/dist/admin/components/Logo.d.ts.map +1 -0
  41. package/dist/admin/components/Logo.js +16 -0
  42. package/dist/admin/components/Logo.js.map +1 -0
  43. package/dist/admin/components/NavigationItemRowLabel.d.ts +21 -0
  44. package/dist/admin/components/NavigationItemRowLabel.d.ts.map +1 -0
  45. package/dist/admin/components/NavigationItemRowLabel.js +43 -0
  46. package/dist/admin/components/NavigationItemRowLabel.js.map +1 -0
  47. package/dist/admin/components/NavigationSubItemRowLabel.d.ts +19 -0
  48. package/dist/admin/components/NavigationSubItemRowLabel.d.ts.map +1 -0
  49. package/dist/admin/components/NavigationSubItemRowLabel.js +32 -0
  50. package/dist/admin/components/NavigationSubItemRowLabel.js.map +1 -0
  51. package/dist/admin/components/PagesListHeader.d.ts +13 -0
  52. package/dist/admin/components/PagesListHeader.d.ts.map +1 -0
  53. package/dist/admin/components/PagesListHeader.js +48 -0
  54. package/dist/admin/components/PagesListHeader.js.map +1 -0
  55. package/dist/admin/components/ProductsListHeader.d.ts +13 -0
  56. package/dist/admin/components/ProductsListHeader.d.ts.map +1 -0
  57. package/dist/admin/components/ProductsListHeader.js +55 -0
  58. package/dist/admin/components/ProductsListHeader.js.map +1 -0
  59. package/dist/admin/components/styles/CollectionListHeader.css +161 -0
  60. package/dist/admin/components/styles/ContentPreview.css +416 -0
  61. package/dist/admin/components/styles/Dashboard.css +338 -0
  62. package/dist/admin/fields/ColorInput.d.ts +13 -0
  63. package/dist/admin/fields/ColorInput.d.ts.map +1 -0
  64. package/dist/admin/fields/ColorInput.js +201 -0
  65. package/dist/admin/fields/ColorInput.js.map +1 -0
  66. package/dist/admin/fields/index.d.ts +9 -0
  67. package/dist/admin/fields/index.d.ts.map +1 -0
  68. package/dist/admin/fields/index.js +9 -0
  69. package/dist/admin/fields/index.js.map +1 -0
  70. package/dist/admin/index.d.ts +24 -0
  71. package/dist/admin/index.d.ts.map +1 -0
  72. package/dist/admin/index.js +30 -0
  73. package/dist/admin/index.js.map +1 -0
  74. package/dist/blocks/ContentBlocks.d.ts +75 -0
  75. package/dist/blocks/ContentBlocks.d.ts.map +1 -0
  76. package/dist/blocks/ContentBlocks.js +1241 -0
  77. package/dist/blocks/ContentBlocks.js.map +1 -0
  78. package/dist/blocks/index.d.ts +2 -0
  79. package/dist/blocks/index.d.ts.map +1 -0
  80. package/dist/blocks/index.js +3 -0
  81. package/dist/blocks/index.js.map +1 -0
  82. package/dist/client/PayloadAPIClient.d.ts +65 -0
  83. package/dist/client/PayloadAPIClient.d.ts.map +1 -0
  84. package/dist/client/PayloadAPIClient.js +167 -0
  85. package/dist/client/PayloadAPIClient.js.map +1 -0
  86. package/dist/collections/Automations.d.ts +12 -0
  87. package/dist/collections/Automations.d.ts.map +1 -0
  88. package/dist/collections/Automations.js +741 -0
  89. package/dist/collections/Automations.js.map +1 -0
  90. package/dist/collections/Features.d.ts +3 -0
  91. package/dist/collections/Features.d.ts.map +1 -0
  92. package/dist/collections/Features.js +69 -0
  93. package/dist/collections/Features.js.map +1 -0
  94. package/dist/collections/Footer.d.ts +11 -0
  95. package/dist/collections/Footer.d.ts.map +1 -0
  96. package/dist/collections/Footer.js +130 -0
  97. package/dist/collections/Footer.js.map +1 -0
  98. package/dist/collections/FormSubmissions.d.ts +3 -0
  99. package/dist/collections/FormSubmissions.d.ts.map +1 -0
  100. package/dist/collections/FormSubmissions.js +119 -0
  101. package/dist/collections/FormSubmissions.js.map +1 -0
  102. package/dist/collections/Forms.d.ts +16 -0
  103. package/dist/collections/Forms.d.ts.map +1 -0
  104. package/dist/collections/Forms.js +308 -0
  105. package/dist/collections/Forms.js.map +1 -0
  106. package/dist/collections/HeroBlocks.d.ts +3 -0
  107. package/dist/collections/HeroBlocks.d.ts.map +1 -0
  108. package/dist/collections/HeroBlocks.js +115 -0
  109. package/dist/collections/HeroBlocks.js.map +1 -0
  110. package/dist/collections/Media.d.ts +3 -0
  111. package/dist/collections/Media.d.ts.map +1 -0
  112. package/dist/collections/Media.js +26 -0
  113. package/dist/collections/Media.js.map +1 -0
  114. package/dist/collections/Navigation.d.ts +3 -0
  115. package/dist/collections/Navigation.d.ts.map +1 -0
  116. package/dist/collections/Navigation.js +106 -0
  117. package/dist/collections/Navigation.js.map +1 -0
  118. package/dist/collections/Pages.d.ts +3 -0
  119. package/dist/collections/Pages.d.ts.map +1 -0
  120. package/dist/collections/Pages.js +94 -0
  121. package/dist/collections/Pages.js.map +1 -0
  122. package/dist/collections/Posts.d.ts +3 -0
  123. package/dist/collections/Posts.d.ts.map +1 -0
  124. package/dist/collections/Posts.js +134 -0
  125. package/dist/collections/Posts.js.map +1 -0
  126. package/dist/collections/Products.d.ts +3 -0
  127. package/dist/collections/Products.d.ts.map +1 -0
  128. package/dist/collections/Products.js +264 -0
  129. package/dist/collections/Products.js.map +1 -0
  130. package/dist/collections/Users.d.ts +3 -0
  131. package/dist/collections/Users.d.ts.map +1 -0
  132. package/dist/collections/Users.js +53 -0
  133. package/dist/collections/Users.js.map +1 -0
  134. package/dist/collections/hooks/index.d.ts +9 -0
  135. package/dist/collections/hooks/index.d.ts.map +1 -0
  136. package/dist/collections/hooks/index.js +9 -0
  137. package/dist/collections/hooks/index.js.map +1 -0
  138. package/dist/collections/hooks/loggingHooks.d.ts +45 -0
  139. package/dist/collections/hooks/loggingHooks.d.ts.map +1 -0
  140. package/dist/collections/hooks/loggingHooks.js +109 -0
  141. package/dist/collections/hooks/loggingHooks.js.map +1 -0
  142. package/dist/collections/index.d.ts +14 -0
  143. package/dist/collections/index.d.ts.map +1 -0
  144. package/dist/collections/index.js +16 -0
  145. package/dist/collections/index.js.map +1 -0
  146. package/dist/components/index.d.ts +2 -0
  147. package/dist/components/index.d.ts.map +1 -0
  148. package/dist/components/index.js +4 -0
  149. package/dist/components/index.js.map +1 -0
  150. package/dist/globals/AdvancedSettings.d.ts +8 -0
  151. package/dist/globals/AdvancedSettings.d.ts.map +1 -0
  152. package/dist/globals/AdvancedSettings.js +157 -0
  153. package/dist/globals/AdvancedSettings.js.map +1 -0
  154. package/dist/globals/Integrations.d.ts +8 -0
  155. package/dist/globals/Integrations.d.ts.map +1 -0
  156. package/dist/globals/Integrations.js +270 -0
  157. package/dist/globals/Integrations.js.map +1 -0
  158. package/dist/globals/SiteSettings.d.ts +8 -0
  159. package/dist/globals/SiteSettings.d.ts.map +1 -0
  160. package/dist/globals/SiteSettings.js +258 -0
  161. package/dist/globals/SiteSettings.js.map +1 -0
  162. package/dist/globals/ThemeSettings.d.ts +11 -0
  163. package/dist/globals/ThemeSettings.d.ts.map +1 -0
  164. package/dist/globals/ThemeSettings.js +92 -0
  165. package/dist/globals/ThemeSettings.js.map +1 -0
  166. package/dist/globals/index.d.ts +5 -0
  167. package/dist/globals/index.d.ts.map +1 -0
  168. package/dist/globals/index.js +6 -0
  169. package/dist/globals/index.js.map +1 -0
  170. package/dist/index.d.ts +9 -0
  171. package/dist/index.d.ts.map +1 -0
  172. package/dist/index.js +14 -0
  173. package/dist/index.js.map +1 -0
  174. package/dist/logging/index.d.ts +73 -0
  175. package/dist/logging/index.d.ts.map +1 -0
  176. package/dist/logging/index.js +190 -0
  177. package/dist/logging/index.js.map +1 -0
  178. package/dist/nextjs/BlockRenderer.d.ts +227 -0
  179. package/dist/nextjs/BlockRenderer.d.ts.map +1 -0
  180. package/dist/nextjs/BlockRenderer.js +358 -0
  181. package/dist/nextjs/BlockRenderer.js.map +1 -0
  182. package/dist/nextjs/ClientHomePage.d.ts +6 -0
  183. package/dist/nextjs/ClientHomePage.d.ts.map +1 -0
  184. package/dist/nextjs/ClientHomePage.js +17 -0
  185. package/dist/nextjs/ClientHomePage.js.map +1 -0
  186. package/dist/nextjs/ClientSideQwickApp.d.ts +23 -0
  187. package/dist/nextjs/ClientSideQwickApp.d.ts.map +1 -0
  188. package/dist/nextjs/ClientSideQwickApp.js +50 -0
  189. package/dist/nextjs/ClientSideQwickApp.js.map +1 -0
  190. package/dist/nextjs/DynamicQwickApp.d.ts +9 -0
  191. package/dist/nextjs/DynamicQwickApp.d.ts.map +1 -0
  192. package/dist/nextjs/DynamicQwickApp.js +19 -0
  193. package/dist/nextjs/DynamicQwickApp.js.map +1 -0
  194. package/dist/nextjs/FooterFromSettings.d.ts +6 -0
  195. package/dist/nextjs/FooterFromSettings.d.ts.map +1 -0
  196. package/dist/nextjs/FooterFromSettings.js +72 -0
  197. package/dist/nextjs/FooterFromSettings.js.map +1 -0
  198. package/dist/nextjs/FormBlockComponent.d.ts +25 -0
  199. package/dist/nextjs/FormBlockComponent.d.ts.map +1 -0
  200. package/dist/nextjs/FormBlockComponent.js +110 -0
  201. package/dist/nextjs/FormBlockComponent.js.map +1 -0
  202. package/dist/nextjs/HomePageContent.d.ts +6 -0
  203. package/dist/nextjs/HomePageContent.d.ts.map +1 -0
  204. package/dist/nextjs/HomePageContent.js +50 -0
  205. package/dist/nextjs/HomePageContent.js.map +1 -0
  206. package/dist/nextjs/LivePreviewClient.d.ts +40 -0
  207. package/dist/nextjs/LivePreviewClient.d.ts.map +1 -0
  208. package/dist/nextjs/LivePreviewClient.js +35 -0
  209. package/dist/nextjs/LivePreviewClient.js.map +1 -0
  210. package/dist/nextjs/RefreshRouteOnSave.d.ts +31 -0
  211. package/dist/nextjs/RefreshRouteOnSave.d.ts.map +1 -0
  212. package/dist/nextjs/RefreshRouteOnSave.js +59 -0
  213. package/dist/nextjs/RefreshRouteOnSave.js.map +1 -0
  214. package/dist/nextjs/ScriptsInjector.d.ts +2 -0
  215. package/dist/nextjs/ScriptsInjector.d.ts.map +1 -0
  216. package/dist/nextjs/ScriptsInjector.js +73 -0
  217. package/dist/nextjs/ScriptsInjector.js.map +1 -0
  218. package/dist/nextjs/ServerQwickApp.d.ts +13 -0
  219. package/dist/nextjs/ServerQwickApp.d.ts.map +1 -0
  220. package/dist/nextjs/ServerQwickApp.js +159 -0
  221. package/dist/nextjs/ServerQwickApp.js.map +1 -0
  222. package/dist/nextjs/SettingsProvider.d.ts +110 -0
  223. package/dist/nextjs/SettingsProvider.d.ts.map +1 -0
  224. package/dist/nextjs/SettingsProvider.js +107 -0
  225. package/dist/nextjs/SettingsProvider.js.map +1 -0
  226. package/dist/nextjs/SiteLogo.d.ts +35 -0
  227. package/dist/nextjs/SiteLogo.d.ts.map +1 -0
  228. package/dist/nextjs/SiteLogo.js +105 -0
  229. package/dist/nextjs/SiteLogo.js.map +1 -0
  230. package/dist/nextjs/framework.d.ts +19 -0
  231. package/dist/nextjs/framework.d.ts.map +1 -0
  232. package/dist/nextjs/framework.js +35 -0
  233. package/dist/nextjs/framework.js.map +1 -0
  234. package/dist/nextjs/index.d.ts +38 -0
  235. package/dist/nextjs/index.d.ts.map +1 -0
  236. package/dist/nextjs/index.js +47 -0
  237. package/dist/nextjs/index.js.map +1 -0
  238. package/dist/nextjs/metadata.d.ts +20 -0
  239. package/dist/nextjs/metadata.d.ts.map +1 -0
  240. package/dist/nextjs/metadata.js +107 -0
  241. package/dist/nextjs/metadata.js.map +1 -0
  242. package/dist/plugins/index.d.ts +2 -0
  243. package/dist/plugins/index.d.ts.map +1 -0
  244. package/dist/plugins/index.js +3 -0
  245. package/dist/plugins/index.js.map +1 -0
  246. package/dist/plugins/qwickapps-plugin.d.ts +78 -0
  247. package/dist/plugins/qwickapps-plugin.d.ts.map +1 -0
  248. package/dist/plugins/qwickapps-plugin.js +154 -0
  249. package/dist/plugins/qwickapps-plugin.js.map +1 -0
  250. package/dist/providers/PayloadDataProvider.d.ts +72 -0
  251. package/dist/providers/PayloadDataProvider.d.ts.map +1 -0
  252. package/dist/providers/PayloadDataProvider.js +222 -0
  253. package/dist/providers/PayloadDataProvider.js.map +1 -0
  254. package/dist/providers/index.d.ts +2 -0
  255. package/dist/providers/index.d.ts.map +1 -0
  256. package/dist/providers/index.js +3 -0
  257. package/dist/providers/index.js.map +1 -0
  258. package/dist/styles/admin-theme.css +352 -0
  259. package/package.json +104 -0
@@ -0,0 +1,222 @@
1
+ // @ts-nocheck - @qwickapps/schema is a peer dependency resolved at runtime
2
+ /**
3
+ * Payload CMS Data Provider Implementation
4
+ *
5
+ * Integrates Payload CMS with QwickApps React Framework data binding system.
6
+ * Fetches content from Payload REST API and transforms it to match framework schemas.
7
+ *
8
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
9
+ */
10
+ /**
11
+ * Payload CMS-based data provider for QwickApps Framework
12
+ *
13
+ * Fetches data from Payload REST API and provides it to framework components
14
+ * via the standard IDataProvider interface.
15
+ *
16
+ * Usage:
17
+ * ```tsx
18
+ * const payloadProvider = new PayloadDataProvider({
19
+ * apiUrl: 'http://localhost:3000/api'
20
+ * });
21
+ *
22
+ * <DataProvider dataSource={{ dataProvider: payloadProvider }}>
23
+ * <HeroBlock dataSource="hero-blocks" />
24
+ * </DataProvider>
25
+ * ```
26
+ */
27
+ export class PayloadDataProvider {
28
+ apiUrl;
29
+ debug;
30
+ constructor(config = {}) {
31
+ this.apiUrl = config.apiUrl || '/api';
32
+ this.debug = config.debug || false;
33
+ }
34
+ /**
35
+ * Get single data item by slug
36
+ *
37
+ * For Payload, slug can be:
38
+ * - Collection name (e.g., "hero-blocks") - returns first item
39
+ * - Collection with ID (e.g., "hero-blocks/1") - returns specific item
40
+ * - Nested path (e.g., "pages.home.hero") - navigates nested structure
41
+ */
42
+ async get(slug) {
43
+ try {
44
+ if (this.debug) {
45
+ console.log('[PayloadDataProvider] get:', slug);
46
+ }
47
+ // Parse slug to determine collection and optional ID
48
+ const { collection, id, path } = this.parseSlug(slug);
49
+ // Build API URL
50
+ let url = `${this.apiUrl}/${collection}`;
51
+ if (id) {
52
+ // Fetch specific item by ID
53
+ url = `${url}/${id}`;
54
+ const response = await fetch(url, { cache: 'no-store' });
55
+ if (!response.ok) {
56
+ throw new Error(`Failed to fetch ${url}: ${response.statusText}`);
57
+ }
58
+ const data = await response.json();
59
+ return {
60
+ data: this.transformPayloadData(data),
61
+ cached: false,
62
+ meta: {
63
+ schema: collection,
64
+ version: '1.0.0',
65
+ slug
66
+ }
67
+ };
68
+ }
69
+ else {
70
+ // Fetch first item from collection
71
+ url = `${url}?limit=1`;
72
+ const response = await fetch(url, { cache: 'no-store' });
73
+ if (!response.ok) {
74
+ throw new Error(`Failed to fetch ${url}: ${response.statusText}`);
75
+ }
76
+ const result = await response.json();
77
+ const firstItem = result.docs?.[0];
78
+ if (!firstItem) {
79
+ return { data: undefined };
80
+ }
81
+ // If path specified, navigate into the data
82
+ const data = path ? this.navigatePath(firstItem, path) : firstItem;
83
+ return {
84
+ data: this.transformPayloadData(data),
85
+ cached: false,
86
+ meta: {
87
+ schema: collection,
88
+ version: '1.0.0',
89
+ slug
90
+ }
91
+ };
92
+ }
93
+ }
94
+ catch (error) {
95
+ console.error('[PayloadDataProvider] Error in get:', error);
96
+ return {
97
+ data: undefined,
98
+ error: error instanceof Error ? error : new Error(String(error))
99
+ };
100
+ }
101
+ }
102
+ /**
103
+ * Select multiple data items with query options
104
+ *
105
+ * Maps framework SelectOptions to Payload API query parameters
106
+ */
107
+ async select(schema, options = {}) {
108
+ try {
109
+ if (this.debug) {
110
+ console.log('[PayloadDataProvider] select:', schema, options);
111
+ }
112
+ // Build query parameters
113
+ const params = new URLSearchParams();
114
+ if (options.limit) {
115
+ params.append('limit', String(options.limit));
116
+ }
117
+ if (options.offset) {
118
+ params.append('page', String(Math.floor(options.offset / (options.limit || 10)) + 1));
119
+ }
120
+ if (options.orderBy && options.sort) {
121
+ const sortPrefix = options.sort === 'desc' ? '-' : '';
122
+ params.append('sort', `${sortPrefix}${options.orderBy}`);
123
+ }
124
+ // Apply filters as where clause
125
+ if (options.filters) {
126
+ params.append('where', JSON.stringify(options.filters));
127
+ }
128
+ // Build API URL
129
+ const url = `${this.apiUrl}/${schema}?${params.toString()}`;
130
+ const response = await fetch(url, { cache: 'no-store' });
131
+ if (!response.ok) {
132
+ throw new Error(`Failed to fetch ${url}: ${response.statusText}`);
133
+ }
134
+ const result = await response.json();
135
+ const items = result.docs || [];
136
+ return {
137
+ data: items.map((item) => this.transformPayloadData(item)),
138
+ cached: false,
139
+ meta: {
140
+ schema,
141
+ version: '1.0.0',
142
+ total: result.totalDocs || items.length,
143
+ offset: options.offset || 0,
144
+ limit: options.limit || items.length
145
+ }
146
+ };
147
+ }
148
+ catch (error) {
149
+ console.error('[PayloadDataProvider] Error in select:', error);
150
+ return {
151
+ data: [],
152
+ error: error instanceof Error ? error : new Error(String(error))
153
+ };
154
+ }
155
+ }
156
+ /**
157
+ * Parse slug into collection, ID, and nested path
158
+ */
159
+ parseSlug(slug) {
160
+ // Remove leading slash if present
161
+ const cleanSlug = slug.replace(/^\//, '');
162
+ // Check for dot notation (e.g., "pages.home.hero")
163
+ if (cleanSlug.includes('.')) {
164
+ const parts = cleanSlug.split('.');
165
+ return {
166
+ collection: parts[0],
167
+ path: parts.slice(1).join('.')
168
+ };
169
+ }
170
+ // Check for slash notation (e.g., "hero-blocks/1")
171
+ if (cleanSlug.includes('/')) {
172
+ const [collection, id] = cleanSlug.split('/');
173
+ return { collection, id };
174
+ }
175
+ // Simple collection name
176
+ return { collection: cleanSlug };
177
+ }
178
+ /**
179
+ * Navigate nested path in object
180
+ */
181
+ navigatePath(obj, path) {
182
+ const parts = path.split('.');
183
+ let current = obj;
184
+ for (const part of parts) {
185
+ if (current && typeof current === 'object') {
186
+ current = current[part];
187
+ }
188
+ else {
189
+ return undefined;
190
+ }
191
+ }
192
+ return current;
193
+ }
194
+ /**
195
+ * Transform Payload data to match framework expectations
196
+ *
197
+ * Payload returns data with metadata (id, createdAt, updatedAt, etc.)
198
+ * This method can transform it to match framework component props
199
+ */
200
+ transformPayloadData(data) {
201
+ if (!data)
202
+ return data;
203
+ // For HeroBlock, map Payload fields to framework props
204
+ if (data.title && data.backgroundGradient) {
205
+ return {
206
+ ...data,
207
+ // Map Payload's 'height' to framework's 'blockHeight'
208
+ blockHeight: data.height || 'medium',
209
+ // Map Payload's 'ctaButtons' to framework's 'actions'
210
+ actions: data.ctaButtons?.map((btn) => ({
211
+ label: btn.text,
212
+ href: btn.link,
213
+ variant: btn.variant === 'contained' ? 'primary' : 'outlined',
214
+ buttonSize: 'large'
215
+ })) || []
216
+ };
217
+ }
218
+ // Return data as-is for other collections
219
+ return data;
220
+ }
221
+ }
222
+ //# sourceMappingURL=PayloadDataProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PayloadDataProvider.js","sourceRoot":"","sources":["../../src/providers/PayloadDataProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { PayloadDataProvider } from './PayloadDataProvider.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA"}
@@ -0,0 +1,3 @@
1
+ // QwickApps CMS - Providers
2
+ export { PayloadDataProvider } from './PayloadDataProvider.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA"}
@@ -0,0 +1,352 @@
1
+ /**
2
+ * QwickPress Admin Theme - QwickApps Branding
3
+ *
4
+ * Customizes Payload CMS colors to match QwickApps brand (Blue #007bff)
5
+ * Automatically supports both light and dark modes via Payload's color system
6
+ *
7
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
8
+ */
9
+
10
+ :root {
11
+ /* ===================================
12
+ * QwickApps Brand Blue (#007bff = rgb(0, 123, 255))
13
+ * Override the success color (primary action color in Payload)
14
+ * =================================== */
15
+
16
+ /* Base blue color scale - QwickApps Blue */
17
+ --color-success-50: rgb(230, 242, 255);
18
+ --color-success-100: rgb(204, 229, 255);
19
+ --color-success-150: rgb(179, 216, 255);
20
+ --color-success-200: rgb(153, 204, 255);
21
+ --color-success-250: rgb(128, 191, 255);
22
+ --color-success-300: rgb(102, 178, 255);
23
+ --color-success-350: rgb(77, 165, 255);
24
+ --color-success-400: rgb(51, 153, 255);
25
+ --color-success-450: rgb(26, 140, 255);
26
+ --color-success-500: rgb(0, 123, 255); /* #007bff - QwickApps Primary */
27
+ --color-success-550: rgb(0, 111, 230);
28
+ --color-success-600: rgb(0, 98, 204);
29
+ --color-success-650: rgb(0, 86, 179);
30
+ --color-success-700: rgb(0, 74, 153);
31
+ --color-success-750: rgb(0, 62, 128);
32
+ --color-success-800: rgb(0, 49, 102);
33
+ --color-success-850: rgb(0, 37, 77);
34
+ --color-success-900: rgb(0, 25, 51);
35
+ --color-success-950: rgb(0, 12, 26);
36
+
37
+ /* Also make the blue color scale match */
38
+ --color-blue-50: var(--color-success-50);
39
+ --color-blue-100: var(--color-success-100);
40
+ --color-blue-150: var(--color-success-150);
41
+ --color-blue-200: var(--color-success-200);
42
+ --color-blue-250: var(--color-success-250);
43
+ --color-blue-300: var(--color-success-300);
44
+ --color-blue-350: var(--color-success-350);
45
+ --color-blue-400: var(--color-success-400);
46
+ --color-blue-450: var(--color-success-450);
47
+ --color-blue-500: var(--color-success-500);
48
+ --color-blue-550: var(--color-success-550);
49
+ --color-blue-600: var(--color-success-600);
50
+ --color-blue-650: var(--color-success-650);
51
+ --color-blue-700: var(--color-success-700);
52
+ --color-blue-750: var(--color-success-750);
53
+ --color-blue-800: var(--color-success-800);
54
+ --color-blue-850: var(--color-success-850);
55
+ --color-blue-900: var(--color-success-900);
56
+ --color-blue-950: var(--color-success-950);
57
+ }
58
+
59
+ /* Dark mode is automatically handled by Payload's color mapping system */
60
+ /* The html[data-theme='dark'] rules in Payload's colors.scss will invert these colors */
61
+
62
+ /* ===================================
63
+ * Material Design Enhancements
64
+ * =================================== */
65
+
66
+ /* List view improvements */
67
+ .list-controls__wrap {
68
+ padding: 0 1.5rem 1rem;
69
+ }
70
+
71
+ /* Hide the broken search icon */
72
+ .list-controls__search .search-icon,
73
+ .list-controls__search > div:first-child {
74
+ display: none !important;
75
+ }
76
+
77
+ /* Add proper search icon with CSS */
78
+ .list-controls__search {
79
+ position: relative;
80
+ }
81
+
82
+ .list-controls__search input {
83
+ padding-left: 2.25rem !important;
84
+ font-size: 0.9375rem !important;
85
+ }
86
+
87
+ .list-controls__search::before {
88
+ content: '';
89
+ position: absolute;
90
+ left: 0.875rem;
91
+ top: 50%;
92
+ transform: translateY(-50%);
93
+ width: 14px;
94
+ height: 14px;
95
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='%23666'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z'/%3E%3C/svg%3E");
96
+ background-size: contain;
97
+ background-repeat: no-repeat;
98
+ opacity: 0.6;
99
+ pointer-events: none;
100
+ z-index: 2;
101
+ }
102
+
103
+ /* Dark mode search icon */
104
+ html[data-theme='dark'] .list-controls__search::before {
105
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='%23ccc'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z'/%3E%3C/svg%3E");
106
+ }
107
+
108
+ /* Collection list padding */
109
+ .collection-list {
110
+ padding: 0 !important;
111
+ }
112
+
113
+ .collection-list > .list-controls {
114
+ padding: 0;
115
+ margin-bottom: 0.5rem;
116
+ }
117
+
118
+ /* Table container spacing */
119
+ .table-wrapper {
120
+ margin: 0 1.5rem 1.5rem;
121
+ }
122
+
123
+ /* Reduce excessive vertical spacing */
124
+ .template-default {
125
+ padding-top: 0 !important;
126
+ }
127
+
128
+ /* Improved button styling */
129
+ .btn,
130
+ button[type="button"],
131
+ button[type="submit"],
132
+ .form-submit button {
133
+ border-radius: 5px !important;
134
+ font-weight: 500 !important;
135
+ letter-spacing: 0.01em !important;
136
+ transition: all 0.15s cubic-bezier(0.4, 0, 0.2, 1) !important;
137
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08) !important;
138
+ font-size: 0.9375rem !important;
139
+ }
140
+
141
+ .btn:hover,
142
+ button[type="button"]:hover,
143
+ button[type="submit"]:hover {
144
+ transform: translateY(-1px) !important;
145
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15) !important;
146
+ }
147
+
148
+ .btn:active,
149
+ button[type="button"]:active,
150
+ button[type="submit"]:active {
151
+ transform: translateY(0) !important;
152
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1) !important;
153
+ }
154
+
155
+ /* Enhanced card styling */
156
+ .card,
157
+ .collection-list,
158
+ .render-fields,
159
+ .field-type-group {
160
+ border-radius: 8px !important;
161
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05) !important;
162
+ transition: box-shadow 0.2s ease !important;
163
+ }
164
+
165
+ .card:hover,
166
+ .collection-list:hover {
167
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08) !important;
168
+ }
169
+
170
+ /* Table enhancements */
171
+ .table-wrapper,
172
+ .payload-table {
173
+ border-radius: 8px !important;
174
+ overflow: hidden !important;
175
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05) !important;
176
+ }
177
+
178
+ .table thead {
179
+ background: var(--theme-elevation-100) !important;
180
+ }
181
+
182
+ .table tbody tr {
183
+ transition: background-color 0.15s ease !important;
184
+ }
185
+
186
+ .table tbody tr:hover {
187
+ background: var(--theme-elevation-50) !important;
188
+ }
189
+
190
+ /* Input field improvements */
191
+ input[type="text"],
192
+ input[type="email"],
193
+ input[type="password"],
194
+ input[type="number"],
195
+ input[type="url"],
196
+ textarea,
197
+ select {
198
+ border-radius: 5px !important;
199
+ border: 1px solid var(--theme-elevation-300) !important;
200
+ transition: all 0.15s ease !important;
201
+ font-size: 0.9375rem !important;
202
+ }
203
+
204
+ input:focus,
205
+ textarea:focus,
206
+ select:focus {
207
+ border-color: var(--color-success-500) !important;
208
+ box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.1) !important;
209
+ outline: none !important;
210
+ }
211
+
212
+ /* Form groups spacing */
213
+ .field-type-text,
214
+ .field-type-textarea,
215
+ .field-type-select,
216
+ .field-type-number,
217
+ .field-type-email {
218
+ margin-bottom: 1.25rem !important;
219
+ }
220
+
221
+ /* Enhanced navigation */
222
+ .nav-group {
223
+ margin-bottom: 0.5rem !important;
224
+ }
225
+
226
+ .nav-link {
227
+ border-radius: 6px !important;
228
+ margin-bottom: 2px !important;
229
+ transition: all 0.15s ease !important;
230
+ }
231
+
232
+ .nav-link:hover {
233
+ background: var(--theme-elevation-100) !important;
234
+ transform: translateX(4px) !important;
235
+ }
236
+
237
+ .nav-link.active {
238
+ background: linear-gradient(90deg, var(--color-success-500) 0%, var(--color-success-600) 100%) !important;
239
+ box-shadow: 0 2px 8px rgba(0, 123, 255, 0.25) !important;
240
+ }
241
+
242
+ /* Modal and drawer improvements */
243
+ .modal,
244
+ .drawer {
245
+ border-radius: 12px !important;
246
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3) !important;
247
+ }
248
+
249
+ .modal-header,
250
+ .drawer-header {
251
+ border-bottom: 1px solid var(--theme-elevation-200) !important;
252
+ padding: 1.5rem !important;
253
+ }
254
+
255
+ /* Badge and pill styling */
256
+ .pill,
257
+ .badge {
258
+ border-radius: 12px !important;
259
+ padding: 0.25rem 0.75rem !important;
260
+ font-size: 0.75rem !important;
261
+ font-weight: 600 !important;
262
+ letter-spacing: 0.025em !important;
263
+ }
264
+
265
+ /* Improved spacing and typography */
266
+ h1, h2, h3, h4, h5, h6 {
267
+ font-weight: 600 !important;
268
+ letter-spacing: -0.015em !important;
269
+ margin-bottom: 0.75rem !important;
270
+ }
271
+
272
+ /* Collection title */
273
+ .collection-list h1,
274
+ .list-view h1 {
275
+ font-size: 1.75rem !important;
276
+ margin-bottom: 0.5rem !important;
277
+ }
278
+
279
+ /* Collection description */
280
+ .view-description {
281
+ font-size: 0.9375rem !important;
282
+ margin-bottom: 1.25rem !important;
283
+ opacity: 0.8;
284
+ }
285
+
286
+ /* List controls enhancement */
287
+ .list-controls {
288
+ background: var(--theme-elevation-50) !important;
289
+ border-radius: 8px !important;
290
+ padding: 1rem !important;
291
+ margin-bottom: 1.5rem !important;
292
+ border: 1px solid var(--theme-elevation-200) !important;
293
+ }
294
+
295
+ /* Pagination improvements */
296
+ .pagination {
297
+ gap: 0.5rem !important;
298
+ }
299
+
300
+ .pagination button {
301
+ border-radius: 6px !important;
302
+ min-width: 2.5rem !important;
303
+ height: 2.5rem !important;
304
+ }
305
+
306
+ /* Document controls */
307
+ .document-controls {
308
+ gap: 0.75rem !important;
309
+ padding: 1rem !important;
310
+ background: var(--theme-elevation-50) !important;
311
+ border-radius: 8px !important;
312
+ margin-bottom: 1.5rem !important;
313
+ }
314
+
315
+ /* Status indicators */
316
+ .status-published {
317
+ color: #10b981 !important;
318
+ }
319
+
320
+ .status-draft {
321
+ color: #f59e0b !important;
322
+ }
323
+
324
+ /* Loading states */
325
+ .loading-overlay {
326
+ backdrop-filter: blur(4px) !important;
327
+ }
328
+
329
+ /* Dark mode specific enhancements */
330
+ html[data-theme='dark'] .table thead {
331
+ background: var(--theme-elevation-200) !important;
332
+ }
333
+
334
+ html[data-theme='dark'] .list-controls {
335
+ background: var(--theme-elevation-100) !important;
336
+ border-color: var(--theme-elevation-400) !important;
337
+ }
338
+
339
+ html[data-theme='dark'] .document-controls {
340
+ background: var(--theme-elevation-100) !important;
341
+ }
342
+
343
+ /* Smooth scroll behavior */
344
+ html {
345
+ scroll-behavior: smooth !important;
346
+ }
347
+
348
+ /* Focus visible for accessibility */
349
+ *:focus-visible {
350
+ outline: 2px solid var(--color-success-500) !important;
351
+ outline-offset: 2px !important;
352
+ }