@sekiui/elements 0.0.56 → 0.0.59

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 (269) hide show
  1. package/dist/cdn/index.js +1053 -91
  2. package/dist/cdn/p-BJCq8m2o.js +138 -0
  3. package/dist/cdn/p-Cpa2leXN.js +111 -0
  4. package/dist/cdn/{p-bMBhrs0a.js → p-DxUZSKfL.js} +467 -9
  5. package/dist/cdn/seki-badge.d.ts +11 -0
  6. package/dist/cdn/seki-badge.js +109 -0
  7. package/dist/cdn/seki-button.js +1 -1
  8. package/dist/cdn/seki-card-action.js +1 -1
  9. package/dist/cdn/seki-card-content.js +1 -1
  10. package/dist/cdn/seki-card-description.js +1 -1
  11. package/dist/cdn/seki-card-footer.js +1 -1
  12. package/dist/cdn/seki-card-header.js +1 -1
  13. package/dist/cdn/seki-card-title.js +1 -1
  14. package/dist/cdn/seki-card.js +1 -1
  15. package/dist/cdn/seki-field-description.js +1 -1
  16. package/dist/cdn/seki-field-error.js +1 -1
  17. package/dist/cdn/seki-field-group.js +1 -1
  18. package/dist/cdn/seki-field-label.js +1 -1
  19. package/dist/cdn/seki-field-legend.js +1 -1
  20. package/dist/cdn/seki-field.js +1 -1
  21. package/dist/cdn/seki-fieldset.js +1 -1
  22. package/dist/cdn/seki-input.js +1 -1
  23. package/dist/cdn/seki-select-content.js +1 -1
  24. package/dist/cdn/seki-select-group.js +1 -1
  25. package/dist/cdn/seki-select-option.js +1 -1
  26. package/dist/cdn/seki-select-trigger.js +1 -1
  27. package/dist/cdn/seki-select.js +1 -1
  28. package/dist/cdn/seki-sidebar-content.d.ts +11 -0
  29. package/dist/cdn/seki-sidebar-content.js +38 -0
  30. package/dist/cdn/seki-sidebar-footer.d.ts +11 -0
  31. package/dist/cdn/seki-sidebar-footer.js +38 -0
  32. package/dist/cdn/seki-sidebar-group.d.ts +11 -0
  33. package/dist/cdn/seki-sidebar-group.js +131 -0
  34. package/dist/cdn/seki-sidebar-header.d.ts +11 -0
  35. package/dist/cdn/seki-sidebar-header.js +38 -0
  36. package/dist/cdn/seki-sidebar-menu-item.d.ts +11 -0
  37. package/dist/cdn/seki-sidebar-menu-item.js +200 -0
  38. package/dist/cdn/seki-sidebar-menu-sub.d.ts +11 -0
  39. package/dist/cdn/seki-sidebar-menu-sub.js +123 -0
  40. package/dist/cdn/seki-sidebar-menu.d.ts +11 -0
  41. package/dist/cdn/seki-sidebar-menu.js +38 -0
  42. package/dist/cdn/seki-sidebar-trigger.d.ts +11 -0
  43. package/dist/cdn/seki-sidebar-trigger.js +109 -0
  44. package/dist/cdn/seki-sidebar.d.ts +11 -0
  45. package/dist/cdn/seki-sidebar.js +380 -0
  46. package/dist/cdn/seki-skeleton.js +2 -2
  47. package/dist/cdn/seki-switch.js +1 -1
  48. package/dist/cdn/seki-tooltip.js +1 -1
  49. package/dist/cjs/{index-Dd6_-KaR.js → index-D4RM3EID.js} +466 -8
  50. package/dist/cjs/index.cjs.js +1115 -63
  51. package/dist/cjs/keyboard-Cjl5HYES.js +142 -0
  52. package/dist/cjs/loader.cjs.js +2 -2
  53. package/dist/cjs/seki-badge.cjs.entry.js +85 -0
  54. package/dist/cjs/seki-button.cjs.entry.js +1 -1
  55. package/dist/cjs/seki-card-action.cjs.entry.js +1 -1
  56. package/dist/cjs/seki-card-content.cjs.entry.js +1 -1
  57. package/dist/cjs/seki-card-description.cjs.entry.js +1 -1
  58. package/dist/cjs/seki-card-footer.cjs.entry.js +1 -1
  59. package/dist/cjs/seki-card-header.cjs.entry.js +1 -1
  60. package/dist/cjs/seki-card-title.cjs.entry.js +1 -1
  61. package/dist/cjs/seki-card.cjs.entry.js +1 -1
  62. package/dist/cjs/seki-field-description.cjs.entry.js +1 -1
  63. package/dist/cjs/seki-field-error.cjs.entry.js +1 -1
  64. package/dist/cjs/seki-field-group.cjs.entry.js +1 -1
  65. package/dist/cjs/seki-field-label.cjs.entry.js +1 -1
  66. package/dist/cjs/seki-field-legend.cjs.entry.js +1 -1
  67. package/dist/cjs/seki-field.cjs.entry.js +1 -1
  68. package/dist/cjs/seki-fieldset.cjs.entry.js +1 -1
  69. package/dist/cjs/seki-input.cjs.entry.js +1 -1
  70. package/dist/cjs/seki-select-content.cjs.entry.js +1 -1
  71. package/dist/cjs/seki-select-group.cjs.entry.js +1 -1
  72. package/dist/cjs/seki-select-option.cjs.entry.js +1 -1
  73. package/dist/cjs/seki-select-trigger.cjs.entry.js +1 -1
  74. package/dist/cjs/seki-select.cjs.entry.js +1 -1
  75. package/dist/cjs/seki-sidebar-content.cjs.entry.js +20 -0
  76. package/dist/cjs/seki-sidebar-footer.cjs.entry.js +20 -0
  77. package/dist/cjs/seki-sidebar-group.cjs.entry.js +105 -0
  78. package/dist/cjs/seki-sidebar-header.cjs.entry.js +20 -0
  79. package/dist/cjs/seki-sidebar-menu-item.cjs.entry.js +174 -0
  80. package/dist/cjs/seki-sidebar-menu-sub.cjs.entry.js +99 -0
  81. package/dist/cjs/seki-sidebar-menu.cjs.entry.js +20 -0
  82. package/dist/cjs/seki-sidebar-trigger.cjs.entry.js +86 -0
  83. package/dist/cjs/seki-sidebar.cjs.entry.js +342 -0
  84. package/dist/cjs/seki-skeleton.cjs.entry.js +2 -2
  85. package/dist/cjs/seki-switch.cjs.entry.js +81 -3
  86. package/dist/cjs/seki-tooltip.cjs.entry.js +1 -1
  87. package/dist/cjs/sekiui.cjs.js +3 -3
  88. package/dist/collection/collection-manifest.json +12 -2
  89. package/dist/collection/components/badge/seki-badge.css +140 -0
  90. package/dist/collection/components/badge/seki-badge.interface.js +1 -0
  91. package/dist/collection/components/badge/seki-badge.js +199 -0
  92. package/dist/collection/components/sidebar/seki-sidebar-content.css +82 -0
  93. package/dist/collection/components/sidebar/seki-sidebar-content.js +33 -0
  94. package/dist/collection/components/sidebar/seki-sidebar-footer.css +44 -0
  95. package/dist/collection/components/sidebar/seki-sidebar-footer.js +31 -0
  96. package/dist/collection/components/sidebar/seki-sidebar-group.css +158 -0
  97. package/dist/collection/components/sidebar/seki-sidebar-group.js +300 -0
  98. package/dist/collection/components/sidebar/seki-sidebar-header.css +44 -0
  99. package/dist/collection/components/sidebar/seki-sidebar-header.js +32 -0
  100. package/dist/collection/components/sidebar/seki-sidebar-menu-item.css +196 -0
  101. package/dist/collection/components/sidebar/seki-sidebar-menu-item.js +403 -0
  102. package/dist/collection/components/sidebar/seki-sidebar-menu-sub.css +357 -0
  103. package/dist/collection/components/sidebar/seki-sidebar-menu-sub.js +256 -0
  104. package/dist/collection/components/sidebar/seki-sidebar-menu.css +25 -0
  105. package/dist/collection/components/sidebar/seki-sidebar-menu.js +32 -0
  106. package/dist/collection/components/sidebar/seki-sidebar-trigger.css +68 -0
  107. package/dist/collection/components/sidebar/seki-sidebar-trigger.js +175 -0
  108. package/dist/collection/components/sidebar/seki-sidebar.css +352 -0
  109. package/dist/collection/components/sidebar/seki-sidebar.js +812 -0
  110. package/dist/collection/components/sidebar/types.js +18 -0
  111. package/dist/collection/components/skeleton/seki-skeleton.js +1 -1
  112. package/dist/collection/index.js +7 -0
  113. package/dist/collection/services/focus.js +192 -0
  114. package/dist/collection/services/index.js +7 -0
  115. package/dist/collection/services/keyboard.js +136 -0
  116. package/dist/collection/services/media-query.js +254 -0
  117. package/dist/collection/types.js +41 -0
  118. package/dist/collection/utils/a11y.js +291 -0
  119. package/dist/collection/utils/common.js +286 -0
  120. package/dist/components/index.js +1053 -91
  121. package/dist/components/p-BJCq8m2o.js +138 -0
  122. package/dist/components/{p-QhPshhKB.js → p-BU1kuAZS.js} +467 -9
  123. package/dist/components/p-wQy1sEm6.js +111 -0
  124. package/dist/components/seki-badge.d.ts +11 -0
  125. package/dist/components/seki-badge.js +109 -0
  126. package/dist/components/seki-button.js +1 -1
  127. package/dist/components/seki-card-action.js +1 -1
  128. package/dist/components/seki-card-content.js +1 -1
  129. package/dist/components/seki-card-description.js +1 -1
  130. package/dist/components/seki-card-footer.js +1 -1
  131. package/dist/components/seki-card-header.js +1 -1
  132. package/dist/components/seki-card-title.js +1 -1
  133. package/dist/components/seki-card.js +1 -1
  134. package/dist/components/seki-field-description.js +1 -1
  135. package/dist/components/seki-field-error.js +1 -1
  136. package/dist/components/seki-field-group.js +1 -1
  137. package/dist/components/seki-field-label.js +1 -1
  138. package/dist/components/seki-field-legend.js +1 -1
  139. package/dist/components/seki-field.js +1 -1
  140. package/dist/components/seki-fieldset.js +1 -1
  141. package/dist/components/seki-input.js +1 -1
  142. package/dist/components/seki-select-content.js +1 -1
  143. package/dist/components/seki-select-group.js +1 -1
  144. package/dist/components/seki-select-option.js +1 -1
  145. package/dist/components/seki-select-trigger.js +1 -1
  146. package/dist/components/seki-select.js +1 -1
  147. package/dist/components/seki-sidebar-content.d.ts +11 -0
  148. package/dist/components/seki-sidebar-content.js +38 -0
  149. package/dist/components/seki-sidebar-footer.d.ts +11 -0
  150. package/dist/components/seki-sidebar-footer.js +38 -0
  151. package/dist/components/seki-sidebar-group.d.ts +11 -0
  152. package/dist/components/seki-sidebar-group.js +131 -0
  153. package/dist/components/seki-sidebar-header.d.ts +11 -0
  154. package/dist/components/seki-sidebar-header.js +38 -0
  155. package/dist/components/seki-sidebar-menu-item.d.ts +11 -0
  156. package/dist/components/seki-sidebar-menu-item.js +200 -0
  157. package/dist/components/seki-sidebar-menu-sub.d.ts +11 -0
  158. package/dist/components/seki-sidebar-menu-sub.js +123 -0
  159. package/dist/components/seki-sidebar-menu.d.ts +11 -0
  160. package/dist/components/seki-sidebar-menu.js +38 -0
  161. package/dist/components/seki-sidebar-trigger.d.ts +11 -0
  162. package/dist/components/seki-sidebar-trigger.js +109 -0
  163. package/dist/components/seki-sidebar.d.ts +11 -0
  164. package/dist/components/seki-sidebar.js +380 -0
  165. package/dist/components/seki-skeleton.js +2 -2
  166. package/dist/components/seki-switch.js +1 -1
  167. package/dist/components/seki-tooltip.js +1 -1
  168. package/dist/esm/{index-CuXbV_yz.js → index-DI_YjzRi.js} +466 -8
  169. package/dist/esm/index.js +1053 -63
  170. package/dist/esm/keyboard-BJCq8m2o.js +138 -0
  171. package/dist/esm/loader.js +3 -3
  172. package/dist/esm/seki-badge.entry.js +83 -0
  173. package/dist/esm/seki-button.entry.js +1 -1
  174. package/dist/esm/seki-card-action.entry.js +1 -1
  175. package/dist/esm/seki-card-content.entry.js +1 -1
  176. package/dist/esm/seki-card-description.entry.js +1 -1
  177. package/dist/esm/seki-card-footer.entry.js +1 -1
  178. package/dist/esm/seki-card-header.entry.js +1 -1
  179. package/dist/esm/seki-card-title.entry.js +1 -1
  180. package/dist/esm/seki-card.entry.js +1 -1
  181. package/dist/esm/seki-field-description.entry.js +1 -1
  182. package/dist/esm/seki-field-error.entry.js +1 -1
  183. package/dist/esm/seki-field-group.entry.js +1 -1
  184. package/dist/esm/seki-field-label.entry.js +1 -1
  185. package/dist/esm/seki-field-legend.entry.js +1 -1
  186. package/dist/esm/seki-field.entry.js +1 -1
  187. package/dist/esm/seki-fieldset.entry.js +1 -1
  188. package/dist/esm/seki-input.entry.js +1 -1
  189. package/dist/esm/seki-select-content.entry.js +1 -1
  190. package/dist/esm/seki-select-group.entry.js +1 -1
  191. package/dist/esm/seki-select-option.entry.js +1 -1
  192. package/dist/esm/seki-select-trigger.entry.js +1 -1
  193. package/dist/esm/seki-select.entry.js +1 -1
  194. package/dist/esm/seki-sidebar-content.entry.js +18 -0
  195. package/dist/esm/seki-sidebar-footer.entry.js +18 -0
  196. package/dist/esm/seki-sidebar-group.entry.js +103 -0
  197. package/dist/esm/seki-sidebar-header.entry.js +18 -0
  198. package/dist/esm/seki-sidebar-menu-item.entry.js +172 -0
  199. package/dist/esm/seki-sidebar-menu-sub.entry.js +97 -0
  200. package/dist/esm/seki-sidebar-menu.entry.js +18 -0
  201. package/dist/esm/seki-sidebar-trigger.entry.js +84 -0
  202. package/dist/esm/seki-sidebar.entry.js +340 -0
  203. package/dist/esm/seki-skeleton.entry.js +2 -2
  204. package/dist/esm/seki-switch.entry.js +84 -2
  205. package/dist/esm/seki-tooltip.entry.js +1 -1
  206. package/dist/esm/sekiui.js +4 -4
  207. package/dist/sekiui/index.esm.js +1 -1
  208. package/dist/sekiui/p-0af1b81a.entry.js +1 -0
  209. package/dist/sekiui/p-0ca6b9f0.entry.js +1 -0
  210. package/dist/sekiui/{p-cf11115c.entry.js → p-1480b41a.entry.js} +1 -1
  211. package/dist/sekiui/{p-dd1e3e87.entry.js → p-161be4d4.entry.js} +1 -1
  212. package/dist/sekiui/{p-e71ad432.entry.js → p-1685e673.entry.js} +1 -1
  213. package/dist/sekiui/p-26b629bc.entry.js +1 -0
  214. package/dist/sekiui/{p-0544d787.entry.js → p-27deb555.entry.js} +1 -1
  215. package/dist/sekiui/p-37fa684c.entry.js +1 -0
  216. package/dist/sekiui/{p-1607dc4d.entry.js → p-402a5db6.entry.js} +1 -1
  217. package/dist/sekiui/{p-6bde807e.entry.js → p-40ba3ad6.entry.js} +1 -1
  218. package/dist/sekiui/{p-d4c92041.entry.js → p-4867d02d.entry.js} +1 -1
  219. package/dist/sekiui/p-4b29dbda.entry.js +1 -0
  220. package/dist/sekiui/{p-b10d81a6.entry.js → p-587fd313.entry.js} +1 -1
  221. package/dist/sekiui/{p-3e088b5a.entry.js → p-58ab95eb.entry.js} +1 -1
  222. package/dist/sekiui/p-60ff3543.entry.js +1 -0
  223. package/dist/sekiui/{p-9af5286b.entry.js → p-68b1fa1a.entry.js} +1 -1
  224. package/dist/sekiui/{p-43f7c542.entry.js → p-6a922121.entry.js} +1 -1
  225. package/dist/sekiui/{p-4d57c6ea.entry.js → p-6f5bf5af.entry.js} +1 -1
  226. package/dist/sekiui/{p-88f91658.entry.js → p-84d47cab.entry.js} +1 -1
  227. package/dist/sekiui/p-9dcd07b2.entry.js +1 -0
  228. package/dist/sekiui/p-BJCq8m2o.js +1 -0
  229. package/dist/sekiui/p-DI_YjzRi.js +2 -0
  230. package/dist/sekiui/p-ab9d1ba5.entry.js +1 -0
  231. package/dist/sekiui/p-b525d85a.entry.js +1 -0
  232. package/dist/sekiui/{p-ed440425.entry.js → p-b64e7007.entry.js} +1 -1
  233. package/dist/sekiui/{p-6e238adf.entry.js → p-b7f2b568.entry.js} +1 -1
  234. package/dist/sekiui/{p-009183ab.entry.js → p-c642ab55.entry.js} +1 -1
  235. package/dist/sekiui/{p-eefbc037.entry.js → p-c74bd925.entry.js} +1 -1
  236. package/dist/sekiui/p-c83d94c4.entry.js +1 -0
  237. package/dist/sekiui/p-ce1bbe04.entry.js +1 -0
  238. package/dist/sekiui/{p-b22df79e.entry.js → p-cf552ff9.entry.js} +1 -1
  239. package/dist/sekiui/{p-81709fc2.entry.js → p-d194caf1.entry.js} +1 -1
  240. package/dist/sekiui/{p-b479935d.entry.js → p-dfa2f8cd.entry.js} +1 -1
  241. package/dist/sekiui/{p-eedf44b5.entry.js → p-e6d5f56e.entry.js} +1 -1
  242. package/dist/sekiui/{p-97e6e5ce.entry.js → p-f1ffc3fa.entry.js} +1 -1
  243. package/dist/sekiui/{p-35f8f9c4.entry.js → p-f863f36b.entry.js} +1 -1
  244. package/dist/sekiui/sekiui.esm.js +1 -1
  245. package/dist/types/components/badge/seki-badge.d.ts +43 -0
  246. package/dist/types/components/badge/seki-badge.interface.d.ts +88 -0
  247. package/dist/types/components/sidebar/seki-sidebar-content.d.ts +18 -0
  248. package/dist/types/components/sidebar/seki-sidebar-footer.d.ts +16 -0
  249. package/dist/types/components/sidebar/seki-sidebar-group.d.ts +81 -0
  250. package/dist/types/components/sidebar/seki-sidebar-header.d.ts +17 -0
  251. package/dist/types/components/sidebar/seki-sidebar-menu-item.d.ts +104 -0
  252. package/dist/types/components/sidebar/seki-sidebar-menu-sub.d.ts +81 -0
  253. package/dist/types/components/sidebar/seki-sidebar-menu.d.ts +17 -0
  254. package/dist/types/components/sidebar/seki-sidebar-trigger.d.ts +53 -0
  255. package/dist/types/components/sidebar/seki-sidebar.d.ts +185 -0
  256. package/dist/types/components/sidebar/types.d.ts +245 -0
  257. package/dist/types/components.d.ts +599 -0
  258. package/dist/types/index.d.ts +4 -0
  259. package/dist/types/services/focus.d.ts +74 -0
  260. package/dist/types/services/index.d.ts +7 -0
  261. package/dist/types/services/keyboard.d.ts +74 -0
  262. package/dist/types/services/media-query.d.ts +121 -0
  263. package/dist/types/stencil-public-runtime.d.ts +19 -9
  264. package/dist/types/types.d.ts +105 -0
  265. package/dist/types/utils/a11y.d.ts +130 -0
  266. package/dist/types/utils/common.d.ts +142 -0
  267. package/package.json +10 -2
  268. package/dist/sekiui/p-9fe07f6e.entry.js +0 -1
  269. package/dist/sekiui/p-CuXbV_yz.js +0 -2
