@hokulea/ember 0.7.1 → 0.8.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 (148) hide show
  1. package/declarations/-private/helpers.d.ts.map +1 -1
  2. package/declarations/components/-input.d.ts.map +1 -1
  3. package/declarations/components/app-header.gts.d.ts.map +1 -1
  4. package/declarations/components/form/description.gts.d.ts.map +1 -0
  5. package/declarations/components/form/errors.gts.d.ts +15 -0
  6. package/declarations/components/form/errors.gts.d.ts.map +1 -0
  7. package/declarations/components/form/field.gts.d.ts +111 -0
  8. package/declarations/components/form/field.gts.d.ts.map +1 -0
  9. package/declarations/components/form/fields/checkbox.gts.d.ts +16 -0
  10. package/declarations/components/form/fields/checkbox.gts.d.ts.map +1 -0
  11. package/declarations/components/form/fields/currency.gts.d.ts +16 -0
  12. package/declarations/components/form/fields/currency.gts.d.ts.map +1 -0
  13. package/declarations/components/form/fields/date.gts.d.ts +16 -0
  14. package/declarations/components/form/fields/date.gts.d.ts.map +1 -0
  15. package/declarations/components/form/fields/email.gts.d.ts +16 -0
  16. package/declarations/components/form/fields/email.gts.d.ts.map +1 -0
  17. package/declarations/components/form/fields/list.gts.d.ts +28 -0
  18. package/declarations/components/form/fields/list.gts.d.ts.map +1 -0
  19. package/declarations/components/form/fields/multiple-choice.gts.d.ts +60 -0
  20. package/declarations/components/form/fields/multiple-choice.gts.d.ts.map +1 -0
  21. package/declarations/components/form/fields/number.gts.d.ts +16 -0
  22. package/declarations/components/form/fields/number.gts.d.ts.map +1 -0
  23. package/declarations/components/form/fields/password.gts.d.ts +18 -0
  24. package/declarations/components/form/fields/password.gts.d.ts.map +1 -0
  25. package/declarations/components/form/fields/phone.gts.d.ts +18 -0
  26. package/declarations/components/form/fields/phone.gts.d.ts.map +1 -0
  27. package/declarations/components/form/fields/range.gts.d.ts +16 -0
  28. package/declarations/components/form/fields/range.gts.d.ts.map +1 -0
  29. package/declarations/components/form/fields/select.gts.d.ts +17 -0
  30. package/declarations/components/form/fields/select.gts.d.ts.map +1 -0
  31. package/declarations/components/form/fields/singular-choice.gts.d.ts +56 -0
  32. package/declarations/components/form/fields/singular-choice.gts.d.ts.map +1 -0
  33. package/declarations/{-private/form/components → components/form}/fields/stories-utils.d.ts +2 -2
  34. package/declarations/components/form/fields/stories-utils.d.ts.map +1 -0
  35. package/declarations/components/form/fields/text-area.gts.d.ts +16 -0
  36. package/declarations/components/form/fields/text-area.gts.d.ts.map +1 -0
  37. package/declarations/components/form/fields/text.gts.d.ts +18 -0
  38. package/declarations/components/form/fields/text.gts.d.ts.map +1 -0
  39. package/declarations/components/form/form.gts.d.ts +210 -0
  40. package/declarations/components/form/form.gts.d.ts.map +1 -0
  41. package/declarations/components/form/index.d.ts +4 -0
  42. package/declarations/components/form/index.d.ts.map +1 -0
  43. package/declarations/components/form/label.gts.d.ts.map +1 -0
  44. package/declarations/components/form/manage-validation.d.ts +18 -0
  45. package/declarations/components/form/manage-validation.d.ts.map +1 -0
  46. package/declarations/components/form/reset.gts.d.ts.map +1 -0
  47. package/declarations/components/form/rules.gts.d.ts +36 -0
  48. package/declarations/components/form/rules.gts.d.ts.map +1 -0
  49. package/declarations/components/form/submit.gts.d.ts.map +1 -0
  50. package/declarations/components/form.gts.d.ts +1 -318
  51. package/declarations/components/form.gts.d.ts.map +1 -1
  52. package/declarations/components/list.gts.d.ts.map +1 -1
  53. package/declarations/components/menu.gts.d.ts.map +1 -1
  54. package/declarations/components/page.gts.d.ts +1 -1
  55. package/declarations/components/page.gts.d.ts.map +1 -1
  56. package/declarations/components/select.gts.d.ts.map +1 -1
  57. package/declarations/components/tabs.gts.d.ts.map +1 -1
  58. package/declarations/helpers/popover.d.ts.map +1 -1
  59. package/declarations/index.d.ts +2 -3
  60. package/declarations/index.d.ts.map +1 -1
  61. package/declarations/test-support/page-objects/-private/field.d.ts +4 -0
  62. package/declarations/test-support/page-objects/-private/field.d.ts.map +1 -1
  63. package/declarations/test-support/page-objects/app-header.d.ts +41 -41
  64. package/dist/components/app-header.js +5 -1
  65. package/dist/components/app-header.js.map +1 -1
  66. package/dist/components/checkbox.js +1 -1
  67. package/dist/components/checkbox.js.map +1 -1
  68. package/dist/components/currency-input.js +1 -1
  69. package/dist/components/currency-input.js.map +1 -1
  70. package/dist/components/date-input.js +1 -1
  71. package/dist/components/date-input.js.map +1 -1
  72. package/dist/components/email-input.js +1 -1
  73. package/dist/components/email-input.js.map +1 -1
  74. package/dist/components/form.js +1 -835
  75. package/dist/components/form.js.map +1 -1
  76. package/dist/components/number-input.js +1 -1
  77. package/dist/components/number-input.js.map +1 -1
  78. package/dist/components/page.js +1 -1
  79. package/dist/components/page.js.map +1 -1
  80. package/dist/components/password-input.js +1 -1
  81. package/dist/components/password-input.js.map +1 -1
  82. package/dist/components/phone-input.js +1 -1
  83. package/dist/components/phone-input.js.map +1 -1
  84. package/dist/components/radio.js +1 -1
  85. package/dist/components/radio.js.map +1 -1
  86. package/dist/components/range-input.js +3 -3
  87. package/dist/components/range-input.js.map +1 -1
  88. package/dist/components/select.js +1 -1
  89. package/dist/components/select.js.map +1 -1
  90. package/dist/components/text-area.js +1 -1
  91. package/dist/components/text-area.js.map +1 -1
  92. package/dist/components/text-input.js +1 -1
  93. package/dist/components/text-input.js.map +1 -1
  94. package/dist/form-DBuzL4_0.js +518 -0
  95. package/dist/form-DBuzL4_0.js.map +1 -0
  96. package/dist/helpers/popover.js +0 -3
  97. package/dist/helpers/popover.js.map +1 -1
  98. package/dist/index.js +1 -1
  99. package/dist/test-support/index.js +6 -0
  100. package/dist/test-support/index.js.map +1 -1
  101. package/package.json +40 -33
  102. package/declarations/-private/form/components/description.gts.d.ts.map +0 -1
  103. package/declarations/-private/form/components/errors.gts.d.ts +0 -15
  104. package/declarations/-private/form/components/errors.gts.d.ts.map +0 -1
  105. package/declarations/-private/form/components/field.gts.d.ts +0 -147
  106. package/declarations/-private/form/components/field.gts.d.ts.map +0 -1
  107. package/declarations/-private/form/components/fields/checkbox.gts.d.ts +0 -15
  108. package/declarations/-private/form/components/fields/checkbox.gts.d.ts.map +0 -1
  109. package/declarations/-private/form/components/fields/currency.gts.d.ts +0 -15
  110. package/declarations/-private/form/components/fields/currency.gts.d.ts.map +0 -1
  111. package/declarations/-private/form/components/fields/date.gts.d.ts +0 -15
  112. package/declarations/-private/form/components/fields/date.gts.d.ts.map +0 -1
  113. package/declarations/-private/form/components/fields/email.gts.d.ts +0 -15
  114. package/declarations/-private/form/components/fields/email.gts.d.ts.map +0 -1
  115. package/declarations/-private/form/components/fields/list.gts.d.ts +0 -27
  116. package/declarations/-private/form/components/fields/list.gts.d.ts.map +0 -1
  117. package/declarations/-private/form/components/fields/multiple-choice.gts.d.ts +0 -58
  118. package/declarations/-private/form/components/fields/multiple-choice.gts.d.ts.map +0 -1
  119. package/declarations/-private/form/components/fields/number.gts.d.ts +0 -15
  120. package/declarations/-private/form/components/fields/number.gts.d.ts.map +0 -1
  121. package/declarations/-private/form/components/fields/password.gts.d.ts +0 -15
  122. package/declarations/-private/form/components/fields/password.gts.d.ts.map +0 -1
  123. package/declarations/-private/form/components/fields/phone.gts.d.ts +0 -15
  124. package/declarations/-private/form/components/fields/phone.gts.d.ts.map +0 -1
  125. package/declarations/-private/form/components/fields/range.gts.d.ts +0 -15
  126. package/declarations/-private/form/components/fields/range.gts.d.ts.map +0 -1
  127. package/declarations/-private/form/components/fields/select.gts.d.ts +0 -16
  128. package/declarations/-private/form/components/fields/select.gts.d.ts.map +0 -1
  129. package/declarations/-private/form/components/fields/singular-choice.gts.d.ts +0 -56
  130. package/declarations/-private/form/components/fields/singular-choice.gts.d.ts.map +0 -1
  131. package/declarations/-private/form/components/fields/stories-utils.d.ts.map +0 -1
  132. package/declarations/-private/form/components/fields/text-area.gts.d.ts +0 -15
  133. package/declarations/-private/form/components/fields/text-area.gts.d.ts.map +0 -1
  134. package/declarations/-private/form/components/fields/text.gts.d.ts +0 -15
  135. package/declarations/-private/form/components/fields/text.gts.d.ts.map +0 -1
  136. package/declarations/-private/form/components/label.gts.d.ts.map +0 -1
  137. package/declarations/-private/form/components/reset.gts.d.ts.map +0 -1
  138. package/declarations/-private/form/components/submit.gts.d.ts.map +0 -1
  139. package/declarations/-private/form/index.d.ts +0 -49
  140. package/declarations/-private/form/index.d.ts.map +0 -1
  141. package/declarations/-private/form/modifiers/capture-events.d.ts +0 -21
  142. package/declarations/-private/form/modifiers/capture-events.d.ts.map +0 -1
  143. package/declarations/-private/form/modifiers/manage-validation.d.ts +0 -24
  144. package/declarations/-private/form/modifiers/manage-validation.d.ts.map +0 -1
  145. /package/declarations/{-private/form/components → components/form}/description.gts.d.ts +0 -0
  146. /package/declarations/{-private/form/components → components/form}/label.gts.d.ts +0 -0
  147. /package/declarations/{-private/form/components → components/form}/reset.gts.d.ts +0 -0
  148. /package/declarations/{-private/form/components → components/form}/submit.gts.d.ts +0 -0
