snice 1.14.3 → 2.1.0

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 (185) hide show
  1. package/bin/templates/base/tsconfig.json +5 -4
  2. package/components/accordion/demo.html +403 -0
  3. package/components/accordion/snice-accordion-item.css +85 -0
  4. package/components/accordion/snice-accordion-item.ts +226 -0
  5. package/components/accordion/snice-accordion.css +31 -0
  6. package/components/accordion/snice-accordion.ts +182 -0
  7. package/components/accordion/snice-accordion.types.ts +32 -0
  8. package/components/alert/demo.html +445 -0
  9. package/components/alert/snice-alert.css +195 -0
  10. package/components/alert/snice-alert.ts +141 -0
  11. package/components/alert/snice-alert.types.ts +12 -0
  12. package/components/avatar/demo.html +598 -0
  13. package/components/avatar/snice-avatar.css +131 -0
  14. package/components/avatar/snice-avatar.ts +136 -0
  15. package/components/avatar/snice-avatar.types.ts +13 -0
  16. package/components/badge/demo.html +523 -0
  17. package/components/badge/snice-badge.css +161 -0
  18. package/components/badge/snice-badge.ts +117 -0
  19. package/components/badge/snice-badge.types.ts +16 -0
  20. package/components/breadcrumbs/demo.html +404 -0
  21. package/components/breadcrumbs/snice-breadcrumbs.css +133 -0
  22. package/components/breadcrumbs/snice-breadcrumbs.ts +191 -0
  23. package/components/breadcrumbs/snice-breadcrumbs.types.ts +26 -0
  24. package/components/breadcrumbs/snice-crumb.ts +26 -0
  25. package/components/button/demo.html +42 -0
  26. package/components/button/snice-button.css +230 -0
  27. package/components/button/snice-button.ts +169 -0
  28. package/components/button/snice-button.types.ts +25 -0
  29. package/components/card/demo.html +525 -0
  30. package/components/card/snice-card.css +140 -0
  31. package/components/card/snice-card.ts +102 -0
  32. package/components/card/snice-card.types.ts +10 -0
  33. package/components/checkbox/demo.html +253 -0
  34. package/components/checkbox/snice-checkbox.css +164 -0
  35. package/components/checkbox/snice-checkbox.ts +223 -0
  36. package/components/checkbox/snice-checkbox.types.ts +22 -0
  37. package/components/chip/demo.html +383 -0
  38. package/components/chip/snice-chip.css +195 -0
  39. package/components/chip/snice-chip.ts +139 -0
  40. package/components/chip/snice-chip.types.ts +15 -0
  41. package/components/date-picker/README.md +233 -0
  42. package/components/date-picker/demo.html +191 -0
  43. package/components/date-picker/snice-date-picker.css +330 -0
  44. package/components/date-picker/snice-date-picker.ts +777 -0
  45. package/components/date-picker/snice-date-picker.types.ts +83 -0
  46. package/components/divider/demo.html +233 -0
  47. package/components/divider/snice-divider.css +155 -0
  48. package/components/divider/snice-divider.ts +69 -0
  49. package/components/divider/snice-divider.types.ts +15 -0
  50. package/components/drawer/demo.html +328 -0
  51. package/components/drawer/snice-drawer.css +476 -0
  52. package/components/drawer/snice-drawer.ts +287 -0
  53. package/components/drawer/snice-drawer.types.ts +17 -0
  54. package/components/global.d.ts +14 -0
  55. package/components/input/demo.html +303 -0
  56. package/components/input/snice-input.css +257 -0
  57. package/components/input/snice-input.ts +442 -0
  58. package/components/input/snice-input.types.ts +59 -0
  59. package/components/input/test.html +77 -0
  60. package/components/layout/README.md +260 -0
  61. package/components/layout/demo.html +538 -0
  62. package/components/layout/snice-layout-blog.css +129 -0
  63. package/components/layout/snice-layout-blog.ts +48 -0
  64. package/components/layout/snice-layout-card.css +104 -0
  65. package/components/layout/snice-layout-card.ts +35 -0
  66. package/components/layout/snice-layout-centered.css +51 -0
  67. package/components/layout/snice-layout-centered.ts +22 -0
  68. package/components/layout/snice-layout-dashboard.css +98 -0
  69. package/components/layout/snice-layout-dashboard.ts +45 -0
  70. package/components/layout/snice-layout-fullscreen.css +72 -0
  71. package/components/layout/snice-layout-fullscreen.ts +34 -0
  72. package/components/layout/snice-layout-landing.css +92 -0
  73. package/components/layout/snice-layout-landing.ts +47 -0
  74. package/components/layout/snice-layout-minimal.css +16 -0
  75. package/components/layout/snice-layout-minimal.ts +19 -0
  76. package/components/layout/snice-layout-sidebar.css +117 -0
  77. package/components/layout/snice-layout-sidebar.ts +48 -0
  78. package/components/layout/snice-layout-split.css +103 -0
  79. package/components/layout/snice-layout-split.ts +29 -0
  80. package/components/layout/snice-layout.css +72 -0
  81. package/components/layout/snice-layout.ts +35 -0
  82. package/components/layout/snice-layout.types.ts +5 -0
  83. package/components/login/demo-auth-controller.ts +185 -0
  84. package/components/login/demo.html +470 -0
  85. package/components/login/snice-login.css +204 -0
  86. package/components/login/snice-login.ts +337 -0
  87. package/components/login/snice-login.types.ts +34 -0
  88. package/components/modal/demo.html +291 -0
  89. package/components/modal/snice-modal.css +203 -0
  90. package/components/modal/snice-modal.ts +233 -0
  91. package/components/modal/snice-modal.types.ts +21 -0
  92. package/components/pagination/demo.html +395 -0
  93. package/components/pagination/snice-pagination.ts +333 -0
  94. package/components/pagination/snice-pagination.types.ts +21 -0
  95. package/components/progress/demo.html +510 -0
  96. package/components/progress/snice-progress.css +267 -0
  97. package/components/progress/snice-progress.ts +247 -0
  98. package/components/progress/snice-progress.types.ts +19 -0
  99. package/components/radio/demo.html +287 -0
  100. package/components/radio/snice-radio.css +171 -0
  101. package/components/radio/snice-radio.ts +218 -0
  102. package/components/radio/snice-radio.types.ts +21 -0
  103. package/components/select/demo.html +511 -0
  104. package/components/select/snice-option.ts +52 -0
  105. package/components/select/snice-option.types.ts +14 -0
  106. package/components/select/snice-select.css +392 -0
  107. package/components/select/snice-select.ts +796 -0
  108. package/components/select/snice-select.types.ts +55 -0
  109. package/components/skeleton/demo.html +514 -0
  110. package/components/skeleton/snice-skeleton.css +109 -0
  111. package/components/skeleton/snice-skeleton.ts +126 -0
  112. package/components/skeleton/snice-skeleton.types.ts +11 -0
  113. package/components/switch/demo.html +284 -0
  114. package/components/switch/snice-switch.css +221 -0
  115. package/components/switch/snice-switch.ts +229 -0
  116. package/components/switch/snice-switch.types.ts +23 -0
  117. package/components/symbols.ts +23 -0
  118. package/components/table/demo-table-controller.ts +100 -0
  119. package/components/table/demo.html +480 -0
  120. package/components/table/snice-cell-boolean.ts +112 -0
  121. package/components/table/snice-cell-date.ts +210 -0
  122. package/components/table/snice-cell-duration.ts +91 -0
  123. package/components/table/snice-cell-filesize.ts +90 -0
  124. package/components/table/snice-cell-number.ts +165 -0
  125. package/components/table/snice-cell-progress.ts +83 -0
  126. package/components/table/snice-cell-rating.ts +82 -0
  127. package/components/table/snice-cell-sparkline.ts +253 -0
  128. package/components/table/snice-cell-text.ts +125 -0
  129. package/components/table/snice-cell.css +296 -0
  130. package/components/table/snice-cell.ts +473 -0
  131. package/components/table/snice-column.ts +353 -0
  132. package/components/table/snice-header.css +243 -0
  133. package/components/table/snice-header.ts +261 -0
  134. package/components/table/snice-progress.ts +66 -0
  135. package/components/table/snice-rating.ts +45 -0
  136. package/components/table/snice-row.css +255 -0
  137. package/components/table/snice-row.ts +331 -0
  138. package/components/table/snice-table.css +241 -0
  139. package/components/table/snice-table.ts +737 -0
  140. package/components/table/snice-table.types.ts +158 -0
  141. package/components/tabs/demo.html +487 -0
  142. package/components/tabs/snice-tab-panel.css +264 -0
  143. package/components/tabs/snice-tab-panel.ts +47 -0
  144. package/components/tabs/snice-tab.css +96 -0
  145. package/components/tabs/snice-tab.ts +65 -0
  146. package/components/tabs/snice-tabs.css +189 -0
  147. package/components/tabs/snice-tabs.ts +332 -0
  148. package/components/tabs/snice-tabs.types.ts +28 -0
  149. package/components/theme/theme.css +234 -0
  150. package/components/toast/demo.html +329 -0
  151. package/components/toast/snice-toast-container.ts +256 -0
  152. package/components/toast/snice-toast.css +213 -0
  153. package/components/toast/snice-toast.ts +276 -0
  154. package/components/toast/snice-toast.types.ts +35 -0
  155. package/components/tooltip/demo.html +350 -0
  156. package/components/tooltip/snice-tooltip-portal.css +79 -0
  157. package/components/tooltip/snice-tooltip.css +117 -0
  158. package/components/tooltip/snice-tooltip.ts +612 -0
  159. package/components/tooltip/snice-tooltip.types.ts +32 -0
  160. package/components/transitions.ts +94 -0
  161. package/components/tsconfig.json +18 -0
  162. package/dist/index.cjs +441 -329
  163. package/dist/index.cjs.map +1 -1
  164. package/dist/index.cjs.min.map +1 -1
  165. package/dist/index.esm.js +441 -329
  166. package/dist/index.esm.js.map +1 -1
  167. package/dist/index.esm.min.js +3 -3
  168. package/dist/index.esm.min.js.map +1 -1
  169. package/dist/index.iife.js +441 -329
  170. package/dist/index.iife.js.map +1 -1
  171. package/dist/index.iife.min.js +3 -3
  172. package/dist/index.iife.min.js.map +1 -1
  173. package/dist/symbols.esm.js +1 -1
  174. package/dist/transitions.esm.js +1 -1
  175. package/dist/types/controller.d.ts +1 -1
  176. package/dist/types/element.d.ts +10 -10
  177. package/dist/types/events.d.ts +2 -2
  178. package/dist/types/index.d.ts +1 -1
  179. package/dist/types/observe.d.ts +1 -1
  180. package/dist/types/request-response.d.ts +2 -3
  181. package/dist/types/router.d.ts +1 -1
  182. package/package.json +9 -3
  183. package/dist/index.cjs.min +0 -15
  184. package/dist/symbols.cjs +0 -103
  185. package/dist/transitions.cjs +0 -219
