@sky.ui/core 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (320) hide show
  1. package/LICENSE.md +139 -0
  2. package/README.md +113 -0
  3. package/auto-import-loader.js +60 -0
  4. package/auto-import.js +93 -0
  5. package/dist/custom-elements.json +27051 -0
  6. package/dist/helper/controllers/animation-controller.d.ts +120 -0
  7. package/dist/helper/controllers/animation-controller.js +2 -0
  8. package/dist/helper/controllers/animation-controller.js.map +1 -0
  9. package/dist/helper/controllers/index.d.ts +2 -0
  10. package/dist/helper/controllers/popover-controller.d.ts +162 -0
  11. package/dist/helper/controllers/popover-controller.js +2 -0
  12. package/dist/helper/controllers/popover-controller.js.map +1 -0
  13. package/dist/helper/form-control-base.d.ts +1 -0
  14. package/dist/helper/iconify-offline.d.ts +73 -0
  15. package/dist/helper/iconify-offline.js +2 -0
  16. package/dist/helper/iconify-offline.js.map +1 -0
  17. package/dist/helper/index.d.ts +5 -0
  18. package/dist/helper/internals/form-control-base.d.ts +81 -0
  19. package/dist/helper/internals/form-control-base.js +2 -0
  20. package/dist/helper/internals/form-control-base.js.map +1 -0
  21. package/dist/helper/internals/index.d.ts +1 -0
  22. package/dist/helper/utils/color-resolver.d.ts +139 -0
  23. package/dist/helper/utils/color-resolver.js +2 -0
  24. package/dist/helper/utils/color-resolver.js.map +1 -0
  25. package/dist/helper/utils/index.d.ts +2 -0
  26. package/dist/helper/utils/size-resolver.d.ts +6 -0
  27. package/dist/helper/utils/size-resolver.js +2 -0
  28. package/dist/helper/utils/size-resolver.js.map +1 -0
  29. package/dist/index.d.ts +58 -0
  30. package/dist/index.js +2 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/sky-accordion/index.d.ts +1 -0
  33. package/dist/sky-accordion/index.js +1 -0
  34. package/dist/sky-accordion/sky-accordion.d.ts +201 -0
  35. package/dist/sky-accordion/sky-accordion.js +85 -0
  36. package/dist/sky-accordion/sky-accordion.js.map +1 -0
  37. package/dist/sky-accordion-item/index.d.ts +1 -0
  38. package/dist/sky-accordion-item/index.js +1 -0
  39. package/dist/sky-accordion-item/sky-accordion-item.d.ts +161 -0
  40. package/dist/sky-accordion-item/sky-accordion-item.js +191 -0
  41. package/dist/sky-accordion-item/sky-accordion-item.js.map +1 -0
  42. package/dist/sky-alert/index.d.ts +1 -0
  43. package/dist/sky-alert/index.js +1 -0
  44. package/dist/sky-alert/sky-alert.d.ts +136 -0
  45. package/dist/sky-alert/sky-alert.js +292 -0
  46. package/dist/sky-alert/sky-alert.js.map +1 -0
  47. package/dist/sky-appbar/index.d.ts +1 -0
  48. package/dist/sky-appbar/index.js +1 -0
  49. package/dist/sky-appbar/sky-appbar.d.ts +84 -0
  50. package/dist/sky-appbar/sky-appbar.js +173 -0
  51. package/dist/sky-appbar/sky-appbar.js.map +1 -0
  52. package/dist/sky-avatar/index.d.ts +1 -0
  53. package/dist/sky-avatar/index.js +1 -0
  54. package/dist/sky-avatar/sky-avatar.d.ts +104 -0
  55. package/dist/sky-avatar/sky-avatar.js +152 -0
  56. package/dist/sky-avatar/sky-avatar.js.map +1 -0
  57. package/dist/sky-badge/index.d.ts +1 -0
  58. package/dist/sky-badge/index.js +1 -0
  59. package/dist/sky-badge/sky-badge.d.ts +154 -0
  60. package/dist/sky-badge/sky-badge.js +148 -0
  61. package/dist/sky-badge/sky-badge.js.map +1 -0
  62. package/dist/sky-breadcrumb/index.d.ts +1 -0
  63. package/dist/sky-breadcrumb/index.js +1 -0
  64. package/dist/sky-breadcrumb/sky-breadcrumb.d.ts +111 -0
  65. package/dist/sky-breadcrumb/sky-breadcrumb.js +230 -0
  66. package/dist/sky-breadcrumb/sky-breadcrumb.js.map +1 -0
  67. package/dist/sky-button/index.d.ts +1 -0
  68. package/dist/sky-button/index.js +1 -0
  69. package/dist/sky-button/sky-button.d.ts +118 -0
  70. package/dist/sky-button/sky-button.js +172 -0
  71. package/dist/sky-button/sky-button.js.map +1 -0
  72. package/dist/sky-button-group/index.d.ts +1 -0
  73. package/dist/sky-button-group/index.js +1 -0
  74. package/dist/sky-button-group/sky-button-group.d.ts +93 -0
  75. package/dist/sky-button-group/sky-button-group.js +281 -0
  76. package/dist/sky-button-group/sky-button-group.js.map +1 -0
  77. package/dist/sky-card/index.d.ts +1 -0
  78. package/dist/sky-card/index.js +1 -0
  79. package/dist/sky-card/sky-card.d.ts +143 -0
  80. package/dist/sky-card/sky-card.js +186 -0
  81. package/dist/sky-card/sky-card.js.map +1 -0
  82. package/dist/sky-carousel/index.d.ts +1 -0
  83. package/dist/sky-carousel/index.js +1 -0
  84. package/dist/sky-carousel/sky-carousel.d.ts +265 -0
  85. package/dist/sky-carousel/sky-carousel.js +211 -0
  86. package/dist/sky-carousel/sky-carousel.js.map +1 -0
  87. package/dist/sky-checkbox/index.d.ts +1 -0
  88. package/dist/sky-checkbox/index.js +1 -0
  89. package/dist/sky-checkbox/sky-checkbox.d.ts +165 -0
  90. package/dist/sky-checkbox/sky-checkbox.js +276 -0
  91. package/dist/sky-checkbox/sky-checkbox.js.map +1 -0
  92. package/dist/sky-chip/index.d.ts +1 -0
  93. package/dist/sky-chip/index.js +1 -0
  94. package/dist/sky-chip/sky-chip.d.ts +95 -0
  95. package/dist/sky-chip/sky-chip.js +210 -0
  96. package/dist/sky-chip/sky-chip.js.map +1 -0
  97. package/dist/sky-col/index.d.ts +1 -0
  98. package/dist/sky-col/index.js +1 -0
  99. package/dist/sky-col/sky-col.d.ts +84 -0
  100. package/dist/sky-col/sky-col.js +46 -0
  101. package/dist/sky-col/sky-col.js.map +1 -0
  102. package/dist/sky-combobox/index.d.ts +1 -0
  103. package/dist/sky-combobox/index.js +1 -0
  104. package/dist/sky-combobox/sky-combobox.d.ts +313 -0
  105. package/dist/sky-combobox/sky-combobox.js +1146 -0
  106. package/dist/sky-combobox/sky-combobox.js.map +1 -0
  107. package/dist/sky-counter/index.d.ts +1 -0
  108. package/dist/sky-counter/index.js +1 -0
  109. package/dist/sky-counter/sky-counter.d.ts +130 -0
  110. package/dist/sky-counter/sky-counter.js +101 -0
  111. package/dist/sky-counter/sky-counter.js.map +1 -0
  112. package/dist/sky-dialog/index.d.ts +1 -0
  113. package/dist/sky-dialog/index.js +1 -0
  114. package/dist/sky-dialog/sky-dialog.d.ts +237 -0
  115. package/dist/sky-dialog/sky-dialog.js +265 -0
  116. package/dist/sky-dialog/sky-dialog.js.map +1 -0
  117. package/dist/sky-divider/index.d.ts +1 -0
  118. package/dist/sky-divider/index.js +1 -0
  119. package/dist/sky-divider/sky-divider.d.ts +120 -0
  120. package/dist/sky-divider/sky-divider.js +42 -0
  121. package/dist/sky-divider/sky-divider.js.map +1 -0
  122. package/dist/sky-drawer/index.d.ts +1 -0
  123. package/dist/sky-drawer/index.js +1 -0
  124. package/dist/sky-drawer/sky-drawer.d.ts +161 -0
  125. package/dist/sky-drawer/sky-drawer.js +177 -0
  126. package/dist/sky-drawer/sky-drawer.js.map +1 -0
  127. package/dist/sky-dropdown/index.d.ts +1 -0
  128. package/dist/sky-dropdown/index.js +1 -0
  129. package/dist/sky-dropdown/sky-dropdown.d.ts +252 -0
  130. package/dist/sky-dropdown/sky-dropdown.js +58 -0
  131. package/dist/sky-dropdown/sky-dropdown.js.map +1 -0
  132. package/dist/sky-dropdown-item/index.d.ts +1 -0
  133. package/dist/sky-dropdown-item/index.js +1 -0
  134. package/dist/sky-dropdown-item/sky-dropdown-item.d.ts +207 -0
  135. package/dist/sky-dropdown-item/sky-dropdown-item.js +341 -0
  136. package/dist/sky-dropdown-item/sky-dropdown-item.js.map +1 -0
  137. package/dist/sky-flexbar/index.d.ts +1 -0
  138. package/dist/sky-flexbar/index.js +1 -0
  139. package/dist/sky-flexbar/sky-flexbar.d.ts +189 -0
  140. package/dist/sky-flexbar/sky-flexbar.js +148 -0
  141. package/dist/sky-flexbar/sky-flexbar.js.map +1 -0
  142. package/dist/sky-flexbox/index.d.ts +1 -0
  143. package/dist/sky-flexbox/index.js +1 -0
  144. package/dist/sky-flexbox/sky-flexbox.d.ts +156 -0
  145. package/dist/sky-flexbox/sky-flexbox.js +40 -0
  146. package/dist/sky-flexbox/sky-flexbox.js.map +1 -0
  147. package/dist/sky-flexcol/index.d.ts +1 -0
  148. package/dist/sky-flexcol/index.js +1 -0
  149. package/dist/sky-flexcol/sky-flexcol.d.ts +154 -0
  150. package/dist/sky-flexcol/sky-flexcol.js +14 -0
  151. package/dist/sky-flexcol/sky-flexcol.js.map +1 -0
  152. package/dist/sky-flexitem/index.d.ts +1 -0
  153. package/dist/sky-flexitem/index.js +1 -0
  154. package/dist/sky-flexitem/sky-flexitem.d.ts +114 -0
  155. package/dist/sky-flexitem/sky-flexitem.js +45 -0
  156. package/dist/sky-flexitem/sky-flexitem.js.map +1 -0
  157. package/dist/sky-form/index.d.ts +1 -0
  158. package/dist/sky-form/index.js +1 -0
  159. package/dist/sky-form/sky-form.d.ts +286 -0
  160. package/dist/sky-form/sky-form.js +66 -0
  161. package/dist/sky-form/sky-form.js.map +1 -0
  162. package/dist/sky-grid/index.d.ts +1 -0
  163. package/dist/sky-grid/index.js +1 -0
  164. package/dist/sky-grid/sky-grid.d.ts +78 -0
  165. package/dist/sky-grid/sky-grid.js +40 -0
  166. package/dist/sky-grid/sky-grid.js.map +1 -0
  167. package/dist/sky-icon/index.d.ts +1 -0
  168. package/dist/sky-icon/index.js +1 -0
  169. package/dist/sky-icon/ion-local.json.js +2 -0
  170. package/dist/sky-icon/ion-local.json.js.map +1 -0
  171. package/dist/sky-icon/sky-icon.d.ts +123 -0
  172. package/dist/sky-icon/sky-icon.js +40 -0
  173. package/dist/sky-icon/sky-icon.js.map +1 -0
  174. package/dist/sky-image/index.d.ts +1 -0
  175. package/dist/sky-image/index.js +1 -0
  176. package/dist/sky-image/sky-image.d.ts +102 -0
  177. package/dist/sky-image/sky-image.js +29 -0
  178. package/dist/sky-image/sky-image.js.map +1 -0
  179. package/dist/sky-input/index.d.ts +1 -0
  180. package/dist/sky-input/index.js +1 -0
  181. package/dist/sky-input/sky-input.d.ts +345 -0
  182. package/dist/sky-input/sky-input.js +820 -0
  183. package/dist/sky-input/sky-input.js.map +1 -0
  184. package/dist/sky-list/index.d.ts +1 -0
  185. package/dist/sky-list/index.js +1 -0
  186. package/dist/sky-list/sky-list.d.ts +85 -0
  187. package/dist/sky-list/sky-list.js +41 -0
  188. package/dist/sky-list/sky-list.js.map +1 -0
  189. package/dist/sky-listitem/index.d.ts +1 -0
  190. package/dist/sky-listitem/index.js +1 -0
  191. package/dist/sky-listitem/sky-listitem.d.ts +76 -0
  192. package/dist/sky-listitem/sky-listitem.js +104 -0
  193. package/dist/sky-listitem/sky-listitem.js.map +1 -0
  194. package/dist/sky-navbar/index.d.ts +1 -0
  195. package/dist/sky-navbar/index.js +1 -0
  196. package/dist/sky-navbar/sky-navbar.d.ts +207 -0
  197. package/dist/sky-navbar/sky-navbar.js +521 -0
  198. package/dist/sky-navbar/sky-navbar.js.map +1 -0
  199. package/dist/sky-navpanel/index.d.ts +1 -0
  200. package/dist/sky-navpanel/index.js +1 -0
  201. package/dist/sky-navpanel/sky-navpanel.d.ts +186 -0
  202. package/dist/sky-navpanel/sky-navpanel.js +404 -0
  203. package/dist/sky-navpanel/sky-navpanel.js.map +1 -0
  204. package/dist/sky-notification/index.d.ts +1 -0
  205. package/dist/sky-notification/index.js +1 -0
  206. package/dist/sky-notification/sky-notification.d.ts +152 -0
  207. package/dist/sky-notification/sky-notification.js +456 -0
  208. package/dist/sky-notification/sky-notification.js.map +1 -0
  209. package/dist/sky-otp/index.d.ts +1 -0
  210. package/dist/sky-otp/index.js +1 -0
  211. package/dist/sky-otp/sky-otp.d.ts +101 -0
  212. package/dist/sky-otp/sky-otp.js +96 -0
  213. package/dist/sky-otp/sky-otp.js.map +1 -0
  214. package/dist/sky-overlay/index.d.ts +1 -0
  215. package/dist/sky-overlay/index.js +1 -0
  216. package/dist/sky-overlay/sky-overlay.d.ts +71 -0
  217. package/dist/sky-overlay/sky-overlay.js +26 -0
  218. package/dist/sky-overlay/sky-overlay.js.map +1 -0
  219. package/dist/sky-pagination/index.d.ts +1 -0
  220. package/dist/sky-pagination/index.js +1 -0
  221. package/dist/sky-pagination/sky-pagination.d.ts +167 -0
  222. package/dist/sky-pagination/sky-pagination.js +453 -0
  223. package/dist/sky-pagination/sky-pagination.js.map +1 -0
  224. package/dist/sky-progress/index.d.ts +1 -0
  225. package/dist/sky-progress/index.js +1 -0
  226. package/dist/sky-progress/sky-progress.d.ts +70 -0
  227. package/dist/sky-progress/sky-progress.js +87 -0
  228. package/dist/sky-progress/sky-progress.js.map +1 -0
  229. package/dist/sky-radio/index.d.ts +1 -0
  230. package/dist/sky-radio/index.js +1 -0
  231. package/dist/sky-radio/sky-radio.d.ts +118 -0
  232. package/dist/sky-radio/sky-radio.js +109 -0
  233. package/dist/sky-radio/sky-radio.js.map +1 -0
  234. package/dist/sky-radio-group/index.d.ts +1 -0
  235. package/dist/sky-radio-group/index.js +1 -0
  236. package/dist/sky-radio-group/sky-radio-group.d.ts +186 -0
  237. package/dist/sky-radio-group/sky-radio-group.js +239 -0
  238. package/dist/sky-radio-group/sky-radio-group.js.map +1 -0
  239. package/dist/sky-range/index.d.ts +1 -0
  240. package/dist/sky-range/index.js +1 -0
  241. package/dist/sky-range/sky-range.d.ts +110 -0
  242. package/dist/sky-range/sky-range.js +196 -0
  243. package/dist/sky-range/sky-range.js.map +1 -0
  244. package/dist/sky-row/index.d.ts +1 -0
  245. package/dist/sky-row/index.js +1 -0
  246. package/dist/sky-row/sky-row.d.ts +57 -0
  247. package/dist/sky-row/sky-row.js +6 -0
  248. package/dist/sky-row/sky-row.js.map +1 -0
  249. package/dist/sky-serial/index.d.ts +1 -0
  250. package/dist/sky-serial/index.js +1 -0
  251. package/dist/sky-serial/sky-serial.d.ts +127 -0
  252. package/dist/sky-serial/sky-serial.js +133 -0
  253. package/dist/sky-serial/sky-serial.js.map +1 -0
  254. package/dist/sky-sheet/index.d.ts +1 -0
  255. package/dist/sky-sheet/index.js +1 -0
  256. package/dist/sky-sheet/sky-sheet.d.ts +70 -0
  257. package/dist/sky-sheet/sky-sheet.js +47 -0
  258. package/dist/sky-sheet/sky-sheet.js.map +1 -0
  259. package/dist/sky-skeleton/index.d.ts +1 -0
  260. package/dist/sky-skeleton/index.js +1 -0
  261. package/dist/sky-skeleton/sky-skeleton.d.ts +80 -0
  262. package/dist/sky-skeleton/sky-skeleton.js +233 -0
  263. package/dist/sky-skeleton/sky-skeleton.js.map +1 -0
  264. package/dist/sky-slider/index.d.ts +1 -0
  265. package/dist/sky-slider/index.js +1 -0
  266. package/dist/sky-slider/sky-slider.d.ts +96 -0
  267. package/dist/sky-slider/sky-slider.js +139 -0
  268. package/dist/sky-slider/sky-slider.js.map +1 -0
  269. package/dist/sky-speeddial/index.d.ts +1 -0
  270. package/dist/sky-speeddial/index.js +1 -0
  271. package/dist/sky-speeddial/sky-speeddial.d.ts +86 -0
  272. package/dist/sky-speeddial/sky-speeddial.js +154 -0
  273. package/dist/sky-speeddial/sky-speeddial.js.map +1 -0
  274. package/dist/sky-spinner/index.d.ts +1 -0
  275. package/dist/sky-spinner/index.js +1 -0
  276. package/dist/sky-spinner/sky-spinner.d.ts +87 -0
  277. package/dist/sky-spinner/sky-spinner.js +334 -0
  278. package/dist/sky-spinner/sky-spinner.js.map +1 -0
  279. package/dist/sky-steps/index.d.ts +1 -0
  280. package/dist/sky-steps/index.js +1 -0
  281. package/dist/sky-steps/sky-steps.d.ts +170 -0
  282. package/dist/sky-steps/sky-steps.js +455 -0
  283. package/dist/sky-steps/sky-steps.js.map +1 -0
  284. package/dist/sky-switch/index.d.ts +1 -0
  285. package/dist/sky-switch/index.js +1 -0
  286. package/dist/sky-switch/sky-switch.d.ts +116 -0
  287. package/dist/sky-switch/sky-switch.js +191 -0
  288. package/dist/sky-switch/sky-switch.js.map +1 -0
  289. package/dist/sky-tab/index.d.ts +1 -0
  290. package/dist/sky-tab/index.js +1 -0
  291. package/dist/sky-tab/sky-tab.d.ts +188 -0
  292. package/dist/sky-tab/sky-tab.js +390 -0
  293. package/dist/sky-tab/sky-tab.js.map +1 -0
  294. package/dist/sky-tab-button/index.d.ts +1 -0
  295. package/dist/sky-tab-button/index.js +1 -0
  296. package/dist/sky-tab-button/sky-tab-button.d.ts +114 -0
  297. package/dist/sky-tab-button/sky-tab-button.js +167 -0
  298. package/dist/sky-tab-button/sky-tab-button.js.map +1 -0
  299. package/dist/sky-theme-provider/index.d.ts +1 -0
  300. package/dist/sky-theme-provider/index.js +1 -0
  301. package/dist/sky-theme-provider/sky-theme-provider.d.ts +169 -0
  302. package/dist/sky-theme-provider/sky-theme-provider.js +12 -0
  303. package/dist/sky-theme-provider/sky-theme-provider.js.map +1 -0
  304. package/dist/sky-theme-switcher/index.d.ts +1 -0
  305. package/dist/sky-theme-switcher/index.js +1 -0
  306. package/dist/sky-theme-switcher/sky-theme-switcher.d.ts +92 -0
  307. package/dist/sky-theme-switcher/sky-theme-switcher.js +43 -0
  308. package/dist/sky-theme-switcher/sky-theme-switcher.js.map +1 -0
  309. package/dist/sky-tooltip/index.d.ts +1 -0
  310. package/dist/sky-tooltip/index.js +1 -0
  311. package/dist/sky-tooltip/sky-tooltip.d.ts +156 -0
  312. package/dist/sky-tooltip/sky-tooltip.js +242 -0
  313. package/dist/sky-tooltip/sky-tooltip.js.map +1 -0
  314. package/package.json +475 -0
  315. package/plugins/rollup-plugin.d.ts +19 -0
  316. package/plugins/rollup-plugin.js +129 -0
  317. package/plugins/vite-plugin.d.ts +22 -0
  318. package/plugins/vite-plugin.js +116 -0
  319. package/plugins/webpack-plugin.d.ts +12 -0
  320. package/plugins/webpack-plugin.js +46 -0
