snice 3.1.0 → 3.2.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 (217) hide show
  1. package/README.md +90 -41
  2. package/dist/components/accordion/snice-accordion-item.js +1 -1
  3. package/dist/components/accordion/snice-accordion-item.js.map +1 -1
  4. package/dist/components/accordion/snice-accordion.js +1 -1
  5. package/dist/components/accordion/snice-accordion.js.map +1 -1
  6. package/dist/components/alert/snice-alert.js +1 -1
  7. package/dist/components/alert/snice-alert.js.map +1 -1
  8. package/dist/components/avatar/snice-avatar.js +1 -1
  9. package/dist/components/avatar/snice-avatar.js.map +1 -1
  10. package/dist/components/badge/snice-badge.js +1 -1
  11. package/dist/components/badge/snice-badge.js.map +1 -1
  12. package/dist/components/banner/snice-banner.d.ts +22 -0
  13. package/dist/components/banner/snice-banner.js +180 -0
  14. package/dist/components/banner/snice-banner.js.map +1 -0
  15. package/dist/components/banner/snice-banner.types.d.ts +14 -0
  16. package/dist/components/breadcrumbs/snice-breadcrumbs.js +1 -1
  17. package/dist/components/breadcrumbs/snice-breadcrumbs.js.map +1 -1
  18. package/dist/components/button/snice-button.js +1 -1
  19. package/dist/components/button/snice-button.js.map +1 -1
  20. package/dist/components/card/snice-card.js +1 -1
  21. package/dist/components/card/snice-card.js.map +1 -1
  22. package/dist/components/checkbox/snice-checkbox.js +1 -1
  23. package/dist/components/checkbox/snice-checkbox.js.map +1 -1
  24. package/dist/components/chip/snice-chip.js +1 -1
  25. package/dist/components/chip/snice-chip.js.map +1 -1
  26. package/dist/components/color-display/snice-color-display.d.ts +14 -0
  27. package/dist/components/color-display/snice-color-display.js +151 -0
  28. package/dist/components/color-display/snice-color-display.js.map +1 -0
  29. package/dist/components/color-display/snice-color-display.types.d.ts +10 -0
  30. package/dist/components/color-picker/snice-color-picker.d.ts +50 -0
  31. package/dist/components/color-picker/snice-color-picker.js +489 -0
  32. package/dist/components/color-picker/snice-color-picker.js.map +1 -0
  33. package/dist/components/color-picker/snice-color-picker.types.d.ts +19 -0
  34. package/dist/components/date-picker/snice-date-picker.js +1 -1
  35. package/dist/components/date-picker/snice-date-picker.js.map +1 -1
  36. package/dist/components/divider/snice-divider.js +1 -1
  37. package/dist/components/divider/snice-divider.js.map +1 -1
  38. package/dist/components/drawer/snice-drawer.js +1 -1
  39. package/dist/components/drawer/snice-drawer.js.map +1 -1
  40. package/dist/components/empty-state/snice-empty-state.d.ts +13 -0
  41. package/dist/components/empty-state/snice-empty-state.js +121 -0
  42. package/dist/components/empty-state/snice-empty-state.js.map +1 -0
  43. package/dist/components/empty-state/snice-empty-state.types.d.ts +9 -0
  44. package/dist/components/file-upload/snice-file-upload.d.ts +45 -0
  45. package/dist/components/file-upload/snice-file-upload.js +394 -0
  46. package/dist/components/file-upload/snice-file-upload.js.map +1 -0
  47. package/dist/components/file-upload/snice-file-upload.types.d.ts +22 -0
  48. package/dist/components/image/snice-image.d.ts +22 -0
  49. package/dist/components/image/snice-image.js +201 -0
  50. package/dist/components/image/snice-image.js.map +1 -0
  51. package/dist/components/image/snice-image.types.d.ts +17 -0
  52. package/dist/components/input/snice-input.js +1 -1
  53. package/dist/components/input/snice-input.js.map +1 -1
  54. package/dist/components/kpi/snice-kpi.d.ts +16 -0
  55. package/dist/components/kpi/snice-kpi.js +162 -0
  56. package/dist/components/kpi/snice-kpi.js.map +1 -0
  57. package/dist/components/kpi/snice-kpi.types.d.ts +12 -0
  58. package/dist/components/layout/snice-layout-blog.js +1 -1
  59. package/dist/components/layout/snice-layout-blog.js.map +1 -1
  60. package/dist/components/layout/snice-layout-card.js +1 -1
  61. package/dist/components/layout/snice-layout-card.js.map +1 -1
  62. package/dist/components/layout/snice-layout-centered.js +1 -1
  63. package/dist/components/layout/snice-layout-centered.js.map +1 -1
  64. package/dist/components/layout/snice-layout-dashboard.js +1 -1
  65. package/dist/components/layout/snice-layout-dashboard.js.map +1 -1
  66. package/dist/components/layout/snice-layout-fullscreen.js +1 -1
  67. package/dist/components/layout/snice-layout-fullscreen.js.map +1 -1
  68. package/dist/components/layout/snice-layout-landing.js +1 -1
  69. package/dist/components/layout/snice-layout-landing.js.map +1 -1
  70. package/dist/components/layout/snice-layout-minimal.js +1 -1
  71. package/dist/components/layout/snice-layout-minimal.js.map +1 -1
  72. package/dist/components/layout/snice-layout-sidebar.js +1 -1
  73. package/dist/components/layout/snice-layout-sidebar.js.map +1 -1
  74. package/dist/components/layout/snice-layout-split.js +1 -1
  75. package/dist/components/layout/snice-layout-split.js.map +1 -1
  76. package/dist/components/layout/snice-layout.js +1 -1
  77. package/dist/components/layout/snice-layout.js.map +1 -1
  78. package/dist/components/link/snice-link.d.ts +13 -0
  79. package/dist/components/link/snice-link.js +137 -0
  80. package/dist/components/link/snice-link.js.map +1 -0
  81. package/dist/components/link/snice-link.types.d.ts +11 -0
  82. package/dist/components/login/snice-login.js +1 -1
  83. package/dist/components/login/snice-login.js.map +1 -1
  84. package/dist/components/modal/snice-modal.js +1 -1
  85. package/dist/components/modal/snice-modal.js.map +1 -1
  86. package/dist/components/nav/snice-nav.js +1 -1
  87. package/dist/components/nav/snice-nav.js.map +1 -1
  88. package/dist/components/progress/snice-progress.js +1 -1
  89. package/dist/components/progress/snice-progress.js.map +1 -1
  90. package/dist/components/radio/snice-radio.js +1 -1
  91. package/dist/components/radio/snice-radio.js.map +1 -1
  92. package/dist/components/select/snice-select.js +1 -1
  93. package/dist/components/select/snice-select.js.map +1 -1
  94. package/dist/components/skeleton/snice-skeleton.js +1 -1
  95. package/dist/components/skeleton/snice-skeleton.js.map +1 -1
  96. package/dist/components/slider/snice-slider.d.ts +53 -0
  97. package/dist/components/slider/snice-slider.js +479 -0
  98. package/dist/components/slider/snice-slider.js.map +1 -0
  99. package/dist/components/slider/snice-slider.types.d.ts +26 -0
  100. package/dist/components/snice-cell-C0slgOpe.js +4 -0
  101. package/dist/components/snice-cell-C0slgOpe.js.map +1 -0
  102. package/dist/components/sparkline/snice-sparkline.d.ts +21 -0
  103. package/dist/components/sparkline/snice-sparkline.js +228 -0
  104. package/dist/components/sparkline/snice-sparkline.js.map +1 -0
  105. package/dist/components/sparkline/snice-sparkline.types.d.ts +16 -0
  106. package/dist/components/spinner/snice-spinner.d.ts +10 -0
  107. package/dist/components/spinner/snice-spinner.js +109 -0
  108. package/dist/components/spinner/snice-spinner.js.map +1 -0
  109. package/dist/components/spinner/snice-spinner.types.d.ts +8 -0
  110. package/dist/components/stepper/snice-stepper-panel.d.ts +8 -0
  111. package/dist/components/stepper/snice-stepper-panel.js +70 -0
  112. package/dist/components/stepper/snice-stepper-panel.js.map +1 -0
  113. package/dist/components/stepper/snice-stepper-panel.types.d.ts +4 -0
  114. package/dist/components/stepper/snice-stepper.d.ts +15 -0
  115. package/dist/components/stepper/snice-stepper.js +163 -0
  116. package/dist/components/stepper/snice-stepper.js.map +1 -0
  117. package/dist/components/stepper/snice-stepper.types.d.ts +13 -0
  118. package/dist/components/switch/snice-switch.js +1 -1
  119. package/dist/components/switch/snice-switch.js.map +1 -1
  120. package/dist/components/table/snice-cell-actions.js +1 -1
  121. package/dist/components/table/snice-cell-actions.js.map +1 -1
  122. package/dist/components/table/snice-cell-boolean.js +1 -1
  123. package/dist/components/table/snice-cell-color.js +1 -1
  124. package/dist/components/table/snice-cell-color.js.map +1 -1
  125. package/dist/components/table/snice-cell-currency.js +1 -1
  126. package/dist/components/table/snice-cell-date.js +1 -1
  127. package/dist/components/table/snice-cell-duration.js +1 -1
  128. package/dist/components/table/snice-cell-email.js +1 -1
  129. package/dist/components/table/snice-cell-email.js.map +1 -1
  130. package/dist/components/table/snice-cell-filesize.js +1 -1
  131. package/dist/components/table/snice-cell-image.js +1 -1
  132. package/dist/components/table/snice-cell-image.js.map +1 -1
  133. package/dist/components/table/snice-cell-json.js +1 -1
  134. package/dist/components/table/snice-cell-json.js.map +1 -1
  135. package/dist/components/table/snice-cell-link.js +1 -1
  136. package/dist/components/table/snice-cell-link.js.map +1 -1
  137. package/dist/components/table/snice-cell-location.js +1 -1
  138. package/dist/components/table/snice-cell-location.js.map +1 -1
  139. package/dist/components/table/snice-cell-number.js +1 -1
  140. package/dist/components/table/snice-cell-percentage.js +1 -1
  141. package/dist/components/table/snice-cell-percentage.js.map +1 -1
  142. package/dist/components/table/snice-cell-phone.js +1 -1
  143. package/dist/components/table/snice-cell-phone.js.map +1 -1
  144. package/dist/components/table/snice-cell-progress.js +1 -1
  145. package/dist/components/table/snice-cell-rating.js +1 -1
  146. package/dist/components/table/snice-cell-sparkline.js +1 -1
  147. package/dist/components/table/snice-cell-status.js +1 -1
  148. package/dist/components/table/snice-cell-status.js.map +1 -1
  149. package/dist/components/table/snice-cell-tag.js +1 -1
  150. package/dist/components/table/snice-cell-tag.js.map +1 -1
  151. package/dist/components/table/snice-cell-text.js +1 -1
  152. package/dist/components/table/snice-cell.js +1 -1
  153. package/dist/components/table/snice-header.js +1 -1
  154. package/dist/components/table/snice-header.js.map +1 -1
  155. package/dist/components/table/snice-row.js +2 -2
  156. package/dist/components/table/snice-row.js.map +1 -1
  157. package/dist/components/table/snice-table.js +1 -1
  158. package/dist/components/tabs/snice-tab-panel.js +1 -1
  159. package/dist/components/tabs/snice-tab-panel.js.map +1 -1
  160. package/dist/components/tabs/snice-tab.js +1 -1
  161. package/dist/components/tabs/snice-tab.js.map +1 -1
  162. package/dist/components/tabs/snice-tabs.js +1 -1
  163. package/dist/components/tabs/snice-tabs.js.map +1 -1
  164. package/dist/components/textarea/snice-textarea.d.ts +52 -0
  165. package/dist/components/textarea/snice-textarea.js +407 -0
  166. package/dist/components/textarea/snice-textarea.js.map +1 -0
  167. package/dist/components/textarea/snice-textarea.types.d.ts +30 -0
  168. package/dist/components/timeline/snice-timeline.d.ts +11 -0
  169. package/dist/components/timeline/snice-timeline.js +112 -0
  170. package/dist/components/timeline/snice-timeline.js.map +1 -0
  171. package/dist/components/timeline/snice-timeline.types.d.ts +16 -0
  172. package/dist/components/tooltip/snice-tooltip.js +2 -2
  173. package/dist/components/tooltip/snice-tooltip.js.map +1 -1
  174. package/dist/index.cjs +125 -158
  175. package/dist/index.cjs.map +1 -1
  176. package/dist/index.esm.js +125 -158
  177. package/dist/index.esm.js.map +1 -1
  178. package/dist/index.iife.js +125 -158
  179. package/dist/index.iife.js.map +1 -1
  180. package/dist/parts.d.ts +13 -16
  181. package/dist/symbols.cjs +1 -1
  182. package/dist/symbols.esm.js +1 -1
  183. package/dist/template.d.ts +0 -1
  184. package/dist/transitions.cjs +1 -1
  185. package/dist/transitions.esm.js +1 -1
  186. package/docs/ai/README.md +10 -1
  187. package/docs/ai/components/banner.md +84 -0
  188. package/docs/ai/components/color-display.md +48 -0
  189. package/docs/ai/components/color-picker.md +75 -0
  190. package/docs/ai/components/empty-state.md +72 -0
  191. package/docs/ai/components/file-upload.md +93 -0
  192. package/docs/ai/components/image.md +60 -0
  193. package/docs/ai/components/kpi.md +158 -0
  194. package/docs/ai/components/link.md +77 -0
  195. package/docs/ai/components/slider.md +87 -0
  196. package/docs/ai/components/sparkline.md +168 -0
  197. package/docs/ai/components/spinner.md +47 -0
  198. package/docs/ai/components/stepper.md +216 -0
  199. package/docs/ai/components/textarea.md +87 -0
  200. package/docs/ai/components/timeline.md +77 -0
  201. package/docs/components/banner.md +106 -0
  202. package/docs/components/color-display.md +96 -0
  203. package/docs/components/color-picker.md +81 -0
  204. package/docs/components/empty-state.md +79 -0
  205. package/docs/components/file-upload.md +263 -0
  206. package/docs/components/image.md +110 -0
  207. package/docs/components/kpi.md +251 -0
  208. package/docs/components/link.md +229 -0
  209. package/docs/components/slider.md +297 -0
  210. package/docs/components/sparkline.md +293 -0
  211. package/docs/components/spinner.md +63 -0
  212. package/docs/components/stepper.md +410 -0
  213. package/docs/components/textarea.md +235 -0
  214. package/docs/components/timeline.md +192 -0
  215. package/package.json +2 -1
  216. package/dist/components/snice-cell-BLFVdxPp.js +0 -4
  217. package/dist/components/snice-cell-BLFVdxPp.js.map +0 -1
