@eunomia/elements 1.0.0-beta.2 → 1.0.0-beta.4

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 (354) hide show
  1. package/README.md +1 -1
  2. package/dist/cdn/components/chunks/chunk-2JLDJFYD.js +48 -0
  3. package/dist/cdn/components/chunks/chunk-4MXL6PZC.js +124 -0
  4. package/dist/cdn/components/chunks/{chunk-32KRPOPV.js → chunk-5XJGYXW7.js} +6 -6
  5. package/dist/cdn/components/chunks/{chunk-O2HNWH65.js → chunk-5XJLIHAU.js} +7 -7
  6. package/dist/cdn/components/chunks/{chunk-5GF2Q3NR.js → chunk-74AOAB4X.js} +1 -1
  7. package/dist/cdn/components/chunks/{chunk-WYMBUIKX.js → chunk-A6KGFALA.js} +4 -4
  8. package/dist/cdn/components/chunks/chunk-BMQOI7HX.js +371 -0
  9. package/dist/cdn/components/chunks/{chunk-LJYTHDZP.js → chunk-D2M4BV5Y.js} +6 -6
  10. package/dist/cdn/components/chunks/{chunk-NEYBPT3D.js → chunk-EJIX2D4Z.js} +2 -2
  11. package/dist/cdn/components/chunks/{chunk-BYBUXKXC.js → chunk-EOWBYZV7.js} +2 -2
  12. package/dist/cdn/components/chunks/chunk-EST3M4AO.js +1 -0
  13. package/dist/cdn/components/chunks/{chunk-AQQMW353.js → chunk-GSJEJLFA.js} +3 -3
  14. package/dist/cdn/components/chunks/chunk-GU6BVMFJ.js +1 -0
  15. package/dist/cdn/components/chunks/{chunk-5RCCZVFZ.js → chunk-IJ5WFMK4.js} +1 -1
  16. package/dist/cdn/components/chunks/{chunk-RWONCXTF.js → chunk-KVYUNKUO.js} +2 -2
  17. package/dist/cdn/components/chunks/chunk-LGLQ36QB.js +16 -0
  18. package/dist/cdn/components/chunks/{chunk-74HHV4CX.js → chunk-NHFWATVN.js} +2 -2
  19. package/dist/cdn/components/chunks/chunk-OAULRKHQ.js +38 -0
  20. package/dist/cdn/components/chunks/chunk-P32B7BFD.js +118 -0
  21. package/dist/cdn/components/chunks/{chunk-ZPFHTJSS.js → chunk-PCM7D3YF.js} +1 -1
  22. package/dist/cdn/components/chunks/{chunk-ABYEBP57.js → chunk-PED5ATYN.js} +11 -8
  23. package/dist/cdn/components/chunks/{chunk-ON42P6FI.js → chunk-RJCJXB7Y.js} +5 -5
  24. package/dist/cdn/components/chunks/{chunk-5C7YND22.js → chunk-S2UCEWNG.js} +8 -8
  25. package/dist/cdn/components/chunks/{chunk-7WTSHE7M.js → chunk-SIHZFOTK.js} +9 -9
  26. package/dist/cdn/components/chunks/{chunk-6UPI7GHJ.js → chunk-UAGCQF23.js} +7 -7
  27. package/dist/cdn/components/chunks/{chunk-6IILPCSQ.js → chunk-X2AUBZD2.js} +3 -3
  28. package/dist/cdn/components/chunks/chunk-YGUJJ25C.js +263 -0
  29. package/dist/cdn/components/chunks/chunk-YYCEPZUN.js +1 -0
  30. package/dist/cdn/components/eun-alert.js +65 -45
  31. package/dist/cdn/components/eun-animate.js +178 -2
  32. package/dist/cdn/components/eun-badge.js +1 -1
  33. package/dist/cdn/components/eun-breadcrumb-item.js +14 -10
  34. package/dist/cdn/components/eun-breadcrumb.js +11 -7
  35. package/dist/cdn/components/eun-button.js +1 -1
  36. package/dist/cdn/components/eun-calendar.js +16 -16
  37. package/dist/cdn/components/eun-card.js +29 -12
  38. package/dist/cdn/components/eun-carousel.js +36 -28
  39. package/dist/cdn/components/eun-check-card.js +3 -3
  40. package/dist/cdn/components/eun-checkbox-list.js +3 -3
  41. package/dist/cdn/components/eun-checkbox.js +1 -1
  42. package/dist/cdn/components/eun-chip.js +45 -210
  43. package/dist/cdn/components/eun-collapse.js +20 -26
  44. package/dist/cdn/components/eun-color-picker.js +28 -28
  45. package/dist/cdn/components/eun-counter.js +11 -11
  46. package/dist/cdn/components/eun-date-picker.js +50 -50
  47. package/dist/cdn/components/eun-drawer.js +3 -3
  48. package/dist/cdn/components/eun-dropdown-button.js +1 -1
  49. package/dist/cdn/components/eun-dropdown-item.js +6 -6
  50. package/dist/cdn/components/eun-fab.js +31 -53
  51. package/dist/cdn/components/eun-icon.js +1 -1
  52. package/dist/cdn/components/eun-image-card.js +18 -11
  53. package/dist/cdn/components/eun-image-carousel.js +16 -16
  54. package/dist/cdn/components/eun-infinite-list.js +1 -1
  55. package/dist/cdn/components/eun-input-file.js +20 -20
  56. package/dist/cdn/components/eun-input-phone.js +14 -14
  57. package/dist/cdn/components/eun-input.js +1 -1
  58. package/dist/cdn/components/eun-label.js +4 -4
  59. package/dist/cdn/components/eun-link.js +29 -11
  60. package/dist/cdn/components/eun-loader.js +1 -1
  61. package/dist/cdn/components/eun-modal.js +6 -6
  62. package/dist/cdn/components/eun-pagination.js +3 -3
  63. package/dist/cdn/components/eun-password-strength.js +9 -6
  64. package/dist/cdn/components/eun-progress-bar.js +13 -13
  65. package/dist/cdn/components/eun-radio-card.js +2 -2
  66. package/dist/cdn/components/eun-radio-list.js +3 -3
  67. package/dist/cdn/components/eun-radio.js +1 -1
  68. package/dist/cdn/components/eun-scheduler-event-editor.js +2 -2
  69. package/dist/cdn/components/eun-scheduler-event.js +1 -1
  70. package/dist/cdn/components/eun-scheduler.js +10 -10
  71. package/dist/cdn/components/eun-search.js +7 -7
  72. package/dist/cdn/components/eun-select.js +39 -18
  73. package/dist/cdn/components/eun-sidebar.js +10 -10
  74. package/dist/cdn/components/eun-skeleton.js +1 -1
  75. package/dist/cdn/components/eun-slider.js +9 -9
  76. package/dist/cdn/components/eun-sliding-card.js +7 -10
  77. package/dist/cdn/components/eun-step.js +8 -8
  78. package/dist/cdn/components/eun-stepper.js +8 -8
  79. package/dist/cdn/components/eun-switch.js +10 -10
  80. package/dist/cdn/components/eun-tab-group.js +19 -11
  81. package/dist/cdn/components/eun-tab-panel.js +1 -1
  82. package/dist/cdn/components/eun-tab.js +1 -1
  83. package/dist/cdn/components/eun-table-action-bar.js +1 -1
  84. package/dist/cdn/components/eun-table-cell.js +1 -1
  85. package/dist/cdn/components/eun-table-column.js +1 -1
  86. package/dist/cdn/components/eun-table-header.js +1 -1
  87. package/dist/cdn/components/eun-table-item.js +1 -1
  88. package/dist/cdn/components/eun-table-skeleton-row.js +1 -1
  89. package/dist/cdn/components/eun-table.js +3 -3
  90. package/dist/cdn/components/eun-tag.js +34 -122
  91. package/dist/cdn/components/eun-textarea.js +28 -28
  92. package/dist/cdn/components/eun-time-picker.js +25 -25
  93. package/dist/cdn/components/eun-toast.js +40 -36
  94. package/dist/cdn/components/eun-toggle-group.js +199 -66
  95. package/dist/cdn/components/eun-toggle-item.js +42 -25
  96. package/dist/cdn/components/eun-toggle.js +13 -10
  97. package/dist/cdn/components/eun-toolbar.js +28 -19
  98. package/dist/cdn/components/eun-tooltip.js +122 -87
  99. package/dist/cdn/styles/eunomia-themes.css +1 -1
  100. package/dist/cdn/styles/themes/eunomia-theme.css +1 -1
  101. package/dist/cdn/styles/themes/eunomia-theme.scss +1 -0
  102. package/dist/cdn/styles/themes/mixins/eunomia-neutrals.mixin.scss +71 -0
  103. package/dist/cdn/styles/themes/prebuilt-themes/eunomia/eunomia-dark.mixin.scss +3 -13
  104. package/dist/cdn/styles/themes/prebuilt-themes/eunomia/eunomia.mixin.scss +3 -13
  105. package/dist/cdn/styles/themes/prebuilt-themes/eunomia/eunomia.theme.css +1 -1
  106. package/dist/cdn/styles/themes/prebuilt-themes/eunomia/eunomia.theme.scss +2 -0
  107. package/dist/cdn/styles/themes/prebuilt-themes/fire/eunomia-fire-dark.mixin.scss +3 -13
  108. package/dist/cdn/styles/themes/prebuilt-themes/fire/eunomia-fire.mixin.scss +3 -13
  109. package/dist/cdn/styles/themes/prebuilt-themes/fire/eunomia-fire.theme.css +1 -1
  110. package/dist/cdn/styles/themes/prebuilt-themes/fire/eunomia-fire.theme.scss +2 -0
  111. package/dist/cdn/styles/themes/prebuilt-themes/forest/eunomia-forest-dark.mixin.scss +3 -13
  112. package/dist/cdn/styles/themes/prebuilt-themes/forest/eunomia-forest.mixin.scss +3 -13
  113. package/dist/cdn/styles/themes/prebuilt-themes/forest/eunomia-forest.theme.css +1 -1
  114. package/dist/cdn/styles/themes/prebuilt-themes/forest/eunomia-forest.theme.scss +2 -0
  115. package/dist/cdn/styles/themes/prebuilt-themes/gold/eunomia-gold-dark.mixin.scss +3 -13
  116. package/dist/cdn/styles/themes/prebuilt-themes/gold/eunomia-gold.mixin.scss +3 -13
  117. package/dist/cdn/styles/themes/prebuilt-themes/gold/eunomia-gold.theme.css +1 -1
  118. package/dist/cdn/styles/themes/prebuilt-themes/gold/eunomia-gold.theme.scss +2 -0
  119. package/dist/cdn/styles/themes/prebuilt-themes/ocean/eunomia-ocean-dark.mixin.scss +3 -13
  120. package/dist/cdn/styles/themes/prebuilt-themes/ocean/eunomia-ocean.mixin.scss +3 -13
  121. package/dist/cdn/styles/themes/prebuilt-themes/ocean/eunomia-ocean.theme.css +1 -1
  122. package/dist/cdn/styles/themes/prebuilt-themes/ocean/eunomia-ocean.theme.scss +2 -0
  123. package/dist/cdn/styles/themes/prebuilt-themes/salmon/eunomia-salmon-dark.mixin.scss +3 -13
  124. package/dist/cdn/styles/themes/prebuilt-themes/salmon/eunomia-salmon.mixin.scss +3 -13
  125. package/dist/cdn/styles/themes/prebuilt-themes/salmon/eunomia-salmon.theme.css +1 -1
  126. package/dist/cdn/styles/themes/prebuilt-themes/salmon/eunomia-salmon.theme.scss +2 -0
  127. package/dist/cdn/styles/themes/prebuilt-themes/violet/eunomia-violet-dark.mixin.scss +3 -13
  128. package/dist/cdn/styles/themes/prebuilt-themes/violet/eunomia-violet.mixin.scss +3 -13
  129. package/dist/cdn/styles/themes/prebuilt-themes/violet/eunomia-violet.theme.css +1 -1
  130. package/dist/cdn/styles/themes/prebuilt-themes/violet/eunomia-violet.theme.scss +2 -0
  131. package/dist/cdn/styles/tools/indexes/eunomia-tools.index.scss +1 -0
  132. package/dist/cdn/styles/tools/mixins/settings/eunomia-alpha.mixin.scss +39 -0
  133. package/dist/cdn/styles/tools/mixins/settings/eunomia-border.mixin.scss +3 -3
  134. package/dist/cdn/styles/tools/mixins/settings/eunomia-font.mixin.scss +12 -12
  135. package/dist/cdn/styles/tools/mixins/settings/eunomia-radius.mixin.scss +4 -4
  136. package/dist/components/action/button/button.d.ts +7 -6
  137. package/dist/components/action/button/button.js +7 -6
  138. package/dist/components/action/button/button.styles.js +143 -373
  139. package/dist/components/action/dropdown-button/dropdown-button.d.ts +7 -0
  140. package/dist/components/action/dropdown-button/dropdown-button.js +11 -0
  141. package/dist/components/action/dropdown-button/dropdown-button.styles.js +8 -8
  142. package/dist/components/action/dropdown-button/dropdown-item.styles.js +6 -6
  143. package/dist/components/action/fab/fab.d.ts +3 -1
  144. package/dist/components/action/fab/fab.js +3 -1
  145. package/dist/components/action/fab/fab.styles.js +26 -49
  146. package/dist/components/action/link/link.d.ts +50 -0
  147. package/dist/components/action/link/link.js +69 -1
  148. package/dist/components/action/link/link.styles.js +19 -2
  149. package/dist/components/action/shared-styles/button-palette.styles.d.ts +27 -0
  150. package/dist/components/action/shared-styles/button-palette.styles.js +151 -0
  151. package/dist/components/action/toggle/toggle-group.d.ts +41 -7
  152. package/dist/components/action/toggle/toggle-group.js +162 -46
  153. package/dist/components/action/toggle/toggle-group.styles.d.ts +6 -5
  154. package/dist/components/action/toggle/toggle-group.styles.js +152 -35
  155. package/dist/components/action/toggle/toggle-item.styles.js +38 -21
  156. package/dist/components/action/toggle/toggle.d.ts +1 -1
  157. package/dist/components/action/toggle/toggle.js +2 -2
  158. package/dist/components/action/toggle/toggle.styles.d.ts +2 -2
  159. package/dist/components/action/toggle/toggle.styles.js +13 -10
  160. package/dist/components/alert/alert/alert.d.ts +4 -3
  161. package/dist/components/alert/alert/alert.js +4 -3
  162. package/dist/components/alert/alert/alert.styles.js +57 -36
  163. package/dist/components/alert/drawer/drawer.styles.js +3 -3
  164. package/dist/components/alert/modal/modal.styles.js +6 -6
  165. package/dist/components/alert/toast/toast.d.ts +4 -3
  166. package/dist/components/alert/toast/toast.js +4 -3
  167. package/dist/components/alert/toast/toast.styles.js +41 -36
  168. package/dist/components/content/badge/badge.styles.js +1 -1
  169. package/dist/components/content/card/card.d.ts +4 -4
  170. package/dist/components/content/card/card.js +4 -4
  171. package/dist/components/content/card/card.styles.js +27 -10
  172. package/dist/components/content/card/image-card.d.ts +1 -1
  173. package/dist/components/content/card/image-card.js +1 -1
  174. package/dist/components/content/card/image-card.styles.js +17 -10
  175. package/dist/components/content/card/sliding-card.styles.js +3 -6
  176. package/dist/components/content/chip/chip.d.ts +16 -7
  177. package/dist/components/content/chip/chip.js +18 -6
  178. package/dist/components/content/chip/chip.styles.d.ts +1 -1
  179. package/dist/components/content/chip/chip.styles.js +43 -210
  180. package/dist/components/content/collapse/collapse.styles.js +10 -16
  181. package/dist/components/content/icon/icon.d.ts +48 -5
  182. package/dist/components/content/icon/icon.js +92 -20
  183. package/dist/components/content/icon/icon.style.js +1 -1
  184. package/dist/components/content/image-carousel/image-carousel.styles.js +14 -14
  185. package/dist/components/content/password-strength/password-strength.styles.js +7 -4
  186. package/dist/components/content/progress-bar/progress-bar.styles.js +9 -9
  187. package/dist/components/content/shared-styles/tone-surface.styles.d.ts +31 -0
  188. package/dist/components/content/shared-styles/tone-surface.styles.js +149 -0
  189. package/dist/components/content/tag/tag.d.ts +16 -6
  190. package/dist/components/content/tag/tag.js +19 -6
  191. package/dist/components/content/tag/tag.styles.d.ts +1 -1
  192. package/dist/components/content/tag/tag.styles.js +40 -121
  193. package/dist/components/content/tooltip/tooltip.d.ts +15 -4
  194. package/dist/components/content/tooltip/tooltip.js +21 -4
  195. package/dist/components/content/tooltip/tooltip.styles.js +115 -79
  196. package/dist/components/form/checkbox/check-card.styles.js +2 -2
  197. package/dist/components/form/checkbox/checkbox-list.d.ts +1 -1
  198. package/dist/components/form/checkbox/checkbox-list.js +1 -1
  199. package/dist/components/form/checkbox/checkbox.d.ts +1 -1
  200. package/dist/components/form/checkbox/checkbox.styles.js +6 -6
  201. package/dist/components/form/color-picker/color-picker.d.ts +1 -1
  202. package/dist/components/form/color-picker/color-picker.js +9 -7
  203. package/dist/components/form/color-picker/color-picker.styles.js +7 -7
  204. package/dist/components/form/counter/counter.d.ts +1 -1
  205. package/dist/components/form/counter/counter.js +3 -3
  206. package/dist/components/form/counter/counter.styles.js +7 -7
  207. package/dist/components/form/date-picker/date-picker-day-grid.styles.js +2 -2
  208. package/dist/components/form/date-picker/date-picker-grid.styles.js +15 -15
  209. package/dist/components/form/date-picker/date-picker-month-grid.styles.js +1 -1
  210. package/dist/components/form/date-picker/date-picker-year-grid.styles.js +1 -1
  211. package/dist/components/form/date-picker/date-picker.d.ts +1 -1
  212. package/dist/components/form/date-picker/date-picker.js +3 -3
  213. package/dist/components/form/date-picker/date-picker.styles.js +12 -12
  214. package/dist/components/form/input/input.d.ts +1 -1
  215. package/dist/components/form/input/input.js +2 -2
  216. package/dist/components/form/input-file/input-file.d.ts +1 -1
  217. package/dist/components/form/input-file/input-file.js +5 -5
  218. package/dist/components/form/input-file/input-file.styles.js +9 -9
  219. package/dist/components/form/input-phone/input-phone.d.ts +1 -1
  220. package/dist/components/form/input-phone/input-phone.js +3 -3
  221. package/dist/components/form/input-phone/input-phone.styles.js +7 -7
  222. package/dist/components/form/label/label.styles.js +4 -4
  223. package/dist/components/form/radio/radio-card.styles.js +1 -1
  224. package/dist/components/form/radio/radio-list.d.ts +1 -1
  225. package/dist/components/form/radio/radio-list.js +2 -2
  226. package/dist/components/form/radio/radio.d.ts +1 -1
  227. package/dist/components/form/radio/radio.styles.js +2 -2
  228. package/dist/components/form/search/search.styles.js +6 -6
  229. package/dist/components/form/select/select.d.ts +17 -1
  230. package/dist/components/form/select/select.js +28 -5
  231. package/dist/components/form/select/select.styles.js +16 -5
  232. package/dist/components/form/shared-styles/card.styles.js +1 -1
  233. package/dist/components/form/shared-styles/field.styles.js +7 -7
  234. package/dist/components/form/shared-styles/form-labels.styles.js +1 -1
  235. package/dist/components/form/shared-styles/listbox.styles.js +6 -6
  236. package/dist/components/form/slider/slider.d.ts +1 -1
  237. package/dist/components/form/slider/slider.js +2 -2
  238. package/dist/components/form/slider/slider.styles.js +6 -6
  239. package/dist/components/form/switch/switch.d.ts +1 -1
  240. package/dist/components/form/switch/switch.styles.js +8 -8
  241. package/dist/components/form/textarea/textarea.d.ts +1 -1
  242. package/dist/components/form/textarea/textarea.js +4 -4
  243. package/dist/components/form/textarea/textarea.styles.js +6 -6
  244. package/dist/components/form/time-picker/time-picker-columns.styles.js +6 -6
  245. package/dist/components/form/time-picker/time-picker-list.styles.js +2 -2
  246. package/dist/components/form/time-picker/time-picker.d.ts +1 -1
  247. package/dist/components/form/time-picker/time-picker.js +3 -3
  248. package/dist/components/form/time-picker/time-picker.styles.js +8 -8
  249. package/dist/components/layout/animate/animate.d.ts +40 -5
  250. package/dist/components/layout/animate/animate.js +30 -11
  251. package/dist/components/layout/animate/animate.styles.d.ts +1 -1
  252. package/dist/components/layout/animate/animate.styles.js +191 -1
  253. package/dist/components/loader/loader/loader.styles.js +2 -2
  254. package/dist/components/loader/skeleton/skeleton.styles.js +8 -5
  255. package/dist/components/navigation/breadcrumb/breadcrumb-item.d.ts +7 -0
  256. package/dist/components/navigation/breadcrumb/breadcrumb-item.js +15 -1
  257. package/dist/components/navigation/breadcrumb/breadcrumb-item.styles.js +3 -3
  258. package/dist/components/navigation/breadcrumb/breadcrumb.d.ts +1 -0
  259. package/dist/components/navigation/breadcrumb/breadcrumb.js +7 -1
  260. package/dist/components/navigation/breadcrumb/breadcrumb.styles.js +3 -3
  261. package/dist/components/navigation/carousel/carousel.d.ts +40 -6
  262. package/dist/components/navigation/carousel/carousel.js +61 -12
  263. package/dist/components/navigation/carousel/carousel.styles.js +20 -8
  264. package/dist/components/navigation/pagination/pagination.styles.js +3 -3
  265. package/dist/components/navigation/sidebar/sidebar.styles.js +9 -9
  266. package/dist/components/navigation/stepper/step.styles.js +8 -8
  267. package/dist/components/navigation/stepper/stepper.styles.js +8 -8
  268. package/dist/components/navigation/tabs/tab/tab.styles.js +5 -5
  269. package/dist/components/navigation/tabs/tab-group/tab-group.d.ts +9 -0
  270. package/dist/components/navigation/tabs/tab-group/tab-group.js +19 -2
  271. package/dist/components/navigation/tabs/tab-group/tab-group.styles.js +12 -4
  272. package/dist/components/navigation/tabs/tab-panel/tab-panel.styles.js +1 -1
  273. package/dist/components/navigation/toolbar/toolbar.d.ts +24 -0
  274. package/dist/components/navigation/toolbar/toolbar.js +30 -2
  275. package/dist/components/navigation/toolbar/toolbar.styles.js +20 -10
  276. package/dist/events/change.event.d.ts +13 -1
  277. package/dist/events/change.event.js +2 -1
  278. package/dist/features/scheduler/calendar/calendar.js +1 -1
  279. package/dist/features/scheduler/calendar/calendar.styles.js +3 -3
  280. package/dist/features/scheduler/scheduler/scheduler.styles.js +2 -2
  281. package/dist/features/scheduler/scheduler-event/scheduler-event.styles.js +2 -2
  282. package/dist/features/scheduler/scheduler-event-editor/scheduler-event-editor.styles.js +2 -2
  283. package/dist/features/scheduler/shared/scheduler-event-popover.styles.js +4 -4
  284. package/dist/features/scheduler/shared/scheduler-hour-grid.styles.js +1 -1
  285. package/dist/features/scheduler/shared/scheduler-month-view.styles.js +1 -1
  286. package/dist/features/scheduler/shared/scheduler-year-view.styles.js +1 -1
  287. package/dist/features/table/native-table.css +11 -11
  288. package/dist/features/table/table/table.styles.js +2 -2
  289. package/dist/features/table/table-action-bar/table-action-bar.styles.js +2 -2
  290. package/dist/features/table/table-cell/table-cell.styles.js +2 -2
  291. package/dist/features/table/table-column/table-column.styles.js +3 -3
  292. package/dist/features/table/table-header/table-header.styles.js +4 -4
  293. package/dist/features/table/table-item/table-item.styles.js +6 -6
  294. package/dist/features/table/table-skeleton-row/table-skeleton-row.styles.js +1 -1
  295. package/dist/index.d.ts +5 -5
  296. package/dist/index.js +6 -3
  297. package/dist/jsx.d.ts +18 -5
  298. package/dist/mixins/button.mixin.d.ts +1 -0
  299. package/dist/mixins/button.mixin.js +10 -0
  300. package/dist/mixins/check.mixin.d.ts +1 -1
  301. package/dist/mixins/check.mixin.js +6 -2
  302. package/dist/mixins/editable.mixin.d.ts +1 -1
  303. package/dist/mixins/form.mixin.d.ts +9 -1
  304. package/dist/mixins/form.mixin.js +110 -14
  305. package/dist/mixins/overflow-navigation.mixin.js +2 -1
  306. package/dist/mixins/radio.mixin.d.ts +1 -1
  307. package/dist/mixins/radio.mixin.js +6 -2
  308. package/dist/mixins/validators.mixin.d.ts +9 -3
  309. package/dist/ssr/animate-ssr.css +149 -0
  310. package/dist/ssr/overlay-ssr.css +57 -0
  311. package/dist/ssr/sidebar-ssr.css +57 -0
  312. package/dist/ssr/toolbar-ssr.css +41 -0
  313. package/dist/utils/rich-text.utils.d.ts +33 -0
  314. package/dist/utils/rich-text.utils.js +140 -49
  315. package/dist/utils/theme-generator.utils.d.ts +24 -3
  316. package/dist/utils/theme-generator.utils.js +66 -21
  317. package/package.json +14 -3
  318. package/styles/themes/eunomia-theme.scss +1 -0
  319. package/styles/themes/mixins/eunomia-neutrals.mixin.scss +71 -0
  320. package/styles/themes/prebuilt-themes/eunomia/eunomia-dark.mixin.scss +3 -13
  321. package/styles/themes/prebuilt-themes/eunomia/eunomia.mixin.scss +3 -13
  322. package/styles/themes/prebuilt-themes/eunomia/eunomia.theme.scss +2 -0
  323. package/styles/themes/prebuilt-themes/fire/eunomia-fire-dark.mixin.scss +3 -13
  324. package/styles/themes/prebuilt-themes/fire/eunomia-fire.mixin.scss +3 -13
  325. package/styles/themes/prebuilt-themes/fire/eunomia-fire.theme.scss +2 -0
  326. package/styles/themes/prebuilt-themes/forest/eunomia-forest-dark.mixin.scss +3 -13
  327. package/styles/themes/prebuilt-themes/forest/eunomia-forest.mixin.scss +3 -13
  328. package/styles/themes/prebuilt-themes/forest/eunomia-forest.theme.scss +2 -0
  329. package/styles/themes/prebuilt-themes/gold/eunomia-gold-dark.mixin.scss +3 -13
  330. package/styles/themes/prebuilt-themes/gold/eunomia-gold.mixin.scss +3 -13
  331. package/styles/themes/prebuilt-themes/gold/eunomia-gold.theme.scss +2 -0
  332. package/styles/themes/prebuilt-themes/ocean/eunomia-ocean-dark.mixin.scss +3 -13
  333. package/styles/themes/prebuilt-themes/ocean/eunomia-ocean.mixin.scss +3 -13
  334. package/styles/themes/prebuilt-themes/ocean/eunomia-ocean.theme.scss +2 -0
  335. package/styles/themes/prebuilt-themes/salmon/eunomia-salmon-dark.mixin.scss +3 -13
  336. package/styles/themes/prebuilt-themes/salmon/eunomia-salmon.mixin.scss +3 -13
  337. package/styles/themes/prebuilt-themes/salmon/eunomia-salmon.theme.scss +2 -0
  338. package/styles/themes/prebuilt-themes/violet/eunomia-violet-dark.mixin.scss +3 -13
  339. package/styles/themes/prebuilt-themes/violet/eunomia-violet.mixin.scss +3 -13
  340. package/styles/themes/prebuilt-themes/violet/eunomia-violet.theme.scss +2 -0
  341. package/styles/tools/indexes/eunomia-tools.index.scss +1 -0
  342. package/styles/tools/mixins/settings/eunomia-alpha.mixin.scss +39 -0
  343. package/styles/tools/mixins/settings/eunomia-border.mixin.scss +3 -3
  344. package/styles/tools/mixins/settings/eunomia-font.mixin.scss +12 -12
  345. package/styles/tools/mixins/settings/eunomia-radius.mixin.scss +4 -4
  346. package/dist/cdn/components/chunks/chunk-27Q2SLRY.js +0 -603
  347. package/dist/cdn/components/chunks/chunk-2IQUMAMI.js +0 -38
  348. package/dist/cdn/components/chunks/chunk-5TH3P53V.js +0 -16
  349. package/dist/cdn/components/chunks/chunk-7Q6AHVI5.js +0 -1
  350. package/dist/cdn/components/chunks/chunk-DENMN3WH.js +0 -48
  351. package/dist/cdn/components/chunks/chunk-MBF52GEL.js +0 -1
  352. package/dist/cdn/components/chunks/chunk-ONYUXQV2.js +0 -1
  353. package/dist/cdn/components/chunks/chunk-ZKPCO5RB.js +0 -262
  354. package/dist/components/layout/animate/animate-ssr.css +0 -64