@@ -0,0 +1,111 @@
1
+ import { LitElement, TemplateResult } from "lit";
2
+ export interface BreadcrumbItem {
3
+ title: string;
4
+ route: string;
5
+ active?: boolean;
6
+ }
7
+ export type SkyBreadcrumbHomeMode = "auto" | "always" | "never";
8
+ /**
9
+ * @element sky-breadcrumb
10
+ *
11
+ * @summary Accessible breadcrumb navigation with optional “Home” item and overflow handling.
12
+ *
13
+ * @status stable
14
+ * @since 1.0.0
15
+ *
16
+ * @documentation https://library.sky-ui.com/components/breadcrumb
17
+ * @dependency sky-icon
18
+ *
19
+ * @slot - (none) This component does not accept slotted children; use the `items` property.
20
+ *
21
+ * @property {BreadcrumbItem[]} items - Breadcrumb items from root to leaf.
22
+ * @property {string} separator - Separator string shown between items (for example `/` or `›`).
23
+ * @property {SkyBreadcrumbHomeMode} showHome - Home rendering mode: `auto | always | never`.
24
+ * @property {number} visibleItems - Number of trailing items shown inline before overflow collapse.
25
+ * @property {boolean} shadow - When true, applies glass background, border, and elevation on the trail list; default is a clean inline trail.
26
+ * @method openOverflow Opens overflow menu when collapsed items are present.
27
+ * @method closeOverflow Closes overflow menu.
28
+ *
29
+ * @fires {CustomEvent<BreadcrumbItem>} route-change - Fired when a breadcrumb item is activated.
30
+ *
31
+ * @csspart list - The `<ul>` container element for the breadcrumb.
32
+ * @csspart item - Each `<li>` breadcrumb item wrapper.
33
+ * @csspart link - The clickable link inside each breadcrumb item.
34
+ * @csspart separator - The separator element shown between breadcrumb items.
35
+ * @csspart dropdown - The overflow toggle button that opens the collapsed items dropdown.
36
+ * @csspart overflow-menu - The popover menu containing collapsed breadcrumb items.
37
+ * @csspart home - The breadcrumb item wrapper for the "Home" link.
38
+ * @csspart current - The active/current page breadcrumb item.
39
+ *
40
+ * @Behavior
41
+ * - Renders a root-to-leaf breadcrumb trail.
42
+ * - Collapses older items into overflow when items exceed `visibleItems`.
43
+ * - Dispatches `route-change` on item activation; consumer controls navigation.
44
+ * - Uses `<nav aria-label="breadcrumb">` with non-link rendering for current page.
45
+ *
46
+ * @example
47
+ * ```html
48
+ * <sky-breadcrumb separator="›" visible-items="3"></sky-breadcrumb>
49
+ * ```
50
+ * ```vue
51
+ * <template>
52
+ * <sky-breadcrumb separator="›" visible-items="3"></sky-breadcrumb>
53
+ * </template>
54
+ * ```
55
+ * ```jsx
56
+ * export default function Demo() {
57
+ * return <sky-breadcrumb separator="›" visible-items="3"></sky-breadcrumb>;
58
+ * }
59
+ * ```
60
+ */
61
+ export declare class SkyBreadcrumb extends LitElement {
62
+ static dependencies: Record<string, CustomElementConstructor>;
63
+ /** The breadcrumb items to display, in order from root to leaf. */
64
+ items: BreadcrumbItem[];
65
+ /** The separator string shown between items (e.g., "/", "›"). */
66
+ separator: string;
67
+ /**
68
+ * Controls how the "Home" link behaves.
69
+ * - `"auto"`: adds Home only if not present (default)
70
+ * - `"always"`: always prepends Home
71
+ * - `"never"`: never adds Home
72
+ */
73
+ showHome: SkyBreadcrumbHomeMode;
74
+ /**
75
+ * How many trailing items to show inline.
76
+ * Items beyond this count collapse into the overflow dropdown.
77
+ */
78
+ visibleItems: number;
79
+ /**
80
+ * Glass pill styling on the trail (`background`, `border`, `box-shadow`, backdrop).
81
+ * `false` (default) keeps the list minimal for inline page headers.
82
+ */
83
+ shadow: boolean;
84
+ private dropdownOpen;
85
+ private overflowTriggerEl?;
86
+ private overflowPopoverEl?;
87
+ private overflowPopover;
88
+ static styles: import("lit").CSSResult;
89
+ /**
90
+ * Dispatches a `route-change` event when a breadcrumb item is clicked.
91
+ * @param item - The clicked breadcrumb item.
92
+ * @param event - The originating click event.
93
+ * @returns {void}
94
+ */
95
+ private handleBreadcrumbClick;
96
+ /**
97
+ * Opens overflow menu when collapsed items are present.
98
+ *
99
+ * @returns {void}
100
+ */
101
+ openOverflow(): void;
102
+ /**
103
+ * Closes overflow menu.
104
+ *
105
+ * @returns {void}
106
+ */
107
+ closeOverflow(): void;
108
+ /** Opens or closes the overflow dropdown. */
109
+ private toggleOverflow;
110
+ render(): TemplateResult;
111
+ }
@@ -0,0 +1,230 @@
1
+ import{__decorate as r,__metadata as e}from"tslib";import{LitElement as o,css as t,html as a,nothing as s}from"lit";import{property as i,state as n,query as l,customElement as p}from"lit/decorators.js";import{when as d}from"lit/directives/when.js";import{repeat as c}from"lit/directives/repeat.js";import{classMap as v}from"lit/directives/class-map.js";import{PopoverController as m}from"../helper/controllers/popover-controller.js";import{SkyIcon as y}from"../sky-icon/sky-icon.js";let b=class extends o{constructor(){super(...arguments),this.items=[],this.separator="/",this.showHome="auto",this.visibleItems=3,this.shadow=!1,this.dropdownOpen=!1,this.overflowPopover=new m(this,{getAnchor:()=>this.overflowTriggerEl??null,getPopover:()=>this.overflowPopoverEl??null,cssVarLeft:"--sky-bc-left",cssVarTop:"--sky-bc-top",cssVarWidth:"--sky-bc-width",placement:"bottom",align:"start",gap:4,padding:8,matchAnchorWidth:!1,maxWidthToViewport:!0,maxWidthMode:"cap",closeOnEscape:!0,closeOnOutside:!0,restoreFocusOnClose:!0,onOpenChange:r=>{this.dropdownOpen=r}})}static{this.dependencies={"sky-icon":y}}static{this.styles=t`
2
+ :host {
3
+ display: block;
4
+ overflow: visible;
5
+ font-family: var(--sky-font);
6
+ }
7
+
8
+ .breadcrumb {
9
+ list-style: none;
10
+ padding: 0;
11
+ display: flex;
12
+ gap: var(--sky-space-2);
13
+ flex-wrap: wrap;
14
+ margin: 0;
15
+ align-items: center;
16
+ }
17
+
18
+ :host([shadow]) .breadcrumb {
19
+ padding: var(--sky-space-2) var(--sky-space-4);
20
+ border-radius: inherit;
21
+ position: relative;
22
+ background: var(--sky-glass-primary);
23
+ z-index: 0;
24
+ box-shadow: var(--sky-box-shadow-primary);
25
+ border: var(--sky-border-primary);
26
+ }
27
+
28
+ :host([shadow]) .breadcrumb::before {
29
+ content: "";
30
+ position: absolute;
31
+ inset: 0;
32
+ border-radius: inherit;
33
+ z-index: -1;
34
+ backdrop-filter: var(--sky-blur-primary) var(--sky-brightness-primary)
35
+ var(--sky-saturation-primary);
36
+ -webkit-backdrop-filter: var(--sky-blur-primary)
37
+ var(--sky-brightness-primary) var(--sky-saturation-primary);
38
+ }
39
+
40
+ .breadcrumb li {
41
+ display: flex;
42
+ align-items: center;
43
+ position: relative;
44
+ }
45
+
46
+ .breadcrumb a {
47
+ text-decoration: none;
48
+ color: var(--sky-text-primary);
49
+ font-weight: var(--sky-font-weight-semibold);
50
+ font-size: var(--sky-font-size-sm);
51
+ cursor: pointer;
52
+ transition: color var(--sky-duration-normal, 0.2s) var(--sky-ease-default, ease);
53
+ }
54
+
55
+ .breadcrumb a:hover {
56
+ color: var(--sky-text-primary-hover);
57
+ }
58
+
59
+ .breadcrumb .separator {
60
+ margin: 0 var(--sky-space-2);
61
+ color: var(--sky-text-secondary);
62
+ font-size: var(--sky-font-size-sm);
63
+ }
64
+
65
+ @media (prefers-reduced-motion: reduce) {
66
+ .breadcrumb a,
67
+ .breadcrumb .overflow-trigger,
68
+ .overflow-dropdown a,
69
+ .overflow-dropdown button.overflow-item {
70
+ transition: none;
71
+ }
72
+ }
73
+
74
+ .breadcrumb .active {
75
+ color: var(--sky-active-primary);
76
+ font-weight: var(--sky-font-weight-semibold);
77
+ font-size: var(--sky-font-size-sm);
78
+ }
79
+
80
+ .breadcrumb .overflow-trigger {
81
+ display: flex;
82
+ margin-inline-end: var(--sky-space-2);
83
+ align-items: center;
84
+ cursor: pointer;
85
+ user-select: none;
86
+ border: none;
87
+ background: transparent;
88
+ padding: var(--sky-space-1);
89
+ border-radius: var(--sky-radius-secondary);
90
+ color: var(--sky-text-primary);
91
+ transition: background var(--sky-duration-normal, 0.2s) var(--sky-ease-default, ease),
92
+ color var(--sky-duration-normal, 0.2s) var(--sky-ease-default, ease);
93
+ -webkit-tap-highlight-color: transparent;
94
+ }
95
+
96
+ .breadcrumb .overflow-trigger:focus-visible {
97
+ outline: none;
98
+ box-shadow: var(--sky-focus-ring);
99
+ }
100
+
101
+ .breadcrumb .overflow-trigger:hover {
102
+ background: var(--sky-bg-hover, rgba(0, 0, 0, 0.06));
103
+ color: var(--sky-text-primary-hover);
104
+ }
105
+
106
+ .breadcrumb .overflow-trigger sky-icon {
107
+ width: 1em;
108
+ height: 1em;
109
+ }
110
+
111
+ .overflow-dropdown {
112
+ position: fixed;
113
+ left: var(--sky-bc-left, 0px);
114
+ top: var(--sky-bc-top, 0px);
115
+ width: var(--sky-bc-width, max-content);
116
+ min-width: 120px;
117
+ max-height: 280px;
118
+ overflow: auto;
119
+ margin: 0;
120
+ padding: var(--sky-space-1);
121
+ background: var(--sky-glass-primary);
122
+ border: var(--sky-border-primary);
123
+ border-radius: var(--sky-radius-secondary);
124
+ box-shadow: var(--sky-box-shadow-primary);
125
+ backdrop-filter: var(--sky-blur-primary) var(--sky-brightness-primary)
126
+ var(--sky-saturation-primary);
127
+ -webkit-backdrop-filter: var(--sky-blur-primary)
128
+ var(--sky-brightness-primary) var(--sky-saturation-primary);
129
+ }
130
+
131
+ .overflow-dropdown a,
132
+ .overflow-dropdown button.overflow-item {
133
+ display: block;
134
+ width: 100%;
135
+ text-align: start;
136
+ padding: var(--sky-space-2) var(--sky-space-3);
137
+ border: none;
138
+ border-radius: var(--sky-radius-secondary);
139
+ background: transparent;
140
+ color: var(--sky-text-primary);
141
+ font-size: var(--sky-font-size-sm);
142
+ font-weight: var(--sky-font-weight-semibold);
143
+ cursor: pointer;
144
+ text-decoration: none;
145
+ font-family: var(--sky-font);
146
+ transition: background var(--sky-duration-normal, 0.2s) var(--sky-ease-default, ease),
147
+ color var(--sky-duration-normal, 0.2s) var(--sky-ease-default, ease);
148
+ }
149
+
150
+ .overflow-dropdown button.overflow-item:focus-visible {
151
+ outline: none;
152
+ box-shadow: var(--sky-focus-ring);
153
+ }
154
+
155
+ .overflow-dropdown a:hover,
156
+ .overflow-dropdown button.overflow-item:hover {
157
+ background: var(--sky-bg-hover, rgba(0, 0, 0, 0.06));
158
+ color: var(--sky-text-primary-hover);
159
+ }
160
+ `}handleBreadcrumbClick(r,e){e.preventDefault(),this.dispatchEvent(new CustomEvent("route-change",{detail:r,bubbles:!0,composed:!0}))}openOverflow(){this.overflowPopover.openPopover()}closeOverflow(){this.overflowPopover.closePopover("api")}toggleOverflow(){this.overflowPopover.toggle()}render(){const r=this.items.some(r=>"/"===r.route||"home"===r.title.trim().toLowerCase()),e="always"===this.showHome||"auto"===this.showHome&&!r,o=e?[{title:"Home",route:"/"},...this.items]:[...this.items];let t=null,i=[],n=[];if(e)t=o[0];else{const r=o.find(r=>"/"===r.route||"home"===r.title.trim().toLowerCase());r&&(t=r)}const l=t?o.filter(r=>r!==t):[...o],p=t?Math.max(this.visibleItems-1,0):this.visibleItems;l.length>p?(i=l.slice(0,-p),n=l.slice(-p)):n=l;const m=()=>a`<span class="separator" part="separator">${this.separator}</span>`;return a`
161
+ <nav aria-label="breadcrumb">
162
+ <ul class="breadcrumb" part="list">
163
+ ${d(t,()=>a`
164
+ <li part="item home">
165
+ <a
166
+ part="link home"
167
+ href="${t.route}"
168
+ @click=${r=>this.handleBreadcrumbClick(t,r)}
169
+ >${t.title}</a
170
+ >
171
+ ${m()}
172
+ </li>
173
+ `)}
174
+ ${d(i.length>0,()=>a`
175
+ <li part="item dropdown">
176
+ <button
177
+ type="button"
178
+ class="overflow-trigger"
179
+ part="dropdown"
180
+ aria-expanded=${this.dropdownOpen}
181
+ aria-haspopup="menu"
182
+ aria-label="Show more breadcrumb links"
183
+ @click=${this.toggleOverflow}
184
+ >
185
+ <sky-icon icon="ic:outline-more-horiz"></sky-icon>
186
+ </button>
187
+
188
+ <div
189
+ class="overflow-dropdown"
190
+ part="overflow-menu"
191
+ popover="manual"
192
+ role="menu"
193
+ @toggle=${this.overflowPopover.onToggle}
194
+ @click=${r=>r.stopPropagation()}
195
+ >
196
+ ${c(i,(r,e)=>`${r.route}-${e}`,r=>a`
197
+ <button
198
+ type="button"
199
+ class="overflow-item"
200
+ role="menuitem"
201
+ @click=${e=>{this.handleBreadcrumbClick(r,e),this.overflowPopover.closePopover("api")}}
202
+ >
203
+ ${r.title}
204
+ </button>
205
+ `)}
206
+ </div>
207
+
208
+ ${m()}
209
+ </li>
210
+ `)}
211
+ ${c(n,(r,e)=>`${r.route}-${r.title}-${e}`,(r,e)=>{const o=e===n.length-1,t=!!r.active||o;return a`
212
+ <li
213
+ class=${v({active:t})}
214
+ part=${t?"item current":"item"}
215
+ >
216
+ ${d(o,()=>a`<span part="current">${r.title}</span>`,()=>a`
217
+ <a
218
+ part="link"
219
+ href="${r.route}"
220
+ @click=${e=>this.handleBreadcrumbClick(r,e)}
221
+ >${r.title}</a
222
+ >
223
+ `)}
224
+ ${d(!o,()=>m(),()=>s)}
225
+ </li>
226
+ `})}
227
+ </ul>
228
+ </nav>
229
+ `}};r([i({type:Array}),e("design:type",Array)],b.prototype,"items",void 0),r([i({type:String}),e("design:type",String)],b.prototype,"separator",void 0),r([i({type:String}),e("design:type",String)],b.prototype,"showHome",void 0),r([i({type:Number}),e("design:type",Number)],b.prototype,"visibleItems",void 0),r([i({type:Boolean,reflect:!0}),e("design:type",Object)],b.prototype,"shadow",void 0),r([n(),e("design:type",Object)],b.prototype,"dropdownOpen",void 0),r([l(".overflow-trigger"),e("design:type",HTMLElement)],b.prototype,"overflowTriggerEl",void 0),r([l(".overflow-dropdown"),e("design:type",HTMLElement)],b.prototype,"overflowPopoverEl",void 0),b=r([p("sky-breadcrumb")],b);export{b as SkyBreadcrumb};
230
+ //# sourceMappingURL=sky-breadcrumb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sky-breadcrumb.js","sources":["../../src/sky-breadcrumb/sky-breadcrumb.ts"],"sourcesContent":[null],"names":["SkyBreadcrumb","LitElement","constructor","this","items","separator","showHome","visibleItems","shadow","dropdownOpen","overflowPopover","PopoverController","getAnchor","overflowTriggerEl","getPopover","overflowPopoverEl","cssVarLeft","cssVarTop","cssVarWidth","placement","align","gap","padding","matchAnchorWidth","maxWidthToViewport","maxWidthMode","closeOnEscape","closeOnOutside","restoreFocusOnClose","onOpenChange","open","dependencies","SkyIcon","styles","css","handleBreadcrumbClick","item","event","preventDefault","dispatchEvent","CustomEvent","detail","bubbles","composed","openOverflow","openPopover","closeOverflow","closePopover","toggleOverflow","toggle","render","hasHomeItem","some","route","title","trim","toLowerCase","shouldPrependHome","allItems","homeItem","middleItems","homeCandidate","find","remainingItems","filter","remainingVisibleCount","Math","max","length","slice","sep","html","when","e","onToggle","stopPropagation","repeat","i","index","isLast","isActive","active","classMap","nothing","__decorate","property","type","Array","prototype","String","Number","Boolean","reflect","state","query","HTMLElement","customElement"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export * from "./sky-button";
@@ -0,0 +1 @@
1
+ export * from './sky-button.js';
@@ -0,0 +1,118 @@
1
+ import { LitElement } from "lit";
2
+ export type SkyButtonVariant = "solid" | "faded" | "bordered" | "transparent" | "flat" | "ghost" | "relief" | "gradient" | "shadow" | "link";
3
+ export type SkyButtonType = "button" | "submit" | "reset";
4
+ export type SkyButtonAnimation = "auto" | "none" | "lift" | "push" | "scale" | "rotate" | "custom";
5
+ /**
6
+ * @element sky-button
7
+ *
8
+ * @summary Styled button supporting variants, icons, loading state, ripple feedback, and form-associated behavior.
9
+ *
10
+ * @status stable
11
+ * @since 1.0.0
12
+ *
13
+ * @documentation https://library.sky-ui.com/components/button
14
+ * @dependency sky-icon
15
+ *
16
+ * @slot - Default slot for the button label (replaces `label` property if used).
17
+ *
18
+ * @csspart button - The native `<button>` element.
19
+ * @csspart icon - The optional left/right icons.
20
+ * @csspart loading-overlay - Overlay displayed when loading.
21
+ * @csspart spinner - Spinner displayed when loading.
22
+ *
23
+ * @property {SkyButtonVariant} variant - Visual variant of the button. Use `"link"` for text-only control with underline on hover. Default: `"solid"`.
24
+ * @property {string} color - Base color token or custom CSS color. Default: `"primary"`.
25
+ * @property {SkyButtonType} type - Button type attribute. Default: `"button"`.
26
+ * @property {string} form - Associated form ID for custom submit handling.
27
+ * @property {string} size - Preset size token (`xs…xl`) or CSS size (e.g., `"15px"`, `"1rem"`). Default: `"md"`.
28
+ * @property {string} radius - Preset radius token (`none…full`) or CSS radius (e.g., `"12px"`). Default: `"md"`.
29
+ * @property {string} label - Text label for the button. Ignored if default slot is used. Default: `"Button"`.
30
+ * @property {boolean} disabled - Whether the button is disabled. Default: `false`.
31
+ * @property {boolean} loading - Shows a loading overlay when true. Default: `false`.
32
+ * @property {string} iconL - Optional left-side icon (Iconify name). Default: `""`.
33
+ * @property {string} iconR - Optional right-side icon (Iconify name). Default: `""`.
34
+ * @property {boolean} iconOnly - Square padding for icon-only buttons; hides label text. Default: `false`.
35
+ * @property {string} colors - Comma-separated color stops for gradient variant. Default: `""`.
36
+ * @property {SkyButtonAnimation} animation - Transform animation style. Default: `"auto"`.
37
+ * @method focusButton Focuses the internal native button.
38
+ * @method clickButton Triggers a click on the internal native button when enabled.
39
+ *
40
+ * @example
41
+ * ```html
42
+ * <sky-button variant="gradient" colors="linear@90deg: primary, secondary" iconl="ion:add" label="Create"></sky-button>
43
+ * ```
44
+ * ```vue
45
+ * <template>
46
+ * <sky-button variant="gradient" colors="linear@90deg: primary, secondary" iconl="ion:add" label="Create"></sky-button>
47
+ * </template>
48
+ * ```
49
+ * ```jsx
50
+ * export default function Demo() {
51
+ * return <sky-button variant="gradient" colors="linear@90deg: primary, secondary" iconl="ion:add" label="Create"></sky-button>;
52
+ * }
53
+ * ```
54
+ */
55
+ export declare class SkyButton extends LitElement {
56
+ static dependencies: Record<string, CustomElementConstructor>;
57
+ static formAssociated: boolean;
58
+ private internals;
59
+ /** Visual variant of the button. */
60
+ variant: SkyButtonVariant;
61
+ /** Accepts preset tokens OR any valid CSS color (e.g., #0af, rgb(), var(--x)). */
62
+ color: string;
63
+ /** Button type attribute. */
64
+ type: SkyButtonType;
65
+ /** Associated form ID for custom form handling. */
66
+ form: string;
67
+ /** Preset tokens (`xs…xl`) OR CSS size like `"15px"`. */
68
+ size: string;
69
+ /** Preset tokens (`none…full`) OR any CSS border radius. */
70
+ radius: string;
71
+ /** Text label for the button. */
72
+ label: string;
73
+ /** Disables the button. */
74
+ disabled: boolean;
75
+ /** Shows a loading spinner overlay. */
76
+ loading: boolean;
77
+ /** Left-side icon (Iconify icon name). */
78
+ iconL: string;
79
+ /** Right-side icon (Iconify icon name). */
80
+ iconR: string;
81
+ /** Square padding and compact layout when the button shows only an icon. */
82
+ iconOnly: boolean;
83
+ /** Colors for gradient variant. */
84
+ colors: string;
85
+ /** Animation style for hover/active transforms. */
86
+ animation: SkyButtonAnimation;
87
+ /** @internal Set by `sky-button-group` to flatten grouped button visuals. */
88
+ inGroup: boolean;
89
+ private _hasMeaningfulSlot;
90
+ /** Inline CSS variable cache. */
91
+ private _styleVars;
92
+ static styles: import("lit").CSSResult;
93
+ constructor();
94
+ private _slotHasMeaningfulContent;
95
+ private _onSlotChange;
96
+ /** Uses vertical padding for equal sides (icon-only square control). */
97
+ private _toSquarePadding;
98
+ private _resolveSize;
99
+ protected willUpdate(changedProperties: Map<string, unknown>): void;
100
+ /**
101
+ * Focuses the internal native button.
102
+ *
103
+ * @returns {void}
104
+ */
105
+ focusButton(): void;
106
+ /**
107
+ * Triggers a click on the internal native button when enabled.
108
+ *
109
+ * @returns {void}
110
+ */
111
+ clickButton(): void;
112
+ private _createRipple;
113
+ formDisabledCallback(disabled: boolean): void;
114
+ get formOwner(): HTMLFormElement | null;
115
+ private _handleClick;
116
+ private _iconOnlyName;
117
+ render(): import("lit-html").TemplateResult<1>;
118
+ }
@@ -0,0 +1,172 @@
1
+ import{__decorate as t,__metadata as e}from"tslib";import{LitElement as o,css as r,html as n,nothing as i}from"lit";import{property as a,state as s,eventOptions as l,customElement as d}from"lit/decorators.js";import{when as p}from"lit/directives/when.js";import{styleMap as h}from"lit/directives/style-map.js";import{resolveColor as c,resolveTextColorForToken as b,createGradient as v,tuneSurfaceVariantForDefaultColor as g,darkShade as y,fadeMix as u,skyBorderPrimaryShorthand as m,hoverShade as f}from"../helper/utils/color-resolver.js";import{resolveRadius as x}from"../helper/utils/size-resolver.js";import{ifDefined as k}from"lit/directives/if-defined.js";import{SkyIcon as w}from"../sky-icon/sky-icon.js";let S=class extends o{static{this.dependencies={"sky-icon":w}}static{this.formAssociated=!0}static{this.styles=r`
2
+ :host {
3
+ display: inline-block;
4
+ }
5
+
6
+ :host([disabled]) {
7
+ cursor: not-allowed;
8
+ pointer-events: none;
9
+ }
10
+
11
+ :host([in-group]) {
12
+ align-self: stretch;
13
+ }
14
+
15
+ :host([iconOnly]) button {
16
+ width: auto;
17
+ min-width: var(--btn-min-width, auto);
18
+ aspect-ratio: 1;
19
+ gap: 0;
20
+ }
21
+
22
+ :host([variant="link"]) button {
23
+ width: auto;
24
+ border-radius: 0;
25
+ text-decoration: none;
26
+ background-color: transparent;
27
+ background-image: linear-gradient(currentColor, currentColor);
28
+ background-position: 0 100%;
29
+ background-repeat: no-repeat;
30
+ background-size: 0% 1px;
31
+ transition:
32
+ background-size 0.2s ease,
33
+ color 0.25s ease,
34
+ box-shadow 0.25s ease,
35
+ border 0.25s ease,
36
+ transform 0.25s ease;
37
+ }
38
+ :host([variant="link"]) button:hover:not(:disabled),
39
+ :host([variant="link"]) button:focus-visible:not(:disabled) {
40
+ background-color: transparent;
41
+ background-image: linear-gradient(currentColor, currentColor);
42
+ background-position: 0 100%;
43
+ background-repeat: no-repeat;
44
+ background-size: 100% 1px;
45
+ }
46
+
47
+ button {
48
+ position: relative;
49
+ display: inline-flex;
50
+ align-items: center;
51
+ justify-content: center;
52
+ overflow: hidden;
53
+ border-radius: var(--btn-radius, var(--sky-radius-primary));
54
+ font: inherit;
55
+ cursor: pointer;
56
+ transition: all 0.25s ease;
57
+ box-sizing: border-box;
58
+ outline: none;
59
+ border: var(--btn-border, none);
60
+ background: var(--btn-bg);
61
+ color: var(--btn-color);
62
+ box-shadow: var(--btn-shadow, none);
63
+ transform: var(--btn-transform, none);
64
+ gap: var(--btn-gap, 5px);
65
+ padding: var(--btn-padding, 8px 14px);
66
+ font-size: var(--btn-font-size, 16px);
67
+ font-family: var(--sky-font);
68
+ white-space: nowrap;
69
+ text-align: center;
70
+ text-decoration: var(--btn-text-decoration, none);
71
+ width: 100%;
72
+ height: auto;
73
+ min-height: var(--btn-min-height, auto);
74
+
75
+ /* Ensure button doesn't shrink */
76
+ flex-shrink: 0;
77
+ }
78
+ button:hover:not(:disabled),
79
+ button:focus-visible:not(:disabled) {
80
+ background: var(--btn-bg-hover, var(--btn-bg));
81
+ color: var(--btn-color-hover, var(--btn-color));
82
+ box-shadow: var(--btn-shadow-hover, var(--btn-shadow));
83
+ border: var(--btn-border-hover, var(--btn-border));
84
+ text-decoration: var(
85
+ --btn-text-decoration-hover,
86
+ var(--btn-text-decoration, none)
87
+ );
88
+ transform: var(--btn-transform-hover, var(--btn-transform, none));
89
+ height: auto;
90
+ min-height: var(--btn-min-height, auto);
91
+ }
92
+ button:active:not(:disabled) {
93
+ transform: var(
94
+ --btn-transform-active,
95
+ var(--btn-transform-hover, var(--btn-transform, none))
96
+ );
97
+ }
98
+ button:disabled {
99
+ opacity: 0.6;
100
+ cursor: not-allowed;
101
+ pointer-events: none;
102
+ }
103
+
104
+ .ripple {
105
+ position: absolute;
106
+ border-radius: 50%;
107
+ background: rgba(255, 255, 255, 0.5);
108
+ transform: scale(0);
109
+ animation: ripple-animation 0.6s linear;
110
+ pointer-events: none;
111
+ }
112
+ @keyframes ripple-animation {
113
+ to {
114
+ transform: scale(4);
115
+ opacity: 0;
116
+ }
117
+ }
118
+ sky-icon {
119
+ display: inline-block;
120
+ width: 1em;
121
+ height: 1em;
122
+ font-size: var(--icon-size, 18px);
123
+ }
124
+ .loading-overlay {
125
+ position: absolute;
126
+ inset: 0;
127
+ display: flex;
128
+ justify-content: center;
129
+ align-items: center;
130
+ background: var(--sky-overlay-primary);
131
+ visibility: hidden;
132
+ }
133
+ button[loading] .loading-overlay {
134
+ visibility: visible;
135
+ }
136
+ .spinner {
137
+ width: var(--spinner-size, 18px);
138
+ height: var(--spinner-size, 18px);
139
+ border: 2px solid currentColor;
140
+ border-top-color: transparent;
141
+ border-radius: 50%;
142
+ animation: spin 1s linear infinite;
143
+ }
144
+ @keyframes spin {
145
+ to {
146
+ transform: rotate(360deg);
147
+ }
148
+ }
149
+ `}constructor(){super(),this.variant="solid",this.color="primary",this.type="button",this.form="",this.size="md",this.radius="md",this.label="Button",this.disabled=!1,this.loading=!1,this.iconL="",this.iconR="",this.iconOnly=!1,this.colors="",this.animation="auto",this.inGroup=!1,this._hasMeaningfulSlot=!1,this._styleVars={},this._onSlotChange=t=>{const e=t.target,o=this._slotHasMeaningfulContent(e);o!==this._hasMeaningfulSlot&&(this._hasMeaningfulSlot=o)},this.internals=this.attachInternals()}_slotHasMeaningfulContent(t){return t.assignedNodes({flatten:!0}).some(t=>t.nodeType===Node.ELEMENT_NODE||(t.textContent??"").trim().length>0)}_toSquarePadding(t){const e=parseFloat(t.trim().split(/\s+/)[0]);return`${Number.isFinite(e)?e:8}px`}_resolveSize(t){const e={xs:{padding:"3px 7px",fontSize:"12px",gap:"3px",icon:"14px",spinner:"14px"},sm:{padding:"5px 9px",fontSize:"14px",gap:"4px",icon:"16px",spinner:"16px"},md:{padding:"8px 14px",fontSize:"16px",gap:"5px",icon:"18px",spinner:"18px"},lg:{padding:"10px 18px",fontSize:"18px",gap:"6px",icon:"20px",spinner:"20px"},xl:{padding:"14px 24px",fontSize:"20px",gap:"8px",icon:"24px",spinner:"24px"}};if(e[t])return e[t];const o=String(t).trim().match(/^([\d.]+)(px|rem|em)?$/i),r=o?.[2]||"px",n=o?parseFloat(o[1]):16,i=`${n}${r}`,a=t=>`${Math.round(100*t)/100}${r}`,s=(t,e,o)=>Math.max(e,Math.min(o,t)),l=s(.55*n,4,18),d=s(.9*n,8,28),p=s(.3*n,3,10),h=s(1.125*n,12,28),c=h;return{padding:`${a(l)} ${a(d)}`,fontSize:i,gap:a(p),icon:a(h),spinner:a(c)}}willUpdate(t){if(!["color","variant","size","radius","animation","inGroup","disabled","loading","colors","iconOnly"].some(e=>t.has(e))&&Object.keys(this._styleVars).length>0)return;const e=c(this.color),o=b(this.color),r={solid:{bg:e,color:o,border:"none",shadow:"none",hoverBg:e,hoverColor:o,hoverShadow:`0 10px 20px -10px ${e}`},faded:{bg:"var(--sky-hover-tertiary)",color:e,border:"1px solid var(--sky-text-tertiary)",shadow:"none",hoverBg:"var(--sky-hover-secondary)",hoverColor:e,hoverShadow:"none",hoverBorder:"1px solid var(--sky-text-secondary)"},bordered:{bg:"transparent",color:e,border:`2px solid ${e}`,shadow:"none",hoverBg:"transparent",hoverColor:e,hoverShadow:"none",hoverBorder:`2px solid ${f(e,25)}`},transparent:{bg:"transparent",color:e,border:"none",shadow:"none",hoverBg:u(e,15),hoverColor:e,hoverShadow:"none"},flat:{bg:u(e,20),color:f(e,30),border:"none",shadow:"none",hoverBg:u(e,25),hoverColor:f(e,35),hoverShadow:"none"},ghost:{bg:"transparent",color:e,border:`2px solid ${e}`,shadow:"none",hoverBg:e,hoverColor:o,hoverShadow:"none"},shadow:{bg:"var(--sky-glass-primary)",color:"var(--sky-text-primary)",border:m(),shadow:"var(--sky-box-shadow-primary)",hoverBg:"var(--sky-glass-primary)",hoverColor:e,hoverShadow:"var(--sky-box-shadow-secondary)",hoverBorder:m()},relief:{bg:e,color:o,border:"none",shadow:`\n inset 0 1px 0 rgba(255,255,255,0.4),\n 0 3px 0 ${y(e,40)},\n 0 4px 6px -1px ${u(e,40)}\n `,hoverBg:e,hoverColor:o,hoverShadow:"none"},gradient:{bg:v(this.colors,e),color:o,border:"none",shadow:"none",hoverBg:v(this.colors,e),hoverColor:o,hoverShadow:"none"},link:{bg:"transparent",color:e,border:"none",shadow:"none",hoverBg:"transparent",hoverColor:e,hoverShadow:"none"}},n=this.variant in r?this.variant:"solid",i=g(this.color,n,r[n]),a=this.inGroup?"none":this.animation,s="auto"===a?{solid:{hover:"translateY(-3px)",active:"translateY(-3px)"},faded:{},bordered:{},transparent:{},flat:{},ghost:{},shadow:{hover:"translateY(-3px)",active:"translateY(-3px)"},gradient:{},relief:{hover:"translateY(2px)",active:"translateY(2px)"},link:{}}[n]:(t=>{switch(t){case"none":return{hover:"none",active:"none"};case"lift":return{hover:"translateY(-2px)",active:"translateY(-1px)"};case"push":return{hover:"translateY(2px)",active:"translateY(2px)"};case"scale":return{hover:"scale(1.05)",active:"scale(1.02)"};case"rotate":return{hover:"rotate(3deg)",active:"rotate(2deg)"};case"custom":return{hover:"var(--btn-hover-transform, none)",active:"var(--btn-active-transform, var(--btn-hover-transform, none))"};default:return{}}})(a),l=s.hover??"none",d=s.active??l??"none",p=this._resolveSize(this.size),h=this.iconOnly?this._toSquarePadding(p.padding):p.padding,k=this.iconOnly?"0":p.gap;let w=0;const S="bordered"===this.variant||"ghost"===this.variant,$="faded"===this.variant||"shadow"===this.variant;if(S)w=2;else if($)w=1;else if(i.border&&i.border.includes("px")){const t=i.border.match(/(\d+)px/);w=t?parseInt(t[1]):0}let C=w;if(i.hoverBorder&&i.hoverBorder.includes("px")){const t=i.hoverBorder.match(/(\d+)px/);C=t?parseInt(t[1]):w}let z="link"===this.variant?"0":h;if(w>0){const t=h.split(" ");if(1===t.length){const e=parseFloat(t[0]);z=`${Math.max(e-w,2)}px`}else if(2===t.length){const e=parseFloat(t[0]),o=parseFloat(t[1]),r=Math.max(e-w,2);z=this.iconOnly?`${r}px`:`${r}px ${o}px`}else if(4===t.length){const e=parseFloat(t[0]),o=parseFloat(t[1]),r=parseFloat(t[2]),n=parseFloat(t[3]);z=`${Math.max(e-w,2)}px ${o}px ${Math.max(r-w,2)}px ${n}px`}}const B=parseFloat(p.fontSize),O=parseFloat(p.icon);let _,j;if("link"===this.variant)_="auto";else if(this.iconOnly){const t=2*(parseFloat(z)||0)+O+2*w;_=`${t}px`,j=`${t}px`}else{const t=z.split(" ");_=`${(t.length>=2?parseFloat(t[0])+parseFloat(t[2]||t[0]):2*parseFloat(t[0])||16)+B+4+2*w}px`}const F={"--btn-bg":i.bg,"--btn-color":i.color,"--btn-border":i.border,"--btn-shadow":i.shadow,"--btn-radius":"link"===this.variant?"0":x(this.radius),"--btn-bg-hover":i.hoverBg,"--btn-color-hover":i.hoverColor,"--btn-shadow-hover":i.hoverShadow,"--btn-transform":"none","--btn-transform-hover":l,"--btn-transform-active":d,"--btn-padding":z,"--btn-font-size":p.fontSize,"--btn-gap":k,"--icon-size":p.icon,"--spinner-size":p.spinner,"--btn-min-height":_,...j?{"--btn-min-width":j}:{},"--btn-border-width":`${w}px`,"--btn-border-width-hover":`${C}px`};i.hoverBorder?F["--btn-border-hover"]=i.hoverBorder:delete F["--btn-border-hover"],this.inGroup&&("gradient"===this.variant?(F["--btn-bg"]="transparent",F["--btn-bg-hover"]="color-mix(in srgb, white 8%, transparent)"):F["--btn-bg-hover"]=F["--btn-bg"],F["--btn-color-hover"]=F["--btn-color"],F["--btn-border-hover"]=F["--btn-border"],F["--btn-shadow-hover"]="none","relief"===this.variant?(F["--btn-transform-hover"]="translateY(2px)",F["--btn-transform-active"]="translateY(2px)"):(F["--btn-transform-hover"]="none",F["--btn-transform-active"]="none")),this._styleVars=F}focusButton(){this.renderRoot.querySelector("button")?.focus()}clickButton(){this.disabled||this.loading||this.renderRoot.querySelector("button")?.click()}_createRipple(t){const e=t.currentTarget,o=e.getBoundingClientRect(),r=document.createElement("span"),n=Math.max(e.offsetWidth,e.offsetHeight),i=t.clientX-o.left-n/2,a=t.clientY-o.top-n/2;r.style.width=r.style.height=`${n}px`,r.style.left=`${i}px`,r.style.top=`${a}px`;const s=getComputedStyle(e).backgroundColor||"",l=s.includes("255, 255, 255")||s.includes("rgba(0, 0, 0, 0)");r.style.background=l?"rgba(0, 0, 0, 0.2)":"rgba(255, 255, 255, 0.3)",r.className="ripple";const d=e.querySelectorAll(".ripple");d.length>=3&&d[0]&&d[0].remove(),e.appendChild(r),r.addEventListener("animationend",()=>r.remove())}formDisabledCallback(t){this.disabled=t}get formOwner(){if("undefined"==typeof document)return null;const t="string"==typeof this.form?this.form.trim():"";return this.internals.form||(t?document.getElementById(t):null)||this.closest("form")}_handleClick(t){if(this.disabled||this.loading)return void t.preventDefault();"button"===this.type&&t.preventDefault(),this._createRipple(t);const e=this.formOwner;"submit"!==this.type?"reset"!==this.type||e?.reset():e?.requestSubmit()}_iconOnlyName(){return this.iconL||this.iconR}render(){const t=this._iconOnlyName(),e=this.iconOnly&&(this.label||t)?this.label||t:void 0;return n`
150
+ <button
151
+ style=${h(this._styleVars)}
152
+ type=${this.type}
153
+ form=${k(this.form??void 0)}
154
+ aria-label=${k(e)}
155
+ ?disabled=${this.disabled||this.loading}
156
+ ?loading=${this.loading}
157
+ @click=${this._handleClick}
158
+ >
159
+ ${p(this.iconOnly,()=>p(t,()=>n`<sky-icon part="icon" icon="${t}"></sky-icon>`),()=>n`
160
+ ${p(this.iconL,()=>n`<sky-icon part="icon" icon="${this.iconL}"></sky-icon>`)}
161
+ <slot @slotchange=${this._onSlotChange}></slot>
162
+ ${this._hasMeaningfulSlot?i:this.label}
163
+ ${p(this.iconR,()=>n`<sky-icon part="icon" icon="${this.iconR}"></sky-icon>`)}
164
+ `)}
165
+ ${p(this.loading,()=>n`
166
+ <div class="loading-overlay" part="loading-overlay">
167
+ <div class="spinner" part="spinner"></div>
168
+ </div>
169
+ `)}
170
+ </button>
171
+ `}};t([a({type:String,reflect:!0}),e("design:type",String)],S.prototype,"variant",void 0),t([a({type:String}),e("design:type",String)],S.prototype,"color",void 0),t([a({type:String}),e("design:type",String)],S.prototype,"type",void 0),t([a({type:String}),e("design:type",Object)],S.prototype,"form",void 0),t([a({type:String}),e("design:type",String)],S.prototype,"size",void 0),t([a({type:String}),e("design:type",String)],S.prototype,"radius",void 0),t([a({type:String}),e("design:type",Object)],S.prototype,"label",void 0),t([a({type:Boolean,reflect:!0}),e("design:type",Object)],S.prototype,"disabled",void 0),t([a({type:Boolean,reflect:!0}),e("design:type",Object)],S.prototype,"loading",void 0),t([a({type:String}),e("design:type",Object)],S.prototype,"iconL",void 0),t([a({type:String}),e("design:type",Object)],S.prototype,"iconR",void 0),t([a({type:Boolean,reflect:!0}),e("design:type",Object)],S.prototype,"iconOnly",void 0),t([a({type:String}),e("design:type",String)],S.prototype,"colors",void 0),t([a({type:String,reflect:!0}),e("design:type",String)],S.prototype,"animation",void 0),t([a({type:Boolean,reflect:!0}),e("design:type",Object)],S.prototype,"inGroup",void 0),t([s(),e("design:type",Object)],S.prototype,"_hasMeaningfulSlot",void 0),t([l({passive:!1}),e("design:type",Function),e("design:paramtypes",[MouseEvent]),e("design:returntype",void 0)],S.prototype,"_handleClick",null),S=t([d("sky-button"),e("design:paramtypes",[])],S);export{S as SkyButton};
172
+ //# sourceMappingURL=sky-button.js.map