@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-DBuzL4_0.js","sources":["../src/components/form/description.gts","../src/components/form/errors.gts","../src/components/form/label.gts","../src/components/form/rules.gts","../src/components/form/field.gts","../src/components/form/manage-validation.ts","../src/components/form/fields/checkbox.gts","../src/components/form/fields/currency.gts","../src/components/form/fields/date.gts","../src/components/form/fields/email.gts","../src/components/form/fields/list.gts","../src/components/form/fields/multiple-choice.gts","../src/components/form/fields/number.gts","../src/components/form/fields/password.gts","../src/components/form/fields/phone.gts","../src/components/form/fields/range.gts","../src/components/form/fields/select.gts","../src/components/form/fields/singular-choice.gts","../src/components/form/fields/text.gts","../src/components/form/fields/text-area.gts","../src/components/form/reset.gts","../src/components/form/submit.gts","../src/components/form/form.gts"],"sourcesContent":["import styles from '@hokulea/core/forms.module.css';\n\nimport type { TOC } from '@ember/component/template-only';\n\nexport interface DescriptionSignature {\n Element: HTMLParagraphElement;\n Blocks: {\n default: [];\n };\n}\n\nconst Description: TOC<DescriptionSignature> = <template>\n <p class={{styles.description}} data-test-description ...attributes>\n {{yield}}\n </p>\n</template>;\n\nexport default Description;\n","import styles from '@hokulea/core/forms.module.css';\n\nimport type { TOC } from '@ember/component/template-only';\n// import Icon from '../../../components/icon';\nimport type { Issue } from '@hokulea/ember-pahu';\n\nexport interface ErrorsSignature {\n Element: HTMLDivElement;\n Args: {\n // the following are private arguments curried by the component helper, so users will never have to use those\n\n /*\n * @internal\n */\n errors: Issue[];\n\n /*\n * @internal\n */\n id: string;\n };\n Blocks: {\n default?: [Issue[]];\n };\n}\n\nconst Errors: TOC<ErrorsSignature> = <template>\n <div id={{@id}} aria-live=\"assertive\" class={{styles.errors}} ...attributes>\n {{! <span><Icon @icon='dismiss-circle' @style='filled' /></span> }}\n {{#if (has-block)}}\n {{yield @errors}}\n {{else}}\n <div>\n {{#each @errors as |e|}}\n {{#if e.message}}\n <p\n data-test-error\n data-test-error-type=\"{{e.type}}\"\n data-test-error-value=\"{{e.value}}\"\n >{{e.message}}</p>\n {{/if}}\n {{/each}}\n </div>\n {{/if}}\n </div>\n</template>;\n\nexport default Errors;\n","import { element } from 'ember-element-helper';\n\nimport styles from '@hokulea/core/forms.module.css';\n\nimport type { TOC } from '@ember/component/template-only';\nimport type { ComponentLike } from '@glint/template';\n\nexport interface LabelSignature {\n Element: HTMLLabelElement;\n Args: {\n element?: ComponentLike<{ Element: HTMLElement }>;\n };\n Blocks: {\n default: [];\n };\n}\n\nconst Label: TOC<LabelSignature> = <template>\n {{#let (if @element @element (element \"label\")) as |Element|}}\n <Element class={{styles.label}} data-test-label ...attributes>\n {{yield}}\n </Element>\n {{/let}}\n</template>;\n\nexport default Label;\n","import Component from '@glimmer/component';\n\nimport styles from '@hokulea/core/forms.module.css';\n\nimport Icon from '../icon.gts';\n\nimport type Owner from '@ember/owner';\nimport type { WithBoundArgs } from '@glint/template';\nimport type { Issue } from '@hokulea/ember-pahu';\n\nconst ErrorIcon = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"256\"\nheight=\"256\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"M208.49\n191.51a12 12 0 0 1-17 17L128 145l-63.51 63.49a12 12 0 0 1-17-17L111 128L47.51\n64.49a12 12 0 0 1 17-17L128 111l63.51-63.52a12 12 0 0 1 17 17L145\n128Z\"/></svg>`;\nconst ValidIcon = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"256\"\nheight=\"256\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"m232.49\n80.49l-128 128a12 12 0 0 1-17 0l-56-56a12 12 0 1 1 17-17L96 183L215.51 63.51a12\n12 0 0 1 17 17Z\"/></svg>`;\n\ninterface RuleSignature {\n Args: {\n key: string;\n value: unknown;\n errors?: Issue[];\n };\n Blocks: {\n default: [];\n };\n}\n\nclass Rule extends Component<RuleSignature> {\n isInvalid = () => {\n return this.args.errors?.some(\n (i) => this.args.key in i && i[this.args.key] === this.args.value\n );\n };\n\n <template>\n <p data-test-rule data-test-rule-invalid={{(this.isInvalid)}}>\n <Icon\n @icon={{if (this.isInvalid) ErrorIcon ValidIcon}}\n data-invalid={{(this.isInvalid)}}\n data-icon\n />\n\n <span>{{yield}}</span>\n </p>\n </template>\n}\n\nexport interface RulesBlock {\n rules: [WithBoundArgs<typeof Rule, 'errors'>];\n}\n\nexport interface RulesSignature {\n Element: HTMLDivElement;\n Args: {\n useRules: (useRules: boolean) => void;\n\n /*\n * @internal\n */\n errors: Issue[];\n\n /*\n * @internal\n */\n id: string;\n };\n Blocks: {\n default: [WithBoundArgs<typeof Rule, 'errors'>];\n };\n}\n\nexport default class Rules extends Component<RulesSignature> {\n constructor(owner: Owner, args: RulesSignature['Args']) {\n super(owner, args);\n\n args.useRules(true);\n }\n\n <template>\n <div id={{@id}} aria-live=\"assertive\" class={{styles.rules}} ...attributes>\n {{yield (component Rule errors=@errors)}}\n </div>\n </template>\n}\n","import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { hash, uniqueId } from '@ember/helper';\nimport { next } from '@ember/runloop';\n\nimport { element } from 'ember-element-helper';\n\nimport styles from '@hokulea/core/forms.module.css';\n\nimport { and } from '../../-private/helpers.ts';\nimport Description from './description.gts';\nimport Errors from './errors.gts';\nimport Label from './label.gts';\nimport Rules from './rules.gts';\n\nimport type { LabelSignature } from './label.gts';\nimport type { AttrValue, ComponentLike, WithBoundArgs } from '@glint/template';\nimport type {\n FieldAPI,\n FieldConfig,\n FieldNames,\n FieldValue,\n FormAPI,\n Issue,\n UserData\n} from '@hokulea/ember-pahu';\n\nexport type BoundField<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> = WithBoundArgs<typeof Field<DATA, NAME, VALUE>, 'form'>;\n\nexport type FieldArgs<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> = FieldConfig<DATA, NAME, VALUE> & {\n /**\n * The label for your field.\n *\n * Alternatively you can use `<:label>` block for more fine-control (which\n * takes precendence if both are given)\n */\n label: string;\n\n /**\n * The description for your field.\n *\n * Alternatively you can use `<:description>` block for more fine-control (which\n * takes precendence if both are given)\n */\n description?: string;\n};\n\nexport interface FieldBlock<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> {\n /**\n * The field's current value.\n *\n * If you don't use one of the supplied control components, then use this to pass the value to your custom component.\n */\n value?: FieldValue<DATA, NAME, VALUE>;\n\n /**\n * Action to update the (internal) form data for this field.\n *\n * If you don't use one of the supplied control components, then use this to update the value whenever your custom component's value has changed.\n */\n setValue: (value: FieldValue<DATA, NAME, VALUE>) => void;\n\n /**\n * Unique ID of this field, used to associate the control with its label.\n *\n * If you don't use the supplied components, then you can use this as the `id` of the control and the `for` attribute of the `<label>`.\n */\n id: string;\n\n /**\n * Unique error ID of this field, used to associate the control with its validation error message.\n *\n * If you don't use the supplied components, then you can use this as the `id` of the validation error element and the `aria-errormessage` or `aria-describedby` attribute of the control.\n */\n errorId: string;\n\n /**\n * Will be `true` when validation was triggered and this field is invalid.\n *\n * You can use this to customize your markup, e.g. apply HTML classes for error styling.\n */\n invalid: boolean;\n\n registerElement: FieldAPI<DATA, NAME, VALUE>['registerElement'];\n\n showErrors: boolean;\n\n /**\n * An array of raw ValidationError objects, for custom rendering of error output\n */\n issues: Issue[];\n\n /**\n * When calling this action, validation will be triggered.\n *\n * Can be used for custom controls that don't emit the `@validateOn` events that would normally trigger a dynamic validation.\n */\n validate: FieldAPI<DATA, NAME, VALUE>['validate'];\n\n Rules: WithBoundArgs<typeof Rules, 'useRules' | 'errors' | 'id'>;\n}\n\nexport type MultipleFieldBlock<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> = Omit<FieldBlock<DATA, NAME, VALUE>, 'value' | 'setValue'> & {\n /**\n * The current value of the field's form data.\n *\n * If you don't use one of the supplied control components, then use this to pass the value to your custom component.\n */\n value?: FieldValue<DATA, NAME, VALUE>[];\n\n /**\n * Action to update the (internal) form data for this field.\n *\n * If you don't use one of the supplied control components, then use this to update the value whenever your custom component's value has changed.\n */\n setValue: (value: FieldValue<DATA, NAME, VALUE>[]) => void;\n};\n\nexport interface FieldSignature<\n DATA extends UserData,\n NAME extends string,\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> {\n Element: HTMLDivElement;\n Args: Omit<FieldArgs<DATA, NAME, VALUE>, 'element'> & {\n /** @internal */\n form: FormAPI<DATA>;\n\n /** @internal */\n element?: ComponentLike<{ Element: HTMLElement; Blocks: { default: [] } }>;\n\n /** @internal */\n labelComponent?: ComponentLike<LabelSignature>;\n\n showErrors?: boolean;\n };\n Blocks: {\n default: [FieldBlock<DATA, NAME, VALUE>];\n };\n}\n\nexport default class Field<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> extends Component<FieldSignature<DATA, NAME, VALUE>> {\n @tracked rulesUsed = false;\n #field?: FieldAPI<DATA, NAME, VALUE>;\n\n get validateOn() {\n return this.rulesUsed ? 'input' : this.args.validateOn;\n }\n\n get revalidateOn() {\n return this.rulesUsed ? 'input' : this.args.revalidateOn;\n }\n\n createOrUpdateField = (config: FieldConfig<DATA, NAME, VALUE>): FieldAPI<DATA, NAME, VALUE> => {\n const filteredConfig = Object.fromEntries(\n Object.entries(config).filter(([_, v]) => v !== undefined)\n ) as FieldConfig<DATA, NAME, VALUE>;\n\n if (this.#field) {\n this.#field.updateConfig(filteredConfig);\n } else {\n this.#field = this.args.form.createField<NAME, VALUE>(filteredConfig);\n }\n\n return this.#field;\n };\n\n useRules = (useRules: boolean) => {\n // eslint-disable-next-line ember/no-runloop\n next(async () => {\n this.rulesUsed = useRules;\n\n if (useRules) {\n await this.#field?.validate();\n }\n });\n };\n\n get showErrors() {\n return !this.rulesUsed && this.args.showErrors !== false;\n }\n\n <template>\n {{#let\n (uniqueId)\n (uniqueId)\n (if @element @element (element \"div\"))\n (this.createOrUpdateField\n name=@name\n ignoreNativeValidation=@ignoreNativeValidation\n linkedField=@linkedField\n validateOn=this.validateOn\n revalidateOn=this.revalidateOn\n validate=@validate\n validated=@validated\n value=@value\n )\n (component Rules useRules=this.useRules)\n as |fieldId errorId Element field WiredRules|\n }}\n <Element class={{styles.field}} data-test-field={{@name}}>\n {{#if @label}}\n {{#let (if @labelComponent @labelComponent Label) as |L|}}\n <L for={{unless @labelComponent fieldId}}>{{@label}}</L>\n {{/let}}\n {{/if}}\n\n {{#if @description}}\n <Description>{{@description}}</Description>\n {{/if}}\n\n {{yield\n (hash\n value=field.value\n setValue=field.setValue\n id=fieldId\n errorId=errorId\n invalid=field.invalid\n registerElement=field.registerElement\n issues=field.issues\n validate=field.validate\n showErrors=this.showErrors\n Rules=(component WiredRules id=errorId errors=field.issues)\n )\n }}\n\n {{#if (and this.showErrors field.issues)}}\n <Errors @id={{errorId}} @errors={{field.issues}} />\n {{/if}}\n </Element>\n {{/let}}\n </template>\n}\n","import { modifier } from 'ember-modifier';\n\nexport interface NamedOptions {\n /** @internal */\n invalid: boolean;\n\n /** @internal */\n errorMessageId: string;\n\n /** @internal */\n showErrors?: boolean;\n}\n\ntype ValidationElements =\n | HTMLInputElement\n | HTMLSelectElement\n | HTMLTextAreaElement\n | HTMLDivElement;\n\nexport const manageValidation = modifier(\n (element: ValidationElements, _: [], { showErrors, invalid, errorMessageId }: NamedOptions) => {\n if (showErrors !== false) {\n element.ariaInvalid = invalid ? 'true' : 'false';\n\n if (invalid) {\n element.setAttribute('aria-errormessage', errorMessageId);\n } else {\n element.removeAttribute('aria-errormessage');\n }\n\n if (element.parentElement && 'inputBuilder' in element.parentElement.dataset) {\n element.parentElement.dataset.invalid = invalid ? 'true' : 'false';\n }\n }\n\n return;\n }\n);\n","import Component from '@glimmer/component';\n\nimport styles from '@hokulea/core/forms.module.css';\n\nimport { asBoolean } from '../../../-private/helpers.ts';\nimport Checkbox from '../../checkbox.gts';\nimport Description from '../description.gts';\nimport Label from '../label.gts';\nimport { manageValidation } from '../manage-validation.ts';\n\nimport type { CheckboxSignature } from '../../checkbox.gts';\nimport type { BoundField, FieldArgs } from '../field.gts';\nimport type { AttrValue } from '@glint/template';\nimport type { FieldNames, FieldValue, UserData } from '@hokulea/ember-pahu';\n\nexport interface CheckboxFieldSignature<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> {\n Element: CheckboxSignature['Element'];\n Args: FieldArgs<DATA, NAME, VALUE> &\n Omit<CheckboxSignature['Args'], 'value' | 'update'> & {\n Field: BoundField<DATA, NAME, VALUE>;\n };\n}\n\nexport default class CheckboxField<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> extends Component<CheckboxFieldSignature<DATA, NAME, VALUE>> {\n Field = this.args.Field;\n\n setBooleanValue = (setValue: (value: FieldValue<DATA, NAME, VALUE>) => void) => {\n return (value: boolean) => setValue(value as FieldValue<DATA, NAME, VALUE>);\n };\n\n <template>\n <this.Field\n @label=\"\"\n @name={{@name}}\n @value={{@value}}\n @ignoreNativeValidation={{@ignoreNativeValidation}}\n @validateOn={{@validateOn}}\n @revalidateOn={{@revalidateOn}}\n @validate={{@validate}}\n @validated={{@validated}}\n as |f|\n >\n <div class={{styles.choices}}>\n <div class={{styles.choice}}>\n <span>\n <Checkbox\n @value={{asBoolean f.value}}\n @update={{this.setBooleanValue f.setValue}}\n @disabled={{@disabled}}\n id={{f.id}}\n name={{@name}}\n {{f.registerElement}}\n {{manageValidation\n errorMessageId=f.errorId\n invalid=f.invalid\n showErrors=f.showErrors\n }}\n ...attributes\n />\n </span>\n\n <div>\n <Label for={{f.id}}>{{@label}}</Label>\n\n {{#if @description}}\n <Description>{{@description}}</Description>\n {{/if}}\n </div>\n </div>\n </div>\n </this.Field>\n </template>\n}\n","import Component from '@glimmer/component';\n\nimport { asNumber } from '../../../-private/helpers.ts';\nimport CurrencyInput from '../../currency-input.gts';\nimport { manageValidation } from '../manage-validation.ts';\n\nimport type { CurrencyInputSignature } from '../../currency-input.gts';\nimport type { BoundField, FieldArgs } from '../field.gts';\nimport type { AttrValue } from '@glint/template';\nimport type { FieldNames, FieldValue, UserData } from '@hokulea/ember-pahu';\n\nexport interface CurrencyFieldSignature<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> {\n Element: CurrencyInputSignature['Element'];\n Args: FieldArgs<DATA, NAME, VALUE> &\n Omit<CurrencyInputSignature['Args'], 'value' | 'update'> & {\n Field: BoundField<DATA, NAME, VALUE>;\n };\n}\n\nexport default class CurrencyField<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> extends Component<CurrencyFieldSignature<DATA, NAME, VALUE>> {\n Field = this.args.Field;\n\n setNumberValue = (setValue: (value: FieldValue<DATA, NAME, VALUE>) => void) => {\n return (value: number) => setValue(value as FieldValue<DATA, NAME, VALUE>);\n };\n\n <template>\n <this.Field\n @name={{@name}}\n @label={{@label}}\n @description={{@description}}\n @value={{@value}}\n @ignoreNativeValidation={{@ignoreNativeValidation}}\n @validateOn={{@validateOn}}\n @revalidateOn={{@revalidateOn}}\n @validate={{@validate}}\n @validated={{@validated}}\n as |f|\n >\n <CurrencyInput\n @value={{asNumber f.value}}\n @update={{this.setNumberValue f.setValue}}\n @disabled={{@disabled}}\n name={{@name}}\n id={{f.id}}\n {{f.registerElement}}\n {{manageValidation errorMessageId=f.errorId invalid=f.invalid showErrors=f.showErrors}}\n ...attributes\n />\n </this.Field>\n </template>\n}\n","import Component from '@glimmer/component';\n\nimport { asString } from '../../../-private/helpers.ts';\nimport DateInput from '../../date-input.gts';\nimport { manageValidation } from '../manage-validation.ts';\n\nimport type { DateInputSignature } from '../../date-input.gts';\nimport type { BoundField, FieldArgs } from '../field.gts';\nimport type { AttrValue } from '@glint/template';\nimport type { FieldNames, FieldValue, UserData } from '@hokulea/ember-pahu';\n\nexport interface DateFieldSignature<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> {\n Element: DateInputSignature['Element'];\n Args: FieldArgs<DATA, NAME, VALUE> &\n Omit<DateInputSignature['Args'], 'value' | 'update'> & {\n Field: BoundField<DATA, NAME, VALUE>;\n };\n}\n\nexport default class DateField<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> extends Component<DateFieldSignature<DATA, NAME, VALUE>> {\n Field = this.args.Field;\n\n setStringValue = (setValue: (value: FieldValue<DATA, NAME, VALUE>) => void) => {\n return (value: string) => setValue(value as FieldValue<DATA, NAME, VALUE>);\n };\n\n <template>\n <this.Field\n @name={{@name}}\n @label={{@label}}\n @description={{@description}}\n @value={{@value}}\n @ignoreNativeValidation={{@ignoreNativeValidation}}\n @validateOn={{@validateOn}}\n @revalidateOn={{@revalidateOn}}\n @validate={{@validate}}\n @validated={{@validated}}\n as |f|\n >\n <DateInput\n @value={{asString f.value}}\n @update={{this.setStringValue f.setValue}}\n @disabled={{@disabled}}\n name={{@name}}\n id={{f.id}}\n {{f.registerElement}}\n {{manageValidation errorMessageId=f.errorId invalid=f.invalid showErrors=f.showErrors}}\n ...attributes\n />\n </this.Field>\n </template>\n}\n","import Component from '@glimmer/component';\n\nimport { asString } from '../../../-private/helpers.ts';\nimport EmailInput from '../../email-input.gts';\nimport { manageValidation } from '../manage-validation.ts';\n\nimport type { EmailInputSignature } from '../../email-input.gts';\nimport type { BoundField, FieldArgs } from '../field.gts';\nimport type { AttrValue } from '@glint/template';\nimport type { FieldNames, FieldValue, UserData } from '@hokulea/ember-pahu';\n\nexport interface EmailFieldSignature<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> {\n Element: EmailInputSignature['Element'];\n Args: FieldArgs<DATA, NAME, VALUE> &\n Omit<EmailInputSignature['Args'], 'value' | 'update'> & {\n Field: BoundField<DATA, NAME, VALUE>;\n };\n}\n\nexport default class EmailField<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> extends Component<EmailFieldSignature<DATA, NAME, VALUE>> {\n Field = this.args.Field;\n\n setStringValue = (setValue: (value: FieldValue<DATA, NAME, VALUE>) => void) => {\n return (value: string) => setValue(value as FieldValue<DATA, NAME, VALUE>);\n };\n\n <template>\n <this.Field\n @name={{@name}}\n @label={{@label}}\n @description={{@description}}\n @value={{@value}}\n @ignoreNativeValidation={{@ignoreNativeValidation}}\n @validateOn={{@validateOn}}\n @revalidateOn={{@revalidateOn}}\n @validate={{@validate}}\n @validated={{@validated}}\n as |f|\n >\n <EmailInput\n @value={{asString f.value}}\n @update={{this.setStringValue f.setValue}}\n @disabled={{@disabled}}\n name={{@name}}\n id={{f.id}}\n {{f.registerElement}}\n {{manageValidation errorMessageId=f.errorId invalid=f.invalid showErrors=f.showErrors}}\n ...attributes\n />\n </this.Field>\n </template>\n}\n","import Component from '@glimmer/component';\nimport { uniqueId } from '@ember/helper';\n\nimport { element } from 'ember-element-helper';\n\nimport List from '../../list.gts';\nimport Label from '../label.gts';\nimport { manageValidation } from '../manage-validation.ts';\n\nimport type { ListSignature } from '../../list.gts';\nimport type { BoundField, FieldArgs } from '../field.gts';\nimport type { TOC } from '@ember/component/template-only';\nimport type { AttrValue } from '@glint/template';\nimport type { FieldNames, FieldValue, UserData } from '@hokulea/ember-pahu';\n\ninterface ListLabelSignature {\n Element: HTMLLabelElement;\n Args: {\n id: string;\n };\n Blocks: {\n default: [];\n };\n}\n\nconst ListLabel: TOC<ListLabelSignature> = <template>\n <Label @element={{element \"span\"}} id={{@id}}>{{yield}}</Label>\n</template>;\n\nexport interface ListFieldSignature<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> {\n Element: ListSignature<FieldValue<DATA, NAME, VALUE>>['Element'];\n Args: FieldArgs<DATA, NAME, VALUE> &\n Omit<ListSignature<FieldValue<DATA, NAME, VALUE>>['Args'], 'selection' | 'update'> & {\n Field: BoundField<DATA, NAME, VALUE>;\n };\n Blocks: ListSignature<FieldValue<DATA, NAME, VALUE>>['Blocks'];\n}\n\nexport default class ListField<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> extends Component<ListFieldSignature<DATA, NAME, VALUE>> {\n Field = this.args.Field;\n List = List<FieldValue<DATA, NAME, VALUE>>;\n\n setValue = (setValue: (value: FieldValue<DATA, NAME, VALUE>) => void) => {\n return (value: FieldValue<DATA, NAME, VALUE> | FieldValue<DATA, NAME, VALUE>[]) =>\n setValue(value as FieldValue<DATA, NAME, VALUE>);\n };\n\n asValue = (value: unknown) => value as FieldValue<DATA, NAME, VALUE>;\n\n <template>\n {{#let (uniqueId) as |labelId|}}\n <this.Field\n @name={{@name}}\n @label={{@label}}\n @labelComponent={{component ListLabel id=labelId}}\n @description={{@description}}\n @value={{@value}}\n @ignoreNativeValidation={{@ignoreNativeValidation}}\n @validateOn={{@validateOn}}\n @revalidateOn={{@revalidateOn}}\n @validate={{@validate}}\n @validated={{@validated}}\n as |f|\n >\n <this.List\n @value={{this.asValue f.value}}\n @update={{this.setValue f.setValue}}\n @disabled={{@disabled}}\n {{!-- name={{@name}} --}}\n aria-labelledby={{labelId}}\n {{f.registerElement}}\n {{manageValidation errorMessageId=f.errorId invalid=f.invalid}}\n ...attributes\n as |s|\n >\n {{yield s}}\n </this.List>\n </this.Field>\n {{/let}}\n </template>\n}\n","import Component from '@glimmer/component';\nimport { hash, uniqueId } from '@ember/helper';\n\nimport { element } from 'ember-element-helper';\n\nimport styles from '@hokulea/core/forms.module.css';\n\nimport Checkbox from '../../checkbox.gts';\nimport Description from '../description.gts';\nimport Errors from '../errors.gts';\nimport Label from '../label.gts';\nimport { manageValidation } from '../manage-validation.ts';\n\nimport type { RadioSignature } from '../../radio.gts';\nimport type { BoundField, FieldArgs, FieldBlock, MultipleFieldBlock } from '../field';\nimport type { AttrValue, WithBoundArgs } from '@glint/template';\nimport type { FieldNames, FieldValue, UserData } from '@hokulea/ember-pahu';\n\nexport interface OptionSignature<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> {\n Element: RadioSignature['Element'];\n Args: {\n value: string;\n label: string;\n description?: string;\n\n /** @internal */\n name: string;\n\n /** @internal */\n disabled?: boolean;\n\n /** @internal */\n field: MultipleFieldBlock<DATA, NAME, VALUE>;\n };\n Blocks: {\n default: [];\n };\n}\n\nclass Option<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> extends Component<OptionSignature<DATA, NAME, VALUE>> {\n select = (checked: boolean) => {\n if (checked) {\n this.args.field.setValue([...(this.args.field.value ?? []), this.args.value] as FieldValue<\n DATA,\n NAME,\n VALUE\n >[]);\n } else {\n const values = this.args.field.value;\n const index = this.args.field.value?.indexOf(\n this.args.value as FieldValue<DATA, NAME, VALUE>\n );\n\n if (Array.isArray(values) && index) {\n values.splice(index, 1);\n\n this.args.field.setValue(values);\n }\n }\n };\n\n get checked() {\n return this.args.field.value?.includes(this.args.value as FieldValue<DATA, NAME, VALUE>);\n }\n\n get issues() {\n return this.args.field.issues.filter((i) => 'value' in i && i.value === this.args.value);\n }\n\n get invalid() {\n return this.issues.length > 0;\n }\n\n <template>\n {{#let (uniqueId) (uniqueId) as |id errorId|}}\n <div class={{styles.choice}} data-test-option>\n <span>\n <Checkbox\n @value={{this.checked}}\n @update={{this.select}}\n @disabled={{@disabled}}\n id={{id}}\n name={{@name}}\n value={{@value}}\n {{@field.registerElement}}\n {{manageValidation errorMessageId=errorId invalid=this.invalid}}\n ...attributes\n />\n </span>\n\n <div>\n <Label for={{id}}>{{@label}}</Label>\n\n {{#if @description}}\n <Description>{{@description}}</Description>\n {{/if}}\n\n {{yield}}\n\n {{#if this.issues}}\n <Errors @id={{errorId}} @errors={{this.issues}} />\n {{/if}}\n\n </div>\n </div>\n {{/let}}\n </template>\n}\n\nexport interface MultipleChoiceFieldSignature<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> {\n Args: FieldArgs<DATA, NAME, VALUE> & {\n disabled?: boolean;\n Field: BoundField<DATA, NAME, VALUE>;\n };\n Blocks: {\n default: [\n {\n Option: WithBoundArgs<typeof Option<DATA, NAME, VALUE>, 'field' | 'name'>;\n }\n ];\n };\n}\n\nexport default class MultipleChoiceField<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> extends Component<MultipleChoiceFieldSignature<DATA, NAME, VALUE>> {\n Field = this.args.Field;\n Option = Option<DATA, NAME, VALUE>;\n\n asMultiField = (field: FieldBlock<DATA, NAME, VALUE>) => {\n return field as MultipleFieldBlock<DATA, NAME, VALUE>;\n };\n\n <template>\n <this.Field\n @element={{element \"fieldset\"}}\n @showErrors={{false}}\n @labelComponent={{component Label element=(element \"legend\")}}\n @name={{@name}}\n @label={{@label}}\n @description={{@description}}\n @value={{@value}}\n @ignoreNativeValidation={{@ignoreNativeValidation}}\n @validateOn={{@validateOn}}\n @revalidateOn={{@revalidateOn}}\n @validate={{@validate}}\n @validated={{@validated}}\n as |f|\n >\n <div class={{styles.choices}} data-test-choices>\n {{yield\n (hash\n Option=(component this.Option field=(this.asMultiField f) name=@name disabled=@disabled)\n )\n }}\n </div>\n </this.Field>\n </template>\n}\n","import Component from '@glimmer/component';\n\nimport { asNumber } from '../../../-private/helpers.ts';\nimport NumberInput from '../../number-input.gts';\nimport { manageValidation } from '../manage-validation.ts';\n\nimport type { NumberInputSignature } from '../../number-input.gts';\nimport type { BoundField, FieldArgs } from '../field.gts';\nimport type { AttrValue } from '@glint/template';\nimport type { FieldNames, FieldValue, UserData } from '@hokulea/ember-pahu';\n\nexport interface NumberFieldSignature<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> {\n Element: NumberInputSignature['Element'];\n Args: FieldArgs<DATA, NAME, VALUE> &\n Omit<NumberInputSignature['Args'], 'value' | 'update'> & {\n Field: BoundField<DATA, NAME, VALUE>;\n };\n}\n\nexport default class NumberField<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> extends Component<NumberFieldSignature<DATA, NAME, VALUE>> {\n Field = this.args.Field;\n\n setNumberValue = (setValue: (value: FieldValue<DATA, NAME, VALUE>) => void) => {\n return (value: number) => setValue(value as FieldValue<DATA, NAME, VALUE>);\n };\n\n <template>\n <this.Field\n @name={{@name}}\n @label={{@label}}\n @description={{@description}}\n @value={{@value}}\n @ignoreNativeValidation={{@ignoreNativeValidation}}\n @validateOn={{@validateOn}}\n @revalidateOn={{@revalidateOn}}\n @validate={{@validate}}\n @validated={{@validated}}\n as |f|\n >\n <NumberInput\n @value={{asNumber f.value}}\n @update={{this.setNumberValue f.setValue}}\n @disabled={{@disabled}}\n name={{@name}}\n id={{f.id}}\n {{f.registerElement}}\n {{manageValidation errorMessageId=f.errorId invalid=f.invalid showErrors=f.showErrors}}\n ...attributes\n />\n </this.Field>\n </template>\n}\n","import Component from '@glimmer/component';\n\nimport { asString } from '../../../-private/helpers.ts';\nimport PasswordInput from '../../password-input.gts';\nimport { manageValidation } from '../manage-validation.ts';\n\nimport type { PasswordInputSignature } from '../../password-input.gts';\nimport type { BoundField, FieldArgs } from '../field.gts';\nimport type { RulesBlock } from '../rules.gts';\nimport type { AttrValue } from '@glint/template';\nimport type { FieldNames, FieldValue, UserData } from '@hokulea/ember-pahu';\n\nexport interface PasswordFieldSignature<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> {\n Element: PasswordInputSignature['Element'];\n Args: FieldArgs<DATA, NAME, VALUE> &\n Omit<PasswordInputSignature['Args'], 'value' | 'update'> & {\n Field: BoundField<DATA, NAME, VALUE>;\n };\n Blocks: RulesBlock;\n}\n\nexport default class PasswordField<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> extends Component<PasswordFieldSignature<DATA, NAME, VALUE>> {\n Field = this.args.Field;\n\n setStringValue = (setValue: (value: FieldValue<DATA, NAME, VALUE>) => void) => {\n return (value: string) => setValue(value as FieldValue<DATA, NAME, VALUE>);\n };\n\n <template>\n <this.Field\n @name={{@name}}\n @label={{@label}}\n @description={{@description}}\n @value={{@value}}\n @ignoreNativeValidation={{@ignoreNativeValidation}}\n @validateOn={{@validateOn}}\n @revalidateOn={{@revalidateOn}}\n @validate={{@validate}}\n @validated={{@validated}}\n as |f|\n >\n <PasswordInput\n @value={{asString f.value}}\n @update={{this.setStringValue f.setValue}}\n @disabled={{@disabled}}\n name={{@name}}\n id={{f.id}}\n {{f.registerElement}}\n {{manageValidation errorMessageId=f.errorId invalid=f.invalid showErrors=f.showErrors}}\n ...attributes\n />\n\n {{#if (has-block \"rules\")}}\n <f.Rules as |Rule|>\n {{yield Rule to=\"rules\"}}\n </f.Rules>\n {{/if}}\n </this.Field>\n </template>\n}\n","import Component from '@glimmer/component';\n\nimport { asString } from '../../../-private/helpers.ts';\nimport PhoneInput from '../../phone-input.gts';\nimport { manageValidation } from '../manage-validation.ts';\n\nimport type { PhoneInputSignature } from '../../phone-input.gts';\nimport type { BoundField, FieldArgs } from '../field.gts';\nimport type { RulesBlock } from '../rules.gts';\nimport type { AttrValue } from '@glint/template';\nimport type { FieldNames, FieldValue, UserData } from '@hokulea/ember-pahu';\n\nexport interface PhoneFieldSignature<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> {\n Element: PhoneInputSignature['Element'];\n Args: FieldArgs<DATA, NAME, VALUE> &\n Omit<PhoneInputSignature['Args'], 'value' | 'update'> & {\n Field: BoundField<DATA, NAME, VALUE>;\n };\n Blocks: RulesBlock;\n}\n\nexport default class PhoneField<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> extends Component<PhoneFieldSignature<DATA, NAME, VALUE>> {\n Field = this.args.Field;\n\n setStringValue = (setValue: (value: FieldValue<DATA, NAME, VALUE>) => void) => {\n return (value: string) => setValue(value as FieldValue<DATA, NAME, VALUE>);\n };\n\n <template>\n <this.Field\n @name={{@name}}\n @label={{@label}}\n @description={{@description}}\n @value={{@value}}\n @ignoreNativeValidation={{@ignoreNativeValidation}}\n @validateOn={{@validateOn}}\n @revalidateOn={{@revalidateOn}}\n @validate={{@validate}}\n @validated={{@validated}}\n as |f|\n >\n <PhoneInput\n @value={{asString f.value}}\n @update={{this.setStringValue f.setValue}}\n @disabled={{@disabled}}\n name={{@name}}\n id={{f.id}}\n {{f.registerElement}}\n {{manageValidation errorMessageId=f.errorId invalid=f.invalid showErrors=f.showErrors}}\n ...attributes\n />\n\n {{#if (has-block \"rules\")}}\n <f.Rules as |Rule|>\n {{yield Rule to=\"rules\"}}\n </f.Rules>\n {{/if}}\n </this.Field>\n </template>\n}\n","import Component from '@glimmer/component';\n\nimport { asNumber } from '../../../-private/helpers.ts';\nimport RangeInput from '../../range-input.gts';\nimport { manageValidation } from '../manage-validation.ts';\n\nimport type { RangeInputSignature } from '../../range-input.gts';\nimport type { BoundField, FieldArgs } from '../field.gts';\nimport type { AttrValue } from '@glint/template';\nimport type { FieldNames, FieldValue, UserData } from '@hokulea/ember-pahu';\n\nexport interface RangeFieldSignature<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> {\n Element: RangeInputSignature['Element'];\n Args: FieldArgs<DATA, NAME, VALUE> &\n Omit<RangeInputSignature['Args'], 'value' | 'update'> & {\n Field: BoundField<DATA, NAME, VALUE>;\n };\n}\n\nexport default class RangeField<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> extends Component<RangeFieldSignature<DATA, NAME, VALUE>> {\n Field = this.args.Field;\n\n setNumberValue = (setValue: (value: FieldValue<DATA, NAME, VALUE>) => void) => {\n return (value: number) => setValue(value as FieldValue<DATA, NAME, VALUE>);\n };\n\n <template>\n <this.Field\n @name={{@name}}\n @label={{@label}}\n @description={{@description}}\n @value={{@value}}\n @ignoreNativeValidation={{@ignoreNativeValidation}}\n @validateOn={{@validateOn}}\n @revalidateOn={{@revalidateOn}}\n @validate={{@validate}}\n @validated={{@validated}}\n as |f|\n >\n <RangeInput\n @value={{asNumber f.value}}\n @update={{this.setNumberValue f.setValue}}\n @disabled={{@disabled}}\n @orientation={{@orientation}}\n @min={{@min}}\n @max={{@max}}\n @step={{@step}}\n name={{@name}}\n id={{f.id}}\n {{f.registerElement}}\n {{manageValidation errorMessageId=f.errorId invalid=f.invalid showErrors=f.showErrors}}\n ...attributes\n />\n </this.Field>\n </template>\n}\n","import Component from '@glimmer/component';\n\nimport { asString } from '../../../-private/helpers.ts';\nimport Select from '../../select.gts';\nimport { manageValidation } from '../manage-validation.ts';\n\nimport type { SelectSignature, Value } from '../../select.gts';\nimport type { BoundField, FieldArgs } from '../field.gts';\nimport type { AttrValue } from '@glint/template';\nimport type { FieldNames, FieldValue, UserData } from '@hokulea/ember-pahu';\n\nexport interface SelectFieldSignature<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> {\n Element: SelectSignature['Element'];\n Args: FieldArgs<DATA, NAME, VALUE> &\n Omit<SelectSignature['Args'], 'selection' | 'update'> & {\n Field: BoundField<DATA, NAME, VALUE>;\n };\n Blocks: SelectSignature['Blocks'];\n}\n\nexport default class SelectField<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> extends Component<SelectFieldSignature<DATA, NAME, VALUE>> {\n Field = this.args.Field;\n\n setValue = (setValue: (value: FieldValue<DATA, NAME, VALUE>) => void) => {\n return (value: Value | Value[]) => setValue(value as FieldValue<DATA, NAME, VALUE>);\n };\n\n <template>\n <this.Field\n @name={{@name}}\n @label={{@label}}\n @description={{@description}}\n @value={{@value}}\n @ignoreNativeValidation={{@ignoreNativeValidation}}\n @validateOn={{@validateOn}}\n @revalidateOn={{@revalidateOn}}\n @validate={{@validate}}\n @validated={{@validated}}\n as |f|\n >\n <Select\n @value={{asString f.value}}\n @update={{this.setValue f.setValue}}\n @disabled={{@disabled}}\n name={{@name}}\n id={{f.id}}\n {{f.registerElement}}\n {{manageValidation errorMessageId=f.errorId invalid=f.invalid showErrors=f.showErrors}}\n ...attributes\n as |s|\n >\n {{yield s}}\n </Select>\n </this.Field>\n </template>\n}\n","import Component from '@glimmer/component';\nimport { hash, uniqueId } from '@ember/helper';\n\nimport { element } from 'ember-element-helper';\n\nimport styles from '@hokulea/core/forms.module.css';\n\nimport { eq } from '../../../-private/helpers.ts';\nimport Radio from '../../radio.gts';\nimport Description from '../description.gts';\nimport Label from '../label.gts';\n\nimport type { RadioSignature } from '../../radio.gts';\nimport type { BoundField, FieldArgs, FieldBlock } from '../field';\nimport type { AttrValue, WithBoundArgs } from '@glint/template';\nimport type { FieldNames, FieldValue, UserData } from '@hokulea/ember-pahu';\n\nexport interface OptionSignature<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> {\n Element: RadioSignature['Element'];\n Args: {\n value: string;\n label: string;\n description?: string;\n\n /** @internal */\n name: string;\n\n /** @internal */\n disabled?: boolean;\n\n /** @internal */\n field: FieldBlock<DATA, NAME, VALUE>;\n };\n Blocks: {\n default: [];\n };\n}\n\nclass Option<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> extends Component<OptionSignature<DATA, NAME, VALUE>> {\n select = () => {\n this.args.field.setValue(this.args.value as FieldValue<DATA, NAME, VALUE>);\n };\n\n <template>\n {{#let (uniqueId) as |id|}}\n <div class={{styles.choice}} data-test-option>\n <span>\n <Radio\n @value={{eq @field.value @value}}\n @update={{this.select}}\n @disabled={{@disabled}}\n id={{id}}\n name={{@name}}\n value={{@value}}\n {{@field.registerElement}}\n ...attributes\n />\n </span>\n\n <div>\n <Label for={{id}}>{{@label}}</Label>\n\n {{#if @description}}\n <Description>{{@description}}</Description>\n {{/if}}\n\n {{yield}}\n </div>\n </div>\n {{/let}}\n </template>\n}\n\nexport interface SingularChoiceFieldSignature<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> {\n Args: FieldArgs<DATA, NAME, VALUE> & {\n disabled?: boolean;\n Field: BoundField<DATA, NAME, VALUE>;\n };\n Blocks: {\n default: [\n {\n Option: WithBoundArgs<typeof Option<DATA, NAME, VALUE>, 'field' | 'name'>;\n }\n ];\n };\n}\n\nexport default class SingularChoiceField<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> extends Component<SingularChoiceFieldSignature<DATA, NAME, VALUE>> {\n Field = this.args.Field;\n Option = Option<DATA, NAME, VALUE>;\n\n <template>\n <this.Field\n @element={{element \"fieldset\"}}\n @labelComponent={{component Label element=(element \"legend\")}}\n @name={{@name}}\n @label={{@label}}\n @description={{@description}}\n @value={{@value}}\n @ignoreNativeValidation={{@ignoreNativeValidation}}\n @validateOn={{@validateOn}}\n @revalidateOn={{@revalidateOn}}\n @validate={{@validate}}\n @validated={{@validated}}\n as |f|\n >\n <div class={{styles.choices}} data-test-choices>\n {{yield (hash Option=(component this.Option field=f name=@name disabled=@disabled))}}\n </div>\n </this.Field>\n </template>\n}\n","import Component from '@glimmer/component';\n\nimport { asString } from '../../../-private/helpers.ts';\nimport TextInput from '../../../components/text-input.gts';\nimport { manageValidation } from '../manage-validation.ts';\n\nimport type { TextInputSignature } from '../../../components/text-input.gts';\nimport type { BoundField, FieldArgs } from '../field.gts';\nimport type { RulesBlock } from '../rules.gts';\nimport type { AttrValue } from '@glint/template';\nimport type { FieldNames, FieldValue, UserData } from '@hokulea/ember-pahu';\n\nexport interface TextFieldSignature<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> {\n Element: TextInputSignature['Element'];\n Args: FieldArgs<DATA, NAME, VALUE> &\n Omit<TextInputSignature['Args'], 'value' | 'update'> & {\n Field: BoundField<DATA, NAME, VALUE>;\n };\n Blocks: RulesBlock;\n}\n\nexport default class TextField<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> extends Component<TextFieldSignature<DATA, NAME, VALUE>> {\n Field = this.args.Field;\n\n setStringValue = (setValue: (value: FieldValue<DATA, NAME, VALUE>) => void) => {\n return (value: string) => setValue(value as FieldValue<DATA, NAME, VALUE>);\n };\n\n <template>\n <@Field\n @name={{@name}}\n @label={{@label}}\n @description={{@description}}\n @value={{@value}}\n @ignoreNativeValidation={{@ignoreNativeValidation}}\n @validateOn={{@validateOn}}\n @revalidateOn={{@revalidateOn}}\n @validate={{@validate}}\n @validated={{@validated}}\n as |f|\n >\n <TextInput\n @value={{asString f.value}}\n @update={{this.setStringValue f.setValue}}\n @disabled={{@disabled}}\n name={{@name}}\n id={{f.id}}\n {{f.registerElement}}\n {{manageValidation errorMessageId=f.errorId invalid=f.invalid showErrors=f.showErrors}}\n ...attributes\n />\n\n {{#if (has-block \"rules\")}}\n <f.Rules as |Rule|>\n {{yield Rule to=\"rules\"}}\n </f.Rules>\n {{/if}}\n </@Field>\n </template>\n}\n","import Component from '@glimmer/component';\n\nimport { asString } from '../../../-private/helpers.ts';\nimport TextArea from '../../text-area.gts';\nimport { manageValidation } from '../manage-validation.ts';\n\nimport type { TextAreaSignature } from '../../text-area.gts';\nimport type { BoundField, FieldArgs } from '../field.gts';\nimport type { AttrValue } from '@glint/template';\nimport type { FieldNames, FieldValue, UserData } from '@hokulea/ember-pahu';\n\nexport interface TextAreaFieldSignature<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> {\n Element: TextAreaSignature['Element'];\n Args: FieldArgs<DATA, NAME, VALUE> &\n Omit<TextAreaSignature['Args'], 'value' | 'update'> & {\n Field: BoundField<DATA, NAME, VALUE>;\n };\n}\n\nexport default class TextAreaField<\n DATA extends UserData,\n NAME extends string = FieldNames<DATA> | (string & {}),\n VALUE = NAME extends keyof DATA ? DATA[NAME] : AttrValue\n> extends Component<TextAreaFieldSignature<DATA, NAME, VALUE>> {\n Field = this.args.Field;\n\n setStringValue = (setValue: (value: FieldValue<DATA, NAME, VALUE>) => void) => {\n return (value: string) => setValue(value as FieldValue<DATA, NAME, VALUE>);\n };\n\n <template>\n <this.Field\n @name={{@name}}\n @label={{@label}}\n @description={{@description}}\n @value={{@value}}\n @ignoreNativeValidation={{@ignoreNativeValidation}}\n @validateOn={{@validateOn}}\n @revalidateOn={{@revalidateOn}}\n @validate={{@validate}}\n @validated={{@validated}}\n as |f|\n >\n <TextArea\n @value={{asString f.value}}\n @update={{this.setStringValue f.setValue}}\n @disabled={{@disabled}}\n name={{@name}}\n id={{f.id}}\n {{f.registerElement}}\n {{manageValidation errorMessageId=f.errorId invalid=f.invalid showErrors=f.showErrors}}\n ...attributes\n />\n </this.Field>\n </template>\n}\n","import styles from '@hokulea/core/actions.module.css';\n\nimport disabled from '../../-private/modifiers/disabled.ts';\n\nimport type { TOC } from '@ember/component/template-only';\nimport type { Importance, Importances, Intent, Intents, Spacing, Spacings } from '@hokulea/tokens';\n\nexport interface ResetSignature {\n Element: HTMLButtonElement;\n Args: {\n intent?: Intent | Intents;\n importance?: Importance | Importances;\n spacing?: Spacing | Spacings;\n disabled?: boolean;\n };\n Blocks: {\n /** The label for the button */\n default: [];\n\n /** The label for the button */\n label: [];\n\n /** A slot in front of the label */\n before: [];\n\n /** A slot after the label */\n after: [];\n };\n}\n\nconst Reset: TOC<ResetSignature> = <template>\n <button\n type=\"reset\"\n class={{styles.button}}\n data-intent={{if @intent @intent \"action\"}}\n data-importance={{if @importance @importance \"supreme\"}}\n data-spacing={{@spacing}}\n {{disabled when=(if @disabled @disabled false)}}\n data-test-button\n ...attributes\n >\n {{#if (has-block \"before\")}}\n <span data-test-button=\"before\">\n {{yield to=\"before\"}}\n </span>\n {{/if}}\n\n <span data-test-button=\"label\">\n {{#if (has-block \"label\")}}\n {{yield to=\"label\"}}\n {{/if}}\n\n {{#if (has-block)}}\n {{yield}}\n {{/if}}\n </span>\n\n {{#if (has-block \"after\")}}\n <span data-test-button=\"after\">\n {{yield to=\"after\"}}\n </span>\n {{/if}}\n </button>\n</template>;\n\nexport default Reset;\n","import styles from '@hokulea/core/actions.module.css';\n\nimport disabled from '../../-private/modifiers/disabled.ts';\n\nimport type { TOC } from '@ember/component/template-only';\nimport type { Importance, Importances, Intent, Intents, Spacing, Spacings } from '@hokulea/tokens';\n\nexport interface SubmitSignature {\n Element: HTMLButtonElement;\n Args: {\n intent?: Intent | Intents;\n importance?: Importance | Importances;\n spacing?: Spacing | Spacings;\n disabled?: boolean;\n };\n Blocks: {\n /** The label for the button */\n default: [];\n\n /** The label for the button */\n label: [];\n\n /** A slot in front of the label */\n before: [];\n\n /** A slot after the label */\n after: [];\n };\n}\n\nconst Submit: TOC<SubmitSignature> = <template>\n <button\n type=\"submit\"\n class={{styles.button}}\n data-intent={{if @intent @intent \"action\"}}\n data-importance={{if @importance @importance \"supreme\"}}\n data-spacing={{@spacing}}\n {{disabled when=(if @disabled @disabled false)}}\n data-test-button\n ...attributes\n >\n {{#if (has-block \"before\")}}\n <span data-test-button=\"before\">\n {{yield to=\"before\"}}\n </span>\n {{/if}}\n\n <span data-test-button=\"label\">\n {{#if (has-block \"label\")}}\n {{yield to=\"label\"}}\n {{/if}}\n\n {{#if (has-block)}}\n {{yield}}\n {{/if}}\n </span>\n\n {{#if (has-block \"after\")}}\n <span data-test-button=\"after\">\n {{yield to=\"after\"}}\n </span>\n {{/if}}\n </button>\n</template>;\n\nexport default Submit;\n","import Component from '@glimmer/component';\nimport { hash } from '@ember/helper';\n\nimport styles from '@hokulea/core/forms.module.css';\nimport { createForm } from '@hokulea/ember-pahu';\n\nimport Field from './field.gts';\nimport CheckboxField from './fields/checkbox.gts';\nimport CurrencyField from './fields/currency.gts';\nimport DateField from './fields/date.gts';\nimport EmailField from './fields/email.gts';\nimport ListField from './fields/list.gts';\nimport MultipleChoiceField from './fields/multiple-choice.gts';\nimport NumberField from './fields/number.gts';\nimport PasswordField from './fields/password.gts';\nimport PhoneField from './fields/phone.gts';\nimport RangeField from './fields/range.gts';\nimport SelectField from './fields/select.gts';\nimport SingularChoiceField from './fields/singular-choice.gts';\nimport TextField from './fields/text.gts';\nimport TextAreaField from './fields/text-area.gts';\nimport Reset from './reset.gts';\nimport Submit from './submit.gts';\n\nimport type { BoundField } from './field.gts';\nimport type { WithBoundArgs } from '@glint/template';\nimport type { FormAPI, FormConfig, UserData } from '@hokulea/ember-pahu';\n\nexport interface FormBuilder<DATA extends UserData> {\n Checkbox: WithBoundArgs<typeof CheckboxField<DATA>, 'Field'>;\n Currency: WithBoundArgs<typeof CurrencyField<DATA>, 'Field'>;\n Date: WithBoundArgs<typeof DateField<DATA>, 'Field'>;\n Email: WithBoundArgs<typeof EmailField<DATA>, 'Field'>;\n List: WithBoundArgs<typeof ListField<DATA>, 'Field'>;\n MultipleChoice: WithBoundArgs<typeof MultipleChoiceField<DATA>, 'Field'>;\n Number: WithBoundArgs<typeof NumberField<DATA>, 'Field'>;\n Range: WithBoundArgs<typeof RangeField<DATA>, 'Field'>;\n Password: WithBoundArgs<typeof PasswordField<DATA>, 'Field'>;\n Phone: WithBoundArgs<typeof PhoneField<DATA>, 'Field'>;\n Select: WithBoundArgs<typeof SelectField<DATA>, 'Field'>;\n SingularChoice: WithBoundArgs<typeof SingularChoiceField<DATA>, 'Field'>;\n Text: WithBoundArgs<typeof TextField<DATA>, 'Field'>;\n TextArea: WithBoundArgs<typeof TextAreaField<DATA>, 'Field'>;\n Field: BoundField<DATA>;\n Submit: typeof Submit;\n Reset: typeof Reset;\n\n /**\n * Will be true if at least one form field is invalid.\n */\n invalid: boolean;\n\n /**\n * Yielded action that will trigger form validation and submission, same as when triggering the native `submit` event on the form.\n */\n submit: FormAPI<DATA>['submit'];\n\n /**\n * Yielded action that will reset form state, same as when triggering the native `reset` event on the form.\n */\n reset: FormAPI<DATA>['reset'];\n\n /**\n * Trigger validation on the form\n */\n validate: FormAPI<DATA>['validate'];\n\n /* @TODO: Remove, for debug only */\n form: ReturnType<typeof createForm<DATA>>;\n}\n\nexport interface FormSignature<DATA extends UserData> {\n Element: HTMLFormElement;\n Args: FormConfig<DATA>;\n Blocks: {\n default: [FormBuilder<DATA>];\n };\n}\n\nexport default class Form<DATA extends UserData> extends Component<FormSignature<DATA>> {\n Field = Field<DATA>;\n CheckboxField = CheckboxField<DATA>;\n CurrencyField = CurrencyField<DATA>;\n DateField = DateField<DATA>;\n EmailField = EmailField<DATA>;\n ListField = ListField<DATA>;\n MultipleChoiceField = MultipleChoiceField<DATA>;\n NumberField = NumberField<DATA>;\n PasswordField = PasswordField<DATA>;\n PhoneField = PhoneField<DATA>;\n RangeField = RangeField<DATA>;\n SelectField = SelectField<DATA>;\n SingularChoiceField = SingularChoiceField<DATA>;\n TextAreaField = TextAreaField<DATA>;\n TextField = TextField<DATA>;\n\n <template>\n {{#let\n (createForm\n data=@data\n ignoreNativeValidation=@ignoreNativeValidation\n validateOn=@validateOn\n revalidateOn=@revalidateOn\n submit=@submit\n validate=@validate\n validated=@validated\n )\n as |f|\n }}\n <form novalidate class={{styles.form}} data-test-form ...attributes {{f.registerElement}}>\n {{#let (component this.Field form=f) as |WiredField|}}\n {{yield\n (hash\n invalid=f.invalid\n submit=f.submit\n Field=WiredField\n Checkbox=(component this.CheckboxField Field=WiredField)\n Currency=(component this.CurrencyField Field=WiredField)\n Date=(component this.DateField Field=WiredField)\n Email=(component this.EmailField Field=WiredField)\n List=(component this.ListField Field=WiredField)\n MultipleChoice=(component this.MultipleChoiceField Field=WiredField)\n Number=(component this.NumberField Field=WiredField)\n Password=(component this.PasswordField Field=WiredField)\n Phone=(component this.PhoneField Field=WiredField)\n Range=(component this.RangeField Field=WiredField)\n Select=(component this.SelectField Field=WiredField)\n SingularChoice=(component this.SingularChoiceField Field=WiredField)\n TextArea=(component this.TextAreaField Field=WiredField)\n Text=(component this.TextField Field=WiredField)\n Submit=Submit\n Reset=Reset\n form=f\n )\n }}\n {{/let}}\n </form>\n {{/let}}\n </template>\n}\n"],"names":["Description","setComponentTemplate","precompileTemplate","strictMode","scope","styles","templateOnly","Errors","Label","element","ErrorIcon","ValidIcon","Rule","Component","isInvalid","args","errors","some","i","key","value","Icon","Rules","constructor","owner","useRules","Field","g","prototype","tracked","void 0","validateOn","rulesUsed","revalidateOn","createOrUpdateField","config","filteredConfig","Object","fromEntries","entries","filter","_","v","undefined","updateConfig","form","createField","next","validate","showErrors","uniqueId","hash","and","manageValidation","modifier","invalid","errorMessageId","ariaInvalid","setAttribute","removeAttribute","parentElement","dataset","CheckboxField","setBooleanValue","setValue","Checkbox","asBoolean","CurrencyField","setNumberValue","CurrencyInput","asNumber","DateField","setStringValue","DateInput","asString","EmailField","EmailInput","ListLabel","ListField","List","asValue","Option","select","checked","field","values","index","indexOf","Array","isArray","splice","includes","issues","length","MultipleChoiceField","asMultiField","NumberField","NumberInput","PasswordField","PasswordInput","PhoneField","PhoneInput","RangeField","RangeInput","SelectField","Select","Radio","eq","SingularChoiceField","TextField","TextInput","TextAreaField","TextArea","Reset","disabled","Submit","Form","createForm"],"mappings":"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"}
@@ -65,11 +65,8 @@ const popover = helper((_, {
65
65
  closed?.();
66
66
  }
67
67
  };
68
-
69
- // @ts-expect-error c'mon typescript
70
68
  element.addEventListener('toggle', toggleHandler);
71
69
  return () => {
72
- // @ts-expect-error c'mon typescript
73
70
  element.removeEventListener('toggle', toggleHandler);
74
71
  };
75
72
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"popover.js","sources":["../../src/helpers/popover.ts"],"sourcesContent":["import { tracked } from '@glimmer/tracking';\nimport { helper } from '@ember/component/helper';\nimport { uniqueId } from '@ember/helper';\n\nimport { computePosition, flip, type Placement } from '@floating-ui/dom';\nimport { modifier } from 'ember-modifier';\n\ninterface PopoverArgs {\n position?: Placement;\n opened?: () => void;\n closed?: () => void;\n}\n\nclass State {\n @tracked id = uniqueId();\n @tracked opened = false;\n}\n\nconst popover = helper((_, { position, opened, closed }: PopoverArgs) => {\n const state = new State();\n let triggerElement: HTMLElement | undefined;\n let targetElement: HTMLElement | undefined;\n\n return {\n trigger: modifier((element: HTMLElement) => {\n element.setAttribute('popovertarget', state.id);\n triggerElement = element;\n }),\n target: modifier((element: HTMLElement, __, { manual }: { manual?: boolean }) => {\n element.setAttribute('popover', manual ? 'manual' : '');\n targetElement = element;\n\n if (element.id) {\n state.id = element.id;\n } else {\n element.id = state.id;\n }\n\n const toggleHandler = (event: ToggleEvent) => {\n state.opened = event.newState === 'open';\n\n if (event.newState === 'open') {\n if (position && triggerElement) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n computePosition(triggerElement, element, {\n placement: position,\n middleware: [flip()]\n }).then(({ x, y }): void => {\n Object.assign(element.style, {\n left: `${String(x)}px`,\n top: `${String(y)}px`\n });\n });\n }\n\n opened?.();\n } else if (event.newState === 'closed') {\n closed?.();\n }\n };\n\n // @ts-expect-error c'mon typescript\n element.addEventListener('toggle', toggleHandler);\n\n return () => {\n // @ts-expect-error c'mon typescript\n element.removeEventListener('toggle', toggleHandler);\n };\n }),\n get opened() {\n return state.opened;\n },\n open: () => {\n targetElement?.showPopover();\n },\n close: () => {\n targetElement?.hidePopover();\n }\n };\n});\n\nexport default popover;\n"],"names":["State","g","prototype","tracked","uniqueId","i","void 0","popover","helper","_","position","opened","closed","state","triggerElement","targetElement","trigger","modifier","element","setAttribute","id","target","__","manual","toggleHandler","event","newState","computePosition","placement","middleware","flip","then","x","y","Object","assign","style","left","String","top","addEventListener","removeEventListener","open","showPopover","close","hidePopover"],"mappings":"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"}
1
+ {"version":3,"file":"popover.js","sources":["../../src/helpers/popover.ts"],"sourcesContent":["import { tracked } from '@glimmer/tracking';\nimport { helper } from '@ember/component/helper';\nimport { uniqueId } from '@ember/helper';\n\nimport { computePosition, flip, type Placement } from '@floating-ui/dom';\nimport { modifier } from 'ember-modifier';\n\ninterface PopoverArgs {\n position?: Placement;\n opened?: () => void;\n closed?: () => void;\n}\n\nclass State {\n @tracked id = uniqueId();\n @tracked opened = false;\n}\n\nconst popover = helper((_, { position, opened, closed }: PopoverArgs) => {\n const state = new State();\n let triggerElement: HTMLElement | undefined;\n let targetElement: HTMLElement | undefined;\n\n return {\n trigger: modifier((element: HTMLElement) => {\n element.setAttribute('popovertarget', state.id);\n triggerElement = element;\n }),\n target: modifier((element: HTMLElement, __, { manual }: { manual?: boolean }) => {\n element.setAttribute('popover', manual ? 'manual' : '');\n targetElement = element;\n\n if (element.id) {\n state.id = element.id;\n } else {\n element.id = state.id;\n }\n\n const toggleHandler = (event: ToggleEvent) => {\n state.opened = event.newState === 'open';\n\n if (event.newState === 'open') {\n if (position && triggerElement) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n computePosition(triggerElement, element, {\n placement: position,\n middleware: [flip()]\n }).then(({ x, y }): void => {\n Object.assign(element.style, {\n left: `${String(x)}px`,\n top: `${String(y)}px`\n });\n });\n }\n\n opened?.();\n } else if (event.newState === 'closed') {\n closed?.();\n }\n };\n\n element.addEventListener('toggle', toggleHandler);\n\n return () => {\n element.removeEventListener('toggle', toggleHandler);\n };\n }),\n get opened() {\n return state.opened;\n },\n open: () => {\n targetElement?.showPopover();\n },\n close: () => {\n targetElement?.hidePopover();\n }\n };\n});\n\nexport default popover;\n"],"names":["State","g","prototype","tracked","uniqueId","i","void 0","popover","helper","_","position","opened","closed","state","triggerElement","targetElement","trigger","modifier","element","setAttribute","id","target","__","manual","toggleHandler","event","newState","computePosition","placement","middleware","flip","then","x","y","Object","assign","style","left","String","top","addEventListener","removeEventListener","open","showPopover","close","hidePopover"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -15,7 +15,7 @@ export { default as RangeInput } from './components/range-input.js';
15
15
  export { default as Select } from './components/select.js';
16
16
  export { default as TextArea } from './components/text-area.js';
17
17
  export { default as TextInput } from './components/text-input.js';
18
- export { default as Form } from './components/form.js';
18
+ export { F as Form } from './form-DBuzL4_0.js';
19
19
  export { default as AppHeader } from './components/app-header.js';
20
20
  export { default as Menu } from './components/menu.js';
21
21
  export { default as Page } from './components/page.js';
@@ -260,6 +260,11 @@ class FieldError extends PageObject {
260
260
  return this.element?.getAttribute('data-test-error-value');
261
261
  }
262
262
  }
263
+ class FieldRule extends PageObject {
264
+ get invalid() {
265
+ return Boolean(this.element?.getAttribute('data-test-rule-invalid'));
266
+ }
267
+ }
263
268
  class FieldPageObject extends PageObject {
264
269
  static SELECTOR = '[data-test-field]';
265
270
  constructor(selector, parent, index) {
@@ -281,6 +286,7 @@ class FieldPageObject extends PageObject {
281
286
  $list = selector(ListPageObject.SELECTOR, ListPageObject);
282
287
  $choices = selector(ChoicesPageObject.SELECTOR, ChoicesPageObject);
283
288
  $errors = selector('[data-test-error]', FieldError);
289
+ $rules = selector('[data-test-rule]', FieldRule);
284
290
  get $control() {
285
291
  if (this.$inputBuilder.element) {
286
292
  return this.$inputBuilder;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/test-support/page-objects/icon.ts","../../src/test-support/page-objects/icon-button.ts","../../src/test-support/page-objects/menu.ts","../../src/test-support/page-objects/app-header.ts","../../src/test-support/page-objects/button.ts","../../src/test-support/page-objects/choice.ts","../../src/test-support/page-objects/input.ts","../../src/test-support/page-objects/input-builder.ts","../../src/test-support/page-objects/list.ts","../../src/test-support/page-objects/select.ts","../../src/test-support/page-objects/text-area.ts","../../src/test-support/page-objects/-private/choices.ts","../../src/test-support/page-objects/-private/field.ts","../../src/test-support/page-objects/form.ts","../../src/test-support/page-objects/page.ts","../../src/test-support/page-objects/pill-button.ts","../../src/test-support/page-objects/popover.ts","../../src/test-support/page-objects/section.ts","../../src/test-support/page-objects/tabs.ts"],"sourcesContent":["import { PageObject, selector as sel } from 'fractal-page-object';\n\nimport type { ElementLike } from 'fractal-page-object';\n\nexport class IconPageObject extends PageObject<HTMLSpanElement> {\n static SELECTOR = '[data-test-icon]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? IconPageObject.SELECTOR, parent, index);\n }\n\n $svg = sel<SVGSVGElement>('svg');\n // $svg = sel<HTMLElement>('svg');\n}\n","import { click } from '@ember/test-helpers';\n\nimport { PageObject, selector as sel } from 'fractal-page-object';\n\nimport { IconPageObject } from './icon.ts';\n\nimport type { ElementLike } from 'fractal-page-object';\n\nexport class IconButtonPageObject extends PageObject<\n HTMLButtonElement | HTMLAnchorElement | HTMLSpanElement\n> {\n static SELECTOR = '[data-test-icon-button]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? IconButtonPageObject.SELECTOR, parent, index);\n }\n\n get intent(): string | null | undefined {\n return this.element?.getAttribute('data-intent');\n }\n\n get importance(): string | null | undefined {\n return this.element?.getAttribute('data-importance');\n }\n\n get spacing(): string | null | undefined {\n return this.element?.getAttribute('data-spacing');\n }\n\n async push() {\n if (this.element) {\n await click(this.element);\n }\n }\n\n $icon = sel('[data-test-icon-button=\"icon\"]', IconPageObject);\n}\n","import { globalSelector, PageObject, selector as sel } from 'fractal-page-object';\n\nimport type { Menu, MenuElement, MenuItem, MenuItemElement } from './-menu.ts';\nimport type { ElementLike } from 'fractal-page-object';\n\nexport class MenuItemPageObject extends PageObject<MenuItemElement> implements MenuItem {\n static SELECTOR = '[role=\"menuitem\"]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? MenuItemPageObject.SELECTOR, parent, index);\n }\n\n get disabled() {\n return Boolean(this.element?.hasAttribute('aria-disabled'));\n }\n\n get expanded(): boolean {\n return Boolean(this.menu?.element?.matches(':popover-open'));\n }\n\n hasMenu() {\n return this.element?.getAttribute('aria-haspopup') === 'menu';\n }\n\n protected get menuId() {\n return this.element?.getAttribute('popovertarget');\n }\n\n protected get menu(): Menu | undefined {\n return this.menuId\n ? // eslint-disable-next-line @typescript-eslint/no-use-before-define\n globalSelector<MenuElement, Menu>(`#${this.menuId}`, MenuPageObject)\n : undefined;\n }\n\n get $menu() {\n return this.menu;\n }\n}\n\nexport class MenuPageObject extends PageObject<MenuElement> implements Menu {\n static SELECTOR = '[data-test-menu]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? MenuPageObject.SELECTOR, parent, index);\n }\n\n get control() {\n return this.element as HTMLDivElement;\n }\n\n $item = sel<MenuItemElement, MenuItem>(MenuItemPageObject.SELECTOR, MenuItemPageObject);\n}\n","import { PageObject, selector as sel } from 'fractal-page-object';\n\nimport { IconButtonPageObject } from './icon-button.ts';\nimport { MenuItemPageObject } from './menu.ts';\n\nimport type { Menu, MenuItem, MenuItemElement } from './-menu.ts';\nimport type { ElementLike } from 'fractal-page-object';\n\nclass AppNavPageObject extends PageObject<HTMLElement> implements Menu<HTMLElement> {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n $item = sel<MenuItemElement, MenuItem>(NavItemPageObject.SELECTOR, NavItemPageObject);\n}\n\nexport class NavItemPageObject extends MenuItemPageObject implements MenuItem {\n static SELECTOR = '[part=\"item\"]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? NavItemPageObject.SELECTOR, parent, index);\n }\n\n hasMenu() {\n return super.hasMenu() || this.element?.tagName.toLowerCase() === 'summary';\n }\n\n isPopupNavItem() {\n return (\n this.element?.tagName.toLowerCase() === 'summary' ||\n this.element?.parentElement?.tagName === 'details'\n );\n }\n\n get expanded() {\n return Boolean(\n this.isPopupNavItem()\n ? (this.element?.parentElement as HTMLElement).matches('[open]')\n : super.expanded\n );\n }\n\n get $menu(): Menu | undefined {\n if (this.isPopupNavItem()) {\n return sel<HTMLElement, Menu>('+ div', AppNavPageObject);\n }\n\n return this.menu;\n }\n}\n\nexport class AppHeaderPageObject extends PageObject<HTMLElement> {\n static SELECTOR = '[data-test-app-header]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? AppHeaderPageObject.SELECTOR, parent, index);\n }\n\n get #prefix() {\n if (this.$menu.element) {\n return '[part=\"menu\"]';\n }\n\n return '';\n }\n\n get $brand() {\n return sel<HTMLDivElement>(`${this.#prefix} [part=\"brand\"]`);\n }\n\n get $nav() {\n return sel(`${this.#prefix} nav`, AppNavPageObject);\n }\n\n get $aux() {\n return sel<HTMLSpanElement>(`${this.#prefix} [part=\"aux\"]`);\n }\n\n $menu = sel(\n '[part=\"menu\"]',\n class extends PageObject<HTMLSpanElement> {\n $toggle = sel('[data-test-toggle]', IconButtonPageObject);\n\n $popover = sel(\n '[popover]',\n class extends PageObject<HTMLElement> {\n get expanded() {\n return Boolean(this.element?.matches(':popover-open'));\n }\n }\n );\n }\n );\n}\n","import { click } from '@ember/test-helpers';\n\nimport { PageObject, selector as sel } from 'fractal-page-object';\n\nimport type { ElementLike } from 'fractal-page-object';\n\nexport class ButtonPageObject extends PageObject<\n HTMLButtonElement | HTMLAnchorElement | HTMLSpanElement\n> {\n static SELECTOR = '[data-test-button]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? ButtonPageObject.SELECTOR, parent, index);\n }\n\n get intent(): string | null | undefined {\n return this.element?.getAttribute('data-intent');\n }\n\n get importance(): string | null | undefined {\n return this.element?.getAttribute('data-importance');\n }\n\n get spacing(): string | null | undefined {\n return this.element?.getAttribute('data-spacing');\n }\n\n $before = sel<HTMLSpanElement>('[data-test-button=\"before\"]');\n $label = sel<HTMLSpanElement>('[data-test-button=\"label\"]');\n $after = sel<HTMLSpanElement>('[data-test-button=\"after\"]');\n\n async push() {\n if (this.element) {\n await click(this.element);\n }\n }\n}\n","import { PageObject } from 'fractal-page-object';\n\nimport type { Input } from './input.ts';\nimport type { ElementLike } from 'fractal-page-object';\n\nclass ChoicePageObject extends PageObject<HTMLInputElement> implements Input {\n static SELECTOR = '[data-test-choice]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? ChoicePageObject.SELECTOR, parent, index);\n }\n\n get control() {\n return this.element as HTMLInputElement;\n }\n}\n\nexport const RadioPageObject = ChoicePageObject;\nexport const CheckboxPageObject = ChoicePageObject;\n","import { PageObject } from 'fractal-page-object';\n\nimport type { ElementLike } from 'fractal-page-object';\n\nexport interface Input extends PageObject {\n control: HTMLInputElement;\n}\n\nexport class InputPageObject extends PageObject<HTMLInputElement> implements Input {\n static SELECTOR = '[data-test-input]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? InputPageObject.SELECTOR, parent, index);\n }\n\n get control() {\n return this.element as HTMLInputElement;\n }\n}\n\nexport class RangeInputPageObject extends InputPageObject {\n get orientation(): string | undefined {\n return this.control.dataset.orientation;\n }\n}\nexport const NumberInputPageObject = InputPageObject;\nexport const TextInputPageObject = InputPageObject;\nexport const PhoneInputPageObject = InputPageObject;\nexport const DateInputPageObject = InputPageObject;\nexport const EmailInputPageObject = InputPageObject;\nexport const PasswordInputPageObject = InputPageObject;\n","import { PageObject, selector as sel } from 'fractal-page-object';\n\nimport { InputPageObject } from './input.ts';\n\nimport type { Input } from './input.ts';\nimport type { ElementLike } from 'fractal-page-object';\n\nexport class InputBuilderPageObject extends PageObject<HTMLInputElement> implements Input {\n static SELECTOR = '[data-test-input-builder]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? InputBuilderPageObject.SELECTOR, parent, index);\n }\n\n $prefix = sel<HTMLSpanElement>('[data-test-input-builder=\"prefix\"]');\n $affix = sel<HTMLSpanElement>('[data-test-input-builder=\"affix\"]');\n $suffix = sel<HTMLSpanElement>('[data-test-input-builder=\"suffix\"]');\n $input = sel(InputPageObject.SELECTOR, InputPageObject);\n\n get control() {\n return this.$input.element as HTMLInputElement;\n }\n}\n\nexport const CurrencyInputPageObject = InputBuilderPageObject;\n","import { PageObject, selector as sel } from 'fractal-page-object';\n\nimport { selectListbox } from 'ember-aria-voyager/test-support';\n\nimport type { Target } from '@ember/test-helpers';\nimport type { ElementLike } from 'fractal-page-object';\n\nexport class ListPageObject extends PageObject<HTMLDivElement> {\n static SELECTOR = '[data-test-list]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? ListPageObject.SELECTOR, parent, index);\n }\n\n get control() {\n return this.element as HTMLDivElement;\n }\n\n $option = sel<HTMLOptionElement>('[role=\"option\"]');\n\n async select(options: string | string[]) {\n await selectListbox(this.element as Target, options);\n }\n}\n","import { select } from '@ember/test-helpers';\n\nimport { PageObject, selector as sel } from 'fractal-page-object';\n\nimport type { Target } from '@ember/test-helpers';\nimport type { ElementLike } from 'fractal-page-object';\n\nexport class SelectPageObject extends PageObject<HTMLSelectElement> {\n static SELECTOR = '[data-test-select]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? SelectPageObject.SELECTOR, parent, index);\n }\n\n get control() {\n return this.element as HTMLSelectElement;\n }\n\n $option = sel<HTMLOptionElement>('option');\n\n async select(options: string | string[], keepPreviouslySelected?: boolean) {\n await select(this.element as Target, options, keepPreviouslySelected);\n }\n}\n","import { PageObject } from 'fractal-page-object';\n\nimport type { Input } from './input.ts';\nimport type { ElementLike } from 'fractal-page-object';\n\nexport class TextAreaPageObject extends PageObject<HTMLInputElement> implements Input {\n static SELECTOR = '[data-test-textarea]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? TextAreaPageObject.SELECTOR, parent, index);\n }\n\n get control() {\n return this.element as HTMLInputElement;\n }\n}\n","import { PageObject, selector as sel } from 'fractal-page-object';\n\nimport type { ElementLike } from 'fractal-page-object';\n\nexport class OptionPageObject extends PageObject<HTMLDivElement> {\n $label = sel<HTMLLabelElement | HTMLLegendElement>('[data-test-label]');\n $description = sel<HTMLParagraphElement>('[data-test-description]');\n $control = sel<HTMLInputElement>('input');\n}\n\nexport class ChoicesPageObject extends PageObject<HTMLDivElement | HTMLFieldSetElement> {\n static SELECTOR = '[data-test-choices]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? ChoicesPageObject.SELECTOR, parent, index);\n }\n\n $options = sel('[data-test-option]', OptionPageObject);\n\n option(value: string) {\n return this.$options.find(\n (option) => option.$control.element?.value === value\n ) as OptionPageObject;\n }\n}\n","import { PageObject, selector as sel } from 'fractal-page-object';\n\nimport { CheckboxPageObject } from '../choice.ts';\nimport { InputPageObject } from '../input.ts';\nimport { InputBuilderPageObject } from '../input-builder.ts';\nimport { ListPageObject } from '../list.ts';\nimport { SelectPageObject } from '../select.ts';\nimport { TextAreaPageObject } from '../text-area.ts';\nimport { ChoicesPageObject } from './choices.ts';\n\nimport type { RangeInputPageObject } from '../input';\nimport type { ElementLike } from 'fractal-page-object';\n\nexport class FieldError extends PageObject<HTMLDivElement> {\n get type() {\n return this.element?.getAttribute('data-test-error-type');\n }\n\n get value() {\n return this.element?.getAttribute('data-test-error-value');\n }\n}\n\nexport class FieldPageObject extends PageObject<HTMLDivElement | HTMLFieldSetElement> {\n static SELECTOR = '[data-test-field]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? FieldPageObject.SELECTOR, parent, index);\n }\n\n $label = sel<HTMLLabelElement | HTMLLegendElement>('[data-test-label]');\n $description = sel<HTMLParagraphElement>('[data-test-description]');\n // $control = sel<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>(\n // 'input,select,textarea'\n // );\n\n // controls\n\n private $input = sel(InputPageObject.SELECTOR, InputPageObject);\n private $inputBuilder = sel(InputBuilderPageObject.SELECTOR, InputBuilderPageObject);\n private $select = sel(SelectPageObject.SELECTOR, SelectPageObject);\n private $textArea = sel(TextAreaPageObject.SELECTOR, TextAreaPageObject);\n private $checkbox = sel(CheckboxPageObject.SELECTOR, CheckboxPageObject);\n private $list = sel(ListPageObject.SELECTOR, ListPageObject);\n\n $choices = sel(ChoicesPageObject.SELECTOR, ChoicesPageObject);\n $errors = sel('[data-test-error]', FieldError);\n\n get $control():\n | InputPageObject\n | RangeInputPageObject\n | InputBuilderPageObject\n | SelectPageObject\n | TextAreaPageObject\n | ListPageObject {\n if (this.$inputBuilder.element) {\n return this.$inputBuilder;\n }\n\n if (this.$checkbox.element) {\n return this.$checkbox;\n }\n\n if (this.$input.element?.type === 'range') {\n return this.$input as RangeInputPageObject;\n }\n\n if (this.$input.element) {\n return this.$input;\n }\n\n if (this.$select.element) {\n return this.$select;\n }\n\n if (this.$textArea.element) {\n return this.$textArea;\n }\n\n if (this.$list.element) {\n return this.$list;\n }\n\n return this.$input; // @TODO bad fallback for now\n }\n\n get name() {\n return this.element?.getAttribute('data-test-field');\n }\n}\n","import { triggerEvent } from '@ember/test-helpers';\n\nimport { PageObject, selector as sel } from 'fractal-page-object';\n\nimport { FieldPageObject } from './-private/field.ts';\nimport { ButtonPageObject } from './button.ts';\n\nimport type { ElementLike } from 'fractal-page-object';\n\nexport type { OptionPageObject } from './-private/choices.ts';\nexport type { FieldError } from './-private/field.ts';\n\nexport class FormPageObject extends PageObject<HTMLFormElement> {\n static SELECTOR = '[data-test-form]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? FormPageObject.SELECTOR, parent, index);\n }\n\n $submit = sel('button[type=\"submit\"]', ButtonPageObject);\n $reset = sel('button[type=\"reset\"]', ButtonPageObject);\n\n $fields = sel(FieldPageObject.SELECTOR, FieldPageObject);\n\n field(name: string) {\n return this.$fields.find((field) => field.name === name) as FieldPageObject;\n }\n\n async submit() {\n await triggerEvent(this.element as HTMLFormElement, 'submit');\n }\n\n async reset() {\n await triggerEvent(this.element as HTMLFormElement, 'reset');\n }\n}\n","import { PageObject, selector as sel } from 'fractal-page-object';\n\nimport type { ElementLike } from 'fractal-page-object';\n\nexport class PagePageObject extends PageObject<\n HTMLButtonElement | HTMLAnchorElement | HTMLSpanElement\n> {\n static SELECTOR = '[data-test-page]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? PagePageObject.SELECTOR, parent, index);\n }\n\n $header = sel<HTMLElement>('header');\n\n $title = sel<HTMLHeadingElement>('header > h1');\n $description = sel<HTMLParagraphElement>('header > p');\n $nav = sel<HTMLElement>('header > nav');\n\n $content = sel<HTMLElement>('[part=\"content\"]');\n}\n","import { click } from '@ember/test-helpers';\n\nimport { PageObject, selector as sel } from 'fractal-page-object';\n\nimport type { ElementLike } from 'fractal-page-object';\n\nexport class PillButtonPageObject extends PageObject<\n HTMLButtonElement | HTMLAnchorElement | HTMLSpanElement\n> {\n static SELECTOR = '[data-test-pill-button]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? PillButtonPageObject.SELECTOR, parent, index);\n }\n\n get intent(): string | null | undefined {\n return this.element?.getAttribute('data-intent');\n }\n\n get importance(): string | null | undefined {\n return this.element?.getAttribute('data-importance');\n }\n\n get spacing(): string | null | undefined {\n return this.element?.getAttribute('data-spacing');\n }\n\n $before = sel<HTMLSpanElement>('[data-test-button=\"before\"]');\n $label = sel<HTMLSpanElement>('[data-test-button=\"label\"]');\n $after = sel<HTMLSpanElement>('[data-test-button=\"after\"]');\n\n async push() {\n if (this.element) {\n await click(this.element);\n }\n }\n}\n","import { PageObject } from 'fractal-page-object';\n\nimport type { ElementLike } from 'fractal-page-object';\n\nexport class PopoverPageObject extends PageObject<\n HTMLButtonElement | HTMLAnchorElement | HTMLSpanElement\n> {\n static SELECTOR = '[data-test-popover]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? PopoverPageObject.SELECTOR, parent, index);\n }\n}\n","import { PageObject, selector as sel } from 'fractal-page-object';\n\nimport type { ElementLike } from 'fractal-page-object';\n\nexport class SectionPageObject extends PageObject<\n HTMLButtonElement | HTMLAnchorElement | HTMLSpanElement\n> {\n static SELECTOR = '[data-test-section]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? SectionPageObject.SELECTOR, parent, index);\n }\n\n $header = sel('[data-test-section=\"header\"]');\n $title = sel('[data-test-section=\"title\"]');\n}\n","import { PageObject, selector as sel } from 'fractal-page-object';\n\nimport { selectTab } from 'ember-aria-voyager/test-support';\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport { TabValue } from '../../components/tabs.gts';\n\nimport type { ElementLike } from 'fractal-page-object';\n\nexport class TabsPageObject extends PageObject<HTMLDivElement> {\n static SELECTOR = '[data-test-tabs]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? TabsPageObject.SELECTOR, parent, index);\n }\n\n get control() {\n return this.$tablist.element as HTMLDivElement;\n }\n\n $tablist = sel<HTMLDivElement>('[role=\"tablist\"]');\n $tab = sel<HTMLButtonElement>('[role=\"tab\"]');\n $tabpanel = sel<HTMLElement>('[role=\"tabpanel\"]');\n\n async select(value: unknown) {\n // @ts-expect-error this is internal API\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const tab = this.$tab.find((t) => t.element[TabValue] === value);\n\n if (tab) {\n await selectTab(tab);\n }\n }\n}\n"],"names":["IconPageObject","PageObject","SELECTOR","constructor","selector","parent","index","$svg","sel","IconButtonPageObject","intent","element","getAttribute","importance","spacing","push","click","$icon","MenuItemPageObject","disabled","Boolean","hasAttribute","expanded","menu","matches","hasMenu","menuId","globalSelector","MenuPageObject","undefined","$menu","control","$item","AppNavPageObject","NavItemPageObject","tagName","toLowerCase","isPopupNavItem","parentElement","AppHeaderPageObject","#prefix","$brand","$nav","$aux","$toggle","$popover","ButtonPageObject","$before","$label","$after","ChoicePageObject","RadioPageObject","CheckboxPageObject","InputPageObject","RangeInputPageObject","orientation","dataset","NumberInputPageObject","TextInputPageObject","PhoneInputPageObject","DateInputPageObject","EmailInputPageObject","PasswordInputPageObject","InputBuilderPageObject","$prefix","$affix","$suffix","$input","CurrencyInputPageObject","ListPageObject","$option","select","options","selectListbox","SelectPageObject","keepPreviouslySelected","TextAreaPageObject","OptionPageObject","$description","$control","ChoicesPageObject","$options","option","value","find","FieldError","type","FieldPageObject","$inputBuilder","$select","$textArea","$checkbox","$list","$choices","$errors","name","FormPageObject","$submit","$reset","$fields","field","submit","triggerEvent","reset","PagePageObject","$header","$title","$content","PillButtonPageObject","PopoverPageObject","SectionPageObject","TabsPageObject","$tablist","$tab","$tabpanel","tab","t","TabValue","selectTab"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/test-support/page-objects/icon.ts","../../src/test-support/page-objects/icon-button.ts","../../src/test-support/page-objects/menu.ts","../../src/test-support/page-objects/app-header.ts","../../src/test-support/page-objects/button.ts","../../src/test-support/page-objects/choice.ts","../../src/test-support/page-objects/input.ts","../../src/test-support/page-objects/input-builder.ts","../../src/test-support/page-objects/list.ts","../../src/test-support/page-objects/select.ts","../../src/test-support/page-objects/text-area.ts","../../src/test-support/page-objects/-private/choices.ts","../../src/test-support/page-objects/-private/field.ts","../../src/test-support/page-objects/form.ts","../../src/test-support/page-objects/page.ts","../../src/test-support/page-objects/pill-button.ts","../../src/test-support/page-objects/popover.ts","../../src/test-support/page-objects/section.ts","../../src/test-support/page-objects/tabs.ts"],"sourcesContent":["import { PageObject, selector as sel } from 'fractal-page-object';\n\nimport type { ElementLike } from 'fractal-page-object';\n\nexport class IconPageObject extends PageObject<HTMLSpanElement> {\n static SELECTOR = '[data-test-icon]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? IconPageObject.SELECTOR, parent, index);\n }\n\n $svg = sel<SVGSVGElement>('svg');\n // $svg = sel<HTMLElement>('svg');\n}\n","import { click } from '@ember/test-helpers';\n\nimport { PageObject, selector as sel } from 'fractal-page-object';\n\nimport { IconPageObject } from './icon.ts';\n\nimport type { ElementLike } from 'fractal-page-object';\n\nexport class IconButtonPageObject extends PageObject<\n HTMLButtonElement | HTMLAnchorElement | HTMLSpanElement\n> {\n static SELECTOR = '[data-test-icon-button]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? IconButtonPageObject.SELECTOR, parent, index);\n }\n\n get intent(): string | null | undefined {\n return this.element?.getAttribute('data-intent');\n }\n\n get importance(): string | null | undefined {\n return this.element?.getAttribute('data-importance');\n }\n\n get spacing(): string | null | undefined {\n return this.element?.getAttribute('data-spacing');\n }\n\n async push() {\n if (this.element) {\n await click(this.element);\n }\n }\n\n $icon = sel('[data-test-icon-button=\"icon\"]', IconPageObject);\n}\n","import { globalSelector, PageObject, selector as sel } from 'fractal-page-object';\n\nimport type { Menu, MenuElement, MenuItem, MenuItemElement } from './-menu.ts';\nimport type { ElementLike } from 'fractal-page-object';\n\nexport class MenuItemPageObject extends PageObject<MenuItemElement> implements MenuItem {\n static SELECTOR = '[role=\"menuitem\"]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? MenuItemPageObject.SELECTOR, parent, index);\n }\n\n get disabled() {\n return Boolean(this.element?.hasAttribute('aria-disabled'));\n }\n\n get expanded(): boolean {\n return Boolean(this.menu?.element?.matches(':popover-open'));\n }\n\n hasMenu() {\n return this.element?.getAttribute('aria-haspopup') === 'menu';\n }\n\n protected get menuId() {\n return this.element?.getAttribute('popovertarget');\n }\n\n protected get menu(): Menu | undefined {\n return this.menuId\n ? // eslint-disable-next-line @typescript-eslint/no-use-before-define\n globalSelector<MenuElement, Menu>(`#${this.menuId}`, MenuPageObject)\n : undefined;\n }\n\n get $menu() {\n return this.menu;\n }\n}\n\nexport class MenuPageObject extends PageObject<MenuElement> implements Menu {\n static SELECTOR = '[data-test-menu]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? MenuPageObject.SELECTOR, parent, index);\n }\n\n get control() {\n return this.element as HTMLDivElement;\n }\n\n $item = sel<MenuItemElement, MenuItem>(MenuItemPageObject.SELECTOR, MenuItemPageObject);\n}\n","import { PageObject, selector as sel } from 'fractal-page-object';\n\nimport { IconButtonPageObject } from './icon-button.ts';\nimport { MenuItemPageObject } from './menu.ts';\n\nimport type { Menu, MenuItem, MenuItemElement } from './-menu.ts';\nimport type { ElementLike } from 'fractal-page-object';\n\nclass AppNavPageObject extends PageObject<HTMLElement> implements Menu<HTMLElement> {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n $item = sel<MenuItemElement, MenuItem>(NavItemPageObject.SELECTOR, NavItemPageObject);\n}\n\nexport class NavItemPageObject extends MenuItemPageObject implements MenuItem {\n static SELECTOR = '[part=\"item\"]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? NavItemPageObject.SELECTOR, parent, index);\n }\n\n hasMenu() {\n return super.hasMenu() || this.element?.tagName.toLowerCase() === 'summary';\n }\n\n isPopupNavItem() {\n return (\n this.element?.tagName.toLowerCase() === 'summary' ||\n this.element?.parentElement?.tagName === 'details'\n );\n }\n\n get expanded() {\n return Boolean(\n this.isPopupNavItem()\n ? (this.element?.parentElement as HTMLElement).matches('[open]')\n : super.expanded\n );\n }\n\n get $menu(): Menu | undefined {\n if (this.isPopupNavItem()) {\n return sel<HTMLElement, Menu>('+ div', AppNavPageObject);\n }\n\n return this.menu;\n }\n}\n\nexport class AppHeaderPageObject extends PageObject<HTMLElement> {\n static SELECTOR = '[data-test-app-header]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? AppHeaderPageObject.SELECTOR, parent, index);\n }\n\n get #prefix() {\n if (this.$menu.element) {\n return '[part=\"menu\"]';\n }\n\n return '';\n }\n\n get $brand() {\n return sel<HTMLDivElement>(`${this.#prefix} [part=\"brand\"]`);\n }\n\n get $nav() {\n return sel(`${this.#prefix} nav`, AppNavPageObject);\n }\n\n get $aux() {\n return sel<HTMLSpanElement>(`${this.#prefix} [part=\"aux\"]`);\n }\n\n $menu = sel(\n '[part=\"menu\"]',\n class extends PageObject<HTMLSpanElement> {\n $toggle = sel('[data-test-toggle]', IconButtonPageObject);\n\n $popover = sel(\n '[popover]',\n class extends PageObject<HTMLElement> {\n get expanded() {\n return Boolean(this.element?.matches(':popover-open'));\n }\n }\n );\n }\n );\n}\n","import { click } from '@ember/test-helpers';\n\nimport { PageObject, selector as sel } from 'fractal-page-object';\n\nimport type { ElementLike } from 'fractal-page-object';\n\nexport class ButtonPageObject extends PageObject<\n HTMLButtonElement | HTMLAnchorElement | HTMLSpanElement\n> {\n static SELECTOR = '[data-test-button]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? ButtonPageObject.SELECTOR, parent, index);\n }\n\n get intent(): string | null | undefined {\n return this.element?.getAttribute('data-intent');\n }\n\n get importance(): string | null | undefined {\n return this.element?.getAttribute('data-importance');\n }\n\n get spacing(): string | null | undefined {\n return this.element?.getAttribute('data-spacing');\n }\n\n $before = sel<HTMLSpanElement>('[data-test-button=\"before\"]');\n $label = sel<HTMLSpanElement>('[data-test-button=\"label\"]');\n $after = sel<HTMLSpanElement>('[data-test-button=\"after\"]');\n\n async push() {\n if (this.element) {\n await click(this.element);\n }\n }\n}\n","import { PageObject } from 'fractal-page-object';\n\nimport type { Input } from './input.ts';\nimport type { ElementLike } from 'fractal-page-object';\n\nclass ChoicePageObject extends PageObject<HTMLInputElement> implements Input {\n static SELECTOR = '[data-test-choice]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? ChoicePageObject.SELECTOR, parent, index);\n }\n\n get control() {\n return this.element as HTMLInputElement;\n }\n}\n\nexport const RadioPageObject = ChoicePageObject;\nexport const CheckboxPageObject = ChoicePageObject;\n","import { PageObject } from 'fractal-page-object';\n\nimport type { ElementLike } from 'fractal-page-object';\n\nexport interface Input extends PageObject {\n control: HTMLInputElement;\n}\n\nexport class InputPageObject extends PageObject<HTMLInputElement> implements Input {\n static SELECTOR = '[data-test-input]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? InputPageObject.SELECTOR, parent, index);\n }\n\n get control() {\n return this.element as HTMLInputElement;\n }\n}\n\nexport class RangeInputPageObject extends InputPageObject {\n get orientation(): string | undefined {\n return this.control.dataset.orientation;\n }\n}\nexport const NumberInputPageObject = InputPageObject;\nexport const TextInputPageObject = InputPageObject;\nexport const PhoneInputPageObject = InputPageObject;\nexport const DateInputPageObject = InputPageObject;\nexport const EmailInputPageObject = InputPageObject;\nexport const PasswordInputPageObject = InputPageObject;\n","import { PageObject, selector as sel } from 'fractal-page-object';\n\nimport { InputPageObject } from './input.ts';\n\nimport type { Input } from './input.ts';\nimport type { ElementLike } from 'fractal-page-object';\n\nexport class InputBuilderPageObject extends PageObject<HTMLInputElement> implements Input {\n static SELECTOR = '[data-test-input-builder]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? InputBuilderPageObject.SELECTOR, parent, index);\n }\n\n $prefix = sel<HTMLSpanElement>('[data-test-input-builder=\"prefix\"]');\n $affix = sel<HTMLSpanElement>('[data-test-input-builder=\"affix\"]');\n $suffix = sel<HTMLSpanElement>('[data-test-input-builder=\"suffix\"]');\n $input = sel(InputPageObject.SELECTOR, InputPageObject);\n\n get control() {\n return this.$input.element as HTMLInputElement;\n }\n}\n\nexport const CurrencyInputPageObject = InputBuilderPageObject;\n","import { PageObject, selector as sel } from 'fractal-page-object';\n\nimport { selectListbox } from 'ember-aria-voyager/test-support';\n\nimport type { Target } from '@ember/test-helpers';\nimport type { ElementLike } from 'fractal-page-object';\n\nexport class ListPageObject extends PageObject<HTMLDivElement> {\n static SELECTOR = '[data-test-list]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? ListPageObject.SELECTOR, parent, index);\n }\n\n get control() {\n return this.element as HTMLDivElement;\n }\n\n $option = sel<HTMLOptionElement>('[role=\"option\"]');\n\n async select(options: string | string[]) {\n await selectListbox(this.element as Target, options);\n }\n}\n","import { select } from '@ember/test-helpers';\n\nimport { PageObject, selector as sel } from 'fractal-page-object';\n\nimport type { Target } from '@ember/test-helpers';\nimport type { ElementLike } from 'fractal-page-object';\n\nexport class SelectPageObject extends PageObject<HTMLSelectElement> {\n static SELECTOR = '[data-test-select]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? SelectPageObject.SELECTOR, parent, index);\n }\n\n get control() {\n return this.element as HTMLSelectElement;\n }\n\n $option = sel<HTMLOptionElement>('option');\n\n async select(options: string | string[], keepPreviouslySelected?: boolean) {\n await select(this.element as Target, options, keepPreviouslySelected);\n }\n}\n","import { PageObject } from 'fractal-page-object';\n\nimport type { Input } from './input.ts';\nimport type { ElementLike } from 'fractal-page-object';\n\nexport class TextAreaPageObject extends PageObject<HTMLInputElement> implements Input {\n static SELECTOR = '[data-test-textarea]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? TextAreaPageObject.SELECTOR, parent, index);\n }\n\n get control() {\n return this.element as HTMLInputElement;\n }\n}\n","import { PageObject, selector as sel } from 'fractal-page-object';\n\nimport type { ElementLike } from 'fractal-page-object';\n\nexport class OptionPageObject extends PageObject<HTMLDivElement> {\n $label = sel<HTMLLabelElement | HTMLLegendElement>('[data-test-label]');\n $description = sel<HTMLParagraphElement>('[data-test-description]');\n $control = sel<HTMLInputElement>('input');\n}\n\nexport class ChoicesPageObject extends PageObject<HTMLDivElement | HTMLFieldSetElement> {\n static SELECTOR = '[data-test-choices]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? ChoicesPageObject.SELECTOR, parent, index);\n }\n\n $options = sel('[data-test-option]', OptionPageObject);\n\n option(value: string) {\n return this.$options.find(\n (option) => option.$control.element?.value === value\n ) as OptionPageObject;\n }\n}\n","import { PageObject, selector as sel } from 'fractal-page-object';\n\nimport { CheckboxPageObject } from '../choice.ts';\nimport { InputPageObject } from '../input.ts';\nimport { InputBuilderPageObject } from '../input-builder.ts';\nimport { ListPageObject } from '../list.ts';\nimport { SelectPageObject } from '../select.ts';\nimport { TextAreaPageObject } from '../text-area.ts';\nimport { ChoicesPageObject } from './choices.ts';\n\nimport type { RangeInputPageObject } from '../input';\nimport type { ElementLike } from 'fractal-page-object';\n\nexport class FieldError extends PageObject<HTMLDivElement> {\n get type() {\n return this.element?.getAttribute('data-test-error-type');\n }\n\n get value() {\n return this.element?.getAttribute('data-test-error-value');\n }\n}\n\nexport class FieldRule extends PageObject<HTMLParagraphElement> {\n get invalid() {\n return Boolean(this.element?.getAttribute('data-test-rule-invalid'));\n }\n}\n\nexport class FieldPageObject extends PageObject<HTMLDivElement | HTMLFieldSetElement> {\n static SELECTOR = '[data-test-field]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? FieldPageObject.SELECTOR, parent, index);\n }\n\n $label = sel<HTMLLabelElement | HTMLLegendElement>('[data-test-label]');\n $description = sel<HTMLParagraphElement>('[data-test-description]');\n // $control = sel<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>(\n // 'input,select,textarea'\n // );\n\n // controls\n\n private $input = sel(InputPageObject.SELECTOR, InputPageObject);\n private $inputBuilder = sel(InputBuilderPageObject.SELECTOR, InputBuilderPageObject);\n private $select = sel(SelectPageObject.SELECTOR, SelectPageObject);\n private $textArea = sel(TextAreaPageObject.SELECTOR, TextAreaPageObject);\n private $checkbox = sel(CheckboxPageObject.SELECTOR, CheckboxPageObject);\n private $list = sel(ListPageObject.SELECTOR, ListPageObject);\n\n $choices = sel(ChoicesPageObject.SELECTOR, ChoicesPageObject);\n $errors = sel('[data-test-error]', FieldError);\n $rules = sel('[data-test-rule]', FieldRule);\n\n get $control():\n | InputPageObject\n | RangeInputPageObject\n | InputBuilderPageObject\n | SelectPageObject\n | TextAreaPageObject\n | ListPageObject {\n if (this.$inputBuilder.element) {\n return this.$inputBuilder;\n }\n\n if (this.$checkbox.element) {\n return this.$checkbox;\n }\n\n if (this.$input.element?.type === 'range') {\n return this.$input as RangeInputPageObject;\n }\n\n if (this.$input.element) {\n return this.$input;\n }\n\n if (this.$select.element) {\n return this.$select;\n }\n\n if (this.$textArea.element) {\n return this.$textArea;\n }\n\n if (this.$list.element) {\n return this.$list;\n }\n\n return this.$input; // @TODO bad fallback for now\n }\n\n get name() {\n return this.element?.getAttribute('data-test-field');\n }\n}\n","import { triggerEvent } from '@ember/test-helpers';\n\nimport { PageObject, selector as sel } from 'fractal-page-object';\n\nimport { FieldPageObject } from './-private/field.ts';\nimport { ButtonPageObject } from './button.ts';\n\nimport type { ElementLike } from 'fractal-page-object';\n\nexport type { OptionPageObject } from './-private/choices.ts';\nexport type { FieldError } from './-private/field.ts';\n\nexport class FormPageObject extends PageObject<HTMLFormElement> {\n static SELECTOR = '[data-test-form]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? FormPageObject.SELECTOR, parent, index);\n }\n\n $submit = sel('button[type=\"submit\"]', ButtonPageObject);\n $reset = sel('button[type=\"reset\"]', ButtonPageObject);\n\n $fields = sel(FieldPageObject.SELECTOR, FieldPageObject);\n\n field(name: string) {\n return this.$fields.find((field) => field.name === name) as FieldPageObject;\n }\n\n async submit() {\n await triggerEvent(this.element as HTMLFormElement, 'submit');\n }\n\n async reset() {\n await triggerEvent(this.element as HTMLFormElement, 'reset');\n }\n}\n","import { PageObject, selector as sel } from 'fractal-page-object';\n\nimport type { ElementLike } from 'fractal-page-object';\n\nexport class PagePageObject extends PageObject<\n HTMLButtonElement | HTMLAnchorElement | HTMLSpanElement\n> {\n static SELECTOR = '[data-test-page]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? PagePageObject.SELECTOR, parent, index);\n }\n\n $header = sel<HTMLElement>('header');\n\n $title = sel<HTMLHeadingElement>('header > h1');\n $description = sel<HTMLParagraphElement>('header > p');\n $nav = sel<HTMLElement>('header > nav');\n\n $content = sel<HTMLElement>('[part=\"content\"]');\n}\n","import { click } from '@ember/test-helpers';\n\nimport { PageObject, selector as sel } from 'fractal-page-object';\n\nimport type { ElementLike } from 'fractal-page-object';\n\nexport class PillButtonPageObject extends PageObject<\n HTMLButtonElement | HTMLAnchorElement | HTMLSpanElement\n> {\n static SELECTOR = '[data-test-pill-button]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? PillButtonPageObject.SELECTOR, parent, index);\n }\n\n get intent(): string | null | undefined {\n return this.element?.getAttribute('data-intent');\n }\n\n get importance(): string | null | undefined {\n return this.element?.getAttribute('data-importance');\n }\n\n get spacing(): string | null | undefined {\n return this.element?.getAttribute('data-spacing');\n }\n\n $before = sel<HTMLSpanElement>('[data-test-button=\"before\"]');\n $label = sel<HTMLSpanElement>('[data-test-button=\"label\"]');\n $after = sel<HTMLSpanElement>('[data-test-button=\"after\"]');\n\n async push() {\n if (this.element) {\n await click(this.element);\n }\n }\n}\n","import { PageObject } from 'fractal-page-object';\n\nimport type { ElementLike } from 'fractal-page-object';\n\nexport class PopoverPageObject extends PageObject<\n HTMLButtonElement | HTMLAnchorElement | HTMLSpanElement\n> {\n static SELECTOR = '[data-test-popover]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? PopoverPageObject.SELECTOR, parent, index);\n }\n}\n","import { PageObject, selector as sel } from 'fractal-page-object';\n\nimport type { ElementLike } from 'fractal-page-object';\n\nexport class SectionPageObject extends PageObject<\n HTMLButtonElement | HTMLAnchorElement | HTMLSpanElement\n> {\n static SELECTOR = '[data-test-section]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? SectionPageObject.SELECTOR, parent, index);\n }\n\n $header = sel('[data-test-section=\"header\"]');\n $title = sel('[data-test-section=\"title\"]');\n}\n","import { PageObject, selector as sel } from 'fractal-page-object';\n\nimport { selectTab } from 'ember-aria-voyager/test-support';\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport { TabValue } from '../../components/tabs.gts';\n\nimport type { ElementLike } from 'fractal-page-object';\n\nexport class TabsPageObject extends PageObject<HTMLDivElement> {\n static SELECTOR = '[data-test-tabs]';\n\n constructor(selector?: string, parent?: PageObject | ElementLike | null, index?: number | null) {\n super(selector ?? TabsPageObject.SELECTOR, parent, index);\n }\n\n get control() {\n return this.$tablist.element as HTMLDivElement;\n }\n\n $tablist = sel<HTMLDivElement>('[role=\"tablist\"]');\n $tab = sel<HTMLButtonElement>('[role=\"tab\"]');\n $tabpanel = sel<HTMLElement>('[role=\"tabpanel\"]');\n\n async select(value: unknown) {\n // @ts-expect-error this is internal API\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const tab = this.$tab.find((t) => t.element[TabValue] === value);\n\n if (tab) {\n await selectTab(tab);\n }\n }\n}\n"],"names":["IconPageObject","PageObject","SELECTOR","constructor","selector","parent","index","$svg","sel","IconButtonPageObject","intent","element","getAttribute","importance","spacing","push","click","$icon","MenuItemPageObject","disabled","Boolean","hasAttribute","expanded","menu","matches","hasMenu","menuId","globalSelector","MenuPageObject","undefined","$menu","control","$item","AppNavPageObject","NavItemPageObject","tagName","toLowerCase","isPopupNavItem","parentElement","AppHeaderPageObject","#prefix","$brand","$nav","$aux","$toggle","$popover","ButtonPageObject","$before","$label","$after","ChoicePageObject","RadioPageObject","CheckboxPageObject","InputPageObject","RangeInputPageObject","orientation","dataset","NumberInputPageObject","TextInputPageObject","PhoneInputPageObject","DateInputPageObject","EmailInputPageObject","PasswordInputPageObject","InputBuilderPageObject","$prefix","$affix","$suffix","$input","CurrencyInputPageObject","ListPageObject","$option","select","options","selectListbox","SelectPageObject","keepPreviouslySelected","TextAreaPageObject","OptionPageObject","$description","$control","ChoicesPageObject","$options","option","value","find","FieldError","type","FieldRule","invalid","FieldPageObject","$inputBuilder","$select","$textArea","$checkbox","$list","$choices","$errors","$rules","name","FormPageObject","$submit","$reset","$fields","field","submit","triggerEvent","reset","PagePageObject","$header","$title","$content","PillButtonPageObject","PopoverPageObject","SectionPageObject","TabsPageObject","$tablist","$tab","$tabpanel","tab","t","TabValue","selectTab"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hokulea/ember",
3
- "version": "0.7.1",
3
+ "version": "0.8.0",
4
4
  "description": "Hokulea Design System for Ember",
5
5
  "license": "MIT",
6
6
  "keywords": [
@@ -19,6 +19,7 @@
19
19
  "#src": "./src/index.ts",
20
20
  "#src/*": "./src/*",
21
21
  "#test-support": "./src/test-support/index.ts",
22
+ "#test-support/": "./src/test-support/*",
22
23
  "#tests/*": "./tests/*"
23
24
  },
24
25
  "exports": {
@@ -43,17 +44,17 @@
43
44
  "dependencies": {
44
45
  "@embroider/addon-shim": "^1.10.0",
45
46
  "@floating-ui/dom": "^1.7.1",
47
+ "@hokulea/ember-pahu": "^0.0.1",
46
48
  "decorator-transforms": "^2.3.0",
47
49
  "ember-aria-voyager": "^0.2.4",
48
- "ember-async-data": "^2.0.1",
49
50
  "ember-stargate": "^1.0.1",
50
51
  "tracked-built-ins": "^4.0.0",
51
- "@hokulea/core": "0.4.0"
52
+ "@hokulea/core": "0.5.0"
52
53
  },
53
54
  "peerDependencies": {
54
- "@ember/test-helpers": "^4.0.0",
55
+ "@ember/test-helpers": "^5.0.0",
55
56
  "ember-command": "^2.0.2",
56
- "ember-concurrency": "^4.0.2",
57
+ "ember-concurrency": "^5.0.0",
57
58
  "ember-element-helper": "^0.8.5",
58
59
  "ember-link": "^3.4.1",
59
60
  "ember-modifier": "^4.2.0",
@@ -68,24 +69,24 @@
68
69
  }
69
70
  },
70
71
  "devDependencies": {
71
- "@babel/core": "7.28.0",
72
+ "@babel/core": "7.28.3",
72
73
  "@babel/eslint-parser": "7.28.0",
73
74
  "@babel/plugin-transform-typescript": "7.28.0",
74
- "@babel/runtime": "7.27.6",
75
+ "@babel/runtime": "7.28.3",
75
76
  "@ember/app-tsconfig": "^1.0.3",
76
- "@ember/library-tsconfig": "^1.0.3",
77
+ "@ember/library-tsconfig": "^1.1.3",
77
78
  "@ember/render-modifiers": "^3.0.0",
78
79
  "@ember/test-helpers": "5.2.2",
79
80
  "@embroider/addon-dev": "^8.1.0",
80
- "@embroider/compat": "^4.1.0",
81
- "@embroider/core": "^4.1.1",
82
- "@embroider/macros": "^1.18.0",
83
- "@embroider/vite": "^1.1.5",
81
+ "@embroider/compat": "^4.1.2",
82
+ "@embroider/core": "^4.1.3",
83
+ "@embroider/macros": "^1.18.1",
84
+ "@embroider/vite": "^1.1.6",
84
85
  "@glimmer/component": "^2.0.0",
85
- "@glint/core": "^2.0.0-alpha.2",
86
- "@glint/environment-ember-loose": "^2.0.0-alpha.2",
87
- "@glint/environment-ember-template-imports": "^2.0.0-alpha.2",
88
- "@glint/template": "^1.6.0-alpha.1",
86
+ "@glint/core": "^2.0.0-alpha.4",
87
+ "@glint/environment-ember-loose": "^2.0.0-alpha.3",
88
+ "@glint/environment-ember-template-imports": "^2.0.0-alpha.3",
89
+ "@glint/template": "^1.6.0-alpha.2",
89
90
  "@gossi/config-eslint": "^1.3.0",
90
91
  "@gossi/config-prettier": "^1.1.0",
91
92
  "@gossi/config-stylelint": "^1.1.0",
@@ -102,37 +103,39 @@
102
103
  "ember-cli-fastboot": "4.1.5",
103
104
  "ember-cli-htmlbars": "^6.3.0",
104
105
  "ember-command": "2.0.7",
105
- "ember-concurrency": "4.0.4",
106
+ "ember-concurrency": "5.1.0",
106
107
  "ember-element-helper": "^0.8.8",
107
- "ember-link": "3.4.1",
108
+ "ember-link": "3.5.0",
108
109
  "ember-modifier": "4.2.2",
109
110
  "ember-qunit": "^9.0.3",
110
111
  "ember-resolver": "^13.1.1",
111
112
  "ember-route-template": "^1.0.3",
112
113
  "ember-set-helper": "^3.0.1",
113
- "ember-source": "6.5.0",
114
+ "ember-source": "6.6.0",
114
115
  "ember-template-imports": "4.3.0",
115
- "ember-template-lint": "^7.9.1",
116
+ "ember-template-lint": "^7.9.2",
116
117
  "eslint": "^9.31.0",
117
- "eslint-plugin-ember": "^12.6.0",
118
- "eslint-plugin-storybook": "^9.0.17",
118
+ "eslint-plugin-ember": "^12.7.0",
119
+ "eslint-plugin-storybook": "^9.1.2",
119
120
  "fractal-page-object": "1.0.0",
120
121
  "iconify-icon": "^3.0.0",
121
- "postcss": "8.5.3",
122
+ "postcss": "8.5.6",
122
123
  "prettier": "^3.6.2",
123
124
  "qunit": "^2.24.1",
124
125
  "qunit-dom": "^3.4.0",
125
- "rollup": "4.45.0",
126
+ "rollup": "4.48.0",
126
127
  "sinon": "^21.0.0",
127
- "storybook": "^9.0.16",
128
- "stylelint": "16.21.1",
128
+ "storybook": "^9.1.3",
129
+ "stylelint": "16.23.1",
129
130
  "testem": "^3.16.0",
130
- "typescript": "5.5.4",
131
- "unplugin-icons": "^22.1.0",
132
- "vite": "^7.0.5",
133
- "@hokulea/tokens": "0.1.0",
131
+ "type-fest": "^4.41.0",
132
+ "typescript": "5.9.2",
133
+ "unplugin-icons": "^22.2.0",
134
+ "valibot": "^1.1.0",
135
+ "vite": "^7.1.3",
136
+ "@hokulea/core": "0.5.0",
134
137
  "@hokulea/theme-moana": "0.1.0",
135
- "@hokulea/core": "0.4.0"
138
+ "@hokulea/tokens": "0.1.1"
136
139
  },
137
140
  "ember": {
138
141
  "edition": "octane"
@@ -176,7 +179,9 @@
176
179
  }
177
180
  },
178
181
  "scripts": {
179
- "build": "rollup --config",
182
+ "build": "pnpm run '/^build:.*/'",
183
+ "build:js": "rollup --config",
184
+ "build:declarations": "glint --declaration --project tsconfig.publish.json",
180
185
  "dev": "vite dev",
181
186
  "lint": "pnpm run '/^lint:(?!.*(fix)).*$/'",
182
187
  "lint:fix": "pnpm run '/^lint:[^:]*:fix/'",
@@ -187,7 +192,9 @@
187
192
  "lint:js": "eslint . --cache",
188
193
  "lint:js:fix": "eslint . --fix",
189
194
  "lint:types": "glint",
190
- "start": "rollup --config --watch",
195
+ "start": "pnpm run '/^start:.*/'",
196
+ "start:js": "rollup --config --watch",
197
+ "start:declarations": "glint --declaration --project tsconfig.publish.json --watch",
191
198
  "test": "vite build --mode=development --out-dir dist-tests && testem --file testem.cjs ci --port 0"
192
199
  }
193
200
  }