seblify 0.2.0 → 0.3.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 (432) hide show
  1. package/README.md +114 -109
  2. package/dist/components/action/input/select/checkbox/Checkbox.svelte +378 -16
  3. package/dist/components/action/input/select/checkbox/Checkbox.svelte.d.ts +7 -0
  4. package/dist/components/action/input/select/checkbox/checkbox-relations.svelte.d.ts +47 -0
  5. package/dist/components/action/input/select/checkbox/checkbox-relations.svelte.js +154 -0
  6. package/dist/components/action/input/select/segment-control/SegmentControl.svelte +145 -21
  7. package/dist/components/action/input/select/segment-control/SegmentControl.svelte.d.ts +7 -2
  8. package/dist/components/action/input/select/switch/Switch.svelte +958 -46
  9. package/dist/components/action/input/select/switch/Switch.svelte.d.ts +21 -1
  10. package/dist/components/display/annotation/tag/Tag.svelte +160 -105
  11. package/dist/components/display/data-display/metric/duration/Duration.svelte +64 -0
  12. package/dist/components/display/data-display/metric/duration/Duration.svelte.d.ts +16 -0
  13. package/dist/components/display/data-display/metric/relative-time/RelativeTime.svelte +104 -0
  14. package/dist/components/display/data-display/metric/relative-time/RelativeTime.svelte.d.ts +16 -0
  15. package/dist/components/display/data-display/visual/timeline/Timeline.svelte +161 -0
  16. package/dist/components/display/data-display/visual/timeline/Timeline.svelte.d.ts +17 -0
  17. package/dist/components/display/data-display/visual/timeline/TimelineItem.svelte +489 -0
  18. package/dist/components/display/data-display/visual/timeline/TimelineItem.svelte.d.ts +15 -0
  19. package/dist/components/display/data-display/visual/timeline/context.d.ts +14 -0
  20. package/dist/components/display/data-display/visual/timeline/context.js +14 -0
  21. package/dist/components/display/feedback/loading/loading-dots/LoadingDots.svelte +139 -51
  22. package/dist/components/display/feedback/loading/spinner/Spinner.svelte +137 -49
  23. package/dist/components/display/media/icon/IconGlyph.svelte +8 -2
  24. package/dist/components/display/motion/collapse/Collapse.svelte +115 -0
  25. package/dist/components/display/motion/collapse/Collapse.svelte.d.ts +17 -0
  26. package/dist/components/display/typography/accordion/Accordion.svelte +347 -0
  27. package/dist/components/display/typography/accordion/Accordion.svelte.d.ts +13 -0
  28. package/dist/components/display/typography/accordion/AccordionGroup.svelte +132 -0
  29. package/dist/components/display/typography/accordion/AccordionGroup.svelte.d.ts +11 -0
  30. package/dist/components/display/typography/accordion/context.d.ts +8 -0
  31. package/dist/components/display/typography/accordion/context.js +8 -0
  32. package/dist/components/display/typography/code-snippet/CodeSnippet.svelte +145 -0
  33. package/dist/components/display/typography/code-snippet/CodeSnippet.svelte.d.ts +9 -0
  34. package/dist/components/display/typography/code-snippet/tokenize.d.ts +10 -0
  35. package/dist/components/display/typography/code-snippet/tokenize.js +352 -0
  36. package/dist/components/framework/layout/container/app-shell/AppShell.svelte +1 -1
  37. package/dist/components/framework/navigation/sidebar/sidebar/Sidebar.svelte +712 -0
  38. package/dist/components/framework/navigation/sidebar/sidebar/Sidebar.svelte.d.ts +18 -0
  39. package/dist/components/framework/navigation/sidebar/sidenav/Sidenav.svelte +195 -0
  40. package/dist/components/framework/navigation/sidebar/sidenav/Sidenav.svelte.d.ts +17 -0
  41. package/dist/components/framework/navigation/sidebar/sidenav/SidenavItem.svelte +89 -0
  42. package/dist/components/framework/navigation/sidebar/sidenav/SidenavItem.svelte.d.ts +19 -0
  43. package/dist/components/framework/navigation/sidebar/sidenav/fragments/SidenavItemBranch.svelte +203 -0
  44. package/dist/components/framework/navigation/sidebar/sidenav/fragments/SidenavItemBranch.svelte.d.ts +21 -0
  45. package/dist/components/framework/navigation/sidebar/sidenav/fragments/SidenavItemDivider.svelte +17 -0
  46. package/dist/components/framework/navigation/sidebar/sidenav/fragments/SidenavItemDivider.svelte.d.ts +26 -0
  47. package/dist/components/framework/navigation/sidebar/sidenav/fragments/SidenavItemLeaf.svelte +85 -0
  48. package/dist/components/framework/navigation/sidebar/sidenav/fragments/SidenavItemLeaf.svelte.d.ts +17 -0
  49. package/dist/components/framework/navigation/sidebar/sidenav/fragments/SidenavItemRow.svelte +404 -0
  50. package/dist/components/framework/navigation/sidebar/sidenav/fragments/SidenavItemRow.svelte.d.ts +30 -0
  51. package/dist/components/framework/navigation/sidebar/sidenav/sidenav.d.ts +29 -0
  52. package/dist/components/framework/navigation/sidebar/sidenav/sidenav.js +86 -0
  53. package/dist/components/framework/overlay/tooltip/Tooltip.svelte +1012 -0
  54. package/dist/components/framework/overlay/tooltip/Tooltip.svelte.d.ts +31 -0
  55. package/dist/components/utility/format/duration/formatDuration.d.ts +15 -0
  56. package/dist/components/utility/format/duration/formatDuration.js +218 -0
  57. package/dist/components/utility/format/relative-time/formatRelativeTime.d.ts +35 -0
  58. package/dist/components/utility/format/relative-time/formatRelativeTime.js +343 -0
  59. package/dist/design-system/inheritance/tokens.d.ts +7 -0
  60. package/dist/design-system/inheritance/tokens.js +39 -0
  61. package/dist/design-system/reserved-props/allowed-options.d.ts +13 -5
  62. package/dist/design-system/theme/tokens.js +48 -0
  63. package/dist/icons/generated/alarm-snooze.svelte +16 -0
  64. package/dist/icons/generated/alarm-snooze.svelte.d.ts +7 -0
  65. package/dist/icons/generated/alarm.svelte +16 -0
  66. package/dist/icons/generated/alarm.svelte.d.ts +7 -0
  67. package/dist/icons/generated/alert-octagon-outline.svelte +16 -0
  68. package/dist/icons/generated/alert-octagon-outline.svelte.d.ts +7 -0
  69. package/dist/icons/generated/alert-octagon.svelte +16 -0
  70. package/dist/icons/generated/alert-octagon.svelte.d.ts +7 -0
  71. package/dist/icons/generated/arrow-bottom-left-thin.svelte +16 -0
  72. package/dist/icons/generated/arrow-bottom-left-thin.svelte.d.ts +7 -0
  73. package/dist/icons/generated/arrow-bottom-right-thin.svelte +16 -0
  74. package/dist/icons/generated/arrow-bottom-right-thin.svelte.d.ts +7 -0
  75. package/dist/icons/generated/arrow-down-thin.svelte +16 -0
  76. package/dist/icons/generated/arrow-down-thin.svelte.d.ts +7 -0
  77. package/dist/icons/generated/arrow-left-thin.svelte +16 -0
  78. package/dist/icons/generated/arrow-left-thin.svelte.d.ts +7 -0
  79. package/dist/icons/generated/arrow-right-thin.svelte +16 -0
  80. package/dist/icons/generated/arrow-right-thin.svelte.d.ts +7 -0
  81. package/dist/icons/generated/arrow-top-left-thin.svelte +16 -0
  82. package/dist/icons/generated/arrow-top-left-thin.svelte.d.ts +7 -0
  83. package/dist/icons/generated/arrow-top-right-thin.svelte +16 -0
  84. package/dist/icons/generated/arrow-top-right-thin.svelte.d.ts +7 -0
  85. package/dist/icons/generated/arrow-up-thin.svelte +16 -0
  86. package/dist/icons/generated/arrow-up-thin.svelte.d.ts +7 -0
  87. package/dist/icons/generated/bell-outline.svelte +16 -0
  88. package/dist/icons/generated/bell-outline.svelte.d.ts +7 -0
  89. package/dist/icons/generated/bell.svelte +16 -0
  90. package/dist/icons/generated/bell.svelte.d.ts +7 -0
  91. package/dist/icons/generated/book-open-blank-variant-outline.svelte +16 -0
  92. package/dist/icons/generated/book-open-blank-variant-outline.svelte.d.ts +7 -0
  93. package/dist/icons/generated/book-open-blank-variant.svelte +16 -0
  94. package/dist/icons/generated/book-open-blank-variant.svelte.d.ts +7 -0
  95. package/dist/icons/generated/book-open-page-variant-outline.svelte +16 -0
  96. package/dist/icons/generated/book-open-page-variant-outline.svelte.d.ts +7 -0
  97. package/dist/icons/generated/book-open-page-variant.svelte +16 -0
  98. package/dist/icons/generated/book-open-page-variant.svelte.d.ts +7 -0
  99. package/dist/icons/generated/book-open-variant-outline.svelte +16 -0
  100. package/dist/icons/generated/book-open-variant-outline.svelte.d.ts +7 -0
  101. package/dist/icons/generated/book-open-variant.svelte +16 -0
  102. package/dist/icons/generated/book-open-variant.svelte.d.ts +7 -0
  103. package/dist/icons/generated/book-plus-outline.svelte +16 -0
  104. package/dist/icons/generated/book-plus-outline.svelte.d.ts +7 -0
  105. package/dist/icons/generated/button-cursor.svelte +16 -0
  106. package/dist/icons/generated/button-cursor.svelte.d.ts +7 -0
  107. package/dist/icons/generated/calendar-blank-outline.svelte +16 -0
  108. package/dist/icons/generated/calendar-blank-outline.svelte.d.ts +7 -0
  109. package/dist/icons/generated/calendar-blank.svelte +16 -0
  110. package/dist/icons/generated/calendar-blank.svelte.d.ts +7 -0
  111. package/dist/icons/generated/calendar-outline.svelte +16 -0
  112. package/dist/icons/generated/calendar-outline.svelte.d.ts +7 -0
  113. package/dist/icons/generated/calendar.svelte +16 -0
  114. package/dist/icons/generated/calendar.svelte.d.ts +7 -0
  115. package/dist/icons/generated/cancel.svelte +16 -0
  116. package/dist/icons/generated/cancel.svelte.d.ts +7 -0
  117. package/dist/icons/generated/certificate-outline.svelte +16 -0
  118. package/dist/icons/generated/certificate-outline.svelte.d.ts +7 -0
  119. package/dist/icons/generated/chart-box-outline.svelte +16 -0
  120. package/dist/icons/generated/chart-box-outline.svelte.d.ts +7 -0
  121. package/dist/icons/generated/chart-box.svelte +16 -0
  122. package/dist/icons/generated/chart-box.svelte.d.ts +7 -0
  123. package/dist/icons/generated/chat-outline.svelte +16 -0
  124. package/dist/icons/generated/chat-outline.svelte.d.ts +7 -0
  125. package/dist/icons/generated/chat-processing-outline.svelte +16 -0
  126. package/dist/icons/generated/chat-processing-outline.svelte.d.ts +7 -0
  127. package/dist/icons/generated/chat-processing.svelte +16 -0
  128. package/dist/icons/generated/chat-processing.svelte.d.ts +7 -0
  129. package/dist/icons/generated/chat-question-outline.svelte +16 -0
  130. package/dist/icons/generated/chat-question-outline.svelte.d.ts +7 -0
  131. package/dist/icons/generated/chat-question.svelte +16 -0
  132. package/dist/icons/generated/chat-question.svelte.d.ts +7 -0
  133. package/dist/icons/generated/chat.svelte +16 -0
  134. package/dist/icons/generated/chat.svelte.d.ts +7 -0
  135. package/dist/icons/generated/check-thick.svelte +16 -0
  136. package/dist/icons/generated/check-thick.svelte.d.ts +7 -0
  137. package/dist/icons/generated/check.svelte +16 -0
  138. package/dist/icons/generated/check.svelte.d.ts +7 -0
  139. package/dist/icons/generated/circle-large-outline.svelte +16 -0
  140. package/dist/icons/generated/circle-large-outline.svelte.d.ts +7 -0
  141. package/dist/icons/generated/circle-large.svelte +16 -0
  142. package/dist/icons/generated/circle-large.svelte.d.ts +7 -0
  143. package/dist/icons/generated/circle-medium.svelte +16 -0
  144. package/dist/icons/generated/circle-medium.svelte.d.ts +7 -0
  145. package/dist/icons/generated/circle-outline.svelte +16 -0
  146. package/dist/icons/generated/circle-outline.svelte.d.ts +7 -0
  147. package/dist/icons/generated/circle-small.svelte +16 -0
  148. package/dist/icons/generated/circle-small.svelte.d.ts +7 -0
  149. package/dist/icons/generated/circle.svelte +16 -0
  150. package/dist/icons/generated/circle.svelte.d.ts +7 -0
  151. package/dist/icons/generated/clipboard-account-outline.svelte +16 -0
  152. package/dist/icons/generated/clipboard-account-outline.svelte.d.ts +7 -0
  153. package/dist/icons/generated/clipboard-arrow-down-outline.svelte +16 -0
  154. package/dist/icons/generated/clipboard-arrow-down-outline.svelte.d.ts +7 -0
  155. package/dist/icons/generated/clipboard-arrow-up-outline.svelte +16 -0
  156. package/dist/icons/generated/clipboard-arrow-up-outline.svelte.d.ts +7 -0
  157. package/dist/icons/generated/clipboard-clock-outline.svelte +16 -0
  158. package/dist/icons/generated/clipboard-clock-outline.svelte.d.ts +7 -0
  159. package/dist/icons/generated/clipboard-edit-outline.svelte +16 -0
  160. package/dist/icons/generated/clipboard-edit-outline.svelte.d.ts +7 -0
  161. package/dist/icons/generated/clipboard-edit.svelte +16 -0
  162. package/dist/icons/generated/clipboard-edit.svelte.d.ts +7 -0
  163. package/dist/icons/generated/clipboard-flow-outline.svelte +16 -0
  164. package/dist/icons/generated/clipboard-flow-outline.svelte.d.ts +7 -0
  165. package/dist/icons/generated/clipboard-text-clock-outline.svelte +16 -0
  166. package/dist/icons/generated/clipboard-text-clock-outline.svelte.d.ts +7 -0
  167. package/dist/icons/generated/clipboard-text-clock.svelte +16 -0
  168. package/dist/icons/generated/clipboard-text-clock.svelte.d.ts +7 -0
  169. package/dist/icons/generated/clipboard-text-outline.svelte +16 -0
  170. package/dist/icons/generated/clipboard-text-outline.svelte.d.ts +7 -0
  171. package/dist/icons/generated/clipboard-text.svelte +16 -0
  172. package/dist/icons/generated/clipboard-text.svelte.d.ts +7 -0
  173. package/dist/icons/generated/clock-outline.svelte +16 -0
  174. package/dist/icons/generated/clock-outline.svelte.d.ts +7 -0
  175. package/dist/icons/generated/clock.svelte +16 -0
  176. package/dist/icons/generated/clock.svelte.d.ts +7 -0
  177. package/dist/icons/generated/close-thick.svelte +16 -0
  178. package/dist/icons/generated/close-thick.svelte.d.ts +7 -0
  179. package/dist/icons/generated/close.svelte +16 -0
  180. package/dist/icons/generated/close.svelte.d.ts +7 -0
  181. package/dist/icons/generated/cog-outline.svelte +16 -0
  182. package/dist/icons/generated/cog-outline.svelte.d.ts +7 -0
  183. package/dist/icons/generated/cog.svelte +16 -0
  184. package/dist/icons/generated/cog.svelte.d.ts +7 -0
  185. package/dist/icons/generated/copy.svelte +16 -0
  186. package/dist/icons/generated/copy.svelte.d.ts +7 -0
  187. package/dist/icons/generated/creation-outline.svelte +16 -0
  188. package/dist/icons/generated/creation-outline.svelte.d.ts +7 -0
  189. package/dist/icons/generated/creation.svelte +16 -0
  190. package/dist/icons/generated/creation.svelte.d.ts +7 -0
  191. package/dist/icons/generated/cursor-default-click-outline.svelte +16 -0
  192. package/dist/icons/generated/cursor-default-click-outline.svelte.d.ts +7 -0
  193. package/dist/icons/generated/cursor-default-click.svelte +16 -0
  194. package/dist/icons/generated/cursor-default-click.svelte.d.ts +7 -0
  195. package/dist/icons/generated/duck.svelte +16 -0
  196. package/dist/icons/generated/duck.svelte.d.ts +7 -0
  197. package/dist/icons/generated/email-open-outline.svelte +23 -0
  198. package/dist/icons/generated/email-open-outline.svelte.d.ts +7 -0
  199. package/dist/icons/generated/email-open.svelte +16 -0
  200. package/dist/icons/generated/email-open.svelte.d.ts +7 -0
  201. package/dist/icons/generated/email-outline.svelte +16 -0
  202. package/dist/icons/generated/email-outline.svelte.d.ts +7 -0
  203. package/dist/icons/generated/email.svelte +16 -0
  204. package/dist/icons/generated/email.svelte.d.ts +7 -0
  205. package/dist/icons/generated/emoticon-angry-outline.svelte +16 -0
  206. package/dist/icons/generated/emoticon-angry-outline.svelte.d.ts +7 -0
  207. package/dist/icons/generated/emoticon-angry.svelte +16 -0
  208. package/dist/icons/generated/emoticon-angry.svelte.d.ts +7 -0
  209. package/dist/icons/generated/emoticon-confused-outline.svelte +16 -0
  210. package/dist/icons/generated/emoticon-confused-outline.svelte.d.ts +7 -0
  211. package/dist/icons/generated/emoticon-confused.svelte +16 -0
  212. package/dist/icons/generated/emoticon-confused.svelte.d.ts +7 -0
  213. package/dist/icons/generated/emoticon-cool-outline.svelte +16 -0
  214. package/dist/icons/generated/emoticon-cool-outline.svelte.d.ts +7 -0
  215. package/dist/icons/generated/emoticon-cool.svelte +16 -0
  216. package/dist/icons/generated/emoticon-cool.svelte.d.ts +7 -0
  217. package/dist/icons/generated/emoticon-excited-outline.svelte +16 -0
  218. package/dist/icons/generated/emoticon-excited-outline.svelte.d.ts +7 -0
  219. package/dist/icons/generated/emoticon-excited.svelte +16 -0
  220. package/dist/icons/generated/emoticon-excited.svelte.d.ts +7 -0
  221. package/dist/icons/generated/emoticon-frown-outline.svelte +16 -0
  222. package/dist/icons/generated/emoticon-frown-outline.svelte.d.ts +7 -0
  223. package/dist/icons/generated/emoticon-frown.svelte +16 -0
  224. package/dist/icons/generated/emoticon-frown.svelte.d.ts +7 -0
  225. package/dist/icons/generated/emoticon-happy-outline.svelte +16 -0
  226. package/dist/icons/generated/emoticon-happy-outline.svelte.d.ts +7 -0
  227. package/dist/icons/generated/emoticon-happy.svelte +16 -0
  228. package/dist/icons/generated/emoticon-happy.svelte.d.ts +7 -0
  229. package/dist/icons/generated/emoticon-neutral-outline.svelte +16 -0
  230. package/dist/icons/generated/emoticon-neutral-outline.svelte.d.ts +7 -0
  231. package/dist/icons/generated/emoticon-neutral.svelte +16 -0
  232. package/dist/icons/generated/emoticon-neutral.svelte.d.ts +7 -0
  233. package/dist/icons/generated/emoticon-outline.svelte +16 -0
  234. package/dist/icons/generated/emoticon-outline.svelte.d.ts +7 -0
  235. package/dist/icons/generated/emoticon-sad-outline.svelte +16 -0
  236. package/dist/icons/generated/emoticon-sad-outline.svelte.d.ts +7 -0
  237. package/dist/icons/generated/emoticon-sad.svelte +16 -0
  238. package/dist/icons/generated/emoticon-sad.svelte.d.ts +7 -0
  239. package/dist/icons/generated/emoticon.svelte +16 -0
  240. package/dist/icons/generated/emoticon.svelte.d.ts +7 -0
  241. package/dist/icons/generated/eye-closed.svelte +16 -0
  242. package/dist/icons/generated/eye-closed.svelte.d.ts +7 -0
  243. package/dist/icons/generated/eye-off-outline.svelte +16 -0
  244. package/dist/icons/generated/eye-off-outline.svelte.d.ts +7 -0
  245. package/dist/icons/generated/eye-off.svelte +16 -0
  246. package/dist/icons/generated/eye-off.svelte.d.ts +7 -0
  247. package/dist/icons/generated/eye-outline.svelte +16 -0
  248. package/dist/icons/generated/eye-outline.svelte.d.ts +7 -0
  249. package/dist/icons/generated/eye.svelte +16 -0
  250. package/dist/icons/generated/eye.svelte.d.ts +7 -0
  251. package/dist/icons/generated/eyedropper.svelte +16 -0
  252. package/dist/icons/generated/eyedropper.svelte.d.ts +7 -0
  253. package/dist/icons/generated/file-document-outline.svelte +16 -0
  254. package/dist/icons/generated/file-document-outline.svelte.d.ts +7 -0
  255. package/dist/icons/generated/file-document.svelte +16 -0
  256. package/dist/icons/generated/file-document.svelte.d.ts +7 -0
  257. package/dist/icons/generated/file-star-outline.svelte +16 -0
  258. package/dist/icons/generated/file-star-outline.svelte.d.ts +7 -0
  259. package/dist/icons/generated/flower-head.svelte +16 -0
  260. package/dist/icons/generated/flower-head.svelte.d.ts +7 -0
  261. package/dist/icons/generated/flower-tulip.svelte +16 -0
  262. package/dist/icons/generated/flower-tulip.svelte.d.ts +7 -0
  263. package/dist/icons/generated/flower.svelte +16 -0
  264. package/dist/icons/generated/flower.svelte.d.ts +7 -0
  265. package/dist/icons/generated/folder-open-outline.svelte +16 -0
  266. package/dist/icons/generated/folder-open-outline.svelte.d.ts +7 -0
  267. package/dist/icons/generated/folder-open.svelte +16 -0
  268. package/dist/icons/generated/folder-open.svelte.d.ts +7 -0
  269. package/dist/icons/generated/folder-outline.svelte +16 -0
  270. package/dist/icons/generated/folder-outline.svelte.d.ts +7 -0
  271. package/dist/icons/generated/folder.svelte +16 -0
  272. package/dist/icons/generated/folder.svelte.d.ts +7 -0
  273. package/dist/icons/generated/format-color-fill.svelte +16 -0
  274. package/dist/icons/generated/format-color-fill.svelte.d.ts +7 -0
  275. package/dist/icons/generated/format-color-highlight.svelte +16 -0
  276. package/dist/icons/generated/format-color-highlight.svelte.d.ts +7 -0
  277. package/dist/icons/generated/format-list-bulleted-square.svelte +16 -0
  278. package/dist/icons/generated/format-list-bulleted-square.svelte.d.ts +7 -0
  279. package/dist/icons/generated/format-list-bulleted.svelte +16 -0
  280. package/dist/icons/generated/format-list-bulleted.svelte.d.ts +7 -0
  281. package/dist/icons/generated/format-quote-close-outline.svelte +16 -0
  282. package/dist/icons/generated/format-quote-close-outline.svelte.d.ts +7 -0
  283. package/dist/icons/generated/format-quote-close.svelte +16 -0
  284. package/dist/icons/generated/format-quote-close.svelte.d.ts +7 -0
  285. package/dist/icons/generated/format-quote-open-outline.svelte +16 -0
  286. package/dist/icons/generated/format-quote-open-outline.svelte.d.ts +7 -0
  287. package/dist/icons/generated/format-quote-open.svelte +16 -0
  288. package/dist/icons/generated/format-quote-open.svelte.d.ts +7 -0
  289. package/dist/icons/generated/group.svelte +16 -0
  290. package/dist/icons/generated/group.svelte.d.ts +7 -0
  291. package/dist/icons/generated/handle-grip.svelte +16 -0
  292. package/dist/icons/generated/handle-grip.svelte.d.ts +7 -0
  293. package/dist/icons/generated/image-outline.svelte +16 -0
  294. package/dist/icons/generated/image-outline.svelte.d.ts +7 -0
  295. package/dist/icons/generated/image.svelte +16 -0
  296. package/dist/icons/generated/image.svelte.d.ts +7 -0
  297. package/dist/icons/generated/index.d.ts +177 -0
  298. package/dist/icons/generated/index.js +177 -0
  299. package/dist/icons/generated/lead-pencil.svelte +16 -0
  300. package/dist/icons/generated/lead-pencil.svelte.d.ts +7 -0
  301. package/dist/icons/generated/lightbulb-outline.svelte +16 -0
  302. package/dist/icons/generated/lightbulb-outline.svelte.d.ts +7 -0
  303. package/dist/icons/generated/lightbulb.svelte +16 -0
  304. package/dist/icons/generated/lightbulb.svelte.d.ts +7 -0
  305. package/dist/icons/generated/lock-open-outline.svelte +16 -0
  306. package/dist/icons/generated/lock-open-outline.svelte.d.ts +7 -0
  307. package/dist/icons/generated/lock-open.svelte +16 -0
  308. package/dist/icons/generated/lock-open.svelte.d.ts +7 -0
  309. package/dist/icons/generated/lock-outline.svelte +16 -0
  310. package/dist/icons/generated/lock-outline.svelte.d.ts +7 -0
  311. package/dist/icons/generated/lock.svelte +16 -0
  312. package/dist/icons/generated/lock.svelte.d.ts +7 -0
  313. package/dist/icons/generated/magic-wand.svelte +16 -0
  314. package/dist/icons/generated/magic-wand.svelte.d.ts +7 -0
  315. package/dist/icons/generated/magnify.svelte +16 -0
  316. package/dist/icons/generated/magnify.svelte.d.ts +7 -0
  317. package/dist/icons/generated/manifest.js +1493 -63
  318. package/dist/icons/generated/menu-down.svelte +16 -0
  319. package/dist/icons/generated/menu-down.svelte.d.ts +7 -0
  320. package/dist/icons/generated/menu-up.svelte +16 -0
  321. package/dist/icons/generated/menu-up.svelte.d.ts +7 -0
  322. package/dist/icons/generated/minus-thick.svelte +16 -0
  323. package/dist/icons/generated/minus-thick.svelte.d.ts +7 -0
  324. package/dist/icons/generated/minus.svelte +16 -0
  325. package/dist/icons/generated/minus.svelte.d.ts +7 -0
  326. package/dist/icons/generated/page-layout-header-footer.svelte +16 -0
  327. package/dist/icons/generated/page-layout-header-footer.svelte.d.ts +7 -0
  328. package/dist/icons/generated/palette-outline.svelte +16 -0
  329. package/dist/icons/generated/palette-outline.svelte.d.ts +7 -0
  330. package/dist/icons/generated/palette.svelte +16 -0
  331. package/dist/icons/generated/palette.svelte.d.ts +7 -0
  332. package/dist/icons/generated/pause.svelte +16 -0
  333. package/dist/icons/generated/pause.svelte.d.ts +7 -0
  334. package/dist/icons/generated/pen.svelte +16 -0
  335. package/dist/icons/generated/pen.svelte.d.ts +7 -0
  336. package/dist/icons/generated/pencil-outline.svelte +16 -0
  337. package/dist/icons/generated/pencil-outline.svelte.d.ts +7 -0
  338. package/dist/icons/generated/pencil.svelte +16 -0
  339. package/dist/icons/generated/pencil.svelte.d.ts +7 -0
  340. package/dist/icons/generated/percent.svelte +16 -0
  341. package/dist/icons/generated/percent.svelte.d.ts +7 -0
  342. package/dist/icons/generated/pine-tree-box.svelte +16 -0
  343. package/dist/icons/generated/pine-tree-box.svelte.d.ts +7 -0
  344. package/dist/icons/generated/pine-tree-variant-outline.svelte +16 -0
  345. package/dist/icons/generated/pine-tree-variant-outline.svelte.d.ts +7 -0
  346. package/dist/icons/generated/play-pause.svelte +16 -0
  347. package/dist/icons/generated/play-pause.svelte.d.ts +7 -0
  348. package/dist/icons/generated/play.svelte +16 -0
  349. package/dist/icons/generated/play.svelte.d.ts +7 -0
  350. package/dist/icons/generated/plus-thick.svelte +16 -0
  351. package/dist/icons/generated/plus-thick.svelte.d.ts +7 -0
  352. package/dist/icons/generated/plus.svelte +16 -0
  353. package/dist/icons/generated/plus.svelte.d.ts +7 -0
  354. package/dist/icons/generated/reset-focus.svelte +16 -0
  355. package/dist/icons/generated/reset-focus.svelte.d.ts +7 -0
  356. package/dist/icons/generated/reset.svelte +16 -0
  357. package/dist/icons/generated/reset.svelte.d.ts +7 -0
  358. package/dist/icons/generated/ruler-square.svelte +16 -0
  359. package/dist/icons/generated/ruler-square.svelte.d.ts +7 -0
  360. package/dist/icons/generated/ruler.svelte +16 -0
  361. package/dist/icons/generated/ruler.svelte.d.ts +7 -0
  362. package/dist/icons/generated/star-outline.svelte +16 -0
  363. package/dist/icons/generated/star-outline.svelte.d.ts +7 -0
  364. package/dist/icons/generated/star.svelte +16 -0
  365. package/dist/icons/generated/star.svelte.d.ts +7 -0
  366. package/dist/icons/generated/table-border.svelte +16 -0
  367. package/dist/icons/generated/table-border.svelte.d.ts +7 -0
  368. package/dist/icons/generated/tag-multiple-outline.svelte +16 -0
  369. package/dist/icons/generated/tag-multiple-outline.svelte.d.ts +7 -0
  370. package/dist/icons/generated/tag-multiple.svelte +16 -0
  371. package/dist/icons/generated/tag-multiple.svelte.d.ts +7 -0
  372. package/dist/icons/generated/tag-outline.svelte +16 -0
  373. package/dist/icons/generated/tag-outline.svelte.d.ts +7 -0
  374. package/dist/icons/generated/tag.svelte +16 -0
  375. package/dist/icons/generated/tag.svelte.d.ts +7 -0
  376. package/dist/icons/generated/text-box-outline.svelte +16 -0
  377. package/dist/icons/generated/text-box-outline.svelte.d.ts +7 -0
  378. package/dist/icons/generated/text-box-plus-outline.svelte +16 -0
  379. package/dist/icons/generated/text-box-plus-outline.svelte.d.ts +7 -0
  380. package/dist/icons/generated/text-box-plus.svelte +16 -0
  381. package/dist/icons/generated/text-box-plus.svelte.d.ts +7 -0
  382. package/dist/icons/generated/text-box.svelte +16 -0
  383. package/dist/icons/generated/text-box.svelte.d.ts +7 -0
  384. package/dist/icons/generated/thumb-down-outline.svelte +16 -0
  385. package/dist/icons/generated/thumb-down-outline.svelte.d.ts +7 -0
  386. package/dist/icons/generated/thumb-down.svelte +16 -0
  387. package/dist/icons/generated/thumb-down.svelte.d.ts +7 -0
  388. package/dist/icons/generated/thumb-up-outline.svelte +16 -0
  389. package/dist/icons/generated/thumb-up-outline.svelte.d.ts +7 -0
  390. package/dist/icons/generated/thumb-up.svelte +16 -0
  391. package/dist/icons/generated/thumb-up.svelte.d.ts +7 -0
  392. package/dist/icons/generated/tilde.svelte +16 -0
  393. package/dist/icons/generated/tilde.svelte.d.ts +7 -0
  394. package/dist/icons/generated/tooltip-image-outline.svelte +16 -0
  395. package/dist/icons/generated/tooltip-image-outline.svelte.d.ts +7 -0
  396. package/dist/icons/generated/tooltip-question-outline.svelte +16 -0
  397. package/dist/icons/generated/tooltip-question-outline.svelte.d.ts +7 -0
  398. package/dist/icons/generated/tooltip-question.svelte +16 -0
  399. package/dist/icons/generated/tooltip-question.svelte.d.ts +7 -0
  400. package/dist/icons/generated/tooltip-text-outline.svelte +16 -0
  401. package/dist/icons/generated/tooltip-text-outline.svelte.d.ts +7 -0
  402. package/dist/icons/generated/tooltip-text.svelte +16 -0
  403. package/dist/icons/generated/tooltip-text.svelte.d.ts +7 -0
  404. package/dist/icons/generated/triangle-down-outline.svelte +16 -0
  405. package/dist/icons/generated/triangle-down-outline.svelte.d.ts +7 -0
  406. package/dist/icons/generated/triangle-down.svelte +16 -0
  407. package/dist/icons/generated/triangle-down.svelte.d.ts +7 -0
  408. package/dist/icons/generated/triangle-outline.svelte +16 -0
  409. package/dist/icons/generated/triangle-outline.svelte.d.ts +7 -0
  410. package/dist/icons/generated/triangle-small-down.svelte +16 -0
  411. package/dist/icons/generated/triangle-small-down.svelte.d.ts +7 -0
  412. package/dist/icons/generated/triangle-small.svelte +16 -0
  413. package/dist/icons/generated/triangle-small.svelte.d.ts +7 -0
  414. package/dist/icons/generated/triangle.svelte +16 -0
  415. package/dist/icons/generated/triangle.svelte.d.ts +7 -0
  416. package/dist/icons/generated/view-grid-outline.svelte +16 -0
  417. package/dist/icons/generated/view-grid-outline.svelte.d.ts +7 -0
  418. package/dist/icons/generated/view-grid.svelte +16 -0
  419. package/dist/icons/generated/view-grid.svelte.d.ts +7 -0
  420. package/dist/index.d.ts +16 -3
  421. package/dist/index.js +15 -2
  422. package/dist/styles/tone-context.css +113 -0
  423. package/dist/theme.css +22 -0
  424. package/package.json +16 -3
  425. package/dist/components/framework/layout/container/sidebar/Sidebar.svelte +0 -134
  426. package/dist/components/framework/layout/container/sidebar/Sidebar.svelte.d.ts +0 -9
  427. package/dist/components/framework/navigation/sidenav/Sidenav.svelte +0 -86
  428. package/dist/components/framework/navigation/sidenav/Sidenav.svelte.d.ts +0 -8
  429. package/dist/components/framework/navigation/sidenav/SidenavTree.svelte +0 -265
  430. package/dist/components/framework/navigation/sidenav/SidenavTree.svelte.d.ts +0 -14
  431. package/dist/components/framework/navigation/sidenav/sidenav.d.ts +0 -6
  432. package/dist/components/framework/navigation/sidenav/sidenav.js +0 -1
