@hokulea/ember 0.12.0 → 0.14.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 (172) hide show
  1. package/declarations/components/controls/-menu.d.ts +2 -2
  2. package/declarations/components/controls/-menu.d.ts.map +1 -1
  3. package/declarations/components/controls/menu.d.ts +0 -3
  4. package/declarations/components/controls/menu.d.ts.map +1 -1
  5. package/declarations/components/feedback/alert.d.ts +3 -2
  6. package/declarations/components/feedback/alert.d.ts.map +1 -1
  7. package/declarations/components/form/form.d.ts +9 -3
  8. package/declarations/components/form/form.d.ts.map +1 -1
  9. package/declarations/components/graphics/icon.d.ts +4 -1
  10. package/declarations/components/graphics/icon.d.ts.map +1 -1
  11. package/declarations/components/layouts/sectioned-page.d.ts +1 -1
  12. package/declarations/components/layouts/sectioned-page.d.ts.map +1 -1
  13. package/declarations/components/navigation/app-header.d.ts +2 -2
  14. package/declarations/components/navigation/app-header.d.ts.map +1 -1
  15. package/declarations/components/navigation/nav-link.d.ts.map +1 -1
  16. package/declarations/components/navigation/tab-nav.d.ts +12 -0
  17. package/declarations/components/navigation/tab-nav.d.ts.map +1 -0
  18. package/declarations/components/tab-nav.d.ts +2 -0
  19. package/declarations/components/tab-nav.d.ts.map +1 -0
  20. package/declarations/helpers/-position.d.ts +12 -0
  21. package/declarations/helpers/-position.d.ts.map +1 -0
  22. package/declarations/helpers/popover.d.ts +23 -2
  23. package/declarations/helpers/popover.d.ts.map +1 -1
  24. package/declarations/index.d.ts +3 -0
  25. package/declarations/index.d.ts.map +1 -1
  26. package/declarations/test-support/index.d.ts +1 -0
  27. package/declarations/test-support/index.d.ts.map +1 -1
  28. package/declarations/test-support/page-objects/-menu.d.ts.map +1 -1
  29. package/declarations/test-support/page-objects/-private/error.d.ts +7 -0
  30. package/declarations/test-support/page-objects/-private/error.d.ts.map +1 -0
  31. package/declarations/test-support/page-objects/-private/field.d.ts +3 -6
  32. package/declarations/test-support/page-objects/-private/field.d.ts.map +1 -1
  33. package/declarations/test-support/page-objects/form.d.ts +3 -1
  34. package/declarations/test-support/page-objects/form.d.ts.map +1 -1
  35. package/declarations/test-support/page-objects/navigation-list.d.ts +1 -1
  36. package/declarations/test-support/page-objects/navigation-list.d.ts.map +1 -1
  37. package/declarations/test-support/page-objects/tab-nav.d.ts +9 -0
  38. package/declarations/test-support/page-objects/tab-nav.d.ts.map +1 -0
  39. package/dist/_app_/components/tab-nav.js +1 -0
  40. package/dist/{alert-DmCWMMRr.js → alert-CHUcylXU.js} +4 -3
  41. package/dist/alert-CHUcylXU.js.map +1 -0
  42. package/dist/{app-header-DKlDPWSe.js → app-header-B9BWy4HI.js} +8 -8
  43. package/dist/app-header-B9BWy4HI.js.map +1 -0
  44. package/dist/{avatar-DTqwlbny.js → avatar-CKkZu7w3.js} +2 -2
  45. package/dist/{avatar-DTqwlbny.js.map → avatar-CKkZu7w3.js.map} +1 -1
  46. package/dist/{box-COwjh1Rb.js → box-6Zf3RnAO.js} +2 -2
  47. package/dist/{box-COwjh1Rb.js.map → box-6Zf3RnAO.js.map} +1 -1
  48. package/dist/button-CRe5grz4.js +24 -0
  49. package/dist/{button-BAtG9lC0.js.map → button-CRe5grz4.js.map} +1 -1
  50. package/dist/card-Wzo-S04B.js +14 -0
  51. package/dist/{card-Bq4sLW1m.js.map → card-Wzo-S04B.js.map} +1 -1
  52. package/dist/{checkbox-C9-RZtWK.js → checkbox-Dq-Ba0eG.js} +2 -2
  53. package/dist/{checkbox-C9-RZtWK.js.map → checkbox-Dq-Ba0eG.js.map} +1 -1
  54. package/dist/components/alert.js +1 -1
  55. package/dist/components/app-header.js +1 -1
  56. package/dist/components/avatar.js +1 -1
  57. package/dist/components/box.js +1 -1
  58. package/dist/components/button.js +1 -1
  59. package/dist/components/card.js +1 -1
  60. package/dist/components/checkbox.js +1 -1
  61. package/dist/components/currency-input.js +1 -1
  62. package/dist/components/data-table.js +1 -1
  63. package/dist/components/date-input.js +1 -1
  64. package/dist/components/email-input.js +1 -1
  65. package/dist/components/focus-page.js +1 -1
  66. package/dist/components/form.js +1 -1
  67. package/dist/components/icon-button.js +1 -1
  68. package/dist/components/icon.js +1 -1
  69. package/dist/components/input-builder.js +1 -1
  70. package/dist/components/link.js +1 -1
  71. package/dist/components/list.js +1 -1
  72. package/dist/components/menu.js +1 -1
  73. package/dist/components/navigation-list.js +1 -1
  74. package/dist/components/number-input.js +1 -1
  75. package/dist/components/page.js +1 -1
  76. package/dist/components/pagination.js +1 -1
  77. package/dist/components/password-input.js +1 -1
  78. package/dist/components/phone-input.js +1 -1
  79. package/dist/components/popover.js +1 -1
  80. package/dist/components/radio.js +1 -1
  81. package/dist/components/range-input.js +1 -1
  82. package/dist/components/section.js +1 -1
  83. package/dist/components/sectioned-page.js +1 -1
  84. package/dist/components/select.js +1 -1
  85. package/dist/components/tab-nav.js +2 -0
  86. package/dist/components/tab-nav.js.map +1 -0
  87. package/dist/components/tabs.js +1 -1
  88. package/dist/components/text-area.js +1 -1
  89. package/dist/components/text-input.js +1 -1
  90. package/dist/currency-input-BXZynbgP.js +20 -0
  91. package/dist/{currency-input-BqNb3IcU.js.map → currency-input-BXZynbgP.js.map} +1 -1
  92. package/dist/data-table-DgPcWpgQ.js +16 -0
  93. package/dist/{data-table-ZliVM1td.js.map → data-table-DgPcWpgQ.js.map} +1 -1
  94. package/dist/{date-input-DxDpVu3A.js → date-input-Do_gdYif.js} +2 -2
  95. package/dist/{date-input-DxDpVu3A.js.map → date-input-Do_gdYif.js.map} +1 -1
  96. package/dist/{email-input-84impWbH.js → email-input-C3DQI5CS.js} +2 -2
  97. package/dist/{email-input-84impWbH.js.map → email-input-C3DQI5CS.js.map} +1 -1
  98. package/dist/focus-page-De0KXI-m.js +19 -0
  99. package/dist/{focus-page-Boq96jK3.js.map → focus-page-De0KXI-m.js.map} +1 -1
  100. package/dist/form-VcfCjgct.js +508 -0
  101. package/dist/{form-CXvWQbiY.js.map → form-VcfCjgct.js.map} +1 -1
  102. package/dist/helpers/popover.js +11 -20
  103. package/dist/helpers/popover.js.map +1 -1
  104. package/dist/{icon-button-hS8-Jo0v.js → icon-button-ClE5SC8Y.js} +4 -4
  105. package/dist/{icon-button-hS8-Jo0v.js.map → icon-button-ClE5SC8Y.js.map} +1 -1
  106. package/dist/{icon-rlG6O1ps.js → icon-ej-3ZqQt.js} +2 -2
  107. package/dist/icon-ej-3ZqQt.js.map +1 -0
  108. package/dist/index.js +36 -35
  109. package/dist/index.js.map +1 -1
  110. package/dist/input-builder-DpIzsgxI.js +18 -0
  111. package/dist/{input-builder-C6GkddCw.js.map → input-builder-DpIzsgxI.js.map} +1 -1
  112. package/dist/{link-bqsg26Cc.js → link-4Kc0K38u.js} +3 -3
  113. package/dist/{link-bqsg26Cc.js.map → link-4Kc0K38u.js.map} +1 -1
  114. package/dist/{list-C86dLtuk.js → list-CIQXPiUH.js} +3 -3
  115. package/dist/{list-C86dLtuk.js.map → list-CIQXPiUH.js.map} +1 -1
  116. package/dist/{menu-DCDUaqYZ.js → menu-Dcc72jZp.js} +5 -15
  117. package/dist/menu-Dcc72jZp.js.map +1 -0
  118. package/dist/nav-link-KZJghY_q.js +22 -0
  119. package/dist/{nav-link-DL59IUt0.js.map → nav-link-KZJghY_q.js.map} +1 -1
  120. package/dist/{navigation-list-Dt-WaMyp.js → navigation-list-DkWUXH9a.js} +4 -4
  121. package/dist/{navigation-list-Dt-WaMyp.js.map → navigation-list-DkWUXH9a.js.map} +1 -1
  122. package/dist/{number-input-CDMSp7qk.js → number-input-C3nCdLGj.js} +2 -2
  123. package/dist/{number-input-CDMSp7qk.js.map → number-input-C3nCdLGj.js.map} +1 -1
  124. package/dist/page-BlSv_2Xh.js +19 -0
  125. package/dist/{page-DNrVa_Zo.js.map → page-BlSv_2Xh.js.map} +1 -1
  126. package/dist/{pagination-BYiNuWz8.js → pagination-Mgv860Cf.js} +5 -5
  127. package/dist/{pagination-BYiNuWz8.js.map → pagination-Mgv860Cf.js.map} +1 -1
  128. package/dist/{password-input-BYvLH8gQ.js → password-input-DRa3El-5.js} +2 -2
  129. package/dist/{password-input-BYvLH8gQ.js.map → password-input-DRa3El-5.js.map} +1 -1
  130. package/dist/{phone-input-8N_lOkZ2.js → phone-input-D3AIkLe8.js} +2 -2
  131. package/dist/{phone-input-8N_lOkZ2.js.map → phone-input-D3AIkLe8.js.map} +1 -1
  132. package/dist/{popover-wLRNTIPC.js → popover-CaKubr0X.js} +2 -2
  133. package/dist/{popover-wLRNTIPC.js.map → popover-CaKubr0X.js.map} +1 -1
  134. package/dist/push-C8z1Qw41.js +24 -0
  135. package/dist/{push-DnJFFc_p.js.map → push-C8z1Qw41.js.map} +1 -1
  136. package/dist/{radio-BQvSPyDT.js → radio-BQ_nDgm0.js} +2 -2
  137. package/dist/{radio-BQvSPyDT.js.map → radio-BQ_nDgm0.js.map} +1 -1
  138. package/dist/{range-input-Bosd7QI2.js → range-input-Oc8Z7tsH.js} +2 -2
  139. package/dist/{range-input-Bosd7QI2.js.map → range-input-Oc8Z7tsH.js.map} +1 -1
  140. package/dist/{section-B_1poNPX.js → section-DbYzqbWp.js} +2 -2
  141. package/dist/{section-B_1poNPX.js.map → section-DbYzqbWp.js.map} +1 -1
  142. package/dist/sectioned-page-Ba06ASAC.js +21 -0
  143. package/dist/sectioned-page-Ba06ASAC.js.map +1 -0
  144. package/dist/{select-DWOHAUfQ.js → select-CrdsGEgR.js} +3 -3
  145. package/dist/{select-DWOHAUfQ.js.map → select-CrdsGEgR.js.map} +1 -1
  146. package/dist/tab-nav-pvb2XhOD.js +16 -0
  147. package/dist/tab-nav-pvb2XhOD.js.map +1 -0
  148. package/dist/{tabs-e_cUi6pL.js → tabs-DdGp_ET2.js} +3 -3
  149. package/dist/{tabs-e_cUi6pL.js.map → tabs-DdGp_ET2.js.map} +1 -1
  150. package/dist/test-support/index.js +37 -26
  151. package/dist/test-support/index.js.map +1 -1
  152. package/dist/{text-area-BsDD1dpV.js → text-area-BBLWOU6L.js} +2 -2
  153. package/dist/{text-area-BsDD1dpV.js.map → text-area-BBLWOU6L.js.map} +1 -1
  154. package/dist/{text-input-BntDzi8S.js → text-input-B5cPU_e-.js} +2 -2
  155. package/dist/{text-input-BntDzi8S.js.map → text-input-B5cPU_e-.js.map} +1 -1
  156. package/package.json +45 -46
  157. package/dist/alert-DmCWMMRr.js.map +0 -1
  158. package/dist/app-header-DKlDPWSe.js.map +0 -1
  159. package/dist/button-BAtG9lC0.js +0 -24
  160. package/dist/card-Bq4sLW1m.js +0 -14
  161. package/dist/currency-input-BqNb3IcU.js +0 -20
  162. package/dist/data-table-ZliVM1td.js +0 -16
  163. package/dist/focus-page-Boq96jK3.js +0 -19
  164. package/dist/form-CXvWQbiY.js +0 -500
  165. package/dist/icon-rlG6O1ps.js.map +0 -1
  166. package/dist/input-builder-C6GkddCw.js +0 -18
  167. package/dist/menu-DCDUaqYZ.js.map +0 -1
  168. package/dist/nav-link-DL59IUt0.js +0 -22
  169. package/dist/page-DNrVa_Zo.js +0 -19
  170. package/dist/push-DnJFFc_p.js +0 -24
  171. package/dist/sectioned-page-D9Xxr97R.js +0 -21
  172. package/dist/sectioned-page-D9Xxr97R.js.map +0 -1
