@hokulea/ember 0.9.0 → 0.10.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 (198) hide show
  1. package/declarations/-private/helpers.d.ts +3 -1
  2. package/declarations/-private/helpers.d.ts.map +1 -1
  3. package/declarations/-private/push.gts.d.ts +20 -0
  4. package/declarations/-private/push.gts.d.ts.map +1 -0
  5. package/declarations/-private/shapes.d.ts +5 -0
  6. package/declarations/-private/shapes.d.ts.map +1 -0
  7. package/declarations/components/actions/button.gts.d.ts +6 -7
  8. package/declarations/components/actions/button.gts.d.ts.map +1 -1
  9. package/declarations/components/actions/icon-button.gts.d.ts +6 -7
  10. package/declarations/components/actions/icon-button.gts.d.ts.map +1 -1
  11. package/declarations/components/avatar.gts.d.ts +2 -0
  12. package/declarations/components/avatar.gts.d.ts.map +1 -0
  13. package/declarations/components/controls/-input.d.ts +3 -2
  14. package/declarations/components/controls/-input.d.ts.map +1 -1
  15. package/declarations/components/controls/{-menu.d.ts → -menu.gts.d.ts} +3 -4
  16. package/declarations/components/controls/-menu.gts.d.ts.map +1 -0
  17. package/declarations/components/controls/currency-input.gts.d.ts.map +1 -1
  18. package/declarations/components/controls/date-input.gts.d.ts.map +1 -1
  19. package/declarations/components/controls/email-input.gts.d.ts.map +1 -1
  20. package/declarations/components/controls/input-builder.gts.d.ts +2 -1
  21. package/declarations/components/controls/input-builder.gts.d.ts.map +1 -1
  22. package/declarations/components/controls/menu.gts.d.ts +1 -1
  23. package/declarations/components/controls/menu.gts.d.ts.map +1 -1
  24. package/declarations/components/controls/number-input.gts.d.ts.map +1 -1
  25. package/declarations/components/controls/password-input.gts.d.ts.map +1 -1
  26. package/declarations/components/controls/phone-input.gts.d.ts.map +1 -1
  27. package/declarations/components/controls/radio.gts.d.ts.map +1 -1
  28. package/declarations/components/controls/range-input.gts.d.ts +1 -1
  29. package/declarations/components/controls/range-input.gts.d.ts.map +1 -1
  30. package/declarations/components/controls/select.gts.d.ts +3 -0
  31. package/declarations/components/controls/select.gts.d.ts.map +1 -1
  32. package/declarations/components/controls/text-area.gts.d.ts.map +1 -1
  33. package/declarations/components/controls/text-input.gts.d.ts.map +1 -1
  34. package/declarations/components/data/data-table.gts.d.ts +19 -0
  35. package/declarations/components/data/data-table.gts.d.ts.map +1 -0
  36. package/declarations/components/data-table.gts.d.ts +2 -0
  37. package/declarations/components/data-table.gts.d.ts.map +1 -0
  38. package/declarations/components/form/form.gts.d.ts +2 -1
  39. package/declarations/components/form/form.gts.d.ts.map +1 -1
  40. package/declarations/components/form/reset.gts.d.ts +4 -4
  41. package/declarations/components/form/reset.gts.d.ts.map +1 -1
  42. package/declarations/components/form/submit.gts.d.ts +4 -4
  43. package/declarations/components/form/submit.gts.d.ts.map +1 -1
  44. package/declarations/components/graphics/avatar.gts.d.ts +10 -0
  45. package/declarations/components/graphics/avatar.gts.d.ts.map +1 -0
  46. package/declarations/components/link.gts.d.ts +2 -0
  47. package/declarations/components/link.gts.d.ts.map +1 -0
  48. package/declarations/components/navigation/-pagination.d.ts +17 -0
  49. package/declarations/components/navigation/-pagination.d.ts.map +1 -0
  50. package/declarations/components/navigation/app-header.gts.d.ts +2 -3
  51. package/declarations/components/navigation/app-header.gts.d.ts.map +1 -1
  52. package/declarations/components/navigation/link.gts.d.ts +13 -0
  53. package/declarations/components/navigation/link.gts.d.ts.map +1 -0
  54. package/declarations/components/navigation/nav-link.gts.d.ts +4 -2
  55. package/declarations/components/navigation/nav-link.gts.d.ts.map +1 -1
  56. package/declarations/components/navigation/pagination.gts.d.ts +78 -0
  57. package/declarations/components/navigation/pagination.gts.d.ts.map +1 -0
  58. package/declarations/components/pagination.gts.d.ts +2 -0
  59. package/declarations/components/pagination.gts.d.ts.map +1 -0
  60. package/declarations/index.d.ts +5 -1
  61. package/declarations/index.d.ts.map +1 -1
  62. package/declarations/template-registry.d.ts +9 -1
  63. package/declarations/template-registry.d.ts.map +1 -1
  64. package/declarations/test-support/index.d.ts +3 -0
  65. package/declarations/test-support/index.d.ts.map +1 -1
  66. package/declarations/test-support/page-objects/avatar.d.ts +10 -0
  67. package/declarations/test-support/page-objects/avatar.d.ts.map +1 -0
  68. package/declarations/test-support/page-objects/data-table.d.ts +36 -0
  69. package/declarations/test-support/page-objects/data-table.d.ts.map +1 -0
  70. package/declarations/test-support/page-objects/input.d.ts +1 -0
  71. package/declarations/test-support/page-objects/input.d.ts.map +1 -1
  72. package/declarations/test-support/page-objects/pagination.d.ts +65 -0
  73. package/declarations/test-support/page-objects/pagination.d.ts.map +1 -0
  74. package/declarations/test-support/page-objects/select.d.ts +1 -0
  75. package/declarations/test-support/page-objects/select.d.ts.map +1 -1
  76. package/dist/-input-DGR-n9U_.js.map +1 -1
  77. package/dist/_app_/components/avatar.js +1 -0
  78. package/dist/_app_/components/data-table.js +1 -0
  79. package/dist/_app_/components/link.js +1 -0
  80. package/dist/_app_/components/pagination.js +1 -0
  81. package/dist/{app-header-B6Q7pbiY.js → app-header-nmqytjxx.js} +7 -12
  82. package/dist/app-header-nmqytjxx.js.map +1 -0
  83. package/dist/avatar-CtqAk4G6.js +29 -0
  84. package/dist/avatar-CtqAk4G6.js.map +1 -0
  85. package/dist/button-BhxkZ70u.js +26 -0
  86. package/dist/button-BhxkZ70u.js.map +1 -0
  87. package/dist/{card-Bdv-UvKX.js → card-tK78paQn.js} +2 -2
  88. package/dist/{card-Bdv-UvKX.js.map → card-tK78paQn.js.map} +1 -1
  89. package/dist/{checkbox-D4vALmT2.js → checkbox-D3_2ps5M.js} +2 -2
  90. package/dist/{checkbox-D4vALmT2.js.map → checkbox-D3_2ps5M.js.map} +1 -1
  91. package/dist/components/app-header.js +1 -1
  92. package/dist/components/avatar.js +2 -0
  93. package/dist/components/avatar.js.map +1 -0
  94. package/dist/components/button.js +1 -1
  95. package/dist/components/card.js +1 -1
  96. package/dist/components/checkbox.js +1 -1
  97. package/dist/components/currency-input.js +1 -1
  98. package/dist/components/data-table.js +2 -0
  99. package/dist/components/data-table.js.map +1 -0
  100. package/dist/components/date-input.js +1 -1
  101. package/dist/components/email-input.js +1 -1
  102. package/dist/components/focus-page.js +1 -1
  103. package/dist/components/form.js +1 -1
  104. package/dist/components/icon-button.js +1 -1
  105. package/dist/components/icon.js +1 -1
  106. package/dist/components/input-builder.js +1 -1
  107. package/dist/components/link.js +2 -0
  108. package/dist/components/link.js.map +1 -0
  109. package/dist/components/menu.js +1 -1
  110. package/dist/components/navigation-list.js +1 -1
  111. package/dist/components/number-input.js +1 -1
  112. package/dist/components/page.js +1 -1
  113. package/dist/components/pagination.js +2 -0
  114. package/dist/components/pagination.js.map +1 -0
  115. package/dist/components/password-input.js +1 -1
  116. package/dist/components/phone-input.js +1 -1
  117. package/dist/components/radio.js +1 -1
  118. package/dist/components/range-input.js +1 -1
  119. package/dist/components/sectioned-page.js +1 -1
  120. package/dist/components/select.js +1 -1
  121. package/dist/components/tabs.js +1 -1
  122. package/dist/components/text-area.js +1 -1
  123. package/dist/components/text-input.js +1 -1
  124. package/dist/{currency-input-8ef0Igfb.js → currency-input-tBhgIMTh.js} +4 -4
  125. package/dist/currency-input-tBhgIMTh.js.map +1 -0
  126. package/dist/data-table-5VDYeRya.js +18 -0
  127. package/dist/data-table-5VDYeRya.js.map +1 -0
  128. package/dist/{date-input-BayaBuSb.js → date-input-DLv9jE39.js} +3 -3
  129. package/dist/{date-input-BayaBuSb.js.map → date-input-DLv9jE39.js.map} +1 -1
  130. package/dist/{email-input-j-Z0KO4A.js → email-input-BR33Qevz.js} +3 -3
  131. package/dist/{email-input-j-Z0KO4A.js.map → email-input-BR33Qevz.js.map} +1 -1
  132. package/dist/{focus-page-B9myJVvL.js → focus-page-DFu6qtBk.js} +2 -2
  133. package/dist/{focus-page-B9myJVvL.js.map → focus-page-DFu6qtBk.js.map} +1 -1
  134. package/dist/{form-DWyQ6QHX.js → form-VsNkRlXs.js} +15 -15
  135. package/dist/{form-DWyQ6QHX.js.map → form-VsNkRlXs.js.map} +1 -1
  136. package/dist/{helpers-DS9du02l.js → helpers-D4So5-uK.js} +8 -2
  137. package/dist/helpers-D4So5-uK.js.map +1 -0
  138. package/dist/{icon-bLZqjTMP.js → icon-BfRBkZ72.js} +2 -2
  139. package/dist/icon-BfRBkZ72.js.map +1 -0
  140. package/dist/icon-button-DBt7fMi1.js +38 -0
  141. package/dist/icon-button-DBt7fMi1.js.map +1 -0
  142. package/dist/index.js +29 -25
  143. package/dist/index.js.map +1 -1
  144. package/dist/{input-builder-DmcQbywA.js → input-builder-DHYx-2Yz.js} +2 -2
  145. package/dist/input-builder-DHYx-2Yz.js.map +1 -0
  146. package/dist/link-bqsg26Cc.js +18 -0
  147. package/dist/link-bqsg26Cc.js.map +1 -0
  148. package/dist/{menu-CZKNGJ91.js → menu-s0AthZse.js} +6 -4
  149. package/dist/menu-s0AthZse.js.map +1 -0
  150. package/dist/nav-link-CDtYj6HW.js +22 -0
  151. package/dist/nav-link-CDtYj6HW.js.map +1 -0
  152. package/dist/{navigation-list-Cxs6uZdM.js → navigation-list-Ng5UsNCY.js} +2 -2
  153. package/dist/{navigation-list-Cxs6uZdM.js.map → navigation-list-Ng5UsNCY.js.map} +1 -1
  154. package/dist/{number-input-B84zcPlM.js → number-input-FJympEv2.js} +3 -3
  155. package/dist/{number-input-B84zcPlM.js.map → number-input-FJympEv2.js.map} +1 -1
  156. package/dist/{page-BcSgHxr7.js → page-BuLkLO08.js} +2 -2
  157. package/dist/{page-BcSgHxr7.js.map → page-BuLkLO08.js.map} +1 -1
  158. package/dist/pagination-DCMxI10i.js +124 -0
  159. package/dist/pagination-DCMxI10i.js.map +1 -0
  160. package/dist/{password-input-BMp5uscw.js → password-input-DV5yb10h.js} +3 -3
  161. package/dist/password-input-DV5yb10h.js.map +1 -0
  162. package/dist/{phone-input-DeaTM5yP.js → phone-input-Uv5v9hK9.js} +3 -3
  163. package/dist/{phone-input-DeaTM5yP.js.map → phone-input-Uv5v9hK9.js.map} +1 -1
  164. package/dist/push-DnJFFc_p.js +24 -0
  165. package/dist/push-DnJFFc_p.js.map +1 -0
  166. package/dist/{radio-CGBLrzK4.js → radio-CLF40kob.js} +3 -3
  167. package/dist/{radio-CGBLrzK4.js.map → radio-CLF40kob.js.map} +1 -1
  168. package/dist/{range-input-BiAPgpW8.js → range-input-BIb7GkKH.js} +2 -2
  169. package/dist/range-input-BIb7GkKH.js.map +1 -0
  170. package/dist/{sectioned-page-fB9mV5WD.js → sectioned-page-CgINWVQ2.js} +3 -3
  171. package/dist/{sectioned-page-fB9mV5WD.js.map → sectioned-page-CgINWVQ2.js.map} +1 -1
  172. package/dist/{select-DxyaUFuy.js → select-CeO8AZMK.js} +5 -2
  173. package/dist/select-CeO8AZMK.js.map +1 -0
  174. package/dist/{tabs-a9GhNQv9.js → tabs-DAscspzh.js} +2 -2
  175. package/dist/{tabs-a9GhNQv9.js.map → tabs-DAscspzh.js.map} +1 -1
  176. package/dist/test-support/index.js +61 -16
  177. package/dist/test-support/index.js.map +1 -1
  178. package/dist/{text-area-55_E1zv8.js → text-area-DF8-cDiy.js} +3 -3
  179. package/dist/{text-area-55_E1zv8.js.map → text-area-DF8-cDiy.js.map} +1 -1
  180. package/dist/{text-input-CK-yGbI5.js → text-input-CcIcYksE.js} +3 -3
  181. package/dist/{text-input-CK-yGbI5.js.map → text-input-CcIcYksE.js.map} +1 -1
  182. package/package.json +9 -5
  183. package/declarations/components/controls/-menu.d.ts.map +0 -1
  184. package/dist/app-header-B6Q7pbiY.js.map +0 -1
  185. package/dist/button-XdQyGTGA.js +0 -24
  186. package/dist/button-XdQyGTGA.js.map +0 -1
  187. package/dist/currency-input-8ef0Igfb.js.map +0 -1
  188. package/dist/helpers-DS9du02l.js.map +0 -1
  189. package/dist/icon-bLZqjTMP.js.map +0 -1
  190. package/dist/icon-button-7K-W_8jc.js +0 -37
  191. package/dist/icon-button-7K-W_8jc.js.map +0 -1
  192. package/dist/input-builder-DmcQbywA.js.map +0 -1
  193. package/dist/menu-CZKNGJ91.js.map +0 -1
  194. package/dist/nav-link-CGVtuqwC.js +0 -30
  195. package/dist/nav-link-CGVtuqwC.js.map +0 -1
  196. package/dist/password-input-BMp5uscw.js.map +0 -1
  197. package/dist/range-input-BiAPgpW8.js.map +0 -1
  198. package/dist/select-DxyaUFuy.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-bqsg26Cc.js","sources":["../src/components/navigation/link.gts"],"sourcesContent":["import { on } from '@ember/modifier';\n\nimport { link } from 'ember-link';\n\nimport { isActive } from '../../-private/push.gts';\n\nimport type { TOC } from '@ember/component/template-only';\n\ninterface LinkSignature {\n Element: HTMLAnchorElement;\n Args: {\n href: string;\n };\n Blocks: {\n default: [];\n };\n}\n\nexport const Link: TOC<LinkSignature> = <template>\n {{#let (link @href) as |l|}}\n <a\n href={{l.url}}\n {{on \"click\" l.open}}\n data-external={{l.isExternal}}\n aria-current=\"{{if (isActive l) 'page'}}\"\n ...attributes\n >\n {{yield}}\n </a>\n {{/let}}\n</template>;\n"],"names":["Link","setComponentTemplate","precompileTemplate","strictMode","scope","link","isActive","on","templateOnly"],"mappings":";;;;;;;MAkBaA,IAAU,GAAAC,oBAAA,CAAiBC,kBAAA,CAAA,sNAAA,EAYxC;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAC,IAAA;IAAAC,QAAA;AAAAC,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA;;;;"}
@@ -6,10 +6,10 @@ import { next } from '@ember/runloop';
6
6
  import { service } from '@ember/service';
7
7
  import { htmlSafe } from '@ember/template';
8
8
  import { ariaMenu } from 'ember-aria-voyager';
9
- import { CommandElement } from 'ember-command';
10
9
  import { TrackedArray } from 'tracked-built-ins';
11
10
  import styles from '@hokulea/core/controls.module.css';
12
11
  import { d as disabled } from './disabled-B_FQ0Z51.js';
12
+ import { P as PushElement } from './push-DnJFFc_p.js';
13
13
  import { popover } from './helpers/popover.js';
14
14
  import { precompileTemplate } from '@ember/template-compilation';
15
15
  import { setComponentTemplate } from '@ember/component';
@@ -53,19 +53,21 @@ import { g, i } from 'decorator-transforms/runtime-esm';
53
53
  class MenuItem extends Component {
54
54
  constructor(owner, args) {
55
55
  super(owner, args);
56
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
56
57
  args.registerItem(this);
57
58
  registerDestructor(this, () => {
59
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
58
60
  args.unregisterItem(this);
59
61
  });
60
62
  }
61
63
  static {
62
- setComponentTemplate(precompileTemplate("\n {{#if (has-block \"menu\")}}\n {{#let (popover position=\"right-start\") as |p|}}\n <button type=\"button\" role=\"menuitem\" aria-haspopup=\"menu\" {{disabled when=(if @disabled @disabled false)}} {{p.trigger}}>\n {{~yield to=\"label\"~}}\n </button>\n\n <Menu {{p.target}} as |m|>\n {{yield m to=\"menu\"}}\n </Menu>\n {{/let}}\n {{else}}\n <CommandElement @command={{@push}} {{disabled when=(if @disabled @disabled false)}} role=\"menuitem\">\n {{~yield~}}\n </CommandElement>\n {{/if}}\n ", {
64
+ setComponentTemplate(precompileTemplate("\n {{#if (has-block \"menu\")}}\n {{#let (popover position=\"right-start\") as |p|}}\n <button type=\"button\" role=\"menuitem\" aria-haspopup=\"menu\" {{disabled when=(if @disabled @disabled false)}} {{p.trigger}}>\n {{~yield to=\"label\"~}}\n </button>\n\n <Menu {{p.target}} as |m|>\n {{yield m to=\"menu\"}}\n </Menu>\n {{/let}}\n {{else}}\n <PushElement @push={{@push}} @href={{@href}} {{disabled when=(if @disabled @disabled false)}} role=\"menuitem\">\n {{~yield~}}\n </PushElement>\n {{/if}}\n ", {
63
65
  strictMode: true,
64
66
  scope: () => ({
65
67
  popover,
66
68
  disabled,
67
69
  Menu,
68
- CommandElement
70
+ PushElement
69
71
  })
70
72
  }), this);
71
73
  }
@@ -113,4 +115,4 @@ class Menu extends Component {
113
115
  }
114
116
 
115
117
  export { Menu as M };
116
- //# sourceMappingURL=menu-CZKNGJ91.js.map
118
+ //# sourceMappingURL=menu-s0AthZse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu-s0AthZse.js","sources":["../src/components/controls/menu.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { registerDestructor } from '@ember/destroyable';\nimport { hash } from '@ember/helper';\nimport { next } from '@ember/runloop';\nimport { service } from '@ember/service';\nimport { htmlSafe } from '@ember/template';\n\nimport { ariaMenu } from 'ember-aria-voyager';\nimport { TrackedArray } from 'tracked-built-ins';\n\nimport styles from '@hokulea/core/controls.module.css';\n\nimport disabled from '../../-private/modifiers/disabled.ts';\nimport { PushElement } from '../../-private/push.gts';\nimport { popover } from '../../helpers/popover.ts';\n\nimport type { MenuItemArgs, MenuItemBlocks, MenuItemElement } from './-menu.gts';\nimport type Owner from '@ember/owner';\nimport type { WithBoundArgs } from '@glint/template';\nimport type FastBoot from 'ember-cli-fastboot/services/fastboot';\n\nexport type MenuDefaultBlock = {\n Item: WithBoundArgs<typeof MenuItem, 'registerItem' | 'unregisterItem'>;\n};\n\nexport interface MenuItemSignature {\n Element: MenuItemElement;\n Args: MenuItemArgs & {\n registerItem: (item: MenuItem) => void;\n unregisterItem: (item: MenuItem) => void;\n };\n Blocks: MenuItemBlocks & {\n menu?: [MenuDefaultBlock];\n };\n}\n\n// below are attempts at conditional typing based on provided blocks in dynamic invocation\n\n// type MenuItemArgs = {\n// disabled?: boolean;\n// registerItem: (item: MenuItem) => void;\n// unregisterItem: (item: MenuItem) => void;\n// };\n\n// export interface MenuItemSignature<T = {}> {\n// Element: HTMLButtonElement | HTMLAnchorElement;\n// Args: T extends { Blocks: { default: [] } }\n// ? MenuItemArgs & {\n// push: CommandAction;\n// }\n// : MenuItemArgs;\n// Blocks: T extends { Blocks: { default: [] } }\n// ? { default: [] }\n// : { label: []; menu: [MenuDefaultBlock] };\n// }\n\n// & (\n// | {\n// Args: MenuItemArgs & {\n// push: CommandAction;\n// };\n// Blocks: {\n// default: [];\n// };\n// }\n// | {\n// Args: MenuItemArgs;\n// Blocks: {\n// label: [];\n// menu: [MenuDefaultBlock];\n// };\n// }\n// );\n\n/* eslint-disable @typescript-eslint/no-use-before-define */\nclass MenuItem extends Component<MenuItemSignature> {\n constructor(owner: Owner, args: MenuItemSignature['Args']) {\n super(owner, args);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n args.registerItem(this);\n\n registerDestructor(this, () => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n args.unregisterItem(this);\n });\n }\n\n <template>\n {{#if (has-block \"menu\")}}\n {{#let (popover position=\"right-start\") as |p|}}\n <button\n type=\"button\"\n role=\"menuitem\"\n aria-haspopup=\"menu\"\n {{disabled when=(if @disabled @disabled false)}}\n {{p.trigger}}\n >\n {{~yield to=\"label\"~}}\n </button>\n\n <Menu {{p.target}} as |m|>\n {{yield m to=\"menu\"}}\n </Menu>\n {{/let}}\n {{else}}\n <PushElement\n @push={{@push}}\n @href={{@href}}\n {{disabled when=(if @disabled @disabled false)}}\n role=\"menuitem\"\n >\n {{~yield~}}\n </PushElement>\n {{/if}}\n </template>\n}\n/* eslint-enable @typescript-eslint/no-use-before-define */\n\nexport interface MenuSignature {\n Element: HTMLDivElement;\n Args: {\n disabled?: boolean;\n };\n Blocks: {\n default: [MenuDefaultBlock];\n };\n}\n\nexport class Menu extends Component<MenuSignature> {\n @service declare fastboot?: FastBoot;\n\n @tracked items: MenuItem[] = new TrackedArray();\n\n get hideInSSR() {\n return this.fastboot?.isFastBoot;\n }\n\n registerItem = (item: MenuItem) => {\n // eslint-disable-next-line ember/no-runloop\n next(() => {\n this.items.push(item);\n });\n };\n\n unregisterItem = (item: MenuItem) => {\n // eslint-disable-next-line ember/no-runloop\n next(() => {\n this.items.splice(this.items.indexOf(item), 1);\n });\n };\n\n <template>\n <div\n class={{styles.menu}}\n data-test-menu\n ...attributes\n {{ariaMenu items=this.items disabled=@disabled}}\n style={{if this.hideInSSR (htmlSafe \"display: none\")}}\n >\n {{yield\n (hash\n Item=(component\n MenuItem registerItem=this.registerItem unregisterItem=this.unregisterItem\n )\n )\n }}\n </div>\n </template>\n}\n"],"names":["MenuItem","Component","constructor","owner","args","registerItem","registerDestructor","unregisterItem","setComponentTemplate","precompileTemplate","strictMode","scope","popover","disabled","Menu","PushElement","g","prototype","service","i","void 0","tracked","TrackedArray","hideInSSR","fastboot","isFastBoot","item","next","items","push","splice","indexOf","styles","htmlSafe","ariaMenu","hash"],"mappings":";;;;;;;;;;;;;;;;;AAqCA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA,MAAMA,QAAA,SAAiBC,SAAA,CAAU;AAC/BC,EAAAA,WAAAA,CAAYC,KAAY,EAAEC,IAA+B,EAAE;AACzD,IAAA,KAAK,CAACD,KAAA,EAAOC,IAAA,CAAA;AAEb;AACAA,IAAAA,IAAA,CAAKC,YAAY,CAAC,IAAI,CAAA;IAEtBC,kBAAA,CAAmB,IAAI,EAAE,MAAA;AACvB;AACAF,MAAAA,IAAA,CAAKG,cAAc,CAAC,IAAI,CAAA;AAC1B,IAAA,CAAA,CAAA;AACF,EAAA;AAEA,EAAA;IAAAC,oBAAA,CAAAC,kBAAA,CAAA,2kBAAA,EA2BA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,OAAA;QAAAC,QAAA;QAAAC,IAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;AACA;;AAYO,MAAMD,aAAab,SAAA,CAAU;AAAA,EAAA;IAAAe,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,UAAA,EAAA,CACjCC,OAAA,CAAA,CAAA;AAAA;AAAA,EAAA,SAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,UAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAJ,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,OAAA,EAAA,CAEAI,OAAA,CAAA,EAAA,YAAA;MAAA,OAA4B,IAAIC,YAAA,EAAA;AAAA,IAAA,CAAA,CAAA;AAAA;AAAA,EAAA,MAAA,IAAAH,CAAA,CAAA,IAAA,EAAA,OAAA,CAAA,EAAAC,MAAA;EAEjC,IAAIG,SAAAA,GAAY;AACd,IAAA,OAAO,IAAI,CAACC,QAAQ,EAAEC,UAAA;AACxB,EAAA;EAEApB,YAAA,GAAgBqB,IAAM,IAAA;AACpB;AACAC,IAAAA,IAAA,CAAK,MAAA;AACH,MAAA,IAAI,CAACC,KAAK,CAACC,IAAI,CAACH,IAAA,CAAA;AAClB,IAAA,CAAA,CAAA;EACF,CAAA;EAEAnB,cAAA,GAAkBmB,IAAM,IAAA;AACtB;AACAC,IAAAA,IAAA,CAAK,MAAA;AACH,MAAA,IAAI,CAACC,KAAK,CAACE,MAAM,CAAC,IAAI,CAACF,KAAK,CAACG,OAAO,CAACL,IAAA,CAAA,EAAO,CAAA,CAAA;AAC9C,IAAA,CAAA,CAAA;EACF,CAAA;AAEA,EAAA;IAAAlB,oBAAA,CAAAC,kBAAA,CAAA,8SAAA,EAgBA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAqB,MAAA;QAAAC,QAAA;QAAAC,QAAA;QAAAC,IAAA;AAAAnC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
@@ -0,0 +1,22 @@
1
+ import { P as PushElement } from './push-DnJFFc_p.js';
2
+ import { I as Icon } from './icon-BfRBkZ72.js';
3
+ import { precompileTemplate } from '@ember/template-compilation';
4
+ import { setComponentTemplate } from '@ember/component';
5
+ import templateOnly from '@ember/component/template-only';
6
+
7
+ const MaybeIcon = setComponentTemplate(precompileTemplate("\n {{#if @icon}}\n <Icon @icon={{@icon}} part=\"icon\" />\n {{/if}}\n", {
8
+ strictMode: true,
9
+ scope: () => ({
10
+ Icon
11
+ })
12
+ }), templateOnly());
13
+ const NavLink = setComponentTemplate(precompileTemplate("\n <PushElement @push={{@push}} @href={{@href}} part=\"item\" ...attributes>\n <MaybeIcon @icon={{@icon}} />\n {{yield}}\n </PushElement>\n", {
14
+ strictMode: true,
15
+ scope: () => ({
16
+ PushElement,
17
+ MaybeIcon
18
+ })
19
+ }), templateOnly());
20
+
21
+ export { NavLink as N };
22
+ //# sourceMappingURL=nav-link-CDtYj6HW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nav-link-CDtYj6HW.js","sources":["../src/components/navigation/nav-link.gts"],"sourcesContent":["import { PushElement } from '../../-private/push.gts';\nimport { Icon } from '../graphics/icon.gts';\n\nimport type { MenuItemArgs, MenuItemBlocks } from '../controls/-menu.gts';\nimport type { TOC } from '@ember/component/template-only';\n\nconst MaybeIcon: TOC<{ Args: { icon?: string } }> = <template>\n {{#if @icon}}\n <Icon @icon={{@icon}} part=\"icon\" />\n {{/if}}\n</template>;\n\ninterface NavLinkSignature {\n Args: MenuItemArgs & {\n href?: string;\n icon?: string;\n };\n Blocks: MenuItemBlocks;\n}\n\nexport const NavLink: TOC<NavLinkSignature> = <template>\n <PushElement @push={{@push}} @href={{@href}} part=\"item\" ...attributes>\n <MaybeIcon @icon={{@icon}} />\n {{yield}}\n </PushElement>\n</template>;\n"],"names":["MaybeIcon","setComponentTemplate","precompileTemplate","strictMode","scope","Icon","templateOnly","NavLink","PushElement"],"mappings":";;;;;;AAMA,MAAMA,SAA8C,GAAAC,oBAAA,CAAAC,kBAAA,CAAA,4EAAA,EAIpD;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;AAAAC,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA,CAAA;MAUGC,OAAa,GAAAN,oBAAA,CAAoBC,kBAAA,CAAA,qJAAA,EAK9C;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAI,WAAA;AAAAR,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAM,YAAA,EAAA;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { hash } from '@ember/helper';
2
2
  import styles from '@hokulea/core/navigation.module.css';
3
- import { N as NavLink } from './nav-link-CGVtuqwC.js';
3
+ import { N as NavLink } from './nav-link-CDtYj6HW.js';
4
4
  import { precompileTemplate } from '@ember/template-compilation';
5
5
  import { setComponentTemplate } from '@ember/component';
6
6
  import templateOnly from '@ember/component/template-only';
@@ -19,4 +19,4 @@ const NavigationList = setComponentTemplate(precompileTemplate("\n <nav class={
19
19
  }), templateOnly());
20
20
 
21
21
  export { NavigationList as N };
22
- //# sourceMappingURL=navigation-list-Cxs6uZdM.js.map
22
+ //# sourceMappingURL=navigation-list-Ng5UsNCY.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"navigation-list-Cxs6uZdM.js","sources":["../src/components/navigation/navigation-list.gts"],"sourcesContent":["import { hash } from '@ember/helper';\n\nimport styles from '@hokulea/core/navigation.module.css';\n\nimport { NavLink } from './nav-link.gts';\n\nimport type { TOC } from '@ember/component/template-only';\n\nconst Title: TOC<{ Blocks: { default: [] } }> = <template>\n <span part=\"title\">{{yield}}</span>\n</template>;\n\nexport interface NavigationListSignature {\n Element: HTMLElement;\n Blocks: {\n default?: [{ Item: typeof NavLink; Title: typeof Title }];\n };\n}\n\nexport const NavigationList: TOC<NavigationListSignature> = <template>\n <nav class={{styles.navigationList}} data-test-navigation-list ...attributes>\n {{yield (hash Item=NavLink Title=Title)}}\n </nav>\n</template>;\n"],"names":["Title","setComponentTemplate","precompileTemplate","strictMode","templateOnly","NavigationList","scope","styles","hash","NavLink"],"mappings":";;;;;;;AAQA,MAAMA,KAA0C,GAAAC,oBAAA,CAAAC,kBAAA,CAAA,6CAAA,EAEhD;EAAAC,UAAA,EAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA,CAAA;MASGC,cAAoB,GAAAJ,oBAAA,CAA2BC,kBAAA,CAAA,8IAAA,EAI5D;EAAAC,UAAA,EAAA,IAAA;AAAAG,EAAAA,KAAA,EAAAA,OAAA;IAAAC,MAAA;IAAAC,IAAA;IAAAC,OAAA;AAAAT,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAI,YAAA,EAAA;;;;"}
1
+ {"version":3,"file":"navigation-list-Ng5UsNCY.js","sources":["../src/components/navigation/navigation-list.gts"],"sourcesContent":["import { hash } from '@ember/helper';\n\nimport styles from '@hokulea/core/navigation.module.css';\n\nimport { NavLink } from './nav-link.gts';\n\nimport type { TOC } from '@ember/component/template-only';\n\nconst Title: TOC<{ Blocks: { default: [] } }> = <template>\n <span part=\"title\">{{yield}}</span>\n</template>;\n\nexport interface NavigationListSignature {\n Element: HTMLElement;\n Blocks: {\n default?: [{ Item: typeof NavLink; Title: typeof Title }];\n };\n}\n\nexport const NavigationList: TOC<NavigationListSignature> = <template>\n <nav class={{styles.navigationList}} data-test-navigation-list ...attributes>\n {{yield (hash Item=NavLink Title=Title)}}\n </nav>\n</template>;\n"],"names":["Title","setComponentTemplate","precompileTemplate","strictMode","templateOnly","NavigationList","scope","styles","hash","NavLink"],"mappings":";;;;;;;AAQA,MAAMA,KAA0C,GAAAC,oBAAA,CAAAC,kBAAA,CAAA,6CAAA,EAEhD;EAAAC,UAAA,EAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA,CAAA;MASGC,cAAoB,GAAAJ,oBAAA,CAA2BC,kBAAA,CAAA,8IAAA,EAI5D;EAAAC,UAAA,EAAA,IAAA;AAAAG,EAAAA,KAAA,EAAAA,OAAA;IAAAC,MAAA;IAAAC,IAAA;IAAAC,OAAA;AAAAT,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAI,YAAA,EAAA;;;;"}
@@ -1,12 +1,12 @@
1
1
  import { on } from '@ember/modifier';
2
2
  import styles from '@hokulea/core/controls.module.css';
3
- import { p as pick } from './helpers-DS9du02l.js';
3
+ import { p as pick } from './helpers-D4So5-uK.js';
4
4
  import { p as pickAsNumber } from './-input-DGR-n9U_.js';
5
5
  import { precompileTemplate } from '@ember/template-compilation';
6
6
  import { setComponentTemplate } from '@ember/component';
7
7
  import templateOnly from '@ember/component/template-only';
8
8
 
9
- const NumberInput = setComponentTemplate(precompileTemplate("\n <input class={{styles.input}} type=\"number\" value={{@value}} disabled={{@disabled}} data-test-input {{on \"input\" (pick \"target.value\" (pickAsNumber @update)) capture=true}} ...attributes />\n", {
9
+ const NumberInput = setComponentTemplate(precompileTemplate("\n <input class={{styles.input}} type=\"number\" value={{@value}} disabled={{@disabled}} data-spacing={{@spacing}} data-test-input {{on \"input\" (pick \"target.value\" (pickAsNumber @update)) capture=true}} ...attributes />\n", {
10
10
  strictMode: true,
11
11
  scope: () => ({
12
12
  styles,
@@ -17,4 +17,4 @@ const NumberInput = setComponentTemplate(precompileTemplate("\n <input class={{
17
17
  }), templateOnly());
18
18
 
19
19
  export { NumberInput as N };
20
- //# sourceMappingURL=number-input-B84zcPlM.js.map
20
+ //# sourceMappingURL=number-input-FJympEv2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"number-input-B84zcPlM.js","sources":["../src/components/controls/number-input.gts"],"sourcesContent":["import { on } from '@ember/modifier';\n\nimport styles from '@hokulea/core/controls.module.css';\n\nimport { pick } from '../../-private/helpers.ts';\nimport { pickAsNumber } from './-input.ts';\n\nimport type { InputArgs } from './-input.ts';\nimport type { TOC } from '@ember/component/template-only';\n\nexport interface NumberInputSignature {\n Element: HTMLInputElement;\n Args: InputArgs<number>;\n}\n\nexport const NumberInput: TOC<NumberInputSignature> = <template>\n <input\n class={{styles.input}}\n type=\"number\"\n value={{@value}}\n disabled={{@disabled}}\n data-test-input\n {{on \"input\" (pick \"target.value\" (pickAsNumber @update)) capture=true}}\n ...attributes\n />\n</template>;\n"],"names":["NumberInput","setComponentTemplate","precompileTemplate","strictMode","scope","styles","on","pick","pickAsNumber","templateOnly"],"mappings":";;;;;;;;MAeaA,WAAiB,GAAAC,oBAAA,CAAwBC,kBAAA,CAAA,2MAAA,EAUtD;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAC,MAAA;IAAAC,EAAA;IAAAC,IAAA;AAAAC,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA;;;;"}
1
+ {"version":3,"file":"number-input-FJympEv2.js","sources":["../src/components/controls/number-input.gts"],"sourcesContent":["import { on } from '@ember/modifier';\n\nimport styles from '@hokulea/core/controls.module.css';\n\nimport { pick } from '../../-private/helpers.ts';\nimport { pickAsNumber } from './-input.ts';\n\nimport type { InputArgs } from './-input.ts';\nimport type { TOC } from '@ember/component/template-only';\n\nexport interface NumberInputSignature {\n Element: HTMLInputElement;\n Args: InputArgs<number>;\n}\n\nexport const NumberInput: TOC<NumberInputSignature> = <template>\n <input\n class={{styles.input}}\n type=\"number\"\n value={{@value}}\n disabled={{@disabled}}\n data-spacing={{@spacing}}\n data-test-input\n {{on \"input\" (pick \"target.value\" (pickAsNumber @update)) capture=true}}\n ...attributes\n />\n</template>;\n"],"names":["NumberInput","setComponentTemplate","precompileTemplate","strictMode","scope","styles","on","pick","pickAsNumber","templateOnly"],"mappings":";;;;;;;;MAeaA,WAAiB,GAAAC,oBAAA,CAAwBC,kBAAA,CAAA,qOAAA,EAWtD;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAC,MAAA;IAAAC,EAAA;IAAAC,IAAA;AAAAC,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA;;;;"}
@@ -1,7 +1,7 @@
1
1
  import { element } from 'ember-element-helper';
2
2
  import styles from '@hokulea/core/layouts.module.css';
3
3
  import typo from '@hokulea/core/typography.module.css';
4
- import { o as or } from './helpers-DS9du02l.js';
4
+ import { o as or } from './helpers-D4So5-uK.js';
5
5
  import { P as PageDestructor, a as PageElement } from './pages-DgHJEvSy.js';
6
6
  import { precompileTemplate } from '@ember/template-compilation';
7
7
  import { setComponentTemplate } from '@ember/component';
@@ -20,4 +20,4 @@ const Page = setComponentTemplate(precompileTemplate("\n {{#let (if @element @e
20
20
  }), templateOnly());
21
21
 
22
22
  export { Page as P };
23
- //# sourceMappingURL=page-BcSgHxr7.js.map
23
+ //# sourceMappingURL=page-BuLkLO08.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"page-BcSgHxr7.js","sources":["../src/components/layouts/page.gts"],"sourcesContent":["import { element } from 'ember-element-helper';\n\n// eslint-disable-next-line import-x/no-duplicates\nimport styles from '@hokulea/core/layouts.module.css';\n// eslint-disable-next-line import-x/no-duplicates\nimport typo from '@hokulea/core/typography.module.css';\n\nimport { or } from '../../-private/helpers.ts';\nimport { pageDestructor, pageElement } from './pages.ts';\n\nimport type { TOC } from '@ember/component/template-only';\nimport type { ComponentLike } from '@glint/template';\n\ninterface PageSignature {\n Element: HTMLElement;\n Args: {\n title?: string;\n description?: string;\n element?: ComponentLike<{ Element: HTMLElement; Blocks: { default: [] } }>;\n };\n Blocks: {\n title?: [];\n description?: [];\n content?: [];\n default?: [];\n };\n}\n\nexport const Page: TOC<PageSignature> = <template>\n {{#let (if @element @element (element (pageElement))) as |Element|}}\n <Element class={{styles.page}} {{pageDestructor}} ...attributes data-test-page>\n {{#if\n (or @title @description (has-block \"title\") (has-block \"description\") (has-block \"nav\"))\n }}\n <header class={{styles.pageContent}}>\n <h1 class={{typo.display}}>\n {{#if (has-block \"title\")}}\n {{yield to=\"title\"}}\n {{else if @title}}\n {{@title}}\n {{/if}}\n </h1>\n\n {{#if (or (has-block \"description\") @description)}}\n <p>\n {{#if (has-block \"description\")}}\n {{yield to=\"description\"}}\n {{else if @description}}\n {{@description}}\n {{/if}}\n </p>\n {{/if}}\n </header>\n {{/if}}\n\n <div class=\"{{styles.pageContent}} {{styles.flow}}\" part=\"content\">\n {{#if (has-block \"content\")}}\n {{yield to=\"content\"}}\n {{else if (has-block)}}\n {{yield}}\n {{/if}}\n </div>\n </Element>\n {{/let}}\n</template>;\n"],"names":["Page","setComponentTemplate","precompileTemplate","strictMode","scope","element","pageElement","styles","pageDestructor","or","typo","templateOnly"],"mappings":";;;;;;;;;MA4BaA,IAAU,GAAAC,oBAAA,CAAiBC,kBAAA,CAAA,koCAAA,EAoCxC;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAC,OAAA;iBAAAC,WAAA;IAAAC,MAAA;oBAAAC,cAAA;IAAAC,EAAA;AAAAC,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA;;;;"}
1
+ {"version":3,"file":"page-BuLkLO08.js","sources":["../src/components/layouts/page.gts"],"sourcesContent":["import { element } from 'ember-element-helper';\n\n// eslint-disable-next-line import-x/no-duplicates\nimport styles from '@hokulea/core/layouts.module.css';\n// eslint-disable-next-line import-x/no-duplicates\nimport typo from '@hokulea/core/typography.module.css';\n\nimport { or } from '../../-private/helpers.ts';\nimport { pageDestructor, pageElement } from './pages.ts';\n\nimport type { TOC } from '@ember/component/template-only';\nimport type { ComponentLike } from '@glint/template';\n\ninterface PageSignature {\n Element: HTMLElement;\n Args: {\n title?: string;\n description?: string;\n element?: ComponentLike<{ Element: HTMLElement; Blocks: { default: [] } }>;\n };\n Blocks: {\n title?: [];\n description?: [];\n content?: [];\n default?: [];\n };\n}\n\nexport const Page: TOC<PageSignature> = <template>\n {{#let (if @element @element (element (pageElement))) as |Element|}}\n <Element class={{styles.page}} {{pageDestructor}} ...attributes data-test-page>\n {{#if\n (or @title @description (has-block \"title\") (has-block \"description\") (has-block \"nav\"))\n }}\n <header class={{styles.pageContent}}>\n <h1 class={{typo.display}}>\n {{#if (has-block \"title\")}}\n {{yield to=\"title\"}}\n {{else if @title}}\n {{@title}}\n {{/if}}\n </h1>\n\n {{#if (or (has-block \"description\") @description)}}\n <p>\n {{#if (has-block \"description\")}}\n {{yield to=\"description\"}}\n {{else if @description}}\n {{@description}}\n {{/if}}\n </p>\n {{/if}}\n </header>\n {{/if}}\n\n <div class=\"{{styles.pageContent}} {{styles.flow}}\" part=\"content\">\n {{#if (has-block \"content\")}}\n {{yield to=\"content\"}}\n {{else if (has-block)}}\n {{yield}}\n {{/if}}\n </div>\n </Element>\n {{/let}}\n</template>;\n"],"names":["Page","setComponentTemplate","precompileTemplate","strictMode","scope","element","pageElement","styles","pageDestructor","or","typo","templateOnly"],"mappings":";;;;;;;;;MA4BaA,IAAU,GAAAC,oBAAA,CAAiBC,kBAAA,CAAA,koCAAA,EAoCxC;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAC,OAAA;iBAAAC,WAAA;IAAAC,MAAA;oBAAAC,cAAA;IAAAC,EAAA;AAAAC,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA;;;;"}
@@ -0,0 +1,124 @@
1
+ import Component from '@glimmer/component';
2
+ import { tracked } from '@glimmer/tracking';
3
+ import styles from '@hokulea/core/navigation.module.css';
4
+ import { c as asNumber, r as range, g as gt } from './helpers-D4So5-uK.js';
5
+ import { I as IconButton } from './icon-button-DBt7fMi1.js';
6
+ import { N as NumberInput } from './number-input-FJympEv2.js';
7
+ import { S as Select } from './select-CeO8AZMK.js';
8
+ import { precompileTemplate } from '@ember/template-compilation';
9
+ import { setComponentTemplate } from '@ember/component';
10
+ import { g, i } from 'decorator-transforms/runtime-esm';
11
+
12
+ const PrevIcon = `<svg xmlns="http://www.w3.org/2000/svg" width="256" height="256" viewBox="0 0 256 256"><path fill="currentColor" d="M168 48v160a8 8 0 0 1-13.66 5.66l-80-80a8 8 0 0 1 0-11.32l80-80A8 8 0 0 1 168 48"/></svg>`;
13
+ const NextIcon = `<svg xmlns="http://www.w3.org/2000/svg" width="256" height="256" viewBox="0 0 256 256"><path fill="currentColor" d="m181.66 133.66l-80 80A8 8 0 0 1 88 208V48a8 8 0 0 1 13.66-5.66l80 80a8 8 0 0 1 0 11.32"/></svg>`;
14
+ const LABELS = {
15
+ backward: 'Previous page',
16
+ forward: 'Next page',
17
+ itemPerPage: 'Items per page:',
18
+ itemRange: (min, max, total) => `${min} – ${max} of ${total} items`,
19
+ item: (min, max) => `${min} – ${max} items`,
20
+ page: page => `page ${page}`,
21
+ pageRange: total => `of ${total} ${total === 1 ? 'page' : 'pages'}`,
22
+ pageNumber: 'Page Number'
23
+ };
24
+
25
+ class Pagination extends Component {
26
+ static {
27
+ g(this.prototype, "total", [tracked], function () {
28
+ return 0;
29
+ });
30
+ }
31
+ #total = (i(this, "total"), void 0);
32
+ get minItems() {
33
+ return (this.page - 1) * this.args.pageSize + 1;
34
+ }
35
+ get maxItems() {
36
+ return this.page * this.args.pageSize;
37
+ }
38
+ get pages() {
39
+ if (this.args.totalItems) {
40
+ return Math.ceil(this.args.totalItems / this.args.pageSize);
41
+ }
42
+ return undefined;
43
+ }
44
+ get page() {
45
+ return this.args.page ?? 1;
46
+ }
47
+ get itemsPerPageLabel() {
48
+ return this.args.itemsPerPageLabel ?? LABELS.itemPerPage;
49
+ }
50
+ get itemRangeLabel() {
51
+ return (this.args.itemRangeLabel ?? LABELS.itemRange)(this.minItems, this.maxItems, this.args.totalItems ?? 1);
52
+ }
53
+ get itemLabel() {
54
+ return (this.args.itemLabel ?? LABELS.item)(this.minItems, this.maxItems);
55
+ }
56
+ get pageLabel() {
57
+ return (this.args.pageLabel ?? LABELS.page)(this.page);
58
+ }
59
+ get pageNumberLabel() {
60
+ return this.args.pageNumberLabel ?? LABELS.pageNumber;
61
+ }
62
+ get pageRangeLabel() {
63
+ return (this.args.pageRangeLabel ?? LABELS.pageRange)(this.pages ?? 0);
64
+ }
65
+ get pageSizeOptions() {
66
+ return (this.args.pageSizes ?? []).map(i => typeof i === 'object' ? i : {
67
+ value: i,
68
+ label: i
69
+ });
70
+ }
71
+ get backwardLabel() {
72
+ return this.args.backwardLabel ?? LABELS.backward;
73
+ }
74
+ get forwardLabel() {
75
+ return this.args.forwardLabel ?? LABELS.forward;
76
+ }
77
+ changePage = page => {
78
+ if (page) {
79
+ this.args.change?.({
80
+ page: this.pages ? Math.min(page, this.pages) : page,
81
+ pageSize: this.args.pageSize
82
+ });
83
+ }
84
+ };
85
+ changePageSize = pageSize => {
86
+ this.args.change?.({
87
+ page: this.page,
88
+ pageSize: Number.parseInt(pageSize)
89
+ });
90
+ };
91
+ prev = () => {
92
+ if (this.page > 1) {
93
+ this.changePage(this.page - 1);
94
+ }
95
+ };
96
+ next = () => {
97
+ if (this.pages) {
98
+ if (this.page < this.pages) {
99
+ this.changePage(this.page + 1);
100
+ }
101
+ } else {
102
+ this.changePage(this.page + 1);
103
+ }
104
+ };
105
+ static {
106
+ setComponentTemplate(precompileTemplate("\n <div class={{styles.pagination}} data-test-pagination>\n {{#if @pageSizes}}\n <span part=\"page-size\">\n {{this.itemsPerPageLabel}}\n\n {{!-- @glint-ignore --}}\n <Select @spacing=\"-1\" @value={{@pageSize}} @update={{this.changePageSize}} as |s|>\n {{#each this.pageSizeOptions as |o|}}\n <s.Option @value={{o.value}}>{{o.label}}</s.Option>\n {{/each}}\n </Select>\n </span>\n {{/if}}\n <span part=\"items\">\n {{#if @totalItems}}\n {{this.itemRangeLabel}}\n {{else}}\n {{this.itemLabel}}\n {{/if}}\n </span>\n <span part=\"page\">\n {{#if @totalItems}}\n {{#if (gt this.pages 20)}}\n <NumberInput @spacing=\"-1\" @value={{this.page}} @update={{this.changePage}} />\n {{else}}\n {{!-- @glint-ignore --}}\n <Select @spacing=\"-1\" @value={{this.page}} @update={{this.changePage}} as |s|>\n {{#each (range (asNumber this.pages)) as |p|}}\n <s.Option @value={{p}}>{{p}}</s.Option>\n {{/each}}\n </Select>\n {{/if}}\n {{this.pageRangeLabel}}\n {{else}}\n {{this.pageLabel}}\n {{/if}}\n </span>\n <span part=\"nav\">\n <IconButton @push={{this.prev}} @icon={{PrevIcon}} @label={{this.backwardLabel}} @importance=\"plain\" @spacing=\"-1\" data-test-prev />\n <IconButton @push={{this.next}} @icon={{NextIcon}} @label={{this.forwardLabel}} @importance=\"plain\" @spacing=\"-1\" data-test-next />\n </span>\n </div>\n ", {
107
+ strictMode: true,
108
+ scope: () => ({
109
+ styles,
110
+ Select,
111
+ gt,
112
+ NumberInput,
113
+ range,
114
+ asNumber,
115
+ IconButton,
116
+ PrevIcon,
117
+ NextIcon
118
+ })
119
+ }), this);
120
+ }
121
+ }
122
+
123
+ export { Pagination as P };
124
+ //# sourceMappingURL=pagination-DCMxI10i.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination-DCMxI10i.js","sources":["../src/components/navigation/-pagination.ts","../src/components/navigation/pagination.gts"],"sourcesContent":["export const FirstIcon = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"256\" height=\"256\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"M200 48v160a8 8 0 0 1-13.66 5.66l-80-80a8 8 0 0 1 0-11.32l80-80A8 8 0 0 1 200 48M72 40a8 8 0 0 0-8 8v160a8 8 0 0 0 16 0V48a8 8 0 0 0-8-8\"/></svg>`;\nexport const PrevIcon = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"256\" height=\"256\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"M168 48v160a8 8 0 0 1-13.66 5.66l-80-80a8 8 0 0 1 0-11.32l80-80A8 8 0 0 1 168 48\"/></svg>`;\nexport const NextIcon = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"256\" height=\"256\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"m181.66 133.66l-80 80A8 8 0 0 1 88 208V48a8 8 0 0 1 13.66-5.66l80 80a8 8 0 0 1 0 11.32\"/></svg>`;\nexport const LastIcon = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"256\" height=\"256\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"M149.66 122.34a8 8 0 0 1 0 11.32l-80 80A8 8 0 0 1 56 208V48a8 8 0 0 1 13.66-5.66ZM184 40a8 8 0 0 0-8 8v160a8 8 0 0 0 16 0V48a8 8 0 0 0-8-8\"/></svg>`;\n\nexport const LABELS = {\n backward: 'Previous page',\n first: 'First page',\n forward: 'Next page',\n last: 'Last page',\n itemPerPage: 'Items per page:',\n itemRange: (min: number, max: number, total: number) => `${min} – ${max} of ${total} items`,\n item: (min: number, max: number) => `${min} – ${max} items`,\n page: (page: number) => `page ${page}`,\n pageRange: (total: number) => `of ${total} ${total === 1 ? 'page' : 'pages'}`,\n pageNumber: 'Page Number'\n};\n","import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\n\nimport styles from '@hokulea/core/navigation.module.css';\n\nimport { asNumber, gt, range } from '../../-private/helpers.ts';\nimport { IconButton } from '../actions/icon-button.gts';\nimport { NumberInput } from '../controls/number-input.gts';\nimport { Select } from '../controls/select.gts';\nimport { LABELS, NextIcon, PrevIcon } from './-pagination.ts';\n\ninterface PaginationSignature {\n Element: HTMLElement;\n Args: {\n backwardLabel?: string;\n\n forwardLabel?: string;\n\n change?: (value: { page: number; pageSize: number }) => void;\n\n /**\n * The translatable text indicating the number of items per page.\n */\n itemsPerPageLabel?: string;\n /**\n * The function returning a translatable text showing where the current page is,\n * in a manner of the range of items.\n */\n itemRangeLabel?: (min: number, max: number, total: number) => string;\n itemLabel?: (min: number, max: number) => string;\n\n /**\n * The current page.\n */\n page?: number;\n\n /**\n * The number dictating how many items a page contains.\n */\n pageSize: number;\n\n /**\n * The choices for `pageSize`.\n */\n pageSizes?: number[] | { label: string; value: number }[];\n /**\n * The translatable text showing the current page.\n */\n pageLabel?: (page: number) => string;\n /**\n * A function returning PII showing where the current page is.\n */\n pageRangeLabel?: (total: number) => string;\n pageNumberLabel?: string;\n /**\n * The total number of items.\n */\n totalItems?: number;\n };\n}\n\nexport class Pagination extends Component<PaginationSignature> {\n @tracked total = 0;\n\n get minItems() {\n return (this.page - 1) * this.args.pageSize + 1;\n }\n\n get maxItems() {\n return this.page * this.args.pageSize;\n }\n\n get pages(): number | undefined {\n if (this.args.totalItems) {\n return Math.ceil(this.args.totalItems / this.args.pageSize);\n }\n\n return undefined;\n }\n\n get page() {\n return this.args.page ?? 1;\n }\n\n get itemsPerPageLabel() {\n return this.args.itemsPerPageLabel ?? LABELS.itemPerPage;\n }\n\n get itemRangeLabel() {\n return (this.args.itemRangeLabel ?? LABELS.itemRange)(\n this.minItems,\n this.maxItems,\n this.args.totalItems ?? 1\n );\n }\n\n get itemLabel() {\n return (this.args.itemLabel ?? LABELS.item)(this.minItems, this.maxItems);\n }\n\n get pageLabel() {\n return (this.args.pageLabel ?? LABELS.page)(this.page);\n }\n\n get pageNumberLabel() {\n return this.args.pageNumberLabel ?? LABELS.pageNumber;\n }\n\n get pageRangeLabel() {\n return (this.args.pageRangeLabel ?? LABELS.pageRange)(this.pages ?? 0);\n }\n\n get pageSizeOptions() {\n return (this.args.pageSizes ?? []).map((i) =>\n typeof i === 'object' ? i : { value: i, label: i }\n );\n }\n\n get backwardLabel() {\n return this.args.backwardLabel ?? LABELS.backward;\n }\n\n get forwardLabel() {\n return this.args.forwardLabel ?? LABELS.forward;\n }\n\n changePage = (page?: number) => {\n if (page) {\n this.args.change?.({\n page: this.pages ? Math.min(page, this.pages) : page,\n pageSize: this.args.pageSize\n });\n }\n };\n\n changePageSize = (pageSize: string) => {\n this.args.change?.({\n page: this.page,\n pageSize: Number.parseInt(pageSize)\n });\n };\n\n prev = () => {\n if (this.page > 1) {\n this.changePage(this.page - 1);\n }\n };\n\n next = () => {\n if (this.pages) {\n if (this.page < this.pages) {\n this.changePage(this.page + 1);\n }\n } else {\n this.changePage(this.page + 1);\n }\n };\n\n <template>\n <div class={{styles.pagination}} data-test-pagination>\n {{#if @pageSizes}}\n <span part=\"page-size\">\n {{this.itemsPerPageLabel}}\n\n {{! @glint-ignore }}\n <Select @spacing=\"-1\" @value={{@pageSize}} @update={{this.changePageSize}} as |s|>\n {{#each this.pageSizeOptions as |o|}}\n <s.Option @value={{o.value}}>{{o.label}}</s.Option>\n {{/each}}\n </Select>\n </span>\n {{/if}}\n <span part=\"items\">\n {{#if @totalItems}}\n {{this.itemRangeLabel}}\n {{else}}\n {{this.itemLabel}}\n {{/if}}\n </span>\n <span part=\"page\">\n {{#if @totalItems}}\n {{#if (gt this.pages 20)}}\n <NumberInput @spacing=\"-1\" @value={{this.page}} @update={{this.changePage}} />\n {{else}}\n {{! @glint-ignore }}\n <Select @spacing=\"-1\" @value={{this.page}} @update={{this.changePage}} as |s|>\n {{#each (range (asNumber this.pages)) as |p|}}\n <s.Option @value={{p}}>{{p}}</s.Option>\n {{/each}}\n </Select>\n {{/if}}\n {{this.pageRangeLabel}}\n {{else}}\n {{this.pageLabel}}\n {{/if}}\n </span>\n <span part=\"nav\">\n <IconButton\n @push={{this.prev}}\n @icon={{PrevIcon}}\n @label={{this.backwardLabel}}\n @importance=\"plain\"\n @spacing=\"-1\"\n data-test-prev\n />\n <IconButton\n @push={{this.next}}\n @icon={{NextIcon}}\n @label={{this.forwardLabel}}\n @importance=\"plain\"\n @spacing=\"-1\"\n data-test-next\n />\n </span>\n </div>\n </template>\n}\n"],"names":["PrevIcon","NextIcon","LABELS","backward","first","forward","last","itemPerPage","itemRange","min","max","total","item","page","pageRange","pageNumber","Pagination","Component","g","prototype","tracked","i","void 0","minItems","args","pageSize","maxItems","pages","totalItems","Math","ceil","undefined","itemsPerPageLabel","itemRangeLabel","itemLabel","pageLabel","pageNumberLabel","pageRangeLabel","pageSizeOptions","pageSizes","map","value","label","backwardLabel","forwardLabel","changePage","change","changePageSize","Number","parseInt","prev","next","setComponentTemplate","precompileTemplate","strictMode","scope","styles","Select","gt","NumberInput","range","asNumber","IconButton"],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  import { on } from '@ember/modifier';
2
2
  import styles from '@hokulea/core/controls.module.css';
3
- import { p as pick } from './helpers-DS9du02l.js';
3
+ import { p as pick } from './helpers-D4So5-uK.js';
4
4
  import { precompileTemplate } from '@ember/template-compilation';
5
5
  import { setComponentTemplate } from '@ember/component';
6
6
  import templateOnly from '@ember/component/template-only';
7
7
 
8
- const PasswordInput = setComponentTemplate(precompileTemplate("\n <input class={{styles.input}} type=\"password\" value={{@value}} disabled={{@disabled}} data-test-input {{on \"input\" (pick \"target.value\" @update) capture=true}} ...attributes />\n", {
8
+ const PasswordInput = setComponentTemplate(precompileTemplate("\n <input class={{styles.input}} type=\"password\" value={{@value}} disabled={{@disabled}} data-spacing={{@spacing}} data-test-input {{on \"input\" (pick \"target.value\" @update) capture=true}} ...attributes />\n", {
9
9
  strictMode: true,
10
10
  scope: () => ({
11
11
  styles,
@@ -15,4 +15,4 @@ const PasswordInput = setComponentTemplate(precompileTemplate("\n <input class=
15
15
  }), templateOnly());
16
16
 
17
17
  export { PasswordInput as P };
18
- //# sourceMappingURL=password-input-BMp5uscw.js.map
18
+ //# sourceMappingURL=password-input-DV5yb10h.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password-input-DV5yb10h.js","sources":["../src/components/controls/password-input.gts"],"sourcesContent":["import { on } from '@ember/modifier';\n\nimport styles from '@hokulea/core/controls.module.css';\n\nimport { pick } from '../../-private/helpers.ts';\n\nimport type { InputArgs } from './-input.ts';\nimport type { TOC } from '@ember/component/template-only';\n\nexport interface PasswordInputSignature {\n Element: HTMLInputElement;\n Args: InputArgs<string>;\n}\n\nexport const PasswordInput: TOC<PasswordInputSignature> = <template>\n <input\n class={{styles.input}}\n type=\"password\"\n value={{@value}}\n disabled={{@disabled}}\n data-spacing={{@spacing}}\n data-test-input\n {{on \"input\" (pick \"target.value\" @update) capture=true}}\n ...attributes\n />\n</template>;\n"],"names":["PasswordInput","setComponentTemplate","precompileTemplate","strictMode","scope","styles","on","pick","templateOnly"],"mappings":";;;;;;;MAcaA,aAAmB,GAAAC,oBAAA,CAA0BC,kBAAA,CAAA,wNAAA,EAW1D;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAC,MAAA;IAAAC,EAAA;AAAAC,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA;;;;"}
@@ -1,11 +1,11 @@
1
1
  import { on } from '@ember/modifier';
2
2
  import styles from '@hokulea/core/controls.module.css';
3
- import { p as pick } from './helpers-DS9du02l.js';
3
+ import { p as pick } from './helpers-D4So5-uK.js';
4
4
  import { precompileTemplate } from '@ember/template-compilation';
5
5
  import { setComponentTemplate } from '@ember/component';
6
6
  import templateOnly from '@ember/component/template-only';
7
7
 
8
- const PhoneInput = setComponentTemplate(precompileTemplate("\n <input class={{styles.input}} type=\"tel\" value={{@value}} disabled={{@disabled}} data-test-input {{on \"input\" (pick \"target.value\" @update) capture=true}} ...attributes />\n", {
8
+ const PhoneInput = setComponentTemplate(precompileTemplate("\n <input class={{styles.input}} type=\"tel\" value={{@value}} disabled={{@disabled}} data-spacing={{@spacing}} data-test-input {{on \"input\" (pick \"target.value\" @update) capture=true}} ...attributes />\n", {
9
9
  strictMode: true,
10
10
  scope: () => ({
11
11
  styles,
@@ -15,4 +15,4 @@ const PhoneInput = setComponentTemplate(precompileTemplate("\n <input class={{s
15
15
  }), templateOnly());
16
16
 
17
17
  export { PhoneInput as P };
18
- //# sourceMappingURL=phone-input-DeaTM5yP.js.map
18
+ //# sourceMappingURL=phone-input-Uv5v9hK9.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"phone-input-DeaTM5yP.js","sources":["../src/components/controls/phone-input.gts"],"sourcesContent":["import { on } from '@ember/modifier';\n\nimport styles from '@hokulea/core/controls.module.css';\n\nimport { pick } from '../../-private/helpers.ts';\n\nimport type { InputArgs } from './-input.ts';\nimport type { TOC } from '@ember/component/template-only';\n\nexport interface PhoneInputSignature {\n Element: HTMLInputElement;\n Args: InputArgs<string>;\n}\n\nexport const PhoneInput: TOC<PhoneInputSignature> = <template>\n <input\n class={{styles.input}}\n type=\"tel\"\n value={{@value}}\n disabled={{@disabled}}\n data-test-input\n {{on \"input\" (pick \"target.value\" @update) capture=true}}\n ...attributes\n />\n</template>;\n"],"names":["PhoneInput","setComponentTemplate","precompileTemplate","strictMode","scope","styles","on","pick","templateOnly"],"mappings":";;;;;;;MAcaA,UAAgB,GAAAC,oBAAA,CAAuBC,kBAAA,CAAA,yLAAA,EAUpD;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAC,MAAA;IAAAC,EAAA;AAAAC,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA;;;;"}
1
+ {"version":3,"file":"phone-input-Uv5v9hK9.js","sources":["../src/components/controls/phone-input.gts"],"sourcesContent":["import { on } from '@ember/modifier';\n\nimport styles from '@hokulea/core/controls.module.css';\n\nimport { pick } from '../../-private/helpers.ts';\n\nimport type { InputArgs } from './-input.ts';\nimport type { TOC } from '@ember/component/template-only';\n\nexport interface PhoneInputSignature {\n Element: HTMLInputElement;\n Args: InputArgs<string>;\n}\n\nexport const PhoneInput: TOC<PhoneInputSignature> = <template>\n <input\n class={{styles.input}}\n type=\"tel\"\n value={{@value}}\n disabled={{@disabled}}\n data-spacing={{@spacing}}\n data-test-input\n {{on \"input\" (pick \"target.value\" @update) capture=true}}\n ...attributes\n />\n</template>;\n"],"names":["PhoneInput","setComponentTemplate","precompileTemplate","strictMode","scope","styles","on","pick","templateOnly"],"mappings":";;;;;;;MAcaA,UAAgB,GAAAC,oBAAA,CAAuBC,kBAAA,CAAA,mNAAA,EAWpD;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAC,MAAA;IAAAC,EAAA;AAAAC,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA;;;;"}
@@ -0,0 +1,24 @@
1
+ import { on } from '@ember/modifier';
2
+ import { CommandElement } from 'ember-command';
3
+ import { element } from 'ember-element-helper';
4
+ import { link, Link } from 'ember-link';
5
+ import { precompileTemplate } from '@ember/template-compilation';
6
+ import { setComponentTemplate } from '@ember/component';
7
+ import templateOnly from '@ember/component/template-only';
8
+
9
+ const isActive = commandable => {
10
+ return commandable instanceof Link && commandable.isActive;
11
+ };
12
+ const PushElement = setComponentTemplate(precompileTemplate("\n {{#if @href}}\n {{#let (link @href) as |l|}}\n <a href={{l.url}} {{on \"click\" l.open}} aria-current=\"{{if (isActive l) \"page\"}}\" ...attributes>\n {{yield}}\n </a>\n {{/let}}\n {{else if @push}}\n <CommandElement @element={{@element}} @command={{@push}} aria-current=\"{{if (isActive @push) \"page\"}}\" ...attributes>\n {{yield}}\n </CommandElement>\n {{else}}\n {{#let (if @element @element (element \"span\")) as |Element|}}\n <Element ...attributes>\n {{yield}}\n </Element>\n {{/let}}\n {{/if}}\n", {
13
+ strictMode: true,
14
+ scope: () => ({
15
+ link,
16
+ isActive,
17
+ on,
18
+ CommandElement,
19
+ element
20
+ })
21
+ }), templateOnly());
22
+
23
+ export { PushElement as P, isActive as i };
24
+ //# sourceMappingURL=push-DnJFFc_p.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push-DnJFFc_p.js","sources":["../src/-private/push.gts"],"sourcesContent":["import { on } from '@ember/modifier';\n\nimport { type CommandAction, CommandElement } from 'ember-command';\nimport { element, type ElementFromTagName, type ElementSignature } from 'ember-element-helper';\nimport { Link, link } from 'ember-link';\n\nimport type { TOC } from '@ember/component/template-only';\n\nexport const isActive = (commandable: CommandAction) => {\n return commandable instanceof Link && commandable.isActive;\n};\n\nexport interface PushArgs {\n push?: CommandAction;\n href?: string;\n}\n\ninterface PushSignature<T extends string = 'span'> {\n Element: HTMLButtonElement | HTMLAnchorElement | ElementFromTagName<T>;\n Args: PushArgs & {\n element?: ElementSignature<'a' | 'button' | T>['Return'];\n };\n Blocks: {\n default: [];\n };\n}\n\nexport const PushElement: TOC<PushSignature> = <template>\n {{#if @href}}\n {{#let (link @href) as |l|}}\n <a\n href={{l.url}}\n {{on \"click\" l.open}}\n aria-current=\"{{if (isActive l) 'page'}}\"\n ...attributes\n >\n {{yield}}\n </a>\n {{/let}}\n {{else if @push}}\n <CommandElement\n @element={{@element}}\n @command={{@push}}\n aria-current=\"{{if (isActive @push) 'page'}}\"\n ...attributes\n >\n {{yield}}\n </CommandElement>\n {{else}}\n {{#let (if @element @element (element \"span\")) as |Element|}}\n <Element ...attributes>\n {{yield}}\n </Element>\n {{/let}}\n {{/if}}\n</template>;\n"],"names":["isActive","commandable","Link","PushElement","setComponentTemplate","precompileTemplate","strictMode","scope","link","on","CommandElement","element","templateOnly"],"mappings":";;;;;;;;AAQO,MAAMA,QAAA,GAAYC,WAAa,IAAA;AACpC,EAAA,OAAOA,WAAA,YAAuBC,IAAA,IAAQD,WAAA,CAAYD,QAAQ;AAC5D;MAiBaG,WAAiB,GAAAC,oBAAA,CAAiBC,kBAAA,CAAA,4jBAAA,EA4B/C;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAC,IAAA;IAAAR,QAAA;IAAAS,EAAA;IAAAC,cAAA;AAAAC,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA;;;;"}
@@ -1,11 +1,11 @@
1
1
  import { on } from '@ember/modifier';
2
2
  import styles from '@hokulea/core/controls.module.css';
3
- import { p as pick } from './helpers-DS9du02l.js';
3
+ import { p as pick } from './helpers-D4So5-uK.js';
4
4
  import { precompileTemplate } from '@ember/template-compilation';
5
5
  import { setComponentTemplate } from '@ember/component';
6
6
  import templateOnly from '@ember/component/template-only';
7
7
 
8
- const Radio = setComponentTemplate(precompileTemplate("\n <input class={{styles.choice}} type=\"radio\" checked={{@value}} disabled={{@disabled}} data-test-choice {{on \"input\" (pick \"target.checked\" @update) capture=true}} ...attributes />\n", {
8
+ const Radio = setComponentTemplate(precompileTemplate("\n <input class={{styles.choice}} type=\"radio\" checked={{@value}} disabled={{@disabled}} data-spacing={{@spacing}} data-test-choice {{on \"input\" (pick \"target.checked\" @update) capture=true}} ...attributes />\n", {
9
9
  strictMode: true,
10
10
  scope: () => ({
11
11
  styles,
@@ -15,4 +15,4 @@ const Radio = setComponentTemplate(precompileTemplate("\n <input class={{styles
15
15
  }), templateOnly());
16
16
 
17
17
  export { Radio as R };
18
- //# sourceMappingURL=radio-CGBLrzK4.js.map
18
+ //# sourceMappingURL=radio-CLF40kob.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"radio-CGBLrzK4.js","sources":["../src/components/controls/radio.gts"],"sourcesContent":["import { on } from '@ember/modifier';\n\nimport styles from '@hokulea/core/controls.module.css';\n\nimport { pick } from '../../-private/helpers.ts';\n\nimport type { InputArgs } from './-input.ts';\nimport type { TOC } from '@ember/component/template-only';\n\nexport interface RadioSignature {\n Element: HTMLInputElement;\n Args: InputArgs<boolean>;\n}\n\nexport const Radio: TOC<RadioSignature> = <template>\n <input\n class={{styles.choice}}\n type=\"radio\"\n checked={{@value}}\n disabled={{@disabled}}\n data-test-choice\n {{on \"input\" (pick \"target.checked\" @update) capture=true}}\n ...attributes\n />\n</template>;\n"],"names":["Radio","setComponentTemplate","precompileTemplate","strictMode","scope","styles","on","pick","templateOnly"],"mappings":";;;;;;;MAcaA,KAAW,GAAAC,oBAAA,CAAkBC,kBAAA,CAAA,iMAAA,EAU1C;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAC,MAAA;IAAAC,EAAA;AAAAC,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA;;;;"}
1
+ {"version":3,"file":"radio-CLF40kob.js","sources":["../src/components/controls/radio.gts"],"sourcesContent":["import { on } from '@ember/modifier';\n\nimport styles from '@hokulea/core/controls.module.css';\n\nimport { pick } from '../../-private/helpers.ts';\n\nimport type { InputArgs } from './-input.ts';\nimport type { TOC } from '@ember/component/template-only';\n\nexport interface RadioSignature {\n Element: HTMLInputElement;\n Args: InputArgs<boolean>;\n}\n\nexport const Radio: TOC<RadioSignature> = <template>\n <input\n class={{styles.choice}}\n type=\"radio\"\n checked={{@value}}\n disabled={{@disabled}}\n data-spacing={{@spacing}}\n data-test-choice\n {{on \"input\" (pick \"target.checked\" @update) capture=true}}\n ...attributes\n />\n</template>;\n"],"names":["Radio","setComponentTemplate","precompileTemplate","strictMode","scope","styles","on","pick","templateOnly"],"mappings":";;;;;;;MAcaA,KAAW,GAAAC,oBAAA,CAAkBC,kBAAA,CAAA,2NAAA,EAW1C;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAC,MAAA;IAAAC,EAAA;AAAAC,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA;;;;"}
@@ -1,7 +1,7 @@
1
1
  import { on } from '@ember/modifier';
2
2
  import { modifier } from 'ember-modifier';
3
3
  import styles from '@hokulea/core/controls.module.css';
4
- import { p as pick } from './helpers-DS9du02l.js';
4
+ import { p as pick } from './helpers-D4So5-uK.js';
5
5
  import { p as pickAsNumber } from './-input-DGR-n9U_.js';
6
6
  import { precompileTemplate } from '@ember/template-compilation';
7
7
  import { setComponentTemplate } from '@ember/component';
@@ -34,4 +34,4 @@ const RangeInput = setComponentTemplate(precompileTemplate("\n <input class={{s
34
34
  }), templateOnly());
35
35
 
36
36
  export { RangeInput as R };
37
- //# sourceMappingURL=range-input-BiAPgpW8.js.map
37
+ //# sourceMappingURL=range-input-BIb7GkKH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"range-input-BIb7GkKH.js","sources":["../src/components/controls/range-input.gts"],"sourcesContent":["import { on } from '@ember/modifier';\n\nimport { modifier } from 'ember-modifier';\n\nimport styles from '@hokulea/core/controls.module.css';\n\nimport { pick } from '../../-private/helpers.ts';\nimport { pickAsNumber } from './-input.ts';\n\nimport type { InputArgs } from './-input.ts';\nimport type { TOC } from '@ember/component/template-only';\n\nfunction applyProgressStyle(range: HTMLInputElement, value?: number) {\n const min = Number.parseFloat(range.min) || 0;\n const max = Number.parseFloat(range.max) || 100;\n const currentVal = value ?? Number.parseFloat(range.value);\n const progress = ((currentVal - min) / (max - min)) * 100;\n\n range.style.setProperty('--_hokulea-slider-progress', `${progress}%`);\n}\n\nconst progressStyle = modifier((element: HTMLInputElement, [value]: [number?]) => {\n applyProgressStyle(element, value);\n\n const listenForProgressChange = () => {\n applyProgressStyle(element);\n };\n\n element.addEventListener('input', listenForProgressChange);\n\n return () => element.removeEventListener('input', listenForProgressChange);\n});\n\nexport interface RangeInputSignature {\n Element: HTMLInputElement;\n Args: Omit<InputArgs<number>, 'spacing'> & {\n min?: number;\n max?: number;\n step?: number | 'any';\n orientation?: 'horizontal' | 'vertical';\n };\n}\n\nexport const RangeInput: TOC<RangeInputSignature> = <template>\n <input\n class={{styles.range}}\n type=\"range\"\n value={{@value}}\n disabled={{@disabled}}\n data-test-input\n data-orientation={{@orientation}}\n {{on \"input\" (pick \"target.value\" (pickAsNumber @update)) capture=true}}\n {{progressStyle @value}}\n ...attributes\n />\n</template>;\n"],"names":["applyProgressStyle","range","value","min","Number","parseFloat","max","currentVal","progress","style","setProperty","progressStyle","modifier","element","listenForProgressChange","addEventListener","removeEventListener","RangeInput","setComponentTemplate","precompileTemplate","strictMode","scope","styles","on","pick","pickAsNumber","templateOnly"],"mappings":";;;;;;;;;AAYA,SAASA,kBAAAA,CAAmBC,KAAuB,EAAEC,KAAc,EAAA;EACjE,MAAMC,MAAMC,MAAA,CAAOC,UAAU,CAACJ,KAAA,CAAME,GAAG,CAAA,IAAK,CAAA;EAC5C,MAAMG,MAAMF,MAAA,CAAOC,UAAU,CAACJ,KAAA,CAAMK,GAAG,CAAA,IAAK,GAAA;EAC5C,MAAMC,aAAaL,KAAA,IAASE,MAAA,CAAOC,UAAU,CAACJ,MAAMC,KAAK,CAAA;AACzD,EAAA,MAAMM,QAAA,GAAY,CAACD,UAAA,GAAaJ,GAAG,KAAKG,GAAA,GAAMH,GAAG,CAAC,GAAI,GAAA;EAEtDF,KAAA,CAAMQ,KAAK,CAACC,WAAW,CAAC,8BAA8B,CAAA,EAAGF,QAAA,CAAA,CAAA,CAAW,CAAA;AACtE;AAEA,MAAMG,aAAA,GAAgBC,SAAS,CAACC,SAA2B,CAACX,KAAA,CAAiB,KAAA;AAC3EF,EAAAA,kBAAA,CAAmBa,OAAA,EAASX,KAAA,CAAA;EAE5B,MAAMY,uBAAA,GAA0BA,MAAA;IAC9Bd,kBAAA,CAAmBa,OAAA,CAAA;EACrB,CAAA;AAEAA,EAAAA,OAAA,CAAQE,gBAAgB,CAAC,OAAA,EAASD,uBAAA,CAAA;EAElC,OAAO,MAAMD,OAAA,CAAQG,mBAAmB,CAAC,OAAA,EAASF,uBAAA,CAAA;AACpD,CAAA,CAAA;MAYaG,UAAgB,GAAAC,oBAAA,CAAuBC,kBAAA,CAAA,qQAAA,EAYpD;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAC,MAAA;IAAAC,EAAA;IAAAC,IAAA;IAAAC,YAAA;AAAAd,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAe,YAAA,EAAA;;;;"}
@@ -1,8 +1,8 @@
1
1
  import { element } from 'ember-element-helper';
2
2
  import styles from '@hokulea/core/layouts.module.css';
3
3
  import typo from '@hokulea/core/typography.module.css';
4
- import { o as or } from './helpers-DS9du02l.js';
5
- import { N as NavLink } from './nav-link-CGVtuqwC.js';
4
+ import { o as or } from './helpers-D4So5-uK.js';
5
+ import { N as NavLink } from './nav-link-CDtYj6HW.js';
6
6
  import { P as PageDestructor, a as PageElement } from './pages-DgHJEvSy.js';
7
7
  import { precompileTemplate } from '@ember/template-compilation';
8
8
  import { setComponentTemplate } from '@ember/component';
@@ -22,4 +22,4 @@ const SectionedPage = setComponentTemplate(precompileTemplate("\n {{#let (if @e
22
22
  }), templateOnly());
23
23
 
24
24
  export { SectionedPage as S };
25
- //# sourceMappingURL=sectioned-page-fB9mV5WD.js.map
25
+ //# sourceMappingURL=sectioned-page-CgINWVQ2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sectioned-page-fB9mV5WD.js","sources":["../src/components/layouts/sectioned-page.gts"],"sourcesContent":["import { element } from 'ember-element-helper';\n\n// eslint-disable-next-line import-x/no-duplicates\nimport styles from '@hokulea/core/layouts.module.css';\n// eslint-disable-next-line import-x/no-duplicates\nimport typo from '@hokulea/core/typography.module.css';\n\nimport { or } from '../../-private/helpers.ts';\nimport { NavLink } from '../navigation/nav-link.gts';\nimport { pageDestructor, pageElement } from './pages.ts';\n\nimport type { TOC } from '@ember/component/template-only';\nimport type { ComponentLike } from '@glint/template';\n\ninterface SectionedPageSignature {\n Element: HTMLElement;\n Args: {\n title?: string;\n description?: string;\n element?: ComponentLike<{ Element: HTMLElement; Blocks: { default: [] } }>;\n };\n Blocks: {\n title?: [];\n description?: [];\n nav?: [typeof NavLink];\n content?: [];\n default?: [];\n };\n}\n\nexport const SectionedPage: TOC<SectionedPageSignature> = <template>\n {{#let (if @element @element (element (pageElement))) as |Element|}}\n <Element class={{styles.sectionedPage}} {{pageDestructor}} ...attributes data-test-page>\n {{#if\n (or @title @description (has-block \"title\") (has-block \"description\") (has-block \"nav\"))\n }}\n <header class={{styles.pageContent}}>\n <h1 class={{typo.display}}>\n {{#if (has-block \"title\")}}\n {{yield to=\"title\"}}\n {{else if @title}}\n {{@title}}\n {{/if}}\n </h1>\n\n {{#if (or (has-block \"description\") @description)}}\n <p>\n {{#if (has-block \"description\")}}\n {{yield to=\"description\"}}\n {{else if @description}}\n {{@description}}\n {{/if}}\n </p>\n {{/if}}\n\n {{#if (has-block \"nav\")}}\n <nav>\n {{yield NavLink to=\"nav\"}}\n </nav>\n {{/if}}\n </header>\n {{/if}}\n\n <div class=\"{{styles.pageContent}} {{styles.flow}}\" part=\"content\">\n {{#if (has-block \"content\")}}\n {{yield to=\"content\"}}\n {{else if (has-block)}}\n {{yield}}\n {{/if}}\n </div>\n </Element>\n {{/let}}\n</template>;\n"],"names":["SectionedPage","setComponentTemplate","precompileTemplate","strictMode","scope","element","pageElement","styles","pageDestructor","or","typo","NavLink","templateOnly"],"mappings":";;;;;;;;;;MA8BaA,aAAmB,GAAAC,oBAAA,CAA0BC,kBAAA,CAAA,0xCAAA,EA0C1D;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAC,OAAA;iBAAAC,WAAA;IAAAC,MAAA;oBAAAC,cAAA;IAAAC,EAAA;IAAAC,IAAA;AAAAC,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA;;;;"}
1
+ {"version":3,"file":"sectioned-page-CgINWVQ2.js","sources":["../src/components/layouts/sectioned-page.gts"],"sourcesContent":["import { element } from 'ember-element-helper';\n\n// eslint-disable-next-line import-x/no-duplicates\nimport styles from '@hokulea/core/layouts.module.css';\n// eslint-disable-next-line import-x/no-duplicates\nimport typo from '@hokulea/core/typography.module.css';\n\nimport { or } from '../../-private/helpers.ts';\nimport { NavLink } from '../navigation/nav-link.gts';\nimport { pageDestructor, pageElement } from './pages.ts';\n\nimport type { TOC } from '@ember/component/template-only';\nimport type { ComponentLike } from '@glint/template';\n\ninterface SectionedPageSignature {\n Element: HTMLElement;\n Args: {\n title?: string;\n description?: string;\n element?: ComponentLike<{ Element: HTMLElement; Blocks: { default: [] } }>;\n };\n Blocks: {\n title?: [];\n description?: [];\n nav?: [typeof NavLink];\n content?: [];\n default?: [];\n };\n}\n\nexport const SectionedPage: TOC<SectionedPageSignature> = <template>\n {{#let (if @element @element (element (pageElement))) as |Element|}}\n <Element class={{styles.sectionedPage}} {{pageDestructor}} ...attributes data-test-page>\n {{#if\n (or @title @description (has-block \"title\") (has-block \"description\") (has-block \"nav\"))\n }}\n <header class={{styles.pageContent}}>\n <h1 class={{typo.display}}>\n {{#if (has-block \"title\")}}\n {{yield to=\"title\"}}\n {{else if @title}}\n {{@title}}\n {{/if}}\n </h1>\n\n {{#if (or (has-block \"description\") @description)}}\n <p>\n {{#if (has-block \"description\")}}\n {{yield to=\"description\"}}\n {{else if @description}}\n {{@description}}\n {{/if}}\n </p>\n {{/if}}\n\n {{#if (has-block \"nav\")}}\n <nav>\n {{yield NavLink to=\"nav\"}}\n </nav>\n {{/if}}\n </header>\n {{/if}}\n\n <div class=\"{{styles.pageContent}} {{styles.flow}}\" part=\"content\">\n {{#if (has-block \"content\")}}\n {{yield to=\"content\"}}\n {{else if (has-block)}}\n {{yield}}\n {{/if}}\n </div>\n </Element>\n {{/let}}\n</template>;\n"],"names":["SectionedPage","setComponentTemplate","precompileTemplate","strictMode","scope","element","pageElement","styles","pageDestructor","or","typo","NavLink","templateOnly"],"mappings":";;;;;;;;;;MA8BaA,aAAmB,GAAAC,oBAAA,CAA0BC,kBAAA,CAAA,0xCAAA,EA0C1D;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAC,OAAA;iBAAAC,WAAA;IAAAC,MAAA;oBAAAC,cAAA;IAAAC,EAAA;IAAAC,IAAA;AAAAC,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA;;;;"}
@@ -22,8 +22,11 @@ class Select extends Component {
22
22
  const value = selection.length === 1 ? selection[0] : selection;
23
23
  this.args.update?.(value);
24
24
  };
25
+ get spacing() {
26
+ return this.args.spacing ?? 1;
27
+ }
25
28
  static {
26
- setComponentTemplate(precompileTemplate("\n <span class={{styles.select}}>\n <select disabled={{@disabled}} data-test-select {{on \"input\" this.select capture=true}} ...attributes>\n {{yield (hash Option=(component Option isSelected=this.isSelected))}}\n </select>\n </span>\n ", {
29
+ setComponentTemplate(precompileTemplate("\n <span class={{styles.select}} data-spacing={{this.spacing}}>\n <select disabled={{@disabled}} data-test-select {{on \"input\" this.select capture=true}} ...attributes>\n {{yield (hash Option=(component Option isSelected=this.isSelected))}}\n </select>\n </span>\n ", {
27
30
  strictMode: true,
28
31
  scope: () => ({
29
32
  styles,
@@ -36,4 +39,4 @@ class Select extends Component {
36
39
  }
37
40
 
38
41
  export { Select as S };
39
- //# sourceMappingURL=select-DxyaUFuy.js.map
42
+ //# sourceMappingURL=select-CeO8AZMK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-CeO8AZMK.js","sources":["../src/components/controls/select.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { hash } from '@ember/helper';\nimport { on } from '@ember/modifier';\n\nimport styles from '@hokulea/core/controls.module.css';\n\nimport type { TOC } from '@ember/component/template-only';\nimport type { WithBoundArgs } from '@glint/template';\nimport type { Spacing } from '@hokulea/tokens';\n\nexport type Value = string | number;\n\nexport interface OptionSignature {\n Element: HTMLOptionElement;\n Args: {\n value: Value;\n isSelected: (option: Value) => boolean;\n };\n Blocks: {\n default: [];\n };\n}\n\nconst Option: TOC<OptionSignature> = <template>\n <option value={{@value}} selected={{@isSelected @value}} ...attributes>\n {{#if (has-block)}}\n {{yield}}\n {{else}}\n {{@value}}\n {{/if}}\n </option>\n</template>;\n\nexport interface SelectSignature {\n Element: HTMLSelectElement;\n Args: {\n value?: Value | Value[];\n update?: (value: Value | Value[]) => void;\n disabled?: boolean;\n spacing?: Spacing;\n };\n Blocks: {\n default: [\n {\n Option: WithBoundArgs<typeof Option, 'isSelected'>;\n }\n ];\n };\n}\n\nexport class Select extends Component<SelectSignature> {\n isSelected = (option: Value) => {\n if (Array.isArray(this.args.value)) {\n return this.args.value.includes(option);\n }\n\n return String(option) === String(this.args.value);\n };\n\n select = (event: Event) => {\n const select = event.target as HTMLSelectElement;\n const selection = Array.of(...select.selectedOptions).map((option) => option.value);\n const value = selection.length === 1 ? (selection[0] as Value) : (selection as Value[]);\n\n this.args.update?.(value);\n };\n\n get spacing() {\n return this.args.spacing ?? 1;\n }\n\n <template>\n <span class={{styles.select}} data-spacing={{this.spacing}}>\n <select\n disabled={{@disabled}}\n data-test-select\n {{on \"input\" this.select capture=true}}\n ...attributes\n >\n {{yield (hash Option=(component Option isSelected=this.isSelected))}}\n </select>\n </span>\n </template>\n}\n"],"names":["Option","setComponentTemplate","precompileTemplate","strictMode","templateOnly","Select","Component","isSelected","option","Array","isArray","args","value","includes","String","select","event","target","selection","of","selectedOptions","map","length","update","spacing","scope","styles","on","hash"],"mappings":";;;;;;;;AAuBA,MAAMA,MAAY,GAAAC,oBAAA,CAAmBC,kBAAA,CAAA,mLAAA,EAQrC;EAAAC,UAAA,EAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA,CAAA;AAmBH,MAAMC,eAAeC,SAAA,CAAU;EACpCC,UAAA,GAAcC,MAAQ,IAAA;IACpB,IAAIC,KAAA,CAAMC,OAAO,CAAC,IAAI,CAACC,IAAI,CAACC,KAAK,CAAA,EAAG;MAClC,OAAO,IAAI,CAACD,IAAI,CAACC,KAAK,CAACC,QAAQ,CAACL,MAAA,CAAA;AAClC,IAAA;AAEA,IAAA,OAAOM,OAAON,MAAA,CAAA,KAAYM,MAAA,CAAO,IAAI,CAACH,IAAI,CAACC,KAAK,CAAA;EAClD,CAAA;EAEAG,MAAA,GAAUC,KAAO,IAAA;AACf,IAAA,MAAMD,MAAA,GAASC,KAAA,CAAMC,MAAU;AAC/B,IAAA,MAAMC,SAAA,GAAYT,KAAA,CAAMU,EAAE,CAAA,GAAIJ,MAAA,CAAOK,eAAe,CAAA,CAAEC,GAAG,CAAEb,MAAA,IAAWA,MAAA,CAAOI,KAAK,CAAA;AAClF,IAAA,MAAMA,KAAA,GAAQM,SAAA,CAAUI,MAAM,KAAK,IAAKJ,SAAS,CAAC,CAAA,CAAE,GAAcA,SAAoB;AAEtF,IAAA,IAAI,CAACP,IAAI,CAACY,MAAM,GAAGX,KAAA,CAAA;EACrB,CAAA;EAEA,IAAIY,OAAAA,GAAU;AACZ,IAAA,OAAO,IAAI,CAACb,IAAI,CAACa,OAAO,IAAI,CAAA;AAC9B,EAAA;AAEA,EAAA;IAAAvB,oBAAA,CAAAC,kBAAA,CAAA,qSAAA,EAWA;MAAAC,UAAA,EAAA,IAAA;AAAAsB,MAAAA,KAAA,EAAAA,OAAA;QAAAC,MAAA;QAAAC,EAAA;QAAAC,IAAA;AAAA5B,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
@@ -10,7 +10,7 @@ import Portal from 'ember-stargate/components/portal';
10
10
  import PortalTarget from 'ember-stargate/components/portal-target';
11
11
  import { TrackedArray } from 'tracked-built-ins';
12
12
  import styles from '@hokulea/core/controls.module.css';
13
- import { n as not, e as eq } from './helpers-DS9du02l.js';
13
+ import { n as not, e as eq } from './helpers-D4So5-uK.js';
14
14
  import { precompileTemplate } from '@ember/template-compilation';
15
15
  import { setComponentTemplate } from '@ember/component';
16
16
  import { n, g, i } from 'decorator-transforms/runtime-esm';
@@ -108,4 +108,4 @@ class Tabs extends Component {
108
108
  }
109
109
 
110
110
  export { Tabs as T, TabValue as a };
111
- //# sourceMappingURL=tabs-a9GhNQv9.js.map
111
+ //# sourceMappingURL=tabs-DAscspzh.js.map