@sekiui/elements 0.0.41 → 0.0.45

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 (111) hide show
  1. package/README.md +79 -21
  2. package/dist/cdn/index.d.ts +33 -0
  3. package/dist/cdn/index.js +112 -0
  4. package/dist/{components/p-qBYH2h9w.js → cdn/p-BLeUUc2-.js} +44 -6
  5. package/dist/cdn/seki-button.d.ts +11 -0
  6. package/dist/cdn/seki-button.js +66 -0
  7. package/dist/cdn/seki-field-description.d.ts +11 -0
  8. package/dist/cdn/seki-field-description.js +66 -0
  9. package/dist/cdn/seki-field-error.d.ts +11 -0
  10. package/dist/cdn/seki-field-error.js +94 -0
  11. package/dist/cdn/seki-field-group.d.ts +11 -0
  12. package/dist/cdn/seki-field-group.js +46 -0
  13. package/dist/cdn/seki-field-label.d.ts +11 -0
  14. package/dist/cdn/seki-field-label.js +45 -0
  15. package/dist/cdn/seki-field-legend.d.ts +11 -0
  16. package/dist/cdn/seki-field-legend.js +36 -0
  17. package/dist/cdn/seki-field.d.ts +11 -0
  18. package/dist/cdn/seki-field.js +69 -0
  19. package/dist/cdn/seki-fieldset.d.ts +11 -0
  20. package/dist/cdn/seki-fieldset.js +43 -0
  21. package/dist/cdn/seki-input.d.ts +11 -0
  22. package/dist/cdn/seki-input.js +133 -0
  23. package/dist/cdn/seki-skeleton.d.ts +11 -0
  24. package/dist/cdn/seki-skeleton.js +46 -0
  25. package/dist/cdn/seki-switch.d.ts +11 -0
  26. package/dist/cdn/seki-switch.js +6 -0
  27. package/dist/cjs/{index-DwgP2ssn.js → index-BxD7Xe36.js} +50 -6
  28. package/dist/cjs/index.cjs.js +2 -2
  29. package/dist/cjs/loader.cjs.js +3 -4
  30. package/dist/cjs/seki-button.cjs.entry.js +2 -2
  31. package/dist/cjs/seki-field-description.cjs.entry.js +2 -2
  32. package/dist/cjs/seki-field-error.cjs.entry.js +2 -2
  33. package/dist/cjs/seki-field-group.cjs.entry.js +2 -2
  34. package/dist/cjs/seki-field-label.cjs.entry.js +2 -2
  35. package/dist/cjs/seki-field-legend.cjs.entry.js +2 -2
  36. package/dist/cjs/seki-field.cjs.entry.js +2 -2
  37. package/dist/cjs/seki-fieldset.cjs.entry.js +2 -2
  38. package/dist/cjs/seki-input.cjs.entry.js +38 -3
  39. package/dist/cjs/seki-skeleton.cjs.entry.js +2 -2
  40. package/dist/cjs/seki-switch.cjs.entry.js +1 -1
  41. package/dist/cjs/sekiui.cjs.js +3 -4
  42. package/dist/collection/components/button/seki-button.css +8 -8
  43. package/dist/collection/components/field/seki-field.css +15 -15
  44. package/dist/collection/components/field-description/seki-field-description.css +8 -8
  45. package/dist/collection/components/field-error/seki-field-error.css +8 -8
  46. package/dist/collection/components/field-group/seki-field-group.css +8 -8
  47. package/dist/collection/components/field-label/seki-field-label.css +8 -8
  48. package/dist/collection/components/field-legend/seki-field-legend.css +8 -8
  49. package/dist/collection/components/fieldset/seki-fieldset.css +8 -8
  50. package/dist/collection/components/input/seki-input.css +8 -8
  51. package/dist/collection/components/input/seki-input.js +30 -1
  52. package/dist/collection/components/skeleton/seki-skeleton.css +8 -8
  53. package/dist/collection/components/switch/seki-switch.css +355 -0
  54. package/dist/components/index.js +3 -3
  55. package/dist/components/p-BFmmBW7R.js +1363 -0
  56. package/dist/components/seki-button.js +2 -2
  57. package/dist/components/seki-field-description.js +2 -2
  58. package/dist/components/seki-field-error.js +2 -2
  59. package/dist/components/seki-field-group.js +2 -2
  60. package/dist/components/seki-field-label.js +2 -2
  61. package/dist/components/seki-field-legend.js +2 -2
  62. package/dist/components/seki-field.js +2 -2
  63. package/dist/components/seki-fieldset.js +2 -2
  64. package/dist/components/seki-input.js +33 -4
  65. package/dist/components/seki-skeleton.js +2 -2
  66. package/dist/esm/{index-DVaKDPWs.js → index-ByHohxc0.js} +50 -7
  67. package/dist/esm/index.js +2 -2
  68. package/dist/esm/loader.js +3 -4
  69. package/dist/esm/seki-button.entry.js +2 -2
  70. package/dist/esm/seki-field-description.entry.js +2 -2
  71. package/dist/esm/seki-field-error.entry.js +2 -2
  72. package/dist/esm/seki-field-group.entry.js +2 -2
  73. package/dist/esm/seki-field-label.entry.js +2 -2
  74. package/dist/esm/seki-field-legend.entry.js +2 -2
  75. package/dist/esm/seki-field.entry.js +2 -2
  76. package/dist/esm/seki-fieldset.entry.js +2 -2
  77. package/dist/esm/seki-input.entry.js +38 -3
  78. package/dist/esm/seki-skeleton.entry.js +2 -2
  79. package/dist/esm/seki-switch.entry.js +1 -1
  80. package/dist/esm/sekiui.js +3 -4
  81. package/dist/sekiui/index.esm.js +1 -1
  82. package/dist/sekiui/p-128cfe90.entry.js +1 -0
  83. package/dist/sekiui/p-1b1a5e38.entry.js +1 -0
  84. package/dist/sekiui/p-1c923d08.entry.js +1 -0
  85. package/dist/sekiui/p-281803dd.entry.js +1 -0
  86. package/dist/sekiui/p-2ecf7587.entry.js +1 -0
  87. package/dist/sekiui/p-3b2d3e96.entry.js +1 -0
  88. package/dist/sekiui/p-459bb637.entry.js +1 -0
  89. package/dist/sekiui/p-51f2af94.entry.js +1 -0
  90. package/dist/sekiui/{p-9798772a.entry.js → p-70281e83.entry.js} +1 -1
  91. package/dist/sekiui/p-ByHohxc0.js +2 -0
  92. package/dist/sekiui/p-bc921daa.entry.js +1 -0
  93. package/dist/sekiui/p-d034b071.entry.js +1 -0
  94. package/dist/sekiui/sekiui.css +2 -0
  95. package/dist/sekiui/sekiui.esm.js +1 -1
  96. package/dist/types/components/input/seki-input.d.ts +4 -0
  97. package/package.json +1 -1
  98. package/dist/cjs/app-globals-V2Kpy_OQ.js +0 -5
  99. package/dist/esm/app-globals-DQuL1Twl.js +0 -3
  100. package/dist/sekiui/p-4471a11b.entry.js +0 -1
  101. package/dist/sekiui/p-6e145af3.entry.js +0 -1
  102. package/dist/sekiui/p-90ac85ad.entry.js +0 -1
  103. package/dist/sekiui/p-9b51119c.entry.js +0 -1
  104. package/dist/sekiui/p-DQuL1Twl.js +0 -1
  105. package/dist/sekiui/p-DVaKDPWs.js +0 -2
  106. package/dist/sekiui/p-b02ec16d.entry.js +0 -1
  107. package/dist/sekiui/p-b47f6624.entry.js +0 -1
  108. package/dist/sekiui/p-bfb09d37.entry.js +0 -1
  109. package/dist/sekiui/p-cc81fc67.entry.js +0 -1
  110. package/dist/sekiui/p-e57f16b3.entry.js +0 -1
  111. package/dist/sekiui/p-ea04d3b5.entry.js +0 -1
package/README.md CHANGED
@@ -31,26 +31,33 @@ npm install @sekiui/elements
31
31
 
32
32
  ### Via CDN (No Build Required)
33
33
 
34
- For quick prototyping or projects without a build system, you can load SekiUI directly from a CDN:
34
+ For quick prototyping or projects without a build system, you can load SekiUI directly from a CDN.
35
35
 
36
- **Latest Stable Version (GitHub Pages):**
36
+ **⚠️ Important: You must include BOTH the CSS and JavaScript files.**
37
+
38
+ **Latest Stable Version (unpkg):**
37
39
  ```html
38
- <script type="module" src="https://sekiui.github.io/SekiUI/latest/sekiui.esm.js"></script>
40
+ <!-- 1. Include design tokens CSS in <head> -->
41
+ <link rel="stylesheet" href="https://unpkg.com/@sekiui/elements@latest/dist/sekiui/sekiui.css">
42
+
43
+ <!-- 2. Load Web Components at end of <body> -->
44
+ <script type="module" src="https://unpkg.com/@sekiui/elements@latest/dist/sekiui/sekiui.esm.js"></script>
39
45
  ```