@@ -1,51 +1,634 @@
1
1
  <script lang="ts">
2
- import type { SeblifyProps } from 'seblify';
2
+ import type { SeblifyProps, CustomCssSize } from 'seblify';
3
+ import { CircleOutlineIcon, HandleGripIcon, MinusIcon } from 'seblify/icons';
4
+
5
+ type SwitchRadius = 'none' | 'sm' | 'md' | 'lg' | 'full' | CustomCssSize;
6
+ type SwitchAnimation = 'smooth' | 'bouncy';
7
+ type SwitchOrientation = 'horizontal' | 'vertical';
8
+ type SwitchShape = 'pill' | 'floating' | 'line' | 'flat' | 'long';
9
+ type SwitchSize =
10
+ | 'xxs'
11
+ | 'xs'
12
+ | 'sm'
13
+ | 'md'
14
+ | 'lg'
15
+ | 'xl'
16
+ | 'xxl'
17
+ | CustomCssSize;
18
+ type SwitchTone =
19
+ | 'neutral'
20
+ | 'primary'
21
+ | 'secondary'
22
+ | 'success'
23
+ | 'danger'
24
+ | 'warning'
25
+ | 'info'
26
+ | 'inverse';
27
+ type SwitchVariant = 'solid' | 'soft' | 'tint' | 'outline';
3
28
 