@@ -146,6 +146,39 @@ export declare function renderInline(nodes: InlineNode[]): TemplateResult;
146
146
  * @returns the formatted template.
147
147
  */
148
148
  export declare function formatRichText(text: string): TemplateResult;
149
+ /**
150
+ * Strips every Markdown-lite marker from a value and returns what a reader
151
+ * actually sees, as a plain string : the `[align:...]` directive, `**`,
152
+ * `{color=name}`, link URLs and so on are removed (a link keeps its label),
153
+ * and one newline is kept between lines. Needs no DOM, so it runs anywhere,
154
+ * including on the server, unlike {@link formatRichText}.
155
+ *
156
+ * Always consistent with {@link getPlainTextLength} :
157
+ * `toPlainText(text).length === getPlainTextLength(text)`. Handy for
158
+ * structured data (JSON-LD), meta descriptions, search indexes or
159
+ * notifications.
160
+ *
161
+ * @param text the raw Markdown-lite string.
162
+ * @returns the plain text.
163
+ */
164
+ export declare function toPlainText(text: string): string;
165
+ /**
166
+ * Converts a Markdown-lite string into an HTML string, with the same markup
167
+ * as {@link formatRichText} (`<p>`, `<ul>`, `<strong>`, ...). Needs no DOM
168
+ * and no Lit, so it fits server rendering (a Next.js Server Component, an
169
+ * email, an RSS feed) where {@link formatRichText}'s template can't be used.
170
+ *
171
+ * Every piece of text and every attribute is escaped, and a link whose URL
172
+ * uses anything other than a relative path, a fragment, `http`, `https`,
173
+ * `mailto` or `tel` (such as `javascript:`) is rendered as its plain label,
174
+ * so the result is safe to inject with `innerHTML` or React's
175
+ * `dangerouslySetInnerHTML`. The `[align:...]` directive is stripped, read
176
+ * it with {@link splitAlign} if you need it.
177
+ *
178
+ * @param text the raw Markdown-lite string.
179
+ * @returns the HTML string.
180
+ */
181
+ export declare function toHtml(text: string): string;
149
182
  /**
150
183
  * Populates a contenteditable root with the given Markdown-lite value,
151
184
  * replacing its entire content — used both for the `formatting` toolbar's
@@ -126,15 +126,6 @@ export function parseInlineNodes(text) {
126
126
  continue;
127
127
  }
128
128
  }
129
- // `***text***` : bold and italic together produce adjacent `**`+`*`
130
- // delimiters at both ends (from nesting `<strong><em>`/`</em></strong>`),
131
- // which the plain `**` check below can't tell apart from "close bold,
132
- // then a stray, unmatched italic `*`" — it greedily consumes the first
133
- // two of the three as bold's own closer, leaving the third orphaned
134
- // with no closer of its own within the once-was-italic content, and
135
- // the italic wrapping is silently lost on reparse. Handling the
136
- // three-character run as one atomic unit first — same convention real
137
- // Markdown uses for `***bold italic***` — avoids that ambiguity.
138
129
  if (text.startsWith("***", i)) {
139
130
  const closeIndex = text.indexOf("***", i + 3);
140
131
  if (closeIndex !== -1) {
@@ -266,6 +257,39 @@ function renderInlineNode(node) {
266
257
  return html `<a href=${node.href}>${renderInline(node.children)}</a>`;
267
258
  }
268
259
  }
260
+ /**
261
+ * Splits a Markdown-lite body (without its `[align:...]` directive) into
262
+ * blocks : consecutive `- ` lines become one list, other non-empty lines
263
+ * become paragraphs, and empty lines are dropped. Shared by every output
264
+ * format ({@link formatRichText}, {@link toHtml}, {@link toPlainText}) so
265
+ * they can never disagree on what counts as a paragraph or a list.
266
+ *
267
+ * @param body the Markdown-lite body.
268
+ * @returns the blocks, in order.
269
+ */
270
+ function splitBlocks(body) {
271
+ const blocks = [];
272
+ let list = [];
273
+ const flushList = () => {
274
+ if (list.length) {
275
+ blocks.push({ type: "list", items: list });
276
+ list = [];
277
+ }
278
+ };
279
+ body.split("\n").forEach((line) => {
280
+ const trimmed = line.trim();
281
+ if (trimmed.startsWith("- ")) {
282
+ list.push(trimmed.slice(2));
283
+ return;
284
+ }
285
+ flushList();
286
+ if (trimmed) {
287
+ blocks.push({ type: "paragraph", text: trimmed });
288
+ }
289
+ });
290
+ flushList();
291
+ return blocks;
292
+ }
269
293
  /**
270
294
  * Converts a multi-line Markdown-lite string into a Lit template — see
271
295
  * {@link parseInlineNodes} for the supported inline syntax.
@@ -284,30 +308,115 @@ function renderInlineNode(node) {
284
308
  */
