@hashicorp/design-system-components 4.15.0 → 4.17.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 (525) hide show
  1. package/README.md +4 -8
  2. package/declarations/components/hds/advanced-table/expandable-tr-group.d.ts +45 -0
  3. package/declarations/components/hds/advanced-table/expandable-tr-group.d.ts.map +1 -0
  4. package/declarations/components/hds/advanced-table/index.d.ts +83 -0
  5. package/declarations/components/hds/advanced-table/index.d.ts.map +1 -0
  6. package/declarations/components/hds/advanced-table/td.d.ts +34 -0
  7. package/declarations/components/hds/advanced-table/td.d.ts.map +1 -0
  8. package/declarations/components/hds/advanced-table/th-button-expand.d.ts +22 -0
  9. package/declarations/components/hds/advanced-table/th-button-expand.d.ts.map +1 -0
  10. package/declarations/components/hds/advanced-table/th-button-sort.d.ts +23 -0
  11. package/declarations/components/hds/advanced-table/th-button-sort.d.ts.map +1 -0
  12. package/declarations/components/hds/advanced-table/th-button-tooltip.d.ts +18 -0
  13. package/declarations/components/hds/advanced-table/th-button-tooltip.d.ts.map +1 -0
  14. package/declarations/components/hds/advanced-table/th-selectable.d.ts +36 -0
  15. package/declarations/components/hds/advanced-table/th-selectable.d.ts.map +1 -0
  16. package/declarations/components/hds/advanced-table/th-sort.d.ts +38 -0
  17. package/declarations/components/hds/advanced-table/th-sort.d.ts.map +1 -0
  18. package/declarations/components/hds/advanced-table/th.d.ts +47 -0
  19. package/declarations/components/hds/advanced-table/th.d.ts.map +1 -0
  20. package/declarations/components/hds/advanced-table/tr.d.ts +44 -0
  21. package/declarations/components/hds/advanced-table/tr.d.ts.map +1 -0
  22. package/declarations/components/hds/advanced-table/types.d.ts +85 -0
  23. package/declarations/components/hds/advanced-table/types.d.ts.map +1 -0
  24. package/declarations/components/hds/alert/index.d.ts +2 -1
  25. package/declarations/components/hds/alert/index.d.ts.map +1 -1
  26. package/declarations/components/hds/app-footer/status-link.d.ts +3 -2
  27. package/declarations/components/hds/app-footer/status-link.d.ts.map +1 -1
  28. package/declarations/components/hds/app-header/index.d.ts +2 -1
  29. package/declarations/components/hds/app-header/index.d.ts.map +1 -1
  30. package/declarations/components/hds/app-side-nav/index.d.ts +2 -1
  31. package/declarations/components/hds/app-side-nav/index.d.ts.map +1 -1
  32. package/declarations/components/hds/app-side-nav/portal/target.d.ts.map +1 -1
  33. package/declarations/components/hds/breadcrumb/item.d.ts +1 -1
  34. package/declarations/components/hds/breadcrumb/item.d.ts.map +1 -1
  35. package/declarations/components/hds/code-block/copy-button.d.ts +5 -2
  36. package/declarations/components/hds/code-block/copy-button.d.ts.map +1 -1
  37. package/declarations/components/hds/code-block/index.d.ts +3 -0
  38. package/declarations/components/hds/code-block/index.d.ts.map +1 -1
  39. package/declarations/components/hds/code-editor/description.d.ts +22 -0
  40. package/declarations/components/hds/code-editor/description.d.ts.map +1 -0
  41. package/declarations/components/hds/code-editor/full-screen-button.d.ts +18 -0
  42. package/declarations/components/hds/code-editor/full-screen-button.d.ts.map +1 -0
  43. package/declarations/components/hds/code-editor/generic.d.ts +13 -0
  44. package/declarations/components/hds/code-editor/generic.d.ts.map +1 -0
  45. package/declarations/components/hds/code-editor/index.d.ts +54 -0
  46. package/declarations/components/hds/code-editor/index.d.ts.map +1 -0
  47. package/declarations/components/hds/code-editor/title.d.ts +24 -0
  48. package/declarations/components/hds/code-editor/title.d.ts.map +1 -0
  49. package/declarations/components/hds/dropdown/list-item/interactive.d.ts +2 -1
  50. package/declarations/components/hds/dropdown/list-item/interactive.d.ts.map +1 -1
  51. package/declarations/components/hds/dropdown/toggle/icon.d.ts +2 -1
  52. package/declarations/components/hds/dropdown/toggle/icon.d.ts.map +1 -1
  53. package/declarations/components/hds/flyout/body.d.ts +2 -1
  54. package/declarations/components/hds/flyout/body.d.ts.map +1 -1
  55. package/declarations/components/hds/flyout/description.d.ts +2 -1
  56. package/declarations/components/hds/flyout/description.d.ts.map +1 -1
  57. package/declarations/components/hds/flyout/footer.d.ts +2 -1
  58. package/declarations/components/hds/flyout/footer.d.ts.map +1 -1
  59. package/declarations/components/hds/flyout/header.d.ts +2 -1
  60. package/declarations/components/hds/flyout/header.d.ts.map +1 -1
  61. package/declarations/components/hds/form/masked-input/base.d.ts +5 -2
  62. package/declarations/components/hds/form/masked-input/base.d.ts.map +1 -1
  63. package/declarations/components/hds/form/super-select/multiple/base.d.ts +1 -1
  64. package/declarations/components/hds/form/super-select/multiple/base.d.ts.map +1 -1
  65. package/declarations/components/hds/form/super-select/single/base.d.ts +1 -1
  66. package/declarations/components/hds/form/super-select/single/base.d.ts.map +1 -1
  67. package/declarations/components/hds/form/text-input/field.d.ts +3 -2
  68. package/declarations/components/hds/form/text-input/field.d.ts.map +1 -1
  69. package/declarations/components/hds/icon/index.d.ts +2 -1
  70. package/declarations/components/hds/icon/index.d.ts.map +1 -1
  71. package/declarations/components/hds/interactive/index.d.ts +1 -1
  72. package/declarations/components/hds/interactive/index.d.ts.map +1 -1
  73. package/declarations/components/hds/link/inline.d.ts +2 -1
  74. package/declarations/components/hds/link/inline.d.ts.map +1 -1
  75. package/declarations/components/hds/link/standalone.d.ts +2 -1
  76. package/declarations/components/hds/link/standalone.d.ts.map +1 -1
  77. package/declarations/components/hds/menu-primitive/index.d.ts +2 -1
  78. package/declarations/components/hds/menu-primitive/index.d.ts.map +1 -1
  79. package/declarations/components/hds/modal/body.d.ts +2 -1
  80. package/declarations/components/hds/modal/body.d.ts.map +1 -1
  81. package/declarations/components/hds/modal/footer.d.ts +2 -1
  82. package/declarations/components/hds/modal/footer.d.ts.map +1 -1
  83. package/declarations/components/hds/modal/header.d.ts +2 -1
  84. package/declarations/components/hds/modal/header.d.ts.map +1 -1
  85. package/declarations/components/hds/pagination/compact/index.d.ts +2 -1
  86. package/declarations/components/hds/pagination/compact/index.d.ts.map +1 -1
  87. package/declarations/components/hds/pagination/numbered/index.d.ts +3 -2
  88. package/declarations/components/hds/pagination/numbered/index.d.ts.map +1 -1
  89. package/declarations/components/hds/popover-primitive/index.d.ts +2 -1
  90. package/declarations/components/hds/popover-primitive/index.d.ts.map +1 -1
  91. package/declarations/components/hds/rich-tooltip/toggle.d.ts.map +1 -1
  92. package/declarations/components/hds/side-nav/header/icon-button.d.ts +2 -1
  93. package/declarations/components/hds/side-nav/header/icon-button.d.ts.map +1 -1
  94. package/declarations/components/hds/side-nav/index.d.ts +2 -1
  95. package/declarations/components/hds/side-nav/index.d.ts.map +1 -1
  96. package/declarations/components/hds/side-nav/portal/target.d.ts.map +1 -1
  97. package/declarations/components/hds/stepper/task/indicator.d.ts +1 -1
  98. package/declarations/components/hds/stepper/task/indicator.d.ts.map +1 -1
  99. package/declarations/components/hds/table/index.d.ts +2 -1
  100. package/declarations/components/hds/table/index.d.ts.map +1 -1
  101. package/declarations/components/hds/table/th-selectable.d.ts +3 -3
  102. package/declarations/components/hds/table/th-selectable.d.ts.map +1 -1
  103. package/declarations/components/hds/tabs/index.d.ts +2 -1
  104. package/declarations/components/hds/tabs/index.d.ts.map +1 -1
  105. package/declarations/components/hds/tabs/tab.d.ts +7 -1
  106. package/declarations/components/hds/tabs/tab.d.ts.map +1 -1
  107. package/declarations/components/hds/tag/index.d.ts +16 -0
  108. package/declarations/components/hds/tag/index.d.ts.map +1 -1
  109. package/declarations/components/hds/tag/types.d.ts +15 -0
  110. package/declarations/components/hds/tag/types.d.ts.map +1 -1
  111. package/declarations/components/hds/time/index.d.ts.map +1 -1
  112. package/declarations/components.d.ts +15 -0
  113. package/declarations/components.d.ts.map +1 -1
  114. package/declarations/helpers/hds-format-date.d.ts +16 -3
  115. package/declarations/helpers/hds-format-date.d.ts.map +1 -1
  116. package/declarations/helpers/hds-format-relative.d.ts +9 -3
  117. package/declarations/helpers/hds-format-relative.d.ts.map +1 -1
  118. package/declarations/helpers/hds-link-to-models.d.ts +7 -1
  119. package/declarations/helpers/hds-link-to-models.d.ts.map +1 -1
  120. package/declarations/helpers/hds-link-to-query.d.ts +7 -1
  121. package/declarations/helpers/hds-link-to-query.d.ts.map +1 -1
  122. package/declarations/instance-initializers/load-sprite.d.ts.map +1 -1
  123. package/declarations/modifiers/hds-advanced-table-cell/dom-management.d.ts +10 -0
  124. package/declarations/modifiers/hds-advanced-table-cell/dom-management.d.ts.map +1 -0
  125. package/declarations/modifiers/hds-advanced-table-cell/keyboard-navigation.d.ts +6 -0
  126. package/declarations/modifiers/hds-advanced-table-cell/keyboard-navigation.d.ts.map +1 -0
  127. package/declarations/modifiers/hds-advanced-table-cell.d.ts +26 -0
  128. package/declarations/modifiers/hds-advanced-table-cell.d.ts.map +1 -0
  129. package/declarations/modifiers/hds-clipboard.d.ts.map +1 -1
  130. package/declarations/modifiers/hds-code-editor/highlight-styles/hds-dark-highlight-style.d.ts +8 -0
  131. package/declarations/modifiers/hds-code-editor/highlight-styles/hds-dark-highlight-style.d.ts.map +1 -0
  132. package/declarations/modifiers/hds-code-editor/languages/rego.d.ts +48 -0
  133. package/declarations/modifiers/hds-code-editor/languages/rego.d.ts.map +1 -0
  134. package/declarations/modifiers/hds-code-editor/languages/sentinel.d.ts +48 -0
  135. package/declarations/modifiers/hds-code-editor/languages/sentinel.d.ts.map +1 -0
  136. package/declarations/modifiers/hds-code-editor/palettes/hds-dark-palette.d.ts +21 -0
  137. package/declarations/modifiers/hds-code-editor/palettes/hds-dark-palette.d.ts.map +1 -0
  138. package/declarations/modifiers/hds-code-editor/themes/hds-dark-theme.d.ts +7 -0
  139. package/declarations/modifiers/hds-code-editor/themes/hds-dark-theme.d.ts.map +1 -0
  140. package/declarations/modifiers/hds-code-editor/types.d.ts +18 -0
  141. package/declarations/modifiers/hds-code-editor/types.d.ts.map +1 -0
  142. package/declarations/modifiers/hds-code-editor.d.ts +47 -0
  143. package/declarations/modifiers/hds-code-editor.d.ts.map +1 -0
  144. package/declarations/modifiers/hds-tooltip.d.ts +4 -2
  145. package/declarations/modifiers/hds-tooltip.d.ts.map +1 -1
  146. package/declarations/services/hds-time-types.d.ts +7 -7
  147. package/declarations/services/hds-time-types.d.ts.map +1 -1
  148. package/declarations/services/hds-time.d.ts +7 -3
  149. package/declarations/services/hds-time.d.ts.map +1 -1
  150. package/declarations/template-registry.d.ts +49 -0
  151. package/declarations/template-registry.d.ts.map +1 -1
  152. package/dist/README.md +4 -8
  153. package/dist/_app_/components/hds/advanced-table/expandable-tr-group.js +1 -0
  154. package/dist/_app_/components/hds/advanced-table/index.js +1 -0
  155. package/dist/_app_/components/hds/advanced-table/td.js +1 -0
  156. package/dist/_app_/components/hds/advanced-table/th-button-expand.js +1 -0
  157. package/dist/_app_/components/hds/advanced-table/th-button-sort.js +1 -0
  158. package/dist/_app_/components/hds/advanced-table/th-button-tooltip.js +1 -0
  159. package/dist/_app_/components/hds/advanced-table/th-selectable.js +1 -0
  160. package/dist/_app_/components/hds/advanced-table/th-sort.js +1 -0
  161. package/dist/_app_/components/hds/advanced-table/th.js +1 -0
  162. package/dist/_app_/components/hds/advanced-table/tr.js +1 -0
  163. package/dist/_app_/components/hds/code-editor/description.js +1 -0
  164. package/dist/_app_/components/hds/code-editor/full-screen-button.js +1 -0
  165. package/dist/_app_/components/hds/code-editor/generic.js +1 -0
  166. package/dist/_app_/components/hds/code-editor/index.js +1 -0
  167. package/dist/_app_/components/hds/code-editor/title.js +1 -0
  168. package/dist/_app_/modifiers/hds-advanced-table-cell/dom-management.js +1 -0
  169. package/dist/_app_/modifiers/hds-advanced-table-cell/keyboard-navigation.js +1 -0
  170. package/dist/_app_/modifiers/hds-advanced-table-cell.js +1 -0
  171. package/dist/_app_/modifiers/hds-code-editor/highlight-styles/hds-dark-highlight-style.js +1 -0
  172. package/dist/_app_/modifiers/hds-code-editor/languages/rego.js +1 -0
  173. package/dist/_app_/modifiers/hds-code-editor/languages/sentinel.js +1 -0
  174. package/dist/_app_/modifiers/hds-code-editor/palettes/hds-dark-palette.js +1 -0
  175. package/dist/_app_/modifiers/hds-code-editor/themes/hds-dark-theme.js +1 -0
  176. package/dist/_app_/modifiers/hds-code-editor/types.js +1 -0
  177. package/dist/_app_/modifiers/hds-code-editor.js +1 -0
  178. package/dist/components/hds/accordion/index.js.map +1 -1
  179. package/dist/components/hds/accordion/item/button.js +11 -4
  180. package/dist/components/hds/accordion/item/button.js.map +1 -1
  181. package/dist/components/hds/accordion/item/index.js +12 -11
  182. package/dist/components/hds/accordion/item/index.js.map +1 -1
  183. package/dist/components/hds/advanced-table/expandable-tr-group.js +74 -0
  184. package/dist/components/hds/advanced-table/expandable-tr-group.js.map +1 -0
  185. package/dist/components/hds/advanced-table/index.js +328 -0
  186. package/dist/components/hds/advanced-table/index.js.map +1 -0
  187. package/dist/components/hds/advanced-table/td.js +89 -0
  188. package/dist/components/hds/advanced-table/td.js.map +1 -0
  189. package/dist/components/hds/advanced-table/th-button-expand.js +53 -0
  190. package/dist/components/hds/advanced-table/th-button-expand.js.map +1 -0
  191. package/dist/components/hds/advanced-table/th-button-sort.js +58 -0
  192. package/dist/components/hds/advanced-table/th-button-sort.js.map +1 -0
  193. package/dist/components/hds/advanced-table/th-button-tooltip.js +29 -0
  194. package/dist/components/hds/advanced-table/th-button-tooltip.js.map +1 -0
  195. package/dist/components/hds/advanced-table/th-selectable.js +100 -0
  196. package/dist/components/hds/advanced-table/th-selectable.js.map +1 -0
  197. package/dist/components/hds/advanced-table/th-sort.js +88 -0
  198. package/dist/components/hds/advanced-table/th-sort.js.map +1 -0
  199. package/dist/components/hds/advanced-table/th.js +105 -0
  200. package/dist/components/hds/advanced-table/th.js.map +1 -0
  201. package/dist/components/hds/advanced-table/tr.js +39 -0
  202. package/dist/components/hds/advanced-table/tr.js.map +1 -0
  203. package/dist/components/hds/advanced-table/types.js +54 -0
  204. package/dist/components/hds/advanced-table/types.js.map +1 -0
  205. package/dist/components/hds/alert/description.js.map +1 -1
  206. package/dist/components/hds/alert/index.js +19 -16
  207. package/dist/components/hds/alert/index.js.map +1 -1
  208. package/dist/components/hds/alert/title.js.map +1 -1
  209. package/dist/components/hds/app-footer/copyright.js.map +1 -1
  210. package/dist/components/hds/app-footer/index.js.map +1 -1
  211. package/dist/components/hds/app-footer/item.js.map +1 -1
  212. package/dist/components/hds/app-footer/legal-links.js.map +1 -1
  213. package/dist/components/hds/app-footer/link.js.map +1 -1
  214. package/dist/components/hds/app-footer/status-link.js.map +1 -1
  215. package/dist/components/hds/app-frame/index.js.map +1 -1
  216. package/dist/components/hds/app-frame/parts/footer.js.map +1 -1
  217. package/dist/components/hds/app-frame/parts/header.js.map +1 -1
  218. package/dist/components/hds/app-frame/parts/main.js.map +1 -1
  219. package/dist/components/hds/app-frame/parts/modals.js.map +1 -1
  220. package/dist/components/hds/app-frame/parts/sidebar.js.map +1 -1
  221. package/dist/components/hds/app-header/home-link.js.map +1 -1
  222. package/dist/components/hds/app-header/index.js +42 -34
  223. package/dist/components/hds/app-header/index.js.map +1 -1
  224. package/dist/components/hds/app-header/menu-button.js +11 -4
  225. package/dist/components/hds/app-header/menu-button.js.map +1 -1
  226. package/dist/components/hds/app-side-nav/index.js +44 -31
  227. package/dist/components/hds/app-side-nav/index.js.map +1 -1
  228. package/dist/components/hds/app-side-nav/list/back-link.js.map +1 -1
  229. package/dist/components/hds/app-side-nav/list/index.js +15 -13
  230. package/dist/components/hds/app-side-nav/list/index.js.map +1 -1
  231. package/dist/components/hds/app-side-nav/list/item.js.map +1 -1
  232. package/dist/components/hds/app-side-nav/list/link.js.map +1 -1
  233. package/dist/components/hds/app-side-nav/list/title.js +13 -9
  234. package/dist/components/hds/app-side-nav/list/title.js.map +1 -1
  235. package/dist/components/hds/app-side-nav/portal/index.js.map +1 -1
  236. package/dist/components/hds/app-side-nav/portal/target.js +31 -28
  237. package/dist/components/hds/app-side-nav/portal/target.js.map +1 -1
  238. package/dist/components/hds/app-side-nav/toggle-button.js.map +1 -1
  239. package/dist/components/hds/application-state/body.js.map +1 -1
  240. package/dist/components/hds/application-state/footer.js.map +1 -1
  241. package/dist/components/hds/application-state/header.js.map +1 -1
  242. package/dist/components/hds/application-state/index.js.map +1 -1
  243. package/dist/components/hds/application-state/media.js.map +1 -1
  244. package/dist/components/hds/badge/index.js.map +1 -1
  245. package/dist/components/hds/badge-count/index.js.map +1 -1
  246. package/dist/components/hds/breadcrumb/index.js.map +1 -1
  247. package/dist/components/hds/breadcrumb/item.js +1 -1
  248. package/dist/components/hds/breadcrumb/item.js.map +1 -1
  249. package/dist/components/hds/breadcrumb/truncation.js.map +1 -1
  250. package/dist/components/hds/button/index.js.map +1 -1
  251. package/dist/components/hds/button-set/index.js.map +1 -1
  252. package/dist/components/hds/card/container.js.map +1 -1
  253. package/dist/components/hds/code-block/copy-button.js +9 -5
  254. package/dist/components/hds/code-block/copy-button.js.map +1 -1
  255. package/dist/components/hds/code-block/description.js.map +1 -1
  256. package/dist/components/hds/code-block/index.js +27 -21
  257. package/dist/components/hds/code-block/index.js.map +1 -1
  258. package/dist/components/hds/code-block/title.js.map +1 -1
  259. package/dist/components/hds/code-editor/description.js +18 -0
  260. package/dist/components/hds/code-editor/description.js.map +1 -0
  261. package/dist/components/hds/code-editor/full-screen-button.js +26 -0
  262. package/dist/components/hds/code-editor/full-screen-button.js.map +1 -0
  263. package/dist/components/hds/code-editor/generic.js +16 -0
  264. package/dist/components/hds/code-editor/generic.js.map +1 -0
  265. package/dist/components/hds/code-editor/index.js +135 -0
  266. package/dist/components/hds/code-editor/index.js.map +1 -0
  267. package/dist/components/hds/code-editor/title.js +21 -0
  268. package/dist/components/hds/code-editor/title.js.map +1 -0
  269. package/dist/components/hds/copy/button/index.js +23 -20
  270. package/dist/components/hds/copy/button/index.js.map +1 -1
  271. package/dist/components/hds/copy/snippet/index.js +23 -20
  272. package/dist/components/hds/copy/snippet/index.js.map +1 -1
  273. package/dist/components/hds/dialog-primitive/body.js.map +1 -1
  274. package/dist/components/hds/dialog-primitive/description.js.map +1 -1
  275. package/dist/components/hds/dialog-primitive/footer.js.map +1 -1
  276. package/dist/components/hds/dialog-primitive/header.js.map +1 -1
  277. package/dist/components/hds/dialog-primitive/overlay.js.map +1 -1
  278. package/dist/components/hds/dialog-primitive/wrapper.js.map +1 -1
  279. package/dist/components/hds/disclosure-primitive/index.js +27 -21
  280. package/dist/components/hds/disclosure-primitive/index.js.map +1 -1
  281. package/dist/components/hds/dismiss-button/index.js.map +1 -1
  282. package/dist/components/hds/dropdown/footer.js.map +1 -1
  283. package/dist/components/hds/dropdown/header.js.map +1 -1
  284. package/dist/components/hds/dropdown/index.js +12 -5
  285. package/dist/components/hds/dropdown/index.js.map +1 -1
  286. package/dist/components/hds/dropdown/list-item/checkbox.js.map +1 -1
  287. package/dist/components/hds/dropdown/list-item/checkmark.js.map +1 -1
  288. package/dist/components/hds/dropdown/list-item/copy-item.js.map +1 -1
  289. package/dist/components/hds/dropdown/list-item/description.js.map +1 -1
  290. package/dist/components/hds/dropdown/list-item/generic.js.map +1 -1
  291. package/dist/components/hds/dropdown/list-item/interactive.js.map +1 -1
  292. package/dist/components/hds/dropdown/list-item/radio.js.map +1 -1
  293. package/dist/components/hds/dropdown/list-item/separator.js.map +1 -1
  294. package/dist/components/hds/dropdown/list-item/title.js.map +1 -1
  295. package/dist/components/hds/dropdown/toggle/button.js +12 -10
  296. package/dist/components/hds/dropdown/toggle/button.js.map +1 -1
  297. package/dist/components/hds/dropdown/toggle/chevron.js.map +1 -1
  298. package/dist/components/hds/dropdown/toggle/icon.js +20 -12
  299. package/dist/components/hds/dropdown/toggle/icon.js.map +1 -1
  300. package/dist/components/hds/flyout/body.js +2 -1
  301. package/dist/components/hds/flyout/body.js.map +1 -1
  302. package/dist/components/hds/flyout/description.js +1 -0
  303. package/dist/components/hds/flyout/description.js.map +1 -1
  304. package/dist/components/hds/flyout/footer.js +2 -1
  305. package/dist/components/hds/flyout/footer.js.map +1 -1
  306. package/dist/components/hds/flyout/header.js +2 -1
  307. package/dist/components/hds/flyout/header.js.map +1 -1
  308. package/dist/components/hds/flyout/index.js +33 -18
  309. package/dist/components/hds/flyout/index.js.map +1 -1
  310. package/dist/components/hds/form/character-count/index.js.map +1 -1
  311. package/dist/components/hds/form/checkbox/base.js.map +1 -1
  312. package/dist/components/hds/form/checkbox/field.js.map +1 -1
  313. package/dist/components/hds/form/checkbox/group.js.map +1 -1
  314. package/dist/components/hds/form/error/index.js.map +1 -1
  315. package/dist/components/hds/form/error/message.js.map +1 -1
  316. package/dist/components/hds/form/field/index.js +15 -7
  317. package/dist/components/hds/form/field/index.js.map +1 -1
  318. package/dist/components/hds/form/fieldset/index.js +15 -7
  319. package/dist/components/hds/form/fieldset/index.js.map +1 -1
  320. package/dist/components/hds/form/file-input/base.js.map +1 -1
  321. package/dist/components/hds/form/file-input/field.js.map +1 -1
  322. package/dist/components/hds/form/helper-text/index.js.map +1 -1
  323. package/dist/components/hds/form/indicator/index.js.map +1 -1
  324. package/dist/components/hds/form/label/index.js.map +1 -1
  325. package/dist/components/hds/form/legend/index.js.map +1 -1
  326. package/dist/components/hds/form/masked-input/base.js +45 -15
  327. package/dist/components/hds/form/masked-input/base.js.map +1 -1
  328. package/dist/components/hds/form/masked-input/field.js.map +1 -1
  329. package/dist/components/hds/form/radio/base.js.map +1 -1
  330. package/dist/components/hds/form/radio/field.js.map +1 -1
  331. package/dist/components/hds/form/radio/group.js.map +1 -1
  332. package/dist/components/hds/form/radio-card/description.js.map +1 -1
  333. package/dist/components/hds/form/radio-card/group.js.map +1 -1
  334. package/dist/components/hds/form/radio-card/index.js.map +1 -1
  335. package/dist/components/hds/form/radio-card/label.js.map +1 -1
  336. package/dist/components/hds/form/select/base.js.map +1 -1
  337. package/dist/components/hds/form/select/field.js.map +1 -1
  338. package/dist/components/hds/form/super-select/after-options.js.map +1 -1
  339. package/dist/components/hds/form/super-select/multiple/base.js +39 -29
  340. package/dist/components/hds/form/super-select/multiple/base.js.map +1 -1
  341. package/dist/components/hds/form/super-select/multiple/field.js +1 -1
  342. package/dist/components/hds/form/super-select/multiple/field.js.map +1 -1
  343. package/dist/components/hds/form/super-select/option-group.js +11 -10
  344. package/dist/components/hds/form/super-select/option-group.js.map +1 -1
  345. package/dist/components/hds/form/super-select/placeholder.js.map +1 -1
  346. package/dist/components/hds/form/super-select/single/base.js +18 -13
  347. package/dist/components/hds/form/super-select/single/base.js.map +1 -1
  348. package/dist/components/hds/form/super-select/single/field.js +1 -1
  349. package/dist/components/hds/form/super-select/single/field.js.map +1 -1
  350. package/dist/components/hds/form/text-input/base.js.map +1 -1
  351. package/dist/components/hds/form/text-input/field.js +21 -18
  352. package/dist/components/hds/form/text-input/field.js.map +1 -1
  353. package/dist/components/hds/form/textarea/base.js.map +1 -1
  354. package/dist/components/hds/form/textarea/field.js.map +1 -1
  355. package/dist/components/hds/form/toggle/base.js.map +1 -1
  356. package/dist/components/hds/form/toggle/field.js.map +1 -1
  357. package/dist/components/hds/form/toggle/group.js.map +1 -1
  358. package/dist/components/hds/form/visibility-toggle/index.js.map +1 -1
  359. package/dist/components/hds/icon/index.js +7 -3
  360. package/dist/components/hds/icon/index.js.map +1 -1
  361. package/dist/components/hds/icon-tile/index.js.map +1 -1
  362. package/dist/components/hds/interactive/index.js +12 -5
  363. package/dist/components/hds/interactive/index.js.map +1 -1
  364. package/dist/components/hds/link/inline.js.map +1 -1
  365. package/dist/components/hds/link/standalone.js.map +1 -1
  366. package/dist/components/hds/menu-primitive/index.js +37 -24
  367. package/dist/components/hds/menu-primitive/index.js.map +1 -1
  368. package/dist/components/hds/modal/body.js +1 -0
  369. package/dist/components/hds/modal/body.js.map +1 -1
  370. package/dist/components/hds/modal/footer.js +2 -1
  371. package/dist/components/hds/modal/footer.js.map +1 -1
  372. package/dist/components/hds/modal/header.js +1 -0
  373. package/dist/components/hds/modal/header.js.map +1 -1
  374. package/dist/components/hds/modal/index.js +30 -16
  375. package/dist/components/hds/modal/index.js.map +1 -1
  376. package/dist/components/hds/page-header/actions.js.map +1 -1
  377. package/dist/components/hds/page-header/badges.js.map +1 -1
  378. package/dist/components/hds/page-header/description.js.map +1 -1
  379. package/dist/components/hds/page-header/index.js.map +1 -1
  380. package/dist/components/hds/page-header/subtitle.js.map +1 -1
  381. package/dist/components/hds/page-header/title.js.map +1 -1
  382. package/dist/components/hds/pagination/compact/index.js +31 -28
  383. package/dist/components/hds/pagination/compact/index.js.map +1 -1
  384. package/dist/components/hds/pagination/info/index.js.map +1 -1
  385. package/dist/components/hds/pagination/nav/arrow.js +10 -4
  386. package/dist/components/hds/pagination/nav/arrow.js.map +1 -1
  387. package/dist/components/hds/pagination/nav/ellipsis.js.map +1 -1
  388. package/dist/components/hds/pagination/nav/number.js +10 -4
  389. package/dist/components/hds/pagination/nav/number.js.map +1 -1
  390. package/dist/components/hds/pagination/numbered/index.js +44 -47
  391. package/dist/components/hds/pagination/numbered/index.js.map +1 -1
  392. package/dist/components/hds/pagination/size-selector/index.js +12 -8
  393. package/dist/components/hds/pagination/size-selector/index.js.map +1 -1
  394. package/dist/components/hds/popover-primitive/index.js +127 -96
  395. package/dist/components/hds/popover-primitive/index.js.map +1 -1
  396. package/dist/components/hds/reveal/index.js +26 -24
  397. package/dist/components/hds/reveal/index.js.map +1 -1
  398. package/dist/components/hds/reveal/toggle/button.js.map +1 -1
  399. package/dist/components/hds/rich-tooltip/bubble.js.map +1 -1
  400. package/dist/components/hds/rich-tooltip/index.js +8 -7
  401. package/dist/components/hds/rich-tooltip/index.js.map +1 -1
  402. package/dist/components/hds/rich-tooltip/toggle.js +1 -1
  403. package/dist/components/hds/rich-tooltip/toggle.js.map +1 -1
  404. package/dist/components/hds/segmented-group/index.js.map +1 -1
  405. package/dist/components/hds/separator/index.js.map +1 -1
  406. package/dist/components/hds/side-nav/base.js.map +1 -1
  407. package/dist/components/hds/side-nav/header/home-link.js.map +1 -1
  408. package/dist/components/hds/side-nav/header/icon-button.js +1 -0
  409. package/dist/components/hds/side-nav/header/icon-button.js.map +1 -1
  410. package/dist/components/hds/side-nav/header/index.js.map +1 -1
  411. package/dist/components/hds/side-nav/index.js +47 -34
  412. package/dist/components/hds/side-nav/index.js.map +1 -1
  413. package/dist/components/hds/side-nav/list/back-link.js.map +1 -1
  414. package/dist/components/hds/side-nav/list/index.js +15 -13
  415. package/dist/components/hds/side-nav/list/index.js.map +1 -1
  416. package/dist/components/hds/side-nav/list/item.js.map +1 -1
  417. package/dist/components/hds/side-nav/list/link.js.map +1 -1
  418. package/dist/components/hds/side-nav/list/title.js +13 -9
  419. package/dist/components/hds/side-nav/list/title.js.map +1 -1
  420. package/dist/components/hds/side-nav/portal/index.js.map +1 -1
  421. package/dist/components/hds/side-nav/portal/target.js +31 -28
  422. package/dist/components/hds/side-nav/portal/target.js.map +1 -1
  423. package/dist/components/hds/side-nav/toggle-button.js.map +1 -1
  424. package/dist/components/hds/stepper/step/indicator.js.map +1 -1
  425. package/dist/components/hds/stepper/task/indicator.js.map +1 -1
  426. package/dist/components/hds/table/index.js +54 -40
  427. package/dist/components/hds/table/index.js.map +1 -1
  428. package/dist/components/hds/table/td.js.map +1 -1
  429. package/dist/components/hds/table/th-button-sort.js +8 -7
  430. package/dist/components/hds/table/th-button-sort.js.map +1 -1
  431. package/dist/components/hds/table/th-button-tooltip.js +7 -6
  432. package/dist/components/hds/table/th-button-tooltip.js.map +1 -1
  433. package/dist/components/hds/table/th-selectable.js +26 -32
  434. package/dist/components/hds/table/th-selectable.js.map +1 -1
  435. package/dist/components/hds/table/th-sort.js +12 -10
  436. package/dist/components/hds/table/th-sort.js.map +1 -1
  437. package/dist/components/hds/table/th.js +12 -10
  438. package/dist/components/hds/table/th.js.map +1 -1
  439. package/dist/components/hds/table/tr.js.map +1 -1
  440. package/dist/components/hds/tabs/index.js +78 -55
  441. package/dist/components/hds/tabs/index.js.map +1 -1
  442. package/dist/components/hds/tabs/panel.js +21 -14
  443. package/dist/components/hds/tabs/panel.js.map +1 -1
  444. package/dist/components/hds/tabs/tab.js +38 -14
  445. package/dist/components/hds/tabs/tab.js.map +1 -1
  446. package/dist/components/hds/tag/index.js +43 -3
  447. package/dist/components/hds/tag/index.js.map +1 -1
  448. package/dist/components/hds/tag/types.js +16 -1
  449. package/dist/components/hds/tag/types.js.map +1 -1
  450. package/dist/components/hds/text/body.js.map +1 -1
  451. package/dist/components/hds/text/code.js.map +1 -1
  452. package/dist/components/hds/text/display.js.map +1 -1
  453. package/dist/components/hds/text/index.js.map +1 -1
  454. package/dist/components/hds/time/index.js +19 -14
  455. package/dist/components/hds/time/index.js.map +1 -1
  456. package/dist/components/hds/time/range.js +11 -12
  457. package/dist/components/hds/time/range.js.map +1 -1
  458. package/dist/components/hds/time/single.js.map +1 -1
  459. package/dist/components/hds/toast/index.js.map +1 -1
  460. package/dist/components/hds/tooltip-button/index.js.map +1 -1
  461. package/dist/components/hds/yield/index.js.map +1 -1
  462. package/dist/components.js +16 -1
  463. package/dist/components.js.map +1 -1
  464. package/dist/helpers/hds-format-date.js.map +1 -1
  465. package/dist/helpers/hds-format-relative.js.map +1 -1
  466. package/dist/instance-initializers/load-sprite.js +3 -1
  467. package/dist/instance-initializers/load-sprite.js.map +1 -1
  468. package/dist/modifiers/hds-advanced-table-cell/dom-management.js +51 -0
  469. package/dist/modifiers/hds-advanced-table-cell/dom-management.js.map +1 -0
  470. package/dist/modifiers/hds-advanced-table-cell/keyboard-navigation.js +105 -0
  471. package/dist/modifiers/hds-advanced-table-cell/keyboard-navigation.js.map +1 -0
  472. package/dist/modifiers/hds-advanced-table-cell.js +55 -0
  473. package/dist/modifiers/hds-advanced-table-cell.js.map +1 -0
  474. package/dist/modifiers/hds-clipboard.js +29 -35
  475. package/dist/modifiers/hds-clipboard.js.map +1 -1
  476. package/dist/modifiers/hds-code-editor/highlight-styles/hds-dark-highlight-style.js +80 -0
  477. package/dist/modifiers/hds-code-editor/highlight-styles/hds-dark-highlight-style.js.map +1 -0
  478. package/dist/modifiers/hds-code-editor/languages/rego.js +191 -0
  479. package/dist/modifiers/hds-code-editor/languages/rego.js.map +1 -0
  480. package/dist/modifiers/hds-code-editor/languages/sentinel.js +148 -0
  481. package/dist/modifiers/hds-code-editor/languages/sentinel.js.map +1 -0
  482. package/dist/modifiers/hds-code-editor/palettes/hds-dark-palette.js +24 -0
  483. package/dist/modifiers/hds-code-editor/palettes/hds-dark-palette.js.map +1 -0
  484. package/dist/modifiers/hds-code-editor/themes/hds-dark-theme.js +62 -0
  485. package/dist/modifiers/hds-code-editor/themes/hds-dark-theme.js.map +1 -0
  486. package/dist/modifiers/hds-code-editor/types.js +21 -0
  487. package/dist/modifiers/hds-code-editor/types.js.map +1 -0
  488. package/dist/modifiers/hds-code-editor.js +293 -0
  489. package/dist/modifiers/hds-code-editor.js.map +1 -0
  490. package/dist/modifiers/hds-tooltip.js +128 -108
  491. package/dist/modifiers/hds-tooltip.js.map +1 -1
  492. package/dist/services/hds-time.js +29 -23
  493. package/dist/services/hds-time.js.map +1 -1
  494. package/dist/styles/@hashicorp/design-system-components.css +560 -65
  495. package/dist/styles/@hashicorp/design-system-components.scss +2 -0
  496. package/dist/styles/@hashicorp/design-system-power-select-overrides.scss +3 -3
  497. package/dist/styles/components/accordion.scss +1 -1
  498. package/dist/styles/components/advanced-table.scss +353 -0
  499. package/dist/styles/components/alert.scss +2 -2
  500. package/dist/styles/components/app-header.scss +1 -1
  501. package/dist/styles/components/badge-count.scss +1 -1
  502. package/dist/styles/components/badge.scss +12 -2
  503. package/dist/styles/components/breadcrumb.scss +2 -2
  504. package/dist/styles/components/card/container.scss +1 -1
  505. package/dist/styles/components/code-block/index.scss +1 -1
  506. package/dist/styles/components/code-editor/index.scss +113 -0
  507. package/dist/styles/components/code-editor/theme.scss +20 -0
  508. package/dist/styles/components/copy/snippet.scss +1 -1
  509. package/dist/styles/components/dropdown.scss +4 -3
  510. package/dist/styles/components/form/select.scss +1 -1
  511. package/dist/styles/components/icon-tile.scss +1 -1
  512. package/dist/styles/components/link/standalone.scss +1 -1
  513. package/dist/styles/components/modal.scss +1 -1
  514. package/dist/styles/components/rich-tooltip.scss +4 -2
  515. package/dist/styles/components/side-nav/a11y-refocus.scss +1 -1
  516. package/dist/styles/components/table.scss +10 -33
  517. package/dist/styles/components/tag.scss +28 -0
  518. package/dist/styles/components/time.scss +7 -0
  519. package/dist/styles/components/tooltip.scss +49 -0
  520. package/dist/styles/mixins/_button.scss +3 -3
  521. package/dist/utils/hds-aria-described-by.js +14 -17
  522. package/dist/utils/hds-aria-described-by.js.map +1 -1
  523. package/package.json +101 -70
  524. package/dist/_rollupPluginBabelHelpers-81503waH.js +0 -57
  525. package/dist/_rollupPluginBabelHelpers-81503waH.js.map +0 -1