4
29
  type Props = SeblifyProps<{
30
+ animation?: SwitchAnimation;
31
+ ariaLabel?: string;
5
32
  checked?: boolean;
33
+ description?: string;
6
34
  disabled?: boolean;
35
+ duration?: number;
36
+ focusTone?: SwitchTone;
7
37
  label?: string;
8
- description?: string;
9
38
  name?: string;
39
+ orientation?: SwitchOrientation;
40
+ radius?: SwitchRadius;
41
+ shape?: SwitchShape;
42
+ showGripIcon?: boolean;
43
+ showTrackIcon?: boolean;
44
+ size?: SwitchSize;
45
+ tone?: SwitchTone;
10
46
  value?: string;
47
+ variant?: SwitchVariant;
11
48
  }>;
12
49
 
50
+ const SWITCH_SIZE_MAP: Record<Exclude<SwitchSize, CustomCssSize>, string> = {
51
+ xxs: '1rem',
52
+ xs: '1.125rem',
53
+ sm: '1.25rem',
54
+ md: '1.5rem',
55
+ lg: '1.75rem',
56
+ xl: '2rem',
57
+ xxl: '2.25rem',
58
+ };
59
+
60
+ const SWITCH_RADIUS_MAP: Record<
61
+ Exclude<SwitchRadius, CustomCssSize>,
62
+ string
63
+ > = {
64
+ none: '0',
65
+ sm: 'calc(var(--switch-size) * 0.1666667)',
66
+ md: 'calc(var(--switch-size) * 0.25)',
67
+ lg: 'calc(var(--switch-size) * 0.3333333)',
68
+ full: '999px',
69
+ };
70
+
71
+ function resolveSizeValue(size: SwitchSize): string {
72
+ if (typeof size === 'number') {
73
+ return `${size}px`;
74
+ }
75
+
76
+ return SWITCH_SIZE_MAP[size as keyof typeof SWITCH_SIZE_MAP] ?? size;
77
+ }
78
+
79
+ function resolveRadiusValue(radius: SwitchRadius): string {
80
+ if (typeof radius === 'number') {
81
+ return `${radius}px`;
82
+ }
83
+
84
+ return (
85
+ SWITCH_RADIUS_MAP[radius as keyof typeof SWITCH_RADIUS_MAP] ?? radius
86
+ );
87
+ }
88
+
89
+ function resolveDurationNumber(duration: number): number {
90
+ if (!Number.isFinite(duration)) {
91
+ return 0;
92
+ }
93
+
94
+ return Math.max(0, duration);
95
+ }
96
+
97
+ function resolveDurationValue(duration: number): string {
98
+ return `${resolveDurationNumber(duration)}ms`;
99
+ }
100
+
101
+ function supportsThumbGrip(shape: SwitchShape): boolean {
102
+ return shape === 'pill' || shape === 'floating' || shape === 'line';
103
+ }
104
+
105
+ function supportsTrackIcons(shape: SwitchShape): boolean {
106
+ return shape !== 'line';
107
+ }
108
+
109
+ function resolveGripIconSize(shape: SwitchShape): string {
110
+ return shape === 'floating' || shape === 'line' ? '1em' : '0.75em';
111
+ }
112
+
113
+ const BOUNCY_MOTION_CLEAR_BUFFER = 80;
114
+ const switchId = $props.id();
115
+
13
116
  let {
14
117
  checked = $bindable(false),
118
+ animation = 'smooth',
119
+ ariaLabel,
120
+ description,
15
121
  disabled = false,
122
+ duration = 190,
123
+ focusTone,
16
124
  label,
17
- description,
18
125
  name,
126
+ orientation = 'horizontal',
127
+ radius = 'full',
128
+ shape = 'pill',
129
+ showGripIcon = false,
130
+ showTrackIcon = false,
131
+ size = 'md',
132
+ tone,
19
133
  value,
134
+ variant = 'solid',
20
135
  }: Props = $props();
