@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.
- package/README.md +44 -65
- package/THEME_API.md +36 -33
- package/dist/api.js +14 -0
- package/dist/api.js.map +1 -0
- package/dist/api.mjs +5 -0
- package/dist/api.mjs.map +1 -0
- package/dist/auth.js +23 -0
- package/dist/auth.js.map +1 -0
- package/dist/auth.mjs +6 -0
- package/dist/auth.mjs.map +1 -0
- package/dist/blog.js +22 -0
- package/dist/blog.js.map +1 -0
- package/dist/blog.mjs +5 -0
- package/dist/blog.mjs.map +1 -0
- package/dist/cart.js +27 -0
- package/dist/cart.js.map +1 -0
- package/dist/cart.mjs +6 -0
- package/dist/cart.mjs.map +1 -0
- package/dist/chunk-2CSWHI3L.js +210 -0
- package/dist/chunk-2CSWHI3L.js.map +1 -0
- package/dist/chunk-2FGHIDUV.js +99 -0
- package/dist/chunk-2FGHIDUV.js.map +1 -0
- package/dist/chunk-2NMEKWO5.js +40 -0
- package/dist/chunk-2NMEKWO5.js.map +1 -0
- package/dist/chunk-43BVHGDT.mjs +131 -0
- package/dist/chunk-43BVHGDT.mjs.map +1 -0
- package/dist/chunk-4JVQJI3I.mjs +290 -0
- package/dist/chunk-4JVQJI3I.mjs.map +1 -0
- package/dist/chunk-5N2EKK5O.js +9550 -0
- package/dist/chunk-5N2EKK5O.js.map +1 -0
- package/dist/chunk-5T6NDVSN.js +76 -0
- package/dist/chunk-5T6NDVSN.js.map +1 -0
- package/dist/chunk-73AINNCI.mjs +201 -0
- package/dist/chunk-73AINNCI.mjs.map +1 -0
- package/dist/chunk-AIXBDAVP.mjs +61 -0
- package/dist/chunk-AIXBDAVP.mjs.map +1 -0
- package/dist/chunk-ALYN5HAC.js +210 -0
- package/dist/chunk-ALYN5HAC.js.map +1 -0
- package/dist/chunk-AREMJR3Q.js +36 -0
- package/dist/chunk-AREMJR3Q.js.map +1 -0
- package/dist/chunk-DXAI6XOI.mjs +33 -0
- package/dist/chunk-DXAI6XOI.mjs.map +1 -0
- package/dist/chunk-F5TFNWFJ.mjs +257 -0
- package/dist/chunk-F5TFNWFJ.mjs.map +1 -0
- package/dist/chunk-FQ7FWUZN.js +265 -0
- package/dist/chunk-FQ7FWUZN.js.map +1 -0
- package/dist/{chunk-3SZX6LHT.js → chunk-J27VGXJH.js} +2 -24
- package/dist/chunk-J27VGXJH.js.map +1 -0
- package/dist/chunk-JZ46LLTZ.js +121 -0
- package/dist/chunk-JZ46LLTZ.js.map +1 -0
- package/dist/chunk-K24UHN6G.mjs +76 -0
- package/dist/chunk-K24UHN6G.mjs.map +1 -0
- package/dist/chunk-KCQGGU5R.mjs +344 -0
- package/dist/chunk-KCQGGU5R.mjs.map +1 -0
- package/dist/chunk-MT22NYKT.mjs +117 -0
- package/dist/chunk-MT22NYKT.mjs.map +1 -0
- package/dist/chunk-NDD472IZ.js +85 -0
- package/dist/chunk-NDD472IZ.js.map +1 -0
- package/dist/chunk-NHOIGGYU.mjs +833 -0
- package/dist/chunk-NHOIGGYU.mjs.map +1 -0
- package/dist/chunk-O3XR7TW3.mjs +12 -0
- package/dist/chunk-O3XR7TW3.mjs.map +1 -0
- package/dist/chunk-OAPYSC2X.mjs +206 -0
- package/dist/chunk-OAPYSC2X.mjs.map +1 -0
- package/dist/{chunk-XE4EOKS4.mjs → chunk-ONJREDYY.mjs} +3 -23
- package/dist/chunk-ONJREDYY.mjs.map +1 -0
- package/dist/chunk-OVT2LUAM.js +197 -0
- package/dist/chunk-OVT2LUAM.js.map +1 -0
- package/dist/chunk-OWNGNGKL.js +331 -0
- package/dist/chunk-OWNGNGKL.js.map +1 -0
- package/dist/chunk-P7SXNZSV.js +298 -0
- package/dist/chunk-P7SXNZSV.js.map +1 -0
- package/dist/chunk-PFJOL3HI.mjs +71 -0
- package/dist/chunk-PFJOL3HI.mjs.map +1 -0
- package/dist/chunk-PPULMWJ6.js +295 -0
- package/dist/chunk-PPULMWJ6.js.map +1 -0
- package/dist/chunk-RGIVKACG.js +359 -0
- package/dist/chunk-RGIVKACG.js.map +1 -0
- package/dist/chunk-RPP5K2LP.js +870 -0
- package/dist/chunk-RPP5K2LP.js.map +1 -0
- package/dist/{chunk-7EON6Q4L.mjs → chunk-RUCHWUD7.mjs} +7651 -6370
- package/dist/chunk-RUCHWUD7.mjs.map +1 -0
- package/dist/chunk-SEVUIX4H.js +137 -0
- package/dist/chunk-SEVUIX4H.js.map +1 -0
- package/dist/chunk-SK2FSHFM.mjs +208 -0
- package/dist/chunk-SK2FSHFM.mjs.map +1 -0
- package/dist/chunk-T6EJ2GAV.mjs +294 -0
- package/dist/chunk-T6EJ2GAV.mjs.map +1 -0
- package/dist/chunk-ULBDOFZI.mjs +302 -0
- package/dist/chunk-ULBDOFZI.mjs.map +1 -0
- package/dist/chunk-V3JIELNV.js +241 -0
- package/dist/chunk-V3JIELNV.js.map +1 -0
- package/dist/chunk-V5E2KWMA.mjs +238 -0
- package/dist/chunk-V5E2KWMA.mjs.map +1 -0
- package/dist/chunk-VJA3ER6A.js +14 -0
- package/dist/chunk-VJA3ER6A.js.map +1 -0
- package/dist/chunk-VLI7ULX5.js +66 -0
- package/dist/chunk-VLI7ULX5.js.map +1 -0
- package/dist/chunk-WFGS5OFH.mjs +189 -0
- package/dist/chunk-WFGS5OFH.mjs.map +1 -0
- package/dist/chunk-WVC5GP24.mjs +96 -0
- package/dist/chunk-WVC5GP24.mjs.map +1 -0
- package/dist/chunk-YOSPWY5K.mjs +36 -0
- package/dist/chunk-YOSPWY5K.mjs.map +1 -0
- package/dist/chunk-ZFFXXLX7.js +205 -0
- package/dist/chunk-ZFFXXLX7.js.map +1 -0
- package/dist/client.js +512 -249
- package/dist/client.mjs +21 -2
- package/dist/components.js +393 -0
- package/dist/components.js.map +1 -0
- package/dist/components.mjs +8 -0
- package/dist/components.mjs.map +1 -0
- package/dist/config.js +17 -0
- package/dist/config.js.map +1 -0
- package/dist/config.mjs +4 -0
- package/dist/config.mjs.map +1 -0
- package/dist/contact.js +22 -0
- package/dist/contact.js.map +1 -0
- package/dist/contact.mjs +5 -0
- package/dist/contact.mjs.map +1 -0
- package/dist/contexts.js +51 -0
- package/dist/contexts.js.map +1 -0
- package/dist/contexts.mjs +6 -0
- package/dist/contexts.mjs.map +1 -0
- package/dist/finance.js +26 -0
- package/dist/finance.js.map +1 -0
- package/dist/finance.mjs +5 -0
- package/dist/finance.mjs.map +1 -0
- package/dist/icons.js +15 -0
- package/dist/icons.js.map +1 -0
- package/dist/icons.mjs +4 -0
- package/dist/icons.mjs.map +1 -0
- package/dist/index.js +512 -249
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +21 -2
- package/dist/index.mjs.map +1 -1
- package/dist/internal.js +1437 -0
- package/dist/internal.js.map +1 -0
- package/dist/internal.mjs +1404 -0
- package/dist/internal.mjs.map +1 -0
- package/dist/motion.js +51 -0
- package/dist/motion.js.map +1 -0
- package/dist/motion.mjs +38 -0
- package/dist/motion.mjs.map +1 -0
- package/dist/orders.js +22 -0
- package/dist/orders.js.map +1 -0
- package/dist/orders.mjs +5 -0
- package/dist/orders.mjs.map +1 -0
- package/dist/products.js +27 -0
- package/dist/products.js.map +1 -0
- package/dist/products.mjs +6 -0
- package/dist/products.mjs.map +1 -0
- package/dist/registry.js +44 -0
- package/dist/registry.js.map +1 -0
- package/dist/registry.mjs +7 -0
- package/dist/registry.mjs.map +1 -0
- package/dist/renderers.js +51 -0
- package/dist/renderers.js.map +1 -0
- package/dist/renderers.mjs +6 -0
- package/dist/renderers.mjs.map +1 -0
- package/dist/server.js +11 -189
- package/dist/server.js.map +1 -1
- package/dist/server.mjs +3 -186
- package/dist/server.mjs.map +1 -1
- package/dist/types.js +37 -0
- package/dist/types.js.map +1 -0
- package/dist/types.mjs +4 -0
- package/dist/types.mjs.map +1 -0
- package/dist/utils.js +160 -0
- package/dist/utils.js.map +1 -0
- package/dist/utils.mjs +7 -0
- package/dist/utils.mjs.map +1 -0
- package/dist/wrappers.js +104 -0
- package/dist/wrappers.js.map +1 -0
- package/dist/wrappers.mjs +96 -0
- package/dist/wrappers.mjs.map +1 -0
- package/package.json +112 -9
- package/dist/api-vuL1Eg5L.d.mts +0 -2961
- package/dist/api-vuL1Eg5L.d.ts +0 -2961
- package/dist/chunk-3SZX6LHT.js.map +0 -1
- package/dist/chunk-7EON6Q4L.mjs.map +0 -1
- package/dist/chunk-WDY773GJ.js +0 -8308
- package/dist/chunk-WDY773GJ.js.map +0 -1
- package/dist/chunk-XE4EOKS4.mjs.map +0 -1
- package/dist/client.d.mts +0 -1461
- package/dist/client.d.ts +0 -1461
- package/dist/index.d.mts +0 -125
- package/dist/index.d.ts +0 -125
- package/dist/server.d.mts +0 -70
- 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":"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","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"]}
|