@duongthiu/onex-core 0.1.0 → 0.1.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 (190) hide show
  1. package/README.md +44 -65
  2. package/THEME_API.md +36 -33
  3. package/dist/api.js +14 -0
  4. package/dist/api.js.map +1 -0
  5. package/dist/api.mjs +5 -0
  6. package/dist/api.mjs.map +1 -0
  7. package/dist/auth.js +23 -0
  8. package/dist/auth.js.map +1 -0
  9. package/dist/auth.mjs +6 -0
  10. package/dist/auth.mjs.map +1 -0
  11. package/dist/blog.js +22 -0
  12. package/dist/blog.js.map +1 -0
  13. package/dist/blog.mjs +5 -0
  14. package/dist/blog.mjs.map +1 -0
  15. package/dist/cart.js +27 -0
  16. package/dist/cart.js.map +1 -0
  17. package/dist/cart.mjs +6 -0
  18. package/dist/cart.mjs.map +1 -0
  19. package/dist/chunk-2CSWHI3L.js +210 -0
  20. package/dist/chunk-2CSWHI3L.js.map +1 -0
  21. package/dist/chunk-2FGHIDUV.js +99 -0
  22. package/dist/chunk-2FGHIDUV.js.map +1 -0
  23. package/dist/chunk-2NMEKWO5.js +40 -0
  24. package/dist/chunk-2NMEKWO5.js.map +1 -0
  25. package/dist/chunk-43BVHGDT.mjs +131 -0
  26. package/dist/chunk-43BVHGDT.mjs.map +1 -0
  27. package/dist/chunk-4JVQJI3I.mjs +290 -0
  28. package/dist/chunk-4JVQJI3I.mjs.map +1 -0
  29. package/dist/chunk-5N2EKK5O.js +9550 -0
  30. package/dist/chunk-5N2EKK5O.js.map +1 -0
  31. package/dist/chunk-5T6NDVSN.js +76 -0
  32. package/dist/chunk-5T6NDVSN.js.map +1 -0
  33. package/dist/chunk-73AINNCI.mjs +201 -0
  34. package/dist/chunk-73AINNCI.mjs.map +1 -0
  35. package/dist/chunk-AIXBDAVP.mjs +61 -0
  36. package/dist/chunk-AIXBDAVP.mjs.map +1 -0
  37. package/dist/chunk-ALYN5HAC.js +210 -0
  38. package/dist/chunk-ALYN5HAC.js.map +1 -0
  39. package/dist/chunk-AREMJR3Q.js +36 -0
  40. package/dist/chunk-AREMJR3Q.js.map +1 -0
  41. package/dist/chunk-DXAI6XOI.mjs +33 -0
  42. package/dist/chunk-DXAI6XOI.mjs.map +1 -0
  43. package/dist/chunk-F5TFNWFJ.mjs +257 -0
  44. package/dist/chunk-F5TFNWFJ.mjs.map +1 -0
  45. package/dist/chunk-FQ7FWUZN.js +265 -0
  46. package/dist/chunk-FQ7FWUZN.js.map +1 -0
  47. package/dist/{chunk-3SZX6LHT.js → chunk-J27VGXJH.js} +2 -24
  48. package/dist/chunk-J27VGXJH.js.map +1 -0
  49. package/dist/chunk-JZ46LLTZ.js +121 -0
  50. package/dist/chunk-JZ46LLTZ.js.map +1 -0
  51. package/dist/chunk-K24UHN6G.mjs +76 -0
  52. package/dist/chunk-K24UHN6G.mjs.map +1 -0
  53. package/dist/chunk-KCQGGU5R.mjs +344 -0
  54. package/dist/chunk-KCQGGU5R.mjs.map +1 -0
  55. package/dist/chunk-MT22NYKT.mjs +117 -0
  56. package/dist/chunk-MT22NYKT.mjs.map +1 -0
  57. package/dist/chunk-NDD472IZ.js +85 -0
  58. package/dist/chunk-NDD472IZ.js.map +1 -0
  59. package/dist/chunk-NHOIGGYU.mjs +833 -0
  60. package/dist/chunk-NHOIGGYU.mjs.map +1 -0
  61. package/dist/chunk-O3XR7TW3.mjs +12 -0
  62. package/dist/chunk-O3XR7TW3.mjs.map +1 -0
  63. package/dist/chunk-OAPYSC2X.mjs +206 -0
  64. package/dist/chunk-OAPYSC2X.mjs.map +1 -0
  65. package/dist/{chunk-XE4EOKS4.mjs → chunk-ONJREDYY.mjs} +3 -23
  66. package/dist/chunk-ONJREDYY.mjs.map +1 -0
  67. package/dist/chunk-OVT2LUAM.js +197 -0
  68. package/dist/chunk-OVT2LUAM.js.map +1 -0
  69. package/dist/chunk-OWNGNGKL.js +331 -0
  70. package/dist/chunk-OWNGNGKL.js.map +1 -0
  71. package/dist/chunk-P7SXNZSV.js +298 -0
  72. package/dist/chunk-P7SXNZSV.js.map +1 -0
  73. package/dist/chunk-PFJOL3HI.mjs +71 -0
  74. package/dist/chunk-PFJOL3HI.mjs.map +1 -0
  75. package/dist/chunk-PPULMWJ6.js +295 -0
  76. package/dist/chunk-PPULMWJ6.js.map +1 -0
  77. package/dist/chunk-RGIVKACG.js +359 -0
  78. package/dist/chunk-RGIVKACG.js.map +1 -0
  79. package/dist/chunk-RPP5K2LP.js +870 -0
  80. package/dist/chunk-RPP5K2LP.js.map +1 -0
  81. package/dist/{chunk-7EON6Q4L.mjs → chunk-RUCHWUD7.mjs} +7651 -6370
  82. package/dist/chunk-RUCHWUD7.mjs.map +1 -0
  83. package/dist/chunk-SEVUIX4H.js +137 -0
  84. package/dist/chunk-SEVUIX4H.js.map +1 -0
  85. package/dist/chunk-SK2FSHFM.mjs +208 -0
  86. package/dist/chunk-SK2FSHFM.mjs.map +1 -0
  87. package/dist/chunk-T6EJ2GAV.mjs +294 -0
  88. package/dist/chunk-T6EJ2GAV.mjs.map +1 -0
  89. package/dist/chunk-ULBDOFZI.mjs +302 -0
  90. package/dist/chunk-ULBDOFZI.mjs.map +1 -0
  91. package/dist/chunk-V3JIELNV.js +241 -0
  92. package/dist/chunk-V3JIELNV.js.map +1 -0
  93. package/dist/chunk-V5E2KWMA.mjs +238 -0
  94. package/dist/chunk-V5E2KWMA.mjs.map +1 -0
  95. package/dist/chunk-VJA3ER6A.js +14 -0
  96. package/dist/chunk-VJA3ER6A.js.map +1 -0
  97. package/dist/chunk-VLI7ULX5.js +66 -0
  98. package/dist/chunk-VLI7ULX5.js.map +1 -0
  99. package/dist/chunk-WFGS5OFH.mjs +189 -0
  100. package/dist/chunk-WFGS5OFH.mjs.map +1 -0
  101. package/dist/chunk-WVC5GP24.mjs +96 -0
  102. package/dist/chunk-WVC5GP24.mjs.map +1 -0
  103. package/dist/chunk-YOSPWY5K.mjs +36 -0
  104. package/dist/chunk-YOSPWY5K.mjs.map +1 -0
  105. package/dist/chunk-ZFFXXLX7.js +205 -0
  106. package/dist/chunk-ZFFXXLX7.js.map +1 -0
  107. package/dist/client.js +512 -249
  108. package/dist/client.mjs +21 -2
  109. package/dist/components.js +393 -0
  110. package/dist/components.js.map +1 -0
  111. package/dist/components.mjs +8 -0
  112. package/dist/components.mjs.map +1 -0
  113. package/dist/config.js +17 -0
  114. package/dist/config.js.map +1 -0
  115. package/dist/config.mjs +4 -0
  116. package/dist/config.mjs.map +1 -0
  117. package/dist/contact.js +22 -0
  118. package/dist/contact.js.map +1 -0
  119. package/dist/contact.mjs +5 -0
  120. package/dist/contact.mjs.map +1 -0
  121. package/dist/contexts.js +51 -0
  122. package/dist/contexts.js.map +1 -0
  123. package/dist/contexts.mjs +6 -0
  124. package/dist/contexts.mjs.map +1 -0
  125. package/dist/finance.js +26 -0
  126. package/dist/finance.js.map +1 -0
  127. package/dist/finance.mjs +5 -0
  128. package/dist/finance.mjs.map +1 -0
  129. package/dist/icons.js +15 -0
  130. package/dist/icons.js.map +1 -0
  131. package/dist/icons.mjs +4 -0
  132. package/dist/icons.mjs.map +1 -0
  133. package/dist/index.js +512 -249
  134. package/dist/index.js.map +1 -1
  135. package/dist/index.mjs +21 -2
  136. package/dist/index.mjs.map +1 -1
  137. package/dist/internal.js +1437 -0
  138. package/dist/internal.js.map +1 -0
  139. package/dist/internal.mjs +1404 -0
  140. package/dist/internal.mjs.map +1 -0
  141. package/dist/motion.js +51 -0
  142. package/dist/motion.js.map +1 -0
  143. package/dist/motion.mjs +38 -0
  144. package/dist/motion.mjs.map +1 -0
  145. package/dist/orders.js +22 -0
  146. package/dist/orders.js.map +1 -0
  147. package/dist/orders.mjs +5 -0
  148. package/dist/orders.mjs.map +1 -0
  149. package/dist/products.js +27 -0
  150. package/dist/products.js.map +1 -0
  151. package/dist/products.mjs +6 -0
  152. package/dist/products.mjs.map +1 -0
  153. package/dist/registry.js +44 -0
  154. package/dist/registry.js.map +1 -0
  155. package/dist/registry.mjs +7 -0
  156. package/dist/registry.mjs.map +1 -0
  157. package/dist/renderers.js +51 -0
  158. package/dist/renderers.js.map +1 -0
  159. package/dist/renderers.mjs +6 -0
  160. package/dist/renderers.mjs.map +1 -0
  161. package/dist/server.js +11 -189
  162. package/dist/server.js.map +1 -1
  163. package/dist/server.mjs +3 -186
  164. package/dist/server.mjs.map +1 -1
  165. package/dist/types.js +37 -0
  166. package/dist/types.js.map +1 -0
  167. package/dist/types.mjs +4 -0
  168. package/dist/types.mjs.map +1 -0
  169. package/dist/utils.js +160 -0
  170. package/dist/utils.js.map +1 -0
  171. package/dist/utils.mjs +7 -0
  172. package/dist/utils.mjs.map +1 -0
  173. package/dist/wrappers.js +104 -0
  174. package/dist/wrappers.js.map +1 -0
  175. package/dist/wrappers.mjs +96 -0
  176. package/dist/wrappers.mjs.map +1 -0
  177. package/package.json +112 -9
  178. package/dist/api-vuL1Eg5L.d.mts +0 -2961
  179. package/dist/api-vuL1Eg5L.d.ts +0 -2961
  180. package/dist/chunk-3SZX6LHT.js.map +0 -1
  181. package/dist/chunk-7EON6Q4L.mjs.map +0 -1
  182. package/dist/chunk-WDY773GJ.js +0 -8308
  183. package/dist/chunk-WDY773GJ.js.map +0 -1
  184. package/dist/chunk-XE4EOKS4.mjs.map +0 -1
  185. package/dist/client.d.mts +0 -1461
  186. package/dist/client.d.ts +0 -1461
  187. package/dist/index.d.mts +0 -125
  188. package/dist/index.d.ts +0 -125
  189. package/dist/server.d.mts +0 -70
  190. package/dist/server.d.ts +0 -70
