vira 32.0.0-beta.0 → 32.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (288) hide show
  1. package/dist/elements/color/vira-all-color-space-sliders.element.d.ts +11 -0
  2. package/dist/elements/color/vira-all-color-space-sliders.element.js +55 -0
  3. package/dist/elements/color/vira-all-spaces-color-picker.element.d.ts +15 -0
  4. package/dist/elements/color/vira-all-spaces-color-picker.element.js +73 -0
  5. package/dist/elements/color/vira-color-details.element.d.ts +14 -0
  6. package/{src/elements/color/vira-color-details.element.ts → dist/elements/color/vira-color-details.element.js} +43 -59
  7. package/dist/elements/color/vira-color-format-sliders.element.d.ts +14 -0
  8. package/dist/elements/color/vira-color-format-sliders.element.js +60 -0
  9. package/dist/elements/color/vira-color-pair-contrast-summary.element.d.ts +9 -0
  10. package/{src/elements/color/vira-color-pair-contrast-summary.element.ts → dist/elements/color/vira-color-pair-contrast-summary.element.js} +68 -100
  11. package/dist/elements/color/vira-color-pair.element.d.ts +17 -0
  12. package/{src/elements/color/vira-color-pair.element.ts → dist/elements/color/vira-color-pair.element.js} +50 -71
  13. package/dist/elements/color/vira-color-picker.element.d.ts +20 -0
  14. package/{src/elements/color/vira-color-picker.element.ts → dist/elements/color/vira-color-picker.element.js} +92 -117
  15. package/dist/elements/color/vira-color-slider.element.d.ts +14 -0
  16. package/dist/elements/color/vira-color-slider.element.js +124 -0
  17. package/dist/elements/color/vira-color-swatch.element.d.ts +20 -0
  18. package/{src/elements/color/vira-color-swatch.element.ts → dist/elements/color/vira-color-swatch.element.js} +6 -16
  19. package/dist/elements/color/vira-contrast-indicator.element.d.ts +10 -0
  20. package/{src/elements/color/vira-contrast-indicator.element.ts → dist/elements/color/vira-contrast-indicator.element.js} +13 -28
  21. package/dist/elements/index.js +39 -0
  22. package/dist/elements/pop-up/vira-menu-item.element.d.ts +38 -0
  23. package/{src/elements/pop-up/vira-menu-item.element.ts → dist/elements/pop-up/vira-menu-item.element.js} +80 -117
  24. package/dist/elements/pop-up/vira-menu-trigger.element.d.ts +45 -0
  25. package/dist/elements/pop-up/vira-menu-trigger.element.js +100 -0
  26. package/dist/elements/pop-up/vira-menu.element.d.ts +36 -0
  27. package/{src/elements/pop-up/vira-menu.element.ts → dist/elements/pop-up/vira-menu.element.js} +28 -31
  28. package/dist/elements/pop-up/vira-pop-up-trigger.element.d.ts +109 -0
  29. package/dist/elements/pop-up/vira-pop-up-trigger.element.js +408 -0
  30. package/dist/elements/vira-absolute-time.element.d.ts +35 -0
  31. package/dist/elements/vira-absolute-time.element.js +43 -0
  32. package/dist/elements/vira-bold-text.element.d.ts +9 -0
  33. package/{src/elements/vira-bold-text.element.ts → dist/elements/vira-bold-text.element.js} +11 -10
  34. package/dist/elements/vira-button.element.d.ts +44 -0
  35. package/{src/elements/vira-button.element.ts → dist/elements/vira-button.element.js} +107 -255
  36. package/dist/elements/vira-card.element.d.ts +18 -0
  37. package/{src/elements/vira-card.element.ts → dist/elements/vira-card.element.js} +19 -18
  38. package/dist/elements/vira-checkbox.element.d.ts +44 -0
  39. package/{src/elements/vira-checkbox.element.ts → dist/elements/vira-checkbox.element.js} +48 -95
  40. package/dist/elements/vira-collapsible-card.element.d.ts +36 -0
  41. package/{src/elements/vira-collapsible-card.element.ts → dist/elements/vira-collapsible-card.element.js} +44 -71
  42. package/dist/elements/vira-collapsible-wrapper.element.d.ts +30 -0
  43. package/{src/elements/vira-collapsible-wrapper.element.ts → dist/elements/vira-collapsible-wrapper.element.js} +47 -59
  44. package/dist/elements/vira-date-input.element.d.ts +47 -0
  45. package/dist/elements/vira-date-input.element.js +142 -0
  46. package/dist/elements/vira-drawer.element.d.ts +24 -0
  47. package/{src/elements/vira-drawer.element.ts → dist/elements/vira-drawer.element.js} +98 -125
  48. package/dist/elements/vira-dropdown.element.d.ts +43 -0
  49. package/dist/elements/vira-dropdown.element.js +247 -0
  50. package/dist/elements/vira-error.element.d.ts +7 -0
  51. package/{src/elements/vira-error.element.ts → dist/elements/vira-error.element.js} +7 -8
  52. package/dist/elements/vira-form.element.d.ts +56 -0
  53. package/dist/elements/vira-form.element.js +376 -0
  54. package/dist/elements/vira-icon.element.d.ts +13 -0
  55. package/{src/elements/vira-icon.element.ts → dist/elements/vira-icon.element.js} +12 -16
  56. package/dist/elements/vira-image.element.d.ts +45 -0
  57. package/{src/elements/vira-image.element.ts → dist/elements/vira-image.element.js} +50 -70
  58. package/dist/elements/vira-input.element.d.ts +64 -0
  59. package/{src/elements/vira-input.element.ts → dist/elements/vira-input.element.js} +112 -167
  60. package/dist/elements/vira-json-form.element.d.ts +35 -0
  61. package/{src/elements/vira-json-form.element.ts → dist/elements/vira-json-form.element.js} +356 -522
  62. package/dist/elements/vira-link.element.d.ts +78 -0
  63. package/{src/elements/vira-link.element.ts → dist/elements/vira-link.element.js} +24 -83
  64. package/dist/elements/vira-modal.element.d.ts +40 -0
  65. package/{src/elements/vira-modal.element.ts → dist/elements/vira-modal.element.js} +68 -104
  66. package/dist/elements/vira-progress.element.d.ts +18 -0
  67. package/{src/elements/vira-progress.element.ts → dist/elements/vira-progress.element.js} +12 -25
  68. package/dist/elements/vira-relative-time.element.d.ts +42 -0
  69. package/dist/elements/vira-relative-time.element.js +96 -0
  70. package/dist/elements/vira-select.element.d.ts +44 -0
  71. package/{src/elements/vira-select.element.ts → dist/elements/vira-select.element.js} +89 -138
  72. package/dist/elements/vira-tabs.element.d.ts +124 -0
  73. package/{src/elements/vira-tabs.element.ts → dist/elements/vira-tabs.element.js} +242 -446
  74. package/dist/elements/vira-tag.element.d.ts +40 -0
  75. package/{src/elements/vira-tag.element.ts → dist/elements/vira-tag.element.js} +152 -266
  76. package/dist/elements/vira-text-area.element.d.ts +48 -0
  77. package/{src/elements/vira-text-area.element.ts → dist/elements/vira-text-area.element.js} +52 -70
  78. package/dist/elements/vira-theme-switcher.element.d.ts +17 -0
  79. package/{src/elements/vira-theme-switcher.element.ts → dist/elements/vira-theme-switcher.element.js} +34 -49
  80. package/dist/icons/colored-icon.d.ts +11 -0
  81. package/{src/icons/colored-icon.ts → dist/icons/colored-icon.js} +17 -24
  82. package/dist/icons/icon-css-vars.d.ts +14 -0
  83. package/{src/icons/icon-css-vars.ts → dist/icons/icon-css-vars.js} +1 -2
  84. package/{src/icons/icon-svg.ts → dist/icons/icon-svg.d.ts} +3 -15
  85. package/dist/icons/icon-svg.js +12 -0
  86. package/dist/icons/icon-svgs/16/check-16.icon.d.ts +8 -0
  87. package/{src/icons/icon-svgs/16/check-16.icon.ts → dist/icons/icon-svgs/16/check-16.icon.js} +4 -5
  88. package/dist/icons/icon-svgs/16/chevron-down-16.icon.d.ts +8 -0
  89. package/{src/icons/icon-svgs/16/chevron-down-16.icon.ts → dist/icons/icon-svgs/16/chevron-down-16.icon.js} +4 -5
  90. package/dist/icons/icon-svgs/16/chevron-up-16.icon.d.ts +8 -0
  91. package/{src/icons/icon-svgs/16/chevron-up-16.icon.ts → dist/icons/icon-svgs/16/chevron-up-16.icon.js} +4 -5
  92. package/dist/icons/icon-svgs/16/dash-16.icon.d.ts +8 -0
  93. package/{src/icons/icon-svgs/16/dash-16.icon.ts → dist/icons/icon-svgs/16/dash-16.icon.js} +4 -5
  94. package/dist/icons/icon-svgs/16/element-16.icon.d.ts +8 -0
  95. package/{src/icons/icon-svgs/16/element-16.icon.ts → dist/icons/icon-svgs/16/element-16.icon.js} +4 -5
  96. package/dist/icons/icon-svgs/16/plus-16.icon.d.ts +8 -0
  97. package/{src/icons/icon-svgs/16/plus-16.icon.ts → dist/icons/icon-svgs/16/plus-16.icon.js} +4 -5
  98. package/dist/icons/icon-svgs/16/upload-16.icon.d.ts +8 -0
  99. package/{src/icons/icon-svgs/16/upload-16.icon.ts → dist/icons/icon-svgs/16/upload-16.icon.js} +4 -5
  100. package/dist/icons/icon-svgs/16/x-16.icon.d.ts +8 -0
  101. package/{src/icons/icon-svgs/16/x-16.icon.ts → dist/icons/icon-svgs/16/x-16.icon.js} +4 -5
  102. package/dist/icons/icon-svgs/24/arrow-down-24.icon.d.ts +8 -0
  103. package/{src/icons/icon-svgs/24/arrow-down-24.icon.ts → dist/icons/icon-svgs/24/arrow-down-24.icon.js} +4 -5
  104. package/dist/icons/icon-svgs/24/arrow-left-24.icon.d.ts +8 -0
  105. package/{src/icons/icon-svgs/24/arrow-left-24.icon.ts → dist/icons/icon-svgs/24/arrow-left-24.icon.js} +4 -5
  106. package/dist/icons/icon-svgs/24/arrow-right-24.icon.d.ts +8 -0
  107. package/{src/icons/icon-svgs/24/arrow-right-24.icon.ts → dist/icons/icon-svgs/24/arrow-right-24.icon.js} +4 -5
  108. package/dist/icons/icon-svgs/24/arrow-up-24.icon.d.ts +8 -0
  109. package/{src/icons/icon-svgs/24/arrow-up-24.icon.ts → dist/icons/icon-svgs/24/arrow-up-24.icon.js} +4 -5
  110. package/dist/icons/icon-svgs/24/auto-theme-24.icon.d.ts +8 -0
  111. package/{src/icons/icon-svgs/24/auto-theme-24.icon.ts → dist/icons/icon-svgs/24/auto-theme-24.icon.js} +4 -5
  112. package/dist/icons/icon-svgs/24/bell-24.icon.d.ts +8 -0
  113. package/{src/icons/icon-svgs/24/bell-24.icon.ts → dist/icons/icon-svgs/24/bell-24.icon.js} +4 -5
  114. package/dist/icons/icon-svgs/24/chat-24.icon.d.ts +8 -0
  115. package/{src/icons/icon-svgs/24/chat-24.icon.ts → dist/icons/icon-svgs/24/chat-24.icon.js} +4 -5
  116. package/dist/icons/icon-svgs/24/check-24.icon.d.ts +8 -0
  117. package/{src/icons/icon-svgs/24/check-24.icon.ts → dist/icons/icon-svgs/24/check-24.icon.js} +4 -5
  118. package/dist/icons/icon-svgs/24/chevron-down-24.icon.d.ts +8 -0
  119. package/{src/icons/icon-svgs/24/chevron-down-24.icon.ts → dist/icons/icon-svgs/24/chevron-down-24.icon.js} +4 -5
  120. package/dist/icons/icon-svgs/24/chevron-up-24.icon.d.ts +8 -0
  121. package/{src/icons/icon-svgs/24/chevron-up-24.icon.ts → dist/icons/icon-svgs/24/chevron-up-24.icon.js} +4 -5
  122. package/dist/icons/icon-svgs/24/close-x-24.icon.d.ts +8 -0
  123. package/{src/icons/icon-svgs/24/close-x-24.icon.ts → dist/icons/icon-svgs/24/close-x-24.icon.js} +4 -5
  124. package/dist/icons/icon-svgs/24/commit-24.icon.d.ts +8 -0
  125. package/{src/icons/icon-svgs/24/commit-24.icon.ts → dist/icons/icon-svgs/24/commit-24.icon.js} +4 -5
  126. package/dist/icons/icon-svgs/24/copy-24.icon.d.ts +8 -0
  127. package/{src/icons/icon-svgs/24/copy-24.icon.ts → dist/icons/icon-svgs/24/copy-24.icon.js} +4 -5
  128. package/dist/icons/icon-svgs/24/document-24.icon.d.ts +8 -0
  129. package/{src/icons/icon-svgs/24/document-24.icon.ts → dist/icons/icon-svgs/24/document-24.icon.js} +4 -5
  130. package/dist/icons/icon-svgs/24/document-search-24.icon.d.ts +8 -0
  131. package/{src/icons/icon-svgs/24/document-search-24.icon.ts → dist/icons/icon-svgs/24/document-search-24.icon.js} +4 -5
  132. package/dist/icons/icon-svgs/24/double-chevron-24.icon.d.ts +8 -0
  133. package/{src/icons/icon-svgs/24/double-chevron-24.icon.ts → dist/icons/icon-svgs/24/double-chevron-24.icon.js} +4 -5
  134. package/dist/icons/icon-svgs/24/element-24.icon.d.ts +8 -0
  135. package/{src/icons/icon-svgs/24/element-24.icon.ts → dist/icons/icon-svgs/24/element-24.icon.js} +4 -5
  136. package/dist/icons/icon-svgs/24/external-link-24.icon.d.ts +8 -0
  137. package/{src/icons/icon-svgs/24/external-link-24.icon.ts → dist/icons/icon-svgs/24/external-link-24.icon.js} +4 -5
  138. package/dist/icons/icon-svgs/24/eye-closed-24.icon.d.ts +8 -0
  139. package/{src/icons/icon-svgs/24/eye-closed-24.icon.ts → dist/icons/icon-svgs/24/eye-closed-24.icon.js} +4 -5
  140. package/dist/icons/icon-svgs/24/eye-open-24.icon.d.ts +8 -0
  141. package/{src/icons/icon-svgs/24/eye-open-24.icon.ts → dist/icons/icon-svgs/24/eye-open-24.icon.js} +4 -5
  142. package/dist/icons/icon-svgs/24/filter-24.icon.d.ts +8 -0
  143. package/{src/icons/icon-svgs/24/filter-24.icon.ts → dist/icons/icon-svgs/24/filter-24.icon.js} +4 -5
  144. package/dist/icons/icon-svgs/24/globe-24.icon.d.ts +8 -0
  145. package/{src/icons/icon-svgs/24/globe-24.icon.ts → dist/icons/icon-svgs/24/globe-24.icon.js} +4 -5
  146. package/dist/icons/icon-svgs/24/link-24.icon.d.ts +8 -0
  147. package/{src/icons/icon-svgs/24/link-24.icon.ts → dist/icons/icon-svgs/24/link-24.icon.js} +4 -5
  148. package/dist/icons/icon-svgs/24/loader-24.icon.d.ts +8 -0
  149. package/{src/icons/icon-svgs/24/loader-24.icon.ts → dist/icons/icon-svgs/24/loader-24.icon.js} +4 -5
  150. package/dist/icons/icon-svgs/24/loader-animated-24.icon.d.ts +8 -0
  151. package/{src/icons/icon-svgs/24/loader-animated-24.icon.ts → dist/icons/icon-svgs/24/loader-animated-24.icon.js} +6 -8
  152. package/dist/icons/icon-svgs/24/lock-24.icon.d.ts +8 -0
  153. package/{src/icons/icon-svgs/24/lock-24.icon.ts → dist/icons/icon-svgs/24/lock-24.icon.js} +4 -5
  154. package/dist/icons/icon-svgs/24/magnifying-glass-24.icon.d.ts +8 -0
  155. package/{src/icons/icon-svgs/24/magnifying-glass-24.icon.ts → dist/icons/icon-svgs/24/magnifying-glass-24.icon.js} +4 -5
  156. package/dist/icons/icon-svgs/24/moon-24.icon.d.ts +8 -0
  157. package/{src/icons/icon-svgs/24/moon-24.icon.ts → dist/icons/icon-svgs/24/moon-24.icon.js} +4 -5
  158. package/dist/icons/icon-svgs/24/options-24.icon.d.ts +8 -0
  159. package/{src/icons/icon-svgs/24/options-24.icon.ts → dist/icons/icon-svgs/24/options-24.icon.js} +4 -5
  160. package/dist/icons/icon-svgs/24/pencil-24.icon.d.ts +8 -0
  161. package/{src/icons/icon-svgs/24/pencil-24.icon.ts → dist/icons/icon-svgs/24/pencil-24.icon.js} +4 -5
  162. package/dist/icons/icon-svgs/24/plus-24.icon.d.ts +8 -0
  163. package/{src/icons/icon-svgs/24/plus-24.icon.ts → dist/icons/icon-svgs/24/plus-24.icon.js} +4 -5
  164. package/dist/icons/icon-svgs/24/printer-24.icon.d.ts +8 -0
  165. package/{src/icons/icon-svgs/24/printer-24.icon.ts → dist/icons/icon-svgs/24/printer-24.icon.js} +4 -5
  166. package/dist/icons/icon-svgs/24/shield-24.icon.d.ts +8 -0
  167. package/{src/icons/icon-svgs/24/shield-24.icon.ts → dist/icons/icon-svgs/24/shield-24.icon.js} +4 -5
  168. package/dist/icons/icon-svgs/24/sort-ascending-24.icon.d.ts +8 -0
  169. package/{src/icons/icon-svgs/24/sort-ascending-24.icon.ts → dist/icons/icon-svgs/24/sort-ascending-24.icon.js} +4 -5
  170. package/dist/icons/icon-svgs/24/sort-descending-24.icon.d.ts +8 -0
  171. package/{src/icons/icon-svgs/24/sort-descending-24.icon.ts → dist/icons/icon-svgs/24/sort-descending-24.icon.js} +4 -5
  172. package/dist/icons/icon-svgs/24/sparkle-24.icon.d.ts +8 -0
  173. package/{src/icons/icon-svgs/24/sparkle-24.icon.ts → dist/icons/icon-svgs/24/sparkle-24.icon.js} +4 -5
  174. package/dist/icons/icon-svgs/24/speaker-loud-24.icon.d.ts +8 -0
  175. package/{src/icons/icon-svgs/24/speaker-loud-24.icon.ts → dist/icons/icon-svgs/24/speaker-loud-24.icon.js} +4 -5
  176. package/dist/icons/icon-svgs/24/speaker-medium-24.icon.d.ts +8 -0
  177. package/{src/icons/icon-svgs/24/speaker-medium-24.icon.ts → dist/icons/icon-svgs/24/speaker-medium-24.icon.js} +4 -5
  178. package/dist/icons/icon-svgs/24/speaker-muted-24.icon.d.ts +8 -0
  179. package/{src/icons/icon-svgs/24/speaker-muted-24.icon.ts → dist/icons/icon-svgs/24/speaker-muted-24.icon.js} +4 -5
  180. package/dist/icons/icon-svgs/24/speaker-quiet-24.icon.d.ts +8 -0
  181. package/{src/icons/icon-svgs/24/speaker-quiet-24.icon.ts → dist/icons/icon-svgs/24/speaker-quiet-24.icon.js} +4 -5
  182. package/dist/icons/icon-svgs/24/star-24.icon.d.ts +8 -0
  183. package/{src/icons/icon-svgs/24/star-24.icon.ts → dist/icons/icon-svgs/24/star-24.icon.js} +4 -5
  184. package/dist/icons/icon-svgs/24/status-failure-24.icon.d.ts +8 -0
  185. package/{src/icons/icon-svgs/24/status-failure-24.icon.ts → dist/icons/icon-svgs/24/status-failure-24.icon.js} +4 -5
  186. package/dist/icons/icon-svgs/24/status-in-progress-24.icon.d.ts +8 -0
  187. package/{src/icons/icon-svgs/24/status-in-progress-24.icon.ts → dist/icons/icon-svgs/24/status-in-progress-24.icon.js} +4 -5
  188. package/dist/icons/icon-svgs/24/status-success-24.icon.d.ts +8 -0
  189. package/{src/icons/icon-svgs/24/status-success-24.icon.ts → dist/icons/icon-svgs/24/status-success-24.icon.js} +4 -5
  190. package/dist/icons/icon-svgs/24/status-unknown-24.icon.d.ts +8 -0
  191. package/{src/icons/icon-svgs/24/status-unknown-24.icon.ts → dist/icons/icon-svgs/24/status-unknown-24.icon.js} +4 -5
  192. package/dist/icons/icon-svgs/24/status-warning-24.icon.d.ts +8 -0
  193. package/{src/icons/icon-svgs/24/status-warning-24.icon.ts → dist/icons/icon-svgs/24/status-warning-24.icon.js} +4 -5
  194. package/dist/icons/icon-svgs/24/sun-24.icon.d.ts +8 -0
  195. package/{src/icons/icon-svgs/24/sun-24.icon.ts → dist/icons/icon-svgs/24/sun-24.icon.js} +4 -5
  196. package/dist/icons/icon-svgs/24/upload-24.icon.d.ts +8 -0
  197. package/{src/icons/icon-svgs/24/upload-24.icon.ts → dist/icons/icon-svgs/24/upload-24.icon.js} +4 -5
  198. package/dist/icons/icon-svgs/24/x-24.icon.d.ts +8 -0
  199. package/{src/icons/icon-svgs/24/x-24.icon.ts → dist/icons/icon-svgs/24/x-24.icon.js} +4 -5
  200. package/dist/icons/index.d.ts +197 -0
  201. package/{src/icons/index.ts → dist/icons/index.js} +60 -65
  202. package/dist/icons/lucide-icons.d.ts +15 -0
  203. package/dist/icons/lucide-icons.js +79 -0
  204. package/dist/icons/sized-icon.d.ts +8 -0
  205. package/{src/icons/sized-icon.ts → dist/icons/sized-icon.js} +1 -3
  206. package/dist/index.js +4 -0
  207. package/dist/styles/disabled.d.ts +6 -0
  208. package/{src/styles/disabled.ts → dist/styles/disabled.js} +2 -3
  209. package/dist/styles/durations.d.ts +22 -0
  210. package/{src/styles/durations.ts → dist/styles/durations.js} +1 -2
  211. package/dist/styles/focus.d.ts +26 -0
  212. package/{src/styles/focus.ts → dist/styles/focus.js} +12 -40
  213. package/dist/styles/font.d.ts +12 -0
  214. package/{src/styles/font.ts → dist/styles/font.js} +1 -3
  215. package/dist/styles/form-styles.d.ts +46 -0
  216. package/dist/styles/form-styles.js +53 -0
  217. package/dist/styles/form-variants.d.ts +117 -0
  218. package/{src/styles/form-variants.ts → dist/styles/form-variants.js} +34 -42
  219. package/{src/styles/index.ts → dist/styles/index.d.ts} +0 -1
  220. package/dist/styles/index.js +14 -0
  221. package/dist/styles/native-styles.d.ts +13 -0
  222. package/{src/styles/native-styles.ts → dist/styles/native-styles.js} +3 -5
  223. package/dist/styles/scrollbar.d.ts +6 -0
  224. package/{src/styles/scrollbar.ts → dist/styles/scrollbar.js} +3 -4
  225. package/dist/styles/shadows.d.ts +19 -0
  226. package/{src/styles/shadows.ts → dist/styles/shadows.js} +5 -7
  227. package/dist/styles/user-select.d.ts +6 -0
  228. package/{src/styles/user-select.ts → dist/styles/user-select.js} +2 -3
  229. package/dist/styles/vira-color-palette.d.ts +178 -0
  230. package/{src/styles/vira-color-palette.ts → dist/styles/vira-color-palette.js} +1 -3
  231. package/dist/styles/vira-color-theme-object.d.ts +65 -0
  232. package/dist/styles/vira-color-theme-object.js +65 -0
  233. package/dist/styles/vira-color-theme.d.ts +2785 -0
  234. package/{src/styles/vira-color-theme.ts → dist/styles/vira-color-theme.js} +1222 -1227
  235. package/dist/util/color-local-storage.client.d.ts +4 -0
  236. package/dist/util/color-local-storage.client.js +6 -0
  237. package/dist/util/define-table.d.ts +115 -0
  238. package/dist/util/define-table.js +115 -0
  239. package/dist/util/define-vira-element.d.ts +18 -0
  240. package/dist/util/define-vira-element.js +19 -0
  241. package/dist/util/dynamic-element.d.ts +62 -0
  242. package/dist/util/dynamic-element.js +61 -0
  243. package/dist/util/index.js +11 -0
  244. package/dist/util/overflow-observer.d.ts +25 -0
  245. package/{src/util/overflow-observer.ts → dist/util/overflow-observer.js} +1 -30
  246. package/dist/util/pop-up-helpers.d.ts +59 -0
  247. package/dist/util/pop-up-helpers.js +66 -0
  248. package/dist/util/pop-up-manager.d.ts +200 -0
  249. package/dist/util/pop-up-manager.js +258 -0
  250. package/dist/util/shared-text-input-logic.d.ts +69 -0
  251. package/dist/util/shared-text-input-logic.js +114 -0
  252. package/dist/util/vira-form-fields.d.ts +145 -0
  253. package/dist/util/vira-form-fields.js +66 -0
  254. package/dist/util/vira-json-schema.d.ts +206 -0
  255. package/{src/util/vira-json-schema.ts → dist/util/vira-json-schema.js} +155 -298
  256. package/{src/util/vira-select-option.ts → dist/util/vira-select-option.d.ts} +2 -9
  257. package/dist/util/vira-select-option.js +8 -0
  258. package/dist/util/vira-theme-client.d.ts +83 -0
  259. package/dist/util/vira-theme-client.js +93 -0
  260. package/package.json +13 -13
  261. package/src/elements/color/vira-all-color-space-sliders.element.ts +0 -66
  262. package/src/elements/color/vira-all-spaces-color-picker.element.ts +0 -85
  263. package/src/elements/color/vira-color-format-sliders.element.ts +0 -78
  264. package/src/elements/color/vira-color-slider.element.ts +0 -169
  265. package/src/elements/pop-up/vira-menu-trigger.element.ts +0 -135
  266. package/src/elements/pop-up/vira-pop-up-trigger.element.ts +0 -539
  267. package/src/elements/vira-absolute-time.element.ts +0 -81
  268. package/src/elements/vira-date-input.element.ts +0 -185
  269. package/src/elements/vira-dropdown.element.ts +0 -310
  270. package/src/elements/vira-form.element.ts +0 -466
  271. package/src/elements/vira-relative-time.element.ts +0 -135
  272. package/src/icons/icon-color.test-helper.ts +0 -9
  273. package/src/icons/lucide-icons.ts +0 -120
  274. package/src/styles/form-styles.ts +0 -86
  275. package/src/styles/vira-color-palette.json +0 -170
  276. package/src/styles/vira-color-theme-object.ts +0 -170
  277. package/src/util/color-local-storage.client.ts +0 -7
  278. package/src/util/define-table.ts +0 -286
  279. package/src/util/define-vira-element.ts +0 -29
  280. package/src/util/dynamic-element.ts +0 -128
  281. package/src/util/pop-up-helpers.ts +0 -133
  282. package/src/util/pop-up-manager.ts +0 -434
  283. package/src/util/shared-text-input-logic.ts +0 -192
  284. package/src/util/vira-form-fields.ts +0 -195
  285. package/src/util/vira-theme-client.ts +0 -140
  286. /package/{src/elements/index.ts → dist/elements/index.d.ts} +0 -0
  287. /package/{src/index.ts → dist/index.d.ts} +0 -0
  288. /package/{src/util/index.ts → dist/util/index.d.ts} +0 -0
