@sekiui/cli 0.0.71

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 (73) hide show
  1. package/dist/commands/add.d.ts +7 -0
  2. package/dist/commands/add.d.ts.map +1 -0
  3. package/dist/commands/add.js +111 -0
  4. package/dist/commands/add.js.map +1 -0
  5. package/dist/commands/init.d.ts +2 -0
  6. package/dist/commands/init.d.ts.map +1 -0
  7. package/dist/commands/init.js +241 -0
  8. package/dist/commands/init.js.map +1 -0
  9. package/dist/components/registry.d.ts +12 -0
  10. package/dist/components/registry.d.ts.map +1 -0
  11. package/dist/components/registry.js +593 -0
  12. package/dist/components/registry.js.map +1 -0
  13. package/dist/frameworks/angular.d.ts +4 -0
  14. package/dist/frameworks/angular.d.ts.map +1 -0
  15. package/dist/frameworks/angular.js +60 -0
  16. package/dist/frameworks/angular.js.map +1 -0
  17. package/dist/frameworks/detect.d.ts +4 -0
  18. package/dist/frameworks/detect.d.ts.map +1 -0
  19. package/dist/frameworks/detect.js +72 -0
  20. package/dist/frameworks/detect.js.map +1 -0
  21. package/dist/frameworks/react.d.ts +5 -0
  22. package/dist/frameworks/react.d.ts.map +1 -0
  23. package/dist/frameworks/react.js +52 -0
  24. package/dist/frameworks/react.js.map +1 -0
  25. package/dist/frameworks/vanilla.d.ts +3 -0
  26. package/dist/frameworks/vanilla.d.ts.map +1 -0
  27. package/dist/frameworks/vanilla.js +49 -0
  28. package/dist/frameworks/vanilla.js.map +1 -0
  29. package/dist/frameworks/vue.d.ts +4 -0
  30. package/dist/frameworks/vue.d.ts.map +1 -0
  31. package/dist/frameworks/vue.js +63 -0
  32. package/dist/frameworks/vue.js.map +1 -0
  33. package/dist/index.d.ts +3 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +31 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/themes/index.d.ts +13 -0
  38. package/dist/themes/index.d.ts.map +1 -0
  39. package/dist/themes/index.js +33 -0
  40. package/dist/themes/index.js.map +1 -0
  41. package/dist/themes/presets/blue.d.ts +3 -0
  42. package/dist/themes/presets/blue.d.ts.map +1 -0
  43. package/dist/themes/presets/blue.js +49 -0
  44. package/dist/themes/presets/blue.js.map +1 -0
  45. package/dist/themes/presets/neutral.d.ts +3 -0
  46. package/dist/themes/presets/neutral.d.ts.map +1 -0
  47. package/dist/themes/presets/neutral.js +49 -0
  48. package/dist/themes/presets/neutral.js.map +1 -0
  49. package/dist/themes/presets/rose.d.ts +3 -0
  50. package/dist/themes/presets/rose.d.ts.map +1 -0
  51. package/dist/themes/presets/rose.js +49 -0
  52. package/dist/themes/presets/rose.js.map +1 -0
  53. package/dist/themes/presets/slate.d.ts +3 -0
  54. package/dist/themes/presets/slate.d.ts.map +1 -0
  55. package/dist/themes/presets/slate.js +49 -0
  56. package/dist/themes/presets/slate.js.map +1 -0
  57. package/dist/themes/presets/violet.d.ts +3 -0
  58. package/dist/themes/presets/violet.d.ts.map +1 -0
  59. package/dist/themes/presets/violet.js +49 -0
  60. package/dist/themes/presets/violet.js.map +1 -0
  61. package/dist/themes/presets/zinc.d.ts +3 -0
  62. package/dist/themes/presets/zinc.d.ts.map +1 -0
  63. package/dist/themes/presets/zinc.js +49 -0
  64. package/dist/themes/presets/zinc.js.map +1 -0
  65. package/dist/themes/types.d.ts +8 -0
  66. package/dist/themes/types.d.ts.map +1 -0
  67. package/dist/themes/types.js +30 -0
  68. package/dist/themes/types.js.map +1 -0
  69. package/dist/utils/css.d.ts +4 -0
  70. package/dist/utils/css.d.ts.map +1 -0
  71. package/dist/utils/css.js +45 -0
  72. package/dist/utils/css.js.map +1 -0
  73. package/package.json +40 -0