40
46
 
41
47
  **Latest Stable Version (jsDelivr):**
42
48
  ```html
43
- <script type="module" src="https://cdn.jsdelivr.net/npm/@sekiui/elements@latest/dist/sekiui.esm.js"></script>
44
- ```
49
+ <!-- 1. Include design tokens CSS in <head> -->
50
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@sekiui/elements@latest/dist/sekiui/sekiui.css">
45
51
 
46
- **Specific Version (GitHub Pages):**
47
- ```html
48
- <script type="module" src="https://sekiui.github.io/SekiUI/v1.0.0/sekiui.esm.js"></script>
52
+ <!-- 2. Load Web Components at end of <body> -->
53
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@sekiui/elements@latest/dist/sekiui/sekiui.esm.js"></script>
49
54
  ```
50
55
 
51
- **Specific Version (jsDelivr):**
56
+ **Specific Version (recommended for production):**
52
57
  ```html
53
- <script type="module" src="https://cdn.jsdelivr.net/npm/@sekiui/elements@1.0.0/dist/sekiui.esm.js"></script>
58
+ <!-- Replace 0.0.41 with your desired version -->
59
+ <link rel="stylesheet" href="https://unpkg.com/@sekiui/elements@0.0.41/dist/sekiui/sekiui.css">
60
+ <script type="module" src="https://unpkg.com/@sekiui/elements@0.0.41/dist/sekiui/sekiui.esm.js"></script>
54
61
  ```
55
62
 
56
63
  **Complete Example:**
@@ -61,13 +68,20 @@ For quick prototyping or projects without a build system, you can load SekiUI di
61
68
  <meta charset="UTF-8">
62
69
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
63
70
  <title>SekiUI via CDN</title>
71
+
72
+ <!-- STEP 1: Include SekiUI design tokens CSS -->
73
+ <link rel="stylesheet" href="https://unpkg.com/@sekiui/elements@latest/dist/sekiui/sekiui.css">
64
74
  </head>
65
75
  <body>
66
- <!-- Load SekiUI from CDN -->
67
- <script type="module" src="https://cdn.jsdelivr.net/npm/@sekiui/elements@latest/dist/sekiui.esm.js"></script>
76
+ <h1>SekiUI Components</h1>
68
77
 
69
78
  <!-- Use components directly -->
70
- <seki-button variant="default">Click me</seki-button>
79
+ <seki-button variant="primary">Click me</seki-button>
80
+ <seki-button variant="secondary">Secondary</seki-button>
81
+ <seki-input type="email" placeholder="you@example.com"></seki-input>
82
+
83
+ <!-- STEP 2: Load SekiUI Web Components -->
84
+ <script type="module" src="https://unpkg.com/@sekiui/elements@latest/dist/sekiui/sekiui.esm.js"></script>
71
85
  </body>
72
86
  </html>
73
87
  ```
@@ -77,26 +91,59 @@ For quick prototyping or projects without a build system, you can load SekiUI di
77
91
  - ✅ CORS headers configured for cross-origin requests
78
92
  - ✅ Versioned URLs cached long-term (immutable)
79
93
  - ✅ Latest URLs cached short-term (updates automatically)
94
+ - ⚠️ **You must include both CSS and JS files** for components to render with proper styling
80
95
  - ⚠️ For production, use versioned URLs to ensure consistency
81
96
 
82
97
  ## Usage
83
98
 
84
99
  ### Web Components (Vanilla JS)
85
100
 
101
+ When using npm installation, you need to include both the CSS and JavaScript files:
102
+
86
103
  ```html
87
- <script type="module" src="node_modules/@sekiui/components/dist/sekiui/sekiui.esm.js"></script>
104
+ <!DOCTYPE html>
105
+ <html>
106
+ <head>
107
+ <!-- Include design tokens CSS -->
108
+ <link rel="stylesheet" href="node_modules/@sekiui/elements/dist/sekiui/sekiui.css">
109
+ </head>
110
+ <body>
111
+ <seki-button variant="primary">Click me</seki-button>
112
+ <seki-input type="email" placeholder="you@example.com"></seki-input>
113
+
114
+ <!-- Load Web Components -->
115
+ <script type="module" src="node_modules/@sekiui/elements/dist/sekiui/sekiui.esm.js"></script>
116
+ </body>
117
+ </html>
118
+ ```
119
+
120
+ **Or with a bundler (Vite, Webpack, etc.):**
121
+
122
+ ```js
123
+ // Import CSS in your main JS/TS file
124
+ import '@sekiui/elements/dist/sekiui/sekiui.css';
125
+
126
+ // Import and register components
127
+ import { defineCustomElements } from '@sekiui/elements/loader';
128
+ defineCustomElements();
129
+ ```
130
+
131
+ Then use in your HTML:
88
132
 
89
- <seki-button variant="default">Click me</seki-button>
133
+ ```html
134
+ <seki-button variant="primary">Click me</seki-button>
90
135
  <seki-input type="email" placeholder="you@example.com"></seki-input>
91
136
  ```
92
137
 
93
138
  ### React
94
139
 
95
140
  ```jsx
141
+ // Import CSS in your main index.js or App.js
142
+ import '@sekiui/elements/dist/sekiui/sekiui.css';
96
143
  import { SekiButton } from '@sekiui/elements/react';
97
144
 
98
145
  function App() {
99
- return <SekiButton variant="default">Click me</SekiButton>;
146
+ return <SekiButton variant="primary">Click me</SekiButton>;
100
147
  }
101
148
  ```
102
149
 
@@ -111,6 +158,9 @@ import { createApp } from 'vue';
111
158
  import App from './App.vue';
112
159
  import { defineCustomElements } from '@sekiui/elements/loader';
113
160
 
161
+ // Import CSS once globally
162
+ import '@sekiui/elements/dist/sekiui/sekiui.css';
163
+
114
164
  // Register custom elements once globally
115
165
  defineCustomElements();
116
166
 
@@ -121,7 +171,7 @@ Then use anywhere in your components:
121
171
 
122
172
  ```vue
123
173
  <template>
124
- <seki-button variant="default">Click me</seki-button>
174
+ <seki-button variant="primary">Click me</seki-button>
125
175
  </template>
126
176
  ```
127
177
 
@@ -129,10 +179,11 @@ Then use anywhere in your components:
129
179
 
130
180
  ```vue
131
181
  <template>
132
- <seki-button variant="default">Click me</seki-button>
182
+ <seki-button variant="primary">Click me</seki-button>
133
183
  </template>
134
184
 
135
185
  <script setup>
186
+ import '@sekiui/elements/dist/sekiui/sekiui.css';
136
187
  import { defineCustomElements } from '@sekiui/elements/loader';
137
188
  defineCustomElements();
138
189
  </script>
