@hokulea/ember 0.7.2 → 0.9.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.
- package/declarations/-private/stories.d.ts +2 -0
- package/declarations/-private/stories.d.ts.map +1 -1
- package/declarations/components/actions/-button.d.ts.map +1 -0
- package/declarations/components/actions/button.gts.d.ts +25 -0
- package/declarations/components/actions/button.gts.d.ts.map +1 -0
- package/declarations/components/actions/icon-button.gts.d.ts +26 -0
- package/declarations/components/actions/icon-button.gts.d.ts.map +1 -0
- package/declarations/components/app-header.gts.d.ts +1 -48
- package/declarations/components/app-header.gts.d.ts.map +1 -1
- package/declarations/components/box.gts.d.ts +1 -15
- package/declarations/components/box.gts.d.ts.map +1 -1
- package/declarations/components/button.gts.d.ts +1 -25
- package/declarations/components/button.gts.d.ts.map +1 -1
- package/declarations/components/card.gts.d.ts +1 -12
- package/declarations/components/card.gts.d.ts.map +1 -1
- package/declarations/components/checkbox.gts.d.ts +1 -8
- package/declarations/components/checkbox.gts.d.ts.map +1 -1
- package/declarations/components/content/box.gts.d.ts +16 -0
- package/declarations/components/content/box.gts.d.ts.map +1 -0
- package/declarations/components/content/card.gts.d.ts +12 -0
- package/declarations/components/content/card.gts.d.ts.map +1 -0
- package/declarations/components/content/section.gts.d.ts +18 -0
- package/declarations/components/content/section.gts.d.ts.map +1 -0
- package/declarations/components/controls/-input.d.ts.map +1 -0
- package/declarations/components/controls/-menu.d.ts.map +1 -0
- package/declarations/components/controls/checkbox.gts.d.ts +8 -0
- package/declarations/components/controls/checkbox.gts.d.ts.map +1 -0
- package/declarations/components/controls/currency-input.gts.d.ts +8 -0
- package/declarations/components/controls/currency-input.gts.d.ts.map +1 -0
- package/declarations/components/controls/date-input.gts.d.ts +8 -0
- package/declarations/components/controls/date-input.gts.d.ts.map +1 -0
- package/declarations/components/controls/email-input.gts.d.ts +8 -0
- package/declarations/components/controls/email-input.gts.d.ts.map +1 -0
- package/declarations/components/controls/input-builder.gts.d.ts +29 -0
- package/declarations/components/controls/input-builder.gts.d.ts.map +1 -0
- package/declarations/components/controls/list.gts.d.ts +51 -0
- package/declarations/components/controls/list.gts.d.ts.map +1 -0
- package/declarations/components/controls/menu.gts.d.ts +39 -0
- package/declarations/components/controls/menu.gts.d.ts.map +1 -0
- package/declarations/components/controls/number-input.gts.d.ts +8 -0
- package/declarations/components/controls/number-input.gts.d.ts.map +1 -0
- package/declarations/components/controls/password-input.gts.d.ts +8 -0
- package/declarations/components/controls/password-input.gts.d.ts.map +1 -0
- package/declarations/components/controls/phone-input.gts.d.ts +8 -0
- package/declarations/components/controls/phone-input.gts.d.ts.map +1 -0
- package/declarations/components/controls/radio.gts.d.ts +8 -0
- package/declarations/components/controls/radio.gts.d.ts.map +1 -0
- package/declarations/components/controls/range-input.gts.d.ts +13 -0
- package/declarations/components/controls/range-input.gts.d.ts.map +1 -0
- package/declarations/components/controls/select.gts.d.ts +36 -0
- package/declarations/components/controls/select.gts.d.ts.map +1 -0
- package/declarations/components/controls/tabs.gts.d.ts +61 -0
- package/declarations/components/controls/tabs.gts.d.ts.map +1 -0
- package/declarations/components/controls/text-area.gts.d.ts +8 -0
- package/declarations/components/controls/text-area.gts.d.ts.map +1 -0
- package/declarations/components/controls/text-input.gts.d.ts +8 -0
- package/declarations/components/controls/text-input.gts.d.ts.map +1 -0
- package/declarations/components/currency-input.gts.d.ts +1 -8
- package/declarations/components/currency-input.gts.d.ts.map +1 -1
- package/declarations/components/date-input.gts.d.ts +1 -8
- package/declarations/components/date-input.gts.d.ts.map +1 -1
- package/declarations/components/email-input.gts.d.ts +1 -8
- package/declarations/components/email-input.gts.d.ts.map +1 -1
- package/declarations/components/focus-page.gts.d.ts +2 -0
- package/declarations/components/focus-page.gts.d.ts.map +1 -0
- package/declarations/{-private/form/components → components/form}/description.gts.d.ts +1 -2
- package/declarations/components/form/description.gts.d.ts.map +1 -0
- package/declarations/components/form/errors.gts.d.ts +14 -0
- package/declarations/components/form/errors.gts.d.ts.map +1 -0
- package/declarations/components/form/field.gts.d.ts +111 -0
- package/declarations/components/form/field.gts.d.ts.map +1 -0
- package/declarations/components/form/fields/checkbox.gts.d.ts +16 -0
- package/declarations/components/form/fields/checkbox.gts.d.ts.map +1 -0
- package/declarations/components/form/fields/currency.gts.d.ts +16 -0
- package/declarations/components/form/fields/currency.gts.d.ts.map +1 -0
- package/declarations/components/form/fields/date.gts.d.ts +16 -0
- package/declarations/components/form/fields/date.gts.d.ts.map +1 -0
- package/declarations/components/form/fields/email.gts.d.ts +16 -0
- package/declarations/components/form/fields/email.gts.d.ts.map +1 -0
- package/declarations/components/form/fields/list.gts.d.ts +28 -0
- package/declarations/components/form/fields/list.gts.d.ts.map +1 -0
- package/declarations/components/form/fields/multiple-choice.gts.d.ts +60 -0
- package/declarations/components/form/fields/multiple-choice.gts.d.ts.map +1 -0
- package/declarations/components/form/fields/number.gts.d.ts +16 -0
- package/declarations/components/form/fields/number.gts.d.ts.map +1 -0
- package/declarations/components/form/fields/password.gts.d.ts +18 -0
- package/declarations/components/form/fields/password.gts.d.ts.map +1 -0
- package/declarations/components/form/fields/phone.gts.d.ts +18 -0
- package/declarations/components/form/fields/phone.gts.d.ts.map +1 -0
- package/declarations/components/form/fields/range.gts.d.ts +16 -0
- package/declarations/components/form/fields/range.gts.d.ts.map +1 -0
- package/declarations/components/form/fields/select.gts.d.ts +17 -0
- package/declarations/components/form/fields/select.gts.d.ts.map +1 -0
- package/declarations/components/form/fields/singular-choice.gts.d.ts +56 -0
- package/declarations/components/form/fields/singular-choice.gts.d.ts.map +1 -0
- package/declarations/{-private/form/components → components/form}/fields/stories-utils.d.ts +2 -2
- package/declarations/components/form/fields/stories-utils.d.ts.map +1 -0
- package/declarations/components/form/fields/text-area.gts.d.ts +16 -0
- package/declarations/components/form/fields/text-area.gts.d.ts.map +1 -0
- package/declarations/components/form/fields/text.gts.d.ts +18 -0
- package/declarations/components/form/fields/text.gts.d.ts.map +1 -0
- package/declarations/components/form/form.gts.d.ts +210 -0
- package/declarations/components/form/form.gts.d.ts.map +1 -0
- package/declarations/components/form/index.d.ts +4 -0
- package/declarations/components/form/index.d.ts.map +1 -0
- package/declarations/{-private/form/components → components/form}/label.gts.d.ts +1 -2
- package/declarations/components/form/label.gts.d.ts.map +1 -0
- package/declarations/components/form/manage-validation.d.ts +18 -0
- package/declarations/components/form/manage-validation.d.ts.map +1 -0
- package/declarations/{-private/form/components → components/form}/reset.gts.d.ts +1 -2
- package/declarations/components/form/reset.gts.d.ts.map +1 -0
- package/declarations/components/form/rules.gts.d.ts +36 -0
- package/declarations/components/form/rules.gts.d.ts.map +1 -0
- package/declarations/{-private/form/components → components/form}/submit.gts.d.ts +1 -2
- package/declarations/components/form/submit.gts.d.ts.map +1 -0
- package/declarations/components/form.gts.d.ts +1 -318
- package/declarations/components/form.gts.d.ts.map +1 -1
- package/declarations/components/graphics/icon.gts.d.ts +13 -0
- package/declarations/components/graphics/icon.gts.d.ts.map +1 -0
- package/declarations/components/icon-button.gts.d.ts +1 -25
- package/declarations/components/icon-button.gts.d.ts.map +1 -1
- package/declarations/components/icon.gts.d.ts +1 -13
- package/declarations/components/icon.gts.d.ts.map +1 -1
- package/declarations/components/input-builder.gts.d.ts +1 -28
- package/declarations/components/input-builder.gts.d.ts.map +1 -1
- package/declarations/components/layouts/focus-page.gts.d.ts +24 -0
- package/declarations/components/layouts/focus-page.gts.d.ts.map +1 -0
- package/declarations/components/layouts/page.gts.d.ts +24 -0
- package/declarations/components/layouts/page.gts.d.ts.map +1 -0
- package/declarations/components/layouts/pages.d.ts +15 -0
- package/declarations/components/layouts/pages.d.ts.map +1 -0
- package/declarations/components/layouts/sectioned-page.gts.d.ts +26 -0
- package/declarations/components/layouts/sectioned-page.gts.d.ts.map +1 -0
- package/declarations/components/list.gts.d.ts +1 -50
- package/declarations/components/list.gts.d.ts.map +1 -1
- package/declarations/components/menu.gts.d.ts +1 -38
- package/declarations/components/menu.gts.d.ts.map +1 -1
- package/declarations/components/navigation/app-header.gts.d.ts +55 -0
- package/declarations/components/navigation/app-header.gts.d.ts.map +1 -0
- package/declarations/components/navigation/nav-link.gts.d.ts +10 -0
- package/declarations/components/navigation/nav-link.gts.d.ts.map +1 -0
- package/declarations/components/navigation/navigation-list.gts.d.ts +19 -0
- package/declarations/components/navigation/navigation-list.gts.d.ts.map +1 -0
- package/declarations/components/navigation-list.gts.d.ts +2 -0
- package/declarations/components/navigation-list.gts.d.ts.map +1 -0
- package/declarations/components/number-input.gts.d.ts +1 -8
- package/declarations/components/number-input.gts.d.ts.map +1 -1
- package/declarations/components/page.gts.d.ts +1 -35
- package/declarations/components/page.gts.d.ts.map +1 -1
- package/declarations/components/password-input.gts.d.ts +1 -8
- package/declarations/components/password-input.gts.d.ts.map +1 -1
- package/declarations/components/phone-input.gts.d.ts +1 -8
- package/declarations/components/phone-input.gts.d.ts.map +1 -1
- package/declarations/components/popover.gts.d.ts +1 -9
- package/declarations/components/popover.gts.d.ts.map +1 -1
- package/declarations/components/radio.gts.d.ts +1 -8
- package/declarations/components/radio.gts.d.ts.map +1 -1
- package/declarations/components/range-input.gts.d.ts +1 -13
- package/declarations/components/range-input.gts.d.ts.map +1 -1
- package/declarations/components/section.gts.d.ts +1 -18
- package/declarations/components/section.gts.d.ts.map +1 -1
- package/declarations/components/sectioned-page.gts.d.ts +2 -0
- package/declarations/components/sectioned-page.gts.d.ts.map +1 -0
- package/declarations/components/select.gts.d.ts +1 -35
- package/declarations/components/select.gts.d.ts.map +1 -1
- package/declarations/components/tabs.gts.d.ts +1 -60
- package/declarations/components/tabs.gts.d.ts.map +1 -1
- package/declarations/components/text-area.gts.d.ts +1 -8
- package/declarations/components/text-area.gts.d.ts.map +1 -1
- package/declarations/components/text-input.gts.d.ts +1 -8
- package/declarations/components/text-input.gts.d.ts.map +1 -1
- package/declarations/components/windows/popover.gts.d.ts +9 -0
- package/declarations/components/windows/popover.gts.d.ts.map +1 -0
- package/declarations/helpers/popover.d.ts +1 -1
- package/declarations/helpers/popover.d.ts.map +1 -1
- package/declarations/index.d.ts +31 -29
- package/declarations/index.d.ts.map +1 -1
- package/declarations/registry.d.ts +2 -0
- package/declarations/registry.d.ts.map +1 -0
- package/declarations/services/-hokulea.d.ts.map +1 -1
- package/declarations/template-registry.d.ts +41 -35
- package/declarations/template-registry.d.ts.map +1 -1
- package/declarations/test-support/index.d.ts +2 -1
- package/declarations/test-support/index.d.ts.map +1 -1
- package/declarations/test-support/page-objects/-navigation.d.ts +9 -0
- package/declarations/test-support/page-objects/-navigation.d.ts.map +1 -0
- package/declarations/test-support/page-objects/-private/field.d.ts +4 -0
- package/declarations/test-support/page-objects/-private/field.d.ts.map +1 -1
- package/declarations/test-support/page-objects/app-header.d.ts +1 -1
- package/declarations/test-support/page-objects/app-header.d.ts.map +1 -1
- package/declarations/test-support/page-objects/navigation-list.d.ts +10 -0
- package/declarations/test-support/page-objects/navigation-list.d.ts.map +1 -0
- package/declarations/test-support/page-objects/page.d.ts +3 -1
- package/declarations/test-support/page-objects/page.d.ts.map +1 -1
- package/declarations/test-support/page-objects/tabs.d.ts.map +1 -1
- package/dist/-button-KUaJCQaB.js.map +1 -1
- package/dist/-input-DGR-n9U_.js.map +1 -1
- package/dist/_app_/components/focus-page.js +1 -0
- package/dist/_app_/components/navigation-list.js +1 -0
- package/dist/_app_/components/sectioned-page.js +1 -0
- package/dist/app-header-B6Q7pbiY.js +122 -0
- package/dist/app-header-B6Q7pbiY.js.map +1 -0
- package/dist/box-DU6m9gDw.js +20 -0
- package/dist/box-DU6m9gDw.js.map +1 -0
- package/dist/button-XdQyGTGA.js +24 -0
- package/dist/button-XdQyGTGA.js.map +1 -0
- package/dist/card-Bdv-UvKX.js +16 -0
- package/dist/card-Bdv-UvKX.js.map +1 -0
- package/dist/checkbox-D4vALmT2.js +18 -0
- package/dist/checkbox-D4vALmT2.js.map +1 -0
- package/dist/components/app-header.js +1 -131
- package/dist/components/app-header.js.map +1 -1
- package/dist/components/box.js +1 -19
- package/dist/components/box.js.map +1 -1
- package/dist/components/button.js +1 -23
- package/dist/components/button.js.map +1 -1
- package/dist/components/card.js +1 -15
- package/dist/components/card.js.map +1 -1
- package/dist/components/checkbox.js +1 -17
- package/dist/components/checkbox.js.map +1 -1
- package/dist/components/currency-input.js +1 -21
- package/dist/components/currency-input.js.map +1 -1
- package/dist/components/date-input.js +1 -17
- package/dist/components/date-input.js.map +1 -1
- package/dist/components/email-input.js +1 -17
- package/dist/components/email-input.js.map +1 -1
- package/dist/components/focus-page.js +2 -0
- package/dist/components/focus-page.js.map +1 -0
- package/dist/components/form.js +1 -835
- package/dist/components/form.js.map +1 -1
- package/dist/components/icon-button.js +1 -36
- package/dist/components/icon-button.js.map +1 -1
- package/dist/components/icon.js +1 -15
- package/dist/components/icon.js.map +1 -1
- package/dist/components/input-builder.js +1 -19
- package/dist/components/input-builder.js.map +1 -1
- package/dist/components/list.js +1 -65
- package/dist/components/list.js.map +1 -1
- package/dist/components/menu.js +1 -115
- package/dist/components/menu.js.map +1 -1
- package/dist/components/navigation-list.js +2 -0
- package/dist/components/navigation-list.js.map +1 -0
- package/dist/components/number-input.js +1 -19
- package/dist/components/number-input.js.map +1 -1
- package/dist/components/page.js +1 -62
- package/dist/components/page.js.map +1 -1
- package/dist/components/password-input.js +1 -17
- package/dist/components/password-input.js.map +1 -1
- package/dist/components/phone-input.js +1 -17
- package/dist/components/phone-input.js.map +1 -1
- package/dist/components/popover.js +1 -13
- package/dist/components/popover.js.map +1 -1
- package/dist/components/radio.js +1 -17
- package/dist/components/radio.js.map +1 -1
- package/dist/components/range-input.js +1 -36
- package/dist/components/range-input.js.map +1 -1
- package/dist/components/section.js +1 -24
- package/dist/components/section.js.map +1 -1
- package/dist/components/sectioned-page.js +2 -0
- package/dist/components/sectioned-page.js.map +1 -0
- package/dist/components/select.js +1 -38
- package/dist/components/select.js.map +1 -1
- package/dist/components/tabs.js +1 -110
- package/dist/components/tabs.js.map +1 -1
- package/dist/components/text-area.js +1 -17
- package/dist/components/text-area.js.map +1 -1
- package/dist/components/text-input.js +1 -17
- package/dist/components/text-input.js.map +1 -1
- package/dist/currency-input-8ef0Igfb.js +22 -0
- package/dist/currency-input-8ef0Igfb.js.map +1 -0
- package/dist/date-input-BayaBuSb.js +18 -0
- package/dist/date-input-BayaBuSb.js.map +1 -0
- package/dist/email-input-j-Z0KO4A.js +18 -0
- package/dist/email-input-j-Z0KO4A.js.map +1 -0
- package/dist/focus-page-B9myJVvL.js +23 -0
- package/dist/focus-page-B9myJVvL.js.map +1 -0
- package/dist/form-DWyQ6QHX.js +518 -0
- package/dist/form-DWyQ6QHX.js.map +1 -0
- package/dist/helpers/popover.js +1 -1
- package/dist/helpers/popover.js.map +1 -1
- package/dist/icon-bLZqjTMP.js +16 -0
- package/dist/icon-bLZqjTMP.js.map +1 -0
- package/dist/icon-button-7K-W_8jc.js +37 -0
- package/dist/icon-button-7K-W_8jc.js.map +1 -0
- package/dist/index.js +30 -27
- package/dist/index.js.map +1 -1
- package/dist/input-builder-DmcQbywA.js +20 -0
- package/dist/input-builder-DmcQbywA.js.map +1 -0
- package/dist/list-CsLvih6-.js +66 -0
- package/dist/list-CsLvih6-.js.map +1 -0
- package/dist/menu-CZKNGJ91.js +116 -0
- package/dist/menu-CZKNGJ91.js.map +1 -0
- package/dist/nav-link-CGVtuqwC.js +30 -0
- package/dist/nav-link-CGVtuqwC.js.map +1 -0
- package/dist/navigation-list-Cxs6uZdM.js +22 -0
- package/dist/navigation-list-Cxs6uZdM.js.map +1 -0
- package/dist/number-input-B84zcPlM.js +20 -0
- package/dist/number-input-B84zcPlM.js.map +1 -0
- package/dist/page-BcSgHxr7.js +23 -0
- package/dist/page-BcSgHxr7.js.map +1 -0
- package/dist/pages-DgHJEvSy.js +31 -0
- package/dist/pages-DgHJEvSy.js.map +1 -0
- package/dist/password-input-BMp5uscw.js +18 -0
- package/dist/password-input-BMp5uscw.js.map +1 -0
- package/dist/phone-input-DeaTM5yP.js +18 -0
- package/dist/phone-input-DeaTM5yP.js.map +1 -0
- package/dist/popover-B6j413u9.js +14 -0
- package/dist/popover-B6j413u9.js.map +1 -0
- package/dist/radio-CGBLrzK4.js +18 -0
- package/dist/radio-CGBLrzK4.js.map +1 -0
- package/dist/range-input-BiAPgpW8.js +37 -0
- package/dist/range-input-BiAPgpW8.js.map +1 -0
- package/dist/registry.js +14 -0
- package/dist/registry.js.map +1 -0
- package/dist/section-BAdmc3Yn.js +25 -0
- package/dist/section-BAdmc3Yn.js.map +1 -0
- package/dist/sectioned-page-fB9mV5WD.js +25 -0
- package/dist/sectioned-page-fB9mV5WD.js.map +1 -0
- package/dist/select-DxyaUFuy.js +39 -0
- package/dist/select-DxyaUFuy.js.map +1 -0
- package/dist/services/-hokulea.js +1 -8
- package/dist/services/-hokulea.js.map +1 -1
- package/dist/tabs-a9GhNQv9.js +111 -0
- package/dist/tabs-a9GhNQv9.js.map +1 -0
- package/dist/test-support/index.js +29 -4
- package/dist/test-support/index.js.map +1 -1
- package/dist/text-area-55_E1zv8.js +18 -0
- package/dist/text-area-55_E1zv8.js.map +1 -0
- package/dist/text-input-CK-yGbI5.js +18 -0
- package/dist/text-input-CK-yGbI5.js.map +1 -0
- package/package.json +38 -32
- package/declarations/-private/form/components/description.gts.d.ts.map +0 -1
- package/declarations/-private/form/components/errors.gts.d.ts +0 -15
- package/declarations/-private/form/components/errors.gts.d.ts.map +0 -1
- package/declarations/-private/form/components/field.gts.d.ts +0 -147
- package/declarations/-private/form/components/field.gts.d.ts.map +0 -1
- package/declarations/-private/form/components/fields/checkbox.gts.d.ts +0 -15
- package/declarations/-private/form/components/fields/checkbox.gts.d.ts.map +0 -1
- package/declarations/-private/form/components/fields/currency.gts.d.ts +0 -15
- package/declarations/-private/form/components/fields/currency.gts.d.ts.map +0 -1
- package/declarations/-private/form/components/fields/date.gts.d.ts +0 -15
- package/declarations/-private/form/components/fields/date.gts.d.ts.map +0 -1
- package/declarations/-private/form/components/fields/email.gts.d.ts +0 -15
- package/declarations/-private/form/components/fields/email.gts.d.ts.map +0 -1
- package/declarations/-private/form/components/fields/list.gts.d.ts +0 -27
- package/declarations/-private/form/components/fields/list.gts.d.ts.map +0 -1
- package/declarations/-private/form/components/fields/multiple-choice.gts.d.ts +0 -58
- package/declarations/-private/form/components/fields/multiple-choice.gts.d.ts.map +0 -1
- package/declarations/-private/form/components/fields/number.gts.d.ts +0 -15
- package/declarations/-private/form/components/fields/number.gts.d.ts.map +0 -1
- package/declarations/-private/form/components/fields/password.gts.d.ts +0 -15
- package/declarations/-private/form/components/fields/password.gts.d.ts.map +0 -1
- package/declarations/-private/form/components/fields/phone.gts.d.ts +0 -15
- package/declarations/-private/form/components/fields/phone.gts.d.ts.map +0 -1
- package/declarations/-private/form/components/fields/range.gts.d.ts +0 -15
- package/declarations/-private/form/components/fields/range.gts.d.ts.map +0 -1
- package/declarations/-private/form/components/fields/select.gts.d.ts +0 -16
- package/declarations/-private/form/components/fields/select.gts.d.ts.map +0 -1
- package/declarations/-private/form/components/fields/singular-choice.gts.d.ts +0 -56
- package/declarations/-private/form/components/fields/singular-choice.gts.d.ts.map +0 -1
- package/declarations/-private/form/components/fields/stories-utils.d.ts.map +0 -1
- package/declarations/-private/form/components/fields/text-area.gts.d.ts +0 -15
- package/declarations/-private/form/components/fields/text-area.gts.d.ts.map +0 -1
- package/declarations/-private/form/components/fields/text.gts.d.ts +0 -15
- package/declarations/-private/form/components/fields/text.gts.d.ts.map +0 -1
- package/declarations/-private/form/components/label.gts.d.ts.map +0 -1
- package/declarations/-private/form/components/reset.gts.d.ts.map +0 -1
- package/declarations/-private/form/components/submit.gts.d.ts.map +0 -1
- package/declarations/-private/form/index.d.ts +0 -49
- package/declarations/-private/form/index.d.ts.map +0 -1
- package/declarations/-private/form/modifiers/capture-events.d.ts +0 -21
- package/declarations/-private/form/modifiers/capture-events.d.ts.map +0 -1
- package/declarations/-private/form/modifiers/manage-validation.d.ts +0 -24
- package/declarations/-private/form/modifiers/manage-validation.d.ts.map +0 -1
- package/declarations/components/-button.d.ts.map +0 -1
- package/declarations/components/-input.d.ts.map +0 -1
- package/declarations/components/-menu.d.ts.map +0 -1
- package/declarations/components/-stories.d.ts +0 -3
- package/declarations/components/-stories.d.ts.map +0 -1
- /package/declarations/components/{-button.d.ts → actions/-button.d.ts} +0 -0
- /package/declarations/components/{-input.d.ts → controls/-input.d.ts} +0 -0
- /package/declarations/components/{-menu.d.ts → controls/-menu.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form.js","sources":["../../src/-private/form/modifiers/capture-events.ts","../../src/-private/form/modifiers/manage-validation.ts","../../src/-private/form/components/description.gts","../../src/-private/form/components/errors.gts","../../src/-private/form/components/label.gts","../../src/-private/form/components/field.gts","../../src/-private/form/components/fields/checkbox.gts","../../src/-private/form/components/fields/currency.gts","../../src/-private/form/components/fields/date.gts","../../src/-private/form/components/fields/email.gts","../../src/-private/form/components/fields/list.gts","../../src/-private/form/components/fields/multiple-choice.gts","../../src/-private/form/components/fields/number.gts","../../src/-private/form/components/fields/password.gts","../../src/-private/form/components/fields/phone.gts","../../src/-private/form/components/fields/range.gts","../../src/-private/form/components/fields/select.gts","../../src/-private/form/components/fields/singular-choice.gts","../../src/-private/form/components/fields/text.gts","../../src/-private/form/components/fields/text-area.gts","../../src/-private/form/components/reset.gts","../../src/-private/form/components/submit.gts","../../src/-private/form/index.ts","../../src/components/form.gts"],"sourcesContent":["import { modifier } from 'ember-modifier';\n\nexport interface CaptureEventsModifierSignature {\n Element: HTMLElement;\n Args: {\n Named: {\n /*\n * @internal\n */\n event: 'focusout' | 'change' | 'input' | undefined;\n\n /*\n * @internal\n */\n triggerValidation(): void;\n };\n };\n}\n\nconst CaptureEventsModifier = modifier<CaptureEventsModifierSignature>(\n // eslint-disable-next-line @typescript-eslint/unbound-method\n (element, _pos, { event, triggerValidation }) => {\n if (event) {\n element.addEventListener(event, triggerValidation, { passive: true });\n\n return () => {\n element.removeEventListener(event, triggerValidation);\n };\n }\n\n return;\n }\n);\n\nexport default CaptureEventsModifier;\n","// import { modifier } from 'ember-modifier';\nimport Modifier from 'ember-modifier';\n\nimport type { FormData, FormKey, UserData } from '../';\n\nexport interface NamedOptions<DATA extends UserData> {\n /** @internal */\n invalid: boolean;\n\n /** @internal */\n errorMessageId: string;\n\n /** @internal */\n showErrorsFor: (field: FormKey<FormData<DATA>>) => boolean;\n\n /** @internal */\n name: FormKey<FormData<DATA>>;\n}\n\ntype ValidationElements =\n | HTMLInputElement\n | HTMLSelectElement\n | HTMLTextAreaElement\n | HTMLDivElement;\n\nexport interface ManagaValidationSignature<DATA extends UserData> {\n Element: ValidationElements;\n Args: {\n Named: NamedOptions<DATA>;\n };\n}\n\nexport default class ManageValidationModifier<DATA extends UserData> extends Modifier<\n ManagaValidationSignature<DATA>\n> {\n modify(\n element: HTMLInputElement,\n _pos: [],\n { name, showErrorsFor, invalid, errorMessageId }: NamedOptions<DATA>\n ) {\n if (showErrorsFor(name)) {\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 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 Component from '@glimmer/component';\n\nimport styles from '@hokulea/core/forms.module.css';\n\n// import Icon from '../../../components/icon';\nimport type { ValidationError } from '../index.ts';\n\nexport interface ErrorsSignature<VALUE> {\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: ValidationError<VALUE>[];\n\n /*\n * @internal\n */\n id: string;\n };\n Blocks: {\n default?: [ValidationError<VALUE>[]];\n };\n}\n\nexport default class Errors<VALUE> extends Component<ErrorsSignature<VALUE>> {\n <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}\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';\nimport { assert } from '@ember/debug';\nimport { fn, hash, uniqueId } from '@ember/helper';\nimport { get } from '@ember/object';\n\nimport { element } from 'ember-element-helper';\n\nimport styles from '@hokulea/core/forms.module.css';\n\nimport CaptureEventsModifier from '../modifiers/capture-events.ts';\nimport ManageValidationModifier, {\n type ManagaValidationSignature\n} from '../modifiers/manage-validation.ts';\nimport Description from './description.gts';\nimport Errors from './errors.gts';\nimport Label from './label.gts';\n\nimport type {\n ErrorRecord,\n FieldValidateCallback,\n FormData,\n FormKey,\n RegisterFieldCallback,\n UnregisterFieldCallback,\n UserData,\n ValidationError\n} from '../index.ts';\nimport type { CaptureEventsModifierSignature } from '../modifiers/capture-events.ts';\nimport type { LabelSignature } from './label.gts';\nimport type Owner from '@ember/owner';\nimport type { ComponentLike, ModifierLike, WithBoundArgs } from '@glint/template';\n\nexport type BoundField<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> = WithBoundArgs<\n typeof Field<DATA, KEY>,\n | 'data'\n | 'set'\n | 'errors'\n | 'showErrorsFor'\n | 'registerField'\n | 'unregisterField'\n | 'triggerValidationFor'\n | 'fieldValidationEvent'\n | 'fieldRevalidationEvent'\n>;\n\nexport interface FieldArgs<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> {\n /**\n * The name of your field, which must match a property of the `@data` passed to the form\n */\n name: KEY;\n\n /**\n * Provide a custom validation function, that operates only on this specific field. Eventual validation errors are merged with native validation errors to determine the effective set of errors rendered for the field.\n *\n * Return undefined when no validation errors are present, otherwise an array of (one or multiple) `ValidationError`s.\n */\n validate?: FieldValidateCallback<FormData<DATA>, KEY>;\n\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 KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> {\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?: DATA[KEY];\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: DATA[KEY]) => 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 /**\n * An array of raw ValidationError objects, for custom rendering of error output\n */\n rawErrors?: ValidationError<DATA[KEY]>[];\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 triggerValidation: () => void;\n\n /**\n * Yielded modifier that when applied to the control element or any other element wrapping it will be able to recognize the `@validateOn` events and associate them to this field.\n *\n * This is only needed for very special cases, where the control is not a native form control or does not have the `@name` of the field assigned to the `name` attribute of the control.\n */\n captureEvents: WithBoundArgs<\n ModifierLike<CaptureEventsModifierSignature>,\n 'event' | 'triggerValidation'\n >;\n\n manageValidation: WithBoundArgs<\n ModifierLike<ManagaValidationSignature<DATA>>,\n 'invalid' | 'errorMessageId' | 'name' | 'showErrorsFor'\n >;\n}\n\nexport type MultipleFieldBlock<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> = FieldBlock<DATA, KEY> & {\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?: DATA[KEY][];\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: DATA[KEY][]) => void;\n};\n\nexport interface FieldSignature<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> {\n Element: HTMLDivElement;\n Args: FieldArgs<DATA, KEY> & {\n /** @internal */\n data: FormData<DATA>;\n\n /** @internal */\n set: (key: KEY, value: DATA[KEY]) => void;\n\n /** @internal */\n errors?: ErrorRecord<DATA, KEY>;\n\n /** @internal */\n showErrorsFor: (field: FormKey<FormData<DATA>>) => boolean;\n\n /** @internal */\n registerField: RegisterFieldCallback<FormData<DATA>, KEY>;\n\n /** @internal */\n unregisterField: UnregisterFieldCallback<FormData<DATA>, KEY>;\n\n /** @internal */\n triggerValidationFor(name: KEY): Promise<void>;\n\n /** @internal */\n fieldValidationEvent: 'focusout' | 'change' | 'input' | undefined;\n\n /** @internal */\n fieldRevalidationEvent: 'focusout' | 'change' | 'input' | undefined;\n\n /** @internal */\n element?: ComponentLike<{ Element: HTMLElement; Blocks: { default: [] } }>;\n\n /** @internal */\n labelComponent?: ComponentLike<LabelSignature>;\n };\n Blocks: {\n default: [FieldBlock<DATA, KEY>];\n };\n}\n\nexport default class Field<\n DATA extends FormData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> extends Component<FieldSignature<DATA, KEY>> {\n // Label = this.args.labelComponent ?? Label;\n ManagaValidationModifier = ManageValidationModifier<DATA>;\n\n constructor(owner: Owner, args: FieldSignature<DATA, KEY>['Args']) {\n super(owner, args);\n\n assert(\n 'Nested property paths in @name are not supported.',\n typeof this.args.name !== 'string' || !this.args.name.includes('.')\n );\n\n this.args.registerField(this.args.name, {\n validate: this.args.validate\n });\n }\n\n willDestroy(): void {\n this.args.unregisterField(this.args.name);\n\n super.willDestroy();\n }\n\n get value() {\n // when @mutableData is set, data is something we don't control, i.e. might require old-school get() to be on the safe side\n // we do not want to support nested property paths for now though, see the constructor assertion!\n return get(this.args.data, this.args.name);\n }\n\n get errors(): ValidationError<DATA[KEY]>[] | undefined {\n return this.args.errors?.[this.args.name];\n }\n\n get invalid(): boolean {\n return this.errors !== undefined;\n }\n\n get valueAsString(): string | undefined {\n assert(\n `Only string values are expected for ${String(this.args.name)}, but you passed ${typeof this\n .value}`,\n // eslint-disable-next-line unicorn/no-typeof-undefined\n typeof this.value === 'undefined' || typeof this.value === 'string'\n );\n\n return this.value;\n }\n\n get valueAsStringOrNumber(): string | number | undefined {\n assert(\n `Only string or number values are expected for ${String(\n this.args.name\n )}, but you passed ${typeof this.value}`,\n // eslint-disable-next-line unicorn/no-typeof-undefined\n typeof this.value === 'undefined' ||\n typeof this.value === 'string' ||\n typeof this.value === 'number'\n );\n\n return this.value;\n }\n\n get valueAsBoolean(): boolean | undefined {\n assert(\n `Only boolean values are expected for ${String(this.args.name)}, but you passed ${typeof this\n .value}`,\n // eslint-disable-next-line unicorn/no-typeof-undefined\n typeof this.value === 'undefined' || typeof this.value === 'boolean'\n );\n\n return this.value;\n }\n\n setValue = (value: DATA[KEY]): void => {\n this.args.set(this.args.name, value);\n };\n\n <template>\n {{#let\n (uniqueId) (uniqueId) (fn @triggerValidationFor @name) (if @element @element (element \"div\"))\n as |fieldId errorId triggerValidation Element|\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=this.value\n setValue=this.setValue\n id=fieldId\n errorId=errorId\n invalid=this.invalid\n rawErrors=this.errors\n triggerValidation=triggerValidation\n captureEvents=(modifier\n CaptureEventsModifier\n event=(if this.invalid @fieldRevalidationEvent @fieldValidationEvent)\n triggerValidation=triggerValidation\n )\n manageValidation=(modifier\n this.ManagaValidationModifier\n invalid=this.invalid\n errorMessageId=errorId\n name=@name\n showErrorsFor=@showErrorsFor\n )\n )\n }}\n\n {{#if this.errors}}\n <Errors @id={{errorId}} @errors={{this.errors}} />\n {{/if}}\n </Element>\n {{/let}}\n </template>\n}\n","import Component from '@glimmer/component';\n\nimport styles from '@hokulea/core/forms.module.css';\n\nimport Checkbox from '../../../../components/checkbox.gts';\nimport { asBoolean } from '../../../helpers.ts';\nimport Description from '../description.gts';\nimport Label from '../label.gts';\n\nimport type { CheckboxSignature } from '../../../../components/checkbox.gts';\nimport type { FormData, FormKey, UserData } from '../../index.ts';\nimport type { BoundField, FieldArgs } from '../field.gts';\n\nexport interface RadioFieldSignature<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> {\n Element: CheckboxSignature['Element'];\n Args: FieldArgs<DATA, KEY> &\n Omit<CheckboxSignature['Args'], 'value' | 'update'> & {\n Field: BoundField<DATA, KEY>;\n };\n}\n\nexport default class RadioField<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> extends Component<RadioFieldSignature<DATA, KEY>> {\n Field = this.args.Field;\n\n setBooleanValue = (setValue: (value: DATA[KEY]) => void) => {\n return (value: boolean) => setValue(value as DATA[KEY]);\n };\n\n <template>\n <this.Field @label=\"\" @name={{@name}} @validate={{@validate}} as |f|>\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.manageValidation}}\n {{f.captureEvents}}\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 CurrencyInput from '../../../../components/currency-input.gts';\nimport { asNumber } from '../../../helpers.ts';\n\nimport type { CurrencyInputSignature } from '../../../../components/currency-input.gts';\nimport type { FormData, FormKey, UserData } from '../../index.ts';\nimport type { BoundField, FieldArgs } from '../field.gts';\n\nexport interface CurrencyFieldSignature<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> {\n Element: CurrencyInputSignature['Element'];\n Args: FieldArgs<DATA, KEY> &\n Omit<CurrencyInputSignature['Args'], 'value' | 'update'> & {\n Field: BoundField<DATA, KEY>;\n };\n}\n\nexport default class CurrencyField<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> extends Component<CurrencyFieldSignature<DATA, KEY>> {\n Field = this.args.Field;\n\n setNumberValue = (setValue: (value: DATA[KEY]) => void) => {\n return (value: number) => setValue(value as DATA[KEY]);\n };\n\n <template>\n <this.Field\n @name={{@name}}\n @label={{@label}}\n @description={{@description}}\n @validate={{@validate}}\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.manageValidation}}\n {{f.captureEvents}}\n ...attributes\n />\n </this.Field>\n </template>\n}\n","import Component from '@glimmer/component';\n\nimport DateInput from '../../../../components/date-input.gts';\nimport { asString } from '../../../helpers.ts';\n\nimport type { DateInputSignature } from '../../../../components/date-input.gts';\nimport type { FormData, FormKey, UserData } from '../../index.ts';\nimport type { BoundField, FieldArgs } from '../field.gts';\n\nexport interface DateFieldSignature<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> {\n Element: DateInputSignature['Element'];\n Args: FieldArgs<DATA, KEY> &\n Omit<DateInputSignature['Args'], 'value' | 'update'> & {\n Field: BoundField<DATA, KEY>;\n };\n}\n\nexport default class DateField<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> extends Component<DateFieldSignature<DATA, KEY>> {\n Field = this.args.Field;\n\n setStringValue = (setValue: (value: DATA[KEY]) => void) => {\n return (value: string) => setValue(value as DATA[KEY]);\n };\n\n <template>\n <this.Field\n @name={{@name}}\n @label={{@label}}\n @description={{@description}}\n @validate={{@validate}}\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.manageValidation}}\n {{f.captureEvents}}\n ...attributes\n />\n </this.Field>\n </template>\n}\n","import Component from '@glimmer/component';\n\nimport EmailInput from '../../../../components/email-input.gts';\nimport { asString } from '../../../helpers.ts';\n\nimport type { EmailInputSignature } from '../../../../components/email-input.gts';\nimport type { FormData, FormKey, UserData } from '../../index.ts';\nimport type { BoundField, FieldArgs } from '../field.gts';\n\nexport interface EmailFieldSignature<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> {\n Element: EmailInputSignature['Element'];\n Args: FieldArgs<DATA, KEY> &\n Omit<EmailInputSignature['Args'], 'value' | 'update'> & {\n Field: BoundField<DATA, KEY>;\n };\n}\n\nexport default class EmailField<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> extends Component<EmailFieldSignature<DATA, KEY>> {\n Field = this.args.Field;\n\n setStringValue = (setValue: (value: DATA[KEY]) => void) => {\n return (value: string) => setValue(value as DATA[KEY]);\n };\n\n <template>\n <this.Field\n @name={{@name}}\n @label={{@label}}\n @description={{@description}}\n @validate={{@validate}}\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.manageValidation}}\n {{f.captureEvents}}\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 '../../../../components/list.gts';\nimport Label from '../label.gts';\n\nimport type { ListSignature } from '../../../../components/list.gts';\nimport type { FormData, FormKey, UserData } from '../../index.ts';\nimport type { BoundField, FieldArgs } from '../field.gts';\nimport type { TOC } from '@ember/component/template-only';\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 KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> {\n Element: ListSignature<DATA[KEY]>['Element'];\n Args: FieldArgs<DATA, KEY> &\n Omit<ListSignature<DATA[KEY]>['Args'], 'selection' | 'update'> & {\n Field: BoundField<DATA, KEY>;\n };\n Blocks: ListSignature<DATA[KEY]>['Blocks'];\n}\n\nexport default class ListField<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> extends Component<ListFieldSignature<DATA, KEY>> {\n Field = this.args.Field;\n List = List<DATA[KEY]>;\n\n setValue = (setValue: (value: DATA[KEY]) => void) => {\n return (value: DATA[KEY] | DATA[KEY][]) => setValue(value as DATA[KEY]);\n };\n\n asValue = (value: unknown) => value as DATA[KEY];\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 @validate={{@validate}}\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.manageValidation}}\n {{f.captureEvents}}\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 '../../../../components/checkbox.gts';\nimport Description from '../description.gts';\nimport Label from '../label.gts';\n\nimport type { RadioSignature } from '../../../../components/radio';\nimport type { FormData, FormKey, UserData } from '../../';\nimport type { BoundField, FieldArgs, FieldBlock, MultipleFieldBlock } from '../field';\nimport type { WithBoundArgs } from '@glint/template';\n\nexport interface OptionSignature<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\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, KEY>;\n };\n Blocks: {\n default: [];\n };\n}\n\nclass Option<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> extends Component<OptionSignature<DATA, KEY>> {\n select = (checked: boolean) => {\n if (checked) {\n this.args.field.setValue([...(this.args.field.value ?? []), this.args.value] as DATA[KEY][]);\n } else {\n const values = this.args.field.value;\n const index = this.args.field.value?.indexOf(this.args.value as DATA[KEY]);\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 DATA[KEY]);\n }\n\n <template>\n {{#let (uniqueId) as |id|}}\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.manageValidation}}\n {{@field.captureEvents}}\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 MultipleChoiceFieldSignature<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> {\n Args: FieldArgs<DATA, KEY> & {\n disabled?: boolean;\n Field: BoundField<DATA, KEY>;\n };\n Blocks: {\n default: [\n {\n Option: WithBoundArgs<typeof Option<DATA, KEY>, 'field' | 'name'>;\n }\n ];\n };\n}\n\nexport default class MultipleChoiceField<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> extends Component<MultipleChoiceFieldSignature<DATA, KEY>> {\n Field = this.args.Field;\n Option = Option<DATA, KEY>;\n\n asMultiField = (field: FieldBlock<DATA, KEY>) => {\n return field as MultipleFieldBlock<DATA, KEY>;\n };\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 @validate={{@validate}}\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 NumberInput from '../../../../components/number-input.gts';\nimport { asNumber } from '../../../helpers.ts';\n\nimport type { NumberInputSignature } from '../../../../components/number-input.gts';\nimport type { FormData, FormKey, UserData } from '../../index.ts';\nimport type { BoundField, FieldArgs } from '../field.gts';\n\nexport interface NumberFieldSignature<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> {\n Element: NumberInputSignature['Element'];\n Args: FieldArgs<DATA, KEY> &\n Omit<NumberInputSignature['Args'], 'value' | 'update'> & {\n Field: BoundField<DATA, KEY>;\n };\n}\n\nexport default class NumberField<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> extends Component<NumberFieldSignature<DATA, KEY>> {\n Field = this.args.Field;\n\n setNumberValue = (setValue: (value: DATA[KEY]) => void) => {\n return (value: number) => setValue(value as DATA[KEY]);\n };\n\n <template>\n <this.Field\n @name={{@name}}\n @label={{@label}}\n @description={{@description}}\n @validate={{@validate}}\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.manageValidation}}\n {{f.captureEvents}}\n ...attributes\n />\n </this.Field>\n </template>\n}\n","import Component from '@glimmer/component';\n\nimport PasswordInput from '../../../../components/password-input.gts';\nimport { asString } from '../../../helpers.ts';\n\nimport type { PasswordInputSignature } from '../../../../components/password-input.gts';\nimport type { FormData, FormKey, UserData } from '../../index.ts';\nimport type { BoundField, FieldArgs } from '../field.gts';\n\nexport interface PasswordFieldSignature<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> {\n Element: PasswordInputSignature['Element'];\n Args: FieldArgs<DATA, KEY> &\n Omit<PasswordInputSignature['Args'], 'value' | 'update'> & {\n Field: BoundField<DATA, KEY>;\n };\n}\n\nexport default class PasswordField<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> extends Component<PasswordFieldSignature<DATA, KEY>> {\n Field = this.args.Field;\n\n setStringValue = (setValue: (value: DATA[KEY]) => void) => {\n return (value: string) => setValue(value as DATA[KEY]);\n };\n\n <template>\n <this.Field\n @name={{@name}}\n @label={{@label}}\n @description={{@description}}\n @validate={{@validate}}\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.manageValidation}}\n {{f.captureEvents}}\n ...attributes\n />\n </this.Field>\n </template>\n}\n","import Component from '@glimmer/component';\n\nimport PhoneInput from '../../../../components/phone-input.gts';\nimport { asString } from '../../../helpers.ts';\n\nimport type { PhoneInputSignature } from '../../../../components/phone-input.gts';\nimport type { FormData, FormKey, UserData } from '../../index.ts';\nimport type { BoundField, FieldArgs } from '../field.gts';\n\nexport interface PhoneFieldSignature<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> {\n Element: PhoneInputSignature['Element'];\n Args: FieldArgs<DATA, KEY> &\n Omit<PhoneInputSignature['Args'], 'value' | 'update'> & {\n Field: BoundField<DATA, KEY>;\n };\n}\n\nexport default class PhoneField<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> extends Component<PhoneFieldSignature<DATA, KEY>> {\n Field = this.args.Field;\n\n setStringValue = (setValue: (value: DATA[KEY]) => void) => {\n return (value: string) => setValue(value as DATA[KEY]);\n };\n\n <template>\n <this.Field\n @name={{@name}}\n @label={{@label}}\n @description={{@description}}\n @validate={{@validate}}\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.manageValidation}}\n {{f.captureEvents}}\n ...attributes\n />\n </this.Field>\n </template>\n}\n","import Component from '@glimmer/component';\n\nimport RangeInput from '../../../../components/range-input.gts';\nimport { asNumber } from '../../../helpers.ts';\n\nimport type { RangeInputSignature } from '../../../../components/range-input.gts';\nimport type { FormData, FormKey, UserData } from '../../index.ts';\nimport type { BoundField, FieldArgs } from '../field.gts';\n\nexport interface RangeFieldSignature<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> {\n Element: RangeInputSignature['Element'];\n Args: FieldArgs<DATA, KEY> &\n Omit<RangeInputSignature['Args'], 'value' | 'update'> & {\n Field: BoundField<DATA, KEY>;\n };\n}\n\nexport default class RangeField<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> extends Component<RangeFieldSignature<DATA, KEY>> {\n Field = this.args.Field;\n\n setNumberValue = (setValue: (value: DATA[KEY]) => void) => {\n return (value: number) => setValue(value as DATA[KEY]);\n };\n\n <template>\n <this.Field\n @name={{@name}}\n @label={{@label}}\n @description={{@description}}\n @validate={{@validate}}\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.manageValidation}}\n {{f.captureEvents}}\n ...attributes\n />\n </this.Field>\n </template>\n}\n","import Component from '@glimmer/component';\n\nimport Select from '../../../../components/select.gts';\nimport { asString } from '../../../helpers.ts';\n\nimport type { SelectSignature, Value } from '../../../../components/select.gts';\nimport type { FormData, FormKey, UserData } from '../../index.ts';\nimport type { BoundField, FieldArgs } from '../field.gts';\n\nexport interface SelectFieldSignature<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> {\n Element: SelectSignature['Element'];\n Args: FieldArgs<DATA, KEY> &\n Omit<SelectSignature['Args'], 'selection' | 'update'> & {\n Field: BoundField<DATA, KEY>;\n };\n Blocks: SelectSignature['Blocks'];\n}\n\nexport default class SelectField<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> extends Component<SelectFieldSignature<DATA, KEY>> {\n Field = this.args.Field;\n\n setValue = (setValue: (value: DATA[KEY]) => void) => {\n return (value: Value | Value[]) => setValue(value as DATA[KEY]);\n };\n\n <template>\n <this.Field\n @name={{@name}}\n @label={{@label}}\n @description={{@description}}\n @validate={{@validate}}\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.manageValidation}}\n {{f.captureEvents}}\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 Radio from '../../../../components/radio.gts';\nimport { eq } from '../../../helpers.ts';\nimport Description from '../description.gts';\nimport Label from '../label.gts';\n\nimport type { RadioSignature } from '../../../../components/radio';\nimport type { FormData, FormKey, UserData } from '../../';\nimport type { BoundField, FieldArgs, FieldBlock } from '../field';\nimport type { WithBoundArgs } from '@glint/template';\n\nexport interface OptionSignature<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\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, KEY>;\n };\n Blocks: {\n default: [];\n };\n}\n\nclass Option<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> extends Component<OptionSignature<DATA, KEY>> {\n select = () => {\n this.args.field.setValue(this.args.value as DATA[KEY]);\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.manageValidation}}\n {{@field.captureEvents}}\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 KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> {\n Args: FieldArgs<DATA, KEY> & {\n disabled?: boolean;\n Field: BoundField<DATA, KEY>;\n };\n Blocks: {\n default: [\n {\n Option: WithBoundArgs<typeof Option<DATA, KEY>, 'field' | 'name'>;\n }\n ];\n };\n}\n\nexport default class SingularChoiceField<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> extends Component<SingularChoiceFieldSignature<DATA, KEY>> {\n Field = this.args.Field;\n Option = Option<DATA, KEY>;\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 @validate={{@validate}}\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 TextInput from '../../../../components/text-input.gts';\nimport { asString } from '../../../helpers.ts';\n\nimport type { TextInputSignature } from '../../../../components/text-input.gts';\nimport type { FormData, FormKey, UserData } from '../../index.ts';\nimport type { BoundField, FieldArgs } from '../field.gts';\n\nexport interface TextFieldSignature<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> {\n Element: TextInputSignature['Element'];\n Args: FieldArgs<DATA, KEY> &\n Omit<TextInputSignature['Args'], 'value' | 'update'> & {\n Field: BoundField<DATA, KEY>;\n };\n}\n\nexport default class TextField<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> extends Component<TextFieldSignature<DATA, KEY>> {\n Field = this.args.Field;\n\n setStringValue = (setValue: (value: DATA[KEY]) => void) => {\n return (value: string) => setValue(value as DATA[KEY]);\n };\n\n <template>\n <this.Field\n @name={{@name}}\n @label={{@label}}\n @description={{@description}}\n @validate={{@validate}}\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.manageValidation}}\n {{f.captureEvents}}\n ...attributes\n />\n </this.Field>\n </template>\n}\n","import Component from '@glimmer/component';\n\nimport TextArea from '../../../../components/text-area.gts';\nimport { asString } from '../../../helpers.ts';\n\nimport type { TextAreaSignature } from '../../../../components/text-area.gts';\nimport type { FormData, FormKey, UserData } from '../../index.ts';\nimport type { BoundField, FieldArgs } from '../field.gts';\n\nexport interface TextAreaFieldSignature<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> {\n Element: TextAreaSignature['Element'];\n Args: FieldArgs<DATA, KEY> &\n Omit<TextAreaSignature['Args'], 'value' | 'update'> & {\n Field: BoundField<DATA, KEY>;\n };\n}\n\nexport default class TextField<\n DATA extends UserData,\n KEY extends FormKey<FormData<DATA>> = FormKey<FormData<DATA>>\n> extends Component<TextAreaFieldSignature<DATA, KEY>> {\n Field = this.args.Field;\n\n setStringValue = (setValue: (value: DATA[KEY]) => void) => {\n return (value: string) => setValue(value as DATA[KEY]);\n };\n\n <template>\n <this.Field\n @name={{@name}}\n @label={{@label}}\n @description={{@description}}\n @validate={{@validate}}\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.manageValidation}}\n {{f.captureEvents}}\n ...attributes\n />\n </this.Field>\n </template>\n}\n","import styles from '@hokulea/core/actions.module.css';\n\nimport disabled from '../../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 '../../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","/**\n * What the user can pass as @data\n */\nexport type UserData = object;\n\n/**\n * The subset of properties of DATA, whose keys are strings (and not number or symbol)\n * Only this data is useable in the form\n */\nexport type FormData<DATA extends UserData = UserData> = OnlyStringKeys<DATA>;\n\n/**\n * Returns the type of all keys of DATA, that are also strings. Only strings can be used as field @name\n */\nexport type FormKey<DATA extends UserData> = keyof DATA & string;\n\n/**\n * Generic interface for all validation errors\n */\nexport interface ValidationError<T = unknown> {\n type: string;\n // @todo does a validator need to add this? we already have the value internally\n value: T;\n message?: string;\n}\n\nexport type ErrorRecord<DATA extends FormData, KEY extends FormKey<DATA> = FormKey<DATA>> = Partial<\n Record<KEY, ValidationError<DATA[KEY]>[]>\n>;\n\n/**\n * Callback used for form level validation\n */\nexport type FormValidateCallback<DATA extends FormData> = (\n formData: DATA,\n fields: FormKey<DATA>[]\n) => undefined | ErrorRecord<DATA> | Promise<undefined | ErrorRecord<DATA>>;\n\n/**\n * Callback used for field level validation\n */\nexport type FieldValidateCallback<\n DATA extends FormData,\n KEY extends FormKey<DATA> = FormKey<DATA>\n> = (\n fieldValue: DATA[KEY],\n fieldName: KEY,\n formData: DATA\n) => undefined | ValidationError<DATA[KEY]>[] | Promise<undefined | ValidationError<DATA[KEY]>[]>;\n\n/**\n * Internal structure to track used fields\n * @private\n */\nexport interface FieldRegistrationData<\n DATA extends FormData,\n KEY extends FormKey<DATA> = FormKey<DATA>\n> {\n validate?: FieldValidateCallback<DATA, KEY>;\n}\n\n/**\n * For internal field registration\n * @private\n */\nexport type RegisterFieldCallback<\n DATA extends FormData,\n KEY extends FormKey<DATA> = FormKey<DATA>\n> = (name: KEY, field: FieldRegistrationData<DATA, KEY>) => void;\n\nexport type UnregisterFieldCallback<\n DATA extends FormData,\n KEY extends FormKey<DATA> = FormKey<DATA>\n> = (name: KEY) => void;\n\n/**\n * Mapper type to construct subset of objects, whose keys are only strings (and not number or symbol)\n */\nexport type OnlyStringKeys<T extends object> = Pick<T, keyof T & string>;\n\nexport function mergeErrorRecord<DATA extends FormData, KEY extends FormKey<DATA> = FormKey<DATA>>(\n ...records: (ErrorRecord<DATA, KEY> | undefined)[]\n): ErrorRecord<DATA, KEY> {\n const errors: ErrorRecord<DATA, KEY> = {};\n\n for (const record of records) {\n if (!record) {\n continue;\n }\n\n for (const [name, fieldErrors] of Object.entries(record) as [\n // TS does not infer the types correctly here, fieldErrors would be unknown, not sure why\n KEY,\n ValidationError<DATA[KEY]>[]\n ][]) {\n const existingFieldErrors = errors[name];\n\n errors[name] = existingFieldErrors ? [...existingFieldErrors, ...fieldErrors] : fieldErrors;\n }\n }\n\n return errors;\n}\n","import Component from '@glimmer/component';\nimport { cached, tracked } from '@glimmer/tracking';\nimport { assert, warn } from '@ember/debug';\nimport { hash } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport { set } from '@ember/object';\n\nimport { TrackedAsyncData } from 'ember-async-data';\nimport { modifier } from 'ember-modifier';\nimport { TrackedObject } from 'tracked-built-ins';\n\nimport styles from '@hokulea/core/forms.module.css';\n\nimport Field from '../-private/form/components/field.gts';\nimport CheckboxField from '../-private/form/components/fields/checkbox.gts';\nimport CurrencyField from '../-private/form/components/fields/currency.gts';\nimport DateField from '../-private/form/components/fields/date.gts';\nimport EmailField from '../-private/form/components/fields/email.gts';\nimport ListField from '../-private/form/components/fields/list.gts';\nimport MultipleChoiceField from '../-private/form/components/fields/multiple-choice.gts';\nimport NumberField from '../-private/form/components/fields/number.gts';\nimport PasswordField from '../-private/form/components/fields/password.gts';\nimport PhoneField from '../-private/form/components/fields/phone.gts';\nimport RangeField from '../-private/form/components/fields/range.gts';\nimport SelectField from '../-private/form/components/fields/select.gts';\nimport SingularChoiceField from '../-private/form/components/fields/singular-choice.gts';\nimport TextField from '../-private/form/components/fields/text.gts';\nimport TextAreaField from '../-private/form/components/fields/text-area.gts';\nimport Reset from '../-private/form/components/reset.gts';\nimport Submit from '../-private/form/components/submit.gts';\nimport { mergeErrorRecord } from '../-private/form/index.ts';\n\nimport type { BoundField } from '../-private/form/components/field.gts';\nimport type {\n ErrorRecord,\n FieldRegistrationData,\n FieldValidateCallback,\n FormData,\n FormKey,\n FormValidateCallback,\n UserData,\n ValidationError\n} from '../-private/form/index.ts';\nimport type { WithBoundArgs } from '@glint/template';\n\nexport interface FormBuilder<DATA extends UserData, SUBMISSION_VALUE> {\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 * The (async) validation state as `TrackedAsyncData`.\n *\n * Use derived state like `.isPending` to render the UI conditionally.\n */\n validationState?: TrackedAsyncData<ErrorRecord<DATA>>;\n\n /**\n * The (async) submission state as `TrackedAsyncData`.\n *\n * Use derived state like `.isPending` to render the UI conditionally.\n */\n submissionState?: TrackedAsyncData<SUBMISSION_VALUE>;\n\n /**\n * Will be true if at least one form field is invalid.\n */\n invalid: boolean;\n\n /**\n * An ErrorRecord, for custom rendering of error output\n */\n rawErrors?: ErrorRecord<DATA>;\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: () => void;\n\n /**\n * Yielded action that will reset form state, same as when triggering the native `reset` event on the form.\n */\n reset: () => void;\n}\n\ntype ValidateOn = 'change' | 'focusout' | 'submit' | 'input';\n\nexport interface FormSignature<DATA extends UserData, SUBMISSION_VALUE> {\n Element: HTMLFormElement;\n Args: {\n /**\n * The initial data the form will use to pre-populate the fields.\n *\n * Make sure the type of it matches what you expect the form to represent, i.e. the names of all form fields match the properties of the data and their respective types!\n */\n data?: DATA;\n\n /**\n * By default the data you pass as `@data` is never mutated by the form component, you will only receive the updated data (a copy) on successful submission via `@onSubmit`.\n * Setting this to `'mutable'` will mutate the data whenever the user updates a field. This is especially useful when the data already has some \"buffering\" behavior, like with `ember-changeset`.\n */\n dataMode?: 'mutable' | 'immutable';\n\n /**\n * Specify when to dynamically validate a field before even submitting the whole form. By default this is `submit`, which means no dynamic validation happens. Another common setting is to validate on `focusout`.\n */\n validateOn?: ValidateOn;\n\n /**\n * Specify when to revalidate a previously validated field that is invalid. By default this happens on `change`. Another common setting is to revalidate on `input`.\n * Mind that text-based inputs don't emit the `change` event on every key stroke, but only on focusing out. Changing this to `input` would make text-based inputs revalidate on every key stroke.\n */\n revalidateOn?: ValidateOn;\n\n /**\n * Provide a custom validation function, that operates on all fields of the form. Eventual validation errors are merged with native validation errors to determine the effective set of errors rendered in the form.\n *\n * Return undefined when no validation errors are present, otherwise an `ErrorRecord` mapping (one or multiple) `ValidationError`s to each invalid field.\n */\n validate?: FormValidateCallback<DATA>;\n\n /**\n * Allows you to opt-out of native validation.\n *\n * This can be useful if all of the validation logic is already handled by the `@validate` hooks, but you have form controls that have validation requirements (e.g. `email` type) that would cause the native validation to interfere.\n */\n ignoreNativeValidation?: boolean;\n\n /**\n * Called when the user has submitted the form and no validation errors have been determined. Receives the new form data, or in case of `@dataMode=\"mutable\"` the original data object.\n */\n submit?: (data: FormData<DATA>) => SUBMISSION_VALUE | Promise<SUBMISSION_VALUE>;\n\n /**\n * Called when the user tried to submit the form, but validation failed. Receives the new data (or in case of `@dataMode=\"mutable\"` the original data object), and the record of validation errors by field.\n */\n invalidated?: (data: FormData<DATA>, errors: ErrorRecord<FormData<DATA>>) => void;\n };\n Blocks: {\n default: [FormBuilder<DATA, SUBMISSION_VALUE>];\n };\n}\n\n/**\n * This internal data structure maintains information about each field that is registered to the form by `registerField`.\n */\nclass FieldData<DATA extends FormData, KEY extends FormKey<DATA> = FormKey<DATA>> {\n constructor(fieldRegistration: FieldRegistrationData<DATA, KEY>) {\n this.validate = fieldRegistration.validate;\n }\n\n /**\n * tracked state that enabled a dynamic validation of a field *before* the whole form is submitted, e.g. by `@validateOn=\"blur\" and the blur event being triggered for that particular field.\n */\n @tracked validationEnabled = false;\n\n /**\n * The *field* level validation callback passed to the field as in `<form.field @name=\"foo\" @validate={{this.validateCallback}}>`\n */\n validate?: FieldValidateCallback<DATA, KEY>;\n}\n\nexport default class Form<DATA extends UserData, SUBMISSION_VALUE> extends Component<\n FormSignature<DATA, SUBMISSION_VALUE>\n> {\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 RangeField = RangeField<DATA>;\n PasswordField = PasswordField<DATA>;\n PhoneField = PhoneField<DATA>;\n SelectField = SelectField<DATA>;\n SingularChoiceField = SingularChoiceField<DATA>;\n TextField = TextField<DATA>;\n TextAreaField = TextAreaField<DATA>;\n\n formElement?: HTMLFormElement;\n\n registerForm = modifier((el: HTMLFormElement, _p: []) => {\n this.formElement = el;\n });\n\n submit = async (e?: Event): Promise<void> => {\n e?.preventDefault();\n\n await this.validateWithState();\n this.showAllValidations = true;\n\n if (this.validationErrorsExist) {\n assert(\n 'Validation errors expected to be present. If you see this, please report it as a bug to ember-headless-form!',\n // with optional chaining this leads to a NPE\n // eslint-disable-next-line @typescript-eslint/prefer-optional-chain\n this.validationState && this.validationState.isResolved\n );\n this.args.invalidated?.(this.effectiveData, this.validationState.value);\n } else {\n if (this.args.submit) {\n this.submissionState = new TrackedAsyncData(this.args.submit(this.effectiveData));\n }\n }\n };\n\n reset = (e?: Event): void => {\n e?.preventDefault();\n\n for (const key of Object.keys(this.internalData)) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this.internalData[key as keyof DATA];\n }\n\n this.validationState = undefined;\n this.submissionState = undefined;\n };\n\n /**\n * A copy of the passed `@data` stored internally, which is only passed back to the component consumer after a (successful) form submission.\n */\n internalData: DATA = new TrackedObject({}) as DATA;\n\n @cached\n get effectiveData(): DATA {\n const obj: DATA = this.args.data ?? ({} as DATA);\n\n if (this.args.dataMode === 'mutable') {\n return obj;\n }\n\n const { internalData } = this;\n\n return new Proxy(obj, {\n get(target, prop) {\n return prop in internalData ? internalData[prop as keyof DATA] : Reflect.get(target, prop);\n },\n\n set(_target, property, value) {\n return Reflect.set(internalData, property, value);\n },\n\n has(target, prop) {\n return prop in internalData ? true : Reflect.has(target, prop);\n },\n\n getOwnPropertyDescriptor(target, prop) {\n return Reflect.getOwnPropertyDescriptor(prop in internalData ? internalData : target, prop);\n },\n\n ownKeys(target) {\n return (\n [...Reflect.ownKeys(target), ...Reflect.ownKeys(internalData)]\n // return only unique values\n .filter((value, index, array) => array.indexOf(value) === index)\n );\n },\n\n deleteProperty(_target, prop) {\n if (prop in internalData) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete internalData[prop as keyof DATA];\n }\n\n return true;\n }\n });\n }\n\n fields = new Map<FormKey<FormData<DATA>>, FieldData<FormData<DATA>>>();\n\n registerField = (\n name: FormKey<FormData<DATA>>,\n field: FieldRegistrationData<FormData<DATA>>\n ): void => {\n assert(\n `You passed @name=\"${String(\n name\n )}\" to the form field, but this is already in use. Names of form fields must be unique!`,\n !this.fields.has(name)\n );\n this.fields.set(name, new FieldData(field));\n };\n\n unregisterField = (name: FormKey<FormData<DATA>>): void => {\n this.fields.delete(name);\n };\n\n set = <KEY extends FormKey<FormData<DATA>>>(key: KEY, value: DATA[KEY]): void => {\n // when @mutableData is set, our effectiveData is something we don't control, i.e. might require old-school set() to be on the safe side\n set(this.effectiveData, key, value);\n\n // console.log('internalData', this.internalData);\n };\n\n @tracked validationState?: TrackedAsyncData<ErrorRecord<DATA>>;\n @tracked submissionState?: TrackedAsyncData<SUBMISSION_VALUE>;\n\n /**\n * When this is set to true by submitting the form, eventual validation errors are show for *all* field, regardless of their individual dynamic validation status in `FieldData#validationEnabled`\n */\n @tracked showAllValidations = false;\n\n get validateOn(): ValidateOn {\n return this.args.validateOn ?? 'submit';\n }\n\n get revalidateOn(): ValidateOn {\n return this.args.revalidateOn ?? 'change';\n }\n\n /**\n * Return the event type that will be listened on for dynamic validation (i.e. *before* submitting)\n */\n get fieldValidationEvent(): 'focusout' | 'change' | 'input' | undefined {\n const { validateOn } = this;\n\n return validateOn === 'submit'\n ? // no need for dynamic validation, as validation always happens on submit\n undefined\n : validateOn;\n }\n\n /**\n * Return the event type that will be listened on for dynamic *re*validation, i.e. updating the validation status of a field that has been previously marked as invalid\n */\n get fieldRevalidationEvent(): 'focusout' | 'change' | 'input' | undefined {\n const { validateOn, revalidateOn } = this;\n\n return revalidateOn === 'submit'\n ? // no need for dynamic validation, as validation always happens on submit\n undefined\n : // when validation happens more frequently than revalidation, then we can ignore revalidation, because the validation handler will already cover us\n validateOn === 'input' ||\n (validateOn === 'change' && revalidateOn === 'focusout') ||\n validateOn === revalidateOn\n ? undefined\n : revalidateOn;\n }\n\n /**\n * Return true if validation has happened (by submitting or by an `@validateOn` event being triggered) and at least one field is invalid\n */\n get validationErrorsExist(): boolean {\n const { validationState } = this;\n\n // Only consider validation errors for which we actually have a field rendered\n return validationState?.isResolved\n ? Object.keys(validationState.value).some((name) =>\n this.fields.has(name as FormKey<FormData<DATA>>)\n )\n : false;\n }\n\n /**\n * Call the passed validation callbacks, defined both on the whole form as well as on field level, and return the merged result for all fields.\n */\n async validate(): Promise<ErrorRecord<FormData<DATA>>> {\n const nativeValidation = this.args.ignoreNativeValidation === true ? {} : this.validateNative();\n const customFormValidation = await this.args.validate?.(this.effectiveData, [\n ...this.fields.keys()\n ]);\n const customFieldValidations: ErrorRecord<FormData<DATA>>[] = [];\n\n for (const [name, field] of this.fields) {\n const fieldValidationResult = await field.validate?.(\n this.effectiveData[name],\n name,\n this.effectiveData\n );\n\n if (fieldValidationResult) {\n customFieldValidations.push({\n [name]: fieldValidationResult\n } as ErrorRecord<FormData<DATA>>);\n }\n }\n\n return mergeErrorRecord(nativeValidation, customFormValidation, ...customFieldValidations);\n }\n\n validateWithState = async (): Promise<ErrorRecord<FormData<DATA>>> => {\n const promise = this.validate();\n\n this.validationState = new TrackedAsyncData(promise);\n\n return promise;\n };\n\n validateNative(): ErrorRecord<FormData<DATA>> | undefined {\n const form = this.formElement;\n\n assert(\n 'Form element expected to be present. If you see this, please report it as a bug to ember-headless-form!',\n form\n );\n\n if (form.checkValidity()) {\n return;\n }\n\n const errors: ErrorRecord<FormData<DATA>> = {};\n\n for (const el of form.elements) {\n // This is just to make TS happy, as we need to access properties on el that only form elements have, but elements in `form.elements` are just typed as plain `Element`. Should never occur in reality.\n assert(\n 'Unexpected form element. If you see this, please report it as a bug to ember-headless-form!',\n el instanceof HTMLInputElement ||\n el instanceof HTMLTextAreaElement ||\n el instanceof HTMLSelectElement ||\n el instanceof HTMLButtonElement ||\n el instanceof HTMLFieldSetElement ||\n el instanceof HTMLObjectElement ||\n el instanceof HTMLOutputElement\n );\n\n if (el.validity.valid) {\n continue;\n }\n\n const name = el.name as FormKey<FormData<DATA>>;\n\n if (this.fields.has(name)) {\n errors[name] = [\n {\n type: 'native',\n value: this.effectiveData[name],\n message: el.validationMessage\n }\n ];\n } else {\n warn(\n `An invalid form element with name \"${name}\" was detected, but this name is not used as a form field. It will be ignored for validation. Make sure to apply the correct name to custom form elements that participate in form validation!`,\n { id: 'headless-form.invalid-control-for-unknown-field' }\n );\n }\n }\n\n return errors;\n }\n\n /**\n * Return a mapping of field to validation errors, for all fields that are invalid *and* for which validation errors should be visible.\n * Validation errors will be visible for a certain field, if validation errors for *all* fields are visible, which is the case when trying to submit the form,\n * or when that field has triggered the event given by `@validateOn` for showing validation errors before submitting, e.g. on blur.\n */\n get visibleErrors(): ErrorRecord<FormData<DATA>> | undefined {\n if (!this.validationState?.isResolved) {\n return undefined;\n }\n\n const visibleErrors: ErrorRecord<FormData<DATA>> = {};\n\n for (const [field, errors] of Object.entries(this.validationState.value) as [\n FormKey<FormData<DATA>>,\n ValidationError<FormData<DATA>[FormKey<FormData<DATA>>]>[]\n ][]) {\n if (this.showErrorsFor(field)) {\n visibleErrors[field] = errors;\n }\n }\n\n return visibleErrors;\n }\n\n /**\n * Given a field name, return if eventual errors for the field should be visible. See `visibleErrors` for further details.\n */\n showErrorsFor = (field: FormKey<FormData<DATA>>): boolean => {\n return this.showAllValidations || (this.fields.get(field)?.validationEnabled ?? false);\n };\n\n /**\n * Handle the `@validateOn` event for a certain field, e.g. \"blur\".\n * Associating the event with a field is done by looking at the event target's `name` attribute, which must match one of the `<form.field @name=\"...\">` invocations by the user's template.\n * Validation will be triggered, and the particular field will be marked to show eventual validation errors.\n */\n handleFieldValidation = async (e: Event | string): Promise<void> => {\n let name: string;\n\n if (typeof e === 'string') {\n name = e;\n } else {\n const { target } = e;\n\n name = (target as HTMLInputElement).name;\n }\n\n if (name) {\n const field = this.fields.get(name as FormKey<FormData<DATA>>);\n\n if (field) {\n await this.validateWithState();\n field.validationEnabled = true;\n }\n } else if (e instanceof Event) {\n warn(\n `An event of type \"${e.type}\" was received by headless-form, which is supposed to trigger validations for a certain field. But the name of that field could not be determined. Make sure that your control element has a \\`name\\` attribute matching the field, or use the yielded \\`{{field.captureEvents}}\\` to capture the events.`,\n { id: 'headless-form.validation-event-for-unknown-field' }\n );\n }\n };\n\n /**\n * Handle the `@revalidateOn` event for a certain field, e.g. \"blur\".\n * Associating the event with a field is done by looking at the event target's `name` attribute, which must match one of the `<form.field @name=\"...\">` invocations by the user's template.\n * When a field has been already marked to show validation errors by `@validateOn`, then for revalidation another validation will be triggered.\n *\n * The use case here is to allow this to happen more frequently than the initial validation, e.g. `@validateOn=\"blur\" @revalidateOn=\"change\"`.\n */\n handleFieldRevalidation = async (e: Event): Promise<void> => {\n const { target } = e;\n const { name } = target as HTMLInputElement;\n\n if (name) {\n if (this.showErrorsFor(name as FormKey<FormData<DATA>>)) {\n await this.validateWithState();\n }\n } else {\n warn(\n `An event of type \"${e.type}\" was received by headless-form, which is supposed to trigger validations for a certain field. But the name of that field could not be determined. Make sure that your control element has a \\`name\\` attribute matching the field, or use the yielded \\`{{field.captureEvents}}\\` to capture the events.`,\n { id: 'headless-form.validation-event-for-unknown-field' }\n );\n }\n };\n\n attachValidation = modifier(\n (el: HTMLFormElement, [eventName, handler]: [string | undefined, (e: Event) => void]) => {\n if (eventName) {\n el.addEventListener(eventName, handler);\n\n return () => el.removeEventListener(eventName, handler);\n }\n\n return;\n }\n );\n\n <template>\n <form\n novalidate\n class={{styles.form}}\n data-test-form\n ...attributes\n {{this.registerForm}}\n {{on \"submit\" this.submit}}\n {{on \"reset\" this.reset}}\n {{this.attachValidation this.fieldValidationEvent this.handleFieldValidation}}\n {{this.attachValidation this.fieldRevalidationEvent this.handleFieldRevalidation}}\n >\n {{#let\n (component\n this.Field\n data=this.effectiveData\n set=this.set\n errors=this.visibleErrors\n showErrorsFor=this.showErrorsFor\n registerField=this.registerField\n unregisterField=this.unregisterField\n triggerValidationFor=this.handleFieldValidation\n fieldValidationEvent=this.fieldValidationEvent\n fieldRevalidationEvent=this.fieldRevalidationEvent\n )\n as |WiredField|\n }}\n {{yield\n (hash\n Submit=Submit\n Reset=Reset\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 Range=(component this.RangeField Field=WiredField)\n Password=(component this.PasswordField Field=WiredField)\n Phone=(component this.PhoneField Field=WiredField)\n Select=(component this.SelectField Field=WiredField)\n SingularChoice=(component this.SingularChoiceField Field=WiredField)\n Text=(component this.TextField Field=WiredField)\n TextArea=(component this.TextAreaField Field=WiredField)\n validationState=this.validationState\n submissionState=this.submissionState\n invalid=this.validationErrorsExist\n rawErrors=this.visibleErrors\n submit=this.submit\n reset=this.reset\n )\n }}\n {{/let}}\n </form>\n </template>\n}\n"],"names":["CaptureEventsModifier","modifier","element","_pos","event","triggerValidation","addEventListener","passive","removeEventListener","ManageValidationModifier","Modifier","modify","name","showErrorsFor","invalid","errorMessageId","ariaInvalid","setAttribute","removeAttribute","parentElement","dataset","Description","setComponentTemplate","precompileTemplate","strictMode","scope","styles","templateOnly","Errors","Component","Label","Field","ManagaValidationModifier","constructor","owner","args","assert","includes","registerField","validate","willDestroy","unregisterField","value","get","data","errors","undefined","valueAsString","String","valueAsStringOrNumber","valueAsBoolean","setValue","set","uniqueId","fn","hash","RadioField","setBooleanValue","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","MultipleChoiceField","asMultiField","NumberField","NumberInput","PasswordField","PasswordInput","PhoneField","PhoneInput","RangeField","RangeInput","SelectField","Select","Radio","eq","SingularChoiceField","TextField","TextInput","TextArea","Reset","disabled","Submit","mergeErrorRecord","records","record","fieldErrors","Object","entries","existingFieldErrors","FieldData","fieldRegistration","g","prototype","tracked","i","void 0","Form","CheckboxField","TextAreaField","formElement","registerForm","el","_p","submit","e","preventDefault","validateWithState","showAllValidations","validationErrorsExist","validationState","isResolved","invalidated","effectiveData","submissionState","TrackedAsyncData","reset","key","keys","internalData","TrackedObject","obj","dataMode","Proxy","target","prop","Reflect","_target","property","has","getOwnPropertyDescriptor","ownKeys","filter","array","deleteProperty","n","cached","fields","Map","delete","validateOn","revalidateOn","fieldValidationEvent","fieldRevalidationEvent","some","nativeValidation","ignoreNativeValidation","validateNative","customFormValidation","customFieldValidations","fieldValidationResult","push","promise","form","checkValidity","elements","HTMLInputElement","HTMLTextAreaElement","HTMLSelectElement","HTMLButtonElement","HTMLFieldSetElement","HTMLObjectElement","HTMLOutputElement","validity","valid","type","message","validationMessage","warn","id","visibleErrors","validationEnabled","handleFieldValidation","Event","handleFieldRevalidation","attachValidation","eventName","handler","on"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"form.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,37 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import { assert } from '@ember/debug';
|
|
3
|
-
import CommandElement from 'ember-command/components/command-element';
|
|
4
|
-
import { element } from 'ember-element-helper';
|
|
5
|
-
import styles from '@hokulea/core/actions.module.css';
|
|
6
|
-
import { n as not } from '../helpers-DS9du02l.js';
|
|
7
|
-
import { d as disabled } from '../disabled-B_FQ0Z51.js';
|
|
8
|
-
import { i as isLink } from '../-button-KUaJCQaB.js';
|
|
9
|
-
import Icon from './icon.js';
|
|
10
|
-
import { precompileTemplate } from '@ember/template-compilation';
|
|
11
|
-
import { setComponentTemplate } from '@ember/component';
|
|
12
|
-
|
|
13
|
-
class IconButton extends Component {
|
|
14
|
-
get label() {
|
|
15
|
-
assert('Please provide a `@label` to `<IconButton>` for accessibility reasons.',
|
|
16
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
17
|
-
this.args.label !== undefined);
|
|
18
|
-
return this.args.label;
|
|
19
|
-
}
|
|
20
|
-
static {
|
|
21
|
-
setComponentTemplate(precompileTemplate("\n <CommandElement @element={{element \"button\"}} @command={{@push}} class=\"{{styles.iconButton}}\" type={{if (not (isLink @push)) \"button\"}} data-intent={{if @intent @intent \"action\"}} data-importance={{if @importance @importance \"supreme\"}} data-spacing={{@spacing}} aria-label={{this.label}} {{disabled when=(if @disabled @disabled false)}} data-test-icon-button ...attributes>\n <Icon @icon={{@icon}} data-test-icon-button=\"icon\" />\n </CommandElement>\n ", {
|
|
22
|
-
strictMode: true,
|
|
23
|
-
scope: () => ({
|
|
24
|
-
CommandElement,
|
|
25
|
-
element,
|
|
26
|
-
styles,
|
|
27
|
-
not,
|
|
28
|
-
isLink,
|
|
29
|
-
disabled,
|
|
30
|
-
Icon
|
|
31
|
-
})
|
|
32
|
-
}), this);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export { IconButton as default };
|
|
1
|
+
export { I as default } from '../icon-button-7K-W_8jc.js';
|
|
37
2
|
//# sourceMappingURL=icon-button.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icon-button.js","sources":[
|
|
1
|
+
{"version":3,"file":"icon-button.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/dist/components/icon.js
CHANGED
|
@@ -1,16 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import styles from '@hokulea/core/icons.module.css';
|
|
3
|
-
import { precompileTemplate } from '@ember/template-compilation';
|
|
4
|
-
import { setComponentTemplate } from '@ember/component';
|
|
5
|
-
import templateOnly from '@ember/component/template-only';
|
|
6
|
-
|
|
7
|
-
const Icon = setComponentTemplate(precompileTemplate("\n <span class={{styles.icon}} data-test-icon ...attributes>\n {{htmlSafe @icon}}\n </span>\n", {
|
|
8
|
-
strictMode: true,
|
|
9
|
-
scope: () => ({
|
|
10
|
-
styles,
|
|
11
|
-
htmlSafe
|
|
12
|
-
})
|
|
13
|
-
}), templateOnly());
|
|
14
|
-
|
|
15
|
-
export { Icon as default };
|
|
1
|
+
export { I as default } from '../icon-bLZqjTMP.js';
|
|
16
2
|
//# sourceMappingURL=icon.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icon.js","sources":[
|
|
1
|
+
{"version":3,"file":"icon.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,20 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import styles from '@hokulea/core/controls.module.css';
|
|
3
|
-
import { precompileTemplate } from '@ember/template-compilation';
|
|
4
|
-
import { setComponentTemplate } from '@ember/component';
|
|
5
|
-
import templateOnly from '@ember/component/template-only';
|
|
6
|
-
|
|
7
|
-
const Affix = setComponentTemplate(precompileTemplate("\n <span class={{@class}} data-test-input-builder={{@identity}}>{{yield}}</span>\n", {
|
|
8
|
-
strictMode: true
|
|
9
|
-
}), templateOnly());
|
|
10
|
-
const TextInput = setComponentTemplate(precompileTemplate("\n {{!-- template-lint-disable no-unsupported-role-attributes --}}\n <span class={{styles.inputBuilder}} aria-disabled={{if @disabled \"true\"}} data-input-builder data-test-input-builder>\n {{yield (hash Prefix=(component Affix class=styles.prefix identity=\"prefix\") Affix=(component Affix class=styles.affix identity=\"affix\") Suffix=(component Affix class=styles.suffix identity=\"suffix\"))}}\n </span>\n", {
|
|
11
|
-
strictMode: true,
|
|
12
|
-
scope: () => ({
|
|
13
|
-
styles,
|
|
14
|
-
hash,
|
|
15
|
-
Affix
|
|
16
|
-
})
|
|
17
|
-
}), templateOnly());
|
|
18
|
-
|
|
19
|
-
export { TextInput as default };
|
|
1
|
+
export { I as default } from '../input-builder-DmcQbywA.js';
|
|
20
2
|
//# sourceMappingURL=input-builder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-builder.js","sources":[
|
|
1
|
+
{"version":3,"file":"input-builder.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/dist/components/list.js
CHANGED
|
@@ -1,66 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import { tracked } from '@glimmer/tracking';
|
|
3
|
-
import { registerDestructor } from '@ember/destroyable';
|
|
4
|
-
import { hash } from '@ember/helper';
|
|
5
|
-
import { next } from '@ember/runloop';
|
|
6
|
-
import { ariaListbox } from 'ember-aria-voyager';
|
|
7
|
-
import { TrackedArray } from 'tracked-built-ins';
|
|
8
|
-
import styles from '@hokulea/core/controls.module.css';
|
|
9
|
-
import { precompileTemplate } from '@ember/template-compilation';
|
|
10
|
-
import { setComponentTemplate } from '@ember/component';
|
|
11
|
-
import { g, i } from 'decorator-transforms/runtime-esm';
|
|
12
|
-
|
|
13
|
-
class Option extends Component {
|
|
14
|
-
constructor(owner, args) {
|
|
15
|
-
super(owner, args);
|
|
16
|
-
args.registerItem(args.value);
|
|
17
|
-
registerDestructor(this, () => {
|
|
18
|
-
args.unregisterItem(args.value);
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
static {
|
|
22
|
-
setComponentTemplate(precompileTemplate("\n <span role=\"option\" aria-selected={{if (@isSelected @value) \"true\"}}>\n {{yield}}\n </span>\n ", {
|
|
23
|
-
strictMode: true
|
|
24
|
-
}), this);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
class List extends Component {
|
|
28
|
-
Option = Option;
|
|
29
|
-
static {
|
|
30
|
-
g(this.prototype, "items", [tracked], function () {
|
|
31
|
-
return new TrackedArray();
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
#items = (i(this, "items"), void 0);
|
|
35
|
-
registerItem = item => {
|
|
36
|
-
// eslint-disable-next-line ember/no-runloop
|
|
37
|
-
next(() => {
|
|
38
|
-
this.items.push(item);
|
|
39
|
-
});
|
|
40
|
-
};
|
|
41
|
-
unregisterItem = item => {
|
|
42
|
-
// eslint-disable-next-line ember/no-runloop
|
|
43
|
-
next(() => {
|
|
44
|
-
this.items.splice(this.items.indexOf(item), 1);
|
|
45
|
-
});
|
|
46
|
-
};
|
|
47
|
-
isSelected = option => {
|
|
48
|
-
if (Array.isArray(this.args.value)) {
|
|
49
|
-
return this.args.value.includes(option);
|
|
50
|
-
}
|
|
51
|
-
return this.args.value === option;
|
|
52
|
-
};
|
|
53
|
-
static {
|
|
54
|
-
setComponentTemplate(precompileTemplate("\n <div class={{styles.list}} data-test-list ...attributes {{ariaListbox items=this.items selection=@value multi=@multiple disabled=@disabled select=@update activateItem=@activateItem}}>\n {{yield (hash Option=(component this.Option isSelected=this.isSelected registerItem=this.registerItem unregisterItem=this.unregisterItem))}}\n </div>\n ", {
|
|
55
|
-
strictMode: true,
|
|
56
|
-
scope: () => ({
|
|
57
|
-
styles,
|
|
58
|
-
ariaListbox,
|
|
59
|
-
hash
|
|
60
|
-
})
|
|
61
|
-
}), this);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
export { List as default };
|
|
1
|
+
export { L as default } from '../list-CsLvih6-.js';
|
|
66
2
|
//# sourceMappingURL=list.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sources":[
|
|
1
|
+
{"version":3,"file":"list.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/dist/components/menu.js
CHANGED
|
@@ -1,116 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import { tracked } from '@glimmer/tracking';
|
|
3
|
-
import { registerDestructor } from '@ember/destroyable';
|
|
4
|
-
import { hash } from '@ember/helper';
|
|
5
|
-
import { next } from '@ember/runloop';
|
|
6
|
-
import { service } from '@ember/service';
|
|
7
|
-
import { htmlSafe } from '@ember/template';
|
|
8
|
-
import { ariaMenu } from 'ember-aria-voyager';
|
|
9
|
-
import { CommandElement } from 'ember-command';
|
|
10
|
-
import { TrackedArray } from 'tracked-built-ins';
|
|
11
|
-
import styles from '@hokulea/core/controls.module.css';
|
|
12
|
-
import { d as disabled } from '../disabled-B_FQ0Z51.js';
|
|
13
|
-
import popover from '../helpers/popover.js';
|
|
14
|
-
import { precompileTemplate } from '@ember/template-compilation';
|
|
15
|
-
import { setComponentTemplate } from '@ember/component';
|
|
16
|
-
import { g, i } from 'decorator-transforms/runtime-esm';
|
|
17
|
-
|
|
18
|
-
// below are attempts at conditional typing based on provided blocks in dynamic invocation
|
|
19
|
-
// type MenuItemArgs = {
|
|
20
|
-
// disabled?: boolean;
|
|
21
|
-
// registerItem: (item: MenuItem) => void;
|
|
22
|
-
// unregisterItem: (item: MenuItem) => void;
|
|
23
|
-
// };
|
|
24
|
-
// export interface MenuItemSignature<T = {}> {
|
|
25
|
-
// Element: HTMLButtonElement | HTMLAnchorElement;
|
|
26
|
-
// Args: T extends { Blocks: { default: [] } }
|
|
27
|
-
// ? MenuItemArgs & {
|
|
28
|
-
// push: CommandAction;
|
|
29
|
-
// }
|
|
30
|
-
// : MenuItemArgs;
|
|
31
|
-
// Blocks: T extends { Blocks: { default: [] } }
|
|
32
|
-
// ? { default: [] }
|
|
33
|
-
// : { label: []; menu: [MenuDefaultBlock] };
|
|
34
|
-
// }
|
|
35
|
-
// & (
|
|
36
|
-
// | {
|
|
37
|
-
// Args: MenuItemArgs & {
|
|
38
|
-
// push: CommandAction;
|
|
39
|
-
// };
|
|
40
|
-
// Blocks: {
|
|
41
|
-
// default: [];
|
|
42
|
-
// };
|
|
43
|
-
// }
|
|
44
|
-
// | {
|
|
45
|
-
// Args: MenuItemArgs;
|
|
46
|
-
// Blocks: {
|
|
47
|
-
// label: [];
|
|
48
|
-
// menu: [MenuDefaultBlock];
|
|
49
|
-
// };
|
|
50
|
-
// }
|
|
51
|
-
// );
|
|
52
|
-
/* eslint-disable @typescript-eslint/no-use-before-define */
|
|
53
|
-
class MenuItem extends Component {
|
|
54
|
-
constructor(owner, args) {
|
|
55
|
-
super(owner, args);
|
|
56
|
-
args.registerItem(this);
|
|
57
|
-
registerDestructor(this, () => {
|
|
58
|
-
args.unregisterItem(this);
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
static {
|
|
62
|
-
setComponentTemplate(precompileTemplate("\n {{#if (has-block \"menu\")}}\n {{#let (popover position=\"right-start\") as |p|}}\n <button type=\"button\" role=\"menuitem\" aria-haspopup=\"menu\" {{disabled when=(if @disabled @disabled false)}} {{p.trigger}}>\n {{~yield to=\"label\"~}}\n </button>\n\n <Menu {{p.target}} as |m|>\n {{yield m to=\"menu\"}}\n </Menu>\n {{/let}}\n {{else}}\n <CommandElement @command={{@push}} {{disabled when=(if @disabled @disabled false)}} role=\"menuitem\">\n {{~yield~}}\n </CommandElement>\n {{/if}}\n ", {
|
|
63
|
-
strictMode: true,
|
|
64
|
-
scope: () => ({
|
|
65
|
-
popover,
|
|
66
|
-
disabled,
|
|
67
|
-
Menu,
|
|
68
|
-
CommandElement
|
|
69
|
-
})
|
|
70
|
-
}), this);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
/* eslint-enable @typescript-eslint/no-use-before-define */
|
|
74
|
-
|
|
75
|
-
class Menu extends Component {
|
|
76
|
-
static {
|
|
77
|
-
g(this.prototype, "fastboot", [service]);
|
|
78
|
-
}
|
|
79
|
-
#fastboot = (i(this, "fastboot"), void 0);
|
|
80
|
-
static {
|
|
81
|
-
g(this.prototype, "items", [tracked], function () {
|
|
82
|
-
return new TrackedArray();
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
#items = (i(this, "items"), void 0);
|
|
86
|
-
get hideInSSR() {
|
|
87
|
-
return this.fastboot?.isFastBoot;
|
|
88
|
-
}
|
|
89
|
-
registerItem = item => {
|
|
90
|
-
// eslint-disable-next-line ember/no-runloop
|
|
91
|
-
next(() => {
|
|
92
|
-
this.items.push(item);
|
|
93
|
-
});
|
|
94
|
-
};
|
|
95
|
-
unregisterItem = item => {
|
|
96
|
-
// eslint-disable-next-line ember/no-runloop
|
|
97
|
-
next(() => {
|
|
98
|
-
this.items.splice(this.items.indexOf(item), 1);
|
|
99
|
-
});
|
|
100
|
-
};
|
|
101
|
-
static {
|
|
102
|
-
setComponentTemplate(precompileTemplate("\n <div class={{styles.menu}} data-test-menu ...attributes {{ariaMenu items=this.items disabled=@disabled}} style={{if this.hideInSSR (htmlSafe \"display: none\")}}>\n {{yield (hash Item=(component MenuItem registerItem=this.registerItem unregisterItem=this.unregisterItem))}}\n </div>\n ", {
|
|
103
|
-
strictMode: true,
|
|
104
|
-
scope: () => ({
|
|
105
|
-
styles,
|
|
106
|
-
htmlSafe,
|
|
107
|
-
ariaMenu,
|
|
108
|
-
hash,
|
|
109
|
-
MenuItem
|
|
110
|
-
})
|
|
111
|
-
}), this);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
export { Menu as default };
|
|
1
|
+
export { M as default } from '../menu-CZKNGJ91.js';
|
|
116
2
|
//# sourceMappingURL=menu.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu.js","sources":[
|
|
1
|
+
{"version":3,"file":"menu.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigation-list.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,20 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import styles from '@hokulea/core/controls.module.css';
|
|
3
|
-
import { p as pick } from '../helpers-DS9du02l.js';
|
|
4
|
-
import { p as pickAsNumber } from '../-input-DGR-n9U_.js';
|
|
5
|
-
import { precompileTemplate } from '@ember/template-compilation';
|
|
6
|
-
import { setComponentTemplate } from '@ember/component';
|
|
7
|
-
import templateOnly from '@ember/component/template-only';
|
|
8
|
-
|
|
9
|
-
const NumberInput = setComponentTemplate(precompileTemplate("\n <input class={{styles.input}} type=\"number\" value={{@value}} disabled={{@disabled}} data-test-input ...attributes {{on \"input\" (pick \"target.value\" (pickAsNumber @update))}} />\n", {
|
|
10
|
-
strictMode: true,
|
|
11
|
-
scope: () => ({
|
|
12
|
-
styles,
|
|
13
|
-
on,
|
|
14
|
-
pick,
|
|
15
|
-
pickAsNumber
|
|
16
|
-
})
|
|
17
|
-
}), templateOnly());
|
|
18
|
-
|
|
19
|
-
export { NumberInput as default };
|
|
1
|
+
export { N as default } from '../number-input-B84zcPlM.js';
|
|
20
2
|
//# sourceMappingURL=number-input.js.map
|