@sekiui/cli 0.0.71 → 0.0.78

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.
@@ -1 +1 @@
1
- {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGtD,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,wBAAsB,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,EAAE,GAAG,GAAE,MAAsB,iBAgDxG"}
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAiBtD,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,wBAAsB,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,EAAE,GAAG,GAAE,MAAsB,iBAwCxG"}
@@ -43,6 +43,22 @@ const path = __importStar(require("path"));
43
43
  const picocolors_1 = __importDefault(require("picocolors"));
44
44
  const detect_1 = require("../frameworks/detect");
45
45
  const registry_1 = require("../components/registry");
46
+ async function promptFramework() {
47
+ const fw = await p.select({
48
+ message: 'Select your framework:',
49
+ options: [
50
+ { value: 'react', label: 'React' },
51
+ { value: 'vue', label: 'Vue' },
52
+ { value: 'angular', label: 'Angular' },
53
+ { value: 'vanilla', label: 'Vanilla HTML' },
54
+ ],
55
+ });
56
+ if (p.isCancel(fw)) {
57
+ p.cancel('Cancelled.');
58
+ process.exit(0);
59
+ }
60
+ return fw;
61
+ }
46
62
  async function runAdd(componentName, options = {}, cwd = process.cwd()) {
47
63
  const component = (0, registry_1.getComponent)(componentName);
48
64
  if (!component) {
@@ -51,27 +67,25 @@ async function runAdd(componentName, options = {}, cwd = process.cwd()) {
51
67
  process.exit(1);
52
68
  }
53
69
  // Resolve framework
54
- let framework = options.framework ?? 'vanilla';
55
- if (!options.framework) {
70
+ let framework;
71
+ if (options.framework) {
72
+ framework = options.framework;
73
+ }
74
+ else {
56
75
  const detected = await (0, detect_1.detectFramework)(cwd);
57
76
  if (detected) {
58
- framework = detected;
59
- }
60
- else {
61
- const fw = await p.select({
62
- message: 'Select your framework:',
63
- options: [
64
- { value: 'react', label: 'React' },
65
- { value: 'vue', label: 'Vue' },
66
- { value: 'angular', label: 'Angular' },
67
- { value: 'vanilla', label: 'Vanilla HTML' },
68
- ],
77
+ const confirm = await p.confirm({
78
+ message: `Detected ${picocolors_1.default.cyan((0, detect_1.frameworkLabel)(detected))} — use this framework?`,
79
+ initialValue: true,
69
80
  });
70
- if (p.isCancel(fw)) {
81
+ if (p.isCancel(confirm)) {
71
82
  p.cancel('Cancelled.');
72
83
  process.exit(0);
73
84
  }
74
- framework = fw;
85
+ framework = confirm ? detected : await promptFramework();
86
+ }
87
+ else {
88
+ framework = await promptFramework();
75
89
  }
76
90
  }
77
91
  const output = buildOutput(component.name, component.tag, component.cssTokens, component.usageByFramework[framework], framework);
@@ -1 +1 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/components/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;CAC7C;AASD,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAsmB7D,CAAC;AAEF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAErE;AAED,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAEzC"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/components/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;CAC7C;AASD,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CA64C7D,CAAC;AAEF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAErE;AAED,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAEzC"}
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.COMPONENT_REGISTRY = void 0;
4
4
  exports.getComponent = getComponent;
5
5
  exports.listComponents = listComponents;
6
- const IMPORT_SNIPPET = `// Already included if you ran: npx sekiui init
6
+ const IMPORT_SNIPPET = `// Already included if you ran: npx @sekiui/cli init
7
7
  // To load manually:
8
8
  import { defineCustomElements } from '@sekiui/elements/loader';
9
9
  defineCustomElements();`;
@@ -583,6 +583,767 @@ exports.COMPONENT_REGISTRY = {
583
583
  </seki-tabs>`,
584
584
  },
585
585
  },
586
+ accordion: {
587
+ name: 'Accordion',
588
+ tag: 'seki-accordion',
589
+ description: 'Vertically stacked collapsible sections.',
590
+ cssTokens: [],
591
+ usageByFramework: {
592
+ react: `${IMPORT_SNIPPET}\n\n<seki-accordion>\n <seki-accordion-item value="item-1">\n <seki-accordion-trigger>Is it accessible?</seki-accordion-trigger>\n <seki-accordion-content>Yes. It follows WAI-ARIA patterns.</seki-accordion-content>\n </seki-accordion-item>\n <seki-accordion-item value="item-2">\n <seki-accordion-trigger>Is it styled?</seki-accordion-trigger>\n <seki-accordion-content>Yes. Comes with default styles you can override.</seki-accordion-content>\n </seki-accordion-item>\n</seki-accordion>`,
593
+ vue: `${IMPORT_SNIPPET}\n\n<seki-accordion>\n <seki-accordion-item value="item-1">\n <seki-accordion-trigger>Is it accessible?</seki-accordion-trigger>\n <seki-accordion-content>Yes. It follows WAI-ARIA patterns.</seki-accordion-content>\n </seki-accordion-item>\n</seki-accordion>`,
594
+ angular: `${IMPORT_SNIPPET}\n\n<seki-accordion>\n <seki-accordion-item value="item-1">\n <seki-accordion-trigger>Is it accessible?</seki-accordion-trigger>\n <seki-accordion-content>Yes. It follows WAI-ARIA patterns.</seki-accordion-content>\n </seki-accordion-item>\n</seki-accordion>`,
595
+ vanilla: `${CDN_SNIPPET}\n\n<seki-accordion>\n <seki-accordion-item value="item-1">\n <seki-accordion-trigger>Is it accessible?</seki-accordion-trigger>\n <seki-accordion-content>Yes. It follows WAI-ARIA patterns.</seki-accordion-content>\n </seki-accordion-item>\n</seki-accordion>`,
596
+ },
597
+ },
598
+ 'alert-dialog': {
599
+ name: 'Alert Dialog',
600
+ tag: 'seki-alert-dialog',
601
+ description: 'Modal dialog requiring user acknowledgement before proceeding.',
602
+ cssTokens: [],
603
+ usageByFramework: {
604
+ react: `${IMPORT_SNIPPET}\n\n<seki-alert-dialog open={isOpen} onSekiClose={() => setIsOpen(false)}>\n <div slot="title">Are you absolutely sure?</div>\n <div slot="description">This action cannot be undone.</div>\n <div slot="footer">\n <seki-button variant="outline" onClick={() => setIsOpen(false)}>Cancel</seki-button>\n <seki-button variant="destructive">Continue</seki-button>\n </div>\n</seki-alert-dialog>`,
605
+ vue: `${IMPORT_SNIPPET}\n\n<seki-alert-dialog :open="isOpen" @sekiClose="isOpen = false">\n <div slot="title">Are you absolutely sure?</div>\n <div slot="description">This action cannot be undone.</div>\n <div slot="footer">\n <seki-button variant="outline" @click="isOpen = false">Cancel</seki-button>\n <seki-button variant="destructive">Continue</seki-button>\n </div>\n</seki-alert-dialog>`,
606
+ angular: `${IMPORT_SNIPPET}\n\n<seki-alert-dialog [open]="isOpen" (sekiClose)="isOpen = false">\n <div slot="title">Are you absolutely sure?</div>\n <div slot="description">This action cannot be undone.</div>\n <div slot="footer">\n <seki-button variant="outline" (click)="isOpen = false">Cancel</seki-button>\n <seki-button variant="destructive">Continue</seki-button>\n </div>\n</seki-alert-dialog>`,
607
+ vanilla: `${CDN_SNIPPET}\n\n<seki-alert-dialog id="confirm-dialog">\n <div slot="title">Are you absolutely sure?</div>\n <div slot="description">This action cannot be undone.</div>\n <div slot="footer">\n <seki-button variant="outline" onclick="document.getElementById('confirm-dialog').open = false">Cancel</seki-button>\n <seki-button variant="destructive">Continue</seki-button>\n </div>\n</seki-alert-dialog>`,
608
+ },
609
+ },
610
+ 'aspect-ratio': {
611
+ name: 'Aspect Ratio',
612
+ tag: 'seki-aspect-ratio',
613
+ description: 'Maintains a consistent width-to-height ratio for content.',
614
+ cssTokens: [],
615
+ usageByFramework: {
616
+ react: `${IMPORT_SNIPPET}\n\n// 16:9 video\n<seki-aspect-ratio ratio={16 / 9}>\n <img src="photo.jpg" alt="Photo" style={{ objectFit: 'cover', width: '100%', height: '100%' }} />\n</seki-aspect-ratio>\n\n// 1:1 square\n<seki-aspect-ratio ratio={1}>\n <img src="avatar.jpg" alt="Avatar" />\n</seki-aspect-ratio>`,
617
+ vue: `${IMPORT_SNIPPET}\n\n<seki-aspect-ratio :ratio="16/9">\n <img src="photo.jpg" alt="Photo" style="object-fit: cover; width: 100%; height: 100%;" />\n</seki-aspect-ratio>`,
618
+ angular: `${IMPORT_SNIPPET}\n\n<seki-aspect-ratio [ratio]="16/9">\n <img src="photo.jpg" alt="Photo" style="object-fit: cover; width: 100%; height: 100%;" />\n</seki-aspect-ratio>`,
619
+ vanilla: `${CDN_SNIPPET}\n\n<seki-aspect-ratio ratio="1.777">\n <img src="photo.jpg" alt="Photo" style="object-fit: cover; width: 100%; height: 100%;" />\n</seki-aspect-ratio>`,
620
+ },
621
+ },
622
+ avatar: {
623
+ name: 'Avatar',
624
+ tag: 'seki-avatar',
625
+ description: 'User profile image with fallback initials.',
626
+ cssTokens: [
627
+ '--seki-avatar-size-xs',
628
+ '--seki-avatar-size-sm',
629
+ '--seki-avatar-size-md',
630
+ '--seki-avatar-size-lg',
631
+ '--seki-avatar-size-xl',
632
+ '--seki-avatar-radius-circle',
633
+ '--seki-avatar-radius-square',
634
+ '--seki-avatar-bg',
635
+ '--seki-avatar-border',
636
+ ],
637
+ usageByFramework: {
638
+ react: `${IMPORT_SNIPPET}\n\n<seki-avatar src="https://example.com/photo.jpg" alt="Jane Doe" fallback="JD" />\n\n// Sizes: xs | sm | md | lg | xl\n<seki-avatar size="lg" src="photo.jpg" alt="User" fallback="U" />\n\n// Shape\n<seki-avatar shape="square" src="photo.jpg" alt="User" fallback="U" />`,
639
+ vue: `${IMPORT_SNIPPET}\n\n<seki-avatar src="https://example.com/photo.jpg" alt="Jane Doe" fallback="JD" />\n<seki-avatar size="lg" src="photo.jpg" alt="User" fallback="U" />`,
640
+ angular: `${IMPORT_SNIPPET}\n\n<seki-avatar src="https://example.com/photo.jpg" alt="Jane Doe" fallback="JD"></seki-avatar>\n<seki-avatar size="lg" src="photo.jpg" alt="User" fallback="U"></seki-avatar>`,
641
+ vanilla: `${CDN_SNIPPET}\n\n<seki-avatar src="https://example.com/photo.jpg" alt="Jane Doe" fallback="JD"></seki-avatar>\n<seki-avatar size="lg" shape="square" src="photo.jpg" alt="User" fallback="U"></seki-avatar>`,
642
+ },
643
+ },
644
+ breadcrumb: {
645
+ name: 'Breadcrumb',
646
+ tag: 'seki-breadcrumb',
647
+ description: 'Navigation trail showing current page hierarchy.',
648
+ cssTokens: [
649
+ '--seki-breadcrumb-text-color',
650
+ '--seki-breadcrumb-link-color',
651
+ '--seki-breadcrumb-link-hover',
652
+ '--seki-breadcrumb-separator-color',
653
+ '--seki-breadcrumb-font-size',
654
+ '--seki-breadcrumb-font-family',
655
+ '--seki-breadcrumb-gap',
656
+ ],
657
+ usageByFramework: {
658
+ react: `${IMPORT_SNIPPET}\n\n<seki-breadcrumb>\n <seki-breadcrumb-item href="/">Home</seki-breadcrumb-item>\n <seki-breadcrumb-item href="/docs">Docs</seki-breadcrumb-item>\n <seki-breadcrumb-item current>Components</seki-breadcrumb-item>\n</seki-breadcrumb>`,
659
+ vue: `${IMPORT_SNIPPET}\n\n<seki-breadcrumb>\n <seki-breadcrumb-item href="/">Home</seki-breadcrumb-item>\n <seki-breadcrumb-item href="/docs">Docs</seki-breadcrumb-item>\n <seki-breadcrumb-item current>Components</seki-breadcrumb-item>\n</seki-breadcrumb>`,
660
+ angular: `${IMPORT_SNIPPET}\n\n<seki-breadcrumb>\n <seki-breadcrumb-item href="/">Home</seki-breadcrumb-item>\n <seki-breadcrumb-item href="/docs">Docs</seki-breadcrumb-item>\n <seki-breadcrumb-item current>Components</seki-breadcrumb-item>\n</seki-breadcrumb>`,
661
+ vanilla: `${CDN_SNIPPET}\n\n<seki-breadcrumb>\n <seki-breadcrumb-item href="/">Home</seki-breadcrumb-item>\n <seki-breadcrumb-item href="/docs">Docs</seki-breadcrumb-item>\n <seki-breadcrumb-item current>Components</seki-breadcrumb-item>\n</seki-breadcrumb>`,
662
+ },
663
+ },
664
+ 'button-group': {
665
+ name: 'Button Group',
666
+ tag: 'seki-button-group',
667
+ description: 'Groups related buttons with merged borders.',
668
+ cssTokens: [],
669
+ usageByFramework: {
670
+ react: `${IMPORT_SNIPPET}\n\n<seki-button-group>\n <seki-button variant="outline">Left</seki-button>\n <seki-button variant="outline">Middle</seki-button>\n <seki-button variant="outline">Right</seki-button>\n</seki-button-group>`,
671
+ vue: `${IMPORT_SNIPPET}\n\n<seki-button-group>\n <seki-button variant="outline">Left</seki-button>\n <seki-button variant="outline">Middle</seki-button>\n <seki-button variant="outline">Right</seki-button>\n</seki-button-group>`,
672
+ angular: `${IMPORT_SNIPPET}\n\n<seki-button-group>\n <seki-button variant="outline">Left</seki-button>\n <seki-button variant="outline">Middle</seki-button>\n <seki-button variant="outline">Right</seki-button>\n</seki-button-group>`,
673
+ vanilla: `${CDN_SNIPPET}\n\n<seki-button-group>\n <seki-button variant="outline">Left</seki-button>\n <seki-button variant="outline">Middle</seki-button>\n <seki-button variant="outline">Right</seki-button>\n</seki-button-group>`,
674
+ },
675
+ },
676
+ calendar: {
677
+ name: 'Calendar',
678
+ tag: 'seki-calendar',
679
+ description: 'Date picker calendar with single and range selection.',
680
+ cssTokens: [
681
+ '--seki-calendar-bg',
682
+ '--seki-calendar-text',
683
+ '--seki-calendar-muted',
684
+ '--seki-calendar-border',
685
+ '--seki-calendar-accent',
686
+ '--seki-calendar-accent-foreground',
687
+ '--seki-calendar-primary',
688
+ '--seki-calendar-primary-foreground',
689
+ '--seki-calendar-cell-size',
690
+ '--seki-calendar-nav-button-size',
691
+ '--seki-calendar-radius',
692
+ '--seki-calendar-font-size',
693
+ '--seki-calendar-font-family',
694
+ ],
695
+ usageByFramework: {
696
+ react: `${IMPORT_SNIPPET}\n\n<seki-calendar\n value={date}\n onSekiChange={(e) => setDate(e.detail)}\n/>\n\n// Range selection\n<seki-calendar\n mode="range"\n value={range}\n onSekiChange={(e) => setRange(e.detail)}\n/>`,
697
+ vue: `${IMPORT_SNIPPET}\n\n<seki-calendar\n :value="date"\n @sekiChange="date = $event.detail"\n/>`,
698
+ angular: `${IMPORT_SNIPPET}\n\n<seki-calendar\n [value]="date"\n (sekiChange)="date = $event.detail"\n></seki-calendar>`,
699
+ vanilla: `${CDN_SNIPPET}\n\n<seki-calendar id="my-cal"></seki-calendar>\n\n<script>\n document.getElementById('my-cal').addEventListener('sekiChange', (e) => {\n console.log('Selected date:', e.detail);\n });\n</script>`,
700
+ },
701
+ },
702
+ carousel: {
703
+ name: 'Carousel',
704
+ tag: 'seki-carousel',
705
+ description: 'Horizontal slide carousel with navigation controls.',
706
+ cssTokens: [
707
+ '--seki-carousel-gap',
708
+ '--seki-carousel-arrow-size',
709
+ '--seki-carousel-arrow-bg',
710
+ '--seki-carousel-arrow-bg-hover',
711
+ '--seki-carousel-arrow-color',
712
+ '--seki-carousel-dot-size',
713
+ '--seki-carousel-dot-active-size',
714
+ '--seki-carousel-dot-gap',
715
+ '--seki-carousel-dot-color',
716
+ '--seki-carousel-dot-active-color',
717
+ ],
718
+ usageByFramework: {
719
+ react: `${IMPORT_SNIPPET}\n\n<seki-carousel>\n <seki-carousel-content>\n <seki-carousel-item>Slide 1</seki-carousel-item>\n <seki-carousel-item>Slide 2</seki-carousel-item>\n <seki-carousel-item>Slide 3</seki-carousel-item>\n </seki-carousel-content>\n <seki-carousel-previous />\n <seki-carousel-next />\n</seki-carousel>`,
720
+ vue: `${IMPORT_SNIPPET}\n\n<seki-carousel>\n <seki-carousel-content>\n <seki-carousel-item>Slide 1</seki-carousel-item>\n <seki-carousel-item>Slide 2</seki-carousel-item>\n </seki-carousel-content>\n <seki-carousel-previous />\n <seki-carousel-next />\n</seki-carousel>`,
721
+ angular: `${IMPORT_SNIPPET}\n\n<seki-carousel>\n <seki-carousel-content>\n <seki-carousel-item>Slide 1</seki-carousel-item>\n <seki-carousel-item>Slide 2</seki-carousel-item>\n </seki-carousel-content>\n <seki-carousel-previous></seki-carousel-previous>\n <seki-carousel-next></seki-carousel-next>\n</seki-carousel>`,
722
+ vanilla: `${CDN_SNIPPET}\n\n<seki-carousel>\n <seki-carousel-content>\n <seki-carousel-item>Slide 1</seki-carousel-item>\n <seki-carousel-item>Slide 2</seki-carousel-item>\n <seki-carousel-item>Slide 3</seki-carousel-item>\n </seki-carousel-content>\n <seki-carousel-previous></seki-carousel-previous>\n <seki-carousel-next></seki-carousel-next>\n</seki-carousel>`,
723
+ },
724
+ },
725
+ chart: {
726
+ name: 'Chart',
727
+ tag: 'seki-chart',
728
+ description: 'Data visualization with bar, line, and pie chart types.',
729
+ cssTokens: [
730
+ '--seki-chart-color-1',
731
+ '--seki-chart-color-2',
732
+ '--seki-chart-color-3',
733
+ '--seki-chart-color-4',
734
+ '--seki-chart-color-5',
735
+ '--seki-chart-grid-color',
736
+ '--seki-chart-text-color',
737
+ '--seki-chart-background',
738
+ ],
739
+ usageByFramework: {
740
+ react: `${IMPORT_SNIPPET}\n\n<seki-chart\n type="bar"\n data={JSON.stringify({\n labels: ['Jan', 'Feb', 'Mar'],\n datasets: [{ label: 'Sales', data: [40, 65, 30] }]\n })}\n/>`,
741
+ vue: `${IMPORT_SNIPPET}\n\n<seki-chart\n type="bar"\n :data="JSON.stringify(chartData)"\n/>`,
742
+ angular: `${IMPORT_SNIPPET}\n\n<seki-chart\n type="bar"\n [data]="chartDataJson"\n></seki-chart>`,
743
+ vanilla: `${CDN_SNIPPET}\n\n<seki-chart id="my-chart" type="bar"></seki-chart>\n\n<script>\n document.getElementById('my-chart').data = JSON.stringify({\n labels: ['Jan', 'Feb', 'Mar'],\n datasets: [{ label: 'Sales', data: [40, 65, 30] }]\n });\n</script>`,
744
+ },
745
+ },
746
+ checkbox: {
747
+ name: 'Checkbox',
748
+ tag: 'seki-checkbox',
749
+ description: 'Accessible checkbox with indeterminate state support.',
750
+ cssTokens: [],
751
+ usageByFramework: {
752
+ react: `${IMPORT_SNIPPET}\n\n<seki-checkbox\n checked={agreed}\n onSekiChange={(e) => setAgreed(e.detail)}\n>\n Accept terms and conditions\n</seki-checkbox>\n\n// Indeterminate\n<seki-checkbox indeterminate>Partial selection</seki-checkbox>\n<seki-checkbox disabled>Disabled</seki-checkbox>`,
753
+ vue: `${IMPORT_SNIPPET}\n\n<seki-checkbox\n :checked="agreed"\n @sekiChange="agreed = $event.detail"\n>\n Accept terms and conditions\n</seki-checkbox>`,
754
+ angular: `${IMPORT_SNIPPET}\n\n<seki-checkbox\n [checked]="agreed"\n (sekiChange)="agreed = $event.detail"\n>\n Accept terms and conditions\n</seki-checkbox>`,
755
+ vanilla: `${CDN_SNIPPET}\n\n<seki-checkbox>Accept terms and conditions</seki-checkbox>\n<seki-checkbox indeterminate>Partial</seki-checkbox>\n<seki-checkbox disabled>Disabled</seki-checkbox>`,
756
+ },
757
+ },
758
+ collapsible: {
759
+ name: 'Collapsible',
760
+ tag: 'seki-collapsible',
761
+ description: 'Toggle show/hide for a section of content.',
762
+ cssTokens: [],
763
+ usageByFramework: {
764
+ react: `${IMPORT_SNIPPET}\n\n<seki-collapsible open={isOpen} onSekiToggle={(e) => setIsOpen(e.detail)}>\n <seki-collapsible-trigger>Toggle section</seki-collapsible-trigger>\n <seki-collapsible-content>\n <p>Collapsible content here.</p>\n </seki-collapsible-content>\n</seki-collapsible>`,
765
+ vue: `${IMPORT_SNIPPET}\n\n<seki-collapsible :open="isOpen" @sekiToggle="isOpen = $event.detail">\n <seki-collapsible-trigger>Toggle section</seki-collapsible-trigger>\n <seki-collapsible-content>\n <p>Collapsible content here.</p>\n </seki-collapsible-content>\n</seki-collapsible>`,
766
+ angular: `${IMPORT_SNIPPET}\n\n<seki-collapsible [open]="isOpen" (sekiToggle)="isOpen = $event.detail">\n <seki-collapsible-trigger>Toggle section</seki-collapsible-trigger>\n <seki-collapsible-content><p>Collapsible content here.</p></seki-collapsible-content>\n</seki-collapsible>`,
767
+ vanilla: `${CDN_SNIPPET}\n\n<seki-collapsible>\n <seki-collapsible-trigger>Toggle section</seki-collapsible-trigger>\n <seki-collapsible-content>\n <p>Collapsible content here.</p>\n </seki-collapsible-content>\n</seki-collapsible>`,
768
+ },
769
+ },
770
+ combobox: {
771
+ name: 'Combobox',
772
+ tag: 'seki-combobox',
773
+ description: 'Searchable select with typeahead filtering.',
774
+ cssTokens: [],
775
+ usageByFramework: {
776
+ react: `${IMPORT_SNIPPET}\n\n<seki-combobox placeholder="Search framework..." onSekiChange={(e) => setValue(e.detail)}>\n <seki-combobox-input placeholder="Search..." />\n <seki-combobox-content>\n <seki-combobox-group>\n <seki-combobox-item value="next">Next.js</seki-combobox-item>\n <seki-combobox-item value="remix">Remix</seki-combobox-item>\n <seki-combobox-item value="astro">Astro</seki-combobox-item>\n </seki-combobox-group>\n <seki-combobox-empty>No results found.</seki-combobox-empty>\n </seki-combobox-content>\n</seki-combobox>`,
777
+ vue: `${IMPORT_SNIPPET}\n\n<seki-combobox placeholder="Search framework..." @sekiChange="value = $event.detail">\n <seki-combobox-input placeholder="Search..." />\n <seki-combobox-content>\n <seki-combobox-item value="next">Next.js</seki-combobox-item>\n <seki-combobox-item value="remix">Remix</seki-combobox-item>\n <seki-combobox-empty>No results found.</seki-combobox-empty>\n </seki-combobox-content>\n</seki-combobox>`,
778
+ angular: `${IMPORT_SNIPPET}\n\n<seki-combobox placeholder="Search framework..." (sekiChange)="value = $event.detail">\n <seki-combobox-input placeholder="Search..."></seki-combobox-input>\n <seki-combobox-content>\n <seki-combobox-item value="next">Next.js</seki-combobox-item>\n <seki-combobox-empty>No results found.</seki-combobox-empty>\n </seki-combobox-content>\n</seki-combobox>`,
779
+ vanilla: `${CDN_SNIPPET}\n\n<seki-combobox placeholder="Search framework...">\n <seki-combobox-input placeholder="Search..."></seki-combobox-input>\n <seki-combobox-content>\n <seki-combobox-item value="next">Next.js</seki-combobox-item>\n <seki-combobox-item value="remix">Remix</seki-combobox-item>\n <seki-combobox-empty>No results found.</seki-combobox-empty>\n </seki-combobox-content>\n</seki-combobox>`,
780
+ },
781
+ },
782
+ command: {
783
+ name: 'Command',
784
+ tag: 'seki-command',
785
+ description: 'Command palette with keyboard-driven search.',
786
+ cssTokens: [],
787
+ usageByFramework: {
788
+ react: `${IMPORT_SNIPPET}\n\n<seki-command>\n <seki-command-input placeholder="Type a command..." />\n <seki-command-list>\n <seki-command-empty>No results found.</seki-command-empty>\n <seki-command-group heading="Suggestions">\n <seki-command-item value="calendar">Calendar</seki-command-item>\n <seki-command-item value="search">Search</seki-command-item>\n <seki-command-item value="settings">Settings</seki-command-item>\n </seki-command-group>\n </seki-command-list>\n</seki-command>`,
789
+ vue: `${IMPORT_SNIPPET}\n\n<seki-command>\n <seki-command-input placeholder="Type a command..." />\n <seki-command-list>\n <seki-command-group heading="Suggestions">\n <seki-command-item value="calendar">Calendar</seki-command-item>\n <seki-command-item value="settings">Settings</seki-command-item>\n </seki-command-group>\n </seki-command-list>\n</seki-command>`,
790
+ angular: `${IMPORT_SNIPPET}\n\n<seki-command>\n <seki-command-input placeholder="Type a command..."></seki-command-input>\n <seki-command-list>\n <seki-command-group heading="Suggestions">\n <seki-command-item value="calendar">Calendar</seki-command-item>\n </seki-command-group>\n </seki-command-list>\n</seki-command>`,
791
+ vanilla: `${CDN_SNIPPET}\n\n<seki-command>\n <seki-command-input placeholder="Type a command..."></seki-command-input>\n <seki-command-list>\n <seki-command-empty>No results found.</seki-command-empty>\n <seki-command-group heading="Suggestions">\n <seki-command-item value="calendar">Calendar</seki-command-item>\n <seki-command-item value="settings">Settings</seki-command-item>\n </seki-command-group>\n </seki-command-list>\n</seki-command>`,
792
+ },
793
+ },
794
+ 'context-menu': {
795
+ name: 'Context Menu',
796
+ tag: 'seki-context-menu',
797
+ description: 'Right-click contextual menu.',
798
+ cssTokens: [],
799
+ usageByFramework: {
800
+ react: `${IMPORT_SNIPPET}\n\n<seki-context-menu>\n <seki-context-menu-trigger>\n <div style={{ border: '1px dashed', padding: '4rem', textAlign: 'center' }}>\n Right click here\n </div>\n </seki-context-menu-trigger>\n <seki-context-menu-content>\n <seki-context-menu-item>Back</seki-context-menu-item>\n <seki-context-menu-item>Reload</seki-context-menu-item>\n <seki-context-menu-separator />\n <seki-context-menu-item>Save As</seki-context-menu-item>\n </seki-context-menu-content>\n</seki-context-menu>`,
801
+ vue: `${IMPORT_SNIPPET}\n\n<seki-context-menu>\n <seki-context-menu-trigger>\n <div style="border: 1px dashed; padding: 4rem; text-align: center">Right click here</div>\n </seki-context-menu-trigger>\n <seki-context-menu-content>\n <seki-context-menu-item>Back</seki-context-menu-item>\n <seki-context-menu-item>Reload</seki-context-menu-item>\n </seki-context-menu-content>\n</seki-context-menu>`,
802
+ angular: `${IMPORT_SNIPPET}\n\n<seki-context-menu>\n <seki-context-menu-trigger><div>Right click here</div></seki-context-menu-trigger>\n <seki-context-menu-content>\n <seki-context-menu-item>Back</seki-context-menu-item>\n </seki-context-menu-content>\n</seki-context-menu>`,
803
+ vanilla: `${CDN_SNIPPET}\n\n<seki-context-menu>\n <seki-context-menu-trigger>\n <div style="border: 1px dashed; padding: 4rem; text-align: center">Right click here</div>\n </seki-context-menu-trigger>\n <seki-context-menu-content>\n <seki-context-menu-item>Back</seki-context-menu-item>\n <seki-context-menu-item>Reload</seki-context-menu-item>\n <seki-context-menu-separator></seki-context-menu-separator>\n <seki-context-menu-item>Save As</seki-context-menu-item>\n </seki-context-menu-content>\n</seki-context-menu>`,
804
+ },
805
+ },
806
+ 'data-table': {
807
+ name: 'Data Table',
808
+ tag: 'seki-data-table',
809
+ description: 'Feature-rich table with sorting, filtering, and pagination.',
810
+ cssTokens: [
811
+ '--seki-table-border',
812
+ '--seki-table-radius',
813
+ '--seki-table-header-bg',
814
+ '--seki-table-header-text',
815
+ '--seki-table-header-height',
816
+ '--seki-table-row-bg',
817
+ '--seki-table-row-bg-hover',
818
+ '--seki-table-row-bg-selected',
819
+ '--seki-table-row-height',
820
+ '--seki-table-cell-padding',
821
+ '--seki-table-pagination-height',
822
+ ],
823
+ usageByFramework: {
824
+ react: `${IMPORT_SNIPPET}\n\n<seki-data-table\n columns={JSON.stringify([\n { key: 'name', header: 'Name', sortable: true },\n { key: 'email', header: 'Email' },\n { key: 'status', header: 'Status' },\n ])}\n data={JSON.stringify(rows)}\n page-size={10}\n/>`,
825
+ vue: `${IMPORT_SNIPPET}\n\n<seki-data-table\n :columns="JSON.stringify(columns)"\n :data="JSON.stringify(rows)"\n page-size="10"\n/>`,
826
+ angular: `${IMPORT_SNIPPET}\n\n<seki-data-table\n [columns]="columnsJson"\n [data]="dataJson"\n page-size="10"\n></seki-data-table>`,
827
+ vanilla: `${CDN_SNIPPET}\n\n<seki-data-table id="my-table" page-size="10"></seki-data-table>\n\n<script>\n const table = document.getElementById('my-table');\n table.columns = JSON.stringify([\n { key: 'name', header: 'Name', sortable: true },\n { key: 'email', header: 'Email' },\n ]);\n table.data = JSON.stringify([\n { name: 'Alice', email: 'alice@example.com' },\n { name: 'Bob', email: 'bob@example.com' },\n ]);\n</script>`,
828
+ },
829
+ },
830
+ 'date-picker': {
831
+ name: 'Date Picker',
832
+ tag: 'seki-date-picker',
833
+ description: 'Input field with calendar popover for date selection.',
834
+ cssTokens: [
835
+ '--seki-date-picker-bg',
836
+ '--seki-date-picker-text',
837
+ '--seki-date-picker-muted',
838
+ '--seki-date-picker-border',
839
+ '--seki-date-picker-ring',
840
+ '--seki-date-picker-height',
841
+ '--seki-date-picker-radius',
842
+ '--seki-date-picker-padding',
843
+ '--seki-date-picker-font-size',
844
+ '--seki-date-picker-font-family',
845
+ ],
846
+ usageByFramework: {
847
+ react: `${IMPORT_SNIPPET}\n\n<seki-date-picker\n value={date}\n placeholder="Pick a date"\n onSekiChange={(e) => setDate(e.detail)}\n/>`,
848
+ vue: `${IMPORT_SNIPPET}\n\n<seki-date-picker\n :value="date"\n placeholder="Pick a date"\n @sekiChange="date = $event.detail"\n/>`,
849
+ angular: `${IMPORT_SNIPPET}\n\n<seki-date-picker\n [value]="date"\n placeholder="Pick a date"\n (sekiChange)="date = $event.detail"\n></seki-date-picker>`,
850
+ vanilla: `${CDN_SNIPPET}\n\n<seki-date-picker placeholder="Pick a date"></seki-date-picker>`,
851
+ },
852
+ },
853
+ drawer: {
854
+ name: 'Drawer',
855
+ tag: 'seki-drawer',
856
+ description: 'Slide-in panel from any edge, mobile-friendly with snap points.',
857
+ cssTokens: [
858
+ '--seki-drawer-bg',
859
+ '--seki-drawer-border',
860
+ '--seki-drawer-text',
861
+ '--seki-drawer-text-muted',
862
+ '--seki-drawer-handle-bg',
863
+ '--seki-drawer-overlay-bg',
864
+ '--seki-drawer-shadow',
865
+ '--seki-drawer-font-family',
866
+ '--seki-drawer-max-height',
867
+ '--seki-drawer-max-width',
868
+ '--seki-drawer-z-index',
869
+ ],
870
+ usageByFramework: {
871
+ react: `${IMPORT_SNIPPET}\n\n<seki-drawer open={isOpen} onSekiClose={() => setIsOpen(false)}>\n <div slot="header">Drawer Title</div>\n <div slot="content"><p>Drawer content here.</p></div>\n <div slot="footer">\n <seki-button variant="outline" onClick={() => setIsOpen(false)}>Cancel</seki-button>\n <seki-button>Save</seki-button>\n </div>\n</seki-drawer>`,
872
+ vue: `${IMPORT_SNIPPET}\n\n<seki-drawer :open="isOpen" @sekiClose="isOpen = false">\n <div slot="header">Drawer Title</div>\n <div slot="content"><p>Drawer content.</p></div>\n <div slot="footer">\n <seki-button variant="outline" @click="isOpen = false">Cancel</seki-button>\n <seki-button>Save</seki-button>\n </div>\n</seki-drawer>`,
873
+ angular: `${IMPORT_SNIPPET}\n\n<seki-drawer [open]="isOpen" (sekiClose)="isOpen = false">\n <div slot="header">Drawer Title</div>\n <div slot="content"><p>Drawer content.</p></div>\n <div slot="footer">\n <seki-button variant="outline" (click)="isOpen = false">Cancel</seki-button>\n <seki-button>Save</seki-button>\n </div>\n</seki-drawer>`,
874
+ vanilla: `${CDN_SNIPPET}\n\n<seki-drawer id="my-drawer">\n <div slot="header">Drawer Title</div>\n <div slot="content"><p>Drawer content.</p></div>\n</seki-drawer>\n\n<seki-button onclick="document.getElementById('my-drawer').open = true">Open Drawer</seki-button>`,
875
+ },
876
+ },
877
+ field: {
878
+ name: 'Field',
879
+ tag: 'seki-field',
880
+ description: 'Form field wrapper combining label, input, description, and error.',
881
+ cssTokens: ['--seki-field-spacing', '--seki-field-gap-horizontal'],
882
+ usageByFramework: {
883
+ react: `${IMPORT_SNIPPET}\n\n<seki-field>\n <seki-field-label>Email</seki-field-label>\n <seki-input type="email" placeholder="you@example.com" />\n <seki-field-description>We'll never share your email.</seki-field-description>\n <seki-field-error>Please enter a valid email.</seki-field-error>\n</seki-field>`,
884
+ vue: `${IMPORT_SNIPPET}\n\n<seki-field>\n <seki-field-label>Email</seki-field-label>\n <seki-input type="email" placeholder="you@example.com" />\n <seki-field-description>We'll never share your email.</seki-field-description>\n</seki-field>`,
885
+ angular: `${IMPORT_SNIPPET}\n\n<seki-field>\n <seki-field-label>Email</seki-field-label>\n <seki-input type="email" placeholder="you@example.com"></seki-input>\n <seki-field-description>We'll never share your email.</seki-field-description>\n</seki-field>`,
886
+ vanilla: `${CDN_SNIPPET}\n\n<seki-field>\n <seki-field-label>Email</seki-field-label>\n <seki-input type="email" placeholder="you@example.com"></seki-input>\n <seki-field-description>We'll never share your email.</seki-field-description>\n</seki-field>`,
887
+ },
888
+ },
889
+ 'field-label': {
890
+ name: 'Field Label',
891
+ tag: 'seki-field-label',
892
+ description: 'Accessible label for form fields with required indicator support.',
893
+ cssTokens: [
894
+ '--seki-label-color',
895
+ '--seki-label-font-size',
896
+ '--seki-label-font-weight',
897
+ '--seki-label-line-height',
898
+ '--seki-label-required-color',
899
+ ],
900
+ usageByFramework: {
901
+ react: `${IMPORT_SNIPPET}\n\n<seki-field-label for="email">Email</seki-field-label>\n<seki-input id="email" type="email" />\n\n// Required\n<seki-field-label required>Password</seki-field-label>`,
902
+ vue: `${IMPORT_SNIPPET}\n\n<seki-field-label for="email">Email</seki-field-label>\n<seki-input id="email" type="email" />\n<seki-field-label required>Required field</seki-field-label>`,
903
+ angular: `${IMPORT_SNIPPET}\n\n<seki-field-label for="email">Email</seki-field-label>\n<seki-input id="email" type="email"></seki-input>`,
904
+ vanilla: `${CDN_SNIPPET}\n\n<seki-field-label for="email">Email</seki-field-label>\n<seki-input id="email" type="email"></seki-input>`,
905
+ },
906
+ },
907
+ 'field-description': {
908
+ name: 'Field Description',
909
+ tag: 'seki-field-description',
910
+ description: 'Helper text displayed below a form field.',
911
+ cssTokens: [
912
+ '--seki-description-color',
913
+ '--seki-description-font-size',
914
+ '--seki-description-line-height',
915
+ ],
916
+ usageByFramework: {
917
+ react: `${IMPORT_SNIPPET}\n\n<seki-field>\n <seki-input type="password" />\n <seki-field-description>Must be at least 8 characters.</seki-field-description>\n</seki-field>`,
918
+ vue: `${IMPORT_SNIPPET}\n\n<seki-field>\n <seki-input type="password" />\n <seki-field-description>Must be at least 8 characters.</seki-field-description>\n</seki-field>`,
919
+ angular: `${IMPORT_SNIPPET}\n\n<seki-field>\n <seki-input type="password"></seki-input>\n <seki-field-description>Must be at least 8 characters.</seki-field-description>\n</seki-field>`,
920
+ vanilla: `${CDN_SNIPPET}\n\n<seki-field-description>Must be at least 8 characters.</seki-field-description>`,
921
+ },
922
+ },
923
+ 'field-error': {
924
+ name: 'Field Error',
925
+ tag: 'seki-field-error',
926
+ description: 'Validation error message for form fields.',
927
+ cssTokens: [
928
+ '--seki-error-color',
929
+ '--seki-error-font-size',
930
+ '--seki-error-font-weight',
931
+ '--seki-error-line-height',
932
+ ],
933
+ usageByFramework: {
934
+ react: `${IMPORT_SNIPPET}\n\n<seki-field>\n <seki-input type="email" invalid />\n {error && <seki-field-error>{error}</seki-field-error>}\n</seki-field>`,
935
+ vue: `${IMPORT_SNIPPET}\n\n<seki-field>\n <seki-input type="email" :invalid="!!error" />\n <seki-field-error v-if="error">{{ error }}</seki-field-error>\n</seki-field>`,
936
+ angular: `${IMPORT_SNIPPET}\n\n<seki-field>\n <seki-input type="email" [invalid]="!!error"></seki-input>\n <seki-field-error *ngIf="error">{{ error }}</seki-field-error>\n</seki-field>`,
937
+ vanilla: `${CDN_SNIPPET}\n\n<seki-field-error>Please enter a valid email address.</seki-field-error>`,
938
+ },
939
+ },
940
+ 'field-group': {
941
+ name: 'Field Group',
942
+ tag: 'seki-field-group',
943
+ description: 'Groups multiple fields in a horizontal or vertical layout.',
944
+ cssTokens: ['--seki-field-group-gap'],
945
+ usageByFramework: {
946
+ react: `${IMPORT_SNIPPET}\n\n<seki-field-group>\n <seki-field>\n <seki-field-label>First name</seki-field-label>\n <seki-input placeholder="Jane" />\n </seki-field>\n <seki-field>\n <seki-field-label>Last name</seki-field-label>\n <seki-input placeholder="Doe" />\n </seki-field>\n</seki-field-group>`,
947
+ vue: `${IMPORT_SNIPPET}\n\n<seki-field-group>\n <seki-field>\n <seki-field-label>First name</seki-field-label>\n <seki-input placeholder="Jane" />\n </seki-field>\n <seki-field>\n <seki-field-label>Last name</seki-field-label>\n <seki-input placeholder="Doe" />\n </seki-field>\n</seki-field-group>`,
948
+ angular: `${IMPORT_SNIPPET}\n\n<seki-field-group>\n <seki-field>\n <seki-field-label>First name</seki-field-label>\n <seki-input placeholder="Jane"></seki-input>\n </seki-field>\n <seki-field>\n <seki-field-label>Last name</seki-field-label>\n <seki-input placeholder="Doe"></seki-input>\n </seki-field>\n</seki-field-group>`,
949
+ vanilla: `${CDN_SNIPPET}\n\n<seki-field-group>\n <seki-field>\n <seki-field-label>First name</seki-field-label>\n <seki-input placeholder="Jane"></seki-input>\n </seki-field>\n <seki-field>\n <seki-field-label>Last name</seki-field-label>\n <seki-input placeholder="Doe"></seki-input>\n </seki-field>\n</seki-field-group>`,
950
+ },
951
+ },
952
+ fieldset: {
953
+ name: 'Fieldset',
954
+ tag: 'seki-fieldset',
955
+ description: 'Groups related form controls with a legend.',
956
+ cssTokens: [
957
+ '--seki-fieldset-border-color',
958
+ '--seki-fieldset-border-width',
959
+ '--seki-fieldset-border-radius',
960
+ '--seki-fieldset-padding',
961
+ ],
962
+ usageByFramework: {
963
+ react: `${IMPORT_SNIPPET}\n\n<seki-fieldset>\n <seki-field-legend>Contact Information</seki-field-legend>\n <seki-field>\n <seki-field-label>Name</seki-field-label>\n <seki-input placeholder="Jane Doe" />\n </seki-field>\n <seki-field>\n <seki-field-label>Email</seki-field-label>\n <seki-input type="email" placeholder="jane@example.com" />\n </seki-field>\n</seki-fieldset>`,
964
+ vue: `${IMPORT_SNIPPET}\n\n<seki-fieldset>\n <seki-field-legend>Contact Information</seki-field-legend>\n <seki-field>\n <seki-field-label>Name</seki-field-label>\n <seki-input placeholder="Jane Doe" />\n </seki-field>\n</seki-fieldset>`,
965
+ angular: `${IMPORT_SNIPPET}\n\n<seki-fieldset>\n <seki-field-legend>Contact Information</seki-field-legend>\n <seki-field>\n <seki-field-label>Name</seki-field-label>\n <seki-input placeholder="Jane Doe"></seki-input>\n </seki-field>\n</seki-fieldset>`,
966
+ vanilla: `${CDN_SNIPPET}\n\n<seki-fieldset>\n <seki-field-legend>Contact Information</seki-field-legend>\n <seki-field>\n <seki-field-label>Name</seki-field-label>\n <seki-input placeholder="Jane Doe"></seki-input>\n </seki-field>\n</seki-fieldset>`,
967
+ },
968
+ },
969
+ 'hover-card': {
970
+ name: 'Hover Card',
971
+ tag: 'seki-hover-card',
972
+ description: 'Rich popover shown on hover for preview content.',
973
+ cssTokens: [],
974
+ usageByFramework: {
975
+ react: `${IMPORT_SNIPPET}\n\n<seki-hover-card>\n <seki-hover-card-trigger>\n <a href="#">@shadcn</a>\n </seki-hover-card-trigger>\n <seki-hover-card-content>\n <div>\n <strong>@shadcn</strong>\n <p>UI component library creator.</p>\n </div>\n </seki-hover-card-content>\n</seki-hover-card>`,
976
+ vue: `${IMPORT_SNIPPET}\n\n<seki-hover-card>\n <seki-hover-card-trigger><a href="#">@shadcn</a></seki-hover-card-trigger>\n <seki-hover-card-content>\n <div><strong>@shadcn</strong><p>UI component library creator.</p></div>\n </seki-hover-card-content>\n</seki-hover-card>`,
977
+ angular: `${IMPORT_SNIPPET}\n\n<seki-hover-card>\n <seki-hover-card-trigger><a href="#">@shadcn</a></seki-hover-card-trigger>\n <seki-hover-card-content>\n <div><strong>@shadcn</strong><p>UI component library creator.</p></div>\n </seki-hover-card-content>\n</seki-hover-card>`,
978
+ vanilla: `${CDN_SNIPPET}\n\n<seki-hover-card>\n <seki-hover-card-trigger><a href="#">@shadcn</a></seki-hover-card-trigger>\n <seki-hover-card-content>\n <strong>@shadcn</strong>\n <p>UI component library creator.</p>\n </seki-hover-card-content>\n</seki-hover-card>`,
979
+ },
980
+ },
981
+ 'input-group': {
982
+ name: 'Input Group',
983
+ tag: 'seki-input-group',
984
+ description: 'Input with prefix/suffix addons (icons, text, buttons).',
985
+ cssTokens: [],
986
+ usageByFramework: {
987
+ react: `${IMPORT_SNIPPET}\n\n// With prefix icon\n<seki-input-group>\n <span slot="prefix">$</span>\n <seki-input placeholder="0.00" />\n</seki-input-group>\n\n// With suffix button\n<seki-input-group>\n <seki-input placeholder="Search..." />\n <seki-button slot="suffix" variant="ghost">Search</seki-button>\n</seki-input-group>`,
988
+ vue: `${IMPORT_SNIPPET}\n\n<seki-input-group>\n <span slot="prefix">$</span>\n <seki-input placeholder="0.00" />\n</seki-input-group>`,
989
+ angular: `${IMPORT_SNIPPET}\n\n<seki-input-group>\n <span slot="prefix">$</span>\n <seki-input placeholder="0.00"></seki-input>\n</seki-input-group>`,
990
+ vanilla: `${CDN_SNIPPET}\n\n<seki-input-group>\n <span slot="prefix">$</span>\n <seki-input placeholder="0.00"></seki-input>\n</seki-input-group>`,
991
+ },
992
+ },
993
+ 'input-otp': {
994
+ name: 'Input OTP',
995
+ tag: 'seki-input-otp',
996
+ description: 'One-time password input with individual character slots.',
997
+ cssTokens: [],
998
+ usageByFramework: {
999
+ react: `${IMPORT_SNIPPET}\n\n<seki-input-otp\n length={6}\n onSekiComplete={(e) => verifyOTP(e.detail)}\n/>\n\n// With separator\n<seki-input-otp length={6} separator="-" />`,
1000
+ vue: `${IMPORT_SNIPPET}\n\n<seki-input-otp\n :length="6"\n @sekiComplete="verifyOTP($event.detail)"\n/>`,
1001
+ angular: `${IMPORT_SNIPPET}\n\n<seki-input-otp\n [length]="6"\n (sekiComplete)="verifyOTP($event.detail)"\n></seki-input-otp>`,
1002
+ vanilla: `${CDN_SNIPPET}\n\n<seki-input-otp length="6"></seki-input-otp>\n\n<script>\n document.querySelector('seki-input-otp').addEventListener('sekiComplete', (e) => {\n console.log('OTP:', e.detail);\n });\n</script>`,
1003
+ },
1004
+ },
1005
+ kbd: {
1006
+ name: 'Kbd',
1007
+ tag: 'seki-kbd',
1008
+ description: 'Keyboard shortcut display element.',
1009
+ cssTokens: [],
1010
+ usageByFramework: {
1011
+ react: `${IMPORT_SNIPPET}\n\n<seki-kbd>⌘K</seki-kbd>\n<seki-kbd>Ctrl+S</seki-kbd>\n<seki-kbd size="sm">Enter</seki-kbd>`,
1012
+ vue: `${IMPORT_SNIPPET}\n\n<seki-kbd>⌘K</seki-kbd>\n<seki-kbd>Ctrl+S</seki-kbd>`,
1013
+ angular: `${IMPORT_SNIPPET}\n\n<seki-kbd>⌘K</seki-kbd>\n<seki-kbd>Ctrl+S</seki-kbd>`,
1014
+ vanilla: `${CDN_SNIPPET}\n\n<seki-kbd>⌘K</seki-kbd>\n<seki-kbd>Ctrl+S</seki-kbd>`,
1015
+ },
1016
+ },
1017
+ menubar: {
1018
+ name: 'Menubar',
1019
+ tag: 'seki-menubar',
1020
+ description: 'Horizontal menu bar with nested submenus.',
1021
+ cssTokens: [],
1022
+ usageByFramework: {
1023
+ react: `${IMPORT_SNIPPET}\n\n<seki-menubar>\n <seki-menubar-menu>\n <seki-menubar-trigger>File</seki-menubar-trigger>\n <seki-menubar-content>\n <seki-menubar-item>New</seki-menubar-item>\n <seki-menubar-item>Open</seki-menubar-item>\n <seki-menubar-separator />\n <seki-menubar-item>Save</seki-menubar-item>\n </seki-menubar-content>\n </seki-menubar-menu>\n <seki-menubar-menu>\n <seki-menubar-trigger>Edit</seki-menubar-trigger>\n <seki-menubar-content>\n <seki-menubar-item>Undo</seki-menubar-item>\n <seki-menubar-item>Redo</seki-menubar-item>\n </seki-menubar-content>\n </seki-menubar-menu>\n</seki-menubar>`,
1024
+ vue: `${IMPORT_SNIPPET}\n\n<seki-menubar>\n <seki-menubar-menu>\n <seki-menubar-trigger>File</seki-menubar-trigger>\n <seki-menubar-content>\n <seki-menubar-item>New</seki-menubar-item>\n <seki-menubar-item>Open</seki-menubar-item>\n </seki-menubar-content>\n </seki-menubar-menu>\n</seki-menubar>`,
1025
+ angular: `${IMPORT_SNIPPET}\n\n<seki-menubar>\n <seki-menubar-menu>\n <seki-menubar-trigger>File</seki-menubar-trigger>\n <seki-menubar-content>\n <seki-menubar-item>New</seki-menubar-item>\n </seki-menubar-content>\n </seki-menubar-menu>\n</seki-menubar>`,
1026
+ vanilla: `${CDN_SNIPPET}\n\n<seki-menubar>\n <seki-menubar-menu>\n <seki-menubar-trigger>File</seki-menubar-trigger>\n <seki-menubar-content>\n <seki-menubar-item>New</seki-menubar-item>\n <seki-menubar-item>Open</seki-menubar-item>\n <seki-menubar-separator></seki-menubar-separator>\n <seki-menubar-item>Save</seki-menubar-item>\n </seki-menubar-content>\n </seki-menubar-menu>\n</seki-menubar>`,
1027
+ },
1028
+ },
1029
+ 'navigation-menu': {
1030
+ name: 'Navigation Menu',
1031
+ tag: 'seki-navigation-menu',
1032
+ description: 'Accessible site navigation with dropdown panels.',
1033
+ cssTokens: [
1034
+ '--seki-nav-height',
1035
+ '--seki-nav-gap',
1036
+ '--seki-nav-trigger-padding',
1037
+ '--seki-nav-content-shadow',
1038
+ '--seki-nav-content-radius',
1039
+ '--seki-nav-indicator-size',
1040
+ '--seki-nav-animation-duration',
1041
+ ],
1042
+ usageByFramework: {
1043
+ react: `${IMPORT_SNIPPET}\n\n<seki-navigation-menu>\n <seki-navigation-menu-list>\n <seki-navigation-menu-item>\n <seki-navigation-menu-trigger>Getting started</seki-navigation-menu-trigger>\n <seki-navigation-menu-content>\n <a href="/docs">Introduction</a>\n <a href="/docs/installation">Installation</a>\n </seki-navigation-menu-content>\n </seki-navigation-menu-item>\n <seki-navigation-menu-item>\n <seki-navigation-menu-link href="/docs">Documentation</seki-navigation-menu-link>\n </seki-navigation-menu-item>\n </seki-navigation-menu-list>\n</seki-navigation-menu>`,
1044
+ vue: `${IMPORT_SNIPPET}\n\n<seki-navigation-menu>\n <seki-navigation-menu-list>\n <seki-navigation-menu-item>\n <seki-navigation-menu-link href="/docs">Documentation</seki-navigation-menu-link>\n </seki-navigation-menu-item>\n </seki-navigation-menu-list>\n</seki-navigation-menu>`,
1045
+ angular: `${IMPORT_SNIPPET}\n\n<seki-navigation-menu>\n <seki-navigation-menu-list>\n <seki-navigation-menu-item>\n <seki-navigation-menu-link href="/docs">Documentation</seki-navigation-menu-link>\n </seki-navigation-menu-item>\n </seki-navigation-menu-list>\n</seki-navigation-menu>`,
1046
+ vanilla: `${CDN_SNIPPET}\n\n<seki-navigation-menu>\n <seki-navigation-menu-list>\n <seki-navigation-menu-item>\n <seki-navigation-menu-link href="/docs">Documentation</seki-navigation-menu-link>\n </seki-navigation-menu-item>\n </seki-navigation-menu-list>\n</seki-navigation-menu>`,
1047
+ },
1048
+ },
1049
+ pagination: {
1050
+ name: 'Pagination',
1051
+ tag: 'seki-pagination',
1052
+ description: 'Page navigation controls with first, previous, next, last.',
1053
+ cssTokens: [
1054
+ '--seki-pagination-text-color',
1055
+ '--seki-pagination-text-muted',
1056
+ '--seki-pagination-bg',
1057
+ '--seki-pagination-bg-hover',
1058
+ '--seki-pagination-bg-active',
1059
+ '--seki-pagination-text-active',
1060
+ '--seki-pagination-border',
1061
+ '--seki-pagination-border-radius',
1062
+ '--seki-pagination-font-size',
1063
+ '--seki-pagination-gap',
1064
+ '--seki-pagination-size',
1065
+ ],
1066
+ usageByFramework: {
1067
+ react: `${IMPORT_SNIPPET}\n\n<seki-pagination\n total={100}\n page-size={10}\n current-page={page}\n onSekiPageChange={(e) => setPage(e.detail)}\n/>`,
1068
+ vue: `${IMPORT_SNIPPET}\n\n<seki-pagination\n :total="100"\n page-size="10"\n :current-page="page"\n @sekiPageChange="page = $event.detail"\n/>`,
1069
+ angular: `${IMPORT_SNIPPET}\n\n<seki-pagination\n [total]="100"\n page-size="10"\n [current-page]="page"\n (sekiPageChange)="page = $event.detail"\n></seki-pagination>`,
1070
+ vanilla: `${CDN_SNIPPET}\n\n<seki-pagination total="100" page-size="10" current-page="1"></seki-pagination>`,
1071
+ },
1072
+ },
1073
+ popover: {
1074
+ name: 'Popover',
1075
+ tag: 'seki-popover',
1076
+ description: 'Floating content panel anchored to a trigger element.',
1077
+ cssTokens: [],
1078
+ usageByFramework: {
1079
+ react: `${IMPORT_SNIPPET}\n\n<seki-popover>\n <seki-button slot="trigger" variant="outline">Open popover</seki-button>\n <div slot="content" style={{ padding: '1rem' }}>\n <h4>Popover title</h4>\n <p>Popover content here.</p>\n </div>\n</seki-popover>`,
1080
+ vue: `${IMPORT_SNIPPET}\n\n<seki-popover>\n <seki-button slot="trigger" variant="outline">Open popover</seki-button>\n <div slot="content" style="padding: 1rem">\n <h4>Popover title</h4>\n <p>Popover content here.</p>\n </div>\n</seki-popover>`,
1081
+ angular: `${IMPORT_SNIPPET}\n\n<seki-popover>\n <seki-button slot="trigger" variant="outline">Open popover</seki-button>\n <div slot="content" style="padding: 1rem">\n <h4>Popover title</h4>\n </div>\n</seki-popover>`,
1082
+ vanilla: `${CDN_SNIPPET}\n\n<seki-popover>\n <seki-button slot="trigger" variant="outline">Open popover</seki-button>\n <div slot="content" style="padding: 1rem">\n <h4>Popover title</h4>\n <p>Popover content here.</p>\n </div>\n</seki-popover>`,
1083
+ },
1084
+ },
1085
+ progress: {
1086
+ name: 'Progress',
1087
+ tag: 'seki-progress',
1088
+ description: 'Linear progress bar with animated fill.',
1089
+ cssTokens: [
1090
+ '--seki-progress-height',
1091
+ '--seki-progress-border-radius',
1092
+ '--seki-progress-bg',
1093
+ '--seki-progress-indicator-bg',
1094
+ '--seki-progress-transition-duration',
1095
+ '--seki-progress-transition-timing',
1096
+ ],
1097
+ usageByFramework: {
1098
+ react: `${IMPORT_SNIPPET}\n\n<seki-progress value={60} />\n\n// With label\n<seki-progress value={60} max={100} />\n\n// Indeterminate\n<seki-progress />`,
1099
+ vue: `${IMPORT_SNIPPET}\n\n<seki-progress :value="progress" />\n<seki-progress :value="60" :max="100" />`,
1100
+ angular: `${IMPORT_SNIPPET}\n\n<seki-progress [value]="progress"></seki-progress>`,
1101
+ vanilla: `${CDN_SNIPPET}\n\n<seki-progress value="60"></seki-progress>\n<seki-progress value="33" max="100"></seki-progress>`,
1102
+ },
1103
+ },
1104
+ 'radio-group': {
1105
+ name: 'Radio Group',
1106
+ tag: 'seki-radio-group',
1107
+ description: 'Single-selection radio button group.',
1108
+ cssTokens: [],
1109
+ usageByFramework: {
1110
+ react: `${IMPORT_SNIPPET}\n\n<seki-radio-group value={selected} onSekiChange={(e) => setSelected(e.detail)}>\n <seki-radio value="option-one">Option One</seki-radio>\n <seki-radio value="option-two">Option Two</seki-radio>\n <seki-radio value="option-three" disabled>Disabled</seki-radio>\n</seki-radio-group>`,
1111
+ vue: `${IMPORT_SNIPPET}\n\n<seki-radio-group :value="selected" @sekiChange="selected = $event.detail">\n <seki-radio value="option-one">Option One</seki-radio>\n <seki-radio value="option-two">Option Two</seki-radio>\n</seki-radio-group>`,
1112
+ angular: `${IMPORT_SNIPPET}\n\n<seki-radio-group [value]="selected" (sekiChange)="selected = $event.detail">\n <seki-radio value="option-one">Option One</seki-radio>\n <seki-radio value="option-two">Option Two</seki-radio>\n</seki-radio-group>`,
1113
+ vanilla: `${CDN_SNIPPET}\n\n<seki-radio-group>\n <seki-radio value="option-one">Option One</seki-radio>\n <seki-radio value="option-two">Option Two</seki-radio>\n</seki-radio-group>`,
1114
+ },
1115
+ },
1116
+ resizable: {
1117
+ name: 'Resizable',
1118
+ tag: 'seki-resizable-panel-group',
1119
+ description: 'Resizable split panel layout with drag handle.',
1120
+ cssTokens: [],
1121
+ usageByFramework: {
1122
+ react: `${IMPORT_SNIPPET}\n\n<seki-resizable-panel-group direction="horizontal">\n <seki-resizable-panel default-size={50}>Left panel</seki-resizable-panel>\n <seki-resizable-handle />\n <seki-resizable-panel default-size={50}>Right panel</seki-resizable-panel>\n</seki-resizable-panel-group>`,
1123
+ vue: `${IMPORT_SNIPPET}\n\n<seki-resizable-panel-group direction="horizontal">\n <seki-resizable-panel :default-size="50">Left panel</seki-resizable-panel>\n <seki-resizable-handle />\n <seki-resizable-panel :default-size="50">Right panel</seki-resizable-panel>\n</seki-resizable-panel-group>`,
1124
+ angular: `${IMPORT_SNIPPET}\n\n<seki-resizable-panel-group direction="horizontal">\n <seki-resizable-panel default-size="50">Left panel</seki-resizable-panel>\n <seki-resizable-handle></seki-resizable-handle>\n <seki-resizable-panel default-size="50">Right panel</seki-resizable-panel>\n</seki-resizable-panel-group>`,
1125
+ vanilla: `${CDN_SNIPPET}\n\n<seki-resizable-panel-group direction="horizontal">\n <seki-resizable-panel default-size="50">Left panel</seki-resizable-panel>\n <seki-resizable-handle></seki-resizable-handle>\n <seki-resizable-panel default-size="50">Right panel</seki-resizable-panel>\n</seki-resizable-panel-group>`,
1126
+ },
1127
+ },
1128
+ 'scroll-area': {
1129
+ name: 'Scroll Area',
1130
+ tag: 'seki-scroll-area',
1131
+ description: 'Custom-styled scrollable container.',
1132
+ cssTokens: [],
1133
+ usageByFramework: {
1134
+ react: `${IMPORT_SNIPPET}\n\n<seki-scroll-area style={{ height: '200px' }}>\n {Array.from({ length: 50 }, (_, i) => (\n <div key={i}>Item {i + 1}</div>\n ))}\n</seki-scroll-area>`,
1135
+ vue: `${IMPORT_SNIPPET}\n\n<seki-scroll-area style="height: 200px">\n <div v-for="i in 50" :key="i">Item {{ i }}</div>\n</seki-scroll-area>`,
1136
+ angular: `${IMPORT_SNIPPET}\n\n<seki-scroll-area style="height: 200px">\n <div *ngFor="let i of items">{{ i }}</div>\n</seki-scroll-area>`,
1137
+ vanilla: `${CDN_SNIPPET}\n\n<seki-scroll-area style="height: 200px">\n <p>Lots of content...</p>\n</seki-scroll-area>`,
1138
+ },
1139
+ },
1140
+ separator: {
1141
+ name: 'Separator',
1142
+ tag: 'seki-separator',
1143
+ description: 'Horizontal or vertical divider line.',
1144
+ cssTokens: ['--seki-separator-color', '--seki-separator-thickness'],
1145
+ usageByFramework: {
1146
+ react: `${IMPORT_SNIPPET}\n\n<seki-separator />\n\n// Vertical\n<div style={{ display: 'flex', alignItems: 'center', height: '20px' }}>\n <span>Left</span>\n <seki-separator orientation="vertical" style={{ margin: '0 0.5rem' }} />\n <span>Right</span>\n</div>`,
1147
+ vue: `${IMPORT_SNIPPET}\n\n<seki-separator />\n<seki-separator orientation="vertical" />`,
1148
+ angular: `${IMPORT_SNIPPET}\n\n<seki-separator></seki-separator>\n<seki-separator orientation="vertical"></seki-separator>`,
1149
+ vanilla: `${CDN_SNIPPET}\n\n<seki-separator></seki-separator>\n<seki-separator orientation="vertical"></seki-separator>`,
1150
+ },
1151
+ },
1152
+ sheet: {
1153
+ name: 'Sheet',
1154
+ tag: 'seki-sheet',
1155
+ description: 'Side panel overlay, similar to a drawer but more spacious.',
1156
+ cssTokens: [
1157
+ '--seki-sheet-bg',
1158
+ '--seki-sheet-border',
1159
+ '--seki-sheet-text',
1160
+ '--seki-sheet-text-muted',
1161
+ '--seki-sheet-overlay-bg',
1162
+ '--seki-sheet-shadow',
1163
+ '--seki-sheet-font-family',
1164
+ '--seki-sheet-width',
1165
+ '--seki-sheet-height',
1166
+ '--seki-sheet-z-index',
1167
+ '--seki-sheet-animation-duration',
1168
+ ],
1169
+ usageByFramework: {
1170
+ react: `${IMPORT_SNIPPET}\n\n// side: top | right | bottom | left (default: right)\n<seki-sheet open={isOpen} side="right" onSekiClose={() => setIsOpen(false)}>\n <div slot="header">Edit Profile</div>\n <div slot="content">\n <seki-field>\n <seki-field-label>Name</seki-field-label>\n <seki-input placeholder="Your name" />\n </seki-field>\n </div>\n <div slot="footer">\n <seki-button onClick={() => setIsOpen(false)}>Save</seki-button>\n </div>\n</seki-sheet>`,
1171
+ vue: `${IMPORT_SNIPPET}\n\n<seki-sheet :open="isOpen" side="right" @sekiClose="isOpen = false">\n <div slot="header">Edit Profile</div>\n <div slot="content">\n <seki-input placeholder="Your name" />\n </div>\n</seki-sheet>`,
1172
+ angular: `${IMPORT_SNIPPET}\n\n<seki-sheet [open]="isOpen" side="right" (sekiClose)="isOpen = false">\n <div slot="header">Edit Profile</div>\n <div slot="content">\n <seki-input placeholder="Your name"></seki-input>\n </div>\n</seki-sheet>`,
1173
+ vanilla: `${CDN_SNIPPET}\n\n<seki-sheet id="my-sheet" side="right">\n <div slot="header">Edit Profile</div>\n <div slot="content"><seki-input placeholder="Your name"></seki-input></div>\n</seki-sheet>\n\n<seki-button onclick="document.getElementById('my-sheet').open = true">Open</seki-button>`,
1174
+ },
1175
+ },
1176
+ sidebar: {
1177
+ name: 'Sidebar',
1178
+ tag: 'seki-sidebar',
1179
+ description: 'App sidebar with collapsible navigation and icon mode.',
1180
+ cssTokens: [
1181
+ '--sidebar-width',
1182
+ '--sidebar-width-icon',
1183
+ '--sidebar-width-mobile',
1184
+ '--sidebar-background',
1185
+ '--sidebar-foreground',
1186
+ '--sidebar-primary',
1187
+ '--sidebar-primary-foreground',
1188
+ '--sidebar-accent',
1189
+ '--sidebar-accent-foreground',
1190
+ '--sidebar-border',
1191
+ '--sidebar-ring',
1192
+ '--sidebar-transition-duration',
1193
+ '--sidebar-transition-timing',
1194
+ ],
1195
+ usageByFramework: {
1196
+ react: `${IMPORT_SNIPPET}\n\n<seki-sidebar-provider>\n <seki-sidebar>\n <seki-sidebar-header>\n <strong>My App</strong>\n </seki-sidebar-header>\n <seki-sidebar-content>\n <seki-sidebar-group>\n <seki-sidebar-group-label>Navigation</seki-sidebar-group-label>\n <seki-sidebar-menu>\n <seki-sidebar-menu-item>\n <seki-sidebar-menu-button href="/dashboard">Dashboard</seki-sidebar-menu-button>\n </seki-sidebar-menu-item>\n <seki-sidebar-menu-item>\n <seki-sidebar-menu-button href="/settings">Settings</seki-sidebar-menu-button>\n </seki-sidebar-menu-item>\n </seki-sidebar-menu>\n </seki-sidebar-group>\n </seki-sidebar-content>\n </seki-sidebar>\n <main>Main content</main>\n</seki-sidebar-provider>`,
1197
+ vue: `${IMPORT_SNIPPET}\n\n<seki-sidebar-provider>\n <seki-sidebar>\n <seki-sidebar-content>\n <seki-sidebar-menu>\n <seki-sidebar-menu-item>\n <seki-sidebar-menu-button href="/dashboard">Dashboard</seki-sidebar-menu-button>\n </seki-sidebar-menu-item>\n </seki-sidebar-menu>\n </seki-sidebar-content>\n </seki-sidebar>\n <main>Main content</main>\n</seki-sidebar-provider>`,
1198
+ angular: `${IMPORT_SNIPPET}\n\n<seki-sidebar-provider>\n <seki-sidebar>\n <seki-sidebar-content>\n <seki-sidebar-menu>\n <seki-sidebar-menu-item>\n <seki-sidebar-menu-button href="/dashboard">Dashboard</seki-sidebar-menu-button>\n </seki-sidebar-menu-item>\n </seki-sidebar-menu>\n </seki-sidebar-content>\n </seki-sidebar>\n <main>Main content</main>\n</seki-sidebar-provider>`,
1199
+ vanilla: `${CDN_SNIPPET}\n\n<seki-sidebar-provider>\n <seki-sidebar>\n <seki-sidebar-content>\n <seki-sidebar-menu>\n <seki-sidebar-menu-item>\n <seki-sidebar-menu-button href="/dashboard">Dashboard</seki-sidebar-menu-button>\n </seki-sidebar-menu-item>\n </seki-sidebar-menu>\n </seki-sidebar-content>\n </seki-sidebar>\n <main>Main content</main>\n</seki-sidebar-provider>`,
1200
+ },
1201
+ },
1202
+ skeleton: {
1203
+ name: 'Skeleton',
1204
+ tag: 'seki-skeleton',
1205
+ description: 'Loading placeholder with animated shimmer effect.',
1206
+ cssTokens: ['--seki-skeleton-bg'],
1207
+ usageByFramework: {
1208
+ react: `${IMPORT_SNIPPET}\n\n// Inline sizing\n<seki-skeleton style={{ width: '200px', height: '20px' }} />\n\n// Card skeleton\n<div style={{ display: 'flex', flexDirection: 'column', gap: '0.5rem' }}>\n <seki-skeleton style={{ width: '100%', height: '12rem' }} />\n <seki-skeleton style={{ width: '60%', height: '1rem' }} />\n <seki-skeleton style={{ width: '80%', height: '1rem' }} />\n</div>`,
1209
+ vue: `${IMPORT_SNIPPET}\n\n<seki-skeleton style="width: 200px; height: 20px" />\n<seki-skeleton style="width: 100%; height: 12rem" />`,
1210
+ angular: `${IMPORT_SNIPPET}\n\n<seki-skeleton style="width: 200px; height: 20px"></seki-skeleton>`,
1211
+ vanilla: `${CDN_SNIPPET}\n\n<seki-skeleton style="width: 200px; height: 20px"></seki-skeleton>\n<seki-skeleton style="width: 100%; height: 12rem; display: block;"></seki-skeleton>`,
1212
+ },
1213
+ },
1214
+ slider: {
1215
+ name: 'Slider',
1216
+ tag: 'seki-slider',
1217
+ description: 'Range input slider with single or dual thumbs.',
1218
+ cssTokens: [
1219
+ '--seki-slider-track-bg',
1220
+ '--seki-slider-range-bg',
1221
+ '--seki-slider-thumb-bg',
1222
+ '--seki-slider-thumb-border',
1223
+ ],
1224
+ usageByFramework: {
1225
+ react: `${IMPORT_SNIPPET}\n\n<seki-slider\n value={volume}\n min={0}\n max={100}\n step={1}\n onSekiChange={(e) => setVolume(e.detail)}\n/>\n\n// Range (dual thumbs)\n<seki-slider value={[20, 80]} min={0} max={100} />`,
1226
+ vue: `${IMPORT_SNIPPET}\n\n<seki-slider\n :value="volume"\n :min="0"\n :max="100"\n @sekiChange="volume = $event.detail"\n/>`,
1227
+ angular: `${IMPORT_SNIPPET}\n\n<seki-slider\n [value]="volume"\n [min]="0"\n [max]="100"\n (sekiChange)="volume = $event.detail"\n></seki-slider>`,
1228
+ vanilla: `${CDN_SNIPPET}\n\n<seki-slider value="50" min="0" max="100" step="1"></seki-slider>`,
1229
+ },
1230
+ },
1231
+ spinner: {
1232
+ name: 'Spinner',
1233
+ tag: 'seki-spinner',
1234
+ description: 'Animated loading spinner.',
1235
+ cssTokens: [],
1236
+ usageByFramework: {
1237
+ react: `${IMPORT_SNIPPET}\n\n<seki-spinner />\n\n// Sizes: sm | md | lg\n<seki-spinner size="lg" />\n\n// With label\n<seki-spinner>Loading...</seki-spinner>`,
1238
+ vue: `${IMPORT_SNIPPET}\n\n<seki-spinner />\n<seki-spinner size="lg" />`,
1239
+ angular: `${IMPORT_SNIPPET}\n\n<seki-spinner></seki-spinner>\n<seki-spinner size="lg"></seki-spinner>`,
1240
+ vanilla: `${CDN_SNIPPET}\n\n<seki-spinner></seki-spinner>\n<seki-spinner size="lg"></seki-spinner>`,
1241
+ },
1242
+ },
1243
+ switch: {
1244
+ name: 'Switch',
1245
+ tag: 'seki-switch',
1246
+ description: 'Toggle switch for boolean on/off state.',
1247
+ cssTokens: [
1248
+ '--seki-switch-width',
1249
+ '--seki-switch-height',
1250
+ '--seki-switch-bg-unchecked',
1251
+ '--seki-switch-bg-checked',
1252
+ '--seki-switch-bg-disabled',
1253
+ '--seki-switch-focus-ring',
1254
+ '--seki-switch-thumb-size',
1255
+ '--seki-switch-thumb-bg',
1256
+ '--seki-switch-transition-duration',
1257
+ ],
1258
+ usageByFramework: {
1259
+ react: `${IMPORT_SNIPPET}\n\n<seki-switch\n checked={enabled}\n onSekiChange={(e) => setEnabled(e.detail)}\n>\n Airplane mode\n</seki-switch>\n\n<seki-switch disabled>Disabled</seki-switch>`,
1260
+ vue: `${IMPORT_SNIPPET}\n\n<seki-switch\n :checked="enabled"\n @sekiChange="enabled = $event.detail"\n>\n Airplane mode\n</seki-switch>`,
1261
+ angular: `${IMPORT_SNIPPET}\n\n<seki-switch\n [checked]="enabled"\n (sekiChange)="enabled = $event.detail"\n>\n Airplane mode\n</seki-switch>`,
1262
+ vanilla: `${CDN_SNIPPET}\n\n<seki-switch>Airplane mode</seki-switch>`,
1263
+ },
1264
+ },
1265
+ table: {
1266
+ name: 'Table',
1267
+ tag: 'seki-table',
1268
+ description: 'Simple semantic table with consistent styling.',
1269
+ cssTokens: [
1270
+ '--seki-table-bg',
1271
+ '--seki-table-text',
1272
+ '--seki-table-muted',
1273
+ '--seki-table-border',
1274
+ '--seki-table-hover',
1275
+ '--seki-table-font-size',
1276
+ '--seki-table-font-family',
1277
+ ],
1278
+ usageByFramework: {
1279
+ react: `${IMPORT_SNIPPET}\n\n<seki-table>\n <seki-table-header>\n <seki-table-row>\n <seki-table-head>Name</seki-table-head>\n <seki-table-head>Email</seki-table-head>\n <seki-table-head>Role</seki-table-head>\n </seki-table-row>\n </seki-table-header>\n <seki-table-body>\n <seki-table-row>\n <seki-table-cell>Alice</seki-table-cell>\n <seki-table-cell>alice@example.com</seki-table-cell>\n <seki-table-cell>Admin</seki-table-cell>\n </seki-table-row>\n </seki-table-body>\n</seki-table>`,
1280
+ vue: `${IMPORT_SNIPPET}\n\n<seki-table>\n <seki-table-header>\n <seki-table-row>\n <seki-table-head>Name</seki-table-head>\n <seki-table-head>Email</seki-table-head>\n </seki-table-row>\n </seki-table-header>\n <seki-table-body>\n <seki-table-row v-for="row in rows" :key="row.id">\n <seki-table-cell>{{ row.name }}</seki-table-cell>\n <seki-table-cell>{{ row.email }}</seki-table-cell>\n </seki-table-row>\n </seki-table-body>\n</seki-table>`,
1281
+ angular: `${IMPORT_SNIPPET}\n\n<seki-table>\n <seki-table-header>\n <seki-table-row>\n <seki-table-head>Name</seki-table-head>\n </seki-table-row>\n </seki-table-header>\n <seki-table-body>\n <seki-table-row *ngFor="let row of rows">\n <seki-table-cell>{{ row.name }}</seki-table-cell>\n </seki-table-row>\n </seki-table-body>\n</seki-table>`,
1282
+ vanilla: `${CDN_SNIPPET}\n\n<seki-table>\n <seki-table-header>\n <seki-table-row>\n <seki-table-head>Name</seki-table-head>\n <seki-table-head>Email</seki-table-head>\n </seki-table-row>\n </seki-table-header>\n <seki-table-body>\n <seki-table-row>\n <seki-table-cell>Alice</seki-table-cell>\n <seki-table-cell>alice@example.com</seki-table-cell>\n </seki-table-row>\n </seki-table-body>\n</seki-table>`,
1283
+ },
1284
+ },
1285
+ textarea: {
1286
+ name: 'Textarea',
1287
+ tag: 'seki-textarea',
1288
+ description: 'Multi-line text input with auto-resize support.',
1289
+ cssTokens: [],
1290
+ usageByFramework: {
1291
+ react: `${IMPORT_SNIPPET}\n\n<seki-textarea\n placeholder="Type your message here."\n value={message}\n onSekiChange={(e) => setMessage(e.detail)}\n/>\n\n// Auto-resize\n<seki-textarea auto-resize placeholder="Grows with content" />\n<seki-textarea disabled placeholder="Disabled" />`,
1292
+ vue: `${IMPORT_SNIPPET}\n\n<seki-textarea\n placeholder="Type your message here."\n :value="message"\n @sekiChange="message = $event.detail"\n/>`,
1293
+ angular: `${IMPORT_SNIPPET}\n\n<seki-textarea\n placeholder="Type your message here."\n [value]="message"\n (sekiChange)="message = $event.detail"\n></seki-textarea>`,
1294
+ vanilla: `${CDN_SNIPPET}\n\n<seki-textarea placeholder="Type your message here."></seki-textarea>\n<seki-textarea auto-resize placeholder="Grows with content"></seki-textarea>`,
1295
+ },
1296
+ },
1297
+ toast: {
1298
+ name: 'Toast',
1299
+ tag: 'seki-toast',
1300
+ description: 'Non-blocking notification with auto-dismiss and action support.',
1301
+ cssTokens: [
1302
+ '--seki-toast-width',
1303
+ '--seki-toast-padding',
1304
+ '--seki-toast-border-radius',
1305
+ '--seki-toast-shadow',
1306
+ '--seki-toaster-gap',
1307
+ '--seki-toast-default-bg',
1308
+ '--seki-toast-default-border',
1309
+ '--seki-toast-default-text',
1310
+ '--seki-toast-success-bg',
1311
+ '--seki-toast-error-bg',
1312
+ '--seki-toast-warning-bg',
1313
+ '--seki-toast-info-bg',
1314
+ '--seki-toast-animation-duration',
1315
+ ],
1316
+ usageByFramework: {
1317
+ react: `${IMPORT_SNIPPET}\n\n// Add toaster to your root layout\n<seki-toaster />\n\n// Trigger toasts imperatively\ndocument.querySelector('seki-toaster').toast({ message: 'Saved!', variant: 'success' });\ndocument.querySelector('seki-toaster').toast({ message: 'Error occurred', variant: 'error' });\ndocument.querySelector('seki-toaster').toast({\n message: 'File deleted',\n variant: 'default',\n action: { label: 'Undo', onClick: () => restoreFile() },\n});`,
1318
+ vue: `${IMPORT_SNIPPET}\n\n<!-- Add to App.vue root template -->\n<seki-toaster ref="toaster" />\n\n// Trigger via ref\nthis.$refs.toaster.toast({ message: 'Saved!', variant: 'success' });`,
1319
+ angular: `${IMPORT_SNIPPET}\n\n<!-- Add to AppComponent template -->\n<seki-toaster id="toaster"></seki-toaster>\n\n// Trigger in a service or component\ndocument.getElementById('toaster').toast({ message: 'Saved!', variant: 'success' });`,
1320
+ vanilla: `${CDN_SNIPPET}\n\n<seki-toaster id="toaster"></seki-toaster>\n\n<script>\n function showToast() {\n document.getElementById('toaster').toast({ message: 'Saved!', variant: 'success' });\n }\n</script>\n\n<seki-button onclick="showToast()">Show toast</seki-button>`,
1321
+ },
1322
+ },
1323
+ toggle: {
1324
+ name: 'Toggle',
1325
+ tag: 'seki-toggle',
1326
+ description: 'Two-state button that can be toggled on or off.',
1327
+ cssTokens: [],
1328
+ usageByFramework: {
1329
+ react: `${IMPORT_SNIPPET}\n\n<seki-toggle pressed={bold} onSekiChange={(e) => setBold(e.detail)}>\n Bold\n</seki-toggle>\n\n// Variants: default | outline\n<seki-toggle variant="outline" pressed={italic}>Italic</seki-toggle>\n\n// Sizes: sm | default | lg\n<seki-toggle size="sm">B</seki-toggle>`,
1330
+ vue: `${IMPORT_SNIPPET}\n\n<seki-toggle :pressed="bold" @sekiChange="bold = $event.detail">Bold</seki-toggle>\n<seki-toggle variant="outline" :pressed="italic">Italic</seki-toggle>`,
1331
+ angular: `${IMPORT_SNIPPET}\n\n<seki-toggle [pressed]="bold" (sekiChange)="bold = $event.detail">Bold</seki-toggle>`,
1332
+ vanilla: `${CDN_SNIPPET}\n\n<seki-toggle>Bold</seki-toggle>\n<seki-toggle variant="outline">Italic</seki-toggle>`,
1333
+ },
1334
+ },
1335
+ 'toggle-group': {
1336
+ name: 'Toggle Group',
1337
+ tag: 'seki-toggle-group',
1338
+ description: 'Group of toggles with single or multiple selection.',
1339
+ cssTokens: [],
1340
+ usageByFramework: {
1341
+ react: `${IMPORT_SNIPPET}\n\n// Single selection\n<seki-toggle-group type="single" value={align} onSekiChange={(e) => setAlign(e.detail)}>\n <seki-toggle-group-item value="left">Left</seki-toggle-group-item>\n <seki-toggle-group-item value="center">Center</seki-toggle-group-item>\n <seki-toggle-group-item value="right">Right</seki-toggle-group-item>\n</seki-toggle-group>\n\n// Multiple selection\n<seki-toggle-group type="multiple">\n <seki-toggle-group-item value="bold">B</seki-toggle-group-item>\n <seki-toggle-group-item value="italic">I</seki-toggle-group-item>\n <seki-toggle-group-item value="underline">U</seki-toggle-group-item>\n</seki-toggle-group>`,
1342
+ vue: `${IMPORT_SNIPPET}\n\n<seki-toggle-group type="single" :value="align" @sekiChange="align = $event.detail">\n <seki-toggle-group-item value="left">Left</seki-toggle-group-item>\n <seki-toggle-group-item value="center">Center</seki-toggle-group-item>\n <seki-toggle-group-item value="right">Right</seki-toggle-group-item>\n</seki-toggle-group>`,
1343
+ angular: `${IMPORT_SNIPPET}\n\n<seki-toggle-group type="single" [value]="align" (sekiChange)="align = $event.detail">\n <seki-toggle-group-item value="left">Left</seki-toggle-group-item>\n <seki-toggle-group-item value="center">Center</seki-toggle-group-item>\n</seki-toggle-group>`,
1344
+ vanilla: `${CDN_SNIPPET}\n\n<seki-toggle-group type="single">\n <seki-toggle-group-item value="left">Left</seki-toggle-group-item>\n <seki-toggle-group-item value="center">Center</seki-toggle-group-item>\n <seki-toggle-group-item value="right">Right</seki-toggle-group-item>\n</seki-toggle-group>`,
1345
+ },
1346
+ },
586
1347
  };
587
1348
  function getComponent(name) {
588
1349
  return exports.COMPONENT_REGISTRY[name.toLowerCase()];
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/components/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/components/registry.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sekiui/cli",
3
- "version": "0.0.71",
3
+ "version": "0.0.78",
4
4
  "description": "CLI tool for setting up and using SekiUI Web Components",
5
5
  "main": "dist/index.js",
6
6
  "bin": {