@@ -1,19 +1,27 @@
1
- import { c as _classPrivateMethodInitSpec, a as _defineProperty, d as _assertClassBrand } from '../_rollupPluginBabelHelpers-81503waH.js';
2
1
  import Modifier from 'ember-modifier';
3
2
  import { assert } from '@ember/debug';
4
3
  import { registerDestructor } from '@ember/destroyable';
4
+ import { guidFor } from '@ember/object/internals';
5
5
  import tippy, { followCursor } from 'tippy.js';
6
- import 'tippy.js/dist/svg-arrow.css';
6
+
7
+ /**
8
+ * Copyright (c) HashiCorp, Inc.
9
+ * SPDX-License-Identifier: MPL-2.0
10
+ */
7
11
 
8
12
  function cleanup(instance) {
9
13
  const {
10
14
  _interval,
11
15
  _needsTabIndex,
12
- _tooltip
16
+ _tooltip,
17
+ _containerElement
13
18
  } = instance;
14
19
  if (_needsTabIndex) {
15
20
  _tooltip?.reference?.removeAttribute('tabindex');
16
21
  }
22
+ if (_containerElement) {
23
+ _containerElement.remove();
24
+ }
17
25
  clearInterval(_interval);
18
26
  _tooltip?.destroy();
19
27
  }