@@ -156,7 +207,14 @@ export default {
156
207
 
157
208
  ### Angular
158
209
 
159
- In your `app.module.ts`:
210
+ **Step 1:** Import CSS in `styles.css` or `styles.scss`:
211
+
212
+ ```css
213
+ /* src/styles.css */
214
+ @import '@sekiui/elements/dist/sekiui/sekiui.css';
215
+ ```
216
+
217
+ **Step 2:** Register custom elements in `app.module.ts`:
160
218
 
161
219
  ```typescript
162
220
  import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
@@ -174,10 +232,10 @@ defineCustomElements();
174
232
  export class AppModule { }
175
233
  ```
176
234
 
177
- Then use in your templates:
235
+ **Step 3:** Use in your templates:
178
236
 
179
237
  ```html
180
- <seki-button variant="default">Click me</seki-button>
238
+ <seki-button variant="primary">Click me</seki-button>
181
239
  ```
182
240
 
183
241
  ## License
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Get the base path to where the assets can be found. Use "setAssetPath(path)"
3
+ * if the path needs to be customized.
4
+ */
5
+ export declare const getAssetPath: (path: string) => string;
6
+
7
+ /**
8
+ * Used to manually set the base path where assets can be found.
9
+ * If the script is used as "module", it's recommended to use "import.meta.url",
10
+ * such as "setAssetPath(import.meta.url)". Other options include
11
+ * "setAssetPath(document.currentScript.src)", or using a bundler's replace plugin to
12
+ * dynamically set the path at build time, such as "setAssetPath(process.env.ASSET_PATH)".
13
+ * But do note that this configuration depends on how your script is bundled, or lack of
14
+ * bundling, and where your assets can be loaded from. Additionally custom bundling
15
+ * will have to ensure the static assets are copied to its build directory.
16
+ */
17
+ export declare const setAssetPath: (path: string) => void;
18
+
19
+ /**
20
+ * Used to specify a nonce value that corresponds with an application's CSP.
21
+ * When set, the nonce will be added to all dynamically created script and style tags at runtime.
22
+ * Alternatively, the nonce value can be set on a meta tag in the DOM head
23
+ * (<meta name="csp-nonce" content="{ nonce value here }" />) which
24
+ * will result in the same behavior.
25
+ */
26
+ export declare const setNonce: (nonce: string) => void
27
+
28
+ export interface SetPlatformOptions {
29
+ raf?: (c: FrameRequestCallback) => number;
30
+ ael?: (el: EventTarget, eventName: string, listener: EventListenerOrEventListenerObject, options: boolean | AddEventListenerOptions) => void;
31
+ rel?: (el: EventTarget, eventName: string, listener: EventListenerOrEventListenerObject, options: boolean | AddEventListenerOptions) => void;
32
+ }
33
+ export declare const setPlatformOptions: (opts: SetPlatformOptions) => void;
@@ -0,0 +1,112 @@
1
+ import { p as proxyCustomElement, H, c as createEvent, h, a as Host } from './p-BLeUUc2-.js';
2
+ export { g as getAssetPath, r as render, s as setAssetPath, b as setNonce, d as setPlatformOptions } from './p-BLeUUc2-.js';
3
+
4
+ const sekiSwitchCss = ":host{--seki-neutral-50:hsl(0, 0%, 98%);--seki-neutral-100:hsl(0, 0%, 96.1%);--seki-neutral-200:hsl(0, 0%, 89.8%);--seki-neutral-300:hsl(0, 0%, 83.1%);--seki-neutral-400:hsl(0, 0%, 63.9%);--seki-neutral-500:hsl(0, 0%, 45.1%);--seki-neutral-600:hsl(0, 0%, 32.2%);--seki-neutral-700:hsl(0, 0%, 25.1%);--seki-neutral-800:hsl(0, 0%, 14.9%);--seki-neutral-900:hsl(0, 0%, 9%);--seki-neutral-950:hsl(0, 0%, 3.9%);--seki-primary-50:hsl(210, 100%, 97%);--seki-primary-100:hsl(210, 95%, 93%);--seki-primary-200:hsl(210, 95%, 85%);--seki-primary-300:hsl(210, 90%, 73%);--seki-primary-400:hsl(210, 85%, 58%);--seki-primary-500:hsl(210, 80%, 48%);--seki-primary-600:hsl(210, 75%, 40%);--seki-primary-700:hsl(210, 70%, 32%);--seki-primary-800:hsl(210, 65%, 25%);--seki-primary-900:hsl(210, 60%, 18%);--seki-primary-950:hsl(210, 55%, 10%);--seki-success-500:hsl(142, 71%, 45%);--seki-success-600:hsl(142, 71%, 35%);--seki-warning-500:hsl(38, 92%, 50%);--seki-warning-600:hsl(38, 92%, 40%);--seki-destructive-500:hsl(0, 84.2%, 60.2%);--seki-destructive-600:hsl(0, 72%, 41%)}:host{--seki-background:hsl(0, 0%, 100%);--seki-foreground:hsl(0, 0%, 3.9%);--seki-muted:hsl(0, 0%, 96.1%);--seki-muted-foreground:hsl(0, 0%, 45.1%);--seki-card:hsl(0, 0%, 100%);--seki-card-foreground:hsl(0, 0%, 3.9%);--seki-popover:hsl(0, 0%, 100%);--seki-popover-foreground:hsl(0, 0%, 3.9%);--seki-border:hsl(0, 0%, 89.8%);--seki-input:hsl(0, 0%, 89.8%);--seki-primary:hsl(0, 0%, 9%);--seki-primary-foreground:hsl(0, 0%, 98%);--seki-secondary:hsl(0, 0%, 96.1%);--seki-secondary-foreground:hsl(0, 0%, 9%);--seki-accent:hsl(0, 0%, 96.1%);--seki-accent-foreground:hsl(0, 0%, 9%);--seki-destructive:hsl(0, 84.2%, 60.2%);--seki-destructive-foreground:hsl(0, 0%, 98%);--seki-ring:hsl(0, 0%, 3.9%);--seki-bg-primary:var(--seki-background);--seki-bg-secondary:var(--seki-muted);--seki-bg-tertiary:var(--seki-accent);--seki-text-primary:var(--seki-foreground);--seki-text-secondary:var(--seki-muted-foreground);--seki-text-tertiary:var(--seki-neutral-400);--seki-border-default:var(--seki-border);--seki-border-emphasis:var(--seki-neutral-300)}:host([data-theme='dark']){--seki-background:hsl(0, 0%, 3.9%);--seki-foreground:hsl(0, 0%, 98%);--seki-muted:hsl(0, 0%, 14.9%);--seki-muted-foreground:hsl(0, 0%, 63.9%);--seki-card:hsl(0, 0%, 3.9%);--seki-card-foreground:hsl(0, 0%, 98%);--seki-popover:hsl(0, 0%, 3.9%);--seki-popover-foreground:hsl(0, 0%, 98%);--seki-border:hsl(0, 0%, 14.9%);--seki-input:hsl(0, 0%, 14.9%);--seki-primary:hsl(0, 0%, 98%);--seki-primary-foreground:hsl(0, 0%, 9%);--seki-secondary:hsl(0, 0%, 14.9%);--seki-secondary-foreground:hsl(0, 0%, 98%);--seki-accent:hsl(0, 0%, 14.9%);--seki-accent-foreground:hsl(0, 0%, 98%);--seki-destructive:hsl(0, 62.8%, 30.6%);--seki-destructive-foreground:hsl(0, 0%, 98%);--seki-ring:hsl(0, 0%, 83.1%);--seki-bg-primary:var(--seki-background);--seki-bg-secondary:var(--seki-muted);--seki-bg-tertiary:var(--seki-accent);--seki-text-primary:var(--seki-foreground);--seki-text-secondary:var(--seki-muted-foreground);--seki-text-tertiary:var(--seki-neutral-600);--seki-border-default:var(--seki-border);--seki-border-emphasis:var(--seki-neutral-700);--seki-button-primary-hover-bg:hsl(0, 0%, 98%, 0.9);--seki-button-secondary-hover-bg:hsl(0, 0%, 14.9%, 0.8)}:host{--seki-button-primary-bg:var(--seki-primary);--seki-button-primary-text:var(--seki-primary-foreground);--seki-button-primary-border:transparent;--seki-button-primary-hover-bg:hsl(0, 0%, 9%, 0.9);--seki-button-primary-hover-text:var(--seki-primary-foreground);--seki-button-primary-hover-border:transparent;--seki-button-secondary-bg:var(--seki-secondary);--seki-button-secondary-text:var(--seki-secondary-foreground);--seki-button-secondary-border:transparent;--seki-button-secondary-hover-bg:hsl(0, 0%, 96.1%, 0.8);--seki-button-secondary-hover-text:var(--seki-secondary-foreground);--seki-button-secondary-hover-border:transparent;--seki-button-outline-bg:transparent;--seki-button-outline-text:var(--seki-foreground);--seki-button-outline-border:var(--seki-input);--seki-button-outline-hover-bg:var(--seki-accent);--seki-button-outline-hover-text:var(--seki-accent-foreground);--seki-button-outline-hover-border:var(--seki-input);--seki-button-ghost-bg:transparent;--seki-button-ghost-text:var(--seki-foreground);--seki-button-ghost-border:transparent;--seki-button-ghost-hover-bg:var(--seki-accent);--seki-button-ghost-hover-text:var(--seki-accent-foreground);--seki-button-ghost-hover-border:transparent;--seki-button-destructive-bg:var(--seki-destructive);--seki-button-destructive-text:var(--seki-destructive-foreground);--seki-button-destructive-border:transparent;--seki-button-destructive-hover-bg:hsl(0, 84.2%, 60.2%, 0.9);--seki-button-destructive-hover-border:transparent;--seki-button-sm-padding-x:var(--seki-spacing-3, 0.75rem);--seki-button-sm-padding-y:0.375rem;--seki-button-sm-font-size:var(--seki-text-sm, 0.875rem);--seki-button-sm-height:2.25rem;--seki-button-md-padding-x:var(--seki-spacing-4, 1rem);--seki-button-md-padding-y:var(--seki-spacing-2, 0.5rem);--seki-button-md-font-size:var(--seki-text-base, 1rem);--seki-button-md-height:2.5rem;--seki-button-lg-padding-x:2rem;--seki-button-lg-padding-y:0.5rem;--seki-button-lg-font-size:1rem;--seki-button-lg-height:2.75rem;--seki-button-icon-sm-size:2rem;--seki-button-icon-size:2.5rem;--seki-button-icon-lg-size:3rem;--seki-button-icon-gap:0.5rem;--seki-button-link-bg:transparent;--seki-button-link-text:var(--seki-primary);--seki-button-link-border:transparent;--seki-button-link-hover-bg:transparent;--seki-button-link-hover-text:var(--seki-primary);--seki-button-link-hover-border:transparent;--seki-button-radius:var(--seki-radius-md, 0.375rem);--seki-button-font-weight:var(--seki-font-medium, 500);--seki-button-transition-duration:150ms;--seki-button-transition-timing:ease-in-out;--seki-button-shadow:var(--seki-shadow-sm, 0 1px 2px 0 rgb(0 0 0 / 0.05));--seki-button-shadow-hover:var(--seki-shadow-md, 0 4px 6px -1px rgb(0 0 0 / 0.1));--seki-button-disabled-opacity:0.5;--seki-input-bg:var(--seki-background);--seki-input-border:var(--seki-border);--seki-input-text:var(--seki-foreground);--seki-input-placeholder:var(--seki-muted-foreground);--seki-input-ring:var(--seki-ring);--seki-input-invalid-border:var(--seki-destructive);--seki-input-invalid-ring:var(--seki-destructive);--seki-input-disabled-opacity:0.5;--seki-input-radius:var(--seki-radius-md)}:host{--seki-spacing-0:0;--seki-spacing-0-5:0.125rem;--seki-spacing-1:0.25rem;--seki-spacing-1-5:0.375rem;--seki-spacing-2:0.5rem;--seki-spacing-2-5:0.625rem;--seki-spacing-3:0.75rem;--seki-spacing-3-5:0.875rem;--seki-spacing-4:1rem;--seki-spacing-5:1.25rem;--seki-spacing-6:1.5rem;--seki-spacing-8:2rem;--seki-spacing-10:2.5rem;--seki-spacing-12:3rem;--seki-spacing-16:4rem;--seki-spacing-20:5rem;--seki-spacing-24:6rem;--seki-input-height-sm:2rem;--seki-input-height-md:2.5rem;--seki-input-height-lg:3rem;--seki-input-padding-x:0.75rem;--seki-input-padding-y:0.5rem;--seki-input-font-size:0.875rem;--seki-input-ring-offset:2px}:host{--seki-shadow-sm:0 1px 2px 0 rgb(0 0 0 / 0.05);--seki-shadow-md:0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);--seki-shadow-lg:0 10px 15px -3px rgb(0 0 0 / 0.15), 0 4px 6px -4px rgb(0 0 0 / 0.1)}:host{--seki-font-sans:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue',\n Arial, sans-serif;--seki-font-mono:ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, monospace;--seki-text-xs:0.75rem;--seki-text-sm:0.875rem;--seki-text-base:1rem;--seki-text-lg:1.125rem;--seki-text-xl:1.25rem;--seki-text-2xl:1.5rem;--seki-text-3xl:1.875rem;--seki-text-4xl:2.25rem;--seki-font-normal:400;--seki-font-medium:500;--seki-font-semibold:600;--seki-font-bold:700;--seki-leading-tight:1.25;--seki-leading-normal:1.5;--seki-leading-relaxed:1.75}:host{--seki-radius-sm:0.25rem;--seki-radius-md:0.375rem;--seki-radius-lg:0.5rem;--seki-radius-xl:1rem;}:host{display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:44px}.switch{width:var(--seki-switch-width, 2.75rem);height:var(--seki-switch-height, 1.5rem);position:relative;display:inline-flex;align-items:center;flex-shrink:0;background-color:var(--seki-switch-bg-unchecked, hsl(var(--muted, 240 4.8% 95.9%)));border-radius:9999px;cursor:pointer;transition:background-color var(--seki-switch-transition-duration, 150ms) ease-out;outline:none}.switch:focus-visible{outline:2px solid var(--seki-switch-focus-ring, hsl(var(--ring, 240 5% 64.9%)));outline-offset:2px}:host([data-state=\"checked\"]) .switch{background-color:var(--seki-switch-bg-checked, hsl(var(--primary, 240 5.9% 10%)))}:host([data-disabled]) .switch{background-color:var(--seki-switch-bg-disabled, hsl(var(--muted, 240 4.8% 95.9%) / 0.5));cursor:not-allowed;opacity:0.5}.thumb{width:var(--seki-switch-thumb-size, 1.25rem);height:var(--seki-switch-thumb-size, 1.25rem);background-color:var(--seki-switch-thumb-bg, hsl(var(--background, 0 0% 100%)));position:absolute;left:0.125rem;border-radius:50%;box-shadow:0 1px 2px 0 rgb(0 0 0 / 0.05);transition:transform var(--seki-switch-transition-duration, 150ms) ease-out;pointer-events:none}:host([data-state=\"checked\"]) .thumb{transform:translateX(calc(var(--seki-switch-width, 2.75rem) - var(--seki-switch-thumb-size, 1.25rem) - 0.25rem))}@media (prefers-color-scheme: dark){.switch{--seki-switch-bg-unchecked:hsl(var(--muted, 240 3.7% 15.9%))}.thumb{--seki-switch-thumb-bg:hsl(var(--background, 240 10% 3.9%))}}";
5
+
6
+ const SekiSwitch = /*@__PURE__*/ proxyCustomElement(class SekiSwitch extends H {
7
+ constructor(registerHost) {
8
+ super();
9
+ if (registerHost !== false) {
10
+ this.__registerHost();
11
+ }
12
+ this.__attachShadow();
13
+ this.sekiChange = createEvent(this, "sekiChange");
14
+ /**
15
+ * @description Initial checked state for uncontrolled mode. Ignored if checked prop is provided.
16
+ */
17
+ this.defaultChecked = false;
18
+ /**
19
+ * @description Disables all interactions when true.
20
+ */
21
+ this.disabled = false;
22
+ /**
23
+ * @description Marks switch as required for form validation.
24
+ */
25
+ this.required = false;
26
+ /**
27
+ * @description Value sent in form data when switch is checked. Defaults to 'on'.
28
+ */
29
+ this.value = 'on';
30
+ /**
31
+ * @description Internal checked state for uncontrolled mode.
32
+ */
33
+ this.internalChecked = false;
34
+ /**
35
+ * Toggle switch state and emit event
36
+ */
37
+ this.toggle = () => {
38
+ if (this.disabled) {
39
+ return;
40
+ }
41
+ const newCheckedState = !this.isChecked;
42
+ // Update internal state only in uncontrolled mode
43
+ if (this.checked === undefined) {
44
+ this.internalChecked = newCheckedState;
45
+ }
46
+ // Always emit event (for both controlled and uncontrolled)
47
+ this.sekiChange.emit({ checked: newCheckedState });
48
+ };
49
+ /**
50
+ * Handle click events
51
+ */
52
+ this.handleClick = () => {
53
+ this.toggle();
54
+ };
55
+ }
56
+ /**
57
+ * Initialize internal checked state from defaultChecked
58
+ */
59
+ componentWillLoad() {
60
+ this.internalChecked = this.defaultChecked;
61
+ }
62
+ /**
63
+ * Get current checked state (controlled vs uncontrolled)
64
+ */
65
+ get isChecked() {
66
+ return this.checked !== undefined ? this.checked : this.internalChecked;
67
+ }
68
+ /**
69
+ * Handle keyboard events (Space and Enter keys)
70
+ */
71
+ handleKeyDown(event) {
72
+ if (this.disabled) {
73
+ return;
74
+ }
75
+ // Toggle on Space or Enter
76
+ if (event.key === ' ' || event.key === 'Enter') {
77
+ event.preventDefault(); // Prevent page scroll on Space
78
+ this.toggle();
79
+ }
80
+ }
81
+ render() {
82
+ const isChecked = this.isChecked;
83
+ const dataState = isChecked ? 'checked' : 'unchecked';
84
+ return (h(Host, { key: 'af5412cee9d097e57d8e626522619913b7459e4b', "data-state": dataState, "data-disabled": this.disabled ? '' : null }, h("div", { key: 'a2c15a3f6b33b4e98e215d82c14cba9dd47bd951', class: "switch", part: "switch", role: "switch", "aria-checked": isChecked ? 'true' : 'false', "aria-disabled": this.disabled ? 'true' : undefined, "aria-label": this.ariaLabel || undefined, "aria-required": this.required ? 'true' : undefined, tabindex: this.disabled ? -1 : 0, onClick: this.handleClick }, h("span", { key: '51fb815c2710b8fd5ac12bdc90b09c44a3bf9b24', class: "thumb", part: "thumb" })), this.name && (h("input", { key: '37f059d43e01b82c9fc3e6f1f1df5c894e8a6102', type: "checkbox", name: this.name, value: this.value, checked: isChecked, required: this.required, disabled: this.disabled, style: { display: 'none' }, tabindex: -1, "aria-hidden": "true" }))));
85
+ }
86
+ static get style() { return sekiSwitchCss; }
87
+ }, [257, "seki-switch", {
88
+ "checked": [4],
89
+ "defaultChecked": [4, "default-checked"],
90
+ "disabled": [4],
91
+ "required": [4],
92
+ "name": [1],
93
+ "value": [1],
94
+ "ariaLabel": [1, "aria-label"],
95
+ "internalChecked": [32]
96
+ }, [[0, "keydown", "handleKeyDown"]]]);
97
+ function defineCustomElement() {
98
+ if (typeof customElements === "undefined") {
99
+ return;
100
+ }
101
+ const components = ["seki-switch"];
102
+ components.forEach(tagName => { switch (tagName) {
103
+ case "seki-switch":
104
+ if (!customElements.get(tagName)) {
105
+ customElements.define(tagName, SekiSwitch);
106
+ }
107
+ break;
108
+ } });
109
+ }
110
+ defineCustomElement();
111
+
112
+ export { SekiSwitch, defineCustomElement as d };
@@ -1,3 +1,5 @@
1
+ const globalStyles = ":host{--seki-neutral-50:hsl(0, 0%, 98%);--seki-neutral-100:hsl(0, 0%, 96.1%);--seki-neutral-200:hsl(0, 0%, 89.8%);--seki-neutral-300:hsl(0, 0%, 83.1%);--seki-neutral-400:hsl(0, 0%, 63.9%);--seki-neutral-500:hsl(0, 0%, 45.1%);--seki-neutral-600:hsl(0, 0%, 32.2%);--seki-neutral-700:hsl(0, 0%, 25.1%);--seki-neutral-800:hsl(0, 0%, 14.9%);--seki-neutral-900:hsl(0, 0%, 9%);--seki-neutral-950:hsl(0, 0%, 3.9%);--seki-primary-50:hsl(210, 100%, 97%);--seki-primary-100:hsl(210, 95%, 93%);--seki-primary-200:hsl(210, 95%, 85%);--seki-primary-300:hsl(210, 90%, 73%);--seki-primary-400:hsl(210, 85%, 58%);--seki-primary-500:hsl(210, 80%, 48%);--seki-primary-600:hsl(210, 75%, 40%);--seki-primary-700:hsl(210, 70%, 32%);--seki-primary-800:hsl(210, 65%, 25%);--seki-primary-900:hsl(210, 60%, 18%);--seki-primary-950:hsl(210, 55%, 10%);--seki-success-500:hsl(142, 71%, 45%);--seki-success-600:hsl(142, 71%, 35%);--seki-warning-500:hsl(38, 92%, 50%);--seki-warning-600:hsl(38, 92%, 40%);--seki-destructive-500:hsl(0, 84.2%, 60.2%);--seki-destructive-600:hsl(0, 72%, 41%)}:host{--seki-background:hsl(0, 0%, 100%);--seki-foreground:hsl(0, 0%, 3.9%);--seki-muted:hsl(0, 0%, 96.1%);--seki-muted-foreground:hsl(0, 0%, 45.1%);--seki-card:hsl(0, 0%, 100%);--seki-card-foreground:hsl(0, 0%, 3.9%);--seki-popover:hsl(0, 0%, 100%);--seki-popover-foreground:hsl(0, 0%, 3.9%);--seki-border:hsl(0, 0%, 89.8%);--seki-input:hsl(0, 0%, 89.8%);--seki-primary:hsl(0, 0%, 9%);--seki-primary-foreground:hsl(0, 0%, 98%);--seki-secondary:hsl(0, 0%, 96.1%);--seki-secondary-foreground:hsl(0, 0%, 9%);--seki-accent:hsl(0, 0%, 96.1%);--seki-accent-foreground:hsl(0, 0%, 9%);--seki-destructive:hsl(0, 84.2%, 60.2%);--seki-destructive-foreground:hsl(0, 0%, 98%);--seki-ring:hsl(0, 0%, 3.9%);--seki-bg-primary:var(--seki-background);--seki-bg-secondary:var(--seki-muted);--seki-bg-tertiary:var(--seki-accent);--seki-text-primary:var(--seki-foreground);--seki-text-secondary:var(--seki-muted-foreground);--seki-text-tertiary:var(--seki-neutral-400);--seki-border-default:var(--seki-border);--seki-border-emphasis:var(--seki-neutral-300)}:host([data-theme='dark']){--seki-background:hsl(0, 0%, 3.9%);--seki-foreground:hsl(0, 0%, 98%);--seki-muted:hsl(0, 0%, 14.9%);--seki-muted-foreground:hsl(0, 0%, 63.9%);--seki-card:hsl(0, 0%, 3.9%);--seki-card-foreground:hsl(0, 0%, 98%);--seki-popover:hsl(0, 0%, 3.9%);--seki-popover-foreground:hsl(0, 0%, 98%);--seki-border:hsl(0, 0%, 14.9%);--seki-input:hsl(0, 0%, 14.9%);--seki-primary:hsl(0, 0%, 98%);--seki-primary-foreground:hsl(0, 0%, 9%);--seki-secondary:hsl(0, 0%, 14.9%);--seki-secondary-foreground:hsl(0, 0%, 98%);--seki-accent:hsl(0, 0%, 14.9%);--seki-accent-foreground:hsl(0, 0%, 98%);--seki-destructive:hsl(0, 62.8%, 30.6%);--seki-destructive-foreground:hsl(0, 0%, 98%);--seki-ring:hsl(0, 0%, 83.1%);--seki-bg-primary:var(--seki-background);--seki-bg-secondary:var(--seki-muted);--seki-bg-tertiary:var(--seki-accent);--seki-text-primary:var(--seki-foreground);--seki-text-secondary:var(--seki-muted-foreground);--seki-text-tertiary:var(--seki-neutral-600);--seki-border-default:var(--seki-border);--seki-border-emphasis:var(--seki-neutral-700);--seki-button-primary-hover-bg:hsl(0, 0%, 98%, 0.9);--seki-button-secondary-hover-bg:hsl(0, 0%, 14.9%, 0.8)}:host{--seki-button-primary-bg:var(--seki-primary);--seki-button-primary-text:var(--seki-primary-foreground);--seki-button-primary-border:transparent;--seki-button-primary-hover-bg:hsl(0, 0%, 9%, 0.9);--seki-button-primary-hover-text:var(--seki-primary-foreground);--seki-button-primary-hover-border:transparent;--seki-button-secondary-bg:var(--seki-secondary);--seki-button-secondary-text:var(--seki-secondary-foreground);--seki-button-secondary-border:transparent;--seki-button-secondary-hover-bg:hsl(0, 0%, 96.1%, 0.8);--seki-button-secondary-hover-text:var(--seki-secondary-foreground);--seki-button-secondary-hover-border:transparent;--seki-button-outline-bg:transparent;--seki-button-outline-text:var(--seki-foreground);--seki-button-outline-border:var(--seki-input);--seki-button-outline-hover-bg:var(--seki-accent);--seki-button-outline-hover-text:var(--seki-accent-foreground);--seki-button-outline-hover-border:var(--seki-input);--seki-button-ghost-bg:transparent;--seki-button-ghost-text:var(--seki-foreground);--seki-button-ghost-border:transparent;--seki-button-ghost-hover-bg:var(--seki-accent);--seki-button-ghost-hover-text:var(--seki-accent-foreground);--seki-button-ghost-hover-border:transparent;--seki-button-destructive-bg:var(--seki-destructive);--seki-button-destructive-text:var(--seki-destructive-foreground);--seki-button-destructive-border:transparent;--seki-button-destructive-hover-bg:hsl(0, 84.2%, 60.2%, 0.9);--seki-button-destructive-hover-border:transparent;--seki-button-sm-padding-x:var(--seki-spacing-3, 0.75rem);--seki-button-sm-padding-y:0.375rem;--seki-button-sm-font-size:var(--seki-text-sm, 0.875rem);--seki-button-sm-height:2.25rem;--seki-button-md-padding-x:var(--seki-spacing-4, 1rem);--seki-button-md-padding-y:var(--seki-spacing-2, 0.5rem);--seki-button-md-font-size:var(--seki-text-base, 1rem);--seki-button-md-height:2.5rem;--seki-button-lg-padding-x:2rem;--seki-button-lg-padding-y:0.5rem;--seki-button-lg-font-size:1rem;--seki-button-lg-height:2.75rem;--seki-button-icon-sm-size:2rem;--seki-button-icon-size:2.5rem;--seki-button-icon-lg-size:3rem;--seki-button-icon-gap:0.5rem;--seki-button-link-bg:transparent;--seki-button-link-text:var(--seki-primary);--seki-button-link-border:transparent;--seki-button-link-hover-bg:transparent;--seki-button-link-hover-text:var(--seki-primary);--seki-button-link-hover-border:transparent;--seki-button-radius:var(--seki-radius-md, 0.375rem);--seki-button-font-weight:var(--seki-font-medium, 500);--seki-button-transition-duration:150ms;--seki-button-transition-timing:ease-in-out;--seki-button-shadow:var(--seki-shadow-sm, 0 1px 2px 0 rgb(0 0 0 / 0.05));--seki-button-shadow-hover:var(--seki-shadow-md, 0 4px 6px -1px rgb(0 0 0 / 0.1));--seki-button-disabled-opacity:0.5;--seki-input-bg:var(--seki-background);--seki-input-border:var(--seki-border);--seki-input-text:var(--seki-foreground);--seki-input-placeholder:var(--seki-muted-foreground);--seki-input-ring:var(--seki-ring);--seki-input-invalid-border:var(--seki-destructive);--seki-input-invalid-ring:var(--seki-destructive);--seki-input-disabled-opacity:0.5;--seki-input-radius:var(--seki-radius-md)}:host{--seki-spacing-0:0;--seki-spacing-0-5:0.125rem;--seki-spacing-1:0.25rem;--seki-spacing-1-5:0.375rem;--seki-spacing-2:0.5rem;--seki-spacing-2-5:0.625rem;--seki-spacing-3:0.75rem;--seki-spacing-3-5:0.875rem;--seki-spacing-4:1rem;--seki-spacing-5:1.25rem;--seki-spacing-6:1.5rem;--seki-spacing-8:2rem;--seki-spacing-10:2.5rem;--seki-spacing-12:3rem;--seki-spacing-16:4rem;--seki-spacing-20:5rem;--seki-spacing-24:6rem;--seki-input-height-sm:2rem;--seki-input-height-md:2.5rem;--seki-input-height-lg:3rem;--seki-input-padding-x:0.75rem;--seki-input-padding-y:0.5rem;--seki-input-font-size:0.875rem;--seki-input-ring-offset:2px}:host{--seki-shadow-sm:0 1px 2px 0 rgb(0 0 0 / 0.05);--seki-shadow-md:0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);--seki-shadow-lg:0 10px 15px -3px rgb(0 0 0 / 0.15), 0 4px 6px -4px rgb(0 0 0 / 0.1)}:host{--seki-font-sans:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue',\n Arial, sans-serif;--seki-font-mono:ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, monospace;--seki-text-xs:0.75rem;--seki-text-sm:0.875rem;--seki-text-base:1rem;--seki-text-lg:1.125rem;--seki-text-xl:1.25rem;--seki-text-2xl:1.5rem;--seki-text-3xl:1.875rem;--seki-text-4xl:2.25rem;--seki-font-normal:400;--seki-font-medium:500;--seki-font-semibold:600;--seki-font-bold:700;--seki-leading-tight:1.25;--seki-leading-normal:1.5;--seki-leading-relaxed:1.75}:host{--seki-radius-sm:0.25rem;--seki-radius-md:0.375rem;--seki-radius-lg:0.5rem;--seki-radius-xl:1rem;}";
2
+
1
3
  const NAMESPACE = 'sekiui';
2
4
  const BUILD = /* sekiui */ { hydratedSelectorName: "hydrated", lazyLoad: false, updatable: true};
3
5
 
@@ -41,6 +43,12 @@ var consoleError = (e, el) => (0, console.error)(e, el);
41
43
  var styles = /* @__PURE__ */ new Map();
42
44
  var SLOT_FB_CSS = "slot-fb{display:contents}slot-fb[hidden]{display:none}";
43
45
  var XLINK_NS = "http://www.w3.org/1999/xlink";
46
+ var FORM_ASSOCIATED_CUSTOM_ELEMENT_CALLBACKS = [
47
+ "formAssociatedCallback",
48
+ "formResetCallback",
49
+ "formDisabledCallback",
50
+ "formStateRestoreCallback"
51
+ ];
44
52
  var win = typeof window !== "undefined" ? window : {};
45
53
  var H = win.HTMLElement || class {
46
54
  };
@@ -189,7 +197,10 @@ var unwrapErr = (result) => {
189
197
 
190
198
  // src/utils/style.ts
191
199
  function createStyleSheetIfNeededAndSupported(styles2) {
192
- return void 0;
200
+ if (!supportsConstructableStylesheets) return void 0;
201
+ const sheet = new CSSStyleSheet();
202
+ sheet.replaceSync(styles2);
203
+ return sheet;
193
204
  }
194
205
 
195
206
  // src/utils/shadow-root.ts
@@ -197,7 +208,7 @@ var globalStyleSheet;
197
208
  function createShadowRoot(cmpMeta) {
198
209
  var _a;
199
210
  const shadowRoot = this.attachShadow({ mode: "open" });
200
- if (globalStyleSheet === void 0) globalStyleSheet = (_a = createStyleSheetIfNeededAndSupported()) != null ? _a : null;
211
+ if (globalStyleSheet === void 0) globalStyleSheet = (_a = createStyleSheetIfNeededAndSupported(globalStyles)) != null ? _a : null;
201
212
  if (globalStyleSheet) {
202
213
  if (supportsMutableAdoptedStyleSheets) {
203
214
  shadowRoot.adoptedStyleSheets.push(globalStyleSheet);
@@ -396,7 +407,9 @@ createSupportsRuleRe(":host-context");
396
407
  var parsePropertyValue = (propValue, propType, isFormAssociated) => {
397
408
  if (propValue != null && !isComplexType(propValue)) {
398
409
  if (propType & 4 /* Boolean */) {
399
- {
410
+ if (isFormAssociated && typeof propValue === "string") {
411
+ return propValue === "" || !!propValue;
412
+ } else {
400
413
  return propValue === "false" ? false : propValue === "" || !!propValue;
401
414
  }
402
415
  }
@@ -981,7 +994,9 @@ var setValue = (ref, propName, newVal, cmpMeta) => {
981
994
  const instance = elm;
982
995
  newVal = parsePropertyValue(
983
996
  newVal,
984
- cmpMeta.$members$[propName][0]);
997
+ cmpMeta.$members$[propName][0],
998
+ !!(cmpMeta.$flags$ & 64 /* formAssociated */)
999
+ );
985
1000
  const areBothNaN = Number.isNaN(oldVal) && Number.isNaN(newVal);
986
1001
  const didValueChange = newVal !== oldVal && !areBothNaN;
987
1002
  if (didValueChange) {
@@ -1015,6 +1030,27 @@ var setValue = (ref, propName, newVal, cmpMeta) => {
1015
1030
  var proxyComponent = (Cstr, cmpMeta, flags) => {
1016
1031
  var _a, _b;
1017
1032
  const prototype = Cstr.prototype;
1033
+ if (cmpMeta.$flags$ & 64 /* formAssociated */ && flags & 1 /* isElementConstructor */) {
1034
+ FORM_ASSOCIATED_CUSTOM_ELEMENT_CALLBACKS.forEach((cbName) => {
1035
+ const originalFormAssociatedCallback = prototype[cbName];
1036
+ Object.defineProperty(prototype, cbName, {
1037
+ value(...args) {
1038
+ var _a2;
1039
+ const hostRef = getHostRef(this);
1040
+ const instance = this;
1041
+ if (!instance) {
1042
+ (_a2 = hostRef == null ? void 0 : hostRef.$onReadyPromise$) == null ? void 0 : _a2.then((asyncInstance) => {
1043
+ const cb = asyncInstance[cbName];
1044
+ typeof cb === "function" && cb.call(asyncInstance, ...args);
1045
+ });
1046
+ } else {
1047
+ const cb = originalFormAssociatedCallback;
1048
+ typeof cb === "function" && cb.call(instance, ...args);
1049
+ }
1050
+ }
1051
+ });
1052
+ });
1053
+ }
1018
1054
  {
1019
1055
  {
1020
1056
  if (Cstr.watchers && !cmpMeta.$watchers$) {
@@ -1058,7 +1094,9 @@ var proxyComponent = (Cstr, cmpMeta, flags) => {
1058
1094
  origSetter.apply(this, [
1059
1095
  parsePropertyValue(
1060
1096
  newValue,
1061
- memberFlags)
1097
+ memberFlags,
1098
+ !!(cmpMeta.$flags$ & 64 /* formAssociated */)
1099
+ )
1062
1100
  ]);
1063
1101
  newValue = memberFlags & 32 /* State */ ? this[memberName] : ref.$hostElement$[memberName];
1064
1102
  setValue(this, memberName, newValue, cmpMeta);
@@ -1276,7 +1314,7 @@ var proxyCustomElement = (Cstr, compactMeta) => {
1276
1314
  }
1277
1315
  });
1278
1316
  Cstr.is = cmpMeta.$tagName$;
1279
- return proxyComponent(Cstr, cmpMeta);
1317
+ return proxyComponent(Cstr, cmpMeta, 1 /* isElementConstructor */ | 2 /* proxyState */);
1280
1318
  };
1281
1319
  var addHostEventListeners = (elm, hostRef, listeners, attachParentListeners) => {
1282
1320
  if (listeners && win.document) {
@@ -0,0 +1,11 @@
1
+ import type { Components, JSX } from "../types/components";
2
+
3
+ interface SekiButton extends Components.SekiButton, HTMLElement {}
4
+ export const SekiButton: {
5
+ prototype: SekiButton;
6
+ new (): SekiButton;
7
+ };
8
+ /**
9
+ * Used to define this component and all nested components recursively.
10
+ */
11
+ export const defineCustomElement: () => void;
@@ -0,0 +1,66 @@
1
+ import { p as proxyCustomElement, H, h } from './p-BLeUUc2-.js';
2
+
3
+ const sekiButtonCss = ":host{--seki-neutral-50:hsl(0, 0%, 98%);--seki-neutral-100:hsl(0, 0%, 96.1%);--seki-neutral-200:hsl(0, 0%, 89.8%);--seki-neutral-300:hsl(0, 0%, 83.1%);--seki-neutral-400:hsl(0, 0%, 63.9%);--seki-neutral-500:hsl(0, 0%, 45.1%);--seki-neutral-600:hsl(0, 0%, 32.2%);--seki-neutral-700:hsl(0, 0%, 25.1%);--seki-neutral-800:hsl(0, 0%, 14.9%);--seki-neutral-900:hsl(0, 0%, 9%);--seki-neutral-950:hsl(0, 0%, 3.9%);--seki-primary-50:hsl(210, 100%, 97%);--seki-primary-100:hsl(210, 95%, 93%);--seki-primary-200:hsl(210, 95%, 85%);--seki-primary-300:hsl(210, 90%, 73%);--seki-primary-400:hsl(210, 85%, 58%);--seki-primary-500:hsl(210, 80%, 48%);--seki-primary-600:hsl(210, 75%, 40%);--seki-primary-700:hsl(210, 70%, 32%);--seki-primary-800:hsl(210, 65%, 25%);--seki-primary-900:hsl(210, 60%, 18%);--seki-primary-950:hsl(210, 55%, 10%);--seki-success-500:hsl(142, 71%, 45%);--seki-success-600:hsl(142, 71%, 35%);--seki-warning-500:hsl(38, 92%, 50%);--seki-warning-600:hsl(38, 92%, 40%);--seki-destructive-500:hsl(0, 84.2%, 60.2%);--seki-destructive-600:hsl(0, 72%, 41%)}:host{--seki-background:hsl(0, 0%, 100%);--seki-foreground:hsl(0, 0%, 3.9%);--seki-muted:hsl(0, 0%, 96.1%);--seki-muted-foreground:hsl(0, 0%, 45.1%);--seki-card:hsl(0, 0%, 100%);--seki-card-foreground:hsl(0, 0%, 3.9%);--seki-popover:hsl(0, 0%, 100%);--seki-popover-foreground:hsl(0, 0%, 3.9%);--seki-border:hsl(0, 0%, 89.8%);--seki-input:hsl(0, 0%, 89.8%);--seki-primary:hsl(0, 0%, 9%);--seki-primary-foreground:hsl(0, 0%, 98%);--seki-secondary:hsl(0, 0%, 96.1%);--seki-secondary-foreground:hsl(0, 0%, 9%);--seki-accent:hsl(0, 0%, 96.1%);--seki-accent-foreground:hsl(0, 0%, 9%);--seki-destructive:hsl(0, 84.2%, 60.2%);--seki-destructive-foreground:hsl(0, 0%, 98%);--seki-ring:hsl(0, 0%, 3.9%);--seki-bg-primary:var(--seki-background);--seki-bg-secondary:var(--seki-muted);--seki-bg-tertiary:var(--seki-accent);--seki-text-primary:var(--seki-foreground);--seki-text-secondary:var(--seki-muted-foreground);--seki-text-tertiary:var(--seki-neutral-400);--seki-border-default:var(--seki-border);--seki-border-emphasis:var(--seki-neutral-300)}:host([data-theme='dark']){--seki-background:hsl(0, 0%, 3.9%);--seki-foreground:hsl(0, 0%, 98%);--seki-muted:hsl(0, 0%, 14.9%);--seki-muted-foreground:hsl(0, 0%, 63.9%);--seki-card:hsl(0, 0%, 3.9%);--seki-card-foreground:hsl(0, 0%, 98%);--seki-popover:hsl(0, 0%, 3.9%);--seki-popover-foreground:hsl(0, 0%, 98%);--seki-border:hsl(0, 0%, 14.9%);--seki-input:hsl(0, 0%, 14.9%);--seki-primary:hsl(0, 0%, 98%);--seki-primary-foreground:hsl(0, 0%, 9%);--seki-secondary:hsl(0, 0%, 14.9%);--seki-secondary-foreground:hsl(0, 0%, 98%);--seki-accent:hsl(0, 0%, 14.9%);--seki-accent-foreground:hsl(0, 0%, 98%);--seki-destructive:hsl(0, 62.8%, 30.6%);--seki-destructive-foreground:hsl(0, 0%, 98%);--seki-ring:hsl(0, 0%, 83.1%);--seki-bg-primary:var(--seki-background);--seki-bg-secondary:var(--seki-muted);--seki-bg-tertiary:var(--seki-accent);--seki-text-primary:var(--seki-foreground);--seki-text-secondary:var(--seki-muted-foreground);--seki-text-tertiary:var(--seki-neutral-600);--seki-border-default:var(--seki-border);--seki-border-emphasis:var(--seki-neutral-700);--seki-button-primary-hover-bg:hsl(0, 0%, 98%, 0.9);--seki-button-secondary-hover-bg:hsl(0, 0%, 14.9%, 0.8)}:host{--seki-button-primary-bg:var(--seki-primary);--seki-button-primary-text:var(--seki-primary-foreground);--seki-button-primary-border:transparent;--seki-button-primary-hover-bg:hsl(0, 0%, 9%, 0.9);--seki-button-primary-hover-text:var(--seki-primary-foreground);--seki-button-primary-hover-border:transparent;--seki-button-secondary-bg:var(--seki-secondary);--seki-button-secondary-text:var(--seki-secondary-foreground);--seki-button-secondary-border:transparent;--seki-button-secondary-hover-bg:hsl(0, 0%, 96.1%, 0.8);--seki-button-secondary-hover-text:var(--seki-secondary-foreground);--seki-button-secondary-hover-border:transparent;--seki-button-outline-bg:transparent;--seki-button-outline-text:var(--seki-foreground);--seki-button-outline-border:var(--seki-input);--seki-button-outline-hover-bg:var(--seki-accent);--seki-button-outline-hover-text:var(--seki-accent-foreground);--seki-button-outline-hover-border:var(--seki-input);--seki-button-ghost-bg:transparent;--seki-button-ghost-text:var(--seki-foreground);--seki-button-ghost-border:transparent;--seki-button-ghost-hover-bg:var(--seki-accent);--seki-button-ghost-hover-text:var(--seki-accent-foreground);--seki-button-ghost-hover-border:transparent;--seki-button-destructive-bg:var(--seki-destructive);--seki-button-destructive-text:var(--seki-destructive-foreground);--seki-button-destructive-border:transparent;--seki-button-destructive-hover-bg:hsl(0, 84.2%, 60.2%, 0.9);--seki-button-destructive-hover-border:transparent;--seki-button-sm-padding-x:var(--seki-spacing-3, 0.75rem);--seki-button-sm-padding-y:0.375rem;--seki-button-sm-font-size:var(--seki-text-sm, 0.875rem);--seki-button-sm-height:2.25rem;--seki-button-md-padding-x:var(--seki-spacing-4, 1rem);--seki-button-md-padding-y:var(--seki-spacing-2, 0.5rem);--seki-button-md-font-size:var(--seki-text-base, 1rem);--seki-button-md-height:2.5rem;--seki-button-lg-padding-x:2rem;--seki-button-lg-padding-y:0.5rem;--seki-button-lg-font-size:1rem;--seki-button-lg-height:2.75rem;--seki-button-icon-sm-size:2rem;--seki-button-icon-size:2.5rem;--seki-button-icon-lg-size:3rem;--seki-button-icon-gap:0.5rem;--seki-button-link-bg:transparent;--seki-button-link-text:var(--seki-primary);--seki-button-link-border:transparent;--seki-button-link-hover-bg:transparent;--seki-button-link-hover-text:var(--seki-primary);--seki-button-link-hover-border:transparent;--seki-button-radius:var(--seki-radius-md, 0.375rem);--seki-button-font-weight:var(--seki-font-medium, 500);--seki-button-transition-duration:150ms;--seki-button-transition-timing:ease-in-out;--seki-button-shadow:var(--seki-shadow-sm, 0 1px 2px 0 rgb(0 0 0 / 0.05));--seki-button-shadow-hover:var(--seki-shadow-md, 0 4px 6px -1px rgb(0 0 0 / 0.1));--seki-button-disabled-opacity:0.5;--seki-input-bg:var(--seki-background);--seki-input-border:var(--seki-border);--seki-input-text:var(--seki-foreground);--seki-input-placeholder:var(--seki-muted-foreground);--seki-input-ring:var(--seki-ring);--seki-input-invalid-border:var(--seki-destructive);--seki-input-invalid-ring:var(--seki-destructive);--seki-input-disabled-opacity:0.5;--seki-input-radius:var(--seki-radius-md)}:host{--seki-spacing-0:0;--seki-spacing-0-5:0.125rem;--seki-spacing-1:0.25rem;--seki-spacing-1-5:0.375rem;--seki-spacing-2:0.5rem;--seki-spacing-2-5:0.625rem;--seki-spacing-3:0.75rem;--seki-spacing-3-5:0.875rem;--seki-spacing-4:1rem;--seki-spacing-5:1.25rem;--seki-spacing-6:1.5rem;--seki-spacing-8:2rem;--seki-spacing-10:2.5rem;--seki-spacing-12:3rem;--seki-spacing-16:4rem;--seki-spacing-20:5rem;--seki-spacing-24:6rem;--seki-input-height-sm:2rem;--seki-input-height-md:2.5rem;--seki-input-height-lg:3rem;--seki-input-padding-x:0.75rem;--seki-input-padding-y:0.5rem;--seki-input-font-size:0.875rem;--seki-input-ring-offset:2px}:host{--seki-shadow-sm:0 1px 2px 0 rgb(0 0 0 / 0.05);--seki-shadow-md:0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);--seki-shadow-lg:0 10px 15px -3px rgb(0 0 0 / 0.15), 0 4px 6px -4px rgb(0 0 0 / 0.1)}:host{--seki-font-sans:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue',\n Arial, sans-serif;--seki-font-mono:ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, monospace;--seki-text-xs:0.75rem;--seki-text-sm:0.875rem;--seki-text-base:1rem;--seki-text-lg:1.125rem;--seki-text-xl:1.25rem;--seki-text-2xl:1.5rem;--seki-text-3xl:1.875rem;--seki-text-4xl:2.25rem;--seki-font-normal:400;--seki-font-medium:500;--seki-font-semibold:600;--seki-font-bold:700;--seki-leading-tight:1.25;--seki-leading-normal:1.5;--seki-leading-relaxed:1.75}:host{--seki-radius-sm:0.25rem;--seki-radius-md:0.375rem;--seki-radius-lg:0.5rem;--seki-radius-xl:1rem;}:host{display:inline-block}.button{box-sizing:border-box;font-family:var(--seki-font-sans);font-weight:var(--seki-button-font-weight);border-radius:var(--seki-button-radius);cursor:pointer;border:1px solid;transition:background-color var(--seki-button-transition-duration) var(--seki-button-transition-timing),\n border-color var(--seki-button-transition-duration) var(--seki-button-transition-timing),\n color var(--seki-button-transition-duration) var(--seki-button-transition-timing),\n box-shadow var(--seki-button-transition-duration) var(--seki-button-transition-timing),\n text-decoration var(--seki-button-transition-duration) var(--seki-button-transition-timing);box-shadow:var(--seki-button-shadow);display:inline-flex;align-items:center;justify-content:center;gap:var(--seki-button-icon-gap)}.button:hover:not(:disabled){box-shadow:var(--seki-button-shadow-hover)}.button:focus-visible{outline:2px solid var(--seki-accent);outline-offset:2px}.button:disabled{opacity:var(--seki-button-disabled-opacity);cursor:not-allowed}.button--primary{background:var(--seki-button-primary-bg);color:var(--seki-button-primary-text);border-color:var(--seki-button-primary-border)}.button--primary:hover:not(:disabled){background:var(--seki-button-primary-hover-bg);color:var(--seki-button-primary-hover-text, var(--seki-button-primary-text));border-color:var(--seki-button-primary-hover-border)}.button--secondary{background:var(--seki-button-secondary-bg);color:var(--seki-button-secondary-text);border-color:var(--seki-button-secondary-border)}.button--secondary:hover:not(:disabled){background:var(--seki-button-secondary-hover-bg);color:var(--seki-button-secondary-hover-text, var(--seki-button-secondary-text));border-color:var(--seki-button-secondary-hover-border)}.button--outline{background:var(--seki-button-outline-bg);color:var(--seki-button-outline-text);border-color:var(--seki-button-outline-border)}.button--outline:hover:not(:disabled){background:var(--seki-button-outline-hover-bg);color:var(--seki-button-outline-hover-text);border-color:var(--seki-button-outline-hover-border)}.button--ghost{background:var(--seki-button-ghost-bg);color:var(--seki-button-ghost-text);border-color:var(--seki-button-ghost-border)}.button--ghost:hover:not(:disabled){background:var(--seki-button-ghost-hover-bg);color:var(--seki-button-ghost-hover-text);border-color:var(--seki-button-ghost-hover-border)}.button--destructive{background:var(--seki-button-destructive-bg);color:var(--seki-button-destructive-text);border-color:var(--seki-button-destructive-border)}.button--destructive:hover:not(:disabled){background:var(--seki-button-destructive-hover-bg);color:var(--seki-button-destructive-text);border-color:var(--seki-button-destructive-hover-border)}.button--link{background:var(--seki-button-link-bg);color:var(--seki-button-link-text);border-color:var(--seki-button-link-border);text-decoration:none}.button--link:hover:not(:disabled){background:var(--seki-button-link-hover-bg);color:var(--seki-button-link-hover-text);border-color:var(--seki-button-link-hover-border);text-decoration:underline}.button--sm{padding:var(--seki-button-sm-padding-y) var(--seki-button-sm-padding-x);font-size:var(--seki-button-sm-font-size);height:var(--seki-button-sm-height)}.button--md{padding:var(--seki-button-md-padding-y) var(--seki-button-md-padding-x);font-size:var(--seki-button-md-font-size);height:var(--seki-button-md-height)}.button--lg{padding:var(--seki-button-lg-padding-y) var(--seki-button-lg-padding-x);font-size:var(--seki-button-lg-font-size);height:var(--seki-button-lg-height)}.button--icon-sm{width:var(--seki-button-icon-sm-size);height:var(--seki-button-icon-sm-size);padding:0}.button--icon{width:var(--seki-button-icon-size);height:var(--seki-button-icon-size);padding:0}.button--icon-lg{width:var(--seki-button-icon-lg-size);height:var(--seki-button-icon-lg-size);padding:0}@media (prefers-reduced-motion: reduce){.button{transition:none}}";
4
+
5
+ const SekiButton$1 = /*@__PURE__*/ proxyCustomElement(class SekiButton extends H {
6
+ constructor(registerHost) {
7
+ super();
8
+ if (registerHost !== false) {
9
+ this.__registerHost();
10
+ }
11
+ this.__attachShadow();
12
+ /**
13
+ * Visual style variant of the button
14
+ */
15
+ this.variant = 'primary';
16
+ /**
17
+ * Size of the button. Use icon-sm, icon, or icon-lg for icon-only buttons.
18
+ */
19
+ this.size = 'md';
20
+ /**
21
+ * Whether the button is disabled
22
+ */
23
+ this.disabled = false;
24
+ /**
25
+ * Button type attribute
26
+ */
27
+ this.type = 'button';
28
+ }
29
+ componentWillLoad() {
30
+ // Dev mode warning for missing aria-label on icon-only buttons
31
+ const isIconOnlySize = this.size === 'icon-sm' || this.size === 'icon' || this.size === 'icon-lg';
32
+ if (isIconOnlySize && !this.ariaLabel) {
33
+ console.warn(`[seki-button] Icon-only button (size="${this.size}") requires aria-label for accessibility. ` +
34
+ `Please add aria-label prop to provide an accessible name for screen readers.`);
35
+ }
36
+ }
37
+ render() {
38
+ return (h("button", { key: '3cc4cf0af6075fbe012388fa5adb953b64a2b1ca', class: `button button--${this.variant} button--${this.size}`, type: this.type, disabled: this.disabled, "aria-disabled": this.disabled ? 'true' : null, "aria-label": this.ariaLabel }, h("slot", { key: '7c90c49539e6721b6580a07c3f97e20148734b05' })));
39
+ }
40
+ static get style() { return sekiButtonCss; }
41
+ }, [257, "seki-button", {
42
+ "variant": [1],
43
+ "size": [1],
44
+ "disabled": [4],
45
+ "type": [1],
46
+ "ariaLabel": [1, "aria-label"]
47
+ }]);
48
+ function defineCustomElement$1() {
49
+ if (typeof customElements === "undefined") {
50
+ return;
51
+ }
52
+ const components = ["seki-button"];
53
+ components.forEach(tagName => { switch (tagName) {
54
+ case "seki-button":
55
+ if (!customElements.get(tagName)) {
56
+ customElements.define(tagName, SekiButton$1);
57
+ }
58
+ break;
59
+ } });
60
+ }
61
+ defineCustomElement$1();
62
+
63
+ const SekiButton = SekiButton$1;
64
+ const defineCustomElement = defineCustomElement$1;
65
+
66
+ export { SekiButton, defineCustomElement };
@@ -0,0 +1,11 @@
1
+ import type { Components, JSX } from "../types/components";
2
+
3
+ interface SekiFieldDescription extends Components.SekiFieldDescription, HTMLElement {}
4
+ export const SekiFieldDescription: {
5
+ prototype: SekiFieldDescription;
6
+ new (): SekiFieldDescription;
7
+ };
8
+ /**
9
+ * Used to define this component and all nested components recursively.
10
+ */
11
+ export const defineCustomElement: () => void;