@@ -0,0 +1,593 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.COMPONENT_REGISTRY = void 0;
4
+ exports.getComponent = getComponent;
5
+ exports.listComponents = listComponents;
6
+ const IMPORT_SNIPPET = `// Already included if you ran: npx sekiui init
7
+ // To load manually:
8
+ import { defineCustomElements } from '@sekiui/elements/loader';
9
+ defineCustomElements();`;
10
+ const CDN_SNIPPET = `<script type="module" src="https://unpkg.com/@sekiui/elements@latest/dist/sekiui/sekiui.esm.js"></script>`;
11
+ exports.COMPONENT_REGISTRY = {
12
+ button: {
13
+ name: 'Button',
14
+ tag: 'seki-button',
15
+ description: 'Trigger actions with multiple variants and sizes.',
16
+ cssTokens: [
17
+ '--seki-button-radius',
18
+ '--seki-button-font-weight',
19
+ '--seki-button-transition-duration',
20
+ '--seki-button-primary-bg',
21
+ '--seki-button-primary-text',
22
+ '--seki-button-shadow',
23
+ '--seki-button-disabled-opacity',
24
+ ],
25
+ usageByFramework: {
26
+ react: `${IMPORT_SNIPPET}
27
+
28
+ // JSX usage
29
+ <seki-button variant="default">Click me</seki-button>
30
+ <seki-button variant="secondary">Secondary</seki-button>
31
+ <seki-button variant="outline">Outline</seki-button>
32
+ <seki-button variant="ghost">Ghost</seki-button>
33
+ <seki-button variant="destructive">Delete</seki-button>
34
+ <seki-button variant="link">Link</seki-button>
35
+
36
+ // Sizes: sm | default | lg | icon
37
+ <seki-button size="sm">Small</seki-button>
38
+ <seki-button size="lg">Large</seki-button>
39
+ <seki-button disabled>Disabled</seki-button>`,
40
+ vue: `${IMPORT_SNIPPET}
41
+
42
+ <!-- Vue template -->
43
+ <seki-button variant="default">Click me</seki-button>
44
+ <seki-button variant="secondary">Secondary</seki-button>
45
+ <seki-button variant="outline">Outline</seki-button>
46
+ <seki-button variant="ghost">Ghost</seki-button>
47
+ <seki-button variant="destructive">Delete</seki-button>
48
+ <seki-button :disabled="isDisabled">Conditional</seki-button>`,
49
+ angular: `${IMPORT_SNIPPET}
50
+
51
+ <!-- Angular template -->
52
+ <seki-button variant="default">Click me</seki-button>
53
+ <seki-button variant="secondary">Secondary</seki-button>
54
+ <seki-button variant="outline">Outline</seki-button>
55
+ <seki-button [attr.disabled]="isDisabled || null">Conditional</seki-button>`,
56
+ vanilla: `${CDN_SNIPPET}
57
+
58
+ <!-- HTML usage -->
59
+ <seki-button variant="default">Click me</seki-button>
60
+ <seki-button variant="secondary">Secondary</seki-button>
61
+ <seki-button variant="outline">Outline</seki-button>
62
+ <seki-button variant="ghost">Ghost</seki-button>
63
+ <seki-button variant="destructive">Delete</seki-button>`,
64
+ },
65
+ },
66
+ input: {
67
+ name: 'Input',
68
+ tag: 'seki-input',
69
+ description: 'Text input field with validation states.',
70
+ cssTokens: [
71
+ '--seki-input-bg',
72
+ '--seki-input-border',
73
+ '--seki-input-text',
74
+ '--seki-input-placeholder',
75
+ '--seki-input-radius',
76
+ '--seki-input-ring',
77
+ '--seki-input-invalid-border',
78
+ '--seki-input-disabled-opacity',
79
+ ],
80
+ usageByFramework: {
81
+ react: `${IMPORT_SNIPPET}
82
+
83
+ // JSX usage
84
+ <seki-input
85
+ placeholder="Email address"
86
+ type="email"
87
+ value={email}
88
+ onSekiChange={(e) => setEmail(e.detail)}
89
+ />
90
+ <seki-input invalid placeholder="Error state" />
91
+ <seki-input disabled placeholder="Disabled" />`,
92
+ vue: `${IMPORT_SNIPPET}
93
+
94
+ <!-- Vue template -->
95
+ <seki-input
96
+ placeholder="Email address"
97
+ type="email"
98
+ :value="email"
99
+ @sekiChange="email = $event.detail"
100
+ />
101
+ <seki-input invalid placeholder="Error state" />`,
102
+ angular: `${IMPORT_SNIPPET}
103
+
104
+ <!-- Angular template -->
105
+ <seki-input
106
+ placeholder="Email address"
107
+ type="email"
108
+ [value]="email"
109
+ (sekiChange)="email = $event.detail"
110
+ ></seki-input>`,
111
+ vanilla: `${CDN_SNIPPET}
112
+
113
+ <!-- HTML usage -->
114
+ <seki-input placeholder="Email address" type="email"></seki-input>
115
+ <seki-input invalid placeholder="Error state"></seki-input>
116
+
117
+ <script>
118
+ document.querySelector('seki-input').addEventListener('sekiChange', (e) => {
119
+ console.log(e.detail);
120
+ });
121
+ </script>`,
122
+ },
123
+ },
124
+ select: {
125
+ name: 'Select',
126
+ tag: 'seki-select',
127
+ description: 'Dropdown selector with search and grouping support.',
128
+ cssTokens: [
129
+ '--seki-select-trigger-bg',
130
+ '--seki-select-trigger-border',
131
+ '--seki-select-trigger-radius',
132
+ '--seki-select-trigger-bg-hover',
133
+ '--seki-select-content-bg',
134
+ '--seki-select-content-shadow',
135
+ '--seki-select-option-bg-hover',
136
+ '--seki-select-option-bg-selected',
137
+ ],
138
+ usageByFramework: {
139
+ react: `${IMPORT_SNIPPET}
140
+
141
+ // JSX usage
142
+ <seki-select placeholder="Pick one" onSekiChange={(e) => console.log(e.detail)}>
143
+ <seki-select-option value="a">Option A</seki-select-option>
144
+ <seki-select-option value="b">Option B</seki-select-option>
145
+ <seki-select-option value="c" disabled>Disabled</seki-select-option>
146
+ </seki-select>
147
+
148
+ // With groups
149
+ <seki-select placeholder="Select fruit">
150
+ <seki-select-group label="Citrus">
151
+ <seki-select-option value="orange">Orange</seki-select-option>
152
+ <seki-select-option value="lemon">Lemon</seki-select-option>
153
+ </seki-select-group>
154
+ <seki-select-group label="Berries">
155
+ <seki-select-option value="strawberry">Strawberry</seki-select-option>
156
+ </seki-select-group>
157
+ </seki-select>`,
158
+ vue: `${IMPORT_SNIPPET}
159
+
160
+ <!-- Vue template -->
161
+ <seki-select placeholder="Pick one" @sekiChange="selected = $event.detail">
162
+ <seki-select-option value="a">Option A</seki-select-option>
163
+ <seki-select-option value="b">Option B</seki-select-option>
164
+ </seki-select>`,
165
+ angular: `${IMPORT_SNIPPET}
166
+
167
+ <!-- Angular template -->
168
+ <seki-select placeholder="Pick one" (sekiChange)="selected = $event.detail">
169
+ <seki-select-option value="a">Option A</seki-select-option>
170
+ <seki-select-option value="b">Option B</seki-select-option>
171
+ </seki-select>`,
172
+ vanilla: `${CDN_SNIPPET}
173
+
174
+ <!-- HTML usage -->
175
+ <seki-select placeholder="Pick one">
176
+ <seki-select-option value="a">Option A</seki-select-option>
177
+ <seki-select-option value="b">Option B</seki-select-option>
178
+ <seki-select-option value="c" disabled>Disabled</seki-select-option>
179
+ </seki-select>`,
180
+ },
181
+ },
182
+ dialog: {
183
+ name: 'Dialog',
184
+ tag: 'seki-dialog',
185
+ description: 'Modal dialog with accessible focus management.',
186
+ cssTokens: [
187
+ '--seki-dialog-bg',
188
+ '--seki-dialog-border',
189
+ '--seki-dialog-radius',
190
+ '--seki-dialog-shadow',
191
+ '--seki-dialog-overlay-bg',
192
+ '--seki-dialog-max-width',
193
+ ],
194
+ usageByFramework: {
195
+ react: `${IMPORT_SNIPPET}
196
+
197
+ // JSX usage
198
+ <seki-dialog open={isOpen} onSekiClose={() => setIsOpen(false)}>
199
+ <div slot="header">Dialog Title</div>
200
+ <div slot="content">
201
+ <p>Dialog content goes here.</p>
202
+ </div>
203
+ <div slot="footer">
204
+ <seki-button variant="outline" onClick={() => setIsOpen(false)}>Cancel</seki-button>
205
+ <seki-button variant="default">Confirm</seki-button>
206
+ </div>
207
+ </seki-dialog>`,
208
+ vue: `${IMPORT_SNIPPET}
209
+
210
+ <!-- Vue template -->
211
+ <seki-dialog :open="isOpen" @sekiClose="isOpen = false">
212
+ <div slot="header">Dialog Title</div>
213
+ <div slot="content">
214
+ <p>Dialog content goes here.</p>
215
+ </div>
216
+ <div slot="footer">
217
+ <seki-button variant="outline" @click="isOpen = false">Cancel</seki-button>
218
+ <seki-button variant="default">Confirm</seki-button>
219
+ </div>
220
+ </seki-dialog>`,
221
+ angular: `${IMPORT_SNIPPET}
222
+
223
+ <!-- Angular template -->
224
+ <seki-dialog [open]="isOpen" (sekiClose)="isOpen = false">
225
+ <div slot="header">Dialog Title</div>
226
+ <div slot="content">
227
+ <p>Dialog content goes here.</p>
228
+ </div>
229
+ <div slot="footer">
230
+ <seki-button variant="outline" (click)="isOpen = false">Cancel</seki-button>
231
+ <seki-button variant="default">Confirm</seki-button>
232
+ </div>
233
+ </seki-dialog>`,
234
+ vanilla: `${CDN_SNIPPET}
235
+
236
+ <!-- HTML usage -->
237
+ <seki-dialog id="my-dialog">
238
+ <div slot="header">Dialog Title</div>
239
+ <div slot="content"><p>Dialog content goes here.</p></div>
240
+ <div slot="footer">
241
+ <seki-button variant="outline" id="cancel-btn">Cancel</seki-button>
242
+ <seki-button variant="default">Confirm</seki-button>
243
+ </div>
244
+ </seki-dialog>
245
+
246
+ <seki-button onclick="document.getElementById('my-dialog').open = true">Open Dialog</seki-button>
247
+
248
+ <script>
249
+ document.getElementById('cancel-btn').addEventListener('click', () => {
250
+ document.getElementById('my-dialog').open = false;
251
+ });
252
+ </script>`,
253
+ },
254
+ },
255
+ badge: {
256
+ name: 'Badge',
257
+ tag: 'seki-badge',
258
+ description: 'Small status indicator or label.',
259
+ cssTokens: [
260
+ '--seki-badge-default-bg',
261
+ '--seki-badge-default-text',
262
+ '--seki-badge-secondary-bg',
263
+ '--seki-badge-secondary-text',
264
+ '--seki-badge-destructive-bg',
265
+ '--seki-badge-font-size',
266
+ '--seki-badge-font-weight',
267
+ ],
268
+ usageByFramework: {
269
+ react: `${IMPORT_SNIPPET}
270
+
271
+ // JSX usage
272
+ <seki-badge>Default</seki-badge>
273
+ <seki-badge variant="secondary">Secondary</seki-badge>
274
+ <seki-badge variant="destructive">Error</seki-badge>
275
+ <seki-badge variant="outline">Outline</seki-badge>`,
276
+ vue: `${IMPORT_SNIPPET}
277
+
278
+ <!-- Vue template -->
279
+ <seki-badge>Default</seki-badge>
280
+ <seki-badge variant="secondary">Secondary</seki-badge>
281
+ <seki-badge variant="destructive">Error</seki-badge>
282
+ <seki-badge variant="outline">Outline</seki-badge>`,
283
+ angular: `${IMPORT_SNIPPET}
284
+
285
+ <!-- Angular template -->
286
+ <seki-badge>Default</seki-badge>
287
+ <seki-badge variant="secondary">Secondary</seki-badge>
288
+ <seki-badge variant="destructive">Error</seki-badge>`,
289
+ vanilla: `${CDN_SNIPPET}
290
+
291
+ <!-- HTML usage -->
292
+ <seki-badge>Default</seki-badge>
293
+ <seki-badge variant="secondary">Secondary</seki-badge>
294
+ <seki-badge variant="destructive">Error</seki-badge>
295
+ <seki-badge variant="outline">Outline</seki-badge>`,
296
+ },
297
+ },
298
+ card: {
299
+ name: 'Card',
300
+ tag: 'seki-card',
301
+ description: 'Content container with header, body, and footer slots.',
302
+ cssTokens: [
303
+ '--seki-card-bg',
304
+ '--seki-card-border',
305
+ '--seki-card-radius',
306
+ '--seki-card-shadow',
307
+ '--seki-card-padding',
308
+ ],
309
+ usageByFramework: {
310
+ react: `${IMPORT_SNIPPET}
311
+
312
+ // JSX usage
313
+ <seki-card>
314
+ <div slot="header">
315
+ <h3>Card Title</h3>
316
+ <p>Card description</p>
317
+ </div>
318
+ <div slot="content">
319
+ <p>Card body content here.</p>
320
+ </div>
321
+ <div slot="footer">
322
+ <seki-button variant="default">Action</seki-button>
323
+ </div>
324
+ </seki-card>`,
325
+ vue: `${IMPORT_SNIPPET}
326
+
327
+ <!-- Vue template -->
328
+ <seki-card>
329
+ <div slot="header">
330
+ <h3>Card Title</h3>
331
+ </div>
332
+ <div slot="content">
333
+ <p>Card body content here.</p>
334
+ </div>
335
+ <div slot="footer">
336
+ <seki-button variant="default">Action</seki-button>
337
+ </div>
338
+ </seki-card>`,
339
+ angular: `${IMPORT_SNIPPET}
340
+
341
+ <!-- Angular template -->
342
+ <seki-card>
343
+ <div slot="header"><h3>Card Title</h3></div>
344
+ <div slot="content"><p>Card body content here.</p></div>
345
+ <div slot="footer">
346
+ <seki-button variant="default">Action</seki-button>
347
+ </div>
348
+ </seki-card>`,
349
+ vanilla: `${CDN_SNIPPET}
350
+
351
+ <!-- HTML usage -->
352
+ <seki-card>
353
+ <div slot="header"><h3>Card Title</h3></div>
354
+ <div slot="content"><p>Card body content here.</p></div>
355
+ <div slot="footer">
356
+ <seki-button variant="default">Action</seki-button>
357
+ </div>
358
+ </seki-card>`,
359
+ },
360
+ },
361
+ alert: {
362
+ name: 'Alert',
363
+ tag: 'seki-alert',
364
+ description: 'Contextual feedback message with variants.',
365
+ cssTokens: [
366
+ '--seki-alert-bg',
367
+ '--seki-alert-border',
368
+ '--seki-alert-radius',
369
+ '--seki-alert-text',
370
+ '--seki-alert-icon-color',
371
+ ],
372
+ usageByFramework: {
373
+ react: `${IMPORT_SNIPPET}
374
+
375
+ // JSX usage
376
+ <seki-alert variant="default">
377
+ <span slot="title">Heads up!</span>
378
+ <span slot="description">You can add components and dependencies.</span>
379
+ </seki-alert>
380
+
381
+ <seki-alert variant="destructive">
382
+ <span slot="title">Error</span>
383
+ <span slot="description">Your session has expired. Please log in again.</span>
384
+ </seki-alert>`,
385
+ vue: `${IMPORT_SNIPPET}
386
+
387
+ <!-- Vue template -->
388
+ <seki-alert variant="default">
389
+ <span slot="title">Heads up!</span>
390
+ <span slot="description">You can add components and dependencies.</span>
391
+ </seki-alert>`,
392
+ angular: `${IMPORT_SNIPPET}
393
+
394
+ <!-- Angular template -->
395
+ <seki-alert variant="default">
396
+ <span slot="title">Heads up!</span>
397
+ <span slot="description">You can add components and dependencies.</span>
398
+ </seki-alert>`,
399
+ vanilla: `${CDN_SNIPPET}
400
+
401
+ <!-- HTML usage -->
402
+ <seki-alert variant="default">
403
+ <span slot="title">Heads up!</span>
404
+ <span slot="description">You can add components and dependencies.</span>
405
+ </seki-alert>
406
+ <seki-alert variant="destructive">
407
+ <span slot="title">Error</span>
408
+ <span slot="description">Your session has expired.</span>
409
+ </seki-alert>`,
410
+ },
411
+ },
412
+ tooltip: {
413
+ name: 'Tooltip',
414
+ tag: 'seki-tooltip',
415
+ description: 'Contextual popup on hover or focus.',
416
+ cssTokens: [
417
+ '--tooltip-bg',
418
+ '--tooltip-text',
419
+ '--tooltip-padding',
420
+ '--tooltip-radius',
421
+ '--tooltip-shadow',
422
+ '--tooltip-font-size',
423
+ '--tooltip-arrow-size',
424
+ ],
425
+ usageByFramework: {
426
+ react: `${IMPORT_SNIPPET}
427
+
428
+ // JSX usage
429
+ <seki-tooltip content="This is a tooltip">
430
+ <seki-button variant="outline">Hover me</seki-button>
431
+ </seki-tooltip>
432
+
433
+ // With placement
434
+ <seki-tooltip content="Top tooltip" placement="top">
435
+ <seki-button>Top</seki-button>
436
+ </seki-tooltip>`,
437
+ vue: `${IMPORT_SNIPPET}
438
+
439
+ <!-- Vue template -->
440
+ <seki-tooltip content="This is a tooltip">
441
+ <seki-button variant="outline">Hover me</seki-button>
442
+ </seki-tooltip>`,
443
+ angular: `${IMPORT_SNIPPET}
444
+
445
+ <!-- Angular template -->
446
+ <seki-tooltip content="This is a tooltip">
447
+ <seki-button variant="outline">Hover me</seki-button>
448
+ </seki-tooltip>`,
449
+ vanilla: `${CDN_SNIPPET}
450
+
451
+ <!-- HTML usage -->
452
+ <seki-tooltip content="This is a tooltip">
453
+ <seki-button variant="outline">Hover me</seki-button>
454
+ </seki-tooltip>`,
455
+ },
456
+ },
457
+ 'dropdown-menu': {
458
+ name: 'Dropdown Menu',
459
+ tag: 'seki-dropdown-menu',
460
+ description: 'Contextual menu triggered by a button or element.',
461
+ cssTokens: [
462
+ '--seki-dropdown-content-bg',
463
+ '--seki-dropdown-content-border',
464
+ '--seki-dropdown-content-radius',
465
+ '--seki-dropdown-content-shadow',
466
+ '--seki-dropdown-item-bg-hover',
467
+ '--seki-dropdown-item-padding',
468
+ ],
469
+ usageByFramework: {
470
+ react: `${IMPORT_SNIPPET}
471
+
472
+ // JSX usage
473
+ <seki-dropdown-menu>
474
+ <seki-button slot="trigger" variant="outline">Open Menu</seki-button>
475
+ <seki-dropdown-menu-item value="profile">Profile</seki-dropdown-menu-item>
476
+ <seki-dropdown-menu-item value="settings">Settings</seki-dropdown-menu-item>
477
+ <seki-dropdown-menu-separator />
478
+ <seki-dropdown-menu-item value="logout">Log out</seki-dropdown-menu-item>
479
+ </seki-dropdown-menu>`,
480
+ vue: `${IMPORT_SNIPPET}
481
+
482
+ <!-- Vue template -->
483
+ <seki-dropdown-menu>
484
+ <seki-button slot="trigger" variant="outline">Open Menu</seki-button>
485
+ <seki-dropdown-menu-item value="profile">Profile</seki-dropdown-menu-item>
486
+ <seki-dropdown-menu-item value="settings">Settings</seki-dropdown-menu-item>
487
+ <seki-dropdown-menu-separator />
488
+ <seki-dropdown-menu-item value="logout">Log out</seki-dropdown-menu-item>
489
+ </seki-dropdown-menu>`,
490
+ angular: `${IMPORT_SNIPPET}
491
+
492
+ <!-- Angular template -->
493
+ <seki-dropdown-menu>
494
+ <seki-button slot="trigger" variant="outline">Open Menu</seki-button>
495
+ <seki-dropdown-menu-item value="profile">Profile</seki-dropdown-menu-item>
496
+ <seki-dropdown-menu-item value="settings">Settings</seki-dropdown-menu-item>
497
+ <seki-dropdown-menu-separator></seki-dropdown-menu-separator>
498
+ <seki-dropdown-menu-item value="logout">Log out</seki-dropdown-menu-item>
499
+ </seki-dropdown-menu>`,
500
+ vanilla: `${CDN_SNIPPET}
501
+
502
+ <!-- HTML usage -->
503
+ <seki-dropdown-menu>
504
+ <seki-button slot="trigger" variant="outline">Open Menu</seki-button>
505
+ <seki-dropdown-menu-item value="profile">Profile</seki-dropdown-menu-item>
506
+ <seki-dropdown-menu-item value="settings">Settings</seki-dropdown-menu-item>
507
+ <seki-dropdown-menu-separator></seki-dropdown-menu-separator>
508
+ <seki-dropdown-menu-item value="logout">Log out</seki-dropdown-menu-item>
509
+ </seki-dropdown-menu>`,
510
+ },
511
+ },
512
+ tabs: {
513
+ name: 'Tabs',
514
+ tag: 'seki-tabs',
515
+ description: 'Tabbed navigation for switching between content panels.',
516
+ cssTokens: [
517
+ '--seki-tabs-list-bg',
518
+ '--seki-tabs-trigger-bg-active',
519
+ '--seki-tabs-trigger-text-active',
520
+ '--seki-tabs-trigger-radius',
521
+ '--seki-tabs-content-padding',
522
+ ],
523
+ usageByFramework: {
524
+ react: `${IMPORT_SNIPPET}
525
+
526
+ // JSX usage
527
+ <seki-tabs default-value="account">
528
+ <seki-tabs-list>
529
+ <seki-tabs-trigger value="account">Account</seki-tabs-trigger>
530
+ <seki-tabs-trigger value="password">Password</seki-tabs-trigger>
531
+ </seki-tabs-list>
532
+ <seki-tabs-content value="account">
533
+ <p>Account settings content.</p>
534
+ </seki-tabs-content>
535
+ <seki-tabs-content value="password">
536
+ <p>Password settings content.</p>
537
+ </seki-tabs-content>
538
+ </seki-tabs>`,
539
+ vue: `${IMPORT_SNIPPET}
540
+
541
+ <!-- Vue template -->
542
+ <seki-tabs default-value="account">
543
+ <seki-tabs-list>
544
+ <seki-tabs-trigger value="account">Account</seki-tabs-trigger>
545
+ <seki-tabs-trigger value="password">Password</seki-tabs-trigger>
546
+ </seki-tabs-list>
547
+ <seki-tabs-content value="account">
548
+ <p>Account settings content.</p>
549
+ </seki-tabs-content>
550
+ <seki-tabs-content value="password">
551
+ <p>Password settings content.</p>
552
+ </seki-tabs-content>
553
+ </seki-tabs>`,
554
+ angular: `${IMPORT_SNIPPET}
555
+
556
+ <!-- Angular template -->
557
+ <seki-tabs default-value="account">
558
+ <seki-tabs-list>
559
+ <seki-tabs-trigger value="account">Account</seki-tabs-trigger>
560
+ <seki-tabs-trigger value="password">Password</seki-tabs-trigger>
561
+ </seki-tabs-list>
562
+ <seki-tabs-content value="account">
563
+ <p>Account settings content.</p>
564
+ </seki-tabs-content>
565
+ <seki-tabs-content value="password">
566
+ <p>Password settings content.</p>
567
+ </seki-tabs-content>
568
+ </seki-tabs>`,
569
+ vanilla: `${CDN_SNIPPET}
570
+
571
+ <!-- HTML usage -->
572
+ <seki-tabs default-value="account">
573
+ <seki-tabs-list>
574
+ <seki-tabs-trigger value="account">Account</seki-tabs-trigger>
575
+ <seki-tabs-trigger value="password">Password</seki-tabs-trigger>
576
+ </seki-tabs-list>
577
+ <seki-tabs-content value="account">
578
+ <p>Account settings content.</p>
579
+ </seki-tabs-content>
580
+ <seki-tabs-content value="password">
581
+ <p>Password settings content.</p>
582
+ </seki-tabs-content>
583
+ </seki-tabs>`,
584
+ },
585
+ },
586
+ };
587
+ function getComponent(name) {
588
+ return exports.COMPONENT_REGISTRY[name.toLowerCase()];
589
+ }
590
+ function listComponents() {
591
+ return Object.keys(exports.COMPONENT_REGISTRY);
592
+ }
593
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/components/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function getAngularModulePatch(existingContent: string): string;
2
+ export declare function getAngularAppComponentPatch(): string;
3
+ export declare function getAngularSampleComponent(): string;
4
+ //# sourceMappingURL=angular.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"angular.d.ts","sourceRoot":"","sources":["../../src/frameworks/angular.ts"],"names":[],"mappings":"AAAA,wBAAgB,qBAAqB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAmCrE;AAED,wBAAgB,2BAA2B,IAAI,MAAM,CAKpD;AAED,wBAAgB,yBAAyB,IAAI,MAAM,CAkBlD"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAngularModulePatch = getAngularModulePatch;
4
+ exports.getAngularAppComponentPatch = getAngularAppComponentPatch;
5
+ exports.getAngularSampleComponent = getAngularSampleComponent;
6
+ function getAngularModulePatch(existingContent) {
7
+ if (existingContent.includes('CUSTOM_ELEMENTS_SCHEMA')) {
8
+ return existingContent;
9
+ }
10
+ let patched = existingContent;
11
+ // Add CUSTOM_ELEMENTS_SCHEMA to imports if not there
12
+ if (!patched.includes('CUSTOM_ELEMENTS_SCHEMA')) {
13
+ patched = patched.replace(/import\s*\{([^}]+)\}\s*from\s*'@angular\/core'/, (match, imports) => {
14
+ const importList = imports
15
+ .split(',')
16
+ .map((s) => s.trim())
17
+ .filter(Boolean);
18
+ if (!importList.includes('CUSTOM_ELEMENTS_SCHEMA')) {
19
+ importList.push('CUSTOM_ELEMENTS_SCHEMA');
20
+ }
21
+ return `import { ${importList.join(', ')} } from '@angular/core'`;
22
+ });
23
+ }
24
+ // Add schemas: [CUSTOM_ELEMENTS_SCHEMA] to @NgModule
25
+ patched = patched.replace(/@NgModule\(\s*\{([^}]+)\}\s*\)/, (match, body) => {
26
+ if (body.includes('schemas')) {
27
+ return match;
28
+ }
29
+ const trimmed = body.trimEnd();
30
+ const separator = trimmed.endsWith(',') ? '\n' : ',\n';
31
+ return `@NgModule({${trimmed}${separator} schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})`;
32
+ });
33
+ return patched;
34
+ }
35
+ function getAngularAppComponentPatch() {
36
+ return `// In app.component.ts or your root component:
37
+ import { defineCustomElements } from '@sekiui/elements/loader';
38
+ defineCustomElements();
39
+ `;
40
+ }
41
+ function getAngularSampleComponent() {
42
+ return `<!-- In your Angular template -->
43
+ <div class="seki-example">
44
+ <h2>SekiUI Example</h2>
45
+
46
+ <div class="button-group">
47
+ <seki-button variant="default">Default</seki-button>
48
+ <seki-button variant="secondary">Secondary</seki-button>
49
+ <seki-button variant="outline">Outline</seki-button>
50
+ <seki-button variant="ghost">Ghost</seki-button>
51
+ <seki-button variant="destructive">Destructive</seki-button>
52
+ </div>
53
+
54
+ <seki-badge>New</seki-badge>
55
+
56
+ <seki-input placeholder="Type something..."></seki-input>
57
+ </div>
58
+ `;
59
+ }
60
+ //# sourceMappingURL=angular.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"angular.js","sourceRoot":"","sources":["../../src/frameworks/angular.ts"],"names":[],"mappings":";;AAAA,sDAmCC;AAED,kEAKC;AAED,8DAkBC;AA9DD,SAAgB,qBAAqB,CAAC,eAAuB;IAC3D,IAAI,eAAe,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC;QACvD,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,IAAI,OAAO,GAAG,eAAe,CAAC;IAE9B,qDAAqD;IACrD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC;QAChD,OAAO,GAAG,OAAO,CAAC,OAAO,CACvB,gDAAgD,EAChD,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YACjB,MAAM,UAAU,GAAG,OAAO;iBACvB,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBAC5B,MAAM,CAAC,OAAO,CAAC,CAAC;YACnB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC;gBACnD,UAAU,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YAC5C,CAAC;YACD,OAAO,YAAY,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC;QACpE,CAAC,CACF,CAAC;IACJ,CAAC;IAED,qDAAqD;IACrD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,gCAAgC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QAC1E,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QACvD,OAAO,cAAc,OAAO,GAAG,SAAS,yCAAyC,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAgB,2BAA2B;IACzC,OAAO;;;CAGR,CAAC;AACF,CAAC;AAED,SAAgB,yBAAyB;IACvC,OAAO;;;;;;;;;;;;;;;;CAgBR,CAAC;AACF,CAAC"}
@@ -0,0 +1,4 @@
1
+ export type Framework = 'react' | 'vue' | 'angular' | 'vanilla';
2
+ export declare function detectFramework(cwd?: string): Promise<Framework | null>;
3
+ export declare function frameworkLabel(fw: Framework): string;
4
+ //# sourceMappingURL=detect.d.ts.map