@@ -0,0 +1,392 @@
1
+ :host {
2
+ display: inline-block;
3
+ font-family: var(--snice-font-family);
4
+ position: relative;
5
+ width: 100%;
6
+ max-width: 18.75rem; /* 300px */
7
+ }
8
+
9
+ [hidden] {
10
+ display: none !important;
11
+ }
12
+
13
+ /* Hide empty image tags */
14
+ img[src=""] {
15
+ display: none;
16
+ }
17
+
18
+ .select-wrapper {
19
+ position: relative;
20
+ width: 100%;
21
+ }
22
+
23
+ /* Label */
24
+ .select-label {
25
+ display: block;
26
+ margin-bottom: 0.25rem; /* 4px */
27
+ color: var(--snice-color-text);
28
+ font-weight: 500;
29
+ }
30
+
31
+ .select-label--small {
32
+ font-size: var(--snice-font-size-sm);
33
+ }
34
+
35
+ .select-label--medium {
36
+ font-size: var(--snice-font-size-md);
37
+ }
38
+
39
+ .select-label--large {
40
+ font-size: var(--snice-font-size-lg);
41
+ }
42
+
43
+ .select-label--required::after {
44
+ content: ' *';
45
+ color: var(--snice-color-danger);
46
+ }
47
+
48
+ /* Select trigger button */
49
+ .select-trigger {
50
+ width: 100%;
51
+ display: flex;
52
+ align-items: center;
53
+ justify-content: space-between;
54
+ background: var(--snice-color-background);
55
+ border: 1px solid var(--snice-color-border);
56
+ border-radius: var(--snice-border-radius-md);
57
+ cursor: pointer;
58
+ transition: all var(--snice-transition-fast) ease;
59
+ position: relative;
60
+ text-align: left;
61
+ font-family: inherit;
62
+ color: var(--snice-color-text);
63
+ }
64
+
65
+ .select-trigger--small {
66
+ padding: 0.375rem 2rem 0.375rem 0.625rem; /* 6px 32px 6px 10px */
67
+ font-size: var(--snice-font-size-sm);
68
+ min-height: 2rem; /* 32px */
69
+ }
70
+
71
+ .select-trigger--medium {
72
+ padding: 0.5rem 2.25rem 0.5rem 0.75rem; /* 8px 36px 8px 12px */
73
+ font-size: var(--snice-font-size-md);
74
+ min-height: 2.5rem; /* 40px */
75
+ }
76
+
77
+ .select-trigger--large {
78
+ padding: 0.625rem 2.5rem 0.625rem 0.875rem; /* 10px 40px 10px 14px */
79
+ font-size: var(--snice-font-size-lg);
80
+ min-height: 3rem; /* 48px */
81
+ }
82
+
83
+ .select-trigger:hover:not(.select-trigger--disabled) {
84
+ border-color: var(--snice-color-border-hover);
85
+ }
86
+
87
+ .select-trigger:focus-visible {
88
+ outline: 2px solid var(--snice-color-primary);
89
+ outline-offset: 2px;
90
+ border-color: var(--snice-color-primary);
91
+ }
92
+
93
+ .select-trigger--open {
94
+ border-color: var(--snice-color-primary);
95
+ }
96
+
97
+ .select-trigger--disabled {
98
+ background: var(--snice-color-background-secondary);
99
+ cursor: not-allowed;
100
+ opacity: 0.6;
101
+ }
102
+
103
+ .select-trigger--readonly {
104
+ background: var(--snice-color-background-secondary);
105
+ cursor: default;
106
+ }
107
+
108
+ .select-trigger--invalid {
109
+ border-color: var(--snice-color-danger);
110
+ }
111
+
112
+ /* Placeholder */
113
+ .select-placeholder {
114
+ color: var(--snice-color-text-secondary);
115
+ }
116
+
117
+ /* Selected value display */
118
+ .select-value {
119
+ flex: 1;
120
+ overflow: hidden;
121
+ text-overflow: ellipsis;
122
+ white-space: nowrap;
123
+ }
124
+
125
+ .select-value--single {
126
+ display: flex;
127
+ align-items: center;
128
+ gap: 0.5rem; /* 8px */
129
+ }
130
+
131
+ .select-value-icon {
132
+ width: 1rem; /* 16px */
133
+ height: 1rem; /* 16px */
134
+ object-fit: contain;
135
+ flex-shrink: 0;
136
+ }
137
+
138
+ .select-value--multiple {
139
+ display: flex;
140
+ gap: 0.25rem; /* 4px */
141
+ flex-wrap: wrap;
142
+ }
143
+
144
+ .select-tag {
145
+ display: inline-flex;
146
+ align-items: center;
147
+ gap: 0.25rem; /* 4px */
148
+ padding: 0.125rem 0.375rem; /* 2px 6px */
149
+ background: var(--snice-color-primary-light);
150
+ color: var(--snice-color-primary);
151
+ border-radius: var(--snice-border-radius-sm);
152
+ font-size: var(--snice-font-size-xs);
153
+ }
154
+
155
+ .select-tag-icon {
156
+ width: 0.75rem; /* 12px */
157
+ height: 0.75rem; /* 12px */
158
+ object-fit: contain;
159
+ flex-shrink: 0;
160
+ }
161
+
162
+ .select-tag-remove {
163
+ cursor: pointer;
164
+ padding: 0;
165
+ background: none;
166
+ border: none;
167
+ color: inherit;
168
+ font-size: 0.75rem; /* 12px */
169
+ line-height: 1;
170
+ }
171
+
172
+ .select-tag-remove:hover {
173
+ opacity: 0.7;
174
+ }
175
+
176
+ /* Icons */
177
+ .select-icons {
178
+ position: absolute;
179
+ right: 0.5rem; /* 8px */
180
+ top: 50%;
181
+ transform: translateY(-50%);
182
+ display: flex;
183
+ align-items: center;
184
+ gap: 0.25rem; /* 4px */
185
+ pointer-events: none;
186
+ z-index: 1;
187
+ }
188
+
189
+ .select-clear {
190
+ padding: 2px;
191
+ background: none;
192
+ border: none;
193
+ cursor: pointer;
194
+ color: var(--snice-color-text-secondary);
195
+ display: flex;
196
+ align-items: center;
197
+ justify-content: center;
198
+ border-radius: var(--snice-border-radius-sm);
199
+ pointer-events: auto;
200
+ }
201
+
202
+ .select-clear:hover {
203
+ background: var(--snice-color-background-secondary);
204
+ color: var(--snice-color-text);
205
+ }
206
+
207
+ .select-arrow {
208
+ transition: transform var(--snice-transition-fast) ease;
209
+ color: var(--snice-color-text-secondary);
210
+ pointer-events: none;
211
+ }
212
+
213
+ .select-arrow--open {
214
+ transform: rotate(180deg);
215
+ }
216
+
217
+ /* Dropdown */
218
+ .select-dropdown {
219
+ position: absolute;
220
+ top: 100%;
221
+ margin-top: 4px;
222
+ left: 0;
223
+ right: 0;
224
+ background: var(--snice-color-background);
225
+ border: 1px solid var(--snice-color-border);
226
+ border-radius: var(--snice-border-radius-md);
227
+ box-shadow: var(--snice-shadow-lg);
228
+ z-index: 1000;
229
+ opacity: 0;
230
+ transform: translateY(-8px) scaleY(0.95);
231
+ transform-origin: top;
232
+ pointer-events: none;
233
+ transition: opacity var(--snice-transition-fast) ease,
234
+ transform var(--snice-transition-fast) ease;
235
+ display: flex;
236
+ flex-direction: column;
237
+ overflow: hidden;
238
+ }
239
+
240
+ .select-dropdown--open {
241
+ opacity: 1;
242
+ transform: translateY(0) scaleY(1);
243
+ pointer-events: auto;
244
+ }
245
+
246
+ /* Search input */
247
+ .select-search {
248
+ padding: 8px;
249
+ border-bottom: 1px solid var(--snice-color-border);
250
+ flex-shrink: 0;
251
+ }
252
+
253
+ .select-search-input {
254
+ width: 100%;
255
+ padding: 6px 10px;
256
+ background: var(--snice-color-background);
257
+ border: 1px solid var(--snice-color-border);
258
+ border-radius: var(--snice-border-radius-sm);
259
+ font-size: var(--snice-font-size-sm);
260
+ font-family: inherit;
261
+ color: var(--snice-color-text);
262
+ box-sizing: border-box;
263
+ }
264
+
265
+ .select-search-input:focus {
266
+ outline: none;
267
+ border-color: var(--snice-color-primary);
268
+ }
269
+
270
+ /* Options list */
271
+ .select-options {
272
+ max-height: 200px;
273
+ overflow-y: auto;
274
+ overflow-x: hidden;
275
+ padding: 4px;
276
+ scrollbar-gutter: stable;
277
+ }
278
+
279
+ /* Custom scrollbar styling for better appearance */
280
+ .select-options::-webkit-scrollbar {
281
+ width: 8px;
282
+ }
283
+
284
+ .select-options::-webkit-scrollbar-track {
285
+ background: var(--snice-color-background-secondary);
286
+ border-radius: 4px;
287
+ margin: 4px 0;
288
+ }
289
+
290
+ .select-options::-webkit-scrollbar-thumb {
291
+ background: var(--snice-color-border);
292
+ border-radius: 4px;
293
+ border: 2px solid var(--snice-color-background);
294
+ }
295
+
296
+ .select-options::-webkit-scrollbar-thumb:hover {
297
+ background: var(--snice-color-border-hover);
298
+ }
299
+
300
+ /* Firefox scrollbar styling */
301
+ .select-options {
302
+ scrollbar-width: thin;
303
+ scrollbar-color: var(--snice-color-border) var(--snice-color-background-secondary);
304
+ }
305
+
306
+ .select-option {
307
+ padding: 8px 12px;
308
+ cursor: pointer;
309
+ border-radius: var(--snice-border-radius-sm);
310
+ transition: background var(--snice-transition-fast) ease;
311
+ display: flex;
312
+ align-items: center;
313
+ gap: 8px;
314
+ }
315
+
316
+ .select-option:hover:not(.select-option--disabled) {
317
+ background: var(--snice-color-background-secondary);
318
+ }
319
+
320
+ .select-option--selected {
321
+ background: var(--snice-color-primary-light);
322
+ color: var(--snice-color-primary);
323
+ font-weight: 500;
324
+ }
325
+
326
+ .select-option--focused {
327
+ background: var(--snice-color-background-secondary);
328
+ outline: 2px solid var(--snice-color-primary);
329
+ outline-offset: -2px;
330
+ }
331
+
332
+ .select-option--disabled {
333
+ opacity: 0.5;
334
+ cursor: not-allowed;
335
+ }
336
+
337
+ /* Option icon */
338
+ .select-option-icon {
339
+ width: 16px;
340
+ height: 16px;
341
+ object-fit: contain;
342
+ flex-shrink: 0;
343
+ }
344
+
345
+ .select-option-check {
346
+ width: 16px;
347
+ height: 16px;
348
+ display: flex;
349
+ align-items: center;
350
+ justify-content: center;
351
+ flex-shrink: 0;
352
+ }
353
+
354
+ .select-option-label {
355
+ flex: 1;
356
+ }
357
+
358
+ /* No options message */
359
+ .select-no-options {
360
+ padding: 16px;
361
+ text-align: center;
362
+ color: var(--snice-color-text-secondary);
363
+ font-size: var(--snice-font-size-sm);
364
+ }
365
+
366
+ /* Native select (hidden) */
367
+ .select-native {
368
+ position: absolute;
369
+ opacity: 0;
370
+ pointer-events: none;
371
+ width: 0;
372
+ height: 0;
373
+ }
374
+
375
+ /* Scrollbar styling */
376
+ .select-options::-webkit-scrollbar {
377
+ width: 6px;
378
+ }
379
+
380
+ .select-options::-webkit-scrollbar-track {
381
+ background: var(--snice-color-background-secondary);
382
+ border-radius: 3px;
383
+ }
384
+
385
+ .select-options::-webkit-scrollbar-thumb {
386
+ background: var(--snice-color-border);
387
+ border-radius: 3px;
388
+ }
389
+
390
+ .select-options::-webkit-scrollbar-thumb:hover {
391
+ background: var(--snice-color-border-hover);
392
+ }