@@ -31,133 +39,145 @@ function cleanup(instance) {
31
39
  * @class TooltipModifier
32
40
  *
33
41
  */
34
- var _HdsTooltipModifier_brand = /*#__PURE__*/new WeakSet();
35
42
  class HdsTooltipModifier extends Modifier {
43
+ _didSetup = false;
44
+ _containerId = 'container-' + guidFor(this);
45
+ _interval = undefined;
46
+ _needsTabIndex = false;
47
+ _tooltip = undefined;
48
+ _containerElement;
36
49
  constructor(owner, args) {
37
50
  super(owner, args);
38
- _classPrivateMethodInitSpec(this, _HdsTooltipModifier_brand);
39
- _defineProperty(this, "_didSetup", false);
40
- _defineProperty(this, "_interval", undefined);
41
- _defineProperty(this, "_needsTabIndex", false);
42
- _defineProperty(this, "_tooltip", undefined);
43
- _defineProperty(this, "hideOnEsc", {
44
- name: 'hideOnEsc',
45
- defaultValue: true,
46
- fn({
47
- hide
48
- }) {
49
- function onKeyDown(event) {
50
- if (event.key === 'Escape') {
51
- hide();
52
- }
53
- }
54
- return {
55
- onShow() {
56
- document.addEventListener('keydown', onKeyDown);
57
- },
58
- onHide() {
59
- document.removeEventListener('keydown', onKeyDown);
60
- }
61
- };
62
- }
63
- });
64
51
  registerDestructor(this, cleanup);
65
52
  }
53
+ hideOnEsc = {
54
+ name: 'hideOnEsc',
55
+ defaultValue: true,
56
+ fn({
57
+ hide
58
+ }) {
59
+ function onKeyDown(event) {
60
+ if (event.key === 'Escape') {
61
+ hide();
62
+ }
63
+ }
64
+ return {
65
+ onShow() {
66
+ document.addEventListener('keydown', onKeyDown);
67
+ },
68
+ onHide() {
69
+ document.removeEventListener('keydown', onKeyDown);
70
+ }
71
+ };
72
+ }
73
+ };
66
74
  modify(element, positional, named) {
67
75
  assert('Tooltip must have an element', element);
68
76
  if (!this._didSetup) {
69
- _assertClassBrand(_HdsTooltipModifier_brand, this, _setup).call(this, element, positional, named);
77
+ this.#setup(element, positional, named);
70
78
  this._didSetup = true;
71
79
  }
72
- _assertClassBrand(_HdsTooltipModifier_brand, this, _update).call(this, element, positional, named);
80
+ this.#update(element, positional, named);
73
81
  }
74
- }
75
- function _setup(element, positional, named) {
76
- const tooltipProps = _assertClassBrand(_HdsTooltipModifier_brand, this, _getTooltipProps).call(this, element, positional, named);
77
- this._tooltip = tippy(element, tooltipProps);
78
- }
79
- function _update(element, positional, named) {
80
- const tooltipProps = _assertClassBrand(_HdsTooltipModifier_brand, this, _getTooltipProps).call(this, element, positional, named);
81
- this._tooltip?.setProps(tooltipProps);
82
- }
83
- function _getTooltipProps(element, positional, named) {
84
- const {
85
- options
86
- } = named;
87
- let [content] = positional;
88
- let $anchor = element; // Ensure $anchor can be null
82
+ #setup(element, positional, named) {
83
+ this.#createPopoverContainer(element);
84
+ const tooltipProps = this.#getTooltipProps(element, positional, named);
85
+ this._tooltip = tippy(element, tooltipProps);
86
+ }
87
+ #update(element, positional, named) {
88
+ const tooltipProps = this.#getTooltipProps(element, positional, named);
89
+ this._tooltip?.setProps(tooltipProps);
90
+ }
91
+ #createPopoverContainer(element) {
92
+ const containerElement = document.createElement('div');
93
+ containerElement.setAttribute('id', this._containerId);
94
+ containerElement.classList.add('hds-tooltip-container');
95
+ containerElement.style.setProperty('position', 'absolute');
96
+ containerElement.style.setProperty('width', '100%');
97
+ element.setAttribute('aria-controls', this._containerId);
98
+ element.setAttribute('aria-describedby', this._containerId);
99
+ element.after(containerElement);
100
+ this._containerElement = containerElement;
101
+ }
102
+ #getTooltipProps(element, positional, named) {
103
+ const {
104
+ options
105
+ } = named;
106
+ let [content] = positional;
107
+ let $anchor = element; // Ensure $anchor can be null
89
108
 
