crayon-design-system-ui 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/README.md +487 -0
  2. package/dist/angular/index.d.ts +614 -0
  3. package/dist/angular/index.d.ts.map +1 -0
  4. package/dist/angular/index.js +209 -0
  5. package/dist/assets/attributes-o88QCNuy.js +1 -0
  6. package/dist/assets/custom-element-CN6vLcFC.js +2 -0
  7. package/dist/assets/each-DkX3FjFL.js +1 -0
  8. package/dist/assets/if-DdiIl-sg.js +1 -0
  9. package/dist/assets/index-client-CiUbrQq_.js +1 -0
  10. package/dist/assets/lifecycle-BK5NY8qp.js +2 -0
  11. package/dist/assets/props-DbUVX42-.js +1 -0
  12. package/dist/assets/slot-CRFQJtYY.js +1 -0
  13. package/dist/assets/this-DllEouAd.js +1 -0
  14. package/dist/components/accordion/Accordion.d.ts +1 -0
  15. package/dist/components/accordion/Accordion.js +5 -0
  16. package/dist/components/accordion/Accordion.svelte +203 -0
  17. package/dist/components/accordion/Accordion.svelte.d.ts +19 -0
  18. package/dist/components/accordion-item/AccordionItem.d.ts +1 -0
  19. package/dist/components/accordion-item/AccordionItem.js +3 -0
  20. package/dist/components/accordion-item/AccordionItem.svelte +159 -0
  21. package/dist/components/accordion-item/AccordionItem.svelte.d.ts +18 -0
  22. package/dist/components/avatar/Avatar.d.ts +1 -0
  23. package/dist/components/avatar/Avatar.js +4 -0
  24. package/dist/components/avatar/Avatar.svelte +132 -0
  25. package/dist/components/avatar/Avatar.svelte.d.ts +24 -0
  26. package/dist/components/button/Button.d.ts +1 -0
  27. package/dist/components/button/Button.js +35 -0
  28. package/dist/components/button/Button.svelte +254 -0
  29. package/dist/components/button/Button.svelte.d.ts +31 -0
  30. package/dist/components/card/Card.d.ts +1 -0
  31. package/dist/components/card/Card.js +29 -0
  32. package/dist/components/card/Card.svelte +244 -0
  33. package/dist/components/card/Card.svelte.d.ts +27 -0
  34. package/dist/components/checkbox/Checkbox.d.ts +1 -0
  35. package/dist/components/checkbox/Checkbox.js +23 -0
  36. package/dist/components/checkbox/Checkbox.svelte +196 -0
  37. package/dist/components/checkbox/Checkbox.svelte.d.ts +28 -0
  38. package/dist/components/form/Form.d.ts +1 -0
  39. package/dist/components/form/Form.js +4 -0
  40. package/dist/components/form/Form.svelte +54 -0
  41. package/dist/components/form/Form.svelte.d.ts +29 -0
  42. package/dist/components/form-select/FormSelect.d.ts +1 -0
  43. package/dist/components/form-select/FormSelect.js +20 -0
  44. package/dist/components/form-select/FormSelect.svelte +244 -0
  45. package/dist/components/form-select/FormSelect.svelte.d.ts +41 -0
  46. package/dist/components/form-select/FormSelectOption.d.ts +1 -0
  47. package/dist/components/form-select/FormSelectOption.js +3 -0
  48. package/dist/components/form-select/FormSelectOption.svelte +10 -0
  49. package/dist/components/form-select/FormSelectOption.svelte.d.ts +20 -0
  50. package/dist/components/input/Input.d.ts +1 -0
  51. package/dist/components/input/Input.js +24 -0
  52. package/dist/components/input/Input.svelte +429 -0
  53. package/dist/components/input/Input.svelte.d.ts +48 -0
  54. package/dist/components/label/Label.d.ts +1 -0
  55. package/dist/components/label/Label.js +3 -0
  56. package/dist/components/label/Label.svelte +74 -0
  57. package/dist/components/label/Label.svelte.d.ts +23 -0
  58. package/dist/components/radio/Radio.d.ts +1 -0
  59. package/dist/components/radio/Radio.js +16 -0
  60. package/dist/components/radio/Radio.svelte +147 -0
  61. package/dist/components/radio/Radio.svelte.d.ts +26 -0
  62. package/dist/components/textarea/Textarea.d.ts +1 -0
  63. package/dist/components/textarea/Textarea.js +5 -0
  64. package/dist/components/textarea/Textarea.svelte +122 -0
  65. package/dist/components/textarea/Textarea.svelte.d.ts +34 -0
  66. package/dist/index.d.ts +14 -0
  67. package/dist/index.js +13 -0
  68. package/dist/react/index.d.ts +24 -0
  69. package/dist/react/index.d.ts.map +1 -0
  70. package/dist/react/index.js +26 -0
  71. package/dist/register/accordion-item.d.ts +1 -0
  72. package/dist/register/accordion-item.js +4 -0
  73. package/dist/register/accordion.d.ts +1 -0
  74. package/dist/register/accordion.js +4 -0
  75. package/dist/register/avatar.d.ts +1 -0
  76. package/dist/register/avatar.js +4 -0
  77. package/dist/register/button.d.ts +1 -0
  78. package/dist/register/button.js +4 -0
  79. package/dist/register/card.d.ts +1 -0
  80. package/dist/register/card.js +4 -0
  81. package/dist/register/checkbox.d.ts +1 -0
  82. package/dist/register/checkbox.js +4 -0
  83. package/dist/register/form-select-option.d.ts +1 -0
  84. package/dist/register/form-select-option.js +4 -0
  85. package/dist/register/form-select.d.ts +1 -0
  86. package/dist/register/form-select.js +4 -0
  87. package/dist/register/form.d.ts +1 -0
  88. package/dist/register/form.js +4 -0
  89. package/dist/register/input.d.ts +1 -0
  90. package/dist/register/input.js +4 -0
  91. package/dist/register/label.d.ts +1 -0
  92. package/dist/register/label.js +4 -0
  93. package/dist/register/radio.d.ts +1 -0
  94. package/dist/register/radio.js +4 -0
  95. package/dist/register/textarea.d.ts +1 -0
  96. package/dist/register/textarea.js +4 -0
  97. package/dist/register.d.ts +1 -0
  98. package/dist/register.d.ts.map +1 -0
  99. package/dist/register.js +18 -0
  100. package/dist/tokens.css +184 -0
  101. package/dist-browser/assets/Accordion-CwOMoX3u.js +3 -0
  102. package/dist-browser/assets/AccordionItem-CuTFqdt6.js +1 -0
  103. package/dist-browser/assets/Avatar-Ct0ZUf_m.js +2 -0
  104. package/dist-browser/assets/Button-BvYyhPrn.js +33 -0
  105. package/dist-browser/assets/Card-DM0rPY9s.js +27 -0
  106. package/dist-browser/assets/Checkbox-DK1LWC1i.js +21 -0
  107. package/dist-browser/assets/Form-BZFKnk3f.js +2 -0
  108. package/dist-browser/assets/FormSelect-CBTpNNrh.js +18 -0
  109. package/dist-browser/assets/FormSelectOption-DhOxPDjS.js +1 -0
  110. package/dist-browser/assets/Input-DZZF_45U.js +22 -0
  111. package/dist-browser/assets/Label-BX3_KNGn.js +1 -0
  112. package/dist-browser/assets/Radio-Bwape_rC.js +14 -0
  113. package/dist-browser/assets/Textarea-BYsLYgK4.js +3 -0
  114. package/dist-browser/assets/attributes-BN21YWvK.js +1 -0
  115. package/dist-browser/assets/custom-element-vZIc-tZM.js +2 -0
  116. package/dist-browser/assets/each-CDVyljdy.js +1 -0
  117. package/dist-browser/assets/if-B3xMWYuB.js +1 -0
  118. package/dist-browser/assets/index-client-BMTknfvN.js +1 -0
  119. package/dist-browser/assets/lifecycle-BSCLFPkh.js +2 -0
  120. package/dist-browser/assets/props-DClXGNhw.js +1 -0
  121. package/dist-browser/assets/slot-Btw_EhJQ.js +1 -0
  122. package/dist-browser/assets/this-CobEtPHm.js +1 -0
  123. package/dist-browser/bundle.js +2 -0
  124. package/dist-browser/tokens.css +184 -0
  125. package/package.json +89 -0