@@ -0,0 +1,140 @@
1
+ /* Badge Component Styles with Design Tokens
2
+ * Uses typography system for text sizing (seki-small class)
3
+ * Reference: src/styles/typography/variants.css
4
+ */
5
+
6
+ :host {
7
+ --seki-badge-default-bg: var(--color-primary, #2563eb);
8
+ --seki-badge-default-text: var(--color-white, #ffffff);
9
+ --seki-badge-default-border: transparent;
10
+
11
+ --seki-badge-secondary-bg: var(--color-surface-secondary, #e5e7eb);
12
+ --seki-badge-secondary-text: var(--color-text-primary, #1f2937);
13
+ --seki-badge-secondary-border: transparent;
14
+
15
+ --seki-badge-destructive-bg: var(--color-destructive, #ef4444);
16
+ --seki-badge-destructive-text: var(--color-white, #ffffff);
17
+ --seki-badge-destructive-border: transparent;
18
+
19
+ --seki-badge-outline-bg: transparent;
20
+ --seki-badge-outline-text: var(--color-text-primary, #1f2937);
21
+ --seki-badge-outline-border: var(--color-border, #d1d5db);
22
+
23
+ /* Typography tokens from seki-small (.seki-small in typography/variants.css) */
24
+ --seki-badge-font-size: var(--seki-font-size-sm, 12px);
25
+ --seki-badge-font-weight: var(--seki-font-weight-medium, 500);
26
+ --seki-badge-line-height: 1.25rem;
27
+ --seki-badge-font-family: var(--seki-font-sans, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto);
28
+
29
+ /* Spacing tokens */
30
+ --seki-badge-spacing: var(--spacing-unit, 8px);
31
+ --seki-badge-padding-x: calc(var(--seki-badge-spacing) * 0.75);
32
+ --seki-badge-padding-y: calc(var(--seki-badge-spacing) * 0.5);
33
+ --seki-badge-border-radius: var(--radius-sm, 4px);
34
+ --seki-badge-border-radius-rounded: 999px;
35
+
36
+ --seki-badge-icon-size: 1em;
37
+ --seki-badge-icon-margin: 2px;
38
+ }
39
+
40
+ /* Dark mode support */
41
+ :host([data-theme='dark']) {
42
+ --seki-badge-secondary-bg: var(--color-surface-secondary-dark, #374151);
43
+ --seki-badge-secondary-text: var(--color-text-primary-dark, #f3f4f6);
44
+ --seki-badge-outline-text: var(--color-text-primary-dark, #f3f4f6);
45
+ --seki-badge-outline-border: var(--color-border-dark, #4b5563);
46
+ }
47
+
48
+ /* Base badge styles */
49
+ .seki-badge {
50
+ display: inline-flex;
51
+ align-items: center;
52
+ gap: var(--seki-badge-icon-margin);
53
+ padding: var(--seki-badge-padding-y) var(--seki-badge-padding-x);
54
+ border-radius: var(--seki-badge-border-radius);
55
+ border: 1px solid var(--seki-badge-default-border);
56
+ font-family: var(--seki-badge-font-family);
57
+ font-size: var(--seki-badge-font-size);
58
+ font-weight: var(--seki-badge-font-weight);
59
+ line-height: var(--seki-badge-line-height);
60
+ white-space: nowrap;
61
+ word-wrap: break-word;
62
+ overflow-wrap: break-word;
63
+ max-width: 100%;
64
+ box-sizing: border-box;
65
+ }
66
+
67
+ /* Rounded variant */
68
+ .seki-badge--rounded {
69
+ border-radius: var(--seki-badge-border-radius-rounded);
70
+ }
71
+
72
+ /* Default variant */
73
+ .seki-badge--default {
74
+ background-color: var(--seki-badge-default-bg);
75
+ color: var(--seki-badge-default-text);
76
+ border-color: var(--seki-badge-default-border);
77
+ }
78
+
79
+ /* Secondary variant */
80
+ .seki-badge--secondary {
81
+ background-color: var(--seki-badge-secondary-bg);
82
+ color: var(--seki-badge-secondary-text);
83
+ border-color: var(--seki-badge-secondary-border);
84
+ }
85
+
86
+ /* Destructive variant */
87
+ .seki-badge--destructive {
88
+ background-color: var(--seki-badge-destructive-bg);
89
+ color: var(--seki-badge-destructive-text);
90
+ border-color: var(--seki-badge-destructive-border);
91
+ }
92
+
93
+ /* Outline variant */
94
+ .seki-badge--outline {
95
+ background-color: var(--seki-badge-outline-bg);
96
+ color: var(--seki-badge-outline-text);
97
+ border-color: var(--seki-badge-outline-border);
98
+ }
99
+
100
+ /* Icon styles */
101
+ .seki-badge__icon {
102
+ display: inline-flex;
103
+ align-items: center;
104
+ justify-content: center;
105
+ font-size: var(--seki-badge-icon-size);
106
+ line-height: 1;
107
+ }
108
+
109
+ /* Text styles */
110
+ .seki-badge__text {
111
+ display: inline-flex;
112
+ align-items: center;
113
+ flex-shrink: 1;
114
+ min-width: 0;
115
+ }
116
+
117
+ /* Ensure text doesn't overflow */
118
+ .seki-badge__text::slotted(*) {
119
+ overflow: hidden;
120
+ text-overflow: ellipsis;
121
+ white-space: normal;
122
+ }
123
+
124
+ /* Accessibility: High contrast mode support */
125
+ @media (prefers-contrast: more) {
126
+ .seki-badge {
127
+ border-width: 2px;
128
+ }
129
+
130
+ .seki-badge--outline {
131
+ border-width: 2px;
132
+ }
133
+ }
134
+
135
+ /* Reduced motion support */
136
+ @media (prefers-reduced-motion: reduce) {
137
+ .seki-badge {
138
+ transition: none;
139
+ }
140
+ }
@@ -0,0 +1,199 @@
1
+ import { h } from "@stencil/core";
2
+ /**
3
+ * seki-badge: Presentational badge component for displaying small pieces of information
4
+ *
5
+ * @component Badge
6
+ * @example
7
+ * <seki-badge variant="default">Label</seki-badge>
8
+ * <seki-badge variant="secondary">
9
+ * <span slot="icon">ℹ</span>
10
+ * Secondary
11
+ * </seki-badge>
12
+ */
13
+ export class SekiBadge {
14
+ constructor() {
15
+ /**
16
+ * Visual variant of the badge
17
+ * @default 'default'
18
+ */
19
+ this.variant = 'default';
20
+ /**
21
+ * Enable rounded pill styling
22
+ * @default false
23
+ */
24
+ this.rounded = false;
25
+ }
26
+ componentWillLoad() {
27
+ // Validate props
28
+ const validVariants = ['default', 'secondary', 'destructive', 'outline'];
29
+ if (this.variant && !validVariants.includes(this.variant)) {
30
+ console.warn(`Invalid variant "${this.variant}". Must be one of: ${validVariants.join(', ')}`);
31
+ this.variant = 'default';
32
+ }
33
+ }
34
+ render() {
35
+ // Check if using number badge mode
36
+ const isNumberBadge = typeof this.number === 'number';
37
+ if (isNumberBadge) {
38
+ return this.renderNumberBadge();
39
+ }
40
+ return this.renderTextBadge();
41
+ }
42
+ renderNumberBadge() {
43
+ // Calculate display number
44
+ let displayNumber;
45
+ if (this.max !== undefined && this.number > this.max) {
46
+ displayNumber = `${this.max}+`;
47
+ }
48
+ else {
49
+ displayNumber = String(this.number);
50
+ }
51
+ const badgeClasses = {
52
+ 'seki-badge': true,
53
+ [`seki-badge--${this.variant}`]: !!this.variant,
54
+ 'seki-badge--rounded': !!this.rounded,
55
+ 'seki-badge--number': true,
56
+ };
57
+ const classString = Object.entries(badgeClasses)
58
+ .filter(([, active]) => active)
59
+ .map(([name]) => name)
60
+ .join(' ');
61
+ return (h("span", { class: classString }, displayNumber));
62
+ }
63
+ renderTextBadge() {
64
+ const hasIcon = this.hasSlot('icon');
65
+ const hasText = this.hasSlot('default');
66
+ // Validate that at least one of text or icon is present
67
+ if (!hasIcon && !hasText) {
68
+ console.warn('Badge requires at least text or icon content');
69
+ }
70
+ const badgeClasses = {
71
+ 'seki-badge': true,
72
+ [`seki-badge--${this.variant}`]: !!this.variant,
73
+ 'seki-badge--rounded': !!this.rounded,
74
+ };
75
+ const classString = Object.entries(badgeClasses)
76
+ .filter(([, active]) => active)
77
+ .map(([name]) => name)
78
+ .join(' ');
79
+ return (h("div", { class: classString }, hasIcon && (h("span", { class: "seki-badge__icon" }, h("slot", { name: "icon" }))), hasText && (h("span", { class: "seki-badge__text" }, h("slot", null)))));
80
+ }
81
+ hasSlot(name) {
82
+ var _a;
83
+ const slot = this.el.querySelector(`[slot="${name}"]`);
84
+ return !!slot || (name === 'default' && ((_a = this.el.textContent) === null || _a === void 0 ? void 0 : _a.trim()) !== '');
85
+ }
86
+ static get is() { return "seki-badge"; }
87
+ static get encapsulation() { return "shadow"; }
88
+ static get originalStyleUrls() {
89
+ return {
90
+ "$": ["seki-badge.css"]
91
+ };
92
+ }
93
+ static get styleUrls() {
94
+ return {
95
+ "$": ["seki-badge.css"]
96
+ };
97
+ }
98
+ static get properties() {
99
+ return {
100
+ "variant": {
101
+ "type": "string",
102
+ "mutable": false,
103
+ "complexType": {
104
+ "original": "BadgeVariant",
105
+ "resolved": "\"default\" | \"destructive\" | \"outline\" | \"secondary\" | undefined",
106
+ "references": {
107
+ "BadgeVariant": {
108
+ "location": "import",
109
+ "path": "./seki-badge.interface",
110
+ "id": "src/components/badge/seki-badge.interface.ts::BadgeVariant"
111
+ }
112
+ }
113
+ },
114
+ "required": false,
115
+ "optional": true,
116
+ "docs": {
117
+ "tags": [{
118
+ "name": "default",
119
+ "text": "'default'"
120
+ }],
121
+ "text": "Visual variant of the badge"
122
+ },
123
+ "getter": false,
124
+ "setter": false,
125
+ "reflect": false,
126
+ "attribute": "variant",
127
+ "defaultValue": "'default'"
128
+ },
129
+ "rounded": {
130
+ "type": "boolean",
131
+ "mutable": false,
132
+ "complexType": {
133
+ "original": "boolean",
134
+ "resolved": "boolean | undefined",
135
+ "references": {}
136
+ },
137
+ "required": false,
138
+ "optional": true,
139
+ "docs": {
140
+ "tags": [{
141
+ "name": "default",
142
+ "text": "false"
143
+ }],
144
+ "text": "Enable rounded pill styling"
145
+ },
146
+ "getter": false,
147
+ "setter": false,
148
+ "reflect": false,
149
+ "attribute": "rounded",
150
+ "defaultValue": "false"
151
+ },
152
+ "number": {
153
+ "type": "number",
154
+ "mutable": false,
155
+ "complexType": {
156
+ "original": "number",
157
+ "resolved": "number | undefined",
158
+ "references": {}
159
+ },
160
+ "required": false,
161
+ "optional": true,
162
+ "docs": {
163
+ "tags": [{
164
+ "name": "default",
165
+ "text": "undefined"
166
+ }],
167
+ "text": "Number to display in the badge\nWhen set, displays the number instead of text content"
168
+ },
169
+ "getter": false,
170
+ "setter": false,
171
+ "reflect": false,
172
+ "attribute": "number"
173
+ },
174
+ "max": {
175
+ "type": "number",
176
+ "mutable": false,
177
+ "complexType": {
178
+ "original": "number",
179
+ "resolved": "number | undefined",
180
+ "references": {}
181
+ },
182
+ "required": false,
183
+ "optional": true,
184
+ "docs": {
185
+ "tags": [{
186
+ "name": "default",
187
+ "text": "undefined"
188
+ }],
189
+ "text": "Maximum limit for number badge\nIf number exceeds this, shows \"max+\" instead\nOnly used when number prop is set"
190
+ },
191
+ "getter": false,
192
+ "setter": false,
193
+ "reflect": false,
194
+ "attribute": "max"
195
+ }
196
+ };
197
+ }
198
+ static get elementRef() { return "el"; }
199
+ }
@@ -0,0 +1,82 @@
1
+ /**
2
+ * SekiSidebarContent CSS
3
+ * Styling for the scrollable main content area of the sidebar
4
+ */
5
+
6
+ :host {
7
+ display: flex;
8
+ flex: 1;
9
+ overflow: hidden;
10
+ min-height: 0;
11
+ }
12
+
13
+ .content-wrapper {
14
+ display: flex;
15
+ flex-direction: column;
16
+ width: 100%;
17
+ height: 100%;
18
+ overflow-y: auto;
19
+ overflow-x: hidden;
20
+ padding: var(--sidebar-padding, 0.5rem);
21
+ gap: var(--sidebar-gap, 0.5rem);
22
+ }
23
+
24
+ /* Custom scrollbar styling */
25
+ .content-wrapper::-webkit-scrollbar {
26
+ width: var(--scrollbar-width, 6px);
27
+ }
28
+
29
+ .content-wrapper::-webkit-scrollbar-track {
30
+ background: transparent;
31
+ }
32
+
33
+ .content-wrapper::-webkit-scrollbar-thumb {
34
+ background-color: var(--scrollbar-thumb, #d1d5db);
35
+ border-radius: var(--scrollbar-radius, 3px);
36
+ border: 2px solid transparent;
37
+ background-clip: content-box;
38
+ }
39
+
40
+ .content-wrapper::-webkit-scrollbar-thumb:hover {
41
+ background-color: var(--scrollbar-thumb-hover, #9ca3af);
42
+ background-clip: content-box;
43
+ }
44
+
45
+ :host([data-theme="dark"]) .content-wrapper::-webkit-scrollbar-thumb {
46
+ background-color: var(--scrollbar-thumb-dark, #52525b);
47
+ background-clip: content-box;
48
+ }
49
+
50
+ :host([data-theme="dark"]) .content-wrapper::-webkit-scrollbar-thumb:hover {
51
+ background-color: var(--scrollbar-thumb-hover-dark, #71717a);
52
+ background-clip: content-box;
53
+ }
54
+
55
+ /* Firefox scrollbar */
56
+ .content-wrapper {
57
+ scrollbar-color: var(--scrollbar-thumb, #d1d5db) transparent;
58
+ scrollbar-width: thin;
59
+ }
60
+
61
+ :host([data-theme="dark"]) .content-wrapper {
62
+ scrollbar-color: var(--scrollbar-thumb-dark, #52525b) transparent;
63
+ }
64
+
65
+ /* Print styles */
66
+ @media print {
67
+ :host {
68
+ overflow: visible;
69
+ }
70
+
71
+ .content-wrapper {
72
+ overflow: visible;
73
+ padding: 0;
74
+ }
75
+ }
76
+
77
+ /* High contrast mode support */
78
+ @media (prefers-contrast: more) {
79
+ .content-wrapper::-webkit-scrollbar-thumb {
80
+ border-width: 1px;
81
+ }
82
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * SekiSidebarContent Component
3
+ * @description Scrollable main content area of the sidebar
4
+ * Contains menu items, groups, and other sidebar content
5
+ * @component
6
+ * @example
7
+ * <seki-sidebar-content>
8
+ * <seki-sidebar-group title="Navigation">
9
+ * <!-- Menu items -->
10
+ * </seki-sidebar-group>
11
+ * </seki-sidebar-content>
12
+ */
13
+ import { h, Host } from "@stencil/core";
14
+ export class SekiSidebarContent {
15
+ /**
16
+ * Render the component
17
+ */
18
+ render() {
19
+ return (h(Host, { key: 'e0fbac0ce2f3013667eadd8ad31c3de5f598490c' }, h("div", { key: '6a9015ee078aa4434b07d77c16f90362646786f6', class: "content-wrapper" }, h("slot", { key: '7490825d408800a5ba57f8f07a64f7b8abbbd4fd' }))));
20
+ }
21
+ static get is() { return "seki-sidebar-content"; }
22
+ static get encapsulation() { return "scoped"; }
23
+ static get originalStyleUrls() {
24
+ return {
25
+ "$": ["seki-sidebar-content.css"]
26
+ };
27
+ }
28
+ static get styleUrls() {
29
+ return {
30
+ "$": ["seki-sidebar-content.css"]
31
+ };
32
+ }
33
+ }
@@ -0,0 +1,44 @@
1
+ /**
2
+ * SekiSidebarFooter CSS
3
+ * Styling for the sticky footer section of the sidebar
4
+ */
5
+
6
+ :host {
7
+ display: block;
8
+ padding: var(--sidebar-padding, 0.5rem);
9
+ border-top: 1px solid var(--sidebar-border, #e5e7eb);
10
+ background-color: var(--sidebar-bg, #ffffff);
11
+ position: sticky;
12
+ bottom: 0;
13
+ z-index: 10;
14
+ min-height: var(--sidebar-footer-height, auto);
15
+ flex-shrink: 0;
16
+ }
17
+
18
+ :host([data-theme="dark"]) {
19
+ border-top-color: var(--sidebar-border-dark, #27272a);
20
+ background-color: var(--sidebar-bg-dark, #09090b);
21
+ }
22
+
23
+ .footer-wrapper {
24
+ display: flex;
25
+ align-items: center;
26
+ justify-content: space-between;
27
+ width: 100%;
28
+ height: 100%;
29
+ gap: var(--sidebar-gap, 0.5rem);
30
+ }
31
+
32
+ /* Print styles */
33
+ @media print {
34
+ :host {
35
+ display: none;
36
+ }
37
+ }
38
+
39
+ /* High contrast mode support */
40
+ @media (prefers-contrast: more) {
41
+ :host {
42
+ border-top-width: 2px;
43
+ }
44
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * SekiSidebarFooter Component
3
+ * @description Sticky footer section at the bottom of the sidebar
4
+ * Provides a slot for footer content (user info, settings, logout button)
5
+ * @component
6
+ * @example
7
+ * <seki-sidebar-footer>
8
+ * <div class="user-info">User Name</div>
9
+ * </seki-sidebar-footer>
10
+ */
11
+ import { h, Host } from "@stencil/core";
12
+ export class SekiSidebarFooter {
13
+ /**
14
+ * Render the component
15
+ */
16
+ render() {
17
+ return (h(Host, { key: '1ce49f79758c8281d9b5c8c2589f938c1a731ceb' }, h("div", { key: '28992ba4de35c194c9c2f76e8d14f0299a23b242', class: "footer-wrapper" }, h("slot", { key: '7896c9c1823da9d65a4f99206840823372e5b174' }))));
18
+ }
19
+ static get is() { return "seki-sidebar-footer"; }
20
+ static get encapsulation() { return "scoped"; }
21
+ static get originalStyleUrls() {
22
+ return {
23
+ "$": ["seki-sidebar-footer.css"]
24
+ };
25
+ }
26
+ static get styleUrls() {
27
+ return {
28
+ "$": ["seki-sidebar-footer.css"]
29
+ };
30
+ }
31
+ }
@@ -0,0 +1,158 @@
1
+ /**
2
+ * SekiSidebarGroup CSS
3
+ * Styling for sidebar groups with optional collapsible sections
4
+ */
5
+
6
+ :host {
7
+ display: block;
8
+ width: 100%;
9
+ }
10
+
11
+ .group-wrapper {
12
+ display: flex;
13
+ flex-direction: column;
14
+ gap: var(--sidebar-gap, 0.5rem);
15
+ }
16
+
17
+ .group-header {
18
+ display: flex;
19
+ align-items: center;
20
+ gap: var(--sidebar-gap, 0.5rem);
21
+ padding: var(--sidebar-padding-sm, 0.25rem 0);
22
+ color: var(--sidebar-muted, var(--seki-color-text-muted));
23
+ text-transform: uppercase;
24
+ letter-spacing: 0.05em;
25
+ transition: margin-top 200ms ease-linear, opacity 200ms ease-linear;
26
+ /* Use built-in typography */
27
+ font-size: var(--seki-font-size-xs);
28
+ font-weight: var(--seki-font-weight-semibold);
29
+ font-family: var(--seki-font-sans);
30
+ }
31
+
32
+ :host([data-theme="dark"]) .group-header {
33
+ color: var(--sidebar-muted-dark, #a1a1aa);
34
+ }
35
+
36
+ .group-toggle {
37
+ display: flex;
38
+ align-items: center;
39
+ justify-content: center;
40
+ width: 1.5rem;
41
+ height: 1.5rem;
42
+ padding: 0;
43
+ background: transparent;
44
+ border: none;
45
+ cursor: pointer;
46
+ color: inherit;
47
+ font-size: 0.75rem;
48
+ transition: transform var(--sidebar-transition, 200ms) ease-out;
49
+ border-radius: var(--sidebar-radius-sm, 0.25rem);
50
+ }
51
+
52
+ .group-toggle:hover {
53
+ background-color: var(--sidebar-hover-bg, #f3f4f6);
54
+ }
55
+
56
+ .group-toggle:focus-visible {
57
+ outline: 2px solid var(--sidebar-primary, #3b82f6);
58
+ outline-offset: 2px;
59
+ }
60
+
61
+ :host([data-theme="dark"]) .group-toggle:hover {
62
+ background-color: var(--sidebar-hover-bg-dark, #27272a);
63
+ }
64
+
65
+ :host([data-collapsed="true"]) .group-toggle .toggle-icon {
66
+ transform: rotate(-90deg);
67
+ }
68
+
69
+ .toggle-icon {
70
+ display: inline-block;
71
+ transition: transform var(--sidebar-transition, 200ms) ease-out;
72
+ }
73
+
74
+ .group-title {
75
+ flex: 1;
76
+ overflow: hidden;
77
+ text-overflow: ellipsis;
78
+ white-space: nowrap;
79
+ }
80
+
81
+ .group-action {
82
+ display: flex;
83
+ align-items: center;
84
+ justify-content: center;
85
+ width: 1.5rem;
86
+ height: 1.5rem;
87
+ padding: 0;
88
+ background: transparent;
89
+ border: none;
90
+ cursor: pointer;
91
+ color: inherit;
92
+ transition: background-color var(--sidebar-transition, 200ms) ease-out;
93
+ border-radius: var(--sidebar-radius-sm, 0.25rem);
94
+ }
95
+
96
+ .group-action:hover {
97
+ background-color: var(--sidebar-hover-bg, #f3f4f6);
98
+ }
99
+
100
+ .group-action:focus-visible {
101
+ outline: 2px solid var(--sidebar-primary, #3b82f6);
102
+ outline-offset: 2px;
103
+ }
104
+
105
+ :host([data-theme="dark"]) .group-action:hover {
106
+ background-color: var(--sidebar-hover-bg-dark, #27272a);
107
+ }
108
+
109
+ .group-content {
110
+ display: flex;
111
+ flex-direction: column;
112
+ gap: var(--sidebar-gap, 0.5rem);
113
+ animation: slideDown var(--sidebar-transition, 200ms) ease-out;
114
+ }
115
+
116
+ @keyframes slideDown {
117
+ from {
118
+ opacity: 0;
119
+ max-height: 0;
120
+ }
121
+ to {
122
+ opacity: 1;
123
+ max-height: 1000px;
124
+ }
125
+ }
126
+
127
+ /* Print styles */
128
+ @media print {
129
+ .group-toggle,
130
+ .group-action {
131
+ display: none;
132
+ }
133
+ }
134
+
135
+ /* High contrast mode support */
136
+ @media (prefers-contrast: more) {
137
+ .group-toggle,
138
+ .group-action {
139
+ border: 1px solid currentColor;
140
+ }
141
+ }
142
+
143
+ /* Collapsed icon mode - hide group title with smooth transitions */
144
+ :host-context(seki-sidebar[data-state="closed"][data-collapse-mode="icon"]) .group-header {
145
+ margin-top: -2rem;
146
+ opacity: 0;
147
+ visibility: hidden;
148
+ pointer-events: none;
149
+ }
150
+
151
+ /* Expanded - show group title */
152
+ :host-context(seki-sidebar[data-state="open"]) .group-header,
153
+ :host-context(seki-sidebar:not([data-state="closed"])) .group-header {
154
+ margin-top: 0;
155
+ opacity: 1;
156
+ visibility: visible;
157
+ pointer-events: auto;
158
+ }