90
- if (typeof options?.triggerTarget === 'string') {
91
- const $el = $anchor;
92
- if (options.triggerTarget === 'parentNode') {
93
- if ($anchor.parentNode instanceof HTMLElement) {
94
- // Type guard
95
- $anchor = $anchor.parentNode;
109
+ if (typeof options?.triggerTarget === 'string') {
110
+ const $el = $anchor;
111
+ if (options.triggerTarget === 'parentNode') {
112
+ if ($anchor.parentNode instanceof HTMLElement) {
113
+ // Type guard
114
+ $anchor = $anchor.parentNode;
115
+ }
116
+ } else {
117
+ const queryResult = $anchor.querySelector(options.triggerTarget);
118
+ if (queryResult) {
119
+ $anchor = queryResult;
120
+ }
96
121
  }
97
- } else {
98
- const queryResult = $anchor.querySelector(options.triggerTarget);
99
- if (queryResult) {
100
- $anchor = queryResult;
122
+ if ($anchor instanceof HTMLElement) {
123
+ // Ensure $anchor is an HTMLElement before cloning
124
+ const clonedElement = $anchor.cloneNode(true); // Explicitly cast cloned node to HTMLElement
125
+ content = clonedElement.outerHTML; // Now safely access outerHTML
101
126
  }
127
+ $el?.remove(); // Use optional chaining in case $el is null
128
+ options.triggerTarget = null;
102
129
  }
103
- if ($anchor instanceof HTMLElement) {
104
- // Ensure $anchor is an HTMLElement before cloning
105
- const clonedElement = $anchor.cloneNode(true); // Explicitly cast cloned node to HTMLElement
106
- content = clonedElement.outerHTML; // Now safely access outerHTML
107
- }
108
- $el?.remove(); // Use optional chaining in case $el is null
109
- options.triggerTarget = null;
110
- }
111
130
 
112
- // The {{hds-tooltip}} will just use the HTML content.
113
- if (typeof content === 'undefined' && $anchor instanceof HTMLElement) {
114
- // Ensure $anchor is an HTMLElement before accessing innerHTML
115
- content = $anchor.innerHTML;
116
- $anchor.innerHTML = '';
117
- }
118
- if (options?.trigger === 'manual') {
119
- // If we are manually triggering, a out delay means only show for the
120
- // amount of time specified by the delay.
121
- const delay = options.delay || [];
122
- if (Array.isArray(delay) && delay.length) {
123
- if (typeof delay[1] !== 'undefined') {
124
- options.onShown = tooltip => {
125
- clearInterval(this._interval);
126
- this._interval = setTimeout(() => {
127
- tooltip.hide();
128
- }, delay[1] ?? 0);
129
- };
131
+ // The {{hds-tooltip}} will just use the HTML content.
132
+ if (typeof content === 'undefined' && $anchor instanceof HTMLElement) {
133
+ // Ensure $anchor is an HTMLElement before accessing innerHTML
134
+ content = $anchor.innerHTML;
135
+ $anchor.innerHTML = '';
136
+ }
137
+ if (options?.trigger === 'manual') {
138
+ // If we are manually triggering, a out delay means only show for the
139
+ // amount of time specified by the delay.
140
+ const delay = options.delay || [];
141
+ if (Array.isArray(delay) && delay.length) {
142
+ if (typeof delay[1] !== 'undefined') {
143
+ options.onShown = tooltip => {
144
+ clearInterval(this._interval);
145
+ this._interval = setTimeout(() => {
146
+ tooltip.hide();
147
+ }, delay[1] ?? 0);
148
+ };
149
+ }
130
150
  }
131
151
  }
132
- }
133
- const $trigger = $anchor;
134
- if (!$trigger.hasAttribute('tabindex')) {
135
- this._needsTabIndex = true;
136
- $trigger.setAttribute('tabindex', '0');
137
- }
152
+ const $trigger = $anchor;
153
+ if (!$trigger.hasAttribute('tabindex')) {
154
+ this._needsTabIndex = true;
155
+ $trigger.setAttribute('tabindex', '0');
156
+ }
138
157
 
139
- /* Typescript does not like the previous approach of adding an undefined value
140
- ** to the array and then filtering it out.
141
- */
142
- const plugins = options?.followCursor !== undefined ? [this.hideOnEsc, followCursor] : [this.hideOnEsc];
143
- return {
144
- theme: 'hds',
145
- triggerTarget: $trigger,
146
- arrow: `
158
+ /* Typescript does not like the previous approach of adding an undefined value
159
+ ** to the array and then filtering it out.
160
+ */
161
+ const plugins = options?.followCursor !== undefined ? [this.hideOnEsc, followCursor] : [this.hideOnEsc];
162
+ return {
163
+ theme: 'hds',
164
+ triggerTarget: $trigger,
165
+ arrow: `
147
166
  <svg class="hds-tooltip-pointer" width="16" height="7" viewBox="0 0 16 7" xmlns="http://www.w3.org/2000/svg">
148
167
  <path d="M0 7H16L9.11989 0.444571C8.49776 -0.148191 7.50224 -0.148191 6.88011 0.444572L0 7Z" />
149
168
  </svg>`,
150
- // keeps tooltip itself open on hover:
151
- interactive: true,
152
- // fix accessibility features that get messed up with setting interactive: true
153
- aria: {
154
- content: 'describedby',
155
- expanded: false
156
- },
157
- content: () => content,
158
- plugins,
159
- ...options
160
- };
169
+ // keeps tooltip itself open on hover:
170
+ interactive: true,
171
+ appendTo: this._containerElement,
172
+ // fix accessibility features that get messed up with setting interactive: true
173
+ aria: {
174
+ expanded: false
175
+ },
176
+ content: () => content,
177
+ plugins,
178
+ ...options
179
+ };
180
+ }
161
181
  }
162
182
 
163
183
  export { HdsTooltipModifier as default };
@@ -1 +1 @@
1
- {"version":3,"file":"hds-tooltip.js","sources":["../../src/modifiers/hds-tooltip.ts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n// Note: the majority of this code is a porting of the existing tooltip implementation in Cloud UI\n// (which was initially implemented in Structure)\n\nimport Modifier from 'ember-modifier';\nimport type { ArgsFor } from 'ember-modifier';\n\nimport { assert } from '@ember/debug';\nimport { registerDestructor } from '@ember/destroyable';\n\nimport tippy, { followCursor } from 'tippy.js';\nimport type {\n HideAll as TippyHideAll,\n Instance as TippyInstance,\n Props as TippyProps,\n} from 'tippy.js';\n// used by custom SVG arrow:\nimport 'tippy.js/dist/svg-arrow.css';\n\nexport interface HdsTooltipModifierSignature {\n Args: {\n Positional: [string];\n Named: {\n options?: Partial<TippyProps>;\n };\n };\n Element: HTMLElement;\n}\n\nfunction cleanup(instance: HdsTooltipModifier): void {\n const { _interval, _needsTabIndex, _tooltip } = instance;\n if (_needsTabIndex) {\n _tooltip?.reference?.removeAttribute('tabindex');\n }\n clearInterval(_interval);\n _tooltip?.destroy();\n}\n\n/**\n *\n * `Tooltip` implements a modifier that uses Tippy.js to display a tooltip.\n *\n * Sample usage:\n * ```\n * <div {{hds-tooltip 'Text' options=(hash )}}>Hover me!</div>\n * ```\n *\n * @see https://atomiks.github.io/tippyjs\n * @class TooltipModifier\n *\n */\nexport default class HdsTooltipModifier extends Modifier<HdsTooltipModifierSignature> {\n private _didSetup = false;\n _interval: number | undefined = undefined;\n _needsTabIndex = false;\n _tooltip: TippyInstance | undefined = undefined;\n\n constructor(owner: unknown, args: ArgsFor<HdsTooltipModifierSignature>) {\n super(owner, args);\n registerDestructor(this, cleanup);\n }\n\n hideOnEsc = {\n name: 'hideOnEsc',\n defaultValue: true,\n fn({ hide }: { hide: TippyHideAll }) {\n function onKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n hide();\n }\n }\n\n return {\n onShow() {\n document.addEventListener('keydown', onKeyDown);\n },\n onHide() {\n document.removeEventListener('keydown', onKeyDown);\n },\n };\n },\n };\n\n modify(\n element: HdsTooltipModifierSignature['Element'],\n positional: HdsTooltipModifierSignature['Args']['Positional'],\n named: HdsTooltipModifierSignature['Args']['Named']\n ): void {\n assert('Tooltip must have an element', element);\n\n if (!this._didSetup) {\n this.#setup(element, positional, named);\n this._didSetup = true;\n }\n\n this.#update(element, positional, named);\n }\n\n #setup(\n element: HdsTooltipModifierSignature['Element'],\n positional: HdsTooltipModifierSignature['Args']['Positional'],\n named: HdsTooltipModifierSignature['Args']['Named']\n ): void {\n const tooltipProps = this.#getTooltipProps(element, positional, named);\n this._tooltip = tippy(element, tooltipProps);\n }\n\n #update(\n element: HdsTooltipModifierSignature['Element'],\n positional: HdsTooltipModifierSignature['Args']['Positional'],\n named: HdsTooltipModifierSignature['Args']['Named']\n ): void {\n const tooltipProps = this.#getTooltipProps(element, positional, named);\n this._tooltip?.setProps(tooltipProps);\n }\n\n #getTooltipProps(\n element: HdsTooltipModifierSignature['Element'],\n positional: HdsTooltipModifierSignature['Args']['Positional'],\n named: HdsTooltipModifierSignature['Args']['Named']\n ): Partial<TippyProps> {\n const { options } = named;\n let [content] = positional;\n\n let $anchor: HTMLElement | null = element; // Ensure $anchor can be null\n\n if (typeof options?.triggerTarget === 'string') {\n const $el = $anchor;\n if (options.triggerTarget === 'parentNode') {\n if ($anchor.parentNode instanceof HTMLElement) {\n // Type guard\n $anchor = $anchor.parentNode;\n }\n } else {\n const queryResult: HTMLElement | null = $anchor.querySelector(\n options.triggerTarget\n );\n if (queryResult) {\n $anchor = queryResult;\n }\n }\n if ($anchor instanceof HTMLElement) {\n // Ensure $anchor is an HTMLElement before cloning\n const clonedElement = $anchor.cloneNode(true) as HTMLElement; // Explicitly cast cloned node to HTMLElement\n content = clonedElement.outerHTML; // Now safely access outerHTML\n }\n $el?.remove(); // Use optional chaining in case $el is null\n options.triggerTarget = null;\n }\n\n // The {{hds-tooltip}} will just use the HTML content.\n if (typeof content === 'undefined' && $anchor instanceof HTMLElement) {\n // Ensure $anchor is an HTMLElement before accessing innerHTML\n content = $anchor.innerHTML;\n $anchor.innerHTML = '';\n }\n\n if (options?.trigger === 'manual') {\n // If we are manually triggering, a out delay means only show for the\n // amount of time specified by the delay.\n const delay = options.delay || [];\n\n if (Array.isArray(delay) && delay.length) {\n if (typeof delay[1] !== 'undefined') {\n options.onShown = (tooltip) => {\n clearInterval(this._interval);\n this._interval = setTimeout(() => {\n tooltip.hide();\n }, delay[1] ?? 0);\n };\n }\n }\n }\n\n const $trigger = $anchor;\n\n if (!$trigger.hasAttribute('tabindex')) {\n this._needsTabIndex = true;\n $trigger.setAttribute('tabindex', '0');\n }\n\n /* Typescript does not like the previous approach of adding an undefined value\n ** to the array and then filtering it out.\n */\n const plugins =\n options?.followCursor !== undefined\n ? [this.hideOnEsc, followCursor]\n : [this.hideOnEsc];\n\n return {\n theme: 'hds',\n triggerTarget: $trigger,\n arrow: `\n <svg class=\"hds-tooltip-pointer\" width=\"16\" height=\"7\" viewBox=\"0 0 16 7\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0 7H16L9.11989 0.444571C8.49776 -0.148191 7.50224 -0.148191 6.88011 0.444572L0 7Z\" />\n </svg>`,\n // keeps tooltip itself open on hover:\n interactive: true,\n // fix accessibility features that get messed up with setting interactive: true\n aria: {\n content: 'describedby',\n expanded: false,\n },\n content: () => content,\n plugins,\n ...options,\n };\n }\n}\n"],"names":["cleanup","instance","_interval","_needsTabIndex","_tooltip","reference","removeAttribute","clearInterval","destroy","_HdsTooltipModifier_brand","WeakSet","HdsTooltipModifier","Modifier","constructor","owner","args","_classPrivateMethodInitSpec","_defineProperty","undefined","name","defaultValue","fn","hide","onKeyDown","event","key","onShow","document","addEventListener","onHide","removeEventListener","registerDestructor","modify","element","positional","named","assert","_didSetup","_assertClassBrand","_setup","call","_update","tooltipProps","_getTooltipProps","tippy","setProps","options","content","$anchor","triggerTarget","$el","parentNode","HTMLElement","queryResult","querySelector","clonedElement","cloneNode","outerHTML","remove","innerHTML","trigger","delay","Array","isArray","length","onShown","tooltip","setTimeout","$trigger","hasAttribute","setAttribute","plugins","followCursor","hideOnEsc","theme","arrow","interactive","aria","expanded"],"mappings":"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"}
1
+ {"version":3,"file":"hds-tooltip.js","sources":["../../src/modifiers/hds-tooltip.ts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n// Note: the majority of this code is a porting of the existing tooltip implementation in Cloud UI\n// (which was initially implemented in Structure)\n\nimport Modifier from 'ember-modifier';\nimport type { ArgsFor } from 'ember-modifier';\n\nimport { assert } from '@ember/debug';\nimport { registerDestructor } from '@ember/destroyable';\nimport { guidFor } from '@ember/object/internals';\n\nimport tippy, { followCursor } from 'tippy.js';\nimport type {\n HideAll as TippyHideAll,\n Instance as TippyInstance,\n Props as TippyProps,\n} from 'tippy.js';\n\nimport type Owner from '@ember/owner';\n\nexport interface HdsTooltipModifierSignature {\n Args: {\n Positional: [string];\n Named: {\n options?: Partial<TippyProps>;\n };\n };\n Element: HTMLElement;\n}\n\nfunction cleanup(instance: HdsTooltipModifier): void {\n const { _interval, _needsTabIndex, _tooltip, _containerElement } = instance;\n if (_needsTabIndex) {\n _tooltip?.reference?.removeAttribute('tabindex');\n }\n if (_containerElement) {\n _containerElement.remove();\n }\n clearInterval(_interval);\n _tooltip?.destroy();\n}\n\n/**\n *\n * `Tooltip` implements a modifier that uses Tippy.js to display a tooltip.\n *\n * Sample usage:\n * ```\n * <div {{hds-tooltip 'Text' options=(hash )}}>Hover me!</div>\n * ```\n *\n * @see https://atomiks.github.io/tippyjs\n * @class TooltipModifier\n *\n */\nexport default class HdsTooltipModifier extends Modifier<HdsTooltipModifierSignature> {\n private _didSetup = false;\n private _containerId: string = 'container-' + guidFor(this);\n _interval: number | undefined = undefined;\n _needsTabIndex = false;\n _tooltip: TippyInstance | undefined = undefined;\n _containerElement?: HTMLElement;\n\n constructor(owner: Owner, args: ArgsFor<HdsTooltipModifierSignature>) {\n super(owner, args);\n registerDestructor(this, cleanup);\n }\n\n hideOnEsc = {\n name: 'hideOnEsc',\n defaultValue: true,\n fn({ hide }: { hide: TippyHideAll }) {\n function onKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n hide();\n }\n }\n\n return {\n onShow() {\n document.addEventListener('keydown', onKeyDown);\n },\n onHide() {\n document.removeEventListener('keydown', onKeyDown);\n },\n };\n },\n };\n\n modify(\n element: HdsTooltipModifierSignature['Element'],\n positional: HdsTooltipModifierSignature['Args']['Positional'],\n named: HdsTooltipModifierSignature['Args']['Named']\n ): void {\n assert('Tooltip must have an element', element);\n\n if (!this._didSetup) {\n this.#setup(element, positional, named);\n this._didSetup = true;\n }\n\n this.#update(element, positional, named);\n }\n\n #setup(\n element: HdsTooltipModifierSignature['Element'],\n positional: HdsTooltipModifierSignature['Args']['Positional'],\n named: HdsTooltipModifierSignature['Args']['Named']\n ): void {\n this.#createPopoverContainer(element);\n const tooltipProps = this.#getTooltipProps(element, positional, named);\n this._tooltip = tippy(element, tooltipProps);\n }\n\n #update(\n element: HdsTooltipModifierSignature['Element'],\n positional: HdsTooltipModifierSignature['Args']['Positional'],\n named: HdsTooltipModifierSignature['Args']['Named']\n ): void {\n const tooltipProps = this.#getTooltipProps(element, positional, named);\n this._tooltip?.setProps(tooltipProps);\n }\n\n #createPopoverContainer(\n element: HdsTooltipModifierSignature['Element']\n ): void {\n const containerElement = document.createElement('div');\n containerElement.setAttribute('id', this._containerId);\n containerElement.classList.add('hds-tooltip-container');\n containerElement.style.setProperty('position', 'absolute');\n containerElement.style.setProperty('width', '100%');\n element.setAttribute('aria-controls', this._containerId);\n element.setAttribute('aria-describedby', this._containerId);\n element.after(containerElement);\n this._containerElement = containerElement;\n }\n\n #getTooltipProps(\n element: HdsTooltipModifierSignature['Element'],\n positional: HdsTooltipModifierSignature['Args']['Positional'],\n named: HdsTooltipModifierSignature['Args']['Named']\n ): Partial<TippyProps> {\n const { options } = named;\n let [content] = positional;\n\n let $anchor: HTMLElement | null = element; // Ensure $anchor can be null\n\n if (typeof options?.triggerTarget === 'string') {\n const $el = $anchor;\n if (options.triggerTarget === 'parentNode') {\n if ($anchor.parentNode instanceof HTMLElement) {\n // Type guard\n $anchor = $anchor.parentNode;\n }\n } else {\n const queryResult: HTMLElement | null = $anchor.querySelector(\n options.triggerTarget\n );\n if (queryResult) {\n $anchor = queryResult;\n }\n }\n if ($anchor instanceof HTMLElement) {\n // Ensure $anchor is an HTMLElement before cloning\n const clonedElement = $anchor.cloneNode(true) as HTMLElement; // Explicitly cast cloned node to HTMLElement\n content = clonedElement.outerHTML; // Now safely access outerHTML\n }\n $el?.remove(); // Use optional chaining in case $el is null\n options.triggerTarget = null;\n }\n\n // The {{hds-tooltip}} will just use the HTML content.\n if (typeof content === 'undefined' && $anchor instanceof HTMLElement) {\n // Ensure $anchor is an HTMLElement before accessing innerHTML\n content = $anchor.innerHTML;\n $anchor.innerHTML = '';\n }\n\n if (options?.trigger === 'manual') {\n // If we are manually triggering, a out delay means only show for the\n // amount of time specified by the delay.\n const delay = options.delay || [];\n\n if (Array.isArray(delay) && delay.length) {\n if (typeof delay[1] !== 'undefined') {\n options.onShown = (tooltip) => {\n clearInterval(this._interval);\n this._interval = setTimeout(() => {\n tooltip.hide();\n }, delay[1] ?? 0);\n };\n }\n }\n }\n\n const $trigger = $anchor;\n\n if (!$trigger.hasAttribute('tabindex')) {\n this._needsTabIndex = true;\n $trigger.setAttribute('tabindex', '0');\n }\n\n /* Typescript does not like the previous approach of adding an undefined value\n ** to the array and then filtering it out.\n */\n const plugins =\n options?.followCursor !== undefined\n ? [this.hideOnEsc, followCursor]\n : [this.hideOnEsc];\n\n return {\n theme: 'hds',\n triggerTarget: $trigger,\n arrow: `\n <svg class=\"hds-tooltip-pointer\" width=\"16\" height=\"7\" viewBox=\"0 0 16 7\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0 7H16L9.11989 0.444571C8.49776 -0.148191 7.50224 -0.148191 6.88011 0.444572L0 7Z\" />\n </svg>`,\n // keeps tooltip itself open on hover:\n interactive: true,\n appendTo: this._containerElement,\n // fix accessibility features that get messed up with setting interactive: true\n aria: {\n expanded: false,\n },\n content: () => content,\n plugins,\n ...options,\n };\n }\n}\n"],"names":["cleanup","instance","_interval","_needsTabIndex","_tooltip","_containerElement","reference","removeAttribute","remove","clearInterval","destroy","HdsTooltipModifier","Modifier","_didSetup","_containerId","guidFor","undefined","constructor","owner","args","registerDestructor","hideOnEsc","name","defaultValue","fn","hide","onKeyDown","event","key","onShow","document","addEventListener","onHide","removeEventListener","modify","element","positional","named","assert","#setup","tooltipProps","tippy","#update","setProps","#createPopoverContainer","containerElement","createElement","setAttribute","classList","add","style","setProperty","after","#getTooltipProps","options","content","$anchor","triggerTarget","$el","parentNode","HTMLElement","queryResult","querySelector","clonedElement","cloneNode","outerHTML","innerHTML","trigger","delay","Array","isArray","length","onShown","tooltip","setTimeout","$trigger","hasAttribute","plugins","followCursor","theme","arrow","interactive","appendTo","aria","expanded"],"mappings":"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"}
@@ -1,11 +1,15 @@
1
- import { _ as _applyDecoratedDescriptor, e as _classPrivateFieldInitSpec, b as _initializerDefineProperty, f as _classPrivateFieldGet2 } from '../_rollupPluginBabelHelpers-81503waH.js';
2
1
  import Service from '@ember/service';
3
- import { task, timeout } from 'ember-concurrency';
2
+ import { timeout, task } from 'ember-concurrency';
4
3
  import { tracked } from '@glimmer/tracking';
5
4
  import { DateTime } from 'luxon';
6
5
  import { isTesting } from '@embroider/macros';
6
+ import { g, i, n } from 'decorator-transforms/runtime';
7
+
8
+ /**
9
+ * Copyright (c) HashiCorp, Inc.
10
+ * SPDX-License-Identifier: MPL-2.0
11
+ */
7
12
 
8
- var _dec, _class, _descriptor, _listeners;
9
13
  const MILLISECOND_IN_MS = 1;
10
14
  const SECOND_IN_MS = 1000 * MILLISECOND_IN_MS;
11
15
  const MINUTE_IN_MS = 60 * SECOND_IN_MS;
@@ -29,12 +33,16 @@ const DEFAULT_RELATIVE_THRESHOLDS = {
29
33
  };
30
34
  let HdsDisplayKeyValues = /*#__PURE__*/function (HdsDisplayKeyValues) {
31
35
  HdsDisplayKeyValues["FriendlyRelative"] = "friendly-relative";
36
+ // Example: 'Sep 5, 2018 (30 minutes ago)'
32
37
  HdsDisplayKeyValues["FriendlyLocal"] = "friendly-local";
38
+ // Example: 'Sep 5, 2018, 4:07:32 pm'
33
39
  HdsDisplayKeyValues["FriendlyOnly"] = "friendly-only";
40
+ // Example: 'Sep 5, 2018'
34
41
  HdsDisplayKeyValues["Relative"] = "relative";
35
- HdsDisplayKeyValues["Utc"] = "utc";
42
+ // Example: 'in 7 days'
43
+ HdsDisplayKeyValues["Utc"] = "utc"; // Example: '2018-09-05T23:15:17345Z'
36
44
  return HdsDisplayKeyValues;
37
- }({}); // Example: '2018-09-05T23:15:17345Z'
45
+ }({});
38
46
  const FORMAT_PRECISION_SHORT_DATE = {
39
47
  month: 'short',
40
48
  day: 'numeric',
@@ -91,14 +99,14 @@ const DEFAULT_DISPLAY_MAPPING = {
91
99
  };
92
100
  const DISPLAY_SCALE = Object.keys(DEFAULT_DISPLAY_MAPPING);
93
101
  const DISPLAYS = [HdsDisplayKeyValues.FriendlyRelative, HdsDisplayKeyValues.FriendlyLocal, HdsDisplayKeyValues.FriendlyOnly, HdsDisplayKeyValues.Relative, HdsDisplayKeyValues.Utc];
94
- let TimeService = (_dec = task({
95
- drop: true
96
- }), _class = (_listeners = /*#__PURE__*/new WeakMap(), class TimeService extends Service {
97
- constructor(...args) {
98
- super(...args);
99
- _classPrivateFieldInitSpec(this, _listeners, new Set());
100
- _initializerDefineProperty(this, "now", _descriptor, this);
102
+ class TimeService extends Service {
103
+ #listeners = new Set();
104
+ static {
105
+ g(this.prototype, "now", [tracked], function () {
106
+ return Date.now();
107
+ });
101
108
  }
109
+ #now = (i(this, "now"), undefined);
102
110
  format(difference, display = DEFAULT_DISPLAY) {
103
111
  let displayKey;
104
112
  // If the scale display is defined and valid then set that display.
@@ -164,7 +172,7 @@ let TimeService = (_dec = task({
164
172
 
165
173
  // Subscribes a listener to the ticking task for time changes.
166
174
  register(id) {
167
- _classPrivateFieldGet2(_listeners, this).add(id);
175
+ this.#listeners.add(id);
168
176
  // @ts-expect-error - TS2339: Property 'perform' does not exist on type '() => TaskGenerator<string | undefined>'
169
177
  // note: we could potentially use taskFor via `ember-concurrency-ts` to avoid this exception
170
178
  this.start.perform();
@@ -175,7 +183,7 @@ let TimeService = (_dec = task({
175
183
 
176
184
  // Unregisters listener for the time task.
177
185
  unregister(id) {
178
- return _classPrivateFieldGet2(_listeners, this).delete(id);
186
+ return this.#listeners.delete(id);
179
187
  }
180
188
  *start() {
181
189
  while (this.listeners.size) {
@@ -190,6 +198,11 @@ let TimeService = (_dec = task({
190
198
  }
191
199
 
192
200
  // Transforms a JS date to a string representing the UTC ISO date.
201
+ static {
202
+ n(this.prototype, "start", [task({
203
+ drop: true
204
+ })]);
205
+ }
193
206
  toIsoUtcString(date) {
194
207
  try {
195
208
  return DateTime.fromJSDate(date).toUTC().toJSDate().toISOString();
@@ -200,16 +213,9 @@ let TimeService = (_dec = task({
200
213
 
201
214
  // Gets the currently subscribed listeners.
202
215
  get listeners() {
203
- return _classPrivateFieldGet2(_listeners, this);
204
- }
205
- }), _descriptor = _applyDecoratedDescriptor(_class.prototype, "now", [tracked], {
206
- configurable: true,
207
- enumerable: true,
208
- writable: true,
209
- initializer: function () {
210
- return Date.now();
216
+ return this.#listeners;
211
217
  }
212
- }), _applyDecoratedDescriptor(_class.prototype, "start", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, "start"), _class.prototype), _class);
218
+ }
213
219
 
214
220
  export { DATE_DISPLAY_FORMATS, DAY_IN_MS, DEFAULT_DISPLAY, DEFAULT_DISPLAY_MAPPING, DEFAULT_RELATIVE_THRESHOLDS, DISPLAYS, DISPLAY_SCALE, FORMAT_PRECISION_MINUTE, FORMAT_PRECISION_SECOND, FORMAT_PRECISION_SHORT_DATE, HOUR_IN_MS, HdsDisplayKeyValues, HdsTimeRelativeUnitValues, MILLISECOND_IN_MS, MINUTE_IN_MS, SECOND_IN_MS, THRESHOLD_RELATIVE_TIME_IN_MS, WEEK_IN_MS, TimeService as default };
215
221
  //# sourceMappingURL=hds-time.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hds-time.js","sources":["../../src/services/hds-time.ts"],"sourcesContent":["import Service from '@ember/service';\nimport { task, timeout } from 'ember-concurrency';\nimport { tracked } from '@glimmer/tracking';\nimport { DateTime } from 'luxon';\nimport { isTesting } from '@embroider/macros';\nimport type { TaskGenerator } from 'ember-concurrency';\nimport type {\n DisplayType,\n DefaultDisplayType,\n DisplayFormatType,\n} from './hds-time-types.ts';\n\nexport const MILLISECOND_IN_MS = 1;\nexport const SECOND_IN_MS = 1000 * MILLISECOND_IN_MS;\nexport const MINUTE_IN_MS = 60 * SECOND_IN_MS;\nexport const HOUR_IN_MS = 60 * MINUTE_IN_MS;\nexport const DAY_IN_MS = 24 * HOUR_IN_MS;\nexport const WEEK_IN_MS = 7 * DAY_IN_MS;\n\nexport const THRESHOLD_RELATIVE_TIME_IN_MS = WEEK_IN_MS;\n\nexport enum HdsTimeRelativeUnitValues {\n Second = 'second',\n Hour = 'hour',\n Minute = 'minute',\n Day = 'day',\n Week = 'week',\n}\n\nexport const DEFAULT_RELATIVE_THRESHOLDS = {\n [HdsTimeRelativeUnitValues.Second]: 1 * MINUTE_IN_MS,\n [HdsTimeRelativeUnitValues.Minute]: 1 * HOUR_IN_MS,\n [HdsTimeRelativeUnitValues.Hour]: 1 * DAY_IN_MS,\n [HdsTimeRelativeUnitValues.Day]: 100 * WEEK_IN_MS,\n};\n\nexport enum HdsDisplayKeyValues {\n FriendlyRelative = 'friendly-relative', // Example: 'Sep 5, 2018 (30 minutes ago)'\n FriendlyLocal = 'friendly-local', // Example: 'Sep 5, 2018, 4:07:32 pm'\n FriendlyOnly = 'friendly-only', // Example: 'Sep 5, 2018'\n Relative = 'relative', // Example: 'in 7 days'\n Utc = 'utc', // Example: '2018-09-05T23:15:17345Z'\n}\n\nexport const FORMAT_PRECISION_SHORT_DATE: DisplayFormatType = {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n};\nexport const FORMAT_PRECISION_MINUTE: DisplayFormatType = {\n ...FORMAT_PRECISION_SHORT_DATE,\n hour: 'numeric',\n minute: 'numeric',\n};\nexport const FORMAT_PRECISION_SECOND: DisplayFormatType = {\n ...FORMAT_PRECISION_SHORT_DATE,\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n timeZoneName: 'short',\n};\nexport const DATE_DISPLAY_FORMATS: {\n [x: string]: DisplayFormatType;\n} = {\n [HdsDisplayKeyValues.FriendlyLocal]: FORMAT_PRECISION_SECOND,\n [HdsDisplayKeyValues.FriendlyOnly]: FORMAT_PRECISION_SHORT_DATE,\n};\n\nexport const DEFAULT_DISPLAY = '';\n\nexport const DEFAULT_DISPLAY_MAPPING: {\n [x: string]: DefaultDisplayType;\n} = {\n [HdsDisplayKeyValues.FriendlyRelative]: {\n displayFormat: FORMAT_PRECISION_SHORT_DATE,\n showFriendly: true,\n showRelative: true,\n tooltipFormat: FORMAT_PRECISION_SECOND,\n },\n [HdsDisplayKeyValues.FriendlyLocal]: {\n displayFormat: DATE_DISPLAY_FORMATS[HdsDisplayKeyValues.FriendlyLocal],\n showFriendly: true,\n showRelative: false,\n tooltipFormat: null,\n },\n [HdsDisplayKeyValues.FriendlyOnly]: {\n displayFormat: DATE_DISPLAY_FORMATS[HdsDisplayKeyValues.FriendlyOnly],\n showFriendly: true,\n showRelative: false,\n tooltipFormat: null,\n },\n [HdsDisplayKeyValues.Relative]: {\n displayFormat: null,\n showFriendly: false,\n showRelative: true,\n tooltipFormat: FORMAT_PRECISION_MINUTE,\n },\n [HdsDisplayKeyValues.Utc]: {\n displayFormat: null,\n showFriendly: true,\n showRelative: false,\n tooltipFormat: null,\n },\n};\n\nexport const DISPLAY_SCALE = Object.keys(DEFAULT_DISPLAY_MAPPING);\n\nexport const DISPLAYS = [\n HdsDisplayKeyValues.FriendlyRelative,\n HdsDisplayKeyValues.FriendlyLocal,\n HdsDisplayKeyValues.FriendlyOnly,\n HdsDisplayKeyValues.Relative,\n HdsDisplayKeyValues.Utc,\n];\n\nexport default class TimeService extends Service {\n #listeners = new Set<Date>();\n\n @tracked now = Date.now();\n\n format(\n difference: {\n absValueInMs: number;\n valueInMs: number;\n },\n display = DEFAULT_DISPLAY\n ): DisplayType {\n let displayKey;\n // If the scale display is defined and valid then set that display.\n if (display && DISPLAY_SCALE.includes(display)) {\n displayKey = display;\n } else {\n // If there's no defined display then we will execute the design system's\n // prefered algorithm.\n\n // By default, we assume we will display just a relative display only.\n displayKey = HdsDisplayKeyValues.Relative;\n\n // If the difference in date is greater than the threshold for showing the\n // relative time then switch the display key.\n if (difference.absValueInMs > THRESHOLD_RELATIVE_TIME_IN_MS) {\n displayKey = HdsDisplayKeyValues.FriendlyLocal;\n }\n }\n\n const options: DefaultDisplayType | undefined =\n DEFAULT_DISPLAY_MAPPING[displayKey];\n\n return {\n options,\n difference,\n relative: this.selectTimeRelativeUnit(difference),\n };\n }\n\n // Formats the value of a relative unit.\n formatTimeRelativeUnit(\n value: number,\n unit: string\n ): { value: number; unit: string } {\n return {\n value: Math.trunc(value),\n unit,\n };\n }\n\n // Selects an appropriate display format for the difference.\n selectTimeRelativeUnit(\n { absValueInMs, valueInMs }: { absValueInMs: number; valueInMs: number },\n thresholds: {\n second: number;\n minute: number;\n hour: number;\n day: number;\n } = DEFAULT_RELATIVE_THRESHOLDS\n ): { value: number; unit: string } {\n if (absValueInMs < thresholds[HdsTimeRelativeUnitValues.Second]) {\n return this.formatTimeRelativeUnit(\n valueInMs / SECOND_IN_MS,\n HdsTimeRelativeUnitValues.Second\n );\n }\n\n if (absValueInMs < thresholds[HdsTimeRelativeUnitValues.Minute]) {\n return this.formatTimeRelativeUnit(\n valueInMs / MINUTE_IN_MS,\n HdsTimeRelativeUnitValues.Minute\n );\n }\n\n if (absValueInMs < thresholds[HdsTimeRelativeUnitValues.Hour]) {\n return this.formatTimeRelativeUnit(\n valueInMs / HOUR_IN_MS,\n HdsTimeRelativeUnitValues.Hour\n );\n }\n\n if (absValueInMs < thresholds[HdsTimeRelativeUnitValues.Day]) {\n return this.formatTimeRelativeUnit(\n valueInMs / DAY_IN_MS,\n HdsTimeRelativeUnitValues.Day\n );\n }\n\n return this.formatTimeRelativeUnit(\n valueInMs / WEEK_IN_MS,\n HdsTimeRelativeUnitValues.Week\n );\n }\n\n // Gets the currently subscribed listeners.\n timeDifference(\n startDate: number,\n endDate: Date\n ): { absValueInMs: number; valueInMs: number } {\n const valueInMs = Number(endDate) - Number(startDate);\n return {\n absValueInMs: Math.abs(valueInMs),\n valueInMs,\n };\n }\n\n // Subscribes a listener to the ticking task for time changes.\n register(id: Date): () => void {\n this.#listeners.add(id);\n // @ts-expect-error - TS2339: Property 'perform' does not exist on type '() => TaskGenerator<string | undefined>'\n // note: we could potentially use taskFor via `ember-concurrency-ts` to avoid this exception\n this.start.perform();\n return (): void => {\n this.unregister(id);\n };\n }\n\n // Unregisters listener for the time task.\n unregister(id: Date): boolean {\n return this.#listeners.delete(id);\n }\n\n @task({ drop: true })\n *start(): TaskGenerator<string | undefined> {\n while (this.listeners.size) {\n this.now = Date.now();\n // When testing and canceling a EC task, a timer will never resolve and\n // cause the test to hang while waiting for a permanently hanging timeout.\n // This condition breaks the test out of that.\n // via: http://ember-concurrency.com/docs/testing-debugging/\n if (isTesting()) return;\n yield timeout(SECOND_IN_MS);\n }\n }\n\n // Transforms a JS date to a string representing the UTC ISO date.\n toIsoUtcString(date: Date): string | undefined {\n try {\n return DateTime.fromJSDate(date).toUTC().toJSDate().toISOString();\n } catch (error) {\n console.error('Error: Could not convert date to ISO UTC string; ', error);\n }\n }\n\n // Gets the currently subscribed listeners.\n get listeners(): Set<Date> {\n return this.#listeners;\n }\n}\n"],"names":["MILLISECOND_IN_MS","SECOND_IN_MS","MINUTE_IN_MS","HOUR_IN_MS","DAY_IN_MS","WEEK_IN_MS","THRESHOLD_RELATIVE_TIME_IN_MS","HdsTimeRelativeUnitValues","DEFAULT_RELATIVE_THRESHOLDS","Second","Minute","Hour","Day","HdsDisplayKeyValues","FORMAT_PRECISION_SHORT_DATE","month","day","year","FORMAT_PRECISION_MINUTE","hour","minute","FORMAT_PRECISION_SECOND","second","timeZoneName","DATE_DISPLAY_FORMATS","FriendlyLocal","FriendlyOnly","DEFAULT_DISPLAY","DEFAULT_DISPLAY_MAPPING","FriendlyRelative","displayFormat","showFriendly","showRelative","tooltipFormat","Relative","Utc","DISPLAY_SCALE","Object","keys","DISPLAYS","TimeService","_dec","task","drop","_class","_listeners","WeakMap","Service","constructor","args","_classPrivateFieldInitSpec","Set","_initializerDefineProperty","_descriptor","format","difference","display","displayKey","includes","absValueInMs","options","relative","selectTimeRelativeUnit","formatTimeRelativeUnit","value","unit","Math","trunc","valueInMs","thresholds","Week","timeDifference","startDate","endDate","Number","abs","register","id","_classPrivateFieldGet","add","start","perform","unregister","delete","listeners","size","now","Date","isTesting","timeout","toIsoUtcString","date","DateTime","fromJSDate","toUTC","toJSDate","toISOString","error","console","_applyDecoratedDescriptor","prototype","tracked","configurable","enumerable","writable","initializer","getOwnPropertyDescriptor"],"mappings":"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"}
1
+ {"version":3,"file":"hds-time.js","sources":["../../src/services/hds-time.ts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Service from '@ember/service';\nimport { task, timeout } from 'ember-concurrency';\nimport { tracked } from '@glimmer/tracking';\nimport { DateTime } from 'luxon';\nimport { isTesting } from '@embroider/macros';\nimport type { TaskGenerator } from 'ember-concurrency';\nimport type {\n DisplayType,\n DefaultDisplayType,\n DisplayFormatType,\n} from './hds-time-types.ts';\n\nexport const MILLISECOND_IN_MS = 1;\nexport const SECOND_IN_MS = 1000 * MILLISECOND_IN_MS;\nexport const MINUTE_IN_MS = 60 * SECOND_IN_MS;\nexport const HOUR_IN_MS = 60 * MINUTE_IN_MS;\nexport const DAY_IN_MS = 24 * HOUR_IN_MS;\nexport const WEEK_IN_MS = 7 * DAY_IN_MS;\n\nexport const THRESHOLD_RELATIVE_TIME_IN_MS = WEEK_IN_MS;\n\nexport enum HdsTimeRelativeUnitValues {\n Second = 'second',\n Hour = 'hour',\n Minute = 'minute',\n Day = 'day',\n Week = 'week',\n}\n\nexport const DEFAULT_RELATIVE_THRESHOLDS = {\n [HdsTimeRelativeUnitValues.Second]: 1 * MINUTE_IN_MS,\n [HdsTimeRelativeUnitValues.Minute]: 1 * HOUR_IN_MS,\n [HdsTimeRelativeUnitValues.Hour]: 1 * DAY_IN_MS,\n [HdsTimeRelativeUnitValues.Day]: 100 * WEEK_IN_MS,\n};\n\nexport enum HdsDisplayKeyValues {\n FriendlyRelative = 'friendly-relative', // Example: 'Sep 5, 2018 (30 minutes ago)'\n FriendlyLocal = 'friendly-local', // Example: 'Sep 5, 2018, 4:07:32 pm'\n FriendlyOnly = 'friendly-only', // Example: 'Sep 5, 2018'\n Relative = 'relative', // Example: 'in 7 days'\n Utc = 'utc', // Example: '2018-09-05T23:15:17345Z'\n}\n\nexport const FORMAT_PRECISION_SHORT_DATE: DisplayFormatType = {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n};\nexport const FORMAT_PRECISION_MINUTE: DisplayFormatType = {\n ...FORMAT_PRECISION_SHORT_DATE,\n hour: 'numeric',\n minute: 'numeric',\n};\nexport const FORMAT_PRECISION_SECOND: DisplayFormatType = {\n ...FORMAT_PRECISION_SHORT_DATE,\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n timeZoneName: 'short',\n};\nexport const DATE_DISPLAY_FORMATS: {\n [x: string]: DisplayFormatType;\n} = {\n [HdsDisplayKeyValues.FriendlyLocal]: FORMAT_PRECISION_SECOND,\n [HdsDisplayKeyValues.FriendlyOnly]: FORMAT_PRECISION_SHORT_DATE,\n};\n\nexport const DEFAULT_DISPLAY = '';\n\nexport const DEFAULT_DISPLAY_MAPPING: {\n [x: string]: DefaultDisplayType;\n} = {\n [HdsDisplayKeyValues.FriendlyRelative]: {\n displayFormat: FORMAT_PRECISION_SHORT_DATE,\n showFriendly: true,\n showRelative: true,\n tooltipFormat: FORMAT_PRECISION_SECOND,\n },\n [HdsDisplayKeyValues.FriendlyLocal]: {\n displayFormat: DATE_DISPLAY_FORMATS[HdsDisplayKeyValues.FriendlyLocal],\n showFriendly: true,\n showRelative: false,\n tooltipFormat: null,\n },\n [HdsDisplayKeyValues.FriendlyOnly]: {\n displayFormat: DATE_DISPLAY_FORMATS[HdsDisplayKeyValues.FriendlyOnly],\n showFriendly: true,\n showRelative: false,\n tooltipFormat: null,\n },\n [HdsDisplayKeyValues.Relative]: {\n displayFormat: null,\n showFriendly: false,\n showRelative: true,\n tooltipFormat: FORMAT_PRECISION_MINUTE,\n },\n [HdsDisplayKeyValues.Utc]: {\n displayFormat: null,\n showFriendly: true,\n showRelative: false,\n tooltipFormat: null,\n },\n};\n\nexport const DISPLAY_SCALE = Object.keys(DEFAULT_DISPLAY_MAPPING);\n\nexport const DISPLAYS = [\n HdsDisplayKeyValues.FriendlyRelative,\n HdsDisplayKeyValues.FriendlyLocal,\n HdsDisplayKeyValues.FriendlyOnly,\n HdsDisplayKeyValues.Relative,\n HdsDisplayKeyValues.Utc,\n];\n\nexport default class TimeService extends Service {\n #listeners = new Set<Date>();\n\n @tracked now = Date.now();\n\n format(\n difference: {\n absValueInMs: number;\n valueInMs: number;\n },\n display = DEFAULT_DISPLAY\n ): DisplayType {\n let displayKey;\n // If the scale display is defined and valid then set that display.\n if (display && DISPLAY_SCALE.includes(display)) {\n displayKey = display;\n } else {\n // If there's no defined display then we will execute the design system's\n // prefered algorithm.\n\n // By default, we assume we will display just a relative display only.\n displayKey = HdsDisplayKeyValues.Relative;\n\n // If the difference in date is greater than the threshold for showing the\n // relative time then switch the display key.\n if (difference.absValueInMs > THRESHOLD_RELATIVE_TIME_IN_MS) {\n displayKey = HdsDisplayKeyValues.FriendlyLocal;\n }\n }\n\n const options: DefaultDisplayType | undefined =\n DEFAULT_DISPLAY_MAPPING[displayKey];\n\n return {\n options,\n difference,\n relative: this.selectTimeRelativeUnit(difference),\n };\n }\n\n // Formats the value of a relative unit.\n formatTimeRelativeUnit(\n value: number,\n unit: Intl.RelativeTimeFormatUnit\n ): { value: number; unit: Intl.RelativeTimeFormatUnit } {\n return {\n value: Math.trunc(value),\n unit,\n };\n }\n\n // Selects an appropriate display format for the difference.\n selectTimeRelativeUnit(\n { absValueInMs, valueInMs }: { absValueInMs: number; valueInMs: number },\n thresholds: {\n second: number;\n minute: number;\n hour: number;\n day: number;\n } = DEFAULT_RELATIVE_THRESHOLDS\n ): { value: number; unit: Intl.RelativeTimeFormatUnit } {\n if (absValueInMs < thresholds[HdsTimeRelativeUnitValues.Second]) {\n return this.formatTimeRelativeUnit(\n valueInMs / SECOND_IN_MS,\n HdsTimeRelativeUnitValues.Second\n );\n }\n\n if (absValueInMs < thresholds[HdsTimeRelativeUnitValues.Minute]) {\n return this.formatTimeRelativeUnit(\n valueInMs / MINUTE_IN_MS,\n HdsTimeRelativeUnitValues.Minute\n );\n }\n\n if (absValueInMs < thresholds[HdsTimeRelativeUnitValues.Hour]) {\n return this.formatTimeRelativeUnit(\n valueInMs / HOUR_IN_MS,\n HdsTimeRelativeUnitValues.Hour\n );\n }\n\n if (absValueInMs < thresholds[HdsTimeRelativeUnitValues.Day]) {\n return this.formatTimeRelativeUnit(\n valueInMs / DAY_IN_MS,\n HdsTimeRelativeUnitValues.Day\n );\n }\n\n return this.formatTimeRelativeUnit(\n valueInMs / WEEK_IN_MS,\n HdsTimeRelativeUnitValues.Week\n );\n }\n\n // Gets the currently subscribed listeners.\n timeDifference(\n startDate: number,\n endDate: Date\n ): { absValueInMs: number; valueInMs: number } {\n const valueInMs = Number(endDate) - Number(startDate);\n return {\n absValueInMs: Math.abs(valueInMs),\n valueInMs,\n };\n }\n\n // Subscribes a listener to the ticking task for time changes.\n register(id: Date): () => void {\n this.#listeners.add(id);\n // @ts-expect-error - TS2339: Property 'perform' does not exist on type '() => TaskGenerator<string | undefined>'\n // note: we could potentially use taskFor via `ember-concurrency-ts` to avoid this exception\n this.start.perform();\n return (): void => {\n this.unregister(id);\n };\n }\n\n // Unregisters listener for the time task.\n unregister(id: Date): boolean {\n return this.#listeners.delete(id);\n }\n\n @task({ drop: true })\n *start(): TaskGenerator<string | undefined> {\n while (this.listeners.size) {\n this.now = Date.now();\n // When testing and canceling a EC task, a timer will never resolve and\n // cause the test to hang while waiting for a permanently hanging timeout.\n // This condition breaks the test out of that.\n // via: http://ember-concurrency.com/docs/testing-debugging/\n if (isTesting()) return;\n yield timeout(SECOND_IN_MS);\n }\n }\n\n // Transforms a JS date to a string representing the UTC ISO date.\n toIsoUtcString(date: Date): string | undefined {\n try {\n return DateTime.fromJSDate(date).toUTC().toJSDate().toISOString();\n } catch (error) {\n console.error('Error: Could not convert date to ISO UTC string; ', error);\n }\n }\n\n // Gets the currently subscribed listeners.\n get listeners(): Set<Date> {\n return this.#listeners;\n }\n}\n"],"names":["MILLISECOND_IN_MS","SECOND_IN_MS","MINUTE_IN_MS","HOUR_IN_MS","DAY_IN_MS","WEEK_IN_MS","THRESHOLD_RELATIVE_TIME_IN_MS","HdsTimeRelativeUnitValues","DEFAULT_RELATIVE_THRESHOLDS","Second","Minute","Hour","Day","HdsDisplayKeyValues","FORMAT_PRECISION_SHORT_DATE","month","day","year","FORMAT_PRECISION_MINUTE","hour","minute","FORMAT_PRECISION_SECOND","second","timeZoneName","DATE_DISPLAY_FORMATS","FriendlyLocal","FriendlyOnly","DEFAULT_DISPLAY","DEFAULT_DISPLAY_MAPPING","FriendlyRelative","displayFormat","showFriendly","showRelative","tooltipFormat","Relative","Utc","DISPLAY_SCALE","Object","keys","DISPLAYS","TimeService","Service","Set","g","prototype","tracked","Date","now","i","void 0","format","difference","display","displayKey","includes","absValueInMs","options","relative","selectTimeRelativeUnit","formatTimeRelativeUnit","value","unit","Math","trunc","valueInMs","thresholds","Week","timeDifference","startDate","endDate","Number","abs","register","id","add","start","perform","unregister","delete","listeners","size","isTesting","timeout","n","task","drop","toIsoUtcString","date","DateTime","fromJSDate","toUTC","toJSDate","toISOString","error","console"],"mappings":"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"}