@@ -0,0 +1,109 @@
1
+ import { type PartialWithUndefined } from '@augment-vir/common';
2
+ import { NavController, type Coords } from 'device-navigation';
3
+ import { PopUpManager, type ShowPopUpResult } from '../../util/pop-up-manager.js';
4
+ /**
5
+ * Offsets applied to any menu opened by {@link ViraPopUpTrigger}.
6
+ *
7
+ * @category Internal
8
+ */
9
+ export type PopUpOffset = PartialWithUndefined<{
10
+ vertical: number;
11
+ right: number;
12
+ left: number;
13
+ }>;
14
+ /**
15
+ * Anchor options for pop-ups.
16
+ *
17
+ * @category Internal
18
+ */
19
+ export declare enum HorizontalAnchor {
20
+ /**
21
+ * The left side of the pop-up will be anchored to the left side of the trigger, allowing the
22
+ * pop-up to grow on the right side of the trigger.
23
+ */
24
+ Left = "left",
25
+ /**
26
+ * The Right side of the pop-up will be anchored to the right side of the trigger, allowing the
27
+ * pop-up to grow on the left side of the trigger.
28
+ */
29
+ Right = "right",
30
+ /** Restrict the pop-up on both sides. */
31
+ Both = "both",
32
+ /**
33
+ * Automatically choose left or right based on available space, defaulting to anchoring on the
34
+ * left side.
35
+ *
36
+ * This is the default anchor for {@link ViraPopUpTrigger}.
37
+ */
38
+ Auto = "auto"
39
+ }
40
+ /**
41
+ * Configs for {@link ViraPopUpTrigger} pop-up positioning and sizing.
42
+ *
43
+ * @category Internal
44
+ */
45
+ export type PopUpTriggerPosition = {
46
+ /**
47
+ * - `HorizontalAnchor.Left`: pop-up is anchored to the left side of the trigger and the pop-up
48
+ * can grow to the right.
49
+ * - `HorizontalAnchor.Right`: pop-up is anchored to the right side of the trigger and the pop-up
50
+ * can grow to the left.
51
+ * - `HorizontalAnchor.Both`: pop-up is anchored on both sides of the trigger and cannot grow
52
+ * beyond it.
53
+ * - `HorizontalAnchor.Auto`: automatically choose left or right anchor based on available space,
54
+ * defaulting to left anchor. (This is the default experience.)
55
+ *
56
+ * Note that when `HorizontalAnchor.Both` is _not_ used, this anchor will cancel out any
57
+ * `popUpOffset` for the direction _opposite_ of the chosen anchor.
58
+ */
59
+ horizontalAnchor: HorizontalAnchor;
60
+ /**
61
+ * When `true`, the pop-up will not have its maximum width constrained to fit within the
62
+ * overflow container. The positioning logic (left/right) will still be applied.
63
+ *
64
+ * @default false
65
+ */
66
+ ignoreMaxWidth: boolean;
67
+ /**
68
+ * When `true`, the pop-up will not have its maximum height constrained to fit within the
69
+ * overflow container. The positioning logic (up/down) will still be applied.
70
+ *
71
+ * @default false
72
+ */
73
+ ignoreMaxHeight: boolean;
74
+ };
75
+ /**
76
+ * An element with slots for a pop-up trigger and pop-up contents.
77
+ *
78
+ * @category PopUp
79
+ * @category Elements
80
+ * @see https://electrovir.github.io/vira/book/elements/vira-pop-up-trigger
81
+ */
82
+ export declare const ViraPopUpTrigger: import("element-vir").DeclarativeElementDefinition<`vira-${string}`, PartialWithUndefined<PopUpTriggerPosition & {
83
+ isDisabled: boolean;
84
+ /** For debugging purposes only. Very bad for actual production code use. */
85
+ z_debug_forceOpenState: boolean;
86
+ /** Set to `true` to keep the pop-up open if it is interacted with. */
87
+ keepOpenAfterInteraction: boolean;
88
+ /** All values in px. */
89
+ popUpOffset: PopUpOffset;
90
+ /** If true, the focus outline is moved inside the element. */
91
+ useInsideFocus: boolean;
92
+ /** When `true`, the trigger will focus itself when the pop-up closes. */
93
+ focusOnClose: boolean;
94
+ }>, {
95
+ /** `undefined` means the pop up is not currently showing. */
96
+ showPopUpResult: ShowPopUpResult | undefined;
97
+ popUpManager: PopUpManager;
98
+ }, {
99
+ navSelect: import("element-vir").DefineElementEvent<Coords>;
100
+ /**
101
+ * - `undefined` indicates that the pop-up just closed.
102
+ * - {@link ShowPopUpResult} indicates that the pop-up just opened.
103
+ */
104
+ openChange: import("element-vir").DefineElementEvent<ShowPopUpResult | undefined>;
105
+ init: import("element-vir").DefineElementEvent<{
106
+ navController: NavController;
107
+ popUpManager: PopUpManager;
108
+ }>;
109
+ }, "vira-pop-up-trigger-disabled" | "vira-pop-up-trigger-inside-focus" | "vira-pop-up-trigger-outside-focus", `vira-${string}-`, readonly ["vira-pop-up-trigger-trigger", "vira-pop-up-trigger-pop-up"], readonly []>;
@@ -0,0 +1,408 @@
1
+ import { assert, assertWrap } from '@augment-vir/assert';
2
+ import { walkActiveElement } from '@augment-vir/web';
3
+ import { NavController } from 'device-navigation';
4
+ import { classMap, css, defineElementEvent, html, listen, renderIf } from 'element-vir';
5
+ import { createFocusStyles } from '../../styles/focus.js';
6
+ import { noNativeFormStyles, noUserSelect, viraDisabledStyles } from '../../styles/index.js';
7
+ import { defineViraElement } from '../../util/define-vira-element.js';
8
+ import { triggerPopUpState } from '../../util/pop-up-helpers.js';
9
+ import { HidePopUpEvent, isInputLikeElement, isMouseEventOnScrollbar, NavSelectEvent, PopUpManager, } from '../../util/pop-up-manager.js';
10
+ import { ViraMenuItem } from './vira-menu-item.element.js';
11
+ /**
12
+ * Anchor options for pop-ups.
13
+ *
14
+ * @category Internal
15
+ */
16
+ export var HorizontalAnchor;
17
+ (function (HorizontalAnchor) {
18
+ /**
19
+ * The left side of the pop-up will be anchored to the left side of the trigger, allowing the
20
+ * pop-up to grow on the right side of the trigger.
21
+ */
22
+ HorizontalAnchor["Left"] = "left";
23
+ /**
24
+ * The Right side of the pop-up will be anchored to the right side of the trigger, allowing the
25
+ * pop-up to grow on the left side of the trigger.
26
+ */
27
+ HorizontalAnchor["Right"] = "right";
28
+ /** Restrict the pop-up on both sides. */
29
+ HorizontalAnchor["Both"] = "both";
30
+ /**
31
+ * Automatically choose left or right based on available space, defaulting to anchoring on the
32
+ * left side.
33
+ *
34
+ * This is the default anchor for {@link ViraPopUpTrigger}.
35
+ */
36
+ HorizontalAnchor["Auto"] = "auto";
37
+ })(HorizontalAnchor || (HorizontalAnchor = {}));
38
+ /**
39
+ * An element with slots for a pop-up trigger and pop-up contents.
40
+ *
41
+ * @category PopUp
42
+ * @category Elements
43
+ * @see https://electrovir.github.io/vira/book/elements/vira-pop-up-trigger
44
+ */
45
+ export const ViraPopUpTrigger = defineViraElement()({
46
+ tagName: 'vira-pop-up-trigger',
47
+ state({ host }) {
48
+ return {
49
+ /** `undefined` means the pop up is not currently showing. */
50
+ showPopUpResult: undefined,
51
+ popUpManager: new PopUpManager(new NavController(host, {
52
+ activateOnMouseUp: true,
53
+ })),
54
+ };
55
+ },
56
+ slotNames: [
57
+ 'vira-pop-up-trigger-trigger',
58
+ 'vira-pop-up-trigger-pop-up',
59
+ ],
60
+ hostClasses: {
61
+ 'vira-pop-up-trigger-disabled'({ inputs }) {
62
+ return !!inputs.isDisabled;
63
+ },
64
+ 'vira-pop-up-trigger-inside-focus'({ inputs }) {
65
+ return !!inputs.useInsideFocus;
66
+ },
67
+ 'vira-pop-up-trigger-outside-focus'({ inputs }) {
68
+ return !inputs.useInsideFocus;
69
+ },
70
+ },
71
+ styles({ hostClasses }) {
72
+ return css `
73
+ :host {
74
+ display: inline-flex;
75
+ box-sizing: border-box;
76
+ vertical-align: middle;
77
+ position: relative;
78
+ max-width: 100%;
79
+ }
80
+
81
+ .dropdown-wrapper {
82
+ ${noNativeFormStyles};
83
+ cursor: pointer;
84
+ max-width: 100%;
85
+ position: relative;
86
+ flex-grow: 1;
87
+ box-sizing: border-box;
88
+ }
89
+
90
+ ${hostClasses['vira-pop-up-trigger-inside-focus'].selector} .dropdown-wrapper {
91
+ ${createFocusStyles({
92
+ renderInside: true,
93
+ })}
94
+ }
95
+ ${hostClasses['vira-pop-up-trigger-outside-focus'].selector} .dropdown-wrapper {
96
+ ${createFocusStyles()}
97
+ }
98
+
99
+ .dropdown-trigger {
100
+ box-sizing: border-box;
101
+ ${noUserSelect};
102
+ }
103
+
104
+ ${hostClasses['vira-pop-up-trigger-disabled'].selector} {
105
+ ${viraDisabledStyles}
106
+ pointer-events: auto;
107
+ }
108
+
109
+ ${hostClasses['vira-pop-up-trigger-disabled'].selector} .dropdown-wrapper {
110
+ pointer-events: none;
111
+ }
112
+
113
+ .pop-up-positioner {
114
+ position: absolute;
115
+ pointer-events: none;
116
+ display: flex;
117
+ box-sizing: border-box;
118
+ flex-direction: column;
119
+ align-items: flex-start;
120
+
121
+ /* highest possible z-index */
122
+ z-index: 2147483647;
123
+
124
+ & > * {
125
+ pointer-events: auto;
126
+ max-width: 100%;
127
+ }
128
+
129
+ &.right-aligned {
130
+ align-items: flex-end;
131
+ }
132
+ }
133
+
134
+ .open-upwards .pop-up-positioner {
135
+ flex-direction: column-reverse;
136
+ }
137
+ `;
138
+ },
139
+ events: {
140
+ navSelect: defineElementEvent(),
141
+ /**
142
+ * - `undefined` indicates that the pop-up just closed.
143
+ * - {@link ShowPopUpResult} indicates that the pop-up just opened.
144
+ */
145
+ openChange: defineElementEvent(),
146
+ init: defineElementEvent(),
147
+ },
148
+ cleanup({ state, updateState }) {
149
+ updateState({
150
+ showPopUpResult: undefined,
151
+ });
152
+ state.popUpManager.destroy();
153
+ },
154
+ init({ state, updateState, host, inputs, dispatch, events }) {
155
+ /** Refocus the trigger and set the result to `undefined` when the pop up closes. */
156
+ state.popUpManager.listen(HidePopUpEvent, () => {
157
+ updateState({
158
+ showPopUpResult: undefined,
159
+ });
160
+ dispatch(new events.openChange({
161
+ detail: undefined,
162
+ }));
163
+ if (inputs.focusOnClose && !inputs.isDisabled) {
164
+ const dropdownWrapper = host.shadowRoot.querySelector('.dropdown-wrapper');
165
+ assert.instanceOf(dropdownWrapper, HTMLButtonElement, 'failed to find dropdown wrapper child');
166
+ dropdownWrapper.focus();
167
+ }
168
+ });
169
+ state.popUpManager.listen(NavSelectEvent, (event) => {
170
+ if (!inputs.keepOpenAfterInteraction) {
171
+ triggerPopUpState({
172
+ open: false,
173
+ callback(showPopUpResult) {
174
+ updateState({
175
+ showPopUpResult,
176
+ });
177
+ },
178
+ host,
179
+ popUpManager: state.popUpManager,
180
+ });
181
+ }
182
+ dispatch(new events.navSelect({
183
+ detail: event.detail,
184
+ }));
185
+ });
186
+ dispatch(new events.init({
187
+ detail: {
188
+ navController: state.popUpManager.navController,
189
+ popUpManager: state.popUpManager,
190
+ },
191
+ }));
192
+ },
193
+ render({ dispatch, events, state, inputs, updateState, host, slotNames }) {
194
+ function triggerPopUp({ emitEvent, open }, event) {
195
+ if (state.showPopUpResult && inputs.keepOpenAfterInteraction && event) {
196
+ const dropdownTrigger = host.shadowRoot.querySelector('.dropdown-trigger');
197
+ if (dropdownTrigger && !event.composedPath().includes(dropdownTrigger)) {
198
+ /**
199
+ * Prevent closing the pop-up when `keepOpenAfterInteraction` is turned on and
200
+ * the pop-up was interacted with.
201
+ */
202
+ return;
203
+ }
204
+ }
205
+ triggerPopUpState({
206
+ open,
207
+ callback(showPopUpResult) {
208
+ updateState({
209
+ showPopUpResult,
210
+ });
211
+ if (emitEvent) {
212
+ dispatch(new events.openChange({
213
+ detail: showPopUpResult,
214
+ }));
215
+ }
216
+ },
217
+ host,
218
+ popUpManager: state.popUpManager,
219
+ });
220
+ }
221
+ if (inputs.isDisabled) {
222
+ triggerPopUp({
223
+ open: false,
224
+ emitEvent: false,
225
+ }, undefined);
226
+ }
227
+ else if (inputs.z_debug_forceOpenState != undefined) {
228
+ if (!inputs.z_debug_forceOpenState && state.showPopUpResult) {
229
+ triggerPopUp({
230
+ emitEvent: false,
231
+ open: false,
232
+ }, undefined);
233
+ }
234
+ else if (inputs.z_debug_forceOpenState && !state.showPopUpResult) {
235
+ triggerPopUp({
236
+ emitEvent: false,
237
+ open: true,
238
+ }, undefined);
239
+ }
240
+ }
241
+ /**
242
+ * Resolve the effective horizontal anchor. For Auto, use the popRight calculation from
243
+ * showPopUpResult to determine whether to anchor left or right.
244
+ */
245
+ const effectiveHorizontalAnchor = inputs.horizontalAnchor === HorizontalAnchor.Auto ||
246
+ inputs.horizontalAnchor == undefined
247
+ ? state.showPopUpResult?.popRight
248
+ ? HorizontalAnchor.Left
249
+ : HorizontalAnchor.Right
250
+ : inputs.horizontalAnchor;
251
+ const leftCss = effectiveHorizontalAnchor === HorizontalAnchor.Right && state.showPopUpResult
252
+ ? inputs.ignoreMaxWidth
253
+ ? css `
254
+ left: unset;
255
+ `
256
+ : css `
257
+ left: -${state.showPopUpResult.positions.diff.left}px;
258
+ `
259
+ : css `
260
+ left: ${inputs.popUpOffset?.left || 0}px;
261
+ `;
262
+ const rightCss = state.showPopUpResult && effectiveHorizontalAnchor === HorizontalAnchor.Left
263
+ ? inputs.ignoreMaxWidth
264
+ ? css `
265
+ right: unset;
266
+ `
267
+ : css `
268
+ right: -${state.showPopUpResult.positions.diff.right}px;
269
+ `
270
+ : css `
271
+ right: ${inputs.popUpOffset?.right || 0}px;
272
+ `;
273
+ const horizontalPositionStyle = css `
274
+ ${leftCss}
275
+ ${rightCss}
276
+ `;
277
+ /**
278
+ * These styles do _not_ account for window resizing while the menu is open. I decided this
279
+ * was not a major enough problem to tackle. If it becomes major enough in the future,
280
+ * you'll need to hook into a window _or_ container resize listener inside `PopUpManager`
281
+ * and emit a new `ShowPopUpResult` instance when it changes.
282
+ */
283
+ const positionerStyles = state.showPopUpResult
284
+ ? state.showPopUpResult.popDown
285
+ ? /** Dropdown going down position. */
286
+ inputs.ignoreMaxHeight
287
+ ? css `
288
+ bottom: unset;
289
+ top: calc(100% + ${inputs.popUpOffset?.vertical || 0}px);
290
+ ${horizontalPositionStyle}
291
+ `
292
+ : css `
293
+ bottom: -${state.showPopUpResult.positions.diff.bottom}px;
294
+ top: calc(100% + ${inputs.popUpOffset?.vertical || 0}px);
295
+ ${horizontalPositionStyle}
296
+ `
297
+ : /** Dropdown going up position. */
298
+ inputs.ignoreMaxHeight
299
+ ? css `
300
+ top: unset;
301
+ bottom: calc(100% + ${inputs.popUpOffset?.vertical || 0}px);
302
+ ${horizontalPositionStyle}
303
+ `
304
+ : css `
305
+ top: -${state.showPopUpResult.positions.diff.top}px;
306
+ bottom: calc(100% + ${inputs.popUpOffset?.vertical || 0}px);
307
+ ${horizontalPositionStyle}
308
+ `
309
+ : undefined;
310
+ function respondToClick(event) {
311
+ triggerPopUp({
312
+ emitEvent: true,
313
+ open: !state.showPopUpResult,
314
+ }, event);
315
+ }
316
+ return html `
317
+ <button
318
+ ?disabled=${!!inputs.isDisabled}
319
+ class="dropdown-wrapper ${classMap({
320
+ open: !!state.showPopUpResult,
321
+ 'open-upwards': !state.showPopUpResult?.popDown,
322
+ })}"
323
+ role="listbox"
324
+ aria-expanded=${!!state.showPopUpResult}
325
+ ${listen('keydown', (event) => {
326
+ if (!state.showPopUpResult && event.code.startsWith('Arrow')) {
327
+ triggerPopUp({
328
+ emitEvent: true,
329
+ open: true,
330
+ }, event);
331
+ }
332
+ })}
333
+ ${listen('click', (event) => {
334
+ /** Detail is 0 if it was a keyboard key (like Enter) that triggered this click. */
335
+ if (event.detail === 0) {
336
+ let isTextActiveElement = false;
337
+ walkActiveElement(({ element }) => {
338
+ if (isInputLikeElement(element)) {
339
+ isTextActiveElement = true;
340
+ return true;
341
+ }
342
+ else {
343
+ return false;
344
+ }
345
+ });
346
+ if (isTextActiveElement) {
347
+ return;
348
+ }
349
+ respondToClick(event);
350
+ }
351
+ else if (event.button === 0 &&
352
+ state.showPopUpResult &&
353
+ !isMouseEventOnScrollbar(event)) {
354
+ const dropdownTrigger = host.shadowRoot.querySelector('.dropdown-trigger');
355
+ /**
356
+ * Close the menu when a mouse click originates from the pop-up area (e.g. a
357
+ * menu item was clicked). The trigger's mousedown already handles
358
+ * open/close toggling for the trigger itself.
359
+ */
360
+ if (dropdownTrigger && !event.composedPath().includes(dropdownTrigger)) {
361
+ triggerPopUp({
362
+ emitEvent: true,
363
+ open: false,
364
+ }, event);
365
+ }
366
+ }
367
+ })}
368
+ ${listen('mousedown', (event) => {
369
+ /** Ignore any clicks that aren't the main button. */
370
+ if (event.button !== 0) {
371
+ return;
372
+ }
373
+ const dropdownTrigger = assertWrap.instanceOf(host.shadowRoot.querySelector('.dropdown-trigger'), HTMLElement);
374
+ /**
375
+ * Only respond if the mousedown originated from the trigger slot, not from
376
+ * within the pop-up menu items, to avoid prematurely closing the menu.
377
+ */
378
+ if (event.composedPath().includes(dropdownTrigger)) {
379
+ respondToClick(event);
380
+ }
381
+ })}
382
+ ${listen(ViraMenuItem.events.activate, (event) => {
383
+ if (state.showPopUpResult) {
384
+ triggerPopUp({
385
+ emitEvent: true,
386
+ open: false,
387
+ }, event);
388
+ }
389
+ })}
390
+ >
391
+ <div class="dropdown-trigger">
392
+ <slot name=${slotNames['vira-pop-up-trigger-trigger']}></slot>
393
+ </div>
394
+
395
+ <div
396
+ class="pop-up-positioner ${classMap({
397
+ 'right-aligned': effectiveHorizontalAnchor === HorizontalAnchor.Right,
398
+ })}"
399
+ style=${positionerStyles}
400
+ >
401
+ ${renderIf(!!state.showPopUpResult, html `
402
+ <slot name=${slotNames['vira-pop-up-trigger-pop-up']}></slot>
403
+ `)}
404
+ </div>
405
+ </button>
406
+ `;
407
+ },
408
+ });
@@ -0,0 +1,35 @@
1
+ import { type PartialWithUndefined } from '@augment-vir/common';
2
+ import { type FullDate, type Timezone } from 'date-vir';
3
+ /**
4
+ * Displays a `FullDate` as an absolute, human readable timestamp in the user's timezone (for
5
+ * example `Jun 3, 2026 14:30 PDT`).
6
+ *
7
+ * @category Time
8
+ * @category Elements
9
+ * @see https://electrovir.github.io/vira/book/elements/vira-absolute-time
10
+ */
11
+ export declare const ViraAbsoluteTime: import("element-vir").DeclarativeElementDefinition<"vira-absolute-time", {
12
+ time: Readonly<FullDate>;
13
+ } & PartialWithUndefined<{
14
+ /** Show only the date part (`Jun 3, 2026`), omitting the time of day and timezone. */
15
+ showDateOnly: boolean;
16
+ /** Show only the time part (`14:30 PDT`), omitting the date. */
17
+ showTimeOnly: boolean;
18
+ /**
19
+ * Timezone the value is displayed in. Defaults to the user's timezone. Set this for values
20
+ * that are conceptually anchored to a specific timezone (e.g. a date-only value stored at
21
+ * midnight UTC), where converting to the user's timezone would shift the displayed
22
+ * date/time.
23
+ */
24
+ timezone: Timezone;
25
+ }>, {}, {}, "vira-absolute-time-", "vira-absolute-time-", readonly [], readonly []>;
26
+ /**
27
+ * Formats a `FullDate` into the same absolute string rendered by {@link ViraAbsoluteTime}.
28
+ *
29
+ * @category Time
30
+ */
31
+ export declare function formatAbsoluteTime(time: Readonly<FullDate>, options?: Readonly<PartialWithUndefined<{
32
+ showDateOnly: boolean;
33
+ showTimeOnly: boolean;
34
+ timezone: Timezone;
35
+ }>>): string;
@@ -0,0 +1,43 @@
1
+ import { check } from '@augment-vir/assert';
2
+ import { createFullDate, createFullDateInUserTimezone, toFormattedString, } from 'date-vir';
3
+ import { css } from 'element-vir';
4
+ import { defineViraElement } from '../util/define-vira-element.js';
5
+ /**
6
+ * Displays a `FullDate` as an absolute, human readable timestamp in the user's timezone (for
7
+ * example `Jun 3, 2026 14:30 PDT`).
8
+ *
9
+ * @category Time
10
+ * @category Elements
11
+ * @see https://electrovir.github.io/vira/book/elements/vira-absolute-time
12
+ */
13
+ export const ViraAbsoluteTime = defineViraElement()({
14
+ tagName: 'vira-absolute-time',
15
+ styles: css `
16
+ :host {
17
+ white-space: nowrap;
18
+ }
19
+ `,
20
+ render({ inputs }) {
21
+ return formatAbsoluteTime(inputs.time, {
22
+ showDateOnly: inputs.showDateOnly,
23
+ showTimeOnly: inputs.showTimeOnly,
24
+ timezone: inputs.timezone,
25
+ });
26
+ },
27
+ });
28
+ /**
29
+ * Formats a `FullDate` into the same absolute string rendered by {@link ViraAbsoluteTime}.
30
+ *
31
+ * @category Time
32
+ */
33
+ export function formatAbsoluteTime(time, options) {
34
+ const dateFormat = [
35
+ !options?.showTimeOnly && 'MMM d, yyyy',
36
+ !options?.showDateOnly && 'HH:mm ZZZZ',
37
+ ]
38
+ .filter(check.isTruthy)
39
+ .join(' ');
40
+ return toFormattedString(options?.timezone
41
+ ? createFullDate(time, options.timezone)
42
+ : createFullDateInUserTimezone(time), dateFormat);
43
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Use this element to reserve space for bolded text, even if it isn't bold yet.
3
+ *
4
+ * @category Elements
5
+ */
6
+ export declare const ViraBoldText: import("element-vir").DeclarativeElementDefinition<"vira-bold", {
7
+ bold: boolean;
8
+ text: string;
9
+ }, {}, {}, "vira-bold-bold", "vira-bold-bold-weight", readonly [], readonly []>;
@@ -1,22 +1,23 @@
1
- import {css, html} from 'element-vir';
2
- import {viraFontCssVars} from '../styles/font.js';
3
- import {defineViraElement} from '../util/define-vira-element.js';
4
-
1
+ import { css, html } from 'element-vir';
2
+ import { viraFontCssVars } from '../styles/font.js';
3
+ import { defineViraElement } from '../util/define-vira-element.js';
5
4
  /**
6
5
  * Use this element to reserve space for bolded text, even if it isn't bold yet.
7
6
  *
8
7
  * @category Elements
9
8
  */
10
- export const ViraBoldText = defineViraElement<{bold: boolean; text: string}>()({
9
+ export const ViraBoldText = defineViraElement()({
11
10
  tagName: 'vira-bold',
12
11
  cssVars: {
13
12
  'vira-bold-bold-weight': viraFontCssVars['vira-font-weight-bold'].value,
14
13
  },
15
14
  hostClasses: {
16
- 'vira-bold-bold': ({inputs}) => inputs.bold,
15
+ 'vira-bold-bold'({ inputs }) {
16
+ return inputs.bold;
17
+ },
17
18
  },
18
- styles: ({hostClasses, cssVars}) => {
19
- return css`
19
+ styles({ hostClasses, cssVars }) {
20
+ return css `
20
21
  span {
21
22
  text-decoration: inherit;
22
23
  white-space: inherit;
@@ -55,8 +56,8 @@ export const ViraBoldText = defineViraElement<{bold: boolean; text: string}>()({
55
56
  }
56
57
  `;
57
58
  },
58
- render({inputs}) {
59
- return html`
59
+ render({ inputs }) {
60
+ return html `
60
61
  <span class="everything-wrapper">
61
62
  <span class="bold-wrapper">
62
63
  <span class="bold">${inputs.text}</span>