@@ -0,0 +1,295 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var events = require('events');
5
+
6
+ // src/registry/block-registry.ts
7
+ function createBlockRegistry(config = {}) {
8
+ const { debug = false, allowOverride = false, maxBlocks = 200 } = config;
9
+ const blocks = /* @__PURE__ */ new Map();
10
+ const categories = /* @__PURE__ */ new Map();
11
+ const tags = /* @__PURE__ */ new Map();
12
+ const eventListeners = /* @__PURE__ */ new Map();
13
+ function emit(type, payload) {
14
+ const event = {
15
+ type,
16
+ payload,
17
+ timestamp: /* @__PURE__ */ new Date()
18
+ };
19
+ const listeners = eventListeners.get(type);
20
+ if (listeners) {
21
+ listeners.forEach(
22
+ (handler) => handler(event)
23
+ );
24
+ }
25
+ }
26
+ function register(blockType, definition, component, options) {
27
+ if (!blockType) {
28
+ throw new Error("Block type is required");
29
+ }
30
+ if (blocks.has(blockType) && !allowOverride) {
31
+ throw new Error(`Block "${blockType}" is already registered`);
32
+ }
33
+ if (blocks.size >= maxBlocks) {
34
+ throw new Error(`Maximum number of blocks (${maxBlocks}) reached`);
35
+ }
36
+ const registration = {
37
+ definition,
38
+ component,
39
+ registeredAt: /* @__PURE__ */ new Date(),
40
+ tags: (options == null ? void 0 : options.tags) || []
41
+ };
42
+ blocks.set(blockType, registration);
43
+ const category = (options == null ? void 0 : options.category) || definition.category || "general";
44
+ if (!categories.has(category)) {
45
+ categories.set(category, /* @__PURE__ */ new Set());
46
+ }
47
+ categories.get(category).add(blockType);
48
+ if (options == null ? void 0 : options.tags) {
49
+ options.tags.forEach((tag) => {
50
+ if (!tags.has(tag)) {
51
+ tags.set(tag, /* @__PURE__ */ new Set());
52
+ }
53
+ tags.get(tag).add(blockType);
54
+ });
55
+ }
56
+ emit("block:registered", {
57
+ type: blockType,
58
+ definition
59
+ });
60
+ }
61
+ function get(blockType) {
62
+ return blocks.get(blockType);
63
+ }
64
+ function has(blockType) {
65
+ return blocks.has(blockType);
66
+ }
67
+ function unregister(blockType) {
68
+ const registration = blocks.get(blockType);
69
+ if (!registration) {
70
+ return false;
71
+ }
72
+ blocks.delete(blockType);
73
+ categories.forEach((types) => {
74
+ types.delete(blockType);
75
+ });
76
+ tags.forEach((types) => {
77
+ types.delete(blockType);
78
+ });
79
+ emit("block:unregistered", {
80
+ type: blockType
81
+ });
82
+ return true;
83
+ }
84
+ function getAll() {
85
+ return new Map(blocks);
86
+ }
87
+ function on(eventType, handler) {
88
+ if (!eventListeners.has(eventType)) {
89
+ eventListeners.set(eventType, /* @__PURE__ */ new Set());
90
+ }
91
+ eventListeners.get(eventType).add(handler);
92
+ }
93
+ function off(eventType, handler) {
94
+ var _a;
95
+ (_a = eventListeners.get(eventType)) == null ? void 0 : _a.delete(handler);
96
+ }
97
+ function clear() {
98
+ blocks.clear();
99
+ categories.clear();
100
+ tags.clear();
101
+ }
102
+ return {
103
+ register,
104
+ get,
105
+ has,
106
+ unregister,
107
+ getAll,
108
+ on,
109
+ off,
110
+ clear
111
+ };
112
+ }
113
+ var blockRegistry = createBlockRegistry({
114
+ debug: process.env.NODE_ENV === "development",
115
+ // Allow override in all environments to support theme block overrides
116
+ allowOverride: true
117
+ });
118
+ var ComponentRegistry = class {
119
+ constructor() {
120
+ // Core storage
121
+ this.components = /* @__PURE__ */ new Map();
122
+ this.categories = /* @__PURE__ */ new Map();
123
+ this.tags = /* @__PURE__ */ new Map();
124
+ // Event emitter for registry changes
125
+ this.events = new events.EventEmitter();
126
+ }
127
+ /**
128
+ * Register a component type
129
+ */
130
+ register(type, definition, component, options) {
131
+ const registration = {
132
+ definition,
133
+ component,
134
+ registeredAt: /* @__PURE__ */ new Date(),
135
+ category: (options == null ? void 0 : options.category) || definition.category,
136
+ tags: (options == null ? void 0 : options.tags) || definition.tags || []
137
+ };
138
+ this.components.set(type, registration);
139
+ const categorySet = this.categories.get(registration.category) || /* @__PURE__ */ new Set();
140
+ categorySet.add(type);
141
+ this.categories.set(registration.category, categorySet);
142
+ registration.tags.forEach((tag) => {
143
+ const tagSet = this.tags.get(tag) || /* @__PURE__ */ new Set();
144
+ tagSet.add(type);
145
+ this.tags.set(tag, tagSet);
146
+ });
147
+ this.events.emit("component:registered", { type, registration });
148
+ }
149
+ /**
150
+ * Unregister a component type
151
+ */
152
+ unregister(type) {
153
+ const registration = this.components.get(type);
154
+ if (!registration) return false;
155
+ this.components.delete(type);
156
+ const categorySet = this.categories.get(registration.category);
157
+ if (categorySet) {
158
+ categorySet.delete(type);
159
+ if (categorySet.size === 0) {
160
+ this.categories.delete(registration.category);
161
+ }
162
+ }
163
+ registration.tags.forEach((tag) => {
164
+ const tagSet = this.tags.get(tag);
165
+ if (tagSet) {
166
+ tagSet.delete(type);
167
+ if (tagSet.size === 0) {
168
+ this.tags.delete(tag);
169
+ }
170
+ }
171
+ });
172
+ this.events.emit("component:unregistered", { type });
173
+ return true;
174
+ }
175
+ /**
176
+ * Get component by type
177
+ */
178
+ get(type) {
179
+ return this.components.get(type);
180
+ }
181
+ /**
182
+ * Get component definition by type
183
+ */
184
+ getDefinition(type) {
185
+ var _a;
186
+ return (_a = this.components.get(type)) == null ? void 0 : _a.definition;
187
+ }
188
+ /**
189
+ * Get component React component by type
190
+ */
191
+ getComponent(type) {
192
+ var _a;
193
+ return (_a = this.components.get(type)) == null ? void 0 : _a.component;
194
+ }
195
+ /**
196
+ * Get all components
197
+ */
198
+ getAll() {
199
+ return new Map(this.components);
200
+ }
201
+ /**
202
+ * Get all component types
203
+ */
204
+ getAllTypes() {
205
+ return Array.from(this.components.keys());
206
+ }
207
+ /**
208
+ * Get components by category
209
+ */
210
+ getByCategory(category) {
211
+ const types = this.categories.get(category);
212
+ if (!types) return [];
213
+ return Array.from(types).map((type) => this.components.get(type)).filter((reg) => reg !== void 0);
214
+ }
215
+ /**
216
+ * Get components by tag
217
+ */
218
+ getByTag(tag) {
219
+ const types = this.tags.get(tag);
220
+ if (!types) return [];
221
+ return Array.from(types).map((type) => this.components.get(type)).filter((reg) => reg !== void 0);
222
+ }
223
+ /**
224
+ * Search components
225
+ */
226
+ search(query) {
227
+ const lowerQuery = query.toLowerCase();
228
+ return Array.from(this.components.values()).filter(
229
+ (reg) => {
230
+ var _a;
231
+ return reg.definition.name.toLowerCase().includes(lowerQuery) || ((_a = reg.definition.description) == null ? void 0 : _a.toLowerCase().includes(lowerQuery)) || reg.tags.some((tag) => tag.toLowerCase().includes(lowerQuery));
232
+ }
233
+ );
234
+ }
235
+ /**
236
+ * Get all categories
237
+ */
238
+ getCategories() {
239
+ return Array.from(this.categories.keys());
240
+ }
241
+ /**
242
+ * Get all tags
243
+ */
244
+ getTags() {
245
+ return Array.from(this.tags.keys());
246
+ }
247
+ /**
248
+ * Check if component type exists
249
+ */
250
+ has(type) {
251
+ return this.components.has(type);
252
+ }
253
+ /**
254
+ * Get component count
255
+ */
256
+ count() {
257
+ return this.components.size;
258
+ }
259
+ /**
260
+ * Get component count by category
261
+ */
262
+ countByCategory(category) {
263
+ var _a;
264
+ return ((_a = this.categories.get(category)) == null ? void 0 : _a.size) || 0;
265
+ }
266
+ /**
267
+ * Subscribe to registry events
268
+ */
269
+ on(event, handler) {
270
+ this.events.on(event, handler);
271
+ }
272
+ /**
273
+ * Unsubscribe from registry events
274
+ */
275
+ off(event, handler) {
276
+ this.events.off(event, handler);
277
+ }
278
+ /**
279
+ * Clear all components (for testing)
280
+ */
281
+ clear() {
282
+ this.components.clear();
283
+ this.categories.clear();
284
+ this.tags.clear();
285
+ this.events.emit("registry:cleared");
286
+ }
287
+ };
288
+ var componentRegistry = new ComponentRegistry();
289
+
290
+ exports.ComponentRegistry = ComponentRegistry;
291
+ exports.blockRegistry = blockRegistry;
292
+ exports.componentRegistry = componentRegistry;
293
+ exports.createBlockRegistry = createBlockRegistry;
294
+ //# sourceMappingURL=chunk-PPULMWJ6.js.map
295
+ //# sourceMappingURL=chunk-PPULMWJ6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/registry/block-registry.ts","../src/registry/component-registry.ts"],"names":["EventEmitter"],"mappings":"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","file":"chunk-PPULMWJ6.js","sourcesContent":["/**\n * Block Registry Implementation\n * Registry for repeatable block components\n */\n\nimport type {\n BlockRegistry,\n RegistryConfig,\n RegistryEvent,\n RegistryEventType,\n RegistryEventHandler,\n BlockRegisteredPayload,\n BlockUnregisteredPayload,\n} from \"../types/registry\";\nimport type {\n BlockDefinition,\n BlockRegistration,\n BlockComponentProps,\n} from \"../types/block\";\nimport React from \"react\";\n\n/**\n * Create a new block registry instance\n */\nexport function createBlockRegistry(\n config: RegistryConfig = {}\n): BlockRegistry {\n const { debug = false, allowOverride = false, maxBlocks = 200 } = config;\n\n // Main registry\n const blocks = new Map<string, BlockRegistration>();\n const categories = new Map<string, Set<string>>();\n const tags = new Map<string, Set<string>>();\n\n // Event listeners\n const eventListeners = new Map<\n RegistryEventType,\n Set<RegistryEventHandler>\n >();\n\n /**\n * Emit an event\n */\n function emit<TPayload>(type: RegistryEventType, payload: TPayload): void {\n const event: RegistryEvent<TPayload> = {\n type,\n payload,\n timestamp: new Date(),\n };\n\n const listeners = eventListeners.get(type);\n if (listeners) {\n // Cast handler to accept any payload type\n listeners.forEach((handler) =>\n (handler as (event: RegistryEvent<TPayload>) => void)(event)\n );\n }\n\n if (debug) {\n }\n }\n\n /**\n * Register a block type\n */\n function register<T>(\n blockType: string,\n definition: BlockDefinition,\n component: React.ComponentType<T>,\n options?: {\n category?: string;\n tags?: string[];\n }\n ): void {\n // Validate\n if (!blockType) {\n throw new Error(\"Block type is required\");\n }\n\n if (blocks.has(blockType) && !allowOverride) {\n throw new Error(`Block \"${blockType}\" is already registered`);\n }\n\n if (blocks.size >= maxBlocks) {\n throw new Error(`Maximum number of blocks (${maxBlocks}) reached`);\n }\n\n // Create registration\n const registration: BlockRegistration = {\n definition,\n component: component as React.ComponentType<BlockComponentProps>,\n registeredAt: new Date(),\n tags: options?.tags || [],\n };\n\n // Store registration\n blocks.set(blockType, registration);\n\n // Index by category\n const category = options?.category || definition.category || \"general\";\n if (!categories.has(category)) {\n categories.set(category, new Set());\n }\n categories.get(category)!.add(blockType);\n\n // Index by tags\n if (options?.tags) {\n options.tags.forEach((tag) => {\n if (!tags.has(tag)) {\n tags.set(tag, new Set());\n }\n tags.get(tag)!.add(blockType);\n });\n }\n\n // Emit event\n emit<BlockRegisteredPayload>(\"block:registered\", {\n type: blockType,\n definition,\n });\n\n if (debug) {\n }\n }\n\n /**\n * Get a block registration\n */\n function get(blockType: string): BlockRegistration | undefined {\n return blocks.get(blockType);\n }\n\n /**\n * Check if a block is registered\n */\n function has(blockType: string): boolean {\n return blocks.has(blockType);\n }\n\n /**\n * Unregister a block\n */\n function unregister(blockType: string): boolean {\n const registration = blocks.get(blockType);\n\n if (!registration) {\n return false;\n }\n\n // Remove from maps\n blocks.delete(blockType);\n\n // Remove from category index\n categories.forEach((types) => {\n types.delete(blockType);\n });\n\n // Remove from tags index\n tags.forEach((types) => {\n types.delete(blockType);\n });\n\n // Emit event\n emit<BlockUnregisteredPayload>(\"block:unregistered\", {\n type: blockType,\n });\n\n if (debug) {\n }\n\n return true;\n }\n\n /**\n * Get all registrations\n */\n function getAll(): Map<string, BlockRegistration> {\n return new Map(blocks);\n }\n\n /**\n * Add event listener\n */\n function on<TPayload>(\n eventType: RegistryEventType,\n handler: RegistryEventHandler<TPayload>\n ): void {\n if (!eventListeners.has(eventType)) {\n eventListeners.set(eventType, new Set());\n }\n eventListeners.get(eventType)!.add(handler as RegistryEventHandler);\n }\n\n /**\n * Remove event listener\n */\n function off<TPayload>(\n eventType: RegistryEventType,\n handler: RegistryEventHandler<TPayload>\n ): void {\n eventListeners.get(eventType)?.delete(handler as RegistryEventHandler);\n }\n\n /**\n * Clear all registrations\n */\n function clear(): void {\n blocks.clear();\n categories.clear();\n tags.clear();\n\n if (debug) {\n }\n }\n\n return {\n register,\n get,\n has,\n unregister,\n getAll,\n on,\n off,\n clear,\n };\n}\n\n/**\n * Global block registry instance\n */\nexport const blockRegistry = createBlockRegistry({\n debug: process.env.NODE_ENV === \"development\",\n // Allow override in all environments to support theme block overrides\n allowOverride: true,\n});\n","/**\n * Component Registry\n * Central registry for all component types\n */\n\nimport type {\n ComponentDefinition,\n ComponentRegistration,\n ComponentCategory,\n ComponentProps,\n} from \"../types/component\";\nimport { EventEmitter } from \"events\";\n\n/**\n * Component Registry Class\n */\nclass ComponentRegistry {\n // Core storage\n private components = new Map<string, ComponentRegistration>();\n private categories = new Map<ComponentCategory, Set<string>>();\n private tags = new Map<string, Set<string>>();\n\n // Event emitter for registry changes\n private events = new EventEmitter();\n\n /**\n * Register a component type\n */\n register(\n type: string,\n definition: ComponentDefinition,\n component: React.ComponentType<ComponentProps>,\n options?: {\n category?: ComponentCategory;\n tags?: string[];\n }\n ): void {\n const registration: ComponentRegistration = {\n definition,\n component,\n registeredAt: new Date(),\n category: options?.category || definition.category,\n tags: options?.tags || definition.tags || [],\n };\n\n this.components.set(type, registration);\n\n // Index by category\n const categorySet = this.categories.get(registration.category) || new Set();\n categorySet.add(type);\n this.categories.set(registration.category, categorySet);\n\n // Index by tags\n registration.tags.forEach((tag) => {\n const tagSet = this.tags.get(tag) || new Set();\n tagSet.add(type);\n this.tags.set(tag, tagSet);\n });\n\n // Emit event\n this.events.emit(\"component:registered\", { type, registration });\n }\n\n /**\n * Unregister a component type\n */\n unregister(type: string): boolean {\n const registration = this.components.get(type);\n if (!registration) return false;\n\n // Remove from components\n this.components.delete(type);\n\n // Remove from category index\n const categorySet = this.categories.get(registration.category);\n if (categorySet) {\n categorySet.delete(type);\n if (categorySet.size === 0) {\n this.categories.delete(registration.category);\n }\n }\n\n // Remove from tag indexes\n registration.tags.forEach((tag) => {\n const tagSet = this.tags.get(tag);\n if (tagSet) {\n tagSet.delete(type);\n if (tagSet.size === 0) {\n this.tags.delete(tag);\n }\n }\n });\n\n // Emit event\n this.events.emit(\"component:unregistered\", { type });\n\n return true;\n }\n\n /**\n * Get component by type\n */\n get(type: string): ComponentRegistration | undefined {\n return this.components.get(type);\n }\n\n /**\n * Get component definition by type\n */\n getDefinition(type: string): ComponentDefinition | undefined {\n return this.components.get(type)?.definition;\n }\n\n /**\n * Get component React component by type\n */\n getComponent(type: string): React.ComponentType<ComponentProps> | undefined {\n return this.components.get(type)?.component;\n }\n\n /**\n * Get all components\n */\n getAll(): Map<string, ComponentRegistration> {\n return new Map(this.components);\n }\n\n /**\n * Get all component types\n */\n getAllTypes(): string[] {\n return Array.from(this.components.keys());\n }\n\n /**\n * Get components by category\n */\n getByCategory(category: ComponentCategory): ComponentRegistration[] {\n const types = this.categories.get(category);\n if (!types) return [];\n\n return Array.from(types)\n .map((type) => this.components.get(type))\n .filter((reg): reg is ComponentRegistration => reg !== undefined);\n }\n\n /**\n * Get components by tag\n */\n getByTag(tag: string): ComponentRegistration[] {\n const types = this.tags.get(tag);\n if (!types) return [];\n\n return Array.from(types)\n .map((type) => this.components.get(type))\n .filter((reg): reg is ComponentRegistration => reg !== undefined);\n }\n\n /**\n * Search components\n */\n search(query: string): ComponentRegistration[] {\n const lowerQuery = query.toLowerCase();\n return Array.from(this.components.values()).filter(\n (reg) =>\n reg.definition.name.toLowerCase().includes(lowerQuery) ||\n reg.definition.description?.toLowerCase().includes(lowerQuery) ||\n reg.tags.some((tag) => tag.toLowerCase().includes(lowerQuery))\n );\n }\n\n /**\n * Get all categories\n */\n getCategories(): ComponentCategory[] {\n return Array.from(this.categories.keys());\n }\n\n /**\n * Get all tags\n */\n getTags(): string[] {\n return Array.from(this.tags.keys());\n }\n\n /**\n * Check if component type exists\n */\n has(type: string): boolean {\n return this.components.has(type);\n }\n\n /**\n * Get component count\n */\n count(): number {\n return this.components.size;\n }\n\n /**\n * Get component count by category\n */\n countByCategory(category: ComponentCategory): number {\n return this.categories.get(category)?.size || 0;\n }\n\n /**\n * Subscribe to registry events\n */\n on(event: string, handler: (...args: unknown[]) => void): void {\n this.events.on(event, handler);\n }\n\n /**\n * Unsubscribe from registry events\n */\n off(event: string, handler: (...args: unknown[]) => void): void {\n this.events.off(event, handler);\n }\n\n /**\n * Clear all components (for testing)\n */\n clear(): void {\n this.components.clear();\n this.categories.clear();\n this.tags.clear();\n this.events.emit(\"registry:cleared\");\n }\n}\n\n// Export singleton instance\nexport const componentRegistry = new ComponentRegistry();\n\n// Export class for testing\nexport { ComponentRegistry };\n"]}
@@ -0,0 +1,359 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var chunkPPULMWJ6_js = require('./chunk-PPULMWJ6.js');
5
+ var chunk2NMEKWO5_js = require('./chunk-2NMEKWO5.js');
6
+ var React = require('react');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+
9
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
+
11
+ var React__default = /*#__PURE__*/_interopDefault(React);
12
+
13
+ function ComponentRenderer({
14
+ instance,
15
+ sectionId,
16
+ isEditing = false,
17
+ className,
18
+ fallback
19
+ }) {
20
+ const registration = chunkPPULMWJ6_js.componentRegistry.get(instance.type);
21
+ if (!registration) {
22
+ console.warn(`Component type "${instance.type}" not found in registry`);
23
+ if (fallback) {
24
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: fallback });
25
+ }
26
+ if (isEditing) {
27
+ return /* @__PURE__ */ jsxRuntime.jsxs(
28
+ "div",
29
+ {
30
+ className: "border-2 border-dashed border-red-500 bg-red-50 p-4 rounded",
31
+ "data-component-id": instance.id,
32
+ "data-component-type": instance.type,
33
+ "data-section-id": sectionId,
34
+ children: [
35
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm text-red-600 font-medium", children: [
36
+ 'Component "',
37
+ instance.type,
38
+ '" not found'
39
+ ] }),
40
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-xs text-red-500 mt-1", children: [
41
+ "ID: ",
42
+ instance.id
43
+ ] })
44
+ ]
45
+ }
46
+ );
47
+ }
48
+ return null;
49
+ }
50
+ const { component: Component, definition } = registration;
51
+ return /* @__PURE__ */ jsxRuntime.jsx(
52
+ "div",
53
+ {
54
+ className,
55
+ "data-inspector-target": "component",
56
+ "data-component-id": instance.id,
57
+ "data-component-type": instance.type,
58
+ "data-section-id": sectionId,
59
+ "data-order": instance.order,
60
+ style: {
61
+ position: "relative",
62
+ pointerEvents: "auto"
63
+ },
64
+ children: /* @__PURE__ */ jsxRuntime.jsx(
65
+ Component,
66
+ {
67
+ component: instance,
68
+ definition,
69
+ sectionId,
70
+ isEditing,
71
+ className
72
+ }
73
+ )
74
+ }
75
+ );
76
+ }
77
+ function ComponentListRenderer({
78
+ instances,
79
+ sectionId,
80
+ isEditing = false,
81
+ containerClassName,
82
+ itemClassName
83
+ }) {
84
+ const sortedInstances = [...instances].sort((a, b) => a.order - b.order);
85
+ const visibleInstances = sortedInstances.filter(
86
+ (instance) => instance.enabled !== false
87
+ );
88
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: containerClassName, "data-component-list": "true", children: visibleInstances.map((instance) => /* @__PURE__ */ jsxRuntime.jsx(
89
+ ComponentRenderer,
90
+ {
91
+ instance,
92
+ sectionId,
93
+ isEditing,
94
+ className: itemClassName
95
+ },
96
+ instance.id
97
+ )) });
98
+ }
99
+ function useComponentRegistration(componentType) {
100
+ return React__default.default.useMemo(
101
+ () => chunkPPULMWJ6_js.componentRegistry.get(componentType),
102
+ [componentType]
103
+ );
104
+ }
105
+ function useComponentInstance(instance) {
106
+ const registration = useComponentRegistration((instance == null ? void 0 : instance.type) || "");
107
+ return React__default.default.useMemo(() => {
108
+ if (!instance || !registration) return null;
109
+ const { component: Component, definition } = registration;
110
+ return { Component, definition, instance };
111
+ }, [instance, registration]);
112
+ }
113
+ function BlockRenderer({
114
+ block,
115
+ sectionId,
116
+ isEditing = false,
117
+ data,
118
+ className,
119
+ fallback
120
+ }) {
121
+ var _a, _b;
122
+ if (block.enabled === false) {
123
+ return null;
124
+ }
125
+ const registration = chunkPPULMWJ6_js.blockRegistry.get(block.type);
126
+ if (typeof window !== "undefined" && !registration) {
127
+ const allBlocks = Array.from(chunkPPULMWJ6_js.blockRegistry.getAll().keys());
128
+ console.warn(
129
+ `[BlockRenderer] \u26A0\uFE0F Block "${block.type}" not found in registry!`,
130
+ {
131
+ blockId: block.id,
132
+ blockType: block.type,
133
+ sectionId,
134
+ isEditing,
135
+ blockEnabled: block.enabled === void 0 || block.enabled === true,
136
+ hasNestedBlocks: ((_a = block.blocks) == null ? void 0 : _a.length) || 0,
137
+ hasComponents: ((_b = block.components) == null ? void 0 : _b.length) || 0,
138
+ availableBlocks: allBlocks,
139
+ registrySize: allBlocks.length,
140
+ suggestion: allBlocks.find(
141
+ (type) => type.includes(block.type.split("-")[0])
142
+ ) ? `Did you mean "${allBlocks.find((type) => type.includes(block.type.split("-")[0]))}"?` : "No similar blocks found"
143
+ }
144
+ );
145
+ }
146
+ if (registration) {
147
+ const Component = registration.component;
148
+ if (sectionId) {
149
+ return /* @__PURE__ */ jsxRuntime.jsx(
150
+ "div",
151
+ {
152
+ "data-section-id": sectionId,
153
+ "data-block-id": block.id,
154
+ "data-block-type": block.type,
155
+ style: {
156
+ position: "relative",
157
+ display: "block",
158
+ width: "100%",
159
+ minHeight: "1px",
160
+ backgroundColor: "transparent",
161
+ pointerEvents: "auto"
162
+ },
163
+ className: "block-wrapper",
164
+ children: /* @__PURE__ */ jsxRuntime.jsx(
165
+ Component,
166
+ {
167
+ block,
168
+ definition: registration.definition,
169
+ isEditing,
170
+ data,
171
+ className,
172
+ sectionId
173
+ }
174
+ )
175
+ }
176
+ );
177
+ }
178
+ return /* @__PURE__ */ jsxRuntime.jsx(
179
+ Component,
180
+ {
181
+ block,
182
+ definition: registration.definition,
183
+ isEditing,
184
+ data,
185
+ className,
186
+ sectionId
187
+ }
188
+ );
189
+ }
190
+ return /* @__PURE__ */ jsxRuntime.jsxs(
191
+ "div",
192
+ {
193
+ "data-section-id": sectionId,
194
+ "data-block-id": block.id,
195
+ "data-block-type": block.type,
196
+ className,
197
+ style: block.style,
198
+ children: [
199
+ block.components && block.components.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
200
+ ComponentListRenderer,
201
+ {
202
+ instances: block.components,
203
+ sectionId,
204
+ isEditing
205
+ }
206
+ ),
207
+ block.blocks && block.blocks.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
208
+ BlockListRenderer,
209
+ {
210
+ blocks: block.blocks,
211
+ sectionId,
212
+ isEditing,
213
+ data
214
+ }
215
+ ),
216
+ (!block.components || block.components.length === 0) && (!block.blocks || block.blocks.length === 0) && fallback && /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: fallback }),
217
+ (!block.components || block.components.length === 0) && (!block.blocks || block.blocks.length === 0) && /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: isEditing ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-2 border-dashed border-yellow-500 bg-yellow-50 p-4 rounded text-sm", children: [
218
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "font-semibold text-yellow-800", children: [
219
+ "Block: ",
220
+ block.type
221
+ ] }),
222
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-yellow-600 text-xs", children: "No registered component found. Add components or nested blocks to this block." })
223
+ ] }) : (
224
+ // View mode: Show subtle indicator in dev, silent in production
225
+ process.env.NODE_ENV === "development" ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-h-[20px] border border-dashed border-gray-300 bg-gray-50 p-2 text-xs text-gray-500", children: [
226
+ '\u26A0\uFE0F Block "',
227
+ block.type,
228
+ '" not registered (check console)'
229
+ ] }) : null
230
+ ) })
231
+ ]
232
+ }
233
+ );
234
+ }
235
+ function BlockListRenderer({
236
+ blocks,
237
+ sectionId,
238
+ isEditing = false,
239
+ data,
240
+ containerClassName,
241
+ blockClassName
242
+ }) {
243
+ if (!blocks || blocks.length === 0) {
244
+ return null;
245
+ }
246
+ const sortedBlocks = blocks.filter((block) => block.enabled !== false).sort((a, b) => (a.order || 0) - (b.order || 0));
247
+ if (sortedBlocks.length === 0) {
248
+ return null;
249
+ }
250
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: containerClassName, children: sortedBlocks.map((block) => /* @__PURE__ */ jsxRuntime.jsx(
251
+ BlockRenderer,
252
+ {
253
+ block,
254
+ sectionId,
255
+ isEditing,
256
+ data,
257
+ className: blockClassName
258
+ },
259
+ block.id
260
+ )) });
261
+ }
262
+ function renderBlock(block, isEditing = false, className, sectionId) {
263
+ return /* @__PURE__ */ jsxRuntime.jsx(
264
+ BlockRenderer,
265
+ {
266
+ block,
267
+ isEditing,
268
+ className,
269
+ sectionId
270
+ }
271
+ );
272
+ }
273
+ function SectionRenderer({
274
+ section,
275
+ Component,
276
+ schema,
277
+ template,
278
+ isEditing = false,
279
+ data,
280
+ fallback,
281
+ className = ""
282
+ }) {
283
+ if (!section.enabled && !isEditing) {
284
+ return null;
285
+ }
286
+ if (!Component) {
287
+ if (fallback) {
288
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: fallback });
289
+ }
290
+ return null;
291
+ }
292
+ return /* @__PURE__ */ jsxRuntime.jsx(
293
+ "div",
294
+ {
295
+ id: `section-${section.id}`,
296
+ "data-section-id": section.id,
297
+ "data-section-type": section.type,
298
+ "data-section-template": section.template || "default",
299
+ "data-section-enabled": section.enabled,
300
+ className: `section section-${section.type} ${className}`.trim(),
301
+ children: /* @__PURE__ */ jsxRuntime.jsx(
302
+ Component,
303
+ {
304
+ section,
305
+ schema,
306
+ template,
307
+ isEditing,
308
+ data
309
+ }
310
+ )
311
+ }
312
+ );
313
+ }
314
+ function SectionListRenderer({
315
+ sections,
316
+ getComponent,
317
+ isEditing = false,
318
+ data,
319
+ fallback,
320
+ className
321
+ }) {
322
+ const visibleSections = sections.filter((section) => isEditing || section.enabled).sort((a, b) => a.order - b.order);
323
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: visibleSections.map((section) => {
324
+ const template = section.template || "default";
325
+ const registration = getComponent(section.type, template);
326
+ if (!registration) {
327
+ return fallback ? /* @__PURE__ */ jsxRuntime.jsx(React__default.default.Fragment, { children: fallback(section) }, section.id) : null;
328
+ }
329
+ return /* @__PURE__ */ jsxRuntime.jsx(
330
+ SectionRenderer,
331
+ {
332
+ section,
333
+ Component: registration.Component,
334
+ schema: registration.schema,
335
+ template: registration.template,
336
+ isEditing,
337
+ data,
338
+ className
339
+ },
340
+ section.id
341
+ );
342
+ }) });
343
+ }
344
+ function renderSection(props) {
345
+ return /* @__PURE__ */ jsxRuntime.jsx(SectionRenderer, chunk2NMEKWO5_js.__spreadValues({}, props));
346
+ }
347
+
348
+ exports.BlockListRenderer = BlockListRenderer;
349
+ exports.BlockRenderer = BlockRenderer;
350
+ exports.ComponentListRenderer = ComponentListRenderer;
351
+ exports.ComponentRenderer = ComponentRenderer;
352
+ exports.SectionListRenderer = SectionListRenderer;
353
+ exports.SectionRenderer = SectionRenderer;
354
+ exports.renderBlock = renderBlock;
355
+ exports.renderSection = renderSection;
356
+ exports.useComponentInstance = useComponentInstance;
357
+ exports.useComponentRegistration = useComponentRegistration;
358
+ //# sourceMappingURL=chunk-RGIVKACG.js.map
359
+ //# sourceMappingURL=chunk-RGIVKACG.js.map