285
309
  export function formatRichText(text) {
286
310
  const { body } = splitAlign(text);
287
- const blocks = [];
288
- let listBuffer = [];
289
- const flushList = () => {
290
- if (!listBuffer.length) {
291
- return;
292
- }
293
- blocks.push(html `<ul>
294
- ${listBuffer.map((item) => html `<li>${renderInline(parseInlineNodes(item))}</li>`)}
295
- </ul>`);
296
- listBuffer = [];
297
- };
298
- body.split("\n").forEach((line) => {
299
- const trimmed = line.trim();
300
- if (trimmed.startsWith("- ")) {
301
- listBuffer.push(trimmed.slice(2));
302
- return;
311
+ return html `${splitBlocks(body).map((block) => block.type === "list"
312
+ ? html `<ul>
313
+ ${block.items.map((item) => html `<li>${renderInline(parseInlineNodes(item))}</li>`)}
314
+ </ul>`
315
+ : html `<p>${renderInline(parseInlineNodes(block.text))}</p>`)}`;
316
+ }
317
+ function inlineToPlainText(nodes) {
318
+ return nodes
319
+ .map((node) => node.type === "text" ? node.value : inlineToPlainText(node.children))
320
+ .join("");
321
+ }
322
+ /**
323
+ * Strips every Markdown-lite marker from a value and returns what a reader
324
+ * actually sees, as a plain string : the `[align:...]` directive, `**`,
325
+ * `{color=name}`, link URLs and so on are removed (a link keeps its label),
326
+ * and one newline is kept between lines. Needs no DOM, so it runs anywhere,
327
+ * including on the server, unlike {@link formatRichText}.
328
+ *
329
+ * Always consistent with {@link getPlainTextLength} :
330
+ * `toPlainText(text).length === getPlainTextLength(text)`. Handy for
331
+ * structured data (JSON-LD), meta descriptions, search indexes or
332
+ * notifications.
333
+ *
334
+ * @param text the raw Markdown-lite string.
335
+ * @returns the plain text.
336
+ */
337
+ export function toPlainText(text) {
338
+ const { body } = splitAlign(text);
339
+ const lines = body.length ? body.split("\n") : [""];
340
+ return lines
341
+ .map((line) => inlineToPlainText(parseInlineNodes(line)))
342
+ .join("\n");
343
+ }
344
+ const HTML_ESCAPES = {
345
+ "&": "&amp;",
346
+ "<": "&lt;",
347
+ ">": "&gt;",
348
+ '"': "&quot;",
349
+ "'": "&#39;",
350
+ };
351
+ function escapeHtml(value) {
352
+ return value.replace(/[&<>"']/g, (char) => HTML_ESCAPES[char]);
353
+ }
354
+ const SAFE_URL_SCHEMES = new Set(["http:", "https:", "mailto:", "tel:"]);
355
+ /**
356
+ * Whether a link destination is safe to put in an `href` : relative URLs,
357
+ * fragments and the `http`, `https`, `mailto` and `tel` schemes. Anything
358
+ * else (`javascript:`, `data:`, ...) is refused.
359
+ *
360
+ * @param href the raw destination.
361
+ * @returns `true` when it can be emitted as an `href`.
362
+ */
363
+ function isSafeHref(href) {
364
+ const normalized = href.replace(/[\u0000-\u0020]/g, "");
365
+ const scheme = /^([a-z][a-z0-9+.-]*:)/i.exec(normalized);
366
+ return !scheme || SAFE_URL_SCHEMES.has(scheme[1].toLowerCase());
367
+ }
368
+ function inlineToHtml(nodes) {
369
+ return nodes.map(inlineNodeToHtml).join("");
370
+ }
371
+ function inlineNodeToHtml(node) {
372
+ switch (node.type) {
373
+ case "text":
374
+ return escapeHtml(node.value);
375
+ case "bold":
376
+ return `<strong>${inlineToHtml(node.children)}</strong>`;
377
+ case "italic":
378
+ return `<em>${inlineToHtml(node.children)}</em>`;
379
+ case "underline":
380
+ return `<u>${inlineToHtml(node.children)}</u>`;
381
+ case "color": {
382
+ const color = findRichTextColor(node.color);
383
+ return `<span data-color="${escapeHtml(node.color)}" style="color: ${color?.text ?? "inherit"}">${inlineToHtml(node.children)}</span>`;
303
384
  }
304
- flushList();
305
- if (trimmed) {
306
- blocks.push(html `<p>${renderInline(parseInlineNodes(trimmed))}</p>`);
385
+ case "highlight": {
386
+ const color = findRichTextColor(node.color);
387
+ return `<span data-highlight="${escapeHtml(node.color)}" style="background-color: ${color?.highlight ?? "transparent"}">${inlineToHtml(node.children)}</span>`;
307
388
  }
308
- });
309
- flushList();
310
- return html `${blocks}`;
389
+ case "link":
390
+ return isSafeHref(node.href)
391
+ ? `<a href="${escapeHtml(node.href)}">${inlineToHtml(node.children)}</a>`
392
+ : inlineToHtml(node.children);
393
+ }
394
+ }
395
+ /**
396
+ * Converts a Markdown-lite string into an HTML string, with the same markup
397
+ * as {@link formatRichText} (`<p>`, `<ul>`, `<strong>`, ...). Needs no DOM
398
+ * and no Lit, so it fits server rendering (a Next.js Server Component, an
399
+ * email, an RSS feed) where {@link formatRichText}'s template can't be used.
400
+ *
401
+ * Every piece of text and every attribute is escaped, and a link whose URL
402
+ * uses anything other than a relative path, a fragment, `http`, `https`,
403
+ * `mailto` or `tel` (such as `javascript:`) is rendered as its plain label,
404
+ * so the result is safe to inject with `innerHTML` or React's
405
+ * `dangerouslySetInnerHTML`. The `[align:...]` directive is stripped, read
406
+ * it with {@link splitAlign} if you need it.
407
+ *
408
+ * @param text the raw Markdown-lite string.
409
+ * @returns the HTML string.
410
+ */
411
+ export function toHtml(text) {
412
+ const { body } = splitAlign(text);
413
+ return splitBlocks(body)
414
+ .map((block) => block.type === "list"
415
+ ? `<ul>${block.items
416
+ .map((item) => `<li>${inlineToHtml(parseInlineNodes(item))}</li>`)
417
+ .join("")}</ul>`
418
+ : `<p>${inlineToHtml(parseInlineNodes(block.text))}</p>`)
419
+ .join("");
311
420
  }
312
421
  /**
313
422
  * Builds one `<p>` per line of `body`, each with its inline Markdown-lite
@@ -351,13 +460,6 @@ function buildParagraphs(body) {
351
460
  render(html `${lines.map((line) => html `<p>${renderInline(parseInlineNodes(line))}</p>`)}`, scratch);
352
461
  stripComments(scratch);
353
462
  const paragraphs = Array.from(scratch.children);
354
- // A genuinely empty <p> (an empty line, most commonly the sole paragraph
355
- // of an otherwise-empty field) has no content a browser can anchor a
356
- // caret inside — clicking into it then often places the caret at the
357
- // *root* level instead, right before the <p>, so anything typed lands
358
- // there as a stray text node the block-based serializer never sees
359
- // (value silently stays empty forever). A <br> gives every empty
360
- // paragraph a real caret position of its own.
361
463
  paragraphs.forEach((paragraph) => {
362
464
  if (!paragraph.hasChildNodes()) {
363
465
  paragraph.appendChild(document.createElement("br"));
@@ -394,20 +496,9 @@ const INLINE_TAG_MARKERS = {
394
496
  };
395
497
  function serializeInlineNode(node) {
396
498
  if (node.nodeType === Node.TEXT_NODE) {
397
- // U+200B (zero-width space) : the textarea's own toolbar uses it as an
398
- // invisible caret anchor for a "pending" mark toggled with nothing
399
- // selected (see textarea.ts's `PENDING_CARET_TEXT`) ; a real character
400
- // a browser can place a caret next to inside an otherwise-empty inline
401
- // element, but never meant to be real content, so it never survives
402
- // into `value`.
403
499
  return (node.textContent ?? "").replace(/\u200B/g, "");
404
500
  }
405
501
  if (node.nodeName === "BR") {
406
- // The editor only ever inserts a `<br>` as an empty paragraph's sole
407
- // child (so it stays focusable/visible) — never as a mid-paragraph soft
408
- // break — so it always serializes to nothing, not a newline (block
409
- // boundaries already produce one `\n` per paragraph in
410
- // `serializeEditableRoot`).
411
502
  return "";
412
503
  }
413
504
  if (!(node instanceof HTMLElement)) {
@@ -5,11 +5,12 @@
5
5
  * theme" widget run; see Theming > Custom theme for how it works and why
6
6
  * each step is shaped the way it is.
7
7
  *
8
- * Only `buildPalette`, `buildTints`, and `initializeTheme` (plus the
9
- * types their signatures need) are exported from `index.ts`. Everything
8
+ * Only `buildPalette`, `buildTints`, `initializeTheme`, and
9
+ * `buildThemeCss` (plus the types their signatures need) are exported
10
+ * from `index.ts`. Everything
10
11
  * else below, the raw color math, the shade/tint step definitions, is
11
12
  * kept file-private on purpose: none of it is meant to be reached on its
12
- * own, it exists to be composed by those three, and every extra export
13
+ * own, it exists to be composed by those four, and every extra export
13
14
  * is a promise to a consumer that constrains how this file can change
14
15
  * later. If a real need for one of these on its own ever comes up, it's
15
16
  * a one-line change to export it.
@@ -60,6 +61,26 @@ export declare function buildTints(primaryHex: EunomiaHexColor, isDark: boolean)
60
61
  *
61
62
  * Client-side only: call it once the DOM exists (after mount, not during
62
63
  * an SSR render), since it writes directly to `document.documentElement`.
64
+ * Because it only runs after the page has painted, the base theme shows
65
+ * for a frame first; `buildThemeCss` below avoids that flash.
63
66
  */
64
67
  export declare function initializeTheme(primary: EunomiaHexColor, secondary: EunomiaHexColor, isDark?: boolean, surfaceColor?: EunomiaHexColor, darkSurfaceColor?: EunomiaHexColor, fontFamily?: string): void;
68
+ export interface EunomiaThemeCssOptions {
69
+ surfaceColor?: EunomiaHexColor;
70
+ darkSurfaceColor?: EunomiaHexColor;
71
+ fontFamily?: string;
72
+ brand?: string;
73
+ }
74
+ /**
75
+ * The pure, stylesheet counterpart of `initializeTheme`: the same tokens,
76
+ * for both light and dark mode, returned as a CSS string instead of being
77
+ * written onto the DOM. Render it in a `<style>` in the document `<head>`
78
+ * (during SSR, or at build time) and the custom brand is there on first
79
+ * paint, with no flash of the base theme while the app hydrates.
80
+ *
81
+ * The rules are prefixed with `:root` so they outrank the prebuilt
82
+ * `[data-brand][data-theme]` rules whatever the stylesheet order, and
83
+ * switching mode is just a `data-theme` change, no regeneration needed.
84
+ */
85
+ export declare function buildThemeCss(primary: EunomiaHexColor, secondary: EunomiaHexColor, options?: EunomiaThemeCssOptions): string;
65
86
  export {};
@@ -5,11 +5,12 @@
5
5
  * theme" widget run; see Theming > Custom theme for how it works and why
6
6
  * each step is shaped the way it is.
7
7
  *
8
- * Only `buildPalette`, `buildTints`, and `initializeTheme` (plus the
9
- * types their signatures need) are exported from `index.ts`. Everything
8
+ * Only `buildPalette`, `buildTints`, `initializeTheme`, and
9
+ * `buildThemeCss` (plus the types their signatures need) are exported
10
+ * from `index.ts`. Everything
10
11
  * else below, the raw color math, the shade/tint step definitions, is
11
12
  * kept file-private on purpose: none of it is meant to be reached on its
12
- * own, it exists to be composed by those three, and every extra export
13
+ * own, it exists to be composed by those four, and every extra export
13
14
  * is a promise to a consumer that constrains how this file can change
14
15
  * later. If a real need for one of these on its own ever comes up, it's
15
16
  * a one-line change to export it.
@@ -201,15 +202,42 @@ export function buildTints(primaryHex, isDark) {
201
202
  contentPressedTint: mix(LIGHT_TINT_BASE.contentPressed, primary500, TINT_RATIO),
202
203
  };
203
204
  }
204
- function applyBrand(type, seed, isDark) {
205
- const root = document.documentElement.style;
206
- for (const shade of buildPalette(seed, isDark)) {
207
- root.setProperty(`--eun-color-${type}-${shade.name}`, shade.value);
208
- root.setProperty(`--eun-color-on-${type}-${shade.name}`, shade.on);
205
+ /**
206
+ * Every custom property a custom brand sets for one mode, as ordered
207
+ * `[property, value]` pairs: both 11-step shade scales, their `on-*`
208
+ * text colors, the transparent hover/active tokens, the surface color,
209
+ * the `-tint` neutrals, and `--eun-font-family` when one is passed.
210
+ * Shared by `initializeTheme` and `buildThemeCss` so the inline and the
211
+ * stylesheet output can never drift apart.
212
+ */
213
+ function buildThemeTokens(primary, secondary, isDark, surfaceColor, fontFamily) {
214
+ const tokens = [];
215
+ for (const [type, seed] of [
216
+ ["primary", primary],
217
+ ["secondary", secondary],
218
+ ]) {
219
+ for (const shade of buildPalette(seed, isDark)) {
220
+ tokens.push([`--eun-color-${type}-${shade.name}`, shade.value]);
221
+ tokens.push([`--eun-color-on-${type}-${shade.name}`, shade.on]);
222
+ }
223
+ for (const token of TRANSPARENT_TOKENS) {
224
+ tokens.push([
225
+ `--eun-color-${type}-${token.name}`,
226
+ toRgba(seed, token.alpha),
227
+ ]);
228
+ }
209
229
  }
210
- for (const token of TRANSPARENT_TOKENS) {
211
- root.setProperty(`--eun-color-${type}-${token.name}`, toRgba(seed, token.alpha));
230
+ tokens.push(["--eun-surface-color", surfaceColor]);
231
+ if (fontFamily) {
232
+ tokens.push(["--eun-font-family", fontFamily]);
212
233
  }
234
+ const tints = buildTints(primary, isDark);
235
+ tokens.push(["--eun-surface-tint", tints.surfaceTint]);
236
+ tokens.push(["--eun-border-tint", tints.borderTint]);
237
+ tokens.push(["--eun-divider-tint", tints.dividerTint]);
238
+ tokens.push(["--eun-content-hover-tint", tints.contentHoverTint]);
239
+ tokens.push(["--eun-content-pressed-tint", tints.contentPressedTint]);
240
+ return tokens;
213
241
  }
214
242
  /**
215
243
  * The one non-pure export in this file: generates and applies a full
@@ -231,19 +259,36 @@ function applyBrand(type, seed, isDark) {
231
259
  *
232
260
  * Client-side only: call it once the DOM exists (after mount, not during
233
261
  * an SSR render), since it writes directly to `document.documentElement`.
262
+ * Because it only runs after the page has painted, the base theme shows
263
+ * for a frame first; `buildThemeCss` below avoids that flash.
234
264
  */
235
265
  export function initializeTheme(primary, secondary, isDark = false, surfaceColor = "#ffffff", darkSurfaceColor = DARK_SURFACE, fontFamily) {
236
- applyBrand("primary", primary, isDark);
237
- applyBrand("secondary", secondary, isDark);
238
266
  const root = document.documentElement.style;
239
- root.setProperty("--eun-surface-color", isDark ? darkSurfaceColor : surfaceColor);
240
- if (fontFamily) {
241
- root.setProperty("--eun-font-family", fontFamily);
267
+ const tokens = buildThemeTokens(primary, secondary, isDark, isDark ? darkSurfaceColor : surfaceColor, fontFamily);
268
+ for (const [property, value] of tokens) {
269
+ root.setProperty(property, value);
242
270
  }
243
- const tints = buildTints(primary, isDark);
244
- root.setProperty("--eun-surface-tint", tints.surfaceTint);
245
- root.setProperty("--eun-border-tint", tints.borderTint);
246
- root.setProperty("--eun-divider-tint", tints.dividerTint);
247
- root.setProperty("--eun-content-hover-tint", tints.contentHoverTint);
248
- root.setProperty("--eun-content-pressed-tint", tints.contentPressedTint);
271
+ }
272
+ /**
273
+ * The pure, stylesheet counterpart of `initializeTheme`: the same tokens,
274
+ * for both light and dark mode, returned as a CSS string instead of being
275
+ * written onto the DOM. Render it in a `<style>` in the document `<head>`
276
+ * (during SSR, or at build time) and the custom brand is there on first
277
+ * paint, with no flash of the base theme while the app hydrates.
278
+ *
279
+ * The rules are prefixed with `:root` so they outrank the prebuilt
280
+ * `[data-brand][data-theme]` rules whatever the stylesheet order, and
281
+ * switching mode is just a `data-theme` change, no regeneration needed.
282
+ */
283
+ export function buildThemeCss(primary, secondary, options = {}) {
284
+ const { surfaceColor = "#ffffff", darkSurfaceColor = DARK_SURFACE, fontFamily, brand = "custom", } = options;
285
+ const rule = (selector, isDark) => {
286
+ const tokens = buildThemeTokens(primary, secondary, isDark, isDark ? darkSurfaceColor : surfaceColor, fontFamily);
287
+ const body = tokens
288
+ .map(([property, value]) => ` ${property}: ${value};`)
289
+ .join("\n");
290
+ return `${selector} {\n${body}\n}`;
291
+ };
292
+ const selector = `:root[data-brand="${brand}"]`;
293
+ return `${rule(selector, false)}\n${rule(`${selector}[data-theme="dark"]`, true)}\n`;
249
294
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eunomia/elements",
3
- "version": "1.0.0-beta.2",
3
+ "version": "1.0.0-beta.4",
4
4
  "description": "Eunomia — a framework-agnostic web component design system",
5
5
  "type": "module",
6
6
  "homepage": "https://eunomia-ds.vercel.app",
@@ -293,12 +293,21 @@
293
293
  "types": "./dist/components/content/tooltip/tooltip.d.ts",
294
294
  "default": "./dist/components/content/tooltip/tooltip.js"
295
295
  },
296
+ "./rich-text.js": {
297
+ "types": "./dist/utils/rich-text.utils.d.ts",
298
+ "default": "./dist/utils/rich-text.utils.js"
299
+ },
296
300
  "./jsx": {
297
301
  "types": "./dist/jsx.d.ts",
298
302
  "default": "./dist/jsx.js"
299
303
  },
300
304
  "./styles/*": "./styles/*",
301
- "./cdn/*": "./dist/cdn/*"
305
+ "./cdn/*": "./dist/cdn/*",
306
+ "./animate-ssr.css": "./dist/ssr/animate-ssr.css",
307
+ "./toolbar-ssr.css": "./dist/ssr/toolbar-ssr.css",
308
+ "./sidebar-ssr.css": "./dist/ssr/sidebar-ssr.css",
309
+ "./overlay-ssr.css": "./dist/ssr/overlay-ssr.css",
310
+ "./native-table.css": "./dist/features/table/native-table.css"
302
311
  },
303
312
  "files": [
304
313
  "dist",
@@ -306,12 +315,14 @@
306
315
  "licenses"
307
316
  ],
308
317
  "sideEffects": [
318
+ "./dist/index.js",
309
319
  "./dist/components/**/*.js",
310
320
  "./dist/features/**/*.js"
311
321
  ],
312
322
  "scripts": {
313
323
  "build": "tsc --noEmit",
314
- "build:dist": "rm -rf dist && tsc -p tsconfig.build.json && node scripts/copy-assets.mjs && node scripts/generate-exports.mjs",
324
+ "build:dist": "node scripts/build-dist.mjs",
325
+ "build:dist:watch": "tsc -p tsconfig.build.json && node scripts/copy-assets.mjs && node scripts/generate-exports.mjs && tsc -p tsconfig.build.json --watch",
315
326
  "build:cdn": "node scripts/build-cdn.mjs",
316
327
  "prepublishOnly": "npm run build:dist && npm run build:cdn",
317
328
  "lint": "eslint . --config ../eslint.config.js",
@@ -9,6 +9,7 @@
9
9
  @include eunomia-border-radius();
10
10
  @include eunomia-border-width();
11
11
  @include eunomia-shadows();
12
+ @include eunomia-alpha();
12
13
  @include eunomia-height();
13
14
  @include eunomia-breakpoints();
14
15
  @include eunomia-grid-layouts();
@@ -0,0 +1,71 @@
1
+ @mixin eunomia-neutrals {
2
+ --eun-content-hover: #9696961a;
3
+ --eun-content-pressed: #e4e6e8;
4
+ --eun-divider-color: #dee0e7;
5
+ --eun-border-color: #dee0e7;
6
+ --eun-surface-color: #ffffff;
7
+ --eun-surface-sunken: color-mix(
8
+ in srgb,
9
+ var(--eun-text-color) 5%,
10
+ transparent
11
+ );
12
+ --eun-surface-sunken-hover: color-mix(
13
+ in srgb,
14
+ var(--eun-text-color) 9%,
15
+ transparent
16
+ );
17
+ --eun-surface-sunken-pressed: color-mix(
18
+ in srgb,
19
+ var(--eun-text-color) 12%,
20
+ transparent
21
+ );
22
+ --eun-surface-sunken-strong: color-mix(
23
+ in srgb,
24
+ var(--eun-text-color) 8%,
25
+ transparent
26
+ );
27
+ --eun-disabled-color: #ecedf0;
28
+ --eun-readonly-color: #666e8a;
29
+ --eun-text-color: #071621;
30
+ --eun-text-secondary: #484e61;
31
+ --eun-placeholder-color: var(--eun-color-grey-400, #c1c9d6);
32
+ --eun-text-disabled-color: #8d93aa;
33
+ --eun-text-readonly-color: #c1c9d6;
34
+ --eun-disabled-content: #c1c9d6;
35
+ }
36
+
37
+ @mixin eunomia-dark-neutrals {
38
+ --eun-content-hover: rgba(255, 255, 255, 0.08);
39
+ --eun-content-pressed: rgba(255, 255, 255, 0.14);
40
+ --eun-divider-color: var(--eun-color-grey-300);
41
+ --eun-border-color: var(--eun-color-grey-300);
42
+ --eun-surface-color: var(--eun-color-grey-0);
43
+ --eun-surface-sunken: color-mix(
44
+ in srgb,
45
+ var(--eun-text-color) 8%,
46
+ transparent
47
+ );
48
+ --eun-surface-sunken-hover: color-mix(
49
+ in srgb,
50
+ var(--eun-text-color) 12%,
51
+ transparent
52
+ );
53
+ --eun-surface-sunken-pressed: color-mix(
54
+ in srgb,
55
+ var(--eun-text-color) 16%,
56
+ transparent
57
+ );
58
+ --eun-surface-sunken-strong: color-mix(
59
+ in srgb,
60
+ var(--eun-text-color) 16%,
61
+ transparent
62
+ );
63
+ --eun-disabled-color: var(--eun-color-grey-200);
64
+ --eun-readonly-color: var(--eun-color-grey-600);
65
+ --eun-text-color: var(--eun-color-grey-800);
66
+ --eun-text-secondary: var(--eun-color-grey-700);
67
+ --eun-placeholder-color: var(--eun-color-grey-400);
68
+ --eun-text-disabled-color: var(--eun-color-grey-500);
69
+ --eun-text-readonly-color: var(--eun-color-grey-400);
70
+ --eun-disabled-content: var(--eun-color-grey-400);
71
+ }
@@ -1,3 +1,5 @@
1
+ @use "./../../mixins/eunomia-neutrals.mixin.scss" as *;
2
+
1
3
  @mixin eunomia-eunomia-dark-theme-colors {
2
4
  $primary-500: #6c92ff;
3
5
  $secondary-500: #edbd6f;
@@ -58,19 +60,7 @@
58
60
  --eun-color-secondary-transparent-hover: #{rgba($secondary-500, 0.3)};
59
61
  --eun-color-secondary-transparent-active: #{rgba($secondary-500, 0.4)};
60
62
 
61
- --eun-content-hover: rgba(255, 255, 255, 0.08);
62
- --eun-content-pressed: rgba(255, 255, 255, 0.14);
63
- --eun-divider-color: var(--eun-color-grey-300);
64
- --eun-border-color: var(--eun-color-grey-300);
65
- --eun-surface-color: var(--eun-color-grey-0);
66
- --eun-disabled-color: var(--eun-color-grey-200);
67
- --eun-readonly-color: var(--eun-color-grey-600);
68
- --eun-text-color: var(--eun-color-grey-800);
69
- --eun-text-secondary: var(--eun-color-grey-700);
70
- --eun-placeholder-color: var(--eun-color-grey-400);
71
- --eun-text-disabled-color: var(--eun-color-grey-500);
72
- --eun-text-readonly-color: var(--eun-color-grey-400);
73
- --eun-disabled-content: var(--eun-color-grey-400);
63
+ @include eunomia-dark-neutrals();
74
64
 
75
65
  --eun-surface-tint: #2a3243;
76
66
  --eun-divider-tint: #667090;
@@ -1,3 +1,5 @@
1
+ @use "./../../mixins/eunomia-neutrals.mixin.scss" as *;
2
+
1
3
  @mixin eunomia-eunomia-theme-colors {
2
4
  $primary-500: #3d6fff;
3
5
  $secondary-500: #edbd6f;
@@ -58,19 +60,7 @@
58
60
  --eun-color-secondary-transparent-hover: #{rgba($secondary-500, 0.3)};
59
61
  --eun-color-secondary-transparent-active: #{rgba($secondary-500, 0.4)};
60
62
 
61
- --eun-content-hover: #9696961a;
62
- --eun-content-pressed: #e4e6e8;
63
- --eun-divider-color: #dee0e7;
64
- --eun-border-color: #dee0e7;
65
- --eun-surface-color: #ffffff;
66
- --eun-disabled-color: #ecedf0;
67
- --eun-readonly-color: #666e8a;
68
- --eun-text-color: #071621;
69
- --eun-text-secondary: #484e61;
70
- --eun-placeholder-color: var(--eun-color-grey-400, #c1c9d6);
71
- --eun-text-disabled-color: #8d93aa;
72
- --eun-text-readonly-color: #c1c9d6;
73
- --eun-disabled-content: #c1c9d6;
63
+ @include eunomia-neutrals();
74
64
 
75
65
  --eun-surface-tint: #f5f8ff;
76
66
  --eun-divider-tint: #d6dae8;
@@ -9,6 +9,7 @@
9
9
  @use "./../../../tools/mixins/settings/eunomia-radius.mixin.scss" as *;
10
10
  @use "./../../../tools/mixins/settings/eunomia-border.mixin.scss" as *;
11
11
  @use "./../../../tools/mixins/settings/eunomia-shadows.mixin.scss" as *;
12
+ @use "./../../../tools/mixins/settings/eunomia-alpha.mixin.scss" as *;
12
13
  @use "./../../../tools/mixins/layout/eunomia-grid.mixin.scss" as *;
13
14
 
14
15
  @mixin default-settings {
@@ -19,6 +20,7 @@
19
20
  @include eunomia-border-radius();
20
21
  @include eunomia-border-width();
21
22
  @include eunomia-shadows();
23
+ @include eunomia-alpha();
22
24
  @include eunomia-height();
23
25
  @include eunomia-breakpoints();
24
26
  @include eunomia-grid-layouts();
@@ -1,3 +1,5 @@
1
+ @use "./../../mixins/eunomia-neutrals.mixin.scss" as *;
2
+
1
3
  @mixin eunomia-fire-dark-theme-colors {
2
4
  $primary-500: #e94235;
3
5
  $secondary-500: #df781e;
@@ -58,19 +60,7 @@
58
60
  --eun-color-secondary-transparent-hover: #{rgba($secondary-500, 0.3)};
59
61
  --eun-color-secondary-transparent-active: #{rgba($secondary-500, 0.4)};
60
62
 
61
- --eun-content-hover: rgba(255, 255, 255, 0.08);
62
- --eun-content-pressed: rgba(255, 255, 255, 0.14);
63
- --eun-divider-color: var(--eun-color-grey-300);
64
- --eun-border-color: var(--eun-color-grey-300);
65
- --eun-surface-color: var(--eun-color-grey-0);
66
- --eun-disabled-color: var(--eun-color-grey-200);
67
- --eun-readonly-color: var(--eun-color-grey-600);
68
- --eun-text-color: var(--eun-color-grey-800);
69
- --eun-text-secondary: var(--eun-color-grey-700);
70
- --eun-placeholder-color: var(--eun-color-grey-400);
71
- --eun-text-disabled-color: var(--eun-color-grey-500);
72
- --eun-text-readonly-color: var(--eun-color-grey-400);
73
- --eun-disabled-content: var(--eun-color-grey-400);
63
+ @include eunomia-dark-neutrals();
74
64
 
75
65
  --eun-surface-tint: #2f2e39;
76
66
  --eun-divider-tint: #6c6c86;