136
+ let bouncyMotion: 'none' | 'to-on' | 'to-off' = $state('none');
137
+ let previousChecked = checked;
138
+ let hasMounted = false;
139
+
140
+ const sizeValue = $derived(resolveSizeValue(size));
141
+ const radiusValue = $derived(resolveRadiusValue(radius));
142
+ const resolvedDuration = $derived(resolveDurationNumber(duration));
143
+ const durationValue = $derived(resolveDurationValue(duration));
144
+ const labelId = $derived(label ? `${switchId}-label` : undefined);
145
+ const descriptionId = $derived(
146
+ description ? `${switchId}-description` : undefined,
147
+ );
148
+ const showContent = $derived(Boolean(label || description));
149
+ const showThumbGrip = $derived(showGripIcon && supportsThumbGrip(shape));
150
+ const showTrackIcons = $derived(showTrackIcon && supportsTrackIcons(shape));
151
+ const gripIconSize = $derived(resolveGripIconSize(shape));
152
+ const onTrackIconSize = $derived(shape === 'pill' ? '0.95em' : '0.75em');
153
+ const offTrackIconSize = $derived(shape === 'pill' ? '0.9em' : '0.7em');
154
+
155
+ $effect(() => {
156
+ const currentChecked = checked;
157
+ const canBounce = animation === 'bouncy' && resolvedDuration > 0;
158
+
159
+ if (!hasMounted) {
160
+ hasMounted = true;
161
+ previousChecked = currentChecked;
162
+ bouncyMotion = 'none';
163
+ return;
164
+ }
165
+
166
+ if (!canBounce) {
167
+ previousChecked = currentChecked;
168
+ bouncyMotion = 'none';
169
+ return;
170
+ }
171
+
172
+ if (currentChecked !== previousChecked) {
173
+ bouncyMotion = currentChecked ? 'to-on' : 'to-off';
174
+ previousChecked = currentChecked;
175
+ }
176
+
177
+ const activeMotion = bouncyMotion;
178
+
179
+ if (activeMotion === 'none') {
180
+ return;
181
+ }
182
+
183
+ const timeout = window.setTimeout(() => {
184
+ if (bouncyMotion === activeMotion) {
185
+ bouncyMotion = 'none';
186
+ }
187
+ }, resolvedDuration + BOUNCY_MOTION_CLEAR_BUFFER);
188
+
189
+ return () => {
190
+ window.clearTimeout(timeout);
191
+ };
192
+ });
193
+
194
+ function handleThumbAnimationEnd() {
195
+ if (animation === 'bouncy') {
196
+ bouncyMotion = 'none';
197
+ }
198
+ }
21
199
  </script>