@@ -0,0 +1,229 @@
1
+ # Link Component
2
+
3
+ A customizable link component with multiple variants, external link handling, and accessibility features.
4
+
5
+ ## Features
6
+
7
+ - **Multiple Variants**: default, primary, secondary, muted
8
+ - **External Link Handling**: Automatic `target="_blank"` and security attributes
9
+ - **Hash Routing**: Built-in support for hash-based navigation
10
+ - **Router Integration**: Emits events for custom router integration
11
+ - **Accessibility**: Proper ARIA attributes and keyboard navigation
12
+ - **Disabled State**: Visual and functional disabled state
13
+ - **Customizable**: Full theme integration
14
+
15
+ ## Basic Usage
16
+
17
+ ```html
18
+ <snice-link href="/about">About Us</snice-link>
19
+ ```
20
+
21
+ ## Properties
22
+
23
+ | Property | Type | Default | Description |
24
+ |----------|------|---------|-------------|
25
+ | `href` | `string` | `''` | Link URL |
26
+ | `target` | `LinkTarget` | `'_self'` | Target attribute ('_self', '_blank', '_parent', '_top') |
27
+ | `variant` | `LinkVariant` | `'default'` | Visual style variant |
28
+ | `disabled` | `boolean` | `false` | Disable the link |
29
+ | `external` | `boolean` | `false` | Treat as external link (auto _blank + security) |
30
+ | `underline` | `boolean` | `false` | Show text underline |
31
+ | `hash` | `boolean` | `false` | Automatically prepend # to href (for hash routing) |
32
+
33
+ ## Variants
34
+
35
+ ### Default
36
+ ```html
37
+ <snice-link href="/page">Default link</snice-link>
38
+ ```
39
+
40
+ ### Primary
41
+ ```html
42
+ <snice-link href="/page" variant="primary">Primary link</snice-link>
43
+ ```
44
+
45
+ ### Secondary
46
+ ```html
47
+ <snice-link href="/page" variant="secondary">Secondary link</snice-link>
48
+ ```
49
+
50
+ ### Muted
51
+ ```html
52
+ <snice-link href="/page" variant="muted">Muted link</snice-link>
53
+ ```
54
+
55
+ ## External Links
56
+
57
+ External links automatically open in a new tab with security attributes:
58
+
59
+ ```html
60
+ <snice-link href="https://example.com" external>
61
+ External Link
62
+ </snice-link>
63
+ ```
64
+
65
+ This automatically adds:
66
+ - `target="_blank"`
67
+ - `rel="noopener noreferrer"`
68
+ - External link icon (↗)
69
+
70
+ ## Underline
71
+
72
+ ```html
73
+ <snice-link href="/page" underline>Underlined link</snice-link>
74
+ ```
75
+
76
+ ## Disabled State
77
+
78
+ ```html
79
+ <snice-link href="/page" disabled>Disabled link</snice-link>
80
+ ```
81
+
82
+ ## Hash Routing
83
+
84
+ For hash-based navigation (Single Page Applications):
85
+
86
+ ```html
87
+ <!-- Automatically prepends # to href -->
88
+ <snice-link href="home" hash>Home</snice-link>
89
+ <snice-link href="about" hash>About</snice-link>
90
+ <snice-link href="contact" hash>Contact</snice-link>
91
+
92
+ <!-- Renders as: <a href="#home">Home</a> -->
93
+ ```
94
+
95
+ ### Router Integration
96
+
97
+ The `navigate` event allows decoupled router integration:
98
+
99
+ ```html
100
+ <snice-link href="profile" hash id="profile-link">Profile</snice-link>
101
+
102
+ <script>
103
+ document.getElementById('profile-link').addEventListener('navigate', (e) => {
104
+ console.log('Navigating to:', e.detail.href);
105
+
106
+ // Custom routing logic
107
+ myRouter.navigate(e.detail.href);
108
+
109
+ // Optionally prevent default navigation
110
+ // e.preventDefault();
111
+ });
112
+ </script>
113
+ ```
114
+
115
+ ### Example Router Setup
116
+
117
+ ```html
118
+ <nav>
119
+ <snice-link href="home" hash>Home</snice-link>
120
+ <snice-link href="products" hash>Products</snice-link>
121
+ <snice-link href="about" hash>About</snice-link>
122
+ </nav>
123
+
124
+ <script>
125
+ // Listen to all navigate events
126
+ document.addEventListener('navigate', (e) => {
127
+ const route = e.detail.href;
128
+
129
+ // Update view based on route
130
+ switch(route) {
131
+ case 'home':
132
+ showHomeView();
133
+ break;
134
+ case 'products':
135
+ showProductsView();
136
+ break;
137
+ case 'about':
138
+ showAboutView();
139
+ break;
140
+ }
141
+ });
142
+ </script>
143
+ ```
144
+
145
+ ## In Context
146
+
147
+ Links work naturally within text:
148
+
149
+ ```html
150
+ <p>
151
+ This is a paragraph with an <snice-link href="/page">inline link</snice-link>
152
+ in the middle of the text.
153
+ </p>
154
+ ```
155
+
156
+ ## Events
157
+
158
+ | Event | Detail | Description |
159
+ |-------|--------|-------------|
160
+ | `click` | `MouseEvent` | Emitted when link is clicked (prevented if disabled) |
161
+ | `navigate` | `{ href: string }` | Emitted on hash link click (bubbles, composed, cancelable) |
162
+
163
+ ## CSS Parts
164
+
165
+ Use `::part()` to style internal elements:
166
+
167
+ ```css
168
+ snice-link::part(link) {
169
+ font-weight: bold;
170
+ }
171
+
172
+ snice-link::part(external-icon) {
173
+ color: blue;
174
+ }
175
+ ```
176
+
177
+ ## Theming
178
+
179
+ The component uses these CSS custom properties:
180
+
181
+ ```css
182
+ --snice-color-primary
183
+ --snice-color-primary-dark
184
+ --snice-color-primary-darker
185
+ --snice-color-text
186
+ --snice-color-text-secondary
187
+ --snice-color-text-muted
188
+ --snice-color-text-disabled
189
+ --snice-transition-fast
190
+ ```
191
+
192
+ ## Accessibility
193
+
194
+ - Proper `href` attribute for keyboard navigation
195
+ - Correct `rel` attributes for external links
196
+ - Disabled state prevents interaction
197
+ - Screen reader friendly
198
+
199
+ ## Examples
200
+
201
+ ### Navigation Menu
202
+ ```html
203
+ <nav>
204
+ <snice-link href="/">Home</snice-link>
205
+ <snice-link href="/about">About</snice-link>
206
+ <snice-link href="/contact">Contact</snice-link>
207
+ </nav>
208
+ ```
209
+
210
+ ### Footer Links
211
+ ```html
212
+ <footer>
213
+ <snice-link href="/privacy" variant="muted">Privacy</snice-link>
214
+ <snice-link href="/terms" variant="muted">Terms</snice-link>
215
+ <snice-link href="https://twitter.com" external variant="muted">
216
+ Twitter
217
+ </snice-link>
218
+ </footer>
219
+ ```
220
+
221
+ ### Action Links
222
+ ```html
223
+ <snice-link href="/download" variant="primary">
224
+ Download Now
225
+ </snice-link>
226
+ <snice-link href="/learn-more" variant="secondary">
227
+ Learn More
228
+ </snice-link>
229
+ ```
@@ -0,0 +1,297 @@
1
+ # Slider Component
2
+
3
+ The `<snice-slider>` component provides an interactive range slider for selecting numeric values with mouse, touch, and keyboard support.
4
+
5
+ ## Table of Contents
6
+ - [Basic Usage](#basic-usage)
7
+ - [Properties](#properties)
8
+ - [Methods](#methods)
9
+ - [Events](#events)
10
+ - [Keyboard Navigation](#keyboard-navigation)
11
+ - [Features](#features)
12
+ - [Examples](#examples)
13
+
14
+ ## Basic Usage
15
+
16
+ ```html
17
+ <snice-slider
18
+ label="Volume"
19
+ min="0"
20
+ max="100"
21
+ value="50"
22
+ show-value
23
+ ></snice-slider>
24
+ ```
25
+
26
+ ```typescript
27
+ import 'snice/components/slider/snice-slider';
28
+
29
+ const slider = document.querySelector('snice-slider');
30
+ slider.addEventListener('@snice/slider-change', (e) => {
31
+ console.log('Value:', e.detail.value);
32
+ });
33
+ ```
34
+
35
+ ## Properties
36
+
37
+ | Property | Type | Default | Description |
38
+ |----------|------|---------|-------------|
39
+ | `value` | `number` | `0` | Current slider value |
40
+ | `min` | `number` | `0` | Minimum value |
41
+ | `max` | `number` | `100` | Maximum value |
42
+ | `step` | `number` | `1` | Step increment |
43
+ | `size` | `'small' \| 'medium' \| 'large'` | `'medium'` | Size variant |
44
+ | `variant` | `'default' \| 'primary' \| 'success' \| 'warning' \| 'danger'` | `'default'` | Color variant |
45
+ | `label` | `string` | `''` | Label text |
46
+ | `helperText` | `string` | `''` | Helper text below slider |
47
+ | `errorText` | `string` | `''` | Error message (shown when invalid) |
48
+ | `disabled` | `boolean` | `false` | Whether slider is disabled |
49
+ | `readonly` | `boolean` | `false` | Whether slider is readonly |
50
+ | `required` | `boolean` | `false` | Whether slider is required |
51
+ | `invalid` | `boolean` | `false` | Whether to show invalid state |
52
+ | `name` | `string` | `''` | Form field name |
53
+ | `showValue` | `boolean` | `false` | Display current value |
54
+ | `showTicks` | `boolean` | `false` | Show tick marks |
55
+ | `vertical` | `boolean` | `false` | Vertical orientation |
56
+
57
+ ## Methods
58
+
59
+ ### `focus(): void`
60
+ Give focus to the slider thumb.
61
+
62
+ ```typescript
63
+ slider.focus();
64
+ ```
65
+
66
+ ### `blur(): void`
67
+ Remove focus from the slider thumb.
68
+
69
+ ```typescript
70
+ slider.blur();
71
+ ```
72
+
73
+ ### `checkValidity(): boolean`
74
+ Check if the slider passes validation.
75
+
76
+ ```typescript
77
+ const isValid = slider.checkValidity();
78
+ ```
79
+
80
+ ### `reportValidity(): boolean`
81
+ Report validation status to the user.
82
+
83
+ ```typescript
84
+ slider.reportValidity();
85
+ ```
86
+
87
+ ### `setCustomValidity(message: string): void`
88
+ Set a custom validation message.
89
+
90
+ ```typescript
91
+ slider.setCustomValidity('Value must be between 10 and 90');
92
+ ```
93
+
94
+ ## Events
95
+
96
+ ### `@snice/slider-input`
97
+ Fired continuously while dragging the slider.
98
+
99
+ **Detail**: `{ value: number, slider: SniceSliderElement }`
100
+
101
+ ```typescript
102
+ slider.addEventListener('@snice/slider-input', (e) => {
103
+ console.log('Current value:', e.detail.value);
104
+ });
105
+ ```
106
+
107
+ ### `@snice/slider-change`
108
+ Fired when the slider value is committed (after drag ends or keyboard input).
109
+
110
+ **Detail**: `{ value: number, slider: SniceSliderElement }`
111
+
112
+ ```typescript
113
+ slider.addEventListener('@snice/slider-change', (e) => {
114
+ console.log('Final value:', e.detail.value);
115
+ });
116
+ ```
117
+
118
+ ## Keyboard Navigation
119
+
120
+ The slider supports full keyboard navigation:
121
+
122
+ | Key | Action |
123
+ |-----|--------|
124
+ | `←` / `↓` | Decrease by step |
125
+ | `→` / `↑` | Increase by step |
126
+ | `Home` | Jump to minimum |
127
+ | `End` | Jump to maximum |
128
+ | `Page Down` | Decrease by 10× step |
129
+ | `Page Up` | Increase by 10× step |
130
+
131
+ ## Features
132
+
133
+ - **Input Devices**: Full mouse, touch, and keyboard support
134
+ - **Form Integration**: Form-associated custom element with validation
135
+ - **Visual Variants**: Five color options (default, primary, success, warning, danger)
136
+ - **Orientations**: Horizontal (default) or vertical layout
137
+ - **Value Display**: Optional current value indicator
138
+ - **Tick Marks**: Optional visual step indicators
139
+ - **Step Control**: Configure increment size
140
+ - **Accessibility**: Full ARIA support with keyboard navigation
141
+
142
+ ## Examples
143
+
144
+ ### Basic Slider
145
+
146
+ ```html
147
+ <snice-slider
148
+ label="Volume"
149
+ min="0"
150
+ max="100"
151
+ value="50"
152
+ ></snice-slider>
153
+ ```
154
+
155
+ ### With Value Display
156
+
157
+ ```html
158
+ <snice-slider
159
+ label="Brightness"
160
+ min="0"
161
+ max="100"
162
+ value="75"
163
+ show-value
164
+ ></snice-slider>
165
+ ```
166
+
167
+ ### With Tick Marks
168
+
169
+ ```html
170
+ <snice-slider
171
+ label="Rating"
172
+ min="0"
173
+ max="10"
174
+ step="1"
175
+ show-ticks
176
+ show-value
177
+ ></snice-slider>
178
+ ```
179
+
180
+ ### Different Variants
181
+
182
+ ```html
183
+ <snice-slider variant="default" label="Default"></snice-slider>
184
+ <snice-slider variant="primary" label="Primary"></snice-slider>
185
+ <snice-slider variant="success" label="Success"></snice-slider>
186
+ <snice-slider variant="warning" label="Warning"></snice-slider>
187
+ <snice-slider variant="danger" label="Danger"></snice-slider>
188
+ ```
189
+
190
+ ### Different Sizes
191
+
192
+ ```html
193
+ <snice-slider size="small" label="Small"></snice-slider>
194
+ <snice-slider size="medium" label="Medium"></snice-slider>
195
+ <snice-slider size="large" label="Large"></snice-slider>
196
+ ```
197
+
198
+ ### Custom Range and Step
199
+
200
+ ```html
201
+ <!-- Temperature: 60-80°F in 0.5° increments -->
202
+ <snice-slider
203
+ label="Temperature"
204
+ min="60"
205
+ max="80"
206
+ step="0.5"
207
+ value="72"
208
+ show-value
209
+ ></snice-slider>
210
+
211
+ <!-- Percentage: 0-100 in 5% increments -->
212
+ <snice-slider
213
+ label="Discount"
214
+ min="0"
215
+ max="100"
216
+ step="5"
217
+ value="20"
218
+ show-value
219
+ show-ticks
220
+ ></snice-slider>
221
+ ```
222
+
223
+ ### Vertical Slider
224
+
225
+ ```html
226
+ <snice-slider
227
+ label="Volume"
228
+ min="0"
229
+ max="100"
230
+ value="60"
231
+ vertical
232
+ show-value
233
+ ></snice-slider>
234
+ ```
235
+
236
+ ### Error State
237
+
238
+ ```html
239
+ <snice-slider
240
+ label="Age"
241
+ min="0"
242
+ max="120"
243
+ value="150"
244
+ invalid
245
+ error-text="Value must be between 0 and 120"
246
+ ></snice-slider>
247
+ ```
248
+
249
+ ### In a Form
250
+
251
+ ```html
252
+ <form id="settings-form">
253
+ <snice-slider
254
+ name="volume"
255
+ label="Volume"
256
+ min="0"
257
+ max="100"
258
+ value="50"
259
+ required
260
+ ></snice-slider>
261
+
262
+ <snice-slider
263
+ name="brightness"
264
+ label="Brightness"
265
+ min="0"
266
+ max="100"
267
+ value="75"
268
+ ></snice-slider>
269
+
270
+ <button type="submit">Save Settings</button>
271
+ </form>
272
+
273
+ <script>
274
+ document.getElementById('settings-form').addEventListener('submit', (e) => {
275
+ e.preventDefault();
276
+ const formData = new FormData(e.target);
277
+ console.log('Volume:', formData.get('volume'));
278
+ console.log('Brightness:', formData.get('brightness'));
279
+ });
280
+ </script>
281
+ ```
282
+
283
+ ### Real-time Value Display
284
+
285
+ ```html
286
+ <snice-slider id="volume-slider" min="0" max="100" value="50"></snice-slider>
287
+ <div id="volume-display">Volume: 50</div>
288
+
289
+ <script>
290
+ const slider = document.getElementById('volume-slider');
291
+ const display = document.getElementById('volume-display');
292
+
293
+ slider.addEventListener('@snice/slider-input', (e) => {
294
+ display.textContent = `Volume: ${e.detail.value}`;
295
+ });
296
+ </script>
297
+ ```