@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,290 @@
1
+ "use client";
2
+ import { EventEmitter } from 'events';
3
+
4
+ // src/registry/block-registry.ts
5
+ function createBlockRegistry(config = {}) {
6
+ const { debug = false, allowOverride = false, maxBlocks = 200 } = config;
7
+ const blocks = /* @__PURE__ */ new Map();
8
+ const categories = /* @__PURE__ */ new Map();
9
+ const tags = /* @__PURE__ */ new Map();
10
+ const eventListeners = /* @__PURE__ */ new Map();
11
+ function emit(type, payload) {
12
+ const event = {
13
+ type,
14
+ payload,
15
+ timestamp: /* @__PURE__ */ new Date()
16
+ };
17
+ const listeners = eventListeners.get(type);
18
+ if (listeners) {
19
+ listeners.forEach(
20
+ (handler) => handler(event)
21
+ );
22
+ }
23
+ }
24
+ function register(blockType, definition, component, options) {
25
+ if (!blockType) {
26
+ throw new Error("Block type is required");
27
+ }
28
+ if (blocks.has(blockType) && !allowOverride) {
29
+ throw new Error(`Block "${blockType}" is already registered`);
30
+ }
31
+ if (blocks.size >= maxBlocks) {
32
+ throw new Error(`Maximum number of blocks (${maxBlocks}) reached`);
33
+ }
34
+ const registration = {
35
+ definition,
36
+ component,
37
+ registeredAt: /* @__PURE__ */ new Date(),
38
+ tags: (options == null ? void 0 : options.tags) || []
39
+ };
40
+ blocks.set(blockType, registration);
41
+ const category = (options == null ? void 0 : options.category) || definition.category || "general";
42
+ if (!categories.has(category)) {
43
+ categories.set(category, /* @__PURE__ */ new Set());
44
+ }
45
+ categories.get(category).add(blockType);
46
+ if (options == null ? void 0 : options.tags) {
47
+ options.tags.forEach((tag) => {
48
+ if (!tags.has(tag)) {
49
+ tags.set(tag, /* @__PURE__ */ new Set());
50
+ }
51
+ tags.get(tag).add(blockType);
52
+ });
53
+ }
54
+ emit("block:registered", {
55
+ type: blockType,
56
+ definition
57
+ });
58
+ }
59
+ function get(blockType) {
60
+ return blocks.get(blockType);
61
+ }
62
+ function has(blockType) {
63
+ return blocks.has(blockType);
64
+ }
65
+ function unregister(blockType) {
66
+ const registration = blocks.get(blockType);
67
+ if (!registration) {
68
+ return false;
69
+ }
70
+ blocks.delete(blockType);
71
+ categories.forEach((types) => {
72
+ types.delete(blockType);
73
+ });
74
+ tags.forEach((types) => {
75
+ types.delete(blockType);
76
+ });
77
+ emit("block:unregistered", {
78
+ type: blockType
79
+ });
80
+ return true;
81
+ }
82
+ function getAll() {
83
+ return new Map(blocks);
84
+ }
85
+ function on(eventType, handler) {
86
+ if (!eventListeners.has(eventType)) {
87
+ eventListeners.set(eventType, /* @__PURE__ */ new Set());
88
+ }
89
+ eventListeners.get(eventType).add(handler);
90
+ }
91
+ function off(eventType, handler) {
92
+ var _a;
93
+ (_a = eventListeners.get(eventType)) == null ? void 0 : _a.delete(handler);
94
+ }
95
+ function clear() {
96
+ blocks.clear();
97
+ categories.clear();
98
+ tags.clear();
99
+ }
100
+ return {
101
+ register,
102
+ get,
103
+ has,
104
+ unregister,
105
+ getAll,
106
+ on,
107
+ off,
108
+ clear
109
+ };
110
+ }
111
+ var blockRegistry = createBlockRegistry({
112
+ debug: process.env.NODE_ENV === "development",
113
+ // Allow override in all environments to support theme block overrides
114
+ allowOverride: true
115
+ });
116
+ var ComponentRegistry = class {
117
+ constructor() {
118
+ // Core storage
119
+ this.components = /* @__PURE__ */ new Map();
120
+ this.categories = /* @__PURE__ */ new Map();
121
+ this.tags = /* @__PURE__ */ new Map();
122
+ // Event emitter for registry changes
123
+ this.events = new EventEmitter();
124
+ }
125
+ /**
126
+ * Register a component type
127
+ */
128
+ register(type, definition, component, options) {
129
+ const registration = {
130
+ definition,
131
+ component,
132
+ registeredAt: /* @__PURE__ */ new Date(),
133
+ category: (options == null ? void 0 : options.category) || definition.category,
134
+ tags: (options == null ? void 0 : options.tags) || definition.tags || []
135
+ };
136
+ this.components.set(type, registration);
137
+ const categorySet = this.categories.get(registration.category) || /* @__PURE__ */ new Set();
138
+ categorySet.add(type);
139
+ this.categories.set(registration.category, categorySet);
140
+ registration.tags.forEach((tag) => {
141
+ const tagSet = this.tags.get(tag) || /* @__PURE__ */ new Set();
142
+ tagSet.add(type);
143
+ this.tags.set(tag, tagSet);
144
+ });
145
+ this.events.emit("component:registered", { type, registration });
146
+ }
147
+ /**
148
+ * Unregister a component type
149
+ */
150
+ unregister(type) {
151
+ const registration = this.components.get(type);
152
+ if (!registration) return false;
153
+ this.components.delete(type);
154
+ const categorySet = this.categories.get(registration.category);
155
+ if (categorySet) {
156
+ categorySet.delete(type);
157
+ if (categorySet.size === 0) {
158
+ this.categories.delete(registration.category);
159
+ }
160
+ }
161
+ registration.tags.forEach((tag) => {
162
+ const tagSet = this.tags.get(tag);
163
+ if (tagSet) {
164
+ tagSet.delete(type);
165
+ if (tagSet.size === 0) {
166
+ this.tags.delete(tag);
167
+ }
168
+ }
169
+ });
170
+ this.events.emit("component:unregistered", { type });
171
+ return true;
172
+ }
173
+ /**
174
+ * Get component by type
175
+ */
176
+ get(type) {
177
+ return this.components.get(type);
178
+ }
179
+ /**
180
+ * Get component definition by type
181
+ */
182
+ getDefinition(type) {
183
+ var _a;
184
+ return (_a = this.components.get(type)) == null ? void 0 : _a.definition;
185
+ }
186
+ /**
187
+ * Get component React component by type
188
+ */
189
+ getComponent(type) {
190
+ var _a;
191
+ return (_a = this.components.get(type)) == null ? void 0 : _a.component;
192
+ }
193
+ /**
194
+ * Get all components
195
+ */
196
+ getAll() {
197
+ return new Map(this.components);
198
+ }
199
+ /**
200
+ * Get all component types
201
+ */
202
+ getAllTypes() {
203
+ return Array.from(this.components.keys());
204
+ }
205
+ /**
206
+ * Get components by category
207
+ */
208
+ getByCategory(category) {
209
+ const types = this.categories.get(category);
210
+ if (!types) return [];
211
+ return Array.from(types).map((type) => this.components.get(type)).filter((reg) => reg !== void 0);
212
+ }
213
+ /**
214
+ * Get components by tag
215
+ */
216
+ getByTag(tag) {
217
+ const types = this.tags.get(tag);
218
+ if (!types) return [];
219
+ return Array.from(types).map((type) => this.components.get(type)).filter((reg) => reg !== void 0);
220
+ }
221
+ /**
222
+ * Search components
223
+ */
224
+ search(query) {
225
+ const lowerQuery = query.toLowerCase();
226
+ return Array.from(this.components.values()).filter(
227
+ (reg) => {
228
+ var _a;
229
+ 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));
230
+ }
231
+ );
232
+ }
233
+ /**
234
+ * Get all categories
235
+ */
236
+ getCategories() {
237
+ return Array.from(this.categories.keys());
238
+ }
239
+ /**
240
+ * Get all tags
241
+ */
242
+ getTags() {
243
+ return Array.from(this.tags.keys());
244
+ }
245
+ /**
246
+ * Check if component type exists
247
+ */
248
+ has(type) {
249
+ return this.components.has(type);
250
+ }
251
+ /**
252
+ * Get component count
253
+ */
254
+ count() {
255
+ return this.components.size;
256
+ }
257
+ /**
258
+ * Get component count by category
259
+ */
260
+ countByCategory(category) {
261
+ var _a;
262
+ return ((_a = this.categories.get(category)) == null ? void 0 : _a.size) || 0;
263
+ }
264
+ /**
265
+ * Subscribe to registry events
266
+ */
267
+ on(event, handler) {
268
+ this.events.on(event, handler);
269
+ }
270
+ /**
271
+ * Unsubscribe from registry events
272
+ */
273
+ off(event, handler) {
274
+ this.events.off(event, handler);
275
+ }
276
+ /**
277
+ * Clear all components (for testing)
278
+ */
279
+ clear() {
280
+ this.components.clear();
281
+ this.categories.clear();
282
+ this.tags.clear();
283
+ this.events.emit("registry:cleared");
284
+ }
285
+ };
286
+ var componentRegistry = new ComponentRegistry();
287
+
288
+ export { ComponentRegistry, blockRegistry, componentRegistry, createBlockRegistry };
289
+ //# sourceMappingURL=chunk-4JVQJI3I.mjs.map
290
+ //# sourceMappingURL=chunk-4JVQJI3I.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/registry/block-registry.ts","../src/registry/component-registry.ts"],"names":[],"mappings":";;;AAwBO,SAAS,mBAAA,CACd,MAAA,GAAyB,EAAC,EACX;AACf,EAAA,MAAM,EAAE,KAAA,GAAQ,KAAA,EAAO,gBAAgB,KAAA,EAAO,SAAA,GAAY,KAAI,GAAI,MAAA;AAGlE,EAAA,MAAM,MAAA,uBAAa,GAAA,EAA+B;AAClD,EAAA,MAAM,UAAA,uBAAiB,GAAA,EAAyB;AAChD,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAyB;AAG1C,EAAA,MAAM,cAAA,uBAAqB,GAAA,EAGzB;AAKF,EAAA,SAAS,IAAA,CAAe,MAAyB,OAAA,EAAyB;AACxE,IAAA,MAAM,KAAA,GAAiC;AAAA,MACrC,IAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA,sBAAe,IAAA;AAAK,KACtB;AAEA,IAAA,MAAM,SAAA,GAAY,cAAA,CAAe,GAAA,CAAI,IAAI,CAAA;AACzC,IAAA,IAAI,SAAA,EAAW;AAEb,MAAA,SAAA,CAAU,OAAA;AAAA,QAAQ,CAAC,OAAA,KAChB,OAAA,CAAqD,KAAK;AAAA,OAC7D;AAAA,IACF;AAGA,EACF;AAKA,EAAA,SAAS,QAAA,CACP,SAAA,EACA,UAAA,EACA,SAAA,EACA,OAAA,EAIM;AAEN,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,IAC1C;AAEA,IAAA,IAAI,MAAA,CAAO,GAAA,CAAI,SAAS,CAAA,IAAK,CAAC,aAAA,EAAe;AAC3C,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,OAAA,EAAU,SAAS,CAAA,uBAAA,CAAyB,CAAA;AAAA,IAC9D;AAEA,IAAA,IAAI,MAAA,CAAO,QAAQ,SAAA,EAAW;AAC5B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,SAAS,CAAA,SAAA,CAAW,CAAA;AAAA,IACnE;AAGA,IAAA,MAAM,YAAA,GAAkC;AAAA,MACtC,UAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA,sBAAkB,IAAA,EAAK;AAAA,MACvB,IAAA,EAAA,CAAM,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,IAAA,KAAQ;AAAC,KAC1B;AAGA,IAAA,MAAA,CAAO,GAAA,CAAI,WAAW,YAAY,CAAA;AAGlC,IAAA,MAAM,QAAA,GAAA,CAAW,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,QAAA,KAAY,UAAA,CAAW,QAAA,IAAY,SAAA;AAC7D,IAAA,IAAI,CAAC,UAAA,CAAW,GAAA,CAAI,QAAQ,CAAA,EAAG;AAC7B,MAAA,UAAA,CAAW,GAAA,CAAI,QAAA,kBAAU,IAAI,GAAA,EAAK,CAAA;AAAA,IACpC;AACA,IAAA,UAAA,CAAW,GAAA,CAAI,QAAQ,CAAA,CAAG,GAAA,CAAI,SAAS,CAAA;AAGvC,IAAA,IAAI,mCAAS,IAAA,EAAM;AACjB,MAAA,OAAA,CAAQ,IAAA,CAAK,OAAA,CAAQ,CAAC,GAAA,KAAQ;AAC5B,QAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AAClB,UAAA,IAAA,CAAK,GAAA,CAAI,GAAA,kBAAK,IAAI,GAAA,EAAK,CAAA;AAAA,QACzB;AACA,QAAA,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,CAAG,GAAA,CAAI,SAAS,CAAA;AAAA,MAC9B,CAAC,CAAA;AAAA,IACH;AAGA,IAAA,IAAA,CAA6B,kBAAA,EAAoB;AAAA,MAC/C,IAAA,EAAM,SAAA;AAAA,MACN;AAAA,KACD,CAAA;AAGD,EACF;AAKA,EAAA,SAAS,IAAI,SAAA,EAAkD;AAC7D,IAAA,OAAO,MAAA,CAAO,IAAI,SAAS,CAAA;AAAA,EAC7B;AAKA,EAAA,SAAS,IAAI,SAAA,EAA4B;AACvC,IAAA,OAAO,MAAA,CAAO,IAAI,SAAS,CAAA;AAAA,EAC7B;AAKA,EAAA,SAAS,WAAW,SAAA,EAA4B;AAC9C,IAAA,MAAM,YAAA,GAAe,MAAA,CAAO,GAAA,CAAI,SAAS,CAAA;AAEzC,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,MAAA,CAAO,OAAO,SAAS,CAAA;AAGvB,IAAA,UAAA,CAAW,OAAA,CAAQ,CAAC,KAAA,KAAU;AAC5B,MAAA,KAAA,CAAM,OAAO,SAAS,CAAA;AAAA,IACxB,CAAC,CAAA;AAGD,IAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,KAAA,KAAU;AACtB,MAAA,KAAA,CAAM,OAAO,SAAS,CAAA;AAAA,IACxB,CAAC,CAAA;AAGD,IAAA,IAAA,CAA+B,oBAAA,EAAsB;AAAA,MACnD,IAAA,EAAM;AAAA,KACP,CAAA;AAKD,IAAA,OAAO,IAAA;AAAA,EACT;AAKA,EAAA,SAAS,MAAA,GAAyC;AAChD,IAAA,OAAO,IAAI,IAAI,MAAM,CAAA;AAAA,EACvB;AAKA,EAAA,SAAS,EAAA,CACP,WACA,OAAA,EACM;AACN,IAAA,IAAI,CAAC,cAAA,CAAe,GAAA,CAAI,SAAS,CAAA,EAAG;AAClC,MAAA,cAAA,CAAe,GAAA,CAAI,SAAA,kBAAW,IAAI,GAAA,EAAK,CAAA;AAAA,IACzC;AACA,IAAA,cAAA,CAAe,GAAA,CAAI,SAAS,CAAA,CAAG,GAAA,CAAI,OAA+B,CAAA;AAAA,EACpE;AAKA,EAAA,SAAS,GAAA,CACP,WACA,OAAA,EACM;AAvMV,IAAA,IAAA,EAAA;AAwMI,IAAA,CAAA,EAAA,GAAA,cAAA,CAAe,GAAA,CAAI,SAAS,CAAA,KAA5B,IAAA,GAAA,MAAA,GAAA,EAAA,CAA+B,MAAA,CAAO,OAAA,CAAA;AAAA,EACxC;AAKA,EAAA,SAAS,KAAA,GAAc;AACrB,IAAA,MAAA,CAAO,KAAA,EAAM;AACb,IAAA,UAAA,CAAW,KAAA,EAAM;AACjB,IAAA,IAAA,CAAK,KAAA,EAAM;AAGX,EACF;AAEA,EAAA,OAAO;AAAA,IACL,QAAA;AAAA,IACA,GAAA;AAAA,IACA,GAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAA;AAAA,IACA,EAAA;AAAA,IACA,GAAA;AAAA,IACA;AAAA,GACF;AACF;AAKO,IAAM,gBAAgB,mBAAA,CAAoB;AAAA,EAC/C,KAAA,EAAO,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,aAAA;AAAA;AAAA,EAEhC,aAAA,EAAe;AACjB,CAAC;AC1ND,IAAM,oBAAN,MAAwB;AAAA,EAAxB,WAAA,GAAA;AAEE;AAAA,IAAA,IAAA,CAAQ,UAAA,uBAAiB,GAAA,EAAmC;AAC5D,IAAA,IAAA,CAAQ,UAAA,uBAAiB,GAAA,EAAoC;AAC7D,IAAA,IAAA,CAAQ,IAAA,uBAAW,GAAA,EAAyB;AAG5C;AAAA,IAAA,IAAA,CAAQ,MAAA,GAAS,IAAI,YAAA,EAAa;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,EAKlC,QAAA,CACE,IAAA,EACA,UAAA,EACA,SAAA,EACA,OAAA,EAIM;AACN,IAAA,MAAM,YAAA,GAAsC;AAAA,MAC1C,UAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA,sBAAkB,IAAA,EAAK;AAAA,MACvB,QAAA,EAAA,CAAU,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,QAAA,KAAY,UAAA,CAAW,QAAA;AAAA,MAC1C,IAAA,EAAA,CAAM,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,IAAA,KAAQ,UAAA,CAAW,QAAQ;AAAC,KAC7C;AAEA,IAAA,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,IAAA,EAAM,YAAY,CAAA;AAGtC,IAAA,MAAM,WAAA,GAAc,KAAK,UAAA,CAAW,GAAA,CAAI,aAAa,QAAQ,CAAA,wBAAS,GAAA,EAAI;AAC1E,IAAA,WAAA,CAAY,IAAI,IAAI,CAAA;AACpB,IAAA,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,YAAA,CAAa,QAAA,EAAU,WAAW,CAAA;AAGtD,IAAA,YAAA,CAAa,IAAA,CAAK,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACjC,MAAA,MAAM,SAAS,IAAA,CAAK,IAAA,CAAK,IAAI,GAAG,CAAA,wBAAS,GAAA,EAAI;AAC7C,MAAA,MAAA,CAAO,IAAI,IAAI,CAAA;AACf,MAAA,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,MAAM,CAAA;AAAA,IAC3B,CAAC,CAAA;AAGD,IAAA,IAAA,CAAK,OAAO,IAAA,CAAK,sBAAA,EAAwB,EAAE,IAAA,EAAM,cAAc,CAAA;AAAA,EACjE;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,IAAA,EAAuB;AAChC,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,IAAI,CAAA;AAC7C,IAAA,IAAI,CAAC,cAAc,OAAO,KAAA;AAG1B,IAAA,IAAA,CAAK,UAAA,CAAW,OAAO,IAAI,CAAA;AAG3B,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,aAAa,QAAQ,CAAA;AAC7D,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,WAAA,CAAY,OAAO,IAAI,CAAA;AACvB,MAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,QAAA,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,YAAA,CAAa,QAAQ,CAAA;AAAA,MAC9C;AAAA,IACF;AAGA,IAAA,YAAA,CAAa,IAAA,CAAK,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACjC,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAChC,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAA,CAAO,OAAO,IAAI,CAAA;AAClB,QAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,UAAA,IAAA,CAAK,IAAA,CAAK,OAAO,GAAG,CAAA;AAAA,QACtB;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAGD,IAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,wBAAA,EAA0B,EAAE,MAAM,CAAA;AAEnD,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,IAAA,EAAiD;AACnD,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,IAAI,CAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc,IAAA,EAA+C;AA7G/D,IAAA,IAAA,EAAA;AA8GI,IAAA,OAAA,CAAO,EAAA,GAAA,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,IAAI,MAAxB,IAAA,GAAA,MAAA,GAAA,EAAA,CAA2B,UAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,IAAA,EAA+D;AApH9E,IAAA,IAAA,EAAA;AAqHI,IAAA,OAAA,CAAO,EAAA,GAAA,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,IAAI,MAAxB,IAAA,GAAA,MAAA,GAAA,EAAA,CAA2B,SAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAA,GAA6C;AAC3C,IAAA,OAAO,IAAI,GAAA,CAAI,IAAA,CAAK,UAAU,CAAA;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKA,WAAA,GAAwB;AACtB,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc,QAAA,EAAsD;AAClE,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,QAAQ,CAAA;AAC1C,IAAA,IAAI,CAAC,KAAA,EAAO,OAAO,EAAC;AAEpB,IAAA,OAAO,MAAM,IAAA,CAAK,KAAK,CAAA,CACpB,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,IAAI,CAAC,CAAA,CACvC,OAAO,CAAC,GAAA,KAAsC,QAAQ,MAAS,CAAA;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,GAAA,EAAsC;AAC7C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAC/B,IAAA,IAAI,CAAC,KAAA,EAAO,OAAO,EAAC;AAEpB,IAAA,OAAO,MAAM,IAAA,CAAK,KAAK,CAAA,CACpB,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,IAAI,CAAC,CAAA,CACvC,OAAO,CAAC,GAAA,KAAsC,QAAQ,MAAS,CAAA;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,KAAA,EAAwC;AAC7C,IAAA,MAAM,UAAA,GAAa,MAAM,WAAA,EAAY;AACrC,IAAA,OAAO,MAAM,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,MAAA,EAAQ,CAAA,CAAE,MAAA;AAAA,MAC1C,CAAC,GAAA,KAAK;AApKZ,QAAA,IAAA,EAAA;AAqKQ,QAAA,OAAA,GAAA,CAAI,UAAA,CAAW,IAAA,CAAK,WAAA,EAAY,CAAE,QAAA,CAAS,UAAU,CAAA,KAAA,CACrD,EAAA,GAAA,GAAA,CAAI,UAAA,CAAW,WAAA,KAAf,IAAA,GAAA,MAAA,GAAA,EAAA,CAA4B,WAAA,EAAA,CAAc,SAAS,UAAA,CAAA,CAAA,IACnD,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,CAAC,GAAA,KAAQ,IAAI,WAAA,EAAY,CAAE,QAAA,CAAS,UAAU,CAAC,CAAA;AAAA,MAAA;AAAA,KACjE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,aAAA,GAAqC;AACnC,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,GAAoB;AAClB,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,MAAM,CAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,IAAA,EAAuB;AACzB,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,IAAI,CAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,GAAgB;AACd,IAAA,OAAO,KAAK,UAAA,CAAW,IAAA;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB,QAAA,EAAqC;AA1MvD,IAAA,IAAA,EAAA;AA2MI,IAAA,OAAA,CAAA,CAAO,UAAK,UAAA,CAAW,GAAA,CAAI,QAAQ,CAAA,KAA5B,mBAA+B,IAAA,KAAQ,CAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA,EAKA,EAAA,CAAG,OAAe,OAAA,EAA6C;AAC7D,IAAA,IAAA,CAAK,MAAA,CAAO,EAAA,CAAG,KAAA,EAAO,OAAO,CAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,GAAA,CAAI,OAAe,OAAA,EAA6C;AAC9D,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,KAAA,EAAO,OAAO,CAAA;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,WAAW,KAAA,EAAM;AACtB,IAAA,IAAA,CAAK,WAAW,KAAA,EAAM;AACtB,IAAA,IAAA,CAAK,KAAK,KAAA,EAAM;AAChB,IAAA,IAAA,CAAK,MAAA,CAAO,KAAK,kBAAkB,CAAA;AAAA,EACrC;AACF;AAGO,IAAM,iBAAA,GAAoB,IAAI,iBAAA","file":"chunk-4JVQJI3I.mjs","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"]}