{"version":3,"sources":["Selector.tsx"],"sourcesContent":["import { Component } from \"uix/components/Component.ts\";\nimport { Icon } from \"../icon/Icon.tsx\";\nimport { Path } from \"datex-core-legacy/utils/path.ts\";\n\nexport type SelectorOptions = {\n\tvalue?: string | Ref<string>;\n\tlabel?: HTMLElement | string;\n\tkeepOpen?: boolean;\n\thideChevron?: boolean;\n\thideCheck?: boolean;\n\tcloseDelay?: number;\n\topenOnHover?: boolean;\n\tstyle?: Record<string, string | number>;\n\tappearance?: \"default\" | \"filter\"\n}\n\nexport const Selector = blankTemplate<SelectorOptions & {children?: any}>(function(props) {\n\tconst options = [...props.children].map((option) => {\n\t\tif (option instanceof HTMLOptionElement)\n\t\t\treturn <div \n\t\t\t\tclass=\"option\"\n\t\t\t\tdata-value={option.getAttribute(\"value\")}>\n\t\t\t\t\t<div class=\"content\">\n\t\t\t\t\t\t{...(option.childNodes as unknown as HTMLElement[])}\n\t\t\t\t\t</div>\n\t\t\t\t\t{!props.hideCheck ? <Icon name=\"fa-check\"/> : undefined}\n\t\t\t</div> as HTMLElement\n\t\treturn option as HTMLElement;\n\t});\n\tconst styles=props.style ?? {};\n\t// @ts-ignore $\n\tdelete props.children;\n\t// @ts-ignore $\n\tdelete props.style;\n\treturn <SelectorWrapper\n\t\tappearance={props.appearance ?? \"default\"}\n\t\tstyles={styles}\n\t\t{...props as any}\n\t\toptions={options}/>\n});\n\n@template(function({stylesheet, appearance, styles, options, hideChevron, label}) {\n\treturn <shadow-root>\n\t\t<link rel=\"stylesheet\" href={\"../../theme/unyt.css\"}/>\n\t\t{stylesheet ? <link rel=\"stylesheet\" href={stylesheet}/> : undefined}\n\t\t{options && options.length ? <div data-appearance={appearance} id=\"dropdown\" class=\"select\">\n\t\t\t{options}\n\t\t</div> : null}\n\t\t<button data-appearance={appearance} class=\"value\" id=\"selector\" style={styles}>\n\t\t\t{label ?? <div id=\"label\" class=\"label\"/>}\n\t\t\t{!hideChevron ? <Icon id=\"chevron\" name={\"fa-chevron-down\"}/> : undefined}\n\t\t</button>\n\t</shadow-root>\n})\n@style(\"./Selector.css\")\n@standalone({inheritedFields: [\"properties\"]})\nexport class SelectorWrapper extends Component<SelectorOptions & {\n\tappearance: string,\n\tstyles: Record<string, string | number>,\n\tstylesheet?: string | Path | URL | null,\n\toptions: HTMLElement[]\n}> {\n\t@id selector!: HTMLButtonElement;\n\t@id label?: HTMLDivElement;\n\t@id dropdown!: HTMLDivElement;\n\n\tpublic value!: Ref<string>;\n\n\tprotected override onCreate(): void | Promise<void> {\n\t\t// @ts-ignore $\n\t\tdelete this.properties.options;\n\t\t// @ts-ignore $\n\t\tdelete this.properties.label;\n\t\tif (!this.dropdown)\n\t\t\treturn;\n\t\tthis.dropdown.setAttribute(\"popover\", \"\");\n\t\tthis.selector.setAttribute(\"popovertarget\", \"dropdown\");\n\t\tconst initialOption = this.getOptionByValue(this.properties.value);\n\t\tif (!initialOption)\n\t\t\treturn;\n\t\tif (!this.properties.value) {\n\t\t\t// @ts-ignore $\n\t\t\tthis.properties.value = initialOption?.dataset.value ?? undefined\n\t\t}\n\t\tif (this.label)\n\t\t\tthis.label.textContent = initialOption.innerText ?? '';\n\t\tinitialOption.classList.add(\"active\");\n\t}\n\n\tprivate getOptionByValue(value?: string) {\n\t\tconst fallback = this.dropdown.querySelector(\".option\") as HTMLDivElement | undefined;\n\t\tif (!value)\n\t\t\treturn fallback;\n\t\treturn this.dropdown.querySelector(`.option[data-value=\"${value}\"]`) as HTMLDivElement ?? fallback;\n\t}\n\n\tprivate selectValue(value?: string) {\n\t\tif (value && this.value === value)\n\t\t\treturn;\n\t\tconst option = this.getOptionByValue(value);\n\t\tthis.dropdown.querySelectorAll(\".option\").forEach((other) => other.classList.toggle(\"active\", other === option));\n\t\tif (option) {\n\t\t\tif (this.value) this.value.val = value ?? '';\n\t\t\tif (this.label) this.label.textContent = option.innerText ?? '';\n\t\t}\n\t}\n\tprivate callbacks: Set<(value: string)=>void> = new Set();\n\tpublic onChange(callback: (value: string)=>void) {\n\t\tthis.callbacks.add(callback);\n\t}\n\n\tprivate listenForHover() {\n\t\tthis.selector.addEventListener(\"mouseenter\", () => {\n\t\t\tthis.dropdown.showPopover();\n\t\t});\n\t\tthis.addEventListener(\"mouseleave\", () => {\n\t\t\tthis.dropdown.hidePopover();\n\t\t});\n\t}\n\n\tprotected override async onDisplay() {\n\t\tif (!this.dropdown)\n\t\t\treturn;\n\t\tif (this.properties.openOnHover)\n\t\t\tthis.listenForHover();\n\n\t\tthis.callbacks = new Set();\n\t\tif (!(\"Datex\" in globalThis))\n\t\t\tawait import(\"datex-core-legacy\");\n\n\t\tthis.value = typeof this.properties.value === \"string\" ? \n\t\t\t$(this.properties.value) :\n\t\t\tthis.properties.value ?? $('');\n\t\tthis.dropdown.querySelectorAll<HTMLDivElement>(\".option\").forEach((option) => {\n\t\t\toption.addEventListener(\"click\", () => {\n\t\t\t\tthis.selectValue(option.dataset.value);\n\t\t\t\tif (!this.properties.keepOpen)\n\t\t\t\t\tsetTimeout(() => this.dropdown.hidePopover(), this.properties.closeDelay ?? 0);\n\t\t\t});\n\t\t});\n\t\teffect(() => {\n\t\t\tuse(this);\n\t\t\tthis.selectValue(val(this.value));\n\t\t\tthis.callbacks.forEach((callback) => callback(val(this.value)));\n\t\t});\n\t}\n}"],"names":["Component","selector","label","dropdown","Icon","Selector","blankTemplate","props","options","children","map","option","HTMLOptionElement","div","class","data-value","getAttribute","childNodes","hideCheck","undefined","name","styles","style","SelectorWrapper","appearance","template","stylesheet","hideChevron","shadow-root","link","rel","href","length","data-appearance","id","button","standalone","inheritedFields","value","onCreate","properties","setAttribute","initialOption","getOptionByValue","dataset","textContent","innerText","classList","add","fallback","querySelector","selectValue","querySelectorAll","forEach","other","toggle","val","callbacks","Set","onChange","callback","listenForHover","addEventListener","showPopover","hidePopover","onDisplay","openOnHover","globalThis","$","keepOpen","setTimeout","closeDelay","effect","use"],"mappings":"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","sourceRoot":"/lib/unyt-components-0.0.17/elements/selector/","file":"Selector.tsx"}