@@ -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("{{#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}}", {
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-C8z1Qw41.js.map
@@ -1 +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
+ {"version":3,"file":"push-C8z1Qw41.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,shBAAA,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;;;;"}
@@ -4,7 +4,7 @@ import { precompileTemplate } from '@ember/template-compilation';
4
4
  import { setComponentTemplate } from '@ember/component';
5
5
  import templateOnly from '@ember/component/template-only';
6
6
 
7
- const Radio = setComponentTemplate(precompileTemplate("\n <input class=\"input\" type=\"radio\" checked={{@value}} disabled={{@disabled}} data-spacing={{@spacing}} data-test-choice {{on \"input\" (pick \"target.checked\" @update) capture=true}} ...attributes />\n", {
7
+ const Radio = setComponentTemplate(precompileTemplate("<input class=\"input\" type=\"radio\" checked={{@value}} disabled={{@disabled}} data-spacing={{@spacing}} data-test-choice {{on \"input\" (pick \"target.checked\" @update) capture=true}} ...attributes />", {
8
8
  strictMode: true,
9
9
  scope: () => ({
10
10
  on,
@@ -13,4 +13,4 @@ const Radio = setComponentTemplate(precompileTemplate("\n <input class=\"input\
13
13
  }), templateOnly());
14
14
 
15
15
  export { Radio as R };
16
- //# sourceMappingURL=radio-BQvSPyDT.js.map
16
+ //# sourceMappingURL=radio-BQ_nDgm0.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"radio-BQvSPyDT.js","sources":["../src/components/controls/radio.gts"],"sourcesContent":["import { on } from '@ember/modifier';\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=\"input\"\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","on","pick","templateOnly"],"mappings":";;;;;;MAYaA,KAAW,GAAAC,oBAAA,CAAkBC,kBAAA,CAAA,mNAAA,EAW1C;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAC,EAAA;AAAAC,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA;;;;"}
1
+ {"version":3,"file":"radio-BQ_nDgm0.js","sources":["../src/components/controls/radio.gts"],"sourcesContent":["import { on } from '@ember/modifier';\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=\"input\"\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","on","pick","templateOnly"],"mappings":";;;;;;MAYaA,KAAW,GAAAC,oBAAA,CAAkBC,kBAAA,CAAA,6MAAA,EAW1C;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAC,EAAA;AAAAC,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA;;;;"}
@@ -21,7 +21,7 @@ const progressStyle = modifier((element, [value]) => {
21
21
  element.addEventListener('input', listenForProgressChange);
22
22
  return () => element.removeEventListener('input', listenForProgressChange);
23
23
  });
24
- const RangeInput = setComponentTemplate(precompileTemplate("\n <input class=\"input\" type=\"range\" value={{@value}} disabled={{@disabled}} data-test-input data-orientation={{@orientation}} {{on \"input\" (pick \"target.value\" (pickAsNumber @update)) capture=true}} {{progressStyle @value}} ...attributes />\n", {
24
+ const RangeInput = setComponentTemplate(precompileTemplate("<input class=\"input\" type=\"range\" value={{@value}} disabled={{@disabled}} data-test-input data-orientation={{@orientation}} {{on \"input\" (pick \"target.value\" (pickAsNumber @update)) capture=true}} {{progressStyle @value}} ...attributes />", {
25
25
  strictMode: true,
26
26
  scope: () => ({
27
27
  on,
@@ -32,4 +32,4 @@ const RangeInput = setComponentTemplate(precompileTemplate("\n <input class=\"i
32
32
  }), templateOnly());
33
33
 
34
34
  export { RangeInput as R };
35
- //# sourceMappingURL=range-input-Bosd7QI2.js.map
35
+ //# sourceMappingURL=range-input-Oc8Z7tsH.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"range-input-Bosd7QI2.js","sources":["../src/components/controls/range-input.gts"],"sourcesContent":["import { on } from '@ember/modifier';\n\nimport { modifier } from 'ember-modifier';\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=\"input\"\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","on","pick","pickAsNumber","templateOnly"],"mappings":";;;;;;;;AAUA,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,8PAAA,EAYpD;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAC,EAAA;IAAAC,IAAA;IAAAC,YAAA;AAAAb,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAc,YAAA,EAAA;;;;"}
1
+ {"version":3,"file":"range-input-Oc8Z7tsH.js","sources":["../src/components/controls/range-input.gts"],"sourcesContent":["import { on } from '@ember/modifier';\n\nimport { modifier } from 'ember-modifier';\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=\"input\"\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","on","pick","pickAsNumber","templateOnly"],"mappings":";;;;;;;;AAUA,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,wPAAA,EAYpD;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAC,EAAA;IAAAC,IAAA;IAAAC,YAAA;AAAAb,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAc,YAAA,EAAA;;;;"}
@@ -9,7 +9,7 @@ function elementForLevel(level) {
9
9
  assert(`@level for <Section> must be between 1 and 6, received '${lvl}'`, lvl >= 1 && lvl <= 6);
10
10
  return `h${lvl}`;
11
11
  }
12
- const Section = setComponentTemplate(precompileTemplate("\n <section class=\"section flow\" data-test-section ...attributes>\n {{#if @title}}\n <header data-test-section=\"header\" part=\"header\">\n {{#if @title}}\n {{#let (element (elementForLevel @level)) as |Headline|}}\n <Headline data-test-section=\"title\" part=\"title\">{{@title}}</Headline>\n {{/let}}\n {{/if}}\n </header>\n {{/if}}\n\n {{#if (has-block)}}\n {{yield}}\n {{/if}}\n </section>\n", {
12
+ const Section = setComponentTemplate(precompileTemplate("<section class=\"section flow\" data-test-section ...attributes>\n {{#if @title}}\n <header data-test-section=\"header\" part=\"header\">\n {{#if @title}}\n {{#let (element (elementForLevel @level)) as |Headline|}}\n <Headline data-test-section=\"title\" part=\"title\">{{@title}}</Headline>\n {{/let}}\n {{/if}}\n </header>\n {{/if}}\n\n {{#if (has-block)}}\n {{yield}}\n {{/if}}\n</section>", {
13
13
  strictMode: true,
14
14
  scope: () => ({
15
15
  element,
@@ -18,4 +18,4 @@ const Section = setComponentTemplate(precompileTemplate("\n <section class=\"se
18
18
  }), templateOnly());
19
19
 
20
20
  export { Section as S };
21
- //# sourceMappingURL=section-B_1poNPX.js.map
21
+ //# sourceMappingURL=section-DbYzqbWp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"section-B_1poNPX.js","sources":["../src/components/content/section.gts"],"sourcesContent":["import { assert } from '@ember/debug';\n\nimport { element } from 'ember-element-helper';\n\nimport type { TOC } from '@ember/component/template-only';\n\nexport interface SectionSignature {\n Element: HTMLElement;\n Args: {\n title?: string;\n /**\n * The level of the component, 1-6 as in `<h1>` to `<h6>`\n *\n * @defaultValue 2\n */\n level?: string;\n };\n Blocks: {\n default: [];\n };\n}\n\nfunction elementForLevel(level?: string) {\n const lvl = level ? Number.parseInt(level) : 2;\n\n assert(`@level for <Section> must be between 1 and 6, received '${lvl}'`, lvl >= 1 && lvl <= 6);\n\n return `h${lvl}`;\n}\n\nexport const Section: TOC<SectionSignature> = <template>\n <section class=\"section flow\" data-test-section ...attributes>\n {{#if @title}}\n <header data-test-section=\"header\" part=\"header\">\n {{#if @title}}\n {{#let (element (elementForLevel @level)) as |Headline|}}\n <Headline data-test-section=\"title\" part=\"title\">{{@title}}</Headline>\n {{/let}}\n {{/if}}\n </header>\n {{/if}}\n\n {{#if (has-block)}}\n {{yield}}\n {{/if}}\n </section>\n</template>;\n"],"names":["elementForLevel","level","lvl","Number","parseInt","assert","Section","setComponentTemplate","precompileTemplate","strictMode","scope","element","templateOnly"],"mappings":";;;;;;AAsBA,SAASA,eAAAA,CAAgBC,KAAc,EAAA;EACrC,MAAMC,GAAA,GAAMD,KAAA,GAAQE,MAAA,CAAOC,QAAQ,CAACH,KAAA,CAAA,GAAS,CAAA;AAE7CI,EAAAA,MAAA,CAAO,CAAA,wDAAA,EAA2DH,GAAA,CAAA,CAAA,CAAM,EAAEA,GAAA,IAAO,CAAA,IAAKA,GAAA,IAAO,CAAA,CAAA;EAE7F,OAAO,CAAA,CAAA,EAAIA,GAAA,CAAA,CAAK;AAClB;MAEaI,OAAa,GAAAC,oBAAA,CAAoBC,kBAAA,CAAA,wdAAA,EAgB9C;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAC,OAAA;AAAAX,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAY,YAAA,EAAA;;;;"}
1
+ {"version":3,"file":"section-DbYzqbWp.js","sources":["../src/components/content/section.gts"],"sourcesContent":["import { assert } from '@ember/debug';\n\nimport { element } from 'ember-element-helper';\n\nimport type { TOC } from '@ember/component/template-only';\n\nexport interface SectionSignature {\n Element: HTMLElement;\n Args: {\n title?: string;\n /**\n * The level of the component, 1-6 as in `<h1>` to `<h6>`\n *\n * @defaultValue 2\n */\n level?: string;\n };\n Blocks: {\n default: [];\n };\n}\n\nfunction elementForLevel(level?: string) {\n const lvl = level ? Number.parseInt(level) : 2;\n\n assert(`@level for <Section> must be between 1 and 6, received '${lvl}'`, lvl >= 1 && lvl <= 6);\n\n return `h${lvl}`;\n}\n\nexport const Section: TOC<SectionSignature> = <template>\n <section class=\"section flow\" data-test-section ...attributes>\n {{#if @title}}\n <header data-test-section=\"header\" part=\"header\">\n {{#if @title}}\n {{#let (element (elementForLevel @level)) as |Headline|}}\n <Headline data-test-section=\"title\" part=\"title\">{{@title}}</Headline>\n {{/let}}\n {{/if}}\n </header>\n {{/if}}\n\n {{#if (has-block)}}\n {{yield}}\n {{/if}}\n </section>\n</template>;\n"],"names":["elementForLevel","level","lvl","Number","parseInt","assert","Section","setComponentTemplate","precompileTemplate","strictMode","scope","element","templateOnly"],"mappings":";;;;;;AAsBA,SAASA,eAAAA,CAAgBC,KAAc,EAAA;EACrC,MAAMC,GAAA,GAAMD,KAAA,GAAQE,MAAA,CAAOC,QAAQ,CAACH,KAAA,CAAA,GAAS,CAAA;AAE7CI,EAAAA,MAAA,CAAO,CAAA,wDAAA,EAA2DH,GAAA,CAAA,CAAA,CAAM,EAAEA,GAAA,IAAO,CAAA,IAAKA,GAAA,IAAO,CAAA,CAAA;EAE7F,OAAO,CAAA,CAAA,EAAIA,GAAA,CAAA,CAAK;AAClB;MAEaI,OAAa,GAAAC,oBAAA,CAAoBC,kBAAA,CAAA,wbAAA,EAgB9C;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAC,OAAA;AAAAX,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAY,YAAA,EAAA;;;;"}
@@ -0,0 +1,21 @@
1
+ import { element } from 'ember-element-helper';
2
+ import { o as or } from './helpers-D4So5-uK.js';
3
+ import { T as TabNav } from './tab-nav-pvb2XhOD.js';
4
+ import { P as PageDestructor, a as PageElement } from './pages-DgHJEvSy.js';
5
+ import { precompileTemplate } from '@ember/template-compilation';
6
+ import { setComponentTemplate } from '@ember/component';
7
+ import templateOnly from '@ember/component/template-only';
8
+
9
+ const SectionedPage = setComponentTemplate(precompileTemplate("{{#let (if @element @element (element (pageElement))) as |Element|}}\n <Element class=\"sectioned-page\" {{pageDestructor}} ...attributes data-test-page>\n {{#if (or @title @description (has-block \"title\") (has-block \"description\") (has-block \"nav\"))}}\n <header class=\"page-content\">\n <h1 class=\"typography-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 <TabNav as |n|>\n {{yield n.Item to=\"nav\"}}\n </TabNav>\n {{/if}}\n </header>\n {{/if}}\n\n <div class=\"page-content 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}}", {
10
+ strictMode: true,
11
+ scope: () => ({
12
+ element,
13
+ pageElement: PageElement,
14
+ pageDestructor: PageDestructor,
15
+ or,
16
+ TabNav
17
+ })
18
+ }), templateOnly());
19
+
20
+ export { SectionedPage as S };
21
+ //# sourceMappingURL=sectioned-page-Ba06ASAC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sectioned-page-Ba06ASAC.js","sources":["../src/components/layouts/sectioned-page.gts"],"sourcesContent":["import { element } from 'ember-element-helper';\n\nimport { or } from '../../-private/helpers.ts';\nimport TabNav from '../tab-nav.gts';\nimport { pageDestructor, pageElement } from './pages.ts';\n\nimport type { NavLink } from '../navigation/nav-link.gts';\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=\"sectioned-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=\"page-content\">\n <h1 class=\"typography-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 <TabNav as |n|>\n {{yield n.Item to=\"nav\"}}\n </TabNav>\n {{/if}}\n </header>\n {{/if}}\n\n <div class=\"page-content 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","pageDestructor","or","TabNav","templateOnly"],"mappings":";;;;;;;;MA0BaA,aAAmB,GAAAC,oBAAA,CAA0BC,kBAAA,CAAA,+rCAAA,EA0C1D;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAC,OAAA;iBAAAC,WAAA;oBAAAC,cAAA;IAAAC,EAAA;AAAAC,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA;;;;"}
@@ -5,7 +5,7 @@ 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 Option = setComponentTemplate(precompileTemplate("\n <option value={{@value}} selected={{@isSelected @value}} ...attributes>\n {{#if (has-block)}}\n {{yield}}\n {{else}}\n {{@value}}\n {{/if}}\n </option>\n", {
8
+ const Option = setComponentTemplate(precompileTemplate("<option value={{@value}} selected={{@isSelected @value}} ...attributes>\n {{#if (has-block)}}\n {{yield}}\n {{else}}\n {{@value}}\n {{/if}}\n</option>", {
9
9
  strictMode: true
10
10
  }), templateOnly());
11
11
  class Select extends Component {
@@ -25,7 +25,7 @@ class Select extends Component {
25
25
  return this.args.spacing ?? 1;
26
26
  }
27
27
  static {
28
- setComponentTemplate(precompileTemplate("\n <span class=\"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 ", {
28
+ setComponentTemplate(precompileTemplate("<span class=\"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>", {
29
29
  strictMode: true,
30
30
  scope: () => ({
31
31
  on,
@@ -37,4 +37,4 @@ class Select extends Component {
37
37
  }
38
38
 
39
39
  export { Select as S };
40
- //# sourceMappingURL=select-DWOHAUfQ.js.map
40
+ //# sourceMappingURL=select-CrdsGEgR.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"select-DWOHAUfQ.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 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=\"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","on","hash"],"mappings":";;;;;;;AAqBA,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,8RAAA,EAWA;MAAAC,UAAA,EAAA,IAAA;AAAAsB,MAAAA,KAAA,EAAAA,OAAA;QAAAC,EAAA;QAAAC,IAAA;AAAA3B,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
1
+ {"version":3,"file":"select-CrdsGEgR.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 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=\"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","on","hash"],"mappings":";;;;;;;AAqBA,MAAMA,MAAY,GAAAC,oBAAA,CAAmBC,kBAAA,CAAA,iKAAA,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,oQAAA,EAWA;MAAAC,UAAA,EAAA,IAAA;AAAAsB,MAAAA,KAAA,EAAAA,OAAA;QAAAC,EAAA;QAAAC,IAAA;AAAA3B,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
@@ -0,0 +1,16 @@
1
+ import { hash } from '@ember/helper';
2
+ import { N as NavLink } from './nav-link-KZJghY_q.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 TabNav = setComponentTemplate(precompileTemplate("<nav class=\"tab-nav\" data-test-tab-nav ...attributes>\n {{yield (hash Item=NavLink)}}\n</nav>", {
8
+ strictMode: true,
9
+ scope: () => ({
10
+ hash,
11
+ NavLink
12
+ })
13
+ }), templateOnly());
14
+
15
+ export { TabNav as T };
16
+ //# sourceMappingURL=tab-nav-pvb2XhOD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tab-nav-pvb2XhOD.js","sources":["../src/components/navigation/tab-nav.gts"],"sourcesContent":["import { hash } from '@ember/helper';\n\nimport { NavLink } from './nav-link.gts';\n\nimport type { TOC } from '@ember/component/template-only';\n\nexport interface TabNavSignature {\n Element: HTMLElement;\n Blocks: {\n default?: [{ Item: typeof NavLink }];\n };\n}\n\nexport const TabNav: TOC<TabNavSignature> = <template>\n <nav class=\"tab-nav\" data-test-tab-nav ...attributes>\n {{yield (hash Item=NavLink)}}\n </nav>\n</template>;\n"],"names":["TabNav","setComponentTemplate","precompileTemplate","strictMode","scope","hash","NavLink","templateOnly"],"mappings":";;;;;;MAaaA,MAAY,GAAAC,oBAAA,CAAmBC,kBAAA,CAAA,kGAAA,EAI5C;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAC,IAAA;AAAAC,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA;;;;"}
@@ -36,7 +36,7 @@ class Tab extends Component {
36
36
  n(this.prototype, "id", [cached]);
37
37
  }
38
38
  static {
39
- setComponentTemplate(precompileTemplate("\n {{#let (uniqueId) (hash active=(eq this.id @activeItem) selected=(eq this.id @selection)) as |id state|}}\n <Portal @target={{@tablist}}>\n {{!-- template-lint-disable require-context-role --}}\n <button type=\"button\" role=\"tab\" aria-controls={{id}} aria-selected={{if state.selected \"true\"}} id=\"{{id}}-label\" {{attachValue @value}}>\n <span>\n {{#if (has-block \"label\")}}\n {{yield state to=\"label\"}}\n {{else}}\n {{@label}}\n {{/if}}\n </span>\n </button>\n </Portal>\n\n <section id={{id}} role=\"tabpanel\" aria-labelledby=\"{{id}}-label\" local-class=\"content\" hidden={{not state.selected}}>\n {{#if (has-block \"content\")}}\n {{yield state to=\"content\"}}\n {{else}}\n {{yield state}}\n {{/if}}\n </section>\n {{/let}}\n ", {
39
+ setComponentTemplate(precompileTemplate("{{#let (uniqueId) (hash active=(eq this.id @activeItem) selected=(eq this.id @selection)) as |id state|}}\n <Portal @target={{@tablist}}>\n {{!-- template-lint-disable require-context-role --}}\n <button type=\"button\" role=\"tab\" aria-controls={{id}} aria-selected={{if state.selected \"true\"}} id=\"{{id}}-label\" {{attachValue @value}}>\n <span>\n {{#if (has-block \"label\")}}\n {{yield state to=\"label\"}}\n {{else}}\n {{@label}}\n {{/if}}\n </span>\n </button>\n </Portal>\n\n <section id={{id}} role=\"tabpanel\" aria-labelledby=\"{{id}}-label\" local-class=\"content\" hidden={{not state.selected}}>\n {{#if (has-block \"content\")}}\n {{yield state to=\"content\"}}\n {{else}}\n {{yield state}}\n {{/if}}\n </section>\n{{/let}}", {
40
40
  strictMode: true,
41
41
  scope: () => ({
42
42
  uniqueId,
@@ -92,7 +92,7 @@ class Tabs extends Component {
92
92
  this.activeItem = id;
93
93
  };
94
94
  static {
95
- setComponentTemplate(precompileTemplate("\n <div class=\"tabs\" data-test-tabs>\n {{#let (uniqueId) as |tablistId|}}\n <PortalTarget @name={{tablistId}} @multiple={{true}} role=\"tablist\" {{ariaTablist items=this.items select=this.select selection=this.selection activateItem=this.activateItem disabled=@disabled behavior=@behavior orientation=@orientation}} />\n\n {{yield (hash Tab=(component Tab register=this.register unregister=this.unregister tablist=tablistId selection=this.selection activeItem=this.activeItem))}}\n {{/let}}\n </div>\n ", {
95
+ setComponentTemplate(precompileTemplate("<div class=\"tabs\" data-test-tabs>\n {{#let (uniqueId) as |tablistId|}}\n <PortalTarget @name={{tablistId}} @multiple={{true}} role=\"tablist\" {{ariaTablist items=this.items select=this.select selection=this.selection activateItem=this.activateItem disabled=@disabled behavior=@behavior orientation=@orientation}} />\n\n {{yield (hash Tab=(component Tab register=this.register unregister=this.unregister tablist=tablistId selection=this.selection activeItem=this.activeItem))}}\n {{/let}}\n</div>", {
96
96
  strictMode: true,
97
97
  scope: () => ({
98
98
  uniqueId,
@@ -106,4 +106,4 @@ class Tabs extends Component {
106
106
  }
107
107
 
108
108
  export { Tabs as T, TabValue as a };
109
- //# sourceMappingURL=tabs-e_cUi6pL.js.map
109
+ //# sourceMappingURL=tabs-DdGp_ET2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tabs-e_cUi6pL.js","sources":["../src/components/controls/tabs.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { cached, tracked } from '@glimmer/tracking';\nimport { registerDestructor } from '@ember/destroyable';\nimport { hash, uniqueId } from '@ember/helper';\nimport { guidFor } from '@ember/object/internals';\nimport { next } from '@ember/runloop';\n\nimport { ariaTablist, type Orientation, type TablistBehavior } from 'ember-aria-voyager';\nimport { modifier } from 'ember-modifier';\nimport Portal from 'ember-stargate/components/portal';\nimport PortalTarget from 'ember-stargate/components/portal-target';\nimport { TrackedArray } from 'tracked-built-ins';\n\nimport { eq, not } from '../../-private/helpers.ts';\n\nimport type Owner from '@ember/owner';\nimport type { WithBoundArgs } from '@glint/template';\n\nexport const TabValue = Symbol('TabValue');\n\nconst attachValue = modifier((element, [value]) => {\n if (value) {\n // @ts-expect-error this is internal API\n element[TabValue] = value;\n }\n});\n\ninterface State {\n active: boolean;\n selected: boolean;\n}\n\ntype Item = string & {};\n\ntype TabSignature = {\n Element: HTMLDivElement;\n Args: {\n tablist: string;\n register: (tab: Tab) => void;\n unregister: (tab: Tab) => void;\n label?: string;\n value?: unknown;\n selection?: unknown;\n activeItem?: Item;\n };\n Blocks: {\n default?: [State];\n label?: [State];\n content?: [State];\n };\n};\n\nclass Tab extends Component<TabSignature> {\n constructor(owner: Owner, args: TabSignature['Args']) {\n super(owner, args);\n\n args.register(this);\n\n registerDestructor(this, () => {\n args.unregister(this);\n });\n }\n\n @cached\n get id() {\n return this.args.value ?? this.args.label ?? guidFor(this);\n }\n\n <template>\n {{#let\n (uniqueId) (hash active=(eq this.id @activeItem) selected=(eq this.id @selection))\n as |id state|\n }}\n <Portal @target={{@tablist}}>\n {{! template-lint-disable require-context-role }}\n <button\n type=\"button\"\n role=\"tab\"\n aria-controls={{id}}\n aria-selected={{if state.selected \"true\"}}\n id=\"{{id}}-label\"\n {{attachValue @value}}\n >\n <span>\n {{#if (has-block \"label\")}}\n {{yield state to=\"label\"}}\n {{else}}\n {{@label}}\n {{/if}}\n </span>\n </button>\n </Portal>\n\n <section\n id={{id}}\n role=\"tabpanel\"\n aria-labelledby=\"{{id}}-label\"\n local-class=\"content\"\n hidden={{not state.selected}}\n >\n {{#if (has-block \"content\")}}\n {{yield state to=\"content\"}}\n {{else}}\n {{yield state}}\n {{/if}}\n </section>\n {{/let}}\n </template>\n}\n\ninterface TabsSignature {\n Element: HTMLDivElement;\n Args: {\n disabled?: boolean;\n selection?: unknown;\n update?: (value: unknown) => void;\n behavior?: TablistBehavior;\n orientation?: Orientation;\n };\n Blocks: {\n default: [\n {\n Tab: WithBoundArgs<\n typeof Tab,\n 'selection' | 'activeItem' | 'tablist' | 'register' | 'unregister'\n >;\n }\n ];\n };\n}\n\nexport class Tabs extends Component<TabsSignature> {\n @tracked tabs: Tab[] = new TrackedArray();\n @tracked internalSelection?: Tab;\n @tracked activeItem?: Item;\n\n get items() {\n return this.tabs.map((t) => t.id);\n }\n\n get selection() {\n return this.args.selection ?? this.internalSelection?.id;\n }\n\n register = (tab: Tab) => {\n // eslint-disable-next-line ember/no-runloop\n next(() => {\n this.tabs.push(tab);\n });\n };\n\n unregister = (tab: Tab) => {\n // eslint-disable-next-line ember/no-runloop\n next(() => {\n this.tabs.splice(this.tabs.indexOf(tab), 1);\n });\n };\n\n select = (id: Item) => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const tab = this.tabs.find((t) => t.id === id)!;\n\n this.internalSelection = tab;\n this.args.update?.(tab.args.value ?? tab.args.label ?? undefined);\n };\n\n activateItem = (id: Item) => {\n this.activeItem = id;\n };\n\n <template>\n <div class=\"tabs\" data-test-tabs>\n {{#let (uniqueId) as |tablistId|}}\n <PortalTarget\n @name={{tablistId}}\n @multiple={{true}}\n role=\"tablist\"\n {{ariaTablist\n items=this.items\n select=this.select\n selection=this.selection\n activateItem=this.activateItem\n disabled=@disabled\n behavior=@behavior\n orientation=@orientation\n }}\n />\n\n {{yield\n (hash\n Tab=(component\n Tab\n register=this.register\n unregister=this.unregister\n tablist=tablistId\n selection=this.selection\n activeItem=this.activeItem\n )\n )\n }}\n {{/let}}\n </div>\n </template>\n}\n"],"names":["TabValue","Symbol","attachValue","modifier","element","value","Tab","Component","constructor","owner","args","register","registerDestructor","unregister","id","label","guidFor","n","prototype","cached","setComponentTemplate","precompileTemplate","strictMode","scope","uniqueId","hash","eq","Portal","not","Tabs","g","tracked","TrackedArray","i","void 0","items","tabs","map","t","selection","internalSelection","tab","next","push","splice","indexOf","select","find","update","undefined","activateItem","activeItem","PortalTarget","ariaTablist"],"mappings":";;;;;;;;;;;;;;;;MAkBaA,QAAA,GAAWC,MAAA,CAAO,UAAA;AAE/B,MAAMC,WAAA,GAAcC,QAAA,CAAS,CAACC,OAAA,EAAS,CAACC,KAAA,CAAM,KAAA;AAC5C,EAAA,IAAIA,KAAA,EAAO;AACT;AACAD,IAAAA,OAAO,CAACJ,SAAS,GAAGK,KAAA;AACtB,EAAA;AACF,CAAA,CAAA;AA2BA,MAAMC,YAAYC,SAAA,CAAU;AAC1BC,EAAAA,WAAAA,CAAYC,KAAY,EAAEC,IAA0B,EAAE;AACpD,IAAA,KAAK,CAACD,KAAA,EAAOC,IAAA,CAAA;AAEbA,IAAAA,IAAA,CAAKC,QAAQ,CAAC,IAAI,CAAA;IAElBC,kBAAA,CAAmB,IAAI,EAAE,MAAA;AACvBF,MAAAA,IAAA,CAAKG,UAAU,CAAC,IAAI,CAAA;AACtB,IAAA,CAAA,CAAA;AACF,EAAA;EAEA,IACIC,EAAAA,GAAK;AACP,IAAA,OAAO,IAAI,CAACJ,IAAI,CAACL,KAAK,IAAI,IAAI,CAACK,IAAI,CAACK,KAAK,IAAIC,QAAQ,IAAI,CAAA;AAC3D,EAAA;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,IAAA,EAAA,CAHCC,MAAA,CAAA,CAAA;AAAA;AAKD,EAAA;IAAAC,oBAAA,CAAAC,kBAAA,CAAA,i5BAAA,EAuCA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,QAAA;QAAAC,IAAA;QAAAC,EAAA;QAAAC,MAAA;QAAAzB,WAAA;AAAA0B,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;AAuBO,MAAMC,aAAatB,SAAA,CAAU;AAAA,EAAA;IAAAuB,CAAA,CAAA,IAAA,CAAAZ,SAAA,EAAA,MAAA,EAAA,CACjCa,OAAA,CAAA,EAAA,YAAA;MAAA,OAAsB,IAAIC,YAAA,EAAA;AAAA,IAAA,CAAA,CAAA;AAAA;AAAA,EAAA,KAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,MAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAJ,CAAA,CAAA,IAAA,CAAAZ,SAAA,EAAA,mBAAA,EAAA,CAC1Ba,OAAA,CAAA,CAAA;AAAA;AAAA,EAAA,kBAAA,IAAAE,CAAA,CAAA,IAAA,EAAA,mBAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAJ,CAAA,CAAA,IAAA,CAAAZ,SAAA,EAAA,YAAA,EAAA,CACAa,OAAA,CAAA,CAAA;AAAA;AAAA,EAAA,WAAA,IAAAE,CAAA,CAAA,IAAA,EAAA,YAAA,CAAA,EAAAC,MAAA;EAED,IAAIC,KAAAA,GAAQ;IACV,OAAO,IAAI,CAACC,IAAI,CAACC,GAAG,CAAEC,CAAA,IAAMA,CAAA,CAAExB,EAAE,CAAA;AAClC,EAAA;EAEA,IAAIyB,SAAAA,GAAY;IACd,OAAO,IAAI,CAAC7B,IAAI,CAAC6B,SAAS,IAAI,IAAI,CAACC,iBAAiB,EAAE1B,EAAA;AACxD,EAAA;EAEAH,QAAA,GAAY8B,GAAK,IAAA;AACf;AACAC,IAAAA,IAAA,CAAK,MAAA;AACH,MAAA,IAAI,CAACN,IAAI,CAACO,IAAI,CAACF,GAAA,CAAA;AACjB,IAAA,CAAA,CAAA;EACF,CAAA;EAEA5B,UAAA,GAAc4B,GAAK,IAAA;AACjB;AACAC,IAAAA,IAAA,CAAK,MAAA;AACH,MAAA,IAAI,CAACN,IAAI,CAACQ,MAAM,CAAC,IAAI,CAACR,IAAI,CAACS,OAAO,CAACJ,GAAA,CAAA,EAAM,CAAA,CAAA;AAC3C,IAAA,CAAA,CAAA;EACF,CAAA;EAEAK,MAAA,GAAUhC,EAAI,IAAA;AACZ;AACA,IAAA,MAAM2B,GAAA,GAAM,IAAI,CAACL,IAAI,CAACW,IAAI,CAAET,CAAA,IAAMA,CAAA,CAAExB,EAAE,KAAKA,EAAA,CAAA;IAE3C,IAAI,CAAC0B,iBAAiB,GAAGC,GAAA;AACzB,IAAA,IAAI,CAAC/B,IAAI,CAACsC,MAAM,GAAGP,GAAA,CAAI/B,IAAI,CAACL,KAAK,IAAIoC,GAAA,CAAI/B,IAAI,CAACK,KAAK,IAAIkC,SAAA,CAAA;EACzD,CAAA;EAEAC,YAAA,GAAgBpC,EAAI,IAAA;IAClB,IAAI,CAACqC,UAAU,GAAGrC,EAAA;EACpB,CAAA;AAEA,EAAA;IAAAM,oBAAA,CAAAC,kBAAA,CAAA,0hBAAA,EAgCA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,QAAA;QAAA4B,YAAA;QAAAC,WAAA;QAAA5B,IAAA;AAAAnB,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
1
+ {"version":3,"file":"tabs-DdGp_ET2.js","sources":["../src/components/controls/tabs.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { cached, tracked } from '@glimmer/tracking';\nimport { registerDestructor } from '@ember/destroyable';\nimport { hash, uniqueId } from '@ember/helper';\nimport { guidFor } from '@ember/object/internals';\nimport { next } from '@ember/runloop';\n\nimport { ariaTablist, type Orientation, type TablistBehavior } from 'ember-aria-voyager';\nimport { modifier } from 'ember-modifier';\nimport Portal from 'ember-stargate/components/portal';\nimport PortalTarget from 'ember-stargate/components/portal-target';\nimport { TrackedArray } from 'tracked-built-ins';\n\nimport { eq, not } from '../../-private/helpers.ts';\n\nimport type Owner from '@ember/owner';\nimport type { WithBoundArgs } from '@glint/template';\n\nexport const TabValue = Symbol('TabValue');\n\nconst attachValue = modifier((element, [value]) => {\n if (value) {\n // @ts-expect-error this is internal API\n element[TabValue] = value;\n }\n});\n\ninterface State {\n active: boolean;\n selected: boolean;\n}\n\ntype Item = string & {};\n\ntype TabSignature = {\n Element: HTMLDivElement;\n Args: {\n tablist: string;\n register: (tab: Tab) => void;\n unregister: (tab: Tab) => void;\n label?: string;\n value?: unknown;\n selection?: unknown;\n activeItem?: Item;\n };\n Blocks: {\n default?: [State];\n label?: [State];\n content?: [State];\n };\n};\n\nclass Tab extends Component<TabSignature> {\n constructor(owner: Owner, args: TabSignature['Args']) {\n super(owner, args);\n\n args.register(this);\n\n registerDestructor(this, () => {\n args.unregister(this);\n });\n }\n\n @cached\n get id() {\n return this.args.value ?? this.args.label ?? guidFor(this);\n }\n\n <template>\n {{#let\n (uniqueId) (hash active=(eq this.id @activeItem) selected=(eq this.id @selection))\n as |id state|\n }}\n <Portal @target={{@tablist}}>\n {{! template-lint-disable require-context-role }}\n <button\n type=\"button\"\n role=\"tab\"\n aria-controls={{id}}\n aria-selected={{if state.selected \"true\"}}\n id=\"{{id}}-label\"\n {{attachValue @value}}\n >\n <span>\n {{#if (has-block \"label\")}}\n {{yield state to=\"label\"}}\n {{else}}\n {{@label}}\n {{/if}}\n </span>\n </button>\n </Portal>\n\n <section\n id={{id}}\n role=\"tabpanel\"\n aria-labelledby=\"{{id}}-label\"\n local-class=\"content\"\n hidden={{not state.selected}}\n >\n {{#if (has-block \"content\")}}\n {{yield state to=\"content\"}}\n {{else}}\n {{yield state}}\n {{/if}}\n </section>\n {{/let}}\n </template>\n}\n\ninterface TabsSignature {\n Element: HTMLDivElement;\n Args: {\n disabled?: boolean;\n selection?: unknown;\n update?: (value: unknown) => void;\n behavior?: TablistBehavior;\n orientation?: Orientation;\n };\n Blocks: {\n default: [\n {\n Tab: WithBoundArgs<\n typeof Tab,\n 'selection' | 'activeItem' | 'tablist' | 'register' | 'unregister'\n >;\n }\n ];\n };\n}\n\nexport class Tabs extends Component<TabsSignature> {\n @tracked tabs: Tab[] = new TrackedArray();\n @tracked internalSelection?: Tab;\n @tracked activeItem?: Item;\n\n get items() {\n return this.tabs.map((t) => t.id);\n }\n\n get selection() {\n return this.args.selection ?? this.internalSelection?.id;\n }\n\n register = (tab: Tab) => {\n // eslint-disable-next-line ember/no-runloop\n next(() => {\n this.tabs.push(tab);\n });\n };\n\n unregister = (tab: Tab) => {\n // eslint-disable-next-line ember/no-runloop\n next(() => {\n this.tabs.splice(this.tabs.indexOf(tab), 1);\n });\n };\n\n select = (id: Item) => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const tab = this.tabs.find((t) => t.id === id)!;\n\n this.internalSelection = tab;\n this.args.update?.(tab.args.value ?? tab.args.label ?? undefined);\n };\n\n activateItem = (id: Item) => {\n this.activeItem = id;\n };\n\n <template>\n <div class=\"tabs\" data-test-tabs>\n {{#let (uniqueId) as |tablistId|}}\n <PortalTarget\n @name={{tablistId}}\n @multiple={{true}}\n role=\"tablist\"\n {{ariaTablist\n items=this.items\n select=this.select\n selection=this.selection\n activateItem=this.activateItem\n disabled=@disabled\n behavior=@behavior\n orientation=@orientation\n }}\n />\n\n {{yield\n (hash\n Tab=(component\n Tab\n register=this.register\n unregister=this.unregister\n tablist=tablistId\n selection=this.selection\n activeItem=this.activeItem\n )\n )\n }}\n {{/let}}\n </div>\n </template>\n}\n"],"names":["TabValue","Symbol","attachValue","modifier","element","value","Tab","Component","constructor","owner","args","register","registerDestructor","unregister","id","label","guidFor","n","prototype","cached","setComponentTemplate","precompileTemplate","strictMode","scope","uniqueId","hash","eq","Portal","not","Tabs","g","tracked","TrackedArray","i","void 0","items","tabs","map","t","selection","internalSelection","tab","next","push","splice","indexOf","select","find","update","undefined","activateItem","activeItem","PortalTarget","ariaTablist"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { PageObject, selector, globalSelector } from 'fractal-page-object';
2
2
  import { click, select, triggerEvent } from '@ember/test-helpers';
3
3
  import { selectListbox, selectTab } from 'ember-aria-voyager/test-support';
4
- import { a as TabValue } from '../tabs-e_cUi6pL.js';
4
+ import { a as TabValue } from '../tabs-DdGp_ET2.js';
5
5
 
6
6
  class AlertPageObject extends PageObject {
7
7
  static SELECTOR = '[data-test-feedback]';
@@ -9,10 +9,10 @@ class AlertPageObject extends PageObject {
9
9
  super(selector ?? AlertPageObject.SELECTOR, parent, index);
10
10
  }
11
11
  get indicator() {
12
- return this.element?.getAttribute('data-indicator');
12
+ return this.element?.dataset.indicator;
13
13
  }
14
14
  get importance() {
15
- return this.element?.getAttribute('data-importance');
15
+ return this.element?.dataset.importance;
16
16
  }
17
17
  $icon = selector('[part="icon"]');
18
18
  $title = selector('[part="title"]');
@@ -35,13 +35,13 @@ class IconButtonPageObject extends PageObject {
35
35
  super(selector ?? IconButtonPageObject.SELECTOR, parent, index);
36
36
  }
37
37
  get intent() {
38
- return this.element?.getAttribute('data-intent');
38
+ return this.element?.dataset.intent;
39
39
  }
40
40
  get importance() {
41
- return this.element?.getAttribute('data-importance');
41
+ return this.element?.dataset.importance;
42
42
  }
43
43
  get spacing() {
44
- return this.element?.getAttribute('data-spacing');
44
+ return this.element?.dataset.spacing;
45
45
  }
46
46
  async push() {
47
47
  if (this.element) {
@@ -158,13 +158,13 @@ class ButtonPageObject extends PageObject {
158
158
  super(selector ?? ButtonPageObject.SELECTOR, parent, index);
159
159
  }
160
160
  get intent() {
161
- return this.element?.getAttribute('data-intent');
161
+ return this.element?.dataset.intent;
162
162
  }
163
163
  get importance() {
164
- return this.element?.getAttribute('data-importance');
164
+ return this.element?.dataset.importance;
165
165
  }
166
166
  get spacing() {
167
- return this.element?.getAttribute('data-spacing');
167
+ return this.element?.dataset.spacing;
168
168
  }
169
169
  $before = selector('[data-test-button="before"]');
170
170
  $label = selector('[data-test-button="label"]');
@@ -197,7 +197,7 @@ class InputPageObject extends PageObject {
197
197
  return this.element;
198
198
  }
199
199
  get spacing() {
200
- return this.element?.getAttribute('data-spacing');
200
+ return this.element?.dataset.spacing;
201
201
  }
202
202
  }
203
203
  class RangeInputPageObject extends InputPageObject {
@@ -218,7 +218,7 @@ class SelectPageObject extends PageObject {
218
218
  super(selector ?? SelectPageObject.SELECTOR, parent, index);
219
219
  }
220
220
  get spacing() {
221
- return this.element?.getAttribute('data-spacing');
221
+ return this.element?.dataset.spacing;
222
222
  }
223
223
  get control() {
224
224
  return this.element;
@@ -258,6 +258,16 @@ class DataTablePageObject extends PageObject {
258
258
  });
259
259
  }
260
260
 
261
+ class Error extends PageObject {
262
+ static SELECTOR = '[data-test-error]';
263
+ get type() {
264
+ return this.element?.dataset.testErrorType;
265
+ }
266
+ get value() {
267
+ return this.element?.dataset.testErrorValue;
268
+ }
269
+ }
270
+
261
271
  class InputBuilderPageObject extends PageObject {
262
272
  static SELECTOR = '[data-test-input-builder]';
263
273
  constructor(selector, parent, index) {
@@ -313,17 +323,9 @@ class ChoicesPageObject extends PageObject {
313
323
  }
314
324
  }
315
325
 
316
- class FieldError extends PageObject {
317
- get type() {
318
- return this.element?.getAttribute('data-test-error-type');
319
- }
320
- get value() {
321
- return this.element?.getAttribute('data-test-error-value');
322
- }
323
- }
324
326
  class FieldRule extends PageObject {
325
327
  get invalid() {
326
- return Boolean(this.element?.getAttribute('data-test-rule-invalid'));
328
+ return Boolean(this.element?.dataset.testRuleInvalid);
327
329
  }
328
330
  }
329
331
  class FieldPageObject extends PageObject {
@@ -346,7 +348,7 @@ class FieldPageObject extends PageObject {
346
348
  $checkbox = selector(CheckboxPageObject.SELECTOR, CheckboxPageObject);
347
349
  $list = selector(ListPageObject.SELECTOR, ListPageObject);
348
350
  $choices = selector(ChoicesPageObject.SELECTOR, ChoicesPageObject);
349
- $errors = selector('[data-test-error]', FieldError);
351
+ $errors = selector(Error.SELECTOR, Error);
350
352
  $rules = selector('[data-test-rule]', FieldRule);
351
353
  get $control() {
352
354
  if (this.$inputBuilder.element) {
@@ -373,7 +375,7 @@ class FieldPageObject extends PageObject {
373
375
  return this.$input; // @TODO bad fallback for now
374
376
  }
375
377
  get name() {
376
- return this.element?.getAttribute('data-test-field');
378
+ return this.element?.dataset.testField;
377
379
  }
378
380
  }
379
381
 
@@ -385,6 +387,7 @@ class FormPageObject extends PageObject {
385
387
  $submit = selector('button[type="submit"]', ButtonPageObject);
386
388
  $reset = selector('button[type="reset"]', ButtonPageObject);
387
389
  $fields = selector(FieldPageObject.SELECTOR, FieldPageObject);
390
+ $errors = selector(Error.SELECTOR, Error);
388
391
  field(name) {
389
392
  return this.$fields.find(field => field.name === name);
390
393
  }
@@ -433,13 +436,13 @@ class PillButtonPageObject extends PageObject {
433
436
  super(selector ?? PillButtonPageObject.SELECTOR, parent, index);
434
437
  }
435
438
  get intent() {
436
- return this.element?.getAttribute('data-intent');
439
+ return this.element?.dataset.intent;
437
440
  }
438
441
  get importance() {
439
- return this.element?.getAttribute('data-importance');
442
+ return this.element?.dataset.importance;
440
443
  }
441
444
  get spacing() {
442
- return this.element?.getAttribute('data-spacing');
445
+ return this.element?.dataset.spacing;
443
446
  }
444
447
  $before = selector('[data-test-button="before"]');
445
448
  $label = selector('[data-test-button="label"]');
@@ -467,6 +470,14 @@ class SectionPageObject extends PageObject {
467
470
  $title = selector('[data-test-section="title"]');
468
471
  }
469
472
 
473
+ class TabNavPageObject extends PageObject {
474
+ static SELECTOR = '[data-test-tab-nav]';
475
+ constructor(selector, parent, index) {
476
+ super(selector ?? TabNavPageObject.SELECTOR, parent, index);
477
+ }
478
+ $items = selector('[part="item"]', NavLinkPageObject);
479
+ }
480
+
470
481
  class TabsPageObject extends PageObject {
471
482
  static SELECTOR = '[data-test-tabs]';
472
483
  constructor(selector, parent, index) {
@@ -488,5 +499,5 @@ class TabsPageObject extends PageObject {
488
499
  }
489
500
  }
490
501
 
491
- export { AlertPageObject, AppHeaderPageObject, AvatarPageObject, ButtonPageObject, CheckboxPageObject, CurrencyInputPageObject, DataTablePageObject, DateInputPageObject, EmailInputPageObject, FormPageObject, IconButtonPageObject, IconPageObject, ListPageObject, MenuPageObject, NavigationListPageObject, NumberInputPageObject, PagePageObject, PaginationPageObject, PasswordInputPageObject, PhoneInputPageObject, PillButtonPageObject, PopoverPageObject, RadioPageObject, RangeInputPageObject, SectionPageObject, SectionedPagePageObject, SelectPageObject, TabsPageObject, TextAreaPageObject, TextInputPageObject };
502
+ export { AlertPageObject, AppHeaderPageObject, AvatarPageObject, ButtonPageObject, CheckboxPageObject, CurrencyInputPageObject, DataTablePageObject, DateInputPageObject, EmailInputPageObject, FormPageObject, IconButtonPageObject, IconPageObject, ListPageObject, MenuPageObject, NavigationListPageObject, NumberInputPageObject, PagePageObject, PaginationPageObject, PasswordInputPageObject, PhoneInputPageObject, PillButtonPageObject, PopoverPageObject, RadioPageObject, RangeInputPageObject, SectionPageObject, SectionedPagePageObject, SelectPageObject, TabNavPageObject, TabsPageObject, TextAreaPageObject, TextInputPageObject };
492
503
  //# sourceMappingURL=index.js.map