@@ -49,6 +49,8 @@ const PopoverNavItem = setComponentTemplate(precompileTemplate("\n {{#if (has-b
49
49
  PopoverNavItem
50
50
  })
51
51
  }), templateOnly());
52
+ const CloseIcon = '<svg xmlns="http://www.w3.org/2000/svg" width="256" height="256" viewBox="0 0 256 256"><path fill="currentColor" d="M205.66 194.34a8 8 0 0 1-11.32 11.32L128 139.31l-66.34 66.35a8 8 0 0 1-11.32-11.32L116.69 128L50.34 61.66a8 8 0 0 1 11.32-11.32L128 116.69l66.34-66.35a8 8 0 0 1 11.32 11.32L139.31 128Z"/></svg>';
53
+ const ListIcon = '<svg xmlns="http://www.w3.org/2000/svg" width="256" height="256" viewBox="0 0 256 256"><path fill="currentColor" d="M224 128a8 8 0 0 1-8 8H40a8 8 0 0 1 0-16h176a8 8 0 0 1 8 8M40 72h176a8 8 0 0 0 0-16H40a8 8 0 0 0 0 16m176 112H40a8 8 0 0 0 0 16h176a8 8 0 0 0 0-16"/></svg>';
52
54
  class AppHeader extends Component {
53
55
  static {
54
56
  g(this.prototype, "topNavShown", [tracked], function () {
@@ -106,7 +108,7 @@ class AppHeader extends Component {
106
108
  };
107
109
  });
108
110
  static {
109
- setComponentTemplate(precompileTemplate("\n {{#let (uniqueId) as |brandId|}}\n <header class={{styles.appHeader}} data-test-app-header ...attributes>\n <div class={{styles.appHeaderContent}} data-sensing={{this.sensing}} {{this.flipflop}}>\n {{#if (has-block \"brand\")}}\n <CommandElement @command={{@home}} part=\"brand\" id={{brandId}}>\n {{yield to=\"brand\"}}\n </CommandElement>\n {{/if}}\n\n {{#if (or this.topNavShown this.sensing)}}\n <nav data-position={{if @position @position}} aria-labelledby={{brandId}}>\n {{yield (hash Item=NavItem) to=\"nav\"}}\n </nav>\n\n {{#if (has-block \"aux\")}}\n <span part=\"aux\">\n {{yield (hash Item=NavItem) to=\"aux\"}}\n </span>\n {{/if}}\n {{/if}}\n\n {{#if (not this.topNavShown)}}\n <span part=\"menu\">\n {{#let (popover) as |p|}}\n <IconButton @importance=\"plain\" @icon={{if p.opened \"x\" \"list\"}} {{p.trigger}} data-test-toggle @label=\"toggle\" />\n\n <div popover {{p.target}} {{this.closeWhenLink}}>\n <div data-menu-header>\n {{#if (has-block \"brand\")}}\n <span part=\"brand\">\n {{yield to=\"brand\"}}\n </span>\n {{/if}}\n </div>\n\n <div data-menu-content>\n {{!-- template-lint-disable no-duplicate-landmark-elements --}}\n <nav aria-labelledby={{brandId}}>\n {{yield (hash Item=PopoverNavItem) to=\"nav\"}}\n </nav>\n {{!-- template-lint-enable no-duplicate-landmark-elements --}}\n\n {{#if (has-block \"aux\")}}\n <span part=\"aux\">\n {{yield (hash Item=PopoverNavItem) to=\"aux\"}}\n </span>\n {{/if}}\n </div>\n </div>\n {{/let}}\n </span>\n {{/if}}\n </div>\n </header>\n {{/let}}\n ", {
111
+ setComponentTemplate(precompileTemplate("\n {{#let (uniqueId) as |brandId|}}\n <header class={{styles.appHeader}} data-test-app-header ...attributes>\n <div class={{styles.appHeaderContent}} data-sensing={{this.sensing}} {{this.flipflop}}>\n {{#if (has-block \"brand\")}}\n <CommandElement @command={{@home}} part=\"brand\" id={{brandId}}>\n {{yield to=\"brand\"}}\n </CommandElement>\n {{/if}}\n\n {{#if (or this.topNavShown this.sensing)}}\n <nav data-position={{if @position @position}} aria-labelledby={{brandId}}>\n {{yield (hash Item=NavItem) to=\"nav\"}}\n </nav>\n\n {{#if (has-block \"aux\")}}\n <span part=\"aux\">\n {{yield (hash Item=NavItem) to=\"aux\"}}\n </span>\n {{/if}}\n {{/if}}\n\n {{#if (not this.topNavShown)}}\n <span part=\"menu\">\n {{#let (popover) as |p|}}\n <IconButton @importance=\"plain\" @icon={{if p.opened CloseIcon ListIcon}} {{p.trigger}} data-test-toggle @label=\"toggle\" />\n\n <div popover {{p.target}} {{this.closeWhenLink}}>\n <div data-menu-header>\n {{#if (has-block \"brand\")}}\n <span part=\"brand\">\n {{yield to=\"brand\"}}\n </span>\n {{/if}}\n </div>\n\n <div data-menu-content>\n {{!-- template-lint-disable no-duplicate-landmark-elements --}}\n <nav aria-labelledby={{brandId}}>\n {{yield (hash Item=PopoverNavItem) to=\"nav\"}}\n </nav>\n {{!-- template-lint-enable no-duplicate-landmark-elements --}}\n\n {{#if (has-block \"aux\")}}\n <span part=\"aux\">\n {{yield (hash Item=PopoverNavItem) to=\"aux\"}}\n </span>\n {{/if}}\n </div>\n </div>\n {{/let}}\n </span>\n {{/if}}\n </div>\n </header>\n {{/let}}\n ", {
110
112
  strictMode: true,
111
113
  scope: () => ({
112
114
  uniqueId,
@@ -118,6 +120,8 @@ class AppHeader extends Component {
118
120
  not,
119
121
  popover,
120
122
  IconButton,
123
+ CloseIcon,
124
+ ListIcon,
121
125
  PopoverNavItem
122
126
  })
123
127
  }), this);
@@ -1 +1 @@
1
- {"version":3,"file":"app-header.js","sources":["../../src/components/app-header.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { hash, uniqueId } from '@ember/helper';\n\nimport { type CommandAction, CommandElement } from 'ember-command';\nimport { keepLatestTask, timeout } from 'ember-concurrency';\nimport { Link } from 'ember-link';\nimport { modifier } from 'ember-modifier';\n\nimport styles from '@hokulea/core/navigation.module.css';\n\nimport { and, not, or } from '../-private/helpers.ts';\nimport popover from '../helpers/popover.ts';\nimport IconButton from './icon-button.gts';\nimport Menu from './menu.gts';\n\nimport type { MenuItemArgs, MenuItemBlocks, MenuItemSignature } from './-menu';\nimport type { TOC } from '@ember/component/template-only';\n\nconst asLink = (value: unknown): Link => {\n return value as Link;\n};\n\nconst isActive = (commandable: CommandAction) => {\n return commandable instanceof Link && commandable.isActive;\n};\n\ninterface NavItemSignature extends MenuItemSignature {}\n\nconst NavLink: TOC<{\n Args: MenuItemArgs;\n Blocks: MenuItemBlocks;\n}> = <template>\n {{#if @push}}\n <CommandElement @command={{@push}} aria-current=\"{{if (isActive @push) 'page'}}\" part=\"item\">\n <span>{{yield}}</span>\n </CommandElement>\n {{else}}\n <span part=\"item\">{{yield}}</span>\n {{/if}}\n</template>;\n\nconst NavItem: TOC<NavItemSignature> = <template>\n {{#if (has-block)}}\n <NavLink @push={{asLink @push}}>{{yield}}</NavLink>\n {{else if (and (has-block \"menu\") (has-block \"label\"))}}\n {{#let (popover position=\"bottom-start\") as |p|}}\n <button type=\"button\" aria-haspopup=\"menu\" part=\"item\" {{p.trigger}}>\n <span>{{yield to=\"label\"}}</span>\n </button>\n\n <Menu {{p.target}} as |m|>\n {{yield m to=\"menu\"}}\n </Menu>\n {{/let}}\n {{/if}}\n</template>;\n\nconst PopoverNavItem: TOC<NavItemSignature> = <template>\n {{#if (has-block)}}\n <NavLink @push={{asLink @push}}>{{yield}}</NavLink>\n {{else if (and (has-block \"menu\") (has-block \"label\"))}}\n <details>\n <summary part=\"item\">{{yield to=\"label\"}}</summary>\n\n <div>\n {{yield (hash Item=PopoverNavItem) to=\"menu\"}}\n </div>\n </details>\n {{/if}}\n</template>;\n\ninterface AppHeaderSignature {\n Element: HTMLElement;\n Args: {\n /**\n * Position of the navbar\n *\n * @default start\n */\n position?: 'start' | 'center' | 'end';\n\n home?: CommandAction;\n };\n Blocks: {\n brand?: [];\n nav?: [{ Item: typeof NavItem }];\n aux?: [{ Item: typeof NavItem }];\n };\n}\n\nexport default class AppHeader extends Component<AppHeaderSignature> {\n @tracked topNavShown = true;\n @tracked sensing = false;\n\n detectOverflow = keepLatestTask(async (element: HTMLElement) => {\n await timeout(30);\n\n this.sensing = true;\n\n // wait till sensing is flushed to the browser and made elements visible\n await timeout(0);\n\n const relevantChildren = [...element.children].filter(\n (elem) => elem.tagName.toLowerCase() === 'nav' || elem.getAttribute('part') === 'aux'\n );\n\n if (relevantChildren.length === 0) {\n this.sensing = false;\n\n return;\n }\n\n let headerWidth = [...element.children]\n .filter((elem) => elem.getAttribute('part') !== 'menu')\n .map((e) => Math.floor(e.scrollWidth))\n .reduce((sum, elemWidth) => sum + elemWidth, 0);\n\n // + padding\n headerWidth +=\n Number.parseInt(getComputedStyle(element).getPropertyValue('padding-inline'), 10) * 2;\n\n // + gap\n headerWidth +=\n Number.parseInt(getComputedStyle(element).getPropertyValue('gap'), 10) *\n (element.childElementCount - 1);\n\n this.topNavShown = element.clientWidth >= headerWidth;\n this.sensing = false;\n });\n\n flipflop = modifier((element: HTMLElement) => {\n const sensor = () => this.detectOverflow.perform(element);\n\n void sensor();\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n window.addEventListener('resize', sensor);\n\n return () => {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n window.removeEventListener('resize', sensor);\n };\n });\n\n closeWhenLink = modifier((element: HTMLElement) => {\n const checkForClose = (event: Event) => {\n const hitALink = event\n .composedPath()\n .some(\n (target: EventTarget) =>\n (target as HTMLElement | null)?.tagName &&\n ['a', 'button'].includes((target as HTMLElement).tagName.toLowerCase())\n );\n\n if (hitALink) {\n element.hidePopover();\n }\n };\n\n element.addEventListener('click', checkForClose);\n\n return () => {\n element.removeEventListener('click', checkForClose);\n };\n });\n\n <template>\n {{#let (uniqueId) as |brandId|}}\n <header class={{styles.appHeader}} data-test-app-header ...attributes>\n <div class={{styles.appHeaderContent}} data-sensing={{this.sensing}} {{this.flipflop}}>\n {{#if (has-block \"brand\")}}\n <CommandElement @command={{@home}} part=\"brand\" id={{brandId}}>\n {{yield to=\"brand\"}}\n </CommandElement>\n {{/if}}\n\n {{#if (or this.topNavShown this.sensing)}}\n <nav data-position={{if @position @position}} aria-labelledby={{brandId}}>\n {{yield (hash Item=NavItem) to=\"nav\"}}\n </nav>\n\n {{#if (has-block \"aux\")}}\n <span part=\"aux\">\n {{yield (hash Item=NavItem) to=\"aux\"}}\n </span>\n {{/if}}\n {{/if}}\n\n {{#if (not this.topNavShown)}}\n <span part=\"menu\">\n {{#let (popover) as |p|}}\n <IconButton\n @importance=\"plain\"\n @icon={{if p.opened \"x\" \"list\"}}\n {{p.trigger}}\n data-test-toggle\n @label=\"toggle\"\n />\n\n <div popover {{p.target}} {{this.closeWhenLink}}>\n <div data-menu-header>\n {{#if (has-block \"brand\")}}\n <span part=\"brand\">\n {{yield to=\"brand\"}}\n </span>\n {{/if}}\n </div>\n\n <div data-menu-content>\n {{! template-lint-disable no-duplicate-landmark-elements }}\n <nav aria-labelledby={{brandId}}>\n {{yield (hash Item=PopoverNavItem) to=\"nav\"}}\n </nav>\n {{! template-lint-enable no-duplicate-landmark-elements }}\n\n {{#if (has-block \"aux\")}}\n <span part=\"aux\">\n {{yield (hash Item=PopoverNavItem) to=\"aux\"}}\n </span>\n {{/if}}\n </div>\n </div>\n {{/let}}\n </span>\n {{/if}}\n </div>\n </header>\n {{/let}}\n </template>\n}\n"],"names":["asLink","value","isActive","commandable","Link","NavLink","setComponentTemplate","precompileTemplate","strictMode","scope","CommandElement","templateOnly","NavItem","and","popover","Menu","PopoverNavItem","hash","AppHeader","Component","g","prototype","tracked","i","void 0","detectOverflow","_buildTask","context","generator","element","timeout","sensing","relevantChildren","children","filter","elem","tagName","toLowerCase","getAttribute","length","headerWidth","map","e","Math","floor","scrollWidth","reduce","sum","elemWidth","Number","parseInt","getComputedStyle","getPropertyValue","childElementCount","topNavShown","clientWidth","flipflop","modifier","sensor","perform","window","addEventListener","removeEventListener","closeWhenLink","checkForClose","event","hitALink","composedPath","some","target","includes","hidePopover","uniqueId","styles","or","not","IconButton"],"mappings":";;;;;;;;;;;;;;;;;;AAmBA,MAAMA,MAAA,GAAUC,KAAc,IAAG;AAC/B,EAAA,OAAOA,KAAA;AACT,CAAA;AAEA,MAAMC,QAAA,GAAYC,WAAa,IAAA;AAC7B,EAAA,OAAOA,WAAA,YAAuBC,IAAA,IAAQD,WAAA,CAAYD,QAAQ;AAC5D,CAAA;AAIA,MAAMG,OAGD,GAAAC,oBAAA,CAAAC,kBAAA,CAAA,oPAAA,EAQL;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAC,cAAA;AAAAR,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAS,YAAA,EAAA,CAAA;AAEV,MAAMC,OAAa,GAAAN,oBAAA,CAAoBC,kBAAA,CAAA,2cAAA,EAcvC;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAJ,OAAA;IAAAL,MAAA;IAAAa,GAAA;IAAAC,OAAA;AAAAC,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAJ,YAAA,EAAA,CAAA;AAEV,MAAMK,cAAoB,GAAAV,oBAAA,CAAoBC,kBAAA,CAAA,oVAAA,EAY9C;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAJ,OAAA;IAAAL,MAAA;IAAAa,GAAA;IAAAI,IAAA;AAAAD,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAL,YAAA,EAAA,CAAA;AAqBK,MAAMO,kBAAkBC,SAAA,CAAU;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,aAAA,EAAA,CAC9CC,OAAA,CAAA,EAAA,YAAA;AAAA,MAAA,OAAsB,IAAA;AAAA,IAAA,CAAA,CAAA;AAAA;AAAA,EAAA,YAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,aAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAJ,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CACtBC,OAAA,CAAA,EAAA,YAAA;AAAA,MAAA,OAAkB,KAAA;AAAA,IAAA,CAAA,CAAA;AAAA;AAAA,EAAA,QAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAAC,MAAA;AAEnBC,EAAAA,cAAA,GAAAC,SAAA,CAAA,OAAA;IAAAC,OAAA,EAAA,IAAA;IAAAC,SAAA,EAAA,WAAuCC,OAAS,EAAA;MAC9C,MAAMC,OAAA,CAAQ,EAAA,CAAA;MAEd,IAAI,CAACC,OAAO,GAAG,IAAA;AAEf;MACA,MAAMD,OAAA,CAAQ,CAAA,CAAA;AAEd,MAAA,MAAME,gBAAA,GAAmB,CAAI,GAAAH,OAAA,CAAQI,QAAQ,CAAC,CAACC,MAAM,CAClDC,IAAA,IAASA,IAAA,CAAKC,OAAO,CAACC,WAAW,EAAA,KAAO,KAAA,IAASF,IAAA,CAAKG,YAAY,CAAC,MAAA,CAAA,KAAY,KAAA,CAAA;AAGlF,MAAA,IAAIN,gBAAA,CAAiBO,MAAM,KAAK,CAAA,EAAG;QACjC,IAAI,CAACR,OAAO,GAAG,KAAA;AAEf,QAAA;AACF,MAAA;MAEA,IAAIS,WAAA,GAAc,CAAI,GAAAX,OAAA,CAAQI,QAAQ,CAAC,CACpCC,MAAM,CAAEC,IAAA,IAASA,IAAA,CAAKG,YAAY,CAAC,MAAA,CAAA,KAAY,MAAA,CAAA,CAC/CG,GAAG,CAAEC,KAAMC,IAAA,CAAKC,KAAK,CAACF,CAAA,CAAEG,WAAW,CAAA,CAAA,CACnCC,MAAM,CAAC,CAACC,GAAA,EAAKC,SAAA,KAAcD,GAAA,GAAMC,SAAA,EAAW,CAAA,CAAA;AAE/C;AACAR,MAAAA,WAAA,IACES,MAAA,CAAOC,QAAQ,CAACC,gBAAA,CAAiBtB,SAASuB,gBAAgB,CAAC,mBAAmB,EAAA,CAAA,GAAM,CAAA;AAEtF;MACAZ,WAAA,IACES,MAAA,CAAOC,QAAQ,CAACC,gBAAA,CAAiBtB,OAAA,CAAA,CAASuB,gBAAgB,CAAC,KAAA,CAAA,EAAQ,EAAA,CAAA,IAClEvB,OAAA,CAAQwB,iBAAiB,GAAG,CAAC,CAAA;AAEhC,MAAA,IAAI,CAACC,WAAW,GAAGzB,OAAA,CAAQ0B,WAAW,IAAIf,WAAA;MAC1C,IAAI,CAACT,OAAO,GAAG,KAAA;AACjB,IAAA;AAAA,GAAA,CAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,YAAA,CAAA;AAEAyB,EAAAA,QAAA,GAAWC,QAAA,CAAU5B,OAAS,IAAA;IAC5B,MAAM6B,SAASA,MAAM,IAAI,CAACjC,cAAc,CAACkC,OAAO,CAAC9B,OAAA,CAAA;IAEjD,KAAK6B,MAAA,EAAA;AACL;AACAE,IAAAA,MAAA,CAAOC,gBAAgB,CAAC,QAAA,EAAUH,MAAA,CAAA;AAElC,IAAA,OAAO,MAAA;AACL;AACAE,MAAAA,MAAA,CAAOE,mBAAmB,CAAC,QAAA,EAAUJ,MAAA,CAAA;IACvC,CAAA;AACF,EAAA,CAAA,CAAA;AAEAK,EAAAA,aAAA,GAAgBN,QAAA,CAAU5B,OAAS,IAAA;IACjC,MAAMmC,aAAA,GAAiBC,KAAO,IAAA;AAC5B,MAAA,MAAMC,QAAA,GAAWD,KAAA,CACdE,YAAY,EAAA,CACZC,IAAI,CACFC,MAAQ,IACNA,MAAA,EAA+BjC,OAAA,IAChC,CAAC,GAAA,EAAK,QAAA,CAAS,CAACkC,QAAQ,CAAED,MAAA,CAAuBjC,OAAO,CAACC,WAAW,EAAA,CAAA,CAAA;AAG1E,MAAA,IAAI6B,QAAA,EAAU;QACZrC,OAAA,CAAQ0C,WAAW,EAAA;AACrB,MAAA;IACF,CAAA;AAEA1C,IAAAA,OAAA,CAAQgC,gBAAgB,CAAC,OAAA,EAASG,aAAA,CAAA;AAElC,IAAA,OAAO,MAAA;AACLnC,MAAAA,OAAA,CAAQiC,mBAAmB,CAAC,OAAA,EAASE,aAAA,CAAA;IACvC,CAAA;AACF,EAAA,CAAA,CAAA;AAEA,EAAA;IAAA1D,oBAAA,CAAAC,kBAAA,CAAA,0pEAAA,EA8DA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAA+D,QAAA;QAAAC,MAAA;QAAA/D,cAAA;QAAAgE,EAAA;QAAAzD,IAAA;QAAAL,OAAA;QAAA+D,GAAA;QAAA7D,OAAA;QAAA8D,UAAA;AAAA5D,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
1
+ {"version":3,"file":"app-header.js","sources":["../../src/components/app-header.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { hash, uniqueId } from '@ember/helper';\n\nimport { type CommandAction, CommandElement } from 'ember-command';\nimport { keepLatestTask, timeout } from 'ember-concurrency';\nimport { Link } from 'ember-link';\nimport { modifier } from 'ember-modifier';\n\nimport styles from '@hokulea/core/navigation.module.css';\n\nimport { and, not, or } from '../-private/helpers.ts';\nimport popover from '../helpers/popover.ts';\nimport IconButton from './icon-button.gts';\nimport Menu from './menu.gts';\n\nimport type { MenuItemArgs, MenuItemBlocks, MenuItemSignature } from './-menu';\nimport type { TOC } from '@ember/component/template-only';\n\nconst asLink = (value: unknown): Link => {\n return value as Link;\n};\n\nconst isActive = (commandable: CommandAction) => {\n return commandable instanceof Link && commandable.isActive;\n};\n\ninterface NavItemSignature extends MenuItemSignature {}\n\nconst NavLink: TOC<{\n Args: MenuItemArgs;\n Blocks: MenuItemBlocks;\n}> = <template>\n {{#if @push}}\n <CommandElement @command={{@push}} aria-current=\"{{if (isActive @push) 'page'}}\" part=\"item\">\n <span>{{yield}}</span>\n </CommandElement>\n {{else}}\n <span part=\"item\">{{yield}}</span>\n {{/if}}\n</template>;\n\nconst NavItem: TOC<NavItemSignature> = <template>\n {{#if (has-block)}}\n <NavLink @push={{asLink @push}}>{{yield}}</NavLink>\n {{else if (and (has-block \"menu\") (has-block \"label\"))}}\n {{#let (popover position=\"bottom-start\") as |p|}}\n <button type=\"button\" aria-haspopup=\"menu\" part=\"item\" {{p.trigger}}>\n <span>{{yield to=\"label\"}}</span>\n </button>\n\n <Menu {{p.target}} as |m|>\n {{yield m to=\"menu\"}}\n </Menu>\n {{/let}}\n {{/if}}\n</template>;\n\nconst PopoverNavItem: TOC<NavItemSignature> = <template>\n {{#if (has-block)}}\n <NavLink @push={{asLink @push}}>{{yield}}</NavLink>\n {{else if (and (has-block \"menu\") (has-block \"label\"))}}\n <details>\n <summary part=\"item\">{{yield to=\"label\"}}</summary>\n\n <div>\n {{yield (hash Item=PopoverNavItem) to=\"menu\"}}\n </div>\n </details>\n {{/if}}\n</template>;\n\nconst CloseIcon =\n '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"256\" height=\"256\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"M205.66 194.34a8 8 0 0 1-11.32 11.32L128 139.31l-66.34 66.35a8 8 0 0 1-11.32-11.32L116.69 128L50.34 61.66a8 8 0 0 1 11.32-11.32L128 116.69l66.34-66.35a8 8 0 0 1 11.32 11.32L139.31 128Z\"/></svg>';\nconst ListIcon =\n '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"256\" height=\"256\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"M224 128a8 8 0 0 1-8 8H40a8 8 0 0 1 0-16h176a8 8 0 0 1 8 8M40 72h176a8 8 0 0 0 0-16H40a8 8 0 0 0 0 16m176 112H40a8 8 0 0 0 0 16h176a8 8 0 0 0 0-16\"/></svg>';\n\ninterface AppHeaderSignature {\n Element: HTMLElement;\n Args: {\n /**\n * Position of the navbar\n *\n * @default start\n */\n position?: 'start' | 'center' | 'end';\n\n home?: CommandAction;\n };\n Blocks: {\n brand?: [];\n nav?: [{ Item: typeof NavItem }];\n aux?: [{ Item: typeof NavItem }];\n };\n}\n\nexport default class AppHeader extends Component<AppHeaderSignature> {\n @tracked topNavShown = true;\n @tracked sensing = false;\n\n detectOverflow = keepLatestTask(async (element: HTMLElement) => {\n await timeout(30);\n\n this.sensing = true;\n\n // wait till sensing is flushed to the browser and made elements visible\n await timeout(0);\n\n const relevantChildren = [...element.children].filter(\n (elem) => elem.tagName.toLowerCase() === 'nav' || elem.getAttribute('part') === 'aux'\n );\n\n if (relevantChildren.length === 0) {\n this.sensing = false;\n\n return;\n }\n\n let headerWidth = [...element.children]\n .filter((elem) => elem.getAttribute('part') !== 'menu')\n .map((e) => Math.floor(e.scrollWidth))\n .reduce((sum, elemWidth) => sum + elemWidth, 0);\n\n // + padding\n headerWidth +=\n Number.parseInt(getComputedStyle(element).getPropertyValue('padding-inline'), 10) * 2;\n\n // + gap\n headerWidth +=\n Number.parseInt(getComputedStyle(element).getPropertyValue('gap'), 10) *\n (element.childElementCount - 1);\n\n this.topNavShown = element.clientWidth >= headerWidth;\n this.sensing = false;\n });\n\n flipflop = modifier((element: HTMLElement) => {\n const sensor = () => this.detectOverflow.perform(element);\n\n void sensor();\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n window.addEventListener('resize', sensor);\n\n return () => {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n window.removeEventListener('resize', sensor);\n };\n });\n\n closeWhenLink = modifier((element: HTMLElement) => {\n const checkForClose = (event: Event) => {\n const hitALink = event\n .composedPath()\n .some(\n (target: EventTarget) =>\n (target as HTMLElement | null)?.tagName &&\n ['a', 'button'].includes((target as HTMLElement).tagName.toLowerCase())\n );\n\n if (hitALink) {\n element.hidePopover();\n }\n };\n\n element.addEventListener('click', checkForClose);\n\n return () => {\n element.removeEventListener('click', checkForClose);\n };\n });\n\n <template>\n {{#let (uniqueId) as |brandId|}}\n <header class={{styles.appHeader}} data-test-app-header ...attributes>\n <div class={{styles.appHeaderContent}} data-sensing={{this.sensing}} {{this.flipflop}}>\n {{#if (has-block \"brand\")}}\n <CommandElement @command={{@home}} part=\"brand\" id={{brandId}}>\n {{yield to=\"brand\"}}\n </CommandElement>\n {{/if}}\n\n {{#if (or this.topNavShown this.sensing)}}\n <nav data-position={{if @position @position}} aria-labelledby={{brandId}}>\n {{yield (hash Item=NavItem) to=\"nav\"}}\n </nav>\n\n {{#if (has-block \"aux\")}}\n <span part=\"aux\">\n {{yield (hash Item=NavItem) to=\"aux\"}}\n </span>\n {{/if}}\n {{/if}}\n\n {{#if (not this.topNavShown)}}\n <span part=\"menu\">\n {{#let (popover) as |p|}}\n <IconButton\n @importance=\"plain\"\n @icon={{if p.opened CloseIcon ListIcon}}\n {{p.trigger}}\n data-test-toggle\n @label=\"toggle\"\n />\n\n <div popover {{p.target}} {{this.closeWhenLink}}>\n <div data-menu-header>\n {{#if (has-block \"brand\")}}\n <span part=\"brand\">\n {{yield to=\"brand\"}}\n </span>\n {{/if}}\n </div>\n\n <div data-menu-content>\n {{! template-lint-disable no-duplicate-landmark-elements }}\n <nav aria-labelledby={{brandId}}>\n {{yield (hash Item=PopoverNavItem) to=\"nav\"}}\n </nav>\n {{! template-lint-enable no-duplicate-landmark-elements }}\n\n {{#if (has-block \"aux\")}}\n <span part=\"aux\">\n {{yield (hash Item=PopoverNavItem) to=\"aux\"}}\n </span>\n {{/if}}\n </div>\n </div>\n {{/let}}\n </span>\n {{/if}}\n </div>\n </header>\n {{/let}}\n </template>\n}\n"],"names":["asLink","value","isActive","commandable","Link","NavLink","setComponentTemplate","precompileTemplate","strictMode","scope","CommandElement","templateOnly","NavItem","and","popover","Menu","PopoverNavItem","hash","CloseIcon","ListIcon","AppHeader","Component","g","prototype","tracked","i","void 0","detectOverflow","_buildTask","context","generator","element","timeout","sensing","relevantChildren","children","filter","elem","tagName","toLowerCase","getAttribute","length","headerWidth","map","e","Math","floor","scrollWidth","reduce","sum","elemWidth","Number","parseInt","getComputedStyle","getPropertyValue","childElementCount","topNavShown","clientWidth","flipflop","modifier","sensor","perform","window","addEventListener","removeEventListener","closeWhenLink","checkForClose","event","hitALink","composedPath","some","target","includes","hidePopover","uniqueId","styles","or","not","IconButton"],"mappings":"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"}
@@ -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 Checkbox = setComponentTemplate(precompileTemplate("\n <input class={{styles.choice}} type=\"checkbox\" checked={{@value}} disabled={{@disabled}} data-test-choice ...attributes {{on \"input\" (pick \"target.checked\" @update)}} />\n", {
8
+ const Checkbox = setComponentTemplate(precompileTemplate("\n <input class={{styles.choice}} type=\"checkbox\" checked={{@value}} disabled={{@disabled}} data-test-choice {{on \"input\" (pick \"target.checked\" @update) capture=true}} ...attributes />\n", {
9
9
  strictMode: true,
10
10
  scope: () => ({
11
11
  styles,
@@ -1 +1 @@
1
- {"version":3,"file":"checkbox.js","sources":["../../src/components/checkbox.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 CheckboxSignature {\n Element: HTMLInputElement;\n Args: InputArgs<boolean>;\n}\n\nconst Checkbox: TOC<CheckboxSignature> = <template>\n <input\n class={{styles.choice}}\n type=\"checkbox\"\n checked={{@value}}\n disabled={{@disabled}}\n data-test-choice\n ...attributes\n {{on \"input\" (pick \"target.checked\" @update)}}\n />\n</template>;\n\nexport default Checkbox;\n"],"names":["Checkbox","setComponentTemplate","precompileTemplate","strictMode","scope","styles","on","pick","templateOnly"],"mappings":";;;;;;;AAcA,MAAMA,QAAc,GAAAC,oBAAA,CAAqBC,kBAAA,CAAA,uLAAA,EAUzC;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":"checkbox.js","sources":["../../src/components/checkbox.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 CheckboxSignature {\n Element: HTMLInputElement;\n Args: InputArgs<boolean>;\n}\n\nconst Checkbox: TOC<CheckboxSignature> = <template>\n <input\n class={{styles.choice}}\n type=\"checkbox\"\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\nexport default Checkbox;\n"],"names":["Checkbox","setComponentTemplate","precompileTemplate","strictMode","scope","styles","on","pick","templateOnly"],"mappings":";;;;;;;AAcA,MAAMA,QAAc,GAAAC,oBAAA,CAAqBC,kBAAA,CAAA,oMAAA,EAUzC;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAC,MAAA;IAAAC,EAAA;AAAAC,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA;;;;"}
@@ -7,7 +7,7 @@ import { precompileTemplate } from '@ember/template-compilation';
7
7
  import { setComponentTemplate } from '@ember/component';
8
8
  import templateOnly from '@ember/component/template-only';
9
9
 
10
- const CurrencyInput = setComponentTemplate(precompileTemplate("\n <InputBuilder @disabled={{@disabled}} as |b|>\n <input class=\"{{styles.input}} {{styles.currency}}\" type=\"text\" inputmode=\"decimal\" value={{@value}} disabled={{@disabled}} data-test-input ...attributes {{on \"input\" (pick \"target.value\" (pickAsNumber @update))}} />\n <b.Affix>\u20AC</b.Affix>\n </InputBuilder>\n", {
10
+ const CurrencyInput = setComponentTemplate(precompileTemplate("\n <InputBuilder @disabled={{@disabled}} as |b|>\n <input class=\"{{styles.input}} {{styles.currency}}\" type=\"text\" inputmode=\"decimal\" value={{@value}} disabled={{@disabled}} data-test-input {{on \"input\" (pick \"target.value\" (pickAsNumber @update)) capture=true}} ...attributes />\n <b.Affix>\u20AC</b.Affix>\n </InputBuilder>\n", {
11
11
  strictMode: true,
12
12
  scope: () => ({
13
13
  InputBuilder: TextInput,
@@ -1 +1 @@
1
- {"version":3,"file":"currency-input.js","sources":["../../src/components/currency-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';\nimport InputBuilder from './input-builder.gts';\n\nimport type { InputArgs } from './-input.ts';\nimport type { TOC } from '@ember/component/template-only';\n\nexport interface CurrencyInputSignature {\n Element: HTMLInputElement;\n Args: InputArgs<number>;\n}\n\nconst CurrencyInput: TOC<CurrencyInputSignature> = <template>\n <InputBuilder @disabled={{@disabled}} as |b|>\n <input\n class=\"{{styles.input}} {{styles.currency}}\"\n type=\"text\"\n inputmode=\"decimal\"\n value={{@value}}\n disabled={{@disabled}}\n data-test-input\n ...attributes\n {{on \"input\" (pick \"target.value\" (pickAsNumber @update))}}\n />\n <b.Affix>€</b.Affix>\n </InputBuilder>\n</template>;\n\nexport default CurrencyInput;\n"],"names":["CurrencyInput","setComponentTemplate","precompileTemplate","strictMode","scope","InputBuilder","styles","on","pick","pickAsNumber","templateOnly"],"mappings":";;;;;;;;;AAgBA,MAAMA,aAAmB,GAAAC,oBAAA,CAA0BC,kBAAA,CAAA,+UAAA,EAcnD;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;kBAAAC,SAAA;IAAAC,MAAA;IAAAC,EAAA;IAAAC,IAAA;AAAAC,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA;;;;"}
1
+ {"version":3,"file":"currency-input.js","sources":["../../src/components/currency-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';\nimport InputBuilder from './input-builder.gts';\n\nimport type { InputArgs } from './-input.ts';\nimport type { TOC } from '@ember/component/template-only';\n\nexport interface CurrencyInputSignature {\n Element: HTMLInputElement;\n Args: InputArgs<number>;\n}\n\nconst CurrencyInput: TOC<CurrencyInputSignature> = <template>\n <InputBuilder @disabled={{@disabled}} as |b|>\n <input\n class=\"{{styles.input}} {{styles.currency}}\"\n type=\"text\"\n inputmode=\"decimal\"\n value={{@value}}\n disabled={{@disabled}}\n data-test-input\n {{on \"input\" (pick \"target.value\" (pickAsNumber @update)) capture=true}}\n ...attributes\n />\n <b.Affix>€</b.Affix>\n </InputBuilder>\n</template>;\n\nexport default CurrencyInput;\n"],"names":["CurrencyInput","setComponentTemplate","precompileTemplate","strictMode","scope","InputBuilder","styles","on","pick","pickAsNumber","templateOnly"],"mappings":";;;;;;;;;AAgBA,MAAMA,aAAmB,GAAAC,oBAAA,CAA0BC,kBAAA,CAAA,4VAAA,EAcnD;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;kBAAAC,SAAA;IAAAC,MAAA;IAAAC,EAAA;IAAAC,IAAA;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 DateInput = setComponentTemplate(precompileTemplate("\n <input class={{styles.input}} type=\"date\" value={{@value}} disabled={{@disabled}} data-test-input ...attributes {{on \"input\" (pick \"target.value\" @update)}} />\n", {
8
+ const DateInput = setComponentTemplate(precompileTemplate("\n <input class={{styles.input}} type=\"date\" value={{@value}} disabled={{@disabled}} data-test-input {{on \"input\" (pick \"target.value\" @update) capture=true}} ...attributes />\n", {
9
9
  strictMode: true,
10
10
  scope: () => ({
11
11
  styles,
@@ -1 +1 @@
1
- {"version":3,"file":"date-input.js","sources":["../../src/components/date-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 DateInputSignature {\n Element: HTMLInputElement;\n Args: InputArgs<string>;\n}\n\nconst DateInput: TOC<DateInputSignature> = <template>\n <input\n class={{styles.input}}\n type=\"date\"\n value={{@value}}\n disabled={{@disabled}}\n data-test-input\n ...attributes\n {{on \"input\" (pick \"target.value\" @update)}}\n />\n</template>;\n\nexport default DateInput;\n"],"names":["DateInput","setComponentTemplate","precompileTemplate","strictMode","scope","styles","on","pick","templateOnly"],"mappings":";;;;;;;AAcA,MAAMA,SAAe,GAAAC,oBAAA,CAAsBC,kBAAA,CAAA,6KAAA,EAU3C;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":"date-input.js","sources":["../../src/components/date-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 DateInputSignature {\n Element: HTMLInputElement;\n Args: InputArgs<string>;\n}\n\nconst DateInput: TOC<DateInputSignature> = <template>\n <input\n class={{styles.input}}\n type=\"date\"\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\nexport default DateInput;\n"],"names":["DateInput","setComponentTemplate","precompileTemplate","strictMode","scope","styles","on","pick","templateOnly"],"mappings":";;;;;;;AAcA,MAAMA,SAAe,GAAAC,oBAAA,CAAsBC,kBAAA,CAAA,0LAAA,EAU3C;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAC,MAAA;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 EmailInput = setComponentTemplate(precompileTemplate("\n <input class={{styles.input}} type=\"email\" value={{@value}} disabled={{@disabled}} data-test-input ...attributes {{on \"input\" (pick \"target.value\" @update)}} />\n", {
8
+ const EmailInput = setComponentTemplate(precompileTemplate("\n <input class={{styles.input}} type=\"email\" value={{@value}} disabled={{@disabled}} data-test-input {{on \"input\" (pick \"target.value\" @update) capture=true}} ...attributes />\n", {
9
9
  strictMode: true,
10
10
  scope: () => ({
11
11
  styles,
@@ -1 +1 @@
1
- {"version":3,"file":"email-input.js","sources":["../../src/components/email-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 EmailInputSignature {\n Element: HTMLInputElement;\n Args: InputArgs<string>;\n}\n\nconst EmailInput: TOC<EmailInputSignature> = <template>\n <input\n class={{styles.input}}\n type=\"email\"\n value={{@value}}\n disabled={{@disabled}}\n data-test-input\n ...attributes\n {{on \"input\" (pick \"target.value\" @update)}}\n />\n</template>;\n\nexport default EmailInput;\n"],"names":["EmailInput","setComponentTemplate","precompileTemplate","strictMode","scope","styles","on","pick","templateOnly"],"mappings":";;;;;;;AAcA,MAAMA,UAAgB,GAAAC,oBAAA,CAAuBC,kBAAA,CAAA,8KAAA,EAU7C;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":"email-input.js","sources":["../../src/components/email-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 EmailInputSignature {\n Element: HTMLInputElement;\n Args: InputArgs<string>;\n}\n\nconst EmailInput: TOC<EmailInputSignature> = <template>\n <input\n class={{styles.input}}\n type=\"email\"\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\nexport default EmailInput;\n"],"names":["EmailInput","setComponentTemplate","precompileTemplate","strictMode","scope","styles","on","pick","templateOnly"],"mappings":";;;;;;;AAcA,MAAMA,UAAgB,GAAAC,oBAAA,CAAuBC,kBAAA,CAAA,2LAAA,EAU7C;EAAAC,UAAA,EAAA,IAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAC,MAAA;IAAAC,EAAA;AAAAC,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA;;;;"}