22
200
 
23
- <label class:disabled class="switch">
24
- <input bind:checked {disabled} {name} role="switch" type="checkbox" {value} />
201
+ <label
202
+ class:disabled
203
+ class="switch seblify-tone-context"
204
+ data-animation={animation}
205
+ data-bouncy-motion={bouncyMotion}
206
+ data-focus-tone={focusTone ?? tone ?? 'inherit'}
207
+ data-orientation={orientation}
208
+ data-seblify-tone={tone ?? 'inherit'}
209
+ data-shape={shape}
210
+ data-variant={variant}
211
+ style:--switch-size={sizeValue}
212
+ style:--switch-radius={radiusValue}
213
+ style:--switch-duration={durationValue}
214
+ >
215
+ <input
216
+ aria-describedby={descriptionId}
217
+ aria-label={labelId ? undefined : ariaLabel}
218
+ aria-labelledby={labelId}
219
+ bind:checked
220
+ {disabled}
221
+ {name}
222
+ role="switch"
223
+ type="checkbox"
224
+ {value}
225
+ />
25
226
  <span class="control" aria-hidden="true">
26
- <span class="thumb"></span>
27
- </span>
28
- <span class="content">
29
- {#if label}
30
- <span class="label">{label}</span>
31
- {/if}
32
- {#if description}
33
- <span class="description">{description}</span>
227
+ {#if showTrackIcons}
228
+ <span class="track-icons">
229
+ <span class="track-icon track-icon--on">
230
+ <MinusIcon size={onTrackIconSize} />
231
+ </span>
232
+ <span class="track-icon track-icon--off">
233
+ <CircleOutlineIcon size={offTrackIconSize} />
234
+ </span>
235
+ </span>
34
236
  {/if}
237
+ <span class="thumb" onanimationend={handleThumbAnimationEnd}>
238
+ {#if showThumbGrip}
239
+ <span class="thumb-grip">
240
+ <HandleGripIcon size={gripIconSize} />
241
+ </span>
242
+ {/if}
243
+ </span>
35
244
  </span>
245
+ {#if showContent}
246
+ <span class="content">
247
+ {#if label}
248
+ <span class="label" id={labelId}>{label}</span>
249
+ {/if}
250
+ {#if description}
251
+ <span class="description" id={descriptionId}>{description}</span>
252
+ {/if}
253
+ </span>
254
+ {/if}
36
255
  </label>
37
256
 
38
- <style>
39
- .switch {
257
+ <style>:where(.seblify-tone-context) {
258
+ --seblify-tone-fill: var(--seblify-color-fill-neutral, #516176);
259
+ --seblify-tone-fill-text: var(--seblify-color-fill-neutral-text, #ffffff);
260
+ --seblify-tone-surface: var(--seblify-color-surface-muted, #d9e0e8);
261
+ --seblify-tone-text: var(--seblify-color-text-muted, #516176);
262
+ --seblify-tone-border: var(--seblify-color-border, #c8d2df);
263
+ }
264
+
265
+ :where(.seblify-tone-context[data-seblify-tone='inherit']) {
266
+ --seblify-tone-fill: var(
267
+ --seblify-current-tone-fill,
268
+ var(--seblify-color-fill-neutral, #516176)
269
+ );
270
+ --seblify-tone-fill-text: var(
271
+ --seblify-current-tone-fill-text,
272
+ var(--seblify-color-fill-neutral-text, #ffffff)
273
+ );
274
+ --seblify-tone-surface: var(
275
+ --seblify-current-tone-surface,
276
+ var(--seblify-color-surface-muted, #d9e0e8)
277
+ );
278
+ --seblify-tone-text: var(
279
+ --seblify-current-tone-text,
280
+ var(--seblify-color-text-muted, #516176)
281
+ );
282
+ --seblify-tone-border: var(
283
+ --seblify-current-tone-border,
284
+ var(--seblify-color-border, #c8d2df)
285
+ );
286
+ }
287
+
288
+ :where(.seblify-tone-context[data-seblify-tone='neutral']) {
289
+ --seblify-tone-fill: var(--seblify-color-fill-neutral, #516176);
290
+ --seblify-tone-fill-text: var(--seblify-color-fill-neutral-text, #ffffff);
291
+ --seblify-tone-surface: var(--seblify-color-surface-muted, #d9e0e8);
292
+ --seblify-tone-text: var(--seblify-color-text-muted, #516176);
293
+ --seblify-tone-border: var(--seblify-color-border, #c8d2df);
294
+ }
295
+
296
+ :where(.seblify-tone-context[data-seblify-tone='strong']) {
297
+ --seblify-tone-fill: var(--seblify-color-fill-strong, #172033);
298
+ --seblify-tone-fill-text: var(--seblify-color-fill-strong-text, #ffffff);
299
+ --seblify-tone-surface: var(--seblify-color-surface-raised, #ffffff);
300
+ --seblify-tone-text: var(--seblify-color-text, #172033);
301
+ --seblify-tone-border: var(--seblify-color-border-strong, #aab7c5);
302
+ }
303
+
304
+ :where(.seblify-tone-context[data-seblify-tone='primary']) {
305
+ --seblify-tone-fill: var(--seblify-color-fill-primary, #146a6f);
306
+ --seblify-tone-fill-text: var(--seblify-color-fill-primary-text, #ffffff);
307
+ --seblify-tone-surface: var(--seblify-color-surface-accent, #f7fbfb);
308
+ --seblify-tone-text: var(--seblify-color-fill-primary, #146a6f);
309
+ --seblify-tone-border: var(--seblify-color-border-accent, #9ab7ba);
310
+ }
311
+
312
+ :where(.seblify-tone-context[data-seblify-tone='secondary']) {
313
+ --seblify-tone-fill: var(--seblify-color-fill-secondary, #5b5fc7);
314
+ --seblify-tone-fill-text: var(
315
+ --seblify-color-fill-secondary-text,
316
+ #ffffff
317
+ );
318
+ --seblify-tone-surface: var(--seblify-color-secondary-surface, #f0efff);
319
+ --seblify-tone-text: var(--seblify-color-secondary-text, #2f316f);
320
+ --seblify-tone-border: var(--seblify-color-secondary-border, #c8c6f4);
321
+ }
322
+
323
+ :where(.seblify-tone-context[data-seblify-tone='success']) {
324
+ --seblify-tone-fill: var(--seblify-color-fill-success, #1f7a3f);
325
+ --seblify-tone-fill-text: var(--seblify-color-fill-success-text, #ffffff);
326
+ --seblify-tone-surface: var(--seblify-color-success-surface, #e8f8ee);
327
+ --seblify-tone-text: var(--seblify-color-success-text, #143d25);
328
+ --seblify-tone-border: var(--seblify-color-success-border, #b8ddc7);
329
+ }
330
+
331
+ :where(.seblify-tone-context[data-seblify-tone='danger']) {
332
+ --seblify-tone-fill: var(--seblify-color-fill-danger, #c93434);
333
+ --seblify-tone-fill-text: var(--seblify-color-fill-danger-text, #ffffff);
334
+ --seblify-tone-surface: var(--seblify-color-error-surface, #fff0f0);
335
+ --seblify-tone-text: var(--seblify-color-error-text, #5a1717);
336
+ --seblify-tone-border: var(--seblify-color-error-border, #efb6b6);
337
+ }
338
+
339
+ :where(.seblify-tone-context[data-seblify-tone='warning']) {
340
+ --seblify-tone-fill: var(--seblify-color-fill-warning, #8a5a00);
341
+ --seblify-tone-fill-text: var(--seblify-color-fill-warning-text, #ffffff);
342
+ --seblify-tone-surface: var(--seblify-color-warning-surface, #fff6d8);
343
+ --seblify-tone-text: var(--seblify-color-warning-text, #4d3900);
344
+ --seblify-tone-border: var(--seblify-color-warning-border, #e8d28f);
345
+ }
346
+
347
+ :where(.seblify-tone-context[data-seblify-tone='info']) {
348
+ --seblify-tone-fill: var(--seblify-color-fill-info, #1f6fb2);
349
+ --seblify-tone-fill-text: var(--seblify-color-fill-info-text, #ffffff);
350
+ --seblify-tone-surface: var(--seblify-color-info-surface, #eaf3ff);
351
+ --seblify-tone-text: var(--seblify-color-info-text, #102f55);
352
+ --seblify-tone-border: var(--seblify-color-info-border, #bfd1ea);
353
+ }
354
+
355
+ :where(.seblify-tone-context[data-seblify-tone='inverse']) {
356
+ --seblify-tone-fill: var(--seblify-color-fill-inverse, #172033);
357
+ --seblify-tone-fill-text: var(--seblify-color-fill-inverse-text, #ffffff);
358
+ --seblify-tone-surface: var(--seblify-color-surface-inverse-hover, #263043);
359
+ --seblify-tone-text: var(--seblify-color-fill-inverse-text, #ffffff);
360
+ --seblify-tone-border: var(--seblify-color-border-inverse, #263043);
361
+ }
362
+
363
+ :where(.seblify-tone-publisher) {
364
+ --seblify-current-tone-fill: var(--seblify-tone-fill);
365
+ --seblify-current-tone-fill-text: var(--seblify-tone-fill-text);
366
+ --seblify-current-tone-surface: var(--seblify-tone-surface);
367
+ --seblify-current-tone-text: var(--seblify-tone-text);
368
+ --seblify-current-tone-border: var(--seblify-tone-border);
369
+ }
370
+
371
+ /* Base */
372
+
373
+ .switch {
374
+ --switch-track-width: calc(var(--switch-size) * 1.75);
375
+ --switch-track-height: var(--switch-size);
376
+ --switch-border-width: 1px;
377
+ --switch-padding: max(1px, calc(var(--switch-size) * 0.0833333));
378
+ --switch-radius-inset: calc(
379
+ var(--switch-border-width) + var(--switch-padding)
380
+ );
381
+ --switch-thumb-size: calc(
382
+ var(--switch-track-height) - 2 * var(--switch-radius-inset)
383
+ );
384
+ --switch-thumb-width: var(--switch-thumb-size);
385
+ --switch-thumb-height: var(--switch-thumb-size);
386
+ --switch-thumb-travel: calc(
387
+ var(--switch-track-width) - var(--switch-thumb-width) - 2 *
388
+ var(--switch-radius-inset)
389
+ );
390
+ --switch-thumb-position-off: 0px;
391
+ --switch-thumb-position-on: var(--switch-thumb-travel);
392
+ --switch-thumb-transform-off: translateX(var(--switch-thumb-position-off));
393
+ --switch-thumb-transform-on: translateX(var(--switch-thumb-position-on));
394
+ --switch-thumb-radius: max(
395
+ 0px,
396
+ min(
397
+ max(1px, calc(var(--switch-radius) - var(--switch-radius-inset))),
398
+ var(--switch-radius)
399
+ )
400
+ );
401
+ --switch-solid-border: var(--seblify-tone-fill);
402
+ --switch-solid-surface: var(--seblify-tone-fill);
403
+ --switch-focus-tone-fill: var(--seblify-tone-fill);
404
+ --switch-solid-thumb: color-mix(
405
+ in srgb,
406
+ var(--seblify-tone-fill) 8%,
407
+ var(--seblify-color-surface, #ffffff)
408
+ );
409
+ --switch-soft-border: color-mix(
410
+ in srgb,
411
+ var(--seblify-tone-fill) 22%,
412
+ var(--seblify-color-border, #c8d2df)
413
+ );
414
+ --switch-soft-surface: color-mix(
415
+ in srgb,
416
+ var(--seblify-tone-fill) 14%,
417
+ var(--seblify-color-surface, #ffffff)
418
+ );
419
+ --switch-soft-thumb: color-mix(
420
+ in srgb,
421
+ var(--seblify-tone-fill) 78%,
422
+ var(--seblify-color-surface, #ffffff)
423
+ );
424
+ --switch-outline-border: var(--seblify-tone-fill);
425
+ --switch-outline-surface: color-mix(
426
+ in srgb,
427
+ var(--seblify-tone-fill) 7%,
428
+ var(--seblify-color-surface, #ffffff)
429
+ );
430
+ --switch-outline-thumb: var(--seblify-tone-fill);
431
+ --switch-off-border: var(--seblify-color-border-strong, #aab7c5);
432
+ --switch-off-surface: var(--seblify-color-surface-muted, #d9e0e8);
433
+ --switch-off-thumb: var(--seblify-color-surface, #ffffff);
434
+ --switch-thumb-shadow: var(
435
+ --seblify-shadow-control,
436
+ 0 1px 3px rgb(16 24 40 / 24%)
437
+ );
438
+ --switch-on-border: var(--switch-solid-border);
439
+ --switch-on-surface: var(--switch-solid-surface);
440
+ --switch-on-thumb-base: var(--switch-solid-thumb);
441
+ --switch-on-thumb: var(--switch-on-thumb-base);
442
+ --switch-track-icon-offset: calc(
443
+ var(--switch-radius-inset) + var(--switch-thumb-size) * 0.18
444
+ );
445
+ --switch-bouncy-runup: max(1px, calc(var(--switch-thumb-size) * 0.1));
446
+ --switch-bouncy-overshoot: max(1px, calc(var(--switch-thumb-size) * 0.07));
447
+ --switch-thumb-motion-duration: var(--switch-duration);
448
+ --switch-thumb-motion-timing: cubic-bezier(0.32, 0.72, 0, 1);
449
+ --switch-state-duration: var(--switch-duration);
450
+ --switch-state-timing: ease;
451
+ --switch-track-icon-on-color: color-mix(
452
+ in srgb,
453
+ var(--seblify-tone-fill-text, #ffffff) 48%,
454
+ transparent
455
+ );
456
+ --switch-track-icon-off-color: color-mix(
457
+ in srgb,
458
+ var(--seblify-color-text-muted, #516176) 42%,
459
+ transparent
460
+ );
461
+ --switch-focus-ring-color: color-mix(
462
+ in srgb,
463
+ var(--switch-focus-tone-fill) 56%,
464
+ transparent
465
+ );
466
+
40
467
  position: relative;
41
468
  display: inline-flex;
42
- gap: 12px;
469
+ gap: max(0.5rem, calc(var(--switch-size) * 0.5));
43
470
  align-items: flex-start;
44
471
  color: var(--seblify-color-text, #172033);
45
472
  cursor: pointer;
46
473
  }
47
474
 
48
- input {
475
+ /* Tone */
476
+
477
+ .switch[data-seblify-tone='inherit'] {
478
+ --seblify-tone-fill: var(
479
+ --seblify-current-tone-fill,
480
+ var(--seblify-color-fill-neutral, #5b6675)
481
+ );
482
+ --seblify-tone-fill-text: var(
483
+ --seblify-current-tone-fill-text,
484
+ var(--seblify-color-fill-neutral-text, #ffffff)
485
+ );
486
+ --seblify-tone-surface: var(
487
+ --seblify-current-tone-surface,
488
+ var(--seblify-color-surface-neutral, #f4f6f8)
489
+ );
490
+ --seblify-tone-text: var(
491
+ --seblify-current-tone-text,
492
+ var(--seblify-color-fill-neutral, #5b6675)
493
+ );
494
+ --seblify-tone-border: var(
495
+ --seblify-current-tone-border,
496
+ var(--seblify-color-border-neutral, #c5ccd6)
497
+ );
498
+ }
499
+
500
+ .switch[data-focus-tone='inherit'] {
501
+ --switch-focus-tone-fill: var(--seblify-tone-fill);
502
+ }
503
+
504
+ .switch[data-focus-tone='neutral'] {
505
+ --switch-focus-tone-fill: var(--seblify-color-fill-neutral, #516176);
506
+ }
507
+
508
+ .switch[data-focus-tone='primary'] {
509
+ --switch-focus-tone-fill: var(--seblify-color-fill-primary, #146a6f);
510
+ }
511
+
512
+ .switch[data-focus-tone='secondary'] {
513
+ --switch-focus-tone-fill: var(--seblify-color-fill-secondary, #5b5fc7);
514
+ }
515
+
516
+ .switch[data-focus-tone='success'] {
517
+ --switch-focus-tone-fill: var(--seblify-color-fill-success, #1f7a3f);
518
+ }
519
+
520
+ .switch[data-focus-tone='danger'] {
521
+ --switch-focus-tone-fill: var(--seblify-color-fill-danger, #c93434);
522
+ }
523
+
524
+ .switch[data-focus-tone='warning'] {
525
+ --switch-focus-tone-fill: var(--seblify-color-fill-warning, #8a5a00);
526
+ }
527
+
528
+ .switch[data-focus-tone='info'] {
529
+ --switch-focus-tone-fill: var(--seblify-color-fill-info, #1f6fb2);
530
+ }
531
+
532
+ .switch[data-focus-tone='inverse'] {
533
+ --switch-focus-tone-fill: var(--seblify-color-fill-inverse, #172033);
534
+ }
535
+
536
+ /* Motion */
537
+
538
+ .switch[data-animation='bouncy'] {
539
+ --switch-thumb-motion-timing: cubic-bezier(0.24, 1.18, 0.4, 1);
540
+ --switch-state-timing: ease;
541
+ }
542
+
543
+ @keyframes switch-bouncy-to-on {
544
+ 0% {
545
+ transform: translateX(var(--switch-thumb-position-off));
546
+ }
547
+
548
+ 20% {
549
+ transform: translateX(
550
+ calc(var(--switch-thumb-position-off) - var(--switch-bouncy-runup))
551
+ );
552
+ }
553
+
554
+ 76% {
555
+ transform: translateX(
556
+ calc(var(--switch-thumb-position-on) + var(--switch-bouncy-overshoot))
557
+ );
558
+ }
559
+
560
+ 100% {
561
+ transform: translateX(var(--switch-thumb-position-on));
562
+ }
563
+ }
564
+
565
+ @keyframes switch-bouncy-to-off {
566
+ 0% {
567
+ transform: translateX(var(--switch-thumb-position-on));
568
+ }
569
+
570
+ 20% {
571
+ transform: translateX(
572
+ calc(var(--switch-thumb-position-on) + var(--switch-bouncy-runup))
573
+ );
574
+ }
575
+
576
+ 76% {
577
+ transform: translateX(
578
+ calc(var(--switch-thumb-position-off) - var(--switch-bouncy-overshoot))
579
+ );
580
+ }
581
+
582
+ 100% {
583
+ transform: translateX(var(--switch-thumb-position-off));
584
+ }
585
+ }
586
+
587
+ @keyframes switch-bouncy-vertical-to-on {
588
+ 0% {
589
+ transform: translateY(var(--switch-thumb-position-off));
590
+ }
591
+
592
+ 20% {
593
+ transform: translateY(
594
+ calc(var(--switch-thumb-position-off) - var(--switch-bouncy-runup))
595
+ );
596
+ }
597
+
598
+ 76% {
599
+ transform: translateY(
600
+ calc(var(--switch-thumb-position-on) + var(--switch-bouncy-overshoot))
601
+ );
602
+ }
603
+
604
+ 100% {
605
+ transform: translateY(var(--switch-thumb-position-on));
606
+ }
607
+ }
608
+
609
+ @keyframes switch-bouncy-vertical-to-off {
610
+ 0% {
611
+ transform: translateY(var(--switch-thumb-position-on));
612
+ }
613
+
614
+ 20% {
615
+ transform: translateY(
616
+ calc(var(--switch-thumb-position-on) + var(--switch-bouncy-runup))
617
+ );
618
+ }
619
+
620
+ 76% {
621
+ transform: translateY(
622
+ calc(var(--switch-thumb-position-off) - var(--switch-bouncy-overshoot))
623
+ );
624
+ }
625
+
626
+ 100% {
627
+ transform: translateY(var(--switch-thumb-position-off));
628
+ }
629
+ }
630
+
631
+ input {
49
632
  position: absolute;
50
633
  width: 1px;
51
634
  height: 1px;
@@ -56,66 +639,395 @@
56
639
  white-space: nowrap;
57
640
  }
58
641
 
59
- .control {
642
+ /* Structure */
643
+
644
+ .control {
645
+ position: relative;
60
646
  display: inline-flex;
61
- width: 42px;
62
- height: 24px;
647
+ width: var(--switch-track-width);
648
+ height: var(--switch-track-height);
63
649
  flex: 0 0 auto;
64
650
  align-items: center;
65
- border: 1px solid var(--seblify-color-border-strong, #aab7c5);
66
- border-radius: 999px;
67
- background: var(--seblify-color-surface-muted, #d9e0e8);
68
- padding: 2px;
651
+ border: var(--switch-border-width) solid var(--switch-off-border);
652
+ border-radius: var(--switch-radius);
653
+ background: var(--switch-off-surface);
654
+ padding: var(--switch-padding);
655
+ box-sizing: border-box;
69
656
  transition:
70
- border-color 160ms ease,
71
- background 160ms ease;
657
+ border-color var(--switch-state-duration) var(--switch-state-timing),
658
+ background var(--switch-state-duration) var(--switch-state-timing);
659
+ }
660
+
661
+ .track-icons {
662
+ position: absolute;
663
+ inset: 0;
664
+ pointer-events: none;
665
+ }
666
+
667
+ .track-icon {
668
+ position: absolute;
669
+ top: 50%;
670
+ display: inline-flex;
671
+ align-items: center;
672
+ justify-content: center;
673
+ line-height: 0;
674
+ transform: translateY(-50%);
675
+ transition: opacity var(--switch-state-duration) var(--switch-state-timing);
676
+ }
677
+
678
+ .track-icon--on {
679
+ left: var(--switch-track-icon-offset);
680
+ color: var(--switch-track-icon-on-color);
681
+ opacity: 0;
682
+ transform: translateY(-50%) rotate(90deg);
683
+ }
684
+
685
+ .track-icon--off {
686
+ right: var(--switch-track-icon-offset);
687
+ color: var(--switch-track-icon-off-color);
688
+ opacity: 1;
689
+ }
690
+
691
+ .thumb {
692
+ display: inline-flex;
693
+ width: var(--switch-thumb-width);
694
+ height: var(--switch-thumb-height);
695
+ align-items: center;
696
+ justify-content: center;
697
+ border-radius: var(--switch-thumb-radius);
698
+ background: var(--switch-off-thumb);
699
+ box-sizing: border-box;
700
+ box-shadow: var(--switch-thumb-shadow);
701
+ color: color-mix(
702
+ in srgb,
703
+ var(--seblify-color-text-muted, #516176) 36%,
704
+ transparent
705
+ );
706
+ transform: var(--switch-thumb-transform-off);
707
+ transition:
708
+ transform var(--switch-thumb-motion-duration)
709
+ var(--switch-thumb-motion-timing),
710
+ background var(--switch-state-duration) var(--switch-state-timing),
711
+ box-shadow var(--switch-state-duration) var(--switch-state-timing),
712
+ color var(--switch-state-duration) var(--switch-state-timing);
713
+ }
714
+
715
+ /* Shapes */
716
+
717
+ .switch[data-shape='floating'],
718
+ .switch[data-shape='line'] {
719
+ --switch-track-height: calc(var(--switch-size) * 0.6666667);
720
+ --switch-padding: 0px;
721
+ --switch-radius-inset: var(--switch-border-width);
722
+ --switch-thumb-size: var(--switch-size);
723
+ --switch-thumb-width: var(--switch-thumb-size);
724
+ --switch-thumb-travel: calc(
725
+ var(--switch-track-width) - var(--switch-thumb-width)
726
+ );
727
+ --switch-thumb-position-off: calc(-2 * var(--switch-border-width));
728
+ --switch-thumb-position-on: var(--switch-thumb-travel);
729
+ --switch-thumb-radius: max(
730
+ 1px,
731
+ min(var(--switch-radius), calc(var(--switch-thumb-size) / 2))
732
+ );
733
+ --switch-off-thumb: var(--switch-on-thumb-base);
734
+ --switch-on-thumb: color-mix(
735
+ in srgb,
736
+ var(--switch-on-thumb-base) 72%,
737
+ white
738
+ );
739
+ --switch-thumb-shadow:
740
+ 0 4px 10px rgb(16 24 40 / 18%), 0 1px 3px rgb(16 24 40 / 18%);
741
+ }
742
+
743
+ .switch[data-shape='pill'] {
744
+ --switch-track-icon-offset: calc(
745
+ var(--switch-radius-inset) + var(--switch-thumb-size) * 0.08
746
+ );
747
+ }
748
+
749
+ .switch[data-shape='line'] {
750
+ --switch-track-height: calc(var(--switch-size) * 0.3333333);
751
+ }
752
+
753
+ .switch[data-shape='floating'] .track-icon--on,
754
+ .switch[data-shape='floating'] .track-icon--off {
755
+ top: 50%;
756
+ }
757
+
758
+ .switch[data-shape='flat'],
759
+ .switch[data-shape='long'] {
760
+ --switch-track-height: calc(var(--switch-size) * 0.75);
761
+ --switch-padding: max(1px, calc(var(--switch-size) * 0.0833333));
762
+ --switch-radius-inset: calc(
763
+ var(--switch-border-width) + var(--switch-padding)
764
+ );
765
+ --switch-thumb-size: calc(
766
+ var(--switch-track-height) - 2 * var(--switch-radius-inset)
767
+ );
768
+ --switch-thumb-width: calc(var(--switch-thumb-size) * 1.55);
769
+ --switch-thumb-travel: calc(
770
+ var(--switch-track-width) - var(--switch-thumb-width) - 2 *
771
+ var(--switch-radius-inset)
772
+ );
773
+ --switch-thumb-radius: 999px;
774
+ }
775
+
776
+ .switch[data-shape='long'] {
777
+ --switch-thumb-width: var(--switch-thumb-size);
778
+ }
779
+
780
+ /* Orientation */
781
+
782
+ .switch[data-orientation='vertical'] {
783
+ --switch-track-width: var(--switch-size);
784
+ --switch-track-height: calc(var(--switch-size) * 1.75);
785
+ --switch-thumb-size: calc(
786
+ var(--switch-track-width) - 2 * var(--switch-radius-inset)
787
+ );
788
+ --switch-thumb-width: var(--switch-thumb-size);
789
+ --switch-thumb-height: var(--switch-thumb-size);
790
+ --switch-thumb-travel: calc(
791
+ var(--switch-track-height) - var(--switch-thumb-height) - 2 *
792
+ var(--switch-radius-inset)
793
+ );
794
+ --switch-thumb-position-off: var(--switch-thumb-travel);
795
+ --switch-thumb-position-on: 0px;
796
+ --switch-thumb-transform-off: translateY(var(--switch-thumb-position-off));
797
+ --switch-thumb-transform-on: translateY(var(--switch-thumb-position-on));
798
+ --switch-track-icon-offset: calc(
799
+ var(--switch-radius-inset) + var(--switch-thumb-size) * 0.08
800
+ );
801
+ }
802
+
803
+ .switch[data-orientation='vertical'] .control {
804
+ flex-direction: column;
805
+ }
806
+
807
+ .switch[data-orientation='vertical'][data-shape='flat'],
808
+ .switch[data-orientation='vertical'][data-shape='long'] {
809
+ --switch-track-width: calc(var(--switch-size) * 0.75);
810
+ --switch-track-height: calc(var(--switch-size) * 1.75);
811
+ --switch-thumb-size: calc(
812
+ var(--switch-track-width) - 2 * var(--switch-radius-inset)
813
+ );
814
+ --switch-thumb-width: var(--switch-thumb-size);
815
+ --switch-thumb-height: calc(var(--switch-thumb-size) * 1.55);
816
+ }
817
+
818
+ .switch[data-orientation='vertical'][data-shape='long'] {
819
+ --switch-thumb-height: var(--switch-thumb-size);
820
+ }
821
+
822
+ .switch[data-orientation='vertical'][data-shape='floating'],
823
+ .switch[data-orientation='vertical'][data-shape='line'] {
824
+ --switch-track-width: calc(var(--switch-size) * 0.6666667);
825
+ --switch-track-height: calc(var(--switch-size) * 1.75);
826
+ --switch-padding: 0px;
827
+ --switch-radius-inset: var(--switch-border-width);
828
+ --switch-thumb-size: var(--switch-size);
829
+ --switch-thumb-width: var(--switch-thumb-size);
830
+ --switch-thumb-height: var(--switch-thumb-size);
831
+ --switch-thumb-travel: calc(
832
+ var(--switch-track-height) - var(--switch-thumb-height)
833
+ );
834
+ --switch-thumb-position-off: var(--switch-thumb-travel);
835
+ --switch-thumb-position-on: calc(-2 * var(--switch-border-width));
72
836
  }
73
837
 
74
- .thumb {
75
- width: 18px;
76
- height: 18px;
77
- border-radius: 999px;
78
- background: var(--seblify-color-surface, #ffffff);
79
- box-shadow: var(--seblify-shadow-control, 0 1px 3px rgb(16 24 40 / 24%));
80
- transition: transform 160ms ease;
838
+ .switch[data-orientation='vertical'][data-shape='line'] {
839
+ --switch-track-width: calc(var(--switch-size) * 0.3333333);
81
840
  }
82
841
 
83
- input:checked + .control {
84
- border-color: var(--seblify-color-fill-accent, #146a6f);
85
- background: var(--seblify-color-fill-accent, #146a6f);
842
+ .switch[data-orientation='vertical'] .track-icon {
843
+ left: 50%;
844
+ transform: translateX(-50%);
86
845
  }
87
846
 
88
- input:checked + .control .thumb {
89
- background: var(--seblify-color-fill-accent-text, #ffffff);
847
+ .switch[data-orientation='vertical'] .track-icon--on {
848
+ top: var(--switch-track-icon-offset);
849
+ transform: translateX(-50%) rotate(90deg);
90
850
  }
91
851
 
92
- input:checked + .control .thumb {
93
- transform: translateX(18px);
852
+ .switch[data-orientation='vertical'] .track-icon--off {
853
+ top: auto;
854
+ right: auto;
855
+ bottom: var(--switch-track-icon-offset);
856
+ }
857
+
858
+ /* States */
859
+
860
+ input:checked + .control {
861
+ border-color: var(--switch-on-border);
862
+ background: var(--switch-on-surface);
863
+ }
864
+
865
+ input:checked + .control .thumb {
866
+ background: var(--switch-on-thumb);
867
+ }
868
+
869
+ input:checked + .control .track-icon--on {
870
+ opacity: 1;
871
+ }
872
+
873
+ input:checked + .control .track-icon--off {
874
+ opacity: 0;
875
+ }
876
+
877
+ input:checked + .control .thumb {
878
+ color: color-mix(
879
+ in srgb,
880
+ var(--seblify-color-text, #172033) 32%,
881
+ transparent
882
+ );
883
+ }
884
+
885
+ input:checked + .control .thumb {
886
+ transform: var(--switch-thumb-transform-on);
887
+ }
888
+
889
+ .thumb-grip {
890
+ display: inline-flex;
891
+ width: 100%;
892
+ height: 100%;
893
+ align-items: center;
894
+ justify-content: center;
895
+ line-height: 0;
896
+ }
897
+
898
+ .switch[data-shape='floating'] .control,
899
+ .switch[data-shape='line'] .control {
900
+ overflow: visible;
901
+ }
902
+
903
+ /* Animation selectors */
904
+
905
+ .switch[data-orientation='horizontal'][data-animation='bouncy'][data-bouncy-motion='to-on']
906
+ .thumb {
907
+ animation: switch-bouncy-to-on var(--switch-thumb-motion-duration)
908
+ var(--switch-thumb-motion-timing);
909
+ }
910
+
911
+ .switch[data-orientation='horizontal'][data-animation='bouncy'][data-bouncy-motion='to-off']
912
+ .thumb {
913
+ animation: switch-bouncy-to-off var(--switch-thumb-motion-duration)
914
+ var(--switch-thumb-motion-timing);
915
+ }
916
+
917
+ .switch[data-orientation='vertical'][data-animation='bouncy'][data-bouncy-motion='to-on']
918
+ .thumb {
919
+ animation: switch-bouncy-vertical-to-on var(--switch-thumb-motion-duration)
920
+ var(--switch-thumb-motion-timing);
921
+ }
922
+
923
+ .switch[data-orientation='vertical'][data-animation='bouncy'][data-bouncy-motion='to-off']
924
+ .thumb {
925
+ animation: switch-bouncy-vertical-to-off var(--switch-thumb-motion-duration)
926
+ var(--switch-thumb-motion-timing);
927
+ }
928
+
929
+ /* Variants */
930
+
931
+ .switch[data-variant='soft'] {
932
+ --switch-on-border: var(--switch-soft-border);
933
+ --switch-on-surface: var(--switch-soft-surface);
934
+ --switch-on-thumb-base: var(--switch-soft-thumb);
935
+ --switch-on-thumb: var(--switch-on-thumb-base);
936
+ }
937
+
938
+ .switch[data-variant='tint'] {
939
+ --switch-off-border: var(--switch-soft-border);
940
+ --switch-off-surface: var(--switch-soft-surface);
941
+ --switch-off-thumb: var(--switch-soft-thumb);
942
+ }
943
+
944
+ .switch[data-variant='outline'] {
945
+ --switch-off-border: var(--seblify-color-border-strong, #aab7c5);
946
+ --switch-off-surface: var(--seblify-color-surface, #ffffff);
947
+ --switch-off-thumb: var(--switch-off-border);
948
+ --switch-on-border: var(--switch-outline-border);
949
+ --switch-on-surface: var(--switch-outline-surface);
950
+ --switch-on-thumb-base: var(--switch-outline-thumb);
951
+ --switch-on-thumb: var(--switch-on-thumb-base);
952
+ --switch-track-icon-on-color: color-mix(
953
+ in srgb,
954
+ var(--seblify-tone-fill) 48%,
955
+ transparent
956
+ );
957
+ }
958
+
959
+ /* Color schemes */
960
+
961
+ :global([data-theme='dark']) .switch {
962
+ --switch-solid-thumb: color-mix(
963
+ in srgb,
964
+ var(--seblify-tone-fill) 18%,
965
+ var(--seblify-color-surface, #ffffff)
966
+ );
967
+ --switch-soft-thumb: var(--seblify-tone-fill);
968
+ }
969
+
970
+ :global([data-theme='dark']) .switch[data-shape='floating'],
971
+ :global([data-theme='dark']) .switch[data-shape='line'] {
972
+ --switch-off-thumb: var(--seblify-color-surface-hover, #253241);
973
+ --switch-thumb-shadow:
974
+ 0 6px 14px rgb(0 0 0 / 34%), 0 2px 5px rgb(0 0 0 / 28%);
975
+ }
976
+
977
+ @media (prefers-color-scheme: dark) {
978
+ :global(:root:not([data-theme])) .switch {
979
+ --switch-solid-thumb: color-mix(
980
+ in srgb,
981
+ var(--seblify-tone-fill) 18%,
982
+ var(--seblify-color-surface, #ffffff)
983
+ );
984
+ --switch-soft-thumb: var(--seblify-tone-fill);
985
+ }
986
+
987
+ :global(:root:not([data-theme])) .switch[data-shape='floating'],
988
+ :global(:root:not([data-theme])) .switch[data-shape='line'] {
989
+ --switch-off-thumb: var(--seblify-color-surface-hover, #253241);
990
+ --switch-thumb-shadow:
991
+ 0 6px 14px rgb(0 0 0 / 34%), 0 2px 5px rgb(0 0 0 / 28%);
992
+ }
993
+ }
994
+
995
+ @media (prefers-reduced-motion: reduce) {
996
+ .switch {
997
+ --switch-thumb-motion-duration: 0ms;
998
+ --switch-thumb-motion-timing: linear;
999
+ --switch-state-duration: 0ms;
1000
+ --switch-state-timing: linear;
1001
+ }
1002
+
1003
+ .switch[data-animation='bouncy'] .thumb {
1004
+ animation: none;
1005
+ }
94
1006
  }
95
1007
 
96
- input:focus-visible + .control {
97
- outline: 3px solid var(--seblify-color-focus-ring, #9bd4d8);
1008
+ input:focus-visible + .control {
1009
+ outline: 3px solid var(--switch-focus-ring-color);
98
1010
  outline-offset: 2px;
99
1011
  }
100
1012
 
101
- .content {
1013
+ .content {
102
1014
  display: grid;
103
1015
  gap: 2px;
104
1016
  min-width: 0;
105
1017
  }
106
1018
 
107
- .label {
1019
+ .label {
108
1020
  font-weight: 700;
109
1021
  line-height: 1.35;
110
1022
  }
111
1023
 
112
- .description {
1024
+ .description {
113
1025
  color: var(--seblify-color-text-muted, #516176);
114
1026
  font-size: 0.875rem;
115
1027
  line-height: 1.45;
116
1028
  }
117
1029
 
118
- .disabled {
1030
+ .disabled {
119
1031
  cursor: not-allowed;
120
1032
  opacity: var(--seblify-opacity-disabled, 0.56);
121
1033
  }