ember-primitives 0.15.0 → 0.16.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/components/menu.d.ts +55 -15
- package/declarations/components/menu.d.ts.map +1 -1
- package/declarations/floating-ui/component.d.ts +3 -10
- package/declarations/floating-ui/component.d.ts.map +1 -1
- package/dist/components/-private/typed-elements.js.map +1 -1
- package/dist/components/accordion/content.js +1 -1
- package/dist/components/accordion/header.js +1 -1
- package/dist/components/accordion/item.js +1 -1
- package/dist/components/accordion/trigger.js +1 -1
- package/dist/components/accordion.js +2 -2
- package/dist/components/accordion.js.map +1 -1
- package/dist/components/avatar.js +2 -2
- package/dist/components/avatar.js.map +1 -1
- package/dist/components/dialog.js +2 -2
- package/dist/components/dialog.js.map +1 -1
- package/dist/components/external-link.js.map +1 -1
- package/dist/components/form.js +1 -1
- package/dist/components/form.js.map +1 -1
- package/dist/components/layout/sticky-footer/index.js.map +1 -1
- package/dist/components/link.js +2 -2
- package/dist/components/link.js.map +1 -1
- package/dist/components/menu.js +29 -15
- package/dist/components/menu.js.map +1 -1
- package/dist/components/one-time-password/buttons.js +1 -1
- package/dist/components/one-time-password/buttons.js.map +1 -1
- package/dist/components/one-time-password/input.js +1 -1
- package/dist/components/one-time-password/input.js.map +1 -1
- package/dist/components/one-time-password/otp.js +3 -3
- package/dist/components/one-time-password/otp.js.map +1 -1
- package/dist/components/popover.js +5 -5
- package/dist/components/popover.js.map +1 -1
- package/dist/components/portal-targets.js.map +1 -1
- package/dist/components/portal.js.map +1 -1
- package/dist/components/progress.js +1 -1
- package/dist/components/progress.js.map +1 -1
- package/dist/components/scroller.js +1 -1
- package/dist/components/scroller.js.map +1 -1
- package/dist/components/shadowed.js.map +1 -1
- package/dist/components/switch.js +4 -4
- package/dist/components/switch.js.map +1 -1
- package/dist/components/toggle-group.js +2 -2
- package/dist/components/toggle-group.js.map +1 -1
- package/dist/components/toggle.js +3 -3
- package/dist/components/toggle.js.map +1 -1
- package/dist/floating-ui/component.js +9 -7
- package/dist/floating-ui/component.js.map +1 -1
- package/dist/{item-HBCzMJwv.js → item-kSSfp2r5.js} +17 -17
- package/dist/item-kSSfp2r5.js.map +1 -0
- package/package.json +5 -5
- package/dist/item-HBCzMJwv.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link.js","sources":["../../src/components/link.gts"],"sourcesContent":["/**\n * TODO: make template-only component,\n * and use class-based modifier?\n *\n * This would require that modifiers could run pre-render\n */ import { template } from \"@ember/template-compiler\";\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { hash } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport { service } from '@ember/service';\nimport { handle } from '../proper-links.ts';\nimport { ExternalLink } from './external-link.gts';\nimport type RouterService from '@ember/routing/router-service';\nexport interface Signature {\n Element: HTMLAnchorElement;\n Args: {\n /**\n * the `href` string value to set on the anchor element.\n */ href: string;\n /**\n * When calculating the \"active\" state of the link, you may decide\n * whether or not you want to _require_ that all query params be considered (true)\n * or specify individual query params, ignoring anything not specified.\n *\n * For example:\n *\n * ```gjs live preview\n * import { Link } from 'ember-primitives';\n *\n * <template>\n * <Link @href=\"/\" @includeActiveQueryParams={{true}} as |a|>\n * ...\n * </Link>\n * </template>\n * ```\n *\n * the data-active state here will only be \"true\" on\n * - `/`\n * - `/?foo=2`\n * - `/?foo=&bar=`\n *\n */ includeActiveQueryParams?: true | string[];\n };\n Blocks: {\n default: [{\n /**\n * Indicates if the passed `href` is pointing to an external site.\n * Useful if you want your links to have additional context for when\n * a user is about to leave your site.\n *\n * For example:\n *\n * ```gjs live preview\n * import { Link } from 'ember-primitives';\n *\n * const MyLink = <template>\n * <Link @href={{@href}} as |a|>\n * {{yield}}\n * {{#if a.isExternal}}\n * ➚\n * {{/if}}\n * </Link>\n * </template>;\n *\n * <template>\n * <MyLink @href=\"https://developer.mozilla.org\">MDN</MyLink> \n * <MyLink @href=\"/\">Home</MyLink>\n * </template>\n * ```\n */ isExternal: boolean;\n /**\n * Indicates if the passed `href` is *active*, or the user is on the same basepath.\n * This allows consumers to style their link if they wish or style their text.\n * The active state will also be present on a `data-active` attribute on the generated anchor tag.\n *\n *\n * For example\n * ```gjs\n * import { Link, service } from 'ember-primitives';\n *\n * const MyLink = <template>\n * <Link @href=\"...\"> as |a|>\n * <span class=\"{{if a.isActive 'underline'}}\">\n * {{yield}}\n * </span>\n * </Link>\n * </template>\n *\n * <template>\n * {{#let (service 'router') as |router|}}\n * <MyLink @href={{router.currentURL}}>Ths page</MyLink> \n * <MyLink @href=\"/\">Home</MyLink>\n * {{/let}}\n * </template>\n * ```\n *\n * By default, the query params are omitted from `isActive` calculation, but you may\n * configure the query params to be included if you wish\n * See: `@includeActiveQueryParams`\n *\n * Note that external links are never active.\n */ isActive: boolean;\n }];\n };\n}\n/**\n * A light wrapper around the [Anchor element][mdn-a], which will appropriately make your link an external link if the passed `@href` is not on the same domain.\n *\n *\n * [mdn-a]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a\n */ export class Link extends Component<Signature> {\n static{\n template(`\n {{#if (isExternal @href)}}\n <ExternalLink href={{@href}} ...attributes>\n {{yield (hash isExternal=true isActive=false)}}\n </ExternalLink>\n {{else}}\n <a\n data-active={{this.isActive}}\n href={{if @href @href \"##missing##\"}}\n {{on \"click\" this.handleClick}}\n ...attributes\n >\n {{yield (hash isExternal=false isActive=this.isActive)}}\n </a>\n {{/if}}\n `, {\n component: this,\n eval () {\n return eval(arguments[0]);\n }\n });\n }\n @service\n router: RouterService;\n handleClick = (event1: MouseEvent)=>{\n assert('[BUG]', event1.target instanceof HTMLAnchorElement);\n handle(this.router, event1.target, [], event1);\n };\n get isActive() {\n let { href: href1, includeActiveQueryParams: includeActiveQueryParams1 } = this.args;\n return isActive(this.router, href1, includeActiveQueryParams1);\n }\n}\nexport default Link;\nfunction isExternal(href1: string) {\n if (!href1) return false;\n if (href1.startsWith('#')) return false;\n if (href1.startsWith('/')) return false;\n return location.origin !== new URL(href1).origin;\n}\nfunction isActive(router1: RouterService, href1: string, includeQueryParams1?: boolean | string[]) {\n if (!includeQueryParams1) {\n /**\n * is Active doesn't understand `href`, so we have to convert to RouteInfo-esque\n */ let info1 = router1.recognize(href1);\n if (info1) {\n let dynamicSegments1 = getParams(info1);\n return router1.isActive(info1.name, ...dynamicSegments1);\n }\n return false;\n }\n let url1 = new URL(href1, location.origin);\n let hrefQueryParams1 = new URLSearchParams(url1.searchParams);\n let hrefPath1 = url1.pathname;\n const currentPath1 = router1.currentURL?.split('?')[0];\n if (!currentPath1) return false;\n if (hrefPath1 !== currentPath1) return false;\n const currentQueryParams1 = router1.currentRoute?.queryParams;\n if (!currentQueryParams1) return false;\n if (includeQueryParams1 === true) {\n return Object.entries(currentQueryParams1).every(([key1, value1])=>{\n return hrefQueryParams1.get(key1) === value1;\n });\n }\n return includeQueryParams1.every((key1)=>{\n return hrefQueryParams1.get(key1) === currentQueryParams1[key1];\n });\n}\ntype RouteInfo = ReturnType<RouterService['recognize']>;\nfunction getParams(currentRouteInfo1: RouteInfo) {\n let params1: Record<string, string | unknown | undefined>[] = [];\n while(currentRouteInfo1?.parent){\n let currentParams1 = currentRouteInfo1.params;\n params1 = currentParams1 ? [\n currentParams1,\n ...params1\n ] : params1;\n currentRouteInfo1 = currentRouteInfo1.parent;\n }\n return params1.map(Object.values).flat();\n}\n"],"names":["Link","Component","setComponentTemplate","precompileTemplate","scope","isExternal","ExternalLink","hash","on","strictMode","g","this","prototype","service","i","void 0","handleClick","event1","assert","target","HTMLAnchorElement","handle","router","isActive","href","href1","includeActiveQueryParams","includeActiveQueryParams1","args","startsWith","location","origin","URL","router1","includeQueryParams1","info1","recognize","dynamicSegments1","getParams","name","url1","hrefQueryParams1","URLSearchParams","searchParams","hrefPath1","pathname","currentPath1","currentURL","split","currentQueryParams1","currentRoute","queryParams","Object","entries","every","key1","value1","get","currentRouteInfo1","params1","parent","currentParams1","params","map","values","flat"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"link.js","sources":["../../src/components/link.gts"],"sourcesContent":["/**\n * TODO: make template-only component,\n * and use class-based modifier?\n *\n * This would require that modifiers could run pre-render\n */ import { template } from \"@ember/template-compiler\";\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { hash } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport { service } from '@ember/service';\nimport { handle } from '../proper-links.ts';\nimport { ExternalLink } from './external-link.gts';\nimport type RouterService from '@ember/routing/router-service';\nexport interface Signature {\n Element: HTMLAnchorElement;\n Args: {\n /**\n * the `href` string value to set on the anchor element.\n */ href: string;\n /**\n * When calculating the \"active\" state of the link, you may decide\n * whether or not you want to _require_ that all query params be considered (true)\n * or specify individual query params, ignoring anything not specified.\n *\n * For example:\n *\n * ```gjs live preview\n * import { Link } from 'ember-primitives';\n *\n * <template>\n * <Link @href=\"/\" @includeActiveQueryParams={{true}} as |a|>\n * ...\n * </Link>\n * </template>\n * ```\n *\n * the data-active state here will only be \"true\" on\n * - `/`\n * - `/?foo=2`\n * - `/?foo=&bar=`\n *\n */ includeActiveQueryParams?: true | string[];\n };\n Blocks: {\n default: [{\n /**\n * Indicates if the passed `href` is pointing to an external site.\n * Useful if you want your links to have additional context for when\n * a user is about to leave your site.\n *\n * For example:\n *\n * ```gjs live preview\n * import { Link } from 'ember-primitives';\n *\n * const MyLink = <template>\n * <Link @href={{@href}} as |a|>\n * {{yield}}\n * {{#if a.isExternal}}\n * ➚\n * {{/if}}\n * </Link>\n * </template>;\n *\n * <template>\n * <MyLink @href=\"https://developer.mozilla.org\">MDN</MyLink> \n * <MyLink @href=\"/\">Home</MyLink>\n * </template>\n * ```\n */ isExternal: boolean;\n /**\n * Indicates if the passed `href` is *active*, or the user is on the same basepath.\n * This allows consumers to style their link if they wish or style their text.\n * The active state will also be present on a `data-active` attribute on the generated anchor tag.\n *\n *\n * For example\n * ```gjs\n * import { Link, service } from 'ember-primitives';\n *\n * const MyLink = <template>\n * <Link @href=\"...\"> as |a|>\n * <span class=\"{{if a.isActive 'underline'}}\">\n * {{yield}}\n * </span>\n * </Link>\n * </template>\n *\n * <template>\n * {{#let (service 'router') as |router|}}\n * <MyLink @href={{router.currentURL}}>Ths page</MyLink> \n * <MyLink @href=\"/\">Home</MyLink>\n * {{/let}}\n * </template>\n * ```\n *\n * By default, the query params are omitted from `isActive` calculation, but you may\n * configure the query params to be included if you wish\n * See: `@includeActiveQueryParams`\n *\n * Note that external links are never active.\n */ isActive: boolean;\n }];\n };\n}\n/**\n * A light wrapper around the [Anchor element][mdn-a], which will appropriately make your link an external link if the passed `@href` is not on the same domain.\n *\n *\n * [mdn-a]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a\n */ export class Link extends Component<Signature> {\n static{\n template(`\n {{#if (isExternal @href)}}\n <ExternalLink href={{@href}} ...attributes>\n {{yield (hash isExternal=true isActive=false)}}\n </ExternalLink>\n {{else}}\n <a\n data-active={{this.isActive}}\n href={{if @href @href \"##missing##\"}}\n {{on \"click\" this.handleClick}}\n ...attributes\n >\n {{yield (hash isExternal=false isActive=this.isActive)}}\n </a>\n {{/if}}\n `, {\n component: this,\n eval () {\n return eval(arguments[0]);\n }\n });\n }\n @service\n router: RouterService;\n handleClick = (event1: MouseEvent)=>{\n assert('[BUG]', event1.target instanceof HTMLAnchorElement);\n handle(this.router, event1.target, [], event1);\n };\n get isActive() {\n let { href: href1, includeActiveQueryParams: includeActiveQueryParams1 } = this.args;\n return isActive(this.router, href1, includeActiveQueryParams1);\n }\n}\nexport default Link;\nfunction isExternal(href1: string) {\n if (!href1) return false;\n if (href1.startsWith('#')) return false;\n if (href1.startsWith('/')) return false;\n return location.origin !== new URL(href1).origin;\n}\nfunction isActive(router1: RouterService, href1: string, includeQueryParams1?: boolean | string[]) {\n if (!includeQueryParams1) {\n /**\n * is Active doesn't understand `href`, so we have to convert to RouteInfo-esque\n */ let info1 = router1.recognize(href1);\n if (info1) {\n let dynamicSegments1 = getParams(info1);\n return router1.isActive(info1.name, ...dynamicSegments1);\n }\n return false;\n }\n let url1 = new URL(href1, location.origin);\n let hrefQueryParams1 = new URLSearchParams(url1.searchParams);\n let hrefPath1 = url1.pathname;\n const currentPath1 = router1.currentURL?.split('?')[0];\n if (!currentPath1) return false;\n if (hrefPath1 !== currentPath1) return false;\n const currentQueryParams1 = router1.currentRoute?.queryParams;\n if (!currentQueryParams1) return false;\n if (includeQueryParams1 === true) {\n return Object.entries(currentQueryParams1).every(([key1, value1])=>{\n return hrefQueryParams1.get(key1) === value1;\n });\n }\n return includeQueryParams1.every((key1)=>{\n return hrefQueryParams1.get(key1) === currentQueryParams1[key1];\n });\n}\ntype RouteInfo = ReturnType<RouterService['recognize']>;\nfunction getParams(currentRouteInfo1: RouteInfo) {\n let params1: Record<string, string | unknown | undefined>[] = [];\n while(currentRouteInfo1?.parent){\n let currentParams1 = currentRouteInfo1.params;\n params1 = currentParams1 ? [\n currentParams1,\n ...params1\n ] : params1;\n currentRouteInfo1 = currentRouteInfo1.parent;\n }\n return params1.map(Object.values).flat();\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2VtYmVyLXByaW1pdGl2ZXMvZW1iZXItcHJpbWl0aXZlcy9lbWJlci1wcmltaXRpdmVzL3NyYy9jb21wb25lbnRzL2xpbmsuZ3RzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVE9ETzogbWFrZSB0ZW1wbGF0ZS1vbmx5IGNvbXBvbmVudCxcbiAqIGFuZCB1c2UgY2xhc3MtYmFzZWQgbW9kaWZpZXI_XG4gKlxuICogVGhpcyB3b3VsZCByZXF1aXJlIHRoYXQgbW9kaWZpZXJzIGNvdWxkIHJ1biBwcmUtcmVuZGVyXG4gKi9cbmltcG9ydCBDb21wb25lbnQgZnJvbSAnQGdsaW1tZXIvY29tcG9uZW50JztcbmltcG9ydCB7IGFzc2VydCB9IGZyb20gJ0BlbWJlci9kZWJ1Zyc7XG5pbXBvcnQgeyBoYXNoIH0gZnJvbSAnQGVtYmVyL2hlbHBlcic7XG5pbXBvcnQgeyBvbiB9IGZyb20gJ0BlbWJlci9tb2RpZmllcic7XG5pbXBvcnQgeyBzZXJ2aWNlIH0gZnJvbSAnQGVtYmVyL3NlcnZpY2UnO1xuXG5pbXBvcnQgeyBoYW5kbGUgfSBmcm9tICcuLi9wcm9wZXItbGlua3MudHMnO1xuaW1wb3J0IHsgRXh0ZXJuYWxMaW5rIH0gZnJvbSAnLi9leHRlcm5hbC1saW5rLmd0cyc7XG5cbmltcG9ydCB0eXBlIFJvdXRlclNlcnZpY2UgZnJvbSAnQGVtYmVyL3JvdXRpbmcvcm91dGVyLXNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25hdHVyZSB7XG4gIEVsZW1lbnQ6IEhUTUxBbmNob3JFbGVtZW50O1xuICBBcmdzOiB7XG4gICAgLyoqXG4gICAgICogdGhlIGBocmVmYCBzdHJpbmcgdmFsdWUgdG8gc2V0IG9uIHRoZSBhbmNob3IgZWxlbWVudC5cbiAgICAgKi9cbiAgICBocmVmOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogV2hlbiBjYWxjdWxhdGluZyB0aGUgXCJhY3RpdmVcIiBzdGF0ZSBvZiB0aGUgbGluaywgeW91IG1heSBkZWNpZGVcbiAgICAgKiB3aGV0aGVyIG9yIG5vdCB5b3Ugd2FudCB0byBfcmVxdWlyZV8gdGhhdCBhbGwgcXVlcnkgcGFyYW1zIGJlIGNvbnNpZGVyZWQgKHRydWUpXG4gICAgICogb3Igc3BlY2lmeSBpbmRpdmlkdWFsIHF1ZXJ5IHBhcmFtcywgaWdub3JpbmcgYW55dGhpbmcgbm90IHNwZWNpZmllZC5cbiAgICAgKlxuICAgICAqIEZvciBleGFtcGxlOlxuICAgICAqXG4gICAgICogYGBgZ2pzIGxpdmUgcHJldmlld1xuICAgICAqIGltcG9ydCB7IExpbmsgfSBmcm9tICdlbWJlci1wcmltaXRpdmVzJztcbiAgICAgKlxuICAgICAqIDx0ZW1wbGF0ZT5cbiAgICAgKiAgIDxMaW5rIEBocmVmPVwiL1wiIEBpbmNsdWRlQWN0aXZlUXVlcnlQYXJhbXM9e3t0cnVlfX0gYXMgfGF8PlxuICAgICAqICAgICAuLi5cbiAgICAgKiAgIDwvTGluaz5cbiAgICAgKiA8L3RlbXBsYXRlPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogdGhlIGRhdGEtYWN0aXZlIHN0YXRlIGhlcmUgd2lsbCBvbmx5IGJlIFwidHJ1ZVwiIG9uXG4gICAgICogLSBgL2BcbiAgICAgKiAtIGAvP2Zvbz0yYFxuICAgICAqIC0gYC8_Zm9vPSZiYXI9YFxuICAgICAqXG4gICAgICovXG4gICAgaW5jbHVkZUFjdGl2ZVF1ZXJ5UGFyYW1zPzogdHJ1ZSB8IHN0cmluZ1tdO1xuICB9O1xuICBCbG9ja3M6IHtcbiAgICBkZWZhdWx0OiBbXG4gICAgICB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHBhc3NlZCBgaHJlZmAgaXMgcG9pbnRpbmcgdG8gYW4gZXh0ZXJuYWwgc2l0ZS5cbiAgICAgICAgICogVXNlZnVsIGlmIHlvdSB3YW50IHlvdXIgbGlua3MgdG8gaGF2ZSBhZGRpdGlvbmFsIGNvbnRleHQgZm9yIHdoZW5cbiAgICAgICAgICogYSB1c2VyIGlzIGFib3V0IHRvIGxlYXZlIHlvdXIgc2l0ZS5cbiAgICAgICAgICpcbiAgICAgICAgICogRm9yIGV4YW1wbGU6XG4gICAgICAgICAqXG4gICAgICAgICAqIGBgYGdqcyBsaXZlIHByZXZpZXdcbiAgICAgICAgICogaW1wb3J0IHsgTGluayB9IGZyb20gJ2VtYmVyLXByaW1pdGl2ZXMnO1xuICAgICAgICAgKlxuICAgICAgICAgKiBjb25zdCBNeUxpbmsgPSA8dGVtcGxhdGU-XG4gICAgICAgICAqICAgPExpbmsgQGhyZWY9e3tAaHJlZn19IGFzIHxhfD5cbiAgICAgICAgICogICAgIHt7eWllbGR9fVxuICAgICAgICAgKiAgICAge3sjaWYgYS5pc0V4dGVybmFsfX1cbiAgICAgICAgICogICAgICAg4p6aXG4gICAgICAgICAqICAgICB7ey9pZn19XG4gICAgICAgICAqICAgPC9MaW5rPlxuICAgICAgICAgKiA8L3RlbXBsYXRlPjtcbiAgICAgICAgICpcbiAgICAgICAgICogPHRlbXBsYXRlPlxuICAgICAgICAgKiAgIDxNeUxpbmsgQGhyZWY9XCJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZ1wiPk1ETjwvTXlMaW5rPiAmbmJzcDsmbmJzcDtcbiAgICAgICAgICogICA8TXlMaW5rIEBocmVmPVwiL1wiPkhvbWU8L015TGluaz5cbiAgICAgICAgICogIDwvdGVtcGxhdGU-XG4gICAgICAgICAqIGBgYFxuICAgICAgICAgKi9cbiAgICAgICAgaXNFeHRlcm5hbDogYm9vbGVhbjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluZGljYXRlcyBpZiB0aGUgcGFzc2VkIGBocmVmYCBpcyAqYWN0aXZlKiwgb3IgdGhlIHVzZXIgaXMgb24gdGhlIHNhbWUgYmFzZXBhdGguXG4gICAgICAgICAqIFRoaXMgYWxsb3dzIGNvbnN1bWVycyB0byBzdHlsZSB0aGVpciBsaW5rIGlmIHRoZXkgd2lzaCBvciBzdHlsZSB0aGVpciB0ZXh0LlxuICAgICAgICAgKiBUaGUgYWN0aXZlIHN0YXRlIHdpbGwgYWxzbyBiZSBwcmVzZW50IG9uIGEgYGRhdGEtYWN0aXZlYCBhdHRyaWJ1dGUgb24gdGhlIGdlbmVyYXRlZCBhbmNob3IgdGFnLlxuICAgICAgICAgKlxuICAgICAgICAgKlxuICAgICAgICAgKiBGb3IgZXhhbXBsZVxuICAgICAgICAgKiBgYGBnanNcbiAgICAgICAgICogaW1wb3J0IHsgTGluaywgc2VydmljZSB9IGZyb20gJ2VtYmVyLXByaW1pdGl2ZXMnO1xuICAgICAgICAgKlxuICAgICAgICAgKiBjb25zdCBNeUxpbmsgPSA8dGVtcGxhdGU-XG4gICAgICAgICAqICAgPExpbmsgQGhyZWY9XCIuLi5cIj4gYXMgfGF8PlxuICAgICAgICAgKiAgICAgPHNwYW4gY2xhc3M9XCJ7e2lmIGEuaXNBY3RpdmUgJ3VuZGVybGluZSd9fVwiPlxuICAgICAgICAgKiAgICAge3t5aWVsZH19XG4gICAgICAgICAqICAgICA8L3NwYW4-XG4gICAgICAgICAqICAgPC9MaW5rPlxuICAgICAgICAgKiA8L3RlbXBsYXRlPlxuICAgICAgICAgKlxuICAgICAgICAgKiA8dGVtcGxhdGU-XG4gICAgICAgICAqIHt7I2xldCAoc2VydmljZSAncm91dGVyJykgYXMgfHJvdXRlcnx9fVxuICAgICAgICAgKiAgICAgPE15TGluayBAaHJlZj17e3JvdXRlci5jdXJyZW50VVJMfX0-VGhzIHBhZ2U8L015TGluaz4gJm5ic3A7Jm5ic3A7XG4gICAgICAgICAqICAgICA8TXlMaW5rIEBocmVmPVwiL1wiPkhvbWU8L015TGluaz5cbiAgICAgICAgICogICB7ey9sZXR9fVxuICAgICAgICAgKiAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICogYGBgXG4gICAgICAgICAqXG4gICAgICAgICAqIEJ5IGRlZmF1bHQsIHRoZSBxdWVyeSBwYXJhbXMgYXJlIG9taXR0ZWQgZnJvbSBgaXNBY3RpdmVgIGNhbGN1bGF0aW9uLCBidXQgeW91IG1heVxuICAgICAgICAgKiBjb25maWd1cmUgdGhlIHF1ZXJ5IHBhcmFtcyB0byBiZSBpbmNsdWRlZCBpZiB5b3Ugd2lzaFxuICAgICAgICAgKiBTZWU6IGBAaW5jbHVkZUFjdGl2ZVF1ZXJ5UGFyYW1zYFxuICAgICAgICAgKlxuICAgICAgICAgKiBOb3RlIHRoYXQgZXh0ZXJuYWwgbGlua3MgYXJlIG5ldmVyIGFjdGl2ZS5cbiAgICAgICAgICovXG4gICAgICAgIGlzQWN0aXZlOiBib29sZWFuO1xuICAgICAgfSxcbiAgICBdO1xuICB9O1xufVxuXG4vKipcbiAqIEEgbGlnaHQgd3JhcHBlciBhcm91bmQgdGhlIFtBbmNob3IgZWxlbWVudF1bbWRuLWFdLCB3aGljaCB3aWxsIGFwcHJvcHJpYXRlbHkgbWFrZSB5b3VyIGxpbmsgYW4gZXh0ZXJuYWwgbGluayBpZiB0aGUgcGFzc2VkIGBAaHJlZmAgaXMgbm90IG9uIHRoZSBzYW1lIGRvbWFpbi5cbiAqXG4gKlxuICogW21kbi1hXTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2FcbiAqL1xuZXhwb3J0IGNsYXNzIExpbmsgZXh0ZW5kcyBDb21wb25lbnQ8U2lnbmF0dXJlPiB7XG4gIDx0ZW1wbGF0ZT5cbiAgICB7eyNpZiAoaXNFeHRlcm5hbCBAaHJlZil9fVxuICAgICAgPEV4dGVybmFsTGluayBocmVmPXt7QGhyZWZ9fSAuLi5hdHRyaWJ1dGVzPlxuICAgICAgICB7e3lpZWxkIChoYXNoIGlzRXh0ZXJuYWw9dHJ1ZSBpc0FjdGl2ZT1mYWxzZSl9fVxuICAgICAgPC9FeHRlcm5hbExpbms-XG4gICAge3tlbHNlfX1cbiAgICAgIDxhXG4gICAgICAgIGRhdGEtYWN0aXZlPXt7dGhpcy5pc0FjdGl2ZX19XG4gICAgICAgIGhyZWY9e3tpZiBAaHJlZiBAaHJlZiBcIiMjbWlzc2luZyMjXCJ9fVxuICAgICAgICB7e29uIFwiY2xpY2tcIiB0aGlzLmhhbmRsZUNsaWNrfX1cbiAgICAgICAgLi4uYXR0cmlidXRlc1xuICAgICAgPlxuICAgICAgICB7e3lpZWxkIChoYXNoIGlzRXh0ZXJuYWw9ZmFsc2UgaXNBY3RpdmU9dGhpcy5pc0FjdGl2ZSl9fVxuICAgICAgPC9hPlxuICAgIHt7L2lmfX1cbiAgPC90ZW1wbGF0ZT5cblxuICBAc2VydmljZSBkZWNsYXJlIHJvdXRlcjogUm91dGVyU2VydmljZTtcblxuICBoYW5kbGVDbGljayA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgIGFzc2VydCgnW0JVR10nLCBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MQW5jaG9yRWxlbWVudCk7XG5cbiAgICBoYW5kbGUodGhpcy5yb3V0ZXIsIGV2ZW50LnRhcmdldCwgW10sIGV2ZW50KTtcbiAgfTtcblxuICBnZXQgaXNBY3RpdmUoKSB7XG4gICAgbGV0IHsgaHJlZiwgaW5jbHVkZUFjdGl2ZVF1ZXJ5UGFyYW1zIH0gPSB0aGlzLmFyZ3M7XG5cbiAgICByZXR1cm4gaXNBY3RpdmUodGhpcy5yb3V0ZXIsIGhyZWYsIGluY2x1ZGVBY3RpdmVRdWVyeVBhcmFtcyk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGluaztcblxuZnVuY3Rpb24gaXNFeHRlcm5hbChocmVmOiBzdHJpbmcpIHtcbiAgaWYgKCFocmVmKSByZXR1cm4gZmFsc2U7XG4gIGlmIChocmVmLnN0YXJ0c1dpdGgoJyMnKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoaHJlZi5zdGFydHNXaXRoKCcvJykpIHJldHVybiBmYWxzZTtcblxuICByZXR1cm4gbG9jYXRpb24ub3JpZ2luICE9PSBuZXcgVVJMKGhyZWYpLm9yaWdpbjtcbn1cblxuZnVuY3Rpb24gaXNBY3RpdmUocm91dGVyOiBSb3V0ZXJTZXJ2aWNlLCBocmVmOiBzdHJpbmcsIGluY2x1ZGVRdWVyeVBhcmFtcz86IGJvb2xlYW4gfCBzdHJpbmdbXSkge1xuICBpZiAoIWluY2x1ZGVRdWVyeVBhcmFtcykge1xuICAgIC8qKlxuICAgICAqIGlzIEFjdGl2ZSBkb2Vzbid0IHVuZGVyc3RhbmQgYGhyZWZgLCBzbyB3ZSBoYXZlIHRvIGNvbnZlcnQgdG8gUm91dGVJbmZvLWVzcXVlXG4gICAgICovXG4gICAgbGV0IGluZm8gPSByb3V0ZXIucmVjb2duaXplKGhyZWYpO1xuXG4gICAgaWYgKGluZm8pIHtcbiAgICAgIGxldCBkeW5hbWljU2VnbWVudHMgPSBnZXRQYXJhbXMoaW5mbyk7XG5cbiAgICAgIHJldHVybiByb3V0ZXIuaXNBY3RpdmUoaW5mby5uYW1lLCAuLi5keW5hbWljU2VnbWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGxldCB1cmwgPSBuZXcgVVJMKGhyZWYsIGxvY2F0aW9uLm9yaWdpbik7XG4gIGxldCBocmVmUXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHVybC5zZWFyY2hQYXJhbXMpO1xuICBsZXQgaHJlZlBhdGggPSB1cmwucGF0aG5hbWU7XG5cbiAgY29uc3QgY3VycmVudFBhdGggPSByb3V0ZXIuY3VycmVudFVSTD8uc3BsaXQoJz8nKVswXTtcblxuICBpZiAoIWN1cnJlbnRQYXRoKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKGhyZWZQYXRoICE9PSBjdXJyZW50UGF0aCkgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IGN1cnJlbnRRdWVyeVBhcmFtcyA9IHJvdXRlci5jdXJyZW50Um91dGU_LnF1ZXJ5UGFyYW1zO1xuXG4gIGlmICghY3VycmVudFF1ZXJ5UGFyYW1zKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKGluY2x1ZGVRdWVyeVBhcmFtcyA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhjdXJyZW50UXVlcnlQYXJhbXMpLmV2ZXJ5KChba2V5LCB2YWx1ZV0pID0-IHtcbiAgICAgIHJldHVybiBocmVmUXVlcnlQYXJhbXMuZ2V0KGtleSkgPT09IHZhbHVlO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGluY2x1ZGVRdWVyeVBhcmFtcy5ldmVyeSgoa2V5KSA9PiB7XG4gICAgcmV0dXJuIGhyZWZRdWVyeVBhcmFtcy5nZXQoa2V5KSA9PT0gY3VycmVudFF1ZXJ5UGFyYW1zW2tleV07XG4gIH0pO1xufVxuXG50eXBlIFJvdXRlSW5mbyA9IFJldHVyblR5cGU8Um91dGVyU2VydmljZVsncmVjb2duaXplJ10-O1xuXG5mdW5jdGlvbiBnZXRQYXJhbXMoY3VycmVudFJvdXRlSW5mbzogUm91dGVJbmZvKSB7XG4gIGxldCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVua25vd24gfCB1bmRlZmluZWQ-W10gPSBbXTtcblxuICB3aGlsZSAoY3VycmVudFJvdXRlSW5mbz8ucGFyZW50KSB7XG4gICAgbGV0IGN1cnJlbnRQYXJhbXMgPSBjdXJyZW50Um91dGVJbmZvLnBhcmFtcztcblxuICAgIHBhcmFtcyA9IGN1cnJlbnRQYXJhbXMgPyBbY3VycmVudFBhcmFtcywgLi4ucGFyYW1zXSA6IHBhcmFtcztcbiAgICBjdXJyZW50Um91dGVJbmZvID0gY3VycmVudFJvdXRlSW5mby5wYXJlbnQ7XG4gIH1cblxuICByZXR1cm4gcGFyYW1zLm1hcChPYmplY3QudmFsdWVzKS5mbGF0KCk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0NBS0M7QUFDRCxPQUFPLGVBQWUscUJBQXFCO0FBQzNDLFNBQVMsTUFBTSxRQUFRLGVBQWU7QUFDdEMsU0FBUyxJQUFJLFFBQVEsZ0JBQWdCO0FBQ3JDLFNBQVMsRUFBRSxRQUFRLGtCQUFrQjtBQUNyQyxTQUFTLE9BQU8sUUFBUSxpQkFBaUI7QUFFekMsU0FBUyxNQUFNLFFBQVEscUJBQXFCO0FBQzVDLFNBQVMsWUFBWSxRQUFRLHNCQUFzQjtBQUVuRCxZQUFZLG1CQUFtQixnQ0FBZ0M7QUFFL0QsaUJBQWlCO0lBQ2YsU0FBUztJQUNUO1FBQ0U7O0tBRUMsR0FDRCxNQUFNLE1BQU07UUFDWjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQXNCQyxHQUNELDJCQUEyQixJQUFJLEdBQUcsTUFBTTs7SUFFMUM7UUFDRTtnQkFFSTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1NBd0JDLEdBQ0QsWUFBWSxPQUFPO2dCQUNuQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztTQStCQyxHQUNELFVBQVUsT0FBTzs7OztBQU16Qjs7Ozs7Q0FLQyxHQUNELE9BQU8sTUFBTSxhQUFhLFVBQVU7SUFDbEMsTUFBQTtRQUFBLFNBQVUsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7O0VBZVYsQ0FBQSxFQUFBO1lBQUEsV0FBQSxJQUFXO1lBQVg7Z0JBQUEsT0FBQSxLQUFBLFNBQUEsQ0FB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"],"names":["Link","Component","setComponentTemplate","precompileTemplate","scope","isExternal","ExternalLink","hash","on","strictMode","g","this","prototype","service","i","void 0","handleClick","event1","assert","target","HTMLAnchorElement","handle","router","isActive","href","href1","includeActiveQueryParams","includeActiveQueryParams1","args","startsWith","location","origin","URL","router1","includeQueryParams1","info1","recognize","dynamicSegments1","getParams","name","url1","hrefQueryParams1","URLSearchParams","searchParams","hrefPath1","pathname","currentPath1","currentURL","split","currentQueryParams1","currentRoute","queryParams","Object","entries","every","key1","value1","get","currentRouteInfo1","params1","parent","currentParams1","params","map","values","flat"],"mappings":"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"}
|
package/dist/components/menu.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import Component from '@glimmer/component';
|
|
2
|
+
import { hash } from '@ember/helper';
|
|
3
|
+
import { on } from '@ember/modifier';
|
|
2
4
|
import { guidFor } from '@ember/object/internals';
|
|
3
5
|
import { modifier } from 'ember-modifier';
|
|
4
6
|
import { cell } from 'ember-resources';
|
|
5
|
-
import { getTabsterAttribute, Types, getTabster } from 'tabster';
|
|
7
|
+
import { getTabsterAttribute, Types, getTabster, setTabsterAttribute } from 'tabster';
|
|
8
|
+
import { Popover } from './popover.js';
|
|
6
9
|
import { precompileTemplate } from '@ember/template-compilation';
|
|
7
10
|
import { setComponentTemplate } from '@ember/component';
|
|
8
11
|
import templateOnly from '@ember/component/template-only';
|
|
9
|
-
import { on } from '@ember/modifier';
|
|
10
|
-
import { hash } from '@ember/helper';
|
|
11
|
-
import { Popover } from './popover.js';
|
|
12
12
|
|
|
13
13
|
const TABSTER_CONFIG_CONTENT = getTabsterAttribute({
|
|
14
14
|
mover: {
|
|
@@ -17,9 +17,9 @@ const TABSTER_CONFIG_CONTENT = getTabsterAttribute({
|
|
|
17
17
|
},
|
|
18
18
|
deloser: {}
|
|
19
19
|
}, true);
|
|
20
|
-
const TABSTER_CONFIG_TRIGGER =
|
|
20
|
+
const TABSTER_CONFIG_TRIGGER = {
|
|
21
21
|
deloser: {}
|
|
22
|
-
}
|
|
22
|
+
};
|
|
23
23
|
const Separator = setComponentTemplate(precompileTemplate("\n <div role=\"separator\" ...attributes>\n {{yield}}\n </div>\n", {
|
|
24
24
|
strictMode: true
|
|
25
25
|
}), templateOnly());
|
|
@@ -87,17 +87,30 @@ const Content = setComponentTemplate(precompileTemplate("\n {{#if @isOpen.curre
|
|
|
87
87
|
}),
|
|
88
88
|
strictMode: true
|
|
89
89
|
}), templateOnly());
|
|
90
|
-
const
|
|
91
|
-
triggerElement: triggerElement1
|
|
90
|
+
const trigger = modifier((element1, _1, {
|
|
91
|
+
triggerElement: triggerElement1,
|
|
92
|
+
isOpen: isOpen1,
|
|
93
|
+
contentId: contentId1,
|
|
94
|
+
setHook: setHook1
|
|
92
95
|
}) => {
|
|
96
|
+
element1.setAttribute('aria-haspopup', 'menu');
|
|
97
|
+
if (isOpen1.current) {
|
|
98
|
+
element1.setAttribute('aria-controls', contentId1);
|
|
99
|
+
element1.setAttribute('aria-expanded', 'true');
|
|
100
|
+
} else {
|
|
101
|
+
element1.removeAttribute('aria-controls');
|
|
102
|
+
element1.setAttribute('aria-expanded', 'false');
|
|
103
|
+
}
|
|
104
|
+
setTabsterAttribute(element1, TABSTER_CONFIG_TRIGGER);
|
|
105
|
+
const onTriggerClick1 = () => isOpen1.toggle();
|
|
106
|
+
element1.addEventListener('click', onTriggerClick1);
|
|
93
107
|
triggerElement1.current = element1;
|
|
108
|
+
setHook1(element1);
|
|
109
|
+
return () => {
|
|
110
|
+
element1.removeEventListener('click', onTriggerClick1);
|
|
111
|
+
};
|
|
94
112
|
});
|
|
95
|
-
const Trigger = setComponentTemplate(precompileTemplate("\n <button
|
|
96
|
-
scope: () => ({
|
|
97
|
-
TABSTER_CONFIG_TRIGGER,
|
|
98
|
-
installTrigger,
|
|
99
|
-
on
|
|
100
|
-
}),
|
|
113
|
+
const Trigger = setComponentTemplate(precompileTemplate("\n <button type=\"button\" {{@triggerModifier}} ...attributes>\n {{yield}}\n </button>\n", {
|
|
101
114
|
strictMode: true
|
|
102
115
|
}), templateOnly());
|
|
103
116
|
const IsOpen = () => cell(false);
|
|
@@ -105,11 +118,12 @@ const TriggerElement = () => cell();
|
|
|
105
118
|
class Menu extends Component {
|
|
106
119
|
contentId = guidFor(this);
|
|
107
120
|
static {
|
|
108
|
-
setComponentTemplate(precompileTemplate("\n {{#let (IsOpen) (TriggerElement) as |isOpen triggerEl|}}\n <Popover @flipOptions={{@flipOptions}} @middleware={{@middleware}} @offsetOptions={{@offsetOptions}} @placement={{@placement}} @shiftOptions={{@shiftOptions}} @strategy={{@strategy}} @inline={{@inline}} as |p|>\n {{
|
|
121
|
+
setComponentTemplate(precompileTemplate("\n {{#let (IsOpen) (TriggerElement) as |isOpen triggerEl|}}\n <Popover @flipOptions={{@flipOptions}} @middleware={{@middleware}} @offsetOptions={{@offsetOptions}} @placement={{@placement}} @shiftOptions={{@shiftOptions}} @strategy={{@strategy}} @inline={{@inline}} as |p|>\n {{#let (modifier trigger triggerElement=triggerEl isOpen=isOpen contentId=this.contentId setHook=p.setHook) as |triggerModifier|}}\n {{yield (hash trigger=triggerModifier Trigger=(component Trigger triggerModifier=triggerModifier) Content=(component Content PopoverContent=p.Content isOpen=isOpen triggerElement=triggerEl contentId=this.contentId) arrow=p.arrow isOpen=isOpen.current)}}\n {{/let}}\n </Popover>\n {{/let}}\n ", {
|
|
109
122
|
scope: () => ({
|
|
110
123
|
IsOpen,
|
|
111
124
|
TriggerElement,
|
|
112
125
|
Popover,
|
|
126
|
+
trigger,
|
|
113
127
|
hash,
|
|
114
128
|
Trigger,
|
|
115
129
|
Content
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu.js","sources":["../../src/components/menu.gts"],"sourcesContent":["import { template } from \"@ember/template-compiler\";\nimport Component from '@glimmer/component';\nimport { hash } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport { guidFor } from '@ember/object/internals';\nimport { modifier } from 'ember-modifier';\nimport { cell } from 'ember-resources';\nimport { getTabster, getTabsterAttribute, Types } from 'tabster';\nimport { Popover, type Signature as PopoverSignature } from './popover.gts';\nimport type { TOC } from '@ember/component/template-only';\nimport type { WithBoundArgs } from '@glint/template';\ntype Cell<V> = ReturnType<typeof cell>;\nconst TABSTER_CONFIG_CONTENT = getTabsterAttribute({\n mover: {\n direction: Types.MoverDirections.Both,\n cyclic: true\n },\n deloser: {}\n}, true);\nconst TABSTER_CONFIG_TRIGGER = getTabsterAttribute({\n deloser: {}\n}, true);\nexport interface Signature {\n Args: PopoverSignature['Args'];\n Blocks: {\n default: [{\n arrow: PopoverSignature['Blocks']['default'][0]['arrow'];\n Trigger: WithBoundArgs<typeof Trigger, 'triggerElement' | 'contentId' | 'isOpen' | 'hook'>;\n Content: WithBoundArgs<typeof Content, 'triggerElement' | 'contentId' | 'isOpen' | 'PopoverContent'>;\n isOpen: boolean;\n }];\n };\n}\nconst Separator: TOC<{\n Element: HTMLDivElement;\n Args: {\n };\n Blocks: {\n default: [];\n };\n}> = template(`\n <div role=\"separator\" ...attributes>\n {{yield}}\n </div>\n`, {\n eval () {\n return eval(arguments[0]);\n }\n});\n/**\n * We focus items on `pointerMove` to achieve the following:\n *\n * - Mouse over an item (it focuses)\n * - Leave mouse where it is and use keyboard to focus a different item\n * - Wiggle mouse without it leaving previously focused item\n * - Previously focused item should re-focus\n *\n * If we used `mouseOver`/`mouseEnter` it would not re-focus when the mouse\n * wiggles. This is to match native menu implementation.\n */ function focusOnHover(e1: PointerEvent) {\n const item1 = e1.currentTarget;\n if (item1 instanceof HTMLElement) {\n item1?.focus();\n }\n}\nconst Item: TOC<{\n Element: HTMLButtonElement;\n Args: {\n onSelect?: (event: Event) => void;\n };\n Blocks: {\n default: [];\n };\n}> = template(`\n <button\n type=\"button\"\n role=\"menuitem\"\n {{! @glint-ignore !}}\n {{(if @onSelect (modifier on \"click\" @onSelect))}}\n {{on \"pointermove\" focusOnHover}}\n ...attributes\n >\n {{yield}}\n </button>\n`, {\n eval () {\n return eval(arguments[0]);\n }\n});\nconst installContent = modifier<{\n Element: HTMLElement;\n Args: {\n Named: {\n isOpen: Cell<boolean>;\n triggerElement: Cell<HTMLElement>;\n };\n };\n}>((element1, _1: [], { isOpen: isOpen1, triggerElement: triggerElement1 })=>{\n // focus first focusable element on the content\n const tabster1 = getTabster(window);\n const firstFocusable1 = tabster1?.focusable.findFirst({\n container: element1\n });\n firstFocusable1?.focus();\n // listen for \"outside\" clicks\n function onDocumentClick1(e1: MouseEvent) {\n if (isOpen1.current && e1.target && !element1.contains(e1.target as HTMLElement) && !triggerElement1.current?.contains(e1.target as HTMLElement)) {\n isOpen1.current = false;\n }\n }\n // listen for the escape key\n function onDocumentKeydown1(e1: KeyboardEvent) {\n if (isOpen1.current && e1.key === 'Escape') {\n isOpen1.current = false;\n }\n }\n document.addEventListener('click', onDocumentClick1);\n document.addEventListener('keydown', onDocumentKeydown1);\n return ()=>{\n document.removeEventListener('click', onDocumentClick1);\n document.removeEventListener('keydown', onDocumentKeydown1);\n };\n});\nconst Content: TOC<{\n Element: HTMLDivElement;\n Args: {\n triggerElement: Cell<HTMLElement>;\n contentId: string;\n isOpen: Cell<boolean>;\n PopoverContent: PopoverSignature['Blocks']['default'][0]['Content'];\n };\n Blocks: {\n default: [{\n Item: typeof Item;\n Separator: typeof Separator;\n }];\n };\n}> = template(`\n {{#if @isOpen.current}}\n <@PopoverContent\n id={{@contentId}}\n role=\"menu\"\n data-tabster={{TABSTER_CONFIG_CONTENT}}\n tabindex=\"0\"\n {{installContent isOpen=@isOpen triggerElement=@triggerElement}}\n {{on \"click\" @isOpen.toggle}}\n ...attributes\n >\n {{yield (hash Item=Item Separator=Separator)}}\n </@PopoverContent>\n {{/if}}\n`, {\n eval () {\n return eval(arguments[0]);\n }\n});\nconst installTrigger = modifier<{\n Element: HTMLElement;\n Args: {\n Named: {\n triggerElement: Cell<HTMLElement>;\n };\n };\n}>((element1, _1: [], { triggerElement: triggerElement1 })=>{\n triggerElement1.current = element1;\n});\nconst Trigger: TOC<{\n Element: HTMLButtonElement;\n Args: {\n triggerElement: Cell<HTMLElement>;\n contentId: string;\n isOpen: Cell<boolean>;\n hook: PopoverSignature['Blocks']['default'][0]['hook'];\n };\n Blocks: {\n default: [];\n };\n}> = template(`\n <button\n data-tabster={{TABSTER_CONFIG_TRIGGER}}\n type=\"button\"\n aria-controls={{if @isOpen.current @contentId}}\n aria-haspopup=\"menu\"\n aria-expanded={{if @isOpen.current \"true\" \"false\"}}\n {{@hook}}\n {{installTrigger triggerElement=@triggerElement}}\n {{on \"click\" @isOpen.toggle}}\n ...attributes\n >\n {{yield}}\n </button>\n`, {\n eval () {\n return eval(arguments[0]);\n }\n});\nconst IsOpen = ()=>cell<boolean>(false);\nconst TriggerElement = ()=>cell<HTMLElement>();\nexport class Menu extends Component<Signature> {\n contentId = guidFor(this);\n static{\n template(`\n {{#let (IsOpen) (TriggerElement) as |isOpen triggerEl|}}\n <Popover\n @flipOptions={{@flipOptions}}\n @middleware={{@middleware}}\n @offsetOptions={{@offsetOptions}}\n @placement={{@placement}}\n @shiftOptions={{@shiftOptions}}\n @strategy={{@strategy}}\n @inline={{@inline}}\n as |p|\n >\n {{yield\n (hash\n Trigger=(component\n Trigger hook=p.hook isOpen=isOpen triggerElement=triggerEl contentId=this.contentId\n )\n Content=(component\n Content\n PopoverContent=p.Content\n isOpen=isOpen\n triggerElement=triggerEl\n contentId=this.contentId\n )\n arrow=p.arrow\n isOpen=isOpen.current\n )\n }}\n </Popover>\n {{/let}}\n `, {\n component: this,\n eval () {\n return eval(arguments[0]);\n }\n });\n }\n}\nexport default Menu;\n"],"names":["TABSTER_CONFIG_CONTENT","getTabsterAttribute","mover","direction","Types","MoverDirections","Both","cyclic","deloser","TABSTER_CONFIG_TRIGGER","Separator","setComponentTemplate","precompileTemplate","strictMode","templateOnly","focusOnHover","e1","item1","currentTarget","HTMLElement","focus","Item","scope","on","installContent","modifier","element1","_1","isOpen","isOpen1","triggerElement","triggerElement1","tabster1","getTabster","window","firstFocusable1","focusable","findFirst","container","onDocumentClick1","current","target","contains","onDocumentKeydown1","key","document","addEventListener","removeEventListener","Content","hash","installTrigger","Trigger","IsOpen","cell","TriggerElement","Menu","Component","contentId","guidFor","Popover"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"menu.js","sources":["../../src/components/menu.gts"],"sourcesContent":["import { template } from \"@ember/template-compiler\";\nimport Component from '@glimmer/component';\nimport { hash } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport { guidFor } from '@ember/object/internals';\nimport { modifier as eModifier } from 'ember-modifier';\nimport { cell } from 'ember-resources';\nimport { getTabster, getTabsterAttribute, setTabsterAttribute, Types } from 'tabster';\nimport { Popover, type Signature as PopoverSignature } from './popover.gts';\nimport type { TOC } from '@ember/component/template-only';\nimport type { WithBoundArgs } from '@glint/template';\ntype Cell<V> = ReturnType<typeof cell>;\ntype PopoverArgs = PopoverSignature['Args'];\ntype PopoverBlockParams = PopoverSignature['Blocks']['default'][0];\nconst TABSTER_CONFIG_CONTENT = getTabsterAttribute({\n mover: {\n direction: Types.MoverDirections.Both,\n cyclic: true\n },\n deloser: {}\n}, true);\nconst TABSTER_CONFIG_TRIGGER = {\n deloser: {}\n};\nexport interface Signature {\n Args: PopoverArgs;\n Blocks: {\n default: [{\n arrow: PopoverBlockParams['arrow'];\n trigger: WithBoundArgs<typeof trigger, 'triggerElement' | 'contentId' | 'isOpen' | 'setHook'>;\n Trigger: WithBoundArgs<typeof Trigger, 'triggerModifier'>;\n Content: WithBoundArgs<typeof Content, 'triggerElement' | 'contentId' | 'isOpen' | 'PopoverContent'>;\n isOpen: boolean;\n }];\n };\n}\nexport interface SeparatorSignature {\n Element: HTMLDivElement;\n Args: {\n };\n Blocks: {\n default: [];\n };\n}\nconst Separator: TOC<SeparatorSignature> = template(`\n <div role=\"separator\" ...attributes>\n {{yield}}\n </div>\n`, {\n eval () {\n return eval(arguments[0]);\n }\n});\n/**\n * We focus items on `pointerMove` to achieve the following:\n *\n * - Mouse over an item (it focuses)\n * - Leave mouse where it is and use keyboard to focus a different item\n * - Wiggle mouse without it leaving previously focused item\n * - Previously focused item should re-focus\n *\n * If we used `mouseOver`/`mouseEnter` it would not re-focus when the mouse\n * wiggles. This is to match native menu implementation.\n */ function focusOnHover(e1: PointerEvent) {\n const item1 = e1.currentTarget;\n if (item1 instanceof HTMLElement) {\n item1?.focus();\n }\n}\nexport interface ItemSignature {\n Element: HTMLButtonElement;\n Args: {\n onSelect?: (event: Event) => void;\n };\n Blocks: {\n default: [];\n };\n}\nconst Item: TOC<ItemSignature> = template(`\n <button\n type=\"button\"\n role=\"menuitem\"\n {{! @glint-ignore !}}\n {{(if @onSelect (modifier on \"click\" @onSelect))}}\n {{on \"pointermove\" focusOnHover}}\n ...attributes\n >\n {{yield}}\n </button>\n`, {\n eval () {\n return eval(arguments[0]);\n }\n});\nconst installContent = eModifier<{\n Element: HTMLElement;\n Args: {\n Named: {\n isOpen: Cell<boolean>;\n triggerElement: Cell<HTMLElement>;\n };\n };\n}>((element1, _1: [], { isOpen: isOpen1, triggerElement: triggerElement1 })=>{\n // focus first focusable element on the content\n const tabster1 = getTabster(window);\n const firstFocusable1 = tabster1?.focusable.findFirst({\n container: element1\n });\n firstFocusable1?.focus();\n // listen for \"outside\" clicks\n function onDocumentClick1(e1: MouseEvent) {\n if (isOpen1.current && e1.target && !element1.contains(e1.target as HTMLElement) && !triggerElement1.current?.contains(e1.target as HTMLElement)) {\n isOpen1.current = false;\n }\n }\n // listen for the escape key\n function onDocumentKeydown1(e1: KeyboardEvent) {\n if (isOpen1.current && e1.key === 'Escape') {\n isOpen1.current = false;\n }\n }\n document.addEventListener('click', onDocumentClick1);\n document.addEventListener('keydown', onDocumentKeydown1);\n return ()=>{\n document.removeEventListener('click', onDocumentClick1);\n document.removeEventListener('keydown', onDocumentKeydown1);\n };\n});\ninterface PrivateContentSignature {\n Element: HTMLDivElement;\n Args: {\n triggerElement: Cell<HTMLElement>;\n contentId: string;\n isOpen: Cell<boolean>;\n PopoverContent: PopoverBlockParams['Content'];\n };\n Blocks: {\n default: [{\n Item: typeof Item;\n Separator: typeof Separator;\n }];\n };\n}\nexport interface ContentSignature {\n Element: PrivateContentSignature['Element'];\n Args: {\n };\n Blocks: PrivateContentSignature['Blocks'];\n}\nconst Content: TOC<PrivateContentSignature> = template(`\n {{#if @isOpen.current}}\n <@PopoverContent\n id={{@contentId}}\n role=\"menu\"\n data-tabster={{TABSTER_CONFIG_CONTENT}}\n tabindex=\"0\"\n {{installContent isOpen=@isOpen triggerElement=@triggerElement}}\n {{on \"click\" @isOpen.toggle}}\n ...attributes\n >\n {{yield (hash Item=Item Separator=Separator)}}\n </@PopoverContent>\n {{/if}}\n`, {\n eval () {\n return eval(arguments[0]);\n }\n});\ninterface PrivateTriggerModifierSignature {\n Element: HTMLElement;\n Args: {\n Named: {\n triggerElement: Cell<HTMLElement>;\n isOpen: Cell<boolean>;\n contentId: string;\n setHook: PopoverBlockParams['setHook'];\n };\n };\n}\nexport interface TriggerModifierSignature {\n Element: PrivateTriggerModifierSignature['Element'];\n}\nconst trigger = eModifier<PrivateTriggerModifierSignature>((element1, _1: [], { triggerElement: triggerElement1, isOpen: isOpen1, contentId: contentId1, setHook: setHook1 })=>{\n element1.setAttribute('aria-haspopup', 'menu');\n if (isOpen1.current) {\n element1.setAttribute('aria-controls', contentId1);\n element1.setAttribute('aria-expanded', 'true');\n } else {\n element1.removeAttribute('aria-controls');\n element1.setAttribute('aria-expanded', 'false');\n }\n setTabsterAttribute(element1, TABSTER_CONFIG_TRIGGER);\n const onTriggerClick1 = ()=>isOpen1.toggle();\n element1.addEventListener('click', onTriggerClick1);\n triggerElement1.current = element1;\n setHook1(element1);\n return ()=>{\n element1.removeEventListener('click', onTriggerClick1);\n };\n});\ninterface PrivateTriggerSignature {\n Element: HTMLButtonElement;\n Args: {\n triggerModifier: WithBoundArgs<typeof trigger, 'triggerElement' | 'contentId' | 'isOpen' | 'setHook'>;\n };\n Blocks: {\n default: [];\n };\n}\nexport interface TriggerSignature {\n Element: PrivateTriggerSignature['Element'];\n Args: {\n };\n Blocks: PrivateTriggerSignature['Blocks'];\n}\nconst Trigger: TOC<PrivateTriggerSignature> = template(`\n <button type=\"button\" {{@triggerModifier}} ...attributes>\n {{yield}}\n </button>\n`, {\n eval () {\n return eval(arguments[0]);\n }\n});\nconst IsOpen = ()=>cell<boolean>(false);\nconst TriggerElement = ()=>cell<HTMLElement>();\nexport class Menu extends Component<Signature> {\n contentId = guidFor(this);\n static{\n template(`\n {{#let (IsOpen) (TriggerElement) as |isOpen triggerEl|}}\n <Popover\n @flipOptions={{@flipOptions}}\n @middleware={{@middleware}}\n @offsetOptions={{@offsetOptions}}\n @placement={{@placement}}\n @shiftOptions={{@shiftOptions}}\n @strategy={{@strategy}}\n @inline={{@inline}}\n as |p|\n >\n {{#let\n (modifier\n trigger\n triggerElement=triggerEl\n isOpen=isOpen\n contentId=this.contentId\n setHook=p.setHook\n )\n as |triggerModifier|\n }}\n {{yield\n (hash\n trigger=triggerModifier\n Trigger=(component Trigger triggerModifier=triggerModifier)\n Content=(component\n Content\n PopoverContent=p.Content\n isOpen=isOpen\n triggerElement=triggerEl\n contentId=this.contentId\n )\n arrow=p.arrow\n isOpen=isOpen.current\n )\n }}\n {{/let}}\n </Popover>\n {{/let}}\n `, {\n component: this,\n eval () {\n return eval(arguments[0]);\n }\n });\n }\n}\nexport default Menu;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2VtYmVyLXByaW1pdGl2ZXMvZW1iZXItcHJpbWl0aXZlcy9lbWJlci1wcmltaXRpdmVzL3NyYy9jb21wb25lbnRzL21lbnUuZ3RzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb21wb25lbnQgZnJvbSAnQGdsaW1tZXIvY29tcG9uZW50JztcbmltcG9ydCB7IGhhc2ggfSBmcm9tICdAZW1iZXIvaGVscGVyJztcbmltcG9ydCB7IG9uIH0gZnJvbSAnQGVtYmVyL21vZGlmaWVyJztcbmltcG9ydCB7IGd1aWRGb3IgfSBmcm9tICdAZW1iZXIvb2JqZWN0L2ludGVybmFscyc7XG5cbmltcG9ydCB7IG1vZGlmaWVyIGFzIGVNb2RpZmllciB9IGZyb20gJ2VtYmVyLW1vZGlmaWVyJztcbmltcG9ydCB7IGNlbGwgfSBmcm9tICdlbWJlci1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgZ2V0VGFic3RlciwgZ2V0VGFic3RlckF0dHJpYnV0ZSwgc2V0VGFic3RlckF0dHJpYnV0ZSwgVHlwZXMgfSBmcm9tICd0YWJzdGVyJztcblxuaW1wb3J0IHsgUG9wb3ZlciwgdHlwZSBTaWduYXR1cmUgYXMgUG9wb3ZlclNpZ25hdHVyZSB9IGZyb20gJy4vcG9wb3Zlci5ndHMnO1xuXG5pbXBvcnQgdHlwZSB7IFRPQyB9IGZyb20gJ0BlbWJlci9jb21wb25lbnQvdGVtcGxhdGUtb25seSc7XG5pbXBvcnQgdHlwZSB7IFdpdGhCb3VuZEFyZ3MgfSBmcm9tICdAZ2xpbnQvdGVtcGxhdGUnO1xuXG50eXBlIENlbGw8Vj4gPSBSZXR1cm5UeXBlPHR5cGVvZiBjZWxsPFY-PjtcbnR5cGUgUG9wb3ZlckFyZ3MgPSBQb3BvdmVyU2lnbmF0dXJlWydBcmdzJ107XG50eXBlIFBvcG92ZXJCbG9ja1BhcmFtcyA9IFBvcG92ZXJTaWduYXR1cmVbJ0Jsb2NrcyddWydkZWZhdWx0J11bMF07XG5cbmNvbnN0IFRBQlNURVJfQ09ORklHX0NPTlRFTlQgPSBnZXRUYWJzdGVyQXR0cmlidXRlKFxuICB7XG4gICAgbW92ZXI6IHtcbiAgICAgIGRpcmVjdGlvbjogVHlwZXMuTW92ZXJEaXJlY3Rpb25zLkJvdGgsXG4gICAgICBjeWNsaWM6IHRydWUsXG4gICAgfSxcbiAgICBkZWxvc2VyOiB7fSxcbiAgfSxcbiAgdHJ1ZVxuKTtcblxuY29uc3QgVEFCU1RFUl9DT05GSUdfVFJJR0dFUiA9IHtcbiAgZGVsb3Nlcjoge30sXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25hdHVyZSB7XG4gIEFyZ3M6IFBvcG92ZXJBcmdzO1xuICBCbG9ja3M6IHtcbiAgICBkZWZhdWx0OiBbXG4gICAgICB7XG4gICAgICAgIGFycm93OiBQb3BvdmVyQmxvY2tQYXJhbXNbJ2Fycm93J107XG4gICAgICAgIHRyaWdnZXI6IFdpdGhCb3VuZEFyZ3M8XG4gICAgICAgICAgdHlwZW9mIHRyaWdnZXIsXG4gICAgICAgICAgJ3RyaWdnZXJFbGVtZW50JyB8ICdjb250ZW50SWQnIHwgJ2lzT3BlbicgfCAnc2V0SG9vaydcbiAgICAgICAgPjtcbiAgICAgICAgVHJpZ2dlcjogV2l0aEJvdW5kQXJnczx0eXBlb2YgVHJpZ2dlciwgJ3RyaWdnZXJNb2RpZmllcic-O1xuICAgICAgICBDb250ZW50OiBXaXRoQm91bmRBcmdzPFxuICAgICAgICAgIHR5cGVvZiBDb250ZW50LFxuICAgICAgICAgICd0cmlnZ2VyRWxlbWVudCcgfCAnY29udGVudElkJyB8ICdpc09wZW4nIHwgJ1BvcG92ZXJDb250ZW50J1xuICAgICAgICA-O1xuICAgICAgICBpc09wZW46IGJvb2xlYW47XG4gICAgICB9LFxuICAgIF07XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VwYXJhdG9yU2lnbmF0dXJlIHtcbiAgRWxlbWVudDogSFRNTERpdkVsZW1lbnQ7XG4gIEFyZ3M6IHt9O1xuICBCbG9ja3M6IHsgZGVmYXVsdDogW10gfTtcbn1cblxuY29uc3QgU2VwYXJhdG9yOiBUT0M8U2VwYXJhdG9yU2lnbmF0dXJlPiA9IDx0ZW1wbGF0ZT5cbiAgPGRpdiByb2xlPVwic2VwYXJhdG9yXCIgLi4uYXR0cmlidXRlcz5cbiAgICB7e3lpZWxkfX1cbiAgPC9kaXY-XG48L3RlbXBsYXRlPjtcblxuLyoqXG4gKiBXZSBmb2N1cyBpdGVtcyBvbiBgcG9pbnRlck1vdmVgIHRvIGFjaGlldmUgdGhlIGZvbGxvd2luZzpcbiAqXG4gKiAtIE1vdXNlIG92ZXIgYW4gaXRlbSAoaXQgZm9jdXNlcylcbiAqIC0gTGVhdmUgbW91c2Ugd2hlcmUgaXQgaXMgYW5kIHVzZSBrZXlib2FyZCB0byBmb2N1cyBhIGRpZmZlcmVudCBpdGVtXG4gKiAtIFdpZ2dsZSBtb3VzZSB3aXRob3V0IGl0IGxlYXZpbmcgcHJldmlvdXNseSBmb2N1c2VkIGl0ZW1cbiAqIC0gUHJldmlvdXNseSBmb2N1c2VkIGl0ZW0gc2hvdWxkIHJlLWZvY3VzXG4gKlxuICogSWYgd2UgdXNlZCBgbW91c2VPdmVyYC9gbW91c2VFbnRlcmAgaXQgd291bGQgbm90IHJlLWZvY3VzIHdoZW4gdGhlIG1vdXNlXG4gKiB3aWdnbGVzLiBUaGlzIGlzIHRvIG1hdGNoIG5hdGl2ZSBtZW51IGltcGxlbWVudGF0aW9uLlxuICovXG5mdW5jdGlvbiBmb2N1c09uSG92ZXIoZTogUG9pbnRlckV2ZW50KSB7XG4gIGNvbnN0IGl0ZW0gPSBlLmN1cnJlbnRUYXJnZXQ7XG5cbiAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgIGl0ZW0_LmZvY3VzKCk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJdGVtU2lnbmF0dXJlIHtcbiAgRWxlbWVudDogSFRNTEJ1dHRvbkVsZW1lbnQ7XG4gIEFyZ3M6IHsgb25TZWxlY3Q_OiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkIH07XG4gIEJsb2NrczogeyBkZWZhdWx0OiBbXSB9O1xufVxuXG5jb25zdCBJdGVtOiBUT0M8SXRlbVNpZ25hdHVyZT4gPSA8dGVtcGxhdGU-XG4gIDxidXR0b25cbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICByb2xlPVwibWVudWl0ZW1cIlxuICAgIHt7ISBAZ2xpbnQtaWdub3JlICF9fVxuICAgIHt7KGlmIEBvblNlbGVjdCAobW9kaWZpZXIgb24gXCJjbGlja1wiIEBvblNlbGVjdCkpfX1cbiAgICB7e29uIFwicG9pbnRlcm1vdmVcIiBmb2N1c09uSG92ZXJ9fVxuICAgIC4uLmF0dHJpYnV0ZXNcbiAgPlxuICAgIHt7eWllbGR9fVxuICA8L2J1dHRvbj5cbjwvdGVtcGxhdGU-O1xuXG5jb25zdCBpbnN0YWxsQ29udGVudCA9IGVNb2RpZmllcjx7XG4gIEVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICBBcmdzOiB7XG4gICAgTmFtZWQ6IHtcbiAgICAgIGlzT3BlbjogQ2VsbDxib29sZWFuPjtcbiAgICAgIHRyaWdnZXJFbGVtZW50OiBDZWxsPEhUTUxFbGVtZW50PjtcbiAgICB9O1xuICB9O1xufT4oKGVsZW1lbnQsIF86IFtdLCB7IGlzT3BlbiwgdHJpZ2dlckVsZW1lbnQgfSkgPT4ge1xuICAvLyBmb2N1cyBmaXJzdCBmb2N1c2FibGUgZWxlbWVudCBvbiB0aGUgY29udGVudFxuICBjb25zdCB0YWJzdGVyID0gZ2V0VGFic3Rlcih3aW5kb3cpO1xuICBjb25zdCBmaXJzdEZvY3VzYWJsZSA9IHRhYnN0ZXI_LmZvY3VzYWJsZS5maW5kRmlyc3Qoe1xuICAgIGNvbnRhaW5lcjogZWxlbWVudCxcbiAgfSk7XG5cbiAgZmlyc3RGb2N1c2FibGU_LmZvY3VzKCk7XG5cbiAgLy8gbGlzdGVuIGZvciBcIm91dHNpZGVcIiBjbGlja3NcbiAgZnVuY3Rpb24gb25Eb2N1bWVudENsaWNrKGU6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoXG4gICAgICBpc09wZW4uY3VycmVudCAmJlxuICAgICAgZS50YXJnZXQgJiZcbiAgICAgICFlbGVtZW50LmNvbnRhaW5zKGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50KSAmJlxuICAgICAgIXRyaWdnZXJFbGVtZW50LmN1cnJlbnQ_LmNvbnRhaW5zKGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50KVxuICAgICkge1xuICAgICAgaXNPcGVuLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvLyBsaXN0ZW4gZm9yIHRoZSBlc2NhcGUga2V5XG4gIGZ1bmN0aW9uIG9uRG9jdW1lbnRLZXlkb3duKGU6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoaXNPcGVuLmN1cnJlbnQgJiYgZS5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICBpc09wZW4uY3VycmVudCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgb25Eb2N1bWVudENsaWNrKTtcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIG9uRG9jdW1lbnRLZXlkb3duKTtcblxuICByZXR1cm4gKCkgPT4ge1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgb25Eb2N1bWVudENsaWNrKTtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25Eb2N1bWVudEtleWRvd24pO1xuICB9O1xufSk7XG5cbmludGVyZmFjZSBQcml2YXRlQ29udGVudFNpZ25hdHVyZSB7XG4gIEVsZW1lbnQ6IEhUTUxEaXZFbGVtZW50O1xuICBBcmdzOiB7XG4gICAgdHJpZ2dlckVsZW1lbnQ6IENlbGw8SFRNTEVsZW1lbnQ-O1xuICAgIGNvbnRlbnRJZDogc3RyaW5nO1xuICAgIGlzT3BlbjogQ2VsbDxib29sZWFuPjtcbiAgICBQb3BvdmVyQ29udGVudDogUG9wb3ZlckJsb2NrUGFyYW1zWydDb250ZW50J107XG4gIH07XG4gIEJsb2NrczogeyBkZWZhdWx0OiBbeyBJdGVtOiB0eXBlb2YgSXRlbTsgU2VwYXJhdG9yOiB0eXBlb2YgU2VwYXJhdG9yIH1dIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudFNpZ25hdHVyZSB7XG4gIEVsZW1lbnQ6IFByaXZhdGVDb250ZW50U2lnbmF0dXJlWydFbGVtZW50J107XG4gIEFyZ3M6IHt9O1xuICBCbG9ja3M6IFByaXZhdGVDb250ZW50U2lnbmF0dXJlWydCbG9ja3MnXTtcbn1cblxuY29uc3QgQ29udGVudDogVE9DPFByaXZhdGVDb250ZW50U2lnbmF0dXJlPiA9IDx0ZW1wbGF0ZT5cbiAge3sjaWYgQGlzT3Blbi5jdXJyZW50fX1cbiAgICA8QFBvcG92ZXJDb250ZW50XG4gICAgICBpZD17e0Bjb250ZW50SWR9fVxuICAgICAgcm9sZT1cIm1lbnVcIlxuICAgICAgZGF0YS10YWJzdGVyPXt7VEFCU1RFUl9DT05GSUdfQ09OVEVOVH19XG4gICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAge3tpbnN0YWxsQ29udGVudCBpc09wZW49QGlzT3BlbiB0cmlnZ2VyRWxlbWVudD1AdHJpZ2dlckVsZW1lbnR9fVxuICAgICAge3tvbiBcImNsaWNrXCIgQGlzT3Blbi50b2dnbGV9fVxuICAgICAgLi4uYXR0cmlidXRlc1xuICAgID5cbiAgICAgIHt7eWllbGQgKGhhc2ggSXRlbT1JdGVtIFNlcGFyYXRvcj1TZXBhcmF0b3IpfX1cbiAgICA8L0BQb3BvdmVyQ29udGVudD5cbiAge3svaWZ9fVxuPC90ZW1wbGF0ZT47XG5cbmludGVyZmFjZSBQcml2YXRlVHJpZ2dlck1vZGlmaWVyU2lnbmF0dXJlIHtcbiAgRWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gIEFyZ3M6IHtcbiAgICBOYW1lZDoge1xuICAgICAgdHJpZ2dlckVsZW1lbnQ6IENlbGw8SFRNTEVsZW1lbnQ-O1xuICAgICAgaXNPcGVuOiBDZWxsPGJvb2xlYW4-O1xuICAgICAgY29udGVudElkOiBzdHJpbmc7XG4gICAgICBzZXRIb29rOiBQb3BvdmVyQmxvY2tQYXJhbXNbJ3NldEhvb2snXTtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyaWdnZXJNb2RpZmllclNpZ25hdHVyZSB7XG4gIEVsZW1lbnQ6IFByaXZhdGVUcmlnZ2VyTW9kaWZpZXJTaWduYXR1cmVbJ0VsZW1lbnQnXTtcbn1cblxuY29uc3QgdHJpZ2dlciA9IGVNb2RpZmllcjxQcml2YXRlVHJpZ2dlck1vZGlmaWVyU2lnbmF0dXJlPihcbiAgKGVsZW1lbnQsIF86IFtdLCB7IHRyaWdnZXJFbGVtZW50LCBpc09wZW4sIGNvbnRlbnRJZCwgc2V0SG9vayB9KSA9PiB7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGFzcG9wdXAnLCAnbWVudScpO1xuXG4gICAgaWYgKGlzT3Blbi5jdXJyZW50KSB7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1jb250cm9scycsIGNvbnRlbnRJZCk7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICd0cnVlJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWNvbnRyb2xzJyk7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xuICAgIH1cblxuICAgIHNldFRhYnN0ZXJBdHRyaWJ1dGUoZWxlbWVudCwgVEFCU1RFUl9DT05GSUdfVFJJR0dFUik7XG5cbiAgICBjb25zdCBvblRyaWdnZXJDbGljayA9ICgpID0-IGlzT3Blbi50b2dnbGUoKTtcblxuICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBvblRyaWdnZXJDbGljayk7XG5cbiAgICB0cmlnZ2VyRWxlbWVudC5jdXJyZW50ID0gZWxlbWVudDtcbiAgICBzZXRIb29rKGVsZW1lbnQpO1xuXG4gICAgcmV0dXJuICgpID0-IHtcbiAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBvblRyaWdnZXJDbGljayk7XG4gICAgfTtcbiAgfVxuKTtcblxuaW50ZXJmYWNlIFByaXZhdGVUcmlnZ2VyU2lnbmF0dXJlIHtcbiAgRWxlbWVudDogSFRNTEJ1dHRvbkVsZW1lbnQ7XG4gIEFyZ3M6IHtcbiAgICB0cmlnZ2VyTW9kaWZpZXI6IFdpdGhCb3VuZEFyZ3M8XG4gICAgICB0eXBlb2YgdHJpZ2dlcixcbiAgICAgICd0cmlnZ2VyRWxlbWVudCcgfCAnY29udGVudElkJyB8ICdpc09wZW4nIHwgJ3NldEhvb2snXG4gICAgPjtcbiAgfTtcbiAgQmxvY2tzOiB7IGRlZmF1bHQ6IFtdIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJpZ2dlclNpZ25hdHVyZSB7XG4gIEVsZW1lbnQ6IFByaXZhdGVUcmlnZ2VyU2lnbmF0dXJlWydFbGVtZW50J107XG4gIEFyZ3M6IHt9O1xuICBCbG9ja3M6IFByaXZhdGVUcmlnZ2VyU2lnbmF0dXJlWydCbG9ja3MnXTtcbn1cblxuY29uc3QgVHJpZ2dlcjogVE9DPFByaXZhdGVUcmlnZ2VyU2lnbmF0dXJlPiA9IDx0ZW1wbGF0ZT5cbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIge3tAdHJpZ2dlck1vZGlmaWVyfX0gLi4uYXR0cmlidXRlcz5cbiAgICB7e3lpZWxkfX1cbiAgPC9idXR0b24-XG48L3RlbXBsYXRlPjtcblxuY29uc3QgSXNPcGVuID0gKCkgPT4gY2VsbDxib29sZWFuPihmYWxzZSk7XG5jb25zdCBUcmlnZ2VyRWxlbWVudCA9ICgpID0-IGNlbGw8SFRNTEVsZW1lbnQ-KCk7XG5cbmV4cG9ydCBjbGFzcyBNZW51IGV4dGVuZHMgQ29tcG9uZW50PFNpZ25hdHVyZT4ge1xuICBjb250ZW50SWQgPSBndWlkRm9yKHRoaXMpO1xuXG4gIDx0ZW1wbGF0ZT5cbiAgICB7eyNsZXQgKElzT3BlbikgKFRyaWdnZXJFbGVtZW50KSBhcyB8aXNPcGVuIHRyaWdnZXJFbHx9fVxuICAgICAgPFBvcG92ZXJcbiAgICAgICAgQGZsaXBPcHRpb25zPXt7QGZsaXBPcHRpb25zfX1cbiAgICAgICAgQG1pZGRsZXdhcmU9e3tAbWlkZGxld2FyZX19XG4gICAgICAgIEBvZmZzZXRPcHRpb25zPXt7QG9mZnNldE9wdGlvbnN9fVxuICAgICAgICBAcGxhY2VtZW50PXt7QHBsYWNlbWVudH19XG4gICAgICAgIEBzaGlmdE9wdGlvbnM9e3tAc2hpZnRPcHRpb25zfX1cbiAgICAgICAgQHN0cmF0ZWd5PXt7QHN0cmF0ZWd5fX1cbiAgICAgICAgQGlubGluZT17e0BpbmxpbmV9fVxuICAgICAgICBhcyB8cHxcbiAgICAgID5cbiAgICAgICAge3sjbGV0XG4gICAgICAgICAgKG1vZGlmaWVyXG4gICAgICAgICAgICB0cmlnZ2VyXG4gICAgICAgICAgICB0cmlnZ2VyRWxlbWVudD10cmlnZ2VyRWxcbiAgICAgICAgICAgIGlzT3Blbj1pc09wZW5cbiAgICAgICAgICAgIGNvbnRlbnRJZD10aGlzLmNvbnRlbnRJZFxuICAgICAgICAgICAgc2V0SG9vaz1wLnNldEhvb2tcbiAgICAgICAgICApXG4gICAgICAgICAgYXMgfHRyaWdnZXJNb2RpZmllcnxcbiAgICAgICAgfX1cbiAgICAgICAgICB7e3lpZWxkXG4gICAgICAgICAgICAoaGFzaFxuICAgICAgICAgICAgICB0cmlnZ2VyPXRyaWdnZXJNb2RpZmllclxuICAgICAgICAgICAgICBUcmlnZ2VyPShjb21wb25lbnQgVHJpZ2dlciB0cmlnZ2VyTW9kaWZpZXI9dHJpZ2dlck1vZGlmaWVyKVxuICAgICAgICAgICAgICBDb250ZW50PShjb21wb25lbnRcbiAgICAgICAgICAgICAgICBDb250ZW50XG4gICAgICAgICAgICAgICAgUG9wb3ZlckNvbnRlbnQ9cC5Db250ZW50XG4gICAgICAgICAgICAgICAgaXNPcGVuPWlzT3BlblxuICAgICAgICAgICAgICAgIHRyaWdnZXJFbGVtZW50PXRyaWdnZXJFbFxuICAgICAgICAgICAgICAgIGNvbnRlbnRJZD10aGlzLmNvbnRlbnRJZFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGFycm93PXAuYXJyb3dcbiAgICAgICAgICAgICAgaXNPcGVuPWlzT3Blbi5jdXJyZW50XG4gICAgICAgICAgICApXG4gICAgICAgICAgfX1cbiAgICAgICAge3svbGV0fX1cbiAgICAgIDwvUG9wb3Zlcj5cbiAgICB7ey9sZXR9fVxuICA8L3RlbXBsYXRlPlxufVxuXG5leHBvcnQgZGVmYXVsdCBNZW51O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLGVBQWUscUJBQXFCO0FBQzNDLFNBQVMsSUFBSSxRQUFRLGdCQUFnQjtBQUNyQyxTQUFTLEVBQUUsUUFBUSxrQkFBa0I7QUFDckMsU0FBUyxPQUFPLFFBQVEsMEJBQTBCO0FBRWxELFNBQVMsWUFBWSxTQUFTLFFBQVEsaUJBQWlCO0FBQ3ZELFNBQVMsSUFBSSxRQUFRLGtCQUFrQjtBQUN2QyxTQUFTLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxLQUFLLFFBQVEsVUFBVTtBQUV0RixTQUFTLE9BQU8sRUFBRSxLQUFLLGFBQWEsZ0JBQWdCLFFBQVEsZ0JBQWdCO0FBRTVFLGNBQWMsR0FBRyxRQUFRLGlDQUFpQztBQUMxRCxjQUFjLGFBQWEsUUFBUSxrQkFBa0I7S0FFaEQsS0FBSyxLQUFLLGtCQUFrQjtLQUM1QixjQUFjLGlCQUFpQjtLQUMvQixxQkFBcUIsaUJBQWlCLFVBQVUsV0FBVztBQUVoRSxNQUFNLHlCQUF5QixvQkFDN0I7SUFDRSxPQUFPO1FBQ0wsV0FBVyxNQUFNLGVBQWUsQ0FBQyxJQUFJO1FBQ3JDLFFBQVE7SUFDVjtJQUNB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"],"names":["TABSTER_CONFIG_CONTENT","getTabsterAttribute","mover","direction","Types","MoverDirections","Both","cyclic","deloser","TABSTER_CONFIG_TRIGGER","Separator","setComponentTemplate","precompileTemplate","strictMode","templateOnly","focusOnHover","e1","item1","currentTarget","HTMLElement","focus","Item","scope","on","installContent","eModifier","element1","_1","isOpen","isOpen1","triggerElement","triggerElement1","tabster1","getTabster","window","firstFocusable1","focusable","findFirst","container","onDocumentClick1","current","target","contains","onDocumentKeydown1","key","document","addEventListener","removeEventListener","Content","hash","trigger","contentId","contentId1","setHook","setHook1","setAttribute","removeAttribute","setTabsterAttribute","onTriggerClick1","toggle","Trigger","IsOpen","cell","TriggerElement","Menu","Component","guidFor","Popover"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { assert } from '@ember/debug';
|
|
2
|
+
import { on } from '@ember/modifier';
|
|
2
3
|
import { precompileTemplate } from '@ember/template-compilation';
|
|
3
4
|
import { setComponentTemplate } from '@ember/component';
|
|
4
5
|
import templateOnly from '@ember/component/template-only';
|
|
5
|
-
import { on } from '@ember/modifier';
|
|
6
6
|
|
|
7
7
|
const reset = event1 => {
|
|
8
8
|
assert('[BUG]: reset called without an event.target', event1.target instanceof HTMLElement);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buttons.js","sources":["../../../src/components/one-time-password/buttons.gts"],"sourcesContent":["import { template } from \"@ember/template-compiler\";\nimport { assert } from '@ember/debug';\nimport { on } from '@ember/modifier';\nimport type { TOC } from '@ember/component/template-only';\nconst reset = (event1: Event)=>{\n assert('[BUG]: reset called without an event.target', event1.target instanceof HTMLElement);\n let form1 = event1.target.closest('form');\n assert('Form is missing. Cannot use <Reset> without being contained within a <form>', form1 instanceof HTMLFormElement);\n form1.reset();\n};\nexport const Submit: TOC<{\n Element: HTMLButtonElement;\n Blocks: {\n default: [];\n };\n}> = template(`\n <button type=\"submit\" ...attributes>Submit</button>\n`, {\n eval () {\n return eval(arguments[0]);\n }\n});\nexport const Reset: TOC<{\n Element: HTMLButtonElement;\n Blocks: {\n default: [];\n };\n}> = template(`\n <button type=\"button\" {{on \"click\" reset}} ...attributes>{{yield}}</button>\n`, {\n eval () {\n return eval(arguments[0]);\n }\n});\n"],"names":["reset","event1","assert","target","HTMLElement","form1","closest","HTMLFormElement","Submit","
|
|
1
|
+
{"version":3,"file":"buttons.js","sources":["../../../src/components/one-time-password/buttons.gts"],"sourcesContent":["import { template } from \"@ember/template-compiler\";\nimport { assert } from '@ember/debug';\nimport { on } from '@ember/modifier';\nimport type { TOC } from '@ember/component/template-only';\nconst reset = (event1: Event)=>{\n assert('[BUG]: reset called without an event.target', event1.target instanceof HTMLElement);\n let form1 = event1.target.closest('form');\n assert('Form is missing. Cannot use <Reset> without being contained within a <form>', form1 instanceof HTMLFormElement);\n form1.reset();\n};\nexport const Submit: TOC<{\n Element: HTMLButtonElement;\n Blocks: {\n default: [];\n };\n}> = template(`\n <button type=\"submit\" ...attributes>Submit</button>\n`, {\n eval () {\n return eval(arguments[0]);\n }\n});\nexport const Reset: TOC<{\n Element: HTMLButtonElement;\n Blocks: {\n default: [];\n };\n}> = template(`\n <button type=\"button\" {{on \"click\" reset}} ...attributes>{{yield}}</button>\n`, {\n eval () {\n return eval(arguments[0]);\n }\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2VtYmVyLXByaW1pdGl2ZXMvZW1iZXItcHJpbWl0aXZlcy9lbWJlci1wcmltaXRpdmVzL3NyYy9jb21wb25lbnRzL29uZS10aW1lLXBhc3N3b3JkL2J1dHRvbnMuZ3RzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFzc2VydCB9IGZyb20gJ0BlbWJlci9kZWJ1Zyc7XG5pbXBvcnQgeyBvbiB9IGZyb20gJ0BlbWJlci9tb2RpZmllcic7XG5cbmltcG9ydCB0eXBlIHsgVE9DIH0gZnJvbSAnQGVtYmVyL2NvbXBvbmVudC90ZW1wbGF0ZS1vbmx5JztcblxuY29uc3QgcmVzZXQgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gIGFzc2VydCgnW0JVR106IHJlc2V0IGNhbGxlZCB3aXRob3V0IGFuIGV2ZW50LnRhcmdldCcsIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KTtcblxuICBsZXQgZm9ybSA9IGV2ZW50LnRhcmdldC5jbG9zZXN0KCdmb3JtJyk7XG5cbiAgYXNzZXJ0KFxuICAgICdGb3JtIGlzIG1pc3NpbmcuIENhbm5vdCB1c2UgPFJlc2V0PiB3aXRob3V0IGJlaW5nIGNvbnRhaW5lZCB3aXRoaW4gYSA8Zm9ybT4nLFxuICAgIGZvcm0gaW5zdGFuY2VvZiBIVE1MRm9ybUVsZW1lbnRcbiAgKTtcblxuICBmb3JtLnJlc2V0KCk7XG59O1xuXG5leHBvcnQgY29uc3QgU3VibWl0OiBUT0M8e1xuICBFbGVtZW50OiBIVE1MQnV0dG9uRWxlbWVudDtcbiAgQmxvY2tzOiB7IGRlZmF1bHQ6IFtdIH07XG59PiA9IDx0ZW1wbGF0ZT5cbiAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgLi4uYXR0cmlidXRlcz5TdWJtaXQ8L2J1dHRvbj5cbjwvdGVtcGxhdGU-O1xuXG5leHBvcnQgY29uc3QgUmVzZXQ6IFRPQzx7XG4gIEVsZW1lbnQ6IEhUTUxCdXR0b25FbGVtZW50O1xuICBCbG9ja3M6IHsgZGVmYXVsdDogW10gfTtcbn0-ID0gPHRlbXBsYXRlPlxuICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB7e29uIFwiY2xpY2tcIiByZXNldH19IC4uLmF0dHJpYnV0ZXM-e3t5aWVsZH19PC9idXR0b24-XG48L3RlbXBsYXRlPjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsU0FBUyxNQUFNLFFBQVEsZUFBZTtBQUN0QyxTQUFTLEVBQUUsUUFBUSxrQkFBa0I7QUFFckMsY0FBYyxHQUFHLFFBQVEsaUNBQWlDO0FBRTFELE1BQU0sUUFBUSxDQUFDLFFBQU87SUFDcEIsT0FBTywrQ0FBK0MsT0FBTSxNQUFNLFlBQVk7SUFFOUUsSUFBSSxRQUFPLE9BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQztJQUVoQyxPQUNFLCtFQUNBLGlCQUFnQjtJQUdsQixNQUFLLEtBQUs7QUFDWjtBQUVBLE9BQU8sTUFBTSxRQUFRO0lBQ25CLFNBQVM7SUFDVDtRQUFVOztLQUNQLFNBQVUsQ0FBQTs7QUFFZixDQUFBLEVBQUE7SUFBQTtRQUFBLE9BQUEsS0FBQSxTQUFBLENBQUEsRUFBVztJQUFEO0FBQUEsR0FBRTtBQUVaLE9BQU8sTUFBTSxPQUFPO0lBQ2xCLFNBQVM7SUFDVDtRQUFVOztLQUNQLFNBQVUsQ0FBQTs7QUFFZixDQUFBLEVBQUE7SUFBQTtRQUFBLE9BQUEsS0FBQSxTQUFBLENBQUEsRUFBVztJQUFEO0FBQUEsR0FBRSJ9"],"names":["reset","event1","assert","target","HTMLElement","form1","closest","HTMLFormElement","Submit","precompileTemplate","strictMode","templateOnly","Reset","scope","on"],"mappings":";;;;;;AAKA,MAAMA,KAAA,GAASC,MAAO,IAAA;AACpBC,EAAAA,MAAA,CAAO,6CAA+CD,EAAAA,MAAA,CAAME,MAAM,YAAYC,WAAA,CAAA,CAAA;AAE9E,EAAA,IAAIC,KAAA,GAAOJ,MAAA,CAAME,MAAM,CAACG,OAAO,CAAC,MAAA,CAAA,CAAA;AAEhCJ,EAAAA,MAAA,CACE,6EAAA,EACAG,KAAA,YAAgBE,eAAA,CAAA,CAAA;AAGlBF,EAAAA,KAAA,CAAKL,KAAK,EAAA,CAAA;AACZ,CAAA,CAAA;AAEaQ,MAAAA,SAGRC,oBAAAA,CAAAA,kBAAA,CAEL,6DAAA,EAAA;EAAAC,UAAA,EAAA,IAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA,EAAA;AAEGC,MAAAA,QAGRH,oBAAAA,CAAAA,kBAAA,CAEL,uFAAA,EAAA;AAAAI,EAAAA,KAAA,EAAAA,OAAA;IAAAC,EAAA;AAAAd,IAAAA,KAAAA;AAAA,GAAA,CAAA;EAAAU,UAAA,EAAA,IAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA;;;;"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import Component from '@glimmer/component';
|
|
2
2
|
import { warn } from '@ember/debug';
|
|
3
3
|
import { isDestroyed, isDestroying } from '@ember/destroyable';
|
|
4
|
+
import { on } from '@ember/modifier';
|
|
4
5
|
import { buildWaiter } from '@ember/test-waiters';
|
|
5
6
|
import { selectAll, handlePaste, autoAdvance, handleNavigation, getCollectiveValue } from './utils.js';
|
|
6
|
-
import { on } from '@ember/modifier';
|
|
7
7
|
import { precompileTemplate } from '@ember/template-compilation';
|
|
8
8
|
import { setComponentTemplate } from '@ember/component';
|
|
9
9
|
import templateOnly from '@ember/component/template-only';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.js","sources":["../../../src/components/one-time-password/input.gts"],"sourcesContent":["import { template } from \"@ember/template-compiler\";\nimport Component from '@glimmer/component';\nimport { warn } from '@ember/debug';\nimport { isDestroyed, isDestroying } from '@ember/destroyable';\nimport { on } from '@ember/modifier';\nimport { buildWaiter } from '@ember/test-waiters';\nimport { autoAdvance, getCollectiveValue, handleNavigation, handlePaste, selectAll } from './utils.ts';\nimport type { TOC } from '@ember/component/template-only';\nimport type { WithBoundArgs } from '@glint/template';\nconst DEFAULT_LENGTH = 6;\nfunction labelFor(inputIndex1: number, labelFn1: undefined | ((index: number) => string)) {\n if (labelFn1) {\n return labelFn1(inputIndex1);\n }\n return `Please enter OTP character ${inputIndex1 + 1}`;\n}\nlet waiter = buildWaiter('ember-primitives:OTPInput:handleChange');\nconst Fields: TOC<{\n /**\n * Any attributes passed to this component will be applied to each input.\n */ Element: HTMLInputElement;\n Args: {\n fields: unknown[];\n labelFn: (index: number) => string;\n handleChange: (event: Event) => void;\n };\n}> = template(`\n {{#each @fields as |_field i|}}\n <label>\n <span class=\"ember-primitives__sr-only\">{{labelFor i @labelFn}}</span>\n <input\n name=\"code{{i}}\"\n type=\"text\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n ...attributes\n {{on \"click\" selectAll}}\n {{on \"paste\" handlePaste}}\n {{on \"input\" autoAdvance}}\n {{on \"input\" @handleChange}}\n {{on \"keydown\" handleNavigation}}\n />\n </label>\n {{/each}}\n`, {\n eval () {\n return eval(arguments[0]);\n }\n});\nexport class OTPInput extends Component<{\n /**\n * The collection of individual OTP inputs are contained by a fieldset.\n * Applying the `disabled` attribute to this fieldset will disable\n * all of the inputs, if that's desired.\n */ Element: HTMLFieldSetElement;\n Args: {\n /**\n * How many characters the one-time-password field should be\n * Defaults to 6\n */ length?: number;\n /**\n * To Customize the label of the input fields, you may pass a function.\n * By default, this is `Please enter OTP character ${index + 1}`.\n */ labelFn?: (index: number) => string;\n /**\n * If passed, this function will be called when the <Input> changes.\n * All fields are considered one input.\n */ onChange?: (data: {\n /**\n * The text from the collective <Input>\n *\n * `code` _may_ be shorter than `length`\n * if the user has not finished typing / pasting their code\n */ code: string;\n /**\n * will be `true` if `code`'s length matches the passed `@length` or the default of 6\n */ complete: boolean;\n }, /**\n * The last input event received\n */ event: Event) => void;\n };\n Blocks: {\n /**\n * Optionally, you may control how the Fields are rendered, with proceeding text,\n * additional attributes added, etc.\n *\n * This is how you can add custom validation to each input field.\n */ default?: [fields: WithBoundArgs<typeof Fields, 'fields' | 'handleChange' | 'labelFn'>];\n };\n}> {\n /**\n * This is debounced, because we bind to each input,\n * but only want to emit one change event if someone pastes\n * multiple characters\n */ handleChange = (event1: Event)=>{\n if (!this.args.onChange) return;\n if (!this.#token) {\n this.#token = waiter.beginAsync();\n }\n if (this.#frame) {\n cancelAnimationFrame(this.#frame);\n }\n // We use requestAnimationFrame to be friendly to rendering.\n // We don't know if onChange is going to want to cause paints\n // (it's also how we debounce, under the assumption that \"paste\" behavior\n // would be fast enough to be quicker than individual frames\n // (see logic in autoAdvance)\n // )\n this.#frame = requestAnimationFrame(()=>{\n waiter.endAsync(this.#token);\n if (isDestroyed(this) || isDestroying(this)) return;\n if (!this.args.onChange) return;\n let value1 = getCollectiveValue(event1.target, this.length);\n if (value1 === undefined) {\n warn(`Value could not be determined for the OTP field. was it removed from the DOM?`, {\n id: 'ember-primitives.OTPInput.missing-value'\n });\n return;\n }\n this.args.onChange({\n code: value1,\n complete: value1.length === this.length\n }, event1);\n });\n };\n #token: unknown | undefined;\n #frame: number | undefined;\n get length() {\n return this.args.length ?? DEFAULT_LENGTH;\n }\n get fields() {\n // We only need to iterate a number of times,\n // so we don't care about the actual value or\n // referential integrity here\n return new Array(this.length);\n }\n static{\n template(`\n <fieldset ...attributes>\n {{#let\n (component Fields fields=this.fields handleChange=this.handleChange labelFn=@labelFn)\n as |CurriedFields|\n }}\n {{#if (has-block)}}\n {{yield CurriedFields}}\n {{else}}\n <CurriedFields />\n {{/if}}\n {{/let}}\n\n <style>\n .ember-primitives__sr-only { position: absolute; width: 1px; height: 1px; padding: 0;\n margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border-width:\n 0; }\n </style>\n </fieldset>\n `, {\n component: this,\n eval () {\n return eval(arguments[0]);\n }\n });\n }\n}\n"],"names":["DEFAULT_LENGTH","labelFor","inputIndex1","labelFn1","waiter","buildWaiter","Fields","setComponentTemplate","precompileTemplate","scope","on","selectAll","handlePaste","autoAdvance","handleNavigation","strictMode","templateOnly","OTPInput","Component","handleChange","event1","args","onChange","beginAsync","cancelAnimationFrame","requestAnimationFrame","endAsync","isDestroyed","isDestroying","value1","getCollectiveValue","target","length","undefined","warn","id","code","complete","fields","Array"],"mappings":";;;;;;;;;;AASA,MAAMA,cAAc,GAAG,CAAC,CAAA;AACxB,SAASC,QAAQA,CAACC,WAAmB,EAAEC,QAAiD,EAAE;AACtF,EAAA,IAAIA,QAAQ,EAAE;IACV,OAAOA,QAAQ,CAACD,WAAW,CAAC,CAAA;AAChC,GAAA;AACA,EAAA,OAAQ,CAA6BA,2BAAAA,EAAAA,WAAW,GAAG,CAAE,CAAC,CAAA,CAAA;AAC1D,CAAA;AACA,IAAIE,MAAM,GAAGC,WAAW,CAAC,wCAAwC,CAAC,CAAA;AAClE,MAAMC,MASJ,GAAAC,oBAAA,CAAGC,kBAAA,CAkBF,kaAAA,EAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAR,QAAA;IAAAS,EAAA;IAAAC,SAAA;IAAAC,WAAA;IAAAC,WAAA;AAAAC,IAAAA,gBAAAA;AAAA,GAAA,CAAA;EAAAC,UAAA,EAAA,IAAA;AAIH,CAAC,CAAC,EAAAC,YAAA,EAAA,CAAA,CAAA;AACK,MAAMC,QAAQ,SAASC,SAAS,CAwCpC;AACC;AACJ;AACA;AACA;AACA;EAAMC,YAAY,GAAIC,MAAa,IAAG;AAC9B,IAAA,IAAI,CAAC,IAAI,CAACC,IAAI,CAACC,QAAQ,EAAE,OAAA;AACzB,IAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;MACd,IAAI,CAAC,MAAM,GAAGlB,MAAM,CAACmB,UAAU,EAAE,CAAA;AACrC,KAAA;AACA,IAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACbC,MAAAA,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AACrC,KAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAA,IAAI,CAAC,MAAM,GAAGC,qBAAqB,CAAC,MAAI;AACpCrB,MAAAA,MAAM,CAACsB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;MAC5B,IAAIC,WAAW,CAAC,IAAI,CAAC,IAAIC,YAAY,CAAC,IAAI,CAAC,EAAE,OAAA;AAC7C,MAAA,IAAI,CAAC,IAAI,CAACP,IAAI,CAACC,QAAQ,EAAE,OAAA;MACzB,IAAIO,MAAM,GAAGC,kBAAkB,CAACV,MAAM,CAACW,MAAM,EAAE,IAAI,CAACC,MAAM,CAAC,CAAA;MAC3D,IAAIH,MAAM,KAAKI,SAAS,EAAE;QACtBC,IAAI,CAAE,+EAA8E,EAAE;AAClFC,UAAAA,EAAE,EAAE,yCAAA;AACR,SAAC,CAAC,CAAA;AACF,QAAA,OAAA;AACJ,OAAA;AACA,MAAA,IAAI,CAACd,IAAI,CAACC,QAAQ,CAAC;AACfc,QAAAA,IAAI,EAAEP,MAAM;AACZQ,QAAAA,QAAQ,EAAER,MAAM,CAACG,MAAM,KAAK,IAAI,CAACA,MAAAA;OACpC,EAAEZ,MAAM,CAAC,CAAA;AACd,KAAC,CAAC,CAAA;GACL,CAAA;AACD,EAAA,MAAM,CAAA;AACN,EAAA,MAAM,CAAA;EACN,IAAIY,MAAMA,GAAG;AACT,IAAA,OAAO,IAAI,CAACX,IAAI,CAACW,MAAM,IAAIhC,cAAc,CAAA;AAC7C,GAAA;EACA,IAAIsC,MAAMA,GAAG;AACT;AACA;AACA;AACA,IAAA,OAAO,IAAIC,KAAK,CAAC,IAAI,CAACP,MAAM,CAAC,CAAA;AACjC,GAAA;AACA,EAAA;IACIzB,oBAAA,CAAAC,kBAAA,CAmBH,gjBAAA,EAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;AAAAH,QAAAA,MAAAA;AAAA,OAAA,CAAA;MAAAS,UAAA,EAAA,IAAA;KAKI,CAAC,EAJa,IAAI,CAAA,CAAA;AAKvB,GAAA;AACJ;;;;"}
|
|
1
|
+
{"version":3,"file":"input.js","sources":["../../../src/components/one-time-password/input.gts"],"sourcesContent":["import { template } from \"@ember/template-compiler\";\nimport Component from '@glimmer/component';\nimport { warn } from '@ember/debug';\nimport { isDestroyed, isDestroying } from '@ember/destroyable';\nimport { on } from '@ember/modifier';\nimport { buildWaiter } from '@ember/test-waiters';\nimport { autoAdvance, getCollectiveValue, handleNavigation, handlePaste, selectAll } from './utils.ts';\nimport type { TOC } from '@ember/component/template-only';\nimport type { WithBoundArgs } from '@glint/template';\nconst DEFAULT_LENGTH = 6;\nfunction labelFor(inputIndex1: number, labelFn1: undefined | ((index: number) => string)) {\n if (labelFn1) {\n return labelFn1(inputIndex1);\n }\n return `Please enter OTP character ${inputIndex1 + 1}`;\n}\nlet waiter = buildWaiter('ember-primitives:OTPInput:handleChange');\nconst Fields: TOC<{\n /**\n * Any attributes passed to this component will be applied to each input.\n */ Element: HTMLInputElement;\n Args: {\n fields: unknown[];\n labelFn: (index: number) => string;\n handleChange: (event: Event) => void;\n };\n}> = template(`\n {{#each @fields as |_field i|}}\n <label>\n <span class=\"ember-primitives__sr-only\">{{labelFor i @labelFn}}</span>\n <input\n name=\"code{{i}}\"\n type=\"text\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n ...attributes\n {{on \"click\" selectAll}}\n {{on \"paste\" handlePaste}}\n {{on \"input\" autoAdvance}}\n {{on \"input\" @handleChange}}\n {{on \"keydown\" handleNavigation}}\n />\n </label>\n {{/each}}\n`, {\n eval () {\n return eval(arguments[0]);\n }\n});\nexport class OTPInput extends Component<{\n /**\n * The collection of individual OTP inputs are contained by a fieldset.\n * Applying the `disabled` attribute to this fieldset will disable\n * all of the inputs, if that's desired.\n */ Element: HTMLFieldSetElement;\n Args: {\n /**\n * How many characters the one-time-password field should be\n * Defaults to 6\n */ length?: number;\n /**\n * To Customize the label of the input fields, you may pass a function.\n * By default, this is `Please enter OTP character ${index + 1}`.\n */ labelFn?: (index: number) => string;\n /**\n * If passed, this function will be called when the <Input> changes.\n * All fields are considered one input.\n */ onChange?: (data: {\n /**\n * The text from the collective <Input>\n *\n * `code` _may_ be shorter than `length`\n * if the user has not finished typing / pasting their code\n */ code: string;\n /**\n * will be `true` if `code`'s length matches the passed `@length` or the default of 6\n */ complete: boolean;\n }, /**\n * The last input event received\n */ event: Event) => void;\n };\n Blocks: {\n /**\n * Optionally, you may control how the Fields are rendered, with proceeding text,\n * additional attributes added, etc.\n *\n * This is how you can add custom validation to each input field.\n */ default?: [fields: WithBoundArgs<typeof Fields, 'fields' | 'handleChange' | 'labelFn'>];\n };\n}> {\n /**\n * This is debounced, because we bind to each input,\n * but only want to emit one change event if someone pastes\n * multiple characters\n */ handleChange = (event1: Event)=>{\n if (!this.args.onChange) return;\n if (!this.#token) {\n this.#token = waiter.beginAsync();\n }\n if (this.#frame) {\n cancelAnimationFrame(this.#frame);\n }\n // We use requestAnimationFrame to be friendly to rendering.\n // We don't know if onChange is going to want to cause paints\n // (it's also how we debounce, under the assumption that \"paste\" behavior\n // would be fast enough to be quicker than individual frames\n // (see logic in autoAdvance)\n // )\n this.#frame = requestAnimationFrame(()=>{\n waiter.endAsync(this.#token);\n if (isDestroyed(this) || isDestroying(this)) return;\n if (!this.args.onChange) return;\n let value1 = getCollectiveValue(event1.target, this.length);\n if (value1 === undefined) {\n warn(`Value could not be determined for the OTP field. was it removed from the DOM?`, {\n id: 'ember-primitives.OTPInput.missing-value'\n });\n return;\n }\n this.args.onChange({\n code: value1,\n complete: value1.length === this.length\n }, event1);\n });\n };\n #token: unknown | undefined;\n #frame: number | undefined;\n get length() {\n return this.args.length ?? DEFAULT_LENGTH;\n }\n get fields() {\n // We only need to iterate a number of times,\n // so we don't care about the actual value or\n // referential integrity here\n return new Array(this.length);\n }\n static{\n template(`\n <fieldset ...attributes>\n {{#let\n (component Fields fields=this.fields handleChange=this.handleChange labelFn=@labelFn)\n as |CurriedFields|\n }}\n {{#if (has-block)}}\n {{yield CurriedFields}}\n {{else}}\n <CurriedFields />\n {{/if}}\n {{/let}}\n\n <style>\n .ember-primitives__sr-only { position: absolute; width: 1px; height: 1px; padding: 0;\n margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border-width:\n 0; }\n </style>\n </fieldset>\n `, {\n component: this,\n eval () {\n return eval(arguments[0]);\n }\n });\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2VtYmVyLXByaW1pdGl2ZXMvZW1iZXItcHJpbWl0aXZlcy9lbWJlci1wcmltaXRpdmVzL3NyYy9jb21wb25lbnRzL29uZS10aW1lLXBhc3N3b3JkL2lucHV0Lmd0cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29tcG9uZW50IGZyb20gJ0BnbGltbWVyL2NvbXBvbmVudCc7XG5pbXBvcnQgeyB3YXJuIH0gZnJvbSAnQGVtYmVyL2RlYnVnJztcbmltcG9ydCB7IGlzRGVzdHJveWVkLCBpc0Rlc3Ryb3lpbmcgfSBmcm9tICdAZW1iZXIvZGVzdHJveWFibGUnO1xuaW1wb3J0IHsgb24gfSBmcm9tICdAZW1iZXIvbW9kaWZpZXInO1xuaW1wb3J0IHsgYnVpbGRXYWl0ZXIgfSBmcm9tICdAZW1iZXIvdGVzdC13YWl0ZXJzJztcblxuaW1wb3J0IHtcbiAgYXV0b0FkdmFuY2UsXG4gIGdldENvbGxlY3RpdmVWYWx1ZSxcbiAgaGFuZGxlTmF2aWdhdGlvbixcbiAgaGFuZGxlUGFzdGUsXG4gIHNlbGVjdEFsbCxcbn0gZnJvbSAnLi91dGlscy50cyc7XG5cbmltcG9ydCB0eXBlIHsgVE9DIH0gZnJvbSAnQGVtYmVyL2NvbXBvbmVudC90ZW1wbGF0ZS1vbmx5JztcbmltcG9ydCB0eXBlIHsgV2l0aEJvdW5kQXJncyB9IGZyb20gJ0BnbGludC90ZW1wbGF0ZSc7XG5cbmNvbnN0IERFRkFVTFRfTEVOR1RIID0gNjtcblxuZnVuY3Rpb24gbGFiZWxGb3IoaW5wdXRJbmRleDogbnVtYmVyLCBsYWJlbEZuOiB1bmRlZmluZWQgfCAoKGluZGV4OiBudW1iZXIpID0-IHN0cmluZykpIHtcbiAgaWYgKGxhYmVsRm4pIHtcbiAgICByZXR1cm4gbGFiZWxGbihpbnB1dEluZGV4KTtcbiAgfVxuXG4gIHJldHVybiBgUGxlYXNlIGVudGVyIE9UUCBjaGFyYWN0ZXIgJHtpbnB1dEluZGV4ICsgMX1gO1xufVxuXG5sZXQgd2FpdGVyID0gYnVpbGRXYWl0ZXIoJ2VtYmVyLXByaW1pdGl2ZXM6T1RQSW5wdXQ6aGFuZGxlQ2hhbmdlJyk7XG5cbmNvbnN0IEZpZWxkczogVE9DPHtcbiAgLyoqXG4gICAqIEFueSBhdHRyaWJ1dGVzIHBhc3NlZCB0byB0aGlzIGNvbXBvbmVudCB3aWxsIGJlIGFwcGxpZWQgdG8gZWFjaCBpbnB1dC5cbiAgICovXG4gIEVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQ7XG4gIEFyZ3M6IHtcbiAgICBmaWVsZHM6IHVua25vd25bXTtcbiAgICBsYWJlbEZuOiAoaW5kZXg6IG51bWJlcikgPT4gc3RyaW5nO1xuICAgIGhhbmRsZUNoYW5nZTogKGV2ZW50OiBFdmVudCkgPT4gdm9pZDtcbiAgfTtcbn0-ID0gPHRlbXBsYXRlPlxuICB7eyNlYWNoIEBmaWVsZHMgYXMgfF9maWVsZCBpfH19XG4gICAgPGxhYmVsPlxuICAgICAgPHNwYW4gY2xhc3M9XCJlbWJlci1wcmltaXRpdmVzX19zci1vbmx5XCI-e3tsYWJlbEZvciBpIEBsYWJlbEZufX08L3NwYW4-XG4gICAgICA8aW5wdXRcbiAgICAgICAgbmFtZT1cImNvZGV7e2l9fVwiXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgaW5wdXRtb2RlPVwibnVtZXJpY1wiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIC4uLmF0dHJpYnV0ZXNcbiAgICAgICAge3tvbiBcImNsaWNrXCIgc2VsZWN0QWxsfX1cbiAgICAgICAge3tvbiBcInBhc3RlXCIgaGFuZGxlUGFzdGV9fVxuICAgICAgICB7e29uIFwiaW5wdXRcIiBhdXRvQWR2YW5jZX19XG4gICAgICAgIHt7b24gXCJpbnB1dFwiIEBoYW5kbGVDaGFuZ2V9fVxuICAgICAgICB7e29uIFwia2V5ZG93blwiIGhhbmRsZU5hdmlnYXRpb259fVxuICAgICAgLz5cbiAgICA8L2xhYmVsPlxuICB7ey9lYWNofX1cbjwvdGVtcGxhdGU-O1xuXG5leHBvcnQgY2xhc3MgT1RQSW5wdXQgZXh0ZW5kcyBDb21wb25lbnQ8e1xuICAvKipcbiAgICogVGhlIGNvbGxlY3Rpb24gb2YgaW5kaXZpZHVhbCBPVFAgaW5wdXRzIGFyZSBjb250YWluZWQgYnkgYSBmaWVsZHNldC5cbiAgICogQXBwbHlpbmcgdGhlIGBkaXNhYmxlZGAgYXR0cmlidXRlIHRvIHRoaXMgZmllbGRzZXQgd2lsbCBkaXNhYmxlXG4gICAqIGFsbCBvZiB0aGUgaW5wdXRzLCBpZiB0aGF0J3MgZGVzaXJlZC5cbiAgICovXG4gIEVsZW1lbnQ6IEhUTUxGaWVsZFNldEVsZW1lbnQ7XG4gIEFyZ3M6IHtcbiAgICAvKipcbiAgICAgKiBIb3cgbWFueSBjaGFyYWN0ZXJzIHRoZSBvbmUtdGltZS1wYXNzd29yZCBmaWVsZCBzaG91bGQgYmVcbiAgICAgKiBEZWZhdWx0cyB0byA2XG4gICAgICovXG4gICAgbGVuZ3RoPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVG8gQ3VzdG9taXplIHRoZSBsYWJlbCBvZiB0aGUgaW5wdXQgZmllbGRzLCB5b3UgbWF5IHBhc3MgYSBmdW5jdGlvbi5cbiAgICAgKiBCeSBkZWZhdWx0LCB0aGlzIGlzIGBQbGVhc2UgZW50ZXIgT1RQIGNoYXJhY3RlciAke2luZGV4ICsgMX1gLlxuICAgICAqL1xuICAgIGxhYmVsRm4_OiAoaW5kZXg6IG51bWJlcikgPT4gc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogSWYgcGFzc2VkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIDxJbnB1dD4gY2hhbmdlcy5cbiAgICAgKiBBbGwgZmllbGRzIGFyZSBjb25zaWRlcmVkIG9uZSBpbnB1dC5cbiAgICAgKi9cbiAgICBvbkNoYW5nZT86IChcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSB0ZXh0IGZyb20gdGhlIGNvbGxlY3RpdmUgPElucHV0PlxuICAgICAgICAgKlxuICAgICAgICAgKiBgY29kZWAgX21heV8gYmUgc2hvcnRlciB0aGFuIGBsZW5ndGhgXG4gICAgICAgICAqIGlmIHRoZSB1c2VyIGhhcyBub3QgZmluaXNoZWQgdHlwaW5nIC8gcGFzdGluZyB0aGVpciBjb2RlXG4gICAgICAgICAqL1xuICAgICAgICBjb2RlOiBzdHJpbmc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiB3aWxsIGJlIGB0cnVlYCBpZiBgY29kZWAncyBsZW5ndGggbWF0Y2hlcyB0aGUgcGFzc2VkIGBAbGVuZ3RoYCBvciB0aGUgZGVmYXVsdCBvZiA2XG4gICAgICAgICAqL1xuICAgICAgICBjb21wbGV0ZTogYm9vbGVhbjtcbiAgICAgIH0sXG4gICAgICAvKipcbiAgICAgICAqIFRoZSBsYXN0IGlucHV0IGV2ZW50IHJlY2VpdmVkXG4gICAgICAgKi9cbiAgICAgIGV2ZW50OiBFdmVudFxuICAgICkgPT4gdm9pZDtcbiAgfTtcbiAgQmxvY2tzOiB7XG4gICAgLyoqXG4gICAgICogT3B0aW9uYWxseSwgeW91IG1heSBjb250cm9sIGhvdyB0aGUgRmllbGRzIGFyZSByZW5kZXJlZCwgd2l0aCBwcm9jZWVkaW5nIHRleHQsXG4gICAgICogYWRkaXRpb25hbCBhdHRyaWJ1dGVzIGFkZGVkLCBldGMuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIGhvdyB5b3UgY2FuIGFkZCBjdXN0b20gdmFsaWRhdGlvbiB0byBlYWNoIGlucHV0IGZpZWxkLlxuICAgICAqL1xuICAgIGRlZmF1bHQ_OiBbZmllbGRzOiBXaXRoQm91bmRBcmdzPHR5cGVvZiBGaWVsZHMsICdmaWVsZHMnIHwgJ2hhbmRsZUNoYW5nZScgfCAnbGFiZWxGbic-XTtcbiAgfTtcbn0-IHtcbiAgLyoqXG4gICAqIFRoaXMgaXMgZGVib3VuY2VkLCBiZWNhdXNlIHdlIGJpbmQgdG8gZWFjaCBpbnB1dCxcbiAgICogYnV0IG9ubHkgd2FudCB0byBlbWl0IG9uZSBjaGFuZ2UgZXZlbnQgaWYgc29tZW9uZSBwYXN0ZXNcbiAgICogbXVsdGlwbGUgY2hhcmFjdGVyc1xuICAgKi9cbiAgaGFuZGxlQ2hhbmdlID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgIGlmICghdGhpcy5hcmdzLm9uQ2hhbmdlKSByZXR1cm47XG5cbiAgICBpZiAoIXRoaXMuI3Rva2VuKSB7XG4gICAgICB0aGlzLiN0b2tlbiA9IHdhaXRlci5iZWdpbkFzeW5jKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuI2ZyYW1lKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLiNmcmFtZSk7XG4gICAgfVxuXG4gICAgLy8gV2UgIHVzZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgdG8gYmUgZnJpZW5kbHkgdG8gcmVuZGVyaW5nLlxuICAgIC8vIFdlIGRvbid0IGtub3cgaWYgb25DaGFuZ2UgaXMgZ29pbmcgdG8gd2FudCB0byBjYXVzZSBwYWludHNcbiAgICAvLyAoaXQncyBhbHNvIGhvdyB3ZSBkZWJvdW5jZSwgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCBcInBhc3RlXCIgYmVoYXZpb3JcbiAgICAvLyAgd291bGQgYmUgZmFzdCBlbm91Z2ggdG8gYmUgcXVpY2tlciB0aGFuIGluZGl2aWR1YWwgZnJhbWVzXG4gICAgLy8gICAoc2VlIGxvZ2ljIGluIGF1dG9BZHZhbmNlKVxuICAgIC8vICApXG4gICAgdGhpcy4jZnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgd2FpdGVyLmVuZEFzeW5jKHRoaXMuI3Rva2VuKTtcblxuICAgICAgaWYgKGlzRGVzdHJveWVkKHRoaXMpIHx8IGlzRGVzdHJveWluZyh0aGlzKSkgcmV0dXJuO1xuICAgICAgaWYgKCF0aGlzLmFyZ3Mub25DaGFuZ2UpIHJldHVybjtcblxuICAgICAgbGV0IHZhbHVlID0gZ2V0Q29sbGVjdGl2ZVZhbHVlKGV2ZW50LnRhcmdldCwgdGhpcy5sZW5ndGgpO1xuXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB3YXJuKGBWYWx1ZSBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZCBmb3IgdGhlIE9UUCBmaWVsZC4gd2FzIGl0IHJlbW92ZWQgZnJvbSB0aGUgRE9NP2AsIHtcbiAgICAgICAgICBpZDogJ2VtYmVyLXByaW1pdGl2ZXMuT1RQSW5wdXQubWlzc2luZy12YWx1ZScsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hcmdzLm9uQ2hhbmdlKHsgY29kZTogdmFsdWUsIGNvbXBsZXRlOiB2YWx1ZS5sZW5ndGggPT09IHRoaXMubGVuZ3RoIH0sIGV2ZW50KTtcbiAgICB9KTtcbiAgfTtcblxuICAjdG9rZW46IHVua25vd24gfCB1bmRlZmluZWQ7XG4gICNmcmFtZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIGdldCBsZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXJncy5sZW5ndGggPz8gREVGQVVMVF9MRU5HVEg7XG4gIH1cblxuICBnZXQgZmllbGRzKCkge1xuICAgIC8vIFdlIG9ubHkgbmVlZCB0byBpdGVyYXRlIGEgbnVtYmVyIG9mIHRpbWVzLFxuICAgIC8vIHNvIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIGFjdHVhbCB2YWx1ZSBvclxuICAgIC8vIHJlZmVyZW50aWFsIGludGVncml0eSBoZXJlXG4gICAgcmV0dXJuIG5ldyBBcnJheSh0aGlzLmxlbmd0aCk7XG4gIH1cblxuICA8dGVtcGxhdGU-XG4gICAgPGZpZWxkc2V0IC4uLmF0dHJpYnV0ZXM-XG4gICAgICB7eyNsZXRcbiAgICAgICAgKGNvbXBvbmVudCBGaWVsZHMgZmllbGRzPXRoaXMuZmllbGRzIGhhbmRsZUNoYW5nZT10aGlzLmhhbmRsZUNoYW5nZSBsYWJlbEZuPUBsYWJlbEZuKVxuICAgICAgICBhcyB8Q3VycmllZEZpZWxkc3xcbiAgICAgIH19XG4gICAgICAgIHt7I2lmIChoYXMtYmxvY2spfX1cbiAgICAgICAgICB7e3lpZWxkIEN1cnJpZWRGaWVsZHN9fVxuICAgICAgICB7e2Vsc2V9fVxuICAgICAgICAgIDxDdXJyaWVkRmllbGRzIC8-XG4gICAgICAgIHt7L2lmfX1cbiAgICAgIHt7L2xldH19XG5cbiAgICAgIDxzdHlsZT5cbiAgICAgICAgLmVtYmVyLXByaW1pdGl2ZXNfX3NyLW9ubHkgeyBwb3NpdGlvbjogYWJzb2x1dGU7IHdpZHRoOiAxcHg7IGhlaWdodDogMXB4OyBwYWRkaW5nOiAwO1xuICAgICAgICBtYXJnaW46IC0xcHg7IG92ZXJmbG93OiBoaWRkZW47IGNsaXA6IHJlY3QoMCwgMCwgMCwgMCk7IHdoaXRlLXNwYWNlOiBub3dyYXA7IGJvcmRlci13aWR0aDpcbiAgICAgICAgMDsgfVxuICAgICAgPC9zdHlsZT5cbiAgICA8L2ZpZWxkc2V0PlxuICA8L3RlbXBsYXRlPlxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLGVBQWUscUJBQXFCO0FBQzNDLFNBQVMsSUFBSSxRQUFRLGVBQWU7QUFDcEMsU0FBUyxXQUFXLEVBQUUsWUFBWSxRQUFRLHFCQUFxQjtBQUMvRCxTQUFTLEVBQUUsUUFBUSxrQkFBa0I7QUFDckMsU0FBUyxXQUFXLFFBQVEsc0JBQXNCO0FBRWxELFNBQ0UsV0FBVyxFQUNYLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLFNBQVMsUUFDSixhQUFhO0FBRXBCLGNBQWMsR0FBRyxRQUFRLGlDQUFpQztBQUMxRCxjQUFjLGFBQWEsUUFBUSxrQkFBa0I7QUFFckQsTUFBTSxpQkFBaUI7QUFFdkIsU0FBUyxTQUFTLGFBQVksTUFBTSxFQUFFLFVBQVMsU0FBUyxLQUFLLE9BQU8sTUFBTSxLQUFLLE1BQU0sQ0FBQztJQUNwRixJQUFJLFVBQVM7UUFDWCxPQUFPLFNBQVE7SUFDakI7SUFFQSxPQUFPLENBQUMsMkJBQTJCLEVBQUUsY0FBYSxFQUFFLENBQUM7QUFDdkQ7QUFFQSxJQUFJLFNBQVMsWUFBWTtBQUV6QixNQUFNLFFBQVE7SUFDWjs7R0FFQyxHQUNELFNBQVM7SUFDVDtRQUNFLFFBQVEsT0FBTztRQUNmLFVBQVUsT0FBTyxNQUFNLEtBQUssTUFBTTtRQUNsQyxlQUFlLE9BQU8sVUFBVSxJQUFJOztLQUVuQyxTQUFVLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCZixDQUFBLEVBQUE7SUFBQTtRQUFBLE9BQUEsS0FBQSxTQUFBLENBQUEsRUFBVztJQUFEO0FBQUE7QUFFVixPQUFPLE1BQU0saUJBQWlCO0lBQzVCOzs7O0dBSUMsR0FDRCxTQUFTO0lBQ1Q7UUFDRTs7O0tBR0MsR0FDRCxTQUFTLE1BQU07UUFFZjs7O0tBR0MsR0FDRCxXQUFXLE9BQU8sTUFBTSxLQUFLLE1BQU07UUFFbkM7OztLQUdDLEdBQ0QsWUFDRTtZQUNFOzs7OztTQUtDLEdBQ0QsTUFBTSxNQUFNO1lBQ1o7O1NBRUMsR0FDRCxVQUFVLE9BQU87V0FFbkI7O09BRUMsR0FDRCxPQUFPLFVBQ0osSUFBSTs7SUFFWDtRQUNFOzs7OztLQUtDLEdBQ0QsV0FBVyxRQUFRLHFCQUFxQixRQUFRLFdBQVcsaUJBQWlCOzs7SUFHOUU7Ozs7R0FJQyxHQUNELGVBQWUsQ0FBQyxRQUFPO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUV6QixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxPQUFPLFVBQVU7UUFDakM7UUFFQSxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRTtZQUNmLHFCQUFxQixJQUFJLENBQUMsQ0FBQyxLQUFLO1FBQ2xDO1FBRUEsNkRBQTZEO1FBQzdELDZEQUE2RDtRQUM3RCx5RUFBeUU7UUFDekUsNkRBQTZEO1FBQzdELCtCQUErQjtRQUMvQixLQUFLO1FBQ0wsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLHNCQUFzQjtZQUNsQyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLO1lBRTNCLElBQUksWUFBWSxJQUFJLEtBQUssYUFBYSxJQUFJLEdBQUc7WUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBRXpCLElBQUksU0FBUSxtQkFBbUIsT0FBTSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFFeEQsSUFBSSxXQUFVLFdBQVc7Z0JBQ3ZCLEtBQUssQ0FBQyw2RUFBNkUsQ0FBQyxFQUFFO29CQUNwRixJQUFJO2dCQUNOO2dCQUVBO1lBQ0Y7WUFFQSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFBRSxNQUFNO2dCQUFPLFVBQVUsT0FBTSxNQUFNLEtBQUssSUFBSSxDQUFDLE1BQU07WUFBQyxHQUFHO1FBQzlFO0lBQ0YsRUFBRTtJQUVGLENBQUMsS0FBSyxFQUFFLE9BQU8sR0FBRyxTQUFTLENBQUM7SUFDNUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxHQUFHLFNBQVMsQ0FBQztJQUUzQixJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJO0lBQzdCO0lBRUEsSUFBSSxTQUFTO1FBQ1gsNkNBQTZDO1FBQzdDLDZDQUE2QztRQUM3Qyw2QkFBNkI7UUFDN0IsT0FBTyxJQUFJLE1BQU0sSUFBSSxDQUFDLE1BQU07SUFDOUI7SUFFQSxNQUFBO1FBQUEsU0FBVSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBbUJWLENBQUEsRUFBQTtZQUFBLFdBQUEsSUFBVztZQUFYO2dCQUFBLE9BQUEsS0FBQSxTQUFBLENBQUEsRUFBVztZQUFEO1FBQUE7SUFBQSxDQW5CQTtBQW9CWiJ9"],"names":["DEFAULT_LENGTH","labelFor","inputIndex1","labelFn1","waiter","buildWaiter","Fields","precompileTemplate","scope","on","selectAll","handlePaste","autoAdvance","handleNavigation","strictMode","templateOnly","OTPInput","Component","handleChange","event1","args","onChange","beginAsync","cancelAnimationFrame","requestAnimationFrame","endAsync","isDestroyed","isDestroying","value1","getCollectiveValue","target","length","undefined","warn","id","code","complete","fields","Array","setComponentTemplate"],"mappings":";;;;;;;;;;AAiBA,MAAMA,cAAA,GAAiB,CAAA,CAAA;AAEvB,SAASC,QAAAA,CAASC,WAAkB,EAAEC,QAAgD,EAAA;AACpF,EAAA,IAAIA,QAAA,EAAS;IACX,OAAOA,QAAA,CAAQD,WAAA,CAAA,CAAA;AACjB,GAAA;AAEA,EAAA,OAAQ,CAA6BA,2BAAAA,EAAAA,WAAA,GAAa,CAAE,CAAC,CAAA,CAAA;AACvD,CAAA;AAEA,IAAIE,MAAA,GAASC,WAAA,CAAY,wCAAA,CAAA,CAAA;AAEzB,MAAMC,SAUDC,oBAAAA,CAAAA,kBAAA,CAkBL,kaAAA,EAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAP,QAAA;IAAAQ,EAAA;IAAAC,SAAA;IAAAC,WAAA;IAAAC,WAAA;AAAAC,IAAAA,gBAAAA;AAAA,GAAA,CAAA;EAAAC,UAAA,EAAA,IAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA,CAAA,CAAA;AAEH,MAAMC,QAAA,SAAiBC,SAAA;AAsD5B;;;;;AAKAC,EAAAA,YAAA,GAAgBC,MAAO,IAAA;AACrB,IAAA,IAAI,CAAC,IAAI,CAACC,IAAI,CAACC,QAAQ,EAAE,OAAA;AAEzB,IAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,MAAA,IAAI,CAAC,MAAM,GAAGjB,MAAA,CAAOkB,UAAU,EAAA,CAAA;AACjC,KAAA;AAEA,IAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACfC,MAAAA,oBAAA,CAAqB,IAAI,CAAC,MAAM,CAAA,CAAA;AAClC,KAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAA,IAAI,CAAC,MAAM,GAAGC,qBAAA,CAAsB,MAAA;AAClCpB,MAAAA,MAAA,CAAOqB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAA,CAAA;AAE3B,MAAA,IAAIC,WAAA,CAAY,IAAI,KAAKC,YAAA,CAAa,IAAI,CAAG,EAAA,OAAA;AAC7C,MAAA,IAAI,CAAC,IAAI,CAACP,IAAI,CAACC,QAAQ,EAAE,OAAA;MAEzB,IAAIO,MAAA,GAAQC,kBAAA,CAAmBV,MAAA,CAAMW,MAAM,EAAE,IAAI,CAACC,MAAM,CAAA,CAAA;MAExD,IAAIH,MAAA,KAAUI,SAAA,EAAW;QACvBC,IAAA,CAAM,+EAA8E,EAAE;AACpFC,UAAAA,EAAA,EAAI,yCAAA;AACN,SAAA,CAAA,CAAA;AAEA,QAAA,OAAA;AACF,OAAA;AAEA,MAAA,IAAI,CAACd,IAAI,CAACC,QAAQ,CAAC;AAAEc,QAAAA,IAAA,EAAMP,MAAA;AAAOQ,QAAAA,QAAA,EAAUR,MAAA,CAAMG,MAAM,KAAK,IAAI,CAACA,MAAAA;AAAO,OAAA,EAAGZ,MAAA,CAAA,CAAA;AAC9E,KAAA,CAAA,CAAA;AACF,GAAA,CAAA;AAEA,EAAA,MAAM,CAAA;AACN,EAAA,MAAM,CAAA;AAEN,EAAA,IAAIY,SAAS;AACX,IAAA,OAAO,IAAI,CAACX,IAAI,CAACW,MAAM,IAAI/B,cAAA,CAAA;AAC7B,GAAA;AAEA,EAAA,IAAIqC,SAAS;AACX;AACA;AACA;AACA,IAAA,OAAO,IAAIC,KAAA,CAAM,IAAI,CAACP,MAAM,CAAA,CAAA;AAC9B,GAAA;AAEA,EAAA;IAAAQ,oBAAA,CAAAhC,kBAAA,CAmBA,gjBAAA,EAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;AAAAF,QAAAA,MAAAA;AAAA,OAAA,CAAA;MAAAQ,UAAA,EAAA,IAAA;AAAU,KAAA,CAAA,EAAV,IAAW,CAAA,CAAA;AAAD,GAAA;AACZ;;;;"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { assert } from '@ember/debug';
|
|
2
|
-
import { buildWaiter } from '@ember/test-waiters';
|
|
3
|
-
import { on } from '@ember/modifier';
|
|
4
2
|
import { fn, hash } from '@ember/helper';
|
|
5
|
-
import {
|
|
3
|
+
import { on } from '@ember/modifier';
|
|
4
|
+
import { buildWaiter } from '@ember/test-waiters';
|
|
6
5
|
import { Submit, Reset } from './buttons.js';
|
|
6
|
+
import { OTPInput } from './input.js';
|
|
7
7
|
import { precompileTemplate } from '@ember/template-compilation';
|
|
8
8
|
import { setComponentTemplate } from '@ember/component';
|
|
9
9
|
import templateOnly from '@ember/component/template-only';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"otp.js","sources":["../../../src/components/one-time-password/otp.gts"],"sourcesContent":["import { template } from \"@ember/template-compiler\";\nimport { assert } from '@ember/debug';\nimport { fn, hash } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport { buildWaiter } from '@ember/test-waiters';\nimport { Reset, Submit } from './buttons.gts';\nimport { OTPInput } from './input.gts';\nimport type { TOC } from '@ember/component/template-only';\nimport type { WithBoundArgs } from '@glint/template';\nlet waiter = buildWaiter('ember-primitives:OTP:handleAutoSubmitAttempt');\nconst handleFormSubmit = (submit1: (data: {\n code: string;\n}) => void, event1: SubmitEvent)=>{\n event1.preventDefault();\n assert('[BUG]: handleFormSubmit was not attached to a form. Please open an issue.', event1.currentTarget instanceof HTMLFormElement);\n let formData1 = new FormData(event1.currentTarget);\n let code1 = '';\n for (let [key1, value1] of formData1.entries()){\n if (key1.startsWith('code')) {\n code1 += value1;\n }\n }\n submit1({\n code: code1\n });\n};\nfunction handleChange(autoSubmit1: boolean | undefined, data1: {\n code: string;\n complete: boolean;\n}, event1: Event) {\n if (!autoSubmit1) return;\n if (!data1.complete) return;\n assert('[BUG]: event target is not a known element type', event1.target instanceof HTMLElement || event1.target instanceof SVGElement);\n const form1 = event1.target.closest('form');\n assert('[BUG]: Cannot handle event when <OTP> Inputs are not rendered within their <form>', form1);\n const token1 = waiter.beginAsync();\n let finished1 = ()=>{\n waiter.endAsync(token1);\n form1.removeEventListener('submit', finished1);\n };\n form1.addEventListener('submit', finished1);\n // NOTE: when calling .submit() the submit event handlers are not run\n form1.requestSubmit();\n}\nexport const OTP: TOC<{\n /**\n * The overall OTP Input is in its own form.\n * Modern UI/UX Patterns usually have this sort of field\n * as its own page, thus within its own form.\n *\n * By default, only the 'submit' event is bound, and is\n * what calls the `@onSubmit` argument.\n */ Element: HTMLFormElement;\n Args: {\n /**\n * How many characters the one-time-password field should be\n * Defaults to 6\n */ length?: number;\n /**\n * The on submit callback will give you the entered\n * one-time-password code.\n *\n * It will be called when the user manually clicks the 'submit'\n * button or when the full code is pasted and meats the validation\n * criteria.\n */ onSubmit: (data: {\n code: string;\n }) => void;\n /**\n * Whether or not to auto-submit after the code has been pasted\n * in to the collective \"field\". Default is true\n */ autoSubmit?: boolean;\n };\n Blocks: {\n default: [{\n /**\n * The collective input field that the OTP code will be typed/pasted in to\n */ Input: WithBoundArgs<typeof OTPInput, 'length' | 'onChange'>;\n /**\n * Button with `type=\"submit\"` to submit the form\n */ Submit: typeof Submit;\n /**\n * Pre-wired button to reset the form\n */ Reset: typeof Reset;\n }];\n };\n}> = template(`\n <form {{on \"submit\" (fn handleFormSubmit @onSubmit)}} ...attributes>\n {{yield\n (hash\n Input=(component\n OTPInput length=@length onChange=(if @autoSubmit (fn handleChange @autoSubmit))\n )\n Submit=Submit\n Reset=Reset\n )\n }}\n </form>\n`, {\n eval () {\n return eval(arguments[0]);\n }\n});\n"],"names":["waiter","buildWaiter","handleFormSubmit","submit1","event1","preventDefault","assert","currentTarget","HTMLFormElement","formData1","FormData","code1","key1","value1","entries","startsWith","code","handleChange","autoSubmit1","data1","complete","target","HTMLElement","SVGElement","form1","closest","token1","beginAsync","finished1","endAsync","removeEventListener","addEventListener","requestSubmit","OTP","setComponentTemplate","precompileTemplate","scope","on","fn","hash","OTPInput","Submit","Reset","strictMode","templateOnly"],"mappings":";;;;;;;;;;AASA,IAAIA,MAAM,GAAGC,WAAW,CAAC,8CAA8C,CAAC,CAAA;AACxE,MAAMC,gBAAgB,GAAGA,CAACC,OAEhB,EAAEC,MAAmB,KAAG;EAC9BA,MAAM,CAACC,cAAc,EAAE,CAAA;EACvBC,MAAM,CAAC,2EAA2E,EAAEF,MAAM,CAACG,aAAa,YAAYC,eAAe,CAAC,CAAA;EACpI,IAAIC,SAAS,GAAG,IAAIC,QAAQ,CAACN,MAAM,CAACG,aAAa,CAAC,CAAA;EAClD,IAAII,KAAK,GAAG,EAAE,CAAA;AACd,EAAA,KAAK,IAAI,CAACC,IAAI,EAAEC,MAAM,CAAC,IAAIJ,SAAS,CAACK,OAAO,EAAE,EAAC;AAC3C,IAAA,IAAIF,IAAI,CAACG,UAAU,CAAC,MAAM,CAAC,EAAE;AACzBJ,MAAAA,KAAK,IAAIE,MAAM,CAAA;AACnB,KAAA;AACJ,GAAA;AACAV,EAAAA,OAAO,CAAC;AACJa,IAAAA,IAAI,EAAEL,KAAAA;AACV,GAAC,CAAC,CAAA;AACN,CAAC,CAAA;AACD,SAASM,YAAYA,CAACC,WAAgC,EAAEC,KAGvD,EAAEf,MAAa,EAAE;EACd,IAAI,CAACc,WAAW,EAAE,OAAA;AAClB,EAAA,IAAI,CAACC,KAAK,CAACC,QAAQ,EAAE,OAAA;AACrBd,EAAAA,MAAM,CAAC,iDAAiD,EAAEF,MAAM,CAACiB,MAAM,YAAYC,WAAW,IAAIlB,MAAM,CAACiB,MAAM,YAAYE,UAAU,CAAC,CAAA;EACtI,MAAMC,KAAK,GAAGpB,MAAM,CAACiB,MAAM,CAACI,OAAO,CAAC,MAAM,CAAC,CAAA;AAC3CnB,EAAAA,MAAM,CAAC,mFAAmF,EAAEkB,KAAK,CAAC,CAAA;AAClG,EAAA,MAAME,MAAM,GAAG1B,MAAM,CAAC2B,UAAU,EAAE,CAAA;EAClC,IAAIC,SAAS,GAAGA,MAAI;AAChB5B,IAAAA,MAAM,CAAC6B,QAAQ,CAACH,MAAM,CAAC,CAAA;AACvBF,IAAAA,KAAK,CAACM,mBAAmB,CAAC,QAAQ,EAAEF,SAAS,CAAC,CAAA;GACjD,CAAA;AACDJ,EAAAA,KAAK,CAACO,gBAAgB,CAAC,QAAQ,EAAEH,SAAS,CAAC,CAAA;AAC3C;EACAJ,KAAK,CAACQ,aAAa,EAAE,CAAA;AACzB,CAAA;MACaC,GA0CX,GAAAC,oBAAA,CAAGC,kBAAA,CAYF,2OAAA,EAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAC,EAAA;IAAAC,EAAA;IAAApC,gBAAA;IAAAqC,IAAA;IAAAC,QAAA;IAAAvB,YAAA;IAAAwB,MAAA;AAAAC,IAAAA,KAAAA;AAAA,GAAA,CAAA;EAAAC,UAAA,EAAA,IAAA;AAIH,CAAC,CAAC,EAAAC,YAAA,EAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"otp.js","sources":["../../../src/components/one-time-password/otp.gts"],"sourcesContent":["import { template } from \"@ember/template-compiler\";\nimport { assert } from '@ember/debug';\nimport { fn, hash } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport { buildWaiter } from '@ember/test-waiters';\nimport { Reset, Submit } from './buttons.gts';\nimport { OTPInput } from './input.gts';\nimport type { TOC } from '@ember/component/template-only';\nimport type { WithBoundArgs } from '@glint/template';\nlet waiter = buildWaiter('ember-primitives:OTP:handleAutoSubmitAttempt');\nconst handleFormSubmit = (submit1: (data: {\n code: string;\n}) => void, event1: SubmitEvent)=>{\n event1.preventDefault();\n assert('[BUG]: handleFormSubmit was not attached to a form. Please open an issue.', event1.currentTarget instanceof HTMLFormElement);\n let formData1 = new FormData(event1.currentTarget);\n let code1 = '';\n for (let [key1, value1] of formData1.entries()){\n if (key1.startsWith('code')) {\n code1 += value1;\n }\n }\n submit1({\n code: code1\n });\n};\nfunction handleChange(autoSubmit1: boolean | undefined, data1: {\n code: string;\n complete: boolean;\n}, event1: Event) {\n if (!autoSubmit1) return;\n if (!data1.complete) return;\n assert('[BUG]: event target is not a known element type', event1.target instanceof HTMLElement || event1.target instanceof SVGElement);\n const form1 = event1.target.closest('form');\n assert('[BUG]: Cannot handle event when <OTP> Inputs are not rendered within their <form>', form1);\n const token1 = waiter.beginAsync();\n let finished1 = ()=>{\n waiter.endAsync(token1);\n form1.removeEventListener('submit', finished1);\n };\n form1.addEventListener('submit', finished1);\n // NOTE: when calling .submit() the submit event handlers are not run\n form1.requestSubmit();\n}\nexport const OTP: TOC<{\n /**\n * The overall OTP Input is in its own form.\n * Modern UI/UX Patterns usually have this sort of field\n * as its own page, thus within its own form.\n *\n * By default, only the 'submit' event is bound, and is\n * what calls the `@onSubmit` argument.\n */ Element: HTMLFormElement;\n Args: {\n /**\n * How many characters the one-time-password field should be\n * Defaults to 6\n */ length?: number;\n /**\n * The on submit callback will give you the entered\n * one-time-password code.\n *\n * It will be called when the user manually clicks the 'submit'\n * button or when the full code is pasted and meats the validation\n * criteria.\n */ onSubmit: (data: {\n code: string;\n }) => void;\n /**\n * Whether or not to auto-submit after the code has been pasted\n * in to the collective \"field\". Default is true\n */ autoSubmit?: boolean;\n };\n Blocks: {\n default: [{\n /**\n * The collective input field that the OTP code will be typed/pasted in to\n */ Input: WithBoundArgs<typeof OTPInput, 'length' | 'onChange'>;\n /**\n * Button with `type=\"submit\"` to submit the form\n */ Submit: typeof Submit;\n /**\n * Pre-wired button to reset the form\n */ Reset: typeof Reset;\n }];\n };\n}> = template(`\n <form {{on \"submit\" (fn handleFormSubmit @onSubmit)}} ...attributes>\n {{yield\n (hash\n Input=(component\n OTPInput length=@length onChange=(if @autoSubmit (fn handleChange @autoSubmit))\n )\n Submit=Submit\n Reset=Reset\n )\n }}\n </form>\n`, {\n eval () {\n return eval(arguments[0]);\n }\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2VtYmVyLXByaW1pdGl2ZXMvZW1iZXItcHJpbWl0aXZlcy9lbWJlci1wcmltaXRpdmVzL3NyYy9jb21wb25lbnRzL29uZS10aW1lLXBhc3N3b3JkL290cC5ndHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXNzZXJ0IH0gZnJvbSAnQGVtYmVyL2RlYnVnJztcbmltcG9ydCB7IGZuLCBoYXNoIH0gZnJvbSAnQGVtYmVyL2hlbHBlcic7XG5pbXBvcnQgeyBvbiB9IGZyb20gJ0BlbWJlci9tb2RpZmllcic7XG5pbXBvcnQgeyBidWlsZFdhaXRlciB9IGZyb20gJ0BlbWJlci90ZXN0LXdhaXRlcnMnO1xuXG5pbXBvcnQgeyBSZXNldCwgU3VibWl0IH0gZnJvbSAnLi9idXR0b25zLmd0cyc7XG5pbXBvcnQgeyBPVFBJbnB1dCB9IGZyb20gJy4vaW5wdXQuZ3RzJztcblxuaW1wb3J0IHR5cGUgeyBUT0MgfSBmcm9tICdAZW1iZXIvY29tcG9uZW50L3RlbXBsYXRlLW9ubHknO1xuaW1wb3J0IHR5cGUgeyBXaXRoQm91bmRBcmdzIH0gZnJvbSAnQGdsaW50L3RlbXBsYXRlJztcblxubGV0IHdhaXRlciA9IGJ1aWxkV2FpdGVyKCdlbWJlci1wcmltaXRpdmVzOk9UUDpoYW5kbGVBdXRvU3VibWl0QXR0ZW1wdCcpO1xuXG5jb25zdCBoYW5kbGVGb3JtU3VibWl0ID0gKHN1Ym1pdDogKGRhdGE6IHsgY29kZTogc3RyaW5nIH0pID0-IHZvaWQsIGV2ZW50OiBTdWJtaXRFdmVudCkgPT4ge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gIGFzc2VydChcbiAgICAnW0JVR106IGhhbmRsZUZvcm1TdWJtaXQgd2FzIG5vdCBhdHRhY2hlZCB0byBhIGZvcm0uIFBsZWFzZSBvcGVuIGFuIGlzc3VlLicsXG4gICAgZXZlbnQuY3VycmVudFRhcmdldCBpbnN0YW5jZW9mIEhUTUxGb3JtRWxlbWVudFxuICApO1xuXG4gIGxldCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShldmVudC5jdXJyZW50VGFyZ2V0KTtcblxuICBsZXQgY29kZSA9ICcnO1xuXG4gIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBmb3JtRGF0YS5lbnRyaWVzKCkpIHtcbiAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoJ2NvZGUnKSkge1xuICAgICAgY29kZSArPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBzdWJtaXQoe1xuICAgIGNvZGUsXG4gIH0pO1xufTtcblxuZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKFxuICBhdXRvU3VibWl0OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuICBkYXRhOiB7IGNvZGU6IHN0cmluZzsgY29tcGxldGU6IGJvb2xlYW4gfSxcbiAgZXZlbnQ6IEV2ZW50XG4pIHtcbiAgaWYgKCFhdXRvU3VibWl0KSByZXR1cm47XG4gIGlmICghZGF0YS5jb21wbGV0ZSkgcmV0dXJuO1xuXG4gIGFzc2VydChcbiAgICAnW0JVR106IGV2ZW50IHRhcmdldCBpcyBub3QgYSBrbm93biBlbGVtZW50IHR5cGUnLFxuICAgIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50IHx8IGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIFNWR0VsZW1lbnRcbiAgKTtcblxuICBjb25zdCBmb3JtID0gZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJ2Zvcm0nKTtcblxuICBhc3NlcnQoJ1tCVUddOiBDYW5ub3QgaGFuZGxlIGV2ZW50IHdoZW4gPE9UUD4gSW5wdXRzIGFyZSBub3QgcmVuZGVyZWQgd2l0aGluIHRoZWlyIDxmb3JtPicsIGZvcm0pO1xuXG4gIGNvbnN0IHRva2VuID0gd2FpdGVyLmJlZ2luQXN5bmMoKTtcbiAgbGV0IGZpbmlzaGVkID0gKCkgPT4ge1xuICAgIHdhaXRlci5lbmRBc3luYyh0b2tlbik7XG4gICAgZm9ybS5yZW1vdmVFdmVudExpc3RlbmVyKCdzdWJtaXQnLCBmaW5pc2hlZCk7XG4gIH07XG5cbiAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLCBmaW5pc2hlZCk7XG5cbiAgLy8gTk9URTogd2hlbiBjYWxsaW5nIC5zdWJtaXQoKSB0aGUgc3VibWl0IGV2ZW50IGhhbmRsZXJzIGFyZSBub3QgcnVuXG4gIGZvcm0ucmVxdWVzdFN1Ym1pdCgpO1xufVxuXG5leHBvcnQgY29uc3QgT1RQOiBUT0M8e1xuICAvKipcbiAgICogVGhlIG92ZXJhbGwgT1RQIElucHV0IGlzIGluIGl0cyBvd24gZm9ybS5cbiAgICogTW9kZXJuIFVJL1VYIFBhdHRlcm5zIHVzdWFsbHkgaGF2ZSB0aGlzIHNvcnQgb2YgZmllbGRcbiAgICogYXMgaXRzIG93biBwYWdlLCB0aHVzIHdpdGhpbiBpdHMgb3duIGZvcm0uXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIG9ubHkgdGhlICdzdWJtaXQnIGV2ZW50IGlzIGJvdW5kLCBhbmQgaXNcbiAgICogd2hhdCBjYWxscyB0aGUgYEBvblN1Ym1pdGAgYXJndW1lbnQuXG4gICAqL1xuICBFbGVtZW50OiBIVE1MRm9ybUVsZW1lbnQ7XG4gIEFyZ3M6IHtcbiAgICAvKipcbiAgICAgKiBIb3cgbWFueSBjaGFyYWN0ZXJzIHRoZSBvbmUtdGltZS1wYXNzd29yZCBmaWVsZCBzaG91bGQgYmVcbiAgICAgKiBEZWZhdWx0cyB0byA2XG4gICAgICovXG4gICAgbGVuZ3RoPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9uIHN1Ym1pdCBjYWxsYmFjayB3aWxsIGdpdmUgeW91IHRoZSBlbnRlcmVkXG4gICAgICogb25lLXRpbWUtcGFzc3dvcmQgY29kZS5cbiAgICAgKlxuICAgICAqIEl0IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHVzZXIgbWFudWFsbHkgY2xpY2tzIHRoZSAnc3VibWl0J1xuICAgICAqIGJ1dHRvbiBvciB3aGVuIHRoZSBmdWxsIGNvZGUgaXMgcGFzdGVkIGFuZCBtZWF0cyB0aGUgdmFsaWRhdGlvblxuICAgICAqIGNyaXRlcmlhLlxuICAgICAqL1xuICAgIG9uU3VibWl0OiAoZGF0YTogeyBjb2RlOiBzdHJpbmcgfSkgPT4gdm9pZDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRvIGF1dG8tc3VibWl0IGFmdGVyIHRoZSBjb2RlIGhhcyBiZWVuIHBhc3RlZFxuICAgICAqIGluIHRvIHRoZSBjb2xsZWN0aXZlIFwiZmllbGRcIi4gIERlZmF1bHQgaXMgdHJ1ZVxuICAgICAqL1xuICAgIGF1dG9TdWJtaXQ_OiBib29sZWFuO1xuICB9O1xuICBCbG9ja3M6IHtcbiAgICBkZWZhdWx0OiBbXG4gICAgICB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgY29sbGVjdGl2ZSBpbnB1dCBmaWVsZCB0aGF0IHRoZSBPVFAgY29kZSB3aWxsIGJlIHR5cGVkL3Bhc3RlZCBpbiB0b1xuICAgICAgICAgKi9cbiAgICAgICAgSW5wdXQ6IFdpdGhCb3VuZEFyZ3M8dHlwZW9mIE9UUElucHV0LCAnbGVuZ3RoJyB8ICdvbkNoYW5nZSc-O1xuICAgICAgICAvKipcbiAgICAgICAgICogQnV0dG9uIHdpdGggYHR5cGU9XCJzdWJtaXRcImAgdG8gc3VibWl0IHRoZSBmb3JtXG4gICAgICAgICAqL1xuICAgICAgICBTdWJtaXQ6IHR5cGVvZiBTdWJtaXQ7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQcmUtd2lyZWQgYnV0dG9uIHRvIHJlc2V0IHRoZSBmb3JtXG4gICAgICAgICAqL1xuICAgICAgICBSZXNldDogdHlwZW9mIFJlc2V0O1xuICAgICAgfSxcbiAgICBdO1xuICB9O1xufT4gPSA8dGVtcGxhdGU-XG4gIDxmb3JtIHt7b24gXCJzdWJtaXRcIiAoZm4gaGFuZGxlRm9ybVN1Ym1pdCBAb25TdWJtaXQpfX0gLi4uYXR0cmlidXRlcz5cbiAgICB7e3lpZWxkXG4gICAgICAoaGFzaFxuICAgICAgICBJbnB1dD0oY29tcG9uZW50XG4gICAgICAgICAgT1RQSW5wdXQgbGVuZ3RoPUBsZW5ndGggb25DaGFuZ2U9KGlmIEBhdXRvU3VibWl0IChmbiBoYW5kbGVDaGFuZ2UgQGF1dG9TdWJtaXQpKVxuICAgICAgICApXG4gICAgICAgIFN1Ym1pdD1TdWJtaXRcbiAgICAgICAgUmVzZXQ9UmVzZXRcbiAgICAgIClcbiAgICB9fVxuICA8L2Zvcm0-XG48L3RlbXBsYXRlPjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsU0FBUyxNQUFNLFFBQVEsZUFBZTtBQUN0QyxTQUFTLEVBQUUsRUFBRSxJQUFJLFFBQVEsZ0JBQWdCO0FBQ3pDLFNBQVMsRUFBRSxRQUFRLGtCQUFrQjtBQUNyQyxTQUFTLFdBQVcsUUFBUSxzQkFBc0I7QUFFbEQsU0FBUyxLQUFLLEVBQUUsTUFBTSxRQUFRLGdCQUFnQjtBQUM5QyxTQUFTLFFBQVEsUUFBUSxjQUFjO0FBRXZDLGNBQWMsR0FBRyxRQUFRLGlDQUFpQztBQUMxRCxjQUFjLGFBQWEsUUFBUSxrQkFBa0I7QUFFckQsSUFBSSxTQUFTLFlBQVk7QUFFekIsTUFBTSxtQkFBbUIsQ0FBQyxVQUFTO0lBQVEsTUFBTSxNQUFNO01BQU8sSUFBSSxFQUFFLFFBQU87SUFDekUsT0FBTSxjQUFjO0lBRXBCLE9BQ0UsNkVBQ0EsT0FBTSxhQUFhLFlBQVk7SUFHakMsSUFBSSxZQUFXLElBQUksU0FBUyxPQUFNLGFBQWE7SUFFL0MsSUFBSSxRQUFPO0lBRVgsS0FBSyxJQUFJLENBQUMsTUFBSyxPQUFNLElBQUksVUFBUyxPQUFPLEdBQUk7UUFDM0MsSUFBSSxLQUFJLFVBQVUsQ0FBQyxTQUFTO1lBQzFCLFNBQVE7UUFDVjtJQUNGO0lBRUEsUUFBTztRQUNMLE1BQUE7SUFDRjtBQUNGO0FBRUEsU0FBUyxhQUNQLGFBQVksT0FBTyxHQUFHLFNBQVMsRUFDL0I7SUFBUSxNQUFNLE1BQU07SUFBRSxVQUFVLE9BQU87Q0FBRSxFQUN6QyxRQUFPLEtBQUs7SUFFWixJQUFJLENBQUMsYUFBWTtJQUNqQixJQUFJLENBQUMsTUFBSyxRQUFRLEVBQUU7SUFFcEIsT0FDRSxtREFDQSxPQUFNLE1BQU0sWUFBWSxlQUFlLE9BQU0sTUFBTSxZQUFZO0lBR2pFLE1BQU0sUUFBTyxPQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUM7SUFFbEMsT0FBTyxxRkFBcUY7SUFFNUYsTUFBTSxTQUFRLE9BQU8sVUFBVTtJQUMvQixJQUFJLFlBQVc7UUFDYixPQUFPLFFBQVEsQ0FBQztRQUNoQixNQUFLLG1CQUFtQixDQUFDLFVBQVU7SUFDckM7SUFFQSxNQUFLLGdCQUFnQixDQUFDLFVBQVU7SUFFaEMscUVBQXFFO0lBQ3JFLE1BQUssYUFBYTtBQUNwQjtBQUVBLE9BQU8sTUFBTSxLQUFLO0lBQ2hCOzs7Ozs7O0dBT0MsR0FDRCxTQUFTO0lBQ1Q7UUFDRTs7O0tBR0MsR0FDRCxTQUFTLE1BQU07UUFFZjs7Ozs7OztLQU9DLEdBQ0QsV0FBVztZQUFRLE1BQU0sTUFBTTtjQUFPLElBQUk7UUFFMUM7OztLQUdDLEdBQ0QsYUFBYSxPQUFPOztJQUV0QjtRQUNFO2dCQUVJOztTQUVDLEdBQ0QsT0FBTyxxQkFBcUIsVUFBVSxXQUFXO2dCQUNqRDs7U0FFQyxHQUNELGVBQWU7Z0JBQ2Y7O1NBRUMsR0FDRCxjQUFjOzs7S0FJakIsU0FBVSxDQUFBOzs7Ozs7Ozs7Ozs7QUFZZixDQUFBLEVBQUE7SUFBQTtRQUFBLE9BQUEsS0FBQSxTQUFBLENBQUEsRUFBVztJQUFEO0FBQUEsR0FBRSJ9"],"names":["waiter","buildWaiter","handleFormSubmit","submit1","event1","preventDefault","assert","currentTarget","HTMLFormElement","formData1","FormData","code1","key1","value1","entries","startsWith","code","handleChange","autoSubmit1","data1","complete","target","HTMLElement","SVGElement","form1","closest","token1","beginAsync","finished1","endAsync","removeEventListener","addEventListener","requestSubmit","OTP","precompileTemplate","scope","on","fn","hash","OTPInput","Submit","Reset","strictMode","templateOnly"],"mappings":";;;;;;;;;;AAWA,IAAIA,MAAA,GAASC,WAAA,CAAY,8CAAA,CAAA,CAAA;AAEzB,MAAMC,gBAAA,GAAmBA,CAACC,OAAwC,EAAEC,MAAO,KAAA;AACzEA,EAAAA,MAAA,CAAMC,cAAc,EAAA,CAAA;AAEpBC,EAAAA,MAAA,CACE,2EACAF,EAAAA,MAAA,CAAMG,aAAa,YAAYC,eAAA,CAAA,CAAA;AAGjC,EAAA,IAAIC,SAAA,GAAW,IAAIC,QAAA,CAASN,MAAA,CAAMG,aAAa,CAAA,CAAA;AAE/C,EAAA,IAAII,KAAA,GAAO,EAAA,CAAA;EAEX,KAAK,IAAI,CAACC,IAAA,EAAKC,MAAA,CAAM,IAAIJ,SAAA,CAASK,OAAO,EAAI,EAAA;AAC3C,IAAA,IAAIF,IAAA,CAAIG,UAAU,CAAC,MAAS,CAAA,EAAA;AAC1BJ,MAAAA,KAAA,IAAQE,MAAA,CAAA;AACV,KAAA;AACF,GAAA;AAEAV,EAAAA,OAAA,CAAO;AACLa,IAAAA,IAAA,EAAAL,KAAAA;AACF,GAAA,CAAA,CAAA;AACF,CAAA,CAAA;AAEA,SAASM,YACPC,CAAAA,WAA+B,EAC/BC,KAAyC,EACzCf,MAAY,EAAA;EAEZ,IAAI,CAACc,WAAA,EAAY,OAAA;AACjB,EAAA,IAAI,CAACC,KAAA,CAAKC,QAAQ,EAAE,OAAA;AAEpBd,EAAAA,MAAA,CACE,iDAAA,EACAF,MAAA,CAAMiB,MAAM,YAAYC,WAAA,IAAelB,MAAA,CAAMiB,MAAM,YAAYE,UAAA,CAAA,CAAA;AAGjE,EAAA,MAAMC,KAAA,GAAOpB,MAAA,CAAMiB,MAAM,CAACI,OAAO,CAAC,MAAA,CAAA,CAAA;EAElCnB,MAAA,CAAO,qFAAqFkB,KAAA,CAAA,CAAA;AAE5F,EAAA,MAAME,MAAA,GAAQ1B,MAAA,CAAO2B,UAAU,EAAA,CAAA;EAC/B,IAAIC,SAAA,GAAWA,MAAA;IACb5B,MAAA,CAAO6B,QAAQ,CAACH,MAAA,CAAA,CAAA;AAChBF,IAAAA,KAAA,CAAKM,mBAAmB,CAAC,QAAA,EAAUF,SAAA,CAAA,CAAA;AACrC,GAAA,CAAA;AAEAJ,EAAAA,KAAA,CAAKO,gBAAgB,CAAC,QAAA,EAAUH,SAAA,CAAA,CAAA;AAEhC;AACAJ,EAAAA,KAAA,CAAKQ,aAAa,EAAA,CAAA;AACpB,CAAA;AAEaC,MAAAA,MAmDRC,oBAAAA,CAAAA,kBAAA,CAYL,2OAAA,EAAA;AAAAC,EAAAA,KAAA,EAAAA,OAAA;IAAAC,EAAA;IAAAC,EAAA;IAAAnC,gBAAA;IAAAoC,IAAA;IAAAC,QAAA;IAAAtB,YAAA;IAAAuB,MAAA;AAAAC,IAAAA,KAAAA;AAAA,GAAA,CAAA;EAAAC,UAAA,EAAA,IAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA;;;;"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
+
import { hash } from '@ember/helper';
|
|
1
2
|
import { arrow } from '@floating-ui/dom';
|
|
3
|
+
import { element } from 'ember-element-helper';
|
|
2
4
|
import { modifier } from 'ember-modifier';
|
|
3
5
|
import { cell } from 'ember-resources';
|
|
4
|
-
import
|
|
6
|
+
import Velcro from '../floating-ui/component.js';
|
|
7
|
+
import '@ember/debug';
|
|
8
|
+
import '@ember/destroyable';
|
|
5
9
|
import { Portal } from './portal.js';
|
|
6
10
|
import { TARGETS } from './portal-targets.js';
|
|
7
11
|
import { precompileTemplate } from '@ember/template-compilation';
|
|
8
12
|
import { setComponentTemplate } from '@ember/component';
|
|
9
13
|
import templateOnly from '@ember/component/template-only';
|
|
10
|
-
import Velcro from '../floating-ui/component.js';
|
|
11
|
-
import '@ember/debug';
|
|
12
|
-
import '@ember/destroyable';
|
|
13
|
-
import { hash } from '@ember/helper';
|
|
14
14
|
|
|
15
15
|
function getElementTag(tagName1) {
|
|
16
16
|
return tagName1 || 'div';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"popover.js","sources":["../../src/components/popover.gts"],"sourcesContent":["import { template } from \"@ember/template-compiler\";\nimport { hash } from '@ember/helper';\nimport { arrow } from '@floating-ui/dom';\nimport { element } from 'ember-element-helper';\nimport { modifier } from 'ember-modifier';\nimport { cell } from 'ember-resources';\nimport { FloatingUI } from '../floating-ui.ts';\nimport { Portal } from './portal.gts';\nimport { TARGETS } from './portal-targets.gts';\nimport type { Signature as FloatingUiComponentSignature } from '../floating-ui/component.ts';\nimport type { Signature as HookSignature } from '../floating-ui/modifier.ts';\nimport type { TOC } from '@ember/component/template-only';\nimport type { ElementContext, Middleware, MiddlewareData } from '@floating-ui/dom';\nimport type { ModifierLike, WithBoundArgs } from '@glint/template';\nexport interface Signature {\n Args: {\n /**\n * See the Floating UI's [flip docs](https://floating-ui.com/docs/flip) for possible values.\n *\n * This argument is forwarded to `ember-velcro`'s `<Velcro>` component.\n */ flipOptions?: HookSignature['Args']['Named']['flipOptions'];\n /**\n * Array of one or more objects to add to Floating UI's list of [middleware](https://floating-ui.com/docs/middleware)\n *\n * This argument is forwarded to `ember-velcro`'s `<Velcro>` component.\n */ middleware?: HookSignature['Args']['Named']['middleware'];\n /**\n * See the Floating UI's [offset docs](https://floating-ui.com/docs/offset) for possible values.\n *\n * This argument is forwarded to `ember-velcro`'s `<Velcro>` component.\n */ offsetOptions?: HookSignature['Args']['Named']['offsetOptions'];\n /**\n * One of the possible [`placements`](https://floating-ui.com/docs/computeposition#placement). The default is 'bottom'.\n *\n * Possible values are\n * - top\n * - bottom\n * - right\n * - left\n *\n * And may optionally have `-start` or `-end` added to adjust position along the side.\n *\n * This argument is forwarded to `ember-velcro`'s `<Velcro>` component.\n */ placement?: `${'top' | 'bottom' | 'left' | 'right'}${'' | '-start' | '-end'}`;\n /**\n * See the Floating UI's [shift docs](https://floating-ui.com/docs/shift) for possible values.\n *\n * This argument is forwarded to `ember-velcro`'s `<Velcro>` component.\n */ shiftOptions?: HookSignature['Args']['Named']['shiftOptions'];\n /**\n * CSS position property, either `fixed` or `absolute`.\n *\n * Pros and cons of each strategy are explained on [Floating UI's Docs](https://floating-ui.com/docs/computePosition#strategy)\n *\n * This argument is forwarded to `ember-velcro`'s `<Velcro>` component.\n */ strategy?: HookSignature['Args']['Named']['strategy'];\n /**\n * By default, the popover is portaled.\n * If you don't control your CSS, and the positioning of the popover content\n * is misbehaving, you may pass \"@inline={{true}}\" to opt out of portalling.\n *\n * Inline may also be useful in nested menus, where you know exactly how the nesting occurs\n */ inline?: boolean;\n };\n Blocks: {\n default: [{\n hook: FloatingUiComponentSignature['Blocks']['default'][0]['hook'];\n setHook: FloatingUiComponentSignature['Blocks']['default'][0]['setHook'];\n Content: WithBoundArgs<typeof Content, 'loop'>;\n data: FloatingUiComponentSignature['Blocks']['default'][0]['data'];\n arrow: WithBoundArgs<ModifierLike<AttachArrowSignature>, 'arrowElement' | 'data'>;\n }];\n };\n}\nfunction getElementTag(tagName1: undefined | string) {\n return tagName1 || 'div';\n}\n/**\n * Allows lazy evaluation of the portal target (do nothing until rendered)\n * This is useful because the algorithm for finding the portal target isn't cheap.\n */ const Content: TOC<{\n Element: HTMLDivElement;\n Args: {\n loop: ModifierLike<{\n Element: HTMLElement;\n }>;\n inline?: boolean;\n /**\n * By default the popover content is wrapped in a div.\n * You may change this by supplying the name of an element here.\n *\n * For example:\n * ```gjs\n * <Popover as |p|>\n * <p.Content @as=\"dialog\">\n * this is now focus trapped\n * </p.Content>\n * </Popover>\n * ```\n */ as?: string;\n };\n Blocks: {\n default: [];\n };\n}> = template(`\n {{#let (element (getElementTag @as)) as |El|}}\n {{#if @inline}}\n {{! @glint-ignore\n https://github.com/tildeio/ember-element-helper/issues/91\n https://github.com/typed-ember/glint/issues/610\n }}\n <El {{@loop}} ...attributes>\n {{yield}}\n </El>\n {{else}}\n <Portal @to={{TARGETS.popover}}>\n {{! @glint-ignore\n https://github.com/tildeio/ember-element-helper/issues/91\n https://github.com/typed-ember/glint/issues/610\n }}\n <El {{@loop}} ...attributes>\n {{yield}}\n </El>\n </Portal>\n {{/if}}\n {{/let}}\n`, {\n eval () {\n return eval(arguments[0]);\n }\n});\ninterface AttachArrowSignature {\n Element: HTMLElement;\n Args: {\n Named: {\n arrowElement: ReturnType<typeof ArrowElement>;\n data?: {\n middlewareData?: MiddlewareData;\n placement?: Placement;\n };\n };\n };\n}\nconst arrowSides = {\n top: 'bottom',\n right: 'left',\n bottom: 'top',\n left: 'right'\n};\ntype Direction = 'top' | 'bottom' | 'left' | 'right';\ntype Placement = `${Direction}${'' | '-start' | '-end'}`;\nconst attachArrow = modifier<AttachArrowSignature>((element1, _1: [], named1)=>{\n if (element1 === named1.arrowElement.current) {\n if (!named1.data) return;\n if (!named1.data.middlewareData) return;\n let { arrow: arrow1 } = named1.data.middlewareData;\n let { placement: placement1 } = named1.data;\n if (!arrow1) return;\n if (!placement1) return;\n let { x: arrowX1, y: arrowY1 } = arrow1;\n let otherSide1 = (placement1 as Placement).split('-')[0] as Direction;\n let staticSide1 = arrowSides[otherSide1];\n Object.assign(named1.arrowElement.current.style, {\n left: arrowX1 != null ? `${arrowX1}px` : '',\n top: arrowY1 != null ? `${arrowY1}px` : '',\n right: '',\n bottom: '',\n [staticSide1]: '-4px'\n });\n return;\n }\n (async ()=>{\n await Promise.resolve();\n named1.arrowElement.set(element1);\n })();\n});\nconst ArrowElement: () => ReturnType<typeof cell> = ()=>cell<HTMLElement>();\nfunction maybeAddArrow(middleware1: Middleware[] | undefined, element1: Element | undefined) {\n let result1 = [\n ...(middleware1 || [])\n ];\n if (element1) {\n result1.push(arrow({\n element: element1\n }));\n }\n return result1;\n}\nfunction flipOptions(options1: HookSignature['Args']['Named']['flipOptions']) {\n return {\n elementContext: 'reference' as ElementContext,\n ...options1\n };\n}\nexport const Popover: TOC<Signature> = template(`\n {{#let (ArrowElement) as |arrowElement|}}\n <FloatingUI\n @placement={{@placement}}\n @strategy={{@strategy}}\n @middleware={{maybeAddArrow @middleware arrowElement.current}}\n @flipOptions={{flipOptions @flipOptions}}\n @shiftOptions={{@shiftOptions}}\n @offsetOptions={{@offsetOptions}}\n as |fui|\n >\n {{yield\n (hash\n hook=fui.hook\n setHook=fui.setHook\n Content=(component Content loop=fui.loop inline=@inline)\n data=fui.data\n arrow=(modifier attachArrow arrowElement=arrowElement data=fui.data)\n )\n }}\n </FloatingUI>\n {{/let}}\n`, {\n eval () {\n return eval(arguments[0]);\n }\n});\nexport default Popover;\n"],"names":["getElementTag","tagName1","Content","setComponentTemplate","precompileTemplate","scope","element","Portal","TARGETS","strictMode","templateOnly","arrowSides","top","right","bottom","left","attachArrow","modifier","element1","_1","named1","arrowElement","current","data","middlewareData","arrow","arrow1","placement","placement1","x","arrowX1","y","arrowY1","otherSide1","split","staticSide1","Object","assign","style","Promise","resolve","set","ArrowElement","cell","maybeAddArrow","middleware1","result1","push","flipOptions","options1","elementContext","Popover","FloatingUI","hash"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"popover.js","sources":["../../src/components/popover.gts"],"sourcesContent":["import { template } from \"@ember/template-compiler\";\nimport { hash } from '@ember/helper';\nimport { arrow } from '@floating-ui/dom';\nimport { element } from 'ember-element-helper';\nimport { modifier as eModifier } from 'ember-modifier';\nimport { cell } from 'ember-resources';\nimport { FloatingUI } from '../floating-ui.ts';\nimport { Portal } from './portal.gts';\nimport { TARGETS } from './portal-targets.gts';\nimport type { Signature as FloatingUiComponentSignature } from '../floating-ui/component.ts';\nimport type { Signature as HookSignature } from '../floating-ui/modifier.ts';\nimport type { TOC } from '@ember/component/template-only';\nimport type { ElementContext, Middleware, MiddlewareData } from '@floating-ui/dom';\nimport type { ModifierLike, WithBoundArgs } from '@glint/template';\nexport interface Signature {\n Args: {\n /**\n * See the Floating UI's [flip docs](https://floating-ui.com/docs/flip) for possible values.\n *\n * This argument is forwarded to `ember-velcro`'s `<Velcro>` component.\n */ flipOptions?: HookSignature['Args']['Named']['flipOptions'];\n /**\n * Array of one or more objects to add to Floating UI's list of [middleware](https://floating-ui.com/docs/middleware)\n *\n * This argument is forwarded to `ember-velcro`'s `<Velcro>` component.\n */ middleware?: HookSignature['Args']['Named']['middleware'];\n /**\n * See the Floating UI's [offset docs](https://floating-ui.com/docs/offset) for possible values.\n *\n * This argument is forwarded to `ember-velcro`'s `<Velcro>` component.\n */ offsetOptions?: HookSignature['Args']['Named']['offsetOptions'];\n /**\n * One of the possible [`placements`](https://floating-ui.com/docs/computeposition#placement). The default is 'bottom'.\n *\n * Possible values are\n * - top\n * - bottom\n * - right\n * - left\n *\n * And may optionally have `-start` or `-end` added to adjust position along the side.\n *\n * This argument is forwarded to `ember-velcro`'s `<Velcro>` component.\n */ placement?: `${'top' | 'bottom' | 'left' | 'right'}${'' | '-start' | '-end'}`;\n /**\n * See the Floating UI's [shift docs](https://floating-ui.com/docs/shift) for possible values.\n *\n * This argument is forwarded to `ember-velcro`'s `<Velcro>` component.\n */ shiftOptions?: HookSignature['Args']['Named']['shiftOptions'];\n /**\n * CSS position property, either `fixed` or `absolute`.\n *\n * Pros and cons of each strategy are explained on [Floating UI's Docs](https://floating-ui.com/docs/computePosition#strategy)\n *\n * This argument is forwarded to `ember-velcro`'s `<Velcro>` component.\n */ strategy?: HookSignature['Args']['Named']['strategy'];\n /**\n * By default, the popover is portaled.\n * If you don't control your CSS, and the positioning of the popover content\n * is misbehaving, you may pass \"@inline={{true}}\" to opt out of portalling.\n *\n * Inline may also be useful in nested menus, where you know exactly how the nesting occurs\n */ inline?: boolean;\n };\n Blocks: {\n default: [{\n hook: FloatingUiComponentSignature['Blocks']['default'][0]['hook'];\n setHook: FloatingUiComponentSignature['Blocks']['default'][0]['setHook'];\n Content: WithBoundArgs<typeof Content, 'loop'>;\n data: FloatingUiComponentSignature['Blocks']['default'][0]['data'];\n arrow: WithBoundArgs<ModifierLike<AttachArrowSignature>, 'arrowElement' | 'data'>;\n }];\n };\n}\nfunction getElementTag(tagName1: undefined | string) {\n return tagName1 || 'div';\n}\n/**\n * Allows lazy evaluation of the portal target (do nothing until rendered)\n * This is useful because the algorithm for finding the portal target isn't cheap.\n */ const Content: TOC<{\n Element: HTMLDivElement;\n Args: {\n loop: ModifierLike<{\n Element: HTMLElement;\n }>;\n inline?: boolean;\n /**\n * By default the popover content is wrapped in a div.\n * You may change this by supplying the name of an element here.\n *\n * For example:\n * ```gjs\n * <Popover as |p|>\n * <p.Content @as=\"dialog\">\n * this is now focus trapped\n * </p.Content>\n * </Popover>\n * ```\n */ as?: string;\n };\n Blocks: {\n default: [];\n };\n}> = template(`\n {{#let (element (getElementTag @as)) as |El|}}\n {{#if @inline}}\n {{! @glint-ignore\n https://github.com/tildeio/ember-element-helper/issues/91\n https://github.com/typed-ember/glint/issues/610\n }}\n <El {{@loop}} ...attributes>\n {{yield}}\n </El>\n {{else}}\n <Portal @to={{TARGETS.popover}}>\n {{! @glint-ignore\n https://github.com/tildeio/ember-element-helper/issues/91\n https://github.com/typed-ember/glint/issues/610\n }}\n <El {{@loop}} ...attributes>\n {{yield}}\n </El>\n </Portal>\n {{/if}}\n {{/let}}\n`, {\n eval () {\n return eval(arguments[0]);\n }\n});\ninterface AttachArrowSignature {\n Element: HTMLElement;\n Args: {\n Named: {\n arrowElement: ReturnType<typeof ArrowElement>;\n data?: {\n middlewareData?: MiddlewareData;\n placement?: Placement;\n };\n };\n };\n}\nconst arrowSides = {\n top: 'bottom',\n right: 'left',\n bottom: 'top',\n left: 'right'\n};\ntype Direction = 'top' | 'bottom' | 'left' | 'right';\ntype Placement = `${Direction}${'' | '-start' | '-end'}`;\nconst attachArrow = eModifier<AttachArrowSignature>((element1, _1: [], named1)=>{\n if (element1 === named1.arrowElement.current) {\n if (!named1.data) return;\n if (!named1.data.middlewareData) return;\n let { arrow: arrow1 } = named1.data.middlewareData;\n let { placement: placement1 } = named1.data;\n if (!arrow1) return;\n if (!placement1) return;\n let { x: arrowX1, y: arrowY1 } = arrow1;\n let otherSide1 = (placement1 as Placement).split('-')[0] as Direction;\n let staticSide1 = arrowSides[otherSide1];\n Object.assign(named1.arrowElement.current.style, {\n left: arrowX1 != null ? `${arrowX1}px` : '',\n top: arrowY1 != null ? `${arrowY1}px` : '',\n right: '',\n bottom: '',\n [staticSide1]: '-4px'\n });\n return;\n }\n (async ()=>{\n await Promise.resolve();\n named1.arrowElement.set(element1);\n })();\n});\nconst ArrowElement: () => ReturnType<typeof cell> = ()=>cell<HTMLElement>();\nfunction maybeAddArrow(middleware1: Middleware[] | undefined, element1: Element | undefined) {\n let result1 = [\n ...(middleware1 || [])\n ];\n if (element1) {\n result1.push(arrow({\n element: element1\n }));\n }\n return result1;\n}\nfunction flipOptions(options1: HookSignature['Args']['Named']['flipOptions']) {\n return {\n elementContext: 'reference' as ElementContext,\n ...options1\n };\n}\nexport const Popover: TOC<Signature> = template(`\n {{#let (ArrowElement) as |arrowElement|}}\n <FloatingUI\n @placement={{@placement}}\n @strategy={{@strategy}}\n @middleware={{maybeAddArrow @middleware arrowElement.current}}\n @flipOptions={{flipOptions @flipOptions}}\n @shiftOptions={{@shiftOptions}}\n @offsetOptions={{@offsetOptions}}\n as |fui|\n >\n {{yield\n (hash\n hook=fui.hook\n setHook=fui.setHook\n Content=(component Content loop=fui.loop inline=@inline)\n data=fui.data\n arrow=(modifier attachArrow arrowElement=arrowElement data=fui.data)\n )\n }}\n </FloatingUI>\n {{/let}}\n`, {\n eval () {\n return eval(arguments[0]);\n }\n});\nexport default Popover;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2VtYmVyLXByaW1pdGl2ZXMvZW1iZXItcHJpbWl0aXZlcy9lbWJlci1wcmltaXRpdmVzL3NyYy9jb21wb25lbnRzL3BvcG92ZXIuZ3RzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGhhc2ggfSBmcm9tICdAZW1iZXIvaGVscGVyJztcblxuaW1wb3J0IHsgYXJyb3cgfSBmcm9tICdAZmxvYXRpbmctdWkvZG9tJztcbmltcG9ydCB7IGVsZW1lbnQgfSBmcm9tICdlbWJlci1lbGVtZW50LWhlbHBlcic7XG5pbXBvcnQgeyBtb2RpZmllciBhcyBlTW9kaWZpZXIgfSBmcm9tICdlbWJlci1tb2RpZmllcic7XG5pbXBvcnQgeyBjZWxsIH0gZnJvbSAnZW1iZXItcmVzb3VyY2VzJztcblxuaW1wb3J0IHsgRmxvYXRpbmdVSSB9IGZyb20gJy4uL2Zsb2F0aW5nLXVpLnRzJztcbmltcG9ydCB7IFBvcnRhbCB9IGZyb20gJy4vcG9ydGFsLmd0cyc7XG5pbXBvcnQgeyBUQVJHRVRTIH0gZnJvbSAnLi9wb3J0YWwtdGFyZ2V0cy5ndHMnO1xuXG5pbXBvcnQgdHlwZSB7IFNpZ25hdHVyZSBhcyBGbG9hdGluZ1VpQ29tcG9uZW50U2lnbmF0dXJlIH0gZnJvbSAnLi4vZmxvYXRpbmctdWkvY29tcG9uZW50LnRzJztcbmltcG9ydCB0eXBlIHsgU2lnbmF0dXJlIGFzIEhvb2tTaWduYXR1cmUgfSBmcm9tICcuLi9mbG9hdGluZy11aS9tb2RpZmllci50cyc7XG5pbXBvcnQgdHlwZSB7IFRPQyB9IGZyb20gJ0BlbWJlci9jb21wb25lbnQvdGVtcGxhdGUtb25seSc7XG5pbXBvcnQgdHlwZSB7IEVsZW1lbnRDb250ZXh0LCBNaWRkbGV3YXJlLCBNaWRkbGV3YXJlRGF0YSB9IGZyb20gJ0BmbG9hdGluZy11aS9kb20nO1xuaW1wb3J0IHR5cGUgeyBNb2RpZmllckxpa2UsIFdpdGhCb3VuZEFyZ3MgfSBmcm9tICdAZ2xpbnQvdGVtcGxhdGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25hdHVyZSB7XG4gIEFyZ3M6IHtcbiAgICAvKipcbiAgICAgKiBTZWUgdGhlIEZsb2F0aW5nIFVJJ3MgW2ZsaXAgZG9jc10oaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwKSBmb3IgcG9zc2libGUgdmFsdWVzLlxuICAgICAqXG4gICAgICogVGhpcyBhcmd1bWVudCBpcyBmb3J3YXJkZWQgdG8gYGVtYmVyLXZlbGNyb2AncyBgPFZlbGNybz5gIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBmbGlwT3B0aW9ucz86IEhvb2tTaWduYXR1cmVbJ0FyZ3MnXVsnTmFtZWQnXVsnZmxpcE9wdGlvbnMnXTtcbiAgICAvKipcbiAgICAgKiBBcnJheSBvZiBvbmUgb3IgbW9yZSBvYmplY3RzIHRvIGFkZCB0byBGbG9hdGluZyBVSSdzIGxpc3Qgb2YgW21pZGRsZXdhcmVdKGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvbWlkZGxld2FyZSlcbiAgICAgKlxuICAgICAqIFRoaXMgYXJndW1lbnQgaXMgZm9yd2FyZGVkIHRvIGBlbWJlci12ZWxjcm9gJ3MgYDxWZWxjcm8-YCBjb21wb25lbnQuXG4gICAgICovXG4gICAgbWlkZGxld2FyZT86IEhvb2tTaWduYXR1cmVbJ0FyZ3MnXVsnTmFtZWQnXVsnbWlkZGxld2FyZSddO1xuICAgIC8qKlxuICAgICAqIFNlZSB0aGUgRmxvYXRpbmcgVUkncyBbb2Zmc2V0IGRvY3NdKGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvb2Zmc2V0KSBmb3IgcG9zc2libGUgdmFsdWVzLlxuICAgICAqXG4gICAgICogVGhpcyBhcmd1bWVudCBpcyBmb3J3YXJkZWQgdG8gYGVtYmVyLXZlbGNyb2AncyBgPFZlbGNybz5gIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBvZmZzZXRPcHRpb25zPzogSG9va1NpZ25hdHVyZVsnQXJncyddWydOYW1lZCddWydvZmZzZXRPcHRpb25zJ107XG4gICAgLyoqXG4gICAgICogT25lIG9mIHRoZSBwb3NzaWJsZSBbYHBsYWNlbWVudHNgXShodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2NvbXB1dGVwb3NpdGlvbiNwbGFjZW1lbnQpLiBUaGUgZGVmYXVsdCBpcyAnYm90dG9tJy5cbiAgICAgKlxuICAgICAqIFBvc3NpYmxlIHZhbHVlcyBhcmVcbiAgICAgKiAtIHRvcFxuICAgICAqIC0gYm90dG9tXG4gICAgICogLSByaWdodFxuICAgICAqIC0gbGVmdFxuICAgICAqXG4gICAgICogQW5kIG1heSBvcHRpb25hbGx5IGhhdmUgYC1zdGFydGAgb3IgYC1lbmRgIGFkZGVkIHRvIGFkanVzdCBwb3NpdGlvbiBhbG9uZyB0aGUgc2lkZS5cbiAgICAgKlxuICAgICAqIFRoaXMgYXJndW1lbnQgaXMgZm9yd2FyZGVkIHRvIGBlbWJlci12ZWxjcm9gJ3MgYDxWZWxjcm8-YCBjb21wb25lbnQuXG4gICAgICovXG4gICAgcGxhY2VtZW50PzogYCR7J3RvcCcgfCAnYm90dG9tJyB8ICdsZWZ0JyB8ICdyaWdodCd9JHsnJyB8ICctc3RhcnQnIHwgJy1lbmQnfWA7XG4gICAgLyoqXG4gICAgICogU2VlIHRoZSBGbG9hdGluZyBVSSdzIFtzaGlmdCBkb2NzXShodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NoaWZ0KSBmb3IgcG9zc2libGUgdmFsdWVzLlxuICAgICAqXG4gICAgICogVGhpcyBhcmd1bWVudCBpcyBmb3J3YXJkZWQgdG8gYGVtYmVyLXZlbGNyb2AncyBgPFZlbGNybz5gIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBzaGlmdE9wdGlvbnM_OiBIb29rU2lnbmF0dXJlWydBcmdzJ11bJ05hbWVkJ11bJ3NoaWZ0T3B0aW9ucyddO1xuICAgIC8qKlxuICAgICAqIENTUyBwb3NpdGlvbiBwcm9wZXJ0eSwgZWl0aGVyIGBmaXhlZGAgb3IgYGFic29sdXRlYC5cbiAgICAgKlxuICAgICAqIFByb3MgYW5kIGNvbnMgb2YgZWFjaCBzdHJhdGVneSBhcmUgZXhwbGFpbmVkIG9uIFtGbG9hdGluZyBVSSdzIERvY3NdKGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvY29tcHV0ZVBvc2l0aW9uI3N0cmF0ZWd5KVxuICAgICAqXG4gICAgICogVGhpcyBhcmd1bWVudCBpcyBmb3J3YXJkZWQgdG8gYGVtYmVyLXZlbGNyb2AncyBgPFZlbGNybz5gIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBzdHJhdGVneT86IEhvb2tTaWduYXR1cmVbJ0FyZ3MnXVsnTmFtZWQnXVsnc3RyYXRlZ3knXTtcblxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIHRoZSBwb3BvdmVyIGlzIHBvcnRhbGVkLlxuICAgICAqIElmIHlvdSBkb24ndCBjb250cm9sIHlvdXIgQ1NTLCBhbmQgdGhlIHBvc2l0aW9uaW5nIG9mIHRoZSBwb3BvdmVyIGNvbnRlbnRcbiAgICAgKiBpcyBtaXNiZWhhdmluZywgeW91IG1heSBwYXNzIFwiQGlubGluZT17e3RydWV9fVwiIHRvIG9wdCBvdXQgb2YgcG9ydGFsbGluZy5cbiAgICAgKlxuICAgICAqIElubGluZSBtYXkgYWxzbyBiZSB1c2VmdWwgaW4gbmVzdGVkIG1lbnVzLCB3aGVyZSB5b3Uga25vdyBleGFjdGx5IGhvdyB0aGUgbmVzdGluZyBvY2N1cnNcbiAgICAgKi9cbiAgICBpbmxpbmU_OiBib29sZWFuO1xuICB9O1xuICBCbG9ja3M6IHtcbiAgICBkZWZhdWx0OiBbXG4gICAgICB7XG4gICAgICAgIGhvb2s6IEZsb2F0aW5nVWlDb21wb25lbnRTaWduYXR1cmVbJ0Jsb2NrcyddWydkZWZhdWx0J11bMF1bJ2hvb2snXTtcbiAgICAgICAgc2V0SG9vazogRmxvYXRpbmdVaUNvbXBvbmVudFNpZ25hdHVyZVsnQmxvY2tzJ11bJ2RlZmF1bHQnXVswXVsnc2V0SG9vayddO1xuICAgICAgICBDb250ZW50OiBXaXRoQm91bmRBcmdzPHR5cGVvZiBDb250ZW50LCAnbG9vcCc-O1xuICAgICAgICBkYXRhOiBGbG9hdGluZ1VpQ29tcG9uZW50U2lnbmF0dXJlWydCbG9ja3MnXVsnZGVmYXVsdCddWzBdWydkYXRhJ107XG4gICAgICAgIGFycm93OiBXaXRoQm91bmRBcmdzPE1vZGlmaWVyTGlrZTxBdHRhY2hBcnJvd1NpZ25hdHVyZT4sICdhcnJvd0VsZW1lbnQnIHwgJ2RhdGEnPjtcbiAgICAgIH0sXG4gICAgXTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RWxlbWVudFRhZyh0YWdOYW1lOiB1bmRlZmluZWQgfCBzdHJpbmcpIHtcbiAgcmV0dXJuIHRhZ05hbWUgfHwgJ2Rpdic7XG59XG5cbi8qKlxuICogQWxsb3dzIGxhenkgZXZhbHVhdGlvbiBvZiB0aGUgcG9ydGFsIHRhcmdldCAoZG8gbm90aGluZyB1bnRpbCByZW5kZXJlZClcbiAqIFRoaXMgaXMgdXNlZnVsIGJlY2F1c2UgdGhlIGFsZ29yaXRobSBmb3IgZmluZGluZyB0aGUgcG9ydGFsIHRhcmdldCBpc24ndCBjaGVhcC5cbiAqL1xuY29uc3QgQ29udGVudDogVE9DPHtcbiAgRWxlbWVudDogSFRNTERpdkVsZW1lbnQ7XG4gIEFyZ3M6IHtcbiAgICBsb29wOiBNb2RpZmllckxpa2U8eyBFbGVtZW50OiBIVE1MRWxlbWVudCB9PjtcbiAgICBpbmxpbmU_OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQgdGhlIHBvcG92ZXIgY29udGVudCBpcyB3cmFwcGVkIGluIGEgZGl2LlxuICAgICAqIFlvdSBtYXkgY2hhbmdlIHRoaXMgYnkgc3VwcGx5aW5nIHRoZSBuYW1lIG9mIGFuIGVsZW1lbnQgaGVyZS5cbiAgICAgKlxuICAgICAqIEZvciBleGFtcGxlOlxuICAgICAqIGBgYGdqc1xuICAgICAqIDxQb3BvdmVyIGFzIHxwfD5cbiAgICAgKiAgPHAuQ29udGVudCBAYXM9XCJkaWFsb2dcIj5cbiAgICAgKiAgICB0aGlzIGlzIG5vdyBmb2N1cyB0cmFwcGVkXG4gICAgICogIDwvcC5Db250ZW50PlxuICAgICAqIDwvUG9wb3Zlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhcz86IHN0cmluZztcbiAgfTtcbiAgQmxvY2tzOiB7IGRlZmF1bHQ6IFtdIH07XG59PiA9IDx0ZW1wbGF0ZT5cbiAge3sjbGV0IChlbGVtZW50IChnZXRFbGVtZW50VGFnIEBhcykpIGFzIHxFbHx9fVxuICAgIHt7I2lmIEBpbmxpbmV9fVxuICAgICAge3shIEBnbGludC1pZ25vcmVcbiAgICAgICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS90aWxkZWlvL2VtYmVyLWVsZW1lbnQtaGVscGVyL2lzc3Vlcy85MVxuICAgICAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL3R5cGVkLWVtYmVyL2dsaW50L2lzc3Vlcy82MTBcbiAgICAgIH19XG4gICAgICA8RWwge3tAbG9vcH19IC4uLmF0dHJpYnV0ZXM-XG4gICAgICAgIHt7eWllbGR9fVxuICAgICAgPC9FbD5cbiAgICB7e2Vsc2V9fVxuICAgICAgPFBvcnRhbCBAdG89e3tUQVJHRVRTLnBvcG92ZXJ9fT5cbiAgICAgICAge3shIEBnbGludC1pZ25vcmVcbiAgICAgICAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL3RpbGRlaW8vZW1iZXItZWxlbWVudC1oZWxwZXIvaXNzdWVzLzkxXG4gICAgICAgICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS90eXBlZC1lbWJlci9nbGludC9pc3N1ZXMvNjEwXG4gICAgICAgIH19XG4gICAgICAgIDxFbCB7e0Bsb29wfX0gLi4uYXR0cmlidXRlcz5cbiAgICAgICAgICB7e3lpZWxkfX1cbiAgICAgICAgPC9FbD5cbiAgICAgIDwvUG9ydGFsPlxuICAgIHt7L2lmfX1cbiAge3svbGV0fX1cbjwvdGVtcGxhdGU-O1xuXG5pbnRlcmZhY2UgQXR0YWNoQXJyb3dTaWduYXR1cmUge1xuICBFbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgQXJnczoge1xuICAgIE5hbWVkOiB7XG4gICAgICBhcnJvd0VsZW1lbnQ6IFJldHVyblR5cGU8dHlwZW9mIEFycm93RWxlbWVudD47XG4gICAgICBkYXRhPzoge1xuICAgICAgICBtaWRkbGV3YXJlRGF0YT86IE1pZGRsZXdhcmVEYXRhO1xuICAgICAgICBwbGFjZW1lbnQ_OiBQbGFjZW1lbnQ7XG4gICAgICB9O1xuICAgIH07XG4gIH07XG59XG5cbmNvbnN0IGFycm93U2lkZXMgPSB7XG4gIHRvcDogJ2JvdHRvbScsXG4gIHJpZ2h0OiAnbGVmdCcsXG4gIGJvdHRvbTogJ3RvcCcsXG4gIGxlZnQ6ICdyaWdodCcsXG59O1xuXG50eXBlIERpcmVjdGlvbiA9ICd0b3AnIHwgJ2JvdHRvbScgfCAnbGVmdCcgfCAncmlnaHQnO1xudHlwZSBQbGFjZW1lbnQgPSBgJHtEaXJlY3Rpb259JHsnJyB8ICctc3RhcnQnIHwgJy1lbmQnfWA7XG5cbmNvbnN0IGF0dGFjaEFycm93ID0gZU1vZGlmaWVyPEF0dGFjaEFycm93U2lnbmF0dXJlPigoZWxlbWVudCwgXzogW10sIG5hbWVkKSA9PiB7XG4gIGlmIChlbGVtZW50ID09PSBuYW1lZC5hcnJvd0VsZW1lbnQuY3VycmVudCkge1xuICAgIGlmICghbmFtZWQuZGF0YSkgcmV0dXJuO1xuICAgIGlmICghbmFtZWQuZGF0YS5taWRkbGV3YXJlRGF0YSkgcmV0dXJuO1xuXG4gICAgbGV0IHsgYXJyb3cgfSA9IG5hbWVkLmRhdGEubWlkZGxld2FyZURhdGE7XG4gICAgbGV0IHsgcGxhY2VtZW50IH0gPSBuYW1lZC5kYXRhO1xuXG4gICAgaWYgKCFhcnJvdykgcmV0dXJuO1xuICAgIGlmICghcGxhY2VtZW50KSByZXR1cm47XG5cbiAgICBsZXQgeyB4OiBhcnJvd1gsIHk6IGFycm93WSB9ID0gYXJyb3c7XG4gICAgbGV0IG90aGVyU2lkZSA9IChwbGFjZW1lbnQgYXMgUGxhY2VtZW50KS5zcGxpdCgnLScpWzBdIGFzIERpcmVjdGlvbjtcbiAgICBsZXQgc3RhdGljU2lkZSA9IGFycm93U2lkZXNbb3RoZXJTaWRlXTtcblxuICAgIE9iamVjdC5hc3NpZ24obmFtZWQuYXJyb3dFbGVtZW50LmN1cnJlbnQuc3R5bGUsIHtcbiAgICAgIGxlZnQ6IGFycm93WCAhPSBudWxsID8gYCR7YXJyb3dYfXB4YCA6ICcnLFxuICAgICAgdG9wOiBhcnJvd1kgIT0gbnVsbCA_IGAke2Fycm93WX1weGAgOiAnJyxcbiAgICAgIHJpZ2h0OiAnJyxcbiAgICAgIGJvdHRvbTogJycsXG4gICAgICBbc3RhdGljU2lkZV06ICctNHB4JyxcbiAgICB9KTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIChhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgbmFtZWQuYXJyb3dFbGVtZW50LnNldChlbGVtZW50KTtcbiAgfSkoKTtcbn0pO1xuXG5jb25zdCBBcnJvd0VsZW1lbnQ6ICgpID0-IFJldHVyblR5cGU8dHlwZW9mIGNlbGw8SFRNTEVsZW1lbnQ-PiA9ICgpID0-IGNlbGw8SFRNTEVsZW1lbnQ-KCk7XG5cbmZ1bmN0aW9uIG1heWJlQWRkQXJyb3cobWlkZGxld2FyZTogTWlkZGxld2FyZVtdIHwgdW5kZWZpbmVkLCBlbGVtZW50OiBFbGVtZW50IHwgdW5kZWZpbmVkKSB7XG4gIGxldCByZXN1bHQgPSBbLi4uKG1pZGRsZXdhcmUgfHwgW10pXTtcblxuICBpZiAoZWxlbWVudCkge1xuICAgIHJlc3VsdC5wdXNoKGFycm93KHsgZWxlbWVudCB9KSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBmbGlwT3B0aW9ucyhvcHRpb25zOiBIb29rU2lnbmF0dXJlWydBcmdzJ11bJ05hbWVkJ11bJ2ZsaXBPcHRpb25zJ10pIHtcbiAgcmV0dXJuIHtcbiAgICBlbGVtZW50Q29udGV4dDogJ3JlZmVyZW5jZScgYXMgRWxlbWVudENvbnRleHQsXG4gICAgLi4ub3B0aW9ucyxcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IFBvcG92ZXI6IFRPQzxTaWduYXR1cmU-ID0gPHRlbXBsYXRlPlxuICB7eyNsZXQgKEFycm93RWxlbWVudCkgYXMgfGFycm93RWxlbWVudHx9fVxuICAgIDxGbG9hdGluZ1VJXG4gICAgICBAcGxhY2VtZW50PXt7QHBsYWNlbWVudH19XG4gICAgICBAc3RyYXRlZ3k9e3tAc3RyYXRlZ3l9fVxuICAgICAgQG1pZGRsZXdhcmU9e3ttYXliZUFkZEFycm93IEBtaWRkbGV3YXJlIGFycm93RWxlbWVudC5jdXJyZW50fX1cbiAgICAgIEBmbGlwT3B0aW9ucz17e2ZsaXBPcHRpb25zIEBmbGlwT3B0aW9uc319XG4gICAgICBAc2hpZnRPcHRpb25zPXt7QHNoaWZ0T3B0aW9uc319XG4gICAgICBAb2Zmc2V0T3B0aW9ucz17e0BvZmZzZXRPcHRpb25zfX1cbiAgICAgIGFzIHxmdWl8XG4gICAgPlxuICAgICAge3t5aWVsZFxuICAgICAgICAoaGFzaFxuICAgICAgICAgIGhvb2s9ZnVpLmhvb2tcbiAgICAgICAgICBzZXRIb29rPWZ1aS5zZXRIb29rXG4gICAgICAgICAgQ29udGVudD0oY29tcG9uZW50IENvbnRlbnQgbG9vcD1mdWkubG9vcCBpbmxpbmU9QGlubGluZSlcbiAgICAgICAgICBkYXRhPWZ1aS5kYXRhXG4gICAgICAgICAgYXJyb3c9KG1vZGlmaWVyIGF0dGFjaEFycm93IGFycm93RWxlbWVudD1hcnJvd0VsZW1lbnQgZGF0YT1mdWkuZGF0YSlcbiAgICAgICAgKVxuICAgICAgfX1cbiAgICA8L0Zsb2F0aW5nVUk-XG4gIHt7L2xldH19XG48L3RlbXBsYXRlPjtcblxuZXhwb3J0IGRlZmF1bHQgUG9wb3ZlcjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsU0FBUyxJQUFJLFFBQVEsZ0JBQWdCO0FBRXJDLFNBQVMsS0FBSyxRQUFRLG1CQUFtQjtBQUN6QyxTQUFTLE9BQU8sUUFBUSx1QkFBdUI7QUFDL0MsU0FBUyxZQUFZLFNBQVMsUUFBUSxpQkFBaUI7QUFDdkQsU0FBUyxJQUFJLFFBQVEsa0JBQWtCO0FBRXZDLFNBQVMsVUFBVSxRQUFRLG9CQUFvQjtBQUMvQyxTQUFTLE1BQU0sUUFBUSxlQUFlO0FBQ3RDLFNBQVMsT0FBTyxRQUFRLHVCQUF1QjtBQUUvQyxjQUFjLGFBQWEsNEJBQTRCLFFBQVEsOEJBQThCO0FBQzdGLGNBQWMsYUFBYSxhQUFhLFFBQVEsNkJBQTZCO0FBQzdFLGNBQWMsR0FBRyxRQUFRLGlDQUFpQztBQUMxRCxjQUFjLGNBQWMsRUFBRSxVQUFVLEVBQUUsY0FBYyxRQUFRLG1CQUFtQjtBQUNuRixjQUFjLFlBQVksRUFBRSxhQUFhLFFBQVEsa0JBQWtCO0FBRW5FLGlCQUFpQjtJQUNmO1FBQ0U7Ozs7S0FJQyxHQUNELGNBQWMsY0FBYyxRQUFRLFNBQVM7UUFDN0M7Ozs7S0FJQyxHQUNELGFBQWEsY0FBYyxRQUFRLFNBQVM7UUFDNUM7Ozs7S0FJQyxHQUNELGdCQUFnQixjQUFjLFFBQVEsU0FBUztRQUMvQzs7Ozs7Ozs7Ozs7O0tBWUMsR0FDRCxhQUFhLEVBQUUsUUFBUSxXQUFXLFNBQVMsUUFBUSxFQUFFLEtBQUssV0FBVyxPQUFPO1FBQzVFOzs7O0tBSUMsR0FDRCxlQUFlLGNBQWMsUUFBUSxTQUFTO1FBQzlDOzs7Ozs7S0FNQyxHQUNELFdBQVcsY0FBYyxRQUFRLFNBQVM7UUFFMUM7Ozs7OztLQU1DLEdBQ0QsU0FBUyxPQUFPOztJQUVsQjtRQUNFO2dCQUVJLE1BQU0sNkJBQTZCLFVBQVUsV0FBVyxHQUFHO2dCQUMzRCxTQUFTLDZCQUE2QixVQUFVLFdBQVcsR0FBRztnQkFDOUQs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"],"names":["getElementTag","tagName1","Content","precompileTemplate","scope","element","Portal","TARGETS","strictMode","templateOnly","arrowSides","top","right","bottom","left","attachArrow","eModifier","element1","_1","named1","arrowElement","current","data","middlewareData","arrow","arrow1","placement","placement1","x","arrowX1","y","arrowY1","otherSide1","split","staticSide1","Object","assign","style","Promise","resolve","set","ArrowElement","cell","maybeAddArrow","middleware1","result1","push","flipOptions","options1","elementContext","Popover","setComponentTemplate","FloatingUI","hash"],"mappings":"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"}
|