@domphy/ui 0.14.0 → 0.15.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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/patches/abbreviation.ts","../src/patches/card.ts","../src/patches/splitter.ts","../src/patches/command.ts","../src/patches/toggle.ts","../src/patches/toggleGroup.ts","../src/patches/inputOTP.ts","../src/patches/alert.ts","../src/patches/avatar.ts","../src/patches/badge.ts","../src/patches/breadcrumb.ts","../src/patches/breadcrumbEllipsis.ts","../src/patches/combobox.ts","../src/patches/tag.ts","../src/utils/floating.ts","../src/patches/popoverArrow.ts","../src/patches/blockquote.ts","../src/patches/button.ts","../src/patches/inputCheckbox.ts","../src/patches/code.ts","../src/patches/details.ts","../src/patches/descriptionList.ts","../src/patches/dialog.ts","../src/patches/emphasis.ts","../src/patches/figure.ts","../src/patches/formGroup.ts","../src/patches/heading.ts","../src/patches/horizontalRule.ts","../src/patches/image.ts","../src/patches/icon.ts","../src/patches/inputColor.ts","../src/patches/inputDateTime.ts","../src/patches/datePicker.ts","../src/patches/inputFile.ts","../src/patches/inputSearch.ts","../src/patches/inputText.ts","../src/patches/inputRange.ts","../src/patches/inputNumber.ts","../src/patches/keyboard.ts","../src/patches/label.ts","../src/patches/link.ts","../src/patches/mark.ts","../src/patches/paragraph.ts","../src/patches/preformated.ts","../src/patches/progress.ts","../src/patches/inputRadio.ts","../src/patches/select.ts","../src/patches/skeleton.ts","../src/patches/spinner.ts","../src/patches/selectList.ts","../src/patches/selectItem.ts","../src/patches/selectBox.ts","../src/patches/inputSwitch.ts","../src/patches/buttonSwitch.ts","../src/patches/small.ts","../src/patches/strong.ts","../src/patches/subscript.ts","../src/patches/superscript.ts","../src/patches/table.ts","../src/patches/textarea.ts","../src/patches/unorderedList.ts","../src/patches/orderedList.ts","../src/patches/pagination.ts","../src/patches/divider.ts","../src/patches/drawer.ts","../src/patches/popover.ts","../src/patches/toast.ts","../src/patches/tooltip.ts","../src/patches/transitionGroup.ts","../src/patches/tabs.ts","../src/patches/tab.ts","../src/patches/tabPanel.ts","../src/patches/menu.ts","../src/patches/menuItem.ts","../src/patches/motion.ts"],"sourcesContent":["import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, ThemeColor, themeSize, themeSpacing } from \"@domphy/theme\";\n\nfunction abbreviation(props: { color?: ValueOrState<ThemeColor>; accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"abbr\") {\n console.warn(`\"abbreviation\" primitive patch must use abbr tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener),\n backgroundColor: (listener) => themeColor(listener),\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n textDecorationLine: \"underline\",\n textDecorationStyle: \"dotted\",\n textDecorationColor: (listener) => themeColor(listener, \"shift-7\", color.get(listener)),\n textUnderlineOffset: themeSpacing(0.72),\n cursor: \"help\",\n \"&:hover\": {\n color: (listener) => themeColor(listener, \"shift-11\", accentColor.get(listener)),\n textDecorationColor: (listener) => themeColor(listener, \"shift-9\", accentColor.get(listener)),\n },\n },\n };\n}\n\nexport { abbreviation };\n","import { type PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\nfunction card(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n return {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"1fr auto\",\n gridTemplateAreas: '\"image image\" \"title aside\" \"desc aside\" \"content content\" \"footer footer\"',\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 2),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n outlineOffset: \"-1px\",\n overflow: \"hidden\",\n \"& > img\": {\n gridArea: \"image\",\n width: \"100%\",\n height: \"auto\",\n display: \"block\",\n },\n \"& > :is(h1,h2,h3,h4,h5,h6)\": {\n gridArea: \"title\",\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 4),\n fontWeight: \"600\",\n margin: 0\n },\n \"& > p\": {\n gridArea: \"desc\",\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 4),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n margin: 0\n },\n \"& > aside\": {\n gridArea: \"aside\",\n alignSelf: \"center\",\n padding: (listener) => themeSpacing(themeDensity(listener) * 2),\n height: \"auto\",\n },\n \"& > div\": {\n gridArea: \"content\",\n padding: (listener) => themeSpacing(themeDensity(listener) * 4),\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n },\n \"& > footer\": {\n gridArea: \"footer\",\n display: \"flex\",\n gap: themeSpacing(2),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 4),\n borderTop: (listener) => `1px solid ${themeColor(listener, \"shift-3\", color.get(listener))}`,\n },\n },\n };\n}\n\nexport { card };\n","import { type PartialElement, merge, toState } from \"@domphy/core\";\r\nimport { themeColor, themeSpacing } from \"@domphy/theme\";\r\n\r\nfunction splitter(props: {\r\n direction?: \"horizontal\" | \"vertical\";\r\n defaultSize?: number;\r\n min?: number;\r\n max?: number;\r\n} = {}): PartialElement {\r\n const { direction = \"horizontal\", defaultSize = 50, min = 10, max = 90 } = props;\r\n return {\r\n _onSchedule: (node, element) => {\r\n merge(element, {\r\n _context: {\r\n splitter: {\r\n direction,\r\n size: toState(defaultSize),\r\n min,\r\n max,\r\n },\r\n },\r\n });\r\n },\r\n style: {\r\n display: \"flex\",\r\n flexDirection: direction === \"horizontal\" ? \"row\" : \"column\",\r\n overflow: \"hidden\",\r\n },\r\n };\r\n}\r\n\r\nfunction splitterPanel(): PartialElement {\r\n return {\r\n _onMount: (node) => {\r\n const ctx = node.getContext(\"splitter\");\r\n if (!ctx) {\r\n console.warn(`\"splitterPanel\" patch must be used inside a \"splitter\"`);\r\n return;\r\n }\r\n const el = node.domElement as HTMLElement;\r\n const prop = ctx.direction === \"horizontal\" ? \"width\" : \"height\";\r\n\r\n el.style[prop] = `${ctx.size.get()}%`;\r\n el.style.flexShrink = \"0\";\r\n el.style.overflow = \"auto\";\r\n\r\n const release = ctx.size.addListener((size: number) => {\r\n el.style[prop] = `${size}%`;\r\n });\r\n node.addHook(\"Remove\", release);\r\n },\r\n };\r\n}\r\n\r\nfunction splitterHandle(): PartialElement {\r\n return {\r\n _onMount: (node) => {\r\n const ctx = node.getContext(\"splitter\");\r\n if (!ctx) {\r\n console.warn(`\"splitterHandle\" patch must be used inside a \"splitter\"`);\r\n return;\r\n }\r\n const handle = node.domElement as HTMLElement;\r\n const isHorizontal = ctx.direction === \"horizontal\";\r\n\r\n handle.style.cursor = isHorizontal ? \"col-resize\" : \"row-resize\";\r\n\r\n const onMousedown = (e: MouseEvent) => {\r\n e.preventDefault();\r\n const container = handle.parentElement!;\r\n\r\n const onMousemove = (e: MouseEvent) => {\r\n const rect = container.getBoundingClientRect();\r\n const raw = isHorizontal\r\n ? ((e.clientX - rect.left) / rect.width) * 100\r\n : ((e.clientY - rect.top) / rect.height) * 100;\r\n ctx.size.set(Math.min(Math.max(raw, ctx.min), ctx.max));\r\n };\r\n\r\n const onMouseup = () => {\r\n document.removeEventListener(\"mousemove\", onMousemove);\r\n document.removeEventListener(\"mouseup\", onMouseup);\r\n };\r\n\r\n document.addEventListener(\"mousemove\", onMousemove);\r\n document.addEventListener(\"mouseup\", onMouseup);\r\n };\r\n\r\n handle.addEventListener(\"mousedown\", onMousedown);\r\n node.addHook(\"Remove\", () => handle.removeEventListener(\"mousedown\", onMousedown));\r\n },\r\n style: {\r\n flexShrink: 0,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\"),\r\n \"&:hover\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-3\"),\r\n },\r\n \"&::after\": {\r\n content: '\"\"',\r\n borderRadius: themeSpacing(999),\r\n backgroundColor: (listener) => themeColor(listener, \"shift-4\"),\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { splitter, splitterPanel, splitterHandle };\r\n","import { type PartialElement, merge, toState } from \"@domphy/core\";\r\nimport { themeColor, themeDensity, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction command(): PartialElement {\r\n return {\r\n _onSchedule: (node, element) => {\r\n merge(element, {\r\n _context: {\r\n command: {\r\n query: toState(\"\"),\r\n },\r\n },\r\n });\r\n },\r\n style: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n overflow: \"hidden\",\r\n },\r\n };\r\n}\r\n\r\nfunction commandSearch(props: { color?: ThemeColor; accentColor?: ThemeColor } = {}): PartialElement {\r\n const { color = \"neutral\", accentColor = \"primary\" } = props;\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName !== \"input\") {\r\n console.warn(`\"commandSearch\" patch must use input tag`);\r\n }\r\n },\r\n _onMount: (node) => {\r\n const ctx = node.getContext(\"command\");\r\n if (!ctx) {\r\n console.warn(`\"commandSearch\" patch must be used inside a \"command\"`);\r\n return;\r\n }\r\n const input = node.domElement as HTMLInputElement;\r\n const onInput = () => ctx.query.set(input.value);\r\n input.addEventListener(\"input\", onInput);\r\n node.addHook(\"Remove\", () => input.removeEventListener(\"input\", onInput));\r\n },\r\n style: {\r\n fontFamily: \"inherit\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\r\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\r\n border: \"none\",\r\n borderBottom: (listener) => `1px solid ${themeColor(listener, \"shift-3\", color)}`,\r\n outline: \"none\",\r\n color: (listener) => themeColor(listener, \"shift-10\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n \"&::placeholder\": {\r\n color: (listener) => themeColor(listener, \"shift-7\"),\r\n },\r\n \"&:focus-visible\": {\r\n borderBottomColor: (listener) => themeColor(listener, \"shift-6\", accentColor),\r\n },\r\n },\r\n };\r\n}\r\n\r\nfunction commandItem(props: { color?: ThemeColor; accentColor?: ThemeColor } = {}): PartialElement {\r\n const { color = \"neutral\", accentColor = \"primary\" } = props;\r\n return {\r\n role: \"option\",\r\n _onMount: (node) => {\r\n const ctx = node.getContext(\"command\");\r\n if (!ctx) {\r\n console.warn(`\"commandItem\" patch must be used inside a \"command\"`);\r\n return;\r\n }\r\n const el = node.domElement as HTMLElement;\r\n const text = el.textContent?.toLowerCase() ?? \"\";\r\n const release = ctx.query.addListener((q: string) => {\r\n el.hidden = q.length > 0 && !text.includes(q.toLowerCase());\r\n });\r\n node.addHook(\"Remove\", release);\r\n },\r\n style: {\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n width: \"100%\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n height: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\r\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\r\n border: \"none\",\r\n outline: \"none\",\r\n color: (listener) => themeColor(listener, \"shift-9\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n \"&:hover:not([disabled])\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color),\r\n },\r\n \"&:focus-visible\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor)}`,\r\n outlineOffset: `-${themeSpacing(0.5)}`,\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { command, commandSearch, commandItem };\r\n","import { type PartialElement, type ElementNode, toState, type ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\nfunction toggle(props: {\n color?: ValueOrState<ThemeColor>;\n accentColor?: ValueOrState<ThemeColor>;\n} = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n return {\n role: \"button\",\n _onInsert: (node) => {\n if (node.tagName !== \"button\") {\n console.warn(`\"toggle\" patch must use button tag`);\n }\n const ctx = node.getContext(\"toggleGroup\");\n if (!ctx) {\n console.warn(`\"toggle\" patch must be used inside a \"toggleGroup\"`);\n return;\n }\n const children = (node.parent?.children.items ?? []) as ElementNode[]\n\n let items = children.filter(n => n.type === \"ElementNode\" && n.attributes.get(\"role\") === \"button\");\n // node.key is null (not undefined) when absent — check both so an\n // explicit _key of 0 or \"\" keeps its real key instead of \"null\"/index.\n const key = node.key !== null && node.key !== undefined ? String(node.key) : String(items.findIndex(n => n === node));\n\n node.attributes.set(\"ariaPressed\", (listener) => {\n const val = ctx.value.get(listener);\n return Array.isArray(val) ? val.includes(key) : val === key;\n })\n\n node.addEvent(\"click\", () => {\n const val = ctx.value.get();\n if (ctx.multiple) {\n const arr = Array.isArray(val) ? [...val] : [];\n ctx.value.set(arr.includes(key) ? arr.filter(v => v !== key) : [...arr, key]);\n } else {\n ctx.value.set(val === key ? \"\" : key);\n }\n })\n },\n style: {\n cursor: \"pointer\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n height: themeSpacing(6),\n paddingBlock: themeSpacing(1),\n paddingInline: themeSpacing(2),\n border: \"none\",\n borderRadius: themeSpacing(1),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n transition:\"background-color 300ms ease\",\n \"&:hover:not([disabled])\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color.get(listener)),\n },\n \"&[aria-pressed=true]\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", accentColor.get(listener)),\n color: (listener) => themeColor(listener, \"shift-12\", accentColor.get(listener)),\n },\n \"&:focus-visible\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n outlineOffset: `-${themeSpacing(0.5)}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n },\n },\n };\n}\n\nexport { toggle };\n","import { type PartialElement, merge, toState, type ValueOrState } from \"@domphy/core\";\r\nimport { themeSpacing, themeColor, themeSize, type ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction toggleGroup(props: {\r\n value?: ValueOrState<string | string[]>;\r\n multiple?: boolean;\r\n color?: ThemeColor;\r\n} = {}): PartialElement {\r\n const { multiple = false, color = \"neutral\" } = props;\r\n return {\r\n role: \"group\",\r\n _context: {\r\n toggleGroup: {\r\n value: toState(props.value ?? (multiple ? [] : \"\")),\r\n multiple,\r\n },\r\n },\r\n style: {\r\n display: \"flex\",\r\n paddingBlock: themeSpacing(1),\r\n paddingInline: themeSpacing(1),\r\n gap: themeSpacing(1),\r\n borderRadius: themeSpacing(2),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", color)}`,\r\n outlineOffset: \"-1px\",\r\n }\r\n };\r\n}\r\n\r\nexport { toggleGroup };\r\n","import { type PartialElement } from \"@domphy/core\";\r\nimport { themeSpacing } from \"@domphy/theme\";\r\n\r\nfunction inputOTP(): PartialElement {\r\n return {\r\n style: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: themeSpacing(2),\r\n \"& > *\":{\r\n minWidth:themeSpacing(9) + \"!important\",\n }\r\n },\r\n _onMount: (node) => {\r\n const container = node.domElement as HTMLElement;\r\n const getInputs = () => Array.from(container.querySelectorAll(\"input\")) as HTMLInputElement[];\r\n\r\n const onInput = (e: Event) => {\r\n const inputs = getInputs();\r\n const target = e.target as HTMLInputElement;\r\n const idx = inputs.indexOf(target);\r\n if (target.value && idx < inputs.length - 1) {\r\n inputs[idx + 1].focus();\r\n }\r\n };\r\n\r\n const onKeydown = (e: KeyboardEvent) => {\r\n const inputs = getInputs();\r\n const target = e.target as HTMLInputElement;\r\n const idx = inputs.indexOf(target);\r\n if (e.key === \"Backspace\" && !target.value && idx > 0) {\r\n inputs[idx - 1].focus();\r\n }\r\n if (e.key === \"ArrowLeft\" && idx > 0) inputs[idx - 1].focus();\r\n if (e.key === \"ArrowRight\" && idx < inputs.length - 1) inputs[idx + 1].focus();\r\n };\r\n\r\n const onPaste = (e: ClipboardEvent) => {\r\n e.preventDefault();\r\n const text = e.clipboardData?.getData(\"text\") ?? \"\";\r\n const inputs = getInputs();\r\n const startIdx = inputs.indexOf(e.target as HTMLInputElement);\r\n [...text].forEach((char, i) => {\r\n if (inputs[startIdx + i]) inputs[startIdx + i].value = char;\r\n });\r\n const lastFilled = Math.min(startIdx + text.length - 1, inputs.length - 1);\r\n inputs[lastFilled]?.focus();\r\n };\r\n\r\n container.addEventListener(\"input\", onInput);\r\n container.addEventListener(\"keydown\", onKeydown as EventListener);\r\n container.addEventListener(\"paste\", onPaste as EventListener);\r\n\r\n node.addHook(\"Remove\", () => {\r\n container.removeEventListener(\"input\", onInput);\r\n container.removeEventListener(\"keydown\", onKeydown as EventListener);\r\n container.removeEventListener(\"paste\", onPaste as EventListener);\r\n });\r\n },\r\n };\r\n}\r\n\r\nexport { inputOTP };\r\n","import type { PartialElement } from \"@domphy/core\";\nimport { toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\nfunction alert(props: {\n color?: ValueOrState<ThemeColor>;\n} = {}): PartialElement {\n const color = toState(props.color ?? \"primary\", \"color\");\n\n return {\n role: \"alert\",\n // Alert is a semantic surface block, so it should shift the local surface context.\n dataTone: \"shift-2\",\n style: {\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: themeSpacing(3),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 4),\n boxShadow: (listener) => `inset ${themeSpacing(1)} 0 0 0 ${themeColor(listener, \"shift-8\", color.get(listener))}`,\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n },\n };\n}\n\nexport { alert };\n","import { type PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\nfunction avatar(props: {\n color?: ValueOrState<ThemeColor>;\n} = {}): PartialElement {\n const color = toState(props.color ?? \"primary\", \"color\");\n\n return {\n dataTone: \"shift-2\",\n style: {\n position: \"relative\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n overflow: \"hidden\",\n borderRadius: \"50%\",\n flexShrink: 0,\n width: themeSpacing(9),\n height: themeSpacing(9),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n fontWeight: \"600\",\n userSelect: \"none\",\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n color: (listener) => themeColor(listener, \"shift-11\", color.get(listener)),\n \"& img\": {\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n },\n },\n };\n}\n\nexport { avatar };\n","\nimport { type DomphyElement, type PartialElement, type ValueOrState, toState } from '@domphy/core'\nimport { themeSpacing, themeColor, themeSize, ThemeColor } from \"@domphy/theme\"\n\nfunction badge(props: {\n color?: ValueOrState<ThemeColor>\n label?: ValueOrState<string | number>\n} = {}): PartialElement {\n const { label = 999 } = props\n let state = toState(label)\n const color = toState(props.color ?? \"danger\", \"color\")\n return {\n style: {\n position: \"relative\",\n \"&::after\": {\n content: (l) => `\"${state.get(l)}\"`,\n position: \"absolute\",\n top: 0,\n right: 0,\n transform: \"translate(50%,-50%)\",\n paddingInline:themeSpacing(1),\n minWidth:themeSpacing(6),\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent:\"center\",\n fontSize: (l) => themeSize(l, \"decrease-1\"),\n borderRadius: themeSpacing(999),\n backgroundColor: (l) => themeColor(l, \"shift-9\", color.get(l)),\n color: (l) => themeColor(l, \"shift-0\", color.get(l)),\n }\n }\n }\n}\n\nexport { badge };\n","import type { PartialElement } from \"@domphy/core\";\nimport { toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\nfunction breadcrumb(props: {\n color?: ValueOrState<ThemeColor>;\n separator?: string;\n} = {}): PartialElement {\n const { separator = \"/\" } = props;\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"nav\") console.warn('\"breadcrumb\" patch must use nav tag');\n },\n ariaLabel: \"breadcrumb\",\n style: {\n display: \"flex\",\n alignItems: \"center\",\n flexWrap: \"wrap\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n gap: themeSpacing(1),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n \"& > *\": {\n display: \"inline-flex\",\n alignItems: \"center\",\n color: (listener) => themeColor(listener, \"shift-8\", color.get(listener)),\n },\n \"& > *:not(:last-child)::after\": {\n content: `\"${separator}\"`,\n color: (listener) => themeColor(listener, \"shift-4\", color.get(listener)),\n paddingInlineStart: themeSpacing(1),\n },\n \"& > [aria-current=page]\": {\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n pointerEvents: \"none\",\n },\n },\n };\n}\n\nexport { breadcrumb };\n","import type { PartialElement } from \"@domphy/core\";\nimport { toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\nfunction breadcrumbEllipsis(props: {\n color?: ValueOrState<ThemeColor>;\n} = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"button\") {\n console.warn('\"breadcrumbEllipsis\" patch must use button tag');\n }\n },\n ariaLabel: \"More breadcrumb items\",\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n paddingInline: themeSpacing(1),\n border: \"none\",\n background: \"none\",\n cursor: \"pointer\",\n color: (listener) => themeColor(listener, \"shift-8\", color.get(listener)),\n borderRadius: themeSpacing(1),\n \"&:hover\": {\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color.get(listener)),\n },\n \"&:focus-visible\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", color.get(listener))}`,\n outlineOffset: themeSpacing(0.5),\n },\n },\n };\n}\n\nexport { breadcrumbEllipsis };\n","import { type PartialElement, type DomphyElement, type StyleObject, type ValueOrState, toState, merge } from \"@domphy/core\";\r\nimport { themeSpacing, themeColor, themeDensity, themeSize, type ThemeColor, } from \"@domphy/theme\";\r\nimport { type Placement } from \"@domphy/floating\";\r\nimport { tag } from \"./tag.js\"\r\nimport { creatFloating } from \"../utils/floating.js\"\r\n\r\nfunction combobox(props: {\r\n multiple?: boolean;\r\n value?: ValueOrState<Array<number | string | null | undefined> | number | string | null | undefined>;\r\n options?: Array<{ label: string, value: string }>;\r\n placement?: ValueOrState<Placement>;\r\n content: DomphyElement;\r\n color?: ThemeColor;\r\n open?: ValueOrState<boolean>;\r\n input?: DomphyElement;\r\n}): PartialElement {\r\n const {\r\n options = [],\r\n placement = \"bottom\",\r\n color = \"neutral\",\r\n open = false,\r\n multiple = false\r\n } = props;\r\n\r\n const state = toState(props.value)\r\n let openState = toState(open)\r\n let { show, hide, anchorPartial } = creatFloating({ open: openState, placement: toState(placement), content: props.content })\r\n\r\n const popoverPartial: PartialElement = {\r\n onClick: () => !multiple && hide(),\r\n };\r\n\r\n merge(props.content, popoverPartial);\r\n\r\n const inputStyle: StyleObject = {\r\n border: \"none\",\r\n outline: \"none\",\r\n padding: 0,\r\n margin: 0,\r\n flex: 1,\r\n height: themeSpacing(6),\r\n marginInlineStart: themeSpacing(2),\r\n fontSize: (listener: any) => themeSize(listener, \"inherit\"),\r\n color: (listener: any) => themeColor(listener, \"shift-9\", color),\r\n backgroundColor: (listener: any) => themeColor(listener, \"inherit\", color),\r\n }\r\n\r\n let inputElement: DomphyElement\r\n if (props.input) {\r\n merge(props.input, { onFocus: () => show(), style: inputStyle, _key: \"combobox-input\" })\r\n inputElement = props.input\r\n } else {\r\n inputElement = {\r\n input: null,\r\n onFocus: () => show(),\r\n value: (listener: any) => { state.get(listener); return \"\" },\r\n style: inputStyle,\r\n _key: \"combobox-input\"\r\n }\r\n }\r\n\r\n const wrap: DomphyElement<\"div\"> = {\r\n div: (listener) => {\r\n const val = state.get(listener)\r\n const vals = Array.isArray(val) ? val : [val]\r\n const opts = options.filter(opt => vals.includes(opt.value))\r\n const items: DomphyElement[] = opts.map(opt => {\r\n return {\r\n span: opt.label,\r\n $: [tag({ color, removable: true })],\r\n _key: opt.value,\r\n _onRemove: (_node) => {\r\n const cur = state.get()\r\n const curVals = Array.isArray(cur) ? cur : [cur]\r\n const filter = curVals.filter(v => v !== opt.value)\r\n multiple ? state.set(filter as any) : state.set(filter[0] as any)\r\n }\r\n }\r\n })\r\n items.push(inputElement)\r\n return items\r\n },\r\n style: {\r\n display: \"flex\",\r\n flexWrap: \"wrap\",\r\n gap: themeSpacing(1),\r\n }\r\n }\r\n\r\n let partial: PartialElement = {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"div\") {\r\n console.warn(`\"combobox\" primitive patch must use div tag`);\r\n }\r\n },\r\n _onInit: (node) => node.children.insert(wrap),\r\n style: {\r\n minWidth: themeSpacing(32),\r\n outlineOffset: \"-1px\",\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\r\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\r\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 1),\r\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n color: (listener) => themeColor(listener, \"shift-9\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n }\r\n };\r\n\r\n merge(anchorPartial, partial)\r\n return anchorPartial\r\n}\r\n\r\nexport { combobox };\r\n","import type { PartialElement, DomphyElement } from \"@domphy/core\";\nimport { toState, type ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\nconst xSvg = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M6.707 5.293l5.293 5.292l5.293 -5.292a1 1 0 0 1 1.414 1.414l-5.292 5.293l5.292 5.293a1 1 0 0 1 -1.414 1.414l-5.293 -5.292l-5.293 5.292a1 1 0 1 1 -1.414 -1.414l5.292 -5.293l-5.292 -5.293a1 1 0 0 1 1.414 -1.414\" /></svg>`\n\nfunction tag(props: {\n color?: ValueOrState<ThemeColor>\n removable?: boolean\n} = {}): PartialElement {\n const { removable=false } = props;\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n dataTone: \"shift-2\",\n _onInit: (node) => {\n\n const removeBtn: DomphyElement<\"span\"> = {\n span: xSvg,\n onClick: (e) => { (e as Event).stopPropagation(); node.remove() },\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n cursor: \"pointer\",\n borderRadius: themeSpacing(1),\n width: themeSpacing(4),\n height: themeSpacing(4),\n flexShrink: 0,\n \"&:hover\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-4\", color.get(listener)),\n }\n }\n }\n\n removable && node.children.insert(removeBtn)\n\n },\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n whiteSpace: \"nowrap\",\n userSelect: \"none\",\n height: themeSpacing(6),\n paddingBlock: \"0px\",\n borderRadius: themeSpacing(1),\n paddingInlineStart: themeSpacing(2),\n paddingInlineEnd: removable ? themeSpacing(1) : themeSpacing(2),\n gap: themeSpacing(2),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n },\n };\n}\n\nexport { tag };\n","import { ElementNode, State, PartialElement, DomphyElement, toState, ValueOrState, merge } from \"@domphy/core\";\nimport { computePosition, autoUpdate, offset, flip, shift, type Placement } from \"@domphy/floating\";\n\nfunction creatFloating(props: {\n open?: ValueOrState<boolean>;\n placement: State<Placement>;\n content: DomphyElement;\n}) {\n const {\n open = false,\n placement,\n } = props;\n\n let timer: ReturnType<typeof setTimeout> | null = null;\n let cleanup: (() => void) | null = null;\n let reference: HTMLElement | null = null\n let floating: HTMLElement | null = null\n let floatingNode: ElementNode | null = null\n let rootNode: ElementNode | null = null\n let mounted = false\n const openState = toState(open);\n\n const ensureMounted = () => {\n if (mounted || !rootNode) return\n mounted = true\n floatingNode = rootNode.children!.insert(props.content) as ElementNode\n }\n\n const instantShow = () => {\n ensureMounted()\n if (reference && floating) {\n cleanup && cleanup();\n cleanup = autoUpdate(reference, floating, () => {\n computePosition(reference as HTMLElement, floating as HTMLElement, {\n placement: placement.get() as Placement,\n middleware: [offset(12), flip(), shift()],\n strategy: \"fixed\"\n }).then(({ x, y, placement: resolved }) => {\n Object.assign((floating as HTMLElement).style, { left: `${x}px`, top: `${y}px` });\n placement.set(resolved)\n });\n });\n openState.set(true)\n }\n };\n const instantHide = () => { cleanup && cleanup(); cleanup = null; openState.set(false) }\n const show = () => { timer && clearTimeout(timer); timer = setTimeout(instantShow, 100) }\n const hide = () => { timer && clearTimeout(timer); timer = setTimeout(instantHide, 100) }\n\n const floatingPartial: PartialElement = {\n style: {\n position: \"fixed\",\n pointerEvents: \"auto\",\n visibility: (listener) => openState.get(listener) ? \"visible\" : \"hidden\",\n },\n _onMount: (node) => floating = node.domElement as HTMLElement,\n _portal: (rNode) => {\n let overlay = rNode.domElement!.querySelector(`#domphy-floating`);\n if (!overlay) {\n const overlayEle: DomphyElement<\"div\"> = {\n div: [],\n id: `domphy-floating`,\n style: { position: \"fixed\", inset: 0, zIndex: 20, pointerEvents: \"none\" },\n };\n const overlayNode = rNode.children!.insert(overlayEle) as ElementNode;\n overlay = overlayNode.domElement!;\n }\n return overlay;\n },\n };\n\n merge(props.content, floatingPartial);\n\n const anchorPartial: PartialElement = {\n onKeyDown: (e) => (e as KeyboardEvent).key === \"Escape\" && hide(),\n _onMount: (node) => {\n rootNode = node.getRoot()\n reference = node.domElement as HTMLElement\n\n const handleOutside = (event: MouseEvent) => {\n if (!openState.get() || !reference || !floating) return;\n const target = event.target as Node;\n if (!reference.contains(target) && !floating.contains(target)) {\n hide()\n }\n }\n node.getRoot().domElement!.addEventListener(\"click\", handleOutside)\n\n node.addHook(\"BeforeRemove\", () => {\n if (timer) clearTimeout(timer);\n // Tear down the @domphy/floating autoUpdate loop (scroll/resize/rAF\n // listeners). Without this, removing the anchor while the overlay\n // is open leaks observers that keep positioning a detached node.\n if (cleanup) { cleanup(); cleanup = null; }\n floatingNode && floatingNode.remove();\n node.getRoot().domElement!.removeEventListener(\"click\", handleOutside)\n });\n }\n };\n\n return { show, hide, anchorPartial };\n}\n\nexport { creatFloating };\n","import { toState, ValueOrState, PartialElement } from \"@domphy/core\";\r\nimport { themeSpacing, themeColor, themeSize, type ThemeColor } from \"@domphy/theme\";\r\nimport { type Placement } from \"@domphy/floating\";\r\n\r\nfunction popoverArrow(props: {\r\n placement?: ValueOrState<Placement>;\r\n sideOffset?: string;\r\n color?: ThemeColor;\r\n bordered?: boolean;\r\n\r\n} = {}): PartialElement {\r\n let {\r\n placement = \"bottom-end\",\r\n color = \"neutral\",\r\n sideOffset = themeSpacing(6),\r\n bordered = true\r\n } = props\r\n\r\n let place = toState(placement)\r\n\r\n const flipMap: Record<Placement, Placement> = {\r\n \"top\": \"bottom\",\r\n \"bottom\": \"top\",\r\n \"left\": \"right\",\r\n \"right\": \"left\",\r\n \"top-start\": \"bottom-end\",\r\n \"top-end\": \"bottom-start\",\r\n \"bottom-start\": \"top-end\",\r\n \"bottom-end\": \"top-start\",\r\n \"left-start\": \"right-end\",\r\n \"left-end\": \"right-start\",\r\n \"right-start\": \"left-end\",\r\n \"right-end\": \"left-start\",\r\n }\r\n\r\n const getFlipped = (listener: any) => flipMap[place.get(listener)] ?? flipMap[\"bottom-end\"]\r\n const start = (pos: string) => pos.includes(\"start\") ? sideOffset : pos.includes(\"end\") ? \"auto\" : \"50%\"\r\n const end = (pos: string) => pos.includes(\"end\") ? sideOffset : pos.includes(\"start\") ? \"auto\" : \"50%\"\r\n\r\n return {\r\n style: {\r\n fontSize: (listener) => themeSize(listener),\r\n backgroundColor: (listener) => themeColor(listener),\r\n color: (listener) => themeColor(listener, \"shift-9\", color),\r\n position: \"relative\",\r\n \"&::after\": {\r\n content: `\"\"`,\r\n position: \"absolute\",\r\n width: themeSpacing(1.5),\r\n height: themeSpacing(1.5),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n borderWidth: bordered ? \"1px\" : \"0px\",\r\n borderColor: (listener) => themeColor(listener, \"inherit\", color),\r\n borderTopStyle: (listener) => {\r\n const pos = getFlipped(listener)\r\n\r\n return pos.includes(\"top\") || pos.includes(\"right\") ? `solid` : \"none\"\r\n },\r\n borderBottomStyle: (listener) => {\r\n const pos = getFlipped(listener)\r\n \r\n return pos.includes(\"bottom\") || pos.includes(\"left\") ? `solid` : \"none\"\r\n },\r\n borderLeftStyle: (listener) => {\r\n const pos = getFlipped(listener)\r\n return pos.includes(\"top\") || pos.includes(\"left\") ? `solid` : \"none\"\r\n },\r\n borderRightStyle: (listener) => {\r\n const pos = getFlipped(listener)\r\n return pos.includes(\"bottom\") || pos.includes(\"right\") ? `solid` : \"none\"\r\n },\r\n top: (listener) => {\r\n const pos = getFlipped(listener)\r\n return pos.includes(\"top\") ? 0 : pos.includes(\"bottom\") ? \"auto\" : start(pos)\r\n },\r\n right: (listener) => {\r\n const pos = getFlipped(listener)\r\n return pos.includes(\"right\") ? 0 : pos.includes(\"left\") ? \"auto\" : end(pos)\r\n },\r\n bottom: (listener) => {\r\n const pos = getFlipped(listener)\r\n return pos.includes(\"bottom\") ? 0 : pos.includes(\"top\") ? \"auto\" : end(pos)\r\n },\r\n left: (listener) => {\r\n const pos = getFlipped(listener)\r\n return pos.includes(\"left\") ? 0 : pos.includes(\"right\") ? \"auto\" : start(pos)\r\n },\r\n transform: (listener) => {\r\n const pos = getFlipped(listener)\r\n const x = pos.includes(\"right\") || (pos.includes(\"end\") && !pos.includes(\"left\")) ? \"50%\" : \"-50%\"\r\n const y = pos.includes(\"bottom\") || (pos.includes(\"end\") && !pos.includes(\"top\")) ? \"50%\" : \"-50%\"\r\n return `translate(${x},${y}) rotate(45deg)`\r\n },\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport { popoverArrow }","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\r\nimport { themeSpacing, ThemeColor, themeColor, themeDensity, themeSize } from \"@domphy/theme\";\r\n\r\nfunction blockquote(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\r\n const color = toState(props.color ?? \"inherit\", \"color\");\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"blockquote\") {\r\n console.warn(`\"blockquote\" primitive patch must use blockquote tag`);\r\n }\r\n },\r\n dataTone: \"shift-2\",\r\n style: {\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\r\n boxShadow: (listener) => `inset ${themeSpacing(1)} 0 0 0 ${themeColor(listener, \"shift-4\", color.get(listener))}`,\r\n border: \"none\",\r\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\r\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 4),\r\n margin: 0,\r\n },\r\n };\r\n}\r\n\r\nexport { blockquote };\r\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSize, themeSpacing, type ThemeColor, } from \"@domphy/theme\";\n\nfunction button(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"primary\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"button\") {\n console.warn(`\"button\" primitive patch must use button tag`);\n }\n },\n style: {\n appearance: \"none\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n // Single-line bounded control: block/radius = 1D, inline = 3D.\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\n width: \"fit-content\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n gap: (listener) => themeSpacing(themeDensity(listener) * 1),\n userSelect: \"none\",\n fontFamily: \"inherit\",\n lineHeight: \"inherit\",\n border: \"none\",\n outlineOffset: \"-1px\",\n outlineWidth: \"1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n \"&:hover:not([disabled]):not([aria-busy=true])\": {\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color.get(listener)),\n },\n \"&:focus-visible\": {\n boxShadow: (listener) => `inset 0 0 0 ${themeSpacing(0.5)} ${themeColor(listener, \"shift-6\", color.get(listener))}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", \"neutral\"),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n },\n \"&[aria-busy=true]\": {\n opacity: 0.7,\n cursor: \"wait\",\n pointerEvents: \"none\",\n },\n },\n };\n}\n\nexport { button };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSpacing, ThemeColor, themeSize } from \"@domphy/theme\";\n\nfunction inputCheckbox(props: { color?: ValueOrState<ThemeColor>, accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: \"checkbox\",\n _onInsert: (node) => {\n if (node.tagName !== \"input\") {\n console.warn(`\"inputCheckbox\" primitive patch must use input tag`);\n }\n },\n style: {\n appearance: \"none\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n display: \"inline-flex\",\n position: \"relative\",\n width: themeSpacing(6),\n height: themeSpacing(6),\n justifyContent: \"center\",\n alignItems: \"center\",\n transition: \"background-color 300ms, outline-color 300ms\",\n margin: 0,\n padding: 0,\n \"&::before\": {\n content: `\"\"`,\n display: \"block\",\n borderRadius: themeSpacing(1),\n lineHeight: 1,\n cursor: \"pointer\",\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n width: themeSpacing(4),\n height: themeSpacing(4),\n },\n \"&:hover::before\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color.get(listener)),\n },\n \"&:checked::before\": {\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n backgroundColor: (listener) => themeColor(listener, \"shift-8\", accentColor.get(listener)),\n },\n \"&:checked:hover:not([disabled])::before\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-7\", accentColor.get(listener)),\n },\n \"&:checked::after\": {\n content: `\"\"`,\n display: \"block\",\n position: \"absolute\",\n top: \"25%\",\n insetInlineStart: \"37%\",\n width: \"20%\",\n height: \"30%\",\n border: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"inherit\", accentColor.get(listener))}`,\n borderTop: 0,\n borderInlineStart: 0,\n transform: \"rotate(45deg)\",\n },\n \"&:indeterminate::before\": {\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", accentColor.get(listener)),\n },\n \"&:indeterminate::after\": {\n content: `\"\"`,\n position: \"absolute\",\n inset: \"30%\",\n backgroundColor: (listener) => themeColor(listener, \"shift-8\", accentColor.get(listener)),\n },\n \"&:indeterminate:hover:not([disabled])::after\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-7\", accentColor.get(listener)),\n },\n \"&:focus-visible\": {\n borderRadius: themeSpacing(1.5),\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&[disabled]\": {\n cursor: \"not-allowed\",\n },\n \"&[disabled]::before, &[disabled]::after\": {\n outline: \"none\",\n backgroundColor: (listener) => themeColor(listener, \"shift-4\", \"neutral\"),\n pointerEvents: \"none\",\n },\n }\n }\n}\n\nexport { inputCheckbox };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeSpacing, themeColor, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction code(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n dataTone: \"shift-2\",\n _onInsert: (node) => {\n if (node.tagName != \"code\") {\n console.warn(`\"code\" primitive patch must use code tag`);\n }\n },\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n height: themeSpacing(6),\n paddingInline: themeSpacing(1.5),\n borderRadius: themeSpacing(1),\n },\n };\n}\n\nexport { code };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction details(\n props: { color?: ValueOrState<ThemeColor>; accentColor?: ValueOrState<ThemeColor>; duration?: number } = {}\n): PartialElement {\n const { duration = 240 } = props;\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"details\") {\n console.warn(`\"details\" primitive patch must use details tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n\n overflow: \"hidden\",\n \"& > summary\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color.get(listener)),\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n listStyle: \"none\",\n display: \"flex\",\n justifyContent:\"space-between\",\n alignItems: \"center\",\n gap: themeSpacing(2),\n cursor: \"pointer\",\n userSelect: \"none\",\n fontWeight: 500,\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 4),\n height: themeSpacing(10),\n },\n \"& > summary::-webkit-details-marker\": {\n display: \"none\",\n },\n \"& > summary::marker\": {\n content: `\"\"`,\n },\n \"& > summary::after\": {\n content: `\"\"`,\n width: themeSpacing(2),\n height: themeSpacing(2),\n flexShrink: 0,\n marginTop: `-${themeSpacing(0.5)}`,\n borderInlineEnd: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-9\", color.get(listener))}`,\n borderBottom: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-9\", color.get(listener))}`,\n transform: \"rotate(45deg)\",\n transition: `transform ${duration}ms ease`,\n },\n \"&[open] > summary::after\": {\n transform: \"rotate(-135deg)\",\n },\n \"& > summary:hover\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", color.get(listener)),\n },\n \"& > summary:focus-visible\": {\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 2),\n outlineOffset: `-${themeSpacing(0.5)}`,\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"& > :not(summary)\": {\n maxHeight: \"0px\",\n opacity: 0,\n overflow: \"hidden\",\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingTop: 0,\n paddingBottom: 0,\n transition: `max-height ${duration}ms ease, opacity ${duration}ms ease, padding ${duration}ms ease`,\n },\n \"&[open] > :not(summary)\": {\n maxHeight: themeSpacing(250),\n opacity: 1,\n paddingTop: (listener) => themeSpacing(themeDensity(listener) * 1),\n paddingBottom: (listener) => themeSpacing(themeDensity(listener) * 3),\n },\n },\n };\n}\n\nexport { details };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction descriptionList(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"dl\") {\n console.warn(`\"descriptionList\" primitive patch must use dl tag`);\n }\n },\n style: {\n display: \"grid\",\n gridTemplateColumns: `minmax(${themeSpacing(24)}, max-content) 1fr`,\n columnGap: themeSpacing(4),\n margin: 0,\n \"& dt\": {\n margin: 0,\n fontWeight: 600,\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n },\n \"& dd\": {\n margin: 0,\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n },\n },\n };\n}\n\nexport { descriptionList };\n","import { type PartialElement, type ValueOrState, toState } from \"@domphy/core\";\r\nimport { themeColor, themeDensity, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction dialog(props: { color?: ThemeColor; open?: ValueOrState<boolean> } = {}): PartialElement {\r\n const { color = \"neutral\", open = false } = props;\r\n const state = toState(open)\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"dialog\") {\r\n console.warn(`\"dialog\" primitive patch must use dialog tag`);\r\n }\r\n },\r\n onClick: (e: MouseEvent, node) => {\r\n if (e.target !== node.domElement) return\r\n const r = node.domElement!.getBoundingClientRect()\r\n const inside =\r\n e.clientX >= r.left &&\r\n e.clientX <= r.right &&\r\n e.clientY >= r.top &&\r\n e.clientY <= r.bottom\r\n if (!inside) state.set(false)\r\n },\r\n onTransitionEnd: (_e, node) => {\r\n const dlg = node.domElement as HTMLDialogElement\r\n if (dlg.style.opacity === \"0\") {\r\n dlg.close()\r\n document.body.style.overflow = \"\"\r\n }\r\n },\r\n _onMount: (node) => {\r\n const dlg = node.domElement as HTMLDialogElement\r\n const update = (val: boolean) => {\r\n if (val) {\r\n dlg.showModal()\r\n document.body.style.overflow = \"hidden\"\r\n requestAnimationFrame(() => {\r\n dlg.style.opacity = \"1\"\r\n const focusable = dlg.querySelector<HTMLElement>(\r\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\r\n )\r\n focusable?.focus()\r\n })\r\n } else {\r\n dlg.style.opacity = \"0\"\r\n }\r\n }\r\n update(state.get())\r\n const release = state.addListener(update)\r\n // Release the listener on the user-provided `open` State and always\r\n // restore page scroll on removal — otherwise removing an open dialog\r\n // leaks the listener and leaves document.body locked at overflow:hidden.\r\n node.addHook(\"Remove\", () => {\r\n release()\r\n document.body.style.overflow = \"\"\r\n })\r\n },\r\n style: {\r\n opacity: \"0\",\r\n transition: \"opacity 200ms ease\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n color: (listener) => themeColor(listener, \"shift-10\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n border: \"none\",\r\n padding: (listener) => themeSpacing(themeDensity(listener) * 3),\r\n boxShadow: (listener) => `0 ${themeSpacing(9)} ${themeSpacing(16)} ${themeColor(listener, \"shift-4\", \"neutral\")}`,\r\n \"&::backdrop\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", \"neutral\"),\r\n opacity: 0.75,\r\n }\r\n },\r\n };\r\n}\r\n\r\nexport { dialog };\r\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction emphasis(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"em\") {\n console.warn(`\"emphasis\" primitive patch must use em tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n fontStyle: \"italic\",\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n },\n };\n}\n\nexport { emphasis };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction figure(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"figure\") {\n console.warn(`\"figure\" primitive patch must use figure tag`);\n }\n },\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: themeSpacing(2),\n marginInline: 0,\n marginTop: themeSpacing(3),\n marginBottom: themeSpacing(3),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n \"& img, & svg, & video, & canvas\": {\n display: \"block\",\n maxWidth: \"100%\",\n borderRadius: themeSpacing(2),\n },\n \"& figcaption\": {\n fontSize: (listener) => themeSize(listener, \"decrease-1\"),\n color: (listener) => themeColor(listener, \"shift-8\", color.get(listener)),\n lineHeight: 1.45,\n },\n },\n };\n}\n\nexport { figure };\n","import { type PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSpacing, themeSize, type ThemeColor } from \"@domphy/theme\";\n\nfunction formGroup(props: { color?: ValueOrState<ThemeColor>; layout?: \"horizontal\" | \"vertical\" } = {}): PartialElement {\n const { layout = \"horizontal\" } = props;\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n const isVertical = layout === \"vertical\";\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"fieldset\") {\n console.warn(`\"formGroup\" patch must use fieldset tag`);\n }\n },\n style: {\n margin: 0,\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 3),\n border: \"none\",\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 2),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n display: \"grid\",\n gridTemplateColumns: isVertical ? `minmax(0, 1fr)` : `max-content minmax(0, 1fr)`,\n columnGap: themeSpacing(4),\n rowGap: themeSpacing(3),\n alignItems: \"start\",\n \"& > legend\": {\n gridColumn: \"1 / -1\",\n margin: 0,\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n fontWeight: 600,\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 2),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n },\n \"& > label\": {\n gridColumn: \"1\",\n alignSelf: \"start\",\n margin: 0,\n paddingBlock: (listener) => isVertical ? \"0px\" : themeSpacing(themeDensity(listener) * 1),\n },\n \"& > label:has(+ :not(legend, label, p) + p)\": {\n gridRow: isVertical ? \"auto\" : \"span 2\",\n },\n \"& > :not(legend, label, p)\": {\n gridColumn: isVertical ? \"1\" : \"2\",\n minWidth: 0,\n width: \"100%\",\n boxSizing: \"border-box\",\n },\n \"& > p\": {\n gridColumn: isVertical ? \"1\" : \"2\",\n minWidth: 0,\n margin: 0,\n marginBlockStart: `calc(${themeSpacing(2)} * -1)`,\n fontSize: (listener) => themeSize(listener, \"decrease-1\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n },\n },\n };\n}\n\nexport { formGroup };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nconst Headinghift: Record<string, string> = {\n h6: \"decrease-1\",\n h5: \"inherit\",\n h4: \"increase-1\",\n h3: \"increase-2\",\n h2: \"increase-3\",\n h1: \"increase-4\",\n}\n\nfunction heading(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (![\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"].includes(node.tagName)) {\n console.warn(`\"heading\" primitive patch must use heading tags [h1...h6]`);\n }\n },\n style: {\n color: (listener) => themeColor(listener, \"shift-11\", color.get(listener)),\n marginTop: 0,\n marginBottom: themeSpacing(2),\n fontSize: (listener) => {\n const offset = Headinghift[listener.elementNode.tagName] || \"inherit\";\n return themeSize(listener, offset);\n },\n },\n };\n}\n\nexport { heading };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction horizontalRule(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"hr\") {\n console.warn(`\"horizontalRule\" primitive patch must use hr tag`);\n }\n },\n style: {\n border: 0,\n height: \"1px\",\n marginInline: 0,\n marginTop: themeSpacing(3),\n marginBottom: themeSpacing(3),\n backgroundColor: (listener) => themeColor(listener, \"shift-4\", color.get(listener)),\n },\n };\n}\n\nexport { horizontalRule };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction image(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n dataTone: \"shift-2\",\n _onInsert: (node) => {\n if (node.tagName != \"img\") {\n console.warn(`\"image\" primitive patch must use img tag`);\n }\n },\n style: {\n display: \"block\",\n width: \"100%\",\n maxWidth: \"100%\",\n height: \"auto\",\n objectFit: \"cover\",\n borderRadius: themeSpacing(2),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n },\n };\n}\n\nexport { image };\n","import type { PartialElement } from \"@domphy/core\";\nimport { toState, ValueOrState } from \"@domphy/core\";\nimport { themeSpacing, themeColor, themeSize, type ThemeColor } from \"@domphy/theme\";\n\nfunction icon(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n return {\n _onInsert: (node) => {\n if (node.tagName != \"span\") {\n console.warn(`\"icon\" primitive patch should use span tag`);\n }\n },\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n alignSelf: \"center\",\n justifySelf: \"center\",\n verticalAlign: \"middle\",\n width: themeSpacing(4),\n height: themeSpacing(4),\n flexShrink: \"0\",\n fontSize: (listener) => themeSize(listener),\n backgroundColor: \"transparent\",\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener))\n },\n };\n}\n\nexport { icon };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSpacing, themeSize, type ThemeColor } from \"@domphy/theme\";\n\nfunction inputColor(props: { color?: ValueOrState<ThemeColor>; accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: \"color\",\n _onSchedule: (node, element) => {\n if (node.tagName != \"input\") {\n console.warn(`\"inputColor\" primitive patch must use input tag`);\n }\n (element as any).type = \"color\";\n },\n style: {\n appearance: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 1),\n blockSize: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\n inlineSize: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\n backgroundColor: \"transparent\",\n \"&::-webkit-color-swatch-wrapper\": {\n margin: 0,\n padding: 0,\n },\n \"&::-webkit-color-swatch\": {\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\n },\n \"&:hover:not([disabled]), &:focus-visible\": {\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", \"neutral\"),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n },\n },\n };\n}\n\nexport { inputColor };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\n\ntype InputDateTimeMode = \"date\" | \"time\" | \"week\" | \"month\" | \"datetime-local\";\n\nfunction inputDateTime(\n props: { mode?: InputDateTimeMode; color?: ValueOrState<ThemeColor>; accentColor?: ValueOrState<ThemeColor> } = {}\n): PartialElement {\n const { mode = \"datetime-local\" } = props;\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: mode,\n _onSchedule: (node, element) => {\n if (node.tagName != \"input\") {\n console.warn(`\"inputDateTime\" primitive patch must use input tag`);\n }\n (element as any).type = mode;\n },\n style: {\n fontFamily: \"inherit\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n lineHeight: \"inherit\",\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n height: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\n \"&::-webkit-calendar-picker-indicator\": {\n cursor: \"pointer\",\n opacity: 0.85,\n },\n \"&:hover:not([disabled]):not([aria-busy=true]), &:focus-visible\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", \"neutral\"),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n },\n \"&:invalid\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", \"error\")}`,\n },\n },\n };\n}\n\nexport { inputDateTime };\n","import {\n type DomphyElement,\n merge,\n type PartialElement,\n toState,\n type ValueOrState,\n} from \"@domphy/core\";\nimport { type Placement } from \"@domphy/floating\";\nimport {\n type ThemeColor,\n themeColor,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\nimport { creatFloating } from \"../utils/floating.js\";\n\n\n/** A single date selection, or a `[start, end]` tuple in range mode. */\nexport type DatePickerValue = Date | null | [Date | null, Date | null];\n\nexport interface DatePickerProps {\n /** Controlled value: a `Date` in single mode, a `[start, end]` tuple in range mode. */\n value?: ValueOrState<DatePickerValue>;\n /** Selection mode. */\n mode?: \"single\" | \"range\";\n /** Also pick hour + minute. The chosen time applies to the selected date(s). */\n time?: boolean;\n /** Earliest selectable day (inclusive). */\n min?: Date;\n /** Latest selectable day (inclusive). */\n max?: Date;\n /** Disable arbitrary days. */\n disabledDate?: (date: Date) => boolean;\n /** BCP-47 locale for month/weekday names, first-day-of-week, and formatting. */\n locale?: string;\n /** Override the first day of the week (0 = Sunday … 6 = Saturday). */\n weekStartsOn?: number;\n /** Override the input display string. */\n format?: (value: DatePickerValue) => string;\n /** Called whenever the selection changes. */\n onChange?: (value: DatePickerValue) => void;\n /** Accent color for the selected/active days. */\n accentColor?: ValueOrState<ThemeColor>;\n /** Popover placement relative to the input. */\n placement?: ValueOrState<Placement>;\n}\n\n// --- date helpers (no third-party library) -----------------------------------\n\nconst atMidnight = (date: Date): Date =>\n new Date(date.getFullYear(), date.getMonth(), date.getDate());\nconst addDays = (date: Date, count: number): Date =>\n new Date(date.getFullYear(), date.getMonth(), date.getDate() + count);\nconst addMonths = (date: Date, count: number): Date =>\n new Date(date.getFullYear(), date.getMonth() + count, date.getDate());\nconst sameDay = (a: Date | null, b: Date | null): boolean =>\n !!a &&\n !!b &&\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate();\nconst isoOf = (date: Date): string =>\n `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, \"0\")}-${String(\n date.getDate(),\n ).padStart(2, \"0\")}`;\nconst startOfWeek = (date: Date, weekStart: number): Date =>\n addDays(date, -((date.getDay() - weekStart + 7) % 7));\n\n/** Resolves the locale's first day of week, falling back to Sunday. */\nfunction localeWeekStart(locale: string): number {\n try {\n const localeObject = new Intl.Locale(locale) as Intl.Locale & {\n weekInfo?: { firstDay: number };\n getWeekInfo?: () => { firstDay: number };\n };\n const info = localeObject.getWeekInfo?.() ?? localeObject.weekInfo;\n if (info?.firstDay) return info.firstDay % 7; // Intl uses 1=Mon … 7=Sun\n } catch {\n // unsupported locale or engine — fall through to Sunday\n }\n return 0;\n}\n\n/**\n * A native, themeable date picker patch for an `<input>`. Opens a calendar\n * popover (rendered with Domphy elements, positioned via `@domphy/floating`)\n * supporting single/range selection, optional time, min/max + disabled days,\n * localized names, and keyboard navigation. The input is read-only and shows the\n * formatted selection; compose with `inputText()` for the input's look.\n */\nfunction datePicker(props: DatePickerProps = {}): PartialElement {\n const {\n mode = \"single\",\n time = false,\n min,\n max,\n disabledDate,\n locale = typeof navigator !== \"undefined\" ? navigator.language : \"en-US\",\n format,\n onChange,\n } = props;\n\n const weekStart = props.weekStartsOn ?? localeWeekStart(locale);\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n const placeState = toState(props.placement ?? \"bottom-start\");\n\n const selection = toState<DatePickerValue>(\n props.value ?? (mode === \"range\" ? [null, null] : null),\n );\n if (onChange) selection.addListener((value) => onChange(value));\n\n const primaryDate = ((): Date => {\n const current = selection.get();\n const base = mode === \"range\" ? (current as [Date | null, Date | null])?.[0] : current;\n return base instanceof Date ? base : new Date();\n })();\n\n const viewYear = toState(primaryDate.getFullYear(), \"viewYear\");\n const viewMonth = toState(primaryDate.getMonth(), \"viewMonth\");\n const focused = toState<Date>(atMidnight(primaryDate), \"focused\");\n const hovered = toState<Date | null>(null, \"hovered\");\n const hour = toState(primaryDate.getHours(), \"hour\");\n const minute = toState(primaryDate.getMinutes(), \"minute\");\n\n let contentElement: HTMLElement | null = null;\n\n // --- formatting -----------------------------------------------------------\n const dateFormatter = new Intl.DateTimeFormat(locale, {\n dateStyle: \"medium\",\n ...(time ? { timeStyle: \"short\" as const } : {}),\n });\n const monthFormatter = new Intl.DateTimeFormat(locale, {\n month: \"long\",\n year: \"numeric\",\n });\n const weekdayFormatter = new Intl.DateTimeFormat(locale, { weekday: \"short\" });\n const fullDateFormatter = new Intl.DateTimeFormat(locale, { dateStyle: \"full\" });\n\n const formatOne = (date: Date | null): string =>\n date ? dateFormatter.format(date) : \"\";\n const formatDisplay = (value: DatePickerValue): string => {\n if (format) return format(value);\n if (mode === \"range\") {\n const [start, end] = (value as [Date | null, Date | null]) ?? [null, null];\n return start ? `${formatOne(start)} – ${formatOne(end)}` : \"\";\n }\n return formatOne(value as Date | null);\n };\n\n // 2023-01-01 is a Sunday, so index 0 maps to Sunday before the week-start shift.\n const weekdayNames = Array.from({ length: 7 }, (_unused, index) =>\n weekdayFormatter.format(new Date(2023, 0, 1 + ((index + weekStart) % 7))),\n );\n\n // --- selection logic ------------------------------------------------------\n const isDisabled = (date: Date): boolean =>\n (!!min && atMidnight(date) < atMidnight(min)) ||\n (!!max && atMidnight(date) > atMidnight(max)) ||\n (!!disabledDate && disabledDate(date));\n\n const withTime = (date: Date): Date => {\n if (!time) return atMidnight(date);\n const result = atMidnight(date);\n result.setHours(hour.get(), minute.get(), 0, 0);\n return result;\n };\n\n const selectDate = (date: Date): void => {\n if (isDisabled(date)) return;\n if (mode === \"single\") {\n selection.set(withTime(date));\n if (!time) instantHideRef();\n return;\n }\n const [start, end] = (selection.get() as [Date | null, Date | null]) ?? [\n null,\n null,\n ];\n if (!start || (start && end)) {\n selection.set([withTime(date), null]);\n } else if (atMidnight(date) < atMidnight(start)) {\n selection.set([withTime(date), withTime(start)]);\n if (!time) instantHideRef();\n } else {\n selection.set([start, withTime(date)]);\n if (!time) instantHideRef();\n }\n };\n\n const reapplyTime = (): void => {\n if (!time) return;\n if (mode === \"single\") {\n const current = selection.get() as Date | null;\n if (current) selection.set(withTime(current));\n } else {\n const [start, end] = (selection.get() as [Date | null, Date | null]) ?? [\n null,\n null,\n ];\n selection.set([start ? withTime(start) : start, end ? withTime(end) : end]);\n }\n };\n\n const inSelectedRange = (date: Date, listener?: any): boolean => {\n if (mode !== \"range\") return false;\n const [start, end] = (selection.get(listener) as [\n Date | null,\n Date | null,\n ]) ?? [null, null];\n const tail = end ?? hovered.get(listener);\n if (!start || !tail) return false;\n const low = atMidnight(start) <= atMidnight(tail) ? start : tail;\n const high = atMidnight(start) <= atMidnight(tail) ? tail : start;\n const day = atMidnight(date);\n return day >= atMidnight(low) && day <= atMidnight(high);\n };\n\n const isSelectedEnd = (date: Date, listener?: any): boolean => {\n const current = selection.get(listener);\n if (mode === \"range\") {\n const [start, end] = (current as [Date | null, Date | null]) ?? [null, null];\n return sameDay(date, start) || sameDay(date, end);\n }\n return sameDay(date, current as Date | null);\n };\n\n // --- view navigation ------------------------------------------------------\n const goToDate = (date: Date): void => {\n viewYear.set(date.getFullYear());\n viewMonth.set(date.getMonth());\n };\n const shiftMonth = (delta: number): void => {\n const next = addMonths(new Date(viewYear.get(), viewMonth.get(), 1), delta);\n goToDate(next);\n };\n const shiftYear = (delta: number): void => viewYear.set(viewYear.get() + delta);\n\n const focusActiveCell = (): void => {\n setTimeout(() => {\n contentElement\n ?.querySelector<HTMLElement>(`[data-date=\"${isoOf(focused.get())}\"]`)\n ?.focus();\n }, 0);\n };\n\n // --- floating popover ------------------------------------------------------\n const calendar = buildCalendar();\n const { show, hide, anchorPartial } = creatFloating({\n open: false,\n placement: placeState,\n content: calendar,\n });\n // selectDate calls this before `creatFloating` returns `hide`, so route through a ref.\n function instantHideRef(): void {\n hide();\n }\n\n // Move focus into the grid when the popover opens.\n anchorPartial.onClick = () => {};\n const triggerPartial: PartialElement = {\n type: \"text\",\n readonly: true,\n value: (listener) => formatDisplay(selection.get(listener)),\n ariaHaspopup: \"dialog\",\n ariaLabel: \"Choose date\",\n style: { cursor: \"pointer\" },\n onClick: () => {\n openAndFocus();\n },\n onFocus: () => {\n openAndFocus();\n },\n onKeyDown: (event) => {\n const key = (event as KeyboardEvent).key;\n if (key === \"ArrowDown\" || key === \"Enter\") {\n event.preventDefault();\n openAndFocus();\n }\n },\n };\n function openAndFocus(): void {\n const current = isSelectedPrimary() ?? new Date();\n focused.set(atMidnight(current));\n goToDate(current);\n show();\n focusActiveCell();\n }\n function isSelectedPrimary(): Date | null {\n const current = selection.get();\n if (mode === \"range\")\n return (current as [Date | null, Date | null])?.[0] ?? null;\n return (current as Date | null) ?? null;\n }\n merge(anchorPartial, triggerPartial);\n return anchorPartial;\n\n // --- calendar builder -----------------------------------------------------\n function buildCalendar(): DomphyElement<\"div\"> {\n const navButton = (label: string, ariaLabel: string, onClick: () => void) =>\n ({\n button: label,\n type: \"button\",\n ariaLabel,\n onClick,\n style: navButtonStyle(),\n }) as DomphyElement;\n\n const header: DomphyElement<\"div\"> = {\n div: [\n navButton(\"«\", \"Previous year\", () => shiftYear(-1)),\n navButton(\"‹\", \"Previous month\", () => shiftMonth(-1)),\n {\n div: (listener) =>\n monthFormatter.format(\n new Date(viewYear.get(listener), viewMonth.get(listener), 1),\n ),\n ariaLive: \"polite\",\n style: {\n flex: \"1\",\n textAlign: \"center\",\n fontWeight: \"600\",\n fontSize: (listener) => themeSize(listener),\n },\n },\n navButton(\"›\", \"Next month\", () => shiftMonth(1)),\n navButton(\"»\", \"Next year\", () => shiftYear(1)),\n ],\n style: {\n display: \"flex\",\n alignItems: \"center\",\n gap: themeSpacing(1),\n marginBottom: themeSpacing(2),\n },\n };\n\n const weekdayHeader: DomphyElement<\"div\"> = {\n div: weekdayNames.map((name, index) => ({\n div: name,\n style: {\n textAlign: \"center\",\n fontSize: (listener) => themeSize(listener, \"decrease-1\"),\n fontWeight: \"600\",\n color: (listener) => themeColor(listener, \"shift-7\"),\n paddingBlock: themeSpacing(1),\n },\n _key: index,\n })),\n role: \"row\",\n style: gridRowStyle(),\n };\n\n const grid: DomphyElement<\"div\"> = {\n div: (listener) => buildWeeks(listener),\n role: \"grid\",\n ariaLabel: \"Calendar\",\n onKeyDown: onGridKey,\n onMouseLeave: () => mode === \"range\" && hovered.set(null),\n style: { display: \"flex\", flexDirection: \"column\", gap: themeSpacing(0.5) },\n };\n\n const children: DomphyElement[] = [header, weekdayHeader, grid];\n if (time) children.push(buildTimeRow());\n children.push(buildFooter());\n\n return {\n div: children,\n role: \"dialog\",\n ariaModal: \"false\",\n _onMount: (node) => {\n contentElement = node.domElement as HTMLElement;\n },\n style: {\n minWidth: themeSpacing(70),\n padding: themeSpacing(3),\n borderRadius: themeSpacing(2),\n backgroundColor: (listener) => themeColor(listener, \"base\"),\n color: (listener) => themeColor(listener, \"shift-10\"),\n border: (listener) => `1px solid ${themeColor(listener, \"shift-4\")}`,\n boxShadow: \"0 8px 24px rgba(0,0,0,0.18)\",\n },\n };\n }\n\n function buildWeeks(listener: any): DomphyElement[] {\n const first = new Date(viewYear.get(listener), viewMonth.get(listener), 1);\n const month = viewMonth.get(listener);\n const start = startOfWeek(first, weekStart);\n const weeks: DomphyElement[] = [];\n for (let week = 0; week < 6; week++) {\n const cells: DomphyElement[] = [];\n for (let day = 0; day < 7; day++) {\n const date = addDays(start, week * 7 + day);\n cells.push(buildDayCell(date, month, listener));\n }\n weeks.push({ div: cells, role: \"row\", style: gridRowStyle(), _key: week });\n }\n return weeks;\n }\n\n function buildDayCell(\n date: Date,\n month: number,\n listener: any,\n ): DomphyElement {\n const disabled = isDisabled(date);\n const selected = isSelectedEnd(date, listener);\n const within = inSelectedRange(date, listener);\n const outside = date.getMonth() !== month;\n const isFocused = sameDay(date, focused.get(listener));\n const isToday = sameDay(date, new Date());\n\n return {\n button: String(date.getDate()),\n type: \"button\",\n role: \"gridcell\",\n tabIndex: isFocused ? 0 : -1,\n ariaSelected: selected,\n ariaDisabled: disabled,\n disabled,\n ariaLabel: fullDateFormatter.format(date),\n dataDate: isoOf(date),\n onClick: () => selectDate(date),\n onMouseEnter: () => mode === \"range\" && hovered.set(date),\n style: {\n appearance: \"none\",\n border: \"none\",\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n aspectRatio: \"1\",\n borderRadius: themeSpacing(1),\n fontSize: (l: any) => themeSize(l),\n fontFamily: \"inherit\",\n opacity: disabled ? 0.35 : outside ? 0.5 : 1,\n backgroundColor: (l: any) =>\n selected\n ? themeColor(l, \"shift-7\", accentColor.get(l))\n : within\n ? themeColor(l, \"shift-2\", accentColor.get(l))\n : \"transparent\",\n color: (l: any) =>\n selected\n ? themeColor(l, \"shift-0\", accentColor.get(l))\n : themeColor(l, \"shift-9\"),\n outline: isToday\n ? (l: any) => `1px solid ${themeColor(l, \"shift-6\", accentColor.get(l))}`\n : \"none\",\n outlineOffset: \"-2px\",\n \"&:hover:not([disabled])\": {\n backgroundColor: (l: any) =>\n selected\n ? themeColor(l, \"shift-7\", accentColor.get(l))\n : themeColor(l, \"shift-3\", accentColor.get(l)),\n },\n \"&:focus-visible\": {\n outline: (l: any) =>\n `2px solid ${themeColor(l, \"shift-6\", accentColor.get(l))}`,\n },\n },\n _key: isoOf(date),\n } as DomphyElement;\n }\n\n function buildTimeRow(): DomphyElement<\"div\"> {\n const numberSelect = (\n count: number,\n state: ReturnType<typeof toState<number>>,\n ariaLabel: string,\n ): DomphyElement => ({\n select: Array.from({ length: count }, (_unused, value) => ({\n option: String(value).padStart(2, \"0\"),\n value: String(value),\n selected: (listener) => state.get(listener) === value,\n _key: value,\n })) as DomphyElement[],\n ariaLabel,\n onChange: (event) => {\n state.set(Number((event.target as HTMLSelectElement).value));\n reapplyTime();\n },\n style: timeSelectStyle(),\n });\n\n return {\n div: [\n numberSelect(24, hour, \"Hour\"),\n { span: \":\", style: { fontWeight: \"600\" } },\n numberSelect(60, minute, \"Minute\"),\n ],\n style: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: themeSpacing(1),\n marginTop: themeSpacing(3),\n },\n };\n }\n\n function buildFooter(): DomphyElement<\"div\"> {\n const action = (label: string, onClick: () => void): DomphyElement => ({\n button: label,\n type: \"button\",\n onClick,\n style: {\n appearance: \"none\",\n border: \"none\",\n background: \"transparent\",\n cursor: \"pointer\",\n fontFamily: \"inherit\",\n fontSize: (l: any) => themeSize(l, \"decrease-1\"),\n color: (l: any) => themeColor(l, \"shift-8\", accentColor.get(l)),\n padding: themeSpacing(1),\n },\n });\n return {\n div: [\n action(\"Today\", () => {\n const today = new Date();\n focused.set(atMidnight(today));\n goToDate(today);\n focusActiveCell();\n }),\n action(\"Clear\", () => {\n selection.set(mode === \"range\" ? [null, null] : null);\n hovered.set(null);\n }),\n ],\n style: {\n display: \"flex\",\n justifyContent: \"space-between\",\n marginTop: themeSpacing(2),\n paddingTop: themeSpacing(2),\n borderTop: (l: any) => `1px solid ${themeColor(l, \"shift-3\")}`,\n },\n };\n }\n\n function onGridKey(event: Event): void {\n const keyboard = event as KeyboardEvent;\n const current = focused.get();\n let next: Date | null = null;\n switch (keyboard.key) {\n case \"ArrowLeft\":\n next = addDays(current, -1);\n break;\n case \"ArrowRight\":\n next = addDays(current, 1);\n break;\n case \"ArrowUp\":\n next = addDays(current, -7);\n break;\n case \"ArrowDown\":\n next = addDays(current, 7);\n break;\n case \"Home\":\n next = startOfWeek(current, weekStart);\n break;\n case \"End\":\n next = addDays(startOfWeek(current, weekStart), 6);\n break;\n case \"PageUp\":\n next = addMonths(current, keyboard.shiftKey ? -12 : -1);\n break;\n case \"PageDown\":\n next = addMonths(current, keyboard.shiftKey ? 12 : 1);\n break;\n case \"Enter\":\n case \" \":\n keyboard.preventDefault();\n selectDate(current);\n return;\n default:\n return;\n }\n keyboard.preventDefault();\n focused.set(next);\n goToDate(next);\n focusActiveCell();\n }\n}\n\n// --- shared style fragments --------------------------------------------------\n\nfunction gridRowStyle() {\n return { display: \"grid\", gridTemplateColumns: \"repeat(7, 1fr)\", gap: themeSpacing(0.5) };\n}\n\nfunction navButtonStyle() {\n return {\n appearance: \"none\" as const,\n border: \"none\",\n background: \"transparent\",\n cursor: \"pointer\",\n fontFamily: \"inherit\",\n fontSize: (l: any) => themeSize(l),\n color: (l: any) => themeColor(l, \"shift-8\"),\n width: themeSpacing(7),\n height: themeSpacing(7),\n borderRadius: themeSpacing(1),\n \"&:hover\": {\n backgroundColor: (l: any) => themeColor(l, \"shift-3\"),\n },\n };\n}\n\nfunction timeSelectStyle() {\n return {\n fontFamily: \"inherit\",\n fontSize: (l: any) => themeSize(l),\n padding: themeSpacing(1),\n borderRadius: themeSpacing(1),\n border: (l: any) => `1px solid ${themeColor(l, \"shift-4\")}`,\n backgroundColor: (l: any) => themeColor(l, \"base\"),\n color: (l: any) => themeColor(l, \"shift-9\"),\n };\n}\n\nexport { datePicker };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction inputFile(props: { color?: ValueOrState<ThemeColor>; accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: \"file\",\n _onSchedule: (node, element) => {\n if (node.tagName != \"input\") {\n console.warn(`\"inputFile\" primitive patch must use input tag`);\n }\n (element as any).type = \"file\";\n },\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n fontFamily: \"inherit\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n lineHeight: \"inherit\",\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\n height: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 1),\n \"&::-webkit-file-upload-button\": {\n marginTop: (listener) => themeSpacing(themeDensity(listener)),\n fontFamily: \"inherit\",\n fontSize: \"inherit\",\n border: \"none\",\n borderRadius: themeSpacing(1),\n height: themeSpacing(6),\n paddingInline: themeSpacing(2),\n cursor: \"pointer\",\n color: (listener) => themeColor(listener, \"shift-11\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", color.get(listener)),\n },\n \"&:hover:not([disabled]):not([aria-busy=true]), &:focus-visible\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&[disabled]\": {\n opacity: 0.8,\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", \"neutral\"),\n },\n \"&[disabled]::-webkit-file-upload-button\": {\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", \"neutral\"),\n },\n },\n };\n}\n\nexport { inputFile };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction inputSearch(props: { color?: ValueOrState<ThemeColor>; accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: \"search\",\n _onSchedule: (node, element) => {\n if (node.tagName != \"input\") {\n console.warn(`\"inputSearch\" primitive patch must use input tag`);\n }\n (element as any).type = \"search\";\n },\n style: {\n fontFamily: \"inherit\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n lineHeight: \"inherit\",\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\n minWidth: themeSpacing(32),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n \"&::placeholder\": {\n color: (listener) => themeColor(listener, \"shift-7\", color.get(listener)),\n },\n \"&::-webkit-search-decoration\": {\n display: \"none\",\n },\n \"&::-webkit-search-cancel-button\": {\n cursor: \"pointer\",\n },\n \"&:hover:not([disabled]):not([aria-busy=true]), &:focus-visible\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", \"neutral\"),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n },\n },\n };\n}\n\nexport { inputSearch };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction inputText(props: { color?: ValueOrState<ThemeColor>, accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: \"text\",\n _onSchedule: (node, element) => {\n if (node.tagName != \"input\") {\n console.warn(`\"inputText\" primitive patch must use input tag and text type`);\n }\n (element as any).type = \"text\";\n },\n style: {\n fontFamily: \"inherit\",\n lineHeight: \"inherit\",\n minWidth: themeSpacing(10),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n \"&::placeholder\": {\n color: (listener) => themeColor(listener, \"shift-7\"),\n },\n \"&:not(:placeholder-shown)\": {\n color: (listener) => themeColor(listener, \"shift-10\"),\n },\n \"&:hover:not([disabled]):not([aria-busy=true]), &:focus-visible\": {\n\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", \"neutral\"),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n },\n \"&:invalid:not(:placeholder-shown)\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", \"error\")}`,\n },\n \"&[data-status=error]\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", \"error\")}`,\n },\n \"&[data-status=warning]\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", \"warning\")}`,\n },\n },\n };\n}\n\nexport { inputText };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction inputRange(props: { color?: ValueOrState<ThemeColor>; accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: \"range\",\n _onInsert: (node) => {\n if (node.tagName != \"input\") {\n console.warn(`\"inputRange\" primitive patch must use input tag`);\n }\n },\n style: {\n appearance: \"none\",\n width: \"100%\",\n margin: 0,\n padding: 0,\n height: themeSpacing(4),\n background: \"transparent\",\n cursor: \"pointer\",\n \"&::-webkit-slider-runnable-track\": {\n height: themeSpacing(1.5),\n borderRadius: themeSpacing(999),\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", color.get(listener)),\n },\n \"&::-webkit-slider-thumb\": {\n appearance: \"none\",\n width: themeSpacing(4),\n height: themeSpacing(4),\n borderRadius: themeSpacing(999),\n border: \"none\",\n marginTop: `calc((${themeSpacing(1.5)} - ${themeSpacing(4)}) / 2)`,\n backgroundColor: (listener) => themeColor(listener, \"shift-9\", accentColor.get(listener)),\n },\n \"&:hover:not([disabled])::-webkit-slider-thumb\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-10\", accentColor.get(listener)),\n },\n \"&:focus-visible\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n outlineOffset: themeSpacing(1),\n borderRadius: themeSpacing(2),\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n },\n },\n };\n}\n\nexport { inputRange };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction inputNumber(props: { color?: ValueOrState<ThemeColor>, accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: \"number\",\n _onSchedule: (node, element) => {\n if (node.tagName != \"input\") {\n console.warn(`\"inputNumber\" primitive patch must use input tag`);\n }\n (element as any).type = \"number\";\n },\n style: {\n fontFamily: \"inherit\",\n lineHeight: \"inherit\",\n minWidth: themeSpacing(10),\n paddingInlineStart: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingInlineEnd: (listener) => themeSpacing(themeDensity(listener) * 1.5),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n \"&::-webkit-inner-spin-button, &::-webkit-outer-spin-button\": {\n opacity: 1,\n },\n \"&:hover:not([disabled]):not([aria-busy=true]), &:focus-visible\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", \"neutral\"),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n },\n },\n };\n}\n\nexport { inputNumber };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction keyboard(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"kbd\") {\n console.warn(`\"keyboard\" primitive patch must use kbd tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n paddingBlock: themeSpacing(0.5),\n paddingInline: themeSpacing(1.5),\n borderRadius: themeSpacing(1),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n },\n };\n}\n\nexport { keyboard };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction label(props: { color?: ValueOrState<ThemeColor>; accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"label\") {\n console.warn(`\"label\" primitive patch must use label tag`);\n }\n },\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: themeSpacing(2),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n cursor: \"pointer\",\n \"&:focus-within\": {\n color: (listener) => themeColor(listener, \"shift-10\", accentColor.get(listener)),\n },\n \"&[aria-disabled=true]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n },\n },\n };\n}\n\nexport { label };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\r\nimport { themeColor, themeSize,themeSpacing,type ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction link(props: { color?: ValueOrState<ThemeColor>, accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\r\n const color = toState(props.color ?? \"primary\", \"color\");\r\n const accentColor = toState(props.accentColor ?? \"secondary\", \"accentColor\");\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"a\") {\r\n console.warn(`\"link\" primitive patch must use a tag`)\r\n }\r\n },\r\n style: {\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n backgroundColor: (listener) => themeColor(listener),\r\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\r\n textDecoration: \"none\",\r\n \"&:visited\": {\r\n color: (listener) => themeColor(listener, \"shift-9\", accentColor.get(listener)),\r\n },\r\n \"&:hover:not([disabled])\": {\r\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\r\n textDecoration: \"underline\",\r\n },\r\n \"&:focus-visible\": {\r\n borderRadius: themeSpacing(1),\r\n outlineOffset:themeSpacing(1),\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\r\n },\r\n \"&[disabled]\": {\r\n opacity: 0.7,\r\n cursor: \"not-allowed\",\r\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\r\n }\r\n },\r\n };\r\n}\r\n\r\nexport { link };\r\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeSpacing, ThemeColor, themeSize, themeColor } from \"@domphy/theme\";\n\nfunction mark(props: { accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const accentColor = toState(props.accentColor ?? \"highlight\", \"accentColor\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"mark\") {\n console.warn(`\"mark\" primitive patch must use mark tag`);\n }\n },\n dataTone: \"shift-2\",\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", accentColor.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", accentColor.get(listener)),\n height: themeSpacing(6),\n borderRadius: themeSpacing(1),\n paddingInline: themeSpacing(1.5),\n },\n };\n}\n\nexport { mark };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSpacing, ThemeColor, themeSize } from \"@domphy/theme\";\n\nfunction paragraph(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"p\") {\n console.warn(`\"paragraph\" primitive patch must use p tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) =>themeColor(listener, \"shift-9\", color.get(listener)),\n lineHeight:1.5,\n marginTop: 0,\n marginBottom: 0,\n },\n };\n}\n\nexport { paragraph };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSpacing, ThemeColor, themeSize } from \"@domphy/theme\";\n\nfunction preformated(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n dataTone: \"shift-2\",\n _onInsert: (node) => {\n if (node.tagName != \"pre\") {\n console.warn(`\"preformated\" primitive patch must use pre tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n border: \"none\",\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 2),\n },\n };\n}\n\nexport { preformated };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction progress(props: { color?: ValueOrState<ThemeColor>; accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"progress\") {\n console.warn(`\"progress\" primitive patch must use progress tag`);\n }\n },\n style: {\n appearance: \"none\",\n width: \"100%\",\n height: themeSpacing(2),\n border: 0,\n borderRadius: themeSpacing(999),\n overflow: \"hidden\",\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", color.get(listener)),\n \"&::-webkit-progress-bar\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", color.get(listener)),\n borderRadius: themeSpacing(999),\n },\n \"&::-webkit-progress-value\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-9\", accentColor.get(listener)),\n borderRadius: themeSpacing(999),\n transition: \"width 220ms ease\",\n },\n },\n };\n}\n\nexport { progress };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, ThemeColor, themeSize, themeSpacing } from \"@domphy/theme\";\n\nfunction inputRadio(props: { color?: ValueOrState<ThemeColor>, accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: \"radio\",\n _onInsert: (node) => {\n if (node.tagName != \"input\") {\n console.warn(`\"inputRadio\" primitive patch must use input tag and radio type`);\n return;\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n appearance: \"none\",\n display: \"inline-flex\",\n position: \"relative\",\n width: themeSpacing(6),\n height: themeSpacing(6),\n justifyContent: \"center\",\n alignItems: \"center\",\n transition: \"background-color 300ms, outline-color 300ms\",\n margin: 0,\n padding: 0,\n \"&::before\": {\n content: `\"\"`,\n display: \"block\",\n borderRadius: \"50%\",\n lineHeight: 1,\n cursor: \"pointer\",\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n width: themeSpacing(4),\n height: themeSpacing(4)\n },\n \"&:hover::before\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color.get(listener)),\n },\n \"&:checked::before\": {\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&:checked::after\": {\n content: `\"\"`,\n position: \"absolute\",\n inset: \"30%\",\n borderRadius: \"50%\",\n backgroundColor: (listener) => themeColor(listener, \"shift-8\", accentColor.get(listener)),\n },\n \"&:checked:hover:not([disabled])::before\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-7\", accentColor.get(listener)),\n },\n \"&:focus-visible\": {\n borderRadius: \"50%\",\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&[disabled]\": {\n cursor: \"not-allowed\",\n },\n \"&[disabled]::before, &[disabled]::after\": {\n outline: \"none\",\n backgroundColor: (listener) => themeColor(listener, \"shift-4\", \"neutral\"),\n pointerEvents: \"none\",\n },\n }\n }\n}\n\nexport { inputRadio };\n","import { type PartialElement, type Listener } from \"@domphy/core\";\r\nimport { type ThemeColor, themeColor, themeDensity, themeSize, themeSpacing,themeColorToken } from \"@domphy/theme\";\r\n\r\nfunction select(\r\n props: { color?: ThemeColor; accentColor?: ThemeColor } = {}\r\n): PartialElement {\r\n const { color = \"neutral\", accentColor = \"primary\" } = props;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"select\") {\r\n console.warn(`\"select\" primitive patch must use select tag`);\r\n }\r\n },\r\n style: {\r\n appearance: \"none\",\r\n fontFamily: \"inherit\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n lineHeight: \"inherit\",\r\n color: (listener) => themeColor(listener, \"shift-9\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n border: \"none\",\r\n outlineOffset: \"-1px\",\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color)}`,\r\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\r\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\r\n paddingLeft: (listener) => themeSpacing(themeDensity(listener) * 3),\r\n paddingRight: (listener) => themeSpacing(themeDensity(listener) * 5),\r\n backgroundImage:(l: Listener)=>{\r\n const svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 10 6\"><path d=\"M1 1l4 4 4-4\" stroke=\"${themeColorToken(l, \"shift-7\")}\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`\r\n return `url(\"data:image/svg+xml,${encodeURIComponent(svg)}\")`\r\n } ,\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundPosition: `right ${themeSpacing(2)} center`,\r\n backgroundSize: `${themeSpacing(2.5)} ${themeSpacing(1.5)}`,\r\n \"&:not([multiple])\": {\r\n height: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\r\n },\r\n \"&:hover:not([disabled]):not([aria-busy=true])\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", accentColor)}`,\r\n },\r\n \"&:focus-visible\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor)}`,\r\n },\r\n \"& optgroup\": {\r\n color: (listener) => themeColor(listener, \"shift-11\", color),\r\n },\r\n \"& option[disabled]\": {\r\n color: (listener) => themeColor(listener, \"shift-7\", \"neutral\"),\r\n },\r\n \"&[disabled]\": {\r\n opacity: 0.7,\r\n cursor: \"not-allowed\",\r\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", \"neutral\"),\r\n }\r\n },\r\n };\r\n}\r\n\r\nexport { select };\r\n","import { type PartialElement, type StyleObject, hashString, toState, type ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\nfunction skeleton(props: {\n color?: ValueOrState<ThemeColor>;\n} = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n const keyframes = {\n \"0%,100%\": { opacity: 1 },\n \"50%\": { opacity: .4 }\n }\n const animationName = hashString(JSON.stringify(keyframes))\n return {\n ariaHidden: \"true\",\n dataTone: \"shift-2\",\n style: {\n fontSize: (listener) => themeSize(listener),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n height: themeSpacing(6),\n display: \"block\",\n borderRadius: themeSpacing(1),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n animation: `${animationName} 1.5s ease-in-out infinite`,\n [`@keyframes ${animationName}`]: keyframes,\n } as StyleObject,\n };\n}\n\nexport { skeleton };\n","import type { PartialElement, StyleObject } from \"@domphy/core\";\nimport { hashString, toState, type ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\nconst keyframes = { to: { transform: \"rotate(360deg)\" } };\nconst animationName = hashString(JSON.stringify(keyframes));\n\nfunction spinner(props: {\n color?: ValueOrState<ThemeColor>;\n} = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n role: \"status\",\n ariaLabel: \"loading\",\n _onInsert: (node) => {\n if (node.tagName != \"span\") {\n console.warn(`\"spinner\" patch must use span tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener),\n backgroundColor: (listener) => themeColor(listener),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n display: \"inline-block\",\n margin: 0,\n flexShrink: 0,\n width: themeSpacing(6),\n height: themeSpacing(6),\n borderRadius: \"50%\",\n border: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n borderTopColor: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n boxSizing: \"border-box\",\n padding: 0,\n animation: `${animationName} 0.7s linear infinite`,\n [`@keyframes ${animationName}`]: keyframes,\n } as StyleObject,\n\n };\n}\n\nexport { spinner };\n","import { PartialElement, DomphyElement, State } from \"@domphy/core\";\r\nimport { toState, ValueOrState } from \"@domphy/core\";\r\nimport { themeColor, themeDensity, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\r\nfunction selectList(props: {\r\n multiple?: boolean;\r\n value?: ValueOrState<Array<number | string | null> | number | string | null>;\r\n color?: ThemeColor;\r\n name?: string;\r\n} = {}): PartialElement {\r\n const { color = \"neutral\", multiple = false } = props;\r\n const state = toState(props.value ?? (multiple ? [] : null))\r\n\r\n const inputs: DomphyElement<\"div\"> = {\r\n div: (listener) => {\r\n const val = state.get(listener)\r\n const vals = Array.isArray(val) ? val : [val]\r\n return vals.map((v) => ({ input: null, name: props.name, value: v || \"\" }))\r\n },\r\n hidden: true,\r\n }\r\n\r\n let partial: PartialElement = {\r\n dataTone:\"shift-17\",\n _context: {\r\n select: {\r\n value: state,\r\n multiple,\r\n },\r\n },\r\n _onInit: (node) => {\r\n if (node.tagName != \"div\") {\r\n console.warn(`\"selectList\" patch must use a div tag`)\r\n }\r\n node.children.insert(inputs)\r\n },\r\n style: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 2),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n },\r\n };\r\n return partial;\r\n}\r\n\r\nexport { selectList };\r\n","import { PartialElement, toState, type State } from \"@domphy/core\";\r\nimport { themeSpacing, ThemeColor, themeColor, themeDensity, themeSize } from \"@domphy/theme\";\n\r\nfunction selectItem(props: {\r\n accentColor?: ThemeColor;\r\n color?: ThemeColor;\r\n value?: number | string;\r\n} = {}): PartialElement {\r\n const {\r\n accentColor = \"primary\",\r\n color = \"neutral\",\r\n value = null\r\n } = props;\r\n\r\n let partial: PartialElement = {\r\n role: \"option\",\r\n _onInit: (node) => {\r\n if (node.tagName != \"div\") {\r\n console.warn(`\"selectItem\" patch must use div tag`);\r\n }\r\n let select = node.getContext(\"select\");\r\n if (select) {\r\n let state = select.value\r\n node.attributes.set(\"ariaSelected\", (listener) => {\r\n let val = state.get(listener)\r\n return select.multiple ? val.includes(value) : val == value\r\n })\r\n node.addEvent(\"click\", () => {\r\n let val = state.get()\r\n if (select.multiple) {\r\n val.includes(value) ? state.set(val.filter((v: number | string) => v !== value)) : state.set(val.concat([value]))\r\n } else {\r\n val != value && state.set(value)\r\n }\r\n })\r\n }\r\n },\r\n style: {\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n height: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n border: \"none\",\r\n outline: \"none\",\r\n color: (listener) => themeColor(listener, \"shift-9\", color),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n \"&:hover:not([disabled]):not([aria-selected=true])\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color),\n },\r\n \"&[aria-selected=true]\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-6\", accentColor),\n color: (listener) => themeColor(listener, \"shift-11\"),\n },\n \"&:focus-visible\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor)}`,\n outlineOffset: `-${themeSpacing(0.5)}`,\r\n },\r\n },\r\n };\r\n return partial;\r\n}\r\n\r\nexport { selectItem };\r\n","import { type PartialElement, type DomphyElement, type StyleObject, type ValueOrState, toState, merge } from \"@domphy/core\";\r\nimport { themeSpacing, themeColor, themeDensity, themeSize, type ThemeColor } from \"@domphy/theme\";\r\nimport { type Placement } from \"@domphy/floating\";\r\nimport { tag } from \"./tag.js\"\r\nimport { creatFloating } from \"../utils/floating.js\"\r\n\r\nfunction selectBox(props: {\r\n multiple?: boolean;\r\n value?: ValueOrState<Array<number | string | null | undefined> | number | string | null | undefined>;\r\n options?: Array<{ label: string, value: string }>;\r\n placement?: ValueOrState<Placement>;\r\n content: DomphyElement;\r\n color?: ThemeColor;\r\n open?: ValueOrState<boolean>;\r\n}): PartialElement {\r\n const {\r\n options = [],\r\n placement = \"bottom\",\r\n color = \"neutral\",\r\n open = false,\r\n multiple = false\r\n } = props;\r\n\r\n const state = toState(props.value)\r\n let openState = toState(open)\r\n let { show, hide, anchorPartial } = creatFloating({ open: openState, placement: toState(placement), content: props.content })\r\n\r\n const popoverPartial: PartialElement = {\r\n onClick: () => !multiple && hide(),\r\n };\r\n\r\n merge(props.content, popoverPartial);\r\n\r\n const wrap: DomphyElement<\"div\"> = {\r\n div: (listener) => {\r\n const val = state.get(listener)\r\n const vals = Array.isArray(val) ? val : [val]\r\n const opts = options.filter(opt => vals.includes(opt.value))\r\n return opts.map(opt => ({\r\n span: opt.label,\r\n $: [tag({ color, removable: multiple })],\r\n _key: opt.value,\r\n _onRemove: (_node) => {\r\n const cur = state.get()\r\n const curVals = Array.isArray(cur) ? cur : [cur]\r\n const filter = curVals.filter(v => v !== opt.value)\r\n multiple ? state.set(filter as any) : state.set(filter[0] as any)\r\n }\r\n })) as DomphyElement<\"span\">[]\r\n },\r\n style: {\r\n display: \"flex\",\r\n flexWrap: \"wrap\",\r\n gap: themeSpacing(1),\r\n flex: 1,\r\n } as StyleObject\r\n }\r\n\r\n let partial: PartialElement = {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"div\") {\r\n console.warn(`\"selectBox\" patch must use div tag`);\r\n }\r\n },\r\n _onInit: (node) => node.children.insert(wrap),\r\n onClick: () => openState.get() ? hide() : show(),\r\n style: {\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n minHeight: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\r\n minWidth: themeSpacing(32),\r\n outlineOffset: \"-1px\",\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\r\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 2),\r\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n color: (listener) => themeColor(listener, \"shift-9\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n }\r\n };\r\n\r\n merge(anchorPartial, partial)\r\n return anchorPartial\r\n}\r\n\r\nexport { selectBox };\r\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { ThemeColor, themeColor, themeSize, themeSpacing } from \"@domphy/theme\";\n\nfunction inputSwitch(props: { accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n dataTone: \"shift-2\",\n type: \"checkbox\",\n _onSchedule: (node) => {\n if (node.tagName != \"input\") {\n console.warn(`\"inputSwitch\" primitive patch must use input tag`);\n return;\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n appearance: \"none\",\n position: \"relative\",\n display: \"inline-flex\",\n width: themeSpacing(9),\n height: themeSpacing(6),\n cursor: \"pointer\",\n margin: `0`,\n paddingBlock: themeSpacing(1),\n \"&:checked\": {\n \"&::before\": {\n backgroundColor: (listener) => themeColor(listener, \"increase-3\", accentColor.get(listener)),\n },\n \"&::after\": {\n left: `calc(100% - ${themeSpacing(3.5)})`,\n },\n },\n \"&::after\": {\n content: `\"\"`,\n aspectRatio: `1/1`,\n position: \"absolute\",\n width: themeSpacing(3),\n height: themeSpacing(3),\n borderRadius: themeSpacing(999),\n left: themeSpacing(0.5),\n top: \"50%\",\n transform: \"translateY(-50%)\",\n transition: \"left 0.3s\",\n backgroundColor: (listener) => themeColor(listener, \"decrease-3\"),\n },\n \"&::before\": {\n content: '\"\"',\n width: \"100%\",\n borderRadius: themeSpacing(999),\n display: \"inline-block\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n lineHeight: 1,\n backgroundColor: (listener) => themeColor(listener),\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n }\n },\n };\n}\n\nexport { inputSwitch };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport { type ThemeColor, themeColor, themeSize, themeSpacing } from \"@domphy/theme\";\n\nfunction buttonSwitch(props: {\n checked?: ValueOrState<boolean>;\n accentColor?: ValueOrState<ThemeColor>;\n color?: ValueOrState<ThemeColor>;\n} = {}): PartialElement {\n const { checked = false } = props;\n\n const check = toState(checked);\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n _onSchedule: (node) => {\n if (node.tagName != \"button\") {\n console.warn(`\"buttonSwitch\" primitive patch must use button tag`);\n }\n },\n role: \"switch\",\n ariaChecked: (listener) => check.get(listener),\n dataTone: \"shift-2\",\n onClick: () => check.set(!check.get()),\n style: {\n position: \"relative\",\n display: \"inline-flex\",\n alignItems: \"center\",\n fontSize: (listener) => themeSize(listener),\n border: \"none\",\n outlineWidth: \"1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", color.get(listener))}`,\n minWidth: themeSpacing(12),\n minHeight: themeSpacing(6),\n borderRadius: themeSpacing(999),\n paddingLeft: themeSpacing(7),\n paddingRight: themeSpacing(2),\n transition: \"padding-left 0.3s, padding-right 0.3s\",\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n \"& > :first-child\": {\n content: '\"\"',\n position: \"absolute\",\n display: \"inline-flex\",\n alignItems: \"center\",\n left: themeSpacing(0.5),\n top: \"50%\",\n transform: \"translateY(-50%)\",\n transition: \"left 0.3s\",\n width: themeSpacing(5),\n height: themeSpacing(5),\n borderRadius: themeSpacing(999),\n color: (listener) => themeColor(listener, \"shift-9\"),\n backgroundColor: (listener) => themeColor(listener, \"decrease-2\", color.get(listener)),\n },\n \"&[aria-checked=true]\": {\n backgroundColor: (listener) => themeColor(listener, \"increase-3\", accentColor.get(listener)),\n outline: \"none\",\n color: (listener) => themeColor(listener, \"decrease-2\"),\n paddingLeft: themeSpacing(2),\n paddingRight: themeSpacing(7),\n },\n \"&[aria-checked=true] > :first-child\": {\n left: `calc(100% - ${themeSpacing(5.5)})`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n },\n },\n };\n}\n\nexport { buttonSwitch };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, ThemeColor, themeSize } from \"@domphy/theme\";\n\nfunction small(props: { color?: ValueOrState<ThemeColor>} = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n dataSize:\"decrease-1\",\n _onInsert: (node) => {\n if (node.tagName != \"small\") {\n console.warn(`\"small\" primitive patch must use small tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n },\n };\n}\n\nexport { small };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction strong(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"strong\") {\n console.warn(`\"strong\" primitive patch must use strong tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n fontWeight: 700,\n color: (listener) => themeColor(listener, \"shift-11\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener),\n },\n };\n}\n\nexport { strong };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction subscript(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"sub\") {\n console.warn(`\"subscript\" primitive patch must use sub tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"decrease-1\"),\n verticalAlign: \"sub\",\n lineHeight: 0,\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n },\n };\n}\n\nexport { subscript };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction superscript(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"sup\") {\n console.warn(`\"superscript\" primitive patch must use sup tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"decrease-1\"),\n verticalAlign: \"super\",\n lineHeight: 0,\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n },\n };\n}\n\nexport { superscript };\n","import { type PartialElement, type DomphyElement, toState, type ValueOrState } from \"@domphy/core\";\nimport { type ThemeColor, themeColor, themeDensity, themeSpacing, themeSize } from \"@domphy/theme\";\n\nfunction table(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"table\") {\n console.warn(`\"table\" primitive patch must use table tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n width: \"100%\",\n borderCollapse: \"collapse\",\n \"& caption\": {\n captionSide: \"bottom\"\n },\n \"& th, & thead td\": {\n textAlign: \"left\",\n fontWeight: 500,\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\"),\n },\n \"& td\": {\n textAlign: \"left\",\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n boxShadow: (listener) => `inset 0 1px 0 ${themeColor(listener, \"shift-3\", color.get(listener))}`,\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n },\n \"& tfoot th, & tfoot td\": {\n textAlign: \"left\",\n fontWeight: 500,\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n color: (l) => themeColor(l, \"shift-10\", color.get(l)),\n backgroundColor: (l) => themeColor(l, \"inherit\"),\n boxShadow: (l) => `inset 0 -1px 0 ${themeColor(l, \"shift-4\", color.get(l))}`\n },\n \"& tr\": {\n backgroundColor: (listener) => themeColor(listener, \"inherit\"),\n },\n\n \"& tbody tr:hover\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-2\") + \"!important\",\n }\n },\n };\n}\n\nexport { table };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction textarea(\n props: { color?: ValueOrState<ThemeColor>; accentColor?: ValueOrState<ThemeColor>; autoResize?: boolean } = {}\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n const { autoResize = false } = props;\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"textarea\") {\n console.warn(`\"textarea\" primitive patch must use textarea tag`);\n }\n },\n _onMount: (node) => {\n if (autoResize) {\n const el = node.domElement as HTMLTextAreaElement;\n el.style.overflow = \"hidden\";\n const resize = () => {\n el.style.height = \"auto\";\n el.style.height = el.scrollHeight + \"px\";\n };\n el.addEventListener(\"input\", resize);\n resize();\n }\n },\n style: {\n fontFamily: \"inherit\",\n lineHeight: \"inherit\",\n resize: \"vertical\",\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 2),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1.5),\n border:\"none\",\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1.5),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n \"&::placeholder\": {\n color: (listener) => themeColor(listener, \"shift-7\"),\n },\n \"&:hover:not([disabled]):not([aria-busy=true])\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", accentColor.get(listener))}`,\n },\n \"&:focus-visible\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&:invalid\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", \"error\")}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", \"neutral\"),\n }\n },\n };\n}\n\nexport { textarea };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction unorderedList(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"ul\") {\n console.warn(`\"unorderedList\" primitive patch must use ul tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n backgroundColor: (listener) => themeColor(listener),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n marginTop: 0,\n marginBottom: 0,\n paddingLeft: themeSpacing(3),\n listStyleType: \"disc\",\n listStylePosition: \"outside\",\n },\n };\n}\n\nexport { unorderedList };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction orderedList(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"ol\") {\n console.warn(`\"orderedList\" primitive patch must use ol tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n backgroundColor: (listener) => themeColor(listener),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n marginTop: 0,\n marginBottom: 0,\n paddingLeft: themeSpacing(3),\n listStyleType: \"decimal\",\n listStylePosition: \"outside\",\n },\n };\n}\n\nexport { orderedList };\n","import { type PartialElement, type DomphyElement, type ValueOrState, toState } from \"@domphy/core\";\r\nimport { themeColor, themeDensity, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\r\nfunction getPages(current: number, total: number): (number | \"...\")[] {\r\n if (total <= 7) return Array.from({ length: total }, (_, i) => i + 1);\r\n const pages: (number | \"...\")[] = [1];\r\n if (current > 3) pages.push(\"...\");\r\n const start = Math.max(2, current - 1);\r\n const end = Math.min(total - 1, current + 1);\r\n for (let i = start; i <= end; i++) pages.push(i);\r\n if (current < total - 2) pages.push(\"...\");\r\n pages.push(total);\r\n return pages;\r\n}\r\n\r\nfunction pagination(props: {\r\n value?: ValueOrState<number>;\r\n total: number;\r\n color?: ThemeColor;\r\n accentColor?: ThemeColor;\r\n}): PartialElement {\r\n const { total, color = \"neutral\", accentColor = \"primary\" } = props;\r\n const state = toState(props.value ?? 1);\r\n\r\n const btnBase = {\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n minWidth: (listener: any) => themeSpacing(6 + themeDensity(listener) * 2),\n height: (listener: any) => themeSpacing(6 + themeDensity(listener) * 2),\n paddingInline: (listener: any) => themeSpacing(themeDensity(listener) * 2),\n borderRadius: (listener: any) => themeSpacing(themeDensity(listener) * 1),\n border: \"none\",\r\n cursor: \"pointer\",\r\n fontSize: (listener: any) => themeSize(listener, \"inherit\"),\r\n backgroundColor: \"transparent\",\r\n color: (listener: any) => themeColor(listener, \"shift-9\", color),\n \"&:hover:not([disabled])\": {\r\n backgroundColor: (listener: any) => themeColor(listener, \"shift-2\", color),\n },\r\n \"&[disabled]\": {\r\n opacity: 0.4,\r\n cursor: \"not-allowed\",\r\n },\r\n };\r\n\r\n const activeStyle = {\n ...btnBase,\n backgroundColor: (listener: any) => themeColor(listener, \"shift-6\", accentColor),\n color: (listener: any) => themeColor(listener, \"shift-11\", accentColor),\n fontWeight: \"600\",\n cursor: \"default\",\n \"&:hover:not([disabled])\": {\n backgroundColor: (listener: any) => themeColor(listener, \"shift-6\", accentColor),\n },\n };\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName !== \"div\") console.warn('\"pagination\" patch must use div tag');\r\n },\r\n _onInit: (node) => {\r\n const content: DomphyElement<\"div\"> = {\r\n div: (listener) => {\r\n const page = state.get(listener);\r\n const items: DomphyElement[] = [];\r\n\r\n // Prev button\r\n items.push({\r\n button: \"‹\",\r\n type: \"button\",\r\n ariaLabel: \"Previous page\",\r\n disabled: page <= 1,\r\n onClick: () => page > 1 && state.set(page - 1),\r\n style: btnBase,\r\n });\r\n\r\n // Page buttons\r\n for (const p of getPages(page, total)) {\r\n if (p === \"...\") {\r\n items.push({ span: \"…\", style: { display: \"inline-flex\", alignItems: \"center\", paddingInline: (listener: any) => themeSpacing(themeDensity(listener) * 2), color: (listener: any) => themeColor(listener, \"shift-7\", color) } });\n } else {\r\n const isActive = p === page;\r\n items.push({\r\n button: String(p),\r\n type: \"button\",\r\n ariaLabel: `Page ${p}`,\r\n ariaCurrent: isActive ? \"page\" : undefined,\r\n disabled: isActive,\r\n onClick: () => state.set(p),\r\n style: isActive ? activeStyle : btnBase,\r\n });\r\n }\r\n }\r\n\r\n // Next button\r\n items.push({\r\n button: \"›\",\r\n type: \"button\",\r\n ariaLabel: \"Next page\",\r\n disabled: page >= total,\r\n onClick: () => page < total && state.set(page + 1),\r\n style: btnBase,\r\n });\r\n\r\n return items;\r\n },\r\n style: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: themeSpacing(1),\r\n },\r\n };\r\n node.children.insert(content);\r\n },\r\n style: {\r\n display: \"inline-flex\",\r\n },\r\n };\r\n}\r\n\r\nexport { pagination };\r\n","import type { PartialElement } from \"@domphy/core\";\nimport { toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, type ThemeColor, themeSize, themeSpacing } from \"@domphy/theme\";\n\nfunction divider(props: {\n color?: ValueOrState<ThemeColor>;\n} = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n role: \"separator\",\n _onInsert: (node) => {\n if (node.tagName !== \"div\") {\n console.warn(`\"divider\" patch should be used with <div>`)\n }\n },\n style: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"baseline\",\n gap: themeSpacing(2),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n backgroundColor: (listener) => themeColor(listener),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n minHeight: \"1lh\",\n \"&::before\": {\n content: `\"\"`,\n flex:1,\n borderColor: (listener) => themeColor(listener, \"shift-4\", color.get(listener)),\n borderWidth: \"1px\",\n borderBottomStyle: \"solid\",\n },\n \"&::after\": {\n content: `\"\"`,\n flex:1,\n borderColor: (listener) => themeColor(listener, \"shift-4\", color.get(listener)),\n borderWidth: \"1px\",\n borderBottomStyle: \"solid\",\n },\n },\n };\n}\n\nexport { divider };\n","import { type PartialElement, type ValueOrState, toState } from \"@domphy/core\";\r\nimport { themeColor, themeDensity, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\n\r\ntype Placement = \"left\" | \"right\" | \"top\" | \"bottom\";\r\n\r\nconst translateOut: Record<Placement, string> = {\r\n left: \"translateX(-100%)\",\r\n right: \"translateX(100%)\",\r\n top: \"translateY(-100%)\",\r\n bottom: \"translateY(100%)\",\r\n};\r\n\r\nconst marginMap: Record<Placement, string> = {\r\n left: \"0 auto 0 0\",\r\n right: \"0 0 0 auto\",\r\n top: \"0 0 auto 0\",\r\n bottom: \"auto 0 0 0\",\r\n};\r\n\r\nconst isVertical = (p: Placement) => p === \"left\" || p === \"right\";\r\n\r\nfunction drawer(props: {\r\n color?: ThemeColor;\r\n open?: ValueOrState<boolean>;\r\n placement?: Placement;\r\n size?: string;\r\n} = {}): PartialElement {\r\n const { color = \"neutral\", open = false, placement = \"right\", size } = props;\r\n const state = toState(open);\r\n const defaultSize = isVertical(placement) ? themeSpacing(80) : themeSpacing(64);\r\n const drawerSize = size ?? defaultSize;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName !== \"dialog\") {\r\n console.warn(`\"drawer\" patch must use dialog tag`);\r\n }\r\n },\r\n onClick: (e: MouseEvent, node) => {\r\n if (e.target !== node.domElement) return;\r\n state.set(false);\r\n },\r\n onTransitionEnd: (_e, node) => {\r\n const dlg = node.domElement as HTMLDialogElement;\r\n if (!state.get()) {\r\n dlg.close();\r\n document.body.style.overflow = \"\";\r\n }\r\n },\r\n _onMount: (node) => {\r\n const dlg = node.domElement as HTMLDialogElement;\r\n const update = (val: boolean) => {\r\n if (val) {\r\n dlg.showModal();\r\n document.body.style.overflow = \"hidden\";\r\n requestAnimationFrame(() => { dlg.style.transform = \"translate(0, 0)\"; });\r\n } else {\r\n dlg.style.transform = translateOut[placement];\r\n }\r\n };\r\n update(state.get());\r\n const release = state.addListener(update);\r\n // Release the `open` State listener and restore page scroll on removal\r\n // (an open drawer removed mid-transition would otherwise leak the\r\n // listener and leave document.body locked at overflow:hidden).\r\n node.addHook(\"Remove\", () => {\r\n release();\r\n document.body.style.overflow = \"\";\r\n });\r\n },\r\n style: {\r\n transform: translateOut[placement],\r\n transition: \"transform 0.25s ease\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n color: (listener) => themeColor(listener, \"shift-10\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n border: \"none\",\r\n padding: (listener) => themeSpacing(themeDensity(listener) * 3),\r\n margin: marginMap[placement],\r\n width: isVertical(placement) ? drawerSize : \"100dvw\",\r\n height: isVertical(placement) ? \"100dvh\" : drawerSize,\r\n maxWidth: \"100dvw\",\r\n maxHeight: \"100dvh\",\r\n boxShadow: (listener) => `0 ${themeSpacing(4)} ${themeSpacing(12)} ${themeColor(listener, \"shift-4\", \"neutral\")}`,\r\n \"&::backdrop\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", \"neutral\"),\r\n opacity: 0.75,\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { drawer };\r\n","import { PartialElement, State, DomphyElement, toState, ValueOrState, merge } from \"@domphy/core\";\r\nimport { type Placement } from \"@domphy/floating\";\r\nimport { creatFloating } from \"../utils/floating.js\";\r\n\r\nfunction popover(props: {\r\n openOn: \"click\" | \"hover\";\r\n open?: ValueOrState<boolean>;\r\n placement?: ValueOrState<Placement>;\r\n content: DomphyElement;\r\n}): PartialElement {\r\n const {\r\n open = false,\r\n placement = \"bottom\",\r\n openOn = \"click\"\r\n } = props;\r\n\r\n\r\n let popoverId: string | null = null\r\n const openState = toState(open);\r\n const placeState = toState(placement);\r\n\r\n let { show, hide, anchorPartial } = creatFloating({ open: openState, placement: placeState, content: props.content })\r\n\r\n const popoverPartial: PartialElement = {\r\n role: \"dialog\",\r\n dataTone: \"shift-11\",\r\n onMouseEnter: () => openOn === \"hover\" && show(),\r\n onMouseLeave: () => openOn === \"hover\" && hide(),\r\n _onInsert: (node) => {\r\n let id = node.attributes.get(\"id\")\r\n popoverId = id || node.nodeId\r\n !id && node.attributes.set(\"id\", popoverId)\r\n },\r\n };\r\n\r\n props.content.$ ||= []\r\n props.content.$.push(popoverPartial)\r\n \r\n const triggerPartial: PartialElement = {\r\n ariaHaspopup: \"dialog\",\r\n ariaExpanded: (listener) => openState.get(listener),\r\n onMouseEnter: () => openOn === \"hover\" && show(),\r\n onMouseLeave: () => openOn === \"hover\" && hide(),\r\n onClick: () => {\r\n if (openOn === \"click\") {\r\n if (openState.get()) { hide() } else { show() }\r\n }\r\n },\r\n onFocus: () => show(),\r\n onBlur: (e, node) => {\r\n const related = (e as FocusEvent).relatedTarget as Node | null\r\n const root = node.getRoot().domElement as Element\r\n const floatingEl = popoverId ? root.querySelector(`#${CSS.escape(popoverId)}`) : null\r\n if (related && floatingEl?.contains(related)) return\r\n hide()\r\n },\r\n _onMount: (node) => popoverId && node.attributes.set(\"ariaControls\", popoverId)\r\n };\r\n merge(anchorPartial, triggerPartial);\r\n\r\n return anchorPartial;\r\n}\r\n\r\nexport { popover };\r\n","import type { DomphyElement, PartialElement, ElementNode } from \"@domphy/core\";\r\nimport { toState } from \"@domphy/core\";\r\nimport { themeColor, themeDensity, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\r\ntype ToastPosition = \"top-left\" | \"top-center\" | \"top-right\" | \"bottom-left\" | \"bottom-center\" | \"bottom-right\";\r\n\r\nfunction toast(props: {\r\n position?: ToastPosition;\r\n color?: ThemeColor;\r\n} = {}): PartialElement {\r\n const { position = \"top-center\", color = \"neutral\" } = props;\r\n const state = toState(false);\r\n\r\n const isTop = position.startsWith(\"top\");\r\n const isCenter = position.endsWith(\"center\");\r\n const isRight = position.endsWith(\"right\");\r\n\r\n const overlayEle: DomphyElement<\"div\"> = {\r\n div: [],\r\n id: `domphy-toast-${position}`,\r\n style: {\r\n position: \"fixed\",\r\n display: \"flex\",\r\n flexDirection: isTop ? \"column\" : \"column-reverse\",\r\n alignItems: isCenter ? \"center\" : isRight ? \"end\" : \"start\",\r\n inset: 0,\r\n gap: themeSpacing(4),\r\n zIndex: 30,\r\n padding: themeSpacing(6),\r\n pointerEvents: \"none\",\r\n },\r\n }\r\n\r\n return {\n _portal: (rootNode) => {\n let overlay = rootNode.domElement!.querySelector(`#domphy-toast-${position}`);\r\n if (!overlay) {\r\n const overlayNode = rootNode.children!.insert(overlayEle) as ElementNode;\r\n overlay = overlayNode.domElement!;\r\n }\r\n return overlay;\r\n },\n role: \"status\",\n ariaAtomic: \"true\",\n // Toast is rendered as an overlay surface, so it uses the inverted branch.\n dataTone: \"shift-17\",\n style: {\n minWidth: themeSpacing(32),\n pointerEvents: \"auto\",\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 4),\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 2),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\n boxShadow: (listener) => `0 ${themeSpacing(2)} ${themeSpacing(9)} ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n opacity: (listener) => Number(state.get(listener)),\n transform: (listener) => state.get(listener) ? \"translateY(0)\" : isTop ? \"translateY(-100%)\" : \"translateY(100%)\",\n transition: \"opacity 300ms ease, transform 300ms ease\",\n },\n _onMount: () => requestAnimationFrame(() => state.set(true)),\r\n _onBeforeRemove: (node, done) => {\r\n const onEnd = (e: Event) => {\r\n if ((e as TransitionEvent).propertyName === \"transform\") {\r\n node.domElement!.removeEventListener(\"transitionend\", onEnd)\r\n done()\r\n }\r\n }\r\n node.domElement!.addEventListener(\"transitionend\", onEnd)\r\n state.set(false)\r\n }\r\n };\r\n}\r\n\r\nexport { toast };\r\n","import { PartialElement, type DomphyElement, ValueOrState, merge, toState } from \"@domphy/core\";\r\nimport { themeSpacing, themeColor, themeDensity, themeSize } from \"@domphy/theme\";\r\nimport { type Placement } from \"@domphy/floating\";\r\nimport { creatFloating } from \"../utils/floating.js\";\r\nimport { popoverArrow } from \"./popoverArrow.js\";\r\n\r\n\r\nfunction tooltip(props: {\r\n open?: ValueOrState<boolean>;\r\n placement?: ValueOrState<Placement>;\r\n content?: ValueOrState<string>;\r\n} = {}): PartialElement {\r\n const {\r\n open = false,\r\n placement = \"top\",\r\n content = \"Tooltip Content\"\r\n } = props;\r\n\r\n const placeState = toState(placement)\r\n const contentState = toState(content)\r\n\r\n let tooltipId: string | null = null\r\n\r\n let contentElement: DomphyElement<\"span\"> = { span: (listener) => contentState.get(listener) }\r\n\r\n let { show, hide, anchorPartial } = creatFloating({ open, placement: placeState, content: contentElement })\r\n\r\n const tooltipPartial: PartialElement = {\r\n role: \"tooltip\",\r\n dataSize: \"decrease-1\",\r\n dataTone: \"shift-17\",\r\n _onInsert: (node) => {\r\n let id = node.attributes.get(\"id\")\r\n tooltipId = id || node.nodeId\r\n !id && node.attributes.set(\"id\", tooltipId)\r\n },\r\n style: {\r\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\r\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\r\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\r\n color: (listener) => themeColor(listener, \"shift-9\"),\r\n backgroundColor: (listener) => themeColor(listener),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n },\r\n $: [popoverArrow({ placement: placeState, bordered: false })]\r\n };\r\n contentElement.$ ||= []\r\n contentElement.$.push(tooltipPartial)\r\n\r\n const triggerPartial: PartialElement = {\r\n onMouseEnter: () => show(),\r\n onMouseLeave: () => hide(),\r\n onFocus: () => show(),\r\n onBlur: () => hide(),\r\n onKeyDown: (e) => (e as KeyboardEvent).key === \"Escape\" && hide(),\r\n _onMount: (node) => tooltipId && node.attributes.set(\"ariaDescribedby\", tooltipId)\r\n };\r\n\r\n merge(anchorPartial, triggerPartial)\r\n\r\n return anchorPartial;\r\n}\r\n\r\nexport { tooltip };\r\n","import { ElementNode, PartialElement } from \"@domphy/core\";\r\n\r\ntype RectMap = Map<string, DOMRect>;\r\n\r\nfunction getItemId(node: ElementNode, index: number): string {\r\n if (node.key !== undefined && node.key !== null) {\r\n return String(node.key);\r\n }\r\n return `index-${index}`;\r\n}\r\n\r\nfunction transitionGroup(props: { duration?: number; delay?: number } = {}): PartialElement {\r\n const {\r\n duration = 300,\r\n delay = 0,\r\n } = props;\r\n\r\n let previousRects: RectMap = new Map();\r\n\r\n return {\r\n _onBeforeUpdate: (node) => {\r\n previousRects = new Map();\r\n node.children.items.forEach((item, index) => {\n if (!(item instanceof ElementNode)) return;\r\n const dom = item.domElement as HTMLElement | undefined;\r\n if (!dom) return;\r\n previousRects.set(getItemId(item, index), dom.getBoundingClientRect());\r\n });\r\n },\r\n _onUpdate: (node) => {\r\n node.children.items.forEach((item, index) => {\n if (!(item instanceof ElementNode)) return;\r\n const dom = item.domElement as HTMLElement | undefined;\r\n if (!dom) return;\r\n\r\n const key = getItemId(item, index);\r\n const prev = previousRects.get(key);\r\n if (!prev) return;\r\n\r\n const next = dom.getBoundingClientRect();\r\n const deltaX = prev.left - next.left;\r\n const deltaY = prev.top - next.top;\r\n if (Math.abs(deltaX) < 0.5 && Math.abs(deltaY) < 0.5) return;\r\n\r\n const previousTransition = dom.style.transition;\r\n const previousTransform = dom.style.transform;\r\n\r\n dom.style.transition = \"none\";\r\n dom.style.transform = `translate(${deltaX}px, ${deltaY}px)`;\r\n dom.getBoundingClientRect();\r\n\r\n requestAnimationFrame(() => {\r\n dom.style.transition = `transform ${duration}ms ease ${delay}ms`;\r\n dom.style.transform = \"translate(0px, 0px)\";\r\n });\r\n\r\n const cleanup = () => {\r\n dom.style.transition = previousTransition;\r\n dom.style.transform = previousTransform;\r\n dom.removeEventListener(\"transitionend\", onEnd);\r\n };\r\n\r\n const onEnd = (event: Event) => {\r\n const transitionEvent = event as TransitionEvent;\r\n if (transitionEvent.propertyName === \"transform\") {\r\n cleanup();\r\n }\r\n };\r\n\r\n dom.addEventListener(\"transitionend\", onEnd);\r\n setTimeout(cleanup, duration + delay + 34);\r\n });\r\n previousRects.clear();\r\n },\r\n };\r\n}\r\n\r\n\r\nexport { transitionGroup };\r\n","import { PartialElement, merge } from \"@domphy/core\";\r\nimport { toState, ValueOrState } from \"@domphy/core\";\r\n\r\nfunction tabs(props: {\r\n activeKey?: ValueOrState<number | string>;\r\n} = {}): PartialElement {\r\n\r\n let partial: PartialElement = {\r\n role: \"tablist\",\r\n _onSchedule: (node, element) => {\r\n let partial = {\r\n _context: {\r\n tabs: {\r\n activeKey: toState(props.activeKey || 0),\r\n }\r\n },\r\n }\r\n merge(element, partial)\r\n },\r\n }\r\n return partial;\r\n}\r\n\r\nexport { tabs };\r\n","import { PartialElement, ElementNode } from \"@domphy/core\";\r\nimport { themeSpacing, ThemeColor, themeColor, themeDensity, themeSize } from \"@domphy/theme\";\r\n\r\nfunction tab(props: {\r\n accentColor?: ThemeColor;\r\n color?: ThemeColor;\r\n} = {}): PartialElement {\r\n const {\r\n accentColor = \"primary\",\r\n color = \"neutral\",\r\n } = props;\r\n let partial: PartialElement = {\r\n role: \"tab\",\r\n _onInsert: (node) => {\r\n\r\n if (node.tagName != \"button\") {\r\n console.warn(`\"tab\" patch must use button tag`);\r\n }\r\n\r\n let context = node.getContext(\"tabs\")\r\n if (!context) {\r\n console.warn(`\"tab\" patch must be used inside a \"tabs\"`);\r\n return;\r\n }\r\n let children = (node.parent?.children.items ?? []) as ElementNode[]\r\n children = children.filter(n => n.type == \"ElementNode\" && n.attributes.get(\"role\") == \"tab\")\r\n let key = node.key !== null && node.key !== undefined ? node.key : children.findIndex(n => n == node)\r\n\r\n let part: PartialElement = {\r\n id: \"tab\" + node.parent!.nodeId + key,\r\n \"ariaControls\": \"tabpanel\" + node.parent!.nodeId + key,\r\n \"ariaSelected\": (listener) => context.activeKey.get(listener) == key,\r\n onClick: () => context.activeKey.set(key),\r\n onKeyDown: (e: Event) => {\r\n const k = (e as KeyboardEvent).key;\r\n if (![\"ArrowLeft\", \"ArrowRight\", \"Home\", \"End\"].includes(k)) return;\r\n e.preventDefault();\r\n const tabs = (node.parent?.children.items ?? []).filter(\r\n n => n.type === \"ElementNode\" && (n as ElementNode).attributes.get(\"role\") === \"tab\"\r\n ) as ElementNode[];\r\n const idx = tabs.findIndex(n => n === node);\r\n let next = idx;\r\n if (k === \"ArrowRight\") next = (idx + 1) % tabs.length;\r\n else if (k === \"ArrowLeft\") next = (idx - 1 + tabs.length) % tabs.length;\r\n else if (k === \"Home\") next = 0;\r\n else if (k === \"End\") next = tabs.length - 1;\r\n const target = tabs[next];\r\n context.activeKey.set(target.key ?? next);\r\n (target.domElement as HTMLElement)?.focus();\r\n },\r\n }\r\n node.merge(part)\r\n },\r\n style: {\r\n cursor: \"pointer\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n height: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\r\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 4),\r\n border: \"none\",\r\n outline: \"none\",\r\n color: (listener) => themeColor(listener, \"shift-9\"),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\"),\r\n boxShadow: (listener) => `inset 0 -${themeSpacing(0.5)} 0 0 ${themeColor(listener, \"shift-1\", color)}`,\r\n \"&:hover:not([disabled])\": {\r\n boxShadow: (listener) => `inset 0 -${themeSpacing(0.5)} 0 0 ${themeColor(listener, \"shift-2\", color)}`,\r\n },\r\n \"&[aria-selected=true]:not([disabled])\": {\r\n boxShadow: (listener) => `inset 0 -${themeSpacing(0.5)} 0 0 ${themeColor(listener, \"shift-6\", accentColor)}`,\r\n },\r\n \"&:focus-visible\": {\r\n boxShadow: (listener) => `inset 0 -${themeSpacing(0.5)} 0 0 ${themeColor(listener, \"shift-6\", accentColor)}`,\r\n\r\n },\r\n },\r\n }\r\n return partial\r\n}\r\n\r\n\r\nexport { tab };\r\n","import { PartialElement, ElementNode, merge } from \"@domphy/core\";\r\nimport { themeSpacing, themeDensity, themeColor } from \"@domphy/theme\";\r\n\r\nfunction tabPanel(): PartialElement {\r\n let partial: PartialElement = {\r\n role: \"tabpanel\",\r\n style: {\r\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\r\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 2),\r\n },\r\n _onInsert: (node) => {\r\n let context = node.getContext(\"tabs\")\r\n if (!context) {\r\n console.warn(`\"tabPanel\" patch must be used inside a \"tabs\"`);\r\n return;\r\n }\r\n let children = (node.parent?.children.items ?? []) as ElementNode[]\r\n children = children.filter(n => n.type == \"ElementNode\" && n.attributes.get(\"role\") == \"tabpanel\")\r\n let key = node.key !== null && node.key !== undefined ? node.key : children.findIndex(n => n == node)\r\n let part: PartialElement = {\r\n id: \"tabpanel\" + node.parent!.nodeId + key,\r\n \"ariaLabelledby\": \"tab\" + node.parent!.nodeId + key,\r\n \"hidden\": (listener) => context.activeKey.get(listener) != key,\r\n }\r\n node.merge(part)\r\n },\r\n };\r\n return partial;\r\n}\r\n\r\n\r\n\r\nexport { tabPanel };\r\n","import { PartialElement, merge } from \"@domphy/core\";\r\nimport { toState, ValueOrState } from \"@domphy/core\";\r\nimport { themeColor, themeDensity, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction menu(props: {\r\n activeKey?: ValueOrState<number | string>;\r\n selectable?: boolean;\r\n color?: ThemeColor;\r\n} = {}): PartialElement {\r\n const { color = \"neutral\", selectable = true } = props;\r\n\r\n let partial: PartialElement = {\r\n role: \"menu\",\r\n dataTone:\"shift-17\",\r\n _onSchedule: (node, element) => {\r\n let partial = {\r\n _context: {\r\n menu: {\r\n activeKey: toState(props.activeKey ?? null),\r\n selectable,\r\n },\r\n },\r\n };\r\n merge(element, partial);\r\n },\r\n style: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\r\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 2),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n },\r\n };\r\n return partial;\r\n}\r\n\r\nexport { menu };\r\n","import { PartialElement, ElementNode } from \"@domphy/core\";\r\nimport { themeSpacing, ThemeColor, themeColor, themeDensity, themeSize } from \"@domphy/theme\";\r\n\r\nfunction menuItem(props: {\r\n accentColor?: ThemeColor;\r\n color?: ThemeColor;\r\n} = {}): PartialElement {\r\n const {\r\n accentColor = \"primary\",\r\n color = \"neutral\",\r\n } = props;\r\n\r\n let partial: PartialElement = {\r\n role: \"menuitem\",\r\n _onInsert: (node) => {\r\n if (node.tagName != \"button\") {\r\n console.warn(`\"menuItem\" patch must use button tag`);\r\n }\r\n\r\n let context = node.getContext(\"menu\");\r\n if (!context) {\r\n console.warn(`\"menuItem\" patch must be used inside a \"menu\"`);\r\n return;\r\n }\r\n let children = (node.parent?.children.items ?? []) as ElementNode[];\r\n children = children.filter(n => n.type == \"ElementNode\" && n.attributes.get(\"role\") == \"menuitem\");\r\n // Strict key check: an explicit _key of 0 or \"\" must not fall back to index.\r\n let key = node.key !== null && node.key !== undefined ? node.key : children.findIndex(n => n == node);\r\n if (context.selectable) {\r\n node.attributes.set(\"ariaCurrent\", (listener) => context.activeKey.get(listener) == key || undefined)\r\n node.addEvent(\"click\", () => context.activeKey.set(key))\r\n }\r\n },\r\n onKeyDown:(e:KeyboardEvent,node)=>{\r\n const k = (e as KeyboardEvent).key;\r\n if (k === \"Enter\" || k === \" \") {\r\n e.preventDefault();\r\n (node.domElement as HTMLElement)?.click();\r\n return;\r\n }\r\n if (![\"ArrowDown\", \"ArrowUp\", \"Home\", \"End\"].includes(k)) return;\r\n e.preventDefault();\r\n const items = (node.parent?.children.items ?? []).filter(\r\n n => n.type === \"ElementNode\" && (n as ElementNode).attributes.get(\"role\") === \"menuitem\"\r\n ) as ElementNode[];\r\n const idx = items.findIndex(n => n === node);\r\n let next = idx;\r\n if (k === \"ArrowDown\") next = (idx + 1) % items.length;\r\n else if (k === \"ArrowUp\") next = (idx - 1 + items.length) % items.length;\r\n else if (k === \"Home\") next = 0;\r\n else if (k === \"End\") next = items.length - 1;\r\n (items[next].domElement as HTMLElement)?.focus();\r\n },\r\n style: {\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: (listener) => themeSpacing(2),\r\n width: \"100%\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n height: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\r\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\r\n border: \"none\",\r\n outline: \"none\",\r\n color: (listener) => themeColor(listener, \"shift-9\"),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\"),\r\n \"&:hover:not([disabled]):not([aria-current=true])\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\"),\r\n },\r\n // Menu uses the current/indicator band instead of the selected fill band.\r\n \"&[aria-current=true]\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", accentColor),\r\n color: (listener) => themeColor(listener, \"shift-10\"),\r\n },\r\n \"&:focus-visible\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor)}`,\r\n outlineOffset: `-${themeSpacing(0.5)}`,\r\n },\r\n },\r\n };\r\n return partial;\r\n}\r\n\r\nexport { menuItem };\r\n","import type { PartialElement, State } from \"@domphy/core\";\n\n/**\n * One keyframe. Shorthands `x`/`y` (px), `scale`, `rotate` (deg) compose into a\n * single `transform`; any other key is a raw CSS property (e.g. `opacity`,\n * `backgroundColor`).\n */\nexport type MotionKeyframe = {\n x?: number | string;\n y?: number | string;\n scale?: number | string;\n rotate?: number | string;\n} & Record<string, string | number>;\n\nexport interface MotionProps {\n /** Starting keyframe applied before the enter animation. */\n initial?: MotionKeyframe;\n /** Target keyframe. Pass a `State` to re-animate whenever it changes. */\n animate?: MotionKeyframe | State<MotionKeyframe>;\n /** Keyframe animated to before the element is removed. */\n exit?: MotionKeyframe;\n transition?: {\n /** ms, default 300. */\n duration?: number;\n /** ms, default 0. */\n delay?: number;\n /** CSS easing, default \"ease\". */\n easing?: string;\n iterations?: number;\n };\n}\n\nconst isState = (value: unknown): value is State<MotionKeyframe> =>\n !!value &&\n typeof (value as State<MotionKeyframe>).get === \"function\" &&\n (value as { _isState?: boolean })._isState === true;\n\nconst toStyles = (frame: MotionKeyframe): Keyframe => {\n const out: Record<string, string | number> = {};\n const transforms: string[] = [];\n for (const key in frame) {\n const value = frame[key];\n if (key === \"x\") {\n transforms.push(\n `translateX(${typeof value === \"number\" ? `${value}px` : value})`,\n );\n } else if (key === \"y\") {\n transforms.push(\n `translateY(${typeof value === \"number\" ? `${value}px` : value})`,\n );\n } else if (key === \"scale\") {\n transforms.push(`scale(${value})`);\n } else if (key === \"rotate\") {\n transforms.push(\n `rotate(${typeof value === \"number\" ? `${value}deg` : value})`,\n );\n } else {\n out[key] = value;\n }\n }\n if (transforms.length) out.transform = transforms.join(\" \");\n return out as Keyframe;\n};\n\nfunction motion(props: MotionProps = {}): PartialElement {\n const { initial, animate, exit, transition = {} } = props;\n const options: KeyframeAnimationOptions = {\n duration: transition.duration ?? 300,\n delay: transition.delay ?? 0,\n easing: transition.easing ?? \"ease\",\n iterations: transition.iterations ?? 1,\n fill: \"both\",\n };\n\n return {\n _onMount: (node) => {\n const el = node.domElement as HTMLElement | null;\n if (!el || typeof el.animate !== \"function\") return;\n const target = isState(animate) ? animate.get() : animate;\n if (target) {\n el.animate(\n initial ? [toStyles(initial), toStyles(target)] : [toStyles(target)],\n options,\n );\n } else if (initial) {\n Object.assign(el.style, toStyles(initial));\n }\n if (isState(animate)) {\n const release = animate.addListener((next: MotionKeyframe) => {\n el.animate([toStyles(next)], options);\n });\n node.setMetadata(\"motionRelease\", release);\n }\n },\n _onBeforeRemove: (node, done) => {\n const el = node.domElement as HTMLElement | null;\n if (!el || !exit || typeof el.animate !== \"function\") return done();\n el.animate([toStyles(exit)], options).finished.then(done, done);\n },\n _onRemove: (node) => {\n const release = node.getMetadata(\"motionRelease\") as\n | (() => void)\n | undefined;\n release?.();\n },\n };\n}\n\nexport { motion };\n"],"mappings":"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","names":["toState","themeColor","themeSize","themeSpacing","abbreviation","props","_a","_b","color","accentColor","node","listener","toState","themeColor","themeDensity","themeSpacing","card","props","_a","color","listener","merge","toState","themeColor","themeSpacing","splitter","props","direction","defaultSize","min","max","node","element","splitterPanel","ctx","el","prop","release","size","splitterHandle","handle","isHorizontal","onMousedown","e","container","onMousemove","rect","raw","onMouseup","listener","merge","toState","themeColor","themeDensity","themeSize","themeSpacing","command","node","element","commandSearch","props","color","accentColor","ctx","input","onInput","listener","commandItem","_a","_b","el","text","release","q","toState","themeColor","themeSize","themeSpacing","toggle","props","_a","_b","color","accentColor","node","ctx","items","n","key","listener","val","arr","v","toState","themeSpacing","themeColor","themeSize","toggleGroup","props","_a","multiple","color","listener","themeSpacing","inputOTP","node","container","getInputs","onInput","e","inputs","target","idx","onKeydown","onPaste","_a","_b","_c","text","startIdx","char","i","lastFilled","toState","themeColor","themeDensity","themeSize","themeSpacing","alert","props","_a","color","listener","toState","themeColor","themeSize","themeSpacing","avatar","props","_a","color","listener","toState","themeSpacing","themeColor","themeSize","badge","props","_a","label","state","color","l","toState","themeColor","themeSize","themeSpacing","breadcrumb","props","_a","separator","color","node","listener","toState","themeColor","themeSize","themeSpacing","breadcrumbEllipsis","props","_a","color","node","listener","toState","merge","themeSpacing","themeColor","themeDensity","themeSize","toState","themeColor","themeSize","themeSpacing","xSvg","tag","props","_a","removable","color","node","removeBtn","e","listener","toState","merge","computePosition","autoUpdate","offset","flip","shift","creatFloating","props","open","placement","timer","cleanup","reference","floating","floatingNode","rootNode","mounted","openState","ensureMounted","instantShow","x","y","resolved","instantHide","show","hide","floatingPartial","listener","node","rNode","overlay","overlayEle","e","handleOutside","event","target","combobox","props","options","placement","color","open","multiple","state","toState","openState","show","hide","anchorPartial","creatFloating","popoverPartial","merge","inputStyle","themeSpacing","listener","themeSize","themeColor","inputElement","wrap","val","vals","items","opt","tag","_node","cur","filter","v","partial","node","themeDensity","toState","themeSpacing","themeColor","themeSize","popoverArrow","props","placement","color","sideOffset","bordered","place","flipMap","getFlipped","listener","_a","start","pos","end","x","y","toState","themeSpacing","themeColor","themeDensity","themeSize","blockquote","props","_a","color","node","listener","toState","themeColor","themeDensity","themeSize","themeSpacing","button","props","_a","color","node","listener","toState","themeColor","themeSpacing","themeSize","inputCheckbox","props","_a","_b","color","accentColor","node","listener","toState","themeSpacing","themeColor","themeSize","code","props","_a","color","node","listener","toState","themeColor","themeDensity","themeSize","themeSpacing","details","props","_a","_b","duration","color","accentColor","node","listener","toState","themeColor","themeSpacing","themeSize","descriptionList","props","_a","color","node","listener","toState","themeColor","themeDensity","themeSize","themeSpacing","dialog","props","color","open","state","node","e","r","_e","dlg","update","val","focusable","release","listener","toState","themeColor","themeSize","emphasis","props","_a","color","node","listener","toState","themeColor","themeSize","themeSpacing","figure","props","_a","color","node","listener","toState","themeColor","themeDensity","themeSpacing","themeSize","formGroup","props","_a","layout","color","isVertical","node","listener","toState","themeColor","themeSize","themeSpacing","Headinghift","heading","props","_a","color","node","listener","offset","toState","themeColor","themeSpacing","horizontalRule","props","_a","color","node","listener","toState","themeColor","themeSpacing","image","props","_a","color","node","listener","toState","themeSpacing","themeColor","themeSize","icon","props","_a","color","node","listener","toState","themeColor","themeDensity","themeSpacing","themeSize","inputColor","props","_a","_b","color","accentColor","node","element","listener","toState","themeColor","themeDensity","themeSpacing","themeSize","inputDateTime","props","_a","_b","mode","color","accentColor","node","element","listener","merge","toState","themeColor","themeSize","themeSpacing","atMidnight","date","addDays","count","addMonths","sameDay","a","b","isoOf","startOfWeek","weekStart","localeWeekStart","locale","_a","_b","localeObject","info","datePicker","props","_c","_d","mode","time","min","max","disabledDate","format","onChange","accentColor","toState","placeState","selection","value","primaryDate","current","base","viewYear","viewMonth","focused","hovered","hour","minute","contentElement","dateFormatter","__spreadValues","monthFormatter","weekdayFormatter","fullDateFormatter","formatOne","formatDisplay","start","end","weekdayNames","_unused","index","isDisabled","withTime","result","selectDate","instantHideRef","reapplyTime","inSelectedRange","listener","tail","low","high","day","isSelectedEnd","goToDate","shiftMonth","delta","next","shiftYear","focusActiveCell","calendar","buildCalendar","show","hide","anchorPartial","creatFloating","triggerPartial","openAndFocus","event","key","isSelectedPrimary","merge","navButton","label","ariaLabel","onClick","navButtonStyle","header","themeSize","themeSpacing","weekdayHeader","name","themeColor","gridRowStyle","grid","buildWeeks","onGridKey","children","buildTimeRow","buildFooter","node","first","month","weeks","week","cells","buildDayCell","disabled","selected","within","outside","isFocused","isToday","l","numberSelect","state","timeSelectStyle","action","today","keyboard","toState","themeColor","themeDensity","themeSpacing","themeSize","inputFile","props","_a","_b","color","accentColor","node","element","listener","toState","themeColor","themeDensity","themeSpacing","themeSize","inputSearch","props","_a","_b","color","accentColor","node","element","listener","toState","themeColor","themeDensity","themeSpacing","themeSize","inputText","props","_a","_b","color","accentColor","node","element","listener","toState","themeColor","themeSpacing","inputRange","props","_a","_b","color","accentColor","node","listener","toState","themeColor","themeDensity","themeSpacing","themeSize","inputNumber","props","_a","_b","color","accentColor","node","element","listener","toState","themeColor","themeSize","themeSpacing","keyboard","props","_a","color","node","listener","toState","themeColor","themeSize","themeSpacing","label","props","_a","_b","color","accentColor","node","listener","toState","themeColor","themeSize","themeSpacing","link","props","_a","_b","color","accentColor","node","listener","toState","themeSpacing","themeSize","themeColor","mark","props","_a","accentColor","node","listener","toState","themeColor","themeSize","paragraph","props","_a","color","node","listener","toState","themeColor","themeDensity","themeSpacing","themeSize","preformated","props","_a","color","node","listener","toState","themeColor","themeSpacing","progress","props","_a","_b","color","accentColor","node","listener","toState","themeColor","themeSize","themeSpacing","inputRadio","props","_a","_b","color","accentColor","node","listener","themeColor","themeDensity","themeSize","themeSpacing","themeColorToken","select","props","color","accentColor","node","listener","l","svg","hashString","toState","themeColor","themeSize","themeSpacing","skeleton","props","_a","color","keyframes","animationName","listener","hashString","toState","themeColor","themeSize","themeSpacing","keyframes","animationName","spinner","props","_a","color","node","listener","toState","themeColor","themeDensity","themeSize","themeSpacing","selectList","props","_a","color","multiple","state","inputs","listener","val","v","node","themeSpacing","themeColor","themeDensity","themeSize","selectItem","props","accentColor","color","value","node","select","state","listener","val","v","toState","merge","themeSpacing","themeColor","themeDensity","themeSize","selectBox","props","options","placement","color","open","multiple","state","toState","openState","show","hide","anchorPartial","creatFloating","popoverPartial","merge","wrap","listener","val","vals","opt","tag","_node","cur","filter","v","themeSpacing","partial","node","themeDensity","themeColor","themeSize","toState","themeColor","themeSize","themeSpacing","inputSwitch","props","_a","accentColor","node","listener","toState","themeColor","themeSize","themeSpacing","buttonSwitch","props","_a","_b","checked","check","color","accentColor","node","listener","toState","themeColor","themeSize","small","props","_a","color","node","listener","toState","themeColor","themeSize","strong","props","_a","color","node","listener","toState","themeColor","themeSize","subscript","props","_a","color","node","listener","toState","themeColor","themeSize","superscript","props","_a","color","node","listener","toState","themeColor","themeDensity","themeSpacing","themeSize","table","props","_a","color","node","listener","l","toState","themeColor","themeDensity","themeSpacing","themeSize","textarea","props","_a","_b","color","accentColor","autoResize","node","el","resize","listener","toState","themeColor","themeSize","themeSpacing","unorderedList","props","_a","color","node","listener","toState","themeColor","themeSize","themeSpacing","orderedList","props","_a","color","node","listener","toState","themeColor","themeDensity","themeSize","themeSpacing","getPages","current","total","_","pages","start","end","i","pagination","props","_a","color","accentColor","state","toState","btnBase","listener","themeSpacing","themeDensity","themeSize","themeColor","activeStyle","__spreadProps","__spreadValues","node","content","page","items","p","isActive","toState","themeColor","themeSize","themeSpacing","divider","props","_a","color","node","listener","toState","themeColor","themeDensity","themeSize","themeSpacing","translateOut","marginMap","isVertical","p","drawer","props","color","open","placement","size","state","defaultSize","drawerSize","node","e","_e","dlg","update","val","release","listener","toState","merge","popover","props","_a","open","placement","openOn","popoverId","openState","toState","placeState","show","hide","anchorPartial","creatFloating","popoverPartial","node","id","merge","listener","e","related","root","floatingEl","toState","themeColor","themeDensity","themeSize","themeSpacing","toast","props","position","color","state","isTop","isCenter","isRight","overlayEle","rootNode","overlay","listener","node","done","onEnd","e","merge","toState","themeSpacing","themeColor","themeDensity","themeSize","tooltip","props","open","placement","content","placeState","toState","contentState","tooltipId","contentElement","listener","show","hide","anchorPartial","creatFloating","tooltipPartial","node","id","themeSpacing","themeDensity","themeColor","themeSize","popoverArrow","merge","e","ElementNode","getItemId","node","index","transitionGroup","props","duration","delay","previousRects","item","dom","key","prev","next","deltaX","deltaY","previousTransition","previousTransform","cleanup","onEnd","event","merge","toState","tabs","props","node","element","partial","themeSpacing","themeColor","themeDensity","themeSize","tab","props","accentColor","color","node","_a","_b","context","children","n","key","part","listener","e","_c","_d","k","tabs","idx","next","target","themeSpacing","themeDensity","tabPanel","listener","node","_a","_b","context","children","n","key","part","merge","toState","themeColor","themeDensity","themeSize","themeSpacing","menu","props","color","selectable","node","element","_a","partial","listener","themeSpacing","themeColor","themeDensity","themeSize","menuItem","props","accentColor","color","node","_a","_b","context","children","n","key","listener","e","_c","_d","k","items","idx","next","isState","value","toStyles","frame","out","transforms","key","motion","props","_a","_b","_c","_d","initial","animate","exit","transition","options","node","el","target","release","next","done"]}
1
+ {"version":3,"sources":["../src/patches/abbreviation.ts","../src/patches/alert.ts","../src/patches/avatar.ts","../src/patches/badge.ts","../src/patches/blockquote.ts","../src/patches/breadcrumb.ts","../src/patches/breadcrumbEllipsis.ts","../src/patches/button.ts","../src/patches/buttonSwitch.ts","../src/patches/card.ts","../src/patches/code.ts","../src/patches/combobox.ts","../src/utils/floating.ts","../src/patches/tag.ts","../src/patches/command.ts","../src/patches/datePicker.ts","../src/patches/descriptionList.ts","../src/patches/details.ts","../src/patches/dialog.ts","../src/patches/divider.ts","../src/patches/drawer.ts","../src/patches/emphasis.ts","../src/patches/figure.ts","../src/patches/formGroup.ts","../src/patches/heading.ts","../src/patches/horizontalRule.ts","../src/patches/icon.ts","../src/patches/image.ts","../src/patches/inputCheckbox.ts","../src/patches/inputColor.ts","../src/patches/inputDateTime.ts","../src/patches/inputFile.ts","../src/patches/inputNumber.ts","../src/patches/inputOTP.ts","../src/patches/inputRadio.ts","../src/patches/inputRange.ts","../src/patches/inputSearch.ts","../src/patches/inputSwitch.ts","../src/patches/inputText.ts","../src/patches/keyboard.ts","../src/patches/label.ts","../src/patches/link.ts","../src/patches/mark.ts","../src/patches/menu.ts","../src/patches/menuItem.ts","../src/patches/motion.ts","../src/patches/orderedList.ts","../src/patches/pagination.ts","../src/patches/paragraph.ts","../src/patches/popover.ts","../src/patches/popoverArrow.ts","../src/patches/preformated.ts","../src/patches/progress.ts","../src/patches/select.ts","../src/patches/selectBox.ts","../src/patches/selectItem.ts","../src/patches/selectList.ts","../src/patches/skeleton.ts","../src/patches/small.ts","../src/patches/spinner.ts","../src/patches/splitter.ts","../src/patches/strong.ts","../src/patches/subscript.ts","../src/patches/superscript.ts","../src/patches/tab.ts","../src/patches/table.ts","../src/patches/tabPanel.ts","../src/patches/tabs.ts","../src/patches/textarea.ts","../src/patches/toast.ts","../src/patches/toggle.ts","../src/patches/toggleGroup.ts","../src/patches/tooltip.ts","../src/patches/transitionGroup.ts","../src/patches/unorderedList.ts"],"sourcesContent":["import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Styles an abbreviation/acronym with a dotted underline and a \"help\" cursor,\n * shifting to the accent color on hover. Apply to an `<abbr>` element.\n *\n * @hostTag abbr\n * @param props.color - Base text/decoration color tone. Optional `ValueOrState<ThemeColor>`, default \"neutral\".\n * @param props.accentColor - Hover color tone. Optional `ValueOrState<ThemeColor>`, default \"primary\".\n * @example { abbr: \"HTML\", title: \"HyperText Markup Language\", $: [abbreviation({ accentColor: \"primary\" })] }\n */\nfunction abbreviation(\n props: {\n color?: ValueOrState<ThemeColor>;\n accentColor?: ValueOrState<ThemeColor>;\n } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"abbr\") {\n console.warn(`\"abbreviation\" primitive patch must use abbr tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener),\n backgroundColor: (listener) => themeColor(listener),\n color: (listener) =>\n themeColor(listener, \"shift-10\", color.get(listener)),\n textDecorationLine: \"underline\",\n textDecorationStyle: \"dotted\",\n textDecorationColor: (listener) =>\n themeColor(listener, \"shift-7\", color.get(listener)),\n textUnderlineOffset: themeSpacing(0.72),\n cursor: \"help\",\n \"&:hover\": {\n color: (listener) =>\n themeColor(listener, \"shift-11\", accentColor.get(listener)),\n textDecorationColor: (listener) =>\n themeColor(listener, \"shift-9\", accentColor.get(listener)),\n },\n },\n };\n}\n\nexport { abbreviation };\n","import type { PartialElement } from \"@domphy/core\";\nimport { toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeDensity,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * A semantic alert surface block with a colored inset bar, padding, and\n * `role=\"alert\"`. Typically applied to a `<div>` (any block container).\n *\n * @param props.color - Surface/accent color tone. Optional `ValueOrState<ThemeColor>`, default \"primary\".\n * @example { div: \"Saved successfully\", $: [alert({ color: \"success\" })] }\n */\nfunction alert(\n props: { color?: ValueOrState<ThemeColor> } = {},\n): PartialElement {\n const color = toState(props.color ?? \"primary\", \"color\");\n\n return {\n role: \"alert\",\n // Alert is a semantic surface block, so it should shift the local surface context.\n dataTone: \"shift-2\",\n style: {\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: themeSpacing(3),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 4),\n boxShadow: (listener) =>\n `inset ${themeSpacing(1)} 0 0 0 ${themeColor(listener, \"shift-8\", color.get(listener))}`,\n backgroundColor: (listener) =>\n themeColor(listener, \"inherit\", color.get(listener)),\n color: (listener) =>\n themeColor(listener, \"shift-10\", color.get(listener)),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n },\n };\n}\n\nexport { alert };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * A circular avatar container that centers initials/text and cover-fits any\n * child `<img>`. Typically applied to an inline-flex container such as a `<span>`.\n *\n * @param props.color - Background/foreground color tone. Optional `ValueOrState<ThemeColor>`, default \"primary\".\n * @example { span: \"JD\", $: [avatar({ color: \"primary\" })] }\n */\nfunction avatar(\n props: { color?: ValueOrState<ThemeColor> } = {},\n): PartialElement {\n const color = toState(props.color ?? \"primary\", \"color\");\n\n return {\n dataTone: \"shift-2\",\n style: {\n position: \"relative\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n overflow: \"hidden\",\n borderRadius: \"50%\",\n flexShrink: 0,\n width: themeSpacing(9),\n height: themeSpacing(9),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n fontWeight: \"600\",\n userSelect: \"none\",\n backgroundColor: (listener) =>\n themeColor(listener, \"inherit\", color.get(listener)),\n color: (listener) =>\n themeColor(listener, \"shift-11\", color.get(listener)),\n \"& img\": {\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n },\n },\n };\n}\n\nexport { avatar };\n","import {\n type DomphyElement,\n type PartialElement,\n toState,\n type ValueOrState,\n} from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Renders a small count/label bubble pinned to the top-right corner of its host\n * (via a `::after` pseudo-element). Typically applied to an inline container such\n * as a `<span>` wrapping an icon or element.\n *\n * @param props.color - Badge color tone. Optional `ValueOrState<ThemeColor>`, default \"danger\".\n * @param props.label - Text/number shown in the badge. Optional `ValueOrState<string | number>`, default 999.\n * @example { span: \"🔔\", $: [badge({ label: 3, color: \"danger\" })] }\n */\nfunction badge(\n props: {\n color?: ValueOrState<ThemeColor>;\n label?: ValueOrState<string | number>;\n } = {},\n): PartialElement {\n const { label = 999 } = props;\n const state = toState(label);\n const color = toState(props.color ?? \"danger\", \"color\");\n return {\n style: {\n position: \"relative\",\n \"&::after\": {\n content: (l) => `\"${state.get(l)}\"`,\n position: \"absolute\",\n top: 0,\n right: 0,\n transform: \"translate(50%,-50%)\",\n paddingInline: themeSpacing(1),\n minWidth: themeSpacing(6),\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: (l) => themeSize(l, \"decrease-1\"),\n borderRadius: themeSpacing(999),\n backgroundColor: (l) => themeColor(l, \"shift-9\", color.get(l)),\n color: (l) => themeColor(l, \"shift-0\", color.get(l)),\n },\n },\n };\n}\n\nexport { badge };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeDensity,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Styles a quotation block with a colored inset side bar, padded surface, and\n * shifted tone. Apply to a `<blockquote>` element.\n *\n * @hostTag blockquote\n * @param props.color - Surface/bar color tone. Optional `ValueOrState<ThemeColor>`, default \"inherit\".\n * @example { blockquote: \"Design is how it works.\", $: [blockquote({ color: \"primary\" })] }\n */\nfunction blockquote(\n props: { color?: ValueOrState<ThemeColor> } = {},\n): PartialElement {\n const color = toState(props.color ?? \"inherit\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"blockquote\") {\n console.warn(`\"blockquote\" primitive patch must use blockquote tag`);\n }\n },\n dataTone: \"shift-2\",\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n backgroundColor: (listener) =>\n themeColor(listener, \"inherit\", color.get(listener)),\n boxShadow: (listener) =>\n `inset ${themeSpacing(1)} 0 0 0 ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n border: \"none\",\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 4),\n margin: 0,\n },\n };\n}\n\nexport { blockquote };\n","import type { PartialElement } from \"@domphy/core\";\nimport { toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * A horizontal breadcrumb navigation that lays out its children with a\n * separator between items and highlights the `[aria-current=page]` item.\n * Apply to a `<nav>` element.\n *\n * @hostTag nav\n * @param props.color - Color tone for links/separators. Optional `ValueOrState<ThemeColor>`, default \"neutral\".\n * @param props.separator - String inserted between items via `::after`. Optional `string`, default \"/\".\n * @example { nav: null, $: [breadcrumb({ separator: \"›\" })] }\n */\nfunction breadcrumb(\n props: { color?: ValueOrState<ThemeColor>; separator?: string } = {},\n): PartialElement {\n const { separator = \"/\" } = props;\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"nav\")\n console.warn('\"breadcrumb\" patch must use nav tag');\n },\n ariaLabel: \"breadcrumb\",\n style: {\n display: \"flex\",\n alignItems: \"center\",\n flexWrap: \"wrap\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n gap: themeSpacing(1),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) =>\n themeColor(listener, \"inherit\", color.get(listener)),\n \"& > *\": {\n display: \"inline-flex\",\n alignItems: \"center\",\n color: (listener) =>\n themeColor(listener, \"shift-8\", color.get(listener)),\n },\n \"& > *:not(:last-child)::after\": {\n content: `\"${separator}\"`,\n color: (listener) =>\n themeColor(listener, \"shift-4\", color.get(listener)),\n paddingInlineStart: themeSpacing(1),\n },\n \"& > [aria-current=page]\": {\n color: (listener) =>\n themeColor(listener, \"shift-10\", color.get(listener)),\n pointerEvents: \"none\",\n },\n },\n };\n}\n\nexport { breadcrumb };\n","import type { PartialElement } from \"@domphy/core\";\nimport { toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * An ellipsis trigger button for collapsed breadcrumb items, with hover and\n * focus-visible states. Apply to a `<button>` element.\n *\n * @hostTag button\n * @param props.color - Color tone for the trigger. Optional `ValueOrState<ThemeColor>`, default \"neutral\".\n * @example { button: \"…\", $: [breadcrumbEllipsis({ color: \"neutral\" })] }\n */\nfunction breadcrumbEllipsis(\n props: { color?: ValueOrState<ThemeColor> } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"button\") {\n console.warn('\"breadcrumbEllipsis\" patch must use button tag');\n }\n },\n ariaLabel: \"More breadcrumb items\",\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n paddingInline: themeSpacing(1),\n border: \"none\",\n background: \"none\",\n cursor: \"pointer\",\n color: (listener) => themeColor(listener, \"shift-8\", color.get(listener)),\n borderRadius: themeSpacing(1),\n \"&:hover\": {\n color: (listener) =>\n themeColor(listener, \"shift-10\", color.get(listener)),\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-2\", color.get(listener)),\n },\n \"&:focus-visible\": {\n outline: (listener) =>\n `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", color.get(listener))}`,\n outlineOffset: themeSpacing(0.5),\n },\n },\n };\n}\n\nexport { breadcrumbEllipsis };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeDensity,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * A themed button control with density-aware padding/radius and hover, focus-visible,\n * `[disabled]`, and `[aria-busy=true]` states. Apply to a `<button>` element.\n *\n * @hostTag button\n * @param props.color - Button color tone. Optional `ValueOrState<ThemeColor>`, default \"primary\".\n * @example { button: \"Save\", $: [button({ color: \"primary\" })] }\n */\nfunction button(\n props: { color?: ValueOrState<ThemeColor> } = {},\n): PartialElement {\n const color = toState(props.color ?? \"primary\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"button\") {\n console.warn(`\"button\" primitive patch must use button tag`);\n }\n },\n style: {\n appearance: \"none\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n // Single-line bounded control: block/radius = 1D, inline = 3D.\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\n width: \"fit-content\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n gap: (listener) => themeSpacing(themeDensity(listener) * 1),\n userSelect: \"none\",\n fontFamily: \"inherit\",\n lineHeight: \"inherit\",\n border: \"none\",\n outlineOffset: \"-1px\",\n outlineWidth: \"1px\",\n outline: (listener) =>\n `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) =>\n themeColor(listener, \"inherit\", color.get(listener)),\n \"&:hover:not([disabled]):not([aria-busy=true])\": {\n color: (listener) =>\n themeColor(listener, \"shift-10\", color.get(listener)),\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-2\", color.get(listener)),\n },\n \"&:focus-visible\": {\n boxShadow: (listener) =>\n `inset 0 0 0 ${themeSpacing(0.5)} ${themeColor(listener, \"shift-6\", color.get(listener))}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-2\", \"neutral\"),\n outline: (listener) =>\n `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n },\n \"&[aria-busy=true]\": {\n opacity: 0.7,\n cursor: \"wait\",\n pointerEvents: \"none\",\n },\n },\n };\n}\n\nexport { button };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * A pill-shaped toggle switch with `role=\"switch\"`; clicking flips the bound\n * `checked` state and slides the thumb. Apply to a `<button>` element.\n *\n * @hostTag button\n * @param props.checked - Toggle state. Optional `ValueOrState<boolean>`, default false.\n * @param props.accentColor - Color tone when checked (on). Optional `ValueOrState<ThemeColor>`, default \"primary\".\n * @param props.color - Color tone when unchecked (off track). Optional `ValueOrState<ThemeColor>`, default \"neutral\".\n * @example { button: { span: null }, $: [buttonSwitch({ checked: true })] }\n */\nfunction buttonSwitch(\n props: {\n checked?: ValueOrState<boolean>;\n accentColor?: ValueOrState<ThemeColor>;\n color?: ValueOrState<ThemeColor>;\n } = {},\n): PartialElement {\n const { checked = false } = props;\n\n const check = toState(checked);\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n _onSchedule: (node) => {\n if (node.tagName !== \"button\") {\n console.warn(`\"buttonSwitch\" primitive patch must use button tag`);\n }\n },\n role: \"switch\",\n ariaChecked: (listener) => check.get(listener),\n dataTone: \"shift-2\",\n onClick: () => check.set(!check.get()),\n style: {\n position: \"relative\",\n display: \"inline-flex\",\n alignItems: \"center\",\n fontSize: (listener) => themeSize(listener),\n border: \"none\",\n outlineWidth: \"1px\",\n outline: (listener) =>\n `1px solid ${themeColor(listener, \"shift-3\", color.get(listener))}`,\n minWidth: themeSpacing(12),\n minHeight: themeSpacing(6),\n borderRadius: themeSpacing(999),\n paddingLeft: themeSpacing(7),\n paddingRight: themeSpacing(2),\n transition: \"padding-left 0.3s, padding-right 0.3s\",\n backgroundColor: (listener) =>\n themeColor(listener, \"inherit\", color.get(listener)),\n \"& > :first-child\": {\n content: '\"\"',\n position: \"absolute\",\n display: \"inline-flex\",\n alignItems: \"center\",\n left: themeSpacing(0.5),\n top: \"50%\",\n transform: \"translateY(-50%)\",\n transition: \"left 0.3s\",\n width: themeSpacing(5),\n height: themeSpacing(5),\n borderRadius: themeSpacing(999),\n color: (listener) => themeColor(listener, \"shift-9\"),\n backgroundColor: (listener) =>\n themeColor(listener, \"decrease-2\", color.get(listener)),\n },\n \"&[aria-checked=true]\": {\n backgroundColor: (listener) =>\n themeColor(listener, \"increase-3\", accentColor.get(listener)),\n outline: \"none\",\n color: (listener) => themeColor(listener, \"decrease-2\"),\n paddingLeft: themeSpacing(2),\n paddingRight: themeSpacing(7),\n },\n \"&[aria-checked=true] > :first-child\": {\n left: `calc(100% - ${themeSpacing(5.5)})`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n },\n },\n };\n}\n\nexport { buttonSwitch };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeDensity,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * A grid-based card surface that auto-places known child elements into named\n * regions: `<img>` (image), headings (title), `<p>` (description), `<aside>`\n * (aside), `<div>` (content), and `<footer>` (footer). Typically applied to a\n * `<div>` (any block container).\n *\n * @param props.color - Surface/border color tone. Optional `ValueOrState<ThemeColor>`, default \"neutral\".\n * @example { div: { h3: \"Title\", p: \"Body\" }, $: [card({ color: \"neutral\" })] }\n */\nfunction card(\n props: { color?: ValueOrState<ThemeColor> } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n return {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"1fr auto\",\n gridTemplateAreas:\n '\"image image\" \"title aside\" \"desc aside\" \"content content\" \"footer footer\"',\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 2),\n backgroundColor: (listener) =>\n themeColor(listener, \"inherit\", color.get(listener)),\n color: (listener) =>\n themeColor(listener, \"shift-10\", color.get(listener)),\n outline: (listener) =>\n `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n outlineOffset: \"-1px\",\n overflow: \"hidden\",\n \"& > img\": {\n gridArea: \"image\",\n width: \"100%\",\n height: \"auto\",\n display: \"block\",\n },\n \"& > :is(h1,h2,h3,h4,h5,h6)\": {\n gridArea: \"title\",\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 4),\n fontWeight: \"600\",\n margin: 0,\n },\n \"& > p\": {\n gridArea: \"desc\",\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 4),\n color: (listener) =>\n themeColor(listener, \"shift-9\", color.get(listener)),\n margin: 0,\n },\n \"& > aside\": {\n gridArea: \"aside\",\n alignSelf: \"center\",\n padding: (listener) => themeSpacing(themeDensity(listener) * 2),\n height: \"auto\",\n },\n \"& > div\": {\n gridArea: \"content\",\n padding: (listener) => themeSpacing(themeDensity(listener) * 4),\n color: (listener) =>\n themeColor(listener, \"shift-10\", color.get(listener)),\n },\n \"& > footer\": {\n gridArea: \"footer\",\n display: \"flex\",\n gap: themeSpacing(2),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 4),\n borderTop: (listener) =>\n `1px solid ${themeColor(listener, \"shift-3\", color.get(listener))}`,\n },\n },\n };\n}\n\nexport { card };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Styles an inline code snippet with a subtle surface background, rounded corners,\n * and shifted tone. Apply to a `<code>` element.\n *\n * @hostTag code\n * @param props.color - Surface/text color tone. Optional `ValueOrState<ThemeColor>`, default \"neutral\".\n * @example { code: \"npm install\", $: [code({ color: \"neutral\" })] }\n */\nfunction code(\n props: { color?: ValueOrState<ThemeColor> } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n dataTone: \"shift-2\",\n _onInsert: (node) => {\n if (node.tagName !== \"code\") {\n console.warn(`\"code\" primitive patch must use code tag`);\n }\n },\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) =>\n themeColor(listener, \"inherit\", color.get(listener)),\n height: themeSpacing(6),\n paddingInline: themeSpacing(1.5),\n borderRadius: themeSpacing(1),\n },\n };\n}\n\nexport { code };\n","import {\n type DomphyElement,\n merge,\n type PartialElement,\n type StyleObject,\n toState,\n type ValueOrState,\n} from \"@domphy/core\";\nimport type { Placement } from \"@domphy/floating\";\nimport {\n type ThemeColor,\n themeColor,\n themeDensity,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\nimport { creatFloating } from \"../utils/floating.js\";\nimport { tag } from \"./tag.js\";\n\n/**\n * A combobox/multi-select control: renders selected options as removable tags\n * plus an input, and shows a floating popover (`content`) anchored to the host.\n * Apply to a `<div>` element.\n *\n * @hostTag div\n * @param props.multiple - Allow selecting multiple values (popover stays open on click). Optional `boolean`, default false.\n * @param props.value - Selected value(s). Optional `ValueOrState<Array<number | string | null | undefined> | number | string | null | undefined>`, no default.\n * @param props.options - Available `{ label, value }` options used to render selected tags. Optional `Array<{ label: string; value: string }>`, default `[]`.\n * @param props.placement - Floating popover placement. Optional `ValueOrState<Placement>`, default \"bottom\".\n * @param props.content - The floating popover content element. Required `DomphyElement`.\n * @param props.color - Color tone for the control. Optional `ThemeColor`, default \"neutral\".\n * @param props.open - Whether the popover is open. Optional `ValueOrState<boolean>`, default false.\n * @param props.input - Custom input element; when omitted a default `<input>` is created. Optional `DomphyElement`.\n * @example { div: null, $: [combobox({ options: [{ label: \"A\", value: \"a\" }], content: { div: null } })] }\n */\nfunction combobox(props: {\n multiple?: boolean;\n value?: ValueOrState<\n | Array<number | string | null | undefined>\n | number\n | string\n | null\n | undefined\n >;\n options?: Array<{ label: string; value: string }>;\n placement?: ValueOrState<Placement>;\n content: DomphyElement;\n color?: ThemeColor;\n open?: ValueOrState<boolean>;\n input?: DomphyElement;\n}): PartialElement {\n const {\n options = [],\n placement = \"bottom\",\n color = \"neutral\",\n open = false,\n multiple = false,\n } = props;\n\n const state = toState(props.value);\n const openState = toState(open);\n const { show, hide, anchorPartial } = creatFloating({\n open: openState,\n placement: toState(placement),\n content: props.content,\n });\n\n const popoverPartial: PartialElement = {\n onClick: () => !multiple && hide(),\n };\n\n merge(props.content, popoverPartial);\n\n const inputStyle: StyleObject = {\n border: \"none\",\n outline: \"none\",\n padding: 0,\n margin: 0,\n flex: 1,\n height: themeSpacing(6),\n marginInlineStart: themeSpacing(2),\n fontSize: (listener: any) => themeSize(listener, \"inherit\"),\n color: (listener: any) => themeColor(listener, \"shift-9\", color),\n backgroundColor: (listener: any) => themeColor(listener, \"inherit\", color),\n };\n\n let inputElement: DomphyElement;\n if (props.input) {\n merge(props.input, {\n onFocus: () => show(),\n style: inputStyle,\n _key: \"combobox-input\",\n });\n inputElement = props.input;\n } else {\n inputElement = {\n input: null,\n onFocus: () => show(),\n value: (listener: any) => {\n state.get(listener);\n return \"\";\n },\n style: inputStyle,\n _key: \"combobox-input\",\n };\n }\n\n const wrap: DomphyElement<\"div\"> = {\n div: (listener) => {\n const val = state.get(listener);\n const vals = Array.isArray(val) ? val : [val];\n const opts = options.filter((opt) => vals.includes(opt.value));\n const items: DomphyElement[] = opts.map((opt) => {\n return {\n span: opt.label,\n $: [tag({ color, removable: true })],\n _key: opt.value,\n _onRemove: (_node) => {\n const cur = state.get();\n const curVals = Array.isArray(cur) ? cur : [cur];\n const filter = curVals.filter((v) => v !== opt.value);\n multiple ? state.set(filter as any) : state.set(filter[0] as any);\n },\n };\n });\n items.push(inputElement);\n return items;\n },\n style: {\n display: \"flex\",\n flexWrap: \"wrap\",\n gap: themeSpacing(1),\n },\n };\n\n const partial: PartialElement = {\n _onInsert: (node) => {\n if (node.tagName !== \"div\") {\n console.warn(`\"combobox\" primitive patch must use div tag`);\n }\n },\n _onInit: (node) => node.children.insert(wrap),\n style: {\n minWidth: themeSpacing(32),\n outlineOffset: \"-1px\",\n outline: (listener) =>\n `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 1),\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\n },\n };\n\n merge(anchorPartial, partial);\n return anchorPartial;\n}\n\nexport { combobox };\n","import {\n type DomphyElement,\n type ElementNode,\n merge,\n type PartialElement,\n type State,\n toState,\n type ValueOrState,\n} from \"@domphy/core\";\nimport {\n autoUpdate,\n computePosition,\n flip,\n offset,\n type Placement,\n shift,\n} from \"@domphy/floating\";\n\nfunction creatFloating(props: {\n open?: ValueOrState<boolean>;\n placement: State<Placement>;\n content: DomphyElement;\n}) {\n const { open = false, placement } = props;\n\n let timer: ReturnType<typeof setTimeout> | null = null;\n let cleanup: (() => void) | null = null;\n let reference: HTMLElement | null = null;\n let floating: HTMLElement | null = null;\n let floatingNode: ElementNode | null = null;\n let rootNode: ElementNode | null = null;\n let mounted = false;\n const openState = toState(open);\n\n const ensureMounted = () => {\n if (mounted || !rootNode) return;\n mounted = true;\n floatingNode = rootNode.children!.insert(props.content) as ElementNode;\n };\n\n const instantShow = () => {\n ensureMounted();\n if (reference && floating) {\n cleanup && cleanup();\n cleanup = autoUpdate(reference, floating, () => {\n computePosition(reference as HTMLElement, floating as HTMLElement, {\n placement: placement.get() as Placement,\n middleware: [offset(12), flip(), shift()],\n strategy: \"fixed\",\n }).then(({ x, y, placement: resolved }) => {\n Object.assign((floating as HTMLElement).style, {\n left: `${x}px`,\n top: `${y}px`,\n });\n placement.set(resolved);\n });\n });\n openState.set(true);\n }\n };\n const instantHide = () => {\n cleanup && cleanup();\n cleanup = null;\n openState.set(false);\n };\n const show = () => {\n timer && clearTimeout(timer);\n timer = setTimeout(instantShow, 100);\n };\n const hide = () => {\n timer && clearTimeout(timer);\n timer = setTimeout(instantHide, 100);\n };\n\n const floatingPartial: PartialElement = {\n style: {\n position: \"fixed\",\n pointerEvents: \"auto\",\n visibility: (listener) =>\n openState.get(listener) ? \"visible\" : \"hidden\",\n },\n _onMount: (node) => (floating = node.domElement as HTMLElement),\n _portal: (rNode) => {\n let overlay = rNode.domElement!.querySelector(`#domphy-floating`);\n if (!overlay) {\n const overlayEle: DomphyElement<\"div\"> = {\n div: [],\n id: `domphy-floating`,\n style: {\n position: \"fixed\",\n inset: 0,\n zIndex: 20,\n pointerEvents: \"none\",\n },\n };\n const overlayNode = rNode.children!.insert(overlayEle) as ElementNode;\n overlay = overlayNode.domElement!;\n }\n return overlay;\n },\n };\n\n merge(props.content, floatingPartial);\n\n const anchorPartial: PartialElement = {\n onKeyDown: (e) => (e as KeyboardEvent).key === \"Escape\" && hide(),\n _onMount: (node) => {\n rootNode = node.getRoot();\n reference = node.domElement as HTMLElement;\n\n const handleOutside = (event: MouseEvent) => {\n if (!openState.get() || !reference || !floating) return;\n const target = event.target as Node;\n if (!reference.contains(target) && !floating.contains(target)) {\n hide();\n }\n };\n node.getRoot().domElement!.addEventListener(\"click\", handleOutside);\n\n node.addHook(\"BeforeRemove\", () => {\n if (timer) clearTimeout(timer);\n // Tear down the @domphy/floating autoUpdate loop (scroll/resize/rAF\n // listeners). Without this, removing the anchor while the overlay\n // is open leaks observers that keep positioning a detached node.\n if (cleanup) {\n cleanup();\n cleanup = null;\n }\n floatingNode && floatingNode.remove();\n node.getRoot().domElement!.removeEventListener(\"click\", handleOutside);\n });\n },\n };\n\n return { show, hide, anchorPartial };\n}\n\nexport { creatFloating };\n","import type { DomphyElement, PartialElement } from \"@domphy/core\";\nimport { toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\nconst xSvg = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M6.707 5.293l5.293 5.292l5.293 -5.292a1 1 0 0 1 1.414 1.414l-5.292 5.293l5.292 5.293a1 1 0 0 1 -1.414 1.414l-5.293 -5.292l-5.293 5.292a1 1 0 1 1 -1.414 -1.414l5.292 -5.293l-5.292 -5.293a1 1 0 0 1 1.414 -1.414\" /></svg>`;\n\n/**\n * Styles an inline chip/tag (rounded, bordered, optional remove button).\n * No host tag check; typically applied to a `<span>`. When `removable` is true,\n * a close button is inserted that removes the host node on click.\n *\n * @hostTag span\n * @param props.color - Theme color for the chip background/border/text. Optional, accepts a value or state. Defaults to `\"neutral\"`.\n * @param props.removable - When true, renders a remove (x) button that removes the tag on click. Optional. Defaults to `false`.\n * @example { span: \"Label\", $: [tag({ removable: true })] }\n */\nfunction tag(\n props: { color?: ValueOrState<ThemeColor>; removable?: boolean } = {},\n): PartialElement {\n const { removable = false } = props;\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n dataTone: \"shift-2\",\n _onInit: (node) => {\n const removeBtn: DomphyElement<\"span\"> = {\n span: xSvg,\n onClick: (e) => {\n (e as Event).stopPropagation();\n node.remove();\n },\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n cursor: \"pointer\",\n borderRadius: themeSpacing(1),\n width: themeSpacing(4),\n height: themeSpacing(4),\n flexShrink: 0,\n \"&:hover\": {\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-4\", color.get(listener)),\n },\n },\n };\n\n removable && node.children.insert(removeBtn);\n },\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n whiteSpace: \"nowrap\",\n userSelect: \"none\",\n height: themeSpacing(6),\n paddingBlock: \"0px\",\n borderRadius: themeSpacing(1),\n paddingInlineStart: themeSpacing(2),\n paddingInlineEnd: removable ? themeSpacing(1) : themeSpacing(2),\n gap: themeSpacing(2),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n backgroundColor: (listener) =>\n themeColor(listener, \"inherit\", color.get(listener)),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) =>\n `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n },\n };\n}\n\nexport { tag };\n","import { merge, type PartialElement, toState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeDensity,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Command-palette container patch. Sets up a vertical flex column and provides a\n * shared `command` context (a query State) consumed by `commandSearch` and\n * `commandItem` descendants to filter the list. Typically applied to a `<div>`.\n *\n * @example { div: [...], $: [command()] }\n */\nfunction command(): PartialElement {\n return {\n _onSchedule: (node, element) => {\n merge(element, {\n _context: {\n command: {\n query: toState(\"\"),\n },\n },\n });\n },\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n },\n };\n}\n\n/**\n * Search input for a command palette. Wires the input's value into the parent\n * `command` context's query State so descendant `commandItem`s filter live.\n * Apply to an `<input>` element used inside a `command()`.\n *\n * @hostTag input\n * @param props.color - Base theme color tone. Defaults to \"neutral\".\n * @param props.accentColor - Accent color used for the focus border. Defaults to \"primary\".\n * @example { input: \"\", $: [commandSearch({ accentColor: \"primary\" })] }\n */\nfunction commandSearch(\n props: { color?: ThemeColor; accentColor?: ThemeColor } = {},\n): PartialElement {\n const { color = \"neutral\", accentColor = \"primary\" } = props;\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"input\") {\n console.warn(`\"commandSearch\" patch must use input tag`);\n }\n },\n _onMount: (node) => {\n const ctx = node.getContext(\"command\");\n if (!ctx) {\n console.warn(`\"commandSearch\" patch must be used inside a \"command\"`);\n return;\n }\n const input = node.domElement as HTMLInputElement;\n const onInput = () => ctx.query.set(input.value);\n input.addEventListener(\"input\", onInput);\n node.addHook(\"Remove\", () => input.removeEventListener(\"input\", onInput));\n },\n style: {\n fontFamily: \"inherit\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\n border: \"none\",\n borderBottom: (listener) =>\n `1px solid ${themeColor(listener, \"shift-3\", color)}`,\n outline: \"none\",\n color: (listener) => themeColor(listener, \"shift-10\", color),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\n \"&::placeholder\": {\n color: (listener) => themeColor(listener, \"shift-7\"),\n },\n \"&:focus-visible\": {\n borderBottomColor: (listener) =>\n themeColor(listener, \"shift-6\", accentColor),\n },\n },\n };\n}\n\n/**\n * Selectable item (`role=\"option\"`) in a command palette. Subscribes to the\n * parent `command` context's query State and hides itself when its text content\n * does not match the current query. Typically applied to a `<button>` (or any\n * clickable element) used inside a `command()`.\n *\n * @param props.color - Base theme color tone. Defaults to \"neutral\".\n * @param props.accentColor - Accent color used for the focus outline. Defaults to \"primary\".\n * @example { button: \"Open file\", $: [commandItem({ color: \"neutral\" })] }\n */\nfunction commandItem(\n props: { color?: ThemeColor; accentColor?: ThemeColor } = {},\n): PartialElement {\n const { color = \"neutral\", accentColor = \"primary\" } = props;\n return {\n role: \"option\",\n _onMount: (node) => {\n const ctx = node.getContext(\"command\");\n if (!ctx) {\n console.warn(`\"commandItem\" patch must be used inside a \"command\"`);\n return;\n }\n const el = node.domElement as HTMLElement;\n const text = el.textContent?.toLowerCase() ?? \"\";\n const release = ctx.query.addListener((q: string) => {\n el.hidden = q.length > 0 && !text.includes(q.toLowerCase());\n });\n node.addHook(\"Remove\", release);\n },\n style: {\n cursor: \"pointer\",\n display: \"flex\",\n alignItems: \"center\",\n width: \"100%\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n height: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n border: \"none\",\n outline: \"none\",\n color: (listener) => themeColor(listener, \"shift-9\", color),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\n \"&:hover:not([disabled])\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color),\n },\n \"&:focus-visible\": {\n outline: (listener) =>\n `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor)}`,\n outlineOffset: `-${themeSpacing(0.5)}`,\n },\n },\n };\n}\n\nexport { command, commandSearch, commandItem };\n","import {\n type DomphyElement,\n type Listener,\n merge,\n type PartialElement,\n toState,\n type ValueOrState,\n} from \"@domphy/core\";\nimport type { Placement } from \"@domphy/floating\";\nimport {\n type ThemeColor,\n themeColor,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\nimport { creatFloating } from \"../utils/floating.js\";\n\n/** A single date selection, or a `[start, end]` tuple in range mode. */\nexport type DatePickerValue = Date | null | [Date | null, Date | null];\n\nexport interface DatePickerProps {\n /** Controlled value: a `Date` in single mode, a `[start, end]` tuple in range mode. */\n value?: ValueOrState<DatePickerValue>;\n /** Selection mode. */\n mode?: \"single\" | \"range\";\n /** Also pick hour + minute. The chosen time applies to the selected date(s). */\n time?: boolean;\n /** Earliest selectable day (inclusive). */\n min?: Date;\n /** Latest selectable day (inclusive). */\n max?: Date;\n /** Disable arbitrary days. */\n disabledDate?: (date: Date) => boolean;\n /** BCP-47 locale for month/weekday names, first-day-of-week, and formatting. */\n locale?: string;\n /** Override the first day of the week (0 = Sunday … 6 = Saturday). */\n weekStartsOn?: number;\n /** Override the input display string. */\n format?: (value: DatePickerValue) => string;\n /** Called whenever the selection changes. */\n onChange?: (value: DatePickerValue) => void;\n /** Accent color for the selected/active days. */\n accentColor?: ValueOrState<ThemeColor>;\n /** Popover placement relative to the input. */\n placement?: ValueOrState<Placement>;\n}\n\n// --- date helpers (no third-party library) -----------------------------------\n\nconst atMidnight = (date: Date): Date =>\n new Date(date.getFullYear(), date.getMonth(), date.getDate());\nconst addDays = (date: Date, count: number): Date =>\n new Date(date.getFullYear(), date.getMonth(), date.getDate() + count);\nconst addMonths = (date: Date, count: number): Date =>\n new Date(date.getFullYear(), date.getMonth() + count, date.getDate());\nconst sameDay = (a: Date | null, b: Date | null): boolean =>\n !!a &&\n !!b &&\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate();\nconst isoOf = (date: Date): string =>\n `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, \"0\")}-${String(\n date.getDate(),\n ).padStart(2, \"0\")}`;\nconst startOfWeek = (date: Date, weekStart: number): Date =>\n addDays(date, -((date.getDay() - weekStart + 7) % 7));\n\n/** Resolves the locale's first day of week, falling back to Sunday. */\nfunction localeWeekStart(locale: string): number {\n try {\n const localeObject = new Intl.Locale(locale) as Intl.Locale & {\n weekInfo?: { firstDay: number };\n getWeekInfo?: () => { firstDay: number };\n };\n const info = localeObject.getWeekInfo?.() ?? localeObject.weekInfo;\n if (info?.firstDay) return info.firstDay % 7; // Intl uses 1=Mon … 7=Sun\n } catch {\n // unsupported locale or engine — fall through to Sunday\n }\n return 0;\n}\n\n/**\n * A native, themeable date picker patch for an `<input>`. Opens a calendar\n * popover (rendered with Domphy elements, positioned via `@domphy/floating`)\n * supporting single/range selection, optional time, min/max + disabled days,\n * localized names, and keyboard navigation. The input is read-only and shows the\n * formatted selection; compose with `inputText()` for the input's look.\n *\n * @hostTag input\n * @param props.value - Controlled value (`ValueOrState<DatePickerValue>`): a `Date`/`null` in single mode, a `[start, end]` tuple in range mode.\n * @param props.mode - Selection mode, \"single\" | \"range\". Defaults to \"single\".\n * @param props.time - When true, also pick hour + minute (applied to the selected date(s)). Defaults to false.\n * @param props.min - Earliest selectable day (inclusive), a `Date`.\n * @param props.max - Latest selectable day (inclusive), a `Date`.\n * @param props.disabledDate - Predicate `(date: Date) => boolean` to disable arbitrary days.\n * @param props.locale - BCP-47 locale for names/first-day-of-week/formatting. Defaults to `navigator.language` (or \"en-US\" in non-browser).\n * @param props.weekStartsOn - Override first day of week (0 = Sunday … 6 = Saturday). Defaults to the locale's first day.\n * @param props.format - Override the input display string, `(value: DatePickerValue) => string`.\n * @param props.onChange - Called with the new value whenever the selection changes, `(value: DatePickerValue) => void`.\n * @param props.accentColor - Accent color (`ValueOrState<ThemeColor>`) for selected/active days. Defaults to \"primary\".\n * @param props.placement - Popover placement (`ValueOrState<Placement>`) relative to the input. Defaults to \"bottom-start\".\n * @example { input: \"\", $: [inputText(), datePicker({ mode: \"range\" })] }\n */\nfunction datePicker(props: DatePickerProps = {}): PartialElement {\n const {\n mode = \"single\",\n time = false,\n min,\n max,\n disabledDate,\n locale = typeof navigator !== \"undefined\" ? navigator.language : \"en-US\",\n format,\n onChange,\n } = props;\n\n const weekStart = props.weekStartsOn ?? localeWeekStart(locale);\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n const placeState = toState(props.placement ?? \"bottom-start\");\n\n const selection = toState<DatePickerValue>(\n props.value ?? (mode === \"range\" ? [null, null] : null),\n );\n if (onChange) selection.addListener((value) => onChange(value));\n\n const primaryDate = ((): Date => {\n const current = selection.get();\n const base =\n mode === \"range\" ? (current as [Date | null, Date | null])?.[0] : current;\n return base instanceof Date ? base : new Date();\n })();\n\n const viewYear = toState(primaryDate.getFullYear(), \"viewYear\");\n const viewMonth = toState(primaryDate.getMonth(), \"viewMonth\");\n const focused = toState<Date>(atMidnight(primaryDate), \"focused\");\n const hovered = toState<Date | null>(null, \"hovered\");\n const hour = toState(primaryDate.getHours(), \"hour\");\n const minute = toState(primaryDate.getMinutes(), \"minute\");\n\n let contentElement: HTMLElement | null = null;\n\n // --- formatting -----------------------------------------------------------\n const dateFormatter = new Intl.DateTimeFormat(locale, {\n dateStyle: \"medium\",\n ...(time ? { timeStyle: \"short\" as const } : {}),\n });\n const monthFormatter = new Intl.DateTimeFormat(locale, {\n month: \"long\",\n year: \"numeric\",\n });\n const weekdayFormatter = new Intl.DateTimeFormat(locale, {\n weekday: \"short\",\n });\n const fullDateFormatter = new Intl.DateTimeFormat(locale, {\n dateStyle: \"full\",\n });\n\n const formatOne = (date: Date | null): string =>\n date ? dateFormatter.format(date) : \"\";\n const formatDisplay = (value: DatePickerValue): string => {\n if (format) return format(value);\n if (mode === \"range\") {\n const [start, end] = (value as [Date | null, Date | null]) ?? [\n null,\n null,\n ];\n return start ? `${formatOne(start)} – ${formatOne(end)}` : \"\";\n }\n return formatOne(value as Date | null);\n };\n\n // 2023-01-01 is a Sunday, so index 0 maps to Sunday before the week-start shift.\n const weekdayNames = Array.from({ length: 7 }, (_unused, index) =>\n weekdayFormatter.format(new Date(2023, 0, 1 + ((index + weekStart) % 7))),\n );\n\n // --- selection logic ------------------------------------------------------\n const isDisabled = (date: Date): boolean =>\n (!!min && atMidnight(date) < atMidnight(min)) ||\n (!!max && atMidnight(date) > atMidnight(max)) ||\n (!!disabledDate && disabledDate(date));\n\n const withTime = (date: Date): Date => {\n if (!time) return atMidnight(date);\n const result = atMidnight(date);\n result.setHours(hour.get(), minute.get(), 0, 0);\n return result;\n };\n\n const selectDate = (date: Date): void => {\n if (isDisabled(date)) return;\n if (mode === \"single\") {\n selection.set(withTime(date));\n if (!time) instantHideRef();\n return;\n }\n const [start, end] = (selection.get() as [Date | null, Date | null]) ?? [\n null,\n null,\n ];\n if (!start || (start && end)) {\n selection.set([withTime(date), null]);\n } else if (atMidnight(date) < atMidnight(start)) {\n selection.set([withTime(date), withTime(start)]);\n if (!time) instantHideRef();\n } else {\n selection.set([start, withTime(date)]);\n if (!time) instantHideRef();\n }\n };\n\n const reapplyTime = (): void => {\n if (!time) return;\n if (mode === \"single\") {\n const current = selection.get() as Date | null;\n if (current) selection.set(withTime(current));\n } else {\n const [start, end] = (selection.get() as [Date | null, Date | null]) ?? [\n null,\n null,\n ];\n selection.set([\n start ? withTime(start) : start,\n end ? withTime(end) : end,\n ]);\n }\n };\n\n const inSelectedRange = (date: Date, listener?: Listener): boolean => {\n if (mode !== \"range\") return false;\n const [start, end] = (selection.get(listener) as [\n Date | null,\n Date | null,\n ]) ?? [null, null];\n const tail = end ?? hovered.get(listener);\n if (!start || !tail) return false;\n const low = atMidnight(start) <= atMidnight(tail) ? start : tail;\n const high = atMidnight(start) <= atMidnight(tail) ? tail : start;\n const day = atMidnight(date);\n return day >= atMidnight(low) && day <= atMidnight(high);\n };\n\n const isSelectedEnd = (date: Date, listener?: Listener): boolean => {\n const current = selection.get(listener);\n if (mode === \"range\") {\n const [start, end] = (current as [Date | null, Date | null]) ?? [\n null,\n null,\n ];\n return sameDay(date, start) || sameDay(date, end);\n }\n return sameDay(date, current as Date | null);\n };\n\n // --- view navigation ------------------------------------------------------\n const goToDate = (date: Date): void => {\n viewYear.set(date.getFullYear());\n viewMonth.set(date.getMonth());\n };\n const shiftMonth = (delta: number): void => {\n const next = addMonths(new Date(viewYear.get(), viewMonth.get(), 1), delta);\n goToDate(next);\n };\n const shiftYear = (delta: number): void =>\n viewYear.set(viewYear.get() + delta);\n\n const focusActiveCell = (): void => {\n setTimeout(() => {\n contentElement\n ?.querySelector<HTMLElement>(`[data-date=\"${isoOf(focused.get())}\"]`)\n ?.focus();\n }, 0);\n };\n\n // --- floating popover ------------------------------------------------------\n const calendar = buildCalendar();\n const { show, hide, anchorPartial } = creatFloating({\n open: false,\n placement: placeState,\n content: calendar,\n });\n // selectDate calls this before `creatFloating` returns `hide`, so route through a ref.\n function instantHideRef(): void {\n hide();\n }\n\n // Move focus into the grid when the popover opens.\n anchorPartial.onClick = () => {};\n const triggerPartial: PartialElement = {\n type: \"text\",\n readonly: true,\n value: (listener) => formatDisplay(selection.get(listener)),\n ariaHaspopup: \"dialog\",\n ariaLabel: \"Choose date\",\n style: { cursor: \"pointer\" },\n onClick: () => {\n openAndFocus();\n },\n onFocus: () => {\n openAndFocus();\n },\n onKeyDown: (event) => {\n const key = (event as KeyboardEvent).key;\n if (key === \"ArrowDown\" || key === \"Enter\") {\n event.preventDefault();\n openAndFocus();\n }\n },\n };\n function openAndFocus(): void {\n const current = isSelectedPrimary() ?? new Date();\n focused.set(atMidnight(current));\n goToDate(current);\n show();\n focusActiveCell();\n }\n function isSelectedPrimary(): Date | null {\n const current = selection.get();\n if (mode === \"range\")\n return (current as [Date | null, Date | null])?.[0] ?? null;\n return (current as Date | null) ?? null;\n }\n merge(anchorPartial, triggerPartial);\n return anchorPartial;\n\n // --- calendar builder -----------------------------------------------------\n function buildCalendar(): DomphyElement<\"div\"> {\n const navButton = (label: string, ariaLabel: string, onClick: () => void) =>\n ({\n button: label,\n type: \"button\",\n ariaLabel,\n onClick,\n style: navButtonStyle(),\n }) as DomphyElement;\n\n const header: DomphyElement<\"div\"> = {\n div: [\n navButton(\"«\", \"Previous year\", () => shiftYear(-1)),\n navButton(\"‹\", \"Previous month\", () => shiftMonth(-1)),\n {\n div: (listener) =>\n monthFormatter.format(\n new Date(viewYear.get(listener), viewMonth.get(listener), 1),\n ),\n ariaLive: \"polite\",\n style: {\n flex: \"1\",\n textAlign: \"center\",\n fontWeight: \"600\",\n fontSize: (listener) => themeSize(listener),\n },\n },\n navButton(\"›\", \"Next month\", () => shiftMonth(1)),\n navButton(\"»\", \"Next year\", () => shiftYear(1)),\n ],\n style: {\n display: \"flex\",\n alignItems: \"center\",\n gap: themeSpacing(1),\n marginBottom: themeSpacing(2),\n },\n };\n\n const weekdayHeader: DomphyElement<\"div\"> = {\n div: weekdayNames.map((name, index) => ({\n div: name,\n style: {\n textAlign: \"center\",\n fontSize: (listener) => themeSize(listener, \"decrease-1\"),\n fontWeight: \"600\",\n color: (listener) => themeColor(listener, \"shift-7\"),\n paddingBlock: themeSpacing(1),\n },\n _key: index,\n })),\n role: \"row\",\n style: gridRowStyle(),\n };\n\n const grid: DomphyElement<\"div\"> = {\n div: (listener) => buildWeeks(listener),\n role: \"grid\",\n ariaLabel: \"Calendar\",\n onKeyDown: onGridKey,\n onMouseLeave: () => mode === \"range\" && hovered.set(null),\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: themeSpacing(0.5),\n },\n };\n\n const children: DomphyElement[] = [header, weekdayHeader, grid];\n if (time) children.push(buildTimeRow());\n children.push(buildFooter());\n\n return {\n div: children,\n role: \"dialog\",\n ariaModal: \"false\",\n _onMount: (node) => {\n contentElement = node.domElement as HTMLElement;\n },\n style: {\n minWidth: themeSpacing(70),\n padding: themeSpacing(3),\n borderRadius: themeSpacing(2),\n backgroundColor: (listener) => themeColor(listener, \"base\"),\n color: (listener) => themeColor(listener, \"shift-10\"),\n border: (listener) => `1px solid ${themeColor(listener, \"shift-4\")}`,\n boxShadow: \"0 8px 24px rgba(0,0,0,0.18)\",\n },\n };\n }\n\n function buildWeeks(listener: Listener): DomphyElement[] {\n const first = new Date(viewYear.get(listener), viewMonth.get(listener), 1);\n const month = viewMonth.get(listener);\n const start = startOfWeek(first, weekStart);\n const weeks: DomphyElement[] = [];\n for (let week = 0; week < 6; week++) {\n const cells: DomphyElement[] = [];\n for (let day = 0; day < 7; day++) {\n const date = addDays(start, week * 7 + day);\n cells.push(buildDayCell(date, month, listener));\n }\n weeks.push({\n div: cells,\n role: \"row\",\n style: gridRowStyle(),\n _key: week,\n });\n }\n return weeks;\n }\n\n function buildDayCell(\n date: Date,\n month: number,\n listener: Listener,\n ): DomphyElement {\n const disabled = isDisabled(date);\n const selected = isSelectedEnd(date, listener);\n const within = inSelectedRange(date, listener);\n const outside = date.getMonth() !== month;\n const isFocused = sameDay(date, focused.get(listener));\n const isToday = sameDay(date, new Date());\n\n return {\n button: String(date.getDate()),\n type: \"button\",\n role: \"gridcell\",\n tabIndex: isFocused ? 0 : -1,\n ariaSelected: selected,\n ariaDisabled: disabled,\n disabled,\n ariaLabel: fullDateFormatter.format(date),\n dataDate: isoOf(date),\n onClick: () => selectDate(date),\n onMouseEnter: () => mode === \"range\" && hovered.set(date),\n style: {\n appearance: \"none\",\n border: \"none\",\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n aspectRatio: \"1\",\n borderRadius: themeSpacing(1),\n fontSize: (l: Listener) => themeSize(l),\n fontFamily: \"inherit\",\n opacity: disabled ? 0.35 : outside ? 0.5 : 1,\n backgroundColor: (l: Listener) =>\n selected\n ? themeColor(l, \"shift-7\", accentColor.get(l))\n : within\n ? themeColor(l, \"shift-2\", accentColor.get(l))\n : \"transparent\",\n color: (l: Listener) =>\n selected\n ? themeColor(l, \"shift-0\", accentColor.get(l))\n : themeColor(l, \"shift-9\"),\n outline: isToday\n ? (l: Listener) =>\n `1px solid ${themeColor(l, \"shift-6\", accentColor.get(l))}`\n : \"none\",\n outlineOffset: \"-2px\",\n \"&:hover:not([disabled])\": {\n backgroundColor: (l: Listener) =>\n selected\n ? themeColor(l, \"shift-7\", accentColor.get(l))\n : themeColor(l, \"shift-3\", accentColor.get(l)),\n },\n \"&:focus-visible\": {\n outline: (l: Listener) =>\n `2px solid ${themeColor(l, \"shift-6\", accentColor.get(l))}`,\n },\n },\n _key: isoOf(date),\n } as DomphyElement;\n }\n\n function buildTimeRow(): DomphyElement<\"div\"> {\n const numberSelect = (\n count: number,\n state: ReturnType<typeof toState<number>>,\n ariaLabel: string,\n ): DomphyElement => ({\n select: Array.from({ length: count }, (_unused, value) => ({\n option: String(value).padStart(2, \"0\"),\n value: String(value),\n selected: (listener) => state.get(listener) === value,\n _key: value,\n })) as DomphyElement[],\n ariaLabel,\n onChange: (event) => {\n state.set(Number((event.target as HTMLSelectElement).value));\n reapplyTime();\n },\n style: timeSelectStyle(),\n });\n\n return {\n div: [\n numberSelect(24, hour, \"Hour\"),\n { span: \":\", style: { fontWeight: \"600\" } },\n numberSelect(60, minute, \"Minute\"),\n ],\n style: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: themeSpacing(1),\n marginTop: themeSpacing(3),\n },\n };\n }\n\n function buildFooter(): DomphyElement<\"div\"> {\n const action = (label: string, onClick: () => void): DomphyElement => ({\n button: label,\n type: \"button\",\n onClick,\n style: {\n appearance: \"none\",\n border: \"none\",\n background: \"transparent\",\n cursor: \"pointer\",\n fontFamily: \"inherit\",\n fontSize: (l: Listener) => themeSize(l, \"decrease-1\"),\n color: (l: Listener) => themeColor(l, \"shift-8\", accentColor.get(l)),\n padding: themeSpacing(1),\n },\n });\n return {\n div: [\n action(\"Today\", () => {\n const today = new Date();\n focused.set(atMidnight(today));\n goToDate(today);\n focusActiveCell();\n }),\n action(\"Clear\", () => {\n selection.set(mode === \"range\" ? [null, null] : null);\n hovered.set(null);\n }),\n ],\n style: {\n display: \"flex\",\n justifyContent: \"space-between\",\n marginTop: themeSpacing(2),\n paddingTop: themeSpacing(2),\n borderTop: (l: Listener) => `1px solid ${themeColor(l, \"shift-3\")}`,\n },\n };\n }\n\n function onGridKey(event: Event): void {\n const keyboard = event as KeyboardEvent;\n const current = focused.get();\n let next: Date | null = null;\n switch (keyboard.key) {\n case \"ArrowLeft\":\n next = addDays(current, -1);\n break;\n case \"ArrowRight\":\n next = addDays(current, 1);\n break;\n case \"ArrowUp\":\n next = addDays(current, -7);\n break;\n case \"ArrowDown\":\n next = addDays(current, 7);\n break;\n case \"Home\":\n next = startOfWeek(current, weekStart);\n break;\n case \"End\":\n next = addDays(startOfWeek(current, weekStart), 6);\n break;\n case \"PageUp\":\n next = addMonths(current, keyboard.shiftKey ? -12 : -1);\n break;\n case \"PageDown\":\n next = addMonths(current, keyboard.shiftKey ? 12 : 1);\n break;\n case \"Enter\":\n case \" \":\n keyboard.preventDefault();\n selectDate(current);\n return;\n default:\n return;\n }\n keyboard.preventDefault();\n focused.set(next);\n goToDate(next);\n focusActiveCell();\n }\n}\n\n// --- shared style fragments --------------------------------------------------\n\nfunction gridRowStyle() {\n return {\n display: \"grid\",\n gridTemplateColumns: \"repeat(7, 1fr)\",\n gap: themeSpacing(0.5),\n };\n}\n\nfunction navButtonStyle() {\n return {\n appearance: \"none\" as const,\n border: \"none\",\n background: \"transparent\",\n cursor: \"pointer\",\n fontFamily: \"inherit\",\n fontSize: (l: Listener) => themeSize(l),\n color: (l: Listener) => themeColor(l, \"shift-8\"),\n width: themeSpacing(7),\n height: themeSpacing(7),\n borderRadius: themeSpacing(1),\n \"&:hover\": {\n backgroundColor: (l: Listener) => themeColor(l, \"shift-3\"),\n },\n };\n}\n\nfunction timeSelectStyle() {\n return {\n fontFamily: \"inherit\",\n fontSize: (l: Listener) => themeSize(l),\n padding: themeSpacing(1),\n borderRadius: themeSpacing(1),\n border: (l: Listener) => `1px solid ${themeColor(l, \"shift-4\")}`,\n backgroundColor: (l: Listener) => themeColor(l, \"base\"),\n color: (l: Listener) => themeColor(l, \"shift-9\"),\n };\n}\n\nexport { datePicker };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Styles a description list as a two-column grid (terms in the first column,\n * descriptions in the second), theming the nested `<dt>`/`<dd>` elements.\n * Apply to a `<dl>` element.\n *\n * @hostTag dl\n * @param props.color - Theme color tone (`ValueOrState<ThemeColor>`) for the term/description text. Defaults to \"neutral\".\n * @example { dl: [{ dt: \"Name\" }, { dd: \"Domphy\" }], $: [descriptionList()] }\n */\nfunction descriptionList(\n props: { color?: ValueOrState<ThemeColor> } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"dl\") {\n console.warn(`\"descriptionList\" primitive patch must use dl tag`);\n }\n },\n style: {\n display: \"grid\",\n gridTemplateColumns: `minmax(${themeSpacing(24)}, max-content) 1fr`,\n columnGap: themeSpacing(4),\n margin: 0,\n \"& dt\": {\n margin: 0,\n fontWeight: 600,\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) =>\n themeColor(listener, \"shift-10\", color.get(listener)),\n },\n \"& dd\": {\n margin: 0,\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) =>\n themeColor(listener, \"shift-9\", color.get(listener)),\n },\n },\n };\n}\n\nexport { descriptionList };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeDensity,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Styles a native disclosure widget: a themed `<summary>` header with an\n * animated rotating chevron and an expand/collapse transition on the body\n * content. Apply to a `<details>` element.\n *\n * @hostTag details\n * @param props.color - Theme color tone (`ValueOrState<ThemeColor>`) for the body/summary. Defaults to \"neutral\".\n * @param props.accentColor - Accent color (`ValueOrState<ThemeColor>`) for the summary's focus outline. Defaults to \"primary\".\n * @param props.duration - Open/close transition duration in milliseconds. Defaults to 240.\n * @example { details: [{ summary: \"More\" }, { div: \"Body\" }], $: [details()] }\n */\nfunction details(\n props: {\n color?: ValueOrState<ThemeColor>;\n accentColor?: ValueOrState<ThemeColor>;\n duration?: number;\n } = {},\n): PartialElement {\n const { duration = 240 } = props;\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"details\") {\n console.warn(`\"details\" primitive patch must use details tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) =>\n themeColor(listener, \"inherit\", color.get(listener)),\n\n overflow: \"hidden\",\n \"& > summary\": {\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-2\", color.get(listener)),\n color: (listener) =>\n themeColor(listener, \"shift-10\", color.get(listener)),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n listStyle: \"none\",\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n gap: themeSpacing(2),\n cursor: \"pointer\",\n userSelect: \"none\",\n fontWeight: 500,\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 4),\n height: themeSpacing(10),\n },\n \"& > summary::-webkit-details-marker\": {\n display: \"none\",\n },\n \"& > summary::marker\": {\n content: `\"\"`,\n },\n \"& > summary::after\": {\n content: `\"\"`,\n width: themeSpacing(2),\n height: themeSpacing(2),\n flexShrink: 0,\n marginTop: `-${themeSpacing(0.5)}`,\n borderInlineEnd: (listener) =>\n `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-9\", color.get(listener))}`,\n borderBottom: (listener) =>\n `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-9\", color.get(listener))}`,\n transform: \"rotate(45deg)\",\n transition: `transform ${duration}ms ease`,\n },\n \"&[open] > summary::after\": {\n transform: \"rotate(-135deg)\",\n },\n \"& > summary:hover\": {\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-3\", color.get(listener)),\n },\n \"& > summary:focus-visible\": {\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 2),\n outlineOffset: `-${themeSpacing(0.5)}`,\n outline: (listener) =>\n `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"& > :not(summary)\": {\n maxHeight: \"0px\",\n opacity: 0,\n overflow: \"hidden\",\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingTop: 0,\n paddingBottom: 0,\n transition: `max-height ${duration}ms ease, opacity ${duration}ms ease, padding ${duration}ms ease`,\n },\n \"&[open] > :not(summary)\": {\n maxHeight: themeSpacing(250),\n opacity: 1,\n paddingTop: (listener) => themeSpacing(themeDensity(listener) * 1),\n paddingBottom: (listener) => themeSpacing(themeDensity(listener) * 3),\n },\n },\n };\n}\n\nexport { details };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeDensity,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Modal dialog patch driven by an `open` State. Calls `showModal()`/`close()`,\n * fades via opacity, locks page scroll while open, focuses the first focusable\n * child, and closes on outside (backdrop) click. Apply to a `<dialog>` element.\n *\n * @hostTag dialog\n * @param props.color - Theme color tone for the dialog surface. Defaults to \"neutral\".\n * @param props.open - Open state (`ValueOrState<boolean>`); set it to true/false to show/hide. Defaults to false.\n * @example { dialog: [...], $: [dialog({ open })] }\n */\nfunction dialog(\n props: { color?: ThemeColor; open?: ValueOrState<boolean> } = {},\n): PartialElement {\n const { color = \"neutral\", open = false } = props;\n const state = toState(open);\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"dialog\") {\n console.warn(`\"dialog\" primitive patch must use dialog tag`);\n }\n },\n onClick: (e: MouseEvent, node) => {\n if (e.target !== node.domElement) return;\n const r = node.domElement!.getBoundingClientRect();\n const inside =\n e.clientX >= r.left &&\n e.clientX <= r.right &&\n e.clientY >= r.top &&\n e.clientY <= r.bottom;\n if (!inside) state.set(false);\n },\n onTransitionEnd: (_e, node) => {\n const dlg = node.domElement as HTMLDialogElement;\n if (dlg.style.opacity === \"0\") {\n dlg.close();\n document.body.style.overflow = \"\";\n }\n },\n _onMount: (node) => {\n const dlg = node.domElement as HTMLDialogElement;\n const update = (val: boolean) => {\n if (val) {\n dlg.showModal();\n document.body.style.overflow = \"hidden\";\n requestAnimationFrame(() => {\n dlg.style.opacity = \"1\";\n const focusable = dlg.querySelector<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n );\n focusable?.focus();\n });\n } else {\n dlg.style.opacity = \"0\";\n }\n };\n update(state.get());\n const release = state.addListener(update);\n // Release the listener on the user-provided `open` State and always\n // restore page scroll on removal — otherwise removing an open dialog\n // leaks the listener and leaves document.body locked at overflow:hidden.\n node.addHook(\"Remove\", () => {\n release();\n document.body.style.overflow = \"\";\n });\n },\n style: {\n opacity: \"0\",\n transition: \"opacity 200ms ease\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-10\", color),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\n border: \"none\",\n padding: (listener) => themeSpacing(themeDensity(listener) * 3),\n boxShadow: (listener) =>\n `0 ${themeSpacing(9)} ${themeSpacing(16)} ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n \"&::backdrop\": {\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-2\", \"neutral\"),\n opacity: 0.75,\n },\n },\n };\n}\n\nexport { dialog };\n","import type { PartialElement } from \"@domphy/core\";\nimport { toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * A horizontal separator (`role=\"separator\"`) with a line on each side of its\n * content, suitable for labelled dividers (\"or\"). Apply to a `<div>` element.\n *\n * @hostTag div\n * @param props.color - Theme color tone (`ValueOrState<ThemeColor>`) for the label text and rules. Defaults to \"neutral\".\n * @example { div: \"or\", $: [divider()] }\n */\nfunction divider(\n props: { color?: ValueOrState<ThemeColor> } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n role: \"separator\",\n _onInsert: (node) => {\n if (node.tagName !== \"div\") {\n console.warn(`\"divider\" patch should be used with <div>`);\n }\n },\n style: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"baseline\",\n gap: themeSpacing(2),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n backgroundColor: (listener) => themeColor(listener),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n minHeight: \"1lh\",\n \"&::before\": {\n content: `\"\"`,\n flex: 1,\n borderColor: (listener) =>\n themeColor(listener, \"shift-4\", color.get(listener)),\n borderWidth: \"1px\",\n borderBottomStyle: \"solid\",\n },\n \"&::after\": {\n content: `\"\"`,\n flex: 1,\n borderColor: (listener) =>\n themeColor(listener, \"shift-4\", color.get(listener)),\n borderWidth: \"1px\",\n borderBottomStyle: \"solid\",\n },\n },\n };\n}\n\nexport { divider };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeDensity,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\ntype Placement = \"left\" | \"right\" | \"top\" | \"bottom\";\n\nconst translateOut: Record<Placement, string> = {\n left: \"translateX(-100%)\",\n right: \"translateX(100%)\",\n top: \"translateY(-100%)\",\n bottom: \"translateY(100%)\",\n};\n\nconst marginMap: Record<Placement, string> = {\n left: \"0 auto 0 0\",\n right: \"0 0 0 auto\",\n top: \"0 0 auto 0\",\n bottom: \"auto 0 0 0\",\n};\n\nconst isVertical = (p: Placement) => p === \"left\" || p === \"right\";\n\n/**\n * Edge-anchored modal drawer driven by an `open` State. Slides in/out from a\n * chosen edge via a transform transition, calls `showModal()`/`close()`, locks\n * page scroll while open, and closes on backdrop click. Apply to a `<dialog>`\n * element.\n *\n * @hostTag dialog\n * @param props.color - Theme color tone for the drawer surface. Defaults to \"neutral\".\n * @param props.open - Open state (`ValueOrState<boolean>`); set true/false to show/hide. Defaults to false.\n * @param props.placement - Edge to anchor to, \"left\" | \"right\" | \"top\" | \"bottom\". Defaults to \"right\".\n * @param props.size - CSS length for the drawer's width (left/right) or height (top/bottom). Defaults to themeSpacing(80) for left/right, themeSpacing(64) for top/bottom.\n * @example { dialog: [...], $: [drawer({ open, placement: \"left\" })] }\n */\nfunction drawer(\n props: {\n color?: ThemeColor;\n open?: ValueOrState<boolean>;\n placement?: Placement;\n size?: string;\n } = {},\n): PartialElement {\n const { color = \"neutral\", open = false, placement = \"right\", size } = props;\n const state = toState(open);\n const defaultSize = isVertical(placement)\n ? themeSpacing(80)\n : themeSpacing(64);\n const drawerSize = size ?? defaultSize;\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"dialog\") {\n console.warn(`\"drawer\" patch must use dialog tag`);\n }\n },\n onClick: (e: MouseEvent, node) => {\n if (e.target !== node.domElement) return;\n state.set(false);\n },\n onTransitionEnd: (_e, node) => {\n const dlg = node.domElement as HTMLDialogElement;\n if (!state.get()) {\n dlg.close();\n document.body.style.overflow = \"\";\n }\n },\n _onMount: (node) => {\n const dlg = node.domElement as HTMLDialogElement;\n const update = (val: boolean) => {\n if (val) {\n dlg.showModal();\n document.body.style.overflow = \"hidden\";\n requestAnimationFrame(() => {\n dlg.style.transform = \"translate(0, 0)\";\n });\n } else {\n dlg.style.transform = translateOut[placement];\n }\n };\n update(state.get());\n const release = state.addListener(update);\n // Release the `open` State listener and restore page scroll on removal\n // (an open drawer removed mid-transition would otherwise leak the\n // listener and leave document.body locked at overflow:hidden).\n node.addHook(\"Remove\", () => {\n release();\n document.body.style.overflow = \"\";\n });\n },\n style: {\n transform: translateOut[placement],\n transition: \"transform 0.25s ease\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-10\", color),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\n border: \"none\",\n padding: (listener) => themeSpacing(themeDensity(listener) * 3),\n margin: marginMap[placement],\n width: isVertical(placement) ? drawerSize : \"100dvw\",\n height: isVertical(placement) ? \"100dvh\" : drawerSize,\n maxWidth: \"100dvw\",\n maxHeight: \"100dvh\",\n boxShadow: (listener) =>\n `0 ${themeSpacing(4)} ${themeSpacing(12)} ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n \"&::backdrop\": {\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-2\", \"neutral\"),\n opacity: 0.75,\n },\n },\n };\n}\n\nexport { drawer };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport { type ThemeColor, themeColor, themeSize } from \"@domphy/theme\";\n\n/**\n * Italic emphasized inline text. Apply to an `<em>` element.\n *\n * @hostTag em\n * @param props.color - Theme color tone (`ValueOrState<ThemeColor>`) for the text. Defaults to \"neutral\".\n * @example { em: \"important\", $: [emphasis()] }\n */\nfunction emphasis(\n props: { color?: ValueOrState<ThemeColor> } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"em\") {\n console.warn(`\"emphasis\" primitive patch must use em tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n fontStyle: \"italic\",\n color: (listener) =>\n themeColor(listener, \"shift-10\", color.get(listener)),\n },\n };\n}\n\nexport { emphasis };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Lays out a figure as a column with block-level media (img/svg/video/canvas)\n * and a themed `<figcaption>`. Apply to a `<figure>` element.\n *\n * @hostTag figure\n * @param props.color - Theme color tone (`ValueOrState<ThemeColor>`) for the figure/caption text. Defaults to \"neutral\".\n * @example { figure: [{ img: \"\", src }, { figcaption: \"A caption\" }], $: [figure()] }\n */\nfunction figure(\n props: { color?: ValueOrState<ThemeColor> } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"figure\") {\n console.warn(`\"figure\" primitive patch must use figure tag`);\n }\n },\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: themeSpacing(2),\n marginInline: 0,\n marginTop: themeSpacing(3),\n marginBottom: themeSpacing(3),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n \"& img, & svg, & video, & canvas\": {\n display: \"block\",\n maxWidth: \"100%\",\n borderRadius: themeSpacing(2),\n },\n \"& figcaption\": {\n fontSize: (listener) => themeSize(listener, \"decrease-1\"),\n color: (listener) =>\n themeColor(listener, \"shift-8\", color.get(listener)),\n lineHeight: 1.45,\n },\n },\n };\n}\n\nexport { figure };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeDensity,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Layout patch for a group of form fields. Arranges a `<legend>`, `<label>`s,\n * controls, and helper `<p>`s in a grid — labels beside controls (horizontal)\n * or stacked above them (vertical). Apply to a `<fieldset>` element.\n *\n * @hostTag fieldset\n * @param props.color - Theme color tone (`ValueOrState<ThemeColor>`) for legend/text/surface. Defaults to \"neutral\".\n * @param props.layout - Field arrangement, \"horizontal\" (label beside control) | \"vertical\" (label above). Defaults to \"horizontal\".\n * @example { fieldset: [{ legend: \"Profile\" }, { label: \"Name\" }, { input: \"\" }], $: [formGroup({ layout: \"vertical\" })] }\n */\nfunction formGroup(\n props: {\n color?: ValueOrState<ThemeColor>;\n layout?: \"horizontal\" | \"vertical\";\n } = {},\n): PartialElement {\n const { layout = \"horizontal\" } = props;\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n const isVertical = layout === \"vertical\";\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"fieldset\") {\n console.warn(`\"formGroup\" patch must use fieldset tag`);\n }\n },\n style: {\n margin: 0,\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 3),\n border: \"none\",\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 2),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n backgroundColor: (listener) =>\n themeColor(listener, \"inherit\", color.get(listener)),\n display: \"grid\",\n gridTemplateColumns: isVertical\n ? `minmax(0, 1fr)`\n : `max-content minmax(0, 1fr)`,\n columnGap: themeSpacing(4),\n rowGap: themeSpacing(3),\n alignItems: \"start\",\n \"& > legend\": {\n gridColumn: \"1 / -1\",\n margin: 0,\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n fontWeight: 600,\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 2),\n color: (listener) =>\n themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) =>\n themeColor(listener, \"inherit\", color.get(listener)),\n },\n \"& > label\": {\n gridColumn: \"1\",\n alignSelf: \"start\",\n margin: 0,\n paddingBlock: (listener) =>\n isVertical ? \"0px\" : themeSpacing(themeDensity(listener) * 1),\n },\n \"& > label:has(+ :not(legend, label, p) + p)\": {\n gridRow: isVertical ? \"auto\" : \"span 2\",\n },\n \"& > :not(legend, label, p)\": {\n gridColumn: isVertical ? \"1\" : \"2\",\n minWidth: 0,\n width: \"100%\",\n boxSizing: \"border-box\",\n },\n \"& > p\": {\n gridColumn: isVertical ? \"1\" : \"2\",\n minWidth: 0,\n margin: 0,\n marginBlockStart: `calc(${themeSpacing(2)} * -1)`,\n fontSize: (listener) => themeSize(listener, \"decrease-1\"),\n color: (listener) =>\n themeColor(listener, \"shift-9\", color.get(listener)),\n },\n },\n };\n}\n\nexport { formGroup };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\nconst Headinghift: Record<string, string> = {\n h6: \"decrease-1\",\n h5: \"inherit\",\n h4: \"increase-1\",\n h3: \"increase-2\",\n h2: \"increase-3\",\n h1: \"increase-4\",\n};\n\n/**\n * Styles a heading, scaling its font size by level (h1 largest … h6 smallest)\n * relative to the theme base size. Apply to a heading element `<h1>`–`<h6>`.\n *\n * @hostTag h1\n * @param props.color - Theme color tone (`ValueOrState<ThemeColor>`) for the heading text. Defaults to \"neutral\".\n * @example { h2: \"Section title\", $: [heading()] }\n */\nfunction heading(\n props: { color?: ValueOrState<ThemeColor> } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (![\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"].includes(node.tagName)) {\n console.warn(\n `\"heading\" primitive patch must use heading tags [h1...h6]`,\n );\n }\n },\n style: {\n color: (listener) =>\n themeColor(listener, \"shift-11\", color.get(listener)),\n marginTop: 0,\n marginBottom: themeSpacing(2),\n fontSize: (listener) => {\n const offset = Headinghift[listener.elementNode.tagName] || \"inherit\";\n return themeSize(listener, offset);\n },\n },\n };\n}\n\nexport { heading };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport { type ThemeColor, themeColor, themeSpacing } from \"@domphy/theme\";\n\n/**\n * A thematic break rendered as a thin 1px themed line with vertical margin.\n * Apply to an `<hr>` element.\n *\n * @hostTag hr\n * @param props.color - Theme color tone (`ValueOrState<ThemeColor>`) for the rule. Defaults to \"neutral\".\n * @example { hr: \"\", $: [horizontalRule()] }\n */\nfunction horizontalRule(\n props: { color?: ValueOrState<ThemeColor> } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"hr\") {\n console.warn(`\"horizontalRule\" primitive patch must use hr tag`);\n }\n },\n style: {\n border: 0,\n height: \"1px\",\n marginInline: 0,\n marginTop: themeSpacing(3),\n marginBottom: themeSpacing(3),\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-4\", color.get(listener)),\n },\n };\n}\n\nexport { horizontalRule };\n","import type { PartialElement } from \"@domphy/core\";\nimport { toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Styles an inline icon container: square box that centers its content and\n * applies the themed icon color. Apply to a `<span>` element.\n *\n * @hostTag span\n * @param props.color - Optional theme color tone for the icon (`ValueOrState<ThemeColor>`). Defaults to `\"neutral\"`.\n * @example { span: null, $: [icon()] }\n */\nfunction icon(\n props: { color?: ValueOrState<ThemeColor> } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"span\") {\n console.warn(`\"icon\" primitive patch should use span tag`);\n }\n },\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n alignSelf: \"center\",\n justifySelf: \"center\",\n verticalAlign: \"middle\",\n width: themeSpacing(4),\n height: themeSpacing(4),\n flexShrink: \"0\",\n fontSize: (listener) => themeSize(listener),\n backgroundColor: \"transparent\",\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n },\n };\n}\n\nexport { icon };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport { type ThemeColor, themeColor, themeSpacing } from \"@domphy/theme\";\n\n/**\n * Styles a responsive image: full-width, cover-fit, rounded corners with a\n * themed placeholder background. Apply to an `<img>` element.\n *\n * @hostTag img\n * @param props.color - Optional theme color tone for the placeholder background (`ValueOrState<ThemeColor>`). Defaults to `\"neutral\"`.\n * @example { img: null, src: \"photo.jpg\", alt: \"Photo\", $: [image()] }\n */\nfunction image(\n props: { color?: ValueOrState<ThemeColor> } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n dataTone: \"shift-2\",\n _onInsert: (node) => {\n if (node.tagName !== \"img\") {\n console.warn(`\"image\" primitive patch must use img tag`);\n }\n },\n style: {\n display: \"block\",\n width: \"100%\",\n maxWidth: \"100%\",\n height: \"auto\",\n objectFit: \"cover\",\n borderRadius: themeSpacing(2),\n backgroundColor: (listener) =>\n themeColor(listener, \"inherit\", color.get(listener)),\n },\n };\n}\n\nexport { image };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Styles a custom checkbox with themed box, check mark, indeterminate state,\n * hover, focus and disabled styling. Apply to an `<input>` element of\n * type `checkbox` (the patch sets `type: \"checkbox\"`).\n *\n * @hostTag input\n * @param props.color - Optional theme color tone for the box/border (`ValueOrState<ThemeColor>`). Defaults to `\"neutral\"`.\n * @param props.accentColor - Optional theme color tone for the checked/indeterminate fill and focus ring (`ValueOrState<ThemeColor>`). Defaults to `\"primary\"`.\n * @example { input: null, type: \"checkbox\", $: [inputCheckbox()] }\n */\nfunction inputCheckbox(\n props: {\n color?: ValueOrState<ThemeColor>;\n accentColor?: ValueOrState<ThemeColor>;\n } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: \"checkbox\",\n _onInsert: (node) => {\n if (node.tagName !== \"input\") {\n console.warn(`\"inputCheckbox\" primitive patch must use input tag`);\n }\n },\n style: {\n appearance: \"none\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n display: \"inline-flex\",\n position: \"relative\",\n width: themeSpacing(6),\n height: themeSpacing(6),\n justifyContent: \"center\",\n alignItems: \"center\",\n transition: \"background-color 300ms, outline-color 300ms\",\n margin: 0,\n padding: 0,\n \"&::before\": {\n content: `\"\"`,\n display: \"block\",\n borderRadius: themeSpacing(1),\n lineHeight: 1,\n cursor: \"pointer\",\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) =>\n `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n color: (listener) =>\n themeColor(listener, \"shift-9\", color.get(listener)),\n width: themeSpacing(4),\n height: themeSpacing(4),\n },\n \"&:hover::before\": {\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-2\", color.get(listener)),\n },\n \"&:checked::before\": {\n outline: (listener) =>\n `1px solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-8\", accentColor.get(listener)),\n },\n \"&:checked:hover:not([disabled])::before\": {\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-7\", accentColor.get(listener)),\n },\n \"&:checked::after\": {\n content: `\"\"`,\n display: \"block\",\n position: \"absolute\",\n top: \"25%\",\n insetInlineStart: \"37%\",\n width: \"20%\",\n height: \"30%\",\n border: (listener) =>\n `${themeSpacing(0.5)} solid ${themeColor(listener, \"inherit\", accentColor.get(listener))}`,\n borderTop: 0,\n borderInlineStart: 0,\n transform: \"rotate(45deg)\",\n },\n \"&:indeterminate::before\": {\n outline: (listener) =>\n `1px solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-3\", accentColor.get(listener)),\n },\n \"&:indeterminate::after\": {\n content: `\"\"`,\n position: \"absolute\",\n inset: \"30%\",\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-8\", accentColor.get(listener)),\n },\n \"&:indeterminate:hover:not([disabled])::after\": {\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-7\", accentColor.get(listener)),\n },\n \"&:focus-visible\": {\n borderRadius: themeSpacing(1.5),\n outline: (listener) =>\n `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&[disabled]\": {\n cursor: \"not-allowed\",\n },\n \"&[disabled]::before, &[disabled]::after\": {\n outline: \"none\",\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-4\", \"neutral\"),\n pointerEvents: \"none\",\n },\n },\n };\n}\n\nexport { inputCheckbox };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeDensity,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Styles a native color picker swatch with themed padding, rounded swatch and\n * disabled styling. Apply to an `<input>` element of type `color` (the patch\n * sets `type: \"color\"`).\n *\n * @hostTag input\n * @param props.color - Optional theme color tone used for the disabled state (`ValueOrState<ThemeColor>`). Defaults to `\"neutral\"`.\n * @param props.accentColor - Optional theme color tone (`ValueOrState<ThemeColor>`). Defaults to `\"primary\"`.\n * @example { input: null, type: \"color\", $: [inputColor()] }\n */\nfunction inputColor(\n props: {\n color?: ValueOrState<ThemeColor>;\n accentColor?: ValueOrState<ThemeColor>;\n } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: \"color\",\n _onSchedule: (node, element) => {\n if (node.tagName !== \"input\") {\n console.warn(`\"inputColor\" primitive patch must use input tag`);\n }\n (element as any).type = \"color\";\n },\n style: {\n appearance: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 1),\n blockSize: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\n inlineSize: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\n backgroundColor: \"transparent\",\n \"&::-webkit-color-swatch-wrapper\": {\n margin: 0,\n padding: 0,\n },\n \"&::-webkit-color-swatch\": {\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\n },\n \"&:hover:not([disabled]), &:focus-visible\": {},\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-2\", \"neutral\"),\n outline: (listener) =>\n `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n },\n },\n };\n}\n\nexport { inputColor };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeDensity,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\ntype InputDateTimeMode = \"date\" | \"time\" | \"week\" | \"month\" | \"datetime-local\";\n\n/**\n * Styles a native date/time input with themed border, padding, hover, focus,\n * invalid and disabled states. The `mode` selects the input `type`. Apply to\n * an `<input>` element (the patch sets `type` to the chosen `mode`).\n *\n * @hostTag input\n * @param props.mode - Input mode selecting the host `type`: `\"date\" | \"time\" | \"week\" | \"month\" | \"datetime-local\"`. Defaults to `\"datetime-local\"`.\n * @param props.color - Optional theme color tone for text/border (`ValueOrState<ThemeColor>`). Defaults to `\"neutral\"`.\n * @param props.accentColor - Optional theme color tone for the hover/focus ring (`ValueOrState<ThemeColor>`). Defaults to `\"primary\"`.\n * @example { input: null, type: \"datetime-local\", $: [inputDateTime()] }\n */\nfunction inputDateTime(\n props: {\n mode?: InputDateTimeMode;\n color?: ValueOrState<ThemeColor>;\n accentColor?: ValueOrState<ThemeColor>;\n } = {},\n): PartialElement {\n const { mode = \"datetime-local\" } = props;\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: mode,\n _onSchedule: (node, element) => {\n if (node.tagName !== \"input\") {\n console.warn(`\"inputDateTime\" primitive patch must use input tag`);\n }\n (element as any).type = mode;\n },\n style: {\n fontFamily: \"inherit\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n lineHeight: \"inherit\",\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) =>\n themeColor(listener, \"inherit\", color.get(listener)),\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) =>\n `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n height: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\n \"&::-webkit-calendar-picker-indicator\": {\n cursor: \"pointer\",\n opacity: 0.85,\n },\n \"&:hover:not([disabled]):not([aria-busy=true]), &:focus-visible\": {\n outline: (listener) =>\n `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-2\", \"neutral\"),\n outline: (listener) =>\n `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n },\n \"&:invalid\": {\n outline: (listener) =>\n `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", \"error\")}`,\n },\n },\n };\n}\n\nexport { inputDateTime };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeDensity,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Styles a native file input with a themed upload button, border, hover, focus\n * and disabled states. Apply to an `<input>` element of type `file` (the patch\n * sets `type: \"file\"`).\n *\n * @hostTag input\n * @param props.color - Optional theme color tone for text/border and the upload button (`ValueOrState<ThemeColor>`). Defaults to `\"neutral\"`.\n * @param props.accentColor - Optional theme color tone for the hover/focus ring (`ValueOrState<ThemeColor>`). Defaults to `\"primary\"`.\n * @example { input: null, type: \"file\", $: [inputFile()] }\n */\nfunction inputFile(\n props: {\n color?: ValueOrState<ThemeColor>;\n accentColor?: ValueOrState<ThemeColor>;\n } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: \"file\",\n _onSchedule: (node, element) => {\n if (node.tagName !== \"input\") {\n console.warn(`\"inputFile\" primitive patch must use input tag`);\n }\n (element as any).type = \"file\";\n },\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n fontFamily: \"inherit\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n lineHeight: \"inherit\",\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) =>\n themeColor(listener, \"inherit\", color.get(listener)),\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) =>\n `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\n height: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 1),\n \"&::-webkit-file-upload-button\": {\n marginTop: (listener) => themeSpacing(themeDensity(listener)),\n fontFamily: \"inherit\",\n fontSize: \"inherit\",\n border: \"none\",\n borderRadius: themeSpacing(1),\n height: themeSpacing(6),\n paddingInline: themeSpacing(2),\n cursor: \"pointer\",\n color: (listener) =>\n themeColor(listener, \"shift-11\", color.get(listener)),\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-1\", color.get(listener)),\n },\n \"&:hover:not([disabled]):not([aria-busy=true]), &:focus-visible\": {\n outline: (listener) =>\n `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&[disabled]\": {\n opacity: 0.8,\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n outline: (listener) =>\n `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-1\", \"neutral\"),\n },\n \"&[disabled]::-webkit-file-upload-button\": {\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-3\", \"neutral\"),\n },\n },\n };\n}\n\nexport { inputFile };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeDensity,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Styles a native number input with themed border, padding, visible spin\n * buttons, hover, focus and disabled states. Apply to an `<input>` element of\n * type `number` (the patch sets `type: \"number\"`).\n *\n * @hostTag input\n * @param props.color - Optional theme color tone for text/border (`ValueOrState<ThemeColor>`). Defaults to `\"neutral\"`.\n * @param props.accentColor - Optional theme color tone for the hover/focus ring (`ValueOrState<ThemeColor>`). Defaults to `\"primary\"`.\n * @example { input: null, type: \"number\", $: [inputNumber()] }\n */\nfunction inputNumber(\n props: {\n color?: ValueOrState<ThemeColor>;\n accentColor?: ValueOrState<ThemeColor>;\n } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: \"number\",\n _onSchedule: (node, element) => {\n if (node.tagName !== \"input\") {\n console.warn(`\"inputNumber\" primitive patch must use input tag`);\n }\n (element as any).type = \"number\";\n },\n style: {\n fontFamily: \"inherit\",\n lineHeight: \"inherit\",\n minWidth: themeSpacing(10),\n paddingInlineStart: (listener) =>\n themeSpacing(themeDensity(listener) * 3),\n paddingInlineEnd: (listener) =>\n themeSpacing(themeDensity(listener) * 1.5),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) =>\n `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) =>\n themeColor(listener, \"inherit\", color.get(listener)),\n \"&::-webkit-inner-spin-button, &::-webkit-outer-spin-button\": {\n opacity: 1,\n },\n \"&:hover:not([disabled]):not([aria-busy=true]), &:focus-visible\": {\n outline: (listener) =>\n `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-2\", \"neutral\"),\n outline: (listener) =>\n `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n },\n },\n };\n}\n\nexport { inputNumber };\n","import type { PartialElement } from \"@domphy/core\";\nimport { themeSpacing } from \"@domphy/theme\";\n\n/**\n * Lays out a one-time-password container as a horizontal row of inputs and\n * wires keyboard navigation: auto-advance on input, backspace/arrow movement,\n * and paste distribution across the child inputs. Apply to a container element\n * (e.g. `<div>`) whose direct children are the OTP `<input>` boxes. Takes no\n * props.\n *\n * @example { div: null, $: [inputOTP()], children: [{ input: null }, { input: null }] }\n */\nfunction inputOTP(): PartialElement {\n return {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n gap: themeSpacing(2),\n \"& > *\": {\n minWidth: themeSpacing(9) + \"!important\",\n },\n },\n _onMount: (node) => {\n const container = node.domElement as HTMLElement;\n const getInputs = () =>\n Array.from(container.querySelectorAll(\"input\")) as HTMLInputElement[];\n\n const onInput = (e: Event) => {\n const inputs = getInputs();\n const target = e.target as HTMLInputElement;\n const idx = inputs.indexOf(target);\n if (target.value && idx < inputs.length - 1) {\n inputs[idx + 1].focus();\n }\n };\n\n const onKeydown = (e: KeyboardEvent) => {\n const inputs = getInputs();\n const target = e.target as HTMLInputElement;\n const idx = inputs.indexOf(target);\n if (e.key === \"Backspace\" && !target.value && idx > 0) {\n inputs[idx - 1].focus();\n }\n if (e.key === \"ArrowLeft\" && idx > 0) inputs[idx - 1].focus();\n if (e.key === \"ArrowRight\" && idx < inputs.length - 1)\n inputs[idx + 1].focus();\n };\n\n const onPaste = (e: ClipboardEvent) => {\n e.preventDefault();\n const text = e.clipboardData?.getData(\"text\") ?? \"\";\n const inputs = getInputs();\n const startIdx = inputs.indexOf(e.target as HTMLInputElement);\n [...text].forEach((char, i) => {\n if (inputs[startIdx + i]) inputs[startIdx + i].value = char;\n });\n const lastFilled = Math.min(\n startIdx + text.length - 1,\n inputs.length - 1,\n );\n inputs[lastFilled]?.focus();\n };\n\n container.addEventListener(\"input\", onInput);\n container.addEventListener(\"keydown\", onKeydown as EventListener);\n container.addEventListener(\"paste\", onPaste as EventListener);\n\n node.addHook(\"Remove\", () => {\n container.removeEventListener(\"input\", onInput);\n container.removeEventListener(\"keydown\", onKeydown as EventListener);\n container.removeEventListener(\"paste\", onPaste as EventListener);\n });\n },\n };\n}\n\nexport { inputOTP };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Styles a custom radio button with a themed circular box, checked dot, hover,\n * focus and disabled states. Apply to an `<input>` element of type `radio`\n * (the patch sets `type: \"radio\"`).\n *\n * @hostTag input\n * @param props.color - Optional theme color tone for the box/border (`ValueOrState<ThemeColor>`). Defaults to `\"neutral\"`.\n * @param props.accentColor - Optional theme color tone for the checked dot and focus ring (`ValueOrState<ThemeColor>`). Defaults to `\"primary\"`.\n * @example { input: null, type: \"radio\", $: [inputRadio()] }\n */\nfunction inputRadio(\n props: {\n color?: ValueOrState<ThemeColor>;\n accentColor?: ValueOrState<ThemeColor>;\n } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: \"radio\",\n _onInsert: (node) => {\n if (node.tagName !== \"input\") {\n console.warn(\n `\"inputRadio\" primitive patch must use input tag and radio type`,\n );\n return;\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n appearance: \"none\",\n display: \"inline-flex\",\n position: \"relative\",\n width: themeSpacing(6),\n height: themeSpacing(6),\n justifyContent: \"center\",\n alignItems: \"center\",\n transition: \"background-color 300ms, outline-color 300ms\",\n margin: 0,\n padding: 0,\n \"&::before\": {\n content: `\"\"`,\n display: \"block\",\n borderRadius: \"50%\",\n lineHeight: 1,\n cursor: \"pointer\",\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) =>\n `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n color: (listener) =>\n themeColor(listener, \"shift-9\", color.get(listener)),\n width: themeSpacing(4),\n height: themeSpacing(4),\n },\n \"&:hover::before\": {\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-2\", color.get(listener)),\n },\n \"&:checked::before\": {\n outline: (listener) =>\n `1px solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&:checked::after\": {\n content: `\"\"`,\n position: \"absolute\",\n inset: \"30%\",\n borderRadius: \"50%\",\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-8\", accentColor.get(listener)),\n },\n \"&:checked:hover:not([disabled])::before\": {\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-7\", accentColor.get(listener)),\n },\n \"&:focus-visible\": {\n borderRadius: \"50%\",\n outline: (listener) =>\n `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&[disabled]\": {\n cursor: \"not-allowed\",\n },\n \"&[disabled]::before, &[disabled]::after\": {\n outline: \"none\",\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-4\", \"neutral\"),\n pointerEvents: \"none\",\n },\n },\n };\n}\n\nexport { inputRadio };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport { type ThemeColor, themeColor, themeSpacing } from \"@domphy/theme\";\n\n/**\n * Styles a range slider with a themed track and thumb, hover, focus and\n * disabled states. Apply to an `<input>` element of type `range` (the patch\n * sets `type: \"range\"`).\n *\n * @hostTag input\n * @param props.color - Optional theme color tone for the slider track (`ValueOrState<ThemeColor>`). Defaults to `\"neutral\"`.\n * @param props.accentColor - Optional theme color tone for the thumb and focus ring (`ValueOrState<ThemeColor>`). Defaults to `\"primary\"`.\n * @example { input: null, type: \"range\", $: [inputRange()] }\n */\nfunction inputRange(\n props: {\n color?: ValueOrState<ThemeColor>;\n accentColor?: ValueOrState<ThemeColor>;\n } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: \"range\",\n _onInsert: (node) => {\n if (node.tagName !== \"input\") {\n console.warn(`\"inputRange\" primitive patch must use input tag`);\n }\n },\n style: {\n appearance: \"none\",\n width: \"100%\",\n margin: 0,\n padding: 0,\n height: themeSpacing(4),\n background: \"transparent\",\n cursor: \"pointer\",\n \"&::-webkit-slider-runnable-track\": {\n height: themeSpacing(1.5),\n borderRadius: themeSpacing(999),\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-3\", color.get(listener)),\n },\n \"&::-webkit-slider-thumb\": {\n appearance: \"none\",\n width: themeSpacing(4),\n height: themeSpacing(4),\n borderRadius: themeSpacing(999),\n border: \"none\",\n marginTop: `calc((${themeSpacing(1.5)} - ${themeSpacing(4)}) / 2)`,\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-9\", accentColor.get(listener)),\n },\n \"&:hover:not([disabled])::-webkit-slider-thumb\": {\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-10\", accentColor.get(listener)),\n },\n \"&:focus-visible\": {\n outline: (listener) =>\n `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n outlineOffset: themeSpacing(1),\n borderRadius: themeSpacing(2),\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n },\n },\n };\n}\n\nexport { inputRange };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeDensity,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Styles a search input with themed border, padding, placeholder color, native\n * search decorations, hover, focus and disabled states. Apply to an `<input>`\n * element of type `search` (the patch sets `type: \"search\"`).\n *\n * @hostTag input\n * @param props.color - Optional theme color tone for text/border/placeholder (`ValueOrState<ThemeColor>`). Defaults to `\"neutral\"`.\n * @param props.accentColor - Optional theme color tone for the hover/focus ring (`ValueOrState<ThemeColor>`). Defaults to `\"primary\"`.\n * @example { input: null, type: \"search\", $: [inputSearch()] }\n */\nfunction inputSearch(\n props: {\n color?: ValueOrState<ThemeColor>;\n accentColor?: ValueOrState<ThemeColor>;\n } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: \"search\",\n _onSchedule: (node, element) => {\n if (node.tagName !== \"input\") {\n console.warn(`\"inputSearch\" primitive patch must use input tag`);\n }\n (element as any).type = \"search\";\n },\n style: {\n fontFamily: \"inherit\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n lineHeight: \"inherit\",\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) =>\n themeColor(listener, \"inherit\", color.get(listener)),\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) =>\n `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\n minWidth: themeSpacing(32),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n \"&::placeholder\": {\n color: (listener) =>\n themeColor(listener, \"shift-7\", color.get(listener)),\n },\n \"&::-webkit-search-decoration\": {\n display: \"none\",\n },\n \"&::-webkit-search-cancel-button\": {\n cursor: \"pointer\",\n },\n \"&:hover:not([disabled]):not([aria-busy=true]), &:focus-visible\": {\n outline: (listener) =>\n `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-2\", \"neutral\"),\n outline: (listener) =>\n `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n },\n },\n };\n}\n\nexport { inputSearch };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Styles a checkbox as a toggle switch: themed track and sliding knob that\n * animates and recolors on checked, plus a disabled state. Apply to an\n * `<input>` element of type `checkbox` (the patch sets `type: \"checkbox\"`).\n *\n * @hostTag input\n * @param props.accentColor - Optional theme color tone for the checked track (`ValueOrState<ThemeColor>`). Defaults to `\"primary\"`.\n * @example { input: null, type: \"checkbox\", $: [inputSwitch()] }\n */\nfunction inputSwitch(\n props: { accentColor?: ValueOrState<ThemeColor> } = {},\n): PartialElement {\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n dataTone: \"shift-2\",\n type: \"checkbox\",\n _onSchedule: (node) => {\n if (node.tagName !== \"input\") {\n console.warn(`\"inputSwitch\" primitive patch must use input tag`);\n return;\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n appearance: \"none\",\n position: \"relative\",\n display: \"inline-flex\",\n width: themeSpacing(9),\n height: themeSpacing(6),\n cursor: \"pointer\",\n margin: `0`,\n paddingBlock: themeSpacing(1),\n \"&:checked\": {\n \"&::before\": {\n backgroundColor: (listener) =>\n themeColor(listener, \"increase-3\", accentColor.get(listener)),\n },\n \"&::after\": {\n left: `calc(100% - ${themeSpacing(3.5)})`,\n },\n },\n \"&::after\": {\n content: `\"\"`,\n aspectRatio: `1/1`,\n position: \"absolute\",\n width: themeSpacing(3),\n height: themeSpacing(3),\n borderRadius: themeSpacing(999),\n left: themeSpacing(0.5),\n top: \"50%\",\n transform: \"translateY(-50%)\",\n transition: \"left 0.3s\",\n backgroundColor: (listener) => themeColor(listener, \"decrease-3\"),\n },\n \"&::before\": {\n content: '\"\"',\n width: \"100%\",\n borderRadius: themeSpacing(999),\n display: \"inline-block\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n lineHeight: 1,\n backgroundColor: (listener) => themeColor(listener),\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n },\n },\n };\n}\n\nexport { inputSwitch };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeDensity,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Themed single-line text input primitive. Sets `type=\"text\"` and styles the\n * field with themed border, focus ring, placeholder, disabled and validation\n * (`data-status`) states. Apply to an `<input>` element.\n *\n * @hostTag input\n * @param props - Optional configuration.\n * @param props.color - Base color tone for text/border/background. Defaults to `\"neutral\"`.\n * @param props.accentColor - Accent color tone for the hover/focus outline. Defaults to `\"primary\"`.\n * @example { input: \"\", type: \"text\", placeholder: \"Name\", $: [inputText()] }\n */\nfunction inputText(\n props: {\n color?: ValueOrState<ThemeColor>;\n accentColor?: ValueOrState<ThemeColor>;\n } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: \"text\",\n _onSchedule: (node, element) => {\n if (node.tagName !== \"input\") {\n console.warn(\n `\"inputText\" primitive patch must use input tag and text type`,\n );\n }\n (element as any).type = \"text\";\n },\n style: {\n fontFamily: \"inherit\",\n lineHeight: \"inherit\",\n minWidth: themeSpacing(10),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) =>\n `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) =>\n themeColor(listener, \"inherit\", color.get(listener)),\n \"&::placeholder\": {\n color: (listener) => themeColor(listener, \"shift-7\"),\n },\n \"&:not(:placeholder-shown)\": {\n color: (listener) => themeColor(listener, \"shift-10\"),\n },\n \"&:hover:not([disabled]):not([aria-busy=true]), &:focus-visible\": {\n outline: (listener) =>\n `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-2\", \"neutral\"),\n outline: (listener) =>\n `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n },\n \"&:invalid:not(:placeholder-shown)\": {\n outline: (listener) =>\n `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", \"error\")}`,\n },\n \"&[data-status=error]\": {\n outline: (listener) =>\n `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", \"error\")}`,\n },\n \"&[data-status=warning]\": {\n outline: (listener) =>\n `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", \"warning\")}`,\n },\n },\n };\n}\n\nexport { inputText };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Renders keyboard-key styling (themed background, border and padding) for a\n * keystroke hint. Apply to a `<kbd>` element.\n *\n * @hostTag kbd\n * @param props - Optional configuration.\n * @param props.color - Color tone for text/background/border. Defaults to `\"neutral\"`.\n * @example { kbd: \"Ctrl\", $: [keyboard()] }\n */\nfunction keyboard(\n props: { color?: ValueOrState<ThemeColor> } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"kbd\") {\n console.warn(`\"keyboard\" primitive patch must use kbd tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) =>\n themeColor(listener, \"inherit\", color.get(listener)),\n paddingBlock: themeSpacing(0.5),\n paddingInline: themeSpacing(1.5),\n borderRadius: themeSpacing(1),\n outline: (listener) =>\n `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n },\n };\n}\n\nexport { keyboard };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Themed form-label primitive: inline-flex layout with gap, themed text color,\n * focus-within highlighting and a disabled (`aria-disabled`) state. Apply to a\n * `<label>` element.\n *\n * @hostTag label\n * @param props - Optional configuration.\n * @param props.color - Base color tone for the label text. Defaults to `\"neutral\"`.\n * @param props.accentColor - Accent color tone applied on focus-within. Defaults to `\"primary\"`.\n * @example { label: \"Email\", htmlFor: \"email\", $: [label()] }\n */\nfunction label(\n props: {\n color?: ValueOrState<ThemeColor>;\n accentColor?: ValueOrState<ThemeColor>;\n } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"label\") {\n console.warn(`\"label\" primitive patch must use label tag`);\n }\n },\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: themeSpacing(2),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n cursor: \"pointer\",\n \"&:focus-within\": {\n color: (listener) =>\n themeColor(listener, \"shift-10\", accentColor.get(listener)),\n },\n \"&[aria-disabled=true]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n },\n },\n };\n}\n\nexport { label };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Themed hyperlink primitive: styles text color, hover underline, visited,\n * focus ring and a disabled state. Apply to an `<a>` element.\n *\n * @hostTag a\n * @param props - Optional configuration.\n * @param props.color - Base color tone for the link text. Defaults to `\"primary\"`.\n * @param props.accentColor - Accent color tone for visited/focus states. Defaults to `\"secondary\"`.\n * @example { a: \"Home\", href: \"/\", $: [link()] }\n */\nfunction link(\n props: {\n color?: ValueOrState<ThemeColor>;\n accentColor?: ValueOrState<ThemeColor>;\n } = {},\n): PartialElement {\n const color = toState(props.color ?? \"primary\", \"color\");\n const accentColor = toState(props.accentColor ?? \"secondary\", \"accentColor\");\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"a\") {\n console.warn(`\"link\" primitive patch must use a tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n backgroundColor: (listener) => themeColor(listener),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n textDecoration: \"none\",\n \"&:visited\": {\n color: (listener) =>\n themeColor(listener, \"shift-9\", accentColor.get(listener)),\n },\n \"&:hover:not([disabled])\": {\n color: (listener) =>\n themeColor(listener, \"shift-10\", color.get(listener)),\n textDecoration: \"underline\",\n },\n \"&:focus-visible\": {\n borderRadius: themeSpacing(1),\n outlineOffset: themeSpacing(1),\n outline: (listener) =>\n `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n },\n },\n };\n}\n\nexport { link };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Themed highlight primitive: gives marked/highlighted inline text a tinted\n * background, rounded corners and padding. Apply to a `<mark>` element.\n *\n * @hostTag mark\n * @param props - Optional configuration.\n * @param props.accentColor - Accent color tone for the highlight fill and text. Defaults to `\"highlight\"`.\n * @example { mark: \"important\", $: [mark()] }\n */\nfunction mark(\n props: { accentColor?: ValueOrState<ThemeColor> } = {},\n): PartialElement {\n const accentColor = toState(props.accentColor ?? \"highlight\", \"accentColor\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"mark\") {\n console.warn(`\"mark\" primitive patch must use mark tag`);\n }\n },\n dataTone: \"shift-2\",\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) =>\n themeColor(listener, \"shift-9\", accentColor.get(listener)),\n backgroundColor: (listener) =>\n themeColor(listener, \"inherit\", accentColor.get(listener)),\n height: themeSpacing(6),\n borderRadius: themeSpacing(1),\n paddingInline: themeSpacing(1.5),\n },\n };\n}\n\nexport { mark };\n","import {\n merge,\n type PartialElement,\n toState,\n type ValueOrState,\n} from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeDensity,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Themed menu container that provides selection context (`activeKey`,\n * `selectable`) to child `menuItem` patches and lays them out vertically.\n * Sets `role=\"menu\"`. Typically applied to a container element such as a\n * `<div>` or `<ul>`.\n *\n * @param props - Optional configuration.\n * @param props.activeKey - Currently selected item key, accepts a value or `State`. Defaults to `null`.\n * @param props.selectable - Whether items track and update the active selection. Defaults to `true`.\n * @param props.color - Background color tone for the menu. Defaults to `\"neutral\"`.\n * @example { div: \"\", $: [menu({ activeKey: 0 })] }\n */\nfunction menu(\n props: {\n activeKey?: ValueOrState<number | string>;\n selectable?: boolean;\n color?: ThemeColor;\n } = {},\n): PartialElement {\n const { color = \"neutral\", selectable = true } = props;\n\n const partial: PartialElement = {\n role: \"menu\",\n dataTone: \"shift-17\",\n _onSchedule: (node, element) => {\n const partial = {\n _context: {\n menu: {\n activeKey: toState(props.activeKey ?? null),\n selectable,\n },\n },\n };\n merge(element, partial);\n },\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 2),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\n },\n };\n return partial;\n}\n\nexport { menu };\n","import type { ElementNode, PartialElement } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeDensity,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Themed menu entry for use inside a `menu`. Sets `role=\"menuitem\"`, wires\n * click/keyboard selection (Enter/Space activate; Arrow/Home/End move focus),\n * and reflects the active item via `aria-current`. Apply to a `<button>`\n * element placed within a `menu`.\n *\n * @hostTag button\n * @param props - Optional configuration.\n * @param props.accentColor - Accent color tone for the active/focus indicator. Defaults to `\"primary\"`.\n * @param props.color - Base color tone for the item. Defaults to `\"neutral\"`.\n * @example { button: \"Profile\", $: [menuItem()] }\n */\nfunction menuItem(\n props: { accentColor?: ThemeColor; color?: ThemeColor } = {},\n): PartialElement {\n const { accentColor = \"primary\", color = \"neutral\" } = props;\n\n const partial: PartialElement = {\n role: \"menuitem\",\n _onInsert: (node) => {\n if (node.tagName !== \"button\") {\n console.warn(`\"menuItem\" patch must use button tag`);\n }\n\n const context = node.getContext(\"menu\");\n if (!context) {\n console.warn(`\"menuItem\" patch must be used inside a \"menu\"`);\n return;\n }\n let children = (node.parent?.children.items ?? []) as ElementNode[];\n children = children.filter(\n (n) =>\n n.type == \"ElementNode\" && n.attributes.get(\"role\") == \"menuitem\",\n );\n // Strict key check: an explicit _key of 0 or \"\" must not fall back to index.\n const key =\n node.key !== null && node.key !== undefined\n ? node.key\n : children.findIndex((n) => n == node);\n if (context.selectable) {\n node.attributes.set(\n \"ariaCurrent\",\n (listener) => context.activeKey.get(listener) == key || undefined,\n );\n node.addEvent(\"click\", () => context.activeKey.set(key));\n }\n },\n onKeyDown: (e: KeyboardEvent, node) => {\n const k = (e as KeyboardEvent).key;\n if (k === \"Enter\" || k === \" \") {\n e.preventDefault();\n (node.domElement as HTMLElement)?.click();\n return;\n }\n if (![\"ArrowDown\", \"ArrowUp\", \"Home\", \"End\"].includes(k)) return;\n e.preventDefault();\n const items = (node.parent?.children.items ?? []).filter(\n (n) =>\n n.type === \"ElementNode\" &&\n (n as ElementNode).attributes.get(\"role\") === \"menuitem\",\n ) as ElementNode[];\n const idx = items.findIndex((n) => n === node);\n let next = idx;\n if (k === \"ArrowDown\") next = (idx + 1) % items.length;\n else if (k === \"ArrowUp\") next = (idx - 1 + items.length) % items.length;\n else if (k === \"Home\") next = 0;\n else if (k === \"End\") next = items.length - 1;\n (items[next].domElement as HTMLElement)?.focus();\n },\n style: {\n cursor: \"pointer\",\n display: \"flex\",\n alignItems: \"center\",\n gap: (listener) => themeSpacing(2),\n width: \"100%\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n height: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n border: \"none\",\n outline: \"none\",\n color: (listener) => themeColor(listener, \"shift-9\"),\n backgroundColor: (listener) => themeColor(listener, \"inherit\"),\n \"&:hover:not([disabled]):not([aria-current=true])\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-2\"),\n },\n // Menu uses the current/indicator band instead of the selected fill band.\n \"&[aria-current=true]\": {\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-3\", accentColor),\n color: (listener) => themeColor(listener, \"shift-10\"),\n },\n \"&:focus-visible\": {\n outline: (listener) =>\n `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor)}`,\n outlineOffset: `-${themeSpacing(0.5)}`,\n },\n },\n };\n return partial;\n}\n\nexport { menuItem };\n","import type { PartialElement, State } from \"@domphy/core\";\n\n/**\n * One keyframe. Shorthands `x`/`y` (px), `scale`, `rotate` (deg) compose into a\n * single `transform`; any other key is a raw CSS property (e.g. `opacity`,\n * `backgroundColor`).\n */\nexport type MotionKeyframe = {\n x?: number | string;\n y?: number | string;\n scale?: number | string;\n rotate?: number | string;\n} & Record<string, string | number>;\n\nexport interface MotionProps {\n /** Starting keyframe applied before the enter animation. */\n initial?: MotionKeyframe;\n /** Target keyframe. Pass a `State` to re-animate whenever it changes. */\n animate?: MotionKeyframe | State<MotionKeyframe>;\n /** Keyframe animated to before the element is removed. */\n exit?: MotionKeyframe;\n transition?: {\n /** ms, default 300. */\n duration?: number;\n /** ms, default 0. */\n delay?: number;\n /** CSS easing, default \"ease\". */\n easing?: string;\n iterations?: number;\n };\n}\n\nconst isState = (value: unknown): value is State<MotionKeyframe> =>\n !!value &&\n typeof (value as State<MotionKeyframe>).get === \"function\" &&\n (value as { _isState?: boolean })._isState === true;\n\nconst toStyles = (frame: MotionKeyframe): Keyframe => {\n const out: Record<string, string | number> = {};\n const transforms: string[] = [];\n for (const key in frame) {\n const value = frame[key];\n if (key === \"x\") {\n transforms.push(\n `translateX(${typeof value === \"number\" ? `${value}px` : value})`,\n );\n } else if (key === \"y\") {\n transforms.push(\n `translateY(${typeof value === \"number\" ? `${value}px` : value})`,\n );\n } else if (key === \"scale\") {\n transforms.push(`scale(${value})`);\n } else if (key === \"rotate\") {\n transforms.push(\n `rotate(${typeof value === \"number\" ? `${value}deg` : value})`,\n );\n } else {\n out[key] = value;\n }\n }\n if (transforms.length) out.transform = transforms.join(\" \");\n return out as Keyframe;\n};\n\n/**\n * Animation primitive driven by the Web Animations API. Runs an enter\n * animation on mount (`initial` -> `animate`), re-animates whenever `animate`\n * is a `State` that changes, and plays the `exit` keyframe before removal.\n * Has no host-tag restriction; apply to any element you want to animate.\n *\n * @param props - Optional configuration (see {@link MotionProps}).\n * @param props.initial - Starting keyframe applied before the enter animation.\n * @param props.animate - Target keyframe, or a `State` to re-animate on change.\n * @param props.exit - Keyframe animated to before the element is removed.\n * @param props.transition - Timing options.\n * @param props.transition.duration - Duration in ms. Defaults to `300`.\n * @param props.transition.delay - Delay in ms. Defaults to `0`.\n * @param props.transition.easing - CSS easing. Defaults to `\"ease\"`.\n * @param props.transition.iterations - Number of iterations. Defaults to `1`.\n * @example { div: \"Hello\", $: [motion({ initial: { opacity: 0 }, animate: { opacity: 1 } })] }\n */\nfunction motion(props: MotionProps = {}): PartialElement {\n const { initial, animate, exit, transition = {} } = props;\n const options: KeyframeAnimationOptions = {\n duration: transition.duration ?? 300,\n delay: transition.delay ?? 0,\n easing: transition.easing ?? \"ease\",\n iterations: transition.iterations ?? 1,\n fill: \"both\",\n };\n\n return {\n _onMount: (node) => {\n const el = node.domElement as HTMLElement | null;\n if (!el || typeof el.animate !== \"function\") return;\n const target = isState(animate) ? animate.get() : animate;\n if (target) {\n el.animate(\n initial ? [toStyles(initial), toStyles(target)] : [toStyles(target)],\n options,\n );\n } else if (initial) {\n Object.assign(el.style, toStyles(initial));\n }\n if (isState(animate)) {\n const release = animate.addListener((next: MotionKeyframe) => {\n el.animate([toStyles(next)], options);\n });\n node.setMetadata(\"motionRelease\", release);\n }\n },\n _onBeforeRemove: (node, done) => {\n const el = node.domElement as HTMLElement | null;\n if (!el || !exit || typeof el.animate !== \"function\") return done();\n el.animate([toStyles(exit)], options).finished.then(done, done);\n },\n _onRemove: (node) => {\n const release = node.getMetadata(\"motionRelease\") as\n | (() => void)\n | undefined;\n release?.();\n },\n };\n}\n\nexport { motion };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Themed ordered-list primitive: decimal markers positioned outside, reset\n * margins and themed text color. Apply to an `<ol>` element.\n *\n * @hostTag ol\n * @param props - Optional configuration.\n * @param props.color - Color tone for the list text. Defaults to `\"neutral\"`.\n * @example { ol: \"\", $: [orderedList()], children: [{ li: \"First\" }] }\n */\nfunction orderedList(\n props: { color?: ValueOrState<ThemeColor> } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"ol\") {\n console.warn(`\"orderedList\" primitive patch must use ol tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n backgroundColor: (listener) => themeColor(listener),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n marginTop: 0,\n marginBottom: 0,\n paddingLeft: themeSpacing(3),\n listStyleType: \"decimal\",\n listStylePosition: \"outside\",\n },\n };\n}\n\nexport { orderedList };\n","import {\n type DomphyElement,\n type PartialElement,\n toState,\n type ValueOrState,\n} from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeDensity,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\nfunction getPages(current: number, total: number): (number | \"...\")[] {\n if (total <= 7) return Array.from({ length: total }, (_, i) => i + 1);\n const pages: (number | \"...\")[] = [1];\n if (current > 3) pages.push(\"...\");\n const start = Math.max(2, current - 1);\n const end = Math.min(total - 1, current + 1);\n for (let i = start; i <= end; i++) pages.push(i);\n if (current < total - 2) pages.push(\"...\");\n pages.push(total);\n return pages;\n}\n\n/**\n * Themed pagination control. Renders previous/next buttons plus truncated page\n * numbers (with ellipses), tracks the current page in a `State`, and updates it\n * on click. Apply to a `<div>` element.\n *\n * @hostTag div\n * @param props - Configuration.\n * @param props.total - Required. Total number of pages.\n * @param props.value - Current page, accepts a value or `State`. Defaults to `1`.\n * @param props.color - Base color tone for the page buttons. Defaults to `\"neutral\"`.\n * @param props.accentColor - Accent color tone for the active page. Defaults to `\"primary\"`.\n * @example { div: \"\", $: [pagination({ total: 10, value: 1 })] }\n */\nfunction pagination(props: {\n value?: ValueOrState<number>;\n total: number;\n color?: ThemeColor;\n accentColor?: ThemeColor;\n}): PartialElement {\n const { total, color = \"neutral\", accentColor = \"primary\" } = props;\n const state = toState(props.value ?? 1);\n\n const btnBase = {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n minWidth: (listener: any) => themeSpacing(6 + themeDensity(listener) * 2),\n height: (listener: any) => themeSpacing(6 + themeDensity(listener) * 2),\n paddingInline: (listener: any) => themeSpacing(themeDensity(listener) * 2),\n borderRadius: (listener: any) => themeSpacing(themeDensity(listener) * 1),\n border: \"none\",\n cursor: \"pointer\",\n fontSize: (listener: any) => themeSize(listener, \"inherit\"),\n backgroundColor: \"transparent\",\n color: (listener: any) => themeColor(listener, \"shift-9\", color),\n \"&:hover:not([disabled])\": {\n backgroundColor: (listener: any) =>\n themeColor(listener, \"shift-2\", color),\n },\n \"&[disabled]\": {\n opacity: 0.4,\n cursor: \"not-allowed\",\n },\n };\n\n const activeStyle = {\n ...btnBase,\n backgroundColor: (listener: any) =>\n themeColor(listener, \"shift-6\", accentColor),\n color: (listener: any) => themeColor(listener, \"shift-11\", accentColor),\n fontWeight: \"600\",\n cursor: \"default\",\n \"&:hover:not([disabled])\": {\n backgroundColor: (listener: any) =>\n themeColor(listener, \"shift-6\", accentColor),\n },\n };\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"div\")\n console.warn('\"pagination\" patch must use div tag');\n },\n _onInit: (node) => {\n const content: DomphyElement<\"div\"> = {\n div: (listener) => {\n const page = state.get(listener);\n const items: DomphyElement[] = [];\n\n // Prev button\n items.push({\n button: \"‹\",\n type: \"button\",\n ariaLabel: \"Previous page\",\n disabled: page <= 1,\n onClick: () => page > 1 && state.set(page - 1),\n style: btnBase,\n });\n\n // Page buttons\n for (const p of getPages(page, total)) {\n if (p === \"...\") {\n items.push({\n span: \"…\",\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n paddingInline: (listener: any) =>\n themeSpacing(themeDensity(listener) * 2),\n color: (listener: any) =>\n themeColor(listener, \"shift-7\", color),\n },\n });\n } else {\n const isActive = p === page;\n items.push({\n button: String(p),\n type: \"button\",\n ariaLabel: `Page ${p}`,\n ariaCurrent: isActive ? \"page\" : undefined,\n disabled: isActive,\n onClick: () => state.set(p),\n style: isActive ? activeStyle : btnBase,\n });\n }\n }\n\n // Next button\n items.push({\n button: \"›\",\n type: \"button\",\n ariaLabel: \"Next page\",\n disabled: page >= total,\n onClick: () => page < total && state.set(page + 1),\n style: btnBase,\n });\n\n return items;\n },\n style: {\n display: \"flex\",\n alignItems: \"center\",\n gap: themeSpacing(1),\n },\n };\n node.children.insert(content);\n },\n style: {\n display: \"inline-flex\",\n },\n };\n}\n\nexport { pagination };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Themed paragraph primitive: comfortable line-height, reset margins and themed\n * text color. Apply to a `<p>` element.\n *\n * @hostTag p\n * @param props - Optional configuration.\n * @param props.color - Color tone for the paragraph text. Defaults to `\"neutral\"`.\n * @example { p: \"Hello world\", $: [paragraph()] }\n */\nfunction paragraph(\n props: { color?: ValueOrState<ThemeColor> } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"p\") {\n console.warn(`\"paragraph\" primitive patch must use p tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n lineHeight: 1.5,\n marginTop: 0,\n marginBottom: 0,\n },\n };\n}\n\nexport { paragraph };\n","import {\n type DomphyElement,\n merge,\n type PartialElement,\n State,\n toState,\n type ValueOrState,\n} from \"@domphy/core\";\nimport type { Placement } from \"@domphy/floating\";\nimport { creatFloating } from \"../utils/floating.js\";\n\n/**\n * Floating popover primitive. Attaches to its host as the anchor/trigger and\n * shows a floating `content` element (with `role=\"dialog\"`) on click or hover,\n * positioned via `@domphy/floating`. Returns the anchor partial, which merges\n * trigger wiring (haspopup/expanded, focus/blur dismissal). Apply to the\n * trigger element you want the popover anchored to.\n *\n * @param props - Configuration.\n * @param props.openOn - Interaction that opens the popover: `\"click\"` or `\"hover\"`. Defaults to `\"click\"`.\n * @param props.open - Open state, accepts a value or `State`. Defaults to `false`.\n * @param props.placement - Floating placement (e.g. `\"bottom\"`, `\"top-start\"`), value or `State`. Defaults to `\"bottom\"`.\n * @param props.content - The floating content element to display.\n * @example { button: \"Open\", $: [popover({ openOn: \"click\", content: { div: \"Hi\" } })] }\n */\nfunction popover(props: {\n openOn: \"click\" | \"hover\";\n open?: ValueOrState<boolean>;\n placement?: ValueOrState<Placement>;\n content: DomphyElement;\n}): PartialElement {\n const { open = false, placement = \"bottom\", openOn = \"click\" } = props;\n\n let popoverId: string | null = null;\n const openState = toState(open);\n const placeState = toState(placement);\n\n const { show, hide, anchorPartial } = creatFloating({\n open: openState,\n placement: placeState,\n content: props.content,\n });\n\n const popoverPartial: PartialElement = {\n role: \"dialog\",\n dataTone: \"shift-11\",\n onMouseEnter: () => openOn === \"hover\" && show(),\n onMouseLeave: () => openOn === \"hover\" && hide(),\n _onInsert: (node) => {\n const id = node.attributes.get(\"id\");\n popoverId = id || node.nodeId;\n !id && node.attributes.set(\"id\", popoverId);\n },\n };\n\n props.content.$ ||= [];\n props.content.$.push(popoverPartial);\n\n const triggerPartial: PartialElement = {\n ariaHaspopup: \"dialog\",\n ariaExpanded: (listener) => openState.get(listener),\n onMouseEnter: () => openOn === \"hover\" && show(),\n onMouseLeave: () => openOn === \"hover\" && hide(),\n onClick: () => {\n if (openOn === \"click\") {\n if (openState.get()) {\n hide();\n } else {\n show();\n }\n }\n },\n onFocus: () => show(),\n onBlur: (e, node) => {\n const related = (e as FocusEvent).relatedTarget as Node | null;\n const root = node.getRoot().domElement as Element;\n const floatingEl = popoverId\n ? root.querySelector(`#${CSS.escape(popoverId)}`)\n : null;\n if (related && floatingEl?.contains(related)) return;\n hide();\n },\n _onMount: (node) =>\n popoverId && node.attributes.set(\"ariaControls\", popoverId),\n };\n merge(anchorPartial, triggerPartial);\n\n return anchorPartial;\n}\n\nexport { popover };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport type { Placement } from \"@domphy/floating\";\nimport {\n type ThemeColor,\n themeColor,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Renders a small rotated arrow (via a `::after` pseudo-element) that points from a\n * popover/tooltip toward its anchor, positioned and oriented based on the floating placement.\n * The arrow direction is computed by flipping the given placement. No host-tag check is\n * performed; apply it to the popover container element.\n *\n * @param props.placement - Floating placement the popover sits at; the arrow is drawn on the\n * opposite (flipped) side. Accepts a value or reactive state. Defaults to `\"bottom-end\"`.\n * One of: `top` | `bottom` | `left` | `right` | `top-start` | `top-end` | `bottom-start` |\n * `bottom-end` | `left-start` | `left-end` | `right-start` | `right-end`.\n * @param props.sideOffset - CSS length used to offset the arrow toward the start/end edge.\n * Defaults to `themeSpacing(6)`.\n * @param props.color - Theme color tone for the arrow fill and border. Defaults to `\"neutral\"`.\n * @param props.bordered - Whether the arrow draws a 1px border (set to `0px` when false).\n * Defaults to `true`.\n * @example { div: [...], $: [popoverArrow({ placement: \"top\" })] }\n */\nfunction popoverArrow(\n props: {\n placement?: ValueOrState<Placement>;\n sideOffset?: string;\n color?: ThemeColor;\n bordered?: boolean;\n } = {},\n): PartialElement {\n const {\n placement = \"bottom-end\",\n color = \"neutral\",\n sideOffset = themeSpacing(6),\n bordered = true,\n } = props;\n\n const place = toState(placement);\n\n const flipMap: Record<Placement, Placement> = {\n top: \"bottom\",\n bottom: \"top\",\n left: \"right\",\n right: \"left\",\n \"top-start\": \"bottom-end\",\n \"top-end\": \"bottom-start\",\n \"bottom-start\": \"top-end\",\n \"bottom-end\": \"top-start\",\n \"left-start\": \"right-end\",\n \"left-end\": \"right-start\",\n \"right-start\": \"left-end\",\n \"right-end\": \"left-start\",\n };\n\n const getFlipped = (listener: any) =>\n flipMap[place.get(listener)] ?? flipMap[\"bottom-end\"];\n const start = (pos: string) =>\n pos.includes(\"start\") ? sideOffset : pos.includes(\"end\") ? \"auto\" : \"50%\";\n const end = (pos: string) =>\n pos.includes(\"end\") ? sideOffset : pos.includes(\"start\") ? \"auto\" : \"50%\";\n\n return {\n style: {\n fontSize: (listener) => themeSize(listener),\n backgroundColor: (listener) => themeColor(listener),\n color: (listener) => themeColor(listener, \"shift-9\", color),\n position: \"relative\",\n \"&::after\": {\n content: `\"\"`,\n position: \"absolute\",\n width: themeSpacing(1.5),\n height: themeSpacing(1.5),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\n borderWidth: bordered ? \"1px\" : \"0px\",\n borderColor: (listener) => themeColor(listener, \"inherit\", color),\n borderTopStyle: (listener) => {\n const pos = getFlipped(listener);\n\n return pos.includes(\"top\") || pos.includes(\"right\")\n ? `solid`\n : \"none\";\n },\n borderBottomStyle: (listener) => {\n const pos = getFlipped(listener);\n\n return pos.includes(\"bottom\") || pos.includes(\"left\")\n ? `solid`\n : \"none\";\n },\n borderLeftStyle: (listener) => {\n const pos = getFlipped(listener);\n return pos.includes(\"top\") || pos.includes(\"left\") ? `solid` : \"none\";\n },\n borderRightStyle: (listener) => {\n const pos = getFlipped(listener);\n return pos.includes(\"bottom\") || pos.includes(\"right\")\n ? `solid`\n : \"none\";\n },\n top: (listener) => {\n const pos = getFlipped(listener);\n return pos.includes(\"top\")\n ? 0\n : pos.includes(\"bottom\")\n ? \"auto\"\n : start(pos);\n },\n right: (listener) => {\n const pos = getFlipped(listener);\n return pos.includes(\"right\")\n ? 0\n : pos.includes(\"left\")\n ? \"auto\"\n : end(pos);\n },\n bottom: (listener) => {\n const pos = getFlipped(listener);\n return pos.includes(\"bottom\")\n ? 0\n : pos.includes(\"top\")\n ? \"auto\"\n : end(pos);\n },\n left: (listener) => {\n const pos = getFlipped(listener);\n return pos.includes(\"left\")\n ? 0\n : pos.includes(\"right\")\n ? \"auto\"\n : start(pos);\n },\n transform: (listener) => {\n const pos = getFlipped(listener);\n const x =\n pos.includes(\"right\") ||\n (pos.includes(\"end\") && !pos.includes(\"left\"))\n ? \"50%\"\n : \"-50%\";\n const y =\n pos.includes(\"bottom\") ||\n (pos.includes(\"end\") && !pos.includes(\"top\"))\n ? \"50%\"\n : \"-50%\";\n return `translate(${x},${y}) rotate(45deg)`;\n },\n },\n },\n };\n}\n\nexport { popoverArrow };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeDensity,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Styles a preformatted text block: inherited font size, themed foreground/background,\n * no border, density-scaled padding and rounded corners.\n *\n * @hostTag pre\n * @param props.color - Theme color tone for text and background. Accepts a value or reactive\n * state. Defaults to `\"neutral\"`.\n * @example { pre: \"const x = 1\", $: [preformated()] }\n */\nfunction preformated(\n props: { color?: ValueOrState<ThemeColor> } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n dataTone: \"shift-2\",\n _onInsert: (node) => {\n if (node.tagName !== \"pre\") {\n console.warn(`\"preformated\" primitive patch must use pre tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) =>\n themeColor(listener, \"inherit\", color.get(listener)),\n border: \"none\",\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 2),\n },\n };\n}\n\nexport { preformated };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport { type ThemeColor, themeColor, themeSpacing } from \"@domphy/theme\";\n\n/**\n * Styles a native progress bar: full-width, pill-shaped track with a themed fill,\n * including the WebKit progress-bar/value pseudo-elements and a width transition.\n *\n * @hostTag progress\n * @param props.color - Theme color tone for the track/background. Accepts a value or reactive\n * state. Defaults to `\"neutral\"`.\n * @param props.accentColor - Theme color tone for the filled value. Accepts a value or reactive\n * state. Defaults to `\"primary\"`.\n * @example { progress: null, value: 40, max: 100, $: [progress()] }\n */\nfunction progress(\n props: {\n color?: ValueOrState<ThemeColor>;\n accentColor?: ValueOrState<ThemeColor>;\n } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"progress\") {\n console.warn(`\"progress\" primitive patch must use progress tag`);\n }\n },\n style: {\n appearance: \"none\",\n width: \"100%\",\n height: themeSpacing(2),\n border: 0,\n borderRadius: themeSpacing(999),\n overflow: \"hidden\",\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-3\", color.get(listener)),\n \"&::-webkit-progress-bar\": {\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-3\", color.get(listener)),\n borderRadius: themeSpacing(999),\n },\n \"&::-webkit-progress-value\": {\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-9\", accentColor.get(listener)),\n borderRadius: themeSpacing(999),\n transition: \"width 220ms ease\",\n },\n },\n };\n}\n\nexport { progress };\n","import type { Listener, PartialElement } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeColorToken,\n themeDensity,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Styles a native `<select>` control: removes the default appearance, applies themed\n * colors, outline, density-scaled padding/radius, a custom chevron background icon, and\n * hover/focus/disabled/optgroup/option states.\n *\n * @hostTag select\n * @param props.color - Theme color tone for text, background and outline. Defaults to `\"neutral\"`.\n * @param props.accentColor - Theme color tone for hover/focus outlines. Defaults to `\"primary\"`.\n * @example { select: [{ option: \"A\" }], $: [select()] }\n */\nfunction select(\n props: { color?: ThemeColor; accentColor?: ThemeColor } = {},\n): PartialElement {\n const { color = \"neutral\", accentColor = \"primary\" } = props;\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"select\") {\n console.warn(`\"select\" primitive patch must use select tag`);\n }\n },\n style: {\n appearance: \"none\",\n fontFamily: \"inherit\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n lineHeight: \"inherit\",\n color: (listener) => themeColor(listener, \"shift-9\", color),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) =>\n `1px solid ${themeColor(listener, \"shift-4\", color)}`,\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n paddingLeft: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingRight: (listener) => themeSpacing(themeDensity(listener) * 5),\n backgroundImage: (l: Listener) => {\n const svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 10 6\"><path d=\"M1 1l4 4 4-4\" stroke=\"${themeColorToken(l, \"shift-7\")}\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`;\n return `url(\"data:image/svg+xml,${encodeURIComponent(svg)}\")`;\n },\n backgroundRepeat: \"no-repeat\",\n backgroundPosition: `right ${themeSpacing(2)} center`,\n backgroundSize: `${themeSpacing(2.5)} ${themeSpacing(1.5)}`,\n \"&:not([multiple])\": {\n height: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\n },\n \"&:hover:not([disabled]):not([aria-busy=true])\": {\n outline: (listener) =>\n `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", accentColor)}`,\n },\n \"&:focus-visible\": {\n outline: (listener) =>\n `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor)}`,\n },\n \"& optgroup\": {\n color: (listener) => themeColor(listener, \"shift-11\", color),\n },\n \"& option[disabled]\": {\n color: (listener) => themeColor(listener, \"shift-7\", \"neutral\"),\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n outline: (listener) =>\n `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-2\", \"neutral\"),\n },\n },\n };\n}\n\nexport { select };\n","import {\n type DomphyElement,\n merge,\n type PartialElement,\n type StyleObject,\n toState,\n type ValueOrState,\n} from \"@domphy/core\";\nimport type { Placement } from \"@domphy/floating\";\nimport {\n type ThemeColor,\n themeColor,\n themeDensity,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\nimport { creatFloating } from \"../utils/floating.js\";\nimport { tag } from \"./tag.js\";\n\n/**\n * A clickable select trigger box that renders the currently selected option(s) as removable\n * tags and toggles a floating popover (the dropdown content) anchored to itself. Selected\n * labels are derived from `options` matching the bound `value`; removing a tag updates the value.\n *\n * @hostTag div\n * @param props.multiple - Whether multiple selection is allowed (renders removable tags and\n * keeps the popover open on click). Defaults to `false`.\n * @param props.value - Bound selection value(s). Accepts a value or reactive state of an array of\n * `number | string | null | undefined`, or a single `number | string | null | undefined`.\n * @param props.options - List of `{ label, value }` options used to resolve selected labels.\n * Defaults to `[]`.\n * @param props.placement - Floating placement of the dropdown popover. Accepts a value or\n * reactive state. Defaults to `\"bottom\"`.\n * @param props.content - Required. The popover/dropdown content element shown when open.\n * @param props.color - Theme color tone for the box text/background. Defaults to `\"neutral\"`.\n * @param props.open - Whether the popover is open. Accepts a value or reactive state. Defaults to `false`.\n * @example { div: null, $: [selectBox({ content: { div: [...] }, options: [{ label: \"A\", value: \"a\" }] })] }\n */\nfunction selectBox(props: {\n multiple?: boolean;\n value?: ValueOrState<\n | Array<number | string | null | undefined>\n | number\n | string\n | null\n | undefined\n >;\n options?: Array<{ label: string; value: string }>;\n placement?: ValueOrState<Placement>;\n content: DomphyElement;\n color?: ThemeColor;\n open?: ValueOrState<boolean>;\n}): PartialElement {\n const {\n options = [],\n placement = \"bottom\",\n color = \"neutral\",\n open = false,\n multiple = false,\n } = props;\n\n const state = toState(props.value);\n const openState = toState(open);\n const { show, hide, anchorPartial } = creatFloating({\n open: openState,\n placement: toState(placement),\n content: props.content,\n });\n\n const popoverPartial: PartialElement = {\n onClick: () => !multiple && hide(),\n };\n\n merge(props.content, popoverPartial);\n\n const wrap: DomphyElement<\"div\"> = {\n div: (listener) => {\n const val = state.get(listener);\n const vals = Array.isArray(val) ? val : [val];\n const opts = options.filter((opt) => vals.includes(opt.value));\n return opts.map((opt) => ({\n span: opt.label,\n $: [tag({ color, removable: multiple })],\n _key: opt.value,\n _onRemove: (_node) => {\n const cur = state.get();\n const curVals = Array.isArray(cur) ? cur : [cur];\n const filter = curVals.filter((v) => v !== opt.value);\n multiple ? state.set(filter as any) : state.set(filter[0] as any);\n },\n })) as DomphyElement<\"span\">[];\n },\n style: {\n display: \"flex\",\n flexWrap: \"wrap\",\n gap: themeSpacing(1),\n flex: 1,\n } as StyleObject,\n };\n\n const partial: PartialElement = {\n _onInsert: (node) => {\n if (node.tagName !== \"div\") {\n console.warn(`\"selectBox\" patch must use div tag`);\n }\n },\n _onInit: (node) => node.children.insert(wrap),\n onClick: () => (openState.get() ? hide() : show()),\n style: {\n cursor: \"pointer\",\n display: \"flex\",\n alignItems: \"center\",\n minHeight: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\n minWidth: themeSpacing(32),\n outlineOffset: \"-1px\",\n outline: (listener) =>\n `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 2),\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\n },\n };\n\n merge(anchorPartial, partial);\n return anchorPartial;\n}\n\nexport { selectBox };\n","import { type PartialElement, type State, toState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeDensity,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * A single selectable option row (`role=\"option\"`) for use inside a `selectList`. Reads the\n * `select` context to reflect/toggle selection: it sets `aria-selected` from the bound value and\n * toggles the value (single or multiple) on click. Styles hover/selected/focus states.\n *\n * @hostTag div\n * @param props.accentColor - Theme color tone for the selected/focus state. Defaults to `\"primary\"`.\n * @param props.color - Theme color tone for text/background. Defaults to `\"neutral\"`.\n * @param props.value - The option value compared against and written to the select state.\n * Defaults to `null`.\n * @example { div: \"Option A\", $: [selectItem({ value: \"a\" })] }\n */\nfunction selectItem(\n props: {\n accentColor?: ThemeColor;\n color?: ThemeColor;\n value?: number | string;\n } = {},\n): PartialElement {\n const { accentColor = \"primary\", color = \"neutral\", value = null } = props;\n\n const partial: PartialElement = {\n role: \"option\",\n _onInit: (node) => {\n if (node.tagName !== \"div\") {\n console.warn(`\"selectItem\" patch must use div tag`);\n }\n const select = node.getContext(\"select\");\n if (select) {\n const state = select.value;\n node.attributes.set(\"ariaSelected\", (listener) => {\n const val = state.get(listener);\n return select.multiple ? val.includes(value) : val == value;\n });\n node.addEvent(\"click\", () => {\n const val = state.get();\n if (select.multiple) {\n val.includes(value)\n ? state.set(val.filter((v: number | string) => v !== value))\n : state.set(val.concat([value]));\n } else {\n val != value && state.set(value);\n }\n });\n }\n },\n style: {\n cursor: \"pointer\",\n display: \"flex\",\n alignItems: \"center\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n height: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n border: \"none\",\n outline: \"none\",\n color: (listener) => themeColor(listener, \"shift-9\", color),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\n \"&:hover:not([disabled]):not([aria-selected=true])\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color),\n },\n \"&[aria-selected=true]\": {\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-6\", accentColor),\n color: (listener) => themeColor(listener, \"shift-11\"),\n },\n \"&:focus-visible\": {\n outline: (listener) =>\n `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor)}`,\n outlineOffset: `-${themeSpacing(0.5)}`,\n },\n },\n };\n return partial;\n}\n\nexport { selectItem };\n","import {\n type DomphyElement,\n type PartialElement,\n State,\n toState,\n type ValueOrState,\n} from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeDensity,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Container for a list of `selectItem`s that owns the selection state. It exposes a `select`\n * context (`{ value, multiple }`) consumed by child items, and injects hidden `<input>`(s)\n * carrying the selected value(s) under `name` for form submission.\n *\n * @hostTag div\n * @param props.multiple - Whether multiple selection is allowed; also sets the default empty\n * value (`[]` vs `null`). Defaults to `false`.\n * @param props.value - Bound selection value(s). Accepts a value or reactive state of an array of\n * `number | string | null`, or a single `number | string | null`. Defaults to `[]` when\n * `multiple`, otherwise `null`.\n * @param props.color - Theme color tone for the background. Defaults to `\"neutral\"`.\n * @param props.name - Name attribute for the hidden inputs (form field name).\n * @example { div: [{ div: \"A\", $: [selectItem({ value: \"a\" })] }], $: [selectList({ name: \"pick\" })] }\n */\nfunction selectList(\n props: {\n multiple?: boolean;\n value?: ValueOrState<\n Array<number | string | null> | number | string | null\n >;\n color?: ThemeColor;\n name?: string;\n } = {},\n): PartialElement {\n const { color = \"neutral\", multiple = false } = props;\n const state = toState(props.value ?? (multiple ? [] : null));\n\n const inputs: DomphyElement<\"div\"> = {\n div: (listener) => {\n const val = state.get(listener);\n const vals = Array.isArray(val) ? val : [val];\n return vals.map((v) => ({\n input: null,\n name: props.name,\n value: v || \"\",\n }));\n },\n hidden: true,\n };\n\n const partial: PartialElement = {\n dataTone: \"shift-17\",\n _context: {\n select: {\n value: state,\n multiple,\n },\n },\n _onInit: (node) => {\n if (node.tagName !== \"div\") {\n console.warn(`\"selectList\" patch must use a div tag`);\n }\n node.children.insert(inputs);\n },\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 2),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\n },\n };\n return partial;\n}\n\nexport { selectList };\n","import {\n hashString,\n type PartialElement,\n type StyleObject,\n toState,\n type ValueOrState,\n} from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * A loading placeholder block with a pulsing opacity animation. Marked `aria-hidden`, themed\n * background/foreground, fixed height, slight rounding. No host-tag check; typically applied\n * to a block-level element such as a `div` or `span`.\n *\n * @param props.color - Theme color tone for the placeholder. Accepts a value or reactive state.\n * Defaults to `\"neutral\"`.\n * @example { div: null, $: [skeleton()] }\n */\nfunction skeleton(\n props: { color?: ValueOrState<ThemeColor> } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n const keyframes = {\n \"0%,100%\": { opacity: 1 },\n \"50%\": { opacity: 0.4 },\n };\n const animationName = hashString(JSON.stringify(keyframes));\n return {\n ariaHidden: \"true\",\n dataTone: \"shift-2\",\n style: {\n fontSize: (listener) => themeSize(listener),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n height: themeSpacing(6),\n display: \"block\",\n borderRadius: themeSpacing(1),\n backgroundColor: (listener) =>\n themeColor(listener, \"inherit\", color.get(listener)),\n animation: `${animationName} 1.5s ease-in-out infinite`,\n [`@keyframes ${animationName}`]: keyframes,\n } as StyleObject,\n };\n}\n\nexport { skeleton };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport { type ThemeColor, themeColor, themeSize } from \"@domphy/theme\";\n\n/**\n * Styles small/secondary text: one step smaller font size (`data-size=\"decrease-1\"`) with a\n * themed foreground color.\n *\n * @hostTag small\n * @param props.color - Theme color tone for the text. Accepts a value or reactive state.\n * Defaults to `\"neutral\"`.\n * @example { small: \"fine print\", $: [small()] }\n */\nfunction small(\n props: { color?: ValueOrState<ThemeColor> } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n dataSize: \"decrease-1\",\n _onInsert: (node) => {\n if (node.tagName !== \"small\") {\n console.warn(`\"small\" primitive patch must use small tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n },\n };\n}\n\nexport { small };\n","import type { PartialElement, StyleObject } from \"@domphy/core\";\nimport { hashString, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\nconst keyframes = { to: { transform: \"rotate(360deg)\" } };\nconst animationName = hashString(JSON.stringify(keyframes));\n\n/**\n * A circular loading spinner: a themed ring with a contrasting top border that rotates\n * continuously. Marked `role=\"status\"` with `aria-label=\"loading\"`.\n *\n * @hostTag span\n * @param props.color - Theme color tone for the ring/highlight. Accepts a value or reactive\n * state. Defaults to `\"neutral\"`.\n * @example { span: null, $: [spinner()] }\n */\nfunction spinner(\n props: { color?: ValueOrState<ThemeColor> } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n role: \"status\",\n ariaLabel: \"loading\",\n _onInsert: (node) => {\n if (node.tagName !== \"span\") {\n console.warn(`\"spinner\" patch must use span tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener),\n backgroundColor: (listener) => themeColor(listener),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n display: \"inline-block\",\n margin: 0,\n flexShrink: 0,\n width: themeSpacing(6),\n height: themeSpacing(6),\n borderRadius: \"50%\",\n border: (listener) =>\n `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n borderTopColor: (listener) =>\n themeColor(listener, \"shift-9\", color.get(listener)),\n boxSizing: \"border-box\",\n padding: 0,\n animation: `${animationName} 0.7s linear infinite`,\n [`@keyframes ${animationName}`]: keyframes,\n } as StyleObject,\n };\n}\n\nexport { spinner };\n","import { merge, type PartialElement, toState } from \"@domphy/core\";\nimport { themeColor, themeSpacing } from \"@domphy/theme\";\n\n/**\n * Root of a resizable split layout. Lays out children as a flex row (horizontal) or column\n * (vertical) and provides a `splitter` context (`{ direction, size, min, max }`) consumed by\n * `splitterPanel` and `splitterHandle`. `size` is a reactive state holding the first panel's\n * percentage. No host-tag check; typically applied to a `div`.\n *\n * @param props.direction - Split orientation, `\"horizontal\"` | `\"vertical\"`. Defaults to `\"horizontal\"`.\n * @param props.defaultSize - Initial size (percentage) of the resizable panel. Defaults to `50`.\n * @param props.min - Minimum panel size (percentage). Defaults to `10`.\n * @param props.max - Maximum panel size (percentage). Defaults to `90`.\n * @example { div: [...], $: [splitter({ direction: \"vertical\" })] }\n */\nfunction splitter(\n props: {\n direction?: \"horizontal\" | \"vertical\";\n defaultSize?: number;\n min?: number;\n max?: number;\n } = {},\n): PartialElement {\n const {\n direction = \"horizontal\",\n defaultSize = 50,\n min = 10,\n max = 90,\n } = props;\n return {\n _onSchedule: (node, element) => {\n merge(element, {\n _context: {\n splitter: {\n direction,\n size: toState(defaultSize),\n min,\n max,\n },\n },\n });\n },\n style: {\n display: \"flex\",\n flexDirection: direction === \"horizontal\" ? \"row\" : \"column\",\n overflow: \"hidden\",\n },\n };\n}\n\n/**\n * The resizable panel inside a `splitter`. Reads the `splitter` context and binds its\n * width (horizontal) or height (vertical) to the context `size` state, updating reactively as\n * the handle is dragged. Warns if used outside a `splitter`. Takes no props.\n *\n * @example { div: [...], $: [splitterPanel()] }\n */\nfunction splitterPanel(): PartialElement {\n return {\n _onMount: (node) => {\n const ctx = node.getContext(\"splitter\");\n if (!ctx) {\n console.warn(`\"splitterPanel\" patch must be used inside a \"splitter\"`);\n return;\n }\n const el = node.domElement as HTMLElement;\n const prop = ctx.direction === \"horizontal\" ? \"width\" : \"height\";\n\n el.style[prop] = `${ctx.size.get()}%`;\n el.style.flexShrink = \"0\";\n el.style.overflow = \"auto\";\n\n const release = ctx.size.addListener((size: number) => {\n el.style[prop] = `${size}%`;\n });\n node.addHook(\"Remove\", release);\n },\n };\n}\n\n/**\n * The draggable divider inside a `splitter`. Reads the `splitter` context, shows the\n * appropriate resize cursor, and on mouse drag updates the context `size` state (clamped to\n * `min`/`max`). Warns if used outside a `splitter`. Takes no props.\n *\n * @example { div: null, $: [splitterHandle()] }\n */\nfunction splitterHandle(): PartialElement {\n return {\n _onMount: (node) => {\n const ctx = node.getContext(\"splitter\");\n if (!ctx) {\n console.warn(`\"splitterHandle\" patch must be used inside a \"splitter\"`);\n return;\n }\n const handle = node.domElement as HTMLElement;\n const isHorizontal = ctx.direction === \"horizontal\";\n\n handle.style.cursor = isHorizontal ? \"col-resize\" : \"row-resize\";\n\n const onMousedown = (e: MouseEvent) => {\n e.preventDefault();\n const container = handle.parentElement!;\n\n const onMousemove = (e: MouseEvent) => {\n const rect = container.getBoundingClientRect();\n const raw = isHorizontal\n ? ((e.clientX - rect.left) / rect.width) * 100\n : ((e.clientY - rect.top) / rect.height) * 100;\n ctx.size.set(Math.min(Math.max(raw, ctx.min), ctx.max));\n };\n\n const onMouseup = () => {\n document.removeEventListener(\"mousemove\", onMousemove);\n document.removeEventListener(\"mouseup\", onMouseup);\n };\n\n document.addEventListener(\"mousemove\", onMousemove);\n document.addEventListener(\"mouseup\", onMouseup);\n };\n\n handle.addEventListener(\"mousedown\", onMousedown);\n node.addHook(\"Remove\", () =>\n handle.removeEventListener(\"mousedown\", onMousedown),\n );\n },\n style: {\n flexShrink: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: (listener) => themeColor(listener, \"shift-2\"),\n \"&:hover\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-3\"),\n },\n \"&::after\": {\n content: '\"\"',\n borderRadius: themeSpacing(999),\n backgroundColor: (listener) => themeColor(listener, \"shift-4\"),\n },\n },\n };\n}\n\nexport { splitter, splitterPanel, splitterHandle };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport { type ThemeColor, themeColor, themeSize } from \"@domphy/theme\";\n\n/**\n * Styles strongly emphasized (bold) text: inherited font size, `font-weight: 700`, and a\n * themed foreground color.\n *\n * @hostTag strong\n * @param props.color - Theme color tone for the text. Accepts a value or reactive state.\n * Defaults to `\"neutral\"`.\n * @example { strong: \"important\", $: [strong()] }\n */\nfunction strong(\n props: { color?: ValueOrState<ThemeColor> } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"strong\") {\n console.warn(`\"strong\" primitive patch must use strong tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n fontWeight: 700,\n color: (listener) =>\n themeColor(listener, \"shift-11\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener),\n },\n };\n}\n\nexport { strong };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport { type ThemeColor, themeColor, themeSize } from \"@domphy/theme\";\n\n/**\n * Renders subscript text (shrunk, baseline-lowered) for the host `<sub>` element.\n *\n * @hostTag sub\n * @param props.color - Theme color for the text. Optional, accepts a value or state. Defaults to `\"neutral\"`.\n * @example { sub: \"2\", $: [subscript()] }\n */\nfunction subscript(\n props: { color?: ValueOrState<ThemeColor> } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"sub\") {\n console.warn(`\"subscript\" primitive patch must use sub tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"decrease-1\"),\n verticalAlign: \"sub\",\n lineHeight: 0,\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n },\n };\n}\n\nexport { subscript };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport { type ThemeColor, themeColor, themeSize } from \"@domphy/theme\";\n\n/**\n * Renders superscript text (shrunk, baseline-raised) for the host `<sup>` element.\n *\n * @hostTag sup\n * @param props.color - Theme color for the text. Optional, accepts a value or state. Defaults to `\"neutral\"`.\n * @example { sup: \"2\", $: [superscript()] }\n */\nfunction superscript(\n props: { color?: ValueOrState<ThemeColor> } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"sup\") {\n console.warn(`\"superscript\" primitive patch must use sup tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"decrease-1\"),\n verticalAlign: \"super\",\n lineHeight: 0,\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n },\n };\n}\n\nexport { superscript };\n","import type { ElementNode, PartialElement } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeDensity,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Styles a single tab trigger inside a `tabs` tablist on the host `<button>` element.\n * Wires up the tab's id/aria-controls/aria-selected, click selection, and\n * arrow/Home/End keyboard navigation via the surrounding `tabs` context.\n * Must be used inside a `tabs` patch.\n *\n * @hostTag button\n * @param props.accentColor - Theme color for the active/focus underline. Optional. Defaults to `\"primary\"`.\n * @param props.color - Theme color for the resting/hover underline and text. Optional. Defaults to `\"neutral\"`.\n * @example { button: \"Tab 1\", $: [tab()] }\n */\nfunction tab(\n props: { accentColor?: ThemeColor; color?: ThemeColor } = {},\n): PartialElement {\n const { accentColor = \"primary\", color = \"neutral\" } = props;\n const partial: PartialElement = {\n role: \"tab\",\n _onInsert: (node) => {\n if (node.tagName !== \"button\") {\n console.warn(`\"tab\" patch must use button tag`);\n }\n\n const context = node.getContext(\"tabs\");\n if (!context) {\n console.warn(`\"tab\" patch must be used inside a \"tabs\"`);\n return;\n }\n let children = (node.parent?.children.items ?? []) as ElementNode[];\n children = children.filter(\n (n) => n.type == \"ElementNode\" && n.attributes.get(\"role\") == \"tab\",\n );\n const key =\n node.key !== null && node.key !== undefined\n ? node.key\n : children.findIndex((n) => n == node);\n\n const part: PartialElement = {\n id: \"tab\" + node.parent!.nodeId + key,\n ariaControls: \"tabpanel\" + node.parent!.nodeId + key,\n ariaSelected: (listener) => context.activeKey.get(listener) == key,\n onClick: () => context.activeKey.set(key),\n onKeyDown: (e: Event) => {\n const k = (e as KeyboardEvent).key;\n if (![\"ArrowLeft\", \"ArrowRight\", \"Home\", \"End\"].includes(k)) return;\n e.preventDefault();\n const tabs = (node.parent?.children.items ?? []).filter(\n (n) =>\n n.type === \"ElementNode\" &&\n (n as ElementNode).attributes.get(\"role\") === \"tab\",\n ) as ElementNode[];\n const idx = tabs.findIndex((n) => n === node);\n let next = idx;\n if (k === \"ArrowRight\") next = (idx + 1) % tabs.length;\n else if (k === \"ArrowLeft\")\n next = (idx - 1 + tabs.length) % tabs.length;\n else if (k === \"Home\") next = 0;\n else if (k === \"End\") next = tabs.length - 1;\n const target = tabs[next];\n context.activeKey.set(target.key ?? next);\n (target.domElement as HTMLElement)?.focus();\n },\n };\n node.merge(part);\n },\n style: {\n cursor: \"pointer\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n height: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 4),\n border: \"none\",\n outline: \"none\",\n color: (listener) => themeColor(listener, \"shift-9\"),\n backgroundColor: (listener) => themeColor(listener, \"inherit\"),\n boxShadow: (listener) =>\n `inset 0 -${themeSpacing(0.5)} 0 0 ${themeColor(listener, \"shift-1\", color)}`,\n \"&:hover:not([disabled])\": {\n boxShadow: (listener) =>\n `inset 0 -${themeSpacing(0.5)} 0 0 ${themeColor(listener, \"shift-2\", color)}`,\n },\n \"&[aria-selected=true]:not([disabled])\": {\n boxShadow: (listener) =>\n `inset 0 -${themeSpacing(0.5)} 0 0 ${themeColor(listener, \"shift-6\", accentColor)}`,\n },\n \"&:focus-visible\": {\n boxShadow: (listener) =>\n `inset 0 -${themeSpacing(0.5)} 0 0 ${themeColor(listener, \"shift-6\", accentColor)}`,\n },\n },\n };\n return partial;\n}\n\nexport { tab };\n","import {\n type DomphyElement,\n type PartialElement,\n toState,\n type ValueOrState,\n} from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeDensity,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Styles a data table (header/body/footer cells, caption, row hover, borders)\n * on the host `<table>` element.\n *\n * @hostTag table\n * @param props.color - Theme color applied across cells and text. Optional, accepts a value or state. Defaults to `\"neutral\"`.\n * @example { table: null, $: [table()] }\n */\nfunction table(\n props: { color?: ValueOrState<ThemeColor> } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"table\") {\n console.warn(`\"table\" primitive patch must use table tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n width: \"100%\",\n borderCollapse: \"collapse\",\n \"& caption\": {\n captionSide: \"bottom\",\n },\n \"& th, & thead td\": {\n textAlign: \"left\",\n fontWeight: 500,\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n color: (listener) =>\n themeColor(listener, \"shift-10\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\"),\n },\n \"& td\": {\n textAlign: \"left\",\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n color: (listener) =>\n themeColor(listener, \"shift-9\", color.get(listener)),\n boxShadow: (listener) =>\n `inset 0 1px 0 ${themeColor(listener, \"shift-3\", color.get(listener))}`,\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n },\n \"& tfoot th, & tfoot td\": {\n textAlign: \"left\",\n fontWeight: 500,\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n color: (l) => themeColor(l, \"shift-10\", color.get(l)),\n backgroundColor: (l) => themeColor(l, \"inherit\"),\n boxShadow: (l) =>\n `inset 0 -1px 0 ${themeColor(l, \"shift-4\", color.get(l))}`,\n },\n \"& tr\": {\n backgroundColor: (listener) => themeColor(listener, \"inherit\"),\n },\n\n \"& tbody tr:hover\": {\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-2\") + \"!important\",\n },\n },\n };\n}\n\nexport { table };\n","import { type ElementNode, merge, type PartialElement } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSpacing } from \"@domphy/theme\";\n\n/**\n * Styles a tab panel inside a `tabs` tablist. Wires up the panel's\n * id/aria-labelledby and toggles `hidden` based on the surrounding `tabs`\n * context's active key. Must be used inside a `tabs` patch. Takes no props.\n *\n * @hostTag div\n * @example { div: \"Panel content\", $: [tabPanel()] }\n */\nfunction tabPanel(): PartialElement {\n const partial: PartialElement = {\n role: \"tabpanel\",\n style: {\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 2),\n },\n _onInsert: (node) => {\n const context = node.getContext(\"tabs\");\n if (!context) {\n console.warn(`\"tabPanel\" patch must be used inside a \"tabs\"`);\n return;\n }\n let children = (node.parent?.children.items ?? []) as ElementNode[];\n children = children.filter(\n (n) =>\n n.type == \"ElementNode\" && n.attributes.get(\"role\") == \"tabpanel\",\n );\n const key =\n node.key !== null && node.key !== undefined\n ? node.key\n : children.findIndex((n) => n == node);\n const part: PartialElement = {\n id: \"tabpanel\" + node.parent!.nodeId + key,\n ariaLabelledby: \"tab\" + node.parent!.nodeId + key,\n hidden: (listener) => context.activeKey.get(listener) != key,\n };\n node.merge(part);\n },\n };\n return partial;\n}\n\nexport { tabPanel };\n","import {\n merge,\n type PartialElement,\n toState,\n type ValueOrState,\n} from \"@domphy/core\";\n\n/**\n * Container patch that establishes a `tabs` context (with a shared `activeKey`\n * state) and the `tablist` role for child `tab`/`tabPanel` patches. No host tag\n * check; typically applied to a wrapper element.\n *\n * @param props.activeKey - Initially active tab key. Optional, accepts a value or state of `number | string`. Defaults to `0`.\n * @example { div: null, $: [tabs({ activeKey: 0 })] }\n */\nfunction tabs(\n props: { activeKey?: ValueOrState<number | string> } = {},\n): PartialElement {\n const partial: PartialElement = {\n role: \"tablist\",\n _onSchedule: (node, element) => {\n const partial = {\n _context: {\n tabs: {\n activeKey: toState(props.activeKey || 0),\n },\n },\n };\n merge(element, partial);\n },\n };\n return partial;\n}\n\nexport { tabs };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeDensity,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Styles a multi-line text input (border, focus/hover/invalid/disabled states)\n * on the host `<textarea>` element, with optional auto-resize to content.\n *\n * @hostTag textarea\n * @param props.color - Theme color for the border and text. Optional, accepts a value or state. Defaults to `\"neutral\"`.\n * @param props.accentColor - Theme color for hover/focus outline. Optional, accepts a value or state. Defaults to `\"primary\"`.\n * @param props.autoResize - When true, grows the textarea height to fit its content on input. Optional. Defaults to `false`.\n * @example { textarea: null, $: [textarea({ autoResize: true })] }\n */\nfunction textarea(\n props: {\n color?: ValueOrState<ThemeColor>;\n accentColor?: ValueOrState<ThemeColor>;\n autoResize?: boolean;\n } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n const { autoResize = false } = props;\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"textarea\") {\n console.warn(`\"textarea\" primitive patch must use textarea tag`);\n }\n },\n _onMount: (node) => {\n if (autoResize) {\n const el = node.domElement as HTMLTextAreaElement;\n el.style.overflow = \"hidden\";\n const resize = () => {\n el.style.height = \"auto\";\n el.style.height = el.scrollHeight + \"px\";\n };\n el.addEventListener(\"input\", resize);\n resize();\n }\n },\n style: {\n fontFamily: \"inherit\",\n lineHeight: \"inherit\",\n resize: \"vertical\",\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 2),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1.5),\n border: \"none\",\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1.5),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n outlineOffset: \"-1px\",\n outline: (listener) =>\n `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n backgroundColor: (listener) =>\n themeColor(listener, \"inherit\", color.get(listener)),\n \"&::placeholder\": {\n color: (listener) => themeColor(listener, \"shift-7\"),\n },\n \"&:hover:not([disabled]):not([aria-busy=true])\": {\n outline: (listener) =>\n `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", accentColor.get(listener))}`,\n },\n \"&:focus-visible\": {\n outline: (listener) =>\n `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&:invalid\": {\n outline: (listener) =>\n `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", \"error\")}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n outline: (listener) =>\n `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-2\", \"neutral\"),\n },\n },\n };\n}\n\nexport { textarea };\n","import type { DomphyElement, ElementNode, PartialElement } from \"@domphy/core\";\nimport { toState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeDensity,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\ntype ToastPosition =\n | \"top-left\"\n | \"top-center\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-center\"\n | \"bottom-right\";\n\n/**\n * Renders a transient notification surface as a fixed-position overlay (portaled\n * into a corner stack), animating in on mount and out before removal. No host\n * tag check; typically applied to a `<div>`.\n *\n * @param props.position - Corner of the screen for the toast stack. Optional, one of `\"top-left\" | \"top-center\" | \"top-right\" | \"bottom-left\" | \"bottom-center\" | \"bottom-right\"`. Defaults to `\"top-center\"`.\n * @param props.color - Theme color for the toast surface. Optional. Defaults to `\"neutral\"`.\n * @example { div: \"Saved!\", $: [toast({ position: \"top-right\" })] }\n */\nfunction toast(\n props: { position?: ToastPosition; color?: ThemeColor } = {},\n): PartialElement {\n const { position = \"top-center\", color = \"neutral\" } = props;\n const state = toState(false);\n\n const isTop = position.startsWith(\"top\");\n const isCenter = position.endsWith(\"center\");\n const isRight = position.endsWith(\"right\");\n\n const overlayEle: DomphyElement<\"div\"> = {\n div: [],\n id: `domphy-toast-${position}`,\n style: {\n position: \"fixed\",\n display: \"flex\",\n flexDirection: isTop ? \"column\" : \"column-reverse\",\n alignItems: isCenter ? \"center\" : isRight ? \"end\" : \"start\",\n inset: 0,\n gap: themeSpacing(4),\n zIndex: 30,\n padding: themeSpacing(6),\n pointerEvents: \"none\",\n },\n };\n\n return {\n _portal: (rootNode) => {\n let overlay = rootNode.domElement!.querySelector(\n `#domphy-toast-${position}`,\n );\n if (!overlay) {\n const overlayNode = rootNode.children!.insert(\n overlayEle,\n ) as ElementNode;\n overlay = overlayNode.domElement!;\n }\n return overlay;\n },\n role: \"status\",\n ariaAtomic: \"true\",\n // Toast is rendered as an overlay surface, so it uses the inverted branch.\n dataTone: \"shift-17\",\n style: {\n minWidth: themeSpacing(32),\n pointerEvents: \"auto\",\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 4),\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 2),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\n boxShadow: (listener) =>\n `0 ${themeSpacing(2)} ${themeSpacing(9)} ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n opacity: (listener) => Number(state.get(listener)),\n transform: (listener) =>\n state.get(listener)\n ? \"translateY(0)\"\n : isTop\n ? \"translateY(-100%)\"\n : \"translateY(100%)\",\n transition: \"opacity 300ms ease, transform 300ms ease\",\n },\n _onMount: () => requestAnimationFrame(() => state.set(true)),\n _onBeforeRemove: (node, done) => {\n const onEnd = (e: Event) => {\n if ((e as TransitionEvent).propertyName === \"transform\") {\n node.domElement!.removeEventListener(\"transitionend\", onEnd);\n done();\n }\n };\n node.domElement!.addEventListener(\"transitionend\", onEnd);\n state.set(false);\n },\n };\n}\n\nexport { toast };\n","import {\n type ElementNode,\n type PartialElement,\n toState,\n type ValueOrState,\n} from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Styles a single toggle button inside a `toggleGroup` on the host `<button>`\n * element. Wires up `aria-pressed` and click-to-toggle against the surrounding\n * `toggleGroup` context (single- or multi-select). Must be used inside a\n * `toggleGroup` patch.\n *\n * @hostTag button\n * @param props.color - Theme color for the resting/hover background and text. Optional, accepts a value or state. Defaults to `\"neutral\"`.\n * @param props.accentColor - Theme color for the pressed/focus state. Optional, accepts a value or state. Defaults to `\"primary\"`.\n * @example { button: \"Bold\", $: [toggle()] }\n */\nfunction toggle(\n props: {\n color?: ValueOrState<ThemeColor>;\n accentColor?: ValueOrState<ThemeColor>;\n } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n return {\n role: \"button\",\n _onInsert: (node) => {\n if (node.tagName !== \"button\") {\n console.warn(`\"toggle\" patch must use button tag`);\n }\n const ctx = node.getContext(\"toggleGroup\");\n if (!ctx) {\n console.warn(`\"toggle\" patch must be used inside a \"toggleGroup\"`);\n return;\n }\n const children = (node.parent?.children.items ?? []) as ElementNode[];\n\n const items = children.filter(\n (n) =>\n n.type === \"ElementNode\" && n.attributes.get(\"role\") === \"button\",\n );\n // node.key is null (not undefined) when absent — check both so an\n // explicit _key of 0 or \"\" keeps its real key instead of \"null\"/index.\n const key =\n node.key !== null && node.key !== undefined\n ? String(node.key)\n : String(items.indexOf(node));\n\n node.attributes.set(\"ariaPressed\", (listener) => {\n const val = ctx.value.get(listener);\n return Array.isArray(val) ? val.includes(key) : val === key;\n });\n\n node.addEvent(\"click\", () => {\n const val = ctx.value.get();\n if (ctx.multiple) {\n const arr = Array.isArray(val) ? [...val] : [];\n ctx.value.set(\n arr.includes(key) ? arr.filter((v) => v !== key) : [...arr, key],\n );\n } else {\n ctx.value.set(val === key ? \"\" : key);\n }\n });\n },\n style: {\n cursor: \"pointer\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n height: themeSpacing(6),\n paddingBlock: themeSpacing(1),\n paddingInline: themeSpacing(2),\n border: \"none\",\n borderRadius: themeSpacing(1),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) =>\n themeColor(listener, \"inherit\", color.get(listener)),\n transition: \"background-color 300ms ease\",\n \"&:hover:not([disabled])\": {\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-2\", color.get(listener)),\n },\n \"&[aria-pressed=true]\": {\n backgroundColor: (listener) =>\n themeColor(listener, \"shift-3\", accentColor.get(listener)),\n color: (listener) =>\n themeColor(listener, \"shift-12\", accentColor.get(listener)),\n },\n \"&:focus-visible\": {\n outline: (listener) =>\n `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n outlineOffset: `-${themeSpacing(0.5)}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n },\n },\n };\n}\n\nexport { toggle };\n","import {\n type PartialElement,\n toState,\n type ValueOrState,\n} from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Container patch that establishes a `toggleGroup` context (shared selection\n * `value` + `multiple` flag) and `group` role for child `toggle` patches, with\n * a bordered segmented-control style. No host tag check; typically applied to a\n * wrapper element.\n *\n * @param props.value - Selected toggle key(s). Optional, accepts a value or state of `string | string[]`. Defaults to `[]` when `multiple`, otherwise `\"\"`.\n * @param props.multiple - When true, allows multiple toggles selected at once. Optional. Defaults to `false`.\n * @param props.color - Theme color for the group background/border. Optional. Defaults to `\"neutral\"`.\n * @example { div: null, $: [toggleGroup({ multiple: true })] }\n */\nfunction toggleGroup(\n props: {\n value?: ValueOrState<string | string[]>;\n multiple?: boolean;\n color?: ThemeColor;\n } = {},\n): PartialElement {\n const { multiple = false, color = \"neutral\" } = props;\n return {\n role: \"group\",\n _context: {\n toggleGroup: {\n value: toState(props.value ?? (multiple ? [] : \"\")),\n multiple,\n },\n },\n style: {\n display: \"flex\",\n paddingBlock: themeSpacing(1),\n paddingInline: themeSpacing(1),\n gap: themeSpacing(1),\n borderRadius: themeSpacing(2),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\n outline: (listener) =>\n `1px solid ${themeColor(listener, \"shift-3\", color)}`,\n outlineOffset: \"-1px\",\n },\n };\n}\n\nexport { toggleGroup };\n","import {\n type DomphyElement,\n merge,\n type PartialElement,\n toState,\n type ValueOrState,\n} from \"@domphy/core\";\nimport type { Placement } from \"@domphy/floating\";\nimport {\n themeColor,\n themeDensity,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\nimport { creatFloating } from \"../utils/floating.js\";\nimport { popoverArrow } from \"./popoverArrow.js\";\n\n/**\n * Attaches a floating tooltip to the host element, shown on hover/focus and\n * hidden on leave/blur/Escape. Returns the anchor (trigger) partial; the tooltip\n * surface is positioned via the floating utility and linked with\n * `aria-describedby`. No host tag check; applied to the trigger element.\n *\n * @param props.open - Controlled open state. Optional, accepts a value or state. Defaults to `false`.\n * @param props.placement - Floating placement relative to the trigger. Optional, accepts a value or state (`Placement`). Defaults to `\"top\"`.\n * @param props.content - Tooltip text content. Optional, accepts a value or state (string only). Defaults to `\"Tooltip Content\"`.\n * @example { button: \"Hover me\", $: [tooltip({ content: \"Help text\" })] }\n */\nfunction tooltip(\n props: {\n open?: ValueOrState<boolean>;\n placement?: ValueOrState<Placement>;\n content?: ValueOrState<string>;\n } = {},\n): PartialElement {\n const {\n open = false,\n placement = \"top\",\n content = \"Tooltip Content\",\n } = props;\n\n const placeState = toState(placement);\n const contentState = toState(content);\n\n let tooltipId: string | null = null;\n\n const contentElement: DomphyElement<\"span\"> = {\n span: (listener) => contentState.get(listener),\n };\n\n const { show, hide, anchorPartial } = creatFloating({\n open,\n placement: placeState,\n content: contentElement,\n });\n\n const tooltipPartial: PartialElement = {\n role: \"tooltip\",\n dataSize: \"decrease-1\",\n dataTone: \"shift-17\",\n _onInsert: (node) => {\n const id = node.attributes.get(\"id\");\n tooltipId = id || node.nodeId;\n !id && node.attributes.set(\"id\", tooltipId);\n },\n style: {\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\n color: (listener) => themeColor(listener, \"shift-9\"),\n backgroundColor: (listener) => themeColor(listener),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n },\n $: [popoverArrow({ placement: placeState, bordered: false })],\n };\n contentElement.$ ||= [];\n contentElement.$.push(tooltipPartial);\n\n const triggerPartial: PartialElement = {\n onMouseEnter: () => show(),\n onMouseLeave: () => hide(),\n onFocus: () => show(),\n onBlur: () => hide(),\n onKeyDown: (e) => (e as KeyboardEvent).key === \"Escape\" && hide(),\n _onMount: (node) =>\n tooltipId && node.attributes.set(\"ariaDescribedby\", tooltipId),\n };\n\n merge(anchorPartial, triggerPartial);\n\n return anchorPartial;\n}\n\nexport { tooltip };\n","import { ElementNode, type PartialElement } from \"@domphy/core\";\n\ntype RectMap = Map<string, DOMRect>;\n\nfunction getItemId(node: ElementNode, index: number): string {\n if (node.key !== undefined && node.key !== null) {\n return String(node.key);\n }\n return `index-${index}`;\n}\n\n/**\n * Animates child reordering using the FLIP technique: records each child's\n * position before an update and smoothly transitions it from its old to new\n * position afterward. No host tag check; applied to the list container.\n *\n * @param props.duration - Transition duration in milliseconds. Optional. Defaults to `300`.\n * @param props.delay - Transition delay in milliseconds. Optional. Defaults to `0`.\n * @example { ul: null, $: [transitionGroup({ duration: 300 })] }\n */\nfunction transitionGroup(\n props: { duration?: number; delay?: number } = {},\n): PartialElement {\n const { duration = 300, delay = 0 } = props;\n\n let previousRects: RectMap = new Map();\n\n return {\n _onBeforeUpdate: (node) => {\n previousRects = new Map();\n node.children.items.forEach((item, index) => {\n if (!(item instanceof ElementNode)) return;\n const dom = item.domElement as HTMLElement | undefined;\n if (!dom) return;\n previousRects.set(getItemId(item, index), dom.getBoundingClientRect());\n });\n },\n _onUpdate: (node) => {\n node.children.items.forEach((item, index) => {\n if (!(item instanceof ElementNode)) return;\n const dom = item.domElement as HTMLElement | undefined;\n if (!dom) return;\n\n const key = getItemId(item, index);\n const prev = previousRects.get(key);\n if (!prev) return;\n\n const next = dom.getBoundingClientRect();\n const deltaX = prev.left - next.left;\n const deltaY = prev.top - next.top;\n if (Math.abs(deltaX) < 0.5 && Math.abs(deltaY) < 0.5) return;\n\n const previousTransition = dom.style.transition;\n const previousTransform = dom.style.transform;\n\n dom.style.transition = \"none\";\n dom.style.transform = `translate(${deltaX}px, ${deltaY}px)`;\n dom.getBoundingClientRect();\n\n requestAnimationFrame(() => {\n dom.style.transition = `transform ${duration}ms ease ${delay}ms`;\n dom.style.transform = \"translate(0px, 0px)\";\n });\n\n const cleanup = () => {\n dom.style.transition = previousTransition;\n dom.style.transform = previousTransform;\n dom.removeEventListener(\"transitionend\", onEnd);\n };\n\n const onEnd = (event: Event) => {\n const transitionEvent = event as TransitionEvent;\n if (transitionEvent.propertyName === \"transform\") {\n cleanup();\n }\n };\n\n dom.addEventListener(\"transitionend\", onEnd);\n setTimeout(cleanup, duration + delay + 34);\n });\n previousRects.clear();\n },\n };\n}\n\nexport { transitionGroup };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport {\n type ThemeColor,\n themeColor,\n themeSize,\n themeSpacing,\n} from \"@domphy/theme\";\n\n/**\n * Styles a bulleted list (disc markers, reset margins, themed text) on the host\n * `<ul>` element.\n *\n * @hostTag ul\n * @param props.color - Theme color for the list text. Optional, accepts a value or state. Defaults to `\"neutral\"`.\n * @example { ul: null, $: [unorderedList()] }\n */\nfunction unorderedList(\n props: { color?: ValueOrState<ThemeColor> } = {},\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"ul\") {\n console.warn(`\"unorderedList\" primitive patch must use ul tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n backgroundColor: (listener) => themeColor(listener),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n marginTop: 0,\n marginBottom: 0,\n paddingLeft: themeSpacing(3),\n listStyleType: \"disc\",\n listStylePosition: \"outside\",\n },\n };\n}\n\nexport { unorderedList };\n"],"mappings":"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","names":["toState","themeColor","themeSize","themeSpacing","abbreviation","props","_a","_b","color","accentColor","node","listener","toState","themeColor","themeDensity","themeSize","themeSpacing","alert","props","_a","color","listener","toState","themeColor","themeSize","themeSpacing","avatar","props","_a","color","listener","toState","themeColor","themeSize","themeSpacing","badge","props","_a","label","state","color","l","toState","themeColor","themeDensity","themeSize","themeSpacing","blockquote","props","_a","color","node","listener","toState","themeColor","themeSize","themeSpacing","breadcrumb","props","_a","separator","color","node","listener","toState","themeColor","themeSize","themeSpacing","breadcrumbEllipsis","props","_a","color","node","listener","toState","themeColor","themeDensity","themeSize","themeSpacing","button","props","_a","color","node","listener","toState","themeColor","themeSize","themeSpacing","buttonSwitch","props","_a","_b","checked","check","color","accentColor","node","listener","toState","themeColor","themeDensity","themeSpacing","card","props","_a","color","listener","toState","themeColor","themeSize","themeSpacing","code","props","_a","color","node","listener","merge","toState","themeColor","themeDensity","themeSize","themeSpacing","merge","toState","autoUpdate","computePosition","flip","offset","shift","creatFloating","props","open","placement","timer","cleanup","reference","floating","floatingNode","rootNode","mounted","openState","ensureMounted","instantShow","x","y","resolved","instantHide","show","hide","floatingPartial","listener","node","rNode","overlay","overlayEle","e","handleOutside","event","target","toState","themeColor","themeSize","themeSpacing","xSvg","tag","props","_a","removable","color","node","removeBtn","e","listener","combobox","props","options","placement","color","open","multiple","state","toState","openState","show","hide","anchorPartial","creatFloating","popoverPartial","merge","inputStyle","themeSpacing","listener","themeSize","themeColor","inputElement","wrap","val","vals","items","opt","tag","_node","cur","filter","v","partial","node","themeDensity","merge","toState","themeColor","themeDensity","themeSize","themeSpacing","command","node","element","commandSearch","props","color","accentColor","ctx","input","onInput","listener","commandItem","_a","_b","el","text","release","q","merge","toState","themeColor","themeSize","themeSpacing","atMidnight","date","addDays","count","addMonths","sameDay","a","b","isoOf","startOfWeek","weekStart","localeWeekStart","locale","_a","_b","localeObject","info","datePicker","props","_c","_d","mode","time","min","max","disabledDate","format","onChange","accentColor","toState","placeState","selection","value","primaryDate","current","base","viewYear","viewMonth","focused","hovered","hour","minute","contentElement","dateFormatter","__spreadValues","monthFormatter","weekdayFormatter","fullDateFormatter","formatOne","formatDisplay","start","end","weekdayNames","_unused","index","isDisabled","withTime","result","selectDate","instantHideRef","reapplyTime","inSelectedRange","listener","tail","low","high","day","isSelectedEnd","goToDate","shiftMonth","delta","next","shiftYear","focusActiveCell","calendar","buildCalendar","show","hide","anchorPartial","creatFloating","triggerPartial","openAndFocus","event","key","isSelectedPrimary","merge","navButton","label","ariaLabel","onClick","navButtonStyle","header","themeSize","themeSpacing","weekdayHeader","name","themeColor","gridRowStyle","grid","buildWeeks","onGridKey","children","buildTimeRow","buildFooter","node","first","month","weeks","week","cells","buildDayCell","disabled","selected","within","outside","isFocused","isToday","l","numberSelect","state","timeSelectStyle","action","today","keyboard","toState","themeColor","themeSize","themeSpacing","descriptionList","props","_a","color","node","listener","toState","themeColor","themeDensity","themeSize","themeSpacing","details","props","_a","_b","duration","color","accentColor","node","listener","toState","themeColor","themeDensity","themeSize","themeSpacing","dialog","props","color","open","state","node","e","r","_e","dlg","update","val","focusable","release","listener","toState","themeColor","themeSize","themeSpacing","divider","props","_a","color","node","listener","toState","themeColor","themeDensity","themeSize","themeSpacing","translateOut","marginMap","isVertical","p","drawer","props","color","open","placement","size","state","defaultSize","drawerSize","node","e","_e","dlg","update","val","release","listener","toState","themeColor","themeSize","emphasis","props","_a","color","node","listener","toState","themeColor","themeSize","themeSpacing","figure","props","_a","color","node","listener","toState","themeColor","themeDensity","themeSize","themeSpacing","formGroup","props","_a","layout","color","isVertical","node","listener","toState","themeColor","themeSize","themeSpacing","Headinghift","heading","props","_a","color","node","listener","offset","toState","themeColor","themeSpacing","horizontalRule","props","_a","color","node","listener","toState","themeColor","themeSize","themeSpacing","icon","props","_a","color","node","listener","toState","themeColor","themeSpacing","image","props","_a","color","node","listener","toState","themeColor","themeSize","themeSpacing","inputCheckbox","props","_a","_b","color","accentColor","node","listener","toState","themeColor","themeDensity","themeSize","themeSpacing","inputColor","props","_a","_b","color","accentColor","node","element","listener","toState","themeColor","themeDensity","themeSize","themeSpacing","inputDateTime","props","_a","_b","mode","color","accentColor","node","element","listener","toState","themeColor","themeDensity","themeSize","themeSpacing","inputFile","props","_a","_b","color","accentColor","node","element","listener","toState","themeColor","themeDensity","themeSize","themeSpacing","inputNumber","props","_a","_b","color","accentColor","node","element","listener","themeSpacing","inputOTP","node","container","getInputs","onInput","e","inputs","target","idx","onKeydown","onPaste","_a","_b","_c","text","startIdx","char","i","lastFilled","toState","themeColor","themeSize","themeSpacing","inputRadio","props","_a","_b","color","accentColor","node","listener","toState","themeColor","themeSpacing","inputRange","props","_a","_b","color","accentColor","node","listener","toState","themeColor","themeDensity","themeSize","themeSpacing","inputSearch","props","_a","_b","color","accentColor","node","element","listener","toState","themeColor","themeSize","themeSpacing","inputSwitch","props","_a","accentColor","node","listener","toState","themeColor","themeDensity","themeSize","themeSpacing","inputText","props","_a","_b","color","accentColor","node","element","listener","toState","themeColor","themeSize","themeSpacing","keyboard","props","_a","color","node","listener","toState","themeColor","themeSize","themeSpacing","label","props","_a","_b","color","accentColor","node","listener","toState","themeColor","themeSize","themeSpacing","link","props","_a","_b","color","accentColor","node","listener","toState","themeColor","themeSize","themeSpacing","mark","props","_a","accentColor","node","listener","merge","toState","themeColor","themeDensity","themeSize","themeSpacing","menu","props","color","selectable","node","element","_a","partial","listener","themeColor","themeDensity","themeSize","themeSpacing","menuItem","props","accentColor","color","node","_a","_b","context","children","n","key","listener","e","_c","_d","k","items","idx","next","isState","value","toStyles","frame","out","transforms","key","motion","props","_a","_b","_c","_d","initial","animate","exit","transition","options","node","el","target","release","next","done","toState","themeColor","themeSize","themeSpacing","orderedList","props","_a","color","node","listener","toState","themeColor","themeDensity","themeSize","themeSpacing","getPages","current","total","_","pages","start","end","i","pagination","props","_a","color","accentColor","state","toState","btnBase","listener","themeSpacing","themeDensity","themeSize","themeColor","activeStyle","__spreadProps","__spreadValues","node","content","page","items","isActive","toState","themeColor","themeSize","paragraph","props","_a","color","node","listener","merge","toState","popover","props","_a","open","placement","openOn","popoverId","openState","toState","placeState","show","hide","anchorPartial","creatFloating","popoverPartial","node","id","merge","listener","e","related","root","floatingEl","toState","themeColor","themeSize","themeSpacing","popoverArrow","props","placement","color","sideOffset","bordered","place","flipMap","getFlipped","listener","_a","start","pos","end","x","y","toState","themeColor","themeDensity","themeSize","themeSpacing","preformated","props","_a","color","node","listener","toState","themeColor","themeSpacing","progress","props","_a","_b","color","accentColor","node","listener","themeColor","themeColorToken","themeDensity","themeSize","themeSpacing","select","props","color","accentColor","node","listener","l","svg","merge","toState","themeColor","themeDensity","themeSize","themeSpacing","selectBox","props","options","placement","color","open","multiple","state","toState","openState","show","hide","anchorPartial","creatFloating","popoverPartial","merge","wrap","listener","val","vals","opt","tag","_node","cur","filter","v","themeSpacing","partial","node","themeDensity","themeColor","themeSize","themeColor","themeDensity","themeSize","themeSpacing","selectItem","props","accentColor","color","value","node","select","state","listener","val","v","toState","themeColor","themeDensity","themeSize","themeSpacing","selectList","props","_a","color","multiple","state","inputs","listener","val","v","node","hashString","toState","themeColor","themeSize","themeSpacing","skeleton","props","_a","color","keyframes","animationName","listener","toState","themeColor","themeSize","small","props","_a","color","node","listener","hashString","toState","themeColor","themeSize","themeSpacing","keyframes","animationName","spinner","props","_a","color","node","listener","merge","toState","themeColor","themeSpacing","splitter","props","direction","defaultSize","min","max","node","element","splitterPanel","ctx","el","prop","release","size","splitterHandle","handle","isHorizontal","onMousedown","e","container","onMousemove","rect","raw","onMouseup","listener","toState","themeColor","themeSize","strong","props","_a","color","node","listener","toState","themeColor","themeSize","subscript","props","_a","color","node","listener","toState","themeColor","themeSize","superscript","props","_a","color","node","listener","themeColor","themeDensity","themeSize","themeSpacing","tab","props","accentColor","color","node","_a","_b","context","children","n","key","part","listener","e","_c","_d","k","tabs","idx","next","target","toState","themeColor","themeDensity","themeSize","themeSpacing","table","props","_a","color","node","listener","l","themeDensity","themeSpacing","tabPanel","listener","node","_a","_b","context","children","n","key","part","merge","toState","tabs","props","node","element","partial","toState","themeColor","themeDensity","themeSize","themeSpacing","textarea","props","_a","_b","color","accentColor","autoResize","node","el","resize","listener","toState","themeColor","themeDensity","themeSize","themeSpacing","toast","props","position","color","state","isTop","isCenter","isRight","overlayEle","rootNode","overlay","listener","node","done","onEnd","e","toState","themeColor","themeSize","themeSpacing","toggle","props","_a","_b","color","accentColor","node","ctx","items","n","key","listener","val","arr","v","toState","themeColor","themeSize","themeSpacing","toggleGroup","props","_a","multiple","color","listener","merge","toState","themeColor","themeDensity","themeSize","themeSpacing","tooltip","props","open","placement","content","placeState","toState","contentState","tooltipId","contentElement","listener","show","hide","anchorPartial","creatFloating","tooltipPartial","node","id","themeSpacing","themeDensity","themeColor","themeSize","popoverArrow","merge","e","ElementNode","getItemId","node","index","transitionGroup","props","duration","delay","previousRects","item","dom","key","prev","next","deltaX","deltaY","previousTransition","previousTransform","cleanup","onEnd","event","toState","themeColor","themeSize","themeSpacing","unorderedList","props","_a","color","node","listener"]}