@@ -0,0 +1,429 @@
1
+ <svelte:options customElement="ui-input" />
2
+
3
+ <script>
4
+ export let value = "";
5
+ export let type = "text";
6
+ export let placeholder = "";
7
+ export let name = void 0;
8
+ export let id = void 0;
9
+ export let size = "md";
10
+ export let disabled = false;
11
+ export let readonly = false;
12
+ export let required = false;
13
+ export let variant = "default";
14
+ export let validationState = void 0;
15
+ export let autocomplete = void 0;
16
+ export let min = void 0;
17
+ export let max = void 0;
18
+ export let step = void 0;
19
+ export let maxlength = void 0;
20
+ export let minlength = void 0;
21
+ export let pattern = void 0;
22
+ export let ariaLabel = void 0;
23
+ export let ariaDescribedby = void 0;
24
+ export let oninput = void 0;
25
+ export let onchange = void 0;
26
+ export let extraClass = "";
27
+ $: hasValue = value !== "";
28
+ $: wrapperClass = `input-wrapper ${size} variant-${variant} ${validationState ? `state-${validationState}` : ""} ${hasValue ? "has-value" : ""} ${extraClass}`.trim();
29
+ $: inputType = variant === "search" ? "search" : type;
30
+ let showPassword = false;
31
+ $: effectiveInputType = type === "password" ? showPassword ? "text" : "password" : inputType;
32
+ function togglePassword() {
33
+ if (type !== "password" || disabled) return;
34
+ showPassword = !showPassword;
35
+ }
36
+ function getHost(el) {
37
+ const root = el.getRootNode();
38
+ return root instanceof ShadowRoot ? root.host : null;
39
+ }
40
+ function handleInput(event) {
41
+ const target = event.target;
42
+ value = target.value;
43
+ const detail = { value };
44
+ oninput?.(detail);
45
+ const host = getHost(target);
46
+ host?.dispatchEvent(new CustomEvent("input", { detail, bubbles: true }));
47
+ }
48
+ function handleChange(event) {
49
+ const target = event.target;
50
+ value = target.value;
51
+ const detail = { value };
52
+ onchange?.(detail);
53
+ const host = getHost(target);
54
+ host?.dispatchEvent(new CustomEvent("change", { detail, bubbles: true }));
55
+ }
56
+ </script>
57
+
58
+ <div
59
+ class={wrapperClass}
60
+ role="presentation"
61
+ >
62
+ {#if variant === "search"}
63
+ <span class="input-icon input-icon-leading" aria-hidden="true">
64
+ <svg
65
+ xmlns="http://www.w3.org/2000/svg"
66
+ width="18"
67
+ height="18"
68
+ viewBox="0 0 24 24"
69
+ fill="none"
70
+ stroke="currentColor"
71
+ stroke-width="2"
72
+ stroke-linecap="round"
73
+ stroke-linejoin="round"
74
+ >
75
+ <circle cx="11" cy="11" r="8"></circle>
76
+ <path d="m21 21-4.35-4.35"></path>
77
+ </svg>
78
+ </span>
79
+ {/if}
80
+ <input
81
+ type={effectiveInputType}
82
+ {value}
83
+ {placeholder}
84
+ {name}
85
+ {id}
86
+ {disabled}
87
+ {readonly}
88
+ {required}
89
+ autocomplete={autocomplete}
90
+ {min}
91
+ {max}
92
+ {step}
93
+ {maxlength}
94
+ {minlength}
95
+ {pattern}
96
+ class="input-el {variant === 'search'
97
+ ? 'has-leading-icon'
98
+ : ''} {validationState || disabled || type === 'password'
99
+ ? 'has-trailing-icon'
100
+ : ''}"
101
+ aria-label={ariaLabel}
102
+ aria-describedby={ariaDescribedby}
103
+ aria-invalid={validationState === "error" ? "true" : undefined}
104
+ oninput={handleInput}
105
+ onchange={handleChange}
106
+ />
107
+ {#if disabled}
108
+ <span
109
+ class="input-icon input-icon-trailing input-icon-disabled"
110
+ aria-hidden="true"
111
+ >
112
+ <svg
113
+ xmlns="http://www.w3.org/2000/svg"
114
+ width="16"
115
+ height="16"
116
+ viewBox="0 0 16 16"
117
+ fill="none"
118
+ >
119
+ <path
120
+ fill-rule="evenodd"
121
+ clip-rule="evenodd"
122
+ d="M11.9973 4.5167C11.9184 2.37704 10.159 0.666656 8.00004 0.666656C5.7909 0.666656 4.00004 2.45752 4.00004 4.66666V6.66666H3.33337C2.2288 6.66666 1.33337 7.56209 1.33337 8.66666V13.3333C1.33337 14.4379 2.2288 15.3333 3.33337 15.3333H12.6667C13.7713 15.3333 14.6667 14.4379 14.6667 13.3333V8.66666C14.6667 7.56209 13.7713 6.66666 12.6667 6.66666H12V4.66666L11.9973 4.5167ZM11.3342 7.99999C11.3339 7.99999 11.3336 7.99999 11.3334 7.99999C11.3331 7.99999 11.3328 7.99999 11.3326 7.99999H4.66751C4.66724 7.99999 4.66698 7.99999 4.66671 7.99999C4.66644 7.99999 4.66617 7.99999 4.6659 7.99999H3.33337C2.96518 7.99999 2.66671 8.29847 2.66671 8.66666V13.3333C2.66671 13.7015 2.96518 14 3.33337 14H12.6667C13.0349 14 13.3334 13.7015 13.3334 13.3333V8.66666C13.3334 8.29847 13.0349 7.99999 12.6667 7.99999H11.3342ZM5.33337 6.66666H10.6667V4.66666C10.6667 3.1939 9.4728 1.99999 8.00004 1.99999C6.57191 1.99999 5.40599 3.12264 5.33664 4.53356L5.33337 4.66666V6.66666Z"
123
+ fill="#BDBDBC"
124
+ />
125
+ </svg>
126
+ </span>
127
+ {:else if type === "password"}
128
+ <button
129
+ type="button"
130
+ class="input-icon input-icon-trailing input-icon-password-toggle"
131
+ aria-label={showPassword ? "Hide password" : "Show password"}
132
+ tabindex="-1"
133
+ onclick={togglePassword}
134
+ onkeydown={(e) => e.key === "Enter" && togglePassword()}
135
+ >
136
+ {#if showPassword}
137
+ <slot name="password-toggle-visible">
138
+ <!-- Default: eye-off (hide password) -->
139
+ <svg
140
+ xmlns="http://www.w3.org/2000/svg"
141
+ width="20"
142
+ height="20"
143
+ viewBox="0 0 24 24"
144
+ fill="none"
145
+ stroke="currentColor"
146
+ stroke-width="2"
147
+ stroke-linecap="round"
148
+ stroke-linejoin="round"
149
+ aria-hidden="true"
150
+ >
151
+ <path
152
+ d="M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49"
153
+ />
154
+ <path d="M14.084 14.158a3 3 0 0 1-4.242-4.242" />
155
+ <path
156
+ d="M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-4.444"
157
+ />
158
+ <path d="m2 2 20 20" />
159
+ </svg>
160
+ </slot>
161
+ {:else}
162
+ <slot name="password-toggle-hidden">
163
+ <!-- Default: eye (show password) -->
164
+ <svg
165
+ xmlns="http://www.w3.org/2000/svg"
166
+ width="20"
167
+ height="20"
168
+ viewBox="0 0 24 24"
169
+ fill="none"
170
+ stroke="currentColor"
171
+ stroke-width="2"
172
+ stroke-linecap="round"
173
+ stroke-linejoin="round"
174
+ aria-hidden="true"
175
+ >
176
+ <path d="M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z" />
177
+ <circle cx="12" cy="12" r="3" />
178
+ </svg>
179
+ </slot>
180
+ {/if}
181
+ </button>
182
+ {:else if validationState === "error"}
183
+ <span
184
+ class="input-icon input-icon-trailing input-icon-error"
185
+ aria-hidden="true"
186
+ >
187
+ <svg
188
+ xmlns="http://www.w3.org/2000/svg"
189
+ width="16"
190
+ height="16"
191
+ viewBox="0 0 16 16"
192
+ fill="none"
193
+ >
194
+ <path
195
+ fill-rule="evenodd"
196
+ clip-rule="evenodd"
197
+ d="M7.99996 0.666672C3.94987 0.666672 0.666626 3.94992 0.666626 8C0.666626 12.0501 3.94987 15.3333 7.99996 15.3333C12.05 15.3333 15.3333 12.0501 15.3333 8C15.3333 3.94992 12.05 0.666672 7.99996 0.666672ZM7.99996 2.00001C11.3137 2.00001 14 4.6863 14 8.00001C14 11.3137 11.3137 14 7.99996 14C4.68625 14 1.99996 11.3137 1.99996 8.00001C1.99996 4.6863 4.68625 2.00001 7.99996 2.00001ZM7.99996 4.66667C8.34185 4.66667 8.62363 4.92403 8.66214 5.25559L8.66663 5.33334V8.00001C8.66663 8.3682 8.36815 8.66667 7.99996 8.66667C7.65807 8.66667 7.37629 8.40931 7.33778 8.07775L7.33329 8.00001V5.33334C7.33329 4.96515 7.63177 4.66667 7.99996 4.66667ZM8.67329 10.6667C8.67329 10.2985 8.37482 10 8.00663 10L7.92221 10.0045C7.59065 10.043 7.33329 10.3248 7.33329 10.6667C7.33329 11.0349 7.63177 11.3333 7.99996 11.3333L8.08437 11.3289C8.41593 11.2903 8.67329 11.0086 8.67329 10.6667Z"
198
+ fill="#E03E52"
199
+ />
200
+ </svg>
201
+ </span>
202
+ {:else if validationState === "success"}
203
+ <span
204
+ class="input-icon input-icon-trailing input-icon-success"
205
+ aria-hidden="true"
206
+ >
207
+ <svg
208
+ xmlns="http://www.w3.org/2000/svg"
209
+ width="16"
210
+ height="16"
211
+ viewBox="0 0 16 16"
212
+ fill="none"
213
+ >
214
+ <path
215
+ fill-rule="evenodd"
216
+ clip-rule="evenodd"
217
+ d="M12.8619 4.19526C13.1223 3.93491 13.5444 3.93491 13.8047 4.19526C14.0451 4.43558 14.0635 4.81374 13.8602 5.07527L13.8047 5.13807L6.4714 12.4714C6.23108 12.7117 5.85293 12.7302 5.5914 12.5269L5.5286 12.4714L2.19526 9.13807C1.93491 8.87772 1.93491 8.45561 2.19526 8.19526C2.43558 7.95494 2.81374 7.93645 3.07527 8.1398L3.13807 8.19526L6 11.0567L12.8619 4.19526Z"
218
+ fill="#222121"
219
+ />
220
+ </svg>
221
+ </span>
222
+ {/if}
223
+ </div>
224
+
225
+ <style>
226
+ .input-wrapper {
227
+ position: relative;
228
+ display: flex;
229
+ align-items: center;
230
+ width: 100%;
231
+ border-radius: var(--ui-input-border-radius, 8px);
232
+ border: var(--ui-input-border-width, 1px) solid
233
+ var(--ui-input-border-color-default, #e0e0e0);
234
+ background-color: var(--ui-input-bg, #feffff);
235
+ transition:
236
+ border-color 0.15s ease-in-out,
237
+ box-shadow 0.15s ease-in-out;
238
+ box-sizing: border-box;
239
+ }
240
+
241
+ /* Basic/Default: purple border when empty */
242
+ .input-wrapper:not(.has-value):not(.state-error):not(.state-success) {
243
+ border-color: var(--ui-input-border-color-default, #e0e0e0);
244
+ }
245
+
246
+ /* Data: grey border when has value, not focused */
247
+ .input-wrapper.has-value:not(.state-error):not(.state-success):focus-within {
248
+ border-color: var(--ui-input-focus-border-color, #2563eb);
249
+ }
250
+
251
+ .input-wrapper.has-value:not(.state-error):not(.state-success):not(
252
+ :focus-within
253
+ ) {
254
+ border-color: var(--ui-input-border-color-data, #e0e0e0);
255
+ }
256
+
257
+ /* Active (focus): blue border */
258
+ .input-wrapper:focus-within:not(.state-error):not(.state-success) {
259
+ border-color: var(--ui-input-focus-border-color, #2563eb);
260
+ box-shadow: 0 0 0 0.2rem var(--ui-input-focus-ring, rgba(37, 99, 235, 0.25));
261
+ }
262
+
263
+ /* Error state */
264
+ .input-wrapper.state-error {
265
+ border-color: var(--ui-input-error-border-color, #dc2626);
266
+ }
267
+
268
+ .input-wrapper.state-error:focus-within {
269
+ box-shadow: 0 0 0 0.2rem var(--ui-input-error-ring, rgba(220, 38, 38, 0.25));
270
+ }
271
+
272
+ /* Success state */
273
+ .input-wrapper.state-success {
274
+ border-color: var(--ui-input-success-border-color, #16a34a);
275
+ }
276
+
277
+ .input-wrapper.state-success:focus-within {
278
+ box-shadow: 0 0 0 0.2rem
279
+ var(--ui-input-success-ring, rgba(22, 163, 74, 0.25));
280
+ }
281
+
282
+ /* Disabled: light grey border and bg */
283
+ .input-el:disabled {
284
+ background-color: var(--ui-input-disabled-bg, #e9ecef);
285
+ color: var(--ui-input-disabled-color, #6c757d);
286
+ cursor: not-allowed;
287
+ }
288
+
289
+ .input-wrapper:has(:disabled) {
290
+ border-color: var(--ui-input-disabled-border-color, #dee2e6);
291
+ background-color: var(--ui-input-disabled-bg, #e9ecef);
292
+ }
293
+
294
+ .input-el {
295
+ display: block;
296
+ flex: 1;
297
+ min-width: 0;
298
+ padding: var(--ui-input-padding-y, 9px) var(--ui-input-padding-x, 16px);
299
+ font-family: inherit;
300
+ font-size: var(--ui-input-font-size, 14px);
301
+ line-height: 1.5;
302
+ color: var(--ui-input-color, #222121);
303
+ background: transparent;
304
+ border: none;
305
+ outline: 0;
306
+ box-shadow: none;
307
+ box-sizing: border-box;
308
+ }
309
+
310
+ .input-el::placeholder {
311
+ color: var(--ui-input-placeholder-color, #bdbdbc);
312
+ }
313
+
314
+ .input-el.has-leading-icon {
315
+ padding-left: 2.5rem !important;
316
+ }
317
+
318
+ .input-el.has-trailing-icon {
319
+ padding-right: 2.5rem !important;
320
+ }
321
+
322
+ .input-icon {
323
+ position: absolute;
324
+ top: 50%;
325
+ transform: translateY(-50%);
326
+ display: flex;
327
+ align-items: center;
328
+ justify-content: center;
329
+ pointer-events: none;
330
+ color: var(--ui-input-icon-color, #6b7280);
331
+ }
332
+
333
+ .input-icon-leading {
334
+ left: var(--ui-input-padding-x, 16px);
335
+ color: var(--ui-input-search-icon-color, #6b7280);
336
+ }
337
+
338
+ .input-wrapper.variant-search:focus-within .input-icon-leading {
339
+ color: var(--ui-input-focus-border-color, #2563eb);
340
+ }
341
+
342
+ .input-wrapper:has(:disabled) .input-icon-leading {
343
+ color: var(--ui-input-disabled-color, #6c757d);
344
+ }
345
+
346
+ .input-icon-trailing {
347
+ right: var(--ui-input-padding-x, 16px);
348
+ }
349
+
350
+ .input-icon-error {
351
+ color: var(--ui-input-error-icon-color, #dc2626);
352
+ }
353
+
354
+ .input-icon-success {
355
+ color: var(--ui-input-success-icon-color, #16a34a);
356
+ }
357
+
358
+ .input-icon-disabled {
359
+ color: var(--ui-input-disabled-color, #6c757d);
360
+ }
361
+
362
+ .input-icon-password-toggle {
363
+ pointer-events: auto;
364
+ padding: 0;
365
+ margin: 0;
366
+ border: none;
367
+ background: transparent;
368
+ cursor: pointer;
369
+ color: var(--ui-input-icon-color, #6b7280);
370
+ }
371
+
372
+ .input-icon-password-toggle:hover {
373
+ color: var(--ui-input-focus-border-color, #2563eb);
374
+ }
375
+
376
+ /* Sizes */
377
+ .input-wrapper.sm .input-el {
378
+ padding: var(--ui-input-padding-y-sm, 0.25rem)
379
+ var(--ui-input-padding-x-sm, 0.5rem);
380
+ font-size: var(--ui-input-font-size-sm, 0.875rem);
381
+ }
382
+
383
+ .input-wrapper.sm {
384
+ border-radius: var(--ui-input-border-radius-sm, 0.25rem);
385
+ }
386
+
387
+ .input-wrapper.sm .input-el.has-leading-icon {
388
+ padding-left: 1.75rem;
389
+ }
390
+
391
+ .input-wrapper.sm .input-el.has-trailing-icon {
392
+ padding-right: 1.75rem;
393
+ }
394
+
395
+ .input-wrapper.sm .input-icon-leading {
396
+ left: 0.5rem;
397
+ }
398
+
399
+ .input-wrapper.sm .input-icon-trailing {
400
+ right: 0.5rem;
401
+ }
402
+
403
+ .input-wrapper.md .input-el {
404
+ padding: var(--ui-input-padding-y, 9px) var(--ui-input-padding-x, 16px);
405
+ font-size: var(--ui-input-font-size, 14px);
406
+ }
407
+
408
+ .input-wrapper.md {
409
+ border-radius: var(--ui-input-border-radius, 8px);
410
+ }
411
+
412
+ .input-wrapper.lg .input-el {
413
+ padding: var(--ui-input-padding-y-lg, 0.5rem)
414
+ var(--ui-input-padding-x-lg, 1rem);
415
+ font-size: var(--ui-input-font-size-lg, 1.25rem);
416
+ }
417
+
418
+ .input-wrapper.lg {
419
+ border-radius: var(--ui-input-border-radius-lg, 0.5rem);
420
+ }
421
+
422
+ .input-wrapper.lg .input-el.has-leading-icon {
423
+ padding-left: 2.75rem;
424
+ }
425
+
426
+ .input-wrapper.lg .input-el.has-trailing-icon {
427
+ padding-right: 2.75rem;
428
+ }
429
+ </style>
@@ -0,0 +1,48 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ /**
5
+ * Current value. In Svelte, use value={x} and oninput={(e) => x = e.detail.value} instead of bind:value
6
+ * (bind:value is not supported on custom elements).
7
+ */ value?: string;
8
+ type?: string;
9
+ placeholder?: string;
10
+ name?: string | undefined;
11
+ id?: string | undefined;
12
+ size?: "sm" | "md" | "lg";
13
+ disabled?: boolean;
14
+ readonly?: boolean;
15
+ required?: boolean;
16
+ /** Visual variant: default (basic) or search (with leading magnifying glass). */ variant?: "default" | "search";
17
+ /** Validation state: error (red + exclamation) or success (green + checkmark). When set, overrides border/icon. */ validationState?: "error" | "success" | undefined;
18
+ autocomplete?: string | undefined;
19
+ min?: string | undefined;
20
+ max?: string | undefined;
21
+ step?: string | undefined;
22
+ maxlength?: number | undefined;
23
+ minlength?: number | undefined;
24
+ pattern?: string | undefined;
25
+ ariaLabel?: string | undefined;
26
+ ariaDescribedby?: string | undefined;
27
+ /** Callback when value changes on input (Svelte 5 replacement for deprecated createEventDispatcher). */ oninput?: ((detail: {
28
+ value: string;
29
+ }) => void) | undefined;
30
+ /** Callback when value is committed on change (Svelte 5 replacement for deprecated createEventDispatcher). */ onchange?: ((detail: {
31
+ value: string;
32
+ }) => void) | undefined;
33
+ /** Extra class(es) for the inner wrapper (e.g. full-width). Set via the extra-class attribute. */ extraClass?: string;
34
+ };
35
+ events: {
36
+ [evt: string]: CustomEvent<any>;
37
+ };
38
+ slots: {
39
+ 'password-toggle-visible': {};
40
+ 'password-toggle-hidden': {};
41
+ };
42
+ };
43
+ export type InputProps = typeof __propDef.props;
44
+ export type InputEvents = typeof __propDef.events;
45
+ export type InputSlots = typeof __propDef.slots;
46
+ export default class Input extends SvelteComponentTyped<InputProps, InputEvents, InputSlots> {
47
+ }
48
+ export {};
@@ -0,0 +1 @@
1
+ export { default } from "./Label.svelte";
@@ -0,0 +1,3 @@
1
+ import{c as y,p as q,l as S,d,a as C,e as I,t as k,i as m,j as B,k as g,b as x,n as l,s as E,r as p,g as F,m as L}from"../../assets/custom-element-CN6vLcFC.js";import{i as M}from"../../assets/if-DdiIl-sg.js";import{s as U}from"../../assets/slot-CRFQJtYY.js";import{a as A,i as D,s as G,c as H}from"../../assets/lifecycle-BK5NY8qp.js";import{s as J}from"../../assets/attributes-o88QCNuy.js";import{p as s}from"../../assets/props-DbUVX42-.js";var K=g('<span class="label-required svelte-10jnxwn" aria-hidden="true">*</span>'),N=g('<label><span class="label-text svelte-10jnxwn"><!></span> <!></label>');const O={hash:"svelte-10jnxwn",code:'.label-root.svelte-10jnxwn {display:inline-flex;align-items:baseline;gap:0.25rem;font-family:system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-weight:500;line-height:1.3;color:var(--ui-label-color, #111827);cursor:default;}.label-root.is-disabled.svelte-10jnxwn {color:var(--ui-label-disabled-color, #9ca3af);cursor:not-allowed;}.label-root.state-error.svelte-10jnxwn {color:var(--ui-label-error-color, #dc2626);}.label-root.state-success.svelte-10jnxwn {color:var(--ui-label-success-color, #16a34a);}.label-root.size-sm.svelte-10jnxwn {font-size:var(--ui-label-font-size-sm, 12px);}.label-root.size-md.svelte-10jnxwn {font-size:var(--ui-label-font-size-md, 14px);}.label-root.size-lg.svelte-10jnxwn {font-size:var(--ui-label-font-size-lg, 16px);}.label-text.svelte-10jnxwn {display:inline;}.label-required.svelte-10jnxwn {color:var(--ui-label-required-color, #dc2626);font-weight:600;}.label-root.is-disabled.svelte-10jnxwn .label-required:where(.svelte-10jnxwn) {color:var(--ui-label-disabled-color, #9ca3af);}'};function P(b,a){q(a,!1),A(b,O);const v=L();let f=s(a,"forId",12,void 0),u=s(a,"required",12,!1),i=s(a,"disabled",12,!1),o=s(a,"size",12,"md"),t=s(a,"validationState",12,void 0),n=s(a,"extraClass",12,"");S(()=>(d(o()),d(i()),d(t()),d(n())),()=>{E(v,`label-root size-${o()} ${i()?"is-disabled":""} ${t()?`state-${t()}`:""} ${n()}`.trim())}),C();var w={get forId(){return f()},set forId(e){f(e),l()},get required(){return u()},set required(e){u(e),l()},get disabled(){return i()},set disabled(e){i(e),l()},get size(){return o()},set size(e){o(e),l()},get validationState(){return t()},set validationState(e){t(e),l()},get extraClass(){return n()},set extraClass(e){n(e),l()}};D();var r=N(),c=x(r),_=x(c);U(_,a,"default",{},null),p(c);var j=I(c,2);{var z=e=>{var h=K();m(e,h)};M(j,e=>{u()&&e(z)})}return p(r),k(()=>{G(r,1,H(F(v)),"svelte-10jnxwn"),J(r,"for",f())}),m(b,r),B(w)}const __Default = (y(P,{forId:{},required:{},disabled:{},size:{},validationState:{},extraClass:{}},["default"],[],{mode:"open"}));
2
+ customElements.define("ui-label", __Default);
3
+ export default __Default;
@@ -0,0 +1,74 @@
1
+ <svelte:options customElement="ui-label" />
2
+
3
+ <script>
4
+ export let forId = void 0;
5
+ export let required = false;
6
+ export let disabled = false;
7
+ export let size = "md";
8
+ export let validationState = void 0;
9
+ export let extraClass = "";
10
+ $: rootClass = `label-root size-${size} ${disabled ? "is-disabled" : ""} ${validationState ? `state-${validationState}` : ""} ${extraClass}`.trim();
11
+ </script>
12
+
13
+ <label
14
+ class={rootClass}
15
+ for={forId}
16
+ >
17
+ <span class="label-text">
18
+ <slot />
19
+ </span>
20
+ {#if required}
21
+ <span class="label-required" aria-hidden="true">*</span>
22
+ {/if}
23
+ </label>
24
+
25
+ <style>
26
+ .label-root {
27
+ display: inline-flex;
28
+ align-items: baseline;
29
+ gap: 0.25rem;
30
+ font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
31
+ font-weight: 500;
32
+ line-height: 1.3;
33
+ color: var(--ui-label-color, #111827);
34
+ cursor: default;
35
+ }
36
+
37
+ .label-root.is-disabled {
38
+ color: var(--ui-label-disabled-color, #9ca3af);
39
+ cursor: not-allowed;
40
+ }
41
+
42
+ .label-root.state-error {
43
+ color: var(--ui-label-error-color, #dc2626);
44
+ }
45
+
46
+ .label-root.state-success {
47
+ color: var(--ui-label-success-color, #16a34a);
48
+ }
49
+
50
+ .label-root.size-sm {
51
+ font-size: var(--ui-label-font-size-sm, 12px);
52
+ }
53
+
54
+ .label-root.size-md {
55
+ font-size: var(--ui-label-font-size-md, 14px);
56
+ }
57
+
58
+ .label-root.size-lg {
59
+ font-size: var(--ui-label-font-size-lg, 16px);
60
+ }
61
+
62
+ .label-text {
63
+ display: inline;
64
+ }
65
+
66
+ .label-required {
67
+ color: var(--ui-label-required-color, #dc2626);
68
+ font-weight: 600;
69
+ }
70
+
71
+ .label-root.is-disabled .label-required {
72
+ color: var(--ui-label-disabled-color, #9ca3af);
73
+ }
74
+ </style>
@@ -0,0 +1,23 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ /** ID of the form control this label is associated with (sets the `for` attribute). */ forId?: string | undefined;
5
+ /** When true, shows a required indicator (e.g. asterisk) after the label text. */ required?: boolean;
6
+ /** Visual disabled state (e.g. muted color). */ disabled?: boolean;
7
+ /** Size; aligns with form control sizes (e.g. ui-input). */ size?: "sm" | "md" | "lg";
8
+ /** Validation state for form context: error (red) or success (green). */ validationState?: "error" | "success" | undefined;
9
+ /** Extra class(es) for the label element. Set via the extra-class attribute. */ extraClass?: string;
10
+ };
11
+ events: {
12
+ [evt: string]: CustomEvent<any>;
13
+ };
14
+ slots: {
15
+ default: {};
16
+ };
17
+ };
18
+ export type LabelProps = typeof __propDef.props;
19
+ export type LabelEvents = typeof __propDef.events;
20
+ export type LabelSlots = typeof __propDef.slots;
21
+ export default class Label extends SvelteComponentTyped<LabelProps, LabelEvents, LabelSlots> {
22
+ }
23
+ export {};
@@ -0,0 +1 @@
1
+ export { default } from "./Radio.svelte";
@@ -0,0 +1,16 @@
1
+ import{c as C,p as D,e as L,t as z,f as S,i as E,j as R,k as H,b as f,n as o,x as B,r as p}from"../../assets/custom-element-CN6vLcFC.js";import{s as F}from"../../assets/slot-CRFQJtYY.js";import{a as I,i as M,s as N}from"../../assets/lifecycle-BK5NY8qp.js";import{r as U,s as g,a as Y,d as q}from"../../assets/attributes-o88QCNuy.js";import{p as s}from"../../assets/props-DbUVX42-.js";var A=H('<label><span class="radio-control svelte-jsov6r"><input type="radio" class="svelte-jsov6r"/> <span class="radio-circle svelte-jsov6r" aria-hidden="true"></span></span> <span class="radio-label svelte-jsov6r"><!></span></label>');const G={hash:"svelte-jsov6r",code:`.radio-root.svelte-jsov6r {display:inline-flex;align-items:center;gap:0.5rem;font-family:system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI",\r
2
+ sans-serif;font-size:14px;line-height:1.3;color:var(--ui-radio-label-color, #111827);cursor:pointer;}.radio-control.svelte-jsov6r {position:relative;display:inline-flex;align-items:center;justify-content:center;}.radio-control.svelte-jsov6r input:where(.svelte-jsov6r) {position:absolute;inset:0;margin:0;opacity:0;cursor:inherit;}.radio-circle.svelte-jsov6r {width:var(--ui-radio-size, 22px);height:var(--ui-radio-size, 22px);border-radius:999px;box-sizing:border-box;border:2px solid var(--ui-radio-border-color, #111111);background-color:var(--ui-radio-bg, transparent);display:inline-flex;align-items:center;justify-content:center;transition:background-color 0.15s ease,\r
3
+ border-color 0.15s ease,\r
4
+ box-shadow 0.15s ease,\r
5
+ transform 0.1s ease;}.radio-circle.svelte-jsov6r::before {content:"";display:block;width:60%;height:60%;border-radius:inherit;background-color:transparent;box-shadow:0 0 0 0 transparent;opacity:0;transition:opacity 0.12s ease,\r
6
+ box-shadow 0.12s ease,\r
7
+ transform 0.12s ease;}\r
8
+ \r
9
+ /* Checked: purple ring with white center like screenshot */.radio-root.is-checked.svelte-jsov6r .radio-circle:where(.svelte-jsov6r) {background-color:var(--ui-radio-checked-bg, var(--ui-primary, #474bff));border-color:var(--ui-radio-checked-border, var(--ui-primary, #474bff));}.radio-root.is-checked.svelte-jsov6r .radio-circle:where(.svelte-jsov6r)::before {background-color:var(--ui-radio-inner, #ffffff);box-shadow:0 0 0 4px\r
10
+ var(--ui-radio-checked-bg, var(--ui-primary, #474bff));opacity:1;transform:scale(1);}\r
11
+ \r
12
+ /* Hover + focus */.radio-root.svelte-jsov6r:not(.is-disabled):hover .radio-circle:where(.svelte-jsov6r) {transform:translateY(-0.5px);}.radio-root.svelte-jsov6r:not(.is-disabled) .radio-control:where(.svelte-jsov6r) input:where(.svelte-jsov6r):focus-visible\r
13
+ + .radio-circle:where(.svelte-jsov6r) {box-shadow:0 0 0 3px\r
14
+ var(--ui-radio-focus-ring, rgba(71, 75, 255, 0.45));}.radio-root.is-disabled.svelte-jsov6r {cursor:not-allowed;color:var(--ui-radio-label-disabled, #9ca3af);}.radio-root.is-disabled.svelte-jsov6r .radio-circle:where(.svelte-jsov6r) {border-color:var(--ui-radio-border-disabled, #bdbdbc);background-color:var(--ui-radio-bg-disabled, #e5e7eb);}.radio-label.svelte-jsov6r:empty {display:none;}`};function J(m,r){D(r,!1),I(m,G);let i=s(r,"checked",12,!1),n=s(r,"disabled",12,!1),d=s(r,"name",12,void 0),c=s(r,"value",12,void 0),v=s(r,"ariaLabel",12,void 0),b=s(r,"ariaDescribedby",12,void 0),u=s(r,"onchange",12,void 0);function k(e){const t=e.getRootNode();return t instanceof ShadowRoot?t.host:null}function w(e){const t=e.target;if(!t.checked)return;i(!0);const y={checked:i()};u()?.(y),k(t)?.dispatchEvent(new CustomEvent("change",{detail:y,bubbles:!0}))}var x={get checked(){return i()},set checked(e){i(e),o()},get disabled(){return n()},set disabled(e){n(e),o()},get name(){return d()},set name(e){d(e),o()},get value(){return c()},set value(e){c(e),o()},get ariaLabel(){return v()},set ariaLabel(e){v(e),o()},get ariaDescribedby(){return b()},set ariaDescribedby(e){b(e),o()},get onchange(){return u()},set onchange(e){u(e),o()}};M();var l=A(),h=f(l),a=f(h);U(a),B(2),p(h);var j=L(h,2),_=f(j);return F(_,r,"default",{},null),p(j),p(l),z(()=>{N(l,1,`radio-root ${i()?"is-checked":""} ${n()?"is-disabled":""}`,"svelte-jsov6r"),g(a,"name",d()),Y(a,c()),q(a,i()),a.disabled=n(),g(a,"aria-label",v()),g(a,"aria-describedby",b())}),S("change",a,w),E(m,l),R(x)}const __Default = (C(J,{checked:{},disabled:{},name:{},value:{},ariaLabel:{},ariaDescribedby:{},onchange:{}},["default"],[],{mode:"open"}));
15
+ customElements.define("ui-radio", __Default);
16
+ export default __Default;