@purestack/ts-components 1.1.12 → 1.1.14

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.
@@ -1 +1 @@
1
- {"version":3,"file":"ts-components.mjs","names":["VALUE_LABEL_OFFSET","CATEGORY_LABEL_Y","resolveDomain","resolveAriaLabel","resolveItems","DEFAULT_BUTTON_VARIANT","resolveButtonStateClasses","resolveShowStartIcon","resolveShowEndIcon","logoTemplate","hasFileTransfer","resolveAriaLabel","resolveAlignClass","resolveJustifyClass","resolveAutoCompleteOption","normalizeSearchText","wrapIndex","resolveKeywords","resolvePositiveNumber","findOffsetIndex","resolvePositiveNumber"],"sources":["../src/standard/alertBox/alertBox.ts","../src/standard/componentVariant.ts","../src/standard/badge/badge.ts","../src/standard/chart/chartDefaults.ts","../src/standard/chart/chartUtils.ts","../src/standard/chart/cartesianChart.ts","../src/standard/barChart/barChart.ts","../src/standard/btn/btn.ts","../src/standard/btnGroup/btnGroup.ts","../src/standard/classicLogo/classicLogo.ts","../src/standard/autoId.ts","../src/standard/composer/emailHtmlPolicy.ts","../src/standard/composer/composer.ts","../src/standard/consent/consent.ts","../src/standard/contactForm/contactForm.ts","../src/standard/doughnutChart/doughnutChart.ts","../src/standard/dropFiles/dropFiles.ts","../src/standard/expandablePanel/expandablePanel.ts","../src/standard/flex/flex.ts","../src/standard/footer/footer.ts","../src/standard/form/autoCompleteInput.ts","../src/standard/form/formCheck.ts","../src/standard/form/form.ts","../src/standard/form/formInputField.ts","../src/standard/form/formSelectField.ts","../src/standard/form/multiAutoCompleteInput.ts","../src/standard/grid/grid.ts","../src/standard/icon/icon.ts","../src/standard/landing/codeShowcase.ts","../src/standard/landing/comparisonColumn.ts","../src/standard/landing/comparisonFeature.ts","../src/standard/landing/comparisonTable.ts","../src/standard/landing/ctaSection.ts","../src/standard/landing/featureCard.ts","../src/standard/landing/landingBand.ts","../src/standard/landing/landingSection.ts","../src/standard/landing/metricItem.ts","../src/standard/landing/metricStrip.ts","../src/standard/landing/landing.ts","../src/standard/lineChart/lineChart.ts","../src/standard/logo/logo.ts","../src/standard/modal/modalStore.ts","../src/standard/modal/modal.ts","../src/standard/navMenu/navMenu.ts","../src/standard/pageLinks/pageLinks.ts","../src/standard/pageScript/pageScript.ts","../src/standard/pageToc/pageToc.ts","../src/standard/panel/panel.ts","../src/standard/pricing/pricing.ts","../src/standard/searchBox/searchBox.ts","../src/standard/sectionHeader/sectionHeader.ts","../src/standard/signIn/signIn.ts","../src/standard/tabs/tabs.ts","../src/standard/themeToggle/themeToggle.ts","../src/standard/toast/toastHost.ts","../src/standard/topBar/topBar.ts","../src/standard/virtualList/variableVirtualTable.ts","../src/standard/virtualList/virtualList.ts","../src/standard/virtualList/virtualTable.ts","../src/defineComponents.ts","../src/standard/badge/badgeStyle.ts","../src/standard/barChart/barChartStyle.ts","../src/standard/btn/btnStyle.ts","../src/standard/btnGroup/btnGroupStyle.ts","../src/standard/classicLogo/classicLogoStyle.ts","../src/standard/composer/composerCanvasSharedStyle.ts","../src/standard/composer/composerCanvasInitialStyle.ts","../src/standard/composer/composerStyle.ts","../src/standard/consent/consentStyle.ts","../src/standard/contactForm/contactFormStyle.ts","../src/standard/doughnutChart/doughnutChartStyle.ts","../src/standard/dropFiles/dropFilesStyle.ts","../src/standard/expandablePanel/expandablePanelStyle.ts","../src/standard/flex/flexStyle.ts","../src/standard/footer/footerStyle.ts","../src/standard/form/formStyle.ts","../src/standard/grid/gridStyle.ts","../src/standard/icon/iconStyle.ts","../src/standard/lineChart/lineChartStyle.ts","../src/standard/logo/logoStyle.ts","../src/standard/modal/modalStyle.ts","../src/standard/topBar/topBarStyle.ts","../src/standard/navMenu/navMenuStyle.ts","../src/standard/pageToc/pageTocStyle.ts","../src/standard/panel/panelStyle.ts","../src/standard/searchBox/searchBoxStyle.ts","../src/standard/signIn/signInStyle.ts","../src/standard/tabs/tabsStyle.ts","../src/standard/themeToggle/themeToggleStyle.ts","../src/standard/virtualList/virtualListStyle.ts","../src/standard/virtualList/virtualTableStyle.ts","../src/registerStyles.ts","../src/standard/toast/toastStore.ts"],"sourcesContent":["import type { SemanticTone } from '@purestack/ts-style'\nimport { defineComponent, html, type RefOrValue } from 'regor'\nimport type {\n ComponentVariant,\n ComponentVariantMode,\n} from '../componentVariant'\n\nexport interface AlertBox {\n title?: RefOrValue<string>\n eyebrow?: RefOrValue<string>\n badge?: RefOrValue<string>\n meta?: RefOrValue<string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n icon?: RefOrValue<string>\n}\n\nconst alertBoxTemplate = html`<Panel\n :tone=\"tone || 'info'\"\n :variant=\"variant || 'surface'\"\n :variantMode=\"variantMode || 'stateless'\"\n>\n <Flex align=\"start\">\n <IconFrame\n r-if=\"icon\"\n :name=\"icon\"\n :tone=\"tone || 'info'\"\n :variant=\"variant\"/>\n <Flex direction=\"column\" align=\"start\">\n <Flex r-if=\"title || eyebrow || badge\" align=\"center\" wrap=\"true\">\n <span r-if=\"eyebrow\">{{ eyebrow }}</span>\n <strong r-if=\"title\">{{ title }}</strong>\n <Badge :tone=\"tone || 'info'\" r-if=\"badge\">{{ badge }}</Badge>\n </Flex>\n <div><slot></slot></div>\n <Flex align=\"center\" wrap=\"true\">\n <slot name=\"actions\"></slot>\n </Flex>\n <small r-if=\"meta\">{{ meta }}</small>\n </Flex>\n </Flex>\n</Panel>`\n\nfunction defineAlertBoxComponent() {\n return defineComponent<AlertBox>(alertBoxTemplate, {\n props: [\n 'title',\n 'eyebrow',\n 'badge',\n 'meta',\n 'tone',\n 'variant',\n 'variantMode',\n 'icon',\n ],\n })\n}\n\nexport function defineAlertComponents() {\n return {\n alertBox: defineAlertBoxComponent(),\n }\n}\n","import { getSemanticToneClass, type SemanticTone } from '@purestack/ts-style'\nimport { type RefOrValue, unref } from 'regor'\n\nexport type ComponentVariant =\n | 'none'\n | 'solid'\n | 'surface'\n | 'surfaceAlt'\n | 'spotlight'\n | 'glass'\n | 'flat'\n | 'flatAlt'\n | 'flatSolid'\n | 'outlineFill'\n | 'outline'\n | 'subtle'\n | 'subtleBtn'\n | 'link'\n | 'sheen'\n | 'underline'\n | 'rail'\n | 'bracket'\n\nexport type ComponentVariantMode = 'stateful' | 'stateless'\n\nexport const DEFAULT_COMPONENT_VARIANT: ComponentVariant = 'solid'\nexport const DEFAULT_COMPONENT_VARIANT_MODE: ComponentVariantMode = 'stateful'\n\nexport interface ComponentClassProps {\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n}\n\nexport interface ResolveComponentClassesOptions {\n defaultVariant?: ComponentVariant\n defaultVariantMode?: ComponentVariantMode\n classes?: Array<RefOrValue<string | undefined | false>>\n}\n\nconst STATELESS_COMPONENT_VARIANT_CLASSES: Record<ComponentVariant, string> = {\n none: '',\n solid: 'b-1 rounded-md tone-fill-button tone-border-button tone-text-button',\n surface:\n 'b-1 rounded-md tone-fill-surface tone-border-surface tone-text-surface',\n surfaceAlt:\n 'b-1 rounded-md tone-fill-surface-alt tone-border-surface-alt tone-text-surface-alt',\n spotlight:\n 'b-1 rounded-md tone-fill-spotlight tone-border-surface-alt tone-text-surface-alt',\n glass:\n 'b-1 rounded-md tone-fill-glass tone-border-surface-alt tone-text-surface-alt',\n flat: 'b-1 rounded-md tone-fill-flat tone-border-surface tone-text-surface',\n flatAlt:\n 'b-1 rounded-md tone-fill-flat-alt tone-border-surface-alt tone-text-surface-alt',\n flatSolid:\n 'b-1 rounded-md tone-fill-flat-solid tone-border-button tone-text-button',\n outlineFill: 'b-2 rounded-md tone-border-button tone-text',\n outline: 'b-2 rounded-md tone-text',\n subtle: 'b-0 rounded-md tone-text',\n subtleBtn: 'b-0 rounded-md tone-text',\n link: 'tone-text',\n sheen: 'tone-text-bg-button',\n underline: 'tone-text',\n rail: 'bl-1 inset-size-4 pl-4 pr-3 tone-border-button tone-text',\n bracket: 'tone-text',\n}\n\nconst STATEFUL_COMPONENT_VARIANT_CLASSES = {\n spotlight:\n 'tone-fill-spotlight-hover tone-fill-spotlight-active tone-border-surface-alt-hover tone-border-surface-alt-active tone-text-surface-alt-hover tone-text-surface-alt-active',\n glass:\n 'tone-fill-glass-hover tone-fill-glass-active tone-border-surface-alt-hover tone-border-surface-alt-active tone-text-surface-alt-hover tone-text-surface-alt-active',\n flat: 'tone-fill-flat-hover tone-fill-flat-active tone-border-surface-hover tone-border-surface-active tone-text-surface-hover tone-text-surface-active',\n flatAlt:\n 'tone-fill-flat-alt-hover tone-fill-flat-alt-active tone-border-surface-alt-hover tone-border-surface-alt-active tone-text-surface-alt-hover tone-text-surface-alt-active',\n flatSolid:\n 'tone-fill-flat-solid-hover tone-fill-flat-solid-active tone-border-button-hover tone-border-button-active tone-text-button-hover tone-text-button-active',\n solid:\n 'tone-fill-button-hover tone-fill-button-active tone-border-button-hover tone-border-button-active tone-text-button-hover tone-text-button-active',\n surface:\n 'tone-fill-surface-hover tone-fill-surface-active tone-border-surface-hover tone-border-surface-active tone-text-surface-hover tone-text-surface-active',\n surfaceAlt:\n 'tone-fill-surface-alt-hover tone-fill-surface-alt-active tone-border-surface-alt-hover tone-border-surface-alt-active tone-text-surface-alt-hover tone-text-surface-alt-active',\n outlineFill:\n 'tone-fill-button-hover tone-text-button-hover tone-fill-button-active tone-text-button-active',\n outline:\n 'b-2-hover tone-border-button-hover tone-border-button-active tone-fill-button-active tone-text-button-active',\n subtle:\n 'tone-fill-surface-hover tone-fill-surface-active tone-text-surface-hover tone-text-surface-active',\n subtleBtn:\n 'tone-fill-button-hover tone-fill-button-active tone-text-button-hover tone-text-button-active',\n link: 'underline-hover',\n sheen: 'tone-text-bg-button-hover tone-text-bg-button-active',\n underline: 'tone-inset-b-hover tone-inset-b-active',\n rail: 'tone-inset-l-hover tone-fill-active tone-text-button-active',\n bracket:\n 'tone-inset-y-hover tone-inset-y-active tone-fill-active tone-text-button-active',\n} satisfies Partial<Record<ComponentVariant, string>>\n\nconst COMPONENT_VARIANT_CLASSES = mergeComponentVariantClasses(\n STATELESS_COMPONENT_VARIANT_CLASSES,\n STATEFUL_COMPONENT_VARIANT_CLASSES,\n)\n\nconst COMPONENT_VARIANT_CLASS_MODES: Record<\n ComponentVariantMode,\n Record<ComponentVariant, string>\n> = {\n stateful: COMPONENT_VARIANT_CLASSES,\n stateless: STATELESS_COMPONENT_VARIANT_CLASSES,\n}\n\nfunction mergeComponentVariantClasses(\n base: Record<ComponentVariant, string>,\n additions: Partial<Record<ComponentVariant, string>>,\n): Record<ComponentVariant, string> {\n const merged = {} as Record<ComponentVariant, string>\n for (const variant of Object.keys(base) as ComponentVariant[]) {\n merged[variant] = [base[variant], additions[variant]]\n .filter(Boolean)\n .join(' ')\n }\n return merged\n}\n\nfunction resolveComponentVariantClassName(\n variant: RefOrValue<ComponentVariant> | undefined,\n defaultVariant: ComponentVariant = DEFAULT_COMPONENT_VARIANT,\n variantMode:\n | RefOrValue<ComponentVariantMode>\n | undefined = DEFAULT_COMPONENT_VARIANT_MODE,\n) {\n const resolvedVariant = unref(variant) || defaultVariant\n const resolvedMode = unref(variantMode) || DEFAULT_COMPONENT_VARIANT_MODE\n return COMPONENT_VARIANT_CLASS_MODES[resolvedMode][resolvedVariant]\n}\n\nexport function resolveComponentClasses(\n props: ComponentClassProps,\n options: ResolveComponentClassesOptions = {},\n) {\n return [\n resolveComponentVariantClassName(\n props.variant,\n options.defaultVariant,\n props.variantMode || options.defaultVariantMode,\n ),\n getSemanticToneClass(unref(props.tone)),\n ...(options.classes || []).map(unref),\n ]\n .filter(Boolean)\n .join(' ')\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type RefOrValue,\n} from 'regor'\nimport {\n type ComponentVariant,\n resolveComponentClasses,\n} from '../componentVariant'\n\nexport interface Badge {\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n classes?: ComputedRef<string>\n}\n\nconst badgeTemplate = html`<span class=\"badge\" :class=\"classes\"><slot></slot></span>`\n\nfunction defineBadgeComponent() {\n return defineComponent<Badge>(badgeTemplate, {\n props: ['tone', 'variant'],\n context: (head) => ({\n ...head.props,\n classes: computed(() =>\n resolveComponentClasses(head.props, {\n defaultVariant: 'surface',\n defaultVariantMode: 'stateless',\n }),\n ),\n }),\n })\n}\n\nexport function defineBadgeComponents() {\n return {\n badge: defineBadgeComponent(),\n }\n}\n","import { getThemePaletteVar } from '@purestack/ts-style'\n\nexport const DEFAULT_CHART_SIZE = '100%'\nexport const DEFAULT_CARTESIAN_CHART_WIDTH = '100%'\nexport const DEFAULT_CARTESIAN_CHART_HEIGHT = undefined\nexport const DEFAULT_CHART_EMPTY_LABEL = 'No data'\nexport const DEFAULT_CARTESIAN_GRID_LINE_COUNT = 5\n\nexport const CARTESIAN_CHART_VIEWBOX_HEIGHT = 58\nexport const CARTESIAN_CHART_PLOT_X = 8\nexport const CARTESIAN_CHART_PLOT_Y = 6\nexport const CARTESIAN_CHART_PLOT_WIDTH = 86\nexport const CARTESIAN_CHART_PLOT_HEIGHT = 43\nexport const CARTESIAN_CHART_LABEL_Y = 53.5\n\nexport const DEFAULT_CHART_COLORS = [\n getThemePaletteVar('semanticTone.accent.button.hover.bgcolor'),\n getThemePaletteVar('semanticTone.feature.button.hover.bgcolor'),\n getThemePaletteVar('semanticTone.success.button.hover.bgcolor'),\n getThemePaletteVar('semanticTone.info.button.hover.bgcolor'),\n getThemePaletteVar('semanticTone.warning.button.hover.bgcolor'),\n getThemePaletteVar('semanticTone.secondary.button.hover.bgcolor'),\n getThemePaletteVar('semanticTone.danger.button.hover.bgcolor'),\n getThemePaletteVar('semanticTone.custom.button.hover.bgcolor'),\n]\n","import { clamp } from '@purestack/ts-util'\nimport { type RefOrValue, unref } from 'regor'\n\nexport interface FormatChartNumberOptions {\n precision?: number\n}\n\nexport function readChartNumber(\n value: RefOrValue<number | string> | undefined,\n fallback: number,\n) {\n const resolved = unref(value)\n const number =\n typeof resolved === 'number'\n ? resolved\n : Number.parseFloat(String(resolved))\n return Number.isFinite(number) ? number : fallback\n}\n\nexport function clampChartNumber(\n value: RefOrValue<number | string> | undefined,\n fallback: number,\n min: number,\n max: number,\n) {\n return clamp(readChartNumber(value, fallback), min, max)\n}\n\nexport function resolveChartText(value?: RefOrValue<string>) {\n const resolved = unref(value)\n return typeof resolved === 'string' ? resolved.trim() : ''\n}\n\nexport function resolveChartSize(\n size: RefOrValue<number | string> | undefined,\n fallback: number | string | undefined,\n) {\n const resolved = unref(size)\n if (typeof resolved === 'number' && Number.isFinite(resolved)) {\n return Math.max(1, resolved)\n }\n if (typeof resolved !== 'string') return fallback\n const trimmed = resolved.trim()\n return trimmed || fallback\n}\n\nexport function resolveChartCssSize(size?: RefOrValue<number | string>) {\n const resolved = unref(size)\n if (typeof resolved === 'number' && Number.isFinite(resolved)) {\n return `${resolved}px`\n }\n if (typeof resolved !== 'string') return ''\n const trimmed = resolved.trim()\n return isNumericChartString(trimmed) ? `${trimmed}px` : trimmed\n}\n\nexport function formatChartValue(\n value: number,\n suffix: string,\n options: FormatChartNumberOptions = {},\n) {\n const formatted = Number.isInteger(value)\n ? String(value)\n : formatChartNumber(value, options)\n return suffix ? `${formatted}${suffix}` : formatted\n}\n\nexport function formatChartPoint(\n point: { x: number; y: number },\n options: FormatChartNumberOptions = {},\n) {\n return `${formatChartNumber(point.x, options)} ${formatChartNumber(point.y, options)}`\n}\n\nexport function formatChartNumber(\n value: number,\n { precision = 2 }: FormatChartNumberOptions = {},\n) {\n return Number.parseFloat(value.toFixed(precision)).toString()\n}\n\nfunction isNumericChartString(value: string) {\n return /^-?\\d+(?:\\.\\d+)?$/.test(value)\n}\n","import type { RefOrValue } from 'regor'\nimport {\n CARTESIAN_CHART_PLOT_HEIGHT,\n CARTESIAN_CHART_PLOT_WIDTH,\n CARTESIAN_CHART_PLOT_X,\n CARTESIAN_CHART_PLOT_Y,\n DEFAULT_CARTESIAN_GRID_LINE_COUNT,\n} from './chartDefaults'\nimport {\n formatChartValue,\n readChartNumber,\n resolveChartText,\n} from './chartUtils'\n\nexport interface CartesianChartDomain {\n min: number\n max: number\n}\n\nexport interface ResolvedCartesianChartGridLine {\n value: number\n formattedValue: string\n y: number\n}\n\nexport interface ResolveCartesianChartDomainOptions {\n values: number[]\n minValue?: RefOrValue<number | string>\n maxValue?: RefOrValue<number | string>\n}\n\nexport function resolveCartesianChartDomain({\n values,\n minValue,\n maxValue,\n}: ResolveCartesianChartDomainOptions): CartesianChartDomain {\n const fallbackMax = values.length ? Math.max(...values) : 1\n const fallbackMin = values.length ? Math.min(...values) : 0\n let min = Math.min(\n readChartNumber(minValue, Math.min(0, fallbackMin)),\n fallbackMin,\n 0,\n )\n let max = Math.max(\n readChartNumber(maxValue, Math.max(0, fallbackMax)),\n fallbackMax,\n 0,\n )\n\n if (min === max) {\n if (min === 0) max = 1\n else if (min > 0) min = 0\n else max = 0\n }\n\n if (min > max) [min, max] = [max, min]\n\n return { min, max }\n}\n\nexport function resolveCartesianChartGridLines(\n domain: CartesianChartDomain,\n valueSuffix?: RefOrValue<string>,\n): ResolvedCartesianChartGridLine[] {\n const suffix = resolveChartText(valueSuffix)\n const step =\n (domain.max - domain.min) / (DEFAULT_CARTESIAN_GRID_LINE_COUNT - 1)\n\n return Array.from(\n { length: DEFAULT_CARTESIAN_GRID_LINE_COUNT },\n (_, index) => {\n const value = domain.max - step * index\n return {\n value,\n formattedValue: formatChartValue(value, suffix),\n y: valueToCartesianChartY(value, domain),\n }\n },\n )\n}\n\nexport function valueToCartesianChartY(\n value: number,\n domain: CartesianChartDomain,\n) {\n const range = domain.max - domain.min\n if (range <= 0) return CARTESIAN_CHART_PLOT_Y + CARTESIAN_CHART_PLOT_HEIGHT\n const ratio = (domain.max - value) / range\n return CARTESIAN_CHART_PLOT_Y + ratio * CARTESIAN_CHART_PLOT_HEIGHT\n}\n\nexport function pointIndexToCartesianChartX(index: number, count: number) {\n if (count <= 1) {\n return CARTESIAN_CHART_PLOT_X + CARTESIAN_CHART_PLOT_WIDTH / 2\n }\n return (\n CARTESIAN_CHART_PLOT_X + (index / (count - 1)) * CARTESIAN_CHART_PLOT_WIDTH\n )\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComputedRef,\n computed,\n defineComponent,\n type RefOrValue,\n svg,\n unref,\n} from 'regor'\nimport {\n type CartesianChartDomain,\n type ResolvedCartesianChartGridLine,\n resolveCartesianChartDomain,\n resolveCartesianChartGridLines,\n valueToCartesianChartY,\n} from '../chart/cartesianChart'\nimport {\n CARTESIAN_CHART_PLOT_WIDTH,\n CARTESIAN_CHART_PLOT_X,\n DEFAULT_CARTESIAN_CHART_HEIGHT,\n DEFAULT_CARTESIAN_CHART_WIDTH,\n DEFAULT_CHART_COLORS,\n DEFAULT_CHART_EMPTY_LABEL,\n} from '../chart/chartDefaults'\nimport {\n formatChartValue,\n readChartNumber,\n resolveChartSize,\n resolveChartText,\n} from '../chart/chartUtils'\nimport type {\n ComponentVariant,\n ComponentVariantMode,\n} from '../componentVariant'\nimport { resolveComponentClasses } from '../componentVariant'\n\nexport interface BarChartItem {\n label?: RefOrValue<string>\n value?: RefOrValue<number | string>\n color?: RefOrValue<string>\n}\n\nexport interface ResolvedBarChartItem {\n label: string\n value: number\n formattedValue: string\n color: string\n x: number\n y: number\n width: number\n height: number\n valueLabelX: number\n valueLabelY: number\n valueLabelBaseline: string\n labelX: number\n labelY: number\n roundedTop: number\n}\n\nexport interface ResolvedBarChartGridLine\n extends ResolvedCartesianChartGridLine {}\n\nexport interface BarChart {\n items?: RefOrValue<Array<RefOrValue<BarChartItem>>>\n title?: RefOrValue<string>\n description?: RefOrValue<string>\n ariaLabel?: RefOrValue<string>\n emptyLabel?: RefOrValue<string>\n valueSuffix?: RefOrValue<string>\n width?: RefOrValue<number | string>\n height?: RefOrValue<number | string>\n minValue?: RefOrValue<number | string>\n maxValue?: RefOrValue<number | string>\n animated?: RefOrValue<boolean | string>\n showValues?: RefOrValue<boolean | string>\n showLabels?: RefOrValue<boolean | string>\n showAxis?: RefOrValue<boolean | string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n classes?: ComputedRef<string>\n resolvedWidth?: ComputedRef<string | number>\n resolvedHeight?: ComputedRef<string | number | undefined>\n resolvedAriaLabel?: ComputedRef<string>\n resolvedEmptyLabel?: ComputedRef<string>\n chartItems?: ComputedRef<ResolvedBarChartItem[]>\n gridLines?: ComputedRef<ResolvedBarChartGridLine[]>\n hasItems?: ComputedRef<boolean>\n zeroLineY?: ComputedRef<number>\n}\n\nconst VALUE_LABEL_OFFSET = 2.4\nconst CATEGORY_LABEL_Y = 60\nconst BAR_WIDTH_SHARE = 0.64\nconst MIN_VISIBLE_BAR_HEIGHT = 0.35\n\nconst barChartTemplate = svg`<svg\n class=\"bar-chart\"\n :class=\"classes\"\n viewBox=\"-6 0 106 64\"\n :width=\"resolvedWidth\"\n :height=\"resolvedHeight\"\n role=\"img\"\n :aria-label=\"resolvedAriaLabel\"\n>\n <title r-if=\"title\">{{ title }}</title>\n <desc r-if=\"description\">{{ description }}</desc>\n <g class=\"bar-chart__grid\" r-if=\"hasItems && showAxis\">\n <g r-for=\"line in gridLines\" class=\"bar-chart__grid-line\">\n <line x1=\"8\" x2=\"94\" :y1=\"line.y\" :y2=\"line.y\"/>\n <text x=\"5.4\" :y=\"line.y\">{{ line.formattedValue }}</text>\n </g>\n </g>\n <line\n r-if=\"hasItems && showAxis\"\n class=\"bar-chart__zero-line\"\n x1=\"8\"\n x2=\"94\"\n :y1=\"zeroLineY\"\n :y2=\"zeroLineY\"/>\n <g class=\"bar-chart__plot\" r-if=\"hasItems\">\n <rect\n r-for=\"item in chartItems\"\n class=\"bar-chart__bar\"\n :x=\"item.x\"\n :y=\"item.y\"\n :width=\"item.width\"\n :height=\"item.height\"\n :rx=\"item.roundedTop\"\n :ry=\"item.roundedTop\"\n :fill=\"item.color\"\n :aria-label=\"item.label + ': ' + item.formattedValue\"\n >\n <title>{{ item.label + ': ' + item.formattedValue }}</title>\n <animate\n r-if=\"animated\"\n attributeName=\"height\"\n from=\"0\"\n :to=\"item.height\"\n dur=\"1720ms\"\n calcMode=\"spline\"\n keyTimes=\"0;1\"\n keySplines=\"0.16 1 0.3 1\"\n fill=\"freeze\"/>\n <animate\n r-if=\"animated\"\n attributeName=\"y\"\n :from=\"zeroLineY\"\n :to=\"item.y\"\n dur=\"1720ms\"\n calcMode=\"spline\"\n keyTimes=\"0;1\"\n keySplines=\"0.16 1 0.3 1\"\n fill=\"freeze\"/>\n </rect>\n </g>\n <g class=\"bar-chart__values\" r-if=\"hasItems && showValues\">\n <text\n r-for=\"item in chartItems\"\n class=\"bar-chart__value\"\n :x=\"item.valueLabelX\"\n :y=\"item.valueLabelY\"\n text-anchor=\"middle\"\n :dominant-baseline=\"item.valueLabelBaseline\"\n >\n {{ item.formattedValue }}\n </text>\n </g>\n <g class=\"bar-chart__labels\" r-if=\"hasItems && showLabels\">\n <text\n r-for=\"item in chartItems\"\n class=\"bar-chart__label\"\n :x=\"item.labelX\"\n :y=\"item.labelY\"\n text-anchor=\"middle\"\n >\n {{ item.label }}\n </text>\n </g>\n <text\n r-if=\"!hasItems\"\n class=\"bar-chart__empty\"\n x=\"50\"\n y=\"30\"\n text-anchor=\"middle\"\n >\n {{ resolvedEmptyLabel }}\n </text>\n</svg>`\n\nfunction defineBarChartComponent() {\n return defineComponent<BarChart>(barChartTemplate, {\n props: [\n 'items',\n 'title',\n 'description',\n 'ariaLabel',\n 'emptyLabel',\n 'valueSuffix',\n 'width',\n 'height',\n 'minValue',\n 'maxValue',\n 'animated',\n 'showValues',\n 'showLabels',\n 'showAxis',\n 'tone',\n 'variant',\n 'variantMode',\n ],\n context: (head) => resolveBarChart(head.props),\n })\n}\n\nexport function defineBarChartComponents() {\n return {\n barChart: defineBarChartComponent(),\n }\n}\n\nfunction resolveBarChart(props: BarChart): BarChart {\n const domain = computed(() => resolveDomain(props))\n\n return {\n animated: true,\n showValues: true,\n showLabels: true,\n showAxis: true,\n ...props,\n classes: computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: 'none',\n defaultVariantMode: 'stateless',\n }),\n ),\n resolvedWidth: computed(() =>\n resolveChartSize(props.width, DEFAULT_CARTESIAN_CHART_WIDTH),\n ),\n resolvedHeight: computed(() =>\n resolveChartSize(props.height, DEFAULT_CARTESIAN_CHART_HEIGHT),\n ),\n resolvedAriaLabel: computed(() => resolveAriaLabel(props)),\n resolvedEmptyLabel: computed(\n () => resolveChartText(props.emptyLabel) || DEFAULT_CHART_EMPTY_LABEL,\n ),\n chartItems: computed(() => resolveChartItems(props, domain())),\n gridLines: computed(() =>\n resolveCartesianChartGridLines(domain(), props.valueSuffix),\n ),\n hasItems: computed(() => resolveItems(props.items).length > 0),\n zeroLineY: computed(() => valueToCartesianChartY(0, domain())),\n }\n}\n\nfunction resolveChartItems(\n props: BarChart,\n domain: CartesianChartDomain,\n): ResolvedBarChartItem[] {\n const items = resolveItems(props.items)\n if (!items.length) return []\n\n const laneWidth = CARTESIAN_CHART_PLOT_WIDTH / items.length\n const barWidth = Math.max(1, laneWidth * BAR_WIDTH_SHARE)\n const valueSuffix = resolveChartText(props.valueSuffix)\n const zeroY = valueToCartesianChartY(0, domain)\n\n return items.map((item, index) => {\n const valueY = valueToCartesianChartY(item.value, domain)\n const rawHeight = Math.abs(zeroY - valueY)\n const height =\n item.value === 0 ? 0 : Math.max(rawHeight, MIN_VISIBLE_BAR_HEIGHT)\n const isNegative = item.value < 0\n const x =\n CARTESIAN_CHART_PLOT_X + laneWidth * index + (laneWidth - barWidth) / 2\n const y = isNegative\n ? zeroY\n : Math.min(valueY, zeroY) - (height - rawHeight)\n const valueLabelY = isNegative\n ? y + height + VALUE_LABEL_OFFSET\n : Math.max(2, y - VALUE_LABEL_OFFSET)\n\n return {\n label: item.label,\n value: item.value,\n formattedValue: formatChartValue(item.value, valueSuffix),\n color:\n item.color || DEFAULT_CHART_COLORS[index % DEFAULT_CHART_COLORS.length],\n x,\n y,\n width: barWidth,\n height,\n valueLabelX: x + barWidth / 2,\n valueLabelY,\n valueLabelBaseline: isNegative ? 'hanging' : 'auto',\n labelX: x + barWidth / 2,\n labelY: CATEGORY_LABEL_Y,\n roundedTop: Math.min(1.4, barWidth / 2, height / 2),\n }\n })\n}\n\ninterface ResolvedBarChartSourceItem {\n label: string\n value: number\n color: string\n}\n\nfunction resolveItems(items: BarChart['items']): ResolvedBarChartSourceItem[] {\n return (unref(items) || [])\n .map((itemInput, index) => {\n const item = unref(itemInput)\n const value = readChartNumber(item?.value, Number.NaN)\n return {\n label: resolveChartText(item?.label) || `Item ${index + 1}`,\n value,\n color: resolveChartText(item?.color),\n }\n })\n .filter((item) => Number.isFinite(item.value))\n}\n\nfunction resolveDomain(props: BarChart): CartesianChartDomain {\n const values = resolveItems(props.items).map((item) => item.value)\n return resolveCartesianChartDomain({\n values,\n minValue: props.minValue,\n maxValue: props.maxValue,\n })\n}\n\nfunction resolveAriaLabel(props: BarChart) {\n return (\n resolveChartText(props.ariaLabel) ||\n resolveChartText(props.title) ||\n 'Bar chart'\n )\n}\n","import { type PageContext, tryResolvePageContext } from '@purestack/ts-common'\nimport type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComputedRef,\n computed,\n defineComponent,\n type Emits,\n html,\n type RefOrValue,\n unref,\n} from 'regor'\nimport {\n type ComponentVariant,\n resolveComponentClasses,\n} from '../componentVariant'\n\nexport type BtnSize = 'sm' | 'md' | 'lg'\nexport type BtnType = 'button' | 'submit' | 'reset'\nexport type BtnIconPosition = 'start' | 'end'\n\nexport interface BtnBase {\n tone?: RefOrValue<SemanticTone>\n size?: RefOrValue<BtnSize>\n variant?: RefOrValue<ComponentVariant>\n icon?: RefOrValue<string>\n iconPosition?: RefOrValue<BtnIconPosition>\n iconOnly?: RefOrValue<boolean>\n ariaLabel?: RefOrValue<string>\n classes?: ComputedRef<string>\n showStartIcon?: ComputedRef<boolean>\n showEndIcon?: ComputedRef<boolean>\n emits?: Emits<'click'>\n}\n\nexport interface Btn extends BtnBase {\n type?: RefOrValue<BtnType>\n disabled?: RefOrValue<boolean>\n buttonType?: RefOrValue<BtnType>\n}\n\nexport interface BtnLink extends BtnBase {\n href?: RefOrValue<string>\n target?: RefOrValue<string>\n rel?: RefOrValue<string>\n resolvedHref?: ComputedRef<string>\n resolvedRel?: ComputedRef<string>\n}\n\nconst DEFAULT_BUTTON_VARIANT: ComponentVariant = 'solid'\n\nconst buttonTemplate = html`<button\n class=\"btn\"\n :class=\"classes\"\n :type=\"buttonType\"\n :disabled=\"disabled\"\n :aria-label=\"ariaLabel\"\n>\n <Icon class=\"btn__icon\" :name=\"icon\" r-if=\"showStartIcon\"/>\n <span class=\"btn__label\" r-if=\"!iconOnly\"><slot></slot></span>\n <Icon class=\"btn__icon\" :name=\"icon\" r-if=\"showEndIcon\"/>\n</button>`\n\nconst buttonLinkTemplate = html`<a\n class=\"btn\"\n :class=\"classes\"\n :href=\"resolvedHref\"\n :target=\"target\"\n :rel=\"resolvedRel\"\n :aria-label=\"ariaLabel\"\n>\n <Icon class=\"btn__icon\" :name=\"icon\" r-if=\"showStartIcon\"/>\n <span class=\"btn__label\" r-if=\"!iconOnly\"><slot></slot></span>\n <Icon class=\"btn__icon\" :name=\"icon\" r-if=\"showEndIcon\"/>\n</a>`\n\nfunction defineButtonComponent() {\n return defineComponent<Btn>(buttonTemplate, {\n props: [\n 'tone',\n 'size',\n 'variant',\n 'type',\n 'icon',\n 'iconPosition',\n 'iconOnly',\n 'ariaLabel',\n 'disabled',\n ],\n context: (head) => resolveBtn(head.props),\n })\n}\n\nfunction defineButtonLinkComponent() {\n return defineComponent<BtnLink>(buttonLinkTemplate, {\n props: [\n 'href',\n 'target',\n 'rel',\n 'tone',\n 'size',\n 'variant',\n 'icon',\n 'iconPosition',\n 'iconOnly',\n 'ariaLabel',\n ],\n context: (head) => resolveBtnLink(head.props, tryResolvePageContext(head)),\n })\n}\n\nexport function defineButtonComponents() {\n return {\n btn: defineButtonComponent(),\n btnLink: defineButtonLinkComponent(),\n }\n}\n\nfunction resolveBtn(props: Btn): Btn {\n return {\n ...props,\n classes: computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: DEFAULT_BUTTON_VARIANT,\n classes: resolveButtonStateClasses(props),\n }),\n ),\n buttonType: computed(() => unref(props.type) || 'button'),\n showStartIcon: computed(() => resolveShowStartIcon(props)),\n showEndIcon: computed(() => resolveShowEndIcon(props)),\n }\n}\n\nfunction resolveBtnLink(\n props: BtnLink,\n context: PageContext | undefined,\n): BtnLink {\n return {\n ...props,\n classes: computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: DEFAULT_BUTTON_VARIANT,\n classes: resolveButtonStateClasses(props),\n }),\n ),\n resolvedHref: computed(() => resolveButtonHref(props, context)),\n resolvedRel: computed(() => resolveButtonRel(props)),\n showStartIcon: computed(() => resolveShowStartIcon(props)),\n showEndIcon: computed(() => resolveShowEndIcon(props)),\n }\n}\n\nfunction resolveButtonStateClasses(props: BtnBase) {\n const size = unref(props.size)\n const hasIcon = !!unref(props.icon)\n const iconPosition = unref(props.iconPosition)\n const iconOnly = unref(props.iconOnly)\n const classes = [size ? `btn--${size}` : '']\n if (!hasIcon) return classes\n classes.push(\n iconOnly\n ? 'btn--icon-only'\n : iconPosition === 'end'\n ? 'btn--icon-end'\n : 'btn--icon-start',\n )\n return classes\n}\n\nfunction resolveShowStartIcon(props: BtnBase) {\n const hasIcon = !!unref(props.icon)\n return hasIcon && unref(props.iconPosition) !== 'end'\n}\n\nfunction resolveShowEndIcon(props: BtnBase) {\n const hasIcon = !!unref(props.icon)\n return hasIcon && unref(props.iconPosition) === 'end'\n}\n\nfunction resolveButtonHref(props: BtnLink, context: PageContext | undefined) {\n const value = unref(props.href)\n const href = typeof value === 'string' ? value.trim() : undefined\n return href ? (context?.resolvePublicHref(href) ?? href) : undefined\n}\n\nfunction resolveButtonRel(props: BtnLink) {\n const rel = unref(props.rel)\n if (rel) return rel\n return unref(props.target) === '_blank' ? 'noopener noreferrer' : undefined\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type RefOrValue,\n unref,\n} from 'regor'\nimport type { BtnIconPosition, BtnSize } from '../btn/btn'\nimport {\n type ComponentVariant,\n type ComponentVariantMode,\n resolveComponentClasses,\n} from '../componentVariant'\n\nexport type BtnGroupAlign = 'start' | 'center' | 'end'\nexport type BtnGroupDropDownAlign = 'start' | 'end'\n\nexport interface BtnGroup {\n align?: RefOrValue<BtnGroupAlign>\n wrap?: RefOrValue<boolean>\n classes?: ComputedRef<string>\n}\n\nexport interface BtnGroupDropDown {\n label?: RefOrValue<string>\n icon?: RefOrValue<string>\n iconPosition?: RefOrValue<BtnIconPosition>\n iconOnly?: RefOrValue<boolean>\n ariaLabel?: RefOrValue<string>\n tone?: RefOrValue<SemanticTone>\n size?: RefOrValue<BtnSize>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n menuTone?: RefOrValue<SemanticTone>\n menuVariant?: RefOrValue<ComponentVariant>\n menuVariantMode?: RefOrValue<ComponentVariantMode>\n align?: RefOrValue<BtnGroupDropDownAlign>\n classes?: ComputedRef<string>\n triggerClasses?: ComputedRef<string>\n menuClasses?: ComputedRef<string>\n resolvedAlign?: ComputedRef<BtnGroupDropDownAlign>\n resolvedLabel?: ComputedRef<string>\n resolvedIcon?: ComputedRef<string>\n resolvedAriaLabel?: ComputedRef<string | undefined>\n showStartIcon?: ComputedRef<boolean>\n showEndIcon?: ComputedRef<boolean>\n}\n\nconst DEFAULT_BUTTON_VARIANT: ComponentVariant = 'solid'\nconst DEFAULT_DROPDOWN_LABEL = 'More'\nconst DEFAULT_DROPDOWN_ICON = 'lucide:chevron-down'\n\nconst btnGroupTemplate = html`<div class=\"btn-group\" :class=\"classes\">\n <slot></slot>\n</div>`\n\nconst btnGroupDropDownTemplate = html`<details\n class=\"btn-group__dropdown\"\n :class=\"classes\"\n :data-menu-align=\"resolvedAlign\"\n data-menu-runtime\n>\n <summary\n class=\"btn btn-group__toggle\"\n :class=\"triggerClasses\"\n :aria-label=\"resolvedAriaLabel\"\n >\n <Icon class=\"btn__icon\" :name=\"resolvedIcon\" r-if=\"showStartIcon\"/>\n <span class=\"btn__label\" r-if=\"!iconOnly\">{{ resolvedLabel }}</span>\n <Icon class=\"btn__icon\" :name=\"resolvedIcon\" r-if=\"showEndIcon\"/>\n </summary>\n <div class=\"btn-group__menu\" :class=\"menuClasses\" data-menu-panel>\n <slot></slot>\n </div>\n</details>`\n\nfunction defineBtnGroupComponent() {\n return defineComponent<BtnGroup>(btnGroupTemplate, {\n props: ['align', 'wrap'],\n context: (head) => resolveBtnGroup(head.props),\n })\n}\n\nfunction defineBtnGroupDropDownComponent() {\n return defineComponent<BtnGroupDropDown>(btnGroupDropDownTemplate, {\n props: [\n 'label',\n 'icon',\n 'iconPosition',\n 'iconOnly',\n 'ariaLabel',\n 'tone',\n 'size',\n 'variant',\n 'variantMode',\n 'menuTone',\n 'menuVariant',\n 'menuVariantMode',\n 'align',\n ],\n context: (head) => resolveBtnGroupDropDown(head.props),\n })\n}\n\nexport function defineBtnGroupComponents() {\n return {\n btnGroup: defineBtnGroupComponent(),\n btnGroupDropDown: defineBtnGroupDropDownComponent(),\n }\n}\n\nfunction resolveBtnGroup(props: BtnGroup): BtnGroup {\n return {\n ...props,\n classes: computed(() =>\n [\n resolveBtnGroupAlignClass(props),\n unref(props.wrap) ? 'btn-group--wrap' : '',\n ]\n .filter(Boolean)\n .join(' '),\n ),\n }\n}\n\nfunction resolveBtnGroupDropDown(props: BtnGroupDropDown): BtnGroupDropDown {\n return {\n ...props,\n classes: computed(() => resolveDropDownClasses(props)),\n triggerClasses: computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: DEFAULT_BUTTON_VARIANT,\n classes: resolveButtonStateClasses(props),\n }),\n ),\n menuClasses: computed(() =>\n resolveComponentClasses(\n {\n tone: props.menuTone,\n variant: props.menuVariant,\n variantMode: props.menuVariantMode,\n },\n {\n defaultVariant: 'surfaceAlt',\n defaultVariantMode: 'stateless',\n },\n ),\n ),\n resolvedAlign: computed(() => resolveDropDownAlign(props)),\n resolvedLabel: computed(() => unref(props.label) || DEFAULT_DROPDOWN_LABEL),\n resolvedIcon: computed(() => unref(props.icon) || DEFAULT_DROPDOWN_ICON),\n resolvedAriaLabel: computed(() => resolveDropDownAriaLabel(props)),\n showStartIcon: computed(() => resolveShowStartIcon(props)),\n showEndIcon: computed(() => resolveShowEndIcon(props)),\n }\n}\n\nfunction resolveBtnGroupAlignClass(props: BtnGroup) {\n const align = unref(props.align)\n return align ? `btn-group--${align}` : ''\n}\n\nfunction resolveDropDownClasses(props: BtnGroupDropDown) {\n return `btn-group__dropdown--${resolveDropDownAlign(props)}`\n}\n\nfunction resolveDropDownAlign(props: BtnGroupDropDown): BtnGroupDropDownAlign {\n return unref(props.align) || 'end'\n}\n\nfunction resolveButtonStateClasses(props: BtnGroupDropDown) {\n const size = unref(props.size)\n const hasIcon = !!resolveIconName(props)\n const iconPosition = unref(props.iconPosition)\n const iconOnly = unref(props.iconOnly)\n const classes = [size ? `btn--${size}` : '']\n if (!hasIcon) return classes\n classes.push(\n iconOnly\n ? 'btn--icon-only'\n : iconPosition === 'start'\n ? 'btn--icon-start'\n : 'btn--icon-end',\n )\n return classes\n}\n\nfunction resolveShowStartIcon(props: BtnGroupDropDown) {\n return !!resolveIconName(props) && unref(props.iconPosition) === 'start'\n}\n\nfunction resolveShowEndIcon(props: BtnGroupDropDown) {\n return !!resolveIconName(props) && unref(props.iconPosition) !== 'start'\n}\n\nfunction resolveIconName(props: BtnGroupDropDown) {\n return unref(props.icon) || DEFAULT_DROPDOWN_ICON\n}\n\nfunction resolveDropDownAriaLabel(props: BtnGroupDropDown) {\n const ariaLabel = unref(props.ariaLabel)\n if (ariaLabel) return ariaLabel\n return unref(props.iconOnly)\n ? unref(props.label) || 'More actions'\n : undefined\n}\n","import {\n type ClassicLogoConfig,\n type PageContext,\n tryResolvePageContext,\n} from '@purestack/ts-common'\nimport {\n getCurrentThemePaletteVar,\n getThemePaletteVar,\n normalizeThemeVariableReference,\n} from '@purestack/ts-style'\nimport {\n type ComputedRef,\n computed,\n defineComponent,\n flatten,\n html,\n type RefOrValue,\n unref,\n} from 'regor'\n\nconst logoTemplate = html`<div class=\"classic-logo\" :style=\"logo.layoutStyle\">\n <a\n class=\"classic-logo__link\"\n :href=\"logo.href === null ? undefined : (logo.href ?? '/')\"\n :aria-label=\"logo.ariaLabel\"\n >\n <span\n class=\"classic-logo__glyph\"\n :style=\"logo.glyphStyle\"\n aria-hidden=\"true\"\n >\n <Icon :name=\"logo.icon\" r-if=\"logo.icon\"/>\n <span class=\"classic-logo__glyph-mark\" r-else></span>\n </span>\n <span class=\"classic-logo__stack\">\n <span class=\"classic-logo__brand\">\n <span\n r-for=\"brandLetter in logo.brandLetters\"\n class=\"classic-logo__brand-letter\"\n :style=\"brandLetter.style\"\n >\n {{ brandLetter.value }}\n </span>\n </span>\n <span class=\"classic-logo__subtitle\" r-if=\"logo.subtitle\">\n <span\n r-for=\"subtitleLetter in logo.subtitleLetters\"\n class=\"classic-logo__subtitle-letter\"\n :style=\"subtitleLetter.style\"\n >\n {{ subtitleLetter.value }}\n </span>\n </span>\n </span>\n </a>\n</div>`\n\ninterface LogoLetter {\n value: string\n isSpace?: boolean\n style?: Record<string, string>\n}\n\ntype LogoResponsiveLength = {\n base?: string\n sm?: string\n md?: string\n lg?: string\n xl?: string\n}\n\nconst DEFAULT_BRAND_FILL = getThemePaletteVar(\n 'semanticTone.accent.button.rest.background',\n)\nconst DEFAULT_SUBTITLE_FILL = getCurrentThemePaletteVar('text.subtle')\n\ninterface ResolvedClassicLogo {\n brand?: string\n letterColors?: string\n subtitleLetterColors?: string\n colors?: string[]\n logoBackground?: number\n logoForeground?: number\n brandLetters?: LogoLetter[]\n subtitle?: string\n subtitleLetters?: LogoLetter[]\n glyphStyle?: Record<string, string>\n layoutStyle?: Record<string, string>\n brandSize?: string\n brandSizeSm?: string\n brandSizeMd?: string\n brandSizeLg?: string\n brandSizeXl?: string\n subtitleSize?: string\n subtitleSizeSm?: string\n subtitleSizeMd?: string\n subtitleSizeLg?: string\n subtitleSizeXl?: string\n iconSize?: string\n iconSizeSm?: string\n iconSizeMd?: string\n iconSizeLg?: string\n iconSizeXl?: string\n subtitleInset?: string\n subtitleInsetSm?: string\n subtitleInsetMd?: string\n subtitleInsetLg?: string\n subtitleInsetXl?: string\n href?: string | null\n icon?: string\n ariaLabel?: string\n}\n\nfunction resolveClassicLogo(\n props: Partial<ClassicLogoConfig>,\n context: PageContext | undefined,\n): ResolvedClassicLogo {\n const brand = props.brand\n const letterColors = props.letterColors\n const subtitleLetterColors = props.subtitleLetterColors\n const colors = normalizeLogoColors(props.colors)\n const logoBackground = props.logoBackground\n const logoForeground = props.logoForeground\n const brandLetters = buildBrandLetters(brand, letterColors, colors)\n const subtitle = props.subtitle\n const subtitleLetters = buildLogoLetters(\n subtitle,\n subtitleLetterColors,\n colors,\n DEFAULT_SUBTITLE_FILL,\n )\n const glyphStyle = resolveGlyphStyle(colors, logoBackground, logoForeground)\n const layoutStyle = resolveLogoLayoutStyle(props)\n const href = props.href\n ? (context?.resolvePublicHref(props.href) ?? props.href)\n : props.href\n const icon = props.icon\n const ariaLabel = props.ariaLabel\n\n return {\n brand,\n letterColors,\n subtitleLetterColors,\n colors,\n logoBackground,\n logoForeground,\n brandLetters,\n subtitle,\n subtitleLetters,\n glyphStyle,\n layoutStyle,\n brandSize: props.brandSize,\n brandSizeSm: props.brandSizeSm,\n brandSizeMd: props.brandSizeMd,\n brandSizeLg: props.brandSizeLg,\n brandSizeXl: props.brandSizeXl,\n subtitleSize: props.subtitleSize,\n subtitleSizeSm: props.subtitleSizeSm,\n subtitleSizeMd: props.subtitleSizeMd,\n subtitleSizeLg: props.subtitleSizeLg,\n subtitleSizeXl: props.subtitleSizeXl,\n iconSize: props.iconSize,\n iconSizeSm: props.iconSizeSm,\n iconSizeMd: props.iconSizeMd,\n iconSizeLg: props.iconSizeLg,\n iconSizeXl: props.iconSizeXl,\n subtitleInset: props.subtitleInset,\n subtitleInsetSm: props.subtitleInsetSm,\n subtitleInsetMd: props.subtitleInsetMd,\n subtitleInsetLg: props.subtitleInsetLg,\n subtitleInsetXl: props.subtitleInsetXl,\n href,\n icon,\n ariaLabel: ariaLabel || brand,\n }\n}\n\nfunction normalizeLogoColors(colors: string[] | undefined) {\n return colors?.map((color) => normalizeThemeVariableReference(color))\n}\n\nfunction buildBrandLetters(\n brand: string | undefined,\n letterColors: string | undefined,\n colors: string[] | undefined,\n): LogoLetter[] | undefined {\n return buildLogoLetters(brand, letterColors, colors, DEFAULT_BRAND_FILL)\n}\n\nfunction buildLogoLetters(\n text: string | undefined,\n letterColors: string | undefined,\n colors: string[] | undefined,\n defaultFill: string,\n): LogoLetter[] | undefined {\n const letters: LogoLetter[] = []\n let colorCursor = 0\n\n if (text) {\n for (const character of [...text]) {\n if (character === ' ') {\n letters.push({\n value: '\\u00A0',\n isSpace: true,\n })\n continue\n }\n letters.push({\n value: character,\n style: resolveBrandLetterStyle(\n letterColors,\n colors,\n colorCursor,\n defaultFill,\n ),\n })\n colorCursor += 1\n }\n }\n\n return letters.length > 0 ? letters : undefined\n}\n\nfunction resolveBrandLetterStyle(\n letterColors: string | undefined,\n colors: string[] | undefined,\n letterIndex: number,\n defaultFill: string,\n): Record<string, string> | undefined {\n if (!letterColors) {\n return {\n backgroundImage: defaultFill,\n backgroundColor: defaultFill,\n }\n }\n const colorIndexLiteral =\n letterColors?.[letterIndex] ??\n (letterColors && letterColors.length > 0\n ? letterColors[letterColors.length - 1]\n : undefined)\n if (colorIndexLiteral === undefined) return undefined\n const colorIndex = Number.parseInt(colorIndexLiteral, 10)\n if (Number.isNaN(colorIndex) || colorIndex < 0) return undefined\n const color = colors?.[colorIndex]\n if (!color) {\n return {\n backgroundImage: defaultFill,\n backgroundColor: defaultFill,\n }\n }\n return {\n backgroundImage: color,\n backgroundColor: color,\n }\n}\n\nfunction resolveGlyphStyle(\n colors: string[] | undefined,\n logoBackground: number | undefined,\n logoForeground: number | undefined,\n): Record<string, string> | undefined {\n const style: Record<string, string> = {}\n const background = resolveIndexedLogoColor(colors, logoBackground)\n const foreground = resolveIndexedLogoColor(colors, logoForeground)\n\n if (background) {\n style['--ps-classic-logo-glyph-background'] = background\n }\n\n if (foreground) {\n style['--ps-classic-logo-glyph-foreground'] = foreground\n }\n\n return Object.keys(style).length > 0 ? style : undefined\n}\n\nfunction resolveIndexedLogoColor(\n colors: string[] | undefined,\n colorIndex: number | undefined,\n): string | undefined {\n if (colorIndex === undefined) return undefined\n if (!Number.isInteger(colorIndex) || colorIndex < 0) return undefined\n return colors?.[colorIndex]\n}\n\nfunction resolveLogoLayoutStyle(\n props: Partial<ClassicLogoConfig>,\n): Record<string, string> | undefined {\n const style: Record<string, string> = {}\n\n assignResponsiveLengthVars(\n style,\n '--ps-classic-logo-brand-size',\n resolveResponsiveLogoLength({\n base: props.brandSize,\n sm: props.brandSizeSm,\n md: props.brandSizeMd,\n lg: props.brandSizeLg,\n xl: props.brandSizeXl,\n }),\n )\n assignResponsiveLengthVars(\n style,\n '--ps-classic-logo-subtitle-size',\n resolveResponsiveLogoLength({\n base: props.subtitleSize,\n sm: props.subtitleSizeSm,\n md: props.subtitleSizeMd,\n lg: props.subtitleSizeLg,\n xl: props.subtitleSizeXl,\n }),\n )\n assignResponsiveLengthVars(\n style,\n '--ps-classic-logo-icon-size',\n resolveResponsiveLogoLength({\n base: props.iconSize,\n sm: props.iconSizeSm,\n md: props.iconSizeMd,\n lg: props.iconSizeLg,\n xl: props.iconSizeXl,\n }),\n )\n assignResponsiveLengthVars(\n style,\n '--ps-classic-logo-subtitle-inset',\n resolveResponsiveLogoLength({\n base: props.subtitleInset,\n sm: props.subtitleInsetSm,\n md: props.subtitleInsetMd,\n lg: props.subtitleInsetLg,\n xl: props.subtitleInsetXl,\n }),\n )\n\n return Object.keys(style).length > 0 ? style : undefined\n}\n\nfunction resolveResponsiveLogoLength(\n value: LogoResponsiveLength,\n): LogoResponsiveLength | undefined {\n const base = resolveOptionalCssLength(value.base)\n const sm = resolveOptionalCssLength(value.sm) ?? base\n const md = resolveOptionalCssLength(value.md) ?? sm\n const lg = resolveOptionalCssLength(value.lg) ?? md\n const xl = resolveOptionalCssLength(value.xl) ?? lg\n\n if (!base && !sm && !md && !lg && !xl) return undefined\n\n return { base, sm, md, lg, xl }\n}\n\nfunction resolveOptionalCssLength(\n value: string | undefined,\n): string | undefined {\n if (typeof value !== 'string') return undefined\n const normalized = value.trim()\n return normalized.length > 0 ? normalized : undefined\n}\n\nfunction assignResponsiveLengthVars(\n style: Record<string, string>,\n variableName: string,\n value: LogoResponsiveLength | undefined,\n) {\n if (!value) return\n if (value.base) style[variableName] = value.base\n if (value.sm) style[`${variableName}-sm`] = value.sm\n if (value.md) style[`${variableName}-md`] = value.md\n if (value.lg) style[`${variableName}-lg`] = value.lg\n if (value.xl) style[`${variableName}-xl`] = value.xl\n}\n\ntype ReactiveClassicLogoOptions = {\n [K in keyof ClassicLogoConfig]?: RefOrValue<ClassicLogoConfig[K]>\n}\n\nexport interface ClassicLogo extends ReactiveClassicLogoOptions {\n config?: RefOrValue<Partial<ClassicLogoConfig>>\n logo?: ComputedRef<ResolvedClassicLogo>\n}\n\nfunction defineClassicLogoComponent() {\n return defineComponent<ClassicLogo>(logoTemplate, {\n props: [\n 'config',\n 'brand',\n 'letterColors',\n 'subtitleLetterColors',\n 'colors',\n 'logoBackground',\n 'logoForeground',\n 'brandSize',\n 'brandSizeSm',\n 'brandSizeMd',\n 'brandSizeLg',\n 'brandSizeXl',\n 'subtitleSize',\n 'subtitleSizeSm',\n 'subtitleSizeMd',\n 'subtitleSizeLg',\n 'subtitleSizeXl',\n 'iconSize',\n 'iconSizeSm',\n 'iconSizeMd',\n 'iconSizeLg',\n 'iconSizeXl',\n 'subtitleInset',\n 'subtitleInsetSm',\n 'subtitleInsetMd',\n 'subtitleInsetLg',\n 'subtitleInsetXl',\n 'subtitle',\n 'href',\n 'icon',\n 'ariaLabel',\n ],\n context: (head) => ({\n logo: computed(() => {\n const { config, ...direct } = flatten(head.props)\n const options = {\n ...flatten(unref(config) ?? {}),\n ...Object.fromEntries(\n Object.entries(direct).filter(([, value]) => value !== undefined),\n ),\n }\n return resolveClassicLogo(options, tryResolvePageContext(head))\n }),\n }),\n })\n}\n\nexport function defineClassicLogoComponents() {\n return {\n classicLogo: defineClassicLogoComponent(),\n }\n}\n","import { type RefOrValue, unref } from 'regor'\n\nexport function createAutoId(prefix: string) {\n let nextId = 1\n return (value?: RefOrValue<string>) =>\n resolveAutoId(value, () => createGeneratedId(prefix, nextId++))\n}\n\nfunction resolveAutoId(\n value: RefOrValue<string> | undefined,\n createNextId: () => string,\n) {\n const id = unref(value)?.trim?.()\n return id || createNextId()\n}\n\nfunction createGeneratedId(prefix: string, id: number) {\n return isMinidomDocument(globalThis.document)\n ? `${prefix}-s-${id}`\n : `${prefix}-${id}`\n}\n\nfunction isMinidomDocument(document: Document) {\n return (document as { isMinidom?: unknown })?.isMinidom === true\n}\n","export const GMAIL_COMPATIBLE_EMAIL_TAGS = new Set([\n 'A',\n 'ADDRESS',\n 'B',\n 'BLOCKQUOTE',\n 'BODY',\n 'BR',\n 'CAPTION',\n 'CENTER',\n 'CITE',\n 'CODE',\n 'COL',\n 'COLGROUP',\n 'DD',\n 'DEL',\n 'DIV',\n 'DL',\n 'DT',\n 'EM',\n 'FONT',\n 'H1',\n 'H2',\n 'H3',\n 'H4',\n 'H5',\n 'H6',\n 'HTML',\n 'HR',\n 'I',\n 'IMG',\n 'INS',\n 'KBD',\n 'LI',\n 'OL',\n 'P',\n 'PRE',\n 'S',\n 'SAMP',\n 'SMALL',\n 'SPAN',\n 'STRONG',\n 'STYLE',\n 'SUB',\n 'SUP',\n 'TABLE',\n 'TBODY',\n 'TD',\n 'TFOOT',\n 'TH',\n 'THEAD',\n 'TR',\n 'TT',\n 'U',\n 'UL',\n 'VAR',\n])\n\nexport const GMAIL_SUPPORTED_CSS_PROPERTIES = new Set([\n 'azimuth',\n 'background',\n 'background-blend-mode',\n 'background-clip',\n 'background-color',\n 'background-image',\n 'background-origin',\n 'background-position',\n 'background-repeat',\n 'background-size',\n 'border',\n 'border-bottom',\n 'border-bottom-color',\n 'border-bottom-left-radius',\n 'border-bottom-right-radius',\n 'border-bottom-style',\n 'border-bottom-width',\n 'border-collapse',\n 'border-color',\n 'border-left',\n 'border-left-color',\n 'border-left-style',\n 'border-left-width',\n 'border-radius',\n 'border-right',\n 'border-right-color',\n 'border-right-style',\n 'border-right-width',\n 'border-spacing',\n 'border-style',\n 'border-top',\n 'border-top-color',\n 'border-top-left-radius',\n 'border-top-right-radius',\n 'border-top-style',\n 'border-top-width',\n 'border-width',\n 'box-sizing',\n 'break-after',\n 'break-before',\n 'break-inside',\n 'caption-side',\n 'clear',\n 'color',\n 'column-count',\n 'column-fill',\n 'column-gap',\n 'column-rule',\n 'column-rule-color',\n 'column-rule-style',\n 'column-rule-width',\n 'column-span',\n 'column-width',\n 'columns',\n 'direction',\n 'display',\n 'elevation',\n 'empty-cells',\n 'float',\n 'font',\n 'font-family',\n 'font-feature-settings',\n 'font-kerning',\n 'font-size',\n 'font-size-adjust',\n 'font-stretch',\n 'font-style',\n 'font-synthesis',\n 'font-variant',\n 'font-variant-alternates',\n 'font-variant-caps',\n 'font-variant-east-asian',\n 'font-variant-ligatures',\n 'font-variant-numeric',\n 'font-weight',\n 'height',\n 'image-orientation',\n 'image-resolution',\n 'ime-mode',\n 'isolation',\n 'layout-flow',\n 'layout-grid',\n 'layout-grid-char',\n 'layout-grid-char-spacing',\n 'layout-grid-line',\n 'layout-grid-mode',\n 'layout-grid-type',\n 'letter-spacing',\n 'line-break',\n 'line-height',\n 'list-style',\n 'list-style-position',\n 'list-style-type',\n 'margin',\n 'margin-bottom',\n 'margin-left',\n 'margin-right',\n 'margin-top',\n 'marker-offset',\n 'max-height',\n 'max-width',\n 'min-height',\n 'min-width',\n 'mix-blend-mode',\n 'object-fit',\n 'object-position',\n 'opacity',\n 'outline',\n 'outline-color',\n 'outline-style',\n 'outline-width',\n 'overflow',\n 'overflow-x',\n 'overflow-y',\n 'padding',\n 'padding-bottom',\n 'padding-left',\n 'padding-right',\n 'padding-top',\n 'page-break-after',\n 'page-break-before',\n 'page-break-inside',\n 'pause',\n 'pause-after',\n 'pause-before',\n 'pitch',\n 'pitch-range',\n 'quotes',\n 'richness',\n 'speak',\n 'speak-header',\n 'speak-numeral',\n 'speak-punctuation',\n 'speech-rate',\n 'stress',\n 'table-layout',\n 'text-align',\n 'text-align-last',\n 'text-autospace',\n 'text-combine-upright',\n 'text-decoration',\n 'text-decoration-color',\n 'text-decoration-line',\n 'text-decoration-skip',\n 'text-decoration-style',\n 'text-emphasis',\n 'text-emphasis-color',\n 'text-emphasis-style',\n 'text-indent',\n 'text-justify',\n 'text-kashida-space',\n 'text-orientation',\n 'text-overflow',\n 'text-transform',\n 'text-underline-position',\n 'unicode-bidi',\n 'vertical-align',\n 'voice-family',\n 'white-space',\n 'width',\n 'word-break',\n 'word-spacing',\n 'word-wrap',\n 'writing-mode',\n 'zoom',\n])\n\nconst IMAGE_URL_CSS_PROPERTIES = new Set([\n 'background',\n 'background-image',\n 'list-style',\n])\n\nconst CSS_URL_PATTERN = /url\\(\\s*(?:\"([^\"]*)\"|'([^']*)'|([^)]*?))\\s*\\)/gi\n\nexport interface EmailHtmlPolicyOptions {\n imageUrlResolver?: (url: string) => string | undefined\n}\n\nexport function copySafeEmailStyles(\n source: HTMLElement,\n target: HTMLElement,\n options: EmailHtmlPolicyOptions = {},\n) {\n applySafeEmailStyles(source.getAttribute('style'), target, options)\n}\n\nexport function applySafeEmailStyles(\n style: string | null | undefined,\n target: HTMLElement,\n options: EmailHtmlPolicyOptions = {},\n) {\n if (!style) return\n for (const item of splitCssDeclarations(style)) {\n const separator = findCssDeclarationSeparator(item)\n if (separator <= 0) continue\n\n const property = item.slice(0, separator).trim().toLowerCase()\n const value = sanitizeEmailStyleValue(\n property,\n item.slice(separator + 1),\n options,\n )\n if (value) target.style.setProperty(property, value)\n }\n}\n\nfunction splitCssDeclarations(style: string) {\n const declarations: string[] = []\n let start = 0\n let quote = ''\n let parenDepth = 0\n let escaped = false\n\n for (let i = 0; i < style.length; ++i) {\n const char = style[i]\n if (escaped) {\n escaped = false\n continue\n }\n\n if (char === '\\\\') {\n escaped = true\n continue\n }\n\n if (quote) {\n if (char === quote) quote = ''\n continue\n }\n\n if (char === '\"' || char === \"'\") {\n quote = char\n continue\n }\n\n if (char === '(') {\n ++parenDepth\n continue\n }\n\n if (char === ')') {\n if (parenDepth > 0) --parenDepth\n continue\n }\n\n if (char === ';' && parenDepth === 0) {\n declarations.push(style.slice(start, i))\n start = i + 1\n }\n }\n\n declarations.push(style.slice(start))\n return declarations\n}\n\nfunction findCssDeclarationSeparator(declaration: string) {\n let quote = ''\n let parenDepth = 0\n let escaped = false\n\n for (let i = 0; i < declaration.length; ++i) {\n const char = declaration[i]\n if (escaped) {\n escaped = false\n continue\n }\n\n if (char === '\\\\') {\n escaped = true\n continue\n }\n\n if (quote) {\n if (char === quote) quote = ''\n continue\n }\n\n if (char === '\"' || char === \"'\") {\n quote = char\n continue\n }\n\n if (char === '(') {\n ++parenDepth\n continue\n }\n\n if (char === ')') {\n if (parenDepth > 0) --parenDepth\n continue\n }\n\n if (char === ':' && parenDepth === 0) return i\n }\n\n return -1\n}\n\nexport function sanitizeEmailStyleValue(\n property: string,\n value: string,\n options: EmailHtmlPolicyOptions = {},\n) {\n if (!GMAIL_SUPPORTED_CSS_PROPERTIES.has(property)) return undefined\n\n const trimmed = stripImportant(value.trim())\n if (!isSafeCssValue(trimmed)) return undefined\n\n CSS_URL_PATTERN.lastIndex = 0\n if (CSS_URL_PATTERN.test(trimmed)) {\n CSS_URL_PATTERN.lastIndex = 0\n if (!IMAGE_URL_CSS_PROPERTIES.has(property)) return undefined\n const rewritten = rewriteCssUrls(trimmed, options)\n CSS_URL_PATTERN.lastIndex = 0\n return rewritten\n }\n\n CSS_URL_PATTERN.lastIndex = 0\n return trimmed\n}\n\nexport function sanitizePlainAttribute(value: string) {\n let text = ''\n for (let i = 0; i < value.length; ++i) {\n const code = value.charCodeAt(i)\n if (code >= 32 && code !== 127) text += value[i]\n }\n\n return text.replace(/\\s+/g, ' ').trim()\n}\n\nexport function toSafeEmailImageUrl(value: string) {\n const trimmed = value.trim()\n if (!trimmed) return undefined\n\n const lower = trimmed.toLowerCase()\n if (lower.startsWith('cid:') || lower.startsWith('data:image/'))\n return trimmed\n\n try {\n const url = new URL(\n trimmed,\n globalThis.location?.href ?? 'https://localhost/',\n )\n if (url.protocol !== 'http:' && url.protocol !== 'https:') return undefined\n return url.href\n } catch {\n return undefined\n }\n}\n\nexport function normalizeEmailCidUrl(value: string) {\n const trimmed = value.trim()\n if (!trimmed.toLowerCase().startsWith('cid:')) return undefined\n\n const rawContentId = trimmed.slice(4)\n let decodedContentId = rawContentId\n try {\n decodedContentId = decodeURIComponent(rawContentId)\n } catch {\n decodedContentId = rawContentId\n }\n\n return normalizeEmailContentId(decodedContentId) || undefined\n}\n\nexport function normalizeEmailContentId(value: string) {\n let contentId = value.trim()\n if (contentId.length >= 2 && contentId[0] === '<' && contentId.at(-1) === '>')\n contentId = contentId.slice(1, -1).trim()\n\n return contentId.toLowerCase()\n}\n\nfunction stripImportant(value: string) {\n const trimmed = value.trim()\n return trimmed.slice(-10).toLowerCase() === '!important'\n ? trimmed.slice(0, -10).trimEnd()\n : trimmed\n}\n\nfunction isSafeCssValue(value: string) {\n return (\n value.length > 0 &&\n value.length <= 512 &&\n !hasUnsafeCssCharacter(value) &&\n !/(?:expression|behavior|binding)\\s*\\(/i.test(value) &&\n !/(?:javascript|vbscript)\\s*:/i.test(value) &&\n !/@import/i.test(value)\n )\n}\n\nfunction rewriteCssUrls(value: string, options: EmailHtmlPolicyOptions) {\n return value.replace(\n CSS_URL_PATTERN,\n (_match, doubleUrl, singleUrl, bareUrl) => {\n const rawUrl = doubleUrl ?? singleUrl ?? bareUrl ?? ''\n const proxiedUrl = options.imageUrlResolver\n ? options.imageUrlResolver(rawUrl.trim())\n : toSafeEmailImageUrl(rawUrl.trim())\n return proxiedUrl ? `url(\"${escapeCssUrl(proxiedUrl)}\")` : ''\n },\n )\n}\n\nfunction hasUnsafeCssCharacter(value: string) {\n for (let i = 0; i < value.length; ++i) {\n const code = value.charCodeAt(i)\n if (code < 32 || code === 127 || value[i] === '<' || value[i] === '>')\n return true\n }\n\n return false\n}\n\nfunction escapeCssUrl(value: string) {\n return value.replace(/[\"\\\\\\r\\n]/g, '')\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComponentHead,\n type ComputedRef,\n computed,\n defineComponent,\n html,\n observe,\n type Ref,\n type RefOrValue,\n ref,\n type SRef,\n sref,\n unref,\n} from 'regor'\nimport { createAutoId } from '../autoId'\nimport {\n type ComponentVariant,\n resolveComponentClasses,\n} from '../componentVariant'\nimport {\n copySafeEmailStyles,\n GMAIL_COMPATIBLE_EMAIL_TAGS,\n normalizeEmailCidUrl,\n sanitizePlainAttribute,\n toSafeEmailImageUrl,\n} from './emailHtmlPolicy'\n\nexport type ComposerCommand =\n | 'bold'\n | 'italic'\n | 'underline'\n | 'justifyLeft'\n | 'justifyCenter'\n | 'justifyRight'\n | 'insertUnorderedList'\n | 'insertOrderedList'\n | 'removeFormat'\n\nexport interface Composer {\n html?: Ref<string> | SRef<string>\n text?: Ref<string> | SRef<string>\n label?: RefOrValue<string>\n placeholder?: RefOrValue<string>\n disabled?: RefOrValue<boolean>\n focusOnMount?: RefOrValue<boolean>\n minHeight?: RefOrValue<number | string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n imagePreviewUrls?: RefOrValue<Record<string, string>>\n classes?: ComputedRef<string>\n editorStyle?: ComputedRef<Record<string, string>>\n sourceId?: string\n editorElement?: ReturnType<typeof sref<HTMLElement | null>>\n sourceHtml?: Ref<string>\n sourceMode?: Ref<boolean>\n format?: (command: ComposerCommand) => void\n createLink?: () => void\n toggleSourceMode?: () => void\n handleInput?: (event: Event) => void\n handlePaste?: (event: ClipboardEvent) => void\n handleDragOver?: (event: DragEvent) => void\n handleDrop?: (event: DragEvent) => void\n handleSourceInput?: (event: Event) => void\n}\n\nconst composerTemplate = html`<div class=\"composer-field\">\n <span class=\"composer-field__label\" r-if=\"label\"\n >{{ label }}</span\n >\n <div class=\"composer\" :class=\"classes\">\n <div class=\"composer__toolbar\" role=\"toolbar\" aria-label=\"Composer tools\">\n <button\n class=\"composer__tool\"\n type=\"button\"\n title=\"Bold\"\n aria-label=\"Bold\"\n :disabled=\"disabled\"\n @click=\"format('bold')\"\n >\n <Icon name=\"lucide:bold\"/>\n </button>\n <button\n class=\"composer__tool\"\n type=\"button\"\n title=\"Italic\"\n aria-label=\"Italic\"\n :disabled=\"disabled\"\n @click=\"format('italic')\"\n >\n <Icon name=\"lucide:italic\"/>\n </button>\n <button\n class=\"composer__tool\"\n type=\"button\"\n title=\"Underline\"\n aria-label=\"Underline\"\n :disabled=\"disabled\"\n @click=\"format('underline')\"\n >\n <Icon name=\"lucide:underline\"/>\n </button>\n <span class=\"composer__divider\" aria-hidden=\"true\"></span>\n <button\n class=\"composer__tool\"\n type=\"button\"\n title=\"Align left\"\n aria-label=\"Align left\"\n :disabled=\"disabled\"\n @click=\"format('justifyLeft')\"\n >\n <Icon name=\"tabler:align-left\"/>\n </button>\n <button\n class=\"composer__tool\"\n type=\"button\"\n title=\"Align center\"\n aria-label=\"Align center\"\n :disabled=\"disabled\"\n @click=\"format('justifyCenter')\"\n >\n <Icon name=\"tabler:align-center\"/>\n </button>\n <button\n class=\"composer__tool\"\n type=\"button\"\n title=\"Align right\"\n aria-label=\"Align right\"\n :disabled=\"disabled\"\n @click=\"format('justifyRight')\"\n >\n <Icon name=\"tabler:align-right\"/>\n </button>\n <span class=\"composer__divider\" aria-hidden=\"true\"></span>\n <button\n class=\"composer__tool\"\n type=\"button\"\n title=\"Bulleted list\"\n aria-label=\"Bulleted list\"\n :disabled=\"disabled\"\n @click=\"format('insertUnorderedList')\"\n >\n <Icon name=\"lucide:list\"/>\n </button>\n <button\n class=\"composer__tool\"\n type=\"button\"\n title=\"Numbered list\"\n aria-label=\"Numbered list\"\n :disabled=\"disabled\"\n @click=\"format('insertOrderedList')\"\n >\n <Icon name=\"lucide:list-ordered\"/>\n </button>\n <button\n class=\"composer__tool\"\n type=\"button\"\n title=\"Link\"\n aria-label=\"Link\"\n :disabled=\"disabled\"\n @click=\"createLink\"\n >\n <Icon name=\"lucide:link\"/>\n </button>\n <span class=\"composer__divider\" aria-hidden=\"true\"></span>\n <button\n class=\"composer__tool\"\n type=\"button\"\n title=\"Clear formatting\"\n aria-label=\"Clear formatting\"\n :disabled=\"disabled\"\n @click=\"format('removeFormat')\"\n >\n <Icon name=\"lucide:eraser\"/>\n </button>\n <button\n class=\"composer__tool composer__tool--source\"\n type=\"button\"\n title=\"HTML source\"\n aria-label=\"HTML source\"\n :aria-pressed=\"sourceMode ? 'true' : 'false'\"\n :disabled=\"disabled\"\n @click=\"toggleSourceMode\"\n >\n <Icon name=\"lucide:code\"/>\n </button>\n </div>\n <div class=\"composer__surface\">\n <div\n r-if=\"!sourceMode\"\n class=\"composer__editor\"\n :ref=\"editorElement\"\n :style=\"editorStyle\"\n :contenteditable=\"disabled ? 'false' : 'true'\"\n :data-placeholder=\"placeholder\"\n role=\"textbox\"\n :aria-label=\"label || placeholder || 'Message body'\"\n aria-multiline=\"true\"\n spellcheck=\"true\"\n @input=\"handleInput\"\n @paste=\"handlePaste\"\n @dragover=\"handleDragOver\"\n @drop=\"handleDrop\"\n ></div>\n <textarea\n r-if=\"sourceMode\"\n :id=\"sourceId\"\n class=\"composer__source\"\n :style=\"editorStyle\"\n :disabled=\"disabled\"\n :placeholder=\"placeholder\"\n :aria-label=\"label || placeholder || 'Message body source'\"\n spellcheck=\"false\"\n :value=\"sourceHtml\"\n @input=\"handleSourceInput\"\n ></textarea>\n </div>\n </div>\n</div>`\n\nfunction defineComposerComponent() {\n return defineComponent<Composer>(composerTemplate, {\n props: [\n 'html',\n 'text',\n 'label',\n 'placeholder',\n 'disabled',\n 'focusOnMount',\n 'minHeight',\n 'tone',\n 'variant',\n 'imagePreviewUrls',\n ],\n context: (head) => resolveComposer(head),\n })\n}\n\nexport function defineComposerComponents() {\n return {\n composer: defineComposerComponent(),\n }\n}\n\nclass ComposerContext implements Composer {\n readonly html: Ref<string> | SRef<string>\n readonly text: Ref<string> | SRef<string>\n readonly label?: RefOrValue<string>\n readonly placeholder?: RefOrValue<string>\n readonly disabled?: RefOrValue<boolean>\n readonly focusOnMount?: RefOrValue<boolean>\n readonly minHeight?: RefOrValue<number | string>\n readonly tone?: RefOrValue<SemanticTone>\n readonly variant?: RefOrValue<ComponentVariant>\n readonly imagePreviewUrls?: RefOrValue<Record<string, string>>\n readonly editorElement = sref<HTMLElement | null>(null)\n readonly sourceHtml = ref('')\n readonly sourceMode = ref(false)\n readonly classes: ComputedRef<string>\n readonly editorStyle: ComputedRef<Record<string, string>>\n readonly sourceId: string\n private writingModel = false\n\n constructor(props: Composer) {\n Object.assign(this, props)\n this.html = props.html ?? ref('')\n this.text = props.text ?? ref('')\n this.classes = computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: 'surfaceAlt',\n }),\n )\n this.editorStyle = computed<Record<string, string>>(() => ({\n minHeight: resolveCssSize(unref(props.minHeight), '13.75rem'),\n }))\n this.sourceId = resolveComposerSourceId()\n this.sourceHtml(this.sanitizeModelHtml(this.html()))\n this.text(htmlToText(this.sourceHtml()))\n observe(this.editorElement, () => {\n this.syncEditorFromModel()\n })\n observe(this.html, (value) => {\n if (this.writingModel) return\n this.syncFromExternalHtml(value)\n })\n if (typeof this.imagePreviewUrls === 'function') {\n observe(this.imagePreviewUrls, () => {\n this.syncEditorFromModel()\n })\n }\n }\n\n mounted = () => {\n if (unref(this.focusOnMount)) this.scheduleEditorFocus()\n }\n\n format = (command: ComposerCommand) => {\n if (unref(this.disabled) || this.sourceMode()) return\n this.focusEditor()\n document.execCommand(command)\n this.syncFromEditor()\n }\n\n createLink = () => {\n if (unref(this.disabled) || this.sourceMode()) return\n const href = sanitizeHref(prompt('Link URL') ?? '')\n if (!href) return\n\n this.focusEditor()\n document.execCommand('createLink', false, href)\n this.syncFromEditor()\n }\n\n toggleSourceMode = () => {\n if (this.sourceMode()) {\n this.writeModel(this.sourceHtml())\n this.sourceMode(false)\n this.syncEditorFromModel()\n return\n }\n\n this.sourceHtml(this.html())\n this.sourceMode(true)\n }\n\n handleInput = (_event: Event) => {\n if (unref(this.disabled) || this.sourceMode()) return\n this.syncFromEditor()\n }\n\n handlePaste = (event: ClipboardEvent) => {\n if (unref(this.disabled) || this.sourceMode()) return\n\n const data = event.clipboardData\n if (!data) return\n\n const files = Array.from(data.files ?? [])\n const htmlData = data.getData('text/html')\n const textData = data.getData('text/plain')\n if (files.length > 0) this.emitFiles(event, files)\n\n event.preventDefault()\n const nextHtml = htmlData\n ? this.sanitizeModelHtml(htmlData)\n : plainTextToHtml(textData)\n if (!nextHtml) return\n\n this.focusEditor()\n document.execCommand('insertHTML', false, nextHtml)\n this.syncFromEditor()\n }\n\n handleDragOver = (event: DragEvent) => {\n if (\n unref(this.disabled) ||\n this.sourceMode() ||\n !hasFileTransfer(event.dataTransfer)\n ) {\n return\n }\n\n event.preventDefault()\n if (event.dataTransfer) event.dataTransfer.dropEffect = 'copy'\n }\n\n handleDrop = (event: DragEvent) => {\n if (\n unref(this.disabled) ||\n this.sourceMode() ||\n !hasFileTransfer(event.dataTransfer)\n ) {\n return\n }\n\n event.preventDefault()\n const files = Array.from(event.dataTransfer?.files ?? [])\n if (files.length > 0) this.emitFiles(event, files)\n }\n\n handleSourceInput = (event: Event) => {\n if (unref(this.disabled)) return\n\n const target = event.currentTarget\n if (!(target instanceof HTMLTextAreaElement)) return\n\n this.sourceHtml(target.value)\n this.writeSourceModel(target.value)\n }\n\n private syncFromEditor() {\n const element = this.editorElement()\n if (!element) return\n\n const value = this.readModelHtmlFromEditor(element)\n this.writeModel(value)\n if (!value) this.syncEditorFromModel()\n }\n\n private syncFromExternalHtml(value: string) {\n const sanitized = this.sanitizeModelHtml(value)\n if (sanitized !== value) {\n this.writeModel(sanitized)\n this.syncEditorFromModel()\n return\n }\n\n this.sourceHtml(sanitized)\n this.text(htmlToText(sanitized))\n this.syncEditorFromModel()\n }\n\n private syncEditorFromModel() {\n const element = this.editorElement()\n if (!element || this.sourceMode()) return\n\n const sanitized = this.toEditorHtml(this.html())\n if (element.innerHTML !== sanitized) element.innerHTML = sanitized\n }\n\n private writeModel(value: string) {\n const sanitized = this.sanitizeModelHtml(value)\n this.writingModel = true\n this.html(sanitized)\n this.text(htmlToText(sanitized))\n this.sourceHtml(sanitized)\n this.writingModel = false\n }\n\n private writeSourceModel(value: string) {\n const sanitized = this.sanitizeModelHtml(value)\n this.writingModel = true\n this.html(sanitized)\n this.text(htmlToText(sanitized))\n this.writingModel = false\n }\n\n private focusEditor() {\n const element = this.editorElement()\n if (element) element.focus()\n }\n\n private scheduleEditorFocus(attempt = 0) {\n requestAnimationFrame(() => {\n this.syncEditorFromModel()\n if (this.focusEditorForWriting()) return\n if (attempt >= FOCUS_RETRY_COUNT) return\n\n setTimeout(\n () => this.scheduleEditorFocus(attempt + 1),\n FOCUS_RETRY_DELAY_MS,\n )\n })\n }\n\n private focusEditorForWriting() {\n const element = this.editorElement()\n if (!element || this.sourceMode() || unref(this.disabled)) return false\n if (!isVisibleForFocus(element)) return false\n\n element.focus({ preventScroll: true })\n const target = findWritingStartNode(element)\n const range = document.createRange()\n if (target instanceof Text) {\n range.setStart(target, 0)\n } else {\n range.setStart(target, 0)\n }\n range.collapse(true)\n\n const selection = window.getSelection()\n selection?.removeAllRanges()\n selection?.addRange(range)\n return document.activeElement === element\n }\n\n private emitFiles(event: Event, files: File[]) {\n const target = event.currentTarget\n if (!(target instanceof EventTarget)) return\n\n target.dispatchEvent(\n new CustomEvent('files', {\n bubbles: true,\n detail: { files },\n }),\n )\n }\n\n private sanitizeModelHtml(value: string | undefined) {\n return sanitizeHtml(value, {\n imageUrlResolver: (url) => this.toModelImageUrl(url),\n deferCidImageSrc: true,\n })\n }\n\n private toEditorHtml(value: string | undefined) {\n const sanitized = sanitizeHtml(value, {\n imageUrlResolver: (url) => this.toEditorImageUrl(url),\n })\n return sanitized || createEmptyEditorHtml(unref(this.placeholder))\n }\n\n private readModelHtmlFromEditor(element: HTMLElement) {\n if (!hasMeaningfulEditorContent(element)) return ''\n\n return this.sanitizeModelHtml(element.innerHTML)\n }\n\n private toEditorImageUrl(value: string) {\n const contentId = normalizeEmailCidUrl(value)\n if (contentId) {\n const previewUrls = this.readImagePreviewUrls()\n const previewUrl = previewUrls[contentId]\n if (typeof previewUrl === 'string' && previewUrl) return previewUrl\n return TRANSPARENT_IMAGE_DATA_URL\n }\n\n return toSafeEmailImageUrl(value)\n }\n\n private toModelImageUrl(value: string) {\n const contentId = this.findPreviewContentId(value)\n if (contentId) return `cid:${contentId}`\n return toSafeEmailImageUrl(value)\n }\n\n private findPreviewContentId(value: string) {\n const urls = this.readImagePreviewUrls()\n for (const [contentId, url] of Object.entries(urls))\n if (url === value) return contentId\n\n return ''\n }\n\n private readImagePreviewUrls() {\n return (unref(this.imagePreviewUrls) ?? {}) as Record<string, string>\n }\n}\n\nconst resolveComposerSourceId = createAutoId('composer-source')\nexport const COMPOSER_BODY_STYLE = 'padding:1rem'\nconst FOCUS_RETRY_COUNT = 12\nconst FOCUS_RETRY_DELAY_MS = 25\n\nfunction resolveComposer(head: ComponentHead<Composer>) {\n return new ComposerContext(head.props) as Composer\n}\n\nexport function createComposerBodyHtml(contentHtml = '', placeholder?: string) {\n const placeholderAttribute = placeholder\n ? ` data-placeholder=\"${escapeHtmlAttribute(placeholder)}\"`\n : ''\n return `<div data-composer-body=\"true\"${placeholderAttribute} style=\"${COMPOSER_BODY_STYLE}\">${contentHtml}</div>`\n}\n\nfunction createEmptyEditorHtml(placeholder: string | undefined) {\n return createComposerBodyHtml('', placeholder)\n}\n\nfunction resolveCssSize(value: number | string | undefined, fallback: string) {\n if (typeof value === 'number') return `${Math.max(0, value)}px`\n if (typeof value === 'string' && value.trim()) return value\n return fallback\n}\n\nconst COMPOSER_BLOCKED_CONTAINER_TAGS = new Set(['BODY', 'HTML', 'STYLE'])\nconst DROPPED_TAGS = new Set([\n 'AREA',\n 'AUDIO',\n 'BASE',\n 'BUTTON',\n 'CANVAS',\n 'EMBED',\n 'FORM',\n 'HEAD',\n 'IFRAME',\n 'INPUT',\n 'LINK',\n 'MAP',\n 'META',\n 'NOSCRIPT',\n 'OBJECT',\n 'OPTION',\n 'SCRIPT',\n 'SELECT',\n 'SOURCE',\n 'STYLE',\n 'TEMPLATE',\n 'TEXTAREA',\n 'TITLE',\n 'VIDEO',\n])\nconst ALLOWED_TAGS = new Set(\n Array.from(GMAIL_COMPATIBLE_EMAIL_TAGS).filter(\n (tag) => !COMPOSER_BLOCKED_CONTAINER_TAGS.has(tag),\n ),\n)\n\nconst TRANSPARENT_IMAGE_DATA_URL =\n 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw=='\n\ninterface SanitizeHtmlOptions {\n imageUrlResolver?: (url: string) => string | undefined\n deferCidImageSrc?: boolean\n}\n\nfunction sanitizeHtml(\n value: string | undefined,\n options: SanitizeHtmlOptions = {},\n) {\n const raw = value ?? ''\n if (!raw.trim()) return ''\n if (typeof document === 'undefined') return escapeHtml(raw.trim())\n\n const template = document.createElement('template')\n template.innerHTML = raw\n const output = document.createDocumentFragment()\n for (const child of Array.from(template.content.childNodes)) {\n appendSanitizedNode(output, child, options)\n }\n const wrapper = document.createElement('div')\n wrapper.appendChild(output)\n const html = wrapper.innerHTML.trim()\n return options.deferCidImageSrc ? restoreDeferredCidImageSources(html) : html\n}\n\nfunction appendSanitizedNode(\n parent: Node,\n node: Node,\n options: SanitizeHtmlOptions,\n) {\n if (node.nodeType === Node.TEXT_NODE) {\n parent.appendChild(document.createTextNode(node.textContent ?? ''))\n return\n }\n if (!(node instanceof HTMLElement)) return\n\n const tag = node.tagName.toUpperCase()\n if (!ALLOWED_TAGS.has(tag)) {\n if (DROPPED_TAGS.has(tag)) return\n\n for (const child of Array.from(node.childNodes))\n appendSanitizedNode(parent, child, options)\n return\n }\n\n if (tag === 'A') {\n const href = sanitizeHref(node.getAttribute('href') ?? '')\n if (!href) {\n for (const child of Array.from(node.childNodes))\n appendSanitizedNode(parent, child, options)\n return\n }\n }\n const imageSrc =\n tag === 'IMG'\n ? sanitizeImageSrc(node.getAttribute('src') ?? '', options)\n : undefined\n if (tag === 'IMG' && !imageSrc) return\n\n const element = document.createElement(tag.toLowerCase())\n if (tag === 'A') {\n element.setAttribute(\n 'href',\n sanitizeHref(node.getAttribute('href') ?? '') ?? '',\n )\n element.setAttribute('target', '_blank')\n element.setAttribute('rel', 'noopener noreferrer')\n }\n if (tag === 'IMG') {\n if (\n options.deferCidImageSrc &&\n imageSrc &&\n normalizeEmailCidUrl(imageSrc)\n ) {\n element.setAttribute('data-composer-cid-src', imageSrc)\n } else {\n element.setAttribute('src', imageSrc ?? '')\n }\n const alt = sanitizePlainAttribute(node.getAttribute('alt') ?? '')\n const title = sanitizePlainAttribute(node.getAttribute('title') ?? '')\n if (alt) element.setAttribute('alt', alt)\n if (title) element.setAttribute('title', title)\n }\n\n copyAllowedAttributes(node, element, tag)\n copySafeEmailStyles(node, element, {\n imageUrlResolver: options.imageUrlResolver,\n })\n\n for (const child of Array.from(node.childNodes))\n appendSanitizedNode(element, child, options)\n parent.appendChild(element)\n}\n\nfunction sanitizeImageSrc(value: string, options: SanitizeHtmlOptions) {\n return options.imageUrlResolver\n ? options.imageUrlResolver(value)\n : toSafeEmailImageUrl(value)\n}\n\nfunction restoreDeferredCidImageSources(html: string) {\n return html.replace(/\\sdata-composer-cid-src=\"([^\"]*)\"/g, ' src=\"$1\"')\n}\n\nfunction sanitizeHref(value: string) {\n const parsed = parseUrl(value)\n if (!parsed) return undefined\n\n if (\n parsed.protocol !== 'http:' &&\n parsed.protocol !== 'https:' &&\n parsed.protocol !== 'mailto:'\n )\n return undefined\n\n if (parsed.protocol === 'mailto:') return parsed.href\n return parsed.toString()\n}\n\nfunction parseUrl(value: string) {\n const trimmed = value.trim()\n if (!trimmed) return undefined\n if (typeof URL === 'undefined') return undefined\n\n try {\n return new URL(trimmed, globalThis.location?.href ?? 'https://localhost/')\n } catch {\n return undefined\n }\n}\n\nfunction hasFileTransfer(dataTransfer: DataTransfer | null) {\n if (!dataTransfer) return false\n return Array.from(dataTransfer.types).includes('Files')\n}\n\nfunction copyAllowedAttributes(\n source: HTMLElement,\n target: HTMLElement,\n tag: string,\n) {\n if (tag === 'TABLE') {\n copyDimensionAttribute(source, target, 'width')\n copyNumberAttribute(source, target, 'border', 0, 20)\n copyNumberAttribute(source, target, 'cellpadding', 0, 80)\n copyNumberAttribute(source, target, 'cellspacing', 0, 80)\n copyKeywordAttribute(source, target, 'align', ['center', 'left', 'right'])\n copyKeywordAttribute(source, target, 'role', ['none', 'presentation'])\n return\n }\n\n if (tag === 'COL' || tag === 'COLGROUP') {\n copyDimensionAttribute(source, target, 'width')\n copyNumberAttribute(source, target, 'span', 1, 100)\n copyKeywordAttribute(source, target, 'align', ['center', 'left', 'right'])\n return\n }\n\n if (tag === 'TD' || tag === 'TH') {\n copyDimensionAttribute(source, target, 'width')\n copyDimensionAttribute(source, target, 'height')\n copyNumberAttribute(source, target, 'colspan', 1, 100)\n copyNumberAttribute(source, target, 'rowspan', 1, 100)\n copyKeywordAttribute(source, target, 'align', [\n 'center',\n 'justify',\n 'left',\n 'right',\n ])\n copyKeywordAttribute(source, target, 'valign', [\n 'baseline',\n 'bottom',\n 'middle',\n 'top',\n ])\n copyKeywordAttribute(source, target, 'aria-hidden', ['false', 'true'])\n return\n }\n\n if (tag === 'TR') {\n copyKeywordAttribute(source, target, 'align', [\n 'center',\n 'justify',\n 'left',\n 'right',\n ])\n copyKeywordAttribute(source, target, 'valign', [\n 'baseline',\n 'bottom',\n 'middle',\n 'top',\n ])\n }\n\n if (tag === 'FONT') {\n copyPlainAttribute(source, target, 'face')\n copyColorAttribute(source, target, 'color')\n copyFontSizeAttribute(source, target, 'size')\n return\n }\n\n if (tag === 'OL') {\n copyNumberAttribute(source, target, 'start', 1, 9999)\n copyKeywordAttribute(source, target, 'type', ['1', 'a', 'A', 'i', 'I'])\n }\n}\n\nfunction copyPlainAttribute(\n source: HTMLElement,\n target: HTMLElement,\n name: string,\n) {\n const value = sanitizePlainAttribute(source.getAttribute(name) ?? '')\n if (value) target.setAttribute(name, value)\n}\n\nfunction copyColorAttribute(\n source: HTMLElement,\n target: HTMLElement,\n name: string,\n) {\n const value = sanitizeColorAttribute(source.getAttribute(name) ?? '')\n if (value) target.setAttribute(name, value)\n}\n\nfunction copyFontSizeAttribute(\n source: HTMLElement,\n target: HTMLElement,\n name: string,\n) {\n const value = sanitizeFontSizeAttribute(source.getAttribute(name) ?? '')\n if (value) target.setAttribute(name, value)\n}\n\nfunction copyDimensionAttribute(\n source: HTMLElement,\n target: HTMLElement,\n name: string,\n) {\n const value = sanitizeHtmlDimension(source.getAttribute(name) ?? '')\n if (value) target.setAttribute(name, value)\n}\n\nfunction copyNumberAttribute(\n source: HTMLElement,\n target: HTMLElement,\n name: string,\n min: number,\n max: number,\n) {\n const value = sanitizeIntegerAttribute(\n source.getAttribute(name) ?? '',\n min,\n max,\n )\n if (value) target.setAttribute(name, value)\n}\n\nfunction copyKeywordAttribute(\n source: HTMLElement,\n target: HTMLElement,\n name: string,\n allowed: string[],\n) {\n const value = sanitizeKeyword(source.getAttribute(name) ?? '', allowed)\n if (value) target.setAttribute(name, value)\n}\n\nfunction sanitizeHtmlDimension(value: string) {\n const trimmed = value.trim()\n const match = /^(\\d{1,4})(%)?$/.exec(trimmed)\n if (!match) return undefined\n\n const amount = Number(match[1])\n if (!Number.isFinite(amount)) return undefined\n if (match[2]) return `${Math.min(100, Math.max(1, amount))}%`\n return String(Math.min(2400, Math.max(0, amount)))\n}\n\nfunction sanitizeIntegerAttribute(value: string, min: number, max: number) {\n const match = /^\\d{1,4}$/.exec(value.trim())\n if (!match) return undefined\n\n const amount = Number(match[0])\n if (!Number.isFinite(amount)) return undefined\n return String(Math.min(max, Math.max(min, amount)))\n}\n\nfunction sanitizeKeyword(value: string, allowed: string[]) {\n const normalized = value.trim()\n const exactMatch = allowed.find((item) => item === normalized)\n if (exactMatch) return exactMatch\n\n const match = allowed.find(\n (item) => item.toLowerCase() === normalized.toLowerCase(),\n )\n return match\n}\n\nfunction sanitizeColorAttribute(value: string) {\n const normalized = value.trim()\n if (\n /^#[0-9a-f]{3}([0-9a-f]{3})?$/i.test(normalized) ||\n /^[a-z]{3,24}$/i.test(normalized)\n ) {\n return normalized\n }\n\n return undefined\n}\n\nfunction sanitizeFontSizeAttribute(value: string) {\n const match = /^[+-]?\\d$/.exec(value.trim())\n if (!match) return undefined\n\n const amount = Number(match[0])\n if (!Number.isFinite(amount)) return undefined\n return String(Math.min(7, Math.max(-7, amount)))\n}\n\nfunction htmlToText(value: string) {\n if (!value.trim()) return ''\n\n const template = document.createElement('template')\n template.innerHTML = sanitizeHtml(value, {\n deferCidImageSrc: true,\n })\n const lines: string[] = []\n collectText(template.content, lines)\n return lines\n .join('\\n')\n .replace(/[ \\t]+\\n/g, '\\n')\n .replace(/\\n{3,}/g, '\\n\\n')\n .trim()\n}\n\nfunction hasMeaningfulEditorContent(node: Node) {\n if (node.nodeType === Node.TEXT_NODE) return !!node.textContent?.trim()\n if (!(node instanceof HTMLElement || node instanceof DocumentFragment))\n return false\n\n if (node instanceof HTMLElement) {\n const tag = node.tagName.toUpperCase()\n if (tag === 'IMG' || tag === 'HR') return true\n if (tag === 'BR') return false\n }\n\n for (const child of Array.from(node.childNodes))\n if (hasMeaningfulEditorContent(child)) return true\n\n return false\n}\n\nfunction findWritingStartNode(root: HTMLElement): Node {\n for (const child of Array.from(root.childNodes)) {\n if (child instanceof HTMLElement && isEmptyWritingBlock(child)) return child\n if (child.nodeType === Node.TEXT_NODE && child.textContent?.trim())\n return child\n }\n\n return root\n}\n\nfunction isVisibleForFocus(element: HTMLElement) {\n return element.isConnected && element.getClientRects().length > 0\n}\n\nfunction isEmptyWritingBlock(element: HTMLElement) {\n const tag = element.tagName.toUpperCase()\n if (tag !== 'P' && tag !== 'DIV') return false\n if (element.querySelector('img, table, hr')) return false\n return !element.textContent?.trim()\n}\n\nfunction collectText(node: Node, lines: string[]) {\n if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent?.replace(/\\s+/g, ' ') ?? ''\n if (!text) return\n if (lines.length === 0) lines.push(text)\n else lines[lines.length - 1] += text\n return\n }\n if (!(node instanceof HTMLElement || node instanceof DocumentFragment)) return\n\n const isBlock =\n node instanceof HTMLElement &&\n [\n 'ADDRESS',\n 'BLOCKQUOTE',\n 'CAPTION',\n 'CENTER',\n 'DD',\n 'DIV',\n 'DL',\n 'DT',\n 'H1',\n 'H2',\n 'H3',\n 'H4',\n 'H5',\n 'H6',\n 'HR',\n 'LI',\n 'OL',\n 'P',\n 'PRE',\n 'TABLE',\n 'TBODY',\n 'TD',\n 'TFOOT',\n 'TH',\n 'THEAD',\n 'TR',\n 'UL',\n ].includes(node.tagName.toUpperCase())\n if (isBlock && lines[lines.length - 1]?.trim()) lines.push('')\n if (node instanceof HTMLElement && node.tagName.toUpperCase() === 'BR') {\n lines.push('')\n return\n }\n\n for (const child of Array.from(node.childNodes)) collectText(child, lines)\n if (isBlock && lines[lines.length - 1]?.trim()) lines.push('')\n}\n\nfunction plainTextToHtml(value: string) {\n const text = value.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n').trim()\n if (!text) return ''\n\n return text\n .split(/\\n{2,}/)\n .map(\n (paragraph) =>\n `<p>${paragraph.split('\\n').map(escapeHtml).join('<br>')}</p>`,\n )\n .join('')\n}\n\nfunction escapeHtml(value: string) {\n return value\n .replaceAll('&', '&amp;')\n .replaceAll('<', '&lt;')\n .replaceAll('>', '&gt;')\n .replaceAll('\"', '&quot;')\n .replaceAll(\"'\", '&#39;')\n}\n\nfunction escapeHtmlAttribute(value: string) {\n return escapeHtml(value).replaceAll('`', '&#96;')\n}\n","import type {\n ConsentCategory,\n ConsentConfig,\n PageContext,\n} from '@purestack/ts-common'\nimport { resolvePageContext } from '@purestack/ts-common'\nimport type { SemanticTone } from '@purestack/ts-style'\nimport { defineComponent, html, type RefOrValue } from 'regor'\nimport type {\n ComponentVariant,\n ComponentVariantMode,\n} from '../componentVariant'\n\nexport interface ConsentCategoryState extends ConsentCategory {\n inputId?: string\n}\n\nexport interface Consent extends ConsentConfig {\n settingsTeleport?: string\n categories: ConsentCategoryState[]\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n}\n\nconst consentTemplate = html`<section class=\"consent\" data-consent-root r-if=\"enabled\">\n <aside\n class=\"consent__banner\"\n data-consent-banner\n role=\"dialog\"\n aria-live=\"polite\"\n aria-modal=\"false\"\n hidden\n aria-hidden=\"true\"\n >\n <Panel\n :tone=\"tone || 'neutral'\"\n :variant=\"variant || 'surfaceAlt'\"\n :variantMode=\"variantMode\"\n >\n <Flex direction=\"column\" align=\"start\">\n <strong>{{ bannerTitle }}</strong>\n <span>{{ bannerDescription }}</span>\n <BtnLink\n r-if=\"privacyPolicyUrl\"\n :href=\"privacyPolicyUrl\"\n tone=\"neutral\"\n variant=\"link\"\n >\n {{ privacyPolicyLabel }}\n </BtnLink>\n <Flex align=\"center\" wrap=\"true\">\n <Btn tone=\"accent\" data-consent-action=\"accept-all\">\n {{ acceptAllLabel }}\n </Btn>\n <Btn tone=\"neutral\" data-consent-action=\"reject-all\">\n {{ rejectAllLabel }}\n </Btn>\n <Btn tone=\"neutral\" data-consent-action=\"open-panel\">\n {{ manageLabel }}\n </Btn>\n </Flex>\n </Flex>\n </Panel>\n </aside>\n\n <section\n class=\"consent__panel\"\n data-consent-panel\n role=\"dialog\"\n aria-modal=\"false\"\n hidden\n aria-hidden=\"true\"\n >\n <Panel\n :tone=\"tone || 'neutral'\"\n :variant=\"variant || 'surfaceAlt'\"\n :variantMode=\"variantMode\"\n >\n <Flex direction=\"column\" align=\"start\">\n <Flex align=\"center\" justify=\"between\" class=\"w-full\">\n <strong>{{ manageLabel }}</strong>\n <Btn\n tone=\"ghost\"\n size=\"sm\"\n data-consent-action=\"close-panel\"\n aria-label=\"Close privacy settings\"\n >\n <span aria-hidden=\"true\">X</span>\n </Btn>\n </Flex>\n\n <Flex direction=\"column\" align=\"stretch\" class=\"w-full\">\n <Panel\n r-for=\"category in categories\"\n tone=\"neutral\"\n variant=\"outline\"\n >\n <Flex direction=\"column\" align=\"start\">\n <FormCheck\n :id=\"category.inputId\"\n :label=\"category.label\"\n :checked=\"category.required\"\n :disabled=\"category.required\"\n :described-by=\"category.description ? category.inputId + '-desc' : undefined\"\n :data-consent-category-id=\"category.id\"/>\n <small\n r-if=\"category.description\"\n :id=\"category.inputId + '-desc'\"\n >\n {{ category.description }}\n </small>\n </Flex>\n </Panel>\n </Flex>\n\n <Flex align=\"center\" wrap=\"true\">\n <Btn tone=\"accent\" data-consent-action=\"save\">\n {{ saveLabel }}\n </Btn>\n <Btn tone=\"accent\" data-consent-action=\"accept-all\">\n {{ acceptAllLabel }}\n </Btn>\n <Btn tone=\"neutral\" data-consent-action=\"reject-all\">\n {{ rejectAllLabel }}\n </Btn>\n </Flex>\n </Flex>\n </Panel>\n </section>\n\n <Btn\n tone=\"ghost\"\n size=\"sm\"\n data-consent-settings\n data-consent-action=\"open-panel\"\n :r-teleport=\"settingsTeleport\"\n hidden\n >\n {{ settingsLabel }}\n </Btn>\n</section>`\n\nfunction defineConsentComponent() {\n return defineComponent<Consent>(consentTemplate, {\n props: ['tone', 'variant', 'variantMode'],\n context: (head) => resolveConsent(resolvePageContext(head), head.props),\n })\n}\n\nfunction resolveConsent(\n context: PageContext,\n props: Partial<Consent>,\n): Consent {\n const consent = context.site.consent\n const categories = consent.categories.map((category) => ({\n id: category.id,\n label: category.label,\n description: category.description,\n required: category.required === true || category.id === 'necessary',\n inputId: `consent-category-${category.id}`,\n }))\n return {\n ...consent,\n tone: props.tone,\n variant: props.variant,\n variantMode: props.variantMode,\n settingsTeleport: '.consent-settings-teleport-area',\n categories,\n }\n}\n\nexport function defineConsentComponents() {\n return { consent: defineConsentComponent() }\n}\n","import { defineComponent, html } from 'regor'\n\nexport type ContactFormMethod = 'get' | 'post'\n\nexport interface ContactForm {\n title?: string\n description?: string\n action?: string\n method?: ContactFormMethod\n submitLabel?: string\n nameLabel?: string\n emailLabel?: string\n topicLabel?: string\n messageLabel?: string\n namePlaceholder?: string\n emailPlaceholder?: string\n messagePlaceholder?: string\n topicGeneralLabel?: string\n topicSupportLabel?: string\n topicPartnershipLabel?: string\n resolvedMethod?: ContactFormMethod\n}\n\nconst contactFormTemplate = html`<section class=\"contact-form\">\n <div class=\"contact-form__header\">\n <h3 class=\"contact-form__title\">{{ title }}</h3>\n <p class=\"contact-form__description\">{{ description }}</p>\n </div>\n <form\n class=\"contact-form__form\"\n :action=\"action\"\n :method=\"resolvedMethod\"\n enctype=\"text/plain\"\n >\n <label class=\"contact-form__field\">\n <span class=\"contact-form__label\">{{ nameLabel }}</span>\n <input\n class=\"contact-form__input\"\n type=\"text\"\n name=\"name\"\n :placeholder=\"namePlaceholder\"\n required\n autocomplete=\"name\"\n />\n </label>\n <label class=\"contact-form__field\">\n <span class=\"contact-form__label\">{{ emailLabel }}</span>\n <input\n class=\"contact-form__input\"\n type=\"email\"\n name=\"email\"\n :placeholder=\"emailPlaceholder\"\n required\n autocomplete=\"email\"\n />\n </label>\n <label class=\"contact-form__field\">\n <span class=\"contact-form__label\">{{ topicLabel }}</span>\n <select class=\"contact-form__select\" name=\"topic\" required>\n <option>{{ topicGeneralLabel }}</option>\n <option>{{ topicSupportLabel }}</option>\n <option>{{ topicPartnershipLabel }}</option>\n </select>\n </label>\n <label class=\"contact-form__field\">\n <span class=\"contact-form__label\">{{ messageLabel }}</span>\n <textarea\n class=\"contact-form__textarea\"\n name=\"message\"\n rows=\"6\"\n :placeholder=\"messagePlaceholder\"\n required\n ></textarea>\n </label>\n <div class=\"contact-form__actions\">\n <Btn type=\"submit\">\n {{ submitLabel }}\n </Btn>\n </div>\n </form>\n</section>`\n\nfunction defineContactFormComponent() {\n return defineComponent<ContactForm>(contactFormTemplate, {\n props: [\n 'title',\n 'description',\n 'action',\n 'method',\n 'submitLabel',\n 'nameLabel',\n 'emailLabel',\n 'topicLabel',\n 'messageLabel',\n 'namePlaceholder',\n 'emailPlaceholder',\n 'messagePlaceholder',\n 'topicGeneralLabel',\n 'topicSupportLabel',\n 'topicPartnershipLabel',\n ],\n context: (head) => resolveContactForm(head.props),\n })\n}\n\nexport function defineContactFormComponents() {\n return {\n contactForm: defineContactFormComponent(),\n }\n}\n\nfunction resolveContactForm(props: ContactForm): ContactForm {\n const normalizedMethod = props.method?.trim().toLowerCase()\n return {\n title: props.title || 'Send a message',\n description:\n props.description ||\n 'Share context and goals so we can route your request quickly.',\n action: props.action || 'mailto:team@purestack.dev',\n method: props.method || 'post',\n resolvedMethod: normalizedMethod === 'get' ? 'get' : 'post',\n submitLabel: props.submitLabel || 'Send Message',\n nameLabel: props.nameLabel || 'Name',\n emailLabel: props.emailLabel || 'Email',\n topicLabel: props.topicLabel || 'Topic',\n messageLabel: props.messageLabel || 'Message',\n namePlaceholder: props.namePlaceholder || 'Your name',\n emailPlaceholder: props.emailPlaceholder || 'name@company.com',\n messagePlaceholder:\n props.messagePlaceholder || 'Tell us what you are trying to solve.',\n topicGeneralLabel: props.topicGeneralLabel || 'General inquiry',\n topicSupportLabel: props.topicSupportLabel || 'Technical support',\n topicPartnershipLabel: props.topicPartnershipLabel || 'Partnership',\n }\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComputedRef,\n computed,\n defineComponent,\n type RefOrValue,\n svg,\n unref,\n} from 'regor'\nimport { createAutoId } from '../autoId'\nimport {\n DEFAULT_CHART_COLORS,\n DEFAULT_CHART_EMPTY_LABEL,\n DEFAULT_CHART_SIZE,\n} from '../chart/chartDefaults'\nimport {\n clampChartNumber,\n formatChartNumber,\n formatChartPoint,\n formatChartValue,\n readChartNumber,\n resolveChartCssSize,\n resolveChartSize,\n resolveChartText,\n} from '../chart/chartUtils'\nimport type {\n ComponentVariant,\n ComponentVariantMode,\n} from '../componentVariant'\nimport { resolveComponentClasses } from '../componentVariant'\n\nexport interface DoughnutChartSegment {\n label?: RefOrValue<string>\n value?: RefOrValue<number | string>\n color?: RefOrValue<string>\n}\n\nexport interface ResolvedDoughnutChartSegment {\n label: string\n value: number\n percent: number\n formattedValue: string\n path: string\n color: string\n}\n\nexport interface ResolvedDoughnutChartSeparator {\n path: string\n}\n\nexport interface DoughnutChart {\n segments?: RefOrValue<Array<RefOrValue<DoughnutChartSegment>>>\n title?: RefOrValue<string>\n description?: RefOrValue<string>\n ariaLabel?: RefOrValue<string>\n centerLabel?: RefOrValue<string>\n centerValue?: RefOrValue<string>\n centerLabelSize?: RefOrValue<number | string>\n centerValueSize?: RefOrValue<number | string>\n emptyLabel?: RefOrValue<string>\n valueSuffix?: RefOrValue<string>\n size?: RefOrValue<number | string>\n thickness?: RefOrValue<number | string>\n gap?: RefOrValue<number | string>\n startAngle?: RefOrValue<number | string>\n animated?: RefOrValue<boolean | string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n classes?: ComputedRef<string>\n resolvedSize?: ComputedRef<string | number>\n resolvedAriaLabel?: ComputedRef<string>\n resolvedEmptyLabel?: ComputedRef<string>\n chartSegments?: ComputedRef<ResolvedDoughnutChartSegment[]>\n separators?: ComputedRef<ResolvedDoughnutChartSeparator[]>\n hasSeparators?: ComputedRef<boolean>\n separatorMaskId?: string\n separatorMaskUrl?: ComputedRef<string | undefined>\n hasSegments?: ComputedRef<boolean>\n total?: ComputedRef<number>\n centerValueText?: ComputedRef<string>\n centerLabelStyle?: ComputedRef<Record<string, string> | undefined>\n centerValueStyle?: ComputedRef<Record<string, string> | undefined>\n trackPath?: ComputedRef<string>\n}\n\nconst CHART_CENTER = 50\nconst CHART_OUTER_RADIUS = 46\nconst DEFAULT_CHART_THICKNESS = 14\nconst DEFAULT_CHART_GAP = 2\nconst DEFAULT_CHART_START_ANGLE = -90\nconst FULL_CIRCLE = 360\nconst MAX_SEPARATOR_SEGMENT_SHARE = 0.15\nconst MIN_SEPARATOR_WIDTH = 0.25\nconst SEPARATOR_MASK_BLEED = 0.35\nconst resolveDoughnutChartMaskId = createAutoId('doughnut-chart-mask')\n\nconst doughnutChartTemplate = svg`<svg\n class=\"doughnut-chart\"\n :class=\"classes\"\n viewBox=\"0 0 100 100\"\n :width=\"resolvedSize\"\n :height=\"resolvedSize\"\n role=\"img\"\n :aria-label=\"resolvedAriaLabel\"\n>\n <title r-if=\"title\">{{ title }}</title>\n <desc r-if=\"description\">{{ description }}</desc>\n <defs r-if=\"hasSeparators\">\n <mask\n class=\"doughnut-chart__separator-mask\"\n :id=\"separatorMaskId\"\n maskUnits=\"userSpaceOnUse\"\n x=\"0\"\n y=\"0\"\n width=\"100\"\n height=\"100\"\n >\n <rect x=\"0\" y=\"0\" width=\"100\" height=\"100\" fill=\"white\"/>\n <path\n r-for=\"separator in separators\"\n class=\"doughnut-chart__separator\"\n :d=\"separator.path\"\n fill=\"black\"/>\n </mask>\n </defs>\n <g class=\"doughnut-chart__plot\" :mask=\"separatorMaskUrl\">\n <animate\n r-if=\"animated\"\n attributeName=\"opacity\"\n from=\"0\"\n to=\"1\"\n dur=\"560ms\"\n fill=\"freeze\"/>\n <animateTransform\n r-if=\"animated\"\n attributeName=\"transform\"\n type=\"rotate\"\n from=\"-90 50 50\"\n to=\"0 50 50\"\n dur=\"1760ms\"\n calcMode=\"spline\"\n keyTimes=\"0;1\"\n keySplines=\"0.16 1 0.3 1\"\n fill=\"freeze\"/>\n <path class=\"doughnut-chart__track\" :d=\"trackPath\" fill-rule=\"evenodd\"/>\n <g class=\"doughnut-chart__segments\" r-if=\"hasSegments\">\n <path\n r-for=\"segment in chartSegments\"\n class=\"doughnut-chart__segment\"\n :d=\"segment.path\"\n :fill=\"segment.color\"\n :aria-label=\"segment.label + ': ' + segment.formattedValue\"\n fill-rule=\"evenodd\"\n >\n <title>{{ segment.label + ': ' + segment.formattedValue }}</title>\n </path>\n </g>\n </g>\n <g class=\"doughnut-chart__center\" r-if=\"centerValueText || centerLabel\">\n <animate\n r-if=\"animated\"\n attributeName=\"opacity\"\n from=\"0\"\n to=\"1\"\n dur=\"360ms\"\n fill=\"freeze\"/>\n <text\n class=\"doughnut-chart__center-value\"\n x=\"50\"\n :y=\"centerLabel ? 48 : 52\"\n text-anchor=\"middle\"\n :style=\"centerValueStyle\"\n >\n {{ centerValueText }}\n </text>\n <text\n r-if=\"centerLabel\"\n class=\"doughnut-chart__center-label\"\n x=\"50\"\n y=\"61\"\n text-anchor=\"middle\"\n :style=\"centerLabelStyle\"\n >\n {{ centerLabel }}\n </text>\n </g>\n <text\n r-if=\"!hasSegments && !centerValueText && !centerLabel\"\n class=\"doughnut-chart__empty\"\n x=\"50\"\n y=\"52\"\n text-anchor=\"middle\"\n >\n {{ resolvedEmptyLabel }}\n </text>\n</svg>`\n\nfunction defineDoughnutChartComponent() {\n return defineComponent<DoughnutChart>(doughnutChartTemplate, {\n props: [\n 'segments',\n 'title',\n 'description',\n 'ariaLabel',\n 'centerLabel',\n 'centerValue',\n 'centerLabelSize',\n 'centerValueSize',\n 'emptyLabel',\n 'valueSuffix',\n 'size',\n 'thickness',\n 'gap',\n 'startAngle',\n 'animated',\n 'tone',\n 'variant',\n 'variantMode',\n ],\n context: (head) => resolveDoughnutChart(head.props),\n })\n}\n\nexport function defineDoughnutChartComponents() {\n return {\n doughnutChart: defineDoughnutChartComponent(),\n }\n}\n\nfunction resolveDoughnutChart(props: DoughnutChart): DoughnutChart {\n const separatorMaskId = resolveDoughnutChartMaskId()\n const thickness = computed(() =>\n clampChartNumber(props.thickness, DEFAULT_CHART_THICKNESS, 2, 40),\n )\n const innerRadius = computed(() => CHART_OUTER_RADIUS - thickness())\n const total = computed(() => resolveTotal(props.segments))\n const chartSegments = computed(() =>\n resolveChartSegments(props, total(), innerRadius()),\n )\n const separators = computed(() =>\n resolveSeparators(props, chartSegments(), innerRadius()),\n )\n\n return {\n animated: true,\n ...props,\n classes: computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: 'none',\n defaultVariantMode: 'stateless',\n }),\n ),\n resolvedSize: computed(() =>\n resolveChartSize(props.size, DEFAULT_CHART_SIZE),\n ),\n resolvedAriaLabel: computed(() => resolveAriaLabel(props)),\n resolvedEmptyLabel: computed(\n () => resolveChartText(props.emptyLabel) || DEFAULT_CHART_EMPTY_LABEL,\n ),\n total,\n chartSegments,\n separators,\n hasSeparators: computed(() => separators().length > 0),\n separatorMaskId,\n separatorMaskUrl: computed(() =>\n separators().length > 0 ? `url(#${separatorMaskId})` : undefined,\n ),\n hasSegments: computed(() => chartSegments().length > 0),\n centerValueText: computed(() => resolveCenterValue(props, total())),\n centerLabelStyle: computed<Record<string, string> | undefined>(() =>\n resolveFontSizeStyle(props.centerLabelSize),\n ),\n centerValueStyle: computed<Record<string, string> | undefined>(() =>\n resolveFontSizeStyle(props.centerValueSize),\n ),\n trackPath: computed(() => fullRingPath(CHART_OUTER_RADIUS, innerRadius())),\n }\n}\n\nfunction resolveChartSegments(\n props: DoughnutChart,\n total: number,\n innerRadius: number,\n): ResolvedDoughnutChartSegment[] {\n if (total <= 0) return []\n\n const startAngle = readChartNumber(\n props.startAngle,\n DEFAULT_CHART_START_ANGLE,\n )\n const valueSuffix = resolveChartText(props.valueSuffix)\n let cursor = startAngle\n\n return resolvePositiveSegments(props.segments).map((segment, index) => {\n const span = (segment.value / total) * FULL_CIRCLE\n const segmentStart = cursor\n const segmentEnd = cursor + span\n cursor += span\n\n return {\n ...segment,\n percent: segment.value / total,\n formattedValue: formatSegmentValue(segment.value, valueSuffix),\n color:\n segment.color ||\n DEFAULT_CHART_COLORS[index % DEFAULT_CHART_COLORS.length],\n path:\n segmentEnd - segmentStart >= FULL_CIRCLE - 0.001\n ? fullRingPath(CHART_OUTER_RADIUS, innerRadius)\n : ringSegmentPath(\n CHART_OUTER_RADIUS,\n innerRadius,\n segmentStart,\n segmentEnd,\n ),\n }\n })\n}\n\nfunction resolveSeparators(\n props: DoughnutChart,\n segments: ResolvedDoughnutChartSegment[],\n innerRadius: number,\n): ResolvedDoughnutChartSeparator[] {\n if (segments.length < 2) return []\n\n const gap = clampChartNumber(props.gap, DEFAULT_CHART_GAP, 0, 24)\n if (gap <= 0) return []\n\n let cursor = readChartNumber(props.startAngle, DEFAULT_CHART_START_ANGLE)\n return segments.flatMap((segment, index) => {\n const previousSegment = segments.at(index - 1) || segment\n const width = resolveAdaptiveSeparatorWidth(\n gap,\n innerRadius,\n CHART_OUTER_RADIUS,\n previousSegment,\n segment,\n )\n if (width < MIN_SEPARATOR_WIDTH) {\n cursor += segment.percent * FULL_CIRCLE\n return []\n }\n\n const path = separatorPath(\n cursor,\n Math.max(0, innerRadius - SEPARATOR_MASK_BLEED),\n CHART_OUTER_RADIUS + SEPARATOR_MASK_BLEED,\n width,\n )\n cursor += segment.percent * FULL_CIRCLE\n return [{ path }]\n })\n}\n\nfunction resolveAdaptiveSeparatorWidth(\n maxWidth: number,\n innerRadius: number,\n outerRadius: number,\n previousSegment: ResolvedDoughnutChartSegment,\n nextSegment: ResolvedDoughnutChartSegment,\n) {\n const smallerSegmentSpan =\n Math.min(previousSegment.percent, nextSegment.percent) * FULL_CIRCLE\n const maxSeparatorAngle = smallerSegmentSpan * MAX_SEPARATOR_SEGMENT_SHARE\n const midRadius = (innerRadius + outerRadius) / 2\n const adaptiveWidth = chordWidth(midRadius, maxSeparatorAngle)\n return Math.min(maxWidth, adaptiveWidth)\n}\n\nfunction chordWidth(radius: number, angle: number) {\n if (radius <= 0 || angle <= 0) return 0\n const radians = (angle * Math.PI) / 180\n return 2 * radius * Math.sin(radians / 2)\n}\n\nfunction separatorPath(\n angle: number,\n innerRadius: number,\n outerRadius: number,\n width: number,\n) {\n const halfWidth = Math.min(\n width / 2,\n innerRadius - 0.001,\n outerRadius - 0.001,\n )\n if (halfWidth <= 0) return ''\n\n const radians = (angle * Math.PI) / 180\n const ux = Math.cos(radians)\n const uy = Math.sin(radians)\n const px = -uy\n const py = ux\n const outerDistance = Math.sqrt(outerRadius ** 2 - halfWidth ** 2)\n const innerDistance = Math.sqrt(innerRadius ** 2 - halfWidth ** 2)\n const outerStart = offsetPoint(ux, uy, px, py, outerDistance, halfWidth)\n const outerEnd = offsetPoint(ux, uy, px, py, outerDistance, -halfWidth)\n const innerEnd = offsetPoint(ux, uy, px, py, innerDistance, -halfWidth)\n const innerStart = offsetPoint(ux, uy, px, py, innerDistance, halfWidth)\n\n return [\n `M ${formatPoint(outerStart)}`,\n `A ${fmt(outerRadius)} ${fmt(outerRadius)} 0 0 0 ${formatPoint(outerEnd)}`,\n `L ${formatPoint(innerEnd)}`,\n `A ${fmt(innerRadius)} ${fmt(innerRadius)} 0 0 1 ${formatPoint(innerStart)}`,\n 'Z',\n ].join(' ')\n}\n\nfunction offsetPoint(\n ux: number,\n uy: number,\n px: number,\n py: number,\n radialDistance: number,\n offset: number,\n) {\n return {\n x: CHART_CENTER + ux * radialDistance + px * offset,\n y: CHART_CENTER + uy * radialDistance + py * offset,\n }\n}\n\nfunction resolvePositiveSegments(\n segments: DoughnutChart['segments'],\n): Array<\n Omit<ResolvedDoughnutChartSegment, 'percent' | 'formattedValue' | 'path'>\n> {\n return (unref(segments) || [])\n .map((segmentInput, index) => {\n const segment = unref(segmentInput)\n const value = readChartNumber(segment?.value, 0)\n return {\n label: resolveChartText(segment?.label) || `Segment ${index + 1}`,\n value: value > 0 ? value : 0,\n color: resolveChartText(segment?.color),\n }\n })\n .filter((segment) => segment.value > 0)\n}\n\nfunction resolveTotal(segments: DoughnutChart['segments']) {\n return resolvePositiveSegments(segments).reduce(\n (total, segment) => total + segment.value,\n 0,\n )\n}\n\nfunction resolveCenterValue(props: DoughnutChart, total: number) {\n const explicit = resolveChartText(props.centerValue)\n if (explicit) return explicit\n if (total <= 0) return ''\n return formatSegmentValue(total, resolveChartText(props.valueSuffix))\n}\n\nfunction resolveAriaLabel(props: DoughnutChart) {\n return (\n resolveChartText(props.ariaLabel) ||\n resolveChartText(props.title) ||\n 'Doughnut chart'\n )\n}\n\nfunction resolveFontSizeStyle(size?: RefOrValue<number | string>) {\n const fontSize = resolveChartCssSize(size)\n return fontSize ? { fontSize } : undefined\n}\n\nfunction fullRingPath(outerRadius: number, innerRadius: number) {\n const topOuter = pointAtAngle(outerRadius, -90)\n const bottomOuter = pointAtAngle(outerRadius, 90)\n const topInner = pointAtAngle(innerRadius, -90)\n const bottomInner = pointAtAngle(innerRadius, 90)\n\n return [\n `M ${formatPoint(topOuter)}`,\n `A ${fmt(outerRadius)} ${fmt(outerRadius)} 0 1 1 ${formatPoint(bottomOuter)}`,\n `A ${fmt(outerRadius)} ${fmt(outerRadius)} 0 1 1 ${formatPoint(topOuter)}`,\n `M ${formatPoint(topInner)}`,\n `A ${fmt(innerRadius)} ${fmt(innerRadius)} 0 1 0 ${formatPoint(bottomInner)}`,\n `A ${fmt(innerRadius)} ${fmt(innerRadius)} 0 1 0 ${formatPoint(topInner)}`,\n 'Z',\n ].join(' ')\n}\n\nfunction ringSegmentPath(\n outerRadius: number,\n innerRadius: number,\n startAngle: number,\n endAngle: number,\n) {\n const outerStart = pointAtAngle(outerRadius, startAngle)\n const outerEnd = pointAtAngle(outerRadius, endAngle)\n const innerEnd = pointAtAngle(innerRadius, endAngle)\n const innerStart = pointAtAngle(innerRadius, startAngle)\n const largeArc = endAngle - startAngle > 180 ? 1 : 0\n\n return [\n `M ${formatPoint(outerStart)}`,\n `A ${fmt(outerRadius)} ${fmt(outerRadius)} 0 ${largeArc} 1 ${formatPoint(outerEnd)}`,\n `L ${formatPoint(innerEnd)}`,\n `A ${fmt(innerRadius)} ${fmt(innerRadius)} 0 ${largeArc} 0 ${formatPoint(innerStart)}`,\n 'Z',\n ].join(' ')\n}\n\nfunction pointAtAngle(radius: number, angle: number) {\n const radians = (angle * Math.PI) / 180\n return {\n x: CHART_CENTER + radius * Math.cos(radians),\n y: CHART_CENTER + radius * Math.sin(radians),\n }\n}\n\nfunction formatPoint(point: { x: number; y: number }) {\n return formatChartPoint(point, { precision: 3 })\n}\n\nfunction formatSegmentValue(value: number, suffix: string) {\n return formatChartValue(value, suffix, { precision: 3 })\n}\n\nfunction fmt(value: number) {\n return formatChartNumber(value, { precision: 3 })\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComponentHead,\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type RefOrValue,\n type SRef,\n sref,\n unref,\n} from 'regor'\nimport {\n type ComponentVariant,\n resolveComponentClasses,\n} from '../componentVariant'\n\nexport interface DropFileItem {\n id: string\n file: File\n name: string\n type: string\n size: number\n sizeLabel: string\n lastModified: number\n icon: string\n}\n\nexport type DropFilesIconMap = Record<string, string>\n\nexport interface DropFilesAddOptions {\n accept?: RefOrValue<string> | string[] // TODO: components can never get values, string[] is wrong type, must be included in RefOrValue. check for other abuse and fix all.\n iconMap?: DropFilesIconMap | SRef<DropFilesIconMap>\n fileIcon?: RefOrValue<string>\n multiple?: RefOrValue<boolean>\n idSequence?: number\n}\n\nexport interface DropFilesAddResult {\n files: DropFileItem[]\n idSequence: number\n acceptedCount: number\n}\n\nexport interface DropFiles {\n files?: SRef<DropFileItem[]>\n accept?: RefOrValue<string> | string[]\n iconMap?: DropFilesIconMap | SRef<DropFilesIconMap>\n label?: RefOrValue<string>\n hint?: RefOrValue<string>\n emptyTitle?: RefOrValue<string>\n emptyText?: RefOrValue<string>\n disabled?: RefOrValue<boolean>\n multiple?: RefOrValue<boolean>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n uploadIcon?: RefOrValue<string>\n fileIcon?: RefOrValue<string>\n removeIcon?: RefOrValue<string>\n onChange?: (files: DropFileItem[]) => void\n inputElement?: ReturnType<typeof sref<HTMLInputElement | null>>\n dragging?: SRef<boolean>\n classes?: ComputedRef<string>\n acceptValue?: ComputedRef<string>\n resolvedMultiple?: ComputedRef<boolean>\n resolvedUploadIcon?: ComputedRef<string>\n resolvedRemoveIcon?: ComputedRef<string>\n hasFiles?: ComputedRef<boolean>\n openFileDialog?: () => void\n handleZoneKeydown?: (event: KeyboardEvent) => void\n handleInput?: (event: Event) => void\n handlePaste?: (event: ClipboardEvent) => void\n handleDragEnter?: (event: DragEvent) => void\n handleDragOver?: (event: DragEvent) => void\n handleDragLeave?: (event: DragEvent) => void\n handleDrop?: (event: DragEvent) => void\n removeFile?: (id: string) => void\n clear?: () => void\n}\n\nconst DEFAULT_UPLOAD_ICON = 'lucide:cloud-upload'\nconst DEFAULT_FILE_ICON = 'lucide:file'\nconst DEFAULT_REMOVE_ICON = 'lucide:trash-2'\n\nconst DEFAULT_ICON_MAP: DropFilesIconMap = {\n 'image/*': 'lucide:file-image',\n 'text/*': 'lucide:file-text',\n 'application/pdf': 'lucide:file-text',\n 'application/zip': 'lucide:file-archive',\n 'application/x-zip-compressed': 'lucide:file-archive',\n '.zip': 'lucide:file-archive',\n}\n\nconst dropFilesTemplate = html`<div class=\"drop-files\">\n <span class=\"drop-files__label\" r-if=\"label\">{{ label }}</span>\n <input\n class=\"drop-files__input\"\n :ref=\"inputElement\"\n type=\"file\"\n :accept=\"acceptValue\"\n :multiple=\"resolvedMultiple\"\n :disabled=\"disabled\"\n tabindex=\"-1\"\n @change=\"handleInput\"/>\n <div\n class=\"drop-files__zone\"\n :class=\"classes\"\n role=\"button\"\n tabindex=\"0\"\n :aria-disabled=\"disabled\"\n @click=\"openFileDialog\"\n @keydown=\"handleZoneKeydown\"\n @paste=\"handlePaste\"\n @dragenter=\"handleDragEnter\"\n @dragover=\"handleDragOver\"\n @dragleave=\"handleDragLeave\"\n @drop=\"handleDrop\"\n >\n <Icon class=\"drop-files__zone-icon\" :name=\"resolvedUploadIcon\"/>\n <span class=\"drop-files__zone-title\">{{ emptyTitle || 'Add files' }}</span>\n <span class=\"drop-files__zone-text\">\n {{ emptyText || 'Click, tap, paste, or drag files here.' }}\n </span>\n <span class=\"drop-files__hint\" r-if=\"hint\">{{ hint }}</span>\n </div>\n <ul class=\"drop-files__list\" r-if=\"hasFiles\" aria-label=\"Selected files\">\n <li class=\"drop-files__item\" r-for=\"item in files\">\n <span class=\"drop-files__item-icon\">\n <Icon :name=\"item.icon\"/>\n </span>\n <span class=\"drop-files__item-body\">\n <span class=\"drop-files__item-name\">{{ item.name }}</span>\n <span class=\"drop-files__item-meta\">{{ item.sizeLabel }}</span>\n </span>\n <button\n class=\"drop-files__remove\"\n type=\"button\"\n title=\"Remove file\"\n aria-label=\"Remove file\"\n :disabled=\"disabled\"\n @click=\"removeFile(item.id)\"\n >\n <Icon :name=\"resolvedRemoveIcon\"/>\n </button>\n </li>\n </ul>\n</div>`\n\nfunction defineDropFilesComponent() {\n return defineComponent<DropFiles>(dropFilesTemplate, {\n props: [\n 'files',\n 'accept',\n 'iconMap',\n 'label',\n 'hint',\n 'emptyTitle',\n 'emptyText',\n 'disabled',\n 'multiple',\n 'tone',\n 'variant',\n 'uploadIcon',\n 'fileIcon',\n 'removeIcon',\n 'onChange',\n ],\n context: (head) => resolveDropFiles(head),\n })\n}\n\nexport function defineDropFilesComponents() {\n return {\n dropFiles: defineDropFilesComponent(),\n }\n}\n\nclass DropFilesContext implements DropFiles {\n readonly files: SRef<DropFileItem[]>\n readonly accept?: RefOrValue<string> | string[]\n readonly iconMap?: DropFilesIconMap | SRef<DropFilesIconMap>\n readonly label?: RefOrValue<string>\n readonly hint?: RefOrValue<string>\n readonly emptyTitle?: RefOrValue<string>\n readonly emptyText?: RefOrValue<string>\n readonly disabled?: RefOrValue<boolean>\n readonly multiple?: RefOrValue<boolean>\n readonly tone?: RefOrValue<SemanticTone>\n readonly variant?: RefOrValue<ComponentVariant>\n readonly uploadIcon?: RefOrValue<string>\n readonly fileIcon?: RefOrValue<string>\n readonly removeIcon?: RefOrValue<string>\n readonly onChange?: (files: DropFileItem[]) => void\n readonly inputElement = sref<HTMLInputElement | null>(null)\n readonly dragging = sref(false)\n readonly classes: ComputedRef<string>\n readonly acceptValue: ComputedRef<string>\n readonly resolvedMultiple: ComputedRef<boolean>\n readonly resolvedUploadIcon: ComputedRef<string>\n readonly resolvedRemoveIcon: ComputedRef<string>\n readonly hasFiles: ComputedRef<boolean>\n private dragDepth = 0\n private idSequence = 0\n\n constructor(props: DropFiles) {\n Object.assign(this, props)\n this.files = props.files ?? sref<DropFileItem[]>([])\n this.classes = computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: 'surfaceAlt',\n classes: [\n this.dragging() ? 'drop-files__zone--dragging' : '',\n unref(this.disabled) ? 'drop-files__zone--disabled' : '',\n ],\n }),\n )\n this.acceptValue = computed(() =>\n resolveAccept(this.accept, this.iconMap).join(','),\n )\n this.resolvedMultiple = computed(() => unref(props.multiple) !== false)\n this.resolvedUploadIcon = computed(\n () => unref(props.uploadIcon) || DEFAULT_UPLOAD_ICON,\n )\n this.resolvedRemoveIcon = computed(\n () => unref(props.removeIcon) || DEFAULT_REMOVE_ICON,\n )\n this.hasFiles = computed(() => this.files().length > 0)\n }\n\n openFileDialog = () => {\n if (unref(this.disabled)) return\n this.inputElement()?.click()\n }\n\n handleZoneKeydown = (event: KeyboardEvent) => {\n if (event.key !== 'Enter' && event.key !== ' ') return\n event.preventDefault()\n this.openFileDialog()\n }\n\n handleInput = (event: Event) => {\n if (unref(this.disabled)) return\n\n const input = event.currentTarget as HTMLInputElement | null\n this.addFileList(input?.files)\n if (input) input.value = ''\n }\n\n handlePaste = (event: ClipboardEvent) => {\n if (unref(this.disabled)) return\n\n const files = event.clipboardData?.files\n if (!files || files.length === 0) return\n\n event.preventDefault()\n this.addFileList(files)\n }\n\n handleDragEnter = (event: DragEvent) => {\n if (unref(this.disabled) || !hasFileTransfer(event.dataTransfer)) return\n event.preventDefault()\n ++this.dragDepth\n this.dragging(true)\n }\n\n handleDragOver = (event: DragEvent) => {\n if (unref(this.disabled) || !hasFileTransfer(event.dataTransfer)) return\n event.preventDefault()\n if (event.dataTransfer) event.dataTransfer.dropEffect = 'copy'\n }\n\n handleDragLeave = (event: DragEvent) => {\n if (unref(this.disabled) || !hasFileTransfer(event.dataTransfer)) return\n event.preventDefault()\n this.dragDepth = Math.max(0, this.dragDepth - 1)\n if (this.dragDepth === 0) this.dragging(false)\n }\n\n handleDrop = (event: DragEvent) => {\n if (unref(this.disabled) || !hasFileTransfer(event.dataTransfer)) return\n event.preventDefault()\n this.dragDepth = 0\n this.dragging(false)\n this.addFileList(event.dataTransfer?.files)\n }\n\n removeFile = (id: string) => {\n if (unref(this.disabled)) return\n this.writeFiles(this.files().filter((item) => item.id !== id))\n }\n\n clear = () => {\n if (unref(this.disabled)) return\n this.writeFiles([])\n }\n\n private addFileList(fileList: FileList | null | undefined) {\n if (!fileList || fileList.length === 0) return\n\n const result = addDropFiles(this.files(), Array.from(fileList), {\n accept: this.accept,\n iconMap: this.iconMap,\n fileIcon: this.fileIcon,\n multiple: this.multiple,\n idSequence: this.idSequence,\n })\n this.idSequence = result.idSequence\n if (result.acceptedCount === 0) return\n this.writeFiles(result.files)\n }\n\n private writeFiles(files: DropFileItem[]) {\n this.files(files)\n this.onChange?.(files)\n }\n}\n\nfunction resolveDropFiles(head: ComponentHead<DropFiles>) {\n return new DropFilesContext(head.props) as DropFiles\n}\n\nexport function addDropFiles(\n currentFiles: DropFileItem[],\n files: File[],\n options: DropFilesAddOptions = {},\n): DropFilesAddResult {\n const accept = resolveAccept(options.accept, options.iconMap)\n const accepted = files\n .filter((file) => acceptsFile(file, accept))\n .map((file) => createDropFileItem(file, options))\n\n let idSequence = options.idSequence ?? 0\n const sequenced = accepted.map((item) => {\n ++idSequence\n return {\n ...item,\n id: createFileId(item.file, idSequence),\n }\n })\n if (sequenced.length === 0)\n return { files: currentFiles, idSequence, acceptedCount: 0 }\n\n if (unref(options.multiple) === false) {\n return {\n files: [sequenced[0]],\n idSequence,\n acceptedCount: 1,\n }\n }\n\n const next = [...currentFiles]\n let addedCount = 0\n for (const item of sequenced) {\n if (!next.some((existing) => isSameFile(existing.file, item.file))) {\n next.push(item)\n ++addedCount\n }\n }\n\n return { files: next, idSequence, acceptedCount: addedCount }\n}\n\nfunction createDropFileItem(\n file: File,\n options: DropFilesAddOptions,\n): DropFileItem {\n return {\n id: '',\n file,\n name: file.name,\n type: file.type,\n size: file.size,\n sizeLabel: formatFileSize(file.size),\n lastModified: file.lastModified,\n icon: resolveFileIcon(\n file,\n readIconMap(options.iconMap),\n unref(options.fileIcon) || DEFAULT_FILE_ICON,\n ),\n }\n}\n\nfunction createFileId(file: File, sequence: number) {\n return [sequence, file.name, file.size, file.lastModified].join(':')\n}\n\nfunction readAccept(value: RefOrValue<string> | string[] | undefined) {\n return Array.isArray(value) ? value : unref(value)\n}\n\nfunction readIconMap(\n value: DropFilesIconMap | SRef<DropFilesIconMap> | undefined,\n) {\n return typeof value === 'function' ? value() : value\n}\n\nfunction resolveAccept(\n accept: RefOrValue<string> | string[] | undefined,\n iconMap: DropFilesIconMap | SRef<DropFilesIconMap> | undefined,\n) {\n const resolvedAccept = normalizeAccept(readAccept(accept))\n if (resolvedAccept.length > 0) return resolvedAccept\n\n const resolvedIconMap = readIconMap(iconMap)\n return resolvedIconMap ? normalizeAccept(Object.keys(resolvedIconMap)) : []\n}\n\nfunction normalizeAccept(value: string | string[] | undefined) {\n if (Array.isArray(value)) {\n return value\n .flatMap((item) => item.split(','))\n .map(normalizeAcceptToken)\n .filter(Boolean)\n }\n\n if (!value) return []\n return value.split(',').map(normalizeAcceptToken).filter(Boolean)\n}\n\nfunction normalizeAcceptToken(value: string) {\n return value.trim().toLowerCase()\n}\n\nfunction acceptsFile(file: File, accept: string[]) {\n if (accept.length === 0) return true\n return accept.some((token) => matchesAcceptToken(file, token))\n}\n\nfunction matchesAcceptToken(file: File, token: string) {\n if (!token) return false\n\n const type = file.type.toLowerCase()\n const name = file.name.toLowerCase()\n if (token.startsWith('.')) return name.endsWith(token)\n if (token.endsWith('/*')) return type.startsWith(token.slice(0, -1))\n return type === token\n}\n\nfunction resolveFileIcon(\n file: File,\n iconMap: DropFilesIconMap | undefined,\n fallback: string,\n) {\n const mergedMap = { ...DEFAULT_ICON_MAP, ...(iconMap ?? {}) }\n for (const [accept, icon] of Object.entries(mergedMap)) {\n if (matchesAcceptToken(file, normalizeAcceptToken(accept)) && icon) {\n return icon\n }\n }\n\n return fallback\n}\n\nfunction hasFileTransfer(dataTransfer: DataTransfer | null) {\n if (!dataTransfer) return false\n return Array.from(dataTransfer.types).includes('Files')\n}\n\nfunction isSameFile(left: File, right: File) {\n return (\n left.name === right.name &&\n left.size === right.size &&\n left.type === right.type &&\n left.lastModified === right.lastModified\n )\n}\n\nfunction formatFileSize(size: number) {\n if (!Number.isFinite(size) || size <= 0) return '0 B'\n\n const units = ['B', 'KB', 'MB', 'GB']\n let value = size\n let unit = 0\n while (value >= 1024 && unit < units.length - 1) {\n value /= 1024\n ++unit\n }\n\n return `${value >= 10 || unit === 0 ? value.toFixed(0) : value.toFixed(1)} ${units[unit]}`\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type RefOrValue,\n} from 'regor'\nimport {\n type ComponentVariant,\n resolveComponentClasses,\n} from '../componentVariant'\n\nexport interface ExpandablePanel {\n title?: RefOrValue<string>\n description?: RefOrValue<string>\n meta?: RefOrValue<string>\n badge?: RefOrValue<string>\n icon?: RefOrValue<string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n summaryVariant?: RefOrValue<ComponentVariant>\n open?: RefOrValue<boolean>\n classes?: ComputedRef<string>\n summaryClasses?: ComputedRef<string>\n}\n\nconst expandablePanelTemplate = html`<details class=\"expandable-panel gap-0\" :class=\"classes\" :open=\"open\">\n <Flex\n container=\"summary\"\n align=\"center\"\n class=\"expandable-panel__summary cursor-pointer p-4\"\n :class=\"summaryClasses\"\n >\n <slot name=\"summary\">\n <IconFrame\n :name=\"icon\"\n r-if=\"icon\"\n :variant=\"summaryVariant\"\n variantMode=\"stateless\"/>\n <Flex align=\"center\" wrap=\"true\" class=\"flex-1 gap-2\">\n <span class=\"fw-700 min-w-0 lh-0\" r-if=\"title\">{{ title }}</span>\n <Badge :tone=\"tone\" r-if=\"badge\">{{ badge }}</Badge>\n <span class=\"fs-sm w-full lh-0\" r-if=\"description\">\n {{ description }}\n </span>\n </Flex>\n <Flex align=\"center\" justify=\"center\" class=\"flex-none\">\n <span class=\"fw-600\" r-if=\"meta\"> {{ meta }} </span>\n <IconFrame\n class=\"expandable-panel__chevron rounded-pill\"\n name=\"iconoir:nav-arrow-down\"\n :variant=\"summaryVariant\"\n variantMode=\"stateless\"/>\n </Flex>\n </slot>\n </Flex>\n <div class=\"expandable-panel__body p-4 bt-0\"><slot></slot></div>\n</details>`\n\nfunction defineExpandablePanelComponent() {\n return defineComponent<ExpandablePanel>(expandablePanelTemplate, {\n props: [\n 'title',\n 'description',\n 'meta',\n 'badge',\n 'icon',\n 'tone',\n 'variant',\n 'summaryVariant',\n 'open',\n ],\n context: (head) => resolveExpandablePanel(head.props),\n })\n}\n\nexport function defineExpandablePanelComponents() {\n return {\n expandablePanel: defineExpandablePanelComponent(),\n }\n}\n\nfunction resolveExpandablePanel(props: ExpandablePanel): ExpandablePanel {\n return {\n ...props,\n classes: computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: 'surface',\n defaultVariantMode: 'stateless',\n }),\n ),\n summaryClasses: computed(() =>\n resolveComponentClasses(\n {\n tone: props.tone,\n variant: props.summaryVariant,\n },\n {\n defaultVariant: 'surface',\n defaultVariantMode: 'stateful',\n },\n ),\n ),\n }\n}\n","import {\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type RefOrValue,\n unref,\n} from 'regor'\n\nexport type FlexDirection = 'row' | 'row-reverse' | 'column' | 'column-reverse'\nexport type FlexAlign = 'stretch' | 'start' | 'center' | 'end' | 'baseline'\nexport type FlexJustify =\n | 'start'\n | 'center'\n | 'end'\n | 'stretch'\n | 'between'\n | 'around'\n | 'evenly'\nexport type FlexWrap = boolean | 'wrap' | 'nowrap' | 'reverse' | 'true'\n\nexport interface Flex {\n container?: RefOrValue<string>\n direction?: RefOrValue<FlexDirection>\n directionSm?: RefOrValue<FlexDirection>\n directionMd?: RefOrValue<FlexDirection>\n directionLg?: RefOrValue<FlexDirection>\n directionXl?: RefOrValue<FlexDirection>\n align?: RefOrValue<FlexAlign>\n alignSm?: RefOrValue<FlexAlign>\n alignMd?: RefOrValue<FlexAlign>\n alignLg?: RefOrValue<FlexAlign>\n alignXl?: RefOrValue<FlexAlign>\n justify?: RefOrValue<FlexJustify>\n justifySm?: RefOrValue<FlexJustify>\n justifyMd?: RefOrValue<FlexJustify>\n justifyLg?: RefOrValue<FlexJustify>\n justifyXl?: RefOrValue<FlexJustify>\n wrap?: RefOrValue<FlexWrap>\n wrapSm?: RefOrValue<FlexWrap>\n wrapMd?: RefOrValue<FlexWrap>\n wrapLg?: RefOrValue<FlexWrap>\n wrapXl?: RefOrValue<FlexWrap>\n inline?: RefOrValue<boolean | string>\n classes?: ComputedRef<string>\n}\n\nconst flexTemplate = html`<div :is=\"container ?? 'div'\" class=\"flex\" :class=\"classes\">\n <slot></slot>\n</div>`\n\nfunction defineFlexComponent() {\n return defineComponent<Flex>(flexTemplate, {\n props: [\n 'container',\n 'direction',\n 'directionSm',\n 'directionMd',\n 'directionLg',\n 'directionXl',\n 'align',\n 'alignSm',\n 'alignMd',\n 'alignLg',\n 'alignXl',\n 'justify',\n 'justifySm',\n 'justifyMd',\n 'justifyLg',\n 'justifyXl',\n 'wrap',\n 'wrapSm',\n 'wrapMd',\n 'wrapLg',\n 'wrapXl',\n 'inline',\n ],\n context: (head) => resolveFlex(head.props),\n })\n}\n\nexport function defineFlexComponents() {\n return {\n flex: defineFlexComponent(),\n }\n}\n\nfunction resolveFlex(props: Flex): Flex {\n const classes = computed(() => {\n return [\n resolveDirectionClass(props.direction),\n resolveResponsiveDirectionClass('sm', props.directionSm),\n resolveResponsiveDirectionClass('md', props.directionMd),\n resolveResponsiveDirectionClass('lg', props.directionLg),\n resolveResponsiveDirectionClass('xl', props.directionXl),\n resolveAlignClass(props.align),\n resolveResponsiveAlignClass('sm', props.alignSm),\n resolveResponsiveAlignClass('md', props.alignMd),\n resolveResponsiveAlignClass('lg', props.alignLg),\n resolveResponsiveAlignClass('xl', props.alignXl),\n resolveJustifyClass(props.justify),\n resolveResponsiveJustifyClass('sm', props.justifySm),\n resolveResponsiveJustifyClass('md', props.justifyMd),\n resolveResponsiveJustifyClass('lg', props.justifyLg),\n resolveResponsiveJustifyClass('xl', props.justifyXl),\n resolveWrapClass(props.wrap),\n resolveResponsiveWrapClass('sm', props.wrapSm),\n resolveResponsiveWrapClass('md', props.wrapMd),\n resolveResponsiveWrapClass('lg', props.wrapLg),\n resolveResponsiveWrapClass('xl', props.wrapXl),\n resolveInlineClass(props.inline),\n ]\n .filter(Boolean)\n .join(' ')\n })\n\n return {\n ...props,\n classes,\n }\n}\n\nfunction resolveDirectionClass(value?: RefOrValue<FlexDirection>) {\n if (!value) return ''\n\n const normalized = unref(value)\n if (normalized === 'column') return 'flex-column'\n if (normalized === 'column-reverse') return 'flex-column-reverse'\n if (normalized === 'row-reverse') return 'flex-row-reverse'\n if (normalized === 'row') return ''\n\n return ''\n}\n\nfunction resolveResponsiveDirectionClass(\n breakpoint: 'sm' | 'md' | 'lg' | 'xl',\n value?: RefOrValue<FlexDirection>,\n) {\n if (!value) return ''\n\n const normalized = unref(value)\n if (normalized === 'column') return `flex-direction-${breakpoint}-column`\n if (normalized === 'column-reverse') {\n return `flex-direction-${breakpoint}-column-reverse`\n }\n if (normalized === 'row') return `flex-direction-${breakpoint}-row`\n if (normalized === 'row-reverse') {\n return `flex-direction-${breakpoint}-row-reverse`\n }\n\n return ''\n}\n\nfunction resolveAlignClass(value?: RefOrValue<FlexAlign>) {\n if (!value) return ''\n\n const normalized = unref(value)\n if (normalized === 'start') return 'align-flex-start'\n if (normalized === 'end') return 'align-flex-end'\n\n if (\n normalized === 'stretch' ||\n normalized === 'center' ||\n normalized === 'baseline'\n ) {\n return `align-${normalized}`\n }\n\n return ''\n}\n\nfunction resolveResponsiveAlignClass(\n breakpoint: 'sm' | 'md' | 'lg' | 'xl',\n value?: RefOrValue<FlexAlign>,\n) {\n if (!value) return ''\n\n const normalized = unref(value)\n if (normalized === 'start') return `align-${breakpoint}-flex-start`\n if (normalized === 'end') return `align-${breakpoint}-flex-end`\n\n if (\n normalized === 'stretch' ||\n normalized === 'center' ||\n normalized === 'baseline'\n ) {\n return `align-${breakpoint}-${normalized}`\n }\n\n return ''\n}\n\nfunction resolveJustifyClass(value?: RefOrValue<FlexJustify>) {\n if (!value) return ''\n\n const normalized = unref(value)\n if (\n normalized === 'start' ||\n normalized === 'center' ||\n normalized === 'end' ||\n normalized === 'stretch' ||\n normalized === 'between' ||\n normalized === 'around' ||\n normalized === 'evenly'\n ) {\n return `justify-${normalized}`\n }\n\n return ''\n}\n\nfunction resolveResponsiveJustifyClass(\n breakpoint: 'sm' | 'md' | 'lg' | 'xl',\n value?: RefOrValue<FlexJustify>,\n) {\n if (!value) return ''\n\n const normalized = unref(value)\n if (\n normalized === 'start' ||\n normalized === 'center' ||\n normalized === 'end' ||\n normalized === 'stretch' ||\n normalized === 'between' ||\n normalized === 'around' ||\n normalized === 'evenly'\n ) {\n return `justify-${breakpoint}-${normalized}`\n }\n\n return ''\n}\n\nfunction resolveWrapClass(value?: RefOrValue<FlexWrap>) {\n if (!value) return ''\n\n const normalized = unref(value)\n if (normalized === true || normalized === 'true' || normalized === 'wrap') {\n return 'flex-wrap'\n }\n if (normalized === 'reverse') return 'flex-wrap-reverse'\n\n return ''\n}\n\nfunction resolveResponsiveWrapClass(\n breakpoint: 'sm' | 'md' | 'lg' | 'xl',\n value?: RefOrValue<FlexWrap>,\n) {\n if (!value) return ''\n\n const normalized = unref(value)\n if (normalized === true || normalized === 'true' || normalized === 'wrap') {\n return `flex-wrap-${breakpoint}`\n }\n if (normalized === 'nowrap') return `flex-nowrap-${breakpoint}`\n if (normalized === 'reverse') return `flex-wrap-${breakpoint}-reverse`\n\n return ''\n}\n\nfunction resolveInlineClass(value?: RefOrValue<boolean | string>) {\n if (!value) return ''\n\n const normalized = unref(value)\n if (normalized === true || normalized === 'true') return 'flex-inline'\n\n return ''\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type RefOrValue,\n} from 'regor'\nimport {\n type ComponentVariant,\n resolveComponentClasses,\n} from '../componentVariant'\n\nexport interface SiteFooter {\n teleport?: string\n ariaLabel?: string\n copyright?: string\n legalLabel?: string\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n classes?: ComputedRef<string>\n}\n\nconst siteFooterTemplate = html`<footer\n class=\"site-footer doc-content\"\n :class=\"classes\"\n :aria-label=\"ariaLabel\"\n :r-teleport=\"teleport\"\n>\n <div class=\"site-footer__inner\"><slot></slot></div>\n <Flex\n class=\"site-footer__bottom\"\n direction=\"column-reverse\"\n directionMd=\"row\"\n align=\"center\"\n justify=\"center\"\n justifyMd=\"between\"\n wrap=\"true\"\n >\n <Flex justify=\"center\" justifyMd=\"start\" class=\"site-footer__copyright\">\n {{ copyright }}\n </Flex>\n <Flex\n container=\"nav\"\n class=\"site-footer__legal\"\n wrap=\"true\"\n align=\"center\"\n justify=\"center\"\n justifyMd=\"end\"\n :aria-label=\"legalLabel\"\n >\n <slot name=\"legal\"></slot>\n <span class=\"consent-settings-teleport-area\"></span>\n <Flex><slot name=\"social\"></slot></Flex>\n </Flex>\n </Flex>\n</footer>`\n\nfunction defineSiteFooterComponent() {\n return defineComponent<SiteFooter>(siteFooterTemplate, {\n props: [\n 'teleport',\n 'ariaLabel',\n 'copyright',\n 'legalLabel',\n 'tone',\n 'variant',\n ],\n context: (head) => resolveSiteFooter(head.props),\n })\n}\n\nexport function defineFooterComponents() {\n return {\n siteFooter: defineSiteFooterComponent(),\n }\n}\n\nfunction resolveSiteFooter(props: SiteFooter): SiteFooter {\n const year = new Date().getFullYear()\n if (!props.teleport) props.teleport = 'body'\n return {\n ...props,\n ariaLabel: props.ariaLabel || 'Site footer',\n legalLabel: props.legalLabel || 'Legal and policy links',\n copyright: props.copyright || `(c) ${year}. All rights reserved.`,\n classes: computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: 'surface',\n }),\n ),\n }\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComponentHead,\n type ComputedRef,\n computed,\n defineComponent,\n type Emits,\n html,\n isRef,\n type Ref,\n type RefOrValue,\n ref,\n unref,\n} from 'regor'\nimport { createAutoId } from '../autoId'\nimport type { ComponentVariant } from '../componentVariant'\nimport type { FormInputFieldType } from './formInputField'\n\nconst resolveAutoCompleteInputId = createAutoId('auto-complete-input')\n\nexport type AutoCompleteValue = string | number\n\nexport interface AutoCompleteOption {\n label: RefOrValue<string>\n value?: RefOrValue<AutoCompleteValue>\n disabled?: RefOrValue<boolean>\n keywords?: RefOrValue<string | string[]>\n}\n\nexport interface ResolvedAutoCompleteOption {\n label: string\n value: AutoCompleteValue\n disabled?: boolean\n keywords: string[]\n}\n\nexport interface AutoCompleteRow {\n id: string\n index: number\n option: ResolvedAutoCompleteOption\n active: boolean\n selected: boolean\n disabled?: boolean\n classes: string\n}\n\nexport interface AutoCompleteInput {\n id?: RefOrValue<string>\n label?: RefOrValue<string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n model?: Ref<string>\n selectedValue?: Ref<AutoCompleteValue | null>\n type?: RefOrValue<FormInputFieldType>\n name?: RefOrValue<string>\n required?: RefOrValue<boolean>\n autocomplete?: RefOrValue<string>\n placeholder?: RefOrValue<string>\n disabled?: RefOrValue<boolean>\n icon?: RefOrValue<string>\n iconEnd?: RefOrValue<string>\n options?: RefOrValue<AutoCompleteOption[]>\n rowComponent?: RefOrValue<string>\n minLength?: RefOrValue<number | string>\n maxResults?: RefOrValue<number | string>\n openOnFocus?: RefOrValue<boolean>\n loading?: RefOrValue<boolean>\n emptyText?: RefOrValue<string>\n loadingText?: RefOrValue<string>\n onSelect?: (option: ResolvedAutoCompleteOption) => void\n onSearch?: (query: string) => void\n emits?: Emits<'optionselect' | 'querychange'>\n listboxId?: string\n isOpen?: Ref<boolean>\n activeIndex?: Ref<number>\n query?: ComputedRef<string>\n resolvedOptions?: ComputedRef<ResolvedAutoCompleteOption[]>\n filteredOptions?: ComputedRef<ResolvedAutoCompleteOption[]>\n rows?: ComputedRef<AutoCompleteRow[]>\n activeOptionId?: ComputedRef<string | undefined>\n shouldRenderPopup?: ComputedRef<boolean>\n showLoading?: ComputedRef<boolean>\n showEmpty?: ComputedRef<boolean>\n resolvedRowComponent?: ComputedRef<string>\n resolvedIconEnd?: ComputedRef<string | undefined>\n handleFocusIn?: () => void\n handleFocusOut?: () => void\n handleInput?: () => void\n handleKeydown?: (event: KeyboardEvent) => void\n handleOptionMouseDown?: (event: MouseEvent) => void\n selectRow?: (row: AutoCompleteRow) => void\n}\n\nexport interface AutoCompleteOptionRow {\n option: RefOrValue<ResolvedAutoCompleteOption | null>\n active?: RefOrValue<boolean>\n selected?: RefOrValue<boolean>\n query?: RefOrValue<string>\n}\n\nconst autoCompleteInputTemplate = html`<div\n class=\"auto-complete-input\"\n @focusin=\"handleFocusIn\"\n @focusout=\"handleFocusOut\"\n>\n <FormInputField\n :id=\"id\"\n :label=\"label\"\n :tone=\"tone\"\n :variant=\"variant\"\n :model=\"model\"\n :type=\"type || 'search'\"\n :name=\"name\"\n :required=\"required\"\n :autocomplete=\"autocomplete || 'off'\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :icon=\"icon\"\n :iconEnd=\"resolvedIconEnd\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n :aria-controls=\"listboxId\"\n :aria-expanded=\"isOpen\"\n :aria-activedescendant=\"activeOptionId\"\n @input=\"handleInput\"\n @keydown=\"handleKeydown\"\n />\n <div\n class=\"auto-complete-input__popup\"\n r-if=\"shouldRenderPopup\"\n >\n <div\n class=\"auto-complete-input__message\"\n r-if=\"showLoading\"\n role=\"status\"\n aria-live=\"polite\"\n >\n {{ loadingText || 'Loading suggestions' }}\n </div>\n <div\n class=\"auto-complete-input__message\"\n r-if=\"showEmpty\"\n role=\"status\"\n aria-live=\"polite\"\n >\n {{ emptyText || 'No suggestions' }}\n </div>\n <div\n class=\"auto-complete-input__listbox\"\n :id=\"listboxId\"\n role=\"listbox\"\n r-if=\"!showLoading && !showEmpty\"\n >\n <div\n class=\"auto-complete-input__option\"\n :class=\"row.classes\"\n role=\"option\"\n :id=\"row.id\"\n :aria-selected=\"row.active\"\n :aria-disabled=\"row.disabled\"\n r-for=\"row in rows\"\n @mousedown=\"handleOptionMouseDown\"\n @click=\"selectRow(row)\"\n >\n <div\n :is=\"resolvedRowComponent\"\n :option=\"row.option\"\n :item=\"row.option\"\n :index=\"row.index\"\n :query=\"query\"\n :active=\"row.active\"\n :selected=\"row.selected\"\n :disabled=\"row.disabled\"\n ></div>\n </div>\n </div>\n </div>\n</div>`\n\nconst autoCompleteOptionRowTemplate = html`<div class=\"auto-complete-input__default-row\">\n <span class=\"auto-complete-input__default-label\">{{ option?.label }}</span>\n <Icon\n class=\"auto-complete-input__default-check\"\n name=\"lucide:check\"\n r-if=\"selected\"\n />\n</div>`\n\nfunction defineAutoCompleteInputComponent() {\n return defineComponent<AutoCompleteInput>(autoCompleteInputTemplate, {\n props: [\n 'id',\n 'label',\n 'tone',\n 'variant',\n 'model',\n 'selectedValue',\n 'type',\n 'name',\n 'required',\n 'autocomplete',\n 'placeholder',\n 'disabled',\n 'icon',\n 'iconEnd',\n 'options',\n 'rowComponent',\n 'minLength',\n 'maxResults',\n 'openOnFocus',\n 'loading',\n 'emptyText',\n 'loadingText',\n 'onSelect',\n 'onSearch',\n ],\n context: (head) => new AutoCompleteInputContext(head),\n })\n}\n\nfunction defineAutoCompleteOptionRowComponent() {\n return defineComponent<AutoCompleteOptionRow>(autoCompleteOptionRowTemplate, {\n props: ['option', 'active', 'selected', 'query'],\n context: (head) => head.props,\n })\n}\n\nexport function defineAutoCompleteInputComponents() {\n return {\n autoCompleteInput: defineAutoCompleteInputComponent(),\n autoCompleteOptionRow: defineAutoCompleteOptionRowComponent(),\n }\n}\n\nclass AutoCompleteInputContext implements AutoCompleteInput {\n readonly id: string\n readonly label?: RefOrValue<string>\n readonly tone?: RefOrValue<SemanticTone>\n readonly variant?: RefOrValue<ComponentVariant>\n readonly model: Ref<string>\n readonly selectedValue: Ref<AutoCompleteValue | null>\n readonly type?: RefOrValue<FormInputFieldType>\n readonly name?: RefOrValue<string>\n readonly required?: RefOrValue<boolean>\n readonly autocomplete?: RefOrValue<string>\n readonly placeholder?: RefOrValue<string>\n readonly disabled?: RefOrValue<boolean>\n readonly icon?: RefOrValue<string>\n readonly iconEnd?: RefOrValue<string>\n readonly options?: RefOrValue<AutoCompleteOption[]>\n readonly rowComponent?: RefOrValue<string>\n readonly minLength?: RefOrValue<number | string>\n readonly maxResults?: RefOrValue<number | string>\n readonly openOnFocus?: RefOrValue<boolean>\n readonly loading?: RefOrValue<boolean>\n readonly emptyText?: RefOrValue<string>\n readonly loadingText?: RefOrValue<string>\n readonly onSelect?: (option: ResolvedAutoCompleteOption) => void\n readonly onSearch?: (query: string) => void\n readonly emits?: Emits<'optionselect' | 'querychange'>\n readonly listboxId: string\n readonly isOpen = ref(false)\n readonly activeIndex = ref(-1)\n readonly query: ComputedRef<string>\n readonly resolvedOptions: ComputedRef<ResolvedAutoCompleteOption[]>\n readonly filteredOptions: ComputedRef<ResolvedAutoCompleteOption[]>\n readonly rows: ComputedRef<AutoCompleteRow[]>\n readonly activeOptionId: ComputedRef<string | undefined>\n readonly shouldRenderPopup: ComputedRef<boolean>\n readonly showLoading: ComputedRef<boolean>\n readonly showEmpty: ComputedRef<boolean>\n readonly resolvedRowComponent: ComputedRef<string>\n readonly resolvedIconEnd: ComputedRef<string | undefined>\n private readonly emit: ComponentHead<AutoCompleteInput>['emit']\n private closingTimer: ReturnType<typeof setTimeout> | undefined\n\n constructor(head: ComponentHead<AutoCompleteInput>) {\n const props = head.props\n Object.assign(this, props)\n this.emit = head.emit\n this.id = resolveAutoCompleteInputId(props.id)\n this.listboxId = `${this.id}-listbox`\n this.model = isRef(props.model) ? props.model : ref('')\n this.selectedValue = isRef(props.selectedValue)\n ? props.selectedValue\n : ref<AutoCompleteValue | null>(null)\n this.query = computed(() => String(unref(this.model) ?? ''))\n this.resolvedOptions = computed(() => {\n const options = unref(props.options)\n return Array.isArray(options)\n ? options.map(resolveAutoCompleteOption)\n : []\n })\n this.filteredOptions = computed(() => this.resolveFilteredOptions())\n this.rows = computed(() => this.resolveRows())\n this.activeOptionId = computed(() => this.rows()[this.activeIndex()]?.id)\n this.showLoading = computed(() => this.isOpen() && !!unref(this.loading))\n this.showEmpty = computed(\n () =>\n this.isOpen() &&\n !this.showLoading() &&\n this.meetsMinimumQueryLength() &&\n this.filteredOptions().length === 0,\n )\n this.shouldRenderPopup = computed(\n () =>\n this.isOpen() &&\n (this.showLoading() ||\n this.showEmpty() ||\n this.filteredOptions().length > 0),\n )\n this.resolvedRowComponent = computed(() => {\n const component = unref(props.rowComponent)\n return typeof component === 'string' && component.trim()\n ? component\n : 'AutoCompleteOptionRow'\n })\n this.resolvedIconEnd = computed(\n () =>\n unref(props.iconEnd) ||\n (unref(props.loading) ? 'lucide:loader-circle' : 'lucide:chevron-down'),\n )\n }\n\n handleFocusIn = () => {\n this.clearClosingTimer()\n if (!this.shouldOpenOnFocus()) return\n\n this.open()\n }\n\n handleFocusOut = () => {\n this.clearClosingTimer()\n this.closingTimer = setTimeout(() => {\n this.close()\n }, 0)\n }\n\n handleInput = () => {\n const query = this.query()\n this.onSearch?.(query)\n this.emit('querychange', { query })\n this.selectedValue(null)\n if (this.meetsMinimumQueryLength()) this.open()\n else this.close()\n }\n\n handleKeydown = (event: KeyboardEvent) => {\n if (unref(this.disabled)) return\n\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n if (!this.isOpen()) {\n this.open()\n return\n }\n this.open()\n this.moveActive(1)\n return\n }\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n if (!this.isOpen()) {\n this.open()\n this.activateLast()\n return\n }\n this.open()\n this.moveActive(-1)\n return\n }\n if (event.key === 'Home' && this.isOpen()) {\n event.preventDefault()\n this.activateFirst()\n return\n }\n if (event.key === 'End' && this.isOpen()) {\n event.preventDefault()\n this.activateLast()\n return\n }\n if (event.key === 'Enter' && this.isOpen()) {\n const row = this.rows()[this.activeIndex()]\n if (!row) return\n\n event.preventDefault()\n this.selectRow(row)\n return\n }\n if (event.key === 'Escape') {\n this.close()\n }\n }\n\n handleOptionMouseDown = (event: MouseEvent) => {\n event.preventDefault()\n this.clearClosingTimer()\n }\n\n selectRow = (row: AutoCompleteRow) => {\n if (row.disabled || unref(this.disabled)) return\n\n const option = row.option\n this.model(option.label)\n this.selectedValue(option.value)\n this.onSelect?.(option)\n this.emit('optionselect', { option })\n this.close()\n }\n\n private resolveFilteredOptions() {\n const query = normalizeSearchText(this.query())\n if (!this.meetsMinimumQueryLength()) return []\n\n const options = this.resolvedOptions().filter(\n (option) =>\n !query ||\n option.keywords.some((keyword) =>\n normalizeSearchText(keyword).includes(query),\n ),\n )\n return options.slice(0, this.readPositiveInteger(this.maxResults, 10))\n }\n\n private resolveRows() {\n const activeIndex = this.activeIndex()\n const selectedValue = this.selectedValue()\n return this.filteredOptions().map(\n (option, index): AutoCompleteRow => ({\n id: `${this.listboxId}-option-${index}`,\n index,\n option,\n active: index === activeIndex,\n selected: selectedValue !== null && option.value === selectedValue,\n disabled: option.disabled,\n classes: [\n index === activeIndex ? 'auto-complete-input__option--active' : '',\n selectedValue !== null && option.value === selectedValue\n ? 'auto-complete-input__option--selected'\n : '',\n option.disabled ? 'auto-complete-input__option--disabled' : '',\n ]\n .filter(Boolean)\n .join(' '),\n }),\n )\n }\n\n private open() {\n if (unref(this.disabled) || !this.meetsMinimumQueryLength()) return\n\n this.isOpen(true)\n this.ensureActiveIndex()\n }\n\n private close() {\n this.isOpen(false)\n this.activeIndex(-1)\n }\n\n private moveActive(direction: 1 | -1) {\n const rows = this.rows()\n if (rows.length === 0) {\n this.activeIndex(-1)\n return\n }\n\n const current = this.activeIndex()\n for (let offset = 1; offset <= rows.length; offset += 1) {\n const next = wrapIndex(current + direction * offset, rows.length)\n if (!rows[next]?.disabled) {\n this.activeIndex(next)\n return\n }\n }\n }\n\n private activateFirst() {\n const index = this.rows().findIndex((row) => !row.disabled)\n this.activeIndex(index)\n }\n\n private activateLast() {\n const rows = this.rows()\n for (let index = rows.length - 1; index >= 0; index -= 1) {\n if (rows[index]?.disabled) continue\n\n this.activeIndex(index)\n return\n }\n this.activeIndex(-1)\n }\n\n private ensureActiveIndex() {\n const rows = this.rows()\n const current = this.activeIndex()\n if (current >= 0 && current < rows.length && !rows[current]?.disabled)\n return\n\n this.activateFirst()\n }\n\n private shouldOpenOnFocus() {\n return unref(this.openOnFocus) !== false && this.meetsMinimumQueryLength()\n }\n\n private meetsMinimumQueryLength() {\n return (\n this.query().trim().length >= this.readPositiveInteger(this.minLength, 0)\n )\n }\n\n private readPositiveInteger(\n value: RefOrValue<number | string> | undefined,\n fallback: number,\n ) {\n const raw = unref(value)\n const parsed =\n typeof raw === 'number' ? raw : Number.parseFloat(String(raw))\n return Number.isFinite(parsed) && parsed >= 0\n ? Math.trunc(parsed)\n : fallback\n }\n\n private clearClosingTimer() {\n if (this.closingTimer === undefined) return\n\n clearTimeout(this.closingTimer)\n this.closingTimer = undefined\n }\n}\n\nfunction resolveAutoCompleteOption(\n optionInput: RefOrValue<AutoCompleteOption>,\n): ResolvedAutoCompleteOption {\n const option = unref(optionInput)\n const label = String(unref(option.label) ?? '')\n const value = unref(option.value) ?? label\n return {\n label,\n value,\n disabled: unref(option.disabled),\n keywords: resolveKeywords(option, label, value),\n }\n}\n\nfunction resolveKeywords(\n option: AutoCompleteOption,\n label: string,\n value: AutoCompleteValue,\n) {\n const keywords = unref(option.keywords)\n const source: string[] = Array.isArray(keywords)\n ? keywords.map((keyword) => String(unref(keyword) ?? ''))\n : typeof keywords === 'string'\n ? keywords.split(/\\s+/)\n : []\n return [label, String(value), ...source].filter(Boolean)\n}\n\nfunction normalizeSearchText(value: string) {\n return value.trim().toLocaleLowerCase()\n}\n\nfunction wrapIndex(index: number, length: number) {\n return ((index % length) + length) % length\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComponentHead,\n type ComputedRef,\n computed,\n defineComponent,\n html,\n isRef,\n type Ref,\n type RefOrValue,\n ref,\n unref,\n} from 'regor'\nimport { createAutoId } from '../autoId'\nimport { resolveComponentClasses } from '../componentVariant'\n\nconst resolveCheckId = createAutoId('form-check')\n\nexport class FormCheck {\n readonly id: string\n label?: RefOrValue<string>\n name?: RefOrValue<string>\n value?: RefOrValue<string>\n checked?: Ref<boolean>\n disabled?: RefOrValue<boolean>\n tone?: RefOrValue<SemanticTone>\n rootClass?: RefOrValue<string>\n hasLabel?: ComputedRef<boolean>\n classes?: ComputedRef<string>\n\n constructor(props: FormCheck) {\n Object.assign(this, props)\n this.id = resolveCheckId(props.id)\n if (!isRef(this.checked)) {\n this.checked = ref<boolean>(resolveInitialChecked(this.checked))\n }\n }\n}\n\nconst formCheckTemplate = html`<label class=\"form-block__check\" :class=\"classes\" :for=\"id\">\n <input\n :id=\"id\"\n class=\"form-block__check-input\"\n type=\"checkbox\"\n :name=\"name\"\n :value=\"value\"\n :disabled=\"disabled\"\n r-model=\"checked\"\n r-inherit/>\n <span class=\"form-block__check-control\" aria-hidden=\"true\"></span>\n <span class=\"form-block__check-label\" r-if=\"hasLabel\">{{ label }}</span>\n</label>`\n\nexport function defineFormCheckComponent() {\n return defineComponent<FormCheck>(formCheckTemplate, {\n props: [\n 'id',\n 'label',\n 'name',\n 'value',\n 'checked',\n 'disabled',\n 'tone',\n 'rootClass',\n ],\n context: (head) => resolveFormCheck(head),\n })\n}\n\nfunction resolveFormCheck(head: ComponentHead<FormCheck>): FormCheck {\n const check = new FormCheck(head.props)\n check.hasLabel = computed(() => hasCheckLabel(head.props.label))\n check.classes = computed(() =>\n resolveComponentClasses(head.props, {\n defaultVariant: 'none',\n classes: [\n check.hasLabel?.() ? undefined : 'form-block__check--bare',\n head.props.rootClass,\n ],\n }),\n )\n return check\n}\n\nfunction hasCheckLabel(label: RefOrValue<string> | undefined) {\n const value = unref(label)\n return typeof value === 'string' ? value.trim().length > 0 : Boolean(value)\n}\n\nfunction resolveInitialChecked(value: unknown) {\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase()\n return normalized !== '' && normalized !== 'false'\n }\n return !!value\n}\n","import { tryResolvePageContext } from '@purestack/ts-common'\nimport type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComponentHead,\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type RefOrValue,\n unref,\n} from 'regor'\nimport {\n type ComponentVariant,\n resolveComponentClasses,\n} from '../componentVariant'\nimport { defineFormCheckComponent } from './formCheck'\n\nexport interface AppForm {\n action?: RefOrValue<string>\n method?: RefOrValue<string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n classes?: ComputedRef<string>\n}\n\nexport interface FormMeta {}\n\nexport interface FormAssistLink {\n href?: RefOrValue<string>\n label?: RefOrValue<string>\n target?: RefOrValue<string>\n rel?: RefOrValue<string>\n normalizedHref?: ComputedRef<string | undefined>\n resolvedRel?: ComputedRef<string | undefined>\n}\n\nexport interface FormSubmit {\n label?: RefOrValue<string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n}\n\nexport interface FormDivider {\n label?: RefOrValue<string>\n}\n\nexport interface FormStatus {\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n hidden?: RefOrValue<boolean>\n classes?: ComputedRef<string>\n}\n\nconst appFormTemplate = html`<form\n class=\"form-block\"\n :class=\"classes\"\n :action=\"action\"\n :method=\"method\"\n novalidate\n>\n <slot></slot>\n</form>`\n\nconst formMetaTemplate = html`<div class=\"form-block__meta\"><slot></slot></div>`\n\nconst formAssistLinkTemplate = html`<a\n class=\"form-block__assist-link\"\n :href=\"normalizedHref\"\n r-if=\"normalizedHref\"\n :target=\"target\"\n :rel=\"resolvedRel\"\n>\n {{ label }}\n</a>`\n\nconst formSubmitTemplate = html`<Btn type=\"submit\" :tone=\"tone\" :variant=\"variant\"\n >{{ label }}</Btn\n>`\n\nconst formDividerTemplate = html`<div class=\"form-block__divider\" :data-label=\"label\"></div>`\n\nconst formStatusTemplate = html`<div\n class=\"form-status\"\n :class=\"classes\"\n role=\"status\"\n aria-live=\"polite\"\n :hidden=\"hidden\"\n>\n <slot></slot>\n</div>`\n\nfunction defineAppFormComponent() {\n return defineComponent<AppForm>(appFormTemplate, {\n props: ['action', 'method', 'tone', 'variant'],\n context: (head) => resolveAppForm(head),\n })\n}\n\nfunction defineFormMetaComponent() {\n return defineComponent<FormMeta>(formMetaTemplate, {})\n}\n\nfunction defineFormAssistLinkComponent() {\n return defineComponent<FormAssistLink>(formAssistLinkTemplate, {\n props: ['href', 'label', 'target', 'rel'],\n context: (head) => resolveFormAssistLink(head),\n })\n}\n\nfunction defineFormSubmitComponent() {\n return defineComponent<FormSubmit>(formSubmitTemplate, {\n props: ['label', 'tone', 'variant'],\n context: (head) => resolveFormSubmit(head),\n })\n}\n\nfunction defineFormDividerComponent() {\n return defineComponent<FormDivider>(formDividerTemplate, {\n props: ['label'],\n context: (head) => head.props,\n })\n}\n\nfunction defineFormStatusComponent() {\n return defineComponent<FormStatus>(formStatusTemplate, {\n props: ['tone', 'variant', 'hidden'],\n context: (head) => resolveFormStatus(head),\n })\n}\n\nexport function defineFormComponents() {\n return {\n appForm: defineAppFormComponent(),\n formMeta: defineFormMetaComponent(),\n formCheck: defineFormCheckComponent(),\n formAssistLink: defineFormAssistLinkComponent(),\n formSubmit: defineFormSubmitComponent(),\n formDivider: defineFormDividerComponent(),\n formStatus: defineFormStatusComponent(),\n }\n}\n\nfunction resolveAppForm(head: ComponentHead<AppForm>): AppForm {\n const props = head.props\n return {\n ...props,\n action: resolvePublicAction(head),\n classes: computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: 'none',\n }),\n ),\n }\n}\n\nfunction resolvePublicAction(head: ComponentHead<AppForm>) {\n const action = unref(head.props.action)\n if (!action) return action\n return tryResolvePageContext(head)?.resolvePublicHref(action) ?? action\n}\n\nfunction resolveFormAssistLink(\n head: ComponentHead<FormAssistLink>,\n): FormAssistLink {\n return {\n ...head.props,\n normalizedHref: computed(() =>\n resolvePublicHref(toTrimmedHref(unref(head.props.href)), head),\n ),\n resolvedRel: computed(\n () =>\n unref(head.props.rel) ||\n (unref(head.props.target) === '_blank'\n ? 'noopener noreferrer'\n : undefined),\n ),\n }\n}\n\nfunction toTrimmedHref(value: unknown) {\n return typeof value === 'string' ? value.trim() : undefined\n}\n\nfunction resolvePublicHref(\n href: string | undefined,\n head: ComponentHead<FormAssistLink>,\n) {\n if (!href) return undefined\n return tryResolvePageContext(head)?.resolvePublicHref(href) ?? href\n}\n\nfunction resolveFormSubmit(head: ComponentHead<FormSubmit>): FormSubmit {\n return {\n ...head.props,\n }\n}\n\nfunction resolveFormStatus(head: ComponentHead<FormStatus>): FormStatus {\n return {\n ...head.props,\n classes: computed(() =>\n resolveComponentClasses(head.props, {\n defaultVariant: 'surface',\n }),\n ),\n }\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComponentHead,\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type Ref,\n type RefOrValue,\n ref,\n unref,\n} from 'regor'\nimport { createAutoId } from '../autoId'\nimport {\n type ComponentVariant,\n resolveComponentClasses,\n} from '../componentVariant'\n\nconst resolveInputId = createAutoId('form-input')\n\nexport type FormInputFieldType =\n | 'color'\n | 'text'\n | 'email'\n | 'password'\n | 'number'\n | 'tel'\n | 'url'\n | 'search'\n | 'date'\n | 'time'\n | 'datetime-local'\n | 'month'\n | 'week'\n\nexport class FormInputField {\n readonly id: string\n readonly label?: RefOrValue<string>\n readonly tone?: RefOrValue<SemanticTone>\n readonly variant?: RefOrValue<ComponentVariant>\n declare readonly model: Ref<string | number>\n readonly type?: RefOrValue<FormInputFieldType>\n readonly name?: RefOrValue<string>\n readonly required?: RefOrValue<boolean>\n readonly autocomplete?: RefOrValue<string>\n readonly min?: RefOrValue<number | string>\n readonly step?: RefOrValue<number | string>\n readonly placeholder?: RefOrValue<string>\n readonly disabled?: RefOrValue<boolean>\n readonly icon?: RefOrValue<string>\n readonly iconEnd?: RefOrValue<string>\n classes?: ComputedRef<string>\n\n constructor(props: FormInputField) {\n Object.assign(this, {\n ...props,\n })\n this.id = resolveInputId(props.id)\n if (!this.model) this.model = ref<string | number>('')\n }\n\n get isNumberField() {\n return unref(this.type) === 'number'\n }\n\n increment = () => {\n this.stepBy(1)\n }\n\n decrement = () => {\n this.stepBy(-1)\n }\n\n private stepBy(direction: 1 | -1) {\n const current = this.readCurrentNumber()\n const step = this.readStep()\n const min = this.readMin()\n let next = current + direction * step\n if (min !== undefined && next < min) {\n next = min\n }\n const modelRef = this.model\n if (modelRef) modelRef(next)\n }\n\n private readCurrentNumber() {\n const raw = unref(this.model)\n const numeric =\n typeof raw === 'number' ? raw : Number.parseFloat(String(raw ?? '0'))\n return Number.isFinite(numeric) ? numeric : 0\n }\n\n private readMin() {\n const min = unref(this.min)\n if (min === undefined) return undefined\n const value = typeof min === 'number' ? min : Number.parseFloat(min)\n return Number.isFinite(value) ? value : undefined\n }\n\n private readStep() {\n const step = unref(this.step)\n if (step === undefined) return 1\n const value = typeof step === 'number' ? step : Number.parseFloat(step)\n return Number.isFinite(value) && value > 0 ? value : 1\n }\n}\n\nconst formInputFieldTemplate = html`<label class=\"form-block__field\" :for=\"id\">\n <span class=\"form-block__label\" r-if=\"label\">{{ label }}</span>\n <div class=\"form-block__input-shell\" :class=\"classes\">\n <Icon class=\"form-block__input-icon\" :name=\"icon\" r-if=\"icon\"/>\n <input\n :id=\"id\"\n class=\"form-block__input\"\n :class=\"{ 'form-block__input--number': isNumberField }\"\n :type=\"isNumberField ? 'number' : type || 'text'\"\n :name=\"name\"\n :required=\"required\"\n :autocomplete=\"autocomplete || 'off'\"\n :min=\"min\"\n :step=\"step\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n r-model=\"model\"\n r-inherit/>\n <div class=\"form-block__number-controls\" r-if=\"isNumberField\">\n <button\n class=\"form-block__number-btn form-block__number-btn--up tone-fill-button-all\"\n type=\"button\"\n aria-label=\"Increase value\"\n @click=\"increment\"\n :disabled=\"disabled\"\n tabindex=\"-1\"\n >\n +\n </button>\n <button\n class=\"form-block__number-btn form-block__number-btn--down tone-fill-button-all\"\n type=\"button\"\n aria-label=\"Decrease value\"\n @click=\"decrement\"\n :disabled=\"disabled\"\n tabindex=\"-1\"\n >\n -\n </button>\n </div>\n <Icon class=\"form-block__input-icon\" :name=\"iconEnd\" r-if=\"iconEnd\"/>\n </div>\n</label>`\nexport function defineFormInputField() {\n return {\n formInputField: defineComponent<FormInputField>(formInputFieldTemplate, {\n props: [\n 'id',\n 'label',\n 'tone',\n 'variant',\n 'model',\n 'type',\n 'name',\n 'required',\n 'autocomplete',\n 'min',\n 'step',\n 'placeholder',\n 'disabled',\n 'icon',\n 'iconEnd',\n ],\n context: (head) => resolveFormInputField(head),\n }),\n }\n}\n\nfunction resolveFormInputField(head: ComponentHead<FormInputField>) {\n const field = new FormInputField(head.props)\n field.classes = computed(() =>\n resolveComponentClasses(head.props, {\n defaultVariant: 'surfaceAlt',\n }),\n )\n return field\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComponentHead,\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type Ref,\n type RefOrValue,\n ref,\n unref,\n} from 'regor'\nimport { createAutoId } from '../autoId'\nimport {\n type ComponentVariant,\n resolveComponentClasses,\n} from '../componentVariant'\n\nconst resolveSelectId = createAutoId('form-select')\n\nexport type FormSelectValue = string | number\n\nexport interface FormSelectOption {\n label: RefOrValue<string>\n value?: RefOrValue<FormSelectValue>\n disabled?: RefOrValue<boolean>\n}\n\nexport interface ResolvedFormSelectOption {\n label: string\n value: FormSelectValue\n disabled?: boolean\n}\n\nexport class FormSelectField {\n readonly id: string\n readonly label?: RefOrValue<string>\n readonly tone?: RefOrValue<SemanticTone>\n readonly variant?: RefOrValue<ComponentVariant>\n declare readonly model: Ref<FormSelectValue>\n readonly name?: RefOrValue<string>\n readonly required?: RefOrValue<boolean>\n readonly autocomplete?: RefOrValue<string>\n readonly placeholder?: RefOrValue<string>\n readonly disabled?: RefOrValue<boolean>\n readonly icon?: RefOrValue<string>\n readonly iconEnd?: RefOrValue<string>\n readonly options?: RefOrValue<FormSelectOption[]>\n classes?: ComputedRef<string>\n resolvedOptions?: ComputedRef<ResolvedFormSelectOption[]>\n resolvedIconEnd?: ComputedRef<string>\n hasPlaceholder?: ComputedRef<boolean>\n\n constructor(props: FormSelectField) {\n Object.assign(this, {\n ...props,\n })\n this.id = resolveSelectId(props.id)\n if (!this.model) this.model = ref<FormSelectValue>('')\n }\n}\n\nconst formSelectFieldTemplate = html`<label class=\"form-block__field\" :for=\"id\">\n <span class=\"form-block__label\" r-if=\"label\">{{ label }}</span>\n <div\n class=\"form-block__input-shell form-block__select-shell\"\n :class=\"classes\"\n >\n <Icon\n class=\"form-block__input-icon\"\n :name=\"icon\"\n r-if=\"icon\"\n style=\"pointer-events: none\"/>\n <select\n :id=\"id\"\n class=\"form-block__input form-block__select\"\n :name=\"name\"\n :required=\"required\"\n :autocomplete=\"autocomplete || 'off'\"\n :disabled=\"disabled\"\n r-model=\"model\"\n r-inherit\n >\n <option value=\"\" disabled r-if=\"hasPlaceholder\">{{ placeholder }}</option>\n <option\n r-for=\"option in resolvedOptions\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n >\n {{ option.label }}\n </option>\n </select>\n <Icon\n class=\"form-block__input-icon\"\n :name=\"resolvedIconEnd\"/>\n </div>\n</label>`\n\nexport function defineFormSelectField() {\n return {\n formSelectField: defineComponent<FormSelectField>(formSelectFieldTemplate, {\n props: [\n 'id',\n 'label',\n 'tone',\n 'variant',\n 'model',\n 'name',\n 'required',\n 'autocomplete',\n 'placeholder',\n 'disabled',\n 'icon',\n 'iconEnd',\n 'options',\n ],\n context: (head) => resolveFormSelectField(head),\n }),\n }\n}\n\nfunction resolveFormSelectField(head: ComponentHead<FormSelectField>) {\n const field = new FormSelectField(head.props)\n field.classes = computed(() =>\n resolveComponentClasses(head.props, {\n defaultVariant: 'surfaceAlt',\n }),\n )\n field.resolvedOptions = computed(() => {\n const options = (unref(head.props.options) || []) as Array<\n RefOrValue<FormSelectOption>\n >\n return options.map((option) => resolveSelectOption(option))\n })\n field.resolvedIconEnd = computed(\n () => unref(head.props.iconEnd) || 'lucide:chevron-down',\n )\n field.hasPlaceholder = computed(() => Boolean(unref(head.props.placeholder)))\n return field\n}\n\nfunction resolveSelectOption(\n optionInput: RefOrValue<FormSelectOption>,\n): ResolvedFormSelectOption {\n const option = unref(optionInput)\n const label = unref(option.label)\n return {\n label,\n value: unref(option.value) ?? label,\n disabled: unref(option.disabled),\n }\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComponentHead,\n type ComputedRef,\n computed,\n defineComponent,\n type Emits,\n html,\n isRef,\n type Ref,\n type RefOrValue,\n ref,\n type SRef,\n sref,\n unref,\n} from 'regor'\nimport { createAutoId } from '../autoId'\nimport {\n type ComponentVariant,\n resolveComponentClasses,\n} from '../componentVariant'\nimport type {\n AutoCompleteOption,\n AutoCompleteValue,\n ResolvedAutoCompleteOption,\n} from './autoCompleteInput'\n\nconst resolveMultiAutoCompleteInputId = createAutoId(\n 'multi-auto-complete-input',\n)\n\nexport interface MultiAutoCompleteItem {\n label: RefOrValue<string>\n value?: RefOrValue<AutoCompleteValue>\n disabled?: RefOrValue<boolean>\n invalid?: RefOrValue<boolean>\n tone?: RefOrValue<SemanticTone>\n keywords?: RefOrValue<string | string[]>\n}\n\nexport interface ResolvedMultiAutoCompleteItem {\n label: string\n value: AutoCompleteValue\n disabled?: boolean\n invalid?: boolean\n tone?: SemanticTone\n keywords: string[]\n}\n\nexport type MultiAutoCompleteCreateItem = (\n query: string,\n) => MultiAutoCompleteItem | null | undefined\n\nexport type MultiAutoCompleteOptionToItem = (\n option: ResolvedAutoCompleteOption,\n) => MultiAutoCompleteItem | null | undefined\n\nexport type MultiAutoCompleteSplitInput = (value: string) => string[]\n\nexport type MultiAutoCompleteItemsChange = (\n items: MultiAutoCompleteItem[],\n) => void\n\nexport type MultiAutoCompleteSelect = (\n option: ResolvedAutoCompleteOption,\n item: MultiAutoCompleteItem,\n) => void\n\nexport type MultiAutoCompleteSearch = (query: string) => void\n\nexport interface MultiAutoCompleteSelectedRow {\n id: string\n index: number\n item: ResolvedMultiAutoCompleteItem\n classes: string\n}\n\nexport interface MultiAutoCompleteOptionRow {\n id: string\n index: number\n option: ResolvedAutoCompleteOption\n active: boolean\n disabled?: boolean\n classes: string\n}\n\nexport interface MultiAutoCompleteInput {\n id?: RefOrValue<string>\n label?: RefOrValue<string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n items?: SRef<MultiAutoCompleteItem[]>\n model?: Ref<string>\n name?: RefOrValue<string>\n required?: RefOrValue<boolean>\n autocomplete?: RefOrValue<string>\n placeholder?: RefOrValue<string>\n disabled?: RefOrValue<boolean>\n icon?: RefOrValue<string>\n iconEnd?: RefOrValue<string>\n removeIcon?: RefOrValue<string>\n options?: RefOrValue<AutoCompleteOption[]>\n rowComponent?: RefOrValue<string>\n minLength?: RefOrValue<number | string>\n maxResults?: RefOrValue<number | string>\n openOnFocus?: RefOrValue<boolean>\n allowCustomValues?: RefOrValue<boolean>\n allowDuplicates?: RefOrValue<boolean>\n separators?: RefOrValue<string>\n loading?: RefOrValue<boolean>\n emptyText?: RefOrValue<string>\n loadingText?: RefOrValue<string>\n onCreateItem?: RefOrValue<MultiAutoCompleteCreateItem>\n onOptionToItem?: RefOrValue<MultiAutoCompleteOptionToItem>\n onSplitInput?: RefOrValue<MultiAutoCompleteSplitInput>\n onItemsChange?: RefOrValue<MultiAutoCompleteItemsChange>\n onSelect?: RefOrValue<MultiAutoCompleteSelect>\n onSearch?: RefOrValue<MultiAutoCompleteSearch>\n emits?: Emits<\n 'itemschange' | 'itemremove' | 'itemcreate' | 'optionselect' | 'querychange'\n >\n inputId?: string\n listboxId?: string\n inputElement?: SRef<HTMLInputElement | null>\n isOpen?: Ref<boolean>\n activeIndex?: Ref<number>\n query?: ComputedRef<string>\n classes?: ComputedRef<string>\n resolvedItems?: ComputedRef<ResolvedMultiAutoCompleteItem[]>\n selectedRows?: ComputedRef<MultiAutoCompleteSelectedRow[]>\n resolvedOptions?: ComputedRef<ResolvedAutoCompleteOption[]>\n filteredOptions?: ComputedRef<ResolvedAutoCompleteOption[]>\n optionRows?: ComputedRef<MultiAutoCompleteOptionRow[]>\n activeOptionId?: ComputedRef<string | undefined>\n shouldRenderPopup?: ComputedRef<boolean>\n showLoading?: ComputedRef<boolean>\n showEmpty?: ComputedRef<boolean>\n resolvedRowComponent?: ComputedRef<string>\n resolvedIconEnd?: ComputedRef<string | undefined>\n resolvedRemoveIcon?: ComputedRef<string>\n focusInput?: () => void\n handleFocusIn?: () => void\n handleFocusOut?: () => void\n handleInput?: () => void\n handlePaste?: (event: ClipboardEvent) => void\n handleKeydown?: (event: KeyboardEvent) => void\n handleOptionMouseDown?: (event: MouseEvent) => void\n selectOptionRow?: (row: MultiAutoCompleteOptionRow) => void\n removeSelectedRow?: (row: MultiAutoCompleteSelectedRow) => void\n removeItemLabel?: (row: MultiAutoCompleteSelectedRow) => string\n}\n\nexport interface MultiAutoCompleteDefaultOptionRow {\n option: RefOrValue<ResolvedAutoCompleteOption | null>\n active?: RefOrValue<boolean>\n}\n\nconst multiAutoCompleteInputTemplate = html`<label\n class=\"multi-auto-complete-input form-block__field\"\n :for=\"inputId\"\n @focusin=\"handleFocusIn\"\n @focusout=\"handleFocusOut\"\n>\n <span class=\"form-block__label\" r-if=\"label\">{{ label }}</span>\n <div\n class=\"multi-auto-complete-input__shell form-block__input-shell\"\n :class=\"classes\"\n @click=\"focusInput\"\n >\n <Icon class=\"form-block__input-icon\" :name=\"icon\" r-if=\"icon\"/>\n <div class=\"multi-auto-complete-input__control\">\n <span\n class=\"multi-auto-complete-input__item\"\n :class=\"row.classes\"\n r-for=\"row in selectedRows\"\n >\n <span class=\"multi-auto-complete-input__item-label\">\n {{ row.item.label }}\n </span>\n <button\n class=\"multi-auto-complete-input__remove\"\n type=\"button\"\n :title=\"removeItemLabel(row)\"\n :aria-label=\"removeItemLabel(row)\"\n :disabled=\"disabled || row.item.disabled\"\n @click=\"removeSelectedRow(row)\"\n >\n <Icon :name=\"resolvedRemoveIcon\"/>\n </button>\n <input\n r-if=\"name\"\n type=\"hidden\"\n :name=\"name\"\n :value=\"row.item.value\"/>\n </span>\n <input\n :id=\"inputId\"\n :ref=\"inputElement\"\n class=\"multi-auto-complete-input__query form-block__input\"\n type=\"text\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n :aria-controls=\"listboxId\"\n :aria-expanded=\"isOpen\"\n :aria-activedescendant=\"activeOptionId\"\n :required=\"required && selectedRows.length === 0\"\n :autocomplete=\"autocomplete || 'off'\"\n :placeholder=\"selectedRows.length === 0 ? placeholder : ''\"\n :disabled=\"disabled\"\n r-model=\"model\"\n @input=\"handleInput\"\n @paste=\"handlePaste\"\n @keydown=\"handleKeydown\"/>\n </div>\n <Icon\n class=\"form-block__input-icon\"\n :name=\"resolvedIconEnd\"\n r-if=\"resolvedIconEnd\"/>\n </div>\n <div\n class=\"multi-auto-complete-input__popup\"\n r-if=\"shouldRenderPopup\"\n >\n <div\n class=\"multi-auto-complete-input__message\"\n r-if=\"showLoading\"\n role=\"status\"\n aria-live=\"polite\"\n >\n {{ loadingText || 'Loading suggestions' }}\n </div>\n <div\n class=\"multi-auto-complete-input__message\"\n r-if=\"showEmpty\"\n role=\"status\"\n aria-live=\"polite\"\n >\n {{ emptyText || 'No suggestions' }}\n </div>\n <div\n class=\"multi-auto-complete-input__listbox\"\n :id=\"listboxId\"\n role=\"listbox\"\n r-if=\"!showLoading && !showEmpty\"\n >\n <div\n class=\"multi-auto-complete-input__option\"\n :class=\"row.classes\"\n role=\"option\"\n :id=\"row.id\"\n :aria-selected=\"row.active\"\n :aria-disabled=\"row.disabled\"\n r-for=\"row in optionRows\"\n @mousedown=\"handleOptionMouseDown\"\n @click=\"selectOptionRow(row)\"\n >\n <div\n :is=\"resolvedRowComponent\"\n :option=\"row.option\"\n :item=\"row.option\"\n :index=\"row.index\"\n :query=\"query\"\n :active=\"row.active\"\n :selected=\"false\"\n :disabled=\"row.disabled\"\n ></div>\n </div>\n </div>\n </div>\n</label>`\n\nconst multiAutoCompleteOptionRowTemplate = html`<div class=\"multi-auto-complete-input__default-row\">\n <span class=\"multi-auto-complete-input__default-label\">\n {{ option?.label }}\n </span>\n</div>`\n\nfunction defineMultiAutoCompleteInputComponent() {\n return defineComponent<MultiAutoCompleteInput>(\n multiAutoCompleteInputTemplate,\n {\n props: [\n 'id',\n 'label',\n 'tone',\n 'variant',\n 'items',\n 'model',\n 'name',\n 'required',\n 'autocomplete',\n 'placeholder',\n 'disabled',\n 'icon',\n 'iconEnd',\n 'removeIcon',\n 'options',\n 'rowComponent',\n 'minLength',\n 'maxResults',\n 'openOnFocus',\n 'allowCustomValues',\n 'allowDuplicates',\n 'separators',\n 'loading',\n 'emptyText',\n 'loadingText',\n 'onCreateItem',\n 'onOptionToItem',\n 'onSplitInput',\n 'onItemsChange',\n 'onSelect',\n 'onSearch',\n ],\n context: (head) => new MultiAutoCompleteInputContext(head),\n },\n )\n}\n\nfunction defineMultiAutoCompleteOptionRowComponent() {\n return defineComponent<MultiAutoCompleteDefaultOptionRow>(\n multiAutoCompleteOptionRowTemplate,\n {\n props: ['option', 'active', 'selected', 'query'],\n context: (head) => head.props,\n },\n )\n}\n\nexport function defineMultiAutoCompleteInputComponents() {\n return {\n multiAutoCompleteInput: defineMultiAutoCompleteInputComponent(),\n multiAutoCompleteOptionRow: defineMultiAutoCompleteOptionRowComponent(),\n }\n}\n\nclass MultiAutoCompleteInputContext implements MultiAutoCompleteInput {\n readonly id: string\n readonly label?: RefOrValue<string>\n readonly tone?: RefOrValue<SemanticTone>\n readonly variant?: RefOrValue<ComponentVariant>\n readonly items: SRef<MultiAutoCompleteItem[]>\n readonly model: Ref<string>\n readonly name?: RefOrValue<string>\n readonly required?: RefOrValue<boolean>\n readonly autocomplete?: RefOrValue<string>\n readonly placeholder?: RefOrValue<string>\n readonly disabled?: RefOrValue<boolean>\n readonly icon?: RefOrValue<string>\n readonly iconEnd?: RefOrValue<string>\n readonly removeIcon?: RefOrValue<string>\n readonly options?: RefOrValue<AutoCompleteOption[]>\n readonly rowComponent?: RefOrValue<string>\n readonly minLength?: RefOrValue<number | string>\n readonly maxResults?: RefOrValue<number | string>\n readonly openOnFocus?: RefOrValue<boolean>\n readonly allowCustomValues?: RefOrValue<boolean>\n readonly allowDuplicates?: RefOrValue<boolean>\n readonly separators?: RefOrValue<string>\n readonly loading?: RefOrValue<boolean>\n readonly emptyText?: RefOrValue<string>\n readonly loadingText?: RefOrValue<string>\n readonly onCreateItem?: RefOrValue<MultiAutoCompleteCreateItem>\n readonly onOptionToItem?: RefOrValue<MultiAutoCompleteOptionToItem>\n readonly onSplitInput?: RefOrValue<MultiAutoCompleteSplitInput>\n readonly onItemsChange?: RefOrValue<MultiAutoCompleteItemsChange>\n readonly onSelect?: RefOrValue<MultiAutoCompleteSelect>\n readonly onSearch?: RefOrValue<MultiAutoCompleteSearch>\n readonly inputId: string\n readonly listboxId: string\n readonly inputElement = sref<HTMLInputElement | null>(null)\n readonly isOpen = ref(false)\n readonly activeIndex = ref(-1)\n readonly query: ComputedRef<string>\n readonly classes: ComputedRef<string>\n readonly resolvedItems: ComputedRef<ResolvedMultiAutoCompleteItem[]>\n readonly selectedRows: ComputedRef<MultiAutoCompleteSelectedRow[]>\n readonly resolvedOptions: ComputedRef<ResolvedAutoCompleteOption[]>\n readonly filteredOptions: ComputedRef<ResolvedAutoCompleteOption[]>\n readonly optionRows: ComputedRef<MultiAutoCompleteOptionRow[]>\n readonly activeOptionId: ComputedRef<string | undefined>\n readonly shouldRenderPopup: ComputedRef<boolean>\n readonly showLoading: ComputedRef<boolean>\n readonly showEmpty: ComputedRef<boolean>\n readonly resolvedRowComponent: ComputedRef<string>\n readonly resolvedIconEnd: ComputedRef<string | undefined>\n readonly resolvedRemoveIcon: ComputedRef<string>\n private readonly emit: ComponentHead<MultiAutoCompleteInput>['emit']\n private closingTimer: ReturnType<typeof setTimeout> | undefined\n\n constructor(head: ComponentHead<MultiAutoCompleteInput>) {\n const props = head.props\n Object.assign(this, props)\n this.emit = head.emit\n this.id = resolveMultiAutoCompleteInputId(props.id)\n this.inputId = `${this.id}-query`\n this.listboxId = `${this.id}-listbox`\n this.items = isRef(props.items)\n ? props.items\n : sref<MultiAutoCompleteItem[]>([])\n this.model = isRef(props.model) ? props.model : ref('')\n this.query = computed(() => String(unref(this.model) ?? ''))\n this.classes = computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: 'surfaceAlt',\n classes: [\n unref(this.disabled)\n ? 'multi-auto-complete-input__shell--disabled'\n : '',\n ],\n }),\n )\n this.resolvedItems = computed(() =>\n this.items().map(resolveMultiAutoCompleteItem),\n )\n this.selectedRows = computed(() => this.resolveSelectedRows())\n this.resolvedOptions = computed(() => {\n const options = unref(props.options)\n return Array.isArray(options)\n ? options.map(resolveAutoCompleteOption)\n : []\n })\n this.filteredOptions = computed(() => this.resolveFilteredOptions())\n this.optionRows = computed(() => this.resolveOptionRows())\n this.activeOptionId = computed(\n () => this.optionRows()[this.activeIndex()]?.id,\n )\n this.showLoading = computed(() => this.isOpen() && !!unref(this.loading))\n this.showEmpty = computed(\n () =>\n this.isOpen() &&\n !this.showLoading() &&\n this.meetsMinimumQueryLength() &&\n this.filteredOptions().length === 0,\n )\n this.shouldRenderPopup = computed(\n () =>\n this.isOpen() &&\n (this.showLoading() ||\n this.showEmpty() ||\n this.filteredOptions().length > 0),\n )\n this.resolvedRowComponent = computed(() => {\n const component = unref(props.rowComponent)\n return typeof component === 'string' && component.trim()\n ? component\n : 'MultiAutoCompleteOptionRow'\n })\n this.resolvedIconEnd = computed(\n () =>\n unref(props.iconEnd) ||\n (unref(props.loading) ? 'lucide:loader-circle' : 'lucide:chevron-down'),\n )\n this.resolvedRemoveIcon = computed(\n () => unref(props.removeIcon) || 'lucide:x',\n )\n }\n\n focusInput = () => {\n if (unref(this.disabled)) return\n this.inputElement()?.focus()\n }\n\n handleFocusIn = () => {\n this.clearClosingTimer()\n if (!this.shouldOpenOnFocus()) return\n\n this.open()\n }\n\n handleFocusOut = () => {\n this.clearClosingTimer()\n this.closingTimer = setTimeout(() => {\n this.close()\n }, 0)\n }\n\n handleInput = () => {\n const query = this.query()\n unref(this.onSearch)?.(query)\n this.emit('querychange', { query })\n if (this.meetsMinimumQueryLength()) this.open()\n else this.close()\n }\n\n handlePaste = (event: ClipboardEvent) => {\n if (unref(this.disabled) || !this.canCreateCustomValues()) return\n\n const text = event.clipboardData?.getData('text') ?? ''\n const values = this.splitValues(text)\n if (values.length <= 1) return\n\n event.preventDefault()\n this.addCreatedValues(values)\n }\n\n handleKeydown = (event: KeyboardEvent) => {\n if (unref(this.disabled)) return\n\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n if (!this.isOpen()) {\n this.open()\n return\n }\n this.open()\n this.moveActive(1)\n return\n }\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n if (!this.isOpen()) {\n this.open()\n this.activateLast()\n return\n }\n this.open()\n this.moveActive(-1)\n return\n }\n if (event.key === 'Home' && this.isOpen()) {\n event.preventDefault()\n this.activateFirst()\n return\n }\n if (event.key === 'End' && this.isOpen()) {\n event.preventDefault()\n this.activateLast()\n return\n }\n if (event.key === 'Enter') {\n const row = this.isOpen() ? this.optionRows()[this.activeIndex()] : null\n if (row) {\n event.preventDefault()\n this.selectOptionRow(row)\n return\n }\n\n if (this.commitQuery()) event.preventDefault()\n return\n }\n if (event.key === 'Backspace' && !this.query()) {\n const rows = this.selectedRows()\n const row = rows[rows.length - 1]\n if (!row) return\n\n event.preventDefault()\n this.removeSelectedRow(row)\n return\n }\n if (event.key === 'Escape') {\n this.close()\n return\n }\n if (\n event.key.length === 1 &&\n this.resolvedSeparators().includes(event.key)\n ) {\n if (this.commitQuery()) event.preventDefault()\n }\n }\n\n handleOptionMouseDown = (event: MouseEvent) => {\n event.preventDefault()\n this.clearClosingTimer()\n }\n\n selectOptionRow = (row: MultiAutoCompleteOptionRow) => {\n if (row.disabled || unref(this.disabled)) return\n\n const item = unref(this.onOptionToItem)?.(row.option) ?? {\n label: row.option.label,\n value: row.option.value,\n }\n if (!this.addItem(item)) return\n\n this.model('')\n unref(this.onSelect)?.(row.option, item)\n this.emit('optionselect', { option: row.option, item })\n this.close()\n }\n\n removeSelectedRow = (row: MultiAutoCompleteSelectedRow) => {\n if (unref(this.disabled) || row.item.disabled) return\n\n const next = this.items().filter((_, index) => index !== row.index)\n this.writeItems(next)\n this.emit('itemremove', { item: row.item, index: row.index })\n }\n\n removeItemLabel = (row: MultiAutoCompleteSelectedRow) =>\n `Remove ${row.item.label}`\n\n private commitQuery() {\n if (!this.canCreateCustomValues()) return false\n\n const values = this.splitValues(this.query())\n if (values.length === 0) return false\n\n const added = this.addCreatedValues(values)\n if (added > 0) this.model('')\n return added > 0\n }\n\n private addCreatedValues(values: string[]) {\n const created: MultiAutoCompleteItem[] = []\n for (const value of values) {\n const item = unref(this.onCreateItem)?.(value) ?? {\n label: value,\n value,\n }\n if (!item || this.hasItemValue(item)) continue\n created.push(item)\n }\n if (created.length === 0) return 0\n\n const next = [...this.items(), ...created]\n this.writeItems(next)\n for (const item of created) this.emit('itemcreate', { item })\n this.close()\n return created.length\n }\n\n private addItem(item: MultiAutoCompleteItem) {\n if (!item || this.hasItemValue(item)) return false\n\n this.writeItems([...this.items(), item])\n return true\n }\n\n private writeItems(items: MultiAutoCompleteItem[]) {\n this.items(items)\n unref(this.onItemsChange)?.(items)\n this.emit('itemschange', { items })\n }\n\n private resolveSelectedRows() {\n return this.resolvedItems().map(\n (item, index): MultiAutoCompleteSelectedRow => ({\n id: `${this.id}-item-${index}`,\n index,\n item,\n classes: [\n item.invalid ? 'multi-auto-complete-input__item--invalid' : '',\n item.disabled ? 'multi-auto-complete-input__item--disabled' : '',\n item.tone ? `tone-${item.tone}` : '',\n ]\n .filter(Boolean)\n .join(' '),\n }),\n )\n }\n\n private resolveFilteredOptions() {\n const query = normalizeSearchText(this.query())\n if (!this.meetsMinimumQueryLength()) return []\n\n const options = this.resolvedOptions().filter(\n (option) =>\n !this.hasOptionValue(option) &&\n (!query ||\n option.keywords.some((keyword) =>\n normalizeSearchText(keyword).includes(query),\n )),\n )\n return options.slice(0, this.readPositiveInteger(this.maxResults, 10))\n }\n\n private resolveOptionRows() {\n const activeIndex = this.activeIndex()\n return this.filteredOptions().map(\n (option, index): MultiAutoCompleteOptionRow => ({\n id: `${this.listboxId}-option-${index}`,\n index,\n option,\n active: index === activeIndex,\n disabled: option.disabled,\n classes: [\n index === activeIndex\n ? 'multi-auto-complete-input__option--active'\n : '',\n option.disabled ? 'multi-auto-complete-input__option--disabled' : '',\n ]\n .filter(Boolean)\n .join(' '),\n }),\n )\n }\n\n private open() {\n if (unref(this.disabled) || !this.meetsMinimumQueryLength()) return\n\n this.isOpen(true)\n this.ensureActiveIndex()\n }\n\n private close() {\n this.isOpen(false)\n this.activeIndex(-1)\n }\n\n private moveActive(direction: 1 | -1) {\n const rows = this.optionRows()\n if (rows.length === 0) {\n this.activeIndex(-1)\n return\n }\n\n const current = this.activeIndex()\n for (let offset = 1; offset <= rows.length; offset += 1) {\n const next = wrapIndex(current + direction * offset, rows.length)\n if (!rows[next]?.disabled) {\n this.activeIndex(next)\n return\n }\n }\n }\n\n private activateFirst() {\n const index = this.optionRows().findIndex((row) => !row.disabled)\n this.activeIndex(index)\n }\n\n private activateLast() {\n const rows = this.optionRows()\n for (let index = rows.length - 1; index >= 0; index -= 1) {\n if (rows[index]?.disabled) continue\n\n this.activeIndex(index)\n return\n }\n this.activeIndex(-1)\n }\n\n private ensureActiveIndex() {\n const rows = this.optionRows()\n const current = this.activeIndex()\n if (current >= 0 && current < rows.length && !rows[current]?.disabled)\n return\n\n this.activateFirst()\n }\n\n private shouldOpenOnFocus() {\n return unref(this.openOnFocus) !== false && this.meetsMinimumQueryLength()\n }\n\n private meetsMinimumQueryLength() {\n return (\n this.query().trim().length >= this.readPositiveInteger(this.minLength, 0)\n )\n }\n\n private canCreateCustomValues() {\n return unref(this.allowCustomValues) !== false\n }\n\n private hasOptionValue(option: ResolvedAutoCompleteOption) {\n if (unref(this.allowDuplicates)) return false\n\n const key = normalizeItemValue(option.value)\n return this.resolvedItems().some(\n (item) => normalizeItemValue(item.value) === key,\n )\n }\n\n private hasItemValue(itemInput: MultiAutoCompleteItem) {\n if (unref(this.allowDuplicates)) return false\n\n const item = resolveMultiAutoCompleteItem(itemInput)\n const key = normalizeItemValue(item.value)\n return this.resolvedItems().some(\n (existing) => normalizeItemValue(existing.value) === key,\n )\n }\n\n private splitValues(value: string) {\n const values =\n unref(this.onSplitInput)?.(value) ??\n splitBySeparators(value, this.resolvedSeparators())\n return values.map((item) => item.trim()).filter(Boolean)\n }\n\n private resolvedSeparators() {\n const value = unref(this.separators)\n return typeof value === 'string' ? value : ',;'\n }\n\n private readPositiveInteger(\n value: RefOrValue<number | string> | undefined,\n fallback: number,\n ) {\n const raw = unref(value)\n const parsed =\n typeof raw === 'number' ? raw : Number.parseFloat(String(raw))\n return Number.isFinite(parsed) && parsed >= 0\n ? Math.trunc(parsed)\n : fallback\n }\n\n private clearClosingTimer() {\n if (this.closingTimer === undefined) return\n\n clearTimeout(this.closingTimer)\n this.closingTimer = undefined\n }\n}\n\nfunction resolveMultiAutoCompleteItem(\n itemInput: RefOrValue<MultiAutoCompleteItem>,\n): ResolvedMultiAutoCompleteItem {\n const item = unref(itemInput)\n const label = String(unref(item.label) ?? '')\n const value = unref(item.value) ?? label\n return {\n label,\n value,\n disabled: unref(item.disabled),\n invalid: unref(item.invalid),\n tone: unref(item.tone),\n keywords: resolveKeywords(item, label, value),\n }\n}\n\nfunction resolveAutoCompleteOption(\n optionInput: RefOrValue<AutoCompleteOption>,\n): ResolvedAutoCompleteOption {\n const option = unref(optionInput)\n const label = String(unref(option.label) ?? '')\n const value = unref(option.value) ?? label\n return {\n label,\n value,\n disabled: unref(option.disabled),\n keywords: resolveKeywords(option, label, value),\n }\n}\n\nfunction resolveKeywords(\n item: Pick<AutoCompleteOption, 'keywords'>,\n label: string,\n value: AutoCompleteValue,\n) {\n const keywords = unref(item.keywords)\n const source: string[] = Array.isArray(keywords)\n ? keywords.map((keyword) => String(unref(keyword) ?? ''))\n : typeof keywords === 'string'\n ? keywords.split(/\\s+/)\n : []\n return [label, String(value), ...source].filter(Boolean)\n}\n\nfunction splitBySeparators(value: string, separators: string) {\n const values: string[] = []\n let current = ''\n for (const char of value) {\n if (char === '\\n' || separators.includes(char)) {\n values.push(current)\n current = ''\n continue\n }\n\n current += char\n }\n\n values.push(current)\n return values\n}\n\nfunction normalizeSearchText(value: string) {\n return value.trim().toLocaleLowerCase()\n}\n\nfunction normalizeItemValue(value: AutoCompleteValue) {\n return String(value).trim().toLocaleLowerCase()\n}\n\nfunction wrapIndex(index: number, length: number) {\n return ((index % length) + length) % length\n}\n","import {\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type RefOrValue,\n unref,\n} from 'regor'\n\nexport type GridAlignItems = 'stretch' | 'start' | 'center' | 'end'\nexport type GridJustifyItems = 'stretch' | 'start' | 'center' | 'end'\n\nexport interface Grid {\n container?: RefOrValue<string>\n columns?: RefOrValue<number | string>\n columnsSm?: RefOrValue<number | string>\n columnsMd?: RefOrValue<number | string>\n columnsLg?: RefOrValue<number | string>\n columnsXl?: RefOrValue<number | string>\n alignItems?: RefOrValue<GridAlignItems>\n justifyItems?: RefOrValue<GridJustifyItems>\n dense?: RefOrValue<boolean | string>\n classes?: ComputedRef<string>\n gridStyle?: ComputedRef<Record<string, string>>\n}\n\nconst gridTemplate = html`<div :is=\"container ?? 'div'\" class=\"grid\" :class=\"classes\" :style=\"gridStyle\">\n <slot></slot>\n</div>`\n\nfunction defineGridComponent() {\n return defineComponent<Grid>(gridTemplate, {\n props: [\n 'container',\n 'columns',\n 'columnsSm',\n 'columnsMd',\n 'columnsLg',\n 'columnsXl',\n 'alignItems',\n 'justifyItems',\n 'dense',\n ],\n context: (head) => resolveGrid(head.props),\n })\n}\n\nexport function defineGridComponents() {\n return {\n grid: defineGridComponent(),\n }\n}\n\nfunction resolveGrid(props: Grid): Grid {\n const classes = computed(() => {\n return [\n resolveAlignClass(props.alignItems),\n resolveJustifyClass(props.justifyItems),\n resolveDenseClass(props.dense),\n ]\n .filter(Boolean)\n .join(' ')\n })\n const gridStyle = computed(() => {\n const resolvedColumns = resolveResponsiveGridTemplateColumns(props)\n\n return {\n '--grid-template-columns': resolvedColumns.base,\n '--grid-template-columns-sm': resolvedColumns.sm,\n '--grid-template-columns-md': resolvedColumns.md,\n '--grid-template-columns-lg': resolvedColumns.lg,\n '--grid-template-columns-xl': resolvedColumns.xl,\n } as Record<string, string>\n })\n\n return {\n ...props,\n classes,\n gridStyle,\n }\n}\n\ntype ResolvedGridTemplateColumns = {\n base: string\n sm: string\n md: string\n lg: string\n xl: string\n}\n\nfunction resolveResponsiveGridTemplateColumns(\n props: Grid,\n): ResolvedGridTemplateColumns {\n const base =\n resolveGridTemplateColumnsValue(props.columns) ?? toRepeatTemplate(1)\n const sm = resolveGridTemplateColumnsValue(props.columnsSm) ?? base\n const md = resolveGridTemplateColumnsValue(props.columnsMd) ?? sm\n const lg = resolveGridTemplateColumnsValue(props.columnsLg) ?? md\n const xl = resolveGridTemplateColumnsValue(props.columnsXl) ?? lg\n\n return { base, sm, md, lg, xl }\n}\n\nfunction resolveGridTemplateColumnsValue(\n value?: RefOrValue<number | string>,\n): string | undefined {\n const resolvedValue = unref(value)\n\n if (typeof resolvedValue === 'number' && Number.isInteger(resolvedValue)) {\n return toRepeatTemplate(clampColumns(resolvedValue))\n }\n\n if (typeof resolvedValue !== 'string') return undefined\n\n const normalized = resolvedValue.trim()\n if (!normalized) return undefined\n\n const columnCount = tryParseColumnCount(normalized)\n if (columnCount !== undefined) return toRepeatTemplate(columnCount)\n\n return normalized\n}\n\nfunction tryParseColumnCount(value: string): number | undefined {\n if (!/^\\d+$/.test(value)) return undefined\n\n const parsed = Number.parseInt(value, 10)\n if (!Number.isInteger(parsed)) return undefined\n\n return clampColumns(parsed)\n}\n\nfunction toRepeatTemplate(columns: number) {\n return `repeat(${columns}, minmax(0, 1fr))`\n}\n\nfunction clampColumns(value: number) {\n if (value < 1) return 1\n if (value > 12) return 12\n return value\n}\n\nfunction resolveAlignClass(value?: RefOrValue<GridAlignItems>) {\n if (!value) return ''\n const normalized = unref(value).toLowerCase()\n if (\n normalized === 'stretch' ||\n normalized === 'start' ||\n normalized === 'center' ||\n normalized === 'end'\n ) {\n return `align-${normalized}`\n }\n return ''\n}\n\nfunction resolveJustifyClass(value?: RefOrValue<GridJustifyItems>) {\n if (!value) return ''\n const normalized = unref(value).toLowerCase()\n if (\n normalized === 'stretch' ||\n normalized === 'start' ||\n normalized === 'center' ||\n normalized === 'end'\n ) {\n return `justify-items-${normalized}`\n }\n return ''\n}\n\nfunction resolveDenseClass(value?: RefOrValue<boolean | string>) {\n if (!value) return ''\n const normalized = unref(value)\n if (normalized === true || normalized === 'true') return 'grid-dense'\n\n return ''\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type RefOrValue,\n unref,\n} from 'regor'\nimport {\n type ComponentVariant,\n type ComponentVariantMode,\n resolveComponentClasses,\n} from '../componentVariant'\n\nexport type GetSvgIcon = (name: string) => string\nexport type IconFrameSize = 'sm' | 'md' | 'lg'\n\nexport interface Icon {\n name?: RefOrValue<string>\n svg?: ComputedRef<string>\n}\n\nexport interface IconFrame {\n name?: RefOrValue<string>\n tone?: RefOrValue<SemanticTone>\n size?: RefOrValue<IconFrameSize>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n classes?: ComputedRef<string>\n hasIcon?: ComputedRef<boolean>\n}\n\nconst DEFAULT_ICON_FRAME_VARIANT: ComponentVariant = 'solid'\nconst DEFAULT_ICON_FRAME_VARIANT_MODE: ComponentVariantMode = 'stateless'\n\nconst iconTemplate = html`<span class=\"icon\" r-if=\"svg\" r-html=\"svg\"></span>`\n\nconst iconFrameTemplate = html`<span class=\"icon-frame\" :class=\"classes\" r-if=\"hasIcon\">\n <Icon :name=\"name\"/>\n</span>`\n\nfunction defineIconComponent(getSvgIcon: GetSvgIcon) {\n return defineComponent<Icon>(iconTemplate, {\n props: ['name'],\n context: (head) => resolveIcon(head.props, getSvgIcon),\n })\n}\n\nfunction defineIconFrameComponent() {\n return defineComponent<IconFrame>(iconFrameTemplate, {\n props: ['name', 'tone', 'size', 'variant', 'variantMode'],\n context: (head) => resolveIconFrame(head.props),\n })\n}\n\nexport function defineIconComponents(getSvgIcon: GetSvgIcon) {\n return {\n icon: defineIconComponent(getSvgIcon),\n iconFrame: defineIconFrameComponent(),\n }\n}\n\nfunction resolveIcon(props: Icon, getSvgIcon: GetSvgIcon): Icon {\n const svg = computed(() => {\n const name = unref(props.name)\n return name ? getSvgIcon(name) : ''\n })\n\n return {\n ...props,\n svg,\n }\n}\n\nfunction resolveIconFrame(props: IconFrame): IconFrame {\n return {\n ...props,\n hasIcon: computed(() => Boolean(unref(props.name))),\n classes: computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: DEFAULT_ICON_FRAME_VARIANT,\n defaultVariantMode: DEFAULT_ICON_FRAME_VARIANT_MODE,\n classes: [resolveIconFrameSizeClass(props.size)],\n }),\n ),\n }\n}\n\nfunction resolveIconFrameSizeClass(size?: RefOrValue<IconFrameSize>) {\n const resolvedSize = unref(size)\n if (resolvedSize === 'sm' || resolvedSize === 'lg') {\n return `icon-frame--${resolvedSize}`\n }\n return ''\n}\n","import { defineComponent, html } from 'regor'\nimport type { CodeShowcase } from './landingTypes'\n\nexport function defineCodeShowcaseComponent() {\n const codeShowcaseTemplate = html`<Panel :tone=\"tone\" :variant=\"variant || 'surface'\">\n <Flex direction=\"column\">\n <Flex align=\"start\" justify=\"between\" wrap=\"true\">\n <SectionHeader\n :eyebrow=\"eyebrow\"\n :title=\"title\"\n :subtitle=\"summary\"\n titleTag=\"h3\"\n titleClass=\"fs-h4 mb-1\"\n subtitleClass=\"mb-0\"/>\n <Badge r-if=\"language\" :tone=\"tone\">{{ language }}</Badge>\n </Flex>\n <Panel\n variant=\"outline\"\n tone=\"neutral\"\n class=\"box-shadow-none\"\n bodyClass=\"overflow-x-auto\"\n >\n <slot></slot>\n </Panel>\n <Panel\n r-if=\"resultTitle || resultMeta\"\n :tone=\"tone\"\n variant=\"outline\"\n class=\"box-shadow-none\"\n >\n <Flex align=\"center\" justify=\"between\" wrap=\"true\" class=\"mb-2\">\n <strong r-if=\"resultTitle\">{{ resultTitle }}</strong>\n <Badge r-if=\"resultMeta\" :tone=\"tone\">{{ resultMeta }}</Badge>\n </Flex>\n <slot name=\"result\"></slot>\n </Panel>\n </Flex>\n </Panel>`\n\n return {\n codeShowcase: defineComponent<CodeShowcase>(codeShowcaseTemplate, {\n props: [\n 'eyebrow',\n 'title',\n 'summary',\n 'language',\n 'resultTitle',\n 'resultMeta',\n 'tone',\n 'variant',\n ],\n }),\n }\n}\n","import { defineComponent, html } from 'regor'\nimport type { ComparisonColumn } from './landingTypes'\n\nexport function defineComparisonColumnComponent() {\n const comparisonColumnTemplate = html`<Panel :tone=\"tone\" :variant=\"variant || 'surface'\">\n <Flex direction=\"column\" align=\"start\">\n <Flex align=\"center\" justify=\"between\" class=\"w-full\" r-if=\"icon || badge\">\n <IconFrame\n r-if=\"icon\"\n :name=\"icon\"\n :tone=\"tone\"\n :variant=\"variant\"\n size=\"lg\"/>\n <Badge r-if=\"badge\" :tone=\"tone\">{{ badge }}</Badge>\n </Flex>\n <h3 class=\"fs-h4 fw-700 my-0\" r-if=\"title\">{{ title }}</h3>\n <p class=\"text-tagline mb-0\" r-if=\"summary\">{{ summary }}</p>\n <slot></slot>\n </Flex>\n </Panel>`\n\n return {\n comparisonColumn: defineComponent<ComparisonColumn>(\n comparisonColumnTemplate,\n {\n props: ['title', 'summary', 'badge', 'icon', 'tone', 'variant'],\n },\n ),\n }\n}\n","import { defineComponent, html } from 'regor'\nimport type { ComparisonFeature } from './landingTypes'\n\nexport function defineComparisonFeatureComponent() {\n const comparisonFeatureTemplate = html`<Flex container=\"li\" align=\"start\">\n <IconFrame\n :name=\"icon || 'lucide:check'\"\n :tone=\"tone\"\n variant=\"surface\"\n size=\"sm\"/>\n <slot></slot>\n </Flex>`\n\n return {\n comparisonFeature: defineComponent<ComparisonFeature>(\n comparisonFeatureTemplate,\n {\n props: ['icon', 'tone'],\n },\n ),\n }\n}\n","import { defineComponent, html } from 'regor'\nimport type { ComparisonTable } from './landingTypes'\n\nexport function defineComparisonTableComponent() {\n const comparisonTableTemplate = html`<Panel :tone=\"tone\" :variant=\"variant || 'surface'\" class=\"mb-6\">\n <Flex direction=\"column\" align=\"start\" class=\"w-full\">\n <SectionHeader\n r-if=\"eyebrow || title || subtitle\"\n :eyebrow=\"eyebrow\"\n :title=\"title\"\n :subtitle=\"subtitle\"\n titleTag=\"h2\"\n subtitleClass=\"mb-0\"/>\n <Grid\n :columns=\"columns || 1\"\n :columnsLg=\"columnsLg || 3\"\n alignItems=\"stretch\"\n class=\"w-full\"\n >\n <slot></slot>\n </Grid>\n </Flex>\n </Panel>`\n\n return {\n comparisonTable: defineComponent<ComparisonTable>(comparisonTableTemplate, {\n props: [\n 'eyebrow',\n 'title',\n 'subtitle',\n 'tone',\n 'variant',\n 'columns',\n 'columnsLg',\n ],\n }),\n }\n}\n","import { defineComponent, html } from 'regor'\nimport type { CtaSection } from './landingTypes'\n\nexport function defineCtaSectionComponent() {\n const ctaSectionTemplate = html`<Panel :tone=\"tone\" :variant=\"variant || 'surface'\">\n <Grid columns=\"1\" columnsLg=\"minmax(0, 1fr) auto\" alignItems=\"center\">\n <SectionHeader\n :eyebrow=\"eyebrow\"\n :title=\"title\"\n :subtitle=\"subtitle\"\n titleTag=\"h2\"\n titleClass=\"fs-h2 mb-2\"\n subtitleClass=\"mb-0\"/>\n <Flex align=\"center\" justify=\"end\" wrap=\"true\">\n <BtnLink\n r-if=\"primaryLabel && primaryHref\"\n :href=\"primaryHref\"\n :icon=\"primaryIcon\"\n iconPosition=\"end\"\n :tone=\"tone || 'accent'\"\n size=\"lg\"\n >\n {{ primaryLabel }}\n </BtnLink>\n <BtnLink\n r-if=\"secondaryLabel && secondaryHref\"\n :href=\"secondaryHref\"\n :icon=\"secondaryIcon\"\n :tone=\"tone || 'ghost'\"\n variant=\"outline\"\n size=\"lg\"\n >\n {{ secondaryLabel }}\n </BtnLink>\n <slot name=\"actions\"></slot>\n </Flex>\n <p class=\"prose-meta mb-0\" r-if=\"meta\">{{ meta }}</p>\n </Grid>\n </Panel>`\n\n return {\n ctaSection: defineComponent<CtaSection>(ctaSectionTemplate, {\n props: [\n 'eyebrow',\n 'title',\n 'subtitle',\n 'primaryLabel',\n 'primaryHref',\n 'primaryIcon',\n 'secondaryLabel',\n 'secondaryHref',\n 'secondaryIcon',\n 'meta',\n 'tone',\n 'variant',\n ],\n }),\n }\n}\n","import { defineComponent, html } from 'regor'\nimport type { FeatureCard } from './landingTypes'\n\nexport function defineFeatureCardComponent() {\n const featureCardTemplate = html`<Panel :tone=\"tone\" :variant=\"variant || 'surface'\">\n <Flex direction=\"column\" align=\"start\" justify=\"center\">\n <Flex align=\"center\" justify=\"center\" class=\"w-full\" r-if=\"icon || badge\">\n <IconFrame\n r-if=\"icon\"\n :name=\"icon\"\n :tone=\"tone\"\n :variant=\"variant\"\n size=\"lg\"/>\n <Badge r-if=\"badge\" :tone=\"tone\">{{ badge }}</Badge>\n </Flex>\n <Flex direction=\"column\" align=\"center\" class=\"text-justify\">\n <p class=\"text-eyebrow\" r-if=\"eyebrow\">{{ eyebrow }}</p>\n <h3 class=\"fs-h4 fw-700 my-0\" r-if=\"title\">{{ title }}</h3>\n <p class=\"text-tagline mb-0\" r-if=\"summary\">{{ summary }}</p>\n <slot></slot>\n </Flex>\n <Flex wrap=\"true\" class=\"mt-auto\">\n <slot name=\"actions\"></slot>\n </Flex>\n </Flex>\n </Panel>`\n\n return {\n featureCard: defineComponent<FeatureCard>(featureCardTemplate, {\n props: [\n 'eyebrow',\n 'title',\n 'summary',\n 'badge',\n 'icon',\n 'tone',\n 'variant',\n ],\n }),\n }\n}\n","import type { CSSProps } from '@purestack/ts-css'\nimport { docLayoutVar } from '@purestack/ts-style'\nimport { computed, defineComponent, html, type RefOrValue, unref } from 'regor'\nimport type {\n ComponentVariant,\n ComponentVariantMode,\n} from '../componentVariant'\nimport { resolveComponentClasses } from '../componentVariant'\nimport type { LandingBand, LandingBandEdge } from './landingTypes'\n\nconst DEFAULT_LANDING_BAND_VARIANT: ComponentVariant = 'surfaceAlt'\nconst DEFAULT_LANDING_BAND_VARIANT_MODE: ComponentVariantMode = 'stateless'\nconst DEFAULT_LANDING_BAND_HEIGHT = '16rem'\nconst DEFAULT_LANDING_BAND_EDGE_SIZE = '4rem'\nconst DEFAULT_LANDING_BAND_EDGE_START = '0%'\nconst LANDING_BAND_INLINE_PADDING = '1em'\n\nexport function defineLandingBandComponent() {\n const landingBandTemplate = html`<section :class=\"classes\" :style=\"bandStyle\">\n <slot></slot>\n </section>`\n\n return {\n landingBand: defineComponent<LandingBand>(landingBandTemplate, {\n props: [\n 'tone',\n 'variant',\n 'variantMode',\n 'image',\n 'imageFit',\n 'imagePosition',\n 'display',\n 'alignItems',\n 'justifyContent',\n 'height',\n 'marginTop',\n 'marginBottom',\n 'paddingTop',\n 'paddingBottom',\n 'topEdge',\n 'bottomEdge',\n 'edgeSize',\n 'topEdgeStart',\n 'bottomEdgeStart',\n ],\n context: (head) => resolveLandingBand(head.props),\n }),\n }\n}\n\nfunction resolveLandingBand(props: LandingBand): LandingBand {\n const height = computed(() =>\n resolveStyleValue(props.height, DEFAULT_LANDING_BAND_HEIGHT),\n )\n const edgeSize = computed(() =>\n resolveStyleValue(props.edgeSize, DEFAULT_LANDING_BAND_EDGE_SIZE),\n )\n const inlineStartBleed = resolveLandingBandInlineBleed('start')\n const inlineEndBleed = resolveLandingBandInlineBleed('end')\n\n return {\n ...props,\n classes: computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: DEFAULT_LANDING_BAND_VARIANT,\n defaultVariantMode: DEFAULT_LANDING_BAND_VARIANT_MODE,\n classes: ['rounded-none', resolveLandingBandBorderClass(props)],\n }),\n ),\n bandStyle: computed<Partial<CSSProps>>(() => ({\n display: resolveCssPropValue(props.display, 'flex'),\n alignItems: resolveCssPropValue(props.alignItems, 'start'),\n justifyContent: resolveCssPropValue(props.justifyContent, 'center'),\n borderRadius: '0 !important',\n borderLeft: 'none !important',\n borderRight: 'none !important',\n overflow: 'hidden',\n boxSizing: 'border-box',\n pointerEvents: 'none',\n minHeight: height(),\n marginInlineStart: `calc(-1 * (${inlineStartBleed}))`,\n marginInlineEnd: `calc(-1 * (${inlineEndBleed}))`,\n paddingInlineStart: `calc(${LANDING_BAND_INLINE_PADDING} + ${inlineStartBleed})`,\n paddingInlineEnd: `calc(${LANDING_BAND_INLINE_PADDING} + ${inlineEndBleed})`,\n paddingTop: resolveLandingBandEdgePadding(\n props.paddingTop,\n edgeSize(),\n props.topEdge,\n ),\n paddingBottom: resolveLandingBandEdgePadding(\n props.paddingBottom,\n edgeSize(),\n props.bottomEdge,\n ),\n marginTop: resolveStyleValue(props.marginTop, '0'),\n marginBottom: resolveStyleValue(props.marginBottom, '0'),\n backgroundImage: resolveBackgroundImage(props.image),\n backgroundSize: unref(props.imageFit) || 'cover',\n backgroundPosition: unref(props.imagePosition) || 'center',\n backgroundRepeat: 'no-repeat',\n clipPath: resolveLandingBandClipPath(props, edgeSize()),\n })),\n }\n}\n\nfunction resolveLandingBandInlineBleed(side: 'start' | 'end') {\n return `${resolveCenteredViewportBleed()} + ${resolveDocLayoutInlineCorrection(side)}`\n}\n\nfunction resolveCenteredViewportBleed() {\n return '50vw - 50%'\n}\n\nfunction resolveDocLayoutInlineCorrection(side: 'start' | 'end') {\n const inlineStartState = `(${resolveDocLayoutInlineStartState()})`\n const inlineEndState = `(${resolveDocLayoutInlineEndState()})`\n const balance =\n side === 'start'\n ? `${inlineStartState} - ${inlineEndState}`\n : `${inlineEndState} - ${inlineStartState}`\n return `(${balance}) / 2`\n}\n\nfunction resolveDocLayoutInlineStartState() {\n return [\n docLayoutVar('activeShellPaddingInlineStart'),\n docLayoutVar('activeNavWidth'),\n ].join(' + ')\n}\n\nfunction resolveDocLayoutInlineEndState() {\n return [\n docLayoutVar('activeShellPaddingInlineEnd'),\n docLayoutVar('activeTocWidth'),\n ].join(' + ')\n}\n\nfunction resolveLandingBandClipPath(\n props: LandingBand,\n edgeSize: string,\n): string | undefined {\n const topEdge = resolveLandingBandEdge(props.topEdge)\n const bottomEdge = resolveLandingBandEdge(props.bottomEdge)\n\n if (topEdge === 'flat' && bottomEdge === 'flat') return undefined\n\n const topStart = resolveStyleValue(\n props.topEdgeStart,\n DEFAULT_LANDING_BAND_EDGE_START,\n )\n const bottomStart = resolveStyleValue(\n props.bottomEdgeStart,\n DEFAULT_LANDING_BAND_EDGE_START,\n )\n const topLeftY = topEdge === 'slant-up' ? edgeSize : '0'\n const topRightY = topEdge === 'slant-down' ? edgeSize : '0'\n const bottomRightY =\n bottomEdge === 'slant-up' ? `calc(100% - ${edgeSize})` : '100%'\n const bottomLeftY =\n bottomEdge === 'slant-down' ? `calc(100% - ${edgeSize})` : '100%'\n const points = [\n `0 ${topLeftY}`,\n `${topStart} ${topLeftY}`,\n `100% ${topRightY}`,\n `100% ${bottomRightY}`,\n `${bottomStart} ${bottomLeftY}`,\n `0 ${bottomLeftY}`,\n ]\n\n return `polygon(${points.join(', ')})`\n}\n\nfunction resolveLandingBandEdgePadding(\n padding: RefOrValue<string> | undefined,\n edgeSize: string,\n edge: RefOrValue<LandingBandEdge> | undefined,\n) {\n const resolvedPadding = resolveStyleValue(padding, '1em')\n return resolveLandingBandEdge(edge) === 'flat'\n ? resolvedPadding\n : `calc(${resolvedPadding} + ${edgeSize})`\n}\n\nfunction resolveLandingBandEdge(edge?: RefOrValue<LandingBandEdge>) {\n const resolved = unref(edge)\n return resolved === 'slant-up' || resolved === 'slant-down'\n ? resolved\n : 'flat'\n}\n\nfunction resolveLandingBandBorderClass(props: LandingBand) {\n return resolveLandingBandEdge(props.topEdge) === 'flat' &&\n resolveLandingBandEdge(props.bottomEdge) === 'flat'\n ? undefined\n : 'b-0'\n}\n\nfunction resolveBackgroundImage(image?: RefOrValue<string>) {\n const resolved = unref(image)\n return typeof resolved === 'string' && resolved.trim()\n ? `url(\"${resolved.trim()}\")`\n : undefined\n}\n\nfunction resolveStyleValue(\n value: RefOrValue<string> | undefined,\n fallback: string,\n) {\n const resolved = unref(value)\n return typeof resolved === 'string' && resolved.trim()\n ? resolved.trim()\n : fallback\n}\n\nfunction resolveCssPropValue<T>(value: RefOrValue<T> | undefined, fallback: T) {\n return unref(value) || fallback\n}\n","import { defineComponent, html } from 'regor'\nimport type { LandingSection } from './landingTypes'\n\nexport function defineLandingSectionComponent() {\n const landingSectionTemplate = html`<Panel\n :tone=\"tone\"\n :variant=\"variant || 'none'\"\n :variantMode=\"variantMode\"\n class=\"mb-6\"\n >\n <Grid\n columns=\"1\"\n :columnsLg=\"columnsLg || columns\"\n :alignItems=\"alignItems || 'start'\"\n >\n <SectionHeader\n r-if=\"eyebrow || title || subtitle\"\n :eyebrow=\"eyebrow\"\n :title=\"title\"\n :subtitle=\"subtitle\"\n :titleTag=\"titleTag || 'h2'\"\n subtitleClass=\"mb-0\"/>\n <slot></slot>\n </Grid>\n </Panel>`\n\n return {\n landingSection: defineComponent<LandingSection>(landingSectionTemplate, {\n props: [\n 'eyebrow',\n 'title',\n 'subtitle',\n 'titleTag',\n 'tone',\n 'variant',\n 'variantMode',\n 'columns',\n 'columnsLg',\n 'alignItems',\n ],\n }),\n }\n}\n","import { defineComponent, html } from 'regor'\nimport type { MetricItem } from './landingTypes'\n\nexport function defineMetricItemComponent() {\n const metricItemTemplate = html`<Flex align=\"start\">\n <IconFrame\n r-if=\"icon\"\n :name=\"icon\"\n :tone=\"tone\"\n variant=\"surface\"\n size=\"sm\"/>\n <div>\n <p class=\"prose-meta mb-1\" r-if=\"label\">{{ label }}</p>\n <strong class=\"fs-body\">{{ value }}</strong>\n <p class=\"text-subtle fs-xs mb-0\" r-if=\"detail\">{{ detail }}</p>\n <slot></slot>\n </div>\n </Flex>`\n\n return {\n metricItem: defineComponent<MetricItem>(metricItemTemplate, {\n props: ['label', 'value', 'detail', 'icon', 'tone'],\n }),\n }\n}\n","import { defineComponent, html } from 'regor'\nimport type { MetricStrip } from './landingTypes'\n\nexport function defineMetricStripComponent() {\n const metricStripTemplate = html`<Panel :tone=\"tone\" :variant=\"variant || 'surface'\" class=\"w-full\">\n <Grid\n :columns=\"columns || 1\"\n :columnsSm=\"columnsSm || 2\"\n :columnsLg=\"columnsLg || 4\"\n >\n <slot></slot>\n </Grid>\n </Panel>`\n\n return {\n metricStrip: defineComponent<MetricStrip>(metricStripTemplate, {\n props: ['tone', 'variant', 'columns', 'columnsSm', 'columnsLg'],\n }),\n }\n}\n","export type {\n CodeShowcase,\n ComparisonColumn,\n ComparisonFeature,\n ComparisonTable,\n CtaSection,\n FeatureCard,\n LandingBand,\n LandingBandEdge,\n LandingBandImageFit,\n LandingSection,\n LandingTitleTag,\n MetricItem,\n MetricStrip,\n} from './landingTypes'\n\nimport { defineCodeShowcaseComponent } from './codeShowcase'\nimport { defineComparisonColumnComponent } from './comparisonColumn'\nimport { defineComparisonFeatureComponent } from './comparisonFeature'\nimport { defineComparisonTableComponent } from './comparisonTable'\nimport { defineCtaSectionComponent } from './ctaSection'\nimport { defineFeatureCardComponent } from './featureCard'\nimport { defineLandingBandComponent } from './landingBand'\nimport { defineLandingSectionComponent } from './landingSection'\nimport { defineMetricItemComponent } from './metricItem'\nimport { defineMetricStripComponent } from './metricStrip'\n\nexport { defineCodeShowcaseComponent } from './codeShowcase'\nexport { defineComparisonColumnComponent } from './comparisonColumn'\nexport { defineComparisonFeatureComponent } from './comparisonFeature'\nexport { defineComparisonTableComponent } from './comparisonTable'\nexport { defineCtaSectionComponent } from './ctaSection'\nexport { defineFeatureCardComponent } from './featureCard'\nexport { defineLandingBandComponent } from './landingBand'\nexport { defineLandingSectionComponent } from './landingSection'\nexport { defineMetricItemComponent } from './metricItem'\nexport { defineMetricStripComponent } from './metricStrip'\n\nexport function defineLandingComponents() {\n return {\n ...defineLandingBandComponent(),\n ...defineLandingSectionComponent(),\n ...defineFeatureCardComponent(),\n ...defineMetricStripComponent(),\n ...defineMetricItemComponent(),\n ...defineCodeShowcaseComponent(),\n ...defineComparisonTableComponent(),\n ...defineComparisonColumnComponent(),\n ...defineComparisonFeatureComponent(),\n ...defineCtaSectionComponent(),\n }\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComputedRef,\n computed,\n defineComponent,\n type RefOrValue,\n svg,\n unref,\n} from 'regor'\nimport {\n type CartesianChartDomain,\n pointIndexToCartesianChartX,\n type ResolvedCartesianChartGridLine,\n resolveCartesianChartDomain,\n resolveCartesianChartGridLines,\n valueToCartesianChartY,\n} from '../chart/cartesianChart'\nimport {\n DEFAULT_CARTESIAN_CHART_HEIGHT,\n DEFAULT_CARTESIAN_CHART_WIDTH,\n DEFAULT_CHART_COLORS,\n DEFAULT_CHART_EMPTY_LABEL,\n} from '../chart/chartDefaults'\nimport {\n formatChartNumber,\n formatChartPoint,\n formatChartValue,\n readChartNumber,\n resolveChartSize,\n resolveChartText,\n} from '../chart/chartUtils'\nimport type {\n ComponentVariant,\n ComponentVariantMode,\n} from '../componentVariant'\nimport { resolveComponentClasses } from '../componentVariant'\n\nexport type LineChartCurve = 'linear' | 'smooth'\n\nexport interface LineChartPoint {\n label?: RefOrValue<string>\n value?: RefOrValue<number | string>\n}\n\nexport interface LineChartSeries {\n label?: RefOrValue<string>\n color?: RefOrValue<string>\n points?: RefOrValue<Array<RefOrValue<LineChartPoint>>>\n}\n\nexport interface ResolvedLineChartPoint {\n label: string\n value: number\n formattedValue: string\n x: number\n y: number\n valueLabelY: number\n valueLabelBaseline: string\n}\n\nexport interface ResolvedLineChartSeries {\n label: string\n color: string\n path: string\n areaPath: string\n points: ResolvedLineChartPoint[]\n}\n\nexport interface ResolvedLineChartGridLine\n extends ResolvedCartesianChartGridLine {}\n\nexport interface ResolvedLineChartLabel {\n label: string\n x: number\n y: number\n}\n\nexport interface LineChart {\n series?: RefOrValue<Array<RefOrValue<LineChartSeries>>>\n title?: RefOrValue<string>\n description?: RefOrValue<string>\n ariaLabel?: RefOrValue<string>\n emptyLabel?: RefOrValue<string>\n valueSuffix?: RefOrValue<string>\n width?: RefOrValue<number | string>\n height?: RefOrValue<number | string>\n minValue?: RefOrValue<number | string>\n maxValue?: RefOrValue<number | string>\n curve?: RefOrValue<LineChartCurve>\n animated?: RefOrValue<boolean | string>\n showArea?: RefOrValue<boolean | string>\n showPoints?: RefOrValue<boolean | string>\n showValues?: RefOrValue<boolean | string>\n showLabels?: RefOrValue<boolean | string>\n showAxis?: RefOrValue<boolean | string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n classes?: ComputedRef<string>\n resolvedWidth?: ComputedRef<string | number>\n resolvedHeight?: ComputedRef<string | number | undefined>\n resolvedAriaLabel?: ComputedRef<string>\n resolvedEmptyLabel?: ComputedRef<string>\n chartSeries?: ComputedRef<ResolvedLineChartSeries[]>\n gridLines?: ComputedRef<ResolvedLineChartGridLine[]>\n xLabels?: ComputedRef<ResolvedLineChartLabel[]>\n hasSeries?: ComputedRef<boolean>\n zeroLineY?: ComputedRef<number>\n}\n\nconst VALUE_LABEL_OFFSET = 2.6\nconst CATEGORY_LABEL_Y = 60\nconst MAX_X_LABEL_COUNT = 7\n\nconst lineChartTemplate = svg`<svg\n class=\"line-chart\"\n :class=\"classes\"\n viewBox=\"-6 0 112 64\"\n :width=\"resolvedWidth\"\n :height=\"resolvedHeight\"\n role=\"img\"\n :aria-label=\"resolvedAriaLabel\"\n>\n <title r-if=\"title\">{{ title }}</title>\n <desc r-if=\"description\">{{ description }}</desc>\n <g class=\"line-chart__grid\" r-if=\"hasSeries && showAxis\">\n <g r-for=\"line in gridLines\" class=\"line-chart__grid-line\">\n <line x1=\"8\" x2=\"94\" :y1=\"line.y\" :y2=\"line.y\"/>\n <text x=\"5.4\" :y=\"line.y\">{{ line.formattedValue }}</text>\n </g>\n </g>\n <line\n r-if=\"hasSeries && showAxis\"\n class=\"line-chart__zero-line\"\n x1=\"8\"\n x2=\"94\"\n :y1=\"zeroLineY\"\n :y2=\"zeroLineY\"/>\n <g class=\"line-chart__areas\" r-if=\"hasSeries && showArea\">\n <path\n r-for=\"item in chartSeries\"\n class=\"line-chart__area\"\n :d=\"item.areaPath\"\n :fill=\"item.color\"\n :aria-label=\"item.label\"\n ></path>\n </g>\n <g class=\"line-chart__series\" r-if=\"hasSeries\">\n <path\n r-for=\"item in chartSeries\"\n class=\"line-chart__line\"\n :d=\"item.path\"\n :stroke=\"item.color\"\n :aria-label=\"item.label\"\n >\n <title>{{ item.label }}</title>\n <animate\n r-if=\"animated\"\n attributeName=\"stroke-opacity\"\n from=\"0\"\n to=\"1\"\n dur=\"820ms\"\n fill=\"freeze\"/>\n </path>\n </g>\n <g class=\"line-chart__points\" r-if=\"hasSeries && showPoints\">\n <g r-for=\"item in chartSeries\" class=\"line-chart__point-series\">\n <circle\n r-for=\"point in item.points\"\n class=\"line-chart__point\"\n :cx=\"point.x\"\n :cy=\"point.y\"\n r=\"0.9\"\n :fill=\"item.color\"\n :aria-label=\"item.label + ', ' + point.label + ': ' + point.formattedValue\"\n >\n <title>{{ item.label + ', ' + point.label + ': ' + point.formattedValue }}</title>\n <animate\n r-if=\"animated\"\n attributeName=\"r\"\n from=\"0\"\n to=\"0.9\"\n dur=\"520ms\"\n fill=\"freeze\"/>\n </circle>\n </g>\n </g>\n <g class=\"line-chart__values\" r-if=\"hasSeries && showValues\">\n <g r-for=\"item in chartSeries\" class=\"line-chart__value-series\">\n <text\n r-for=\"point in item.points\"\n class=\"line-chart__value\"\n :x=\"point.x\"\n :y=\"point.valueLabelY\"\n text-anchor=\"middle\"\n :dominant-baseline=\"point.valueLabelBaseline\"\n >\n {{ point.formattedValue }}\n </text>\n </g>\n </g>\n <g class=\"line-chart__labels\" r-if=\"hasSeries && showLabels\">\n <text\n r-for=\"label in xLabels\"\n class=\"line-chart__label\"\n :x=\"label.x\"\n :y=\"label.y\"\n text-anchor=\"middle\"\n >\n {{ label.label }}\n </text>\n </g>\n <text\n r-if=\"!hasSeries\"\n class=\"line-chart__empty\"\n x=\"50\"\n y=\"30\"\n text-anchor=\"middle\"\n >\n {{ resolvedEmptyLabel }}\n </text>\n</svg>`\n\nfunction defineLineChartComponent() {\n return defineComponent<LineChart>(lineChartTemplate, {\n props: [\n 'series',\n 'title',\n 'description',\n 'ariaLabel',\n 'emptyLabel',\n 'valueSuffix',\n 'width',\n 'height',\n 'minValue',\n 'maxValue',\n 'curve',\n 'animated',\n 'showArea',\n 'showPoints',\n 'showValues',\n 'showLabels',\n 'showAxis',\n 'tone',\n 'variant',\n 'variantMode',\n ],\n context: (head) => resolveLineChart(head.props),\n })\n}\n\nexport function defineLineChartComponents() {\n return {\n lineChart: defineLineChartComponent(),\n }\n}\n\nfunction resolveLineChart(props: LineChart): LineChart {\n const domain = computed(() => resolveDomain(props))\n const chartSeries = computed(() => resolveChartSeries(props, domain()))\n\n return {\n animated: true,\n showArea: false,\n showPoints: true,\n showValues: false,\n showLabels: true,\n showAxis: true,\n ...props,\n classes: computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: 'none',\n defaultVariantMode: 'stateless',\n }),\n ),\n resolvedWidth: computed(() =>\n resolveChartSize(props.width, DEFAULT_CARTESIAN_CHART_WIDTH),\n ),\n resolvedHeight: computed(() =>\n resolveChartSize(props.height, DEFAULT_CARTESIAN_CHART_HEIGHT),\n ),\n resolvedAriaLabel: computed(() => resolveAriaLabel(props)),\n resolvedEmptyLabel: computed(\n () => resolveChartText(props.emptyLabel) || DEFAULT_CHART_EMPTY_LABEL,\n ),\n chartSeries,\n gridLines: computed(() =>\n resolveCartesianChartGridLines(domain(), props.valueSuffix),\n ),\n xLabels: computed(() => resolveXLabels(chartSeries())),\n hasSeries: computed(() => chartSeries().length > 0),\n zeroLineY: computed(() => valueToCartesianChartY(0, domain())),\n }\n}\n\ninterface ResolvedLineChartSourceSeries {\n label: string\n color: string\n points: ResolvedLineChartSourcePoint[]\n}\n\ninterface ResolvedLineChartSourcePoint {\n label: string\n value: number\n}\n\nfunction resolveChartSeries(\n props: LineChart,\n domain: CartesianChartDomain,\n): ResolvedLineChartSeries[] {\n const valueSuffix = resolveChartText(props.valueSuffix)\n const curve = resolveCurve(props.curve)\n const zeroY = valueToCartesianChartY(0, domain)\n\n return resolveSeries(props.series).map((series, index) => {\n const points = series.points.map((point, pointIndex) => {\n const x = pointIndexToCartesianChartX(pointIndex, series.points.length)\n const y = valueToCartesianChartY(point.value, domain)\n const valueLabelY =\n point.value < 0\n ? y + VALUE_LABEL_OFFSET\n : Math.max(2, y - VALUE_LABEL_OFFSET)\n\n return {\n label: point.label,\n value: point.value,\n formattedValue: formatChartValue(point.value, valueSuffix),\n x,\n y,\n valueLabelY,\n valueLabelBaseline: point.value < 0 ? 'hanging' : 'auto',\n }\n })\n\n return {\n label: series.label,\n color:\n series.color ||\n DEFAULT_CHART_COLORS[index % DEFAULT_CHART_COLORS.length],\n path: resolveLinePath(points, curve),\n areaPath: resolveAreaPath(points, zeroY, curve),\n points,\n }\n })\n}\n\nfunction resolveSeries(\n seriesInput: LineChart['series'],\n): ResolvedLineChartSourceSeries[] {\n return (unref(seriesInput) || [])\n .map((series, index) => {\n const resolvedSeries = unref(series)\n return {\n label: resolveChartText(resolvedSeries?.label) || `Series ${index + 1}`,\n color: resolveChartText(resolvedSeries?.color),\n points: resolvePoints(resolvedSeries?.points),\n }\n })\n .filter((series) => series.points.length > 0)\n}\n\nfunction resolvePoints(\n pointsInput: LineChartSeries['points'],\n): ResolvedLineChartSourcePoint[] {\n return (unref(pointsInput) || [])\n .map((pointInput, index) => {\n const point = unref(pointInput)\n const value = readChartNumber(point?.value, Number.NaN)\n return {\n label: resolveChartText(point?.label) || `Point ${index + 1}`,\n value,\n }\n })\n .filter((point) => Number.isFinite(point.value))\n}\n\nfunction resolveLinePath(\n points: ResolvedLineChartPoint[],\n curve: LineChartCurve,\n) {\n if (!points.length) return ''\n if (points.length === 1) return `M ${formatChartPoint(points[0])}`\n if (curve === 'linear') {\n return points\n .map(\n (point, index) =>\n `${index === 0 ? 'M' : 'L'} ${formatChartPoint(point)}`,\n )\n .join(' ')\n }\n\n return [\n `M ${formatChartPoint(points[0])}`,\n ...points.slice(1).map((point, index) => {\n const previous = points[index]\n const midpointX = (previous.x + point.x) / 2\n return [\n 'C',\n formatChartNumber(midpointX),\n formatChartNumber(previous.y),\n formatChartNumber(midpointX),\n formatChartNumber(point.y),\n formatChartPoint(point),\n ].join(' ')\n }),\n ].join(' ')\n}\n\nfunction resolveAreaPath(\n points: ResolvedLineChartPoint[],\n zeroY: number,\n curve: LineChartCurve,\n) {\n if (!points.length) return ''\n const first = points[0]\n const last = points.at(-1) || first\n return [\n `M ${formatChartNumber(first.x)} ${formatChartNumber(zeroY)}`,\n resolveLinePath(points, curve).replace(/^M /, 'L '),\n `L ${formatChartNumber(last.x)} ${formatChartNumber(zeroY)}`,\n 'Z',\n ].join(' ')\n}\n\nfunction resolveXLabels(\n series: ResolvedLineChartSeries[],\n): ResolvedLineChartLabel[] {\n const points = series[0]?.points || []\n if (!points.length) return []\n\n const step = Math.max(1, Math.ceil(points.length / MAX_X_LABEL_COUNT))\n return points\n .filter((_, index) => index % step === 0 || index === points.length - 1)\n .map((point) => ({\n label: point.label,\n x: point.x,\n y: CATEGORY_LABEL_Y,\n }))\n}\n\nfunction resolveDomain(props: LineChart): CartesianChartDomain {\n const values = resolveSeries(props.series).flatMap((series) =>\n series.points.map((point) => point.value),\n )\n return resolveCartesianChartDomain({\n values,\n minValue: props.minValue,\n maxValue: props.maxValue,\n })\n}\n\nfunction resolveAriaLabel(props: LineChart) {\n return (\n resolveChartText(props.ariaLabel) ||\n resolveChartText(props.title) ||\n 'Line chart'\n )\n}\n\nfunction resolveCurve(value: RefOrValue<LineChartCurve> | undefined) {\n return unref(value) === 'linear' ? 'linear' : 'smooth'\n}\n","import {\n type LogoConfig,\n type PageContext,\n tryResolvePageContext,\n} from '@purestack/ts-common'\nimport {\n getSemanticToneClass,\n normalizeThemeVariableReference,\n} from '@purestack/ts-style'\nimport {\n type ComputedRef,\n computed,\n defineComponent,\n flatten,\n html,\n type RefOrValue,\n unref,\n} from 'regor'\n\ntype ReactiveLogoOptions = {\n [K in keyof LogoConfig]?: RefOrValue<LogoConfig[K]>\n}\n\nexport interface SiteLogo extends ReactiveLogoOptions {\n config?: RefOrValue<Partial<LogoConfig>>\n options?: ComputedRef<LogoConfig>\n classes?: ComputedRef<string>\n logoStyle?: ComputedRef<Record<string, string>>\n resolvedHref?: ComputedRef<string | undefined>\n resolvedImage?: ComputedRef<string | undefined>\n resolvedDarkImage?: ComputedRef<string | undefined>\n accessibleName?: ComputedRef<string>\n initials?: ComputedRef<string>\n}\n\nconst logoTemplate = html`<a\n class=\"site-logo\"\n :class=\"classes\"\n :style=\"logoStyle\"\n :href=\"resolvedHref\"\n :role=\"resolvedHref ? undefined : 'img'\"\n :aria-label=\"accessibleName\"\n>\n <span\n class=\"site-logo__mark\"\n r-if=\"options.layout !== 'wordmark'\"\n aria-hidden=\"true\"\n >\n <slot name=\"mark\">\n <span class=\"site-logo__images\" r-if=\"resolvedImage\">\n <img\n class=\"site-logo__image\"\n :class=\"{ 'site-logo__image--light': resolvedDarkImage }\"\n :src=\"resolvedImage\"\n alt=\"\"\n decoding=\"async\"/>\n <img\n class=\"site-logo__image site-logo__image--dark\"\n r-if=\"resolvedDarkImage\"\n :src=\"resolvedDarkImage\"\n alt=\"\"\n decoding=\"async\"/>\n </span>\n <Icon r-else-if=\"options.icon\" :name=\"options.icon\"/>\n <span class=\"site-logo__monogram\" r-else>{{ initials }}</span>\n </slot>\n </span>\n <span\n class=\"site-logo__copy\"\n r-if=\"options.layout !== 'mark'\"\n aria-hidden=\"true\"\n >\n <span class=\"site-logo__name\"\n ><span class=\"site-logo__brand\">{{ options.brand }}</span\n ><span class=\"site-logo__suffix\" r-if=\"options.suffix\"\n >{{ options.suffix }}</span\n ></span\n >\n <span class=\"site-logo__subtitle\" r-if=\"options.subtitle\"\n >{{ options.subtitle }}</span\n >\n </span>\n</a>`\n\nconst logoProps = [\n 'brand',\n 'subtitle',\n 'suffix',\n 'href',\n 'ariaLabel',\n 'icon',\n 'imageSrc',\n 'imageSrcDark',\n 'monogram',\n 'layout',\n 'size',\n 'appearance',\n 'markStyle',\n 'wordmarkStyle',\n 'shape',\n 'tone',\n 'brandColor',\n 'accentColor',\n 'markBackground',\n 'markColor',\n 'brandSize',\n 'subtitleSize',\n 'markSize',\n 'gap',\n] as const satisfies readonly (keyof LogoConfig)[]\n\nfunction resolveSiteLogo(props: SiteLogo, context?: PageContext): SiteLogo {\n const options = computed<LogoConfig>(() => {\n const config = flatten(unref(props.config) ?? {}) as Partial<LogoConfig>\n const read = <K extends keyof LogoConfig>(\n key: K,\n ): LogoConfig[K] | undefined => {\n const value = unref(props[key]) as LogoConfig[K] | undefined\n return value === undefined ? config[key] : value\n }\n return {\n brand: read('brand') ?? '',\n subtitle: read('subtitle'),\n suffix: read('suffix'),\n href: read('href'),\n ariaLabel: read('ariaLabel'),\n icon: read('icon'),\n imageSrc: read('imageSrc'),\n imageSrcDark: read('imageSrcDark'),\n monogram: read('monogram'),\n layout: read('layout') ?? 'horizontal',\n size: read('size') ?? 'md',\n appearance: read('appearance') ?? 'plain',\n markStyle: read('markStyle') ?? 'plain',\n wordmarkStyle: read('wordmarkStyle') ?? 'plain',\n shape: read('shape') ?? 'rounded',\n tone: read('tone') ?? 'accent',\n brandColor: read('brandColor'),\n accentColor: read('accentColor'),\n markBackground: read('markBackground'),\n markColor: read('markColor'),\n brandSize: read('brandSize'),\n subtitleSize: read('subtitleSize'),\n markSize: read('markSize'),\n gap: read('gap'),\n }\n })\n const resolveUrl = (value: string | undefined) =>\n value ? (context?.resolvePublicHref(value) ?? value) : undefined\n return {\n options,\n classes: computed(() => {\n const logo = options()\n return [\n `site-logo--${logo.layout}`,\n `site-logo--${logo.size}`,\n `site-logo--${logo.appearance}`,\n `site-logo--mark-${logo.markStyle}`,\n `site-logo--wordmark-${logo.wordmarkStyle}`,\n `site-logo--${logo.shape}`,\n getSemanticToneClass(logo.tone),\n ].join(' ')\n }),\n logoStyle: computed(() => {\n const logo = options()\n const style: Record<string, string> = {}\n const colors = {\n '--ps-logo-brand-color': logo.brandColor,\n '--ps-logo-accent-color': logo.accentColor,\n '--ps-logo-mark-background': logo.markBackground,\n '--ps-logo-mark-color': logo.markColor,\n }\n for (const [key, value] of Object.entries(colors)) {\n if (value?.trim())\n style[key] = normalizeThemeVariableReference(value.trim())\n }\n const lengths = {\n '--ps-logo-brand-size': logo.brandSize,\n '--ps-logo-subtitle-size': logo.subtitleSize,\n '--ps-logo-mark-size': logo.markSize,\n '--ps-logo-gap': logo.gap,\n }\n for (const [key, value] of Object.entries(lengths)) {\n if (value?.trim()) style[key] = value.trim()\n }\n return style\n }),\n resolvedHref: computed(() => {\n const href = options().href\n return href === null || href === '' ? undefined : resolveUrl(href ?? '/')\n }),\n resolvedImage: computed(() => resolveUrl(options().imageSrc)),\n resolvedDarkImage: computed(() => resolveUrl(options().imageSrcDark)),\n accessibleName: computed(\n () =>\n options().ariaLabel?.trim() ||\n options().brand.trim() ||\n options().monogram?.trim() ||\n 'Home',\n ),\n initials: computed(() => {\n const logo = options()\n if (logo.monogram) return logo.monogram\n return logo.brand\n .trim()\n .split(/\\s+/)\n .slice(0, 2)\n .map((word) => Array.from(word)[0] ?? '')\n .join('')\n .toLocaleUpperCase()\n }),\n }\n}\n\nexport function defineLogoComponents() {\n return {\n siteLogo: defineComponent<SiteLogo>(logoTemplate, {\n props: ['config', ...logoProps],\n context: (head) =>\n resolveSiteLogo(head.props, tryResolvePageContext(head)),\n }),\n }\n}\n","import { Base } from '@purestack/ts-util'\nimport { defineComponent, html, type RefOrValue, ref, sref, unref } from 'regor'\n\nimport type { Btn } from '../btn/btn'\nimport type { Modal } from './modal'\n\nlet nextModalId = 1\nlet modalStoreSingleton: ModalStore | undefined\n\nexport interface ModalActionContract extends Btn {\n id?: string\n label?: RefOrValue<string>\n closeOnClick?: RefOrValue<boolean>\n onClick?: (modal: ModalItem, store: ModalStore) => void | Promise<void>\n}\n\nexport interface ModalContract extends Modal {\n body?: RefOrValue<string>\n note?: RefOrValue<string>\n actions?: ModalActionContract[]\n}\n\nclass ModalAction extends Base<ModalActionContract>() {\n override readonly id: string\n readonly running = ref(false)\n constructor(opts: ModalActionContract) {\n super(opts)\n this.id = opts.id ?? `action-${nextModalId++}`\n }\n}\nclass ModalItem extends Base<ModalContract>() {\n override readonly id: string\n constructor(opts: ModalContract) {\n super(opts)\n this.id = opts.id || `modal-store-${nextModalId}`\n nextModalId += 1\n Object.assign(this, opts)\n this.actions = opts.actions?.map?.((x) => new ModalAction(x))\n }\n}\n\nexport class ModalStore {\n readonly modals = sref<ModalItem[]>([])\n\n openModal = (options: ModalContract) => {\n const modal = this.createModal(options)\n const id = modal.id\n\n setTimeout(() => {\n window.tsSsgModal?.refresh()\n window.tsSsgModal?.open(id)\n }, 1)\n return modal\n }\n\n closeModal = (id: string) => {\n window.tsSsgModal?.close(id)\n }\n\n private findModal = (id: string) => {\n return this.modals().find((modal) => modal.id === id)\n }\n\n runAction = (modal: ModalItem, action: ModalAction) => {\n void this.runActionAsync(modal, action)\n }\n\n removeModal = (id: string) => {\n this.modals(this.modals().filter((modal) => modal.id !== id))\n }\n\n private createModal(options: ModalContract) {\n if (options.id && this.findModal(options.id)) {\n this.closeModal(options.id)\n }\n\n const created = new ModalItem(options)\n this.modals([...this.modals(), created])\n return created\n }\n\n private async runActionAsync(modal: ModalItem, action: ModalAction) {\n modal = unref(modal)\n if (action.running()) return\n\n action.running(true)\n try {\n await action.onClick?.(modal, this)\n if ((unref(action.closeOnClick) ?? true) === true) {\n this.closeModal(modal.id)\n }\n } catch (err) {\n console.warn(err)\n } finally {\n action.running(false)\n }\n }\n}\n\nfunction ensureModalStore() {\n if (!modalStoreSingleton) {\n modalStoreSingleton = new ModalStore()\n }\n return modalStoreSingleton\n}\n\nexport function useModalStore() {\n if (!modalStoreSingleton) {\n throw new Error(\n 'ModalStore is not mounted. Render <ModalStore> once first.',\n )\n }\n return modalStoreSingleton\n}\n\nconst modalStoreTemplate = html`<template r-for=\"modal in modals\">\n <Modal\n :id=\"modal.id\"\n :title=\"modal.title\"\n :tone=\"modal.tone\"\n :variant=\"modal.variant\"\n :variantMode=\"modal.variantMode\"\n :size=\"modal.size\"\n :fade=\"modal.fade\"\n :slideFrom=\"modal.slideFrom\"\n :showClose=\"modal.showClose\"\n @close=\"removeModal(modal.id)\"\n >\n <p class=\"modal-store__body\" r-if=\"modal.body\">{{ modal.body }}</p>\n <p class=\"modal-store__note\" r-if=\"modal.note\">{{ modal.note }}</p>\n <template name=\"footer\">\n <Flex r-if=\"modal.actions.length > 0\">\n <Btn\n r-for=\"action in modal.actions\"\n :tone=\"action.tone\"\n :variant=\"action.variant\"\n :icon=\"action.icon\"\n :disabled=\"action.disabled\"\n @click=\"runAction(modal, action)\"\n >\n {{ action.label }}\n </Btn>\n </Flex>\n </template>\n </Modal>\n</template>`\n\nexport function defineModalStoreComponent() {\n return {\n modalStore: defineComponent<ModalStore>(modalStoreTemplate, {\n context: () => ensureModalStore(),\n }),\n }\n}\n","import { tryResolvePageContext } from '@purestack/ts-common'\nimport type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComponentHead,\n type ComputedRef,\n computed,\n defineComponent,\n type Emits,\n html,\n type RefOrValue,\n unref,\n} from 'regor'\nimport {\n type ComponentVariant,\n type ComponentVariantMode,\n resolveComponentClasses,\n} from '../componentVariant'\nimport { defineModalStoreComponent } from './modalStore'\n\nexport type ModalSize = 'sm' | 'md' | 'lg' | 'xl'\nexport type ModalSlideFrom = 'none' | 'top' | 'right' | 'bottom' | 'left'\n\nconst DEFAULT_MODAL_VARIANT_MODE: ComponentVariantMode = 'stateless'\n\nexport interface Modal {\n id?: string\n title?: RefOrValue<string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n size?: RefOrValue<ModalSize>\n fade?: RefOrValue<boolean>\n slideFrom?: RefOrValue<ModalSlideFrom>\n showClose?: RefOrValue<boolean>\n titleId?: string\n rootClass?: ComputedRef<string>\n classes?: ComputedRef<string>\n emits?: Emits<'close' | 'cancel'>\n}\n\nexport interface ModalTrigger {\n target?: string\n label?: RefOrValue<string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n}\n\nconst modalTemplate = html`<dialog\n class=\"modal\"\n :class=\"rootClass\"\n :id=\"id\"\n :data-modal-id=\"id\"\n data-modal-root\n role=\"dialog\"\n aria-modal=\"true\"\n :aria-labelledby=\"titleId\"\n>\n <slot name=\"content\">\n <article class=\"modal__panel\" role=\"document\" tabindex=\"-1\">\n <div class=\"modal__surface\" :class=\"classes\">\n <header class=\"modal__header\">\n <slot name=\"header\">\n <h2 class=\"modal__title tone-text\" :id=\"titleId\" r-if=\"title\">\n {{ title }}\n </h2>\n </slot>\n <Btn\n r-if=\"showClose\"\n :variant=\"variant\"\n size=\"sm\"\n data-modal-close\n aria-label=\"Close dialog\"\n >\n <span aria-hidden=\"true\">X</span>\n </Btn>\n </header>\n <div class=\"modal__body\">\n <slot name=\"body\">\n <slot></slot>\n </slot>\n </div>\n <footer class=\"modal__footer\"><slot name=\"footer\"></slot></footer>\n </div>\n </article>\n </slot>\n</dialog>`\n\nconst modalTriggerTemplate = html`<Btn\n :tone=\"tone\"\n :variant=\"variant\"\n :data-modal-target=\"target\"\n data-modal-trigger\n>\n {{ label }}\n</Btn>`\n\nfunction defineModalComponent() {\n return defineComponent<Modal>(modalTemplate, {\n props: [\n 'id',\n 'title',\n 'tone',\n 'variant',\n 'variantMode',\n 'size',\n 'fade',\n 'slideFrom',\n 'showClose',\n ],\n context: (head) => {\n markModalRuntimeEmbed(head)\n return resolveModal(head.props)\n },\n })\n}\n\nfunction defineModalTriggerComponent() {\n return defineComponent<ModalTrigger>(modalTriggerTemplate, {\n props: ['target', 'label', 'tone', 'variant'],\n context: (head) => resolveModalTrigger(head.props),\n })\n}\n\nexport function defineModalComponents() {\n return {\n modal: defineModalComponent(),\n modalTrigger: defineModalTriggerComponent(),\n ...defineModalStoreComponent(),\n }\n}\n\nfunction resolveModal(props: Modal): Modal {\n return {\n ...props,\n titleId: `${unref(props.id)}-title`,\n classes: computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: 'surface',\n defaultVariantMode: DEFAULT_MODAL_VARIANT_MODE,\n }),\n ),\n rootClass: computed(() => resolveModalRootClass(props)),\n }\n}\n\nfunction resolveModalTrigger(props: ModalTrigger): ModalTrigger {\n return {\n target: props.target,\n label: props.label,\n tone: props.tone,\n variant: props.variant,\n }\n}\n\nfunction resolveModalRootClass(props: Modal) {\n const size = unref(props.size) || 'md'\n const slideFrom = unref(props.slideFrom) || 'none'\n const fade = unref(props.fade) ?? true\n return [\n `modal--size-${size}`,\n fade ? 'modal--fade' : '',\n slideFrom !== 'none' ? `modal--slide-${slideFrom}` : '',\n fade || slideFrom !== 'none' ? 'modal--animated' : '',\n ]\n .filter(Boolean)\n .join(' ')\n}\n\nfunction markModalRuntimeEmbed(head: ComponentHead<Modal>) {\n tryResolvePageContext(head)?.recordRuntimeEmbed('modal', 'head')\n}\n","import {\n type NavItem,\n type PageContext,\n tryResolvePageContext,\n} from '@purestack/ts-common'\nimport type { SemanticTone } from '@purestack/ts-style'\nimport { urlNormalizer } from '@purestack/ts-util'\nimport {\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type RefOrValue,\n type SRef,\n unref,\n} from 'regor'\nimport {\n type ComponentVariant,\n type ComponentVariantMode,\n resolveComponentClasses,\n} from '../componentVariant'\n\nexport interface NavMenu {\n items?: NavItem[] | SRef<NavItem[]>\n currentUrl?: RefOrValue<string>\n navItems?: ComputedRef<NavItemState[]>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n signInSignedIn?: RefOrValue<boolean>\n signInAvatarSrc?: RefOrValue<string>\n signInAvatarAlt?: RefOrValue<string>\n classes?: ComputedRef<string>\n search?: RefOrValue<boolean>\n signInEnabled?: RefOrValue<boolean>\n resolvedSignInEnabled?: ComputedRef<boolean>\n searchEnabled?: ComputedRef<boolean>\n navRoot?: string\n}\n\nexport interface NavList {\n items?: NavItemState[]\n tone?: SemanticTone\n}\n\nexport interface NavItemState extends NavItem {\n isActive: boolean\n isOpen: boolean\n stateKey: string\n linkClass?: string[]\n ariaCurrent?: string\n}\n\nconst navItemTemplate = html`<li class=\"nav__item\">\n <details\n r-if=\"item.children && item.children.length > 0\"\n class=\"nav__group\"\n :open=\"item.isOpen\"\n :data-nav-group-key=\"item.stateKey\"\n :data-nav-default-open=\"item.isOpen ? 'true' : undefined\"\n >\n <summary class=\"nav__summary w-full\">\n <BtnLink\n variant=\"none\"\n :icon=\"item.icon\"\n :tone=\"item.tone\"\n :class=\"item.linkClass\"\n :aria-current=\"item.ariaCurrent\"\n >\n {{ item.title }}\n </BtnLink>\n <Icon\n class=\"nav__chevron fs-xxs\"\n name=\"tabler:chevron-down\"\n aria-hidden=\"true\"/>\n </summary>\n <NavList :items=\"item.children\" :tone=\"item.tone\"></NavList>\n </details>\n <BtnLink\n r-else\n variant=\"none\"\n :icon=\"item.icon\"\n :href=\"item.url\"\n :tone=\"item.tone\"\n :class=\"item.linkClass\"\n :aria-current=\"item.ariaCurrent\"\n >\n {{ item.title }}\n </BtnLink>\n</li>`\n\nconst navListTemplate = html`<ul class=\"nav__list\">\n <NavItem r-for=\"item in items\"/>\n</ul>`\n\nconst DEFAULT_NAV_MENU_TONE: SemanticTone = 'neutral'\nconst DEFAULT_NAV_MENU_VARIANT: ComponentVariant = 'flat'\nconst DEFAULT_NAV_MENU_VARIANT_MODE: ComponentVariantMode = 'stateless'\n\nconst navMenuTemplate = html`<nav\n class=\"nav__menu\"\n :class=\"classes\"\n :data-nav-root=\"navRoot\"\n aria-label=\"Site navigation\"\n>\n <div class=\"nav__header-row\">\n <div class=\"nav__header\">Navigation</div>\n <SignIn\n r-if=\"resolvedSignInEnabled\"\n class=\"nav__account\"\n :enabled=\"resolvedSignInEnabled\"\n :signedIn=\"signInSignedIn\"\n :avatarSrc=\"signInAvatarSrc\"\n :avatarAlt=\"signInAvatarAlt\"/>\n <button\n class=\"nav__panel-toggle tone-fill-surface-all tone-text-surface-all tone-border-surface-all\"\n type=\"button\"\n title=\"Navigation\"\n aria-label=\"Toggle navigation panel\"\n data-nav-menu-toggle\n >\n <span class=\"nav__panel-toggle-icon\" aria-hidden=\"true\">\n <Icon name=\"iconoir:pin\"/>\n </span>\n <span class=\"nav__panel-toggle-label\">navigation</span>\n </button>\n <button\n class=\"nav__collapse-toggle tone-text-surface-all tone-fill-surface-hover tone-fill-surface-active tone-border-surface-hover tone-border-surface-active opacity-25 opacity-1-hover\"\n type=\"button\"\n title=\"Collapse navigation\"\n aria-label=\"Collapse navigation\"\n data-nav-menu-collapse\n >\n <span\n class=\"nav__collapse-toggle-icon nav__collapse-toggle-icon--collapse p-1\"\n aria-hidden=\"true\"\n >\n <Icon name=\"iconoir:pin-slash\"/>\n </span>\n <span\n class=\"nav__collapse-toggle-icon nav__collapse-toggle-icon--open p-1\"\n aria-hidden=\"true\"\n >\n <Icon name=\"iconoir:pin\"/>\n </span>\n </button>\n </div>\n <NavList :items=\"navItems\"></NavList>\n <SearchBox r-if=\"searchEnabled\" class=\"nav__search mt-1\"/>\n <script>\n window.tsSsgNavMenu?.hydrate(document.currentScript?.parentElement)\n </script>\n</nav>`\n\nfunction resolveNavItems(context?: PageContext): NavItem[] {\n const items = context?.navigation?.items ?? []\n if (items.length > 0) return items\n return context?.navigation?.global ?? []\n}\n\nfunction resolveCurrentPath(\n currentUrl: string | undefined,\n context?: PageContext,\n): string | undefined {\n const fromProp = urlNormalizer.normalizeInternalPath(currentUrl)\n if (fromProp) return fromProp\n const fromContext = urlNormalizer.normalizeInternalPath(\n context?.pageInfo?.urlPath,\n )\n if (fromContext) return fromContext\n if (typeof window !== 'undefined' && window.location?.pathname) {\n return urlNormalizer.normalizeInternalPath(window.location.pathname)\n }\n return undefined\n}\n\nfunction buildNavState(\n items: NavItem[],\n currentPath: string | undefined,\n parentKey = '',\n): NavItemState[] {\n return unref(items).map((item) => {\n const stateKey = resolveNavItemStateKey(item, parentKey)\n const childStates = item.children\n ? buildNavState(item.children, currentPath, stateKey)\n : []\n const itemPath = urlNormalizer.normalizeInternalPath(item.url)\n const isActive = Boolean(\n itemPath && currentPath && itemPath === currentPath,\n )\n const hasActiveChild = childStates.some(\n (child) => child.isActive || child.isOpen,\n )\n return {\n ...item,\n tone: isActive ? 'accent' : 'neutral',\n ...(childStates.length > 0 ? { children: childStates } : {}),\n isActive,\n isOpen: isActive || hasActiveChild,\n stateKey,\n linkClass: [\n 'fs-body ws-normal justify-start w-full tone-fill-surface-hover tone-fill-surface-active rounded-sm',\n isActive ? 'active tone-text-surface-active' : 'tone-text',\n ],\n ariaCurrent: isActive ? 'page' : undefined,\n }\n })\n}\n\nfunction resolveNavItemStateKey(item: NavItem, parentKey: string) {\n const segment = normalizeNavStateKeyPart(item.id ?? item.url ?? item.title)\n return parentKey ? `${parentKey}/${segment}` : segment\n}\n\nfunction normalizeNavStateKeyPart(value: string) {\n const normalized = value\n .trim()\n .replaceAll('\\\\', '/')\n .replace(/^\\/+|\\/+$/g, '')\n return normalized || 'item'\n}\n\nfunction defineNavItemComponent() {\n return defineComponent<{ item: NavItemState }>(navItemTemplate, {})\n}\n\nfunction defineNavListComponent() {\n return defineComponent<NavList>(navListTemplate, {\n props: ['items', 'tone'],\n context: (head) => ({\n ...head.props,\n items: head.props.items,\n tone: head.props.tone,\n }),\n })\n}\n\nfunction defineNavMenuComponent() {\n return defineComponent<NavMenu>(navMenuTemplate, {\n props: [\n 'items',\n 'currentUrl',\n 'search',\n 'signInEnabled',\n 'tone',\n 'variant',\n 'variantMode',\n 'signInSignedIn',\n 'signInAvatarSrc',\n 'signInAvatarAlt',\n ],\n context: (head) => {\n const context = tryResolvePageContext(head)\n const props = head.props\n return {\n ...props,\n classes: computed(() =>\n resolveComponentClasses(\n { ...props, tone: unref(props.tone) || DEFAULT_NAV_MENU_TONE },\n {\n defaultVariant: DEFAULT_NAV_MENU_VARIANT,\n defaultVariantMode: DEFAULT_NAV_MENU_VARIANT_MODE,\n },\n ),\n ),\n searchEnabled: computed(\n () => unref(props.search) ?? context?.site.pagefind?.enabled === true,\n ),\n resolvedSignInEnabled: computed(\n () =>\n unref(props.signInEnabled) ?? context?.site.auth?.enabled === true,\n ),\n navRoot: normalizeNavStateKeyPart(context?.navigation?.root ?? ''),\n navItems: computed(() =>\n buildNavState(\n unref(props.items) ?? resolveNavItems(context),\n resolveCurrentPath(unref(props.currentUrl), context),\n ),\n ),\n }\n },\n })\n}\n\nexport function defineNavigationComponents() {\n const navItem = defineNavItemComponent()\n const navList = defineNavListComponent()\n const navMenu = defineNavMenuComponent()\n return {\n navItem,\n navList,\n navMenu,\n }\n}\n","import type {\n PageContext,\n PageNavigationLink,\n PageNavigationLinks,\n} from '@purestack/ts-common'\nimport { resolvePageContext } from '@purestack/ts-common'\nimport { defineComponent, html } from 'regor'\n\nexport interface PageLinks extends PageNavigationLinks {\n hasLinks?: boolean\n}\n\nconst pageLinksTemplate = html`<Grid\n r-if=\"hasLinks\"\n container=\"nav\"\n columns=\"2\"\n class=\"pt-4 bt-1 b-subtle\"\n aria-label=\"Adjacent pages\"\n>\n <Flex class=\"min-w-0\" justify=\"start\">\n <BtnLink\n r-if=\"previous\"\n :href=\"previous.url\"\n tone=\"neutral\"\n variant=\"outline\"\n size=\"sm\"\n icon=\"iconoir:nav-arrow-left\"\n iconPosition=\"start\"\n rel=\"prev\"\n class=\"w-full ws-normal text-start min-w-0 justify-start\"\n :ariaLabel=\"'Previous: ' + previous.title\"\n >\n <span class=\"d-inline-flex flex-column align-flex-start min-w-0\">\n <span class=\"text-eyebrow fs-xxxs\">Previous</span>\n <span class=\"min-w-0 lh-2\">{{ previous.title }}</span>\n </span>\n </BtnLink>\n </Flex>\n <Flex class=\"min-w-0\" justify=\"start\" justifySm=\"end\">\n <BtnLink\n r-if=\"next\"\n :href=\"next.url\"\n tone=\"neutral\"\n variant=\"outline\"\n size=\"sm\"\n icon=\"iconoir:nav-arrow-right\"\n iconPosition=\"end\"\n rel=\"next\"\n class=\"w-full ws-normal text-end min-w-0 justify-end\"\n :ariaLabel=\"'Next: ' + next.title\"\n >\n <span class=\"d-inline-flex flex-column align-flex-end min-w-0\">\n <span class=\"text-eyebrow fs-xxxs\">Next</span>\n <span class=\"min-w-0 lh-2\">{{ next.title }}</span>\n </span>\n </BtnLink>\n </Flex>\n</Grid>`\n\nfunction resolvePageLinks(\n props: PageLinks,\n context: PageContext | undefined,\n): PageLinks {\n const previous = props.previous ?? context?.navigation?.pageLinks?.previous\n const next = props.next ?? context?.navigation?.pageLinks?.next\n const resolvedPrevious = resolvePageLink(previous)\n const resolvedNext = resolvePageLink(next)\n return {\n previous: resolvedPrevious,\n next: resolvedNext,\n hasLinks: Boolean(resolvedPrevious || resolvedNext),\n }\n}\n\nfunction resolvePageLink(link: PageNavigationLink | undefined) {\n if (!link?.url || !link.title) return undefined\n return link\n}\n\nfunction definePageLinksComponent() {\n return defineComponent<PageLinks>(pageLinksTemplate, {\n props: ['previous', 'next'],\n context: (head) => resolvePageLinks(head.props, resolvePageContext(head)),\n })\n}\n\nexport function definePageLinksComponents() {\n const pageLinks = definePageLinksComponent()\n return { pageLinks }\n}\n","import { resolvePageContext } from '@purestack/ts-common'\nimport {\n dirnamePosix,\n joinPosix,\n normalizePosixPath,\n toOutputAssetRelPath,\n toPosixPath,\n urlNormalizer,\n} from '@purestack/ts-util'\nimport { type ComponentHead, defineComponent, flatten, html } from 'regor'\n\nexport interface PageScript {\n teleport?: string\n src?: string\n sourceRelPath?: string\n type?: string\n async?: unknown\n defer?: unknown\n integrity?: string\n nonce?: string\n crossOrigin?: string\n referrerPolicy?: string\n noModule?: unknown\n}\n\nexport interface RegorApp {\n src?: string\n sourceRelPath?: string\n}\n\nconst pageScriptTemplate = html`<script\n :r-teleport=\"teleport\"\n :src=\"src\"\n :type=\"type\"\n :async=\"async\"\n :defer=\"defer\"\n :integrity=\"integrity\"\n :nonce=\"nonce\"\n :crossorigin=\"crossOrigin\"\n :referrerpolicy=\"referrerPolicy\"\n :nomodule=\"noModule\"\n></script>`\n\nconst regorAppTemplate = html`<App><PageScript :src=\"src\" :sourceRelPath=\"sourceRelPath\"/></App>`\n\nfunction definePageScriptComponent() {\n return defineComponent<PageScript>(pageScriptTemplate, {\n props: [\n 'teleport',\n 'src',\n 'sourceRelPath',\n 'type',\n 'async',\n 'defer',\n 'integrity',\n 'nonce',\n 'crossOrigin',\n 'referrerPolicy',\n 'noModule',\n ],\n context: (head) => resolvePageScript(head),\n })\n}\n\nfunction defineRegorAppComponent() {\n return defineComponent<RegorApp>(regorAppTemplate, {\n props: ['src', 'sourceRelPath'],\n context: (head) => ({\n src: head.props.src,\n sourceRelPath: head.props.sourceRelPath,\n }),\n })\n}\n\nexport function defineScriptComponents() {\n return {\n pageScript: definePageScriptComponent(),\n regorApp: defineRegorAppComponent(),\n }\n}\n\nfunction resolvePageScript(head: ComponentHead<PageScript>): PageScript {\n const props = flatten(head.props)\n const pageContext = resolvePageContext(head)\n const ownerRelPath =\n toOptionalString(props.sourceRelPath) ?? pageContext.pageInfo.relPath\n const src = resolveScriptSrc(\n props.src,\n ownerRelPath,\n (sourceRelPath) => {\n pageContext.recordScriptEntrypoint(sourceRelPath)\n },\n pageContext.resolveScriptPublicPath,\n )\n return {\n ...props,\n src,\n type: toOptionalString(props.type) ?? 'module',\n teleport: toOptionalString(props.teleport) ?? 'body',\n }\n}\n\nfunction resolveScriptSrc(\n src: unknown,\n pageRelPath: string,\n onSourceResolved?: (sourceRelPath: string) => void,\n resolveScriptPublicPath?: (sourceRelPath: string) => string,\n) {\n const normalized = toOptionalString(src)\n if (!normalized) {\n throw new Error('PageScript requires a non-empty \"src\" prop.')\n }\n if (isExternalSrc(normalized)) return normalized\n const { base, suffix } = urlNormalizer.splitSuffix(normalized)\n const sourceRelPath = resolveSourceRelPath(base, pageRelPath)\n onSourceResolved?.(sourceRelPath)\n const publicPath =\n resolveScriptPublicPath?.(sourceRelPath) ??\n `/${toOutputAssetRelPath(sourceRelPath)}`\n return `${publicPath}${suffix}`\n}\n\nfunction resolveSourceRelPath(value: string, pageRelPath: string) {\n if (value.startsWith('/')) {\n return trimLeadingSlashes(value)\n }\n const sourceDir = dirnamePosix(toPosixPath(pageRelPath))\n const normalizedSourceDir = sourceDir === '.' ? '' : sourceDir\n const resolved = normalizePosixPath(joinPosix(normalizedSourceDir, value))\n if (resolved === '..' || resolved.startsWith('../')) {\n throw new Error(`PageScript src resolves outside content root: \"${value}\"`)\n }\n return resolved\n}\n\nfunction isExternalSrc(value: string) {\n return (\n value.startsWith('//') ||\n value.startsWith('http://') ||\n value.startsWith('https://')\n )\n}\n\nfunction trimLeadingSlashes(value: string) {\n return value.replace(/^\\/+/, '')\n}\n\nfunction toOptionalString(value: unknown) {\n if (value === null || value === undefined) return undefined\n const trimmed = String(value).trim()\n return trimmed.length > 0 ? trimmed : undefined\n}\n","import type { PageContext, PageOutlineItem } from '@purestack/ts-common'\nimport { resolvePageContext } from '@purestack/ts-common'\nimport type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type RefOrValue,\n type SRef,\n unref,\n} from 'regor'\nimport {\n type ComponentVariant,\n type ComponentVariantMode,\n resolveComponentClasses,\n} from '../componentVariant'\n\nexport interface PageToc {\n outline?: PageOutlineItem[] | SRef<PageOutlineItem[]>\n title?: string\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n classes?: ComputedRef<string>\n}\n\nconst DEFAULT_PAGE_TOC_VARIANT: ComponentVariant = 'flat'\nconst DEFAULT_PAGE_TOC_VARIANT_MODE: ComponentVariantMode = 'stateless'\n\nexport interface PageTocItem extends PageOutlineItem {\n href: string\n children?: PageTocItem[]\n}\n\nconst pageTocTemplate = html`<nav class=\"page-toc\" :class=\"classes\" aria-label=\"On this page\">\n <button\n class=\"page-toc__panel-toggle tone-fill-button-all tone-text-button-all tone-border-button-all\"\n type=\"button\"\n aria-controls=\"doc-toc\"\n aria-expanded=\"false\"\n >\n <span class=\"page-toc__panel-toggle-label\">on this page</span>\n </button>\n <div class=\"page-toc__header-row\">\n <div class=\"page-toc__header\">{{ title }}</div>\n <button\n class=\"page-toc__restore-toggle tone-text-button-all tone-fill-button-hover tone-fill-button-active tone-border-button-hover tone-border-button-active opacity-25 opacity-1-hover\"\n type=\"button\"\n title=\"Collapse table of contents\"\n aria-label=\"Collapse table of contents\"\n data-page-toc-restore\n >\n <span\n class=\"page-toc__header-toggle-icon page-toc__header-toggle-icon--collapse p-1\"\n >\n <Icon name=\"iconoir:pin-slash\"/>\n </span>\n <span\n class=\"page-toc__header-toggle-icon page-toc__header-toggle-icon--restore p-1\"\n >\n <Icon name=\"iconoir:pin\"/>\n </span>\n </button>\n </div>\n <ul class=\"page-toc__list\" r-if=\"items.length > 0\">\n <li r-for=\"item in items\" class=\"page-toc__item page-toc__item--h2\">\n <BtnLink\n variant=\"link\"\n :href=\"item.href\"\n class=\"page-toc__link justify-start w-full ws-normal fw-400 fs-sm tone-fill-button-active tone-text-button-active py-1 pl-2\"\n >\n {{ item.title }}\n </BtnLink>\n <ul\n r-if=\"item.children && item.children.length > 0\"\n class=\"page-toc__list page-toc__list--nested\"\n >\n <li\n r-for=\"child in item.children\"\n class=\"page-toc__item page-toc__item--h3\"\n >\n <BtnLink\n variant=\"link\"\n :href=\"child.href\"\n class=\"page-toc__link page-toc__link--sub justify-start w-full ws-normal fw-200 fs-xs tone-fill-button-active tone-text-button-active py-1 pl-2\"\n >\n {{ child.title }}\n </BtnLink>\n </li>\n </ul>\n </li>\n </ul>\n <div class=\"page-toc__empty\" r-else>No sections yet.</div>\n <script>\n window.tsSsgPageToc?.hydrate(document.currentScript?.parentElement)\n </script>\n</nav>`\n\nfunction toPageTocItems(items: PageOutlineItem[]): PageTocItem[] {\n return items.map((item) => {\n const { children, ...rest } = item\n const mappedChildren = children ? toPageTocItems(children) : undefined\n return {\n ...rest,\n href: `#${item.id}`,\n ...(mappedChildren ? { children: mappedChildren } : {}),\n }\n })\n}\n\nfunction omitSingleDocumentHeading(items: PageOutlineItem[]) {\n if (items.length !== 1) return items\n const [item] = items\n if (item?.depth !== 1) return items\n return item.children ?? []\n}\n\nfunction resolveItems(props: PageToc, context: PageContext | undefined) {\n const items = unref(props.outline) ?? context?.outline ?? []\n return toPageTocItems(omitSingleDocumentHeading(items))\n}\n\nfunction resolveTitle(props: PageToc) {\n return typeof props.title === 'string' && props.title.trim().length > 0\n ? props.title.trim()\n : 'On this page'\n}\n\nfunction definePageTocComponent() {\n return defineComponent<PageToc>(pageTocTemplate, {\n props: ['outline', 'title', 'tone', 'variant', 'variantMode'],\n context: (head) => {\n const context = resolvePageContext(head)\n return {\n title: resolveTitle(head.props),\n classes: computed(() =>\n resolveComponentClasses(head.props, {\n defaultVariant: DEFAULT_PAGE_TOC_VARIANT,\n defaultVariantMode: DEFAULT_PAGE_TOC_VARIANT_MODE,\n }),\n ),\n items: resolveItems(head.props, context),\n }\n },\n })\n}\n\nexport function definePageTocComponents() {\n const pageToc = definePageTocComponent()\n return { pageToc }\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type RefOrValue,\n} from 'regor'\nimport {\n type ComponentVariant,\n type ComponentVariantMode,\n resolveComponentClasses,\n} from '../componentVariant'\n\nexport interface Panel {\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n bodyClass?: RefOrValue<string>\n classes?: ComputedRef<string>\n}\n\nconst DEFAULT_PANEL_VARIANT: ComponentVariant = 'surface'\nconst DEFAULT_PANEL_VARIANT_MODE: ComponentVariantMode = 'stateless'\n\nconst panelTemplate = html`<section class=\"panel tone-text\" :class=\"classes\">\n <div class=\"panel__body\" :class=\"bodyClass\">\n <slot></slot>\n </div>\n</section>`\n\nfunction definePanelComponent() {\n return defineComponent<Panel>(panelTemplate, {\n props: ['tone', 'variant', 'variantMode', 'bodyClass'],\n context: (head) => resolvePanel(head.props),\n })\n}\n\nexport function definePanelComponents() {\n return {\n panel: definePanelComponent(),\n }\n}\n\nfunction resolvePanel(props: Panel): Panel {\n return {\n ...props,\n classes: computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: DEFAULT_PANEL_VARIANT,\n defaultVariantMode: DEFAULT_PANEL_VARIANT_MODE,\n }),\n ),\n }\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport { defineComponent, html, type RefOrValue } from 'regor'\nimport type {\n ComponentVariant,\n ComponentVariantMode,\n} from '../componentVariant'\n\nexport interface PricingTable {\n eyebrow?: RefOrValue<string>\n title?: RefOrValue<string>\n subtitle?: RefOrValue<string>\n footnote?: RefOrValue<string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n columns?: RefOrValue<number | string>\n columnsLg?: RefOrValue<number | string>\n columnsXl?: RefOrValue<number | string>\n}\n\nexport interface PricingPlan {\n title?: RefOrValue<string>\n summary?: RefOrValue<string>\n price?: RefOrValue<string>\n period?: RefOrValue<string>\n badge?: RefOrValue<string>\n note?: RefOrValue<string>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n icon?: RefOrValue<string>\n ctaLabel?: RefOrValue<string>\n ctaLink?: RefOrValue<string>\n tone?: RefOrValue<SemanticTone>\n}\n\nexport interface PricingFeature {\n icon?: RefOrValue<string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n}\n\nconst pricingTableTemplate = html`<Panel :tone=\"tone\" :variant=\"variant || 'none'\" :variantMode=\"variantMode\">\n <Flex direction=\"column\" align=\"start\">\n <SectionHeader\n r-if=\"eyebrow || title || subtitle || footnote\"\n :eyebrow=\"eyebrow\"\n :title=\"title\"\n :subtitle=\"subtitle\"\n :footnote=\"footnote\"\n titleTag=\"h2\"/>\n <Grid\n :columns=\"columns || 1\"\n :columnsLg=\"columnsLg || 2\"\n :columnsXl=\"columnsXl || 4\"\n alignItems=\"stretch\"\n justifyItems=\"center\"\n >\n <slot></slot>\n </Grid>\n </Flex>\n</Panel>`\n\nconst pricingPlanTemplate = html`<Panel :tone=\"tone\" :variant=\"variant || 'surface'\" :variantMode=\"variantMode\">\n <Flex direction=\"column\" align=\"start\">\n <Flex justify=\"between\" align=\"center\" r-if=\"icon || badge\">\n <IconFrame\n r-if=\"icon\"\n :name=\"icon\"\n :tone=\"tone\"\n variant=\"surface\"\n size=\"lg\"/>\n <Badge r-if=\"badge\" :tone=\"tone\">{{ badge }}</Badge>\n </Flex>\n <SectionHeader :title=\"title\" :subtitle=\"summary\" titleTag=\"h3\"/>\n <Flex align=\"baseline\" r-if=\"price\">\n <strong class=\"fs-h2\">{{ price }}</strong>\n <span r-if=\"period\">{{ period }}</span>\n </Flex>\n <BtnLink :href=\"ctaLink\" :tone=\"tone\" r-if=\"ctaLabel && ctaLink\">\n {{ ctaLabel }}\n </BtnLink>\n <Flex container=\"ul\" direction=\"column\" align=\"start\" class=\"m-0 p-0\">\n <slot></slot>\n </Flex>\n <small r-if=\"note\">{{ note }}</small>\n </Flex>\n</Panel>`\n\nconst pricingFeatureTemplate = html`<Flex container=\"li\" align=\"start\">\n <IconFrame\n :name=\"icon || 'iconoir:check'\"\n :tone=\"tone\"\n :variant=\"variant || 'surface'\"\n size=\"sm\"/>\n <slot></slot>\n</Flex>`\n\nfunction definePricingTableComponent() {\n return defineComponent<PricingTable>(pricingTableTemplate, {\n props: [\n 'eyebrow',\n 'title',\n 'subtitle',\n 'footnote',\n 'tone',\n 'variant',\n 'variantMode',\n 'columns',\n 'columnsLg',\n 'columnsXl',\n ],\n })\n}\n\nfunction definePricingPlanComponent() {\n return defineComponent<PricingPlan>(pricingPlanTemplate, {\n props: [\n 'title',\n 'summary',\n 'price',\n 'period',\n 'badge',\n 'note',\n 'variant',\n 'variantMode',\n 'icon',\n 'ctaLabel',\n 'ctaLink',\n 'tone',\n ],\n })\n}\n\nfunction definePricingFeatureComponent() {\n return defineComponent<PricingFeature>(pricingFeatureTemplate, {\n props: ['icon', 'tone', 'variant'],\n })\n}\n\nexport function definePricingComponents() {\n return {\n pricingTable: definePricingTableComponent(),\n pricingPlan: definePricingPlanComponent(),\n pricingFeature: definePricingFeatureComponent(),\n }\n}\n","import type { PageContext } from '@purestack/ts-common'\n\nimport { resolvePageContext } from '@purestack/ts-common'\nimport type { SemanticTone } from '@purestack/ts-style'\nimport { defineComponent, html, type RefOrValue } from 'regor'\nimport type { ComponentVariant } from '../componentVariant'\n\nexport interface SearchBox {\n placeholder?: RefOrValue<string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n}\n\nconst searchBoxTemplate = html`<div class=\"site-search\" data-pagefind-search>\n <FormInputField\n icon=\"tabler:search\"\n :tone=\"tone\"\n :variant=\"variant\"\n type=\"search\"\n name=\"q\"\n :placeholder=\"placeholder\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n data-pagefind-input\n aria-label=\"Search site content\"/>\n <div\n class=\"site-search__results doc-content\"\n data-pagefind-results\n hidden\n ></div>\n</div>`\n\nfunction defineSearchBoxComponent() {\n return defineComponent<SearchBox>(searchBoxTemplate, {\n props: ['tone', 'variant', 'placeholder'],\n context: (head) => ({\n tone: head.props.tone,\n variant: head.props.variant,\n placeholder: resolveSearchPlaceholder(resolvePageContext(head)),\n }),\n })\n}\n\nexport function defineSearchComponents() {\n return { searchBox: defineSearchBoxComponent() }\n}\n\nfunction resolveSearchPlaceholder(context: PageContext): string {\n const title = context?.site?.siteTitle\n if (typeof title !== 'string') return 'Search'\n const trimmed = title.trim()\n if (trimmed.length === 0) return 'Search'\n return `Search ${trimmed}`\n}\n","import {\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type RefOrValue,\n unref,\n} from 'regor'\n\nexport interface SectionHeader {\n eyebrow?: RefOrValue<string>\n title?: RefOrValue<string>\n subtitle?: RefOrValue<string>\n footnote?: RefOrValue<string>\n titleTag?: RefOrValue<string>\n titleId?: RefOrValue<string>\n eyebrowClass?: RefOrValue<string>\n titleClass?: RefOrValue<string>\n subtitleClass?: RefOrValue<string>\n footnoteClass?: RefOrValue<string>\n resolvedTitleTag?: ComputedRef<string>\n}\n\nconst sectionHeaderTemplate = html`<div class=\"section-header\">\n <div class=\"text-eyebrow\" :class=\"eyebrowClass\" r-if=\"eyebrow\">\n {{ eyebrow }}\n </div>\n <div\n :is=\"resolvedTitleTag\"\n :id=\"titleId\"\n class=\"text-title\"\n :class=\"titleClass\"\n r-if=\"title\"\n >\n {{ title }}\n </div>\n <p class=\"text-tagline\" :class=\"subtitleClass\" r-if=\"subtitle\">\n {{ subtitle }}\n </p>\n <p class=\"prose-meta\" :class=\"footnoteClass\" r-if=\"footnote\">\n {{ footnote }}\n </p>\n <slot></slot>\n</div>`\n\nfunction defineSectionHeaderComponent() {\n return defineComponent<SectionHeader>(sectionHeaderTemplate, {\n props: [\n 'eyebrow',\n 'title',\n 'subtitle',\n 'footnote',\n 'titleTag',\n 'titleId',\n 'eyebrowClass',\n 'titleClass',\n 'subtitleClass',\n 'footnoteClass',\n ],\n context: (head) => resolveSectionHeader(head.props),\n })\n}\n\nexport function defineSectionHeaderComponents() {\n return {\n sectionHeader: defineSectionHeaderComponent(),\n }\n}\n\nfunction resolveSectionHeader(props: SectionHeader): SectionHeader {\n return {\n ...props,\n resolvedTitleTag: computed(() => resolveTitleTag(unref(props.titleTag))),\n }\n}\n\nfunction resolveTitleTag(value: unknown): string {\n const normalized = resolveString(value).toLowerCase()\n if (\n normalized === 'h1' ||\n normalized === 'h2' ||\n normalized === 'h3' ||\n normalized === 'h4' ||\n normalized === 'h5' ||\n normalized === 'h6' ||\n normalized === 'p' ||\n normalized === 'div' ||\n normalized === 'span'\n ) {\n return normalized\n }\n return 'h2'\n}\n\nfunction resolveString(value: unknown) {\n return typeof value === 'string' && value.trim().length > 0\n ? value.trim()\n : ''\n}\n","import { tryResolvePageContext } from '@purestack/ts-common'\nimport type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type RefOrValue,\n unref,\n} from 'regor'\nimport type {\n ComponentVariant,\n ComponentVariantMode,\n} from '../componentVariant'\n\nexport interface SignIn {\n avatarSrc?: RefOrValue<string>\n avatarAlt?: RefOrValue<string>\n icon?: RefOrValue<string>\n accountIcon?: RefOrValue<string>\n label?: RefOrValue<string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n enabled?: RefOrValue<boolean>\n signUp?: RefOrValue<boolean>\n signedIn?: RefOrValue<boolean>\n authEnabled?: ComputedRef<boolean>\n signUpEnabled?: ComputedRef<boolean>\n resolvedIcon?: ComputedRef<string>\n resolvedAccountIcon?: ComputedRef<string>\n resolvedLabel?: ComputedRef<string>\n resolvedAvatarAlt?: ComputedRef<string>\n}\n\nconst DEFAULT_SIGN_IN_ICON = 'lucide:log-in'\nconst DEFAULT_ACCOUNT_ICON = 'tabler:user-filled'\nconst DEFAULT_SIGN_IN_LABEL = 'Account'\n\nconst signInTemplate = html`<details\n r-if=\"authEnabled\"\n class=\"sign-in position-relative\"\n :data-signed-in=\"signedIn\"\n data-menu-runtime\n data-menu-align=\"end\"\n>\n <summary\n class=\"sign-in__trigger topbar__icon rounded-pill cursor-pointer overflow-hidden\"\n aria-label=\"Account menu\"\n >\n <span\n class=\"sign-in__signed-out-view tone-fill-surface-hover tone-fill-surface-active tone-border-surface-hover tone-border-surface-active\"\n aria-hidden=\"true\"\n >\n <Icon :name=\"resolvedIcon\"/>\n </span>\n <span\n class=\"sign-in__signed-in-view tone-fill-surface-hover tone-fill-surface-active tone-border-surface-hover tone-border-surface-active\"\n aria-hidden=\"true\"\n >\n <slot name=\"avatar\">\n <img\n r-if=\"avatarSrc\"\n class=\"sign-in__avatar w-full h-full rounded-pill\"\n :src=\"avatarSrc\"\n :alt=\"resolvedAvatarAlt\"/>\n <Icon r-else :name=\"resolvedAccountIcon\"/>\n </slot>\n </span>\n <span class=\"hidden\">{{ resolvedLabel }}</span>\n </summary>\n <Panel\n class=\"sign-in__panel p-1 mt-1\"\n :tone=\"tone\"\n :variant=\"variant || 'surfaceAlt'\"\n :variantMode=\"variantMode\"\n data-menu-panel\n >\n <slot>\n <Flex\n container=\"nav\"\n direction=\"column\"\n align=\"stretch\"\n class=\"gap-1\"\n aria-label=\"Account\"\n >\n <BtnLink\n class=\"sign-in__signed-out-action justify-start w-full text-start\"\n href=\"/signin/\"\n :tone=\"tone\"\n variant=\"subtleBtn\"\n icon=\"lucide:log-in\"\n >\n Sign in\n </BtnLink>\n <BtnLink\n r-if=\"signUpEnabled\"\n class=\"sign-in__signed-out-action justify-start w-full text-start\"\n href=\"/signup/\"\n :tone=\"tone\"\n variant=\"subtleBtn\"\n icon=\"lucide:user-plus\"\n >\n Sign up\n </BtnLink>\n <BtnLink\n class=\"sign-in__signed-in-action justify-start w-full text-start\"\n href=\"/account/\"\n :tone=\"tone\"\n variant=\"subtleBtn\"\n icon=\"lucide:user-round\"\n >\n Account\n </BtnLink>\n <BtnLink\n class=\"sign-in__signed-in-action justify-start w-full text-start\"\n href=\"/account/settings/\"\n :tone=\"tone\"\n variant=\"subtleBtn\"\n icon=\"lucide:settings\"\n >\n Settings\n </BtnLink>\n <BtnLink\n class=\"sign-in__signed-in-action justify-start w-full text-start\"\n href=\"/signout/\"\n :tone=\"tone\"\n variant=\"subtleBtn\"\n icon=\"lucide:log-out\"\n >\n Sign out\n </BtnLink>\n </Flex>\n </slot>\n </Panel>\n</details>`\n\nfunction defineSignInComponent() {\n return defineComponent<SignIn>(signInTemplate, {\n props: [\n 'enabled',\n 'signUp',\n 'signedIn',\n 'avatarSrc',\n 'avatarAlt',\n 'icon',\n 'accountIcon',\n 'label',\n 'tone',\n 'variant',\n 'variantMode',\n ],\n context: (head) => resolveSignIn(head.props, head),\n })\n}\n\nexport function defineSignInComponents() {\n return { signIn: defineSignInComponent() }\n}\n\nfunction resolveSignIn(props: SignIn, head: unknown): SignIn {\n const auth = tryResolvePageContext(head)?.site?.auth\n return {\n ...props,\n authEnabled: computed(() => unref(props.enabled) ?? auth?.enabled === true),\n signUpEnabled: computed(() => unref(props.signUp) ?? auth?.signUp === true),\n resolvedIcon: computed(() => unref(props.icon) || DEFAULT_SIGN_IN_ICON),\n resolvedAccountIcon: computed(\n () => unref(props.accountIcon) || DEFAULT_ACCOUNT_ICON,\n ),\n resolvedLabel: computed(() => unref(props.label) || DEFAULT_SIGN_IN_LABEL),\n resolvedAvatarAlt: computed(() => unref(props.avatarAlt) || ''),\n }\n}\n","import { tryResolvePageContext } from '@purestack/ts-common'\nimport type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComponentHead,\n type ComputedRef,\n computed,\n defineComponent,\n html,\n isRef,\n type RefOrValue,\n ref,\n unref,\n} from 'regor'\nimport { createAutoId } from '../autoId'\nimport {\n type ComponentVariant,\n type ComponentVariantMode,\n resolveComponentClasses,\n} from '../componentVariant'\n\nconst defaultGroup = 'tabs-default'\nconst DEFAULT_TABS_VARIANT_MODE: ComponentVariantMode = 'stateless'\nconst resolveTabGroup = createAutoId(defaultGroup)\nconst resolveTabId = createAutoId('tab')\n\nexport class Tabs {\n group: string = defaultGroup\n ariaLabel?: RefOrValue<string>\n selectedTab?: RefOrValue<string>\n mobileSelect?: RefOrValue<boolean>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n tabVariant?: RefOrValue<ComponentVariant>\n classes?: ComputedRef<string>\n}\n\nexport interface TabPane {\n id?: string\n label?: RefOrValue<string>\n icon?: RefOrValue<string>\n disabled?: RefOrValue<boolean>\n group?: string\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n tabVariant?: RefOrValue<ComponentVariant>\n classes?: ComputedRef<string>\n tabClasses?: ComputedRef<string>\n}\n\nconst tabsTemplate = html`<section class=\"tabs\" :class=\"classes\" :data-mobile-select=\"mobileSelect\">\n <slot name=\"header\"></slot>\n <div class=\"tabs__list\" role=\"tablist\" :aria-label=\"ariaLabel || 'Tabs'\">\n <slot></slot>\n </div>\n</section>`\n\nconst tabPaneTemplate = html`<div class=\"tabs__item\">\n <input\n class=\"tabs__control\"\n type=\"radio\"\n :name=\"group\"\n :id=\"id\"\n :value=\"id\"\n r-model=\"selectedTab\"\n :disabled=\"disabled\"/>\n <label\n class=\"tabs__tab\"\n :class=\"tabClasses\"\n role=\"tab\"\n :id=\"id+'-label'\"\n :for=\"id\"\n :aria-controls=\"id+'-panel'\"\n :aria-selected=\"selectedTab === id\"\n :aria-disabled=\"disabled\"\n >\n <Icon class=\"tabs__tab-icon\" :name=\"icon\"/>\n <span class=\"tabs__tab-label\">{{ label || id }}</span>\n </label>\n <section\n class=\"tabs__panel\"\n :class=\"classes\"\n role=\"tabpanel\"\n :id=\"id+'-panel'\"\n :aria-labelledby=\"id+'-label'\"\n >\n <div class=\"tabs__panel-body\" :class=\"class\">\n <slot></slot>\n </div>\n </section>\n</div>`\n\nfunction defineTabsComponent() {\n return defineComponent<Tabs>(tabsTemplate, {\n props: [\n 'ariaLabel',\n 'group',\n 'selectedTab',\n 'mobileSelect',\n 'tone',\n 'variant',\n 'variantMode',\n 'tabVariant',\n ],\n context: (head) => {\n markTabsRuntimeEmbed(head)\n return resolveTabs(head.props)\n },\n })\n}\n\nfunction defineTabPaneComponent() {\n return defineComponent<TabPane>(tabPaneTemplate, {\n props: [\n 'id',\n 'label',\n 'icon',\n 'disabled',\n 'group',\n 'tone',\n 'variant',\n 'variantMode',\n 'tabVariant',\n ],\n context: (head) => resolveTabPane(head),\n })\n}\n\nexport function defineTabsComponents() {\n return {\n tabs: defineTabsComponent(),\n tabPane: defineTabPaneComponent(),\n }\n}\n\nfunction resolveTabs(props: Tabs): Tabs {\n const group = resolveTabGroup(unref(props.group))\n const tabs = new Tabs()\n const selectedTab = ensureSelectedTabIsRef(props.selectedTab)\n return Object.assign(tabs, {\n ...props,\n group,\n selectedTab,\n classes: computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: 'surface',\n defaultVariantMode: DEFAULT_TABS_VARIANT_MODE,\n }),\n ),\n })\n}\n\nfunction ensureSelectedTabIsRef(selectedTab?: RefOrValue<string>) {\n return isRef(selectedTab) ? selectedTab : ref(selectedTab)\n}\n\nfunction resolveTabPane(head: ComponentHead<TabPane>): TabPane {\n const fromParent = head.findContext(Tabs)\n const group = head.props.group || fromParent?.group || defaultGroup\n const id = resolveTabId(unref(head.props.id))\n const tone = head.props.tone || fromParent?.tone\n const variantMode = head.props.variantMode || fromParent?.variantMode\n const tabVariant = head.props.tabVariant || fromParent?.tabVariant\n return {\n ...head.props,\n id,\n group,\n tone,\n variantMode,\n tabVariant,\n classes: computed(() =>\n resolveComponentClasses(\n { tone, variant: head.props.variant, variantMode },\n {\n defaultVariant: 'none',\n defaultVariantMode: DEFAULT_TABS_VARIANT_MODE,\n },\n ),\n ),\n tabClasses: computed(() =>\n resolveComponentClasses(\n { tone, variant: tabVariant },\n {\n defaultVariant: 'underline',\n classes: [unref(head.props.disabled) ? 'tabs__tab--disabled' : ''],\n },\n ),\n ),\n }\n}\n\nfunction markTabsRuntimeEmbed(head: ComponentHead<Tabs>) {\n tryResolvePageContext(head)?.recordRuntimeEmbed('tabs', 'head')\n}\n","import { defineComponent, html } from 'regor'\n\nexport interface ThemeToggle {}\n\n/**\n * One icon button that flips between the light and dark themes. The theme\n * stylesheets decide which glyph shows, so the markup carries no state; the\n * theme runtime binds every [data-theme-toggle] and keeps aria-pressed in sync.\n */\nconst themeToggleTemplate = html`<button\n class=\"theme-toggle\"\n type=\"button\"\n aria-label=\"Dark theme\"\n aria-pressed=\"false\"\n data-theme-toggle\n>\n <Icon\n class=\"theme-toggle__glyph theme-toggle__glyph--light\"\n name=\"lucide:sun\"\n aria-hidden=\"true\"/>\n <Icon\n class=\"theme-toggle__glyph theme-toggle__glyph--dark\"\n name=\"lucide:moon\"\n aria-hidden=\"true\"/>\n</button>`\n\nfunction defineThemeToggleComponent() {\n return defineComponent<ThemeToggle>(themeToggleTemplate)\n}\n\nexport function defineThemeToggleComponents() {\n return { themeToggle: defineThemeToggleComponent() }\n}\n","import { defineComponent, html, type SRef } from 'regor'\nimport type { ToastItem, ToastStore } from './toastStore'\n\nexport interface ToastHost {\n items: SRef<ToastItem[]>\n dismiss: ToastStore['dismiss']\n}\n\nexport const toastHostTemplate = html`<Flex\n direction=\"column\"\n align=\"center\"\n r-if=\"items.length > 0\"\n style=\"position: fixed; top: 1rem; left: 50%; z-index: 1200; max-width: calc(100vw - 2rem); transform: translateX(-50%); pointer-events: none;\"\n>\n <Panel\n class=\"py-0\"\n r-for=\"toast in items\"\n :tone=\"toast.tone\"\n variant=\"surface\"\n style=\"max-width: calc(100vw - 2rem); pointer-events: auto;\"\n >\n <Flex align=\"center\" justify=\"between\" wrap=\"true\">\n <span>{{ toast.message }}</span>\n <Btn\n size=\"sm\"\n variant=\"subtleBtn\"\n icon=\"iconoir:xmark\"\n @click=\"dismiss(toast.id)\"\n >\n Dismiss\n </Btn>\n </Flex>\n </Panel>\n</Flex>`\n\nexport function defineToastComponents() {\n return {\n toastHost: defineComponent<ToastHost>(toastHostTemplate, {\n props: ['items', 'dismiss'],\n }),\n }\n}\n","import type { PageContext, SiteLogoConfig } from '@purestack/ts-common'\n\nimport { resolvePageContext } from '@purestack/ts-common'\nimport type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type RefOrValue,\n unref,\n} from 'regor'\nimport {\n type ComponentVariant,\n type ComponentVariantMode,\n resolveComponentClasses,\n} from '../componentVariant'\n\nexport interface TopBar {\n siteLogo: SiteLogoConfig\n logoComponent?: RefOrValue<string>\n resolvedLogoComponent?: ComputedRef<string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n signInSignedIn?: RefOrValue<boolean>\n signInAvatarSrc?: RefOrValue<string>\n signInAvatarAlt?: RefOrValue<string>\n classes?: ComputedRef<string>\n search?: RefOrValue<boolean>\n searchEnabled?: ComputedRef<boolean>\n signInEnabled?: RefOrValue<boolean>\n resolvedSignInEnabled?: ComputedRef<boolean>\n}\n\nconst DEFAULT_TOP_BAR_VARIANT: ComponentVariant = 'surfaceAlt'\nconst DEFAULT_TOP_BAR_VARIANT_MODE: ComponentVariantMode = 'stateless'\n\nfunction resolveTopBar(context: PageContext, props: TopBar): TopBar {\n return {\n ...props,\n siteLogo: context.site.logo,\n resolvedLogoComponent: computed(\n () =>\n unref(props.logoComponent) ?? context.site.logo.component ?? 'SiteLogo',\n ),\n searchEnabled: computed(\n () => unref(props.search) ?? context.site.pagefind?.enabled === true,\n ),\n resolvedSignInEnabled: computed(\n () => unref(props.signInEnabled) ?? context.site.auth?.enabled === true,\n ),\n classes: computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: DEFAULT_TOP_BAR_VARIANT,\n defaultVariantMode: DEFAULT_TOP_BAR_VARIANT_MODE,\n }),\n ),\n }\n}\n\nconst topBarTemplate = html`<input\n class=\"doc-nav-toggle\"\n id=\"doc-nav-toggle\"\n type=\"checkbox\"\n autocomplete=\"off\"\n aria-hidden=\"true\"/>\n<header class=\"topbar\" :class=\"classes\" r-inherit>\n <Flex align=\"center\">\n <div :is=\"resolvedLogoComponent\" class=\"flex-none\" :config=\"siteLogo\"></div>\n <SearchBox\n r-if=\"searchEnabled\"\n class=\"topbar__search flex-auto rounded-md tone-text-surface\"\n variant=\"none\"/>\n <Flex class=\"topbar__controls flex-none\" align=\"center\" justify=\"end\">\n <div class=\"topbar__actions\">\n <ThemeToggle/>\n <slot name=\"actions\"></slot>\n <SignIn\n r-if=\"resolvedSignInEnabled\"\n class=\"topbar__account\"\n :enabled=\"resolvedSignInEnabled\"\n :signedIn=\"signInSignedIn\"\n :avatarSrc=\"signInAvatarSrc\"\n :avatarAlt=\"signInAvatarAlt\"/>\n <label\n class=\"topbar__icon topbar__toggle\"\n for=\"doc-nav-toggle\"\n role=\"button\"\n aria-label=\"Toggle navigation\"\n ></label>\n </div>\n </Flex>\n </Flex>\n</header>`\n\nfunction defineTopBarComponent() {\n return defineComponent<TopBar>(topBarTemplate, {\n props: [\n 'class',\n 'logoComponent',\n 'tone',\n 'variant',\n 'signInSignedIn',\n 'signInAvatarSrc',\n 'signInAvatarAlt',\n 'signInEnabled',\n 'search',\n ],\n context: (head) => resolveTopBar(resolvePageContext(head), head.props),\n })\n}\n\nexport function defineTopBarComponents() {\n return { topBar: defineTopBarComponent() }\n}\n","import {\n type ComponentHead,\n type ComputedRef,\n computed,\n defineComponent,\n html,\n observe,\n type RefOrValue,\n ref,\n sref,\n unref,\n} from 'regor'\nimport type { VirtualListRow } from './virtualList'\nimport type { VirtualTable } from './virtualTable'\n// known limitation: vertical scroll bar is not synced perfectly to the mouse pointer during scroll. eiter fix it or delete this component!\nexport interface VariableVirtualTable extends VirtualTable {\n estimateHeight?: RefOrValue<number | string>\n viewportElement?: ReturnType<typeof sref<HTMLElement | null>>\n unmounted?: () => void\n}\n\nconst variableVirtualTableTemplate = html`<div\n class=\"virtual-table variable-virtual-table\"\n :style=\"viewportStyle\"\n :ref=\"viewportElement\"\n @scroll=\"handleScroll\"\n>\n <table class=\"virtual-table__table\" :style=\"tableStyle\">\n <colgroup :is=\"colGroupComponent\" r-if=\"hasColGroupComponent\"></colgroup>\n <thead :is=\"headerComponent\" r-if=\"hasHeaderComponent\"></thead>\n <tbody>\n <tr class=\"virtual-table__spacer-row\">\n <td :style=\"topSpacerStyle\"></td>\n </tr>\n <tr\n :is=\"rowComponent\"\n :data-virtual-row-index=\"row.index\"\n :item=\"row.item\"\n :index=\"row.index\"\n r-for=\"row in visibleRows\"\n ></tr>\n <tr class=\"virtual-table__spacer-row\">\n <td :style=\"bottomSpacerStyle\"></td>\n </tr>\n </tbody>\n <tfoot :is=\"footerComponent\" r-if=\"hasFooterComponent\"></tfoot>\n </table>\n</div>`\n\nfunction defineVariableVirtualTableComponent() {\n return defineComponent<VariableVirtualTable>(variableVirtualTableTemplate, {\n props: [\n 'items',\n 'height',\n 'estimateHeight',\n 'overscan',\n 'rowComponent',\n 'colGroupComponent',\n 'headerComponent',\n 'footerComponent',\n ],\n context: (head) => resolveVariableVirtualTable(head),\n })\n}\n\nexport function defineVariableVirtualTableComponents() {\n return {\n variableVirtualTable: defineVariableVirtualTableComponent(),\n }\n}\n\nclass VariableVirtualTableContext implements VariableVirtualTable {\n readonly items?: RefOrValue<unknown[]>\n readonly height?: RefOrValue<number | string>\n readonly estimateHeight?: RefOrValue<number | string>\n readonly overscan?: RefOrValue<number | string>\n readonly rowComponent?: RefOrValue<string>\n readonly colGroupComponent?: RefOrValue<string>\n readonly headerComponent?: RefOrValue<string>\n readonly footerComponent?: RefOrValue<string>\n readonly scrollTop = ref(0)\n readonly viewportElement = sref<HTMLElement | null>(null)\n readonly visibleRows: ComputedRef<VirtualListRow[]>\n readonly viewportStyle: ComputedRef<Record<string, string>>\n readonly tableStyle: ComputedRef<Record<string, string>>\n readonly topSpacerStyle: ComputedRef<Record<string, string>>\n readonly bottomSpacerStyle: ComputedRef<Record<string, string>>\n readonly hasColGroupComponent: ComputedRef<boolean>\n readonly hasHeaderComponent: ComputedRef<boolean>\n readonly hasFooterComponent: ComputedRef<boolean>\n private readonly rowHeights: number[] = []\n private rowWindow = new Map<number, VirtualListRow>()\n private readonly rowElements = new Map<number, HTMLElement>()\n private rowObserver?: ResizeObserver\n private bodyObserver?: MutationObserver\n private readonly measurementVersion = ref(0)\n private measuredHeightTotal = 0\n private measuredRowCount = 0\n private pendingFrame = 0\n private scrollEndTimer: ReturnType<typeof setTimeout> | undefined\n private isScrolling = false\n private hasDeferredMeasurements = false\n private readonly resolvedItems: ComputedRef<unknown[]>\n private readonly resolvedHeight: ComputedRef<number>\n private readonly resolvedEstimateHeight: ComputedRef<number>\n private readonly resolvedOverscan: ComputedRef<number>\n private readonly offsets: ComputedRef<number[]>\n private readonly startIndex: ComputedRef<number>\n private readonly firstVisibleIndex: ComputedRef<number>\n private readonly endIndex: ComputedRef<number>\n private readonly pendingIndexes = new Set<number>()\n\n constructor(props: VariableVirtualTable) {\n this.items = props.items\n this.height = props.height\n this.estimateHeight = props.estimateHeight\n this.overscan = props.overscan\n this.rowComponent = props.rowComponent\n this.colGroupComponent = props.colGroupComponent\n this.headerComponent = props.headerComponent\n this.footerComponent = props.footerComponent\n this.resolvedItems = computed(() => {\n const value = unref(props.items)\n return Array.isArray(value) ? value : []\n })\n this.resolvedHeight = computed(() =>\n resolvePositiveNumber(props.height, 560),\n )\n this.resolvedEstimateHeight = computed(() =>\n resolvePositiveNumber(props.estimateHeight ?? props.itemHeight, 56),\n )\n this.resolvedOverscan = computed(() =>\n Math.trunc(resolvePositiveNumber(props.overscan, 6)),\n )\n this.offsets = computed(() => {\n this.measurementVersion()\n const source = this.resolvedItems()\n const estimate = this.currentEstimateHeight()\n const offsets = new Array<number>(source.length + 1)\n offsets[0] = 0\n for (let index = 0; index < source.length; index += 1)\n offsets[index + 1] =\n (offsets[index] ?? 0) + (this.rowHeights[index] ?? estimate)\n\n return offsets\n })\n this.firstVisibleIndex = computed(() =>\n findOffsetIndex(this.offsets(), this.scrollTop()),\n )\n this.startIndex = computed(() =>\n Math.max(0, this.firstVisibleIndex() - this.resolvedOverscan()),\n )\n this.visibleRows = computed(() => this.resolveVisibleRows())\n this.endIndex = computed(() => {\n const rows = this.visibleRows()\n const last = rows[rows.length - 1]\n return last ? last.index + 1 : this.startIndex()\n })\n this.viewportStyle = computed<Record<string, string>>(() => ({\n height: `${this.resolvedHeight()}px`,\n overflow: 'auto',\n width: '100%',\n maxWidth: '100%',\n boxSizing: 'border-box',\n minWidth: '0',\n }))\n this.tableStyle = computed<Record<string, string>>(() => ({\n width: 'max-content',\n minWidth: '100%',\n borderCollapse: 'separate',\n borderSpacing: '0',\n }))\n this.topSpacerStyle = computed<Record<string, string>>(() => ({\n height: `${this.offsets()[this.startIndex()] ?? 0}px`,\n padding: '0',\n border: '0',\n }))\n this.bottomSpacerStyle = computed<Record<string, string>>(() => {\n const offsets = this.offsets()\n const totalHeight = offsets[offsets.length - 1] ?? 0\n const visibleBottom = offsets[this.endIndex()] ?? totalHeight\n return {\n height: `${Math.max(0, totalHeight - visibleBottom)}px`,\n padding: '0',\n border: '0',\n }\n })\n this.hasColGroupComponent = computed(() => !!unref(props.colGroupComponent))\n this.hasHeaderComponent = computed(() => !!unref(props.headerComponent))\n this.hasFooterComponent = computed(() => !!unref(props.footerComponent))\n observe(this.viewportElement, (element) => this.observeViewport(element))\n }\n\n handleScroll = (event: Event) => {\n const target = event.currentTarget\n if (!(target instanceof HTMLElement)) return\n\n this.scrollTop(target.scrollTop)\n this.isScrolling = true\n if (this.scrollEndTimer !== undefined) clearTimeout(this.scrollEndTimer)\n this.scrollEndTimer = setTimeout(() => {\n this.scrollEndTimer = undefined\n this.isScrolling = false\n if (!this.hasDeferredMeasurements) return\n\n this.hasDeferredMeasurements = false\n this.measurementVersion(this.measurementVersion() + 1)\n }, 120)\n }\n\n unmounted = () => {\n if (this.pendingFrame) cancelAnimationFrame(this.pendingFrame)\n if (this.scrollEndTimer !== undefined) clearTimeout(this.scrollEndTimer)\n this.rowObserver?.disconnect()\n this.bodyObserver?.disconnect()\n this.rowElements.clear()\n }\n\n private resolveVisibleRows() {\n const source = this.resolvedItems()\n const offsets = this.offsets()\n const scrollTop = this.scrollTop()\n const overscan = this.resolvedOverscan()\n // Keep the two boundaries on the same scroll-position snapshot.\n const start = Math.max(0, findOffsetIndex(offsets, scrollTop) - overscan)\n const viewportBottom = scrollTop + this.resolvedHeight()\n let end = findOffsetIndex(offsets, viewportBottom) + overscan + 1\n end = Math.min(source.length, Math.max(start, end))\n\n const rows: VirtualListRow[] = []\n const nextWindow = new Map<number, VirtualListRow>()\n for (let index = start; index < end; index += 1) {\n const previous = this.rowWindow.get(index)\n const row =\n previous && previous.item === source[index]\n ? previous\n : { index, item: source[index] }\n rows.push(row)\n nextWindow.set(index, row)\n }\n this.rowWindow = nextWindow\n\n return rows\n }\n\n private observeViewport(element: HTMLElement | null) {\n this.rowObserver?.disconnect()\n this.bodyObserver?.disconnect()\n this.rowElements.clear()\n if (!element) return\n\n this.rowObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const row = entry.target as HTMLElement\n const index = Number(row.getAttribute('data-virtual-row-index'))\n if (this.rowElements.get(index) === row) this.queueMeasurement(index)\n }\n })\n this.bodyObserver = new MutationObserver(() =>\n this.syncMountedRows(element),\n )\n this.bodyObserver.observe(element, { childList: true, subtree: true })\n this.syncMountedRows(element)\n }\n\n private syncMountedRows(viewport: HTMLElement) {\n const next = new Map<number, HTMLElement>()\n for (const row of viewport.querySelectorAll<HTMLElement>(\n ':scope > table > tbody > tr[data-virtual-row-index]',\n )) {\n const index = Number(row.getAttribute('data-virtual-row-index'))\n if (Number.isInteger(index) && index >= 0) next.set(index, row)\n }\n for (const [index, element] of this.rowElements) {\n if (next.get(index) !== element) {\n this.rowObserver?.unobserve(element)\n this.rowElements.delete(index)\n }\n }\n for (const [index, element] of next) {\n if (this.rowElements.get(index) === element) continue\n this.rowElements.set(index, element)\n this.rowObserver?.observe(element)\n this.queueMeasurement(index)\n }\n }\n\n private queueMeasurement(index: number) {\n this.pendingIndexes.add(index)\n if (this.pendingFrame) return\n\n this.pendingFrame = requestAnimationFrame(() => {\n this.pendingFrame = 0\n this.flushMeasurements()\n })\n }\n\n private flushMeasurements() {\n let changed = false\n\n for (const index of this.pendingIndexes) {\n const element = this.rowElements.get(index)\n if (!element) continue\n\n const previous = this.rowHeights[index] ?? this.currentEstimateHeight()\n const next = element.getBoundingClientRect().height\n if (!Number.isFinite(next) || next <= 0) continue\n if (Math.abs(previous - next) < 0.5) continue\n\n this.updateMeasuredAverage(index, next)\n this.rowHeights[index] = next\n changed = true\n }\n\n this.pendingIndexes.clear()\n if (!changed) return\n\n if (this.isScrolling) {\n this.hasDeferredMeasurements = true\n return\n }\n\n this.measurementVersion(this.measurementVersion() + 1)\n }\n\n private currentEstimateHeight() {\n if (this.measuredRowCount === 0) return this.resolvedEstimateHeight()\n return this.measuredHeightTotal / this.measuredRowCount\n }\n\n private updateMeasuredAverage(index: number, next: number) {\n const previous = this.rowHeights[index]\n if (previous === undefined) {\n this.measuredRowCount += 1\n this.measuredHeightTotal += next\n return\n }\n\n this.measuredHeightTotal += next - previous\n }\n}\n\nfunction resolveVariableVirtualTable(\n head: ComponentHead<VariableVirtualTable>,\n) {\n head.autoProps = false\n return new VariableVirtualTableContext(head.props)\n}\n\nfunction resolvePositiveNumber(\n value: RefOrValue<number | string> | undefined,\n fallback: number,\n) {\n const raw = unref(value)\n const parsed = typeof raw === 'number' ? raw : Number.parseFloat(String(raw))\n return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback\n}\n\nfunction findOffsetIndex(offsets: number[], scrollTop: number) {\n if (offsets.length <= 1) return 0\n\n let low = 0\n let high = offsets.length - 1\n while (low < high) {\n const middle = Math.floor((low + high) / 2)\n if ((offsets[middle] ?? 0) <= scrollTop) low = middle + 1\n else high = middle\n }\n\n return Math.max(0, low - 1)\n}\n","import {\n type ComponentHead,\n type ComputedRef,\n computed,\n defineComponent,\n html,\n observe,\n type RefOrValue,\n ref,\n sref,\n unref,\n} from 'regor'\n\nexport interface VirtualListRow {\n index: number\n item: unknown\n}\n\nexport interface VirtualList {\n items?: RefOrValue<unknown[]>\n height?: RefOrValue<number | string>\n itemHeight?: RefOrValue<number | string>\n overscan?: RefOrValue<number | string>\n rowComponent?: RefOrValue<string>\n scrollTop?: ReturnType<typeof ref<number>>\n visibleRows?: ComputedRef<VirtualListRow[]>\n viewportStyle?: ComputedRef<Record<string, string>>\n spacerStyle?: ComputedRef<Record<string, string>>\n windowStyle?: ComputedRef<Record<string, string>>\n itemStyle?: ComputedRef<Record<string, string>>\n handleScroll?: (event: Event) => void\n resolvedRowComponent?: ComputedRef<string>\n}\n\nexport interface VariableVirtualList extends VirtualList {\n estimateHeight?: RefOrValue<number | string>\n rowElementRefs?: Array<ReturnType<typeof sref<HTMLElement | null>>>\n viewportElement?: ReturnType<typeof sref<HTMLElement | null>>\n unmounted?: () => void\n}\n\nconst virtualListTemplate = html`<div class=\"virtual-list\" :style=\"viewportStyle\" @scroll=\"handleScroll\">\n <div class=\"virtual-list__spacer\" :style=\"spacerStyle\">\n <div class=\"virtual-list__window\" :style=\"windowStyle\">\n <div\n class=\"virtual-list__item\"\n :style=\"itemStyle\"\n r-for=\"row in visibleRows\"\n >\n <div\n :is=\"resolvedRowComponent\"\n :item=\"row.item\"\n :index=\"row.index\"\n ></div>\n </div>\n </div>\n </div>\n</div>`\n\nfunction defineVirtualListComponent() {\n return defineComponent<VirtualList>(virtualListTemplate, {\n props: ['items', 'height', 'itemHeight', 'overscan', 'rowComponent'],\n context: (head) => resolveVirtualList(head),\n })\n}\n\nconst variableVirtualListTemplate = html`<div\n class=\"virtual-list variable-virtual-list\"\n :style=\"viewportStyle\"\n :ref=\"viewportElement\"\n @scroll=\"handleScroll\"\n>\n <div class=\"virtual-list__spacer\" :style=\"spacerStyle\">\n <div class=\"virtual-list__window\" :style=\"windowStyle\">\n <div\n class=\"virtual-list__item\"\n :ref=\"rowElementRefs[row.index]\"\n r-for=\"row in visibleRows\"\n >\n <div\n :is=\"resolvedRowComponent\"\n :item=\"row.item\"\n :index=\"row.index\"\n ></div>\n </div>\n </div>\n </div>\n</div>`\n\nfunction defineVariableVirtualListComponent() {\n return defineComponent<VariableVirtualList>(variableVirtualListTemplate, {\n props: ['items', 'height', 'estimateHeight', 'overscan', 'rowComponent'],\n context: (head) => resolveVariableVirtualList(head),\n })\n}\n\nexport function defineVirtualListComponents() {\n return {\n virtualList: defineVirtualListComponent(),\n variableVirtualList: defineVariableVirtualListComponent(),\n }\n}\n\nfunction resolveVirtualList(head: ComponentHead<VirtualList>) {\n const props = head.props\n const scrollTop = ref(0)\n const itemHeight = computed(() => resolvePositiveNumber(props.itemHeight, 44))\n const height = computed(() => resolvePositiveNumber(props.height, 560))\n const overscan = computed(() =>\n Math.trunc(resolvePositiveNumber(props.overscan, 6)),\n )\n const items = computed(() => {\n const value = unref(props.items)\n return Array.isArray(value) ? value : []\n })\n const startIndex = computed(() =>\n Math.max(0, Math.floor(scrollTop() / itemHeight()) - overscan()),\n )\n const visibleCount = computed(\n () => Math.ceil(height() / itemHeight()) + overscan() * 2,\n )\n const visibleRows = computed(() => {\n const source = items()\n const start = startIndex()\n const end = Math.min(source.length, start + visibleCount())\n const rows: VirtualListRow[] = []\n for (let index = start; index < end; index += 1)\n rows.push({ index, item: source[index] })\n\n return rows\n })\n\n return {\n ...props,\n scrollTop,\n visibleRows,\n viewportStyle: computed<Record<string, string>>(() => ({\n height: `${height()}px`,\n })),\n spacerStyle: computed<Record<string, string>>(() => ({\n height: `${items().length * itemHeight()}px`,\n })),\n windowStyle: computed<Record<string, string>>(() => ({\n transform: `translateY(${startIndex() * itemHeight()}px)`,\n })),\n itemStyle: computed<Record<string, string>>(() => ({\n height: `${itemHeight()}px`,\n })),\n resolvedRowComponent: computed(() => {\n const component = unref(props.rowComponent)\n return typeof component === 'string' && component.trim()\n ? component\n : 'div'\n }),\n handleScroll: (event: Event) => {\n const target = event.currentTarget\n if (target instanceof HTMLElement) scrollTop(target.scrollTop)\n },\n }\n}\n\nfunction resolvePositiveNumber(\n value: RefOrValue<number | string> | undefined,\n fallback: number,\n) {\n const raw = unref(value)\n const parsed = typeof raw === 'number' ? raw : Number.parseFloat(String(raw))\n return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback\n}\n\nclass VariableVirtualListContext {\n readonly scrollTop = ref(0)\n readonly viewportElement = sref<HTMLElement | null>(null)\n readonly rowElementRefs: Array<ReturnType<typeof sref<HTMLElement | null>>> =\n []\n readonly visibleRows: ComputedRef<VirtualListRow[]>\n readonly viewportStyle: ComputedRef<Record<string, string>>\n readonly spacerStyle: ComputedRef<Record<string, string>>\n readonly windowStyle: ComputedRef<Record<string, string>>\n readonly resolvedRowComponent: ComputedRef<string>\n private readonly rowHeights: number[] = []\n private rowWindow = new Map<number, VirtualListRow>()\n private readonly rowObservers = new Map<number, ResizeObserver>()\n private readonly measurementVersion = ref(0)\n private measuredHeightTotal = 0\n private measuredRowCount = 0\n private readonly resolvedItems: ComputedRef<unknown[]>\n private readonly resolvedHeight: ComputedRef<number>\n private readonly resolvedEstimateHeight: ComputedRef<number>\n private readonly resolvedOverscan: ComputedRef<number>\n private readonly offsets: ComputedRef<number[]>\n private readonly startIndex: ComputedRef<number>\n private readonly firstVisibleIndex: ComputedRef<number>\n private readonly normalizedScrollTop: ComputedRef<number>\n private pendingIndexes = new Set<number>()\n private pendingFrame = 0\n private scrollEndTimer: ReturnType<typeof setTimeout> | undefined\n private isScrolling = false\n private hasDeferredMeasurements = false\n\n constructor(props: VariableVirtualList) {\n this.resolvedItems = computed(() => {\n const value = unref(props.items)\n return Array.isArray(value) ? value : []\n })\n this.resolvedHeight = computed(() =>\n resolvePositiveNumber(props.height, 560),\n )\n this.resolvedEstimateHeight = computed(() =>\n resolvePositiveNumber(props.estimateHeight ?? props.itemHeight, 56),\n )\n this.resolvedOverscan = computed(() =>\n Math.trunc(resolvePositiveNumber(props.overscan, 6)),\n )\n this.offsets = computed(() => {\n this.measurementVersion()\n const estimate = this.currentEstimateHeight()\n const source = this.resolvedItems()\n const offsets = new Array<number>(source.length + 1)\n offsets[0] = 0\n for (let index = 0; index < source.length; index += 1)\n offsets[index + 1] =\n (offsets[index] ?? 0) + (this.rowHeights[index] ?? estimate)\n\n return offsets\n })\n this.normalizedScrollTop = computed(() => {\n const value = this.scrollTop()\n return value <= 0.5 ? 0 : value\n })\n this.firstVisibleIndex = computed(() =>\n findOffsetIndex(this.offsets(), this.normalizedScrollTop()),\n )\n this.startIndex = computed(() =>\n Math.max(0, this.firstVisibleIndex() - this.resolvedOverscan()),\n )\n this.visibleRows = computed(() => this.resolveVisibleRows())\n this.viewportStyle = computed<Record<string, string>>(() => ({\n height: `${this.resolvedHeight()}px`,\n }))\n this.spacerStyle = computed<Record<string, string>>(() => {\n const offsets = this.offsets()\n return {\n height: `${offsets[offsets.length - 1] ?? 0}px`,\n }\n })\n this.windowStyle = computed<Record<string, string>>(() => ({\n transform: `translateY(${this.offsets()[this.startIndex()] ?? 0}px)`,\n }))\n this.resolvedRowComponent = computed(() => {\n const component = unref(props.rowComponent)\n return typeof component === 'string' && component.trim()\n ? component\n : 'div'\n })\n }\n\n handleScroll = () => {\n this.syncScrollTopFromViewport()\n\n this.isScrolling = true\n if (this.scrollEndTimer !== undefined) clearTimeout(this.scrollEndTimer)\n this.scrollEndTimer = setTimeout(() => {\n this.scrollEndTimer = undefined\n this.isScrolling = false\n this.syncScrollTopFromViewport()\n if (!this.hasDeferredMeasurements) return\n\n this.hasDeferredMeasurements = false\n this.measurementVersion(this.measurementVersion() + 1)\n }, 120)\n }\n\n unmounted = () => {\n if (this.pendingFrame) cancelAnimationFrame(this.pendingFrame)\n if (this.scrollEndTimer !== undefined) clearTimeout(this.scrollEndTimer)\n for (const observer of this.rowObservers.values()) observer.disconnect()\n this.rowObservers.clear()\n }\n\n private resolveVisibleRows() {\n const source = this.resolvedItems()\n const offsets = this.offsets()\n const scrollTop = this.normalizedScrollTop()\n const overscan = this.resolvedOverscan()\n // Resolve both boundaries from the same scroll position. A separate\n // computed start can still hold its previous value during notification.\n const start = Math.max(0, findOffsetIndex(offsets, scrollTop) - overscan)\n const viewportBottom = scrollTop + this.resolvedHeight()\n let end = findOffsetIndex(offsets, viewportBottom) + overscan + 1\n end = Math.min(source.length, Math.max(start, end))\n\n const rows: VirtualListRow[] = []\n const nextWindow = new Map<number, VirtualListRow>()\n for (let index = start; index < end; index += 1) {\n this.ensureRowRef(index)\n const previous = this.rowWindow.get(index)\n const row =\n previous && previous.item === source[index]\n ? previous\n : { index, item: source[index] }\n rows.push(row)\n nextWindow.set(index, row)\n }\n this.rowWindow = nextWindow\n\n return rows\n }\n\n private ensureRowRef(index: number) {\n if (this.rowElementRefs[index]) return\n\n const elementRef = sref<HTMLElement | null>(null)\n this.rowElementRefs[index] = elementRef\n observe(elementRef, (element) => {\n this.observeRowElement(index, element)\n })\n }\n\n private observeRowElement(index: number, element: HTMLElement | null) {\n const existing = this.rowObservers.get(index)\n if (existing) {\n existing.disconnect()\n this.rowObservers.delete(index)\n }\n if (!element) return\n\n const observer = new ResizeObserver(() => {\n this.queueMeasurement(index)\n })\n observer.observe(element)\n this.rowObservers.set(index, observer)\n this.queueMeasurement(index)\n }\n\n private queueMeasurement(index: number) {\n this.pendingIndexes.add(index)\n if (this.pendingFrame) return\n\n this.pendingFrame = requestAnimationFrame(() => {\n this.pendingFrame = 0\n this.flushMeasurements()\n })\n }\n\n private flushMeasurements() {\n this.syncScrollTopFromViewport()\n let changed = false\n\n for (const index of this.pendingIndexes) {\n const element = this.rowElementRefs[index]?.()\n if (!element) continue\n\n const previous = this.rowHeights[index] ?? this.currentEstimateHeight()\n const next = element.getBoundingClientRect().height\n if (!Number.isFinite(next) || next <= 0) continue\n if (Math.abs(previous - next) < 0.5) continue\n\n this.updateMeasuredAverage(index, next)\n this.rowHeights[index] = next\n changed = true\n }\n\n this.pendingIndexes.clear()\n if (!changed) return\n\n if (this.isScrolling) {\n this.hasDeferredMeasurements = true\n return\n }\n\n this.measurementVersion(this.measurementVersion() + 1)\n }\n\n private currentEstimateHeight() {\n if (this.measuredRowCount === 0) return this.resolvedEstimateHeight()\n return this.measuredHeightTotal / this.measuredRowCount\n }\n\n private updateMeasuredAverage(index: number, next: number) {\n const previous = this.rowHeights[index]\n if (previous === undefined) {\n this.measuredRowCount += 1\n this.measuredHeightTotal += next\n return\n }\n\n this.measuredHeightTotal += next - previous\n }\n\n private syncScrollTopFromViewport() {\n const viewport = this.viewportElement()\n if (!viewport) return\n\n this.setScrollTop(viewport.scrollTop)\n }\n\n private setScrollTop(value: number) {\n const next = Number.isFinite(value) && value > 0 ? value : 0\n if (this.scrollTop() === next) return\n\n this.scrollTop(next)\n }\n}\n\nfunction resolveVariableVirtualList(head: ComponentHead<VariableVirtualList>) {\n head.autoProps = false\n return new VariableVirtualListContext(head.props) as VariableVirtualList\n}\n\nfunction findOffsetIndex(offsets: number[], scrollTop: number) {\n if (offsets.length <= 1) return 0\n\n let low = 0\n let high = offsets.length - 1\n while (low < high) {\n const middle = Math.floor((low + high) / 2)\n if ((offsets[middle] ?? 0) <= scrollTop) low = middle + 1\n else high = middle\n }\n\n return Math.max(0, low - 1)\n}\n","import {\n type ComponentHead,\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type RefOrValue,\n ref,\n unref,\n} from 'regor'\nimport type { VirtualListRow } from './virtualList'\n\nexport interface VirtualTable {\n items?: RefOrValue<unknown[]>\n height?: RefOrValue<number | string>\n itemHeight?: RefOrValue<number | string>\n overscan?: RefOrValue<number | string>\n rowComponent?: RefOrValue<string>\n colGroupComponent?: RefOrValue<string>\n headerComponent?: RefOrValue<string>\n footerComponent?: RefOrValue<string>\n tableLayout?: RefOrValue<'auto' | 'fixed'>\n scrollTop?: ReturnType<typeof ref<number>>\n visibleRows?: ComputedRef<VirtualListRow[]>\n viewportStyle?: ComputedRef<Record<string, string>>\n tableStyle?: ComputedRef<Record<string, string>>\n topSpacerStyle?: ComputedRef<Record<string, string>>\n bottomSpacerStyle?: ComputedRef<Record<string, string>>\n handleScroll?: (event: Event) => void\n hasColGroupComponent?: ComputedRef<boolean>\n hasHeaderComponent?: ComputedRef<boolean>\n hasFooterComponent?: ComputedRef<boolean>\n}\n\nconst virtualTableTemplate = html`<div class=\"virtual-table\" :style=\"viewportStyle\" @scroll=\"handleScroll\">\n <table class=\"virtual-table__table\" :style=\"tableStyle\">\n <colgroup :is=\"colGroupComponent\" r-if=\"hasColGroupComponent\"></colgroup>\n <thead :is=\"headerComponent\" r-if=\"hasHeaderComponent\"></thead>\n <tbody>\n <tr class=\"virtual-table__spacer-row\">\n <td :style=\"topSpacerStyle\"></td>\n </tr>\n <tr\n :is=\"rowComponent\"\n :item=\"row.item\"\n :index=\"row.index\"\n style=\"height: var(--virtual-table-item-height) !important;\"\n r-for=\"row in visibleRows\"\n ></tr>\n <tr class=\"virtual-table__spacer-row\">\n <td :style=\"bottomSpacerStyle\"></td>\n </tr>\n </tbody>\n <tfoot :is=\"footerComponent\" r-if=\"hasFooterComponent\"></tfoot>\n </table>\n</div>`\n\nfunction defineVirtualTableComponent() {\n return defineComponent<VirtualTable>(virtualTableTemplate, {\n props: [\n 'items',\n 'height',\n 'itemHeight',\n 'overscan',\n 'rowComponent',\n 'colGroupComponent',\n 'headerComponent',\n 'footerComponent',\n 'tableLayout',\n ],\n context: (head) => resolveVirtualTable(head),\n })\n}\n\nexport function defineVirtualTableComponents() {\n return {\n virtualTable: defineVirtualTableComponent(),\n }\n}\n\nfunction resolveVirtualTable(head: ComponentHead<VirtualTable>) {\n const props = head.props\n const window = resolveFixedVirtualWindow(props)\n const endIndex = computed(() => {\n const rows = window.visibleRows()\n const last = rows[rows.length - 1]\n return last ? last.index + 1 : window.startIndex()\n })\n\n return {\n ...props,\n scrollTop: window.scrollTop,\n visibleRows: window.visibleRows,\n viewportStyle: computed<Record<string, string>>(() => ({\n height: `${window.height()}px`,\n overflow: 'auto',\n width: '100%',\n maxWidth: '100%',\n boxSizing: 'border-box',\n minWidth: '0',\n })),\n tableStyle: computed<Record<string, string>>(() => {\n const fixed = unref(props.tableLayout) === 'fixed'\n return {\n '--virtual-table-item-height': `${window.itemHeight()}px`,\n width: fixed ? '100%' : 'max-content',\n minWidth: '100%',\n borderCollapse: 'separate',\n borderSpacing: '0',\n tableLayout: fixed ? 'fixed' : 'auto',\n }\n }),\n topSpacerStyle: computed<Record<string, string>>(() => ({\n height: `${window.startIndex() * window.itemHeight()}px`,\n padding: '0',\n border: '0',\n })),\n bottomSpacerStyle: computed<Record<string, string>>(() => ({\n height: `${Math.max(0, window.items().length - endIndex()) * window.itemHeight()}px`,\n padding: '0',\n border: '0',\n })),\n hasColGroupComponent: computed(() => !!unref(props.colGroupComponent)),\n hasHeaderComponent: computed(() => !!unref(props.headerComponent)),\n hasFooterComponent: computed(() => !!unref(props.footerComponent)),\n handleScroll: window.handleScroll,\n }\n}\n\nfunction resolveFixedVirtualWindow(props: VirtualTable) {\n const scrollTop = ref(0)\n const itemHeight = computed(() => resolvePositiveNumber(props.itemHeight, 44))\n const height = computed(() => resolvePositiveNumber(props.height, 560))\n const overscan = computed(() =>\n Math.trunc(resolvePositiveNumber(props.overscan, 6)),\n )\n const items = computed(() => {\n const value = unref(props.items)\n return Array.isArray(value) ? value : []\n })\n const startIndex = computed(() =>\n Math.max(0, Math.floor(scrollTop() / itemHeight()) - overscan()),\n )\n const visibleCount = computed(\n () => Math.ceil(height() / itemHeight()) + overscan() * 2,\n )\n const visibleRows = computed(() => {\n const source = items()\n const start = startIndex()\n const end = Math.min(source.length, start + visibleCount())\n const rows: VirtualListRow[] = []\n for (let index = start; index < end; index += 1)\n rows.push({ index, item: source[index] })\n\n return rows\n })\n\n return {\n scrollTop,\n itemHeight,\n height,\n items,\n startIndex,\n visibleRows,\n handleScroll: (event: Event) => {\n const target = event.currentTarget\n if (target instanceof HTMLElement) scrollTop(target.scrollTop)\n },\n }\n}\n\nfunction resolvePositiveNumber(\n value: RefOrValue<number | string> | undefined,\n fallback: number,\n) {\n const raw = unref(value)\n const parsed = typeof raw === 'number' ? raw : Number.parseFloat(String(raw))\n return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback\n}\n","import { defineAlertComponents } from './standard/alertBox/alertBox'\nimport { defineBadgeComponents } from './standard/badge/badge'\nimport { defineBarChartComponents } from './standard/barChart/barChart'\nimport { defineButtonComponents } from './standard/btn/btn'\nimport { defineBtnGroupComponents } from './standard/btnGroup/btnGroup'\nimport { defineClassicLogoComponents } from './standard/classicLogo/classicLogo'\nimport { defineComposerComponents } from './standard/composer/composer'\nimport { defineConsentComponents } from './standard/consent/consent'\nimport { defineContactFormComponents } from './standard/contactForm/contactForm'\nimport { defineDoughnutChartComponents } from './standard/doughnutChart/doughnutChart'\nimport { defineDropFilesComponents } from './standard/dropFiles/dropFiles'\nimport { defineExpandablePanelComponents } from './standard/expandablePanel/expandablePanel'\nimport { defineFlexComponents } from './standard/flex/flex'\nimport { defineFooterComponents } from './standard/footer/footer'\nimport { defineAutoCompleteInputComponents } from './standard/form/autoCompleteInput'\nimport { defineFormComponents } from './standard/form/form'\nimport { defineFormInputField } from './standard/form/formInputField'\nimport { defineFormSelectField } from './standard/form/formSelectField'\nimport { defineMultiAutoCompleteInputComponents } from './standard/form/multiAutoCompleteInput'\nimport { defineGridComponents } from './standard/grid/grid'\nimport { defineIconComponents, type GetSvgIcon } from './standard/icon/icon'\nimport { defineLandingComponents } from './standard/landing/landing'\nimport { defineLineChartComponents } from './standard/lineChart/lineChart'\nimport { defineLogoComponents } from './standard/logo/logo'\nimport { defineModalComponents } from './standard/modal/modal'\nimport { defineNavigationComponents } from './standard/navMenu/navMenu'\nimport { definePageLinksComponents } from './standard/pageLinks/pageLinks'\nimport { defineScriptComponents } from './standard/pageScript/pageScript'\nimport { definePageTocComponents } from './standard/pageToc/pageToc'\nimport { definePanelComponents } from './standard/panel/panel'\nimport { definePricingComponents } from './standard/pricing/pricing'\nimport { defineSearchComponents } from './standard/searchBox/searchBox'\nimport { defineSectionHeaderComponents } from './standard/sectionHeader/sectionHeader'\nimport { defineSignInComponents } from './standard/signIn/signIn'\nimport { defineTabsComponents } from './standard/tabs/tabs'\nimport { defineThemeToggleComponents } from './standard/themeToggle/themeToggle'\nimport { defineToastComponents } from './standard/toast/toastHost'\nimport { defineTopBarComponents } from './standard/topBar/topBar'\nimport { defineVariableVirtualTableComponents } from './standard/virtualList/variableVirtualTable'\nimport { defineVirtualListComponents } from './standard/virtualList/virtualList'\nimport { defineVirtualTableComponents } from './standard/virtualList/virtualTable'\n\nexport function defineComponents(getSvgIcon: GetSvgIcon) {\n return {\n ...defineAlertComponents(),\n ...defineBarChartComponents(),\n ...defineBadgeComponents(),\n ...defineButtonComponents(),\n ...defineBtnGroupComponents(),\n ...defineConsentComponents(),\n ...defineContactFormComponents(),\n ...defineComposerComponents(),\n ...defineDoughnutChartComponents(),\n ...defineDropFilesComponents(),\n ...defineExpandablePanelComponents(),\n ...defineFlexComponents(),\n ...defineFooterComponents(),\n ...defineAutoCompleteInputComponents(),\n ...defineFormComponents(),\n ...defineFormInputField(),\n ...defineFormSelectField(),\n ...defineMultiAutoCompleteInputComponents(),\n ...defineGridComponents(),\n ...defineIconComponents(getSvgIcon),\n ...defineLandingComponents(),\n ...defineLineChartComponents(),\n ...defineLogoComponents(),\n ...defineClassicLogoComponents(),\n ...defineModalComponents(),\n ...defineTopBarComponents(),\n ...defineThemeToggleComponents(),\n ...defineToastComponents(),\n ...defineVirtualListComponents(),\n ...defineVirtualTableComponents(),\n ...defineVariableVirtualTableComponents(),\n ...defineNavigationComponents(),\n ...definePanelComponents(),\n ...definePageLinksComponents(),\n ...definePageTocComponents(),\n ...definePricingComponents(),\n ...defineSearchComponents(),\n ...defineSectionHeaderComponents(),\n ...defineSignInComponents(),\n ...defineTabsComponents(),\n ...defineScriptComponents(),\n }\n}\n","import {\n styleBuilder,\n type ThemeMode,\n type ThemePalette,\n themes,\n} from '@purestack/ts-style'\n\nexport function registerBadgeStyles() {\n themes.forEach((theme, palette) => {\n registerBadgeBaseStyles(theme, palette)\n })\n}\n\nfunction registerBadgeBaseStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder\n .select('.badge', theme)\n .display('inline-flex')\n .alignItems('center')\n .padding('0.12em 0.75em')\n .apply(palette.applyFont(palette.font.size.xxs, palette.font.weight.w700))\n}\n","import {\n styleBuilder,\n type ThemeMode,\n type ThemePalette,\n themes,\n} from '@purestack/ts-style'\n\nconst BAR_CHART_VALUE_FONT_SIZE = '0.15625rem'\nconst BAR_CHART_LABEL_FONT_SIZE = '0.1375rem'\nconst BAR_CHART_AXIS_FONT_SIZE = '0.11875rem'\nconst BAR_CHART_EMPTY_FONT_SIZE = '0.1625rem'\n\nexport function registerBarChartStyles() {\n themes.forEach((theme, palette) => {\n registerBarChartBaseStyles(theme)\n registerBarChartPaintStyles(theme, palette)\n })\n}\n\nfunction registerBarChartBaseStyles(theme: ThemeMode) {\n styleBuilder\n .select('.bar-chart__bar', theme)\n .transition('opacity 180ms ease, filter 180ms ease, transform 180ms ease')\n .transformOrigin('center bottom')\n\n styleBuilder\n .select('.bar-chart__plot:hover .bar-chart__bar', theme)\n .opacity('0.72')\n\n styleBuilder\n .select('.bar-chart__plot:hover .bar-chart__bar:hover', theme)\n .opacity('1')\n .filter('brightness(1.08)')\n\n styleBuilder\n .select(\n '.bar-chart__label, .bar-chart__value, .bar-chart__empty, .bar-chart__grid-line text',\n theme,\n )\n .pointerEvents('none')\n .letterSpacing('normal')\n}\n\nfunction registerBarChartPaintStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder\n .select('.bar-chart__grid-line line', theme)\n .stroke(palette.current.surfaceAlt.rest.border)\n .strokeWidth('0.22')\n\n styleBuilder\n .select('.bar-chart__zero-line', theme)\n .stroke(palette.current.border.subtle)\n .strokeWidth('0.36')\n\n styleBuilder\n .select('.bar-chart__value', theme)\n .fill(palette.current.text.default)\n .fontSize(BAR_CHART_VALUE_FONT_SIZE)\n .fontWeight(palette.font.weight.w700)\n\n styleBuilder\n .select('.bar-chart__label', theme)\n .fill(palette.current.text.subtle)\n .fontSize(BAR_CHART_LABEL_FONT_SIZE)\n .fontWeight(palette.font.weight.w700)\n\n styleBuilder\n .select('.bar-chart__grid-line text', theme)\n .fill(palette.current.text.subtle)\n .fontSize(BAR_CHART_AXIS_FONT_SIZE)\n .fontWeight(palette.font.weight.w500)\n .set('dominant-baseline', 'middle')\n .set('text-anchor', 'end')\n\n styleBuilder\n .select('.bar-chart__empty', theme)\n .fill(palette.current.text.subtle)\n .fontSize(BAR_CHART_EMPTY_FONT_SIZE)\n .fontWeight(palette.font.weight.w700)\n .set('dominant-baseline', 'middle')\n}\n","import type { ThemePalette } from '@purestack/ts-style'\nimport { styleBuilder, type ThemeMode, themes } from '@purestack/ts-style'\n\nexport function registerButtonStyles() {\n themes.forEach((theme, palette) => {\n registerButtonBaseStyles(theme, palette)\n registerButtonSizeStyles(theme, palette)\n })\n}\n\nfunction registerButtonBaseStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder\n .select('.btn', theme)\n .display('inline-flex')\n .background('transparent')\n .verticalAlign('middle')\n .alignItems('center')\n .justifyContent('center')\n .gap('0.25em')\n .border('none')\n .borderColor('transparent')\n .cursor('pointer')\n .textDecoration('none')\n .whiteSpace('nowrap')\n .transition(\n 'background 150ms ease, color 150ms ease, border-color 150ms ease, box-shadow 150ms ease, transform 150ms ease',\n )\n .webkitTapHighlightColor('transparent')\n .padding('0.5em 0.75em')\n .apply(palette.applyFont(palette.font.size.body, palette.font.weight.w500))\n .userSelect('none')\n\n styleBuilder\n .select('.btn:disabled', theme)\n .cursor('not-allowed')\n .transform('none')\n .boxShadow('none')\n\n styleBuilder\n .select('.btn__label', theme)\n .display('inline-flex')\n .alignItems('center')\n\n styleBuilder.select('.btn__icon', theme).width('1.1em').height('1.1em')\n}\n\nfunction registerButtonSizeStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder\n .select('.btn--sm', theme)\n .apply(palette.applyFont(palette.font.size.xs, palette.font.weight.w500))\n\n /*- The default size (md) is defined in the .btn for simplicity. */\n\n styleBuilder\n .select('.btn--lg', theme)\n .apply(palette.applyFont(palette.font.size.h2, palette.font.weight.w500))\n styleBuilder.select('.btn--icon-only', theme).padding('0.25em')\n styleBuilder.select('.btn--icon-only .btn__label', theme).display('none')\n}\n","import type { ThemePalette } from '@purestack/ts-style'\nimport { styleBuilder, type ThemeMode, themes } from '@purestack/ts-style'\n\nexport function registerBtnGroupStyles() {\n themes.forEach((theme, palette) => {\n registerBtnGroupLayoutStyles(theme)\n registerBtnGroupDropDownStyles(theme, palette)\n })\n}\n\nfunction registerBtnGroupLayoutStyles(theme: ThemeMode) {\n styleBuilder\n .select('.btn-group', theme)\n .display('inline-flex')\n .alignItems('center')\n .justifyContent('flex-start')\n .gap('0.375rem')\n .verticalAlign('middle')\n\n styleBuilder.select('.btn-group--center', theme).justifyContent('center')\n styleBuilder.select('.btn-group--end', theme).justifyContent('flex-end')\n styleBuilder.select('.btn-group--wrap', theme).flexWrap('wrap')\n}\n\nfunction registerBtnGroupDropDownStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.btn-group__dropdown', theme)\n .position('relative')\n .display('inline-flex')\n .lineHeight('normal')\n\n styleBuilder.select('.btn-group__toggle', theme).listStyle('none')\n styleBuilder.select('.btn-group__toggle::marker', theme).content('\"\"')\n styleBuilder\n .select('.btn-group__toggle::-webkit-details-marker', theme)\n .display('none')\n\n styleBuilder\n .select('.btn-group__dropdown[open] > .btn-group__toggle', theme)\n .boxShadow(`0 0 0 3px ${palette.current.border.focus}`)\n\n styleBuilder\n .select('.btn-group__menu', theme)\n .position('absolute')\n .display('none')\n .top('calc(100% + 0.375rem)')\n .right('0')\n .zIndex(70)\n .width('max-content')\n .minWidth('max(11rem, 100%)')\n .maxWidth('calc(100vw - 2rem)')\n .padding('0.375rem')\n .gap('0.25rem')\n .boxShadow(palette.effect.strongShadow)\n\n styleBuilder\n .select('.btn-group__dropdown--start > .btn-group__menu', theme)\n .left('0')\n .right('auto')\n\n styleBuilder\n .select('.btn-group__dropdown[open] > .btn-group__menu', theme)\n .display('grid')\n\n styleBuilder\n .select('.btn-group__menu > .btn', theme)\n .width('100%')\n .justifyContent('flex-start')\n .textAlign('left')\n .whiteSpace('normal')\n\n styleBuilder\n .select('.btn-group__menu > .btn .btn__label', theme)\n .minWidth('0')\n .whiteSpace('normal')\n .overflowWrap('anywhere')\n\n styleBuilder\n .select('.btn-group__menu > *', theme)\n .maxWidth('100%')\n .minWidth('0')\n}\n","import type { ThemePalette } from '@purestack/ts-style'\nimport {\n BREAKPOINTS,\n mediaMin,\n styleBuilder,\n type ThemeMode,\n themes,\n} from '@purestack/ts-style'\n\nconst LOGO_DEFAULTS = {\n brandSize: {\n base: '1.5rem',\n sm: '1.5rem',\n md: '1.75rem',\n lg: '2rem',\n xl: '2rem',\n },\n subtitleSize: {\n base: '0.7rem',\n sm: '0.7rem',\n md: '0.74rem',\n lg: '0.77rem',\n xl: '0.77rem',\n },\n iconSize: {\n base: '2rem',\n sm: '2rem',\n md: '2.5rem',\n lg: '2.85rem',\n xl: '2.85rem',\n },\n subtitleInset: {\n base: '0.03125rem',\n sm: '0.03125rem',\n md: '0.0625rem',\n lg: '0.0625rem',\n xl: '0.0625rem',\n },\n} as const\n\ntype LogoResponsiveToken =\n | 'brand-size'\n | 'subtitle-size'\n | 'icon-size'\n | 'subtitle-inset'\n\ntype LogoBreakpoint = 'sm' | 'md' | 'lg' | 'xl'\n\nexport function registerClassicLogoStyles() {\n themes.forEach((theme, palette) => {\n registerClassicLogoShellStyles(theme, palette)\n registerClassicLogoTextStyles(theme, palette)\n registerClassicLogoResponsiveStyles(theme)\n registerClassicLogoInteractiveStyles(theme, palette)\n })\n}\n\nexport function registerClassicLogoShellStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.classic-logo', theme)\n .display('inline-block')\n .width('fit-content')\n\n styleBuilder\n .select('.classic-logo__link', theme)\n .display('inline-flex')\n .alignItems('center')\n .gap('0.25rem')\n .padding('0.25rem 0.5rem')\n .borderRadius(palette.radii.sm)\n .border(`1px solid ${palette.current.border.subtle}`)\n .textDecoration('none')\n .maxWidth('100%')\n .background(palette.current.surface.rest.background)\n\n styleBuilder\n .select('.classic-logo__link:hover', theme)\n .boxShadow(palette.effect.interactiveShadow)\n\n styleBuilder\n .select('.classic-logo__glyph', theme)\n .width(resolveLogoVar('icon-size'))\n .height(resolveLogoVar('icon-size'))\n .minWidth(resolveLogoVar('icon-size'))\n .minHeight(resolveLogoVar('icon-size'))\n .borderRadius(palette.radii.md)\n .display('grid')\n .placeItems('center')\n .position('relative')\n .background(\n `var(--ps-classic-logo-glyph-background, ${palette.current.button.rest.background})`,\n )\n .backgroundColor(\n `var(--ps-classic-logo-glyph-background, ${palette.current.button.rest.background})`,\n )\n .border(`1px solid ${palette.current.button.rest.border}`)\n .color(\n `var(--ps-classic-logo-glyph-foreground, ${palette.current.button.rest.text})`,\n )\n\n styleBuilder\n .select('.classic-logo__glyph > .icon', theme)\n .width('80%')\n .height('80%')\n\n styleBuilder\n .select('.classic-logo__glyph-mark', theme)\n .position('absolute')\n .inset('30%')\n .borderRadius('0.25rem')\n .backgroundColor('currentColor')\n}\n\nexport function registerClassicLogoTextStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.classic-logo__stack', theme)\n .display('inline-grid')\n .justifyItems('stretch')\n .gap('0')\n .minWidth('0')\n .textTransform('uppercase')\n .letterSpacing('0')\n .lineHeight('1')\n .whiteSpace('nowrap')\n\n styleBuilder\n .select('.classic-logo__brand', theme)\n .display('flex')\n .alignItems('center')\n .justifyContent('space-between')\n .fontSize(resolveLogoVar('brand-size'))\n .fontWeight('800')\n\n styleBuilder\n .select('.classic-logo__brand-letter', theme)\n .whiteSpace('nowrap')\n .backgroundClip('text')\n .webkitBackgroundClip('text')\n .color('transparent')\n .webkitTextFillColor('transparent')\n\n styleBuilder\n .select('.classic-logo__subtitle', theme)\n .display('flex')\n .justifyContent('space-between')\n .fontSize(resolveLogoVar('subtitle-size'))\n .fontWeight('700')\n .color(palette.current.text.subtle)\n .marginLeft(resolveLogoVar('subtitle-inset'))\n .marginRight(resolveLogoVar('subtitle-inset'))\n\n styleBuilder\n .select('.classic-logo__subtitle-letter', theme)\n .backgroundClip('text')\n .webkitBackgroundClip('text')\n .color('transparent')\n .webkitTextFillColor('transparent')\n}\n\nexport function registerClassicLogoResponsiveStyles(theme: ThemeMode) {\n styleBuilder\n .select('.classic-logo__glyph', theme)\n .media(mediaMin(BREAKPOINTS.sm))\n .width(resolveLogoVar('icon-size', 'sm'))\n .height(resolveLogoVar('icon-size', 'sm'))\n .minWidth(resolveLogoVar('icon-size', 'sm'))\n .minHeight(resolveLogoVar('icon-size', 'sm'))\n\n styleBuilder\n .select('.classic-logo__glyph', theme)\n .media(mediaMin(BREAKPOINTS.md))\n .width(resolveLogoVar('icon-size', 'md'))\n .height(resolveLogoVar('icon-size', 'md'))\n .minWidth(resolveLogoVar('icon-size', 'md'))\n .minHeight(resolveLogoVar('icon-size', 'md'))\n\n styleBuilder\n .select('.classic-logo__glyph', theme)\n .media(mediaMin(BREAKPOINTS.lg))\n .width(resolveLogoVar('icon-size', 'lg'))\n .height(resolveLogoVar('icon-size', 'lg'))\n .minWidth(resolveLogoVar('icon-size', 'lg'))\n .minHeight(resolveLogoVar('icon-size', 'lg'))\n\n styleBuilder\n .select('.classic-logo__glyph', theme)\n .media(mediaMin(BREAKPOINTS.xl))\n .width(resolveLogoVar('icon-size', 'xl'))\n .height(resolveLogoVar('icon-size', 'xl'))\n .minWidth(resolveLogoVar('icon-size', 'xl'))\n .minHeight(resolveLogoVar('icon-size', 'xl'))\n\n styleBuilder\n .select('.classic-logo__brand', theme)\n .media(mediaMin(BREAKPOINTS.sm))\n .fontSize(resolveLogoVar('brand-size', 'sm'))\n\n styleBuilder\n .select('.classic-logo__brand', theme)\n .media(mediaMin(BREAKPOINTS.md))\n .fontSize(resolveLogoVar('brand-size', 'md'))\n\n styleBuilder\n .select('.classic-logo__brand', theme)\n .media(mediaMin(BREAKPOINTS.lg))\n .fontSize(resolveLogoVar('brand-size', 'lg'))\n\n styleBuilder\n .select('.classic-logo__brand', theme)\n .media(mediaMin(BREAKPOINTS.xl))\n .fontSize(resolveLogoVar('brand-size', 'xl'))\n\n styleBuilder\n .select('.classic-logo__subtitle', theme)\n .media(mediaMin(BREAKPOINTS.sm))\n .fontSize(resolveLogoVar('subtitle-size', 'sm'))\n .marginLeft(resolveLogoVar('subtitle-inset', 'sm'))\n .marginRight(resolveLogoVar('subtitle-inset', 'sm'))\n\n styleBuilder\n .select('.classic-logo__subtitle', theme)\n .media(mediaMin(BREAKPOINTS.md))\n .fontSize(resolveLogoVar('subtitle-size', 'md'))\n .marginLeft(resolveLogoVar('subtitle-inset', 'md'))\n .marginRight(resolveLogoVar('subtitle-inset', 'md'))\n\n styleBuilder\n .select('.classic-logo__subtitle', theme)\n .media(mediaMin(BREAKPOINTS.lg))\n .fontSize(resolveLogoVar('subtitle-size', 'lg'))\n .marginLeft(resolveLogoVar('subtitle-inset', 'lg'))\n .marginRight(resolveLogoVar('subtitle-inset', 'lg'))\n\n styleBuilder\n .select('.classic-logo__subtitle', theme)\n .media(mediaMin(BREAKPOINTS.xl))\n .fontSize(resolveLogoVar('subtitle-size', 'xl'))\n .marginLeft(resolveLogoVar('subtitle-inset', 'xl'))\n .marginRight(resolveLogoVar('subtitle-inset', 'xl'))\n}\n\nfunction resolveLogoVar(\n token: LogoResponsiveToken,\n breakpoint?: LogoBreakpoint,\n): string {\n if (!breakpoint) {\n return `var(--ps-classic-logo-${token}, ${getLogoDefaultValue(token, 'base')})`\n }\n\n return `var(--ps-classic-logo-${token}-${breakpoint}, ${getLogoDefaultValue(token, breakpoint)})`\n}\n\nfunction getLogoDefaultValue(\n token: LogoResponsiveToken,\n breakpoint: 'base' | LogoBreakpoint,\n): string {\n switch (token) {\n case 'brand-size':\n return LOGO_DEFAULTS.brandSize[breakpoint]\n case 'subtitle-size':\n return LOGO_DEFAULTS.subtitleSize[breakpoint]\n case 'icon-size':\n return LOGO_DEFAULTS.iconSize[breakpoint]\n case 'subtitle-inset':\n return LOGO_DEFAULTS.subtitleInset[breakpoint]\n }\n}\n\nexport function registerClassicLogoInteractiveStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.classic-logo__link[href]', theme)\n .cursor('pointer')\n .transition('border-color 180ms ease')\n\n styleBuilder\n .select('.classic-logo__link[href]:hover', theme)\n .borderColor(palette.current.border.default)\n\n styleBuilder\n .select('.classic-logo__link[href]:focus-visible', theme)\n .outline(`2px solid ${palette.current.border.focus}`)\n .outlineOffset('0')\n}\n","import { styleBuilder } from '@purestack/ts-style'\nimport type { ComposerCanvasStyleContext } from './composerCanvasStyleTypes'\n\nconst EMAIL_FONT =\n '0.9375rem/1.55 system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Arial, sans-serif'\n\nexport function registerComposerCanvasPreviewDefaults({\n theme,\n}: ComposerCanvasStyleContext) {\n styleBuilder\n .select('.composer__editor', theme)\n .display('block')\n .width('100%')\n .boxSizing('border-box')\n .padding('0')\n .border('none')\n .borderRadius('0')\n .outline('none')\n .background('#fff')\n .color('#182018')\n .font(EMAIL_FONT)\n .overflowY('auto')\n .overflowWrap('anywhere')\n .whiteSpace('normal')\n .cursor('text')\n .set('caret-color', '#182018')\n .set('user-select', 'text')\n .set('-webkit-user-select', 'text')\n\n styleBuilder\n .select('.composer__editor:empty::before', theme)\n .content('attr(data-placeholder)')\n .color('#777')\n .pointerEvents('none')\n\n styleBuilder\n .select('.composer__editor [data-composer-body]:empty::before', theme)\n .content('attr(data-placeholder)')\n .color('#777')\n .pointerEvents('none')\n\n styleBuilder\n .select('.composer__editor a', theme)\n .color('#1368d8')\n .textDecoration('underline')\n\n styleBuilder\n .select('.composer__editor img', theme)\n .maxWidth('100%')\n .height('auto')\n\n styleBuilder\n .select('.composer__editor table', theme)\n .maxWidth('100%')\n .borderCollapse('collapse')\n\n styleBuilder.select('.composer__editor p:first-child', theme).marginTop('0')\n\n styleBuilder.select('.composer__editor p:last-child', theme).marginBottom('0')\n}\n","import { styleBuilder } from '@purestack/ts-style'\nimport { registerComposerCanvasPreviewDefaults } from './composerCanvasSharedStyle'\nimport type { ComposerCanvasStyleContext } from './composerCanvasStyleTypes'\n\nexport function registerComposerInitialCanvasStyles(\n context: ComposerCanvasStyleContext,\n) {\n styleBuilder\n .select('.composer__editor, .composer__editor *', context.theme)\n .all('initial')\n .boxSizing('border-box')\n\n styleBuilder\n .select('.composer__editor *', context.theme)\n .font('inherit')\n .color('inherit')\n .lineHeight('inherit')\n .caretColor('inherit')\n .textAlign('inherit')\n\n registerComposerCanvasPreviewDefaults(context)\n registerComposerInitialCanvasElementDefaults(context)\n}\n\nfunction registerComposerInitialCanvasElementDefaults({\n theme,\n}: ComposerCanvasStyleContext) {\n styleBuilder\n .select(\n [\n '.composer__editor b',\n '.composer__editor cite',\n '.composer__editor code',\n '.composer__editor del',\n '.composer__editor em',\n '.composer__editor font',\n '.composer__editor i',\n '.composer__editor ins',\n '.composer__editor kbd',\n '.composer__editor s',\n '.composer__editor samp',\n '.composer__editor small',\n '.composer__editor span',\n '.composer__editor strong',\n '.composer__editor sub',\n '.composer__editor sup',\n '.composer__editor tt',\n '.composer__editor u',\n '.composer__editor var',\n ].join(', '),\n theme,\n )\n .display('inline')\n .font('inherit')\n .color('inherit')\n\n styleBuilder\n .select(\n [\n '.composer__editor address',\n '.composer__editor blockquote',\n '.composer__editor caption',\n '.composer__editor center',\n '.composer__editor dd',\n '.composer__editor div',\n '.composer__editor dl',\n '.composer__editor dt',\n '.composer__editor h1',\n '.composer__editor h2',\n '.composer__editor h3',\n '.composer__editor h4',\n '.composer__editor h5',\n '.composer__editor h6',\n '.composer__editor hr',\n '.composer__editor ol',\n '.composer__editor p',\n '.composer__editor pre',\n '.composer__editor ul',\n ].join(', '),\n theme,\n )\n .display('block')\n .font('inherit')\n .color('inherit')\n .lineHeight('inherit')\n .caretColor('inherit')\n\n styleBuilder\n .select('.composer__editor div:empty, .composer__editor p:empty', theme)\n .minHeight('1.55em')\n\n styleBuilder\n .select('.composer__editor br', theme)\n .display('inline')\n .font('inherit')\n .lineHeight('inherit')\n .caretColor('inherit')\n\n styleBuilder\n .select('.composer__editor strong, .composer__editor b', theme)\n .fontWeight('bold')\n\n styleBuilder\n .select(\n '.composer__editor em, .composer__editor i, .composer__editor cite',\n theme,\n )\n .fontStyle('italic')\n\n styleBuilder.select('.composer__editor small', theme).fontSize('80%')\n\n styleBuilder\n .select('.composer__editor sub', theme)\n .fontSize('75%')\n .verticalAlign('sub')\n\n styleBuilder\n .select('.composer__editor sup', theme)\n .fontSize('75%')\n .verticalAlign('super')\n\n styleBuilder\n .select('.composer__editor h1', theme)\n .fontSize('2em')\n .fontWeight('bold')\n .margin('0.67em 0')\n\n styleBuilder\n .select('.composer__editor h2', theme)\n .fontSize('1.5em')\n .fontWeight('bold')\n .margin('0.83em 0')\n\n styleBuilder\n .select('.composer__editor h3', theme)\n .fontSize('1.17em')\n .fontWeight('bold')\n .margin('1em 0')\n\n styleBuilder\n .select('.composer__editor h4', theme)\n .fontWeight('bold')\n .margin('1.33em 0')\n\n styleBuilder\n .select('.composer__editor h5', theme)\n .fontSize('0.83em')\n .fontWeight('bold')\n .margin('1.67em 0')\n\n styleBuilder\n .select('.composer__editor h6', theme)\n .fontSize('0.67em')\n .fontWeight('bold')\n .margin('2.33em 0')\n\n styleBuilder\n .select('.composer__editor blockquote', theme)\n .margin('1em 2.5rem')\n\n styleBuilder\n .select(\n '.composer__editor pre, .composer__editor code, .composer__editor kbd, .composer__editor samp, .composer__editor tt',\n theme,\n )\n .fontFamily('monospace')\n\n styleBuilder\n .select('.composer__editor ol, .composer__editor ul', theme)\n .margin('1em 0')\n .paddingLeft('2.5rem')\n\n styleBuilder\n .select('.composer__editor li', theme)\n .display('list-item')\n .listStyle('inherit')\n\n styleBuilder\n .select('.composer__editor u, .composer__editor ins', theme)\n .textDecoration('underline')\n\n styleBuilder\n .select('.composer__editor s, .composer__editor del', theme)\n .textDecoration('line-through')\n\n styleBuilder.select('.composer__editor ul', theme).listStyle('disc')\n\n styleBuilder.select('.composer__editor ol', theme).listStyle('decimal')\n\n styleBuilder.select('.composer__editor table', theme).display('table')\n\n styleBuilder\n .select('.composer__editor caption', theme)\n .display('table-caption')\n\n styleBuilder\n .select('.composer__editor colgroup', theme)\n .display('table-column-group')\n\n styleBuilder.select('.composer__editor col', theme).display('table-column')\n\n styleBuilder\n .select('.composer__editor thead', theme)\n .display('table-header-group')\n\n styleBuilder\n .select('.composer__editor tbody', theme)\n .display('table-row-group')\n\n styleBuilder\n .select('.composer__editor tfoot', theme)\n .display('table-footer-group')\n\n styleBuilder.select('.composer__editor tr', theme).display('table-row')\n\n styleBuilder\n .select('.composer__editor td, .composer__editor th', theme)\n .display('table-cell')\n .verticalAlign('inherit')\n\n styleBuilder\n .select('.composer__editor th', theme)\n .fontWeight('bold')\n .textAlign('center')\n}\n","import type { ThemePalette } from '@purestack/ts-style'\nimport { styleBuilder, type ThemeMode, themes } from '@purestack/ts-style'\nimport { registerComposerInitialCanvasStyles } from './composerCanvasInitialStyle'\nimport { registerComposerRevertCanvasStyles } from './composerCanvasRevertStyle'\nimport type { ComposerCanvasStyleOption } from './composerCanvasStyleTypes'\nimport { registerComposerThemeCanvasStyles } from './composerCanvasThemeStyle'\n\nconst COMPOSER_CANVAS_STYLE: ComposerCanvasStyleOption = 'initial'\n\nexport function registerComposerStyles() {\n themes.forEach((theme, palette) => {\n registerComposerFieldStyles(theme, palette)\n registerComposerShellStyles(theme, palette)\n registerComposerToolbarStyles(theme, palette)\n registerComposerSurfaceStyles(theme, palette)\n })\n}\n\nfunction registerComposerFieldStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder\n .select('.composer-field', theme)\n .display('grid')\n .minWidth('0')\n .gap('0.6em')\n styleBuilder\n .select('.composer-field__label', theme)\n .apply(palette.applyFont(palette.font.size.xxs, palette.font.weight.w700))\n .color(palette.current.tone)\n .lineHeight('1')\n}\n\nfunction registerComposerShellStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder\n .select('.composer', theme)\n .display('grid')\n .width('100%')\n .boxSizing('border-box')\n .overflow('hidden')\n .borderRadius(palette.radii.md)\n .transition('border-color 160ms ease, box-shadow 160ms ease')\n\n styleBuilder\n .select('.composer:focus-within', theme)\n .borderColor(palette.current.border.default)\n .boxShadow(`0 0 0 3px ${palette.current.border.focus}`)\n}\n\nfunction registerComposerToolbarStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.composer__toolbar', theme)\n .display('flex')\n .flexWrap('wrap')\n .alignItems('center')\n .gap('0.25rem')\n .padding('0.35em')\n .borderBottom(`1px solid ${palette.current.border.default}`)\n .background(palette.current.surfaceAlt.rest.background)\n\n styleBuilder\n .select('.composer__tool', theme)\n .display('inline-flex')\n .flexShrink('0')\n .alignItems('center')\n .justifyContent('center')\n .width('2.1em')\n .height('2.1em')\n .padding('0')\n .border('none')\n .borderRadius('0.375rem')\n .background('transparent')\n .color(palette.current.text.default)\n .cursor('pointer')\n .transition('background 150ms ease, color 150ms ease')\n\n styleBuilder\n .select('.composer__tool:hover:not(:disabled)', theme)\n .background(palette.current.button.hover.background)\n .color(palette.current.button.hover.text)\n\n styleBuilder\n .select('.composer__tool[aria-pressed=\"true\"]', theme)\n .background(palette.current.button.active.background)\n .color(palette.current.button.active.text)\n\n styleBuilder\n .select('.composer__tool:disabled', theme)\n .cursor('not-allowed')\n .opacity('0.55')\n\n styleBuilder\n .select('.composer__tool .icon', theme)\n .width('1.1em')\n .height('1.1em')\n\n styleBuilder\n .select('.composer__divider', theme)\n .width('1px')\n .height('1.4em')\n .margin('0 0.2em')\n .background(palette.current.border.default)\n\n styleBuilder.select('.composer__tool--source', theme).marginLeft('auto')\n}\n\nfunction registerComposerSurfaceStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.composer__surface', theme)\n .position('relative')\n .overflowX('auto')\n\n registerComposerCanvasStyles(theme, palette)\n\n styleBuilder\n .select('.composer__source', theme)\n .width('100%')\n .boxSizing('border-box')\n .padding('0.85em 0.95em')\n .border('none')\n .borderRadius('0')\n .outline('none')\n .background('transparent')\n .color(palette.current.text.default)\n .apply(palette.applyFont(palette.font.size.body))\n .lineHeight('1.55')\n\n styleBuilder\n .select('.composer__source', theme)\n .display('block')\n .resize('vertical')\n .fontFamily('ui-monospace, SFMono-Regular, Menlo, Consolas, monospace')\n .background(palette.current.surface.rest.background)\n .borderTop(`1px solid ${palette.current.border.default}`)\n .borderBottomLeftRadius(palette.radii.md)\n .borderBottomRightRadius(palette.radii.md)\n}\n\nfunction registerComposerCanvasStyles(theme: ThemeMode, palette: ThemePalette) {\n const context = { palette, theme }\n if (COMPOSER_CANVAS_STYLE === 'theme') {\n registerComposerThemeCanvasStyles(context)\n return\n }\n\n if (COMPOSER_CANVAS_STYLE === 'initial') {\n registerComposerInitialCanvasStyles(context)\n return\n }\n\n registerComposerRevertCanvasStyles(context)\n}\n","import {\n BREAKPOINTS,\n getBreakpoint,\n styleBuilder,\n type ThemeMode,\n themes,\n} from '@purestack/ts-style'\n\nexport function registerConsentStyles() {\n themes.forEach((theme) => {\n registerConsentPlacementStyles(theme)\n })\n}\n\nfunction registerConsentPlacementStyles(theme: ThemeMode) {\n styleBuilder\n .select('.consent', theme)\n .position('fixed')\n .left('0')\n .right('0')\n .bottom('0')\n .zIndex(1200)\n .pointerEvents('none')\n\n styleBuilder\n .select('.consent__banner', theme)\n .pointerEvents('auto')\n .margin('0 auto 1em')\n .width(`min(${getBreakpoint(BREAKPOINTS.lg)}, calc(100vw - 2em))`)\n\n styleBuilder\n .select('.consent__panel', theme)\n .pointerEvents('auto')\n .position('fixed')\n .right('0.75em')\n .bottom('4rem')\n .left('0.75em')\n .width(`min(${getBreakpoint(BREAKPOINTS.sm)}, calc(100vw - 2em))`)\n .marginLeft('auto')\n\n styleBuilder\n .select('.consent__banner[hidden], .consent__panel[hidden]', theme)\n .display('none')\n}\n","import type { ThemePalette } from '@purestack/ts-style'\nimport {\n BREAKPOINTS,\n mediaMax,\n styleBuilder,\n type ThemeMode,\n themes,\n} from '@purestack/ts-style'\n\nexport function registerContactFormStyles() {\n themes.forEach((theme, palette) => {\n registerContactFormShellStyles(theme, palette)\n registerContactFormFieldStyles(theme, palette)\n registerContactFormActionStyles(theme)\n registerContactFormResponsiveStyles(theme)\n })\n}\n\nfunction registerContactFormShellStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.contact-form', theme)\n .margin('1.25rem 0 0')\n .padding('1.125rem')\n .display('grid')\n .gap('0.875rem')\n .borderRadius(palette.radii.lg)\n .background(palette.current.surface.rest.background)\n .border(`1px solid ${palette.current.border.default}`)\n .boxShadow(palette.effect.panelShadow)\n styleBuilder\n .select('.contact-form__header', theme)\n .display('grid')\n .gap('0.375rem')\n styleBuilder\n .select('.contact-form__title', theme)\n .margin('0')\n .fontSize('1.05rem')\n .fontWeight('760')\n .letterSpacing('-0.01em')\n .color(palette.current.text.default)\n styleBuilder\n .select('.contact-form__description', theme)\n .margin('0')\n .fontSize('0.93rem')\n .lineHeight('1.6')\n .color(palette.current.text.subtle)\n styleBuilder\n .select('.contact-form__form', theme)\n .display('grid')\n .gap('0.625rem')\n}\n\nfunction registerContactFormFieldStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.contact-form__field', theme)\n .display('grid')\n .gap('0.375rem')\n styleBuilder\n .select('.contact-form__label', theme)\n .fontSize('0.86rem')\n .fontWeight('700')\n .color(palette.current.text.default)\n styleBuilder\n .select(\n '.contact-form__input, .contact-form__select, .contact-form__textarea',\n theme,\n )\n .width('100%')\n .padding('0.625rem 0.75rem')\n .borderRadius(palette.radii.md)\n .border(`1px solid ${palette.current.border.default}`)\n .background(palette.current.surfaceAlt.rest.background)\n .color(palette.current.text.default)\n .fontSize('0.92rem')\n .lineHeight('1.45')\n .boxSizing('border-box')\n .appearance('none')\n styleBuilder\n .select('.contact-form__textarea', theme)\n .resize('vertical')\n .minHeight('8.25rem')\n styleBuilder\n .select(\n '.contact-form__input::placeholder, .contact-form__textarea::placeholder',\n theme,\n )\n .color(palette.current.text.subtle)\n styleBuilder\n .select(\n '.contact-form__input:focus-visible, .contact-form__select:focus-visible, .contact-form__textarea:focus-visible',\n theme,\n )\n .outline(`2px solid ${palette.current.border.focus}`)\n .borderColor(palette.current.border.default)\n}\n\nfunction registerContactFormActionStyles(theme: ThemeMode) {\n styleBuilder\n .select('.contact-form__actions', theme)\n .display('flex')\n .justifyContent('flex-start')\n .paddingTop('0.125rem')\n}\n\nfunction registerContactFormResponsiveStyles(theme: ThemeMode) {\n styleBuilder\n .select('.contact-form', theme)\n .media(mediaMax(BREAKPOINTS.sm))\n .padding('0.875rem')\n}\n","import {\n styleBuilder,\n type ThemeMode,\n type ThemePalette,\n themes,\n} from '@purestack/ts-style'\n\nexport function registerDoughnutChartStyles() {\n themes.forEach((theme, palette) => {\n registerDoughnutChartBaseStyles(theme)\n registerDoughnutChartPaintStyles(theme, palette)\n })\n}\n\nfunction registerDoughnutChartBaseStyles(theme: ThemeMode) {\n styleBuilder\n .select('.doughnut-chart__segment', theme)\n .transition('opacity 180ms ease, filter 180ms ease, transform 180ms ease')\n .transformOrigin('50px 50px')\n\n styleBuilder\n .select('.doughnut-chart__segments:hover .doughnut-chart__segment', theme)\n .opacity('0.72')\n\n styleBuilder\n .select(\n '.doughnut-chart__segments:hover .doughnut-chart__segment:hover',\n theme,\n )\n .opacity('1')\n .filter('brightness(1.08)')\n\n styleBuilder\n .select('.doughnut-chart__center, .doughnut-chart__empty', theme)\n .pointerEvents('none')\n}\n\nfunction registerDoughnutChartPaintStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.doughnut-chart__track', theme)\n .fill(palette.current.surfaceAlt.rest.bgcolor)\n\n styleBuilder\n .select('.doughnut-chart__center-value', theme)\n .fill(palette.current.text.default)\n .apply(palette.applyFont(palette.font.size.body, palette.font.weight.w700))\n .set('dominant-baseline', 'middle')\n\n styleBuilder\n .select('.doughnut-chart__center-label', theme)\n .fill(palette.current.text.subtle)\n .apply(palette.applyFont(palette.font.size.xxxs, palette.font.weight.w700))\n .textTransform('uppercase')\n .set('dominant-baseline', 'middle')\n\n styleBuilder\n .select('.doughnut-chart__empty', theme)\n .fill(palette.current.text.subtle)\n .apply(palette.applyFont(palette.font.size.xxs, palette.font.weight.w700))\n .set('dominant-baseline', 'middle')\n}\n","import type { ThemePalette } from '@purestack/ts-style'\nimport { styleBuilder, type ThemeMode, themes } from '@purestack/ts-style'\n\nexport function registerDropFilesStyles() {\n themes.forEach((theme, palette) => {\n registerDropFilesFieldStyles(theme, palette)\n registerDropFilesZoneStyles(theme, palette)\n registerDropFilesListStyles(theme, palette)\n })\n}\n\nfunction registerDropFilesFieldStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder.select('.drop-files', theme).display('grid').gap('0.65em')\n\n styleBuilder\n .select('.drop-files__label', theme)\n .apply(palette.applyFont(palette.font.size.xxs, palette.font.weight.w700))\n .color(palette.current.tone)\n .lineHeight('1')\n\n styleBuilder\n .select('.drop-files__input', theme)\n .position('absolute')\n .width('1px')\n .height('1px')\n .overflow('hidden')\n .clip('rect(0 0 0 0)')\n .whiteSpace('nowrap')\n}\n\nfunction registerDropFilesZoneStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder\n .select('.drop-files__zone', theme)\n .display('grid')\n .justifyItems('center')\n .gap('0.35em')\n .boxSizing('border-box')\n .width('100%')\n .minHeight('9em')\n .padding('1.25em')\n .borderRadius(palette.radii.md)\n .border(`1px dashed ${palette.current.border.default}`)\n .background(palette.current.surfaceAlt.rest.background)\n .color(palette.current.text.default)\n .cursor('pointer')\n .textAlign('center')\n .transition(\n 'border-color 160ms ease, background 160ms ease, box-shadow 160ms ease',\n )\n\n styleBuilder\n .select('.drop-files__zone:hover:not(.drop-files__zone--disabled)', theme)\n .borderColor(palette.current.tone)\n .background(palette.current.surface.rest.background)\n\n styleBuilder\n .select('.drop-files__zone:focus-visible', theme)\n .outline('none')\n .borderColor(palette.current.border.default)\n .boxShadow(`0 0 0 3px ${palette.current.border.focus}`)\n\n styleBuilder\n .select('.drop-files__zone--dragging', theme)\n .borderColor(palette.current.tone)\n .background(palette.current.button.hover.background)\n .boxShadow(`0 0 0 3px ${palette.current.border.focus}`)\n\n styleBuilder\n .select('.drop-files__zone--disabled', theme)\n .cursor('not-allowed')\n .opacity('0.58')\n\n styleBuilder\n .select('.drop-files__zone-icon', theme)\n .width('2.2em')\n .height('2.2em')\n .color(palette.current.tone)\n\n styleBuilder\n .select('.drop-files__zone-title', theme)\n .apply(palette.applyFont(palette.font.size.sm, palette.font.weight.w700))\n\n styleBuilder\n .select('.drop-files__zone-text, .drop-files__hint', theme)\n .apply(palette.applyFont(palette.font.size.xs))\n .color(palette.current.text.subtle)\n}\n\nfunction registerDropFilesListStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder\n .select('.drop-files__list', theme)\n .display('grid')\n .gap('0.45em')\n .padding('0')\n .margin('0')\n .listStyle('none')\n\n styleBuilder\n .select('.drop-files__item', theme)\n .display('grid')\n .gridTemplateColumns('auto minmax(0, 1fr) auto')\n .alignItems('center')\n .gap('0.65em')\n .boxSizing('border-box')\n .padding('0.6em')\n .borderRadius(palette.radii.md)\n .border(`1px solid ${palette.current.border.subtle}`)\n .background(palette.current.surface.rest.background)\n\n styleBuilder\n .select('.drop-files__item-icon', theme)\n .display('inline-grid')\n .placeItems('center')\n .width('2em')\n .height('2em')\n .borderRadius(palette.radii.sm)\n .background(palette.current.surfaceAlt.rest.background)\n .color(palette.current.tone)\n\n styleBuilder\n .select('.drop-files__item-icon .icon', theme)\n .width('1.1em')\n .height('1.1em')\n\n styleBuilder\n .select('.drop-files__item-body', theme)\n .display('grid')\n .minWidth('0')\n .gap('0.15em')\n\n styleBuilder\n .select('.drop-files__item-name', theme)\n .overflow('hidden')\n .textOverflow('ellipsis')\n .whiteSpace('nowrap')\n .apply(palette.applyFont(palette.font.size.sm, palette.font.weight.w700))\n\n styleBuilder\n .select('.drop-files__item-meta', theme)\n .apply(palette.applyFont(palette.font.size.xxs))\n .color(palette.current.text.subtle)\n\n styleBuilder\n .select('.drop-files__remove', theme)\n .display('inline-grid')\n .placeItems('center')\n .width('2.1em')\n .height('2.1em')\n .padding('0')\n .border('none')\n .borderRadius(palette.radii.sm)\n .background('transparent')\n .color(palette.current.text.subtle)\n .cursor('pointer')\n .transition('background 150ms ease, color 150ms ease')\n\n styleBuilder\n .select('.drop-files__remove:hover:not(:disabled)', theme)\n .background(palette.current.button.hover.background)\n .color(palette.current.button.hover.text)\n\n styleBuilder\n .select('.drop-files__remove:disabled', theme)\n .cursor('not-allowed')\n .opacity('0.55')\n\n styleBuilder\n .select('.drop-files__remove .icon', theme)\n .width('1em')\n .height('1em')\n}\n","import {\n styleBuilder,\n type ThemeMode,\n type ThemePalette,\n themes,\n} from '@purestack/ts-style'\n\nexport function registerExpandablePanelStyles() {\n themes.forEach((theme, palette) => {\n registerExpandablePanelShellStyles(theme, palette)\n registerExpandablePanelSummaryStyles(theme, palette)\n })\n}\n\nfunction registerExpandablePanelShellStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.expandable-panel', theme)\n .boxShadow(palette.effect.panelShadow)\n .padding('0')\n .overflow('hidden')\n .transition(\n 'border-color 180ms ease, box-shadow 180ms ease, background 180ms ease',\n )\n\n styleBuilder\n .select('.expandable-panel[open]', theme)\n .boxShadow(palette.effect.panelShadowStrong)\n}\n\nfunction registerExpandablePanelSummaryStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.expandable-panel[open] .expandable-panel__summary', theme)\n .borderBottomLeftRadius('0 !important')\n .borderBottomRightRadius('0 !important')\n\n styleBuilder\n .select('.expandable-panel__summary:focus-visible', theme)\n .outline(`2px solid ${palette.current.border.focus}`)\n .outlineOffset('-2px')\n\n styleBuilder\n .select('.expandable-panel__chevron', theme)\n .transition(\n 'transform 180ms ease, color 180ms ease, border-color 180ms ease, background 180ms ease',\n )\n\n styleBuilder\n .select('.expandable-panel[open] .expandable-panel__chevron', theme)\n .transform('rotate(180deg)')\n}\n","import type { Style } from '@purestack/ts-css'\nimport {\n BREAKPOINTS,\n mediaMin,\n styleBuilder,\n themes,\n} from '@purestack/ts-style'\n\nexport function registerFlexStyles() {\n themes.forEach((theme) => {\n styleBuilder\n .select('.flex', theme)\n .display('flex')\n .minWidth('0')\n .gap('0.75rem')\n .flexDirection('row')\n .alignItems('stretch')\n .justifyContent('flex-start')\n .flexWrap('nowrap')\n\n styleBuilder.select('.flex > *', theme).minWidth('0')\n\n styleBuilder.select('.flex-inline', theme).display('inline-flex')\n styleBuilder.select('.flex-column', theme).flexDirection('column')\n styleBuilder\n .select('.flex-column-reverse', theme)\n .flexDirection('column-reverse')\n styleBuilder.select('.flex-row-reverse', theme).flexDirection('row-reverse')\n\n styleBuilder.select('.align-stretch', theme).alignItems('stretch')\n styleBuilder.select('.align-start', theme).alignItems('start')\n styleBuilder.select('.align-flex-start', theme).alignItems('flex-start')\n styleBuilder.select('.align-center', theme).alignItems('center')\n styleBuilder.select('.align-end', theme).alignItems('end')\n styleBuilder.select('.align-flex-end', theme).alignItems('flex-end')\n styleBuilder.select('.align-baseline', theme).alignItems('baseline')\n\n styleBuilder.select('.justify-start', theme).justifyContent('flex-start')\n styleBuilder.select('.justify-center', theme).justifyContent('center')\n styleBuilder.select('.justify-end', theme).justifyContent('flex-end')\n styleBuilder.select('.justify-stretch', theme).justifyContent('stretch')\n styleBuilder\n .select('.justify-between', theme)\n .justifyContent('space-between')\n styleBuilder.select('.justify-around', theme).justifyContent('space-around')\n styleBuilder.select('.justify-evenly', theme).justifyContent('space-evenly')\n\n styleBuilder.select('.self-stretch', theme).alignSelf('stretch')\n styleBuilder.select('.self-start', theme).alignSelf('flex-start')\n styleBuilder.select('.self-center', theme).alignSelf('center')\n styleBuilder.select('.self-end', theme).alignSelf('flex-end')\n\n styleBuilder.select('.flex-wrap', theme).flexWrap('wrap')\n styleBuilder.select('.flex-wrap-reverse', theme).flexWrap('wrap-reverse')\n\n applyResponsiveFlexUtilities(theme)\n\n styleBuilder.select('.flex-auto', theme).flex('1 1 auto').minWidth('0')\n styleBuilder.select('.flex-none', theme).flex('0 0 auto')\n styleBuilder.select('.flex-fill', theme).flex('1 1 0%')\n styleBuilder.select('.flex-1', theme).flex('1 1 0%').minWidth('0')\n })\n}\n\nfunction applyResponsiveFlexUtilities(theme: string) {\n applyResponsiveFlexDirectionStyles(theme)\n applyResponsiveFlexAlignStyles(theme)\n applyResponsiveFlexJustifyStyles(theme)\n applyResponsiveFlexWrapStyles(theme)\n}\n\nfunction applyResponsiveFlexDirectionStyles(theme: string) {\n applyResponsiveFlexStyle(\n theme,\n '.flex-direction-sm-row',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.flexDirection('row'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-direction-sm-column',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.flexDirection('column'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-direction-sm-column-reverse',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.flexDirection('column-reverse'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-direction-sm-row-reverse',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.flexDirection('row-reverse'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-direction-md-row',\n mediaMin(BREAKPOINTS.md),\n (style) => style.flexDirection('row'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-direction-md-column',\n mediaMin(BREAKPOINTS.md),\n (style) => style.flexDirection('column'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-direction-md-column-reverse',\n mediaMin(BREAKPOINTS.md),\n (style) => style.flexDirection('column-reverse'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-direction-md-row-reverse',\n mediaMin(BREAKPOINTS.md),\n (style) => style.flexDirection('row-reverse'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-direction-lg-row',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.flexDirection('row'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-direction-lg-column',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.flexDirection('column'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-direction-lg-column-reverse',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.flexDirection('column-reverse'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-direction-lg-row-reverse',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.flexDirection('row-reverse'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-direction-xl-row',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.flexDirection('row'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-direction-xl-column',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.flexDirection('column'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-direction-xl-column-reverse',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.flexDirection('column-reverse'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-direction-xl-row-reverse',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.flexDirection('row-reverse'),\n )\n}\n\nfunction applyResponsiveFlexAlignStyles(theme: string) {\n applyResponsiveFlexStyle(\n theme,\n '.align-sm-stretch',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.alignItems('stretch'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.align-sm-flex-start',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.alignItems('flex-start'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.align-sm-center',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.alignItems('center'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.align-sm-flex-end',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.alignItems('flex-end'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.align-sm-baseline',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.alignItems('baseline'),\n )\n\n applyResponsiveFlexStyle(\n theme,\n '.align-md-stretch',\n mediaMin(BREAKPOINTS.md),\n (style) => style.alignItems('stretch'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.align-md-flex-start',\n mediaMin(BREAKPOINTS.md),\n (style) => style.alignItems('flex-start'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.align-md-center',\n mediaMin(BREAKPOINTS.md),\n (style) => style.alignItems('center'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.align-md-flex-end',\n mediaMin(BREAKPOINTS.md),\n (style) => style.alignItems('flex-end'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.align-md-baseline',\n mediaMin(BREAKPOINTS.md),\n (style) => style.alignItems('baseline'),\n )\n\n applyResponsiveFlexStyle(\n theme,\n '.align-lg-stretch',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.alignItems('stretch'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.align-lg-flex-start',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.alignItems('flex-start'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.align-lg-center',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.alignItems('center'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.align-lg-flex-end',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.alignItems('flex-end'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.align-lg-baseline',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.alignItems('baseline'),\n )\n\n applyResponsiveFlexStyle(\n theme,\n '.align-xl-stretch',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.alignItems('stretch'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.align-xl-flex-start',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.alignItems('flex-start'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.align-xl-center',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.alignItems('center'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.align-xl-flex-end',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.alignItems('flex-end'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.align-xl-baseline',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.alignItems('baseline'),\n )\n}\n\nfunction applyResponsiveFlexJustifyStyles(theme: string) {\n applyResponsiveFlexStyle(\n theme,\n '.justify-sm-start',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.justifyContent('flex-start'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-sm-center',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.justifyContent('center'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-sm-end',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.justifyContent('flex-end'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-sm-stretch',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.justifyContent('stretch'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-sm-between',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.justifyContent('space-between'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-sm-around',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.justifyContent('space-around'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-sm-evenly',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.justifyContent('space-evenly'),\n )\n\n applyResponsiveFlexStyle(\n theme,\n '.justify-md-start',\n mediaMin(BREAKPOINTS.md),\n (style) => style.justifyContent('flex-start'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-md-center',\n mediaMin(BREAKPOINTS.md),\n (style) => style.justifyContent('center'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-md-end',\n mediaMin(BREAKPOINTS.md),\n (style) => style.justifyContent('flex-end'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-md-stretch',\n mediaMin(BREAKPOINTS.md),\n (style) => style.justifyContent('stretch'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-md-between',\n mediaMin(BREAKPOINTS.md),\n (style) => style.justifyContent('space-between'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-md-around',\n mediaMin(BREAKPOINTS.md),\n (style) => style.justifyContent('space-around'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-md-evenly',\n mediaMin(BREAKPOINTS.md),\n (style) => style.justifyContent('space-evenly'),\n )\n\n applyResponsiveFlexStyle(\n theme,\n '.justify-lg-start',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.justifyContent('flex-start'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-lg-center',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.justifyContent('center'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-lg-end',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.justifyContent('flex-end'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-lg-stretch',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.justifyContent('stretch'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-lg-between',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.justifyContent('space-between'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-lg-around',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.justifyContent('space-around'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-lg-evenly',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.justifyContent('space-evenly'),\n )\n\n applyResponsiveFlexStyle(\n theme,\n '.justify-xl-start',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.justifyContent('flex-start'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-xl-center',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.justifyContent('center'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-xl-end',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.justifyContent('flex-end'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-xl-stretch',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.justifyContent('stretch'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-xl-between',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.justifyContent('space-between'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-xl-around',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.justifyContent('space-around'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-xl-evenly',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.justifyContent('space-evenly'),\n )\n}\n\nfunction applyResponsiveFlexWrapStyles(theme: string) {\n applyResponsiveFlexStyle(\n theme,\n '.flex-wrap-sm',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.flexWrap('wrap'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-nowrap-sm',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.flexWrap('nowrap'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-wrap-sm-reverse',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.flexWrap('wrap-reverse'),\n )\n\n applyResponsiveFlexStyle(\n theme,\n '.flex-wrap-md',\n mediaMin(BREAKPOINTS.md),\n (style) => style.flexWrap('wrap'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-nowrap-md',\n mediaMin(BREAKPOINTS.md),\n (style) => style.flexWrap('nowrap'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-wrap-md-reverse',\n mediaMin(BREAKPOINTS.md),\n (style) => style.flexWrap('wrap-reverse'),\n )\n\n applyResponsiveFlexStyle(\n theme,\n '.flex-wrap-lg',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.flexWrap('wrap'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-nowrap-lg',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.flexWrap('nowrap'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-wrap-lg-reverse',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.flexWrap('wrap-reverse'),\n )\n\n applyResponsiveFlexStyle(\n theme,\n '.flex-wrap-xl',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.flexWrap('wrap'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-nowrap-xl',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.flexWrap('nowrap'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-wrap-xl-reverse',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.flexWrap('wrap-reverse'),\n )\n}\n\nfunction applyResponsiveFlexStyle(\n theme: string,\n selector: string,\n media: string,\n apply: (style: Style) => void,\n) {\n apply(styleBuilder.select(selector, theme).media(media))\n}\n","import type { ThemePalette } from '@purestack/ts-style'\nimport { styleBuilder, type ThemeMode, themes } from '@purestack/ts-style'\n\nexport function registerFooterStyles() {\n themes.forEach((theme, palette) => {\n applyFooterShellStyles(theme)\n applyFooterBottomStyles(theme, palette)\n })\n}\n\nexport function applyFooterShellStyles(theme: ThemeMode) {\n styleBuilder\n .select('.site-footer', theme)\n .position('relative')\n .overflow('hidden')\n .padding('0')\n}\n\nexport function applyFooterBottomStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n applyFooterBottomShellStyles(theme, palette)\n}\n\nexport function applyFooterBottomShellStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.site-footer__bottom', theme)\n .apply(palette.applyFont(palette.font.size.xxs))\n .padding('0.5em 1em 0.5em 1em')\n .color(palette.current.text.subtle)\n .borderTop(`1px solid ${palette.current.border.subtle}`)\n styleBuilder\n .select('.site-footer__bottom :where(a)', theme)\n .color(palette.current.text.subtle)\n}\n","import type { ThemePalette } from '@purestack/ts-style'\nimport {\n BREAKPOINTS,\n mediaMax,\n styleBuilder,\n type ThemeMode,\n themes,\n} from '@purestack/ts-style'\n\nexport function registerFormStyles() {\n themes.forEach((theme, palette) => {\n registerFormShellStyles(theme)\n registerFormFieldStyles(theme, palette)\n registerAutoCompleteInputStyles(theme, palette)\n registerMultiAutoCompleteInputStyles(theme, palette)\n registerFormMetaStyles(theme, palette)\n registerFormCheckStyles(theme, palette)\n registerFormStatusStyles(theme, palette)\n registerFormResponsiveStyles(theme)\n registerFormSelectFieldStyles(theme, palette)\n })\n}\n\nfunction registerFormShellStyles(theme: ThemeMode) {\n styleBuilder.select('.form-block', theme).display('grid').gap('0.75rem')\n}\n\nfunction registerFormFieldStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder.select('.form-block__field', theme).display('grid').gap('0.6em')\n styleBuilder\n .select('.form-block__label', theme)\n .apply(palette.applyFont(palette.font.size.xxs, palette.font.weight.w700))\n .color(palette.current.tone)\n .lineHeight('1')\n styleBuilder\n .select('.form-block__input-shell', theme)\n .width('100%')\n .boxSizing('border-box')\n .borderRadius(palette.radii.md)\n .transition('border-color 160ms ease, box-shadow 160ms ease')\n .display('flex')\n .alignItems('stretch')\n .overflow('hidden')\n styleBuilder\n .select(\n '.form-block__input-shell:has(.form-block__input:focus-visible)',\n theme,\n )\n .outline('none')\n .borderColor(palette.current.border.default)\n .boxShadow(`0 0 0 3px ${palette.current.border.focus}`)\n styleBuilder\n .select('.form-block__input', theme)\n .width('100%')\n .minWidth('0')\n .boxSizing('border-box')\n .padding('0.5em 0.6em')\n .border('none')\n .borderRadius('0')\n .apply(palette.applyFont(palette.font.size.sm))\n .background('transparent')\n .boxShadow('none')\n .flex('1 1 auto')\n styleBuilder\n .select('.form-block__input::placeholder', theme)\n .color(palette.current.text.subtle)\n styleBuilder.select('.form-block__input:focus-visible', theme).outline('none')\n styleBuilder\n .select('.form-block__input[type=\"color\"]', theme)\n .padding('0.2rem')\n .height('2rem')\n .cursor('pointer')\n styleBuilder\n .select(\n '.form-block__input[type=\"number\"]::-webkit-outer-spin-button, .form-block__input[type=\"number\"]::-webkit-inner-spin-button',\n theme,\n )\n .appearance('none')\n .margin('0')\n styleBuilder\n .select('.form-block__input[type=\"number\"]', theme)\n .appearance('textfield')\n styleBuilder\n .select('.form-block__input-icon', theme)\n .color(palette.current.text.subtle)\n // Size the icon from the field's text, not from the surrounding page, so it\n // stays in proportion with the value and placeholder beside it.\n styleBuilder\n .select('.icon.form-block__input-icon', theme)\n .fontSize(palette.font.size.sm)\n .width('1.4em')\n .height('1.4em')\n styleBuilder\n .select(\n '.form-block__input-shell > .form-block__input-icon:first-child',\n theme,\n )\n .marginLeft('0.6em')\n .marginRight('0')\n styleBuilder\n .select(\n '.form-block__input-shell > .form-block__input-icon:last-child',\n theme,\n )\n .marginLeft('0')\n .marginRight('0.6em')\n styleBuilder\n .select('.form-block__number-controls', theme)\n .display('grid')\n .gridTemplateRows('1fr 1fr')\n .width('2em')\n .flex('0 0 auto')\n .background('transparent')\n styleBuilder\n .select('.form-block__number-btn', theme)\n .display('grid')\n .placeItems('center')\n .padding('0')\n .border('none')\n .apply(palette.applyFont(palette.font.size.sm, palette.font.weight.w700))\n .lineHeight('1')\n .cursor('pointer')\n}\n\nfunction registerFormSelectFieldStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n registerFormSelectControlStyles(theme)\n registerFormSelectOptionStyles(theme, palette)\n registerFormSelectIconStyles(theme)\n}\n\nfunction registerFormSelectControlStyles(theme: ThemeMode) {\n styleBuilder.select('.form-block__select-shell', theme).position('relative')\n styleBuilder\n .select('.form-block__select', theme)\n .appearance('none')\n .cursor('pointer')\n .paddingRight('2.9em')\n styleBuilder\n .select('.form-block__select:disabled', theme)\n .cursor('not-allowed')\n styleBuilder\n .select(\n '.form-block__select-shell:has(> .form-block__input-icon:first-child) .form-block__select',\n theme,\n )\n .paddingLeft('2.9em')\n}\n\nfunction registerFormSelectOptionStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('option, optgroup', theme)\n .backgroundColor(palette.current.canvascolor)\n styleBuilder\n .select('option:disabled, optgroup:disabled', theme)\n .color(palette.current.text.subtle)\n}\n\nfunction registerFormSelectIconStyles(theme: ThemeMode) {\n styleBuilder\n .select(\n '.form-block__select-shell > .form-block__input-icon:first-child',\n theme,\n )\n .position('absolute')\n .left('0.6em')\n .top('50%')\n .transform('translateY(-50%)')\n .pointerEvents('none')\n .marginLeft('0')\n .marginRight('0')\n\n styleBuilder\n .select(\n '.form-block__select-shell > .form-block__input-icon:last-child',\n theme,\n )\n .position('absolute')\n .right('0.6em')\n .top('50%')\n .transform('translateY(-50%)')\n .pointerEvents('none')\n .marginLeft('0')\n .marginRight('0')\n}\n\nfunction registerAutoCompleteInputStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.auto-complete-input', theme)\n .position('relative')\n .maxWidth('100%')\n\n styleBuilder\n .select('.auto-complete-input__popup', theme)\n .position('absolute')\n .left('0')\n .right('0')\n .top('calc(100% + 0.375rem)')\n .boxSizing('border-box')\n .maxHeight('18rem')\n .overflow('auto')\n .padding('0.35em')\n .borderRadius(palette.radii.md)\n .border(`1px solid ${palette.current.border.default}`)\n .background(palette.current.surface.rest.background)\n .boxShadow(palette.effect.strongShadow)\n .zIndex('70')\n\n styleBuilder\n .select('.auto-complete-input__listbox', theme)\n .display('grid')\n .gap('0.2em')\n\n styleBuilder\n .select('.auto-complete-input__option', theme)\n .borderRadius(palette.radii.sm)\n .color(palette.current.text.default)\n .cursor('pointer')\n .transition('background 140ms ease, color 140ms ease')\n\n styleBuilder\n .select(\n '.auto-complete-input__option:hover:not(.auto-complete-input__option--disabled), .auto-complete-input__option--active',\n theme,\n )\n .background(palette.current.button.hover.background)\n .color(palette.current.button.hover.text)\n\n styleBuilder\n .select('.auto-complete-input__option--selected', theme)\n .background(palette.current.surfaceAlt.rest.background)\n\n styleBuilder\n .select('.auto-complete-input__option--disabled', theme)\n .cursor('not-allowed')\n .opacity('0.55')\n\n styleBuilder\n .select(\n '.auto-complete-input__message, .auto-complete-input__default-row',\n theme,\n )\n .boxSizing('border-box')\n .width('100%')\n .padding('0.55em 0.65em')\n .apply(palette.applyFont(palette.font.size.sm))\n\n styleBuilder\n .select('.auto-complete-input__message', theme)\n .color(palette.current.text.subtle)\n\n styleBuilder\n .select('.auto-complete-input__default-row', theme)\n .display('grid')\n .gridTemplateColumns('minmax(0, 1fr) auto')\n .alignItems('center')\n .gap('0.6em')\n\n styleBuilder\n .select('.auto-complete-input__default-label', theme)\n .overflow('hidden')\n .textOverflow('ellipsis')\n .whiteSpace('nowrap')\n\n styleBuilder\n .select('.auto-complete-input__default-check', theme)\n .width('1em')\n .height('1em')\n .color(palette.current.tone)\n}\n\nfunction registerMultiAutoCompleteInputStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.multi-auto-complete-input', theme)\n .position('relative')\n .maxWidth('100%')\n\n styleBuilder\n .select('.multi-auto-complete-input__shell', theme)\n .minHeight('2.45em')\n .cursor('text')\n\n styleBuilder\n .select('.multi-auto-complete-input__shell--disabled', theme)\n .cursor('not-allowed')\n\n styleBuilder\n .select('.multi-auto-complete-input__control', theme)\n .display('flex')\n .alignItems('center')\n .flexWrap('wrap')\n .gap('0.35em')\n .width('100%')\n .minWidth('0')\n .padding('0.35em')\n .boxSizing('border-box')\n\n styleBuilder\n .select('.multi-auto-complete-input__query', theme)\n .width('8rem')\n .minWidth('7rem')\n .padding('0.15em 0.25em')\n .lineHeight('1.5')\n\n styleBuilder\n .select('.multi-auto-complete-input__item', theme)\n .display('inline-flex')\n .alignItems('center')\n .maxWidth('100%')\n .gap('0.3em')\n .padding('0.18em 0.25em 0.18em 0.55em')\n .borderRadius(palette.radii.sm)\n .background(palette.current.surfaceAlt.rest.background)\n .color(palette.current.text.default)\n .apply(palette.applyFont(palette.font.size.xs, palette.font.weight.w600))\n\n styleBuilder\n .select('.multi-auto-complete-input__item--invalid', theme)\n .background(palette.semanticTone.danger.surface.rest.background)\n .color(palette.semanticTone.danger.text.default)\n\n styleBuilder\n .select('.multi-auto-complete-input__item--disabled', theme)\n .opacity('0.58')\n\n styleBuilder\n .select('.multi-auto-complete-input__item-label', theme)\n .minWidth('0')\n .overflow('hidden')\n .textOverflow('ellipsis')\n .whiteSpace('nowrap')\n\n styleBuilder\n .select('.multi-auto-complete-input__remove', theme)\n .display('grid')\n .placeItems('center')\n .width('1.35em')\n .height('1.35em')\n .padding('0')\n .border('none')\n .borderRadius(palette.radii.sm)\n .background('transparent')\n .color('currentColor')\n .cursor('pointer')\n\n styleBuilder\n .select('.multi-auto-complete-input__remove:hover', theme)\n .background(palette.current.button.hover.background)\n .color(palette.current.button.hover.text)\n\n styleBuilder\n .select('.multi-auto-complete-input__remove .icon', theme)\n .width('1em')\n .height('1em')\n\n styleBuilder\n .select('.multi-auto-complete-input__popup', theme)\n .position('absolute')\n .left('0')\n .right('0')\n .top('calc(100% + 0.375rem)')\n .boxSizing('border-box')\n .maxHeight('18rem')\n .overflow('auto')\n .padding('0.35em')\n .borderRadius(palette.radii.md)\n .border(`1px solid ${palette.current.border.default}`)\n .background(palette.current.surface.rest.background)\n .boxShadow(palette.effect.strongShadow)\n .zIndex('70')\n\n styleBuilder\n .select('.multi-auto-complete-input__listbox', theme)\n .display('grid')\n .gap('0.2em')\n\n styleBuilder\n .select('.multi-auto-complete-input__option', theme)\n .borderRadius(palette.radii.sm)\n .color(palette.current.text.default)\n .cursor('pointer')\n .transition('background 140ms ease, color 140ms ease')\n\n styleBuilder\n .select(\n '.multi-auto-complete-input__option:hover:not(.multi-auto-complete-input__option--disabled), .multi-auto-complete-input__option--active',\n theme,\n )\n .background(palette.current.button.hover.background)\n .color(palette.current.button.hover.text)\n\n styleBuilder\n .select('.multi-auto-complete-input__option--disabled', theme)\n .cursor('not-allowed')\n .opacity('0.55')\n\n styleBuilder\n .select(\n '.multi-auto-complete-input__message, .multi-auto-complete-input__default-row',\n theme,\n )\n .boxSizing('border-box')\n .width('100%')\n .padding('0.55em 0.65em')\n .apply(palette.applyFont(palette.font.size.sm))\n\n styleBuilder\n .select('.multi-auto-complete-input__message', theme)\n .color(palette.current.text.subtle)\n\n styleBuilder\n .select('.multi-auto-complete-input__default-label', theme)\n .display('block')\n .overflow('hidden')\n .textOverflow('ellipsis')\n .whiteSpace('nowrap')\n}\n\nfunction registerFormMetaStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder\n .select('.form-block__meta', theme)\n .display('flex')\n .alignItems('center')\n .justifyContent('space-between')\n .gap('0.625rem')\n styleBuilder\n .select('.form-block__assist-link', theme)\n .apply(palette.applyFont(palette.font.size.xxs, palette.font.weight.w700))\n .textDecoration('none')\n .color(palette.current.tone)\n styleBuilder\n .select('.form-block__assist-link:hover', theme)\n .textDecoration('underline')\n styleBuilder\n .select('.form-block__divider', theme)\n .position('relative')\n .height('1px')\n .background(palette.current.border.default)\n .margin('0.125rem 0')\n styleBuilder\n .select('.form-block__divider::after', theme)\n .content('attr(data-label)')\n .position('absolute')\n .left('50%')\n .top('50%')\n .transform('translate(-50%, -50%)')\n .padding('0 0.5em')\n .apply(palette.applyFont(palette.font.size.xxxs, palette.font.weight.w700))\n .background(palette.current.surfaceAlt.rest.background)\n .color(palette.current.text.subtle)\n}\n\nfunction registerFormCheckStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder\n .select('.form-block__check', theme)\n .position('relative')\n .display('grid')\n .gridTemplateColumns('auto minmax(0, 1fr)')\n .alignItems('start')\n .gap('0.65em')\n .padding('0.45em 0.55em')\n .borderRadius(palette.radii.md)\n .apply(palette.applyFont(palette.font.size.xxs))\n .color(palette.current.tone)\n .cursor('pointer')\n .transition('background 150ms ease, color 150ms ease, opacity 150ms ease')\n styleBuilder\n .select('.form-block__check:hover', theme)\n .background(palette.current.surfaceAlt.hover.background)\n .color(palette.current.surfaceAlt.hover.text)\n styleBuilder\n .select('.form-block__check--bare', theme)\n .gridTemplateColumns('auto')\n .gap('0')\n .padding('0')\n .width('fit-content')\n styleBuilder\n .select('.form-block__check--bare:hover', theme)\n .background('transparent')\n styleBuilder\n .select('.form-block__check:has(.form-block__check-input:disabled)', theme)\n .cursor('not-allowed')\n .opacity('0.62')\n styleBuilder\n .select('.form-block__check-input', theme)\n .position('absolute')\n .width('1px')\n .height('1px')\n .margin('0')\n .opacity('0')\n .pointerEvents('none')\n styleBuilder\n .select('.form-block__check-control', theme)\n .position('relative')\n .display('grid')\n .placeItems('center')\n .width('1.35em')\n .height('1.35em')\n .boxSizing('border-box')\n .border(`1px solid ${palette.current.border.default}`)\n .borderRadius(palette.radii.sm)\n .background(palette.current.surfaceAlt.rest.background)\n .color(palette.current.button.rest.text)\n .boxShadow('inset 0 1px 0 rgba(255, 255, 255, 0.08)')\n .transition(\n 'background 150ms ease, border-color 150ms ease, box-shadow 150ms ease, transform 150ms ease',\n )\n styleBuilder\n .select('.form-block__check-control::after', theme)\n .content('\"\"')\n .width('0.38em')\n .height('0.68em')\n .border('solid currentColor')\n .borderWidth('0 0.16em 0.16em 0')\n .opacity('0')\n .transform('translateY(-0.08em) rotate(45deg) scale(0.72)')\n .transition('opacity 120ms ease, transform 150ms ease')\n styleBuilder\n .select(\n '.form-block__check-input:focus-visible + .form-block__check-control',\n theme,\n )\n .outline('none')\n .borderColor(palette.current.border.default)\n .boxShadow(`0 0 0 3px ${palette.current.border.focus}`)\n styleBuilder\n .select(\n '.form-block__check-input:active + .form-block__check-control',\n theme,\n )\n .transform('scale(0.96)')\n styleBuilder\n .select(\n '.form-block__check-input:checked + .form-block__check-control',\n theme,\n )\n .borderColor(palette.current.button.rest.border)\n .background(palette.current.button.rest.background)\n .boxShadow('none')\n styleBuilder\n .select(\n '.form-block__check-input:checked + .form-block__check-control::after',\n theme,\n )\n .opacity('1')\n .transform('translateY(-0.08em) rotate(45deg) scale(1)')\n styleBuilder\n .select(\n '.form-block__check-input:disabled + .form-block__check-control',\n theme,\n )\n .boxShadow('none')\n styleBuilder\n .select('.form-block__check-label', theme)\n .minWidth('0')\n .lineHeight('1.35')\n}\n\nfunction registerFormStatusStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder\n .select('.form-status', theme)\n .marginTop('0.25rem')\n .padding('0.5em 0.6em')\n .borderRadius(palette.radii.md)\n .apply(palette.applyFont(palette.font.size.sm))\n}\n\nfunction registerFormResponsiveStyles(theme: ThemeMode) {\n styleBuilder\n .select('.form-block__meta', theme)\n .media(mediaMax(BREAKPOINTS.sm))\n .flexDirection('column')\n .alignItems('flex-start')\n}\n","import {\n BREAKPOINTS,\n mediaMin,\n styleBuilder,\n themes,\n} from '@purestack/ts-style'\n\nexport function registerGridStyles() {\n themes.forEach((theme, _palette) => {\n styleBuilder\n .select('.grid', theme)\n .display('grid')\n .minWidth('0')\n .gap('0.75rem')\n .gridTemplateColumns('var(--grid-template-columns)')\n\n styleBuilder.select('.grid > *', theme).minWidth('0')\n\n styleBuilder.select('.align-stretch', theme).alignItems('stretch')\n styleBuilder.select('.align-start', theme).alignItems('start')\n styleBuilder.select('.align-center', theme).alignItems('center')\n styleBuilder.select('.align-end', theme).alignItems('end')\n\n styleBuilder.select('.justify-items-stretch', theme).justifyItems('stretch')\n styleBuilder.select('.justify-items-start', theme).justifyItems('start')\n styleBuilder.select('.justify-items-center', theme).justifyItems('center')\n styleBuilder.select('.justify-items-end', theme).justifyItems('end')\n\n styleBuilder.select('.justify-self-stretch', theme).justifySelf('stretch')\n styleBuilder.select('.justify-self-start', theme).justifySelf('start')\n styleBuilder.select('.justify-self-center', theme).justifySelf('center')\n styleBuilder.select('.justify-self-end', theme).justifySelf('end')\n\n styleBuilder.select('.grid-dense', theme).gridAutoFlow('row dense')\n\n styleBuilder\n .select('.grid', theme)\n .media(mediaMin(BREAKPOINTS.sm))\n .gridTemplateColumns('var(--grid-template-columns-sm)')\n\n styleBuilder\n .select('.grid', theme)\n .media(mediaMin(BREAKPOINTS.md))\n .gridTemplateColumns('var(--grid-template-columns-md)')\n\n styleBuilder\n .select('.grid', theme)\n .media(mediaMin(BREAKPOINTS.lg))\n .gridTemplateColumns('var(--grid-template-columns-lg)')\n\n styleBuilder\n .select('.grid', theme)\n .media(mediaMin(BREAKPOINTS.xl))\n .gridTemplateColumns('var(--grid-template-columns-xl)')\n })\n}\n","import type { ThemePalette } from '@purestack/ts-style'\nimport { styleBuilder, themes } from '@purestack/ts-style'\n\nexport function registerIconStyles() {\n themes.forEach((theme, palette) => {\n registerIconBaseStyles(theme, palette)\n })\n}\n\nfunction registerIconBaseStyles(theme: string, palette: ThemePalette) {\n styleBuilder\n .select('.icon', theme)\n .display('inline-flex')\n .alignItems('center')\n .justifyContent('center')\n .width('1.7em')\n .height('1.7em')\n .lineHeight('0')\n .verticalAlign('middle')\n .flexShrink('0')\n .alignSelf('center')\n\n styleBuilder\n .select('.icon svg', theme)\n .display('block')\n .width('100%')\n .height('100%')\n\n styleBuilder\n .select('.icon-frame', theme)\n .padding('0.25em')\n .display('inline-flex')\n .alignItems('center')\n .justifyContent('center')\n .lineHeight('0')\n .flexShrink('0')\n .borderRadius(palette.radii.md)\n\n styleBuilder\n .select('.icon-frame--sm', theme)\n .borderRadius(palette.radii.sm)\n .padding('0.5em')\n .fontSize('0.6em')\n\n styleBuilder\n .select('.icon-frame--lg', theme)\n .borderRadius('0.75rem')\n .padding('0.5em')\n .fontSize('1.5em')\n}\n","import {\n styleBuilder,\n type ThemeMode,\n type ThemePalette,\n themes,\n} from '@purestack/ts-style'\n\nconst LINE_CHART_VALUE_FONT_SIZE = '0.15rem'\nconst LINE_CHART_LABEL_FONT_SIZE = '0.1375rem'\nconst LINE_CHART_AXIS_FONT_SIZE = '0.11875rem'\nconst LINE_CHART_EMPTY_FONT_SIZE = '0.1625rem'\n\nexport function registerLineChartStyles() {\n themes.forEach((theme, palette) => {\n registerLineChartBaseStyles(theme)\n registerLineChartPaintStyles(theme, palette)\n })\n}\n\nfunction registerLineChartBaseStyles(theme: ThemeMode) {\n styleBuilder\n .select('.line-chart__line', theme)\n .fill('none')\n .strokeWidth('0.72')\n .strokeLinecap('round')\n .strokeLinejoin('round')\n .transition('opacity 180ms ease, filter 180ms ease')\n\n styleBuilder\n .select('.line-chart__area', theme)\n .opacity('0.34')\n .transition('opacity 180ms ease')\n\n styleBuilder.select('.line-chart__point', theme).strokeWidth('0')\n\n styleBuilder\n .select('.line-chart__series:hover .line-chart__line', theme)\n .opacity('0.54')\n\n styleBuilder\n .select('.line-chart__series:hover .line-chart__line:hover', theme)\n .opacity('1')\n .filter('brightness(1.12)')\n\n styleBuilder\n .select(\n '.line-chart__label, .line-chart__value, .line-chart__empty, .line-chart__grid-line text',\n theme,\n )\n .pointerEvents('none')\n .letterSpacing('normal')\n}\n\nfunction registerLineChartPaintStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder\n .select('.line-chart__grid-line line', theme)\n .stroke(palette.current.surfaceAlt.rest.border)\n .strokeWidth('0.22')\n\n styleBuilder\n .select('.line-chart__zero-line', theme)\n .stroke(palette.current.border.subtle)\n .strokeWidth('0.36')\n\n styleBuilder\n .select('.line-chart__value', theme)\n .fill(palette.current.text.default)\n .fontSize(LINE_CHART_VALUE_FONT_SIZE)\n .fontWeight(palette.font.weight.w700)\n\n styleBuilder\n .select('.line-chart__label', theme)\n .fill(palette.current.text.subtle)\n .fontSize(LINE_CHART_LABEL_FONT_SIZE)\n .fontWeight(palette.font.weight.w700)\n\n styleBuilder\n .select('.line-chart__grid-line text', theme)\n .fill(palette.current.text.subtle)\n .fontSize(LINE_CHART_AXIS_FONT_SIZE)\n .fontWeight(palette.font.weight.w500)\n .set('dominant-baseline', 'middle')\n .set('text-anchor', 'end')\n\n styleBuilder\n .select('.line-chart__empty', theme)\n .fill(palette.current.text.subtle)\n .fontSize(LINE_CHART_EMPTY_FONT_SIZE)\n .fontWeight(palette.font.weight.w700)\n .set('dominant-baseline', 'middle')\n}\n","import { styleBuilder, themes } from '@purestack/ts-style'\n\nexport function registerLogoStyles() {\n themes.forEach((theme, palette) => {\n const neutral = palette.semanticTone.neutral\n const accent = `var(--ps-logo-accent-color, ${palette.current.text.default})`\n const brand = `var(--ps-logo-brand-color, ${neutral.text.default})`\n styleBuilder.select('.site-logo', theme).css({\n display: 'inline-flex',\n alignItems: 'center',\n gap: 'var(--ps-logo-gap, 0.375rem)',\n width: 'fit-content',\n maxWidth: '100%',\n minWidth: '0',\n verticalAlign: 'middle',\n textDecoration: 'none',\n color: brand,\n lineHeight: '1',\n borderRadius: palette.radii.md,\n '--ps-logo-size-brand': 'clamp(1.25rem, 3vw, 1.5rem)',\n '--ps-logo-size-mark': 'clamp(1.625rem, 4vw, 2rem)',\n '--ps-logo-size-subtitle': '0.65rem',\n })\n styleBuilder.select('.site-logo--sm', theme).css({\n '--ps-logo-size-brand': '1.25rem',\n '--ps-logo-size-mark': '1.625rem',\n '--ps-logo-size-subtitle': '0.6rem',\n })\n styleBuilder.select('.site-logo--lg', theme).css({\n '--ps-logo-size-brand': '2rem',\n '--ps-logo-size-mark': '2.75rem',\n '--ps-logo-size-subtitle': '0.75rem',\n })\n styleBuilder.select('.site-logo--xl', theme).css({\n '--ps-logo-size-brand': '3rem',\n '--ps-logo-size-mark': '4rem',\n '--ps-logo-size-subtitle': '0.875rem',\n })\n styleBuilder.select('.site-logo--badge, .site-logo--outline', theme).css({\n padding: '0.75rem 1rem',\n border: `1px solid ${neutral.border.subtle}`,\n })\n styleBuilder\n .select('.site-logo--badge', theme)\n .css({ background: neutral.surfaceAlt.rest.background })\n styleBuilder.select('.site-logo--stacked', theme).css({\n flexDirection: 'column',\n textAlign: 'center',\n gap: 'var(--ps-logo-gap, 0.5rem)',\n })\n styleBuilder\n .select('.site-logo--stacked .site-logo__copy', theme)\n .alignItems('center')\n styleBuilder.select('.site-logo__mark', theme).css({\n display: 'inline-grid',\n placeItems: 'center',\n flexShrink: '0',\n width: 'var(--ps-logo-mark-size, var(--ps-logo-size-mark))',\n height: 'var(--ps-logo-mark-size, var(--ps-logo-size-mark))',\n borderRadius: palette.radii.md,\n boxSizing: 'border-box',\n overflow: 'hidden',\n color: `var(--ps-logo-mark-color, ${accent})`,\n background: 'var(--ps-logo-mark-background, transparent)',\n })\n styleBuilder\n .select(\n '.site-logo .site-logo__mark > .icon, .site-logo__mark > svg',\n theme,\n )\n .css({ width: '100%', height: '100%' })\n styleBuilder.select('.site-logo--mark-soft .site-logo__mark', theme).css({\n padding: '0.2em',\n background: `var(--ps-logo-mark-background, ${palette.current.surface.rest.background})`,\n })\n styleBuilder.select('.site-logo--mark-solid .site-logo__mark', theme).css({\n padding: '0.2em',\n background: `var(--ps-logo-mark-background, ${palette.current.button.rest.background})`,\n color: `var(--ps-logo-mark-color, ${palette.current.button.rest.text})`,\n })\n styleBuilder\n .select('.site-logo--mark-outline .site-logo__mark', theme)\n .css({ padding: '0.2em', border: `1px solid ${accent}` })\n styleBuilder\n .select('.site-logo--square .site-logo__mark', theme)\n .borderRadius('0')\n styleBuilder\n .select('.site-logo--circle .site-logo__mark', theme)\n .borderRadius('50%')\n styleBuilder.select('.site-logo__images, .site-logo__image', theme).css({\n display: 'block',\n width: '100%',\n height: '100%',\n objectFit: 'contain',\n })\n styleBuilder\n .select('.site-logo__image--dark', theme)\n .display(theme === 'dark' ? 'block' : 'none')\n styleBuilder\n .select('.site-logo__image--light', theme)\n .display(theme === 'dark' ? 'none' : 'block')\n styleBuilder.select('.site-logo__monogram', theme).css({\n fontSize:\n 'calc(var(--ps-logo-mark-size, var(--ps-logo-size-mark)) * 0.45)',\n fontWeight: '750',\n letterSpacing: '-0.04em',\n })\n styleBuilder.select('.site-logo__copy', theme).css({\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n minWidth: '0',\n gap: '0.35rem',\n })\n styleBuilder.select('.site-logo__name', theme).css({\n fontSize: 'var(--ps-logo-brand-size, var(--ps-logo-size-brand))',\n fontWeight: '700',\n letterSpacing: '-0.045em',\n lineHeight: '1.05',\n maxWidth: '100%',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n color: brand,\n })\n styleBuilder.select('.site-logo__brand', theme).color(brand)\n styleBuilder.select('.site-logo__suffix', theme).color(accent)\n styleBuilder\n .select('.site-logo--wordmark-accent .site-logo__brand', theme)\n .color(accent)\n styleBuilder\n .select('.site-logo--wordmark-gradient .site-logo__brand', theme)\n .css({\n backgroundImage: `linear-gradient(115deg, ${brand}, ${accent})`,\n backgroundClip: 'text',\n '-webkit-background-clip': 'text',\n color: 'transparent',\n })\n styleBuilder.select('.site-logo__subtitle', theme).css({\n fontSize: 'var(--ps-logo-subtitle-size, var(--ps-logo-size-subtitle))',\n color: neutral.text.subtle,\n lineHeight: '1.4',\n letterSpacing: '0.06em',\n maxWidth: '100%',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n })\n styleBuilder\n .select('.site-logo[href]', theme)\n .css({ cursor: 'pointer', transition: 'opacity 160ms ease' })\n styleBuilder\n .select('.site-logo[href]:hover', theme)\n .css({ textDecoration: 'none', opacity: '0.85' })\n styleBuilder.select('.site-logo[href]:focus-visible', theme).css({\n outline: `2px solid ${palette.current.border.focus}`,\n outlineOffset: '5px',\n })\n styleBuilder\n .select('.site-logo--wordmark-gradient .site-logo__brand', theme)\n .media('(forced-colors: active)')\n .css({ backgroundImage: 'none', color: 'LinkText' })\n })\n}\n","import type { ThemePalette } from '@purestack/ts-style'\nimport { styleBuilder, type ThemeMode, themes } from '@purestack/ts-style'\n\nexport function registerModalStyles() {\n themes.forEach((theme, palette) => {\n registerModalShellStyles(theme, palette)\n registerModalMotionStyles(theme)\n registerModalSizeStyles(theme)\n })\n}\n\nfunction registerModalShellStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder\n .select('.modal', theme)\n .position('fixed')\n .inset('0')\n .margin('0')\n .padding('0')\n .border('none')\n .background('transparent')\n .maxWidth('100vw')\n .maxHeight('100vh')\n .width('100%')\n .height('100%')\n .overflow('hidden')\n\n styleBuilder\n .select('.modal[open]', theme)\n .display('grid')\n .placeItems('center')\n\n styleBuilder.select('.modal:not([open])', theme).display('none')\n\n styleBuilder\n .select('.modal::backdrop', theme)\n .background(palette.current.overlay)\n .opacity('1')\n\n styleBuilder\n .select('.modal--fade::backdrop', theme)\n .opacity('0')\n .transition('opacity 420ms ease')\n\n styleBuilder.select('.modal--fade[open]::backdrop', theme).opacity('0.8')\n\n styleBuilder\n .select('.modal__panel', theme)\n .position('relative')\n .display('grid')\n .width('min(92vw, 40rem)')\n .maxHeight('min(86vh, 56.25rem)')\n .overflow('auto')\n .background(palette.current.canvas)\n .boxShadow(palette.effect.softShadow)\n .color(palette.current.text.default)\n .transform('translate3d(0, 0, 0)')\n .opacity('1')\n\n styleBuilder\n .select('.modal__surface', theme)\n .display('grid')\n .gap('1em')\n .minHeight('100%')\n .padding('1em')\n .borderRadius(palette.radii.lg)\n\n styleBuilder\n .select('.modal__header', theme)\n .display('grid')\n .gridTemplateColumns('minmax(0, 1fr) auto minmax(0, 1fr)')\n .alignItems('center')\n .gap('0.6em')\n\n styleBuilder\n .select('.modal__title', theme)\n .gridColumn('2')\n .justifySelf('center')\n .margin('0')\n .apply(palette.applyFont(palette.font.size.h3, palette.font.weight.w700))\n .textAlign('center')\n .color(palette.current.text.default)\n\n styleBuilder\n .select('.modal__header [data-modal-close]', theme)\n .gridColumn('3')\n .justifySelf('end')\n\n styleBuilder\n .select('.modal__body', theme)\n .display('grid')\n .minWidth('0')\n .justifyItems('center')\n .textAlign('center')\n\n styleBuilder\n .select('.modal__footer', theme)\n .display('flex')\n .flexWrap('wrap')\n .alignItems('center')\n .justifyContent('center')\n .gap('0.6em')\n\n styleBuilder.select('.modal__footer:empty', theme).display('none')\n\n styleBuilder\n .select('.modal--animated .modal__panel', theme)\n .transition('transform 700ms cubic-bezier(0.16, 1, 0.3, 1)')\n\n styleBuilder\n .select('.modal--fade.modal--animated .modal__panel', theme)\n .transition(\n 'transform 700ms cubic-bezier(0.16, 1, 0.3, 1), opacity 420ms ease',\n )\n\n styleBuilder\n .select(\n '.modal--fade[data-modal-state=\"opening\"] .modal__panel, .modal--fade[data-modal-state=\"closing\"] .modal__panel',\n theme,\n )\n .opacity('0')\n\n styleBuilder\n .select(\n '.modal--fade.modal--slide-top[data-modal-state=\"opening\"] .modal__panel, .modal--fade.modal--slide-top[data-modal-state=\"closing\"] .modal__panel, .modal--fade.modal--slide-right[data-modal-state=\"opening\"] .modal__panel, .modal--fade.modal--slide-right[data-modal-state=\"closing\"] .modal__panel, .modal--fade.modal--slide-bottom[data-modal-state=\"opening\"] .modal__panel, .modal--fade.modal--slide-bottom[data-modal-state=\"closing\"] .modal__panel, .modal--fade.modal--slide-left[data-modal-state=\"opening\"] .modal__panel, .modal--fade.modal--slide-left[data-modal-state=\"closing\"] .modal__panel',\n theme,\n )\n .opacity('0.45')\n\n styleBuilder\n .select(\n '.modal--fade[data-modal-state=\"opening\"]::backdrop, .modal--fade[data-modal-state=\"closing\"]::backdrop',\n theme,\n )\n .opacity('0')\n}\n\nfunction registerModalMotionStyles(theme: ThemeMode) {\n styleBuilder\n .select(\n '.modal--slide-top[data-modal-state=\"opening\"] .modal__panel, .modal--slide-top[data-modal-state=\"closing\"] .modal__panel',\n theme,\n )\n .transform('translate3d(0, calc(-50vh - 50%), 0)')\n\n styleBuilder\n .select(\n '.modal--slide-right[data-modal-state=\"opening\"] .modal__panel, .modal--slide-right[data-modal-state=\"closing\"] .modal__panel',\n theme,\n )\n .transform('translate3d(calc(50vw + 50%), 0, 0)')\n\n styleBuilder\n .select(\n '.modal--slide-bottom[data-modal-state=\"opening\"] .modal__panel, .modal--slide-bottom[data-modal-state=\"closing\"] .modal__panel',\n theme,\n )\n .transform('translate3d(0, calc(50vh + 50%), 0)')\n\n styleBuilder\n .select(\n '.modal--slide-left[data-modal-state=\"opening\"] .modal__panel, .modal--slide-left[data-modal-state=\"closing\"] .modal__panel',\n theme,\n )\n .transform('translate3d(calc(-50vw - 50%), 0, 0)')\n\n styleBuilder\n .select('.modal--animated .modal__panel', theme)\n .media('prefers-reduced-motion: reduce')\n .transition('none')\n\n styleBuilder\n .select('.modal::backdrop', theme)\n .media('prefers-reduced-motion: reduce')\n .transition('none')\n}\n\nfunction registerModalSizeStyles(theme: ThemeMode) {\n styleBuilder\n .select('.modal--size-sm .modal__panel', theme)\n .width('min(92vw, 26.25rem)')\n styleBuilder\n .select('.modal--size-md .modal__panel', theme)\n .width('min(92vw, 40rem)')\n styleBuilder\n .select('.modal--size-lg .modal__panel', theme)\n .width('min(94vw, 53.75rem)')\n styleBuilder\n .select('.modal--size-xl .modal__panel', theme)\n .width('min(96vw, 67.5rem)')\n}\n","import type { ThemePalette } from '@purestack/ts-style'\nimport {\n BREAKPOINTS,\n mediaBelow,\n mediaMax,\n mediaMin,\n styleBuilder,\n type ThemeMode,\n themes,\n} from '@purestack/ts-style'\n\nexport function registerTopBarStyles() {\n themes.forEach((theme, palette) => {\n registerTopBarShellStyles(theme, palette)\n registerTopBarToggleStyles(theme, palette)\n })\n}\n\nexport function getTopBarToggleVisibleSelectors(targetSelector: string) {\n return [\n { selector: `.template-doc--nav-drawer ${targetSelector}` },\n {\n selector: `.template-doc--has-nav ${targetSelector}`,\n media: mediaBelow(BREAKPOINTS.lg),\n },\n ]\n}\n\nexport function getTopBarToggleHiddenSelectors(targetSelector: string) {\n return [\n {\n selector: `body:not(.template-doc--nav-drawer):not(.template-doc--has-nav) ${targetSelector}`,\n },\n {\n selector: `.template-doc--has-nav:not(.template-doc--nav-drawer) ${targetSelector}`,\n media: mediaMin(BREAKPOINTS.lg),\n },\n ]\n}\n\nexport function registerTopBarShellStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.topbar', theme)\n .padding('1rem')\n .position('sticky')\n .top('0')\n .overflowX('clip')\n .zIndex(40)\n .backdropFilter('blur(0.625rem)')\n .borderTopWidth('0 !important')\n .borderRightWidth('0 !important')\n .borderBottomWidth('1px !important')\n .borderBottomStyle('solid !important')\n .borderLeftWidth('0 !important')\n .borderRadius('0 !important')\n\n styleBuilder.select('.topbar__controls', theme).marginLeft('auto')\n styleBuilder\n .select('.topbar__actions', theme)\n .display('flex')\n .alignItems('center')\n .gap('0rem')\n styleBuilder\n .select('.topbar', theme)\n .media(mediaBelow(BREAKPOINTS.sm))\n .padding('0.75rem')\n styleBuilder\n .select('.topbar > .flex, .topbar__controls', theme)\n .media(mediaBelow(BREAKPOINTS.sm))\n .gap('0.5rem')\n registerTopBarAccountVisibilityStyles(theme)\n\n styleBuilder\n .select('.topbar__icon', theme)\n .width('2.625rem')\n .height('2.625rem')\n .borderRadius(palette.radii.pill)\n .display('grid')\n .placeItems('center')\n .border('1px solid transparent')\n .background('transparent')\n .cursor('pointer')\n .position('relative')\n .padding('0')\n .color(palette.current.text.subtle)\n}\n\nfunction registerTopBarAccountVisibilityStyles(theme: ThemeMode) {\n styleBuilder.select('.topbar__account', theme).display('none')\n for (const rule of getTopBarToggleHiddenSelectors('.topbar__account')) {\n let selector = styleBuilder.select(rule.selector, theme)\n if (rule.media) selector = selector.media(rule.media)\n selector.display('inline-block')\n }\n}\n\nexport function registerTopBarToggleStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n registerTopBarToggleVisibilityStyles(theme, palette)\n registerTopBarToggleGlyphStyles(theme)\n registerTopBarToggleCheckedStateStyles(theme)\n registerTopBarResponsiveSearchStyles(theme)\n}\n\nfunction registerTopBarToggleVisibilityStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.topbar__toggle', theme)\n .background(palette.current.surface.rest.background)\n .borderColor(palette.current.border.default)\n .color(palette.current.text.subtle)\n .display('none')\n styleBuilder\n .select('.template-doc--nav-drawer .topbar__toggle', theme)\n .display('grid')\n styleBuilder\n .select('.template-doc--has-nav .topbar__toggle', theme)\n .media(mediaBelow(BREAKPOINTS.lg))\n .display('grid')\n styleBuilder\n .select('.topbar__toggle:focus-visible', theme)\n .outline(`2px solid ${palette.current.border.focus}`)\n}\n\nfunction registerTopBarToggleGlyphStyles(theme: ThemeMode) {\n styleBuilder\n .select('.topbar__toggle::before', theme)\n .content('\"\"')\n .width('1.125rem')\n .height('0.125rem')\n .background('currentColor')\n .position('absolute')\n .top('0.875rem')\n .left('0.75rem')\n .transition('transform 200ms ease, top 200ms ease')\n .boxShadow('0 0.375rem 0 0 currentColor')\n styleBuilder\n .select('.topbar__toggle::after', theme)\n .content('\"\"')\n .width('1.125rem')\n .height('0.125rem')\n .background('currentColor')\n .position('absolute')\n .top('1.625rem')\n .left('0.75rem')\n .transition('transform 200ms ease, top 200ms ease')\n}\n\nfunction registerTopBarToggleCheckedStateStyles(theme: ThemeMode) {\n styleBuilder.select('.doc-nav-toggle', theme).display('none')\n styleBuilder\n .select('.doc-nav-toggle:checked ~ .topbar .topbar__toggle::before', theme)\n .top('1.25rem')\n .transform('rotate(45deg)')\n .boxShadow('none')\n styleBuilder\n .select('.doc-nav-toggle:checked ~ .topbar .topbar__toggle::after', theme)\n .top('1.25rem')\n .transform('rotate(-45deg)')\n}\n\nfunction registerTopBarResponsiveSearchStyles(theme: ThemeMode) {\n styleBuilder\n .select('.topbar__search', theme)\n .media(mediaMax(BREAKPOINTS.sm))\n .display('none')\n}\n","import type { ThemePalette } from '@purestack/ts-style'\nimport {\n BREAKPOINTS,\n docLayoutVar,\n mediaAbove,\n mediaBelow,\n mediaMax,\n mediaMin,\n styleBuilder,\n type ThemeMode,\n themes,\n} from '@purestack/ts-style'\nimport { getTopBarToggleVisibleSelectors } from '../topBar/topBarStyle'\n\nexport function registerNavStyles() {\n themes.forEach((theme, palette) => {\n registerNavShellStyles(theme, palette)\n registerNavSummaryStyles(theme, palette)\n })\n}\n\nexport function registerNavShellStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('li.nav__item', theme)\n .marginInlineStart('-0.5rem')\n .marginInlineEnd('-0.5rem')\n styleBuilder\n .select('li.nav__item .icon', theme)\n .width('1.3em')\n .height('1.3em')\n styleBuilder.select('li.nav__item .btn', theme).gap('0.5em').padding('0.5em')\n styleBuilder\n .select('.nav__list .nav__list li.nav__item', theme)\n .marginInlineStart('0.75rem')\n .marginInlineEnd('0rem')\n styleBuilder\n .select('.nav__menu', theme)\n .display('block')\n .padding('1em')\n .borderRadius(`${palette.radii.lg} !important`)\n .border('1px solid transparent')\n .apply(palette.applyFont(palette.font.size.body))\n .maxHeight(`calc(100vh - ${docLayoutVar('sidebarTop')} - 1.5625rem)`)\n .overflowY('auto')\n .overflowX('hidden')\n .marginRight(docLayoutVar('activeShellPaddingInlineStart'))\n styleBuilder\n .select('.nav__header-row', theme)\n .display('flex')\n .alignItems('center')\n .justifyContent('space-between')\n .gap('0.5em')\n registerNavAccountPlacementStyles(theme)\n styleBuilder.select('.nav__search', theme).display('none').width('100%')\n styleBuilder\n .select('.nav__search', theme)\n .media(mediaMax(BREAKPOINTS.sm))\n .display('block')\n styleBuilder\n .select('.nav__header', theme)\n .apply(palette.applyFont(palette.font.size.xxs, palette.font.weight.w700))\n .textTransform('uppercase')\n .color(palette.current.text.subtle)\n .opacity('0.5')\n styleBuilder\n .select('.nav__panel-toggle', theme)\n .display('none')\n .alignItems('center')\n .justifyContent('center')\n .padding('0')\n .borderRadius(palette.radii.md)\n .cursor('pointer')\n .transition('background 160ms ease, color 160ms ease')\n .bottom('5rem')\n styleBuilder.select('.nav__panel-toggle-label', theme).display('inline-block')\n styleBuilder.select('.nav__panel-toggle-icon', theme).display('none')\n styleBuilder\n .select(\n '.nav__panel-toggle:focus-visible, .nav__collapse-toggle:focus-visible',\n theme,\n )\n .outline(`2px solid ${palette.current.border.focus}`)\n styleBuilder\n .select('.nav__collapse-toggle', theme)\n .display('none')\n .alignItems('center')\n .justifyContent('center')\n .padding('0.25em')\n .border(`transparent`)\n .borderRadius(palette.radii.md)\n .background('transparent')\n .cursor('pointer')\n .transition('background 160ms ease, color 160ms ease')\n .apply(palette.applyFont(palette.font.size.xxxs))\n // Collapsing belongs to the doc layout, so only a docked menu offers it.\n styleBuilder\n .select('.doc-sidebar .nav__collapse-toggle', theme)\n .display('inline-flex')\n styleBuilder\n .select('.nav__collapse-toggle-icon', theme)\n .display('inline-flex')\n .alignItems('center')\n .justifyContent('center')\n styleBuilder.select('.nav__collapse-toggle-icon--open', theme).display('none')\n styleBuilder\n .select(\n '.template-doc--nav-collapsed .nav__collapse-toggle-icon--collapse',\n theme,\n )\n .display('none')\n styleBuilder\n .select(\n '.template-doc--nav-collapsed .nav__collapse-toggle-icon--open',\n theme,\n )\n .display('inline-flex')\n styleBuilder\n .select('.nav__collapse-toggle-icon svg', theme)\n .display('block')\n .fill('none')\n .stroke('currentColor')\n .strokeWidth('1.9')\n .strokeLinecap('round')\n .strokeLinejoin('round')\n\n styleBuilder\n .select(\n '.template-doc--has-nav:not(.template-doc--nav-drawer) .doc-sidebar',\n theme,\n )\n .media(mediaMin(BREAKPOINTS.lg))\n .transformOrigin('left center')\n .transform('translateX(0)')\n .zIndex(30)\n styleBuilder\n .select(\n '.template-doc.template-doc--nav-ready.template-doc--has-nav:not(.template-doc--nav-drawer) .doc-sidebar',\n theme,\n )\n .media(mediaMin(BREAKPOINTS.lg))\n .transition('transform 260ms ease')\n styleBuilder\n .select(\n '.template-doc--nav-collapsed.template-doc--has-nav:not(.template-doc--nav-drawer) .doc-sidebar',\n theme,\n )\n .media(mediaMin(BREAKPOINTS.lg))\n .width(docLayoutVar('activeRailWidth'))\n .position('fixed')\n .left('0')\n .right('auto')\n .top(docLayoutVar('sidebarTop'))\n .height(`calc(100dvh - ${docLayoutVar('sidebarTop')})`)\n .maxHeight('none')\n .background('transparent')\n .boxShadow('none')\n .overflow('visible')\n .transform(`translateX(calc(-100% + ${docLayoutVar('activeRailWidth')}))`)\n .zIndex(140)\n styleBuilder\n .select(\n '.template-doc--nav-collapsed.template-doc--has-nav:not(.template-doc--nav-drawer) .doc-sidebar.doc-sidebar--open',\n theme,\n )\n .media(mediaMin(BREAKPOINTS.lg))\n .width(docLayoutVar('preferredNavWidth'))\n .background('transparent')\n .boxShadow('none')\n .transform('translateX(0)')\n styleBuilder\n .select(\n '.template-doc.template-doc--nav-collapsed.template-doc--has-nav:not(.template-doc--nav-drawer) .doc-shell',\n theme,\n )\n .media(mediaMin(BREAKPOINTS.lg))\n .gridTemplateColumns('minmax(0, 1fr)')\n styleBuilder\n .select(\n '.template-doc.template-doc--nav-collapsed.template-doc--has-nav:not(.template-doc--nav-drawer) .doc-shell--toc',\n theme,\n )\n .media(mediaAbove(BREAKPOINTS.toc))\n .gridTemplateColumns(`minmax(0, 1fr) ${docLayoutVar('activeTocWidth')}`)\n styleBuilder\n .select(\n '.template-doc.template-doc--nav-collapsed.template-doc--has-nav:not(.template-doc--nav-drawer) .doc-shell--toc',\n theme,\n )\n .media(mediaMax(BREAKPOINTS.toc))\n .gridTemplateColumns('1fr')\n styleBuilder\n .select(\n '.template-doc.template-doc--nav-collapsed.template-doc--toc-collapsed.template-doc--has-nav:not(.template-doc--nav-drawer) .doc-shell--toc',\n theme,\n )\n .media(mediaMin(BREAKPOINTS.lg))\n .gridTemplateColumns('1fr')\n styleBuilder\n .select(\n '.template-doc--nav-collapsed.template-doc--has-nav:not(.template-doc--nav-drawer) .doc-sidebar:not(.doc-sidebar--open) .nav__header, .template-doc--nav-collapsed.template-doc--has-nav:not(.template-doc--nav-drawer) .doc-sidebar:not(.doc-sidebar--open) .nav__collapse-toggle, .template-doc--nav-collapsed.template-doc--has-nav:not(.template-doc--nav-drawer) .doc-sidebar:not(.doc-sidebar--open) .nav__list',\n theme,\n )\n .media(mediaMin(BREAKPOINTS.lg))\n .display('none')\n styleBuilder\n .select(\n '.template-doc--nav-collapsed.template-doc--has-nav:not(.template-doc--nav-drawer) .doc-sidebar:not(.doc-sidebar--open) .nav__menu',\n theme,\n )\n .media(mediaMin(BREAKPOINTS.lg))\n .width(docLayoutVar('activeRailWidth'))\n .marginLeft('0')\n .padding('0')\n .background('transparent')\n .border('none !important')\n .borderRadius('0 !important')\n .overflow('visible')\n styleBuilder\n .select(\n '.template-doc--nav-collapsed.template-doc--has-nav:not(.template-doc--nav-drawer) .doc-sidebar:not(.doc-sidebar--open) .nav__header-row',\n theme,\n )\n .media(mediaMin(BREAKPOINTS.lg))\n .margin('0')\n .width(docLayoutVar('activeRailWidth'))\n .height('7.375rem')\n .position('static')\n styleBuilder\n .select(\n '.template-doc--nav-collapsed.template-doc--has-nav:not(.template-doc--nav-drawer) .doc-sidebar:not(.doc-sidebar--open) .nav__panel-toggle',\n theme,\n )\n .media(mediaMin(BREAKPOINTS.lg))\n .display('inline-flex')\n .position('absolute')\n .alignItems('center')\n .justifyContent('center')\n .writingMode('vertical-rl')\n .textOrientation('mixed')\n .height('auto')\n .padding('0.6em 0')\n .width(docLayoutVar('activeRailWidth'))\n .apply(palette.applyFont(palette.font.size.xxxs, palette.font.weight.w700))\n .textTransform('uppercase')\n .userSelect('none')\n .border(`1px solid ${palette.current.border.default}`)\n .borderLeft('none')\n .borderRadius(`0 ${palette.radii.md} ${palette.radii.md} 0`)\n styleBuilder\n .select(\n '.template-doc--nav-collapsed.template-doc--has-nav:not(.template-doc--nav-drawer) .doc-sidebar.doc-sidebar--open .nav__panel-toggle',\n theme,\n )\n .media(mediaMin(BREAKPOINTS.lg))\n .display('none')\n\n styleBuilder\n .select(\n '.doc-sidebar .nav__panel-toggle, .doc-sidebar .nav__collapse-toggle',\n theme,\n )\n .media(mediaBelow(BREAKPOINTS.lg))\n .display('none')\n styleBuilder\n .select(\n '.template-doc--nav-drawer .nav__panel-toggle, .template-doc--nav-drawer .nav__collapse-toggle',\n theme,\n )\n .display('none')\n styleBuilder\n .select('.nav__list', theme)\n .listStyle('none')\n .margin('0')\n .padding('0')\n styleBuilder\n .select('.template-doc--has-nav .doc-sidebar .nav__menu', theme)\n .media(mediaBelow(BREAKPOINTS.lg))\n .width('100%')\n .maxWidth('none')\n .minHeight(`calc(100dvh - ${docLayoutVar('sidebarTopMobile')})`)\n .maxHeight('none')\n .borderRadius('0 !important')\n .border('0 !important')\n .padding('1rem 1rem 1.25rem')\n .height('100%')\n .overflow('auto')\n .boxSizing('border-box')\n}\n\nfunction registerNavAccountPlacementStyles(theme: ThemeMode) {\n styleBuilder.select('.nav__menu .nav__account', theme).display('none')\n for (const rule of getTopBarToggleVisibleSelectors(\n '.doc-sidebar .nav__menu .nav__account',\n )) {\n let selector = styleBuilder.select(rule.selector, theme)\n if (rule.media) selector = selector.media(rule.media)\n selector.display('inline-block').marginLeft('auto')\n }\n}\n\nexport function registerNavSummaryStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder.select('.nav__summary', theme).position('relative')\n styleBuilder\n .select('.nav__chevron', theme)\n .position('absolute')\n .left('auto')\n .right('0.125rem')\n .transform('rotate(0deg)')\n .transition('transform 160ms ease')\n .top('50%')\n .set('translate', '0 -50%')\n .color(palette.current.text.subtle)\n styleBuilder\n .select('.nav__group[open] > .nav__summary .nav__chevron', theme)\n .transform('rotate(-90deg)')\n styleBuilder.select('.nav__summary::marker', theme).content('\"\"')\n}\n","import type { ThemePalette } from '@purestack/ts-style'\nimport {\n BREAKPOINTS,\n docLayoutVar,\n mediaAbove,\n mediaBelow,\n mediaMax,\n styleBuilder,\n type ThemeMode,\n themes,\n} from '@purestack/ts-style'\n\nexport function registerPageTocStyles() {\n themes.forEach((theme, palette) => {\n registerPageTocShellStyles(theme, palette)\n registerPageTocLinkStyles(theme)\n registerPageTocTargetStyles(theme, palette)\n registerPageTocLayoutStyles(theme, palette)\n })\n}\n\nexport function registerPageTocShellStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.page-toc', theme)\n .display('block')\n .marginLeft(docLayoutVar('activeShellPaddingInlineEnd'))\n .padding('1em')\n .borderRadius(`${palette.radii.lg} !important`)\n .border('1px solid transparent')\n .apply(palette.applyFont(palette.font.size.body))\n .maxHeight(`calc(100vh - ${docLayoutVar('sidebarTop')} - 1.5625rem)`)\n .overflowY('auto')\n .overflowX('hidden')\n styleBuilder\n .select('.page-toc__header-row', theme)\n .display('flex')\n .alignItems('center')\n .justifyContent('space-between')\n .gap('0.5em')\n styleBuilder\n .select('.page-toc__header', theme)\n .apply(palette.applyFont(palette.font.size.xxs, palette.font.weight.w700))\n .textTransform('uppercase')\n .color(palette.current.text.subtle)\n .opacity('0.5')\n styleBuilder\n .select('.page-toc__restore-toggle', theme)\n .display('inline-flex')\n .alignItems('center')\n .justifyContent('center')\n .padding('0.25em')\n .background('transparent')\n .border('transparent')\n .borderRadius(palette.radii.md)\n .cursor('pointer')\n .transition('background 160ms ease, color 160ms ease')\n .apply(palette.applyFont(palette.font.size.xxxs))\n styleBuilder\n .select('.page-toc__header-toggle-icon', theme)\n .display('inline-flex')\n .alignItems('center')\n .justifyContent('center')\n styleBuilder\n .select('.page-toc__header-toggle-icon--restore', theme)\n .display('none')\n styleBuilder\n .select(\n '.template-doc--toc-collapsed .page-toc__header-toggle-icon--collapse',\n theme,\n )\n .display('none')\n styleBuilder\n .select(\n '.template-doc--toc-collapsed .page-toc__header-toggle-icon--restore',\n theme,\n )\n .display('inline-flex')\n styleBuilder\n .select('.page-toc__header-toggle-icon svg', theme)\n .display('block')\n .fill('none')\n .stroke('currentColor')\n .strokeWidth('1.9')\n .strokeLinecap('round')\n .strokeLinejoin('round')\n styleBuilder\n .select('.page-toc__list', theme)\n .listStyle('none')\n .margin('0')\n .padding('0')\n .display('grid')\n .gap('0.25em')\n .overflow('hidden')\n styleBuilder\n .select('.page-toc__list--nested', theme)\n .paddingLeft('0.75em')\n .borderLeft(`1px solid ${palette.current.border.subtle}`)\n styleBuilder.select('.page-toc__item', theme).display('grid')\n styleBuilder\n .select('.page-toc__empty', theme)\n .apply(palette.applyFont(palette.font.size.xs, palette.font.weight.w600))\n .color(palette.current.text.subtle)\n styleBuilder.select('.page-toc__panel-toggle', theme).display('none')\n styleBuilder\n .select('.page-toc__restore-toggle', theme)\n .media(mediaMax(BREAKPOINTS.toc))\n .display('none')\n}\n\nexport function registerPageTocLinkStyles(theme: ThemeMode) {\n styleBuilder\n .select('.page-toc__link', theme)\n .transition('background 160ms ease, color 160ms ease')\n\n styleBuilder.select('.page-toc__link--sub', theme).fontWeight('500')\n}\n\nexport function registerPageTocTargetStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.doc-content .page-toc__target', theme)\n .scrollMarginTop('6rem')\n .padding('0')\n .borderRadius('0')\n .transition('background 200ms ease, color 200ms ease')\n styleBuilder\n .select('.doc-content .page-toc__target', theme)\n .boxShadow(`0 2px 0 0 ${palette.current.tone}`)\n}\n\nexport function registerPageTocLayoutStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n registerPageTocShellGridStyles(theme)\n registerPageTocSidebarBaseStyles(theme)\n registerPageTocMobileOverlayStyles(theme, palette)\n registerPageTocDesktopCollapsedStyles(theme)\n}\n\nfunction registerPageTocShellGridStyles(theme: ThemeMode) {\n styleBuilder\n .select('.doc-shell--toc', theme)\n .gridTemplateColumns(\n `${docLayoutVar('activeNavWidth')} minmax(0, 1fr) ${docLayoutVar('activeTocWidth')}`,\n )\n styleBuilder\n .select('.doc-shell--toc-only', theme)\n .gridTemplateColumns(`minmax(0, 1fr) ${docLayoutVar('activeTocWidth')}`)\n styleBuilder\n .select('.doc-shell--nav-drawer.doc-shell--toc', theme)\n .gridTemplateColumns(`minmax(0, 1fr) ${docLayoutVar('activeTocWidth')}`)\n styleBuilder\n .select('.doc-shell--toc', theme)\n .media(mediaMax(BREAKPOINTS.toc))\n .gridTemplateColumns(`${docLayoutVar('activeNavWidth')} minmax(0, 1fr)`)\n styleBuilder\n .select(\n '.doc-shell--toc-only, .doc-shell--nav-drawer.doc-shell--toc',\n theme,\n )\n .media(mediaMax(BREAKPOINTS.toc))\n .gridTemplateColumns('1fr')\n styleBuilder\n .select(\n '.doc-shell--toc, .template-doc--toc-collapsed .doc-shell--toc',\n theme,\n )\n .media(mediaBelow(BREAKPOINTS.lg))\n .gridTemplateColumns('1fr !important')\n\n styleBuilder\n .select('.template-doc--toc-collapsed .doc-shell--toc', theme)\n .gridTemplateColumns(`${docLayoutVar('activeNavWidth')} minmax(0, 1fr)`)\n styleBuilder\n .select('.template-doc--toc-collapsed .doc-shell--toc-only', theme)\n .gridTemplateColumns('1fr')\n styleBuilder\n .select(\n '.template-doc--toc-collapsed .doc-shell--nav-drawer.doc-shell--toc',\n theme,\n )\n .gridTemplateColumns('1fr')\n}\n\nfunction registerPageTocSidebarBaseStyles(theme: ThemeMode) {\n styleBuilder\n .select('.doc-toc', theme)\n .position('sticky')\n .top(docLayoutVar('sidebarTop'))\n .zIndex(30)\n .alignSelf('start')\n .maxHeight(`calc(100vh - ${docLayoutVar('sidebarTop')} - 1.5625rem)`)\n .overflow('auto')\n .userSelect('none')\n\n styleBuilder\n .select('.template-doc--has-toc .doc-toc', theme)\n .media(mediaAbove(BREAKPOINTS.toc))\n .overflow('visible')\n .transformOrigin('right center')\n .transform('translateX(0)')\n .zIndex(30)\n styleBuilder\n .select(\n '.template-doc.template-doc--nav-ready.template-doc--has-toc .doc-toc',\n theme,\n )\n .transition('transform 260ms ease')\n}\n\nfunction registerPageTocMobileOverlayStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.template-doc--has-toc .doc-toc', theme)\n .media(mediaMax(BREAKPOINTS.lg))\n .top(docLayoutVar('sidebarTopMobile'))\n .height(`calc(100dvh - ${docLayoutVar('sidebarTopMobile')})`)\n .maxHeight('none')\n styleBuilder\n .select('.template-doc--has-toc .doc-toc .page-toc', theme)\n .media(mediaMax(BREAKPOINTS.lg))\n .maxHeight(`calc(100dvh - ${docLayoutVar('sidebarTopMobile')})`)\n styleBuilder\n .select('.template-doc--has-toc .doc-toc', theme)\n .media(mediaMax(BREAKPOINTS.toc))\n .position('fixed')\n .right('0')\n .maxWidth('none')\n .zIndex(140)\n .overflow('hidden')\n .background('transparent')\n .boxShadow('none')\n styleBuilder\n .select('.template-doc--has-toc .doc-toc', theme)\n .media(mediaMax(BREAKPOINTS.sm))\n .width('100%')\n styleBuilder\n .select('.template-doc--has-toc .doc-toc.doc-toc--open', theme)\n .media(mediaMax(BREAKPOINTS.toc))\n .transform('translateX(0)')\n .overflowY('auto')\n .overflowX('hidden')\n .webkitOverflowScrolling('touch')\n styleBuilder\n .select('.template-doc--has-toc .doc-toc:not(.doc-toc--open)', theme)\n .media(mediaMax(BREAKPOINTS.toc))\n .width(docLayoutVar('activeRailWidth'))\n .right('0')\n .left('auto')\n .transform(`translateX(calc(100% - ${docLayoutVar('activeRailWidth')}))`)\n .background('transparent')\n .boxShadow('none')\n .pointerEvents('none')\n styleBuilder\n .select('.template-doc--has-toc.doc-toc-open', theme)\n .media(mediaMax(BREAKPOINTS.sm))\n .overflow('hidden')\n\n styleBuilder\n .select('.template-doc--has-toc.doc-toc-open', theme)\n .media(mediaMax(BREAKPOINTS.sm))\n .overflow('hidden')\n\n styleBuilder\n .select(\n '.template-doc--has-toc .doc-toc:not(.doc-toc--open) .page-toc',\n theme,\n )\n .media(mediaMax(BREAKPOINTS.toc))\n .background('transparent')\n .border('none !important')\n .boxShadow('none')\n\n styleBuilder\n .select('.template-doc--has-toc .page-toc__panel-toggle', theme)\n .media(mediaMax(BREAKPOINTS.toc))\n .position('absolute')\n .left('0')\n .right('auto')\n styleBuilder\n .select('.page-toc__panel-toggle', theme)\n .height('7.5rem')\n .writingMode('vertical-rl')\n .textOrientation('mixed')\n .width(docLayoutVar('activeRailWidth'))\n .transform('rotate(180deg)')\n .bottom('5rem')\n .apply(palette.applyFont(palette.font.size.xxxs, palette.font.weight.w700))\n .border(`1px solid ${palette.current.border.default}`)\n .borderLeft('none')\n .borderRadius(`0 ${palette.radii.md} ${palette.radii.md} 0`)\n .pointerEvents('auto')\n .zIndex(2)\n .userSelect('none')\n .cursor('pointer')\n .display('flex')\n .alignItems('center')\n .justifyContent('center')\n .textTransform('uppercase')\n .position('fixed')\n\n styleBuilder\n .select(\n '.template-doc--has-toc .doc-toc:not(.doc-toc--open) .page-toc > :not(.page-toc__panel-toggle)',\n theme,\n )\n .media(mediaMax(BREAKPOINTS.toc))\n .visibility('hidden')\n styleBuilder\n .select(\n '.template-doc--has-toc .doc-toc.doc-toc--open .page-toc__panel-toggle',\n theme,\n )\n .display('none')\n}\n\nfunction registerPageTocDesktopCollapsedStyles(theme: ThemeMode) {\n styleBuilder\n .select('.template-doc--toc-collapsed .doc-toc', theme)\n .media(mediaAbove(BREAKPOINTS.toc))\n .width(docLayoutVar('activeRailWidth'))\n .position('fixed')\n .top(docLayoutVar('sidebarTop'))\n .right('0')\n .left('auto')\n .height(`calc(100dvh - ${docLayoutVar('sidebarTop')})`)\n .maxHeight('none')\n .background('transparent')\n .boxShadow('none')\n .overflow('visible')\n .transform(`translateX(calc(100% - ${docLayoutVar('activeRailWidth')}))`)\n .zIndex(140)\n styleBuilder\n .select('.doc-toc.doc-toc--open', theme)\n .media(mediaAbove(BREAKPOINTS.md))\n .width(docLayoutVar('preferredTocWidth'))\n .background('transparent')\n .boxShadow('none')\n .transform('translateX(0)')\n styleBuilder\n .select('.page-toc', theme)\n .media(mediaBelow(BREAKPOINTS.md))\n .marginInlineStart('0')\n .borderRadius('0 !important')\n styleBuilder\n .select(\n '.template-doc--toc-collapsed .doc-toc:not(.doc-toc--open) .page-toc__header, .template-doc--toc-collapsed .doc-toc:not(.doc-toc--open) .page-toc__restore-toggle, .template-doc--toc-collapsed .doc-toc:not(.doc-toc--open) .page-toc__list, .template-doc--toc-collapsed .doc-toc:not(.doc-toc--open) .page-toc__empty',\n theme,\n )\n .media(mediaAbove(BREAKPOINTS.toc))\n .display('none')\n styleBuilder\n .select(\n '.template-doc--toc-collapsed .doc-toc:not(.doc-toc--open) .page-toc',\n theme,\n )\n .width(docLayoutVar('activeRailWidth'))\n .marginLeft('0')\n .padding('0')\n .background('transparent')\n .border('none !important')\n .borderRadius('0 !important')\n .overflow('visible')\n}\n","import { styleBuilder, themes } from '@purestack/ts-style'\n\nexport function registerPanelStyles() {\n themes.forEach((theme, palette) => {\n styleBuilder\n .select('.panel', theme)\n .display('grid')\n .padding('1em')\n .boxShadow(palette.effect.panelShadow)\n .overflow('hidden')\n .transition(\n 'border-color 180ms ease, box-shadow 180ms ease, background 180ms ease',\n )\n })\n}\n","import type { ThemePalette } from '@purestack/ts-style'\nimport {\n BREAKPOINTS,\n getBreakpoint,\n mediaAbove,\n styleBuilder,\n type ThemeMode,\n themes,\n} from '@purestack/ts-style'\n\nexport function registerSearchBoxStyles() {\n themes.forEach((theme, palette) => {\n registerSearchBoxShellStyles(theme)\n registerSearchBoxResultStyles(theme, palette)\n })\n}\n\nexport function registerSearchBoxShellStyles(theme: ThemeMode) {\n registerSearchBoxShellContainerStyles(theme)\n registerSearchBoxShellAccessibilityStyles(theme)\n}\n\nfunction registerSearchBoxShellContainerStyles(theme: ThemeMode) {\n styleBuilder\n .select('.site-search', theme)\n .position('relative')\n .maxWidth('100%')\n\n styleBuilder.select('.site-search__field', theme).display('block')\n}\n\nfunction registerSearchBoxShellAccessibilityStyles(theme: ThemeMode) {\n styleBuilder\n .select('.site-search__sr-only', theme)\n .position('absolute')\n .width('1px')\n .height('1px')\n .padding('0')\n .margin('-1px')\n .overflow('hidden')\n .clip('rect(0, 0, 0, 0)')\n .whiteSpace('nowrap')\n .border('0')\n}\n\nexport function registerSearchBoxResultStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n registerSearchBoxResultContainerStyles(theme, palette)\n registerSearchBoxResultTopBarOverlayStyles(theme)\n registerSearchBoxResultListStyles(theme, palette)\n registerSearchBoxResultContentStyles(theme, palette)\n}\n\nfunction registerSearchBoxResultContainerStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.site-search__results', theme)\n .position('absolute')\n .top('calc(100% + 0.5rem)')\n .right('0')\n .width('min(35rem, calc(100vw - 2rem))')\n .maxHeight('26.25rem')\n .overflow('auto')\n .padding('0.5rem')\n .borderRadius(palette.radii.lg)\n .border(`1px solid ${palette.current.border.default}`)\n .background(palette.current.surface.rest.background)\n .boxShadow(palette.effect.strongShadow)\n .zIndex('60')\n}\n\nfunction registerSearchBoxResultTopBarOverlayStyles(theme: ThemeMode) {\n styleBuilder\n .select('.topbar .site-search__results', theme)\n .media(mediaAbove(BREAKPOINTS.sm))\n .position('fixed')\n .top('4.75rem')\n .left('50%')\n .right('auto')\n .transform('translateX(-50%)')\n .width(`min(${getBreakpoint(BREAKPOINTS.sm)}, calc(100vw - 2rem))`)\n .zIndex('120')\n}\n\nfunction registerSearchBoxResultListStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.site-search__results ul.site-search__list', theme)\n .listStyle('none')\n .margin('0')\n .padding('0')\n .display('grid')\n .gap('0.5em')\n\n styleBuilder\n .select('.site-search__results .site-search__item', theme)\n .margin('0')\n .padding('0')\n\n styleBuilder\n .select('.site-search__results .site-search__link', theme)\n .display('grid')\n .gap('0.375rem')\n .padding('0.75rem 0.875rem')\n .borderRadius(palette.radii.md)\n .border(`1px solid ${palette.current.border.subtle}`)\n .background(palette.current.surface.rest.background)\n .textDecoration('none')\n .color(palette.current.text.default)\n .transition(\n 'border-color 160ms ease, background-color 160ms ease, transform 160ms ease',\n )\n\n styleBuilder\n .select('.site-search__results .site-search__link:hover', theme)\n .background(palette.current.surfaceAlt.rest.background)\n .borderColor(palette.current.border.default)\n\n styleBuilder\n .select('.site-search__results .site-search__link:focus-visible', theme)\n .outline(`2px solid ${palette.current.border.focus}`)\n}\n\nfunction registerSearchBoxResultContentStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.site-search__results .site-search__title', theme)\n .display('block')\n .apply(palette.applyFont(palette.font.size.body, palette.font.weight.w700))\n .color(palette.current.text.default)\n .wordBreak('break-word')\n\n styleBuilder\n .select('.site-search__results .site-search__excerpt', theme)\n .display('block')\n .margin('0')\n .apply(palette.applyFont(palette.font.size.sm))\n .color(palette.current.text.subtle)\n .wordBreak('break-word')\n .display('-webkit-box')\n .lineClamp('3')\n .webkitBoxOrient('vertical')\n .overflow('hidden')\n\n styleBuilder\n .select('.site-search__results mark.site-search__highlight', theme)\n .padding('0 0.1875rem')\n .borderRadius('0.3125rem')\n .background(palette.current.button.hover.background)\n .color(palette.current.button.hover.text)\n\n styleBuilder\n .select('.site-search__results .site-search__message', theme)\n .margin('0')\n .padding('0.625rem 0.75rem')\n .borderRadius(palette.radii.md)\n .border(`1px dashed ${palette.current.border.default}`)\n .background(palette.current.surface.rest.background)\n .color(palette.current.text.subtle)\n\n styleBuilder\n .select('.site-search__results .site-search__message--error', theme)\n .border(`1px solid ${palette.semanticTone.danger.surface.rest.border}`)\n .background(palette.semanticTone.danger.surface.rest.background)\n .color(palette.semanticTone.danger.surface.rest.text)\n\n styleBuilder\n .select('.site-search__results .site-search__message--empty', theme)\n .border(`1px solid ${palette.semanticTone.warning.surface.rest.border}`)\n .background(palette.semanticTone.warning.surface.rest.background)\n .color(palette.semanticTone.warning.surface.rest.text)\n}\n","import {\n styleBuilder,\n type ThemeMode,\n type ThemePalette,\n themes,\n} from '@purestack/ts-style'\n\nexport function registerSignInStyles() {\n themes.forEach((theme, palette) => {\n registerSignInDisclosureStyles(theme)\n registerSignInAuthStateStyles(theme)\n registerSignInPanelPlacementStyles(theme)\n registerSignInAvatarStyles(theme, palette)\n })\n}\n\nfunction registerSignInDisclosureStyles(theme: ThemeMode) {\n styleBuilder.select('.sign-in', theme).display('inline-block').lineHeight('0')\n}\n\nfunction registerSignInAuthStateStyles(theme: ThemeMode) {\n styleBuilder\n .select('.sign-in__signed-out-view, .sign-in__signed-in-view', theme)\n .display('inline-flex')\n .alignItems('center')\n .justifyContent('center')\n .width('100%')\n .height('100%')\n\n styleBuilder\n .select(\n '.sign-in__signed-in-view, :scope.signed-in .sign-in:not([data-signed-in=\"false\"]) .sign-in__signed-out-view, .sign-in[data-signed-in=\"true\"] .sign-in__signed-out-view',\n theme,\n )\n .display('none')\n\n styleBuilder\n .select(\n ':scope.signed-in .sign-in:not([data-signed-in=\"false\"]) .sign-in__signed-in-view, .sign-in[data-signed-in=\"true\"] .sign-in__signed-in-view',\n theme,\n )\n .display('inline-flex')\n\n styleBuilder\n .select(\n '.sign-in__signed-in-action, :scope.signed-in .sign-in:not([data-signed-in=\"false\"]) .sign-in__signed-out-action, .sign-in[data-signed-in=\"true\"] .sign-in__signed-out-action',\n theme,\n )\n .display('none')\n\n styleBuilder\n .select(\n ':scope.signed-in .sign-in:not([data-signed-in=\"false\"]) .sign-in__signed-in-action, .sign-in[data-signed-in=\"true\"] .sign-in__signed-in-action',\n theme,\n )\n .display('inline-flex')\n}\n\nfunction registerSignInPanelPlacementStyles(theme: ThemeMode) {\n styleBuilder\n .select('.sign-in__panel', theme)\n .position('absolute')\n .display('block')\n .top('100%')\n .right('0')\n .zIndex(60)\n .minWidth('11.25rem')\n}\n\nfunction registerSignInAvatarStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder\n .select('.sign-in__avatar', theme)\n .display('block')\n .objectFit('cover')\n .borderRadius(palette.radii.pill)\n}\n","import {\n styleBuilder,\n type ThemeMode,\n type ThemePalette,\n themes,\n} from '@purestack/ts-style'\n\nexport function registerTabsStyles() {\n themes.forEach((theme, palette) => {\n registerTabsShellStyles(theme, palette)\n registerTabsControlStyles(theme, palette)\n registerTabsPanelStyles(theme)\n registerTabsResponsiveStyles(theme)\n })\n}\n\nfunction registerTabsShellStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder\n .select('.tabs', theme)\n .display('grid')\n .gap('0.6em')\n .alignContent('start')\n .padding('1em')\n .boxShadow(palette.effect.softShadow)\n\n styleBuilder\n .select('.tabs__list', theme)\n .display('grid')\n .gridTemplateColumns('repeat(auto-fit, minmax(7.5rem, 1fr))')\n .gap('0.6em 0.4em')\n .alignItems('stretch')\n .alignContent('start')\n .minWidth('0')\n\n styleBuilder.select('.tabs__item', theme).display('contents')\n\n styleBuilder\n .select('.tabs__tabs-row', theme)\n .display('none')\n .alignItems('center')\n .gap('0.5em')\n .minWidth('0')\n\n styleBuilder\n .select('.tabs__tab-buttons', theme)\n .display('flex')\n .alignItems('center')\n .gap('0.5em')\n .minWidth('0')\n .flex('1')\n .overflow('hidden')\n\n styleBuilder\n .select('.tabs__overflow', theme)\n .display('none')\n .position('relative')\n .flexShrink('0')\n\n styleBuilder.select('.tabs__overflow--visible', theme).display('inline-flex')\n\n styleBuilder\n .select('.tabs__overflow-toggle', theme)\n .width('2.3em')\n .height('2.3em')\n .padding('0')\n\n styleBuilder\n .select('.tabs__overflow-menu', theme)\n .display('none')\n .position('absolute')\n .right('0')\n .top('calc(100% + 0.375rem)')\n .zIndex(20)\n .minWidth('100%')\n .width('max-content')\n .maxWidth('min(92vw, 28.75rem)')\n .padding('0.375rem')\n .borderRadius(palette.radii.md)\n .border('1px solid transparent')\n .boxShadow(palette.effect.softShadow)\n\n styleBuilder\n .select('.tabs__overflow--open .tabs__overflow-menu', theme)\n .display('grid')\n .gap('0.25rem')\n\n styleBuilder\n .select('.tabs__overflow-option', theme)\n .width('100%')\n .padding('0.4em 0.6em')\n .textAlign('left')\n .whiteSpace('nowrap')\n .apply(palette.applyFont(palette.font.size.xxs, palette.font.weight.w600))\n\n styleBuilder.select('.tabs__overflow-option:hover', theme)\n\n styleBuilder\n .select('.tabs__select-wrap', theme)\n .display('none')\n .margin('0.125rem 0 0.25rem')\n\n styleBuilder\n .select('.tabs__select', theme)\n .display('block')\n .width('100%')\n .minHeight('2.625rem')\n .padding('0.625rem 2.5rem 0.625rem 0.75rem')\n .borderRadius(palette.radii.md)\n .border('1px solid transparent')\n .apply(palette.applyFont(palette.font.size.xs, palette.font.weight.w600))\n .appearance('none')\n .webkitAppearance('none')\n .mozAppearance('none')\n}\n\nfunction registerTabsControlStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder\n .select('.tabs__control', theme)\n .position('absolute')\n .width('1px')\n .height('1px')\n .opacity('0')\n .pointerEvents('none')\n\n styleBuilder\n .select('.tabs__tab, .tabs__tab-buttons > .btn', theme)\n .display('inline-flex')\n .alignItems('center')\n .justifyContent('center')\n .padding('0.5em 0.75em')\n .apply(palette.applyFont(palette.font.size.xxs, palette.font.weight.w700))\n .gap('0.5em')\n .overflow('hidden')\n .textAlign('center')\n .cursor('pointer')\n .transition(\n 'background 160ms ease, color 160ms ease, border-color 160ms ease',\n )\n\n styleBuilder.select('.tabs__tab', theme).gridRow('1')\n\n styleBuilder\n .select('.tabs__tab-buttons > .btn', theme)\n .flexShrink('0')\n .whiteSpace('nowrap')\n\n styleBuilder.select('.tabs__tab-buttons > .btn:hover', theme)\n\n styleBuilder.select('.tabs__tab-buttons > .btn.active', theme)\n\n styleBuilder\n .select('.tabs__tab-icon', theme)\n .display('inline-flex')\n .alignItems('center')\n .justifyContent('center')\n .width('1.7em')\n .height('1.7em')\n .flexShrink('0')\n\n styleBuilder\n .select('.tabs__tab-icon svg', theme)\n .display('block')\n .width('100%')\n .height('100%')\n\n styleBuilder.select('.tabs__tab-label', theme).display('inline-block')\n styleBuilder\n .select('.tabs__tab-label', theme)\n .overflow('hidden')\n .textOverflow('ellipsis')\n .whiteSpace('nowrap')\n .maxWidth('100%')\n\n styleBuilder\n .select('.tabs__control:disabled + .tabs__tab, .tabs__tab--disabled', theme)\n .opacity('0.45')\n .cursor('not-allowed')\n\n styleBuilder\n .select('.tabs__tab-buttons > .btn:disabled', theme)\n .opacity('0.45')\n .cursor('not-allowed')\n\n styleBuilder\n .select('.tabs__control:focus-visible + .tabs__tab', theme)\n .outline('2px solid currentColor')\n .outlineOffset('2px')\n\n styleBuilder\n .select('.tabs__tab-buttons > .btn[hidden]', theme)\n .display('none')\n}\n\nfunction registerTabsPanelStyles(theme: ThemeMode) {\n styleBuilder\n .select('.tabs__panel', theme)\n .gridRow('2')\n .gridColumn('1 / -1')\n .display('none')\n .minWidth('0')\n .padding('0')\n\n styleBuilder\n .select('.tabs__control:checked + .tabs__tab + .tabs__panel', theme)\n .display('block')\n\n styleBuilder\n .select(\n '.tabs__list:not(:has(.tabs__control:checked)) .tabs__item:first-child .tabs__panel',\n theme,\n )\n .display('block')\n\n styleBuilder.select('.tabs__panel-body', theme)\n}\n\nfunction registerTabsResponsiveStyles(theme: ThemeMode) {\n styleBuilder\n .select('.tabs--enhanced > .tabs__tabs-row', theme)\n .display('flex')\n\n styleBuilder\n .select('.tabs--compact > .tabs__select-wrap', theme)\n .display('block')\n\n styleBuilder\n .select('.tabs--enhanced > .tabs__list > .tabs__item > .tabs__tab', theme)\n .display('none')\n\n styleBuilder.select('.tabs--compact > .tabs__tabs-row', theme).display('none')\n\n styleBuilder\n .select('.tabs--compact > .tabs__list', theme)\n .gridTemplateColumns('1fr')\n}\n","import {\n styleBuilder,\n type ThemeMode,\n type ThemePalette,\n themes,\n} from '@purestack/ts-style'\n\nconst GLYPH_MOTION =\n 'transform 360ms cubic-bezier(0.34, 1.56, 0.64, 1), opacity 200ms ease'\n\nexport function registerThemeToggleStyles() {\n themes.forEach((theme, palette) => {\n registerThemeToggleButtonStyles(theme, palette)\n registerThemeToggleGlyphStyles(theme)\n })\n}\n\nfunction registerThemeToggleButtonStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.theme-toggle, a.topbar__icon', theme)\n .display('inline-grid')\n .placeItems('center')\n .flexShrink('0')\n .width('2.625rem')\n .height('2.625rem')\n .padding('0')\n .borderRadius(palette.radii.pill)\n .border('1px solid transparent')\n .background('transparent')\n .color(palette.current.text.subtle)\n .cursor('pointer')\n .transition('background 160ms ease, color 160ms ease')\n\n styleBuilder\n .select('.theme-toggle:hover, a.topbar__icon:hover', theme)\n .background(palette.current.surface.hover.background)\n .borderColor(palette.current.surface.hover.border)\n .color(palette.current.text.default)\n\n styleBuilder\n .select('.theme-toggle:active, a.topbar__icon:active', theme)\n .background(palette.current.surface.active.background)\n\n styleBuilder\n .select('.theme-toggle:focus-visible, a.topbar__icon:focus-visible', theme)\n .outline(`2px solid ${palette.current.border.focus}`)\n .outlineOffset('2px')\n}\n\n/**\n * Both glyphs share one grid cell. The theme in use shows its own glyph and\n * tucks the other away rotated, so a switch reads as one turning motion.\n */\nfunction registerThemeToggleGlyphStyles(theme: ThemeMode) {\n const shown = theme === 'dark' ? 'dark' : 'light'\n const hidden = theme === 'dark' ? 'light' : 'dark'\n const hiddenTurn = theme === 'dark' ? '90deg' : '-90deg'\n\n styleBuilder\n .select('.theme-toggle .theme-toggle__glyph, a.topbar__icon .icon', theme)\n .gridArea('1 / 1')\n .width('1.25rem')\n .height('1.25rem')\n\n styleBuilder\n .select(`.theme-toggle .theme-toggle__glyph--${shown}`, theme)\n .opacity(1)\n .transform('rotate(0deg) scale(1)')\n\n styleBuilder\n .select(`.theme-toggle .theme-toggle__glyph--${hidden}`, theme)\n .opacity(0)\n .transform(`rotate(${hiddenTurn}) scale(0.5)`)\n\n // Animate only once the runtime has settled the first theme, so a page\n // never loads with the glyphs mid-turn.\n styleBuilder\n .select(':scope[data-theme-ready] .theme-toggle__glyph', theme)\n .transition(GLYPH_MOTION)\n\n styleBuilder\n .select(':scope[data-theme-ready] .theme-toggle__glyph', theme)\n .media('prefers-reduced-motion: reduce')\n .transition('none')\n}\n","import { styleBuilder, themes } from '@purestack/ts-style'\n\nexport function registerVirtualListStyles() {\n themes.forEach((theme) => {\n styleBuilder\n .select('.virtual-list', theme)\n .overflowY('auto')\n .overflowX('auto')\n .minWidth('0')\n\n styleBuilder\n .select('.virtual-list__spacer', theme)\n .position('relative')\n .minWidth('0')\n\n styleBuilder\n .select('.virtual-list__window', theme)\n .position('absolute')\n .top('0')\n .right('0')\n .left('0')\n .willChange('transform')\n\n styleBuilder\n .select('.virtual-list__item', theme)\n .overflow('visible')\n .minWidth('0')\n\n styleBuilder\n .select('.variable-virtual-list .virtual-list__item', theme)\n .overflow('visible')\n .minWidth('0')\n })\n}\n","import { styleBuilder, themes } from '@purestack/ts-style'\n\nexport function registerVirtualTableStyles() {\n themes.forEach((theme) => {\n styleBuilder\n .select('.virtual-table__table th, .virtual-table__table td', theme)\n .verticalAlign('middle')\n\n styleBuilder\n .select('.virtual-table__table thead', theme)\n .position('sticky')\n .top('0')\n .zIndex(2)\n\n styleBuilder\n .select(\n '.virtual-table__table tfoot th, .virtual-table__table tfoot td',\n theme,\n )\n .position('sticky')\n .bottom('0')\n .zIndex(1)\n })\n}\n","import { registerUtilityStyles } from '@purestack/ts-style'\nimport { registerBadgeStyles } from './standard/badge/badgeStyle'\nimport { registerBarChartStyles } from './standard/barChart/barChartStyle'\nimport { registerButtonStyles } from './standard/btn/btnStyle'\nimport { registerBtnGroupStyles } from './standard/btnGroup/btnGroupStyle'\nimport { registerClassicLogoStyles } from './standard/classicLogo/classicLogoStyle'\nimport { registerComposerStyles } from './standard/composer/composerStyle'\nimport { registerConsentStyles } from './standard/consent/consentStyle'\nimport { registerContactFormStyles } from './standard/contactForm/contactFormStyle'\nimport { registerDoughnutChartStyles } from './standard/doughnutChart/doughnutChartStyle'\nimport { registerDropFilesStyles } from './standard/dropFiles/dropFilesStyle'\nimport { registerExpandablePanelStyles } from './standard/expandablePanel/expandablePanelStyle'\nimport { registerFlexStyles } from './standard/flex/flexStyle'\nimport { registerFooterStyles } from './standard/footer/footerStyle'\nimport { registerFormStyles } from './standard/form/formStyle'\nimport { registerGridStyles } from './standard/grid/gridStyle'\nimport { registerIconStyles } from './standard/icon/iconStyle'\nimport { registerLineChartStyles } from './standard/lineChart/lineChartStyle'\nimport { registerLogoStyles } from './standard/logo/logoStyle'\nimport { registerModalStyles } from './standard/modal/modalStyle'\nimport { registerNavStyles } from './standard/navMenu/navMenuStyle'\nimport { registerPageTocStyles } from './standard/pageToc/pageTocStyle'\nimport { registerPanelStyles } from './standard/panel/panelStyle'\nimport { registerSearchBoxStyles } from './standard/searchBox/searchBoxStyle'\nimport { registerSignInStyles } from './standard/signIn/signInStyle'\nimport { registerTabsStyles } from './standard/tabs/tabsStyle'\nimport { registerThemeToggleStyles } from './standard/themeToggle/themeToggleStyle'\nimport { registerTopBarStyles } from './standard/topBar/topBarStyle'\nimport { registerVirtualListStyles } from './standard/virtualList/virtualListStyle'\nimport { registerVirtualTableStyles } from './standard/virtualList/virtualTableStyle'\n\nexport function registerStyles() {\n registerUtilityStyles()\n registerBarChartStyles()\n registerBadgeStyles()\n registerButtonStyles()\n registerBtnGroupStyles()\n registerComposerStyles()\n registerConsentStyles()\n registerContactFormStyles()\n registerDoughnutChartStyles()\n registerDropFilesStyles()\n registerExpandablePanelStyles()\n registerFlexStyles()\n registerFooterStyles()\n registerFormStyles()\n registerGridStyles()\n registerIconStyles()\n registerLineChartStyles()\n registerLogoStyles()\n registerClassicLogoStyles()\n registerModalStyles()\n registerNavStyles()\n registerPageTocStyles()\n registerPanelStyles()\n registerSearchBoxStyles()\n registerSignInStyles()\n registerTabsStyles()\n registerThemeToggleStyles()\n registerTopBarStyles()\n registerVirtualListStyles()\n registerVirtualTableStyles()\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport { sref } from 'regor'\n\nexport interface ToastItem {\n id: string\n message: string\n tone: SemanticTone\n}\n\nconst TOAST_TIMEOUT_MS: Partial<Record<SemanticTone, number>> = {\n info: 5000,\n success: 5000,\n warning: 10000,\n}\n\nexport class ToastStore {\n readonly items = sref<ToastItem[]>([])\n private nextId = 0\n private readonly timers = new Map<string, ReturnType<typeof setTimeout>>()\n\n notify = (text: string, tone: SemanticTone = 'info') => {\n if (!text) return\n const toast: ToastItem = {\n id: `toast-${++this.nextId}`,\n message: text,\n tone,\n }\n this.items([...this.items(), toast])\n const timeout = TOAST_TIMEOUT_MS[tone]\n if (timeout) {\n this.timers.set(\n toast.id,\n setTimeout(() => this.dismiss(toast.id), timeout),\n )\n }\n }\n\n dismiss = (id: string) => {\n const timer = this.timers.get(id)\n if (timer) clearTimeout(timer)\n this.timers.delete(id)\n this.items(this.items().filter((toast) => toast.id !== id))\n }\n\n clear = () => {\n for (const timer of this.timers.values()) clearTimeout(timer)\n this.timers.clear()\n this.items([])\n }\n}\n"],"mappings":"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G;AACnB;AAEA,SAAS,kBAAkB,UAAoB;CAC7C,OAAQ,UAAsC,cAAc;AAC9D;;;;ACxBA,MAAa,8CAA8B,IAAI,IAAI;CACjD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAED,MAAa,iDAAiC,IAAI,IAAI;CACpD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;C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"}
1
+ {"version":3,"file":"ts-components.mjs","names":["VALUE_LABEL_OFFSET","CATEGORY_LABEL_Y","resolveDomain","resolveAriaLabel","resolveItems","DEFAULT_BUTTON_VARIANT","resolveButtonStateClasses","resolveShowStartIcon","resolveShowEndIcon","logoTemplate","hasFileTransfer","resolveAriaLabel","resolveAlignClass","resolveJustifyClass","resolveAutoCompleteOption","normalizeSearchText","wrapIndex","resolveKeywords","resolvePositiveNumber","findOffsetIndex","resolvePositiveNumber"],"sources":["../src/standard/alertBox/alertBox.ts","../src/standard/componentVariant.ts","../src/standard/badge/badge.ts","../src/standard/chart/chartDefaults.ts","../src/standard/chart/chartUtils.ts","../src/standard/chart/cartesianChart.ts","../src/standard/barChart/barChart.ts","../src/standard/btn/btn.ts","../src/standard/btnGroup/btnGroup.ts","../src/standard/classicLogo/classicLogo.ts","../src/standard/autoId.ts","../src/standard/composer/emailHtmlPolicy.ts","../src/standard/composer/composer.ts","../src/standard/consent/consent.ts","../src/standard/contactForm/contactForm.ts","../src/standard/doughnutChart/doughnutChart.ts","../src/standard/dropFiles/dropFiles.ts","../src/standard/expandablePanel/expandablePanel.ts","../src/standard/flex/flex.ts","../src/standard/footer/footer.ts","../src/standard/form/autoCompleteInput.ts","../src/standard/form/formCheck.ts","../src/standard/form/form.ts","../src/standard/form/formInputField.ts","../src/standard/form/formSelectField.ts","../src/standard/form/multiAutoCompleteInput.ts","../src/standard/grid/grid.ts","../src/standard/icon/icon.ts","../src/standard/landing/codeShowcase.ts","../src/standard/landing/comparisonColumn.ts","../src/standard/landing/comparisonFeature.ts","../src/standard/landing/comparisonTable.ts","../src/standard/landing/ctaSection.ts","../src/standard/landing/featureCard.ts","../src/standard/landing/landingBand.ts","../src/standard/landing/landingSection.ts","../src/standard/landing/metricItem.ts","../src/standard/landing/metricStrip.ts","../src/standard/landing/landing.ts","../src/standard/lineChart/lineChart.ts","../src/standard/logo/logo.ts","../src/standard/modal/modalStore.ts","../src/standard/modal/modal.ts","../src/standard/navMenu/navMenu.ts","../src/standard/pageLinks/pageLinks.ts","../src/standard/pageScript/pageScript.ts","../src/standard/pageToc/pageToc.ts","../src/standard/panel/panel.ts","../src/standard/pricing/pricing.ts","../src/standard/searchBox/searchBox.ts","../src/standard/sectionHeader/sectionHeader.ts","../src/standard/signIn/signIn.ts","../src/standard/tabs/tabs.ts","../src/standard/themeToggle/themeToggle.ts","../src/standard/toast/toastHost.ts","../src/standard/topBar/topBar.ts","../src/standard/virtualList/variableVirtualTable.ts","../src/standard/virtualList/virtualList.ts","../src/standard/virtualList/virtualTable.ts","../src/defineComponents.ts","../src/standard/badge/badgeStyle.ts","../src/standard/barChart/barChartStyle.ts","../src/standard/btn/btnStyle.ts","../src/standard/btnGroup/btnGroupStyle.ts","../src/standard/classicLogo/classicLogoStyle.ts","../src/standard/composer/composerCanvasSharedStyle.ts","../src/standard/composer/composerCanvasInitialStyle.ts","../src/standard/composer/composerStyle.ts","../src/standard/consent/consentStyle.ts","../src/standard/contactForm/contactFormStyle.ts","../src/standard/doughnutChart/doughnutChartStyle.ts","../src/standard/dropFiles/dropFilesStyle.ts","../src/standard/expandablePanel/expandablePanelStyle.ts","../src/standard/flex/flexStyle.ts","../src/standard/footer/footerStyle.ts","../src/standard/form/formStyle.ts","../src/standard/grid/gridStyle.ts","../src/standard/icon/iconStyle.ts","../src/standard/lineChart/lineChartStyle.ts","../src/standard/logo/logoStyle.ts","../src/standard/modal/modalStyle.ts","../src/standard/topBar/topBarStyle.ts","../src/standard/navMenu/navMenuStyle.ts","../src/standard/pageToc/pageTocStyle.ts","../src/standard/panel/panelStyle.ts","../src/standard/searchBox/searchBoxStyle.ts","../src/standard/signIn/signInStyle.ts","../src/standard/tabs/tabsStyle.ts","../src/standard/themeToggle/themeToggleStyle.ts","../src/standard/virtualList/virtualListStyle.ts","../src/standard/virtualList/virtualTableStyle.ts","../src/registerStyles.ts","../src/plugin.ts","../src/standard/toast/toastStore.ts"],"sourcesContent":["import type { SemanticTone } from '@purestack/ts-style'\nimport { defineComponent, html, type RefOrValue } from 'regor'\nimport type {\n ComponentVariant,\n ComponentVariantMode,\n} from '../componentVariant'\n\nexport interface AlertBox {\n title?: RefOrValue<string>\n eyebrow?: RefOrValue<string>\n badge?: RefOrValue<string>\n meta?: RefOrValue<string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n icon?: RefOrValue<string>\n}\n\nconst alertBoxTemplate = html`<Panel\n :tone=\"tone || 'info'\"\n :variant=\"variant || 'surface'\"\n :variantMode=\"variantMode || 'stateless'\"\n>\n <Flex align=\"start\">\n <IconFrame\n r-if=\"icon\"\n :name=\"icon\"\n :tone=\"tone || 'info'\"\n :variant=\"variant\"/>\n <Flex direction=\"column\" align=\"start\">\n <Flex r-if=\"title || eyebrow || badge\" align=\"center\" wrap=\"true\">\n <span r-if=\"eyebrow\">{{ eyebrow }}</span>\n <strong r-if=\"title\">{{ title }}</strong>\n <Badge :tone=\"tone || 'info'\" r-if=\"badge\">{{ badge }}</Badge>\n </Flex>\n <div><slot></slot></div>\n <Flex align=\"center\" wrap=\"true\">\n <slot name=\"actions\"></slot>\n </Flex>\n <small r-if=\"meta\">{{ meta }}</small>\n </Flex>\n </Flex>\n</Panel>`\n\nfunction defineAlertBoxComponent() {\n return defineComponent<AlertBox>(alertBoxTemplate, {\n props: [\n 'title',\n 'eyebrow',\n 'badge',\n 'meta',\n 'tone',\n 'variant',\n 'variantMode',\n 'icon',\n ],\n })\n}\n\nexport function defineAlertComponents() {\n return {\n alertBox: defineAlertBoxComponent(),\n }\n}\n","import { getSemanticToneClass, type SemanticTone } from '@purestack/ts-style'\nimport { type RefOrValue, unref } from 'regor'\n\nexport type ComponentVariant =\n | 'none'\n | 'solid'\n | 'surface'\n | 'surfaceAlt'\n | 'spotlight'\n | 'glass'\n | 'flat'\n | 'flatAlt'\n | 'flatSolid'\n | 'outlineFill'\n | 'outline'\n | 'subtle'\n | 'subtleBtn'\n | 'link'\n | 'sheen'\n | 'underline'\n | 'rail'\n | 'bracket'\n\nexport type ComponentVariantMode = 'stateful' | 'stateless'\n\nexport const DEFAULT_COMPONENT_VARIANT: ComponentVariant = 'solid'\nexport const DEFAULT_COMPONENT_VARIANT_MODE: ComponentVariantMode = 'stateful'\n\nexport interface ComponentClassProps {\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n}\n\nexport interface ResolveComponentClassesOptions {\n defaultVariant?: ComponentVariant\n defaultVariantMode?: ComponentVariantMode\n classes?: Array<RefOrValue<string | undefined | false>>\n}\n\nconst STATELESS_COMPONENT_VARIANT_CLASSES: Record<ComponentVariant, string> = {\n none: '',\n solid: 'b-1 rounded-md tone-fill-button tone-border-button tone-text-button',\n surface:\n 'b-1 rounded-md tone-fill-surface tone-border-surface tone-text-surface',\n surfaceAlt:\n 'b-1 rounded-md tone-fill-surface-alt tone-border-surface-alt tone-text-surface-alt',\n spotlight:\n 'b-1 rounded-md tone-fill-spotlight tone-border-surface-alt tone-text-surface-alt',\n glass:\n 'b-1 rounded-md tone-fill-glass tone-border-surface-alt tone-text-surface-alt',\n flat: 'b-1 rounded-md tone-fill-flat tone-border-surface tone-text-surface',\n flatAlt:\n 'b-1 rounded-md tone-fill-flat-alt tone-border-surface-alt tone-text-surface-alt',\n flatSolid:\n 'b-1 rounded-md tone-fill-flat-solid tone-border-button tone-text-button',\n outlineFill: 'b-2 rounded-md tone-border-button tone-text',\n outline: 'b-2 rounded-md tone-text',\n subtle: 'b-0 rounded-md tone-text',\n subtleBtn: 'b-0 rounded-md tone-text',\n link: 'tone-text',\n sheen: 'tone-text-bg-button',\n underline: 'tone-text',\n rail: 'bl-1 inset-size-4 pl-4 pr-3 tone-border-button tone-text',\n bracket: 'tone-text',\n}\n\nconst STATEFUL_COMPONENT_VARIANT_CLASSES = {\n spotlight:\n 'tone-fill-spotlight-hover tone-fill-spotlight-active tone-border-surface-alt-hover tone-border-surface-alt-active tone-text-surface-alt-hover tone-text-surface-alt-active',\n glass:\n 'tone-fill-glass-hover tone-fill-glass-active tone-border-surface-alt-hover tone-border-surface-alt-active tone-text-surface-alt-hover tone-text-surface-alt-active',\n flat: 'tone-fill-flat-hover tone-fill-flat-active tone-border-surface-hover tone-border-surface-active tone-text-surface-hover tone-text-surface-active',\n flatAlt:\n 'tone-fill-flat-alt-hover tone-fill-flat-alt-active tone-border-surface-alt-hover tone-border-surface-alt-active tone-text-surface-alt-hover tone-text-surface-alt-active',\n flatSolid:\n 'tone-fill-flat-solid-hover tone-fill-flat-solid-active tone-border-button-hover tone-border-button-active tone-text-button-hover tone-text-button-active',\n solid:\n 'tone-fill-button-hover tone-fill-button-active tone-border-button-hover tone-border-button-active tone-text-button-hover tone-text-button-active',\n surface:\n 'tone-fill-surface-hover tone-fill-surface-active tone-border-surface-hover tone-border-surface-active tone-text-surface-hover tone-text-surface-active',\n surfaceAlt:\n 'tone-fill-surface-alt-hover tone-fill-surface-alt-active tone-border-surface-alt-hover tone-border-surface-alt-active tone-text-surface-alt-hover tone-text-surface-alt-active',\n outlineFill:\n 'tone-fill-button-hover tone-text-button-hover tone-fill-button-active tone-text-button-active',\n outline:\n 'b-2-hover tone-border-button-hover tone-border-button-active tone-fill-button-active tone-text-button-active',\n subtle:\n 'tone-fill-surface-hover tone-fill-surface-active tone-text-surface-hover tone-text-surface-active',\n subtleBtn:\n 'tone-fill-button-hover tone-fill-button-active tone-text-button-hover tone-text-button-active',\n link: 'underline-hover',\n sheen: 'tone-text-bg-button-hover tone-text-bg-button-active',\n underline: 'tone-inset-b-hover tone-inset-b-active',\n rail: 'tone-inset-l-hover tone-fill-active tone-text-button-active',\n bracket:\n 'tone-inset-y-hover tone-inset-y-active tone-fill-active tone-text-button-active',\n} satisfies Partial<Record<ComponentVariant, string>>\n\nconst COMPONENT_VARIANT_CLASSES = mergeComponentVariantClasses(\n STATELESS_COMPONENT_VARIANT_CLASSES,\n STATEFUL_COMPONENT_VARIANT_CLASSES,\n)\n\nconst COMPONENT_VARIANT_CLASS_MODES: Record<\n ComponentVariantMode,\n Record<ComponentVariant, string>\n> = {\n stateful: COMPONENT_VARIANT_CLASSES,\n stateless: STATELESS_COMPONENT_VARIANT_CLASSES,\n}\n\nfunction mergeComponentVariantClasses(\n base: Record<ComponentVariant, string>,\n additions: Partial<Record<ComponentVariant, string>>,\n): Record<ComponentVariant, string> {\n const merged = {} as Record<ComponentVariant, string>\n for (const variant of Object.keys(base) as ComponentVariant[]) {\n merged[variant] = [base[variant], additions[variant]]\n .filter(Boolean)\n .join(' ')\n }\n return merged\n}\n\nfunction resolveComponentVariantClassName(\n variant: RefOrValue<ComponentVariant> | undefined,\n defaultVariant: ComponentVariant = DEFAULT_COMPONENT_VARIANT,\n variantMode:\n | RefOrValue<ComponentVariantMode>\n | undefined = DEFAULT_COMPONENT_VARIANT_MODE,\n) {\n const resolvedVariant = unref(variant) || defaultVariant\n const resolvedMode = unref(variantMode) || DEFAULT_COMPONENT_VARIANT_MODE\n return COMPONENT_VARIANT_CLASS_MODES[resolvedMode][resolvedVariant]\n}\n\nexport function resolveComponentClasses(\n props: ComponentClassProps,\n options: ResolveComponentClassesOptions = {},\n) {\n return [\n resolveComponentVariantClassName(\n props.variant,\n options.defaultVariant,\n props.variantMode || options.defaultVariantMode,\n ),\n getSemanticToneClass(unref(props.tone)),\n ...(options.classes || []).map(unref),\n ]\n .filter(Boolean)\n .join(' ')\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type RefOrValue,\n} from 'regor'\nimport {\n type ComponentVariant,\n resolveComponentClasses,\n} from '../componentVariant'\n\nexport interface Badge {\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n classes?: ComputedRef<string>\n}\n\nconst badgeTemplate = html`<span class=\"badge\" :class=\"classes\"><slot></slot></span>`\n\nfunction defineBadgeComponent() {\n return defineComponent<Badge>(badgeTemplate, {\n props: ['tone', 'variant'],\n context: (head) => ({\n ...head.props,\n classes: computed(() =>\n resolveComponentClasses(head.props, {\n defaultVariant: 'surface',\n defaultVariantMode: 'stateless',\n }),\n ),\n }),\n })\n}\n\nexport function defineBadgeComponents() {\n return {\n badge: defineBadgeComponent(),\n }\n}\n","import { getThemePaletteVar } from '@purestack/ts-style'\n\nexport const DEFAULT_CHART_SIZE = '100%'\nexport const DEFAULT_CARTESIAN_CHART_WIDTH = '100%'\nexport const DEFAULT_CARTESIAN_CHART_HEIGHT = undefined\nexport const DEFAULT_CHART_EMPTY_LABEL = 'No data'\nexport const DEFAULT_CARTESIAN_GRID_LINE_COUNT = 5\n\nexport const CARTESIAN_CHART_VIEWBOX_HEIGHT = 58\nexport const CARTESIAN_CHART_PLOT_X = 8\nexport const CARTESIAN_CHART_PLOT_Y = 6\nexport const CARTESIAN_CHART_PLOT_WIDTH = 86\nexport const CARTESIAN_CHART_PLOT_HEIGHT = 43\nexport const CARTESIAN_CHART_LABEL_Y = 53.5\n\nexport const DEFAULT_CHART_COLORS = [\n getThemePaletteVar('semanticTone.accent.button.hover.bgcolor'),\n getThemePaletteVar('semanticTone.feature.button.hover.bgcolor'),\n getThemePaletteVar('semanticTone.success.button.hover.bgcolor'),\n getThemePaletteVar('semanticTone.info.button.hover.bgcolor'),\n getThemePaletteVar('semanticTone.warning.button.hover.bgcolor'),\n getThemePaletteVar('semanticTone.secondary.button.hover.bgcolor'),\n getThemePaletteVar('semanticTone.danger.button.hover.bgcolor'),\n getThemePaletteVar('semanticTone.custom.button.hover.bgcolor'),\n]\n","import { clamp } from '@purestack/ts-util'\nimport { type RefOrValue, unref } from 'regor'\n\nexport interface FormatChartNumberOptions {\n precision?: number\n}\n\nexport function readChartNumber(\n value: RefOrValue<number | string> | undefined,\n fallback: number,\n) {\n const resolved = unref(value)\n const number =\n typeof resolved === 'number'\n ? resolved\n : Number.parseFloat(String(resolved))\n return Number.isFinite(number) ? number : fallback\n}\n\nexport function clampChartNumber(\n value: RefOrValue<number | string> | undefined,\n fallback: number,\n min: number,\n max: number,\n) {\n return clamp(readChartNumber(value, fallback), min, max)\n}\n\nexport function resolveChartText(value?: RefOrValue<string>) {\n const resolved = unref(value)\n return typeof resolved === 'string' ? resolved.trim() : ''\n}\n\nexport function resolveChartSize(\n size: RefOrValue<number | string> | undefined,\n fallback: number | string | undefined,\n) {\n const resolved = unref(size)\n if (typeof resolved === 'number' && Number.isFinite(resolved)) {\n return Math.max(1, resolved)\n }\n if (typeof resolved !== 'string') return fallback\n const trimmed = resolved.trim()\n return trimmed || fallback\n}\n\nexport function resolveChartCssSize(size?: RefOrValue<number | string>) {\n const resolved = unref(size)\n if (typeof resolved === 'number' && Number.isFinite(resolved)) {\n return `${resolved}px`\n }\n if (typeof resolved !== 'string') return ''\n const trimmed = resolved.trim()\n return isNumericChartString(trimmed) ? `${trimmed}px` : trimmed\n}\n\nexport function formatChartValue(\n value: number,\n suffix: string,\n options: FormatChartNumberOptions = {},\n) {\n const formatted = Number.isInteger(value)\n ? String(value)\n : formatChartNumber(value, options)\n return suffix ? `${formatted}${suffix}` : formatted\n}\n\nexport function formatChartPoint(\n point: { x: number; y: number },\n options: FormatChartNumberOptions = {},\n) {\n return `${formatChartNumber(point.x, options)} ${formatChartNumber(point.y, options)}`\n}\n\nexport function formatChartNumber(\n value: number,\n { precision = 2 }: FormatChartNumberOptions = {},\n) {\n return Number.parseFloat(value.toFixed(precision)).toString()\n}\n\nfunction isNumericChartString(value: string) {\n return /^-?\\d+(?:\\.\\d+)?$/.test(value)\n}\n","import type { RefOrValue } from 'regor'\nimport {\n CARTESIAN_CHART_PLOT_HEIGHT,\n CARTESIAN_CHART_PLOT_WIDTH,\n CARTESIAN_CHART_PLOT_X,\n CARTESIAN_CHART_PLOT_Y,\n DEFAULT_CARTESIAN_GRID_LINE_COUNT,\n} from './chartDefaults'\nimport {\n formatChartValue,\n readChartNumber,\n resolveChartText,\n} from './chartUtils'\n\nexport interface CartesianChartDomain {\n min: number\n max: number\n}\n\nexport interface ResolvedCartesianChartGridLine {\n value: number\n formattedValue: string\n y: number\n}\n\nexport interface ResolveCartesianChartDomainOptions {\n values: number[]\n minValue?: RefOrValue<number | string>\n maxValue?: RefOrValue<number | string>\n}\n\nexport function resolveCartesianChartDomain({\n values,\n minValue,\n maxValue,\n}: ResolveCartesianChartDomainOptions): CartesianChartDomain {\n const fallbackMax = values.length ? Math.max(...values) : 1\n const fallbackMin = values.length ? Math.min(...values) : 0\n let min = Math.min(\n readChartNumber(minValue, Math.min(0, fallbackMin)),\n fallbackMin,\n 0,\n )\n let max = Math.max(\n readChartNumber(maxValue, Math.max(0, fallbackMax)),\n fallbackMax,\n 0,\n )\n\n if (min === max) {\n if (min === 0) max = 1\n else if (min > 0) min = 0\n else max = 0\n }\n\n if (min > max) [min, max] = [max, min]\n\n return { min, max }\n}\n\nexport function resolveCartesianChartGridLines(\n domain: CartesianChartDomain,\n valueSuffix?: RefOrValue<string>,\n): ResolvedCartesianChartGridLine[] {\n const suffix = resolveChartText(valueSuffix)\n const step =\n (domain.max - domain.min) / (DEFAULT_CARTESIAN_GRID_LINE_COUNT - 1)\n\n return Array.from(\n { length: DEFAULT_CARTESIAN_GRID_LINE_COUNT },\n (_, index) => {\n const value = domain.max - step * index\n return {\n value,\n formattedValue: formatChartValue(value, suffix),\n y: valueToCartesianChartY(value, domain),\n }\n },\n )\n}\n\nexport function valueToCartesianChartY(\n value: number,\n domain: CartesianChartDomain,\n) {\n const range = domain.max - domain.min\n if (range <= 0) return CARTESIAN_CHART_PLOT_Y + CARTESIAN_CHART_PLOT_HEIGHT\n const ratio = (domain.max - value) / range\n return CARTESIAN_CHART_PLOT_Y + ratio * CARTESIAN_CHART_PLOT_HEIGHT\n}\n\nexport function pointIndexToCartesianChartX(index: number, count: number) {\n if (count <= 1) {\n return CARTESIAN_CHART_PLOT_X + CARTESIAN_CHART_PLOT_WIDTH / 2\n }\n return (\n CARTESIAN_CHART_PLOT_X + (index / (count - 1)) * CARTESIAN_CHART_PLOT_WIDTH\n )\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComputedRef,\n computed,\n defineComponent,\n type RefOrValue,\n svg,\n unref,\n} from 'regor'\nimport {\n type CartesianChartDomain,\n type ResolvedCartesianChartGridLine,\n resolveCartesianChartDomain,\n resolveCartesianChartGridLines,\n valueToCartesianChartY,\n} from '../chart/cartesianChart'\nimport {\n CARTESIAN_CHART_PLOT_WIDTH,\n CARTESIAN_CHART_PLOT_X,\n DEFAULT_CARTESIAN_CHART_HEIGHT,\n DEFAULT_CARTESIAN_CHART_WIDTH,\n DEFAULT_CHART_COLORS,\n DEFAULT_CHART_EMPTY_LABEL,\n} from '../chart/chartDefaults'\nimport {\n formatChartValue,\n readChartNumber,\n resolveChartSize,\n resolveChartText,\n} from '../chart/chartUtils'\nimport type {\n ComponentVariant,\n ComponentVariantMode,\n} from '../componentVariant'\nimport { resolveComponentClasses } from '../componentVariant'\n\nexport interface BarChartItem {\n label?: RefOrValue<string>\n value?: RefOrValue<number | string>\n color?: RefOrValue<string>\n}\n\nexport interface ResolvedBarChartItem {\n label: string\n value: number\n formattedValue: string\n color: string\n x: number\n y: number\n width: number\n height: number\n valueLabelX: number\n valueLabelY: number\n valueLabelBaseline: string\n labelX: number\n labelY: number\n roundedTop: number\n}\n\nexport interface ResolvedBarChartGridLine\n extends ResolvedCartesianChartGridLine {}\n\nexport interface BarChart {\n items?: RefOrValue<Array<RefOrValue<BarChartItem>>>\n title?: RefOrValue<string>\n description?: RefOrValue<string>\n ariaLabel?: RefOrValue<string>\n emptyLabel?: RefOrValue<string>\n valueSuffix?: RefOrValue<string>\n width?: RefOrValue<number | string>\n height?: RefOrValue<number | string>\n minValue?: RefOrValue<number | string>\n maxValue?: RefOrValue<number | string>\n animated?: RefOrValue<boolean | string>\n showValues?: RefOrValue<boolean | string>\n showLabels?: RefOrValue<boolean | string>\n showAxis?: RefOrValue<boolean | string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n classes?: ComputedRef<string>\n resolvedWidth?: ComputedRef<string | number>\n resolvedHeight?: ComputedRef<string | number | undefined>\n resolvedAriaLabel?: ComputedRef<string>\n resolvedEmptyLabel?: ComputedRef<string>\n chartItems?: ComputedRef<ResolvedBarChartItem[]>\n gridLines?: ComputedRef<ResolvedBarChartGridLine[]>\n hasItems?: ComputedRef<boolean>\n zeroLineY?: ComputedRef<number>\n}\n\nconst VALUE_LABEL_OFFSET = 2.4\nconst CATEGORY_LABEL_Y = 60\nconst BAR_WIDTH_SHARE = 0.64\nconst MIN_VISIBLE_BAR_HEIGHT = 0.35\n\nconst barChartTemplate = svg`<svg\n class=\"bar-chart\"\n :class=\"classes\"\n viewBox=\"-6 0 106 64\"\n :width=\"resolvedWidth\"\n :height=\"resolvedHeight\"\n role=\"img\"\n :aria-label=\"resolvedAriaLabel\"\n>\n <title r-if=\"title\">{{ title }}</title>\n <desc r-if=\"description\">{{ description }}</desc>\n <g class=\"bar-chart__grid\" r-if=\"hasItems && showAxis\">\n <g r-for=\"line in gridLines\" class=\"bar-chart__grid-line\">\n <line x1=\"8\" x2=\"94\" :y1=\"line.y\" :y2=\"line.y\"/>\n <text x=\"5.4\" :y=\"line.y\">{{ line.formattedValue }}</text>\n </g>\n </g>\n <line\n r-if=\"hasItems && showAxis\"\n class=\"bar-chart__zero-line\"\n x1=\"8\"\n x2=\"94\"\n :y1=\"zeroLineY\"\n :y2=\"zeroLineY\"/>\n <g class=\"bar-chart__plot\" r-if=\"hasItems\">\n <rect\n r-for=\"item in chartItems\"\n class=\"bar-chart__bar\"\n :x=\"item.x\"\n :y=\"item.y\"\n :width=\"item.width\"\n :height=\"item.height\"\n :rx=\"item.roundedTop\"\n :ry=\"item.roundedTop\"\n :fill=\"item.color\"\n :aria-label=\"item.label + ': ' + item.formattedValue\"\n >\n <title>{{ item.label + ': ' + item.formattedValue }}</title>\n <animate\n r-if=\"animated\"\n attributeName=\"height\"\n from=\"0\"\n :to=\"item.height\"\n dur=\"1720ms\"\n calcMode=\"spline\"\n keyTimes=\"0;1\"\n keySplines=\"0.16 1 0.3 1\"\n fill=\"freeze\"/>\n <animate\n r-if=\"animated\"\n attributeName=\"y\"\n :from=\"zeroLineY\"\n :to=\"item.y\"\n dur=\"1720ms\"\n calcMode=\"spline\"\n keyTimes=\"0;1\"\n keySplines=\"0.16 1 0.3 1\"\n fill=\"freeze\"/>\n </rect>\n </g>\n <g class=\"bar-chart__values\" r-if=\"hasItems && showValues\">\n <text\n r-for=\"item in chartItems\"\n class=\"bar-chart__value\"\n :x=\"item.valueLabelX\"\n :y=\"item.valueLabelY\"\n text-anchor=\"middle\"\n :dominant-baseline=\"item.valueLabelBaseline\"\n >\n {{ item.formattedValue }}\n </text>\n </g>\n <g class=\"bar-chart__labels\" r-if=\"hasItems && showLabels\">\n <text\n r-for=\"item in chartItems\"\n class=\"bar-chart__label\"\n :x=\"item.labelX\"\n :y=\"item.labelY\"\n text-anchor=\"middle\"\n >\n {{ item.label }}\n </text>\n </g>\n <text\n r-if=\"!hasItems\"\n class=\"bar-chart__empty\"\n x=\"50\"\n y=\"30\"\n text-anchor=\"middle\"\n >\n {{ resolvedEmptyLabel }}\n </text>\n</svg>`\n\nfunction defineBarChartComponent() {\n return defineComponent<BarChart>(barChartTemplate, {\n props: [\n 'items',\n 'title',\n 'description',\n 'ariaLabel',\n 'emptyLabel',\n 'valueSuffix',\n 'width',\n 'height',\n 'minValue',\n 'maxValue',\n 'animated',\n 'showValues',\n 'showLabels',\n 'showAxis',\n 'tone',\n 'variant',\n 'variantMode',\n ],\n context: (head) => resolveBarChart(head.props),\n })\n}\n\nexport function defineBarChartComponents() {\n return {\n barChart: defineBarChartComponent(),\n }\n}\n\nfunction resolveBarChart(props: BarChart): BarChart {\n const domain = computed(() => resolveDomain(props))\n\n return {\n animated: true,\n showValues: true,\n showLabels: true,\n showAxis: true,\n ...props,\n classes: computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: 'none',\n defaultVariantMode: 'stateless',\n }),\n ),\n resolvedWidth: computed(() =>\n resolveChartSize(props.width, DEFAULT_CARTESIAN_CHART_WIDTH),\n ),\n resolvedHeight: computed(() =>\n resolveChartSize(props.height, DEFAULT_CARTESIAN_CHART_HEIGHT),\n ),\n resolvedAriaLabel: computed(() => resolveAriaLabel(props)),\n resolvedEmptyLabel: computed(\n () => resolveChartText(props.emptyLabel) || DEFAULT_CHART_EMPTY_LABEL,\n ),\n chartItems: computed(() => resolveChartItems(props, domain())),\n gridLines: computed(() =>\n resolveCartesianChartGridLines(domain(), props.valueSuffix),\n ),\n hasItems: computed(() => resolveItems(props.items).length > 0),\n zeroLineY: computed(() => valueToCartesianChartY(0, domain())),\n }\n}\n\nfunction resolveChartItems(\n props: BarChart,\n domain: CartesianChartDomain,\n): ResolvedBarChartItem[] {\n const items = resolveItems(props.items)\n if (!items.length) return []\n\n const laneWidth = CARTESIAN_CHART_PLOT_WIDTH / items.length\n const barWidth = Math.max(1, laneWidth * BAR_WIDTH_SHARE)\n const valueSuffix = resolveChartText(props.valueSuffix)\n const zeroY = valueToCartesianChartY(0, domain)\n\n return items.map((item, index) => {\n const valueY = valueToCartesianChartY(item.value, domain)\n const rawHeight = Math.abs(zeroY - valueY)\n const height =\n item.value === 0 ? 0 : Math.max(rawHeight, MIN_VISIBLE_BAR_HEIGHT)\n const isNegative = item.value < 0\n const x =\n CARTESIAN_CHART_PLOT_X + laneWidth * index + (laneWidth - barWidth) / 2\n const y = isNegative\n ? zeroY\n : Math.min(valueY, zeroY) - (height - rawHeight)\n const valueLabelY = isNegative\n ? y + height + VALUE_LABEL_OFFSET\n : Math.max(2, y - VALUE_LABEL_OFFSET)\n\n return {\n label: item.label,\n value: item.value,\n formattedValue: formatChartValue(item.value, valueSuffix),\n color:\n item.color || DEFAULT_CHART_COLORS[index % DEFAULT_CHART_COLORS.length],\n x,\n y,\n width: barWidth,\n height,\n valueLabelX: x + barWidth / 2,\n valueLabelY,\n valueLabelBaseline: isNegative ? 'hanging' : 'auto',\n labelX: x + barWidth / 2,\n labelY: CATEGORY_LABEL_Y,\n roundedTop: Math.min(1.4, barWidth / 2, height / 2),\n }\n })\n}\n\ninterface ResolvedBarChartSourceItem {\n label: string\n value: number\n color: string\n}\n\nfunction resolveItems(items: BarChart['items']): ResolvedBarChartSourceItem[] {\n return (unref(items) || [])\n .map((itemInput, index) => {\n const item = unref(itemInput)\n const value = readChartNumber(item?.value, Number.NaN)\n return {\n label: resolveChartText(item?.label) || `Item ${index + 1}`,\n value,\n color: resolveChartText(item?.color),\n }\n })\n .filter((item) => Number.isFinite(item.value))\n}\n\nfunction resolveDomain(props: BarChart): CartesianChartDomain {\n const values = resolveItems(props.items).map((item) => item.value)\n return resolveCartesianChartDomain({\n values,\n minValue: props.minValue,\n maxValue: props.maxValue,\n })\n}\n\nfunction resolveAriaLabel(props: BarChart) {\n return (\n resolveChartText(props.ariaLabel) ||\n resolveChartText(props.title) ||\n 'Bar chart'\n )\n}\n","import { type PageContext, tryResolvePageContext } from '@purestack/ts-common'\nimport type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComputedRef,\n computed,\n defineComponent,\n type Emits,\n html,\n type RefOrValue,\n unref,\n} from 'regor'\nimport {\n type ComponentVariant,\n resolveComponentClasses,\n} from '../componentVariant'\n\nexport type BtnSize = 'sm' | 'md' | 'lg'\nexport type BtnType = 'button' | 'submit' | 'reset'\nexport type BtnIconPosition = 'start' | 'end'\n\nexport interface BtnBase {\n tone?: RefOrValue<SemanticTone>\n size?: RefOrValue<BtnSize>\n variant?: RefOrValue<ComponentVariant>\n icon?: RefOrValue<string>\n iconPosition?: RefOrValue<BtnIconPosition>\n iconOnly?: RefOrValue<boolean>\n ariaLabel?: RefOrValue<string>\n classes?: ComputedRef<string>\n showStartIcon?: ComputedRef<boolean>\n showEndIcon?: ComputedRef<boolean>\n emits?: Emits<'click'>\n}\n\nexport interface Btn extends BtnBase {\n type?: RefOrValue<BtnType>\n disabled?: RefOrValue<boolean>\n buttonType?: RefOrValue<BtnType>\n}\n\nexport interface BtnLink extends BtnBase {\n href?: RefOrValue<string>\n target?: RefOrValue<string>\n rel?: RefOrValue<string>\n resolvedHref?: ComputedRef<string>\n resolvedRel?: ComputedRef<string>\n}\n\nconst DEFAULT_BUTTON_VARIANT: ComponentVariant = 'solid'\n\nconst buttonTemplate = html`<button\n class=\"btn\"\n :class=\"classes\"\n :type=\"buttonType\"\n :disabled=\"disabled\"\n :aria-label=\"ariaLabel\"\n>\n <Icon class=\"btn__icon\" :name=\"icon\" r-if=\"showStartIcon\"/>\n <span class=\"btn__label\" r-if=\"!iconOnly\"><slot></slot></span>\n <Icon class=\"btn__icon\" :name=\"icon\" r-if=\"showEndIcon\"/>\n</button>`\n\nconst buttonLinkTemplate = html`<a\n class=\"btn\"\n :class=\"classes\"\n :href=\"resolvedHref\"\n :target=\"target\"\n :rel=\"resolvedRel\"\n :aria-label=\"ariaLabel\"\n>\n <Icon class=\"btn__icon\" :name=\"icon\" r-if=\"showStartIcon\"/>\n <span class=\"btn__label\" r-if=\"!iconOnly\"><slot></slot></span>\n <Icon class=\"btn__icon\" :name=\"icon\" r-if=\"showEndIcon\"/>\n</a>`\n\nfunction defineButtonComponent() {\n return defineComponent<Btn>(buttonTemplate, {\n props: [\n 'tone',\n 'size',\n 'variant',\n 'type',\n 'icon',\n 'iconPosition',\n 'iconOnly',\n 'ariaLabel',\n 'disabled',\n ],\n context: (head) => resolveBtn(head.props),\n })\n}\n\nfunction defineButtonLinkComponent() {\n return defineComponent<BtnLink>(buttonLinkTemplate, {\n props: [\n 'href',\n 'target',\n 'rel',\n 'tone',\n 'size',\n 'variant',\n 'icon',\n 'iconPosition',\n 'iconOnly',\n 'ariaLabel',\n ],\n context: (head) => resolveBtnLink(head.props, tryResolvePageContext(head)),\n })\n}\n\nexport function defineButtonComponents() {\n return {\n btn: defineButtonComponent(),\n btnLink: defineButtonLinkComponent(),\n }\n}\n\nfunction resolveBtn(props: Btn): Btn {\n return {\n ...props,\n classes: computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: DEFAULT_BUTTON_VARIANT,\n classes: resolveButtonStateClasses(props),\n }),\n ),\n buttonType: computed(() => unref(props.type) || 'button'),\n showStartIcon: computed(() => resolveShowStartIcon(props)),\n showEndIcon: computed(() => resolveShowEndIcon(props)),\n }\n}\n\nfunction resolveBtnLink(\n props: BtnLink,\n context: PageContext | undefined,\n): BtnLink {\n return {\n ...props,\n classes: computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: DEFAULT_BUTTON_VARIANT,\n classes: resolveButtonStateClasses(props),\n }),\n ),\n resolvedHref: computed(() => resolveButtonHref(props, context)),\n resolvedRel: computed(() => resolveButtonRel(props)),\n showStartIcon: computed(() => resolveShowStartIcon(props)),\n showEndIcon: computed(() => resolveShowEndIcon(props)),\n }\n}\n\nfunction resolveButtonStateClasses(props: BtnBase) {\n const size = unref(props.size)\n const hasIcon = !!unref(props.icon)\n const iconPosition = unref(props.iconPosition)\n const iconOnly = unref(props.iconOnly)\n const classes = [size ? `btn--${size}` : '']\n if (!hasIcon) return classes\n classes.push(\n iconOnly\n ? 'btn--icon-only'\n : iconPosition === 'end'\n ? 'btn--icon-end'\n : 'btn--icon-start',\n )\n return classes\n}\n\nfunction resolveShowStartIcon(props: BtnBase) {\n const hasIcon = !!unref(props.icon)\n return hasIcon && unref(props.iconPosition) !== 'end'\n}\n\nfunction resolveShowEndIcon(props: BtnBase) {\n const hasIcon = !!unref(props.icon)\n return hasIcon && unref(props.iconPosition) === 'end'\n}\n\nfunction resolveButtonHref(props: BtnLink, context: PageContext | undefined) {\n const value = unref(props.href)\n const href = typeof value === 'string' ? value.trim() : undefined\n return href ? (context?.resolvePublicHref(href) ?? href) : undefined\n}\n\nfunction resolveButtonRel(props: BtnLink) {\n const rel = unref(props.rel)\n if (rel) return rel\n return unref(props.target) === '_blank' ? 'noopener noreferrer' : undefined\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type RefOrValue,\n unref,\n} from 'regor'\nimport type { BtnIconPosition, BtnSize } from '../btn/btn'\nimport {\n type ComponentVariant,\n type ComponentVariantMode,\n resolveComponentClasses,\n} from '../componentVariant'\n\nexport type BtnGroupAlign = 'start' | 'center' | 'end'\nexport type BtnGroupDropDownAlign = 'start' | 'end'\n\nexport interface BtnGroup {\n align?: RefOrValue<BtnGroupAlign>\n wrap?: RefOrValue<boolean>\n classes?: ComputedRef<string>\n}\n\nexport interface BtnGroupDropDown {\n label?: RefOrValue<string>\n icon?: RefOrValue<string>\n iconPosition?: RefOrValue<BtnIconPosition>\n iconOnly?: RefOrValue<boolean>\n ariaLabel?: RefOrValue<string>\n tone?: RefOrValue<SemanticTone>\n size?: RefOrValue<BtnSize>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n menuTone?: RefOrValue<SemanticTone>\n menuVariant?: RefOrValue<ComponentVariant>\n menuVariantMode?: RefOrValue<ComponentVariantMode>\n align?: RefOrValue<BtnGroupDropDownAlign>\n classes?: ComputedRef<string>\n triggerClasses?: ComputedRef<string>\n menuClasses?: ComputedRef<string>\n resolvedAlign?: ComputedRef<BtnGroupDropDownAlign>\n resolvedLabel?: ComputedRef<string>\n resolvedIcon?: ComputedRef<string>\n resolvedAriaLabel?: ComputedRef<string | undefined>\n showStartIcon?: ComputedRef<boolean>\n showEndIcon?: ComputedRef<boolean>\n}\n\nconst DEFAULT_BUTTON_VARIANT: ComponentVariant = 'solid'\nconst DEFAULT_DROPDOWN_LABEL = 'More'\nconst DEFAULT_DROPDOWN_ICON = 'lucide:chevron-down'\n\nconst btnGroupTemplate = html`<div class=\"btn-group\" :class=\"classes\">\n <slot></slot>\n</div>`\n\nconst btnGroupDropDownTemplate = html`<details\n class=\"btn-group__dropdown\"\n :class=\"classes\"\n :data-menu-align=\"resolvedAlign\"\n data-menu-runtime\n>\n <summary\n class=\"btn btn-group__toggle\"\n :class=\"triggerClasses\"\n :aria-label=\"resolvedAriaLabel\"\n >\n <Icon class=\"btn__icon\" :name=\"resolvedIcon\" r-if=\"showStartIcon\"/>\n <span class=\"btn__label\" r-if=\"!iconOnly\">{{ resolvedLabel }}</span>\n <Icon class=\"btn__icon\" :name=\"resolvedIcon\" r-if=\"showEndIcon\"/>\n </summary>\n <div class=\"btn-group__menu\" :class=\"menuClasses\" data-menu-panel>\n <slot></slot>\n </div>\n</details>`\n\nfunction defineBtnGroupComponent() {\n return defineComponent<BtnGroup>(btnGroupTemplate, {\n props: ['align', 'wrap'],\n context: (head) => resolveBtnGroup(head.props),\n })\n}\n\nfunction defineBtnGroupDropDownComponent() {\n return defineComponent<BtnGroupDropDown>(btnGroupDropDownTemplate, {\n props: [\n 'label',\n 'icon',\n 'iconPosition',\n 'iconOnly',\n 'ariaLabel',\n 'tone',\n 'size',\n 'variant',\n 'variantMode',\n 'menuTone',\n 'menuVariant',\n 'menuVariantMode',\n 'align',\n ],\n context: (head) => resolveBtnGroupDropDown(head.props),\n })\n}\n\nexport function defineBtnGroupComponents() {\n return {\n btnGroup: defineBtnGroupComponent(),\n btnGroupDropDown: defineBtnGroupDropDownComponent(),\n }\n}\n\nfunction resolveBtnGroup(props: BtnGroup): BtnGroup {\n return {\n ...props,\n classes: computed(() =>\n [\n resolveBtnGroupAlignClass(props),\n unref(props.wrap) ? 'btn-group--wrap' : '',\n ]\n .filter(Boolean)\n .join(' '),\n ),\n }\n}\n\nfunction resolveBtnGroupDropDown(props: BtnGroupDropDown): BtnGroupDropDown {\n return {\n ...props,\n classes: computed(() => resolveDropDownClasses(props)),\n triggerClasses: computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: DEFAULT_BUTTON_VARIANT,\n classes: resolveButtonStateClasses(props),\n }),\n ),\n menuClasses: computed(() =>\n resolveComponentClasses(\n {\n tone: props.menuTone,\n variant: props.menuVariant,\n variantMode: props.menuVariantMode,\n },\n {\n defaultVariant: 'surfaceAlt',\n defaultVariantMode: 'stateless',\n },\n ),\n ),\n resolvedAlign: computed(() => resolveDropDownAlign(props)),\n resolvedLabel: computed(() => unref(props.label) || DEFAULT_DROPDOWN_LABEL),\n resolvedIcon: computed(() => unref(props.icon) || DEFAULT_DROPDOWN_ICON),\n resolvedAriaLabel: computed(() => resolveDropDownAriaLabel(props)),\n showStartIcon: computed(() => resolveShowStartIcon(props)),\n showEndIcon: computed(() => resolveShowEndIcon(props)),\n }\n}\n\nfunction resolveBtnGroupAlignClass(props: BtnGroup) {\n const align = unref(props.align)\n return align ? `btn-group--${align}` : ''\n}\n\nfunction resolveDropDownClasses(props: BtnGroupDropDown) {\n return `btn-group__dropdown--${resolveDropDownAlign(props)}`\n}\n\nfunction resolveDropDownAlign(props: BtnGroupDropDown): BtnGroupDropDownAlign {\n return unref(props.align) || 'end'\n}\n\nfunction resolveButtonStateClasses(props: BtnGroupDropDown) {\n const size = unref(props.size)\n const hasIcon = !!resolveIconName(props)\n const iconPosition = unref(props.iconPosition)\n const iconOnly = unref(props.iconOnly)\n const classes = [size ? `btn--${size}` : '']\n if (!hasIcon) return classes\n classes.push(\n iconOnly\n ? 'btn--icon-only'\n : iconPosition === 'start'\n ? 'btn--icon-start'\n : 'btn--icon-end',\n )\n return classes\n}\n\nfunction resolveShowStartIcon(props: BtnGroupDropDown) {\n return !!resolveIconName(props) && unref(props.iconPosition) === 'start'\n}\n\nfunction resolveShowEndIcon(props: BtnGroupDropDown) {\n return !!resolveIconName(props) && unref(props.iconPosition) !== 'start'\n}\n\nfunction resolveIconName(props: BtnGroupDropDown) {\n return unref(props.icon) || DEFAULT_DROPDOWN_ICON\n}\n\nfunction resolveDropDownAriaLabel(props: BtnGroupDropDown) {\n const ariaLabel = unref(props.ariaLabel)\n if (ariaLabel) return ariaLabel\n return unref(props.iconOnly)\n ? unref(props.label) || 'More actions'\n : undefined\n}\n","import {\n type ClassicLogoConfig,\n type PageContext,\n tryResolvePageContext,\n} from '@purestack/ts-common'\nimport {\n getCurrentThemePaletteVar,\n getThemePaletteVar,\n normalizeThemeVariableReference,\n} from '@purestack/ts-style'\nimport {\n type ComputedRef,\n computed,\n defineComponent,\n flatten,\n html,\n type RefOrValue,\n unref,\n} from 'regor'\n\nconst logoTemplate = html`<div class=\"classic-logo\" :style=\"logo.layoutStyle\">\n <a\n class=\"classic-logo__link\"\n :href=\"logo.href === null ? undefined : (logo.href ?? '/')\"\n :aria-label=\"logo.ariaLabel\"\n >\n <span\n class=\"classic-logo__glyph\"\n :style=\"logo.glyphStyle\"\n aria-hidden=\"true\"\n >\n <Icon :name=\"logo.icon\" r-if=\"logo.icon\"/>\n <span class=\"classic-logo__glyph-mark\" r-else></span>\n </span>\n <span class=\"classic-logo__stack\">\n <span class=\"classic-logo__brand\">\n <span\n r-for=\"brandLetter in logo.brandLetters\"\n class=\"classic-logo__brand-letter\"\n :style=\"brandLetter.style\"\n >\n {{ brandLetter.value }}\n </span>\n </span>\n <span class=\"classic-logo__subtitle\" r-if=\"logo.subtitle\">\n <span\n r-for=\"subtitleLetter in logo.subtitleLetters\"\n class=\"classic-logo__subtitle-letter\"\n :style=\"subtitleLetter.style\"\n >\n {{ subtitleLetter.value }}\n </span>\n </span>\n </span>\n </a>\n</div>`\n\ninterface LogoLetter {\n value: string\n isSpace?: boolean\n style?: Record<string, string>\n}\n\ntype LogoResponsiveLength = {\n base?: string\n sm?: string\n md?: string\n lg?: string\n xl?: string\n}\n\nconst DEFAULT_BRAND_FILL = getThemePaletteVar(\n 'semanticTone.accent.button.rest.background',\n)\nconst DEFAULT_SUBTITLE_FILL = getCurrentThemePaletteVar('text.subtle')\n\ninterface ResolvedClassicLogo {\n brand?: string\n letterColors?: string\n subtitleLetterColors?: string\n colors?: string[]\n logoBackground?: number\n logoForeground?: number\n brandLetters?: LogoLetter[]\n subtitle?: string\n subtitleLetters?: LogoLetter[]\n glyphStyle?: Record<string, string>\n layoutStyle?: Record<string, string>\n brandSize?: string\n brandSizeSm?: string\n brandSizeMd?: string\n brandSizeLg?: string\n brandSizeXl?: string\n subtitleSize?: string\n subtitleSizeSm?: string\n subtitleSizeMd?: string\n subtitleSizeLg?: string\n subtitleSizeXl?: string\n iconSize?: string\n iconSizeSm?: string\n iconSizeMd?: string\n iconSizeLg?: string\n iconSizeXl?: string\n subtitleInset?: string\n subtitleInsetSm?: string\n subtitleInsetMd?: string\n subtitleInsetLg?: string\n subtitleInsetXl?: string\n href?: string | null\n icon?: string\n ariaLabel?: string\n}\n\nfunction resolveClassicLogo(\n props: Partial<ClassicLogoConfig>,\n context: PageContext | undefined,\n): ResolvedClassicLogo {\n const brand = props.brand\n const letterColors = props.letterColors\n const subtitleLetterColors = props.subtitleLetterColors\n const colors = normalizeLogoColors(props.colors)\n const logoBackground = props.logoBackground\n const logoForeground = props.logoForeground\n const brandLetters = buildBrandLetters(brand, letterColors, colors)\n const subtitle = props.subtitle\n const subtitleLetters = buildLogoLetters(\n subtitle,\n subtitleLetterColors,\n colors,\n DEFAULT_SUBTITLE_FILL,\n )\n const glyphStyle = resolveGlyphStyle(colors, logoBackground, logoForeground)\n const layoutStyle = resolveLogoLayoutStyle(props)\n const href = props.href\n ? (context?.resolvePublicHref(props.href) ?? props.href)\n : props.href\n const icon = props.icon\n const ariaLabel = props.ariaLabel\n\n return {\n brand,\n letterColors,\n subtitleLetterColors,\n colors,\n logoBackground,\n logoForeground,\n brandLetters,\n subtitle,\n subtitleLetters,\n glyphStyle,\n layoutStyle,\n brandSize: props.brandSize,\n brandSizeSm: props.brandSizeSm,\n brandSizeMd: props.brandSizeMd,\n brandSizeLg: props.brandSizeLg,\n brandSizeXl: props.brandSizeXl,\n subtitleSize: props.subtitleSize,\n subtitleSizeSm: props.subtitleSizeSm,\n subtitleSizeMd: props.subtitleSizeMd,\n subtitleSizeLg: props.subtitleSizeLg,\n subtitleSizeXl: props.subtitleSizeXl,\n iconSize: props.iconSize,\n iconSizeSm: props.iconSizeSm,\n iconSizeMd: props.iconSizeMd,\n iconSizeLg: props.iconSizeLg,\n iconSizeXl: props.iconSizeXl,\n subtitleInset: props.subtitleInset,\n subtitleInsetSm: props.subtitleInsetSm,\n subtitleInsetMd: props.subtitleInsetMd,\n subtitleInsetLg: props.subtitleInsetLg,\n subtitleInsetXl: props.subtitleInsetXl,\n href,\n icon,\n ariaLabel: ariaLabel || brand,\n }\n}\n\nfunction normalizeLogoColors(colors: string[] | undefined) {\n return colors?.map((color) => normalizeThemeVariableReference(color))\n}\n\nfunction buildBrandLetters(\n brand: string | undefined,\n letterColors: string | undefined,\n colors: string[] | undefined,\n): LogoLetter[] | undefined {\n return buildLogoLetters(brand, letterColors, colors, DEFAULT_BRAND_FILL)\n}\n\nfunction buildLogoLetters(\n text: string | undefined,\n letterColors: string | undefined,\n colors: string[] | undefined,\n defaultFill: string,\n): LogoLetter[] | undefined {\n const letters: LogoLetter[] = []\n let colorCursor = 0\n\n if (text) {\n for (const character of [...text]) {\n if (character === ' ') {\n letters.push({\n value: '\\u00A0',\n isSpace: true,\n })\n continue\n }\n letters.push({\n value: character,\n style: resolveBrandLetterStyle(\n letterColors,\n colors,\n colorCursor,\n defaultFill,\n ),\n })\n colorCursor += 1\n }\n }\n\n return letters.length > 0 ? letters : undefined\n}\n\nfunction resolveBrandLetterStyle(\n letterColors: string | undefined,\n colors: string[] | undefined,\n letterIndex: number,\n defaultFill: string,\n): Record<string, string> | undefined {\n if (!letterColors) {\n return {\n backgroundImage: defaultFill,\n backgroundColor: defaultFill,\n }\n }\n const colorIndexLiteral =\n letterColors?.[letterIndex] ??\n (letterColors && letterColors.length > 0\n ? letterColors[letterColors.length - 1]\n : undefined)\n if (colorIndexLiteral === undefined) return undefined\n const colorIndex = Number.parseInt(colorIndexLiteral, 10)\n if (Number.isNaN(colorIndex) || colorIndex < 0) return undefined\n const color = colors?.[colorIndex]\n if (!color) {\n return {\n backgroundImage: defaultFill,\n backgroundColor: defaultFill,\n }\n }\n return {\n backgroundImage: color,\n backgroundColor: color,\n }\n}\n\nfunction resolveGlyphStyle(\n colors: string[] | undefined,\n logoBackground: number | undefined,\n logoForeground: number | undefined,\n): Record<string, string> | undefined {\n const style: Record<string, string> = {}\n const background = resolveIndexedLogoColor(colors, logoBackground)\n const foreground = resolveIndexedLogoColor(colors, logoForeground)\n\n if (background) {\n style['--ps-classic-logo-glyph-background'] = background\n }\n\n if (foreground) {\n style['--ps-classic-logo-glyph-foreground'] = foreground\n }\n\n return Object.keys(style).length > 0 ? style : undefined\n}\n\nfunction resolveIndexedLogoColor(\n colors: string[] | undefined,\n colorIndex: number | undefined,\n): string | undefined {\n if (colorIndex === undefined) return undefined\n if (!Number.isInteger(colorIndex) || colorIndex < 0) return undefined\n return colors?.[colorIndex]\n}\n\nfunction resolveLogoLayoutStyle(\n props: Partial<ClassicLogoConfig>,\n): Record<string, string> | undefined {\n const style: Record<string, string> = {}\n\n assignResponsiveLengthVars(\n style,\n '--ps-classic-logo-brand-size',\n resolveResponsiveLogoLength({\n base: props.brandSize,\n sm: props.brandSizeSm,\n md: props.brandSizeMd,\n lg: props.brandSizeLg,\n xl: props.brandSizeXl,\n }),\n )\n assignResponsiveLengthVars(\n style,\n '--ps-classic-logo-subtitle-size',\n resolveResponsiveLogoLength({\n base: props.subtitleSize,\n sm: props.subtitleSizeSm,\n md: props.subtitleSizeMd,\n lg: props.subtitleSizeLg,\n xl: props.subtitleSizeXl,\n }),\n )\n assignResponsiveLengthVars(\n style,\n '--ps-classic-logo-icon-size',\n resolveResponsiveLogoLength({\n base: props.iconSize,\n sm: props.iconSizeSm,\n md: props.iconSizeMd,\n lg: props.iconSizeLg,\n xl: props.iconSizeXl,\n }),\n )\n assignResponsiveLengthVars(\n style,\n '--ps-classic-logo-subtitle-inset',\n resolveResponsiveLogoLength({\n base: props.subtitleInset,\n sm: props.subtitleInsetSm,\n md: props.subtitleInsetMd,\n lg: props.subtitleInsetLg,\n xl: props.subtitleInsetXl,\n }),\n )\n\n return Object.keys(style).length > 0 ? style : undefined\n}\n\nfunction resolveResponsiveLogoLength(\n value: LogoResponsiveLength,\n): LogoResponsiveLength | undefined {\n const base = resolveOptionalCssLength(value.base)\n const sm = resolveOptionalCssLength(value.sm) ?? base\n const md = resolveOptionalCssLength(value.md) ?? sm\n const lg = resolveOptionalCssLength(value.lg) ?? md\n const xl = resolveOptionalCssLength(value.xl) ?? lg\n\n if (!base && !sm && !md && !lg && !xl) return undefined\n\n return { base, sm, md, lg, xl }\n}\n\nfunction resolveOptionalCssLength(\n value: string | undefined,\n): string | undefined {\n if (typeof value !== 'string') return undefined\n const normalized = value.trim()\n return normalized.length > 0 ? normalized : undefined\n}\n\nfunction assignResponsiveLengthVars(\n style: Record<string, string>,\n variableName: string,\n value: LogoResponsiveLength | undefined,\n) {\n if (!value) return\n if (value.base) style[variableName] = value.base\n if (value.sm) style[`${variableName}-sm`] = value.sm\n if (value.md) style[`${variableName}-md`] = value.md\n if (value.lg) style[`${variableName}-lg`] = value.lg\n if (value.xl) style[`${variableName}-xl`] = value.xl\n}\n\ntype ReactiveClassicLogoOptions = {\n [K in keyof ClassicLogoConfig]?: RefOrValue<ClassicLogoConfig[K]>\n}\n\nexport interface ClassicLogo extends ReactiveClassicLogoOptions {\n config?: RefOrValue<Partial<ClassicLogoConfig>>\n logo?: ComputedRef<ResolvedClassicLogo>\n}\n\nfunction defineClassicLogoComponent() {\n return defineComponent<ClassicLogo>(logoTemplate, {\n props: [\n 'config',\n 'brand',\n 'letterColors',\n 'subtitleLetterColors',\n 'colors',\n 'logoBackground',\n 'logoForeground',\n 'brandSize',\n 'brandSizeSm',\n 'brandSizeMd',\n 'brandSizeLg',\n 'brandSizeXl',\n 'subtitleSize',\n 'subtitleSizeSm',\n 'subtitleSizeMd',\n 'subtitleSizeLg',\n 'subtitleSizeXl',\n 'iconSize',\n 'iconSizeSm',\n 'iconSizeMd',\n 'iconSizeLg',\n 'iconSizeXl',\n 'subtitleInset',\n 'subtitleInsetSm',\n 'subtitleInsetMd',\n 'subtitleInsetLg',\n 'subtitleInsetXl',\n 'subtitle',\n 'href',\n 'icon',\n 'ariaLabel',\n ],\n context: (head) => ({\n logo: computed(() => {\n const { config, ...direct } = flatten(head.props)\n const options = {\n ...flatten(unref(config) ?? {}),\n ...Object.fromEntries(\n Object.entries(direct).filter(([, value]) => value !== undefined),\n ),\n }\n return resolveClassicLogo(options, tryResolvePageContext(head))\n }),\n }),\n })\n}\n\nexport function defineClassicLogoComponents() {\n return {\n classicLogo: defineClassicLogoComponent(),\n }\n}\n","import { type RefOrValue, unref } from 'regor'\n\nexport function createAutoId(prefix: string) {\n let nextId = 1\n return (value?: RefOrValue<string>) =>\n resolveAutoId(value, () => createGeneratedId(prefix, nextId++))\n}\n\nfunction resolveAutoId(\n value: RefOrValue<string> | undefined,\n createNextId: () => string,\n) {\n const id = unref(value)?.trim?.()\n return id || createNextId()\n}\n\nfunction createGeneratedId(prefix: string, id: number) {\n return isMinidomDocument(globalThis.document)\n ? `${prefix}-s-${id}`\n : `${prefix}-${id}`\n}\n\nfunction isMinidomDocument(document: Document) {\n return (document as { isMinidom?: unknown })?.isMinidom === true\n}\n","export const GMAIL_COMPATIBLE_EMAIL_TAGS = new Set([\n 'A',\n 'ADDRESS',\n 'B',\n 'BLOCKQUOTE',\n 'BODY',\n 'BR',\n 'CAPTION',\n 'CENTER',\n 'CITE',\n 'CODE',\n 'COL',\n 'COLGROUP',\n 'DD',\n 'DEL',\n 'DIV',\n 'DL',\n 'DT',\n 'EM',\n 'FONT',\n 'H1',\n 'H2',\n 'H3',\n 'H4',\n 'H5',\n 'H6',\n 'HTML',\n 'HR',\n 'I',\n 'IMG',\n 'INS',\n 'KBD',\n 'LI',\n 'OL',\n 'P',\n 'PRE',\n 'S',\n 'SAMP',\n 'SMALL',\n 'SPAN',\n 'STRONG',\n 'STYLE',\n 'SUB',\n 'SUP',\n 'TABLE',\n 'TBODY',\n 'TD',\n 'TFOOT',\n 'TH',\n 'THEAD',\n 'TR',\n 'TT',\n 'U',\n 'UL',\n 'VAR',\n])\n\nexport const GMAIL_SUPPORTED_CSS_PROPERTIES = new Set([\n 'azimuth',\n 'background',\n 'background-blend-mode',\n 'background-clip',\n 'background-color',\n 'background-image',\n 'background-origin',\n 'background-position',\n 'background-repeat',\n 'background-size',\n 'border',\n 'border-bottom',\n 'border-bottom-color',\n 'border-bottom-left-radius',\n 'border-bottom-right-radius',\n 'border-bottom-style',\n 'border-bottom-width',\n 'border-collapse',\n 'border-color',\n 'border-left',\n 'border-left-color',\n 'border-left-style',\n 'border-left-width',\n 'border-radius',\n 'border-right',\n 'border-right-color',\n 'border-right-style',\n 'border-right-width',\n 'border-spacing',\n 'border-style',\n 'border-top',\n 'border-top-color',\n 'border-top-left-radius',\n 'border-top-right-radius',\n 'border-top-style',\n 'border-top-width',\n 'border-width',\n 'box-sizing',\n 'break-after',\n 'break-before',\n 'break-inside',\n 'caption-side',\n 'clear',\n 'color',\n 'column-count',\n 'column-fill',\n 'column-gap',\n 'column-rule',\n 'column-rule-color',\n 'column-rule-style',\n 'column-rule-width',\n 'column-span',\n 'column-width',\n 'columns',\n 'direction',\n 'display',\n 'elevation',\n 'empty-cells',\n 'float',\n 'font',\n 'font-family',\n 'font-feature-settings',\n 'font-kerning',\n 'font-size',\n 'font-size-adjust',\n 'font-stretch',\n 'font-style',\n 'font-synthesis',\n 'font-variant',\n 'font-variant-alternates',\n 'font-variant-caps',\n 'font-variant-east-asian',\n 'font-variant-ligatures',\n 'font-variant-numeric',\n 'font-weight',\n 'height',\n 'image-orientation',\n 'image-resolution',\n 'ime-mode',\n 'isolation',\n 'layout-flow',\n 'layout-grid',\n 'layout-grid-char',\n 'layout-grid-char-spacing',\n 'layout-grid-line',\n 'layout-grid-mode',\n 'layout-grid-type',\n 'letter-spacing',\n 'line-break',\n 'line-height',\n 'list-style',\n 'list-style-position',\n 'list-style-type',\n 'margin',\n 'margin-bottom',\n 'margin-left',\n 'margin-right',\n 'margin-top',\n 'marker-offset',\n 'max-height',\n 'max-width',\n 'min-height',\n 'min-width',\n 'mix-blend-mode',\n 'object-fit',\n 'object-position',\n 'opacity',\n 'outline',\n 'outline-color',\n 'outline-style',\n 'outline-width',\n 'overflow',\n 'overflow-x',\n 'overflow-y',\n 'padding',\n 'padding-bottom',\n 'padding-left',\n 'padding-right',\n 'padding-top',\n 'page-break-after',\n 'page-break-before',\n 'page-break-inside',\n 'pause',\n 'pause-after',\n 'pause-before',\n 'pitch',\n 'pitch-range',\n 'quotes',\n 'richness',\n 'speak',\n 'speak-header',\n 'speak-numeral',\n 'speak-punctuation',\n 'speech-rate',\n 'stress',\n 'table-layout',\n 'text-align',\n 'text-align-last',\n 'text-autospace',\n 'text-combine-upright',\n 'text-decoration',\n 'text-decoration-color',\n 'text-decoration-line',\n 'text-decoration-skip',\n 'text-decoration-style',\n 'text-emphasis',\n 'text-emphasis-color',\n 'text-emphasis-style',\n 'text-indent',\n 'text-justify',\n 'text-kashida-space',\n 'text-orientation',\n 'text-overflow',\n 'text-transform',\n 'text-underline-position',\n 'unicode-bidi',\n 'vertical-align',\n 'voice-family',\n 'white-space',\n 'width',\n 'word-break',\n 'word-spacing',\n 'word-wrap',\n 'writing-mode',\n 'zoom',\n])\n\nconst IMAGE_URL_CSS_PROPERTIES = new Set([\n 'background',\n 'background-image',\n 'list-style',\n])\n\nconst CSS_URL_PATTERN = /url\\(\\s*(?:\"([^\"]*)\"|'([^']*)'|([^)]*?))\\s*\\)/gi\n\nexport interface EmailHtmlPolicyOptions {\n imageUrlResolver?: (url: string) => string | undefined\n}\n\nexport function copySafeEmailStyles(\n source: HTMLElement,\n target: HTMLElement,\n options: EmailHtmlPolicyOptions = {},\n) {\n applySafeEmailStyles(source.getAttribute('style'), target, options)\n}\n\nexport function applySafeEmailStyles(\n style: string | null | undefined,\n target: HTMLElement,\n options: EmailHtmlPolicyOptions = {},\n) {\n if (!style) return\n for (const item of splitCssDeclarations(style)) {\n const separator = findCssDeclarationSeparator(item)\n if (separator <= 0) continue\n\n const property = item.slice(0, separator).trim().toLowerCase()\n const value = sanitizeEmailStyleValue(\n property,\n item.slice(separator + 1),\n options,\n )\n if (value) target.style.setProperty(property, value)\n }\n}\n\nfunction splitCssDeclarations(style: string) {\n const declarations: string[] = []\n let start = 0\n let quote = ''\n let parenDepth = 0\n let escaped = false\n\n for (let i = 0; i < style.length; ++i) {\n const char = style[i]\n if (escaped) {\n escaped = false\n continue\n }\n\n if (char === '\\\\') {\n escaped = true\n continue\n }\n\n if (quote) {\n if (char === quote) quote = ''\n continue\n }\n\n if (char === '\"' || char === \"'\") {\n quote = char\n continue\n }\n\n if (char === '(') {\n ++parenDepth\n continue\n }\n\n if (char === ')') {\n if (parenDepth > 0) --parenDepth\n continue\n }\n\n if (char === ';' && parenDepth === 0) {\n declarations.push(style.slice(start, i))\n start = i + 1\n }\n }\n\n declarations.push(style.slice(start))\n return declarations\n}\n\nfunction findCssDeclarationSeparator(declaration: string) {\n let quote = ''\n let parenDepth = 0\n let escaped = false\n\n for (let i = 0; i < declaration.length; ++i) {\n const char = declaration[i]\n if (escaped) {\n escaped = false\n continue\n }\n\n if (char === '\\\\') {\n escaped = true\n continue\n }\n\n if (quote) {\n if (char === quote) quote = ''\n continue\n }\n\n if (char === '\"' || char === \"'\") {\n quote = char\n continue\n }\n\n if (char === '(') {\n ++parenDepth\n continue\n }\n\n if (char === ')') {\n if (parenDepth > 0) --parenDepth\n continue\n }\n\n if (char === ':' && parenDepth === 0) return i\n }\n\n return -1\n}\n\nexport function sanitizeEmailStyleValue(\n property: string,\n value: string,\n options: EmailHtmlPolicyOptions = {},\n) {\n if (!GMAIL_SUPPORTED_CSS_PROPERTIES.has(property)) return undefined\n\n const trimmed = stripImportant(value.trim())\n if (!isSafeCssValue(trimmed)) return undefined\n\n CSS_URL_PATTERN.lastIndex = 0\n if (CSS_URL_PATTERN.test(trimmed)) {\n CSS_URL_PATTERN.lastIndex = 0\n if (!IMAGE_URL_CSS_PROPERTIES.has(property)) return undefined\n const rewritten = rewriteCssUrls(trimmed, options)\n CSS_URL_PATTERN.lastIndex = 0\n return rewritten\n }\n\n CSS_URL_PATTERN.lastIndex = 0\n return trimmed\n}\n\nexport function sanitizePlainAttribute(value: string) {\n let text = ''\n for (let i = 0; i < value.length; ++i) {\n const code = value.charCodeAt(i)\n if (code >= 32 && code !== 127) text += value[i]\n }\n\n return text.replace(/\\s+/g, ' ').trim()\n}\n\nexport function toSafeEmailImageUrl(value: string) {\n const trimmed = value.trim()\n if (!trimmed) return undefined\n\n const lower = trimmed.toLowerCase()\n if (lower.startsWith('cid:') || lower.startsWith('data:image/'))\n return trimmed\n\n try {\n const url = new URL(\n trimmed,\n globalThis.location?.href ?? 'https://localhost/',\n )\n if (url.protocol !== 'http:' && url.protocol !== 'https:') return undefined\n return url.href\n } catch {\n return undefined\n }\n}\n\nexport function normalizeEmailCidUrl(value: string) {\n const trimmed = value.trim()\n if (!trimmed.toLowerCase().startsWith('cid:')) return undefined\n\n const rawContentId = trimmed.slice(4)\n let decodedContentId = rawContentId\n try {\n decodedContentId = decodeURIComponent(rawContentId)\n } catch {\n decodedContentId = rawContentId\n }\n\n return normalizeEmailContentId(decodedContentId) || undefined\n}\n\nexport function normalizeEmailContentId(value: string) {\n let contentId = value.trim()\n if (contentId.length >= 2 && contentId[0] === '<' && contentId.at(-1) === '>')\n contentId = contentId.slice(1, -1).trim()\n\n return contentId.toLowerCase()\n}\n\nfunction stripImportant(value: string) {\n const trimmed = value.trim()\n return trimmed.slice(-10).toLowerCase() === '!important'\n ? trimmed.slice(0, -10).trimEnd()\n : trimmed\n}\n\nfunction isSafeCssValue(value: string) {\n return (\n value.length > 0 &&\n value.length <= 512 &&\n !hasUnsafeCssCharacter(value) &&\n !/(?:expression|behavior|binding)\\s*\\(/i.test(value) &&\n !/(?:javascript|vbscript)\\s*:/i.test(value) &&\n !/@import/i.test(value)\n )\n}\n\nfunction rewriteCssUrls(value: string, options: EmailHtmlPolicyOptions) {\n return value.replace(\n CSS_URL_PATTERN,\n (_match, doubleUrl, singleUrl, bareUrl) => {\n const rawUrl = doubleUrl ?? singleUrl ?? bareUrl ?? ''\n const proxiedUrl = options.imageUrlResolver\n ? options.imageUrlResolver(rawUrl.trim())\n : toSafeEmailImageUrl(rawUrl.trim())\n return proxiedUrl ? `url(\"${escapeCssUrl(proxiedUrl)}\")` : ''\n },\n )\n}\n\nfunction hasUnsafeCssCharacter(value: string) {\n for (let i = 0; i < value.length; ++i) {\n const code = value.charCodeAt(i)\n if (code < 32 || code === 127 || value[i] === '<' || value[i] === '>')\n return true\n }\n\n return false\n}\n\nfunction escapeCssUrl(value: string) {\n return value.replace(/[\"\\\\\\r\\n]/g, '')\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComponentHead,\n type ComputedRef,\n computed,\n defineComponent,\n html,\n observe,\n type Ref,\n type RefOrValue,\n ref,\n type SRef,\n sref,\n unref,\n} from 'regor'\nimport { createAutoId } from '../autoId'\nimport {\n type ComponentVariant,\n resolveComponentClasses,\n} from '../componentVariant'\nimport {\n copySafeEmailStyles,\n GMAIL_COMPATIBLE_EMAIL_TAGS,\n normalizeEmailCidUrl,\n sanitizePlainAttribute,\n toSafeEmailImageUrl,\n} from './emailHtmlPolicy'\n\nexport type ComposerCommand =\n | 'bold'\n | 'italic'\n | 'underline'\n | 'justifyLeft'\n | 'justifyCenter'\n | 'justifyRight'\n | 'insertUnorderedList'\n | 'insertOrderedList'\n | 'removeFormat'\n\nexport interface Composer {\n html?: Ref<string> | SRef<string>\n text?: Ref<string> | SRef<string>\n label?: RefOrValue<string>\n placeholder?: RefOrValue<string>\n disabled?: RefOrValue<boolean>\n focusOnMount?: RefOrValue<boolean>\n minHeight?: RefOrValue<number | string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n imagePreviewUrls?: RefOrValue<Record<string, string>>\n classes?: ComputedRef<string>\n editorStyle?: ComputedRef<Record<string, string>>\n sourceId?: string\n editorElement?: ReturnType<typeof sref<HTMLElement | null>>\n sourceHtml?: Ref<string>\n sourceMode?: Ref<boolean>\n format?: (command: ComposerCommand) => void\n createLink?: () => void\n toggleSourceMode?: () => void\n handleInput?: (event: Event) => void\n handlePaste?: (event: ClipboardEvent) => void\n handleDragOver?: (event: DragEvent) => void\n handleDrop?: (event: DragEvent) => void\n handleSourceInput?: (event: Event) => void\n}\n\nconst composerTemplate = html`<div class=\"composer-field\">\n <span class=\"composer-field__label\" r-if=\"label\"\n >{{ label }}</span\n >\n <div class=\"composer\" :class=\"classes\">\n <div class=\"composer__toolbar\" role=\"toolbar\" aria-label=\"Composer tools\">\n <button\n class=\"composer__tool\"\n type=\"button\"\n title=\"Bold\"\n aria-label=\"Bold\"\n :disabled=\"disabled\"\n @click=\"format('bold')\"\n >\n <Icon name=\"lucide:bold\"/>\n </button>\n <button\n class=\"composer__tool\"\n type=\"button\"\n title=\"Italic\"\n aria-label=\"Italic\"\n :disabled=\"disabled\"\n @click=\"format('italic')\"\n >\n <Icon name=\"lucide:italic\"/>\n </button>\n <button\n class=\"composer__tool\"\n type=\"button\"\n title=\"Underline\"\n aria-label=\"Underline\"\n :disabled=\"disabled\"\n @click=\"format('underline')\"\n >\n <Icon name=\"lucide:underline\"/>\n </button>\n <span class=\"composer__divider\" aria-hidden=\"true\"></span>\n <button\n class=\"composer__tool\"\n type=\"button\"\n title=\"Align left\"\n aria-label=\"Align left\"\n :disabled=\"disabled\"\n @click=\"format('justifyLeft')\"\n >\n <Icon name=\"tabler:align-left\"/>\n </button>\n <button\n class=\"composer__tool\"\n type=\"button\"\n title=\"Align center\"\n aria-label=\"Align center\"\n :disabled=\"disabled\"\n @click=\"format('justifyCenter')\"\n >\n <Icon name=\"tabler:align-center\"/>\n </button>\n <button\n class=\"composer__tool\"\n type=\"button\"\n title=\"Align right\"\n aria-label=\"Align right\"\n :disabled=\"disabled\"\n @click=\"format('justifyRight')\"\n >\n <Icon name=\"tabler:align-right\"/>\n </button>\n <span class=\"composer__divider\" aria-hidden=\"true\"></span>\n <button\n class=\"composer__tool\"\n type=\"button\"\n title=\"Bulleted list\"\n aria-label=\"Bulleted list\"\n :disabled=\"disabled\"\n @click=\"format('insertUnorderedList')\"\n >\n <Icon name=\"lucide:list\"/>\n </button>\n <button\n class=\"composer__tool\"\n type=\"button\"\n title=\"Numbered list\"\n aria-label=\"Numbered list\"\n :disabled=\"disabled\"\n @click=\"format('insertOrderedList')\"\n >\n <Icon name=\"lucide:list-ordered\"/>\n </button>\n <button\n class=\"composer__tool\"\n type=\"button\"\n title=\"Link\"\n aria-label=\"Link\"\n :disabled=\"disabled\"\n @click=\"createLink\"\n >\n <Icon name=\"lucide:link\"/>\n </button>\n <span class=\"composer__divider\" aria-hidden=\"true\"></span>\n <button\n class=\"composer__tool\"\n type=\"button\"\n title=\"Clear formatting\"\n aria-label=\"Clear formatting\"\n :disabled=\"disabled\"\n @click=\"format('removeFormat')\"\n >\n <Icon name=\"lucide:eraser\"/>\n </button>\n <button\n class=\"composer__tool composer__tool--source\"\n type=\"button\"\n title=\"HTML source\"\n aria-label=\"HTML source\"\n :aria-pressed=\"sourceMode ? 'true' : 'false'\"\n :disabled=\"disabled\"\n @click=\"toggleSourceMode\"\n >\n <Icon name=\"lucide:code\"/>\n </button>\n </div>\n <div class=\"composer__surface\">\n <div\n r-if=\"!sourceMode\"\n class=\"composer__editor\"\n :ref=\"editorElement\"\n :style=\"editorStyle\"\n :contenteditable=\"disabled ? 'false' : 'true'\"\n :data-placeholder=\"placeholder\"\n role=\"textbox\"\n :aria-label=\"label || placeholder || 'Message body'\"\n aria-multiline=\"true\"\n spellcheck=\"true\"\n @input=\"handleInput\"\n @paste=\"handlePaste\"\n @dragover=\"handleDragOver\"\n @drop=\"handleDrop\"\n ></div>\n <textarea\n r-if=\"sourceMode\"\n :id=\"sourceId\"\n class=\"composer__source\"\n :style=\"editorStyle\"\n :disabled=\"disabled\"\n :placeholder=\"placeholder\"\n :aria-label=\"label || placeholder || 'Message body source'\"\n spellcheck=\"false\"\n :value=\"sourceHtml\"\n @input=\"handleSourceInput\"\n ></textarea>\n </div>\n </div>\n</div>`\n\nfunction defineComposerComponent() {\n return defineComponent<Composer>(composerTemplate, {\n props: [\n 'html',\n 'text',\n 'label',\n 'placeholder',\n 'disabled',\n 'focusOnMount',\n 'minHeight',\n 'tone',\n 'variant',\n 'imagePreviewUrls',\n ],\n context: (head) => resolveComposer(head),\n })\n}\n\nexport function defineComposerComponents() {\n return {\n composer: defineComposerComponent(),\n }\n}\n\nclass ComposerContext implements Composer {\n readonly html: Ref<string> | SRef<string>\n readonly text: Ref<string> | SRef<string>\n readonly label?: RefOrValue<string>\n readonly placeholder?: RefOrValue<string>\n readonly disabled?: RefOrValue<boolean>\n readonly focusOnMount?: RefOrValue<boolean>\n readonly minHeight?: RefOrValue<number | string>\n readonly tone?: RefOrValue<SemanticTone>\n readonly variant?: RefOrValue<ComponentVariant>\n readonly imagePreviewUrls?: RefOrValue<Record<string, string>>\n readonly editorElement = sref<HTMLElement | null>(null)\n readonly sourceHtml = ref('')\n readonly sourceMode = ref(false)\n readonly classes: ComputedRef<string>\n readonly editorStyle: ComputedRef<Record<string, string>>\n readonly sourceId: string\n private writingModel = false\n\n constructor(props: Composer) {\n Object.assign(this, props)\n this.html = props.html ?? ref('')\n this.text = props.text ?? ref('')\n this.classes = computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: 'surfaceAlt',\n }),\n )\n this.editorStyle = computed<Record<string, string>>(() => ({\n minHeight: resolveCssSize(unref(props.minHeight), '13.75rem'),\n }))\n this.sourceId = resolveComposerSourceId()\n this.sourceHtml(this.sanitizeModelHtml(this.html()))\n this.text(htmlToText(this.sourceHtml()))\n observe(this.editorElement, () => {\n this.syncEditorFromModel()\n })\n observe(this.html, (value) => {\n if (this.writingModel) return\n this.syncFromExternalHtml(value)\n })\n if (typeof this.imagePreviewUrls === 'function') {\n observe(this.imagePreviewUrls, () => {\n this.syncEditorFromModel()\n })\n }\n }\n\n mounted = () => {\n if (unref(this.focusOnMount)) this.scheduleEditorFocus()\n }\n\n format = (command: ComposerCommand) => {\n if (unref(this.disabled) || this.sourceMode()) return\n this.focusEditor()\n document.execCommand(command)\n this.syncFromEditor()\n }\n\n createLink = () => {\n if (unref(this.disabled) || this.sourceMode()) return\n const href = sanitizeHref(prompt('Link URL') ?? '')\n if (!href) return\n\n this.focusEditor()\n document.execCommand('createLink', false, href)\n this.syncFromEditor()\n }\n\n toggleSourceMode = () => {\n if (this.sourceMode()) {\n this.writeModel(this.sourceHtml())\n this.sourceMode(false)\n this.syncEditorFromModel()\n return\n }\n\n this.sourceHtml(this.html())\n this.sourceMode(true)\n }\n\n handleInput = (_event: Event) => {\n if (unref(this.disabled) || this.sourceMode()) return\n this.syncFromEditor()\n }\n\n handlePaste = (event: ClipboardEvent) => {\n if (unref(this.disabled) || this.sourceMode()) return\n\n const data = event.clipboardData\n if (!data) return\n\n const files = Array.from(data.files ?? [])\n const htmlData = data.getData('text/html')\n const textData = data.getData('text/plain')\n if (files.length > 0) this.emitFiles(event, files)\n\n event.preventDefault()\n const nextHtml = htmlData\n ? this.sanitizeModelHtml(htmlData)\n : plainTextToHtml(textData)\n if (!nextHtml) return\n\n this.focusEditor()\n document.execCommand('insertHTML', false, nextHtml)\n this.syncFromEditor()\n }\n\n handleDragOver = (event: DragEvent) => {\n if (\n unref(this.disabled) ||\n this.sourceMode() ||\n !hasFileTransfer(event.dataTransfer)\n ) {\n return\n }\n\n event.preventDefault()\n if (event.dataTransfer) event.dataTransfer.dropEffect = 'copy'\n }\n\n handleDrop = (event: DragEvent) => {\n if (\n unref(this.disabled) ||\n this.sourceMode() ||\n !hasFileTransfer(event.dataTransfer)\n ) {\n return\n }\n\n event.preventDefault()\n const files = Array.from(event.dataTransfer?.files ?? [])\n if (files.length > 0) this.emitFiles(event, files)\n }\n\n handleSourceInput = (event: Event) => {\n if (unref(this.disabled)) return\n\n const target = event.currentTarget\n if (!(target instanceof HTMLTextAreaElement)) return\n\n this.sourceHtml(target.value)\n this.writeSourceModel(target.value)\n }\n\n private syncFromEditor() {\n const element = this.editorElement()\n if (!element) return\n\n const value = this.readModelHtmlFromEditor(element)\n this.writeModel(value)\n if (!value) this.syncEditorFromModel()\n }\n\n private syncFromExternalHtml(value: string) {\n const sanitized = this.sanitizeModelHtml(value)\n if (sanitized !== value) {\n this.writeModel(sanitized)\n this.syncEditorFromModel()\n return\n }\n\n this.sourceHtml(sanitized)\n this.text(htmlToText(sanitized))\n this.syncEditorFromModel()\n }\n\n private syncEditorFromModel() {\n const element = this.editorElement()\n if (!element || this.sourceMode()) return\n\n const sanitized = this.toEditorHtml(this.html())\n if (element.innerHTML !== sanitized) element.innerHTML = sanitized\n }\n\n private writeModel(value: string) {\n const sanitized = this.sanitizeModelHtml(value)\n this.writingModel = true\n this.html(sanitized)\n this.text(htmlToText(sanitized))\n this.sourceHtml(sanitized)\n this.writingModel = false\n }\n\n private writeSourceModel(value: string) {\n const sanitized = this.sanitizeModelHtml(value)\n this.writingModel = true\n this.html(sanitized)\n this.text(htmlToText(sanitized))\n this.writingModel = false\n }\n\n private focusEditor() {\n const element = this.editorElement()\n if (element) element.focus()\n }\n\n private scheduleEditorFocus(attempt = 0) {\n requestAnimationFrame(() => {\n this.syncEditorFromModel()\n if (this.focusEditorForWriting()) return\n if (attempt >= FOCUS_RETRY_COUNT) return\n\n setTimeout(\n () => this.scheduleEditorFocus(attempt + 1),\n FOCUS_RETRY_DELAY_MS,\n )\n })\n }\n\n private focusEditorForWriting() {\n const element = this.editorElement()\n if (!element || this.sourceMode() || unref(this.disabled)) return false\n if (!isVisibleForFocus(element)) return false\n\n element.focus({ preventScroll: true })\n const target = findWritingStartNode(element)\n const range = document.createRange()\n if (target instanceof Text) {\n range.setStart(target, 0)\n } else {\n range.setStart(target, 0)\n }\n range.collapse(true)\n\n const selection = window.getSelection()\n selection?.removeAllRanges()\n selection?.addRange(range)\n return document.activeElement === element\n }\n\n private emitFiles(event: Event, files: File[]) {\n const target = event.currentTarget\n if (!(target instanceof EventTarget)) return\n\n target.dispatchEvent(\n new CustomEvent('files', {\n bubbles: true,\n detail: { files },\n }),\n )\n }\n\n private sanitizeModelHtml(value: string | undefined) {\n return sanitizeHtml(value, {\n imageUrlResolver: (url) => this.toModelImageUrl(url),\n deferCidImageSrc: true,\n })\n }\n\n private toEditorHtml(value: string | undefined) {\n const sanitized = sanitizeHtml(value, {\n imageUrlResolver: (url) => this.toEditorImageUrl(url),\n })\n return sanitized || createEmptyEditorHtml(unref(this.placeholder))\n }\n\n private readModelHtmlFromEditor(element: HTMLElement) {\n if (!hasMeaningfulEditorContent(element)) return ''\n\n return this.sanitizeModelHtml(element.innerHTML)\n }\n\n private toEditorImageUrl(value: string) {\n const contentId = normalizeEmailCidUrl(value)\n if (contentId) {\n const previewUrls = this.readImagePreviewUrls()\n const previewUrl = previewUrls[contentId]\n if (typeof previewUrl === 'string' && previewUrl) return previewUrl\n return TRANSPARENT_IMAGE_DATA_URL\n }\n\n return toSafeEmailImageUrl(value)\n }\n\n private toModelImageUrl(value: string) {\n const contentId = this.findPreviewContentId(value)\n if (contentId) return `cid:${contentId}`\n return toSafeEmailImageUrl(value)\n }\n\n private findPreviewContentId(value: string) {\n const urls = this.readImagePreviewUrls()\n for (const [contentId, url] of Object.entries(urls))\n if (url === value) return contentId\n\n return ''\n }\n\n private readImagePreviewUrls() {\n return (unref(this.imagePreviewUrls) ?? {}) as Record<string, string>\n }\n}\n\nconst resolveComposerSourceId = createAutoId('composer-source')\nexport const COMPOSER_BODY_STYLE = 'padding:1rem'\nconst FOCUS_RETRY_COUNT = 12\nconst FOCUS_RETRY_DELAY_MS = 25\n\nfunction resolveComposer(head: ComponentHead<Composer>) {\n return new ComposerContext(head.props) as Composer\n}\n\nexport function createComposerBodyHtml(contentHtml = '', placeholder?: string) {\n const placeholderAttribute = placeholder\n ? ` data-placeholder=\"${escapeHtmlAttribute(placeholder)}\"`\n : ''\n return `<div data-composer-body=\"true\"${placeholderAttribute} style=\"${COMPOSER_BODY_STYLE}\">${contentHtml}</div>`\n}\n\nfunction createEmptyEditorHtml(placeholder: string | undefined) {\n return createComposerBodyHtml('', placeholder)\n}\n\nfunction resolveCssSize(value: number | string | undefined, fallback: string) {\n if (typeof value === 'number') return `${Math.max(0, value)}px`\n if (typeof value === 'string' && value.trim()) return value\n return fallback\n}\n\nconst COMPOSER_BLOCKED_CONTAINER_TAGS = new Set(['BODY', 'HTML', 'STYLE'])\nconst DROPPED_TAGS = new Set([\n 'AREA',\n 'AUDIO',\n 'BASE',\n 'BUTTON',\n 'CANVAS',\n 'EMBED',\n 'FORM',\n 'HEAD',\n 'IFRAME',\n 'INPUT',\n 'LINK',\n 'MAP',\n 'META',\n 'NOSCRIPT',\n 'OBJECT',\n 'OPTION',\n 'SCRIPT',\n 'SELECT',\n 'SOURCE',\n 'STYLE',\n 'TEMPLATE',\n 'TEXTAREA',\n 'TITLE',\n 'VIDEO',\n])\nconst ALLOWED_TAGS = new Set(\n Array.from(GMAIL_COMPATIBLE_EMAIL_TAGS).filter(\n (tag) => !COMPOSER_BLOCKED_CONTAINER_TAGS.has(tag),\n ),\n)\n\nconst TRANSPARENT_IMAGE_DATA_URL =\n 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw=='\n\ninterface SanitizeHtmlOptions {\n imageUrlResolver?: (url: string) => string | undefined\n deferCidImageSrc?: boolean\n}\n\nfunction sanitizeHtml(\n value: string | undefined,\n options: SanitizeHtmlOptions = {},\n) {\n const raw = value ?? ''\n if (!raw.trim()) return ''\n if (typeof document === 'undefined') return escapeHtml(raw.trim())\n\n const template = document.createElement('template')\n template.innerHTML = raw\n const output = document.createDocumentFragment()\n for (const child of Array.from(template.content.childNodes)) {\n appendSanitizedNode(output, child, options)\n }\n const wrapper = document.createElement('div')\n wrapper.appendChild(output)\n const html = wrapper.innerHTML.trim()\n return options.deferCidImageSrc ? restoreDeferredCidImageSources(html) : html\n}\n\nfunction appendSanitizedNode(\n parent: Node,\n node: Node,\n options: SanitizeHtmlOptions,\n) {\n if (node.nodeType === Node.TEXT_NODE) {\n parent.appendChild(document.createTextNode(node.textContent ?? ''))\n return\n }\n if (!(node instanceof HTMLElement)) return\n\n const tag = node.tagName.toUpperCase()\n if (!ALLOWED_TAGS.has(tag)) {\n if (DROPPED_TAGS.has(tag)) return\n\n for (const child of Array.from(node.childNodes))\n appendSanitizedNode(parent, child, options)\n return\n }\n\n if (tag === 'A') {\n const href = sanitizeHref(node.getAttribute('href') ?? '')\n if (!href) {\n for (const child of Array.from(node.childNodes))\n appendSanitizedNode(parent, child, options)\n return\n }\n }\n const imageSrc =\n tag === 'IMG'\n ? sanitizeImageSrc(node.getAttribute('src') ?? '', options)\n : undefined\n if (tag === 'IMG' && !imageSrc) return\n\n const element = document.createElement(tag.toLowerCase())\n if (tag === 'A') {\n element.setAttribute(\n 'href',\n sanitizeHref(node.getAttribute('href') ?? '') ?? '',\n )\n element.setAttribute('target', '_blank')\n element.setAttribute('rel', 'noopener noreferrer')\n }\n if (tag === 'IMG') {\n if (\n options.deferCidImageSrc &&\n imageSrc &&\n normalizeEmailCidUrl(imageSrc)\n ) {\n element.setAttribute('data-composer-cid-src', imageSrc)\n } else {\n element.setAttribute('src', imageSrc ?? '')\n }\n const alt = sanitizePlainAttribute(node.getAttribute('alt') ?? '')\n const title = sanitizePlainAttribute(node.getAttribute('title') ?? '')\n if (alt) element.setAttribute('alt', alt)\n if (title) element.setAttribute('title', title)\n }\n\n copyAllowedAttributes(node, element, tag)\n copySafeEmailStyles(node, element, {\n imageUrlResolver: options.imageUrlResolver,\n })\n\n for (const child of Array.from(node.childNodes))\n appendSanitizedNode(element, child, options)\n parent.appendChild(element)\n}\n\nfunction sanitizeImageSrc(value: string, options: SanitizeHtmlOptions) {\n return options.imageUrlResolver\n ? options.imageUrlResolver(value)\n : toSafeEmailImageUrl(value)\n}\n\nfunction restoreDeferredCidImageSources(html: string) {\n return html.replace(/\\sdata-composer-cid-src=\"([^\"]*)\"/g, ' src=\"$1\"')\n}\n\nfunction sanitizeHref(value: string) {\n const parsed = parseUrl(value)\n if (!parsed) return undefined\n\n if (\n parsed.protocol !== 'http:' &&\n parsed.protocol !== 'https:' &&\n parsed.protocol !== 'mailto:'\n )\n return undefined\n\n if (parsed.protocol === 'mailto:') return parsed.href\n return parsed.toString()\n}\n\nfunction parseUrl(value: string) {\n const trimmed = value.trim()\n if (!trimmed) return undefined\n if (typeof URL === 'undefined') return undefined\n\n try {\n return new URL(trimmed, globalThis.location?.href ?? 'https://localhost/')\n } catch {\n return undefined\n }\n}\n\nfunction hasFileTransfer(dataTransfer: DataTransfer | null) {\n if (!dataTransfer) return false\n return Array.from(dataTransfer.types).includes('Files')\n}\n\nfunction copyAllowedAttributes(\n source: HTMLElement,\n target: HTMLElement,\n tag: string,\n) {\n if (tag === 'TABLE') {\n copyDimensionAttribute(source, target, 'width')\n copyNumberAttribute(source, target, 'border', 0, 20)\n copyNumberAttribute(source, target, 'cellpadding', 0, 80)\n copyNumberAttribute(source, target, 'cellspacing', 0, 80)\n copyKeywordAttribute(source, target, 'align', ['center', 'left', 'right'])\n copyKeywordAttribute(source, target, 'role', ['none', 'presentation'])\n return\n }\n\n if (tag === 'COL' || tag === 'COLGROUP') {\n copyDimensionAttribute(source, target, 'width')\n copyNumberAttribute(source, target, 'span', 1, 100)\n copyKeywordAttribute(source, target, 'align', ['center', 'left', 'right'])\n return\n }\n\n if (tag === 'TD' || tag === 'TH') {\n copyDimensionAttribute(source, target, 'width')\n copyDimensionAttribute(source, target, 'height')\n copyNumberAttribute(source, target, 'colspan', 1, 100)\n copyNumberAttribute(source, target, 'rowspan', 1, 100)\n copyKeywordAttribute(source, target, 'align', [\n 'center',\n 'justify',\n 'left',\n 'right',\n ])\n copyKeywordAttribute(source, target, 'valign', [\n 'baseline',\n 'bottom',\n 'middle',\n 'top',\n ])\n copyKeywordAttribute(source, target, 'aria-hidden', ['false', 'true'])\n return\n }\n\n if (tag === 'TR') {\n copyKeywordAttribute(source, target, 'align', [\n 'center',\n 'justify',\n 'left',\n 'right',\n ])\n copyKeywordAttribute(source, target, 'valign', [\n 'baseline',\n 'bottom',\n 'middle',\n 'top',\n ])\n }\n\n if (tag === 'FONT') {\n copyPlainAttribute(source, target, 'face')\n copyColorAttribute(source, target, 'color')\n copyFontSizeAttribute(source, target, 'size')\n return\n }\n\n if (tag === 'OL') {\n copyNumberAttribute(source, target, 'start', 1, 9999)\n copyKeywordAttribute(source, target, 'type', ['1', 'a', 'A', 'i', 'I'])\n }\n}\n\nfunction copyPlainAttribute(\n source: HTMLElement,\n target: HTMLElement,\n name: string,\n) {\n const value = sanitizePlainAttribute(source.getAttribute(name) ?? '')\n if (value) target.setAttribute(name, value)\n}\n\nfunction copyColorAttribute(\n source: HTMLElement,\n target: HTMLElement,\n name: string,\n) {\n const value = sanitizeColorAttribute(source.getAttribute(name) ?? '')\n if (value) target.setAttribute(name, value)\n}\n\nfunction copyFontSizeAttribute(\n source: HTMLElement,\n target: HTMLElement,\n name: string,\n) {\n const value = sanitizeFontSizeAttribute(source.getAttribute(name) ?? '')\n if (value) target.setAttribute(name, value)\n}\n\nfunction copyDimensionAttribute(\n source: HTMLElement,\n target: HTMLElement,\n name: string,\n) {\n const value = sanitizeHtmlDimension(source.getAttribute(name) ?? '')\n if (value) target.setAttribute(name, value)\n}\n\nfunction copyNumberAttribute(\n source: HTMLElement,\n target: HTMLElement,\n name: string,\n min: number,\n max: number,\n) {\n const value = sanitizeIntegerAttribute(\n source.getAttribute(name) ?? '',\n min,\n max,\n )\n if (value) target.setAttribute(name, value)\n}\n\nfunction copyKeywordAttribute(\n source: HTMLElement,\n target: HTMLElement,\n name: string,\n allowed: string[],\n) {\n const value = sanitizeKeyword(source.getAttribute(name) ?? '', allowed)\n if (value) target.setAttribute(name, value)\n}\n\nfunction sanitizeHtmlDimension(value: string) {\n const trimmed = value.trim()\n const match = /^(\\d{1,4})(%)?$/.exec(trimmed)\n if (!match) return undefined\n\n const amount = Number(match[1])\n if (!Number.isFinite(amount)) return undefined\n if (match[2]) return `${Math.min(100, Math.max(1, amount))}%`\n return String(Math.min(2400, Math.max(0, amount)))\n}\n\nfunction sanitizeIntegerAttribute(value: string, min: number, max: number) {\n const match = /^\\d{1,4}$/.exec(value.trim())\n if (!match) return undefined\n\n const amount = Number(match[0])\n if (!Number.isFinite(amount)) return undefined\n return String(Math.min(max, Math.max(min, amount)))\n}\n\nfunction sanitizeKeyword(value: string, allowed: string[]) {\n const normalized = value.trim()\n const exactMatch = allowed.find((item) => item === normalized)\n if (exactMatch) return exactMatch\n\n const match = allowed.find(\n (item) => item.toLowerCase() === normalized.toLowerCase(),\n )\n return match\n}\n\nfunction sanitizeColorAttribute(value: string) {\n const normalized = value.trim()\n if (\n /^#[0-9a-f]{3}([0-9a-f]{3})?$/i.test(normalized) ||\n /^[a-z]{3,24}$/i.test(normalized)\n ) {\n return normalized\n }\n\n return undefined\n}\n\nfunction sanitizeFontSizeAttribute(value: string) {\n const match = /^[+-]?\\d$/.exec(value.trim())\n if (!match) return undefined\n\n const amount = Number(match[0])\n if (!Number.isFinite(amount)) return undefined\n return String(Math.min(7, Math.max(-7, amount)))\n}\n\nfunction htmlToText(value: string) {\n if (!value.trim()) return ''\n\n const template = document.createElement('template')\n template.innerHTML = sanitizeHtml(value, {\n deferCidImageSrc: true,\n })\n const lines: string[] = []\n collectText(template.content, lines)\n return lines\n .join('\\n')\n .replace(/[ \\t]+\\n/g, '\\n')\n .replace(/\\n{3,}/g, '\\n\\n')\n .trim()\n}\n\nfunction hasMeaningfulEditorContent(node: Node) {\n if (node.nodeType === Node.TEXT_NODE) return !!node.textContent?.trim()\n if (!(node instanceof HTMLElement || node instanceof DocumentFragment))\n return false\n\n if (node instanceof HTMLElement) {\n const tag = node.tagName.toUpperCase()\n if (tag === 'IMG' || tag === 'HR') return true\n if (tag === 'BR') return false\n }\n\n for (const child of Array.from(node.childNodes))\n if (hasMeaningfulEditorContent(child)) return true\n\n return false\n}\n\nfunction findWritingStartNode(root: HTMLElement): Node {\n for (const child of Array.from(root.childNodes)) {\n if (child instanceof HTMLElement && isEmptyWritingBlock(child)) return child\n if (child.nodeType === Node.TEXT_NODE && child.textContent?.trim())\n return child\n }\n\n return root\n}\n\nfunction isVisibleForFocus(element: HTMLElement) {\n return element.isConnected && element.getClientRects().length > 0\n}\n\nfunction isEmptyWritingBlock(element: HTMLElement) {\n const tag = element.tagName.toUpperCase()\n if (tag !== 'P' && tag !== 'DIV') return false\n if (element.querySelector('img, table, hr')) return false\n return !element.textContent?.trim()\n}\n\nfunction collectText(node: Node, lines: string[]) {\n if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent?.replace(/\\s+/g, ' ') ?? ''\n if (!text) return\n if (lines.length === 0) lines.push(text)\n else lines[lines.length - 1] += text\n return\n }\n if (!(node instanceof HTMLElement || node instanceof DocumentFragment)) return\n\n const isBlock =\n node instanceof HTMLElement &&\n [\n 'ADDRESS',\n 'BLOCKQUOTE',\n 'CAPTION',\n 'CENTER',\n 'DD',\n 'DIV',\n 'DL',\n 'DT',\n 'H1',\n 'H2',\n 'H3',\n 'H4',\n 'H5',\n 'H6',\n 'HR',\n 'LI',\n 'OL',\n 'P',\n 'PRE',\n 'TABLE',\n 'TBODY',\n 'TD',\n 'TFOOT',\n 'TH',\n 'THEAD',\n 'TR',\n 'UL',\n ].includes(node.tagName.toUpperCase())\n if (isBlock && lines[lines.length - 1]?.trim()) lines.push('')\n if (node instanceof HTMLElement && node.tagName.toUpperCase() === 'BR') {\n lines.push('')\n return\n }\n\n for (const child of Array.from(node.childNodes)) collectText(child, lines)\n if (isBlock && lines[lines.length - 1]?.trim()) lines.push('')\n}\n\nfunction plainTextToHtml(value: string) {\n const text = value.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n').trim()\n if (!text) return ''\n\n return text\n .split(/\\n{2,}/)\n .map(\n (paragraph) =>\n `<p>${paragraph.split('\\n').map(escapeHtml).join('<br>')}</p>`,\n )\n .join('')\n}\n\nfunction escapeHtml(value: string) {\n return value\n .replaceAll('&', '&amp;')\n .replaceAll('<', '&lt;')\n .replaceAll('>', '&gt;')\n .replaceAll('\"', '&quot;')\n .replaceAll(\"'\", '&#39;')\n}\n\nfunction escapeHtmlAttribute(value: string) {\n return escapeHtml(value).replaceAll('`', '&#96;')\n}\n","import type {\n ConsentCategory,\n ConsentConfig,\n PageContext,\n} from '@purestack/ts-common'\nimport { resolvePageContext } from '@purestack/ts-common'\nimport type { SemanticTone } from '@purestack/ts-style'\nimport { defineComponent, html, type RefOrValue } from 'regor'\nimport type {\n ComponentVariant,\n ComponentVariantMode,\n} from '../componentVariant'\n\nexport interface ConsentCategoryState extends ConsentCategory {\n inputId?: string\n}\n\nexport interface Consent extends ConsentConfig {\n settingsTeleport?: string\n categories: ConsentCategoryState[]\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n}\n\nconst consentTemplate = html`<section class=\"consent\" data-consent-root r-if=\"enabled\">\n <aside\n class=\"consent__banner\"\n data-consent-banner\n role=\"dialog\"\n aria-live=\"polite\"\n aria-modal=\"false\"\n hidden\n aria-hidden=\"true\"\n >\n <Panel\n :tone=\"tone || 'neutral'\"\n :variant=\"variant || 'surfaceAlt'\"\n :variantMode=\"variantMode\"\n >\n <Flex direction=\"column\" align=\"start\">\n <strong>{{ bannerTitle }}</strong>\n <span>{{ bannerDescription }}</span>\n <BtnLink\n r-if=\"privacyPolicyUrl\"\n :href=\"privacyPolicyUrl\"\n tone=\"neutral\"\n variant=\"link\"\n >\n {{ privacyPolicyLabel }}\n </BtnLink>\n <Flex align=\"center\" wrap=\"true\">\n <Btn tone=\"accent\" data-consent-action=\"accept-all\">\n {{ acceptAllLabel }}\n </Btn>\n <Btn tone=\"neutral\" data-consent-action=\"reject-all\">\n {{ rejectAllLabel }}\n </Btn>\n <Btn tone=\"neutral\" data-consent-action=\"open-panel\">\n {{ manageLabel }}\n </Btn>\n </Flex>\n </Flex>\n </Panel>\n </aside>\n\n <section\n class=\"consent__panel\"\n data-consent-panel\n role=\"dialog\"\n aria-modal=\"false\"\n hidden\n aria-hidden=\"true\"\n >\n <Panel\n :tone=\"tone || 'neutral'\"\n :variant=\"variant || 'surfaceAlt'\"\n :variantMode=\"variantMode\"\n >\n <Flex direction=\"column\" align=\"start\">\n <Flex align=\"center\" justify=\"between\" class=\"w-full\">\n <strong>{{ manageLabel }}</strong>\n <Btn\n tone=\"ghost\"\n size=\"sm\"\n data-consent-action=\"close-panel\"\n aria-label=\"Close privacy settings\"\n >\n <span aria-hidden=\"true\">X</span>\n </Btn>\n </Flex>\n\n <Flex direction=\"column\" align=\"stretch\" class=\"w-full\">\n <Panel\n r-for=\"category in categories\"\n tone=\"neutral\"\n variant=\"outline\"\n >\n <Flex direction=\"column\" align=\"start\">\n <FormCheck\n :id=\"category.inputId\"\n :label=\"category.label\"\n :checked=\"category.required\"\n :disabled=\"category.required\"\n :described-by=\"category.description ? category.inputId + '-desc' : undefined\"\n :data-consent-category-id=\"category.id\"/>\n <small\n r-if=\"category.description\"\n :id=\"category.inputId + '-desc'\"\n >\n {{ category.description }}\n </small>\n </Flex>\n </Panel>\n </Flex>\n\n <Flex align=\"center\" wrap=\"true\">\n <Btn tone=\"accent\" data-consent-action=\"save\">\n {{ saveLabel }}\n </Btn>\n <Btn tone=\"accent\" data-consent-action=\"accept-all\">\n {{ acceptAllLabel }}\n </Btn>\n <Btn tone=\"neutral\" data-consent-action=\"reject-all\">\n {{ rejectAllLabel }}\n </Btn>\n </Flex>\n </Flex>\n </Panel>\n </section>\n\n <Btn\n tone=\"ghost\"\n size=\"sm\"\n data-consent-settings\n data-consent-action=\"open-panel\"\n :r-teleport=\"settingsTeleport\"\n hidden\n >\n {{ settingsLabel }}\n </Btn>\n</section>`\n\nfunction defineConsentComponent() {\n return defineComponent<Consent>(consentTemplate, {\n props: ['tone', 'variant', 'variantMode'],\n context: (head) => resolveConsent(resolvePageContext(head), head.props),\n })\n}\n\nfunction resolveConsent(\n context: PageContext,\n props: Partial<Consent>,\n): Consent {\n const consent = context.site.consent\n const categories = consent.categories.map((category) => ({\n id: category.id,\n label: category.label,\n description: category.description,\n required: category.required === true || category.id === 'necessary',\n inputId: `consent-category-${category.id}`,\n }))\n return {\n ...consent,\n tone: props.tone,\n variant: props.variant,\n variantMode: props.variantMode,\n settingsTeleport: '.consent-settings-teleport-area',\n categories,\n }\n}\n\nexport function defineConsentComponents() {\n return { consent: defineConsentComponent() }\n}\n","import { defineComponent, html } from 'regor'\n\nexport type ContactFormMethod = 'get' | 'post'\n\nexport interface ContactForm {\n title?: string\n description?: string\n action?: string\n method?: ContactFormMethod\n submitLabel?: string\n nameLabel?: string\n emailLabel?: string\n topicLabel?: string\n messageLabel?: string\n namePlaceholder?: string\n emailPlaceholder?: string\n messagePlaceholder?: string\n topicGeneralLabel?: string\n topicSupportLabel?: string\n topicPartnershipLabel?: string\n resolvedMethod?: ContactFormMethod\n}\n\nconst contactFormTemplate = html`<section class=\"contact-form\">\n <div class=\"contact-form__header\">\n <h3 class=\"contact-form__title\">{{ title }}</h3>\n <p class=\"contact-form__description\">{{ description }}</p>\n </div>\n <form\n class=\"contact-form__form\"\n :action=\"action\"\n :method=\"resolvedMethod\"\n enctype=\"text/plain\"\n >\n <label class=\"contact-form__field\">\n <span class=\"contact-form__label\">{{ nameLabel }}</span>\n <input\n class=\"contact-form__input\"\n type=\"text\"\n name=\"name\"\n :placeholder=\"namePlaceholder\"\n required\n autocomplete=\"name\"\n />\n </label>\n <label class=\"contact-form__field\">\n <span class=\"contact-form__label\">{{ emailLabel }}</span>\n <input\n class=\"contact-form__input\"\n type=\"email\"\n name=\"email\"\n :placeholder=\"emailPlaceholder\"\n required\n autocomplete=\"email\"\n />\n </label>\n <label class=\"contact-form__field\">\n <span class=\"contact-form__label\">{{ topicLabel }}</span>\n <select class=\"contact-form__select\" name=\"topic\" required>\n <option>{{ topicGeneralLabel }}</option>\n <option>{{ topicSupportLabel }}</option>\n <option>{{ topicPartnershipLabel }}</option>\n </select>\n </label>\n <label class=\"contact-form__field\">\n <span class=\"contact-form__label\">{{ messageLabel }}</span>\n <textarea\n class=\"contact-form__textarea\"\n name=\"message\"\n rows=\"6\"\n :placeholder=\"messagePlaceholder\"\n required\n ></textarea>\n </label>\n <div class=\"contact-form__actions\">\n <Btn type=\"submit\">\n {{ submitLabel }}\n </Btn>\n </div>\n </form>\n</section>`\n\nfunction defineContactFormComponent() {\n return defineComponent<ContactForm>(contactFormTemplate, {\n props: [\n 'title',\n 'description',\n 'action',\n 'method',\n 'submitLabel',\n 'nameLabel',\n 'emailLabel',\n 'topicLabel',\n 'messageLabel',\n 'namePlaceholder',\n 'emailPlaceholder',\n 'messagePlaceholder',\n 'topicGeneralLabel',\n 'topicSupportLabel',\n 'topicPartnershipLabel',\n ],\n context: (head) => resolveContactForm(head.props),\n })\n}\n\nexport function defineContactFormComponents() {\n return {\n contactForm: defineContactFormComponent(),\n }\n}\n\nfunction resolveContactForm(props: ContactForm): ContactForm {\n const normalizedMethod = props.method?.trim().toLowerCase()\n return {\n title: props.title || 'Send a message',\n description:\n props.description ||\n 'Share context and goals so we can route your request quickly.',\n action: props.action || 'mailto:team@purestack.dev',\n method: props.method || 'post',\n resolvedMethod: normalizedMethod === 'get' ? 'get' : 'post',\n submitLabel: props.submitLabel || 'Send Message',\n nameLabel: props.nameLabel || 'Name',\n emailLabel: props.emailLabel || 'Email',\n topicLabel: props.topicLabel || 'Topic',\n messageLabel: props.messageLabel || 'Message',\n namePlaceholder: props.namePlaceholder || 'Your name',\n emailPlaceholder: props.emailPlaceholder || 'name@company.com',\n messagePlaceholder:\n props.messagePlaceholder || 'Tell us what you are trying to solve.',\n topicGeneralLabel: props.topicGeneralLabel || 'General inquiry',\n topicSupportLabel: props.topicSupportLabel || 'Technical support',\n topicPartnershipLabel: props.topicPartnershipLabel || 'Partnership',\n }\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComputedRef,\n computed,\n defineComponent,\n type RefOrValue,\n svg,\n unref,\n} from 'regor'\nimport { createAutoId } from '../autoId'\nimport {\n DEFAULT_CHART_COLORS,\n DEFAULT_CHART_EMPTY_LABEL,\n DEFAULT_CHART_SIZE,\n} from '../chart/chartDefaults'\nimport {\n clampChartNumber,\n formatChartNumber,\n formatChartPoint,\n formatChartValue,\n readChartNumber,\n resolveChartCssSize,\n resolveChartSize,\n resolveChartText,\n} from '../chart/chartUtils'\nimport type {\n ComponentVariant,\n ComponentVariantMode,\n} from '../componentVariant'\nimport { resolveComponentClasses } from '../componentVariant'\n\nexport interface DoughnutChartSegment {\n label?: RefOrValue<string>\n value?: RefOrValue<number | string>\n color?: RefOrValue<string>\n}\n\nexport interface ResolvedDoughnutChartSegment {\n label: string\n value: number\n percent: number\n formattedValue: string\n path: string\n color: string\n}\n\nexport interface ResolvedDoughnutChartSeparator {\n path: string\n}\n\nexport interface DoughnutChart {\n segments?: RefOrValue<Array<RefOrValue<DoughnutChartSegment>>>\n title?: RefOrValue<string>\n description?: RefOrValue<string>\n ariaLabel?: RefOrValue<string>\n centerLabel?: RefOrValue<string>\n centerValue?: RefOrValue<string>\n centerLabelSize?: RefOrValue<number | string>\n centerValueSize?: RefOrValue<number | string>\n emptyLabel?: RefOrValue<string>\n valueSuffix?: RefOrValue<string>\n size?: RefOrValue<number | string>\n thickness?: RefOrValue<number | string>\n gap?: RefOrValue<number | string>\n startAngle?: RefOrValue<number | string>\n animated?: RefOrValue<boolean | string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n classes?: ComputedRef<string>\n resolvedSize?: ComputedRef<string | number>\n resolvedAriaLabel?: ComputedRef<string>\n resolvedEmptyLabel?: ComputedRef<string>\n chartSegments?: ComputedRef<ResolvedDoughnutChartSegment[]>\n separators?: ComputedRef<ResolvedDoughnutChartSeparator[]>\n hasSeparators?: ComputedRef<boolean>\n separatorMaskId?: string\n separatorMaskUrl?: ComputedRef<string | undefined>\n hasSegments?: ComputedRef<boolean>\n total?: ComputedRef<number>\n centerValueText?: ComputedRef<string>\n centerLabelStyle?: ComputedRef<Record<string, string> | undefined>\n centerValueStyle?: ComputedRef<Record<string, string> | undefined>\n trackPath?: ComputedRef<string>\n}\n\nconst CHART_CENTER = 50\nconst CHART_OUTER_RADIUS = 46\nconst DEFAULT_CHART_THICKNESS = 14\nconst DEFAULT_CHART_GAP = 2\nconst DEFAULT_CHART_START_ANGLE = -90\nconst FULL_CIRCLE = 360\nconst MAX_SEPARATOR_SEGMENT_SHARE = 0.15\nconst MIN_SEPARATOR_WIDTH = 0.25\nconst SEPARATOR_MASK_BLEED = 0.35\nconst resolveDoughnutChartMaskId = createAutoId('doughnut-chart-mask')\n\nconst doughnutChartTemplate = svg`<svg\n class=\"doughnut-chart\"\n :class=\"classes\"\n viewBox=\"0 0 100 100\"\n :width=\"resolvedSize\"\n :height=\"resolvedSize\"\n role=\"img\"\n :aria-label=\"resolvedAriaLabel\"\n>\n <title r-if=\"title\">{{ title }}</title>\n <desc r-if=\"description\">{{ description }}</desc>\n <defs r-if=\"hasSeparators\">\n <mask\n class=\"doughnut-chart__separator-mask\"\n :id=\"separatorMaskId\"\n maskUnits=\"userSpaceOnUse\"\n x=\"0\"\n y=\"0\"\n width=\"100\"\n height=\"100\"\n >\n <rect x=\"0\" y=\"0\" width=\"100\" height=\"100\" fill=\"white\"/>\n <path\n r-for=\"separator in separators\"\n class=\"doughnut-chart__separator\"\n :d=\"separator.path\"\n fill=\"black\"/>\n </mask>\n </defs>\n <g class=\"doughnut-chart__plot\" :mask=\"separatorMaskUrl\">\n <animate\n r-if=\"animated\"\n attributeName=\"opacity\"\n from=\"0\"\n to=\"1\"\n dur=\"560ms\"\n fill=\"freeze\"/>\n <animateTransform\n r-if=\"animated\"\n attributeName=\"transform\"\n type=\"rotate\"\n from=\"-90 50 50\"\n to=\"0 50 50\"\n dur=\"1760ms\"\n calcMode=\"spline\"\n keyTimes=\"0;1\"\n keySplines=\"0.16 1 0.3 1\"\n fill=\"freeze\"/>\n <path class=\"doughnut-chart__track\" :d=\"trackPath\" fill-rule=\"evenodd\"/>\n <g class=\"doughnut-chart__segments\" r-if=\"hasSegments\">\n <path\n r-for=\"segment in chartSegments\"\n class=\"doughnut-chart__segment\"\n :d=\"segment.path\"\n :fill=\"segment.color\"\n :aria-label=\"segment.label + ': ' + segment.formattedValue\"\n fill-rule=\"evenodd\"\n >\n <title>{{ segment.label + ': ' + segment.formattedValue }}</title>\n </path>\n </g>\n </g>\n <g class=\"doughnut-chart__center\" r-if=\"centerValueText || centerLabel\">\n <animate\n r-if=\"animated\"\n attributeName=\"opacity\"\n from=\"0\"\n to=\"1\"\n dur=\"360ms\"\n fill=\"freeze\"/>\n <text\n class=\"doughnut-chart__center-value\"\n x=\"50\"\n :y=\"centerLabel ? 48 : 52\"\n text-anchor=\"middle\"\n :style=\"centerValueStyle\"\n >\n {{ centerValueText }}\n </text>\n <text\n r-if=\"centerLabel\"\n class=\"doughnut-chart__center-label\"\n x=\"50\"\n y=\"61\"\n text-anchor=\"middle\"\n :style=\"centerLabelStyle\"\n >\n {{ centerLabel }}\n </text>\n </g>\n <text\n r-if=\"!hasSegments && !centerValueText && !centerLabel\"\n class=\"doughnut-chart__empty\"\n x=\"50\"\n y=\"52\"\n text-anchor=\"middle\"\n >\n {{ resolvedEmptyLabel }}\n </text>\n</svg>`\n\nfunction defineDoughnutChartComponent() {\n return defineComponent<DoughnutChart>(doughnutChartTemplate, {\n props: [\n 'segments',\n 'title',\n 'description',\n 'ariaLabel',\n 'centerLabel',\n 'centerValue',\n 'centerLabelSize',\n 'centerValueSize',\n 'emptyLabel',\n 'valueSuffix',\n 'size',\n 'thickness',\n 'gap',\n 'startAngle',\n 'animated',\n 'tone',\n 'variant',\n 'variantMode',\n ],\n context: (head) => resolveDoughnutChart(head.props),\n })\n}\n\nexport function defineDoughnutChartComponents() {\n return {\n doughnutChart: defineDoughnutChartComponent(),\n }\n}\n\nfunction resolveDoughnutChart(props: DoughnutChart): DoughnutChart {\n const separatorMaskId = resolveDoughnutChartMaskId()\n const thickness = computed(() =>\n clampChartNumber(props.thickness, DEFAULT_CHART_THICKNESS, 2, 40),\n )\n const innerRadius = computed(() => CHART_OUTER_RADIUS - thickness())\n const total = computed(() => resolveTotal(props.segments))\n const chartSegments = computed(() =>\n resolveChartSegments(props, total(), innerRadius()),\n )\n const separators = computed(() =>\n resolveSeparators(props, chartSegments(), innerRadius()),\n )\n\n return {\n animated: true,\n ...props,\n classes: computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: 'none',\n defaultVariantMode: 'stateless',\n }),\n ),\n resolvedSize: computed(() =>\n resolveChartSize(props.size, DEFAULT_CHART_SIZE),\n ),\n resolvedAriaLabel: computed(() => resolveAriaLabel(props)),\n resolvedEmptyLabel: computed(\n () => resolveChartText(props.emptyLabel) || DEFAULT_CHART_EMPTY_LABEL,\n ),\n total,\n chartSegments,\n separators,\n hasSeparators: computed(() => separators().length > 0),\n separatorMaskId,\n separatorMaskUrl: computed(() =>\n separators().length > 0 ? `url(#${separatorMaskId})` : undefined,\n ),\n hasSegments: computed(() => chartSegments().length > 0),\n centerValueText: computed(() => resolveCenterValue(props, total())),\n centerLabelStyle: computed<Record<string, string> | undefined>(() =>\n resolveFontSizeStyle(props.centerLabelSize),\n ),\n centerValueStyle: computed<Record<string, string> | undefined>(() =>\n resolveFontSizeStyle(props.centerValueSize),\n ),\n trackPath: computed(() => fullRingPath(CHART_OUTER_RADIUS, innerRadius())),\n }\n}\n\nfunction resolveChartSegments(\n props: DoughnutChart,\n total: number,\n innerRadius: number,\n): ResolvedDoughnutChartSegment[] {\n if (total <= 0) return []\n\n const startAngle = readChartNumber(\n props.startAngle,\n DEFAULT_CHART_START_ANGLE,\n )\n const valueSuffix = resolveChartText(props.valueSuffix)\n let cursor = startAngle\n\n return resolvePositiveSegments(props.segments).map((segment, index) => {\n const span = (segment.value / total) * FULL_CIRCLE\n const segmentStart = cursor\n const segmentEnd = cursor + span\n cursor += span\n\n return {\n ...segment,\n percent: segment.value / total,\n formattedValue: formatSegmentValue(segment.value, valueSuffix),\n color:\n segment.color ||\n DEFAULT_CHART_COLORS[index % DEFAULT_CHART_COLORS.length],\n path:\n segmentEnd - segmentStart >= FULL_CIRCLE - 0.001\n ? fullRingPath(CHART_OUTER_RADIUS, innerRadius)\n : ringSegmentPath(\n CHART_OUTER_RADIUS,\n innerRadius,\n segmentStart,\n segmentEnd,\n ),\n }\n })\n}\n\nfunction resolveSeparators(\n props: DoughnutChart,\n segments: ResolvedDoughnutChartSegment[],\n innerRadius: number,\n): ResolvedDoughnutChartSeparator[] {\n if (segments.length < 2) return []\n\n const gap = clampChartNumber(props.gap, DEFAULT_CHART_GAP, 0, 24)\n if (gap <= 0) return []\n\n let cursor = readChartNumber(props.startAngle, DEFAULT_CHART_START_ANGLE)\n return segments.flatMap((segment, index) => {\n const previousSegment = segments.at(index - 1) || segment\n const width = resolveAdaptiveSeparatorWidth(\n gap,\n innerRadius,\n CHART_OUTER_RADIUS,\n previousSegment,\n segment,\n )\n if (width < MIN_SEPARATOR_WIDTH) {\n cursor += segment.percent * FULL_CIRCLE\n return []\n }\n\n const path = separatorPath(\n cursor,\n Math.max(0, innerRadius - SEPARATOR_MASK_BLEED),\n CHART_OUTER_RADIUS + SEPARATOR_MASK_BLEED,\n width,\n )\n cursor += segment.percent * FULL_CIRCLE\n return [{ path }]\n })\n}\n\nfunction resolveAdaptiveSeparatorWidth(\n maxWidth: number,\n innerRadius: number,\n outerRadius: number,\n previousSegment: ResolvedDoughnutChartSegment,\n nextSegment: ResolvedDoughnutChartSegment,\n) {\n const smallerSegmentSpan =\n Math.min(previousSegment.percent, nextSegment.percent) * FULL_CIRCLE\n const maxSeparatorAngle = smallerSegmentSpan * MAX_SEPARATOR_SEGMENT_SHARE\n const midRadius = (innerRadius + outerRadius) / 2\n const adaptiveWidth = chordWidth(midRadius, maxSeparatorAngle)\n return Math.min(maxWidth, adaptiveWidth)\n}\n\nfunction chordWidth(radius: number, angle: number) {\n if (radius <= 0 || angle <= 0) return 0\n const radians = (angle * Math.PI) / 180\n return 2 * radius * Math.sin(radians / 2)\n}\n\nfunction separatorPath(\n angle: number,\n innerRadius: number,\n outerRadius: number,\n width: number,\n) {\n const halfWidth = Math.min(\n width / 2,\n innerRadius - 0.001,\n outerRadius - 0.001,\n )\n if (halfWidth <= 0) return ''\n\n const radians = (angle * Math.PI) / 180\n const ux = Math.cos(radians)\n const uy = Math.sin(radians)\n const px = -uy\n const py = ux\n const outerDistance = Math.sqrt(outerRadius ** 2 - halfWidth ** 2)\n const innerDistance = Math.sqrt(innerRadius ** 2 - halfWidth ** 2)\n const outerStart = offsetPoint(ux, uy, px, py, outerDistance, halfWidth)\n const outerEnd = offsetPoint(ux, uy, px, py, outerDistance, -halfWidth)\n const innerEnd = offsetPoint(ux, uy, px, py, innerDistance, -halfWidth)\n const innerStart = offsetPoint(ux, uy, px, py, innerDistance, halfWidth)\n\n return [\n `M ${formatPoint(outerStart)}`,\n `A ${fmt(outerRadius)} ${fmt(outerRadius)} 0 0 0 ${formatPoint(outerEnd)}`,\n `L ${formatPoint(innerEnd)}`,\n `A ${fmt(innerRadius)} ${fmt(innerRadius)} 0 0 1 ${formatPoint(innerStart)}`,\n 'Z',\n ].join(' ')\n}\n\nfunction offsetPoint(\n ux: number,\n uy: number,\n px: number,\n py: number,\n radialDistance: number,\n offset: number,\n) {\n return {\n x: CHART_CENTER + ux * radialDistance + px * offset,\n y: CHART_CENTER + uy * radialDistance + py * offset,\n }\n}\n\nfunction resolvePositiveSegments(\n segments: DoughnutChart['segments'],\n): Array<\n Omit<ResolvedDoughnutChartSegment, 'percent' | 'formattedValue' | 'path'>\n> {\n return (unref(segments) || [])\n .map((segmentInput, index) => {\n const segment = unref(segmentInput)\n const value = readChartNumber(segment?.value, 0)\n return {\n label: resolveChartText(segment?.label) || `Segment ${index + 1}`,\n value: value > 0 ? value : 0,\n color: resolveChartText(segment?.color),\n }\n })\n .filter((segment) => segment.value > 0)\n}\n\nfunction resolveTotal(segments: DoughnutChart['segments']) {\n return resolvePositiveSegments(segments).reduce(\n (total, segment) => total + segment.value,\n 0,\n )\n}\n\nfunction resolveCenterValue(props: DoughnutChart, total: number) {\n const explicit = resolveChartText(props.centerValue)\n if (explicit) return explicit\n if (total <= 0) return ''\n return formatSegmentValue(total, resolveChartText(props.valueSuffix))\n}\n\nfunction resolveAriaLabel(props: DoughnutChart) {\n return (\n resolveChartText(props.ariaLabel) ||\n resolveChartText(props.title) ||\n 'Doughnut chart'\n )\n}\n\nfunction resolveFontSizeStyle(size?: RefOrValue<number | string>) {\n const fontSize = resolveChartCssSize(size)\n return fontSize ? { fontSize } : undefined\n}\n\nfunction fullRingPath(outerRadius: number, innerRadius: number) {\n const topOuter = pointAtAngle(outerRadius, -90)\n const bottomOuter = pointAtAngle(outerRadius, 90)\n const topInner = pointAtAngle(innerRadius, -90)\n const bottomInner = pointAtAngle(innerRadius, 90)\n\n return [\n `M ${formatPoint(topOuter)}`,\n `A ${fmt(outerRadius)} ${fmt(outerRadius)} 0 1 1 ${formatPoint(bottomOuter)}`,\n `A ${fmt(outerRadius)} ${fmt(outerRadius)} 0 1 1 ${formatPoint(topOuter)}`,\n `M ${formatPoint(topInner)}`,\n `A ${fmt(innerRadius)} ${fmt(innerRadius)} 0 1 0 ${formatPoint(bottomInner)}`,\n `A ${fmt(innerRadius)} ${fmt(innerRadius)} 0 1 0 ${formatPoint(topInner)}`,\n 'Z',\n ].join(' ')\n}\n\nfunction ringSegmentPath(\n outerRadius: number,\n innerRadius: number,\n startAngle: number,\n endAngle: number,\n) {\n const outerStart = pointAtAngle(outerRadius, startAngle)\n const outerEnd = pointAtAngle(outerRadius, endAngle)\n const innerEnd = pointAtAngle(innerRadius, endAngle)\n const innerStart = pointAtAngle(innerRadius, startAngle)\n const largeArc = endAngle - startAngle > 180 ? 1 : 0\n\n return [\n `M ${formatPoint(outerStart)}`,\n `A ${fmt(outerRadius)} ${fmt(outerRadius)} 0 ${largeArc} 1 ${formatPoint(outerEnd)}`,\n `L ${formatPoint(innerEnd)}`,\n `A ${fmt(innerRadius)} ${fmt(innerRadius)} 0 ${largeArc} 0 ${formatPoint(innerStart)}`,\n 'Z',\n ].join(' ')\n}\n\nfunction pointAtAngle(radius: number, angle: number) {\n const radians = (angle * Math.PI) / 180\n return {\n x: CHART_CENTER + radius * Math.cos(radians),\n y: CHART_CENTER + radius * Math.sin(radians),\n }\n}\n\nfunction formatPoint(point: { x: number; y: number }) {\n return formatChartPoint(point, { precision: 3 })\n}\n\nfunction formatSegmentValue(value: number, suffix: string) {\n return formatChartValue(value, suffix, { precision: 3 })\n}\n\nfunction fmt(value: number) {\n return formatChartNumber(value, { precision: 3 })\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComponentHead,\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type RefOrValue,\n type SRef,\n sref,\n unref,\n} from 'regor'\nimport {\n type ComponentVariant,\n resolveComponentClasses,\n} from '../componentVariant'\n\nexport interface DropFileItem {\n id: string\n file: File\n name: string\n type: string\n size: number\n sizeLabel: string\n lastModified: number\n icon: string\n}\n\nexport type DropFilesIconMap = Record<string, string>\n\nexport interface DropFilesAddOptions {\n accept?: RefOrValue<string> | string[] // TODO: components can never get values, string[] is wrong type, must be included in RefOrValue. check for other abuse and fix all.\n iconMap?: DropFilesIconMap | SRef<DropFilesIconMap>\n fileIcon?: RefOrValue<string>\n multiple?: RefOrValue<boolean>\n idSequence?: number\n}\n\nexport interface DropFilesAddResult {\n files: DropFileItem[]\n idSequence: number\n acceptedCount: number\n}\n\nexport interface DropFiles {\n files?: SRef<DropFileItem[]>\n accept?: RefOrValue<string> | string[]\n iconMap?: DropFilesIconMap | SRef<DropFilesIconMap>\n label?: RefOrValue<string>\n hint?: RefOrValue<string>\n emptyTitle?: RefOrValue<string>\n emptyText?: RefOrValue<string>\n disabled?: RefOrValue<boolean>\n multiple?: RefOrValue<boolean>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n uploadIcon?: RefOrValue<string>\n fileIcon?: RefOrValue<string>\n removeIcon?: RefOrValue<string>\n onChange?: (files: DropFileItem[]) => void\n inputElement?: ReturnType<typeof sref<HTMLInputElement | null>>\n dragging?: SRef<boolean>\n classes?: ComputedRef<string>\n acceptValue?: ComputedRef<string>\n resolvedMultiple?: ComputedRef<boolean>\n resolvedUploadIcon?: ComputedRef<string>\n resolvedRemoveIcon?: ComputedRef<string>\n hasFiles?: ComputedRef<boolean>\n openFileDialog?: () => void\n handleZoneKeydown?: (event: KeyboardEvent) => void\n handleInput?: (event: Event) => void\n handlePaste?: (event: ClipboardEvent) => void\n handleDragEnter?: (event: DragEvent) => void\n handleDragOver?: (event: DragEvent) => void\n handleDragLeave?: (event: DragEvent) => void\n handleDrop?: (event: DragEvent) => void\n removeFile?: (id: string) => void\n clear?: () => void\n}\n\nconst DEFAULT_UPLOAD_ICON = 'lucide:cloud-upload'\nconst DEFAULT_FILE_ICON = 'lucide:file'\nconst DEFAULT_REMOVE_ICON = 'lucide:trash'\n\nconst DEFAULT_ICON_MAP: DropFilesIconMap = {\n 'image/*': 'lucide:file-image',\n 'text/*': 'lucide:file-text',\n 'application/pdf': 'lucide:file-text',\n 'application/zip': 'lucide:file-archive',\n 'application/x-zip-compressed': 'lucide:file-archive',\n '.zip': 'lucide:file-archive',\n}\n\nconst dropFilesTemplate = html`<div class=\"drop-files\">\n <span class=\"drop-files__label\" r-if=\"label\">{{ label }}</span>\n <input\n class=\"drop-files__input\"\n :ref=\"inputElement\"\n type=\"file\"\n :accept=\"acceptValue\"\n :multiple=\"resolvedMultiple\"\n :disabled=\"disabled\"\n tabindex=\"-1\"\n @change=\"handleInput\"/>\n <div\n class=\"drop-files__zone\"\n :class=\"classes\"\n role=\"button\"\n tabindex=\"0\"\n :aria-disabled=\"disabled\"\n @click=\"openFileDialog\"\n @keydown=\"handleZoneKeydown\"\n @paste=\"handlePaste\"\n @dragenter=\"handleDragEnter\"\n @dragover=\"handleDragOver\"\n @dragleave=\"handleDragLeave\"\n @drop=\"handleDrop\"\n >\n <Icon class=\"drop-files__zone-icon\" :name=\"resolvedUploadIcon\"/>\n <span class=\"drop-files__zone-title\">{{ emptyTitle || 'Add files' }}</span>\n <span class=\"drop-files__zone-text\">\n {{ emptyText || 'Click, tap, paste, or drag files here.' }}\n </span>\n <span class=\"drop-files__hint\" r-if=\"hint\">{{ hint }}</span>\n </div>\n <ul class=\"drop-files__list\" r-if=\"hasFiles\" aria-label=\"Selected files\">\n <li class=\"drop-files__item\" r-for=\"item in files\">\n <span class=\"drop-files__item-icon\">\n <Icon :name=\"item.icon\"/>\n </span>\n <span class=\"drop-files__item-body\">\n <span class=\"drop-files__item-name\">{{ item.name }}</span>\n <span class=\"drop-files__item-meta\">{{ item.sizeLabel }}</span>\n </span>\n <button\n class=\"drop-files__remove\"\n type=\"button\"\n title=\"Remove file\"\n aria-label=\"Remove file\"\n :disabled=\"disabled\"\n @click=\"removeFile(item.id)\"\n >\n <Icon :name=\"resolvedRemoveIcon\"/>\n </button>\n </li>\n </ul>\n</div>`\n\nfunction defineDropFilesComponent() {\n return defineComponent<DropFiles>(dropFilesTemplate, {\n props: [\n 'files',\n 'accept',\n 'iconMap',\n 'label',\n 'hint',\n 'emptyTitle',\n 'emptyText',\n 'disabled',\n 'multiple',\n 'tone',\n 'variant',\n 'uploadIcon',\n 'fileIcon',\n 'removeIcon',\n 'onChange',\n ],\n context: (head) => resolveDropFiles(head),\n })\n}\n\nexport function defineDropFilesComponents() {\n return {\n dropFiles: defineDropFilesComponent(),\n }\n}\n\nclass DropFilesContext implements DropFiles {\n readonly files: SRef<DropFileItem[]>\n readonly accept?: RefOrValue<string> | string[]\n readonly iconMap?: DropFilesIconMap | SRef<DropFilesIconMap>\n readonly label?: RefOrValue<string>\n readonly hint?: RefOrValue<string>\n readonly emptyTitle?: RefOrValue<string>\n readonly emptyText?: RefOrValue<string>\n readonly disabled?: RefOrValue<boolean>\n readonly multiple?: RefOrValue<boolean>\n readonly tone?: RefOrValue<SemanticTone>\n readonly variant?: RefOrValue<ComponentVariant>\n readonly uploadIcon?: RefOrValue<string>\n readonly fileIcon?: RefOrValue<string>\n readonly removeIcon?: RefOrValue<string>\n readonly onChange?: (files: DropFileItem[]) => void\n readonly inputElement = sref<HTMLInputElement | null>(null)\n readonly dragging = sref(false)\n readonly classes: ComputedRef<string>\n readonly acceptValue: ComputedRef<string>\n readonly resolvedMultiple: ComputedRef<boolean>\n readonly resolvedUploadIcon: ComputedRef<string>\n readonly resolvedRemoveIcon: ComputedRef<string>\n readonly hasFiles: ComputedRef<boolean>\n private dragDepth = 0\n private idSequence = 0\n\n constructor(props: DropFiles) {\n Object.assign(this, props)\n this.files = props.files ?? sref<DropFileItem[]>([])\n this.classes = computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: 'surfaceAlt',\n classes: [\n this.dragging() ? 'drop-files__zone--dragging' : '',\n unref(this.disabled) ? 'drop-files__zone--disabled' : '',\n ],\n }),\n )\n this.acceptValue = computed(() =>\n resolveAccept(this.accept, this.iconMap).join(','),\n )\n this.resolvedMultiple = computed(() => unref(props.multiple) !== false)\n this.resolvedUploadIcon = computed(\n () => unref(props.uploadIcon) || DEFAULT_UPLOAD_ICON,\n )\n this.resolvedRemoveIcon = computed(\n () => unref(props.removeIcon) || DEFAULT_REMOVE_ICON,\n )\n this.hasFiles = computed(() => this.files().length > 0)\n }\n\n openFileDialog = () => {\n if (unref(this.disabled)) return\n this.inputElement()?.click()\n }\n\n handleZoneKeydown = (event: KeyboardEvent) => {\n if (event.key !== 'Enter' && event.key !== ' ') return\n event.preventDefault()\n this.openFileDialog()\n }\n\n handleInput = (event: Event) => {\n if (unref(this.disabled)) return\n\n const input = event.currentTarget as HTMLInputElement | null\n this.addFileList(input?.files)\n if (input) input.value = ''\n }\n\n handlePaste = (event: ClipboardEvent) => {\n if (unref(this.disabled)) return\n\n const files = event.clipboardData?.files\n if (!files || files.length === 0) return\n\n event.preventDefault()\n this.addFileList(files)\n }\n\n handleDragEnter = (event: DragEvent) => {\n if (unref(this.disabled) || !hasFileTransfer(event.dataTransfer)) return\n event.preventDefault()\n ++this.dragDepth\n this.dragging(true)\n }\n\n handleDragOver = (event: DragEvent) => {\n if (unref(this.disabled) || !hasFileTransfer(event.dataTransfer)) return\n event.preventDefault()\n if (event.dataTransfer) event.dataTransfer.dropEffect = 'copy'\n }\n\n handleDragLeave = (event: DragEvent) => {\n if (unref(this.disabled) || !hasFileTransfer(event.dataTransfer)) return\n event.preventDefault()\n this.dragDepth = Math.max(0, this.dragDepth - 1)\n if (this.dragDepth === 0) this.dragging(false)\n }\n\n handleDrop = (event: DragEvent) => {\n if (unref(this.disabled) || !hasFileTransfer(event.dataTransfer)) return\n event.preventDefault()\n this.dragDepth = 0\n this.dragging(false)\n this.addFileList(event.dataTransfer?.files)\n }\n\n removeFile = (id: string) => {\n if (unref(this.disabled)) return\n this.writeFiles(this.files().filter((item) => item.id !== id))\n }\n\n clear = () => {\n if (unref(this.disabled)) return\n this.writeFiles([])\n }\n\n private addFileList(fileList: FileList | null | undefined) {\n if (!fileList || fileList.length === 0) return\n\n const result = addDropFiles(this.files(), Array.from(fileList), {\n accept: this.accept,\n iconMap: this.iconMap,\n fileIcon: this.fileIcon,\n multiple: this.multiple,\n idSequence: this.idSequence,\n })\n this.idSequence = result.idSequence\n if (result.acceptedCount === 0) return\n this.writeFiles(result.files)\n }\n\n private writeFiles(files: DropFileItem[]) {\n this.files(files)\n this.onChange?.(files)\n }\n}\n\nfunction resolveDropFiles(head: ComponentHead<DropFiles>) {\n return new DropFilesContext(head.props) as DropFiles\n}\n\nexport function addDropFiles(\n currentFiles: DropFileItem[],\n files: File[],\n options: DropFilesAddOptions = {},\n): DropFilesAddResult {\n const accept = resolveAccept(options.accept, options.iconMap)\n const accepted = files\n .filter((file) => acceptsFile(file, accept))\n .map((file) => createDropFileItem(file, options))\n\n let idSequence = options.idSequence ?? 0\n const sequenced = accepted.map((item) => {\n ++idSequence\n return {\n ...item,\n id: createFileId(item.file, idSequence),\n }\n })\n if (sequenced.length === 0)\n return { files: currentFiles, idSequence, acceptedCount: 0 }\n\n if (unref(options.multiple) === false) {\n return {\n files: [sequenced[0]],\n idSequence,\n acceptedCount: 1,\n }\n }\n\n const next = [...currentFiles]\n let addedCount = 0\n for (const item of sequenced) {\n if (!next.some((existing) => isSameFile(existing.file, item.file))) {\n next.push(item)\n ++addedCount\n }\n }\n\n return { files: next, idSequence, acceptedCount: addedCount }\n}\n\nfunction createDropFileItem(\n file: File,\n options: DropFilesAddOptions,\n): DropFileItem {\n return {\n id: '',\n file,\n name: file.name,\n type: file.type,\n size: file.size,\n sizeLabel: formatFileSize(file.size),\n lastModified: file.lastModified,\n icon: resolveFileIcon(\n file,\n readIconMap(options.iconMap),\n unref(options.fileIcon) || DEFAULT_FILE_ICON,\n ),\n }\n}\n\nfunction createFileId(file: File, sequence: number) {\n return [sequence, file.name, file.size, file.lastModified].join(':')\n}\n\nfunction readAccept(value: RefOrValue<string> | string[] | undefined) {\n return Array.isArray(value) ? value : unref(value)\n}\n\nfunction readIconMap(\n value: DropFilesIconMap | SRef<DropFilesIconMap> | undefined,\n) {\n return typeof value === 'function' ? value() : value\n}\n\nfunction resolveAccept(\n accept: RefOrValue<string> | string[] | undefined,\n iconMap: DropFilesIconMap | SRef<DropFilesIconMap> | undefined,\n) {\n const resolvedAccept = normalizeAccept(readAccept(accept))\n if (resolvedAccept.length > 0) return resolvedAccept\n\n const resolvedIconMap = readIconMap(iconMap)\n return resolvedIconMap ? normalizeAccept(Object.keys(resolvedIconMap)) : []\n}\n\nfunction normalizeAccept(value: string | string[] | undefined) {\n if (Array.isArray(value)) {\n return value\n .flatMap((item) => item.split(','))\n .map(normalizeAcceptToken)\n .filter(Boolean)\n }\n\n if (!value) return []\n return value.split(',').map(normalizeAcceptToken).filter(Boolean)\n}\n\nfunction normalizeAcceptToken(value: string) {\n return value.trim().toLowerCase()\n}\n\nfunction acceptsFile(file: File, accept: string[]) {\n if (accept.length === 0) return true\n return accept.some((token) => matchesAcceptToken(file, token))\n}\n\nfunction matchesAcceptToken(file: File, token: string) {\n if (!token) return false\n\n const type = file.type.toLowerCase()\n const name = file.name.toLowerCase()\n if (token.startsWith('.')) return name.endsWith(token)\n if (token.endsWith('/*')) return type.startsWith(token.slice(0, -1))\n return type === token\n}\n\nfunction resolveFileIcon(\n file: File,\n iconMap: DropFilesIconMap | undefined,\n fallback: string,\n) {\n const mergedMap = { ...DEFAULT_ICON_MAP, ...(iconMap ?? {}) }\n for (const [accept, icon] of Object.entries(mergedMap)) {\n if (matchesAcceptToken(file, normalizeAcceptToken(accept)) && icon) {\n return icon\n }\n }\n\n return fallback\n}\n\nfunction hasFileTransfer(dataTransfer: DataTransfer | null) {\n if (!dataTransfer) return false\n return Array.from(dataTransfer.types).includes('Files')\n}\n\nfunction isSameFile(left: File, right: File) {\n return (\n left.name === right.name &&\n left.size === right.size &&\n left.type === right.type &&\n left.lastModified === right.lastModified\n )\n}\n\nfunction formatFileSize(size: number) {\n if (!Number.isFinite(size) || size <= 0) return '0 B'\n\n const units = ['B', 'KB', 'MB', 'GB']\n let value = size\n let unit = 0\n while (value >= 1024 && unit < units.length - 1) {\n value /= 1024\n ++unit\n }\n\n return `${value >= 10 || unit === 0 ? value.toFixed(0) : value.toFixed(1)} ${units[unit]}`\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type RefOrValue,\n} from 'regor'\nimport {\n type ComponentVariant,\n resolveComponentClasses,\n} from '../componentVariant'\n\nexport interface ExpandablePanel {\n title?: RefOrValue<string>\n description?: RefOrValue<string>\n meta?: RefOrValue<string>\n badge?: RefOrValue<string>\n icon?: RefOrValue<string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n summaryVariant?: RefOrValue<ComponentVariant>\n open?: RefOrValue<boolean>\n classes?: ComputedRef<string>\n summaryClasses?: ComputedRef<string>\n}\n\nconst expandablePanelTemplate = html`<details class=\"expandable-panel gap-0\" :class=\"classes\" :open=\"open\">\n <Flex\n container=\"summary\"\n align=\"center\"\n class=\"expandable-panel__summary cursor-pointer p-4\"\n :class=\"summaryClasses\"\n >\n <slot name=\"summary\">\n <IconFrame\n :name=\"icon\"\n r-if=\"icon\"\n :variant=\"summaryVariant\"\n variantMode=\"stateless\"/>\n <Flex align=\"center\" wrap=\"true\" class=\"flex-1 gap-2\">\n <span class=\"fw-700 min-w-0 lh-0\" r-if=\"title\">{{ title }}</span>\n <Badge :tone=\"tone\" r-if=\"badge\">{{ badge }}</Badge>\n <span class=\"fs-sm w-full lh-0\" r-if=\"description\">\n {{ description }}\n </span>\n </Flex>\n <Flex align=\"center\" justify=\"center\" class=\"flex-none\">\n <span class=\"fw-600\" r-if=\"meta\"> {{ meta }} </span>\n <IconFrame\n class=\"expandable-panel__chevron rounded-pill\"\n name=\"iconoir:nav-arrow-down\"\n :variant=\"summaryVariant\"\n variantMode=\"stateless\"/>\n </Flex>\n </slot>\n </Flex>\n <div class=\"expandable-panel__body p-4 bt-0\"><slot></slot></div>\n</details>`\n\nfunction defineExpandablePanelComponent() {\n return defineComponent<ExpandablePanel>(expandablePanelTemplate, {\n props: [\n 'title',\n 'description',\n 'meta',\n 'badge',\n 'icon',\n 'tone',\n 'variant',\n 'summaryVariant',\n 'open',\n ],\n context: (head) => resolveExpandablePanel(head.props),\n })\n}\n\nexport function defineExpandablePanelComponents() {\n return {\n expandablePanel: defineExpandablePanelComponent(),\n }\n}\n\nfunction resolveExpandablePanel(props: ExpandablePanel): ExpandablePanel {\n return {\n ...props,\n classes: computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: 'surface',\n defaultVariantMode: 'stateless',\n }),\n ),\n summaryClasses: computed(() =>\n resolveComponentClasses(\n {\n tone: props.tone,\n variant: props.summaryVariant,\n },\n {\n defaultVariant: 'surface',\n defaultVariantMode: 'stateful',\n },\n ),\n ),\n }\n}\n","import {\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type RefOrValue,\n unref,\n} from 'regor'\n\nexport type FlexDirection = 'row' | 'row-reverse' | 'column' | 'column-reverse'\nexport type FlexAlign = 'stretch' | 'start' | 'center' | 'end' | 'baseline'\nexport type FlexJustify =\n | 'start'\n | 'center'\n | 'end'\n | 'stretch'\n | 'between'\n | 'around'\n | 'evenly'\nexport type FlexWrap = boolean | 'wrap' | 'nowrap' | 'reverse' | 'true'\n\nexport interface Flex {\n container?: RefOrValue<string>\n direction?: RefOrValue<FlexDirection>\n directionSm?: RefOrValue<FlexDirection>\n directionMd?: RefOrValue<FlexDirection>\n directionLg?: RefOrValue<FlexDirection>\n directionXl?: RefOrValue<FlexDirection>\n align?: RefOrValue<FlexAlign>\n alignSm?: RefOrValue<FlexAlign>\n alignMd?: RefOrValue<FlexAlign>\n alignLg?: RefOrValue<FlexAlign>\n alignXl?: RefOrValue<FlexAlign>\n justify?: RefOrValue<FlexJustify>\n justifySm?: RefOrValue<FlexJustify>\n justifyMd?: RefOrValue<FlexJustify>\n justifyLg?: RefOrValue<FlexJustify>\n justifyXl?: RefOrValue<FlexJustify>\n wrap?: RefOrValue<FlexWrap>\n wrapSm?: RefOrValue<FlexWrap>\n wrapMd?: RefOrValue<FlexWrap>\n wrapLg?: RefOrValue<FlexWrap>\n wrapXl?: RefOrValue<FlexWrap>\n inline?: RefOrValue<boolean | string>\n classes?: ComputedRef<string>\n}\n\nconst flexTemplate = html`<div :is=\"container ?? 'div'\" class=\"flex\" :class=\"classes\">\n <slot></slot>\n</div>`\n\nfunction defineFlexComponent() {\n return defineComponent<Flex>(flexTemplate, {\n props: [\n 'container',\n 'direction',\n 'directionSm',\n 'directionMd',\n 'directionLg',\n 'directionXl',\n 'align',\n 'alignSm',\n 'alignMd',\n 'alignLg',\n 'alignXl',\n 'justify',\n 'justifySm',\n 'justifyMd',\n 'justifyLg',\n 'justifyXl',\n 'wrap',\n 'wrapSm',\n 'wrapMd',\n 'wrapLg',\n 'wrapXl',\n 'inline',\n ],\n context: (head) => resolveFlex(head.props),\n })\n}\n\nexport function defineFlexComponents() {\n return {\n flex: defineFlexComponent(),\n }\n}\n\nfunction resolveFlex(props: Flex): Flex {\n const classes = computed(() => {\n return [\n resolveDirectionClass(props.direction),\n resolveResponsiveDirectionClass('sm', props.directionSm),\n resolveResponsiveDirectionClass('md', props.directionMd),\n resolveResponsiveDirectionClass('lg', props.directionLg),\n resolveResponsiveDirectionClass('xl', props.directionXl),\n resolveAlignClass(props.align),\n resolveResponsiveAlignClass('sm', props.alignSm),\n resolveResponsiveAlignClass('md', props.alignMd),\n resolveResponsiveAlignClass('lg', props.alignLg),\n resolveResponsiveAlignClass('xl', props.alignXl),\n resolveJustifyClass(props.justify),\n resolveResponsiveJustifyClass('sm', props.justifySm),\n resolveResponsiveJustifyClass('md', props.justifyMd),\n resolveResponsiveJustifyClass('lg', props.justifyLg),\n resolveResponsiveJustifyClass('xl', props.justifyXl),\n resolveWrapClass(props.wrap),\n resolveResponsiveWrapClass('sm', props.wrapSm),\n resolveResponsiveWrapClass('md', props.wrapMd),\n resolveResponsiveWrapClass('lg', props.wrapLg),\n resolveResponsiveWrapClass('xl', props.wrapXl),\n resolveInlineClass(props.inline),\n ]\n .filter(Boolean)\n .join(' ')\n })\n\n return {\n ...props,\n classes,\n }\n}\n\nfunction resolveDirectionClass(value?: RefOrValue<FlexDirection>) {\n if (!value) return ''\n\n const normalized = unref(value)\n if (normalized === 'column') return 'flex-column'\n if (normalized === 'column-reverse') return 'flex-column-reverse'\n if (normalized === 'row-reverse') return 'flex-row-reverse'\n if (normalized === 'row') return ''\n\n return ''\n}\n\nfunction resolveResponsiveDirectionClass(\n breakpoint: 'sm' | 'md' | 'lg' | 'xl',\n value?: RefOrValue<FlexDirection>,\n) {\n if (!value) return ''\n\n const normalized = unref(value)\n if (normalized === 'column') return `flex-direction-${breakpoint}-column`\n if (normalized === 'column-reverse') {\n return `flex-direction-${breakpoint}-column-reverse`\n }\n if (normalized === 'row') return `flex-direction-${breakpoint}-row`\n if (normalized === 'row-reverse') {\n return `flex-direction-${breakpoint}-row-reverse`\n }\n\n return ''\n}\n\nfunction resolveAlignClass(value?: RefOrValue<FlexAlign>) {\n if (!value) return ''\n\n const normalized = unref(value)\n if (normalized === 'start') return 'align-flex-start'\n if (normalized === 'end') return 'align-flex-end'\n\n if (\n normalized === 'stretch' ||\n normalized === 'center' ||\n normalized === 'baseline'\n ) {\n return `align-${normalized}`\n }\n\n return ''\n}\n\nfunction resolveResponsiveAlignClass(\n breakpoint: 'sm' | 'md' | 'lg' | 'xl',\n value?: RefOrValue<FlexAlign>,\n) {\n if (!value) return ''\n\n const normalized = unref(value)\n if (normalized === 'start') return `align-${breakpoint}-flex-start`\n if (normalized === 'end') return `align-${breakpoint}-flex-end`\n\n if (\n normalized === 'stretch' ||\n normalized === 'center' ||\n normalized === 'baseline'\n ) {\n return `align-${breakpoint}-${normalized}`\n }\n\n return ''\n}\n\nfunction resolveJustifyClass(value?: RefOrValue<FlexJustify>) {\n if (!value) return ''\n\n const normalized = unref(value)\n if (\n normalized === 'start' ||\n normalized === 'center' ||\n normalized === 'end' ||\n normalized === 'stretch' ||\n normalized === 'between' ||\n normalized === 'around' ||\n normalized === 'evenly'\n ) {\n return `justify-${normalized}`\n }\n\n return ''\n}\n\nfunction resolveResponsiveJustifyClass(\n breakpoint: 'sm' | 'md' | 'lg' | 'xl',\n value?: RefOrValue<FlexJustify>,\n) {\n if (!value) return ''\n\n const normalized = unref(value)\n if (\n normalized === 'start' ||\n normalized === 'center' ||\n normalized === 'end' ||\n normalized === 'stretch' ||\n normalized === 'between' ||\n normalized === 'around' ||\n normalized === 'evenly'\n ) {\n return `justify-${breakpoint}-${normalized}`\n }\n\n return ''\n}\n\nfunction resolveWrapClass(value?: RefOrValue<FlexWrap>) {\n if (!value) return ''\n\n const normalized = unref(value)\n if (normalized === true || normalized === 'true' || normalized === 'wrap') {\n return 'flex-wrap'\n }\n if (normalized === 'reverse') return 'flex-wrap-reverse'\n\n return ''\n}\n\nfunction resolveResponsiveWrapClass(\n breakpoint: 'sm' | 'md' | 'lg' | 'xl',\n value?: RefOrValue<FlexWrap>,\n) {\n if (!value) return ''\n\n const normalized = unref(value)\n if (normalized === true || normalized === 'true' || normalized === 'wrap') {\n return `flex-wrap-${breakpoint}`\n }\n if (normalized === 'nowrap') return `flex-nowrap-${breakpoint}`\n if (normalized === 'reverse') return `flex-wrap-${breakpoint}-reverse`\n\n return ''\n}\n\nfunction resolveInlineClass(value?: RefOrValue<boolean | string>) {\n if (!value) return ''\n\n const normalized = unref(value)\n if (normalized === true || normalized === 'true') return 'flex-inline'\n\n return ''\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type RefOrValue,\n} from 'regor'\nimport {\n type ComponentVariant,\n resolveComponentClasses,\n} from '../componentVariant'\n\nexport interface SiteFooter {\n teleport?: string\n ariaLabel?: string\n copyright?: string\n legalLabel?: string\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n classes?: ComputedRef<string>\n}\n\nconst siteFooterTemplate = html`<footer\n class=\"site-footer doc-content\"\n :class=\"classes\"\n :aria-label=\"ariaLabel\"\n :r-teleport=\"teleport\"\n>\n <div class=\"site-footer__inner\"><slot></slot></div>\n <Flex\n class=\"site-footer__bottom\"\n direction=\"column-reverse\"\n directionMd=\"row\"\n align=\"center\"\n justify=\"center\"\n justifyMd=\"between\"\n wrap=\"true\"\n >\n <Flex justify=\"center\" justifyMd=\"start\" class=\"site-footer__copyright\">\n {{ copyright }}\n </Flex>\n <Flex\n container=\"nav\"\n class=\"site-footer__legal\"\n wrap=\"true\"\n align=\"center\"\n justify=\"center\"\n justifyMd=\"end\"\n :aria-label=\"legalLabel\"\n >\n <slot name=\"legal\"></slot>\n <span class=\"consent-settings-teleport-area\"></span>\n <Flex><slot name=\"social\"></slot></Flex>\n </Flex>\n </Flex>\n</footer>`\n\nfunction defineSiteFooterComponent() {\n return defineComponent<SiteFooter>(siteFooterTemplate, {\n props: [\n 'teleport',\n 'ariaLabel',\n 'copyright',\n 'legalLabel',\n 'tone',\n 'variant',\n ],\n context: (head) => resolveSiteFooter(head.props),\n })\n}\n\nexport function defineFooterComponents() {\n return {\n siteFooter: defineSiteFooterComponent(),\n }\n}\n\nfunction resolveSiteFooter(props: SiteFooter): SiteFooter {\n const year = new Date().getFullYear()\n if (!props.teleport) props.teleport = 'body'\n return {\n ...props,\n ariaLabel: props.ariaLabel || 'Site footer',\n legalLabel: props.legalLabel || 'Legal and policy links',\n copyright: props.copyright || `(c) ${year}. All rights reserved.`,\n classes: computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: 'surface',\n }),\n ),\n }\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComponentHead,\n type ComputedRef,\n computed,\n defineComponent,\n type Emits,\n html,\n isRef,\n type Ref,\n type RefOrValue,\n ref,\n unref,\n} from 'regor'\nimport { createAutoId } from '../autoId'\nimport type { ComponentVariant } from '../componentVariant'\nimport type { FormInputFieldType } from './formInputField'\n\nconst resolveAutoCompleteInputId = createAutoId('auto-complete-input')\n\nexport type AutoCompleteValue = string | number\n\nexport interface AutoCompleteOption {\n label: RefOrValue<string>\n value?: RefOrValue<AutoCompleteValue>\n disabled?: RefOrValue<boolean>\n keywords?: RefOrValue<string | string[]>\n}\n\nexport interface ResolvedAutoCompleteOption {\n label: string\n value: AutoCompleteValue\n disabled?: boolean\n keywords: string[]\n}\n\nexport interface AutoCompleteRow {\n id: string\n index: number\n option: ResolvedAutoCompleteOption\n active: boolean\n selected: boolean\n disabled?: boolean\n classes: string\n}\n\nexport interface AutoCompleteInput {\n id?: RefOrValue<string>\n label?: RefOrValue<string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n model?: Ref<string>\n selectedValue?: Ref<AutoCompleteValue | null>\n type?: RefOrValue<FormInputFieldType>\n name?: RefOrValue<string>\n required?: RefOrValue<boolean>\n autocomplete?: RefOrValue<string>\n placeholder?: RefOrValue<string>\n disabled?: RefOrValue<boolean>\n icon?: RefOrValue<string>\n iconEnd?: RefOrValue<string>\n options?: RefOrValue<AutoCompleteOption[]>\n rowComponent?: RefOrValue<string>\n minLength?: RefOrValue<number | string>\n maxResults?: RefOrValue<number | string>\n openOnFocus?: RefOrValue<boolean>\n loading?: RefOrValue<boolean>\n emptyText?: RefOrValue<string>\n loadingText?: RefOrValue<string>\n onSelect?: (option: ResolvedAutoCompleteOption) => void\n onSearch?: (query: string) => void\n emits?: Emits<'optionselect' | 'querychange'>\n listboxId?: string\n isOpen?: Ref<boolean>\n activeIndex?: Ref<number>\n query?: ComputedRef<string>\n resolvedOptions?: ComputedRef<ResolvedAutoCompleteOption[]>\n filteredOptions?: ComputedRef<ResolvedAutoCompleteOption[]>\n rows?: ComputedRef<AutoCompleteRow[]>\n activeOptionId?: ComputedRef<string | undefined>\n shouldRenderPopup?: ComputedRef<boolean>\n showLoading?: ComputedRef<boolean>\n showEmpty?: ComputedRef<boolean>\n resolvedRowComponent?: ComputedRef<string>\n resolvedIconEnd?: ComputedRef<string | undefined>\n handleFocusIn?: () => void\n handleFocusOut?: () => void\n handleInput?: () => void\n handleKeydown?: (event: KeyboardEvent) => void\n handleOptionMouseDown?: (event: MouseEvent) => void\n selectRow?: (row: AutoCompleteRow) => void\n}\n\nexport interface AutoCompleteOptionRow {\n option: RefOrValue<ResolvedAutoCompleteOption | null>\n active?: RefOrValue<boolean>\n selected?: RefOrValue<boolean>\n query?: RefOrValue<string>\n}\n\nconst autoCompleteInputTemplate = html`<div\n class=\"auto-complete-input\"\n @focusin=\"handleFocusIn\"\n @focusout=\"handleFocusOut\"\n>\n <FormInputField\n :id=\"id\"\n :label=\"label\"\n :tone=\"tone\"\n :variant=\"variant\"\n :model=\"model\"\n :type=\"type || 'search'\"\n :name=\"name\"\n :required=\"required\"\n :autocomplete=\"autocomplete || 'off'\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :icon=\"icon\"\n :iconEnd=\"resolvedIconEnd\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n :aria-controls=\"listboxId\"\n :aria-expanded=\"isOpen\"\n :aria-activedescendant=\"activeOptionId\"\n @input=\"handleInput\"\n @keydown=\"handleKeydown\"\n />\n <div\n class=\"auto-complete-input__popup\"\n r-if=\"shouldRenderPopup\"\n >\n <div\n class=\"auto-complete-input__message\"\n r-if=\"showLoading\"\n role=\"status\"\n aria-live=\"polite\"\n >\n {{ loadingText || 'Loading suggestions' }}\n </div>\n <div\n class=\"auto-complete-input__message\"\n r-if=\"showEmpty\"\n role=\"status\"\n aria-live=\"polite\"\n >\n {{ emptyText || 'No suggestions' }}\n </div>\n <div\n class=\"auto-complete-input__listbox\"\n :id=\"listboxId\"\n role=\"listbox\"\n r-if=\"!showLoading && !showEmpty\"\n >\n <div\n class=\"auto-complete-input__option\"\n :class=\"row.classes\"\n role=\"option\"\n :id=\"row.id\"\n :aria-selected=\"row.active\"\n :aria-disabled=\"row.disabled\"\n r-for=\"row in rows\"\n @mousedown=\"handleOptionMouseDown\"\n @click=\"selectRow(row)\"\n >\n <div\n :is=\"resolvedRowComponent\"\n :option=\"row.option\"\n :item=\"row.option\"\n :index=\"row.index\"\n :query=\"query\"\n :active=\"row.active\"\n :selected=\"row.selected\"\n :disabled=\"row.disabled\"\n ></div>\n </div>\n </div>\n </div>\n</div>`\n\nconst autoCompleteOptionRowTemplate = html`<div class=\"auto-complete-input__default-row\">\n <span class=\"auto-complete-input__default-label\">{{ option?.label }}</span>\n <Icon\n class=\"auto-complete-input__default-check\"\n name=\"lucide:check\"\n r-if=\"selected\"\n />\n</div>`\n\nfunction defineAutoCompleteInputComponent() {\n return defineComponent<AutoCompleteInput>(autoCompleteInputTemplate, {\n props: [\n 'id',\n 'label',\n 'tone',\n 'variant',\n 'model',\n 'selectedValue',\n 'type',\n 'name',\n 'required',\n 'autocomplete',\n 'placeholder',\n 'disabled',\n 'icon',\n 'iconEnd',\n 'options',\n 'rowComponent',\n 'minLength',\n 'maxResults',\n 'openOnFocus',\n 'loading',\n 'emptyText',\n 'loadingText',\n 'onSelect',\n 'onSearch',\n ],\n context: (head) => new AutoCompleteInputContext(head),\n })\n}\n\nfunction defineAutoCompleteOptionRowComponent() {\n return defineComponent<AutoCompleteOptionRow>(autoCompleteOptionRowTemplate, {\n props: ['option', 'active', 'selected', 'query'],\n context: (head) => head.props,\n })\n}\n\nexport function defineAutoCompleteInputComponents() {\n return {\n autoCompleteInput: defineAutoCompleteInputComponent(),\n autoCompleteOptionRow: defineAutoCompleteOptionRowComponent(),\n }\n}\n\nclass AutoCompleteInputContext implements AutoCompleteInput {\n readonly id: string\n readonly label?: RefOrValue<string>\n readonly tone?: RefOrValue<SemanticTone>\n readonly variant?: RefOrValue<ComponentVariant>\n readonly model: Ref<string>\n readonly selectedValue: Ref<AutoCompleteValue | null>\n readonly type?: RefOrValue<FormInputFieldType>\n readonly name?: RefOrValue<string>\n readonly required?: RefOrValue<boolean>\n readonly autocomplete?: RefOrValue<string>\n readonly placeholder?: RefOrValue<string>\n readonly disabled?: RefOrValue<boolean>\n readonly icon?: RefOrValue<string>\n readonly iconEnd?: RefOrValue<string>\n readonly options?: RefOrValue<AutoCompleteOption[]>\n readonly rowComponent?: RefOrValue<string>\n readonly minLength?: RefOrValue<number | string>\n readonly maxResults?: RefOrValue<number | string>\n readonly openOnFocus?: RefOrValue<boolean>\n readonly loading?: RefOrValue<boolean>\n readonly emptyText?: RefOrValue<string>\n readonly loadingText?: RefOrValue<string>\n readonly onSelect?: (option: ResolvedAutoCompleteOption) => void\n readonly onSearch?: (query: string) => void\n readonly emits?: Emits<'optionselect' | 'querychange'>\n readonly listboxId: string\n readonly isOpen = ref(false)\n readonly activeIndex = ref(-1)\n readonly query: ComputedRef<string>\n readonly resolvedOptions: ComputedRef<ResolvedAutoCompleteOption[]>\n readonly filteredOptions: ComputedRef<ResolvedAutoCompleteOption[]>\n readonly rows: ComputedRef<AutoCompleteRow[]>\n readonly activeOptionId: ComputedRef<string | undefined>\n readonly shouldRenderPopup: ComputedRef<boolean>\n readonly showLoading: ComputedRef<boolean>\n readonly showEmpty: ComputedRef<boolean>\n readonly resolvedRowComponent: ComputedRef<string>\n readonly resolvedIconEnd: ComputedRef<string | undefined>\n private readonly emit: ComponentHead<AutoCompleteInput>['emit']\n private closingTimer: ReturnType<typeof setTimeout> | undefined\n\n constructor(head: ComponentHead<AutoCompleteInput>) {\n const props = head.props\n Object.assign(this, props)\n this.emit = head.emit\n this.id = resolveAutoCompleteInputId(props.id)\n this.listboxId = `${this.id}-listbox`\n this.model = isRef(props.model) ? props.model : ref('')\n this.selectedValue = isRef(props.selectedValue)\n ? props.selectedValue\n : ref<AutoCompleteValue | null>(null)\n this.query = computed(() => String(unref(this.model) ?? ''))\n this.resolvedOptions = computed(() => {\n const options = unref(props.options)\n return Array.isArray(options)\n ? options.map(resolveAutoCompleteOption)\n : []\n })\n this.filteredOptions = computed(() => this.resolveFilteredOptions())\n this.rows = computed(() => this.resolveRows())\n this.activeOptionId = computed(() => this.rows()[this.activeIndex()]?.id)\n this.showLoading = computed(() => this.isOpen() && !!unref(this.loading))\n this.showEmpty = computed(\n () =>\n this.isOpen() &&\n !this.showLoading() &&\n this.meetsMinimumQueryLength() &&\n this.filteredOptions().length === 0,\n )\n this.shouldRenderPopup = computed(\n () =>\n this.isOpen() &&\n (this.showLoading() ||\n this.showEmpty() ||\n this.filteredOptions().length > 0),\n )\n this.resolvedRowComponent = computed(() => {\n const component = unref(props.rowComponent)\n return typeof component === 'string' && component.trim()\n ? component\n : 'AutoCompleteOptionRow'\n })\n this.resolvedIconEnd = computed(\n () =>\n unref(props.iconEnd) ||\n (unref(props.loading) ? 'lucide:loader-circle' : 'lucide:chevron-down'),\n )\n }\n\n handleFocusIn = () => {\n this.clearClosingTimer()\n if (!this.shouldOpenOnFocus()) return\n\n this.open()\n }\n\n handleFocusOut = () => {\n this.clearClosingTimer()\n this.closingTimer = setTimeout(() => {\n this.close()\n }, 0)\n }\n\n handleInput = () => {\n const query = this.query()\n this.onSearch?.(query)\n this.emit('querychange', { query })\n this.selectedValue(null)\n if (this.meetsMinimumQueryLength()) this.open()\n else this.close()\n }\n\n handleKeydown = (event: KeyboardEvent) => {\n if (unref(this.disabled)) return\n\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n if (!this.isOpen()) {\n this.open()\n return\n }\n this.open()\n this.moveActive(1)\n return\n }\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n if (!this.isOpen()) {\n this.open()\n this.activateLast()\n return\n }\n this.open()\n this.moveActive(-1)\n return\n }\n if (event.key === 'Home' && this.isOpen()) {\n event.preventDefault()\n this.activateFirst()\n return\n }\n if (event.key === 'End' && this.isOpen()) {\n event.preventDefault()\n this.activateLast()\n return\n }\n if (event.key === 'Enter' && this.isOpen()) {\n const row = this.rows()[this.activeIndex()]\n if (!row) return\n\n event.preventDefault()\n this.selectRow(row)\n return\n }\n if (event.key === 'Escape') {\n this.close()\n }\n }\n\n handleOptionMouseDown = (event: MouseEvent) => {\n event.preventDefault()\n this.clearClosingTimer()\n }\n\n selectRow = (row: AutoCompleteRow) => {\n if (row.disabled || unref(this.disabled)) return\n\n const option = row.option\n this.model(option.label)\n this.selectedValue(option.value)\n this.onSelect?.(option)\n this.emit('optionselect', { option })\n this.close()\n }\n\n private resolveFilteredOptions() {\n const query = normalizeSearchText(this.query())\n if (!this.meetsMinimumQueryLength()) return []\n\n const options = this.resolvedOptions().filter(\n (option) =>\n !query ||\n option.keywords.some((keyword) =>\n normalizeSearchText(keyword).includes(query),\n ),\n )\n return options.slice(0, this.readPositiveInteger(this.maxResults, 10))\n }\n\n private resolveRows() {\n const activeIndex = this.activeIndex()\n const selectedValue = this.selectedValue()\n return this.filteredOptions().map(\n (option, index): AutoCompleteRow => ({\n id: `${this.listboxId}-option-${index}`,\n index,\n option,\n active: index === activeIndex,\n selected: selectedValue !== null && option.value === selectedValue,\n disabled: option.disabled,\n classes: [\n index === activeIndex ? 'auto-complete-input__option--active' : '',\n selectedValue !== null && option.value === selectedValue\n ? 'auto-complete-input__option--selected'\n : '',\n option.disabled ? 'auto-complete-input__option--disabled' : '',\n ]\n .filter(Boolean)\n .join(' '),\n }),\n )\n }\n\n private open() {\n if (unref(this.disabled) || !this.meetsMinimumQueryLength()) return\n\n this.isOpen(true)\n this.ensureActiveIndex()\n }\n\n private close() {\n this.isOpen(false)\n this.activeIndex(-1)\n }\n\n private moveActive(direction: 1 | -1) {\n const rows = this.rows()\n if (rows.length === 0) {\n this.activeIndex(-1)\n return\n }\n\n const current = this.activeIndex()\n for (let offset = 1; offset <= rows.length; offset += 1) {\n const next = wrapIndex(current + direction * offset, rows.length)\n if (!rows[next]?.disabled) {\n this.activeIndex(next)\n return\n }\n }\n }\n\n private activateFirst() {\n const index = this.rows().findIndex((row) => !row.disabled)\n this.activeIndex(index)\n }\n\n private activateLast() {\n const rows = this.rows()\n for (let index = rows.length - 1; index >= 0; index -= 1) {\n if (rows[index]?.disabled) continue\n\n this.activeIndex(index)\n return\n }\n this.activeIndex(-1)\n }\n\n private ensureActiveIndex() {\n const rows = this.rows()\n const current = this.activeIndex()\n if (current >= 0 && current < rows.length && !rows[current]?.disabled)\n return\n\n this.activateFirst()\n }\n\n private shouldOpenOnFocus() {\n return unref(this.openOnFocus) !== false && this.meetsMinimumQueryLength()\n }\n\n private meetsMinimumQueryLength() {\n return (\n this.query().trim().length >= this.readPositiveInteger(this.minLength, 0)\n )\n }\n\n private readPositiveInteger(\n value: RefOrValue<number | string> | undefined,\n fallback: number,\n ) {\n const raw = unref(value)\n const parsed =\n typeof raw === 'number' ? raw : Number.parseFloat(String(raw))\n return Number.isFinite(parsed) && parsed >= 0\n ? Math.trunc(parsed)\n : fallback\n }\n\n private clearClosingTimer() {\n if (this.closingTimer === undefined) return\n\n clearTimeout(this.closingTimer)\n this.closingTimer = undefined\n }\n}\n\nfunction resolveAutoCompleteOption(\n optionInput: RefOrValue<AutoCompleteOption>,\n): ResolvedAutoCompleteOption {\n const option = unref(optionInput)\n const label = String(unref(option.label) ?? '')\n const value = unref(option.value) ?? label\n return {\n label,\n value,\n disabled: unref(option.disabled),\n keywords: resolveKeywords(option, label, value),\n }\n}\n\nfunction resolveKeywords(\n option: AutoCompleteOption,\n label: string,\n value: AutoCompleteValue,\n) {\n const keywords = unref(option.keywords)\n const source: string[] = Array.isArray(keywords)\n ? keywords.map((keyword) => String(unref(keyword) ?? ''))\n : typeof keywords === 'string'\n ? keywords.split(/\\s+/)\n : []\n return [label, String(value), ...source].filter(Boolean)\n}\n\nfunction normalizeSearchText(value: string) {\n return value.trim().toLocaleLowerCase()\n}\n\nfunction wrapIndex(index: number, length: number) {\n return ((index % length) + length) % length\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComponentHead,\n type ComputedRef,\n computed,\n defineComponent,\n html,\n isRef,\n type Ref,\n type RefOrValue,\n ref,\n unref,\n} from 'regor'\nimport { createAutoId } from '../autoId'\nimport { resolveComponentClasses } from '../componentVariant'\n\nconst resolveCheckId = createAutoId('form-check')\n\nexport class FormCheck {\n readonly id: string\n label?: RefOrValue<string>\n name?: RefOrValue<string>\n value?: RefOrValue<string>\n checked?: Ref<boolean>\n disabled?: RefOrValue<boolean>\n tone?: RefOrValue<SemanticTone>\n rootClass?: RefOrValue<string>\n hasLabel?: ComputedRef<boolean>\n classes?: ComputedRef<string>\n\n constructor(props: FormCheck) {\n Object.assign(this, props)\n this.id = resolveCheckId(props.id)\n if (!isRef(this.checked)) {\n this.checked = ref<boolean>(resolveInitialChecked(this.checked))\n }\n }\n}\n\nconst formCheckTemplate = html`<label class=\"form-block__check\" :class=\"classes\" :for=\"id\">\n <input\n :id=\"id\"\n class=\"form-block__check-input\"\n type=\"checkbox\"\n :name=\"name\"\n :value=\"value\"\n :disabled=\"disabled\"\n r-model=\"checked\"\n r-inherit/>\n <span class=\"form-block__check-control\" aria-hidden=\"true\"></span>\n <span class=\"form-block__check-label\" r-if=\"hasLabel\">{{ label }}</span>\n</label>`\n\nexport function defineFormCheckComponent() {\n return defineComponent<FormCheck>(formCheckTemplate, {\n props: [\n 'id',\n 'label',\n 'name',\n 'value',\n 'checked',\n 'disabled',\n 'tone',\n 'rootClass',\n ],\n context: (head) => resolveFormCheck(head),\n })\n}\n\nfunction resolveFormCheck(head: ComponentHead<FormCheck>): FormCheck {\n const check = new FormCheck(head.props)\n check.hasLabel = computed(() => hasCheckLabel(head.props.label))\n check.classes = computed(() =>\n resolveComponentClasses(head.props, {\n defaultVariant: 'none',\n classes: [\n check.hasLabel?.() ? undefined : 'form-block__check--bare',\n head.props.rootClass,\n ],\n }),\n )\n return check\n}\n\nfunction hasCheckLabel(label: RefOrValue<string> | undefined) {\n const value = unref(label)\n return typeof value === 'string' ? value.trim().length > 0 : Boolean(value)\n}\n\nfunction resolveInitialChecked(value: unknown) {\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase()\n return normalized !== '' && normalized !== 'false'\n }\n return !!value\n}\n","import { tryResolvePageContext } from '@purestack/ts-common'\nimport type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComponentHead,\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type RefOrValue,\n unref,\n} from 'regor'\nimport {\n type ComponentVariant,\n resolveComponentClasses,\n} from '../componentVariant'\nimport { defineFormCheckComponent } from './formCheck'\n\nexport interface AppForm {\n action?: RefOrValue<string>\n method?: RefOrValue<string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n classes?: ComputedRef<string>\n}\n\nexport interface FormMeta {}\n\nexport interface FormAssistLink {\n href?: RefOrValue<string>\n label?: RefOrValue<string>\n target?: RefOrValue<string>\n rel?: RefOrValue<string>\n normalizedHref?: ComputedRef<string | undefined>\n resolvedRel?: ComputedRef<string | undefined>\n}\n\nexport interface FormSubmit {\n label?: RefOrValue<string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n}\n\nexport interface FormDivider {\n label?: RefOrValue<string>\n}\n\nexport interface FormStatus {\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n hidden?: RefOrValue<boolean>\n classes?: ComputedRef<string>\n}\n\nconst appFormTemplate = html`<form\n class=\"form-block\"\n :class=\"classes\"\n :action=\"action\"\n :method=\"method\"\n novalidate\n>\n <slot></slot>\n</form>`\n\nconst formMetaTemplate = html`<div class=\"form-block__meta\"><slot></slot></div>`\n\nconst formAssistLinkTemplate = html`<a\n class=\"form-block__assist-link\"\n :href=\"normalizedHref\"\n r-if=\"normalizedHref\"\n :target=\"target\"\n :rel=\"resolvedRel\"\n>\n {{ label }}\n</a>`\n\nconst formSubmitTemplate = html`<Btn type=\"submit\" :tone=\"tone\" :variant=\"variant\"\n >{{ label }}</Btn\n>`\n\nconst formDividerTemplate = html`<div class=\"form-block__divider\" :data-label=\"label\"></div>`\n\nconst formStatusTemplate = html`<div\n class=\"form-status\"\n :class=\"classes\"\n role=\"status\"\n aria-live=\"polite\"\n :hidden=\"hidden\"\n>\n <slot></slot>\n</div>`\n\nfunction defineAppFormComponent() {\n return defineComponent<AppForm>(appFormTemplate, {\n props: ['action', 'method', 'tone', 'variant'],\n context: (head) => resolveAppForm(head),\n })\n}\n\nfunction defineFormMetaComponent() {\n return defineComponent<FormMeta>(formMetaTemplate, {})\n}\n\nfunction defineFormAssistLinkComponent() {\n return defineComponent<FormAssistLink>(formAssistLinkTemplate, {\n props: ['href', 'label', 'target', 'rel'],\n context: (head) => resolveFormAssistLink(head),\n })\n}\n\nfunction defineFormSubmitComponent() {\n return defineComponent<FormSubmit>(formSubmitTemplate, {\n props: ['label', 'tone', 'variant'],\n context: (head) => resolveFormSubmit(head),\n })\n}\n\nfunction defineFormDividerComponent() {\n return defineComponent<FormDivider>(formDividerTemplate, {\n props: ['label'],\n context: (head) => head.props,\n })\n}\n\nfunction defineFormStatusComponent() {\n return defineComponent<FormStatus>(formStatusTemplate, {\n props: ['tone', 'variant', 'hidden'],\n context: (head) => resolveFormStatus(head),\n })\n}\n\nexport function defineFormComponents() {\n return {\n appForm: defineAppFormComponent(),\n formMeta: defineFormMetaComponent(),\n formCheck: defineFormCheckComponent(),\n formAssistLink: defineFormAssistLinkComponent(),\n formSubmit: defineFormSubmitComponent(),\n formDivider: defineFormDividerComponent(),\n formStatus: defineFormStatusComponent(),\n }\n}\n\nfunction resolveAppForm(head: ComponentHead<AppForm>): AppForm {\n const props = head.props\n return {\n ...props,\n action: resolvePublicAction(head),\n classes: computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: 'none',\n }),\n ),\n }\n}\n\nfunction resolvePublicAction(head: ComponentHead<AppForm>) {\n const action = unref(head.props.action)\n if (!action) return action\n return tryResolvePageContext(head)?.resolvePublicHref(action) ?? action\n}\n\nfunction resolveFormAssistLink(\n head: ComponentHead<FormAssistLink>,\n): FormAssistLink {\n return {\n ...head.props,\n normalizedHref: computed(() =>\n resolvePublicHref(toTrimmedHref(unref(head.props.href)), head),\n ),\n resolvedRel: computed(\n () =>\n unref(head.props.rel) ||\n (unref(head.props.target) === '_blank'\n ? 'noopener noreferrer'\n : undefined),\n ),\n }\n}\n\nfunction toTrimmedHref(value: unknown) {\n return typeof value === 'string' ? value.trim() : undefined\n}\n\nfunction resolvePublicHref(\n href: string | undefined,\n head: ComponentHead<FormAssistLink>,\n) {\n if (!href) return undefined\n return tryResolvePageContext(head)?.resolvePublicHref(href) ?? href\n}\n\nfunction resolveFormSubmit(head: ComponentHead<FormSubmit>): FormSubmit {\n return {\n ...head.props,\n }\n}\n\nfunction resolveFormStatus(head: ComponentHead<FormStatus>): FormStatus {\n return {\n ...head.props,\n classes: computed(() =>\n resolveComponentClasses(head.props, {\n defaultVariant: 'surface',\n }),\n ),\n }\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComponentHead,\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type Ref,\n type RefOrValue,\n ref,\n unref,\n} from 'regor'\nimport { createAutoId } from '../autoId'\nimport {\n type ComponentVariant,\n resolveComponentClasses,\n} from '../componentVariant'\n\nconst resolveInputId = createAutoId('form-input')\n\nexport type FormInputFieldType =\n | 'color'\n | 'text'\n | 'email'\n | 'password'\n | 'number'\n | 'tel'\n | 'url'\n | 'search'\n | 'date'\n | 'time'\n | 'datetime-local'\n | 'month'\n | 'week'\n\nexport class FormInputField {\n readonly id: string\n readonly label?: RefOrValue<string>\n readonly tone?: RefOrValue<SemanticTone>\n readonly variant?: RefOrValue<ComponentVariant>\n declare readonly model: Ref<string | number>\n readonly type?: RefOrValue<FormInputFieldType>\n readonly name?: RefOrValue<string>\n readonly required?: RefOrValue<boolean>\n readonly autocomplete?: RefOrValue<string>\n readonly min?: RefOrValue<number | string>\n readonly step?: RefOrValue<number | string>\n readonly placeholder?: RefOrValue<string>\n readonly disabled?: RefOrValue<boolean>\n readonly icon?: RefOrValue<string>\n readonly iconEnd?: RefOrValue<string>\n classes?: ComputedRef<string>\n\n constructor(props: FormInputField) {\n Object.assign(this, {\n ...props,\n })\n this.id = resolveInputId(props.id)\n if (!this.model) this.model = ref<string | number>('')\n }\n\n get isNumberField() {\n return unref(this.type) === 'number'\n }\n\n increment = () => {\n this.stepBy(1)\n }\n\n decrement = () => {\n this.stepBy(-1)\n }\n\n private stepBy(direction: 1 | -1) {\n const current = this.readCurrentNumber()\n const step = this.readStep()\n const min = this.readMin()\n let next = current + direction * step\n if (min !== undefined && next < min) {\n next = min\n }\n const modelRef = this.model\n if (modelRef) modelRef(next)\n }\n\n private readCurrentNumber() {\n const raw = unref(this.model)\n const numeric =\n typeof raw === 'number' ? raw : Number.parseFloat(String(raw ?? '0'))\n return Number.isFinite(numeric) ? numeric : 0\n }\n\n private readMin() {\n const min = unref(this.min)\n if (min === undefined) return undefined\n const value = typeof min === 'number' ? min : Number.parseFloat(min)\n return Number.isFinite(value) ? value : undefined\n }\n\n private readStep() {\n const step = unref(this.step)\n if (step === undefined) return 1\n const value = typeof step === 'number' ? step : Number.parseFloat(step)\n return Number.isFinite(value) && value > 0 ? value : 1\n }\n}\n\nconst formInputFieldTemplate = html`<label class=\"form-block__field\" :for=\"id\">\n <span class=\"form-block__label\" r-if=\"label\">{{ label }}</span>\n <div class=\"form-block__input-shell\" :class=\"classes\">\n <Icon class=\"form-block__input-icon\" :name=\"icon\" r-if=\"icon\"/>\n <input\n :id=\"id\"\n class=\"form-block__input\"\n :class=\"{ 'form-block__input--number': isNumberField }\"\n :type=\"isNumberField ? 'number' : type || 'text'\"\n :name=\"name\"\n :required=\"required\"\n :autocomplete=\"autocomplete || 'off'\"\n :min=\"min\"\n :step=\"step\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n r-model=\"model\"\n r-inherit/>\n <div class=\"form-block__number-controls\" r-if=\"isNumberField\">\n <button\n class=\"form-block__number-btn form-block__number-btn--up tone-fill-button-all\"\n type=\"button\"\n aria-label=\"Increase value\"\n @click=\"increment\"\n :disabled=\"disabled\"\n tabindex=\"-1\"\n >\n +\n </button>\n <button\n class=\"form-block__number-btn form-block__number-btn--down tone-fill-button-all\"\n type=\"button\"\n aria-label=\"Decrease value\"\n @click=\"decrement\"\n :disabled=\"disabled\"\n tabindex=\"-1\"\n >\n -\n </button>\n </div>\n <Icon class=\"form-block__input-icon\" :name=\"iconEnd\" r-if=\"iconEnd\"/>\n </div>\n</label>`\nexport function defineFormInputField() {\n return {\n formInputField: defineComponent<FormInputField>(formInputFieldTemplate, {\n props: [\n 'id',\n 'label',\n 'tone',\n 'variant',\n 'model',\n 'type',\n 'name',\n 'required',\n 'autocomplete',\n 'min',\n 'step',\n 'placeholder',\n 'disabled',\n 'icon',\n 'iconEnd',\n ],\n context: (head) => resolveFormInputField(head),\n }),\n }\n}\n\nfunction resolveFormInputField(head: ComponentHead<FormInputField>) {\n const field = new FormInputField(head.props)\n field.classes = computed(() =>\n resolveComponentClasses(head.props, {\n defaultVariant: 'surfaceAlt',\n }),\n )\n return field\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComponentHead,\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type Ref,\n type RefOrValue,\n ref,\n unref,\n} from 'regor'\nimport { createAutoId } from '../autoId'\nimport {\n type ComponentVariant,\n resolveComponentClasses,\n} from '../componentVariant'\n\nconst resolveSelectId = createAutoId('form-select')\n\nexport type FormSelectValue = string | number\n\nexport interface FormSelectOption {\n label: RefOrValue<string>\n value?: RefOrValue<FormSelectValue>\n disabled?: RefOrValue<boolean>\n}\n\nexport interface ResolvedFormSelectOption {\n label: string\n value: FormSelectValue\n disabled?: boolean\n}\n\nexport class FormSelectField {\n readonly id: string\n readonly label?: RefOrValue<string>\n readonly tone?: RefOrValue<SemanticTone>\n readonly variant?: RefOrValue<ComponentVariant>\n declare readonly model: Ref<FormSelectValue>\n readonly name?: RefOrValue<string>\n readonly required?: RefOrValue<boolean>\n readonly autocomplete?: RefOrValue<string>\n readonly placeholder?: RefOrValue<string>\n readonly disabled?: RefOrValue<boolean>\n readonly icon?: RefOrValue<string>\n readonly iconEnd?: RefOrValue<string>\n readonly options?: RefOrValue<FormSelectOption[]>\n classes?: ComputedRef<string>\n resolvedOptions?: ComputedRef<ResolvedFormSelectOption[]>\n resolvedIconEnd?: ComputedRef<string>\n hasPlaceholder?: ComputedRef<boolean>\n\n constructor(props: FormSelectField) {\n Object.assign(this, {\n ...props,\n })\n this.id = resolveSelectId(props.id)\n if (!this.model) this.model = ref<FormSelectValue>('')\n }\n}\n\nconst formSelectFieldTemplate = html`<label class=\"form-block__field\" :for=\"id\">\n <span class=\"form-block__label\" r-if=\"label\">{{ label }}</span>\n <div\n class=\"form-block__input-shell form-block__select-shell\"\n :class=\"classes\"\n >\n <Icon\n class=\"form-block__input-icon\"\n :name=\"icon\"\n r-if=\"icon\"\n style=\"pointer-events: none\"/>\n <select\n :id=\"id\"\n class=\"form-block__input form-block__select\"\n :name=\"name\"\n :required=\"required\"\n :autocomplete=\"autocomplete || 'off'\"\n :disabled=\"disabled\"\n r-model=\"model\"\n r-inherit\n >\n <option value=\"\" disabled r-if=\"hasPlaceholder\">{{ placeholder }}</option>\n <option\n r-for=\"option in resolvedOptions\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n >\n {{ option.label }}\n </option>\n </select>\n <Icon\n class=\"form-block__input-icon\"\n :name=\"resolvedIconEnd\"/>\n </div>\n</label>`\n\nexport function defineFormSelectField() {\n return {\n formSelectField: defineComponent<FormSelectField>(formSelectFieldTemplate, {\n props: [\n 'id',\n 'label',\n 'tone',\n 'variant',\n 'model',\n 'name',\n 'required',\n 'autocomplete',\n 'placeholder',\n 'disabled',\n 'icon',\n 'iconEnd',\n 'options',\n ],\n context: (head) => resolveFormSelectField(head),\n }),\n }\n}\n\nfunction resolveFormSelectField(head: ComponentHead<FormSelectField>) {\n const field = new FormSelectField(head.props)\n field.classes = computed(() =>\n resolveComponentClasses(head.props, {\n defaultVariant: 'surfaceAlt',\n }),\n )\n field.resolvedOptions = computed(() => {\n const options = (unref(head.props.options) || []) as Array<\n RefOrValue<FormSelectOption>\n >\n return options.map((option) => resolveSelectOption(option))\n })\n field.resolvedIconEnd = computed(\n () => unref(head.props.iconEnd) || 'lucide:chevron-down',\n )\n field.hasPlaceholder = computed(() => Boolean(unref(head.props.placeholder)))\n return field\n}\n\nfunction resolveSelectOption(\n optionInput: RefOrValue<FormSelectOption>,\n): ResolvedFormSelectOption {\n const option = unref(optionInput)\n const label = unref(option.label)\n return {\n label,\n value: unref(option.value) ?? label,\n disabled: unref(option.disabled),\n }\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComponentHead,\n type ComputedRef,\n computed,\n defineComponent,\n type Emits,\n html,\n isRef,\n type Ref,\n type RefOrValue,\n ref,\n type SRef,\n sref,\n unref,\n} from 'regor'\nimport { createAutoId } from '../autoId'\nimport {\n type ComponentVariant,\n resolveComponentClasses,\n} from '../componentVariant'\nimport type {\n AutoCompleteOption,\n AutoCompleteValue,\n ResolvedAutoCompleteOption,\n} from './autoCompleteInput'\n\nconst resolveMultiAutoCompleteInputId = createAutoId(\n 'multi-auto-complete-input',\n)\n\nexport interface MultiAutoCompleteItem {\n label: RefOrValue<string>\n value?: RefOrValue<AutoCompleteValue>\n disabled?: RefOrValue<boolean>\n invalid?: RefOrValue<boolean>\n tone?: RefOrValue<SemanticTone>\n keywords?: RefOrValue<string | string[]>\n}\n\nexport interface ResolvedMultiAutoCompleteItem {\n label: string\n value: AutoCompleteValue\n disabled?: boolean\n invalid?: boolean\n tone?: SemanticTone\n keywords: string[]\n}\n\nexport type MultiAutoCompleteCreateItem = (\n query: string,\n) => MultiAutoCompleteItem | null | undefined\n\nexport type MultiAutoCompleteOptionToItem = (\n option: ResolvedAutoCompleteOption,\n) => MultiAutoCompleteItem | null | undefined\n\nexport type MultiAutoCompleteSplitInput = (value: string) => string[]\n\nexport type MultiAutoCompleteItemsChange = (\n items: MultiAutoCompleteItem[],\n) => void\n\nexport type MultiAutoCompleteSelect = (\n option: ResolvedAutoCompleteOption,\n item: MultiAutoCompleteItem,\n) => void\n\nexport type MultiAutoCompleteSearch = (query: string) => void\n\nexport interface MultiAutoCompleteSelectedRow {\n id: string\n index: number\n item: ResolvedMultiAutoCompleteItem\n classes: string\n}\n\nexport interface MultiAutoCompleteOptionRow {\n id: string\n index: number\n option: ResolvedAutoCompleteOption\n active: boolean\n disabled?: boolean\n classes: string\n}\n\nexport interface MultiAutoCompleteInput {\n id?: RefOrValue<string>\n label?: RefOrValue<string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n items?: SRef<MultiAutoCompleteItem[]>\n model?: Ref<string>\n name?: RefOrValue<string>\n required?: RefOrValue<boolean>\n autocomplete?: RefOrValue<string>\n placeholder?: RefOrValue<string>\n disabled?: RefOrValue<boolean>\n icon?: RefOrValue<string>\n iconEnd?: RefOrValue<string>\n removeIcon?: RefOrValue<string>\n options?: RefOrValue<AutoCompleteOption[]>\n rowComponent?: RefOrValue<string>\n minLength?: RefOrValue<number | string>\n maxResults?: RefOrValue<number | string>\n openOnFocus?: RefOrValue<boolean>\n allowCustomValues?: RefOrValue<boolean>\n allowDuplicates?: RefOrValue<boolean>\n separators?: RefOrValue<string>\n loading?: RefOrValue<boolean>\n emptyText?: RefOrValue<string>\n loadingText?: RefOrValue<string>\n onCreateItem?: RefOrValue<MultiAutoCompleteCreateItem>\n onOptionToItem?: RefOrValue<MultiAutoCompleteOptionToItem>\n onSplitInput?: RefOrValue<MultiAutoCompleteSplitInput>\n onItemsChange?: RefOrValue<MultiAutoCompleteItemsChange>\n onSelect?: RefOrValue<MultiAutoCompleteSelect>\n onSearch?: RefOrValue<MultiAutoCompleteSearch>\n emits?: Emits<\n 'itemschange' | 'itemremove' | 'itemcreate' | 'optionselect' | 'querychange'\n >\n inputId?: string\n listboxId?: string\n inputElement?: SRef<HTMLInputElement | null>\n isOpen?: Ref<boolean>\n activeIndex?: Ref<number>\n query?: ComputedRef<string>\n classes?: ComputedRef<string>\n resolvedItems?: ComputedRef<ResolvedMultiAutoCompleteItem[]>\n selectedRows?: ComputedRef<MultiAutoCompleteSelectedRow[]>\n resolvedOptions?: ComputedRef<ResolvedAutoCompleteOption[]>\n filteredOptions?: ComputedRef<ResolvedAutoCompleteOption[]>\n optionRows?: ComputedRef<MultiAutoCompleteOptionRow[]>\n activeOptionId?: ComputedRef<string | undefined>\n shouldRenderPopup?: ComputedRef<boolean>\n showLoading?: ComputedRef<boolean>\n showEmpty?: ComputedRef<boolean>\n resolvedRowComponent?: ComputedRef<string>\n resolvedIconEnd?: ComputedRef<string | undefined>\n resolvedRemoveIcon?: ComputedRef<string>\n focusInput?: () => void\n handleFocusIn?: () => void\n handleFocusOut?: () => void\n handleInput?: () => void\n handlePaste?: (event: ClipboardEvent) => void\n handleKeydown?: (event: KeyboardEvent) => void\n handleOptionMouseDown?: (event: MouseEvent) => void\n selectOptionRow?: (row: MultiAutoCompleteOptionRow) => void\n removeSelectedRow?: (row: MultiAutoCompleteSelectedRow) => void\n removeItemLabel?: (row: MultiAutoCompleteSelectedRow) => string\n}\n\nexport interface MultiAutoCompleteDefaultOptionRow {\n option: RefOrValue<ResolvedAutoCompleteOption | null>\n active?: RefOrValue<boolean>\n}\n\nconst multiAutoCompleteInputTemplate = html`<label\n class=\"multi-auto-complete-input form-block__field\"\n :for=\"inputId\"\n @focusin=\"handleFocusIn\"\n @focusout=\"handleFocusOut\"\n>\n <span class=\"form-block__label\" r-if=\"label\">{{ label }}</span>\n <div\n class=\"multi-auto-complete-input__shell form-block__input-shell\"\n :class=\"classes\"\n @click=\"focusInput\"\n >\n <Icon class=\"form-block__input-icon\" :name=\"icon\" r-if=\"icon\"/>\n <div class=\"multi-auto-complete-input__control\">\n <span\n class=\"multi-auto-complete-input__item\"\n :class=\"row.classes\"\n r-for=\"row in selectedRows\"\n >\n <span class=\"multi-auto-complete-input__item-label\">\n {{ row.item.label }}\n </span>\n <button\n class=\"multi-auto-complete-input__remove\"\n type=\"button\"\n :title=\"removeItemLabel(row)\"\n :aria-label=\"removeItemLabel(row)\"\n :disabled=\"disabled || row.item.disabled\"\n @click=\"removeSelectedRow(row)\"\n >\n <Icon :name=\"resolvedRemoveIcon\"/>\n </button>\n <input\n r-if=\"name\"\n type=\"hidden\"\n :name=\"name\"\n :value=\"row.item.value\"/>\n </span>\n <input\n :id=\"inputId\"\n :ref=\"inputElement\"\n class=\"multi-auto-complete-input__query form-block__input\"\n type=\"text\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n :aria-controls=\"listboxId\"\n :aria-expanded=\"isOpen\"\n :aria-activedescendant=\"activeOptionId\"\n :required=\"required && selectedRows.length === 0\"\n :autocomplete=\"autocomplete || 'off'\"\n :placeholder=\"selectedRows.length === 0 ? placeholder : ''\"\n :disabled=\"disabled\"\n r-model=\"model\"\n @input=\"handleInput\"\n @paste=\"handlePaste\"\n @keydown=\"handleKeydown\"/>\n </div>\n <Icon\n class=\"form-block__input-icon\"\n :name=\"resolvedIconEnd\"\n r-if=\"resolvedIconEnd\"/>\n </div>\n <div\n class=\"multi-auto-complete-input__popup\"\n r-if=\"shouldRenderPopup\"\n >\n <div\n class=\"multi-auto-complete-input__message\"\n r-if=\"showLoading\"\n role=\"status\"\n aria-live=\"polite\"\n >\n {{ loadingText || 'Loading suggestions' }}\n </div>\n <div\n class=\"multi-auto-complete-input__message\"\n r-if=\"showEmpty\"\n role=\"status\"\n aria-live=\"polite\"\n >\n {{ emptyText || 'No suggestions' }}\n </div>\n <div\n class=\"multi-auto-complete-input__listbox\"\n :id=\"listboxId\"\n role=\"listbox\"\n r-if=\"!showLoading && !showEmpty\"\n >\n <div\n class=\"multi-auto-complete-input__option\"\n :class=\"row.classes\"\n role=\"option\"\n :id=\"row.id\"\n :aria-selected=\"row.active\"\n :aria-disabled=\"row.disabled\"\n r-for=\"row in optionRows\"\n @mousedown=\"handleOptionMouseDown\"\n @click=\"selectOptionRow(row)\"\n >\n <div\n :is=\"resolvedRowComponent\"\n :option=\"row.option\"\n :item=\"row.option\"\n :index=\"row.index\"\n :query=\"query\"\n :active=\"row.active\"\n :selected=\"false\"\n :disabled=\"row.disabled\"\n ></div>\n </div>\n </div>\n </div>\n</label>`\n\nconst multiAutoCompleteOptionRowTemplate = html`<div class=\"multi-auto-complete-input__default-row\">\n <span class=\"multi-auto-complete-input__default-label\">\n {{ option?.label }}\n </span>\n</div>`\n\nfunction defineMultiAutoCompleteInputComponent() {\n return defineComponent<MultiAutoCompleteInput>(\n multiAutoCompleteInputTemplate,\n {\n props: [\n 'id',\n 'label',\n 'tone',\n 'variant',\n 'items',\n 'model',\n 'name',\n 'required',\n 'autocomplete',\n 'placeholder',\n 'disabled',\n 'icon',\n 'iconEnd',\n 'removeIcon',\n 'options',\n 'rowComponent',\n 'minLength',\n 'maxResults',\n 'openOnFocus',\n 'allowCustomValues',\n 'allowDuplicates',\n 'separators',\n 'loading',\n 'emptyText',\n 'loadingText',\n 'onCreateItem',\n 'onOptionToItem',\n 'onSplitInput',\n 'onItemsChange',\n 'onSelect',\n 'onSearch',\n ],\n context: (head) => new MultiAutoCompleteInputContext(head),\n },\n )\n}\n\nfunction defineMultiAutoCompleteOptionRowComponent() {\n return defineComponent<MultiAutoCompleteDefaultOptionRow>(\n multiAutoCompleteOptionRowTemplate,\n {\n props: ['option', 'active', 'selected', 'query'],\n context: (head) => head.props,\n },\n )\n}\n\nexport function defineMultiAutoCompleteInputComponents() {\n return {\n multiAutoCompleteInput: defineMultiAutoCompleteInputComponent(),\n multiAutoCompleteOptionRow: defineMultiAutoCompleteOptionRowComponent(),\n }\n}\n\nclass MultiAutoCompleteInputContext implements MultiAutoCompleteInput {\n readonly id: string\n readonly label?: RefOrValue<string>\n readonly tone?: RefOrValue<SemanticTone>\n readonly variant?: RefOrValue<ComponentVariant>\n readonly items: SRef<MultiAutoCompleteItem[]>\n readonly model: Ref<string>\n readonly name?: RefOrValue<string>\n readonly required?: RefOrValue<boolean>\n readonly autocomplete?: RefOrValue<string>\n readonly placeholder?: RefOrValue<string>\n readonly disabled?: RefOrValue<boolean>\n readonly icon?: RefOrValue<string>\n readonly iconEnd?: RefOrValue<string>\n readonly removeIcon?: RefOrValue<string>\n readonly options?: RefOrValue<AutoCompleteOption[]>\n readonly rowComponent?: RefOrValue<string>\n readonly minLength?: RefOrValue<number | string>\n readonly maxResults?: RefOrValue<number | string>\n readonly openOnFocus?: RefOrValue<boolean>\n readonly allowCustomValues?: RefOrValue<boolean>\n readonly allowDuplicates?: RefOrValue<boolean>\n readonly separators?: RefOrValue<string>\n readonly loading?: RefOrValue<boolean>\n readonly emptyText?: RefOrValue<string>\n readonly loadingText?: RefOrValue<string>\n readonly onCreateItem?: RefOrValue<MultiAutoCompleteCreateItem>\n readonly onOptionToItem?: RefOrValue<MultiAutoCompleteOptionToItem>\n readonly onSplitInput?: RefOrValue<MultiAutoCompleteSplitInput>\n readonly onItemsChange?: RefOrValue<MultiAutoCompleteItemsChange>\n readonly onSelect?: RefOrValue<MultiAutoCompleteSelect>\n readonly onSearch?: RefOrValue<MultiAutoCompleteSearch>\n readonly inputId: string\n readonly listboxId: string\n readonly inputElement = sref<HTMLInputElement | null>(null)\n readonly isOpen = ref(false)\n readonly activeIndex = ref(-1)\n readonly query: ComputedRef<string>\n readonly classes: ComputedRef<string>\n readonly resolvedItems: ComputedRef<ResolvedMultiAutoCompleteItem[]>\n readonly selectedRows: ComputedRef<MultiAutoCompleteSelectedRow[]>\n readonly resolvedOptions: ComputedRef<ResolvedAutoCompleteOption[]>\n readonly filteredOptions: ComputedRef<ResolvedAutoCompleteOption[]>\n readonly optionRows: ComputedRef<MultiAutoCompleteOptionRow[]>\n readonly activeOptionId: ComputedRef<string | undefined>\n readonly shouldRenderPopup: ComputedRef<boolean>\n readonly showLoading: ComputedRef<boolean>\n readonly showEmpty: ComputedRef<boolean>\n readonly resolvedRowComponent: ComputedRef<string>\n readonly resolvedIconEnd: ComputedRef<string | undefined>\n readonly resolvedRemoveIcon: ComputedRef<string>\n private readonly emit: ComponentHead<MultiAutoCompleteInput>['emit']\n private closingTimer: ReturnType<typeof setTimeout> | undefined\n\n constructor(head: ComponentHead<MultiAutoCompleteInput>) {\n const props = head.props\n Object.assign(this, props)\n this.emit = head.emit\n this.id = resolveMultiAutoCompleteInputId(props.id)\n this.inputId = `${this.id}-query`\n this.listboxId = `${this.id}-listbox`\n this.items = isRef(props.items)\n ? props.items\n : sref<MultiAutoCompleteItem[]>([])\n this.model = isRef(props.model) ? props.model : ref('')\n this.query = computed(() => String(unref(this.model) ?? ''))\n this.classes = computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: 'surfaceAlt',\n classes: [\n unref(this.disabled)\n ? 'multi-auto-complete-input__shell--disabled'\n : '',\n ],\n }),\n )\n this.resolvedItems = computed(() =>\n this.items().map(resolveMultiAutoCompleteItem),\n )\n this.selectedRows = computed(() => this.resolveSelectedRows())\n this.resolvedOptions = computed(() => {\n const options = unref(props.options)\n return Array.isArray(options)\n ? options.map(resolveAutoCompleteOption)\n : []\n })\n this.filteredOptions = computed(() => this.resolveFilteredOptions())\n this.optionRows = computed(() => this.resolveOptionRows())\n this.activeOptionId = computed(\n () => this.optionRows()[this.activeIndex()]?.id,\n )\n this.showLoading = computed(() => this.isOpen() && !!unref(this.loading))\n this.showEmpty = computed(\n () =>\n this.isOpen() &&\n !this.showLoading() &&\n this.meetsMinimumQueryLength() &&\n this.filteredOptions().length === 0,\n )\n this.shouldRenderPopup = computed(\n () =>\n this.isOpen() &&\n (this.showLoading() ||\n this.showEmpty() ||\n this.filteredOptions().length > 0),\n )\n this.resolvedRowComponent = computed(() => {\n const component = unref(props.rowComponent)\n return typeof component === 'string' && component.trim()\n ? component\n : 'MultiAutoCompleteOptionRow'\n })\n this.resolvedIconEnd = computed(\n () =>\n unref(props.iconEnd) ||\n (unref(props.loading) ? 'lucide:loader-circle' : 'lucide:chevron-down'),\n )\n this.resolvedRemoveIcon = computed(\n () => unref(props.removeIcon) || 'lucide:x',\n )\n }\n\n focusInput = () => {\n if (unref(this.disabled)) return\n this.inputElement()?.focus()\n }\n\n handleFocusIn = () => {\n this.clearClosingTimer()\n if (!this.shouldOpenOnFocus()) return\n\n this.open()\n }\n\n handleFocusOut = () => {\n this.clearClosingTimer()\n this.closingTimer = setTimeout(() => {\n this.close()\n }, 0)\n }\n\n handleInput = () => {\n const query = this.query()\n unref(this.onSearch)?.(query)\n this.emit('querychange', { query })\n if (this.meetsMinimumQueryLength()) this.open()\n else this.close()\n }\n\n handlePaste = (event: ClipboardEvent) => {\n if (unref(this.disabled) || !this.canCreateCustomValues()) return\n\n const text = event.clipboardData?.getData('text') ?? ''\n const values = this.splitValues(text)\n if (values.length <= 1) return\n\n event.preventDefault()\n this.addCreatedValues(values)\n }\n\n handleKeydown = (event: KeyboardEvent) => {\n if (unref(this.disabled)) return\n\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n if (!this.isOpen()) {\n this.open()\n return\n }\n this.open()\n this.moveActive(1)\n return\n }\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n if (!this.isOpen()) {\n this.open()\n this.activateLast()\n return\n }\n this.open()\n this.moveActive(-1)\n return\n }\n if (event.key === 'Home' && this.isOpen()) {\n event.preventDefault()\n this.activateFirst()\n return\n }\n if (event.key === 'End' && this.isOpen()) {\n event.preventDefault()\n this.activateLast()\n return\n }\n if (event.key === 'Enter') {\n const row = this.isOpen() ? this.optionRows()[this.activeIndex()] : null\n if (row) {\n event.preventDefault()\n this.selectOptionRow(row)\n return\n }\n\n if (this.commitQuery()) event.preventDefault()\n return\n }\n if (event.key === 'Backspace' && !this.query()) {\n const rows = this.selectedRows()\n const row = rows[rows.length - 1]\n if (!row) return\n\n event.preventDefault()\n this.removeSelectedRow(row)\n return\n }\n if (event.key === 'Escape') {\n this.close()\n return\n }\n if (\n event.key.length === 1 &&\n this.resolvedSeparators().includes(event.key)\n ) {\n if (this.commitQuery()) event.preventDefault()\n }\n }\n\n handleOptionMouseDown = (event: MouseEvent) => {\n event.preventDefault()\n this.clearClosingTimer()\n }\n\n selectOptionRow = (row: MultiAutoCompleteOptionRow) => {\n if (row.disabled || unref(this.disabled)) return\n\n const item = unref(this.onOptionToItem)?.(row.option) ?? {\n label: row.option.label,\n value: row.option.value,\n }\n if (!this.addItem(item)) return\n\n this.model('')\n unref(this.onSelect)?.(row.option, item)\n this.emit('optionselect', { option: row.option, item })\n this.close()\n }\n\n removeSelectedRow = (row: MultiAutoCompleteSelectedRow) => {\n if (unref(this.disabled) || row.item.disabled) return\n\n const next = this.items().filter((_, index) => index !== row.index)\n this.writeItems(next)\n this.emit('itemremove', { item: row.item, index: row.index })\n }\n\n removeItemLabel = (row: MultiAutoCompleteSelectedRow) =>\n `Remove ${row.item.label}`\n\n private commitQuery() {\n if (!this.canCreateCustomValues()) return false\n\n const values = this.splitValues(this.query())\n if (values.length === 0) return false\n\n const added = this.addCreatedValues(values)\n if (added > 0) this.model('')\n return added > 0\n }\n\n private addCreatedValues(values: string[]) {\n const created: MultiAutoCompleteItem[] = []\n for (const value of values) {\n const item = unref(this.onCreateItem)?.(value) ?? {\n label: value,\n value,\n }\n if (!item || this.hasItemValue(item)) continue\n created.push(item)\n }\n if (created.length === 0) return 0\n\n const next = [...this.items(), ...created]\n this.writeItems(next)\n for (const item of created) this.emit('itemcreate', { item })\n this.close()\n return created.length\n }\n\n private addItem(item: MultiAutoCompleteItem) {\n if (!item || this.hasItemValue(item)) return false\n\n this.writeItems([...this.items(), item])\n return true\n }\n\n private writeItems(items: MultiAutoCompleteItem[]) {\n this.items(items)\n unref(this.onItemsChange)?.(items)\n this.emit('itemschange', { items })\n }\n\n private resolveSelectedRows() {\n return this.resolvedItems().map(\n (item, index): MultiAutoCompleteSelectedRow => ({\n id: `${this.id}-item-${index}`,\n index,\n item,\n classes: [\n item.invalid ? 'multi-auto-complete-input__item--invalid' : '',\n item.disabled ? 'multi-auto-complete-input__item--disabled' : '',\n item.tone ? `tone-${item.tone}` : '',\n ]\n .filter(Boolean)\n .join(' '),\n }),\n )\n }\n\n private resolveFilteredOptions() {\n const query = normalizeSearchText(this.query())\n if (!this.meetsMinimumQueryLength()) return []\n\n const options = this.resolvedOptions().filter(\n (option) =>\n !this.hasOptionValue(option) &&\n (!query ||\n option.keywords.some((keyword) =>\n normalizeSearchText(keyword).includes(query),\n )),\n )\n return options.slice(0, this.readPositiveInteger(this.maxResults, 10))\n }\n\n private resolveOptionRows() {\n const activeIndex = this.activeIndex()\n return this.filteredOptions().map(\n (option, index): MultiAutoCompleteOptionRow => ({\n id: `${this.listboxId}-option-${index}`,\n index,\n option,\n active: index === activeIndex,\n disabled: option.disabled,\n classes: [\n index === activeIndex\n ? 'multi-auto-complete-input__option--active'\n : '',\n option.disabled ? 'multi-auto-complete-input__option--disabled' : '',\n ]\n .filter(Boolean)\n .join(' '),\n }),\n )\n }\n\n private open() {\n if (unref(this.disabled) || !this.meetsMinimumQueryLength()) return\n\n this.isOpen(true)\n this.ensureActiveIndex()\n }\n\n private close() {\n this.isOpen(false)\n this.activeIndex(-1)\n }\n\n private moveActive(direction: 1 | -1) {\n const rows = this.optionRows()\n if (rows.length === 0) {\n this.activeIndex(-1)\n return\n }\n\n const current = this.activeIndex()\n for (let offset = 1; offset <= rows.length; offset += 1) {\n const next = wrapIndex(current + direction * offset, rows.length)\n if (!rows[next]?.disabled) {\n this.activeIndex(next)\n return\n }\n }\n }\n\n private activateFirst() {\n const index = this.optionRows().findIndex((row) => !row.disabled)\n this.activeIndex(index)\n }\n\n private activateLast() {\n const rows = this.optionRows()\n for (let index = rows.length - 1; index >= 0; index -= 1) {\n if (rows[index]?.disabled) continue\n\n this.activeIndex(index)\n return\n }\n this.activeIndex(-1)\n }\n\n private ensureActiveIndex() {\n const rows = this.optionRows()\n const current = this.activeIndex()\n if (current >= 0 && current < rows.length && !rows[current]?.disabled)\n return\n\n this.activateFirst()\n }\n\n private shouldOpenOnFocus() {\n return unref(this.openOnFocus) !== false && this.meetsMinimumQueryLength()\n }\n\n private meetsMinimumQueryLength() {\n return (\n this.query().trim().length >= this.readPositiveInteger(this.minLength, 0)\n )\n }\n\n private canCreateCustomValues() {\n return unref(this.allowCustomValues) !== false\n }\n\n private hasOptionValue(option: ResolvedAutoCompleteOption) {\n if (unref(this.allowDuplicates)) return false\n\n const key = normalizeItemValue(option.value)\n return this.resolvedItems().some(\n (item) => normalizeItemValue(item.value) === key,\n )\n }\n\n private hasItemValue(itemInput: MultiAutoCompleteItem) {\n if (unref(this.allowDuplicates)) return false\n\n const item = resolveMultiAutoCompleteItem(itemInput)\n const key = normalizeItemValue(item.value)\n return this.resolvedItems().some(\n (existing) => normalizeItemValue(existing.value) === key,\n )\n }\n\n private splitValues(value: string) {\n const values =\n unref(this.onSplitInput)?.(value) ??\n splitBySeparators(value, this.resolvedSeparators())\n return values.map((item) => item.trim()).filter(Boolean)\n }\n\n private resolvedSeparators() {\n const value = unref(this.separators)\n return typeof value === 'string' ? value : ',;'\n }\n\n private readPositiveInteger(\n value: RefOrValue<number | string> | undefined,\n fallback: number,\n ) {\n const raw = unref(value)\n const parsed =\n typeof raw === 'number' ? raw : Number.parseFloat(String(raw))\n return Number.isFinite(parsed) && parsed >= 0\n ? Math.trunc(parsed)\n : fallback\n }\n\n private clearClosingTimer() {\n if (this.closingTimer === undefined) return\n\n clearTimeout(this.closingTimer)\n this.closingTimer = undefined\n }\n}\n\nfunction resolveMultiAutoCompleteItem(\n itemInput: RefOrValue<MultiAutoCompleteItem>,\n): ResolvedMultiAutoCompleteItem {\n const item = unref(itemInput)\n const label = String(unref(item.label) ?? '')\n const value = unref(item.value) ?? label\n return {\n label,\n value,\n disabled: unref(item.disabled),\n invalid: unref(item.invalid),\n tone: unref(item.tone),\n keywords: resolveKeywords(item, label, value),\n }\n}\n\nfunction resolveAutoCompleteOption(\n optionInput: RefOrValue<AutoCompleteOption>,\n): ResolvedAutoCompleteOption {\n const option = unref(optionInput)\n const label = String(unref(option.label) ?? '')\n const value = unref(option.value) ?? label\n return {\n label,\n value,\n disabled: unref(option.disabled),\n keywords: resolveKeywords(option, label, value),\n }\n}\n\nfunction resolveKeywords(\n item: Pick<AutoCompleteOption, 'keywords'>,\n label: string,\n value: AutoCompleteValue,\n) {\n const keywords = unref(item.keywords)\n const source: string[] = Array.isArray(keywords)\n ? keywords.map((keyword) => String(unref(keyword) ?? ''))\n : typeof keywords === 'string'\n ? keywords.split(/\\s+/)\n : []\n return [label, String(value), ...source].filter(Boolean)\n}\n\nfunction splitBySeparators(value: string, separators: string) {\n const values: string[] = []\n let current = ''\n for (const char of value) {\n if (char === '\\n' || separators.includes(char)) {\n values.push(current)\n current = ''\n continue\n }\n\n current += char\n }\n\n values.push(current)\n return values\n}\n\nfunction normalizeSearchText(value: string) {\n return value.trim().toLocaleLowerCase()\n}\n\nfunction normalizeItemValue(value: AutoCompleteValue) {\n return String(value).trim().toLocaleLowerCase()\n}\n\nfunction wrapIndex(index: number, length: number) {\n return ((index % length) + length) % length\n}\n","import {\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type RefOrValue,\n unref,\n} from 'regor'\n\nexport type GridAlignItems = 'stretch' | 'start' | 'center' | 'end'\nexport type GridJustifyItems = 'stretch' | 'start' | 'center' | 'end'\n\nexport interface Grid {\n container?: RefOrValue<string>\n columns?: RefOrValue<number | string>\n columnsSm?: RefOrValue<number | string>\n columnsMd?: RefOrValue<number | string>\n columnsLg?: RefOrValue<number | string>\n columnsXl?: RefOrValue<number | string>\n alignItems?: RefOrValue<GridAlignItems>\n justifyItems?: RefOrValue<GridJustifyItems>\n dense?: RefOrValue<boolean | string>\n classes?: ComputedRef<string>\n gridStyle?: ComputedRef<Record<string, string>>\n}\n\nconst gridTemplate = html`<div :is=\"container ?? 'div'\" class=\"grid\" :class=\"classes\" :style=\"gridStyle\">\n <slot></slot>\n</div>`\n\nfunction defineGridComponent() {\n return defineComponent<Grid>(gridTemplate, {\n props: [\n 'container',\n 'columns',\n 'columnsSm',\n 'columnsMd',\n 'columnsLg',\n 'columnsXl',\n 'alignItems',\n 'justifyItems',\n 'dense',\n ],\n context: (head) => resolveGrid(head.props),\n })\n}\n\nexport function defineGridComponents() {\n return {\n grid: defineGridComponent(),\n }\n}\n\nfunction resolveGrid(props: Grid): Grid {\n const classes = computed(() => {\n return [\n resolveAlignClass(props.alignItems),\n resolveJustifyClass(props.justifyItems),\n resolveDenseClass(props.dense),\n ]\n .filter(Boolean)\n .join(' ')\n })\n const gridStyle = computed(() => {\n const resolvedColumns = resolveResponsiveGridTemplateColumns(props)\n\n return {\n '--grid-template-columns': resolvedColumns.base,\n '--grid-template-columns-sm': resolvedColumns.sm,\n '--grid-template-columns-md': resolvedColumns.md,\n '--grid-template-columns-lg': resolvedColumns.lg,\n '--grid-template-columns-xl': resolvedColumns.xl,\n } as Record<string, string>\n })\n\n return {\n ...props,\n classes,\n gridStyle,\n }\n}\n\ntype ResolvedGridTemplateColumns = {\n base: string\n sm: string\n md: string\n lg: string\n xl: string\n}\n\nfunction resolveResponsiveGridTemplateColumns(\n props: Grid,\n): ResolvedGridTemplateColumns {\n const base =\n resolveGridTemplateColumnsValue(props.columns) ?? toRepeatTemplate(1)\n const sm = resolveGridTemplateColumnsValue(props.columnsSm) ?? base\n const md = resolveGridTemplateColumnsValue(props.columnsMd) ?? sm\n const lg = resolveGridTemplateColumnsValue(props.columnsLg) ?? md\n const xl = resolveGridTemplateColumnsValue(props.columnsXl) ?? lg\n\n return { base, sm, md, lg, xl }\n}\n\nfunction resolveGridTemplateColumnsValue(\n value?: RefOrValue<number | string>,\n): string | undefined {\n const resolvedValue = unref(value)\n\n if (typeof resolvedValue === 'number' && Number.isInteger(resolvedValue)) {\n return toRepeatTemplate(clampColumns(resolvedValue))\n }\n\n if (typeof resolvedValue !== 'string') return undefined\n\n const normalized = resolvedValue.trim()\n if (!normalized) return undefined\n\n const columnCount = tryParseColumnCount(normalized)\n if (columnCount !== undefined) return toRepeatTemplate(columnCount)\n\n return normalized\n}\n\nfunction tryParseColumnCount(value: string): number | undefined {\n if (!/^\\d+$/.test(value)) return undefined\n\n const parsed = Number.parseInt(value, 10)\n if (!Number.isInteger(parsed)) return undefined\n\n return clampColumns(parsed)\n}\n\nfunction toRepeatTemplate(columns: number) {\n return `repeat(${columns}, minmax(0, 1fr))`\n}\n\nfunction clampColumns(value: number) {\n if (value < 1) return 1\n if (value > 12) return 12\n return value\n}\n\nfunction resolveAlignClass(value?: RefOrValue<GridAlignItems>) {\n if (!value) return ''\n const normalized = unref(value).toLowerCase()\n if (\n normalized === 'stretch' ||\n normalized === 'start' ||\n normalized === 'center' ||\n normalized === 'end'\n ) {\n return `align-${normalized}`\n }\n return ''\n}\n\nfunction resolveJustifyClass(value?: RefOrValue<GridJustifyItems>) {\n if (!value) return ''\n const normalized = unref(value).toLowerCase()\n if (\n normalized === 'stretch' ||\n normalized === 'start' ||\n normalized === 'center' ||\n normalized === 'end'\n ) {\n return `justify-items-${normalized}`\n }\n return ''\n}\n\nfunction resolveDenseClass(value?: RefOrValue<boolean | string>) {\n if (!value) return ''\n const normalized = unref(value)\n if (normalized === true || normalized === 'true') return 'grid-dense'\n\n return ''\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type RefOrValue,\n unref,\n} from 'regor'\nimport {\n type ComponentVariant,\n type ComponentVariantMode,\n resolveComponentClasses,\n} from '../componentVariant'\n\nexport type GetSvgIcon = (name: string) => string\nexport type IconFrameSize = 'sm' | 'md' | 'lg'\n\nexport interface Icon {\n name?: RefOrValue<string>\n svg?: ComputedRef<string>\n}\n\nexport interface IconFrame {\n name?: RefOrValue<string>\n tone?: RefOrValue<SemanticTone>\n size?: RefOrValue<IconFrameSize>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n classes?: ComputedRef<string>\n hasIcon?: ComputedRef<boolean>\n}\n\nconst DEFAULT_ICON_FRAME_VARIANT: ComponentVariant = 'solid'\nconst DEFAULT_ICON_FRAME_VARIANT_MODE: ComponentVariantMode = 'stateless'\n\nconst iconTemplate = html`<span class=\"icon\" r-if=\"svg\" r-html=\"svg\"></span>`\n\nconst iconFrameTemplate = html`<span class=\"icon-frame\" :class=\"classes\" r-if=\"hasIcon\">\n <Icon :name=\"name\"/>\n</span>`\n\nfunction defineIconComponent(getSvgIcon: GetSvgIcon) {\n return defineComponent<Icon>(iconTemplate, {\n props: ['name'],\n context: (head) => resolveIcon(head.props, getSvgIcon),\n })\n}\n\nfunction defineIconFrameComponent() {\n return defineComponent<IconFrame>(iconFrameTemplate, {\n props: ['name', 'tone', 'size', 'variant', 'variantMode'],\n context: (head) => resolveIconFrame(head.props),\n })\n}\n\nexport function defineIconComponents(getSvgIcon: GetSvgIcon) {\n return {\n icon: defineIconComponent(getSvgIcon),\n iconFrame: defineIconFrameComponent(),\n }\n}\n\nfunction resolveIcon(props: Icon, getSvgIcon: GetSvgIcon): Icon {\n const svg = computed(() => {\n const name = unref(props.name)\n return name ? getSvgIcon(name) : ''\n })\n\n return {\n ...props,\n svg,\n }\n}\n\nfunction resolveIconFrame(props: IconFrame): IconFrame {\n return {\n ...props,\n hasIcon: computed(() => Boolean(unref(props.name))),\n classes: computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: DEFAULT_ICON_FRAME_VARIANT,\n defaultVariantMode: DEFAULT_ICON_FRAME_VARIANT_MODE,\n classes: [resolveIconFrameSizeClass(props.size)],\n }),\n ),\n }\n}\n\nfunction resolveIconFrameSizeClass(size?: RefOrValue<IconFrameSize>) {\n const resolvedSize = unref(size)\n if (resolvedSize === 'sm' || resolvedSize === 'lg') {\n return `icon-frame--${resolvedSize}`\n }\n return ''\n}\n","import { defineComponent, html } from 'regor'\nimport type { CodeShowcase } from './landingTypes'\n\nexport function defineCodeShowcaseComponent() {\n const codeShowcaseTemplate = html`<Panel :tone=\"tone\" :variant=\"variant || 'surface'\">\n <Flex direction=\"column\">\n <Flex align=\"start\" justify=\"between\" wrap=\"true\">\n <SectionHeader\n :eyebrow=\"eyebrow\"\n :title=\"title\"\n :subtitle=\"summary\"\n titleTag=\"h3\"\n titleClass=\"fs-h4 mb-1\"\n subtitleClass=\"mb-0\"/>\n <Badge r-if=\"language\" :tone=\"tone\">{{ language }}</Badge>\n </Flex>\n <Panel\n variant=\"outline\"\n tone=\"neutral\"\n class=\"box-shadow-none\"\n bodyClass=\"overflow-x-auto\"\n >\n <slot></slot>\n </Panel>\n <Panel\n r-if=\"resultTitle || resultMeta\"\n :tone=\"tone\"\n variant=\"outline\"\n class=\"box-shadow-none\"\n >\n <Flex align=\"center\" justify=\"between\" wrap=\"true\" class=\"mb-2\">\n <strong r-if=\"resultTitle\">{{ resultTitle }}</strong>\n <Badge r-if=\"resultMeta\" :tone=\"tone\">{{ resultMeta }}</Badge>\n </Flex>\n <slot name=\"result\"></slot>\n </Panel>\n </Flex>\n </Panel>`\n\n return {\n codeShowcase: defineComponent<CodeShowcase>(codeShowcaseTemplate, {\n props: [\n 'eyebrow',\n 'title',\n 'summary',\n 'language',\n 'resultTitle',\n 'resultMeta',\n 'tone',\n 'variant',\n ],\n }),\n }\n}\n","import { defineComponent, html } from 'regor'\nimport type { ComparisonColumn } from './landingTypes'\n\nexport function defineComparisonColumnComponent() {\n const comparisonColumnTemplate = html`<Panel :tone=\"tone\" :variant=\"variant || 'surface'\">\n <Flex direction=\"column\" align=\"start\">\n <Flex align=\"center\" justify=\"between\" class=\"w-full\" r-if=\"icon || badge\">\n <IconFrame\n r-if=\"icon\"\n :name=\"icon\"\n :tone=\"tone\"\n :variant=\"variant\"\n size=\"lg\"/>\n <Badge r-if=\"badge\" :tone=\"tone\">{{ badge }}</Badge>\n </Flex>\n <h3 class=\"fs-h4 fw-700 my-0\" r-if=\"title\">{{ title }}</h3>\n <p class=\"text-tagline mb-0\" r-if=\"summary\">{{ summary }}</p>\n <slot></slot>\n </Flex>\n </Panel>`\n\n return {\n comparisonColumn: defineComponent<ComparisonColumn>(\n comparisonColumnTemplate,\n {\n props: ['title', 'summary', 'badge', 'icon', 'tone', 'variant'],\n },\n ),\n }\n}\n","import { defineComponent, html } from 'regor'\nimport type { ComparisonFeature } from './landingTypes'\n\nexport function defineComparisonFeatureComponent() {\n const comparisonFeatureTemplate = html`<Flex container=\"li\" align=\"start\">\n <IconFrame\n :name=\"icon || 'lucide:check'\"\n :tone=\"tone\"\n variant=\"surface\"\n size=\"sm\"/>\n <slot></slot>\n </Flex>`\n\n return {\n comparisonFeature: defineComponent<ComparisonFeature>(\n comparisonFeatureTemplate,\n {\n props: ['icon', 'tone'],\n },\n ),\n }\n}\n","import { defineComponent, html } from 'regor'\nimport type { ComparisonTable } from './landingTypes'\n\nexport function defineComparisonTableComponent() {\n const comparisonTableTemplate = html`<Panel :tone=\"tone\" :variant=\"variant || 'surface'\" class=\"mb-6\">\n <Flex direction=\"column\" align=\"start\" class=\"w-full\">\n <SectionHeader\n r-if=\"eyebrow || title || subtitle\"\n :eyebrow=\"eyebrow\"\n :title=\"title\"\n :subtitle=\"subtitle\"\n titleTag=\"h2\"\n subtitleClass=\"mb-0\"/>\n <Grid\n :columns=\"columns || 1\"\n :columnsLg=\"columnsLg || 3\"\n alignItems=\"stretch\"\n class=\"w-full\"\n >\n <slot></slot>\n </Grid>\n </Flex>\n </Panel>`\n\n return {\n comparisonTable: defineComponent<ComparisonTable>(comparisonTableTemplate, {\n props: [\n 'eyebrow',\n 'title',\n 'subtitle',\n 'tone',\n 'variant',\n 'columns',\n 'columnsLg',\n ],\n }),\n }\n}\n","import { defineComponent, html } from 'regor'\nimport type { CtaSection } from './landingTypes'\n\nexport function defineCtaSectionComponent() {\n const ctaSectionTemplate = html`<Panel :tone=\"tone\" :variant=\"variant || 'surface'\">\n <Grid columns=\"1\" columnsLg=\"minmax(0, 1fr) auto\" alignItems=\"center\">\n <SectionHeader\n :eyebrow=\"eyebrow\"\n :title=\"title\"\n :subtitle=\"subtitle\"\n titleTag=\"h2\"\n titleClass=\"fs-h2 mb-2\"\n subtitleClass=\"mb-0\"/>\n <Flex align=\"center\" justify=\"end\" wrap=\"true\">\n <BtnLink\n r-if=\"primaryLabel && primaryHref\"\n :href=\"primaryHref\"\n :icon=\"primaryIcon\"\n iconPosition=\"end\"\n :tone=\"tone || 'accent'\"\n size=\"lg\"\n >\n {{ primaryLabel }}\n </BtnLink>\n <BtnLink\n r-if=\"secondaryLabel && secondaryHref\"\n :href=\"secondaryHref\"\n :icon=\"secondaryIcon\"\n :tone=\"tone || 'ghost'\"\n variant=\"outline\"\n size=\"lg\"\n >\n {{ secondaryLabel }}\n </BtnLink>\n <slot name=\"actions\"></slot>\n </Flex>\n <p class=\"prose-meta mb-0\" r-if=\"meta\">{{ meta }}</p>\n </Grid>\n </Panel>`\n\n return {\n ctaSection: defineComponent<CtaSection>(ctaSectionTemplate, {\n props: [\n 'eyebrow',\n 'title',\n 'subtitle',\n 'primaryLabel',\n 'primaryHref',\n 'primaryIcon',\n 'secondaryLabel',\n 'secondaryHref',\n 'secondaryIcon',\n 'meta',\n 'tone',\n 'variant',\n ],\n }),\n }\n}\n","import { defineComponent, html } from 'regor'\nimport type { FeatureCard } from './landingTypes'\n\nexport function defineFeatureCardComponent() {\n const featureCardTemplate = html`<Panel :tone=\"tone\" :variant=\"variant || 'surface'\">\n <Flex direction=\"column\" align=\"start\" justify=\"center\">\n <Flex align=\"center\" justify=\"center\" class=\"w-full\" r-if=\"icon || badge\">\n <IconFrame\n r-if=\"icon\"\n :name=\"icon\"\n :tone=\"tone\"\n :variant=\"variant\"\n size=\"lg\"/>\n <Badge r-if=\"badge\" :tone=\"tone\">{{ badge }}</Badge>\n </Flex>\n <Flex direction=\"column\" align=\"center\" class=\"text-justify\">\n <p class=\"text-eyebrow\" r-if=\"eyebrow\">{{ eyebrow }}</p>\n <h3 class=\"fs-h4 fw-700 my-0\" r-if=\"title\">{{ title }}</h3>\n <p class=\"text-tagline mb-0\" r-if=\"summary\">{{ summary }}</p>\n <slot></slot>\n </Flex>\n <Flex wrap=\"true\" class=\"mt-auto\">\n <slot name=\"actions\"></slot>\n </Flex>\n </Flex>\n </Panel>`\n\n return {\n featureCard: defineComponent<FeatureCard>(featureCardTemplate, {\n props: [\n 'eyebrow',\n 'title',\n 'summary',\n 'badge',\n 'icon',\n 'tone',\n 'variant',\n ],\n }),\n }\n}\n","import type { CSSProps } from '@purestack/ts-css'\nimport { docLayoutVar } from '@purestack/ts-style'\nimport { computed, defineComponent, html, type RefOrValue, unref } from 'regor'\nimport type {\n ComponentVariant,\n ComponentVariantMode,\n} from '../componentVariant'\nimport { resolveComponentClasses } from '../componentVariant'\nimport type { LandingBand, LandingBandEdge } from './landingTypes'\n\nconst DEFAULT_LANDING_BAND_VARIANT: ComponentVariant = 'surfaceAlt'\nconst DEFAULT_LANDING_BAND_VARIANT_MODE: ComponentVariantMode = 'stateless'\nconst DEFAULT_LANDING_BAND_HEIGHT = '16rem'\nconst DEFAULT_LANDING_BAND_EDGE_SIZE = '4rem'\nconst DEFAULT_LANDING_BAND_EDGE_START = '0%'\nconst LANDING_BAND_INLINE_PADDING = '1em'\n\nexport function defineLandingBandComponent() {\n const landingBandTemplate = html`<section :class=\"classes\" :style=\"bandStyle\">\n <slot></slot>\n </section>`\n\n return {\n landingBand: defineComponent<LandingBand>(landingBandTemplate, {\n props: [\n 'tone',\n 'variant',\n 'variantMode',\n 'image',\n 'imageFit',\n 'imagePosition',\n 'display',\n 'alignItems',\n 'justifyContent',\n 'height',\n 'marginTop',\n 'marginBottom',\n 'paddingTop',\n 'paddingBottom',\n 'topEdge',\n 'bottomEdge',\n 'edgeSize',\n 'topEdgeStart',\n 'bottomEdgeStart',\n ],\n context: (head) => resolveLandingBand(head.props),\n }),\n }\n}\n\nfunction resolveLandingBand(props: LandingBand): LandingBand {\n const height = computed(() =>\n resolveStyleValue(props.height, DEFAULT_LANDING_BAND_HEIGHT),\n )\n const edgeSize = computed(() =>\n resolveStyleValue(props.edgeSize, DEFAULT_LANDING_BAND_EDGE_SIZE),\n )\n const inlineStartBleed = resolveLandingBandInlineBleed('start')\n const inlineEndBleed = resolveLandingBandInlineBleed('end')\n\n return {\n ...props,\n classes: computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: DEFAULT_LANDING_BAND_VARIANT,\n defaultVariantMode: DEFAULT_LANDING_BAND_VARIANT_MODE,\n classes: ['rounded-none', resolveLandingBandBorderClass(props)],\n }),\n ),\n bandStyle: computed<Partial<CSSProps>>(() => ({\n display: resolveCssPropValue(props.display, 'flex'),\n alignItems: resolveCssPropValue(props.alignItems, 'start'),\n justifyContent: resolveCssPropValue(props.justifyContent, 'center'),\n borderRadius: '0 !important',\n borderLeft: 'none !important',\n borderRight: 'none !important',\n overflow: 'hidden',\n boxSizing: 'border-box',\n pointerEvents: 'none',\n minHeight: height(),\n marginInlineStart: `calc(-1 * (${inlineStartBleed}))`,\n marginInlineEnd: `calc(-1 * (${inlineEndBleed}))`,\n paddingInlineStart: `calc(${LANDING_BAND_INLINE_PADDING} + ${inlineStartBleed})`,\n paddingInlineEnd: `calc(${LANDING_BAND_INLINE_PADDING} + ${inlineEndBleed})`,\n paddingTop: resolveLandingBandEdgePadding(\n props.paddingTop,\n edgeSize(),\n props.topEdge,\n ),\n paddingBottom: resolveLandingBandEdgePadding(\n props.paddingBottom,\n edgeSize(),\n props.bottomEdge,\n ),\n marginTop: resolveStyleValue(props.marginTop, '0'),\n marginBottom: resolveStyleValue(props.marginBottom, '0'),\n backgroundImage: resolveBackgroundImage(props.image),\n backgroundSize: unref(props.imageFit) || 'cover',\n backgroundPosition: unref(props.imagePosition) || 'center',\n backgroundRepeat: 'no-repeat',\n clipPath: resolveLandingBandClipPath(props, edgeSize()),\n })),\n }\n}\n\nfunction resolveLandingBandInlineBleed(side: 'start' | 'end') {\n return `${resolveCenteredViewportBleed()} + ${resolveDocLayoutInlineCorrection(side)}`\n}\n\nfunction resolveCenteredViewportBleed() {\n return '50vw - 50%'\n}\n\nfunction resolveDocLayoutInlineCorrection(side: 'start' | 'end') {\n const inlineStartState = `(${resolveDocLayoutInlineStartState()})`\n const inlineEndState = `(${resolveDocLayoutInlineEndState()})`\n const balance =\n side === 'start'\n ? `${inlineStartState} - ${inlineEndState}`\n : `${inlineEndState} - ${inlineStartState}`\n return `(${balance}) / 2`\n}\n\nfunction resolveDocLayoutInlineStartState() {\n return [\n docLayoutVar('activeShellPaddingInlineStart'),\n docLayoutVar('activeNavWidth'),\n ].join(' + ')\n}\n\nfunction resolveDocLayoutInlineEndState() {\n return [\n docLayoutVar('activeShellPaddingInlineEnd'),\n docLayoutVar('activeTocWidth'),\n ].join(' + ')\n}\n\nfunction resolveLandingBandClipPath(\n props: LandingBand,\n edgeSize: string,\n): string | undefined {\n const topEdge = resolveLandingBandEdge(props.topEdge)\n const bottomEdge = resolveLandingBandEdge(props.bottomEdge)\n\n if (topEdge === 'flat' && bottomEdge === 'flat') return undefined\n\n const topStart = resolveStyleValue(\n props.topEdgeStart,\n DEFAULT_LANDING_BAND_EDGE_START,\n )\n const bottomStart = resolveStyleValue(\n props.bottomEdgeStart,\n DEFAULT_LANDING_BAND_EDGE_START,\n )\n const topLeftY = topEdge === 'slant-up' ? edgeSize : '0'\n const topRightY = topEdge === 'slant-down' ? edgeSize : '0'\n const bottomRightY =\n bottomEdge === 'slant-up' ? `calc(100% - ${edgeSize})` : '100%'\n const bottomLeftY =\n bottomEdge === 'slant-down' ? `calc(100% - ${edgeSize})` : '100%'\n const points = [\n `0 ${topLeftY}`,\n `${topStart} ${topLeftY}`,\n `100% ${topRightY}`,\n `100% ${bottomRightY}`,\n `${bottomStart} ${bottomLeftY}`,\n `0 ${bottomLeftY}`,\n ]\n\n return `polygon(${points.join(', ')})`\n}\n\nfunction resolveLandingBandEdgePadding(\n padding: RefOrValue<string> | undefined,\n edgeSize: string,\n edge: RefOrValue<LandingBandEdge> | undefined,\n) {\n const resolvedPadding = resolveStyleValue(padding, '1em')\n return resolveLandingBandEdge(edge) === 'flat'\n ? resolvedPadding\n : `calc(${resolvedPadding} + ${edgeSize})`\n}\n\nfunction resolveLandingBandEdge(edge?: RefOrValue<LandingBandEdge>) {\n const resolved = unref(edge)\n return resolved === 'slant-up' || resolved === 'slant-down'\n ? resolved\n : 'flat'\n}\n\nfunction resolveLandingBandBorderClass(props: LandingBand) {\n return resolveLandingBandEdge(props.topEdge) === 'flat' &&\n resolveLandingBandEdge(props.bottomEdge) === 'flat'\n ? undefined\n : 'b-0'\n}\n\nfunction resolveBackgroundImage(image?: RefOrValue<string>) {\n const resolved = unref(image)\n return typeof resolved === 'string' && resolved.trim()\n ? `url(\"${resolved.trim()}\")`\n : undefined\n}\n\nfunction resolveStyleValue(\n value: RefOrValue<string> | undefined,\n fallback: string,\n) {\n const resolved = unref(value)\n return typeof resolved === 'string' && resolved.trim()\n ? resolved.trim()\n : fallback\n}\n\nfunction resolveCssPropValue<T>(value: RefOrValue<T> | undefined, fallback: T) {\n return unref(value) || fallback\n}\n","import { defineComponent, html } from 'regor'\nimport type { LandingSection } from './landingTypes'\n\nexport function defineLandingSectionComponent() {\n const landingSectionTemplate = html`<Panel\n :tone=\"tone\"\n :variant=\"variant || 'none'\"\n :variantMode=\"variantMode\"\n class=\"mb-6\"\n >\n <Grid\n columns=\"1\"\n :columnsLg=\"columnsLg || columns\"\n :alignItems=\"alignItems || 'start'\"\n >\n <SectionHeader\n r-if=\"eyebrow || title || subtitle\"\n :eyebrow=\"eyebrow\"\n :title=\"title\"\n :subtitle=\"subtitle\"\n :titleTag=\"titleTag || 'h2'\"\n subtitleClass=\"mb-0\"/>\n <slot></slot>\n </Grid>\n </Panel>`\n\n return {\n landingSection: defineComponent<LandingSection>(landingSectionTemplate, {\n props: [\n 'eyebrow',\n 'title',\n 'subtitle',\n 'titleTag',\n 'tone',\n 'variant',\n 'variantMode',\n 'columns',\n 'columnsLg',\n 'alignItems',\n ],\n }),\n }\n}\n","import { defineComponent, html } from 'regor'\nimport type { MetricItem } from './landingTypes'\n\nexport function defineMetricItemComponent() {\n const metricItemTemplate = html`<Flex align=\"start\">\n <IconFrame\n r-if=\"icon\"\n :name=\"icon\"\n :tone=\"tone\"\n variant=\"surface\"\n size=\"sm\"/>\n <div>\n <p class=\"prose-meta mb-1\" r-if=\"label\">{{ label }}</p>\n <strong class=\"fs-body\">{{ value }}</strong>\n <p class=\"text-subtle fs-xs mb-0\" r-if=\"detail\">{{ detail }}</p>\n <slot></slot>\n </div>\n </Flex>`\n\n return {\n metricItem: defineComponent<MetricItem>(metricItemTemplate, {\n props: ['label', 'value', 'detail', 'icon', 'tone'],\n }),\n }\n}\n","import { defineComponent, html } from 'regor'\nimport type { MetricStrip } from './landingTypes'\n\nexport function defineMetricStripComponent() {\n const metricStripTemplate = html`<Panel :tone=\"tone\" :variant=\"variant || 'surface'\" class=\"w-full\">\n <Grid\n :columns=\"columns || 1\"\n :columnsSm=\"columnsSm || 2\"\n :columnsLg=\"columnsLg || 4\"\n >\n <slot></slot>\n </Grid>\n </Panel>`\n\n return {\n metricStrip: defineComponent<MetricStrip>(metricStripTemplate, {\n props: ['tone', 'variant', 'columns', 'columnsSm', 'columnsLg'],\n }),\n }\n}\n","export type {\n CodeShowcase,\n ComparisonColumn,\n ComparisonFeature,\n ComparisonTable,\n CtaSection,\n FeatureCard,\n LandingBand,\n LandingBandEdge,\n LandingBandImageFit,\n LandingSection,\n LandingTitleTag,\n MetricItem,\n MetricStrip,\n} from './landingTypes'\n\nimport { defineCodeShowcaseComponent } from './codeShowcase'\nimport { defineComparisonColumnComponent } from './comparisonColumn'\nimport { defineComparisonFeatureComponent } from './comparisonFeature'\nimport { defineComparisonTableComponent } from './comparisonTable'\nimport { defineCtaSectionComponent } from './ctaSection'\nimport { defineFeatureCardComponent } from './featureCard'\nimport { defineLandingBandComponent } from './landingBand'\nimport { defineLandingSectionComponent } from './landingSection'\nimport { defineMetricItemComponent } from './metricItem'\nimport { defineMetricStripComponent } from './metricStrip'\n\nexport { defineCodeShowcaseComponent } from './codeShowcase'\nexport { defineComparisonColumnComponent } from './comparisonColumn'\nexport { defineComparisonFeatureComponent } from './comparisonFeature'\nexport { defineComparisonTableComponent } from './comparisonTable'\nexport { defineCtaSectionComponent } from './ctaSection'\nexport { defineFeatureCardComponent } from './featureCard'\nexport { defineLandingBandComponent } from './landingBand'\nexport { defineLandingSectionComponent } from './landingSection'\nexport { defineMetricItemComponent } from './metricItem'\nexport { defineMetricStripComponent } from './metricStrip'\n\nexport function defineLandingComponents() {\n return {\n ...defineLandingBandComponent(),\n ...defineLandingSectionComponent(),\n ...defineFeatureCardComponent(),\n ...defineMetricStripComponent(),\n ...defineMetricItemComponent(),\n ...defineCodeShowcaseComponent(),\n ...defineComparisonTableComponent(),\n ...defineComparisonColumnComponent(),\n ...defineComparisonFeatureComponent(),\n ...defineCtaSectionComponent(),\n }\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComputedRef,\n computed,\n defineComponent,\n type RefOrValue,\n svg,\n unref,\n} from 'regor'\nimport {\n type CartesianChartDomain,\n pointIndexToCartesianChartX,\n type ResolvedCartesianChartGridLine,\n resolveCartesianChartDomain,\n resolveCartesianChartGridLines,\n valueToCartesianChartY,\n} from '../chart/cartesianChart'\nimport {\n DEFAULT_CARTESIAN_CHART_HEIGHT,\n DEFAULT_CARTESIAN_CHART_WIDTH,\n DEFAULT_CHART_COLORS,\n DEFAULT_CHART_EMPTY_LABEL,\n} from '../chart/chartDefaults'\nimport {\n formatChartNumber,\n formatChartPoint,\n formatChartValue,\n readChartNumber,\n resolveChartSize,\n resolveChartText,\n} from '../chart/chartUtils'\nimport type {\n ComponentVariant,\n ComponentVariantMode,\n} from '../componentVariant'\nimport { resolveComponentClasses } from '../componentVariant'\n\nexport type LineChartCurve = 'linear' | 'smooth'\n\nexport interface LineChartPoint {\n label?: RefOrValue<string>\n value?: RefOrValue<number | string>\n}\n\nexport interface LineChartSeries {\n label?: RefOrValue<string>\n color?: RefOrValue<string>\n points?: RefOrValue<Array<RefOrValue<LineChartPoint>>>\n}\n\nexport interface ResolvedLineChartPoint {\n label: string\n value: number\n formattedValue: string\n x: number\n y: number\n valueLabelY: number\n valueLabelBaseline: string\n}\n\nexport interface ResolvedLineChartSeries {\n label: string\n color: string\n path: string\n areaPath: string\n points: ResolvedLineChartPoint[]\n}\n\nexport interface ResolvedLineChartGridLine\n extends ResolvedCartesianChartGridLine {}\n\nexport interface ResolvedLineChartLabel {\n label: string\n x: number\n y: number\n}\n\nexport interface LineChart {\n series?: RefOrValue<Array<RefOrValue<LineChartSeries>>>\n title?: RefOrValue<string>\n description?: RefOrValue<string>\n ariaLabel?: RefOrValue<string>\n emptyLabel?: RefOrValue<string>\n valueSuffix?: RefOrValue<string>\n width?: RefOrValue<number | string>\n height?: RefOrValue<number | string>\n minValue?: RefOrValue<number | string>\n maxValue?: RefOrValue<number | string>\n curve?: RefOrValue<LineChartCurve>\n animated?: RefOrValue<boolean | string>\n showArea?: RefOrValue<boolean | string>\n showPoints?: RefOrValue<boolean | string>\n showValues?: RefOrValue<boolean | string>\n showLabels?: RefOrValue<boolean | string>\n showAxis?: RefOrValue<boolean | string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n classes?: ComputedRef<string>\n resolvedWidth?: ComputedRef<string | number>\n resolvedHeight?: ComputedRef<string | number | undefined>\n resolvedAriaLabel?: ComputedRef<string>\n resolvedEmptyLabel?: ComputedRef<string>\n chartSeries?: ComputedRef<ResolvedLineChartSeries[]>\n gridLines?: ComputedRef<ResolvedLineChartGridLine[]>\n xLabels?: ComputedRef<ResolvedLineChartLabel[]>\n hasSeries?: ComputedRef<boolean>\n zeroLineY?: ComputedRef<number>\n}\n\nconst VALUE_LABEL_OFFSET = 2.6\nconst CATEGORY_LABEL_Y = 60\nconst MAX_X_LABEL_COUNT = 7\n\nconst lineChartTemplate = svg`<svg\n class=\"line-chart\"\n :class=\"classes\"\n viewBox=\"-6 0 112 64\"\n :width=\"resolvedWidth\"\n :height=\"resolvedHeight\"\n role=\"img\"\n :aria-label=\"resolvedAriaLabel\"\n>\n <title r-if=\"title\">{{ title }}</title>\n <desc r-if=\"description\">{{ description }}</desc>\n <g class=\"line-chart__grid\" r-if=\"hasSeries && showAxis\">\n <g r-for=\"line in gridLines\" class=\"line-chart__grid-line\">\n <line x1=\"8\" x2=\"94\" :y1=\"line.y\" :y2=\"line.y\"/>\n <text x=\"5.4\" :y=\"line.y\">{{ line.formattedValue }}</text>\n </g>\n </g>\n <line\n r-if=\"hasSeries && showAxis\"\n class=\"line-chart__zero-line\"\n x1=\"8\"\n x2=\"94\"\n :y1=\"zeroLineY\"\n :y2=\"zeroLineY\"/>\n <g class=\"line-chart__areas\" r-if=\"hasSeries && showArea\">\n <path\n r-for=\"item in chartSeries\"\n class=\"line-chart__area\"\n :d=\"item.areaPath\"\n :fill=\"item.color\"\n :aria-label=\"item.label\"\n ></path>\n </g>\n <g class=\"line-chart__series\" r-if=\"hasSeries\">\n <path\n r-for=\"item in chartSeries\"\n class=\"line-chart__line\"\n :d=\"item.path\"\n :stroke=\"item.color\"\n :aria-label=\"item.label\"\n >\n <title>{{ item.label }}</title>\n <animate\n r-if=\"animated\"\n attributeName=\"stroke-opacity\"\n from=\"0\"\n to=\"1\"\n dur=\"820ms\"\n fill=\"freeze\"/>\n </path>\n </g>\n <g class=\"line-chart__points\" r-if=\"hasSeries && showPoints\">\n <g r-for=\"item in chartSeries\" class=\"line-chart__point-series\">\n <circle\n r-for=\"point in item.points\"\n class=\"line-chart__point\"\n :cx=\"point.x\"\n :cy=\"point.y\"\n r=\"0.9\"\n :fill=\"item.color\"\n :aria-label=\"item.label + ', ' + point.label + ': ' + point.formattedValue\"\n >\n <title>{{ item.label + ', ' + point.label + ': ' + point.formattedValue }}</title>\n <animate\n r-if=\"animated\"\n attributeName=\"r\"\n from=\"0\"\n to=\"0.9\"\n dur=\"520ms\"\n fill=\"freeze\"/>\n </circle>\n </g>\n </g>\n <g class=\"line-chart__values\" r-if=\"hasSeries && showValues\">\n <g r-for=\"item in chartSeries\" class=\"line-chart__value-series\">\n <text\n r-for=\"point in item.points\"\n class=\"line-chart__value\"\n :x=\"point.x\"\n :y=\"point.valueLabelY\"\n text-anchor=\"middle\"\n :dominant-baseline=\"point.valueLabelBaseline\"\n >\n {{ point.formattedValue }}\n </text>\n </g>\n </g>\n <g class=\"line-chart__labels\" r-if=\"hasSeries && showLabels\">\n <text\n r-for=\"label in xLabels\"\n class=\"line-chart__label\"\n :x=\"label.x\"\n :y=\"label.y\"\n text-anchor=\"middle\"\n >\n {{ label.label }}\n </text>\n </g>\n <text\n r-if=\"!hasSeries\"\n class=\"line-chart__empty\"\n x=\"50\"\n y=\"30\"\n text-anchor=\"middle\"\n >\n {{ resolvedEmptyLabel }}\n </text>\n</svg>`\n\nfunction defineLineChartComponent() {\n return defineComponent<LineChart>(lineChartTemplate, {\n props: [\n 'series',\n 'title',\n 'description',\n 'ariaLabel',\n 'emptyLabel',\n 'valueSuffix',\n 'width',\n 'height',\n 'minValue',\n 'maxValue',\n 'curve',\n 'animated',\n 'showArea',\n 'showPoints',\n 'showValues',\n 'showLabels',\n 'showAxis',\n 'tone',\n 'variant',\n 'variantMode',\n ],\n context: (head) => resolveLineChart(head.props),\n })\n}\n\nexport function defineLineChartComponents() {\n return {\n lineChart: defineLineChartComponent(),\n }\n}\n\nfunction resolveLineChart(props: LineChart): LineChart {\n const domain = computed(() => resolveDomain(props))\n const chartSeries = computed(() => resolveChartSeries(props, domain()))\n\n return {\n animated: true,\n showArea: false,\n showPoints: true,\n showValues: false,\n showLabels: true,\n showAxis: true,\n ...props,\n classes: computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: 'none',\n defaultVariantMode: 'stateless',\n }),\n ),\n resolvedWidth: computed(() =>\n resolveChartSize(props.width, DEFAULT_CARTESIAN_CHART_WIDTH),\n ),\n resolvedHeight: computed(() =>\n resolveChartSize(props.height, DEFAULT_CARTESIAN_CHART_HEIGHT),\n ),\n resolvedAriaLabel: computed(() => resolveAriaLabel(props)),\n resolvedEmptyLabel: computed(\n () => resolveChartText(props.emptyLabel) || DEFAULT_CHART_EMPTY_LABEL,\n ),\n chartSeries,\n gridLines: computed(() =>\n resolveCartesianChartGridLines(domain(), props.valueSuffix),\n ),\n xLabels: computed(() => resolveXLabels(chartSeries())),\n hasSeries: computed(() => chartSeries().length > 0),\n zeroLineY: computed(() => valueToCartesianChartY(0, domain())),\n }\n}\n\ninterface ResolvedLineChartSourceSeries {\n label: string\n color: string\n points: ResolvedLineChartSourcePoint[]\n}\n\ninterface ResolvedLineChartSourcePoint {\n label: string\n value: number\n}\n\nfunction resolveChartSeries(\n props: LineChart,\n domain: CartesianChartDomain,\n): ResolvedLineChartSeries[] {\n const valueSuffix = resolveChartText(props.valueSuffix)\n const curve = resolveCurve(props.curve)\n const zeroY = valueToCartesianChartY(0, domain)\n\n return resolveSeries(props.series).map((series, index) => {\n const points = series.points.map((point, pointIndex) => {\n const x = pointIndexToCartesianChartX(pointIndex, series.points.length)\n const y = valueToCartesianChartY(point.value, domain)\n const valueLabelY =\n point.value < 0\n ? y + VALUE_LABEL_OFFSET\n : Math.max(2, y - VALUE_LABEL_OFFSET)\n\n return {\n label: point.label,\n value: point.value,\n formattedValue: formatChartValue(point.value, valueSuffix),\n x,\n y,\n valueLabelY,\n valueLabelBaseline: point.value < 0 ? 'hanging' : 'auto',\n }\n })\n\n return {\n label: series.label,\n color:\n series.color ||\n DEFAULT_CHART_COLORS[index % DEFAULT_CHART_COLORS.length],\n path: resolveLinePath(points, curve),\n areaPath: resolveAreaPath(points, zeroY, curve),\n points,\n }\n })\n}\n\nfunction resolveSeries(\n seriesInput: LineChart['series'],\n): ResolvedLineChartSourceSeries[] {\n return (unref(seriesInput) || [])\n .map((series, index) => {\n const resolvedSeries = unref(series)\n return {\n label: resolveChartText(resolvedSeries?.label) || `Series ${index + 1}`,\n color: resolveChartText(resolvedSeries?.color),\n points: resolvePoints(resolvedSeries?.points),\n }\n })\n .filter((series) => series.points.length > 0)\n}\n\nfunction resolvePoints(\n pointsInput: LineChartSeries['points'],\n): ResolvedLineChartSourcePoint[] {\n return (unref(pointsInput) || [])\n .map((pointInput, index) => {\n const point = unref(pointInput)\n const value = readChartNumber(point?.value, Number.NaN)\n return {\n label: resolveChartText(point?.label) || `Point ${index + 1}`,\n value,\n }\n })\n .filter((point) => Number.isFinite(point.value))\n}\n\nfunction resolveLinePath(\n points: ResolvedLineChartPoint[],\n curve: LineChartCurve,\n) {\n if (!points.length) return ''\n if (points.length === 1) return `M ${formatChartPoint(points[0])}`\n if (curve === 'linear') {\n return points\n .map(\n (point, index) =>\n `${index === 0 ? 'M' : 'L'} ${formatChartPoint(point)}`,\n )\n .join(' ')\n }\n\n return [\n `M ${formatChartPoint(points[0])}`,\n ...points.slice(1).map((point, index) => {\n const previous = points[index]\n const midpointX = (previous.x + point.x) / 2\n return [\n 'C',\n formatChartNumber(midpointX),\n formatChartNumber(previous.y),\n formatChartNumber(midpointX),\n formatChartNumber(point.y),\n formatChartPoint(point),\n ].join(' ')\n }),\n ].join(' ')\n}\n\nfunction resolveAreaPath(\n points: ResolvedLineChartPoint[],\n zeroY: number,\n curve: LineChartCurve,\n) {\n if (!points.length) return ''\n const first = points[0]\n const last = points.at(-1) || first\n return [\n `M ${formatChartNumber(first.x)} ${formatChartNumber(zeroY)}`,\n resolveLinePath(points, curve).replace(/^M /, 'L '),\n `L ${formatChartNumber(last.x)} ${formatChartNumber(zeroY)}`,\n 'Z',\n ].join(' ')\n}\n\nfunction resolveXLabels(\n series: ResolvedLineChartSeries[],\n): ResolvedLineChartLabel[] {\n const points = series[0]?.points || []\n if (!points.length) return []\n\n const step = Math.max(1, Math.ceil(points.length / MAX_X_LABEL_COUNT))\n return points\n .filter((_, index) => index % step === 0 || index === points.length - 1)\n .map((point) => ({\n label: point.label,\n x: point.x,\n y: CATEGORY_LABEL_Y,\n }))\n}\n\nfunction resolveDomain(props: LineChart): CartesianChartDomain {\n const values = resolveSeries(props.series).flatMap((series) =>\n series.points.map((point) => point.value),\n )\n return resolveCartesianChartDomain({\n values,\n minValue: props.minValue,\n maxValue: props.maxValue,\n })\n}\n\nfunction resolveAriaLabel(props: LineChart) {\n return (\n resolveChartText(props.ariaLabel) ||\n resolveChartText(props.title) ||\n 'Line chart'\n )\n}\n\nfunction resolveCurve(value: RefOrValue<LineChartCurve> | undefined) {\n return unref(value) === 'linear' ? 'linear' : 'smooth'\n}\n","import {\n type LogoConfig,\n type PageContext,\n tryResolvePageContext,\n} from '@purestack/ts-common'\nimport {\n getSemanticToneClass,\n normalizeThemeVariableReference,\n} from '@purestack/ts-style'\nimport {\n type ComputedRef,\n computed,\n defineComponent,\n flatten,\n html,\n type RefOrValue,\n unref,\n} from 'regor'\n\ntype ReactiveLogoOptions = {\n [K in keyof LogoConfig]?: RefOrValue<LogoConfig[K]>\n}\n\nexport interface SiteLogo extends ReactiveLogoOptions {\n config?: RefOrValue<Partial<LogoConfig>>\n options?: ComputedRef<LogoConfig>\n classes?: ComputedRef<string>\n logoStyle?: ComputedRef<Record<string, string>>\n resolvedHref?: ComputedRef<string | undefined>\n resolvedImage?: ComputedRef<string | undefined>\n resolvedDarkImage?: ComputedRef<string | undefined>\n accessibleName?: ComputedRef<string>\n initials?: ComputedRef<string>\n}\n\nconst logoTemplate = html`<a\n class=\"site-logo\"\n :class=\"classes\"\n :style=\"logoStyle\"\n :href=\"resolvedHref\"\n :role=\"resolvedHref ? undefined : 'img'\"\n :aria-label=\"accessibleName\"\n>\n <span\n class=\"site-logo__mark\"\n r-if=\"options.layout !== 'wordmark'\"\n aria-hidden=\"true\"\n >\n <slot name=\"mark\">\n <span class=\"site-logo__images\" r-if=\"resolvedImage\">\n <img\n class=\"site-logo__image\"\n :class=\"{ 'site-logo__image--light': resolvedDarkImage }\"\n :src=\"resolvedImage\"\n alt=\"\"\n decoding=\"async\"/>\n <img\n class=\"site-logo__image site-logo__image--dark\"\n r-if=\"resolvedDarkImage\"\n :src=\"resolvedDarkImage\"\n alt=\"\"\n decoding=\"async\"/>\n </span>\n <Icon r-else-if=\"options.icon\" :name=\"options.icon\"/>\n <span class=\"site-logo__monogram\" r-else>{{ initials }}</span>\n </slot>\n </span>\n <span\n class=\"site-logo__copy\"\n r-if=\"options.layout !== 'mark'\"\n aria-hidden=\"true\"\n >\n <span class=\"site-logo__name\"\n ><span class=\"site-logo__brand\">{{ options.brand }}</span\n ><span class=\"site-logo__suffix\" r-if=\"options.suffix\"\n >{{ options.suffix }}</span\n ></span\n >\n <span class=\"site-logo__subtitle\" r-if=\"options.subtitle\"\n >{{ options.subtitle }}</span\n >\n </span>\n</a>`\n\nconst logoProps = [\n 'brand',\n 'subtitle',\n 'suffix',\n 'href',\n 'ariaLabel',\n 'icon',\n 'imageSrc',\n 'imageSrcDark',\n 'monogram',\n 'layout',\n 'size',\n 'appearance',\n 'markStyle',\n 'wordmarkStyle',\n 'shape',\n 'tone',\n 'brandColor',\n 'accentColor',\n 'markBackground',\n 'markColor',\n 'brandSize',\n 'subtitleSize',\n 'markSize',\n 'gap',\n] as const satisfies readonly (keyof LogoConfig)[]\n\nfunction resolveSiteLogo(props: SiteLogo, context?: PageContext): SiteLogo {\n const options = computed<LogoConfig>(() => {\n const config = flatten(unref(props.config) ?? {}) as Partial<LogoConfig>\n const read = <K extends keyof LogoConfig>(\n key: K,\n ): LogoConfig[K] | undefined => {\n const value = unref(props[key]) as LogoConfig[K] | undefined\n return value === undefined ? config[key] : value\n }\n return {\n brand: read('brand') ?? '',\n subtitle: read('subtitle'),\n suffix: read('suffix'),\n href: read('href'),\n ariaLabel: read('ariaLabel'),\n icon: read('icon'),\n imageSrc: read('imageSrc'),\n imageSrcDark: read('imageSrcDark'),\n monogram: read('monogram'),\n layout: read('layout') ?? 'horizontal',\n size: read('size') ?? 'md',\n appearance: read('appearance') ?? 'plain',\n markStyle: read('markStyle') ?? 'plain',\n wordmarkStyle: read('wordmarkStyle') ?? 'plain',\n shape: read('shape') ?? 'rounded',\n tone: read('tone') ?? 'accent',\n brandColor: read('brandColor'),\n accentColor: read('accentColor'),\n markBackground: read('markBackground'),\n markColor: read('markColor'),\n brandSize: read('brandSize'),\n subtitleSize: read('subtitleSize'),\n markSize: read('markSize'),\n gap: read('gap'),\n }\n })\n const resolveUrl = (value: string | undefined) =>\n value ? (context?.resolvePublicHref(value) ?? value) : undefined\n return {\n options,\n classes: computed(() => {\n const logo = options()\n return [\n `site-logo--${logo.layout}`,\n `site-logo--${logo.size}`,\n `site-logo--${logo.appearance}`,\n `site-logo--mark-${logo.markStyle}`,\n `site-logo--wordmark-${logo.wordmarkStyle}`,\n `site-logo--${logo.shape}`,\n getSemanticToneClass(logo.tone),\n ].join(' ')\n }),\n logoStyle: computed(() => {\n const logo = options()\n const style: Record<string, string> = {}\n const colors = {\n '--ps-logo-brand-color': logo.brandColor,\n '--ps-logo-accent-color': logo.accentColor,\n '--ps-logo-mark-background': logo.markBackground,\n '--ps-logo-mark-color': logo.markColor,\n }\n for (const [key, value] of Object.entries(colors)) {\n if (value?.trim())\n style[key] = normalizeThemeVariableReference(value.trim())\n }\n const lengths = {\n '--ps-logo-brand-size': logo.brandSize,\n '--ps-logo-subtitle-size': logo.subtitleSize,\n '--ps-logo-mark-size': logo.markSize,\n '--ps-logo-gap': logo.gap,\n }\n for (const [key, value] of Object.entries(lengths)) {\n if (value?.trim()) style[key] = value.trim()\n }\n return style\n }),\n resolvedHref: computed(() => {\n const href = options().href\n return href === null || href === '' ? undefined : resolveUrl(href ?? '/')\n }),\n resolvedImage: computed(() => resolveUrl(options().imageSrc)),\n resolvedDarkImage: computed(() => resolveUrl(options().imageSrcDark)),\n accessibleName: computed(\n () =>\n options().ariaLabel?.trim() ||\n options().brand.trim() ||\n options().monogram?.trim() ||\n 'Home',\n ),\n initials: computed(() => {\n const logo = options()\n if (logo.monogram) return logo.monogram\n return logo.brand\n .trim()\n .split(/\\s+/)\n .slice(0, 2)\n .map((word) => Array.from(word)[0] ?? '')\n .join('')\n .toLocaleUpperCase()\n }),\n }\n}\n\nexport function defineLogoComponents() {\n return {\n siteLogo: defineComponent<SiteLogo>(logoTemplate, {\n props: ['config', ...logoProps],\n context: (head) =>\n resolveSiteLogo(head.props, tryResolvePageContext(head)),\n }),\n }\n}\n","import { Base } from '@purestack/ts-util'\nimport { defineComponent, html, type RefOrValue, ref, sref, unref } from 'regor'\n\nimport type { Btn } from '../btn/btn'\nimport type { Modal } from './modal'\n\nlet nextModalId = 1\nlet modalStoreSingleton: ModalStore | undefined\n\nexport interface ModalActionContract extends Btn {\n id?: string\n label?: RefOrValue<string>\n closeOnClick?: RefOrValue<boolean>\n onClick?: (modal: ModalItem, store: ModalStore) => void | Promise<void>\n}\n\nexport interface ModalContract extends Modal {\n body?: RefOrValue<string>\n note?: RefOrValue<string>\n actions?: ModalActionContract[]\n}\n\nclass ModalAction extends Base<ModalActionContract>() {\n override readonly id: string\n readonly running = ref(false)\n constructor(opts: ModalActionContract) {\n super(opts)\n this.id = opts.id ?? `action-${nextModalId++}`\n }\n}\nclass ModalItem extends Base<ModalContract>() {\n override readonly id: string\n constructor(opts: ModalContract) {\n super(opts)\n this.id = opts.id || `modal-store-${nextModalId}`\n nextModalId += 1\n Object.assign(this, opts)\n this.actions = opts.actions?.map?.((x) => new ModalAction(x))\n }\n}\n\nexport class ModalStore {\n readonly modals = sref<ModalItem[]>([])\n\n openModal = (options: ModalContract) => {\n const modal = this.createModal(options)\n const id = modal.id\n\n setTimeout(() => {\n window.tsSsgModal?.refresh()\n window.tsSsgModal?.open(id)\n }, 1)\n return modal\n }\n\n closeModal = (id: string) => {\n window.tsSsgModal?.close(id)\n }\n\n private findModal = (id: string) => {\n return this.modals().find((modal) => modal.id === id)\n }\n\n runAction = (modal: ModalItem, action: ModalAction) => {\n void this.runActionAsync(modal, action)\n }\n\n removeModal = (id: string) => {\n this.modals(this.modals().filter((modal) => modal.id !== id))\n }\n\n private createModal(options: ModalContract) {\n if (options.id && this.findModal(options.id)) {\n this.closeModal(options.id)\n }\n\n const created = new ModalItem(options)\n this.modals([...this.modals(), created])\n return created\n }\n\n private async runActionAsync(modal: ModalItem, action: ModalAction) {\n modal = unref(modal)\n if (action.running()) return\n\n action.running(true)\n try {\n await action.onClick?.(modal, this)\n if ((unref(action.closeOnClick) ?? true) === true) {\n this.closeModal(modal.id)\n }\n } catch (err) {\n console.warn(err)\n } finally {\n action.running(false)\n }\n }\n}\n\nfunction ensureModalStore() {\n if (!modalStoreSingleton) {\n modalStoreSingleton = new ModalStore()\n }\n return modalStoreSingleton\n}\n\nexport function useModalStore() {\n if (!modalStoreSingleton) {\n throw new Error(\n 'ModalStore is not mounted. Render <ModalStore> once first.',\n )\n }\n return modalStoreSingleton\n}\n\nconst modalStoreTemplate = html`<template r-for=\"modal in modals\">\n <Modal\n :id=\"modal.id\"\n :title=\"modal.title\"\n :tone=\"modal.tone\"\n :variant=\"modal.variant\"\n :variantMode=\"modal.variantMode\"\n :size=\"modal.size\"\n :fade=\"modal.fade\"\n :slideFrom=\"modal.slideFrom\"\n :showClose=\"modal.showClose\"\n @close=\"removeModal(modal.id)\"\n >\n <p class=\"modal-store__body\" r-if=\"modal.body\">{{ modal.body }}</p>\n <p class=\"modal-store__note\" r-if=\"modal.note\">{{ modal.note }}</p>\n <template name=\"footer\">\n <Flex r-if=\"modal.actions.length > 0\">\n <Btn\n r-for=\"action in modal.actions\"\n :tone=\"action.tone\"\n :variant=\"action.variant\"\n :icon=\"action.icon\"\n :disabled=\"action.disabled\"\n @click=\"runAction(modal, action)\"\n >\n {{ action.label }}\n </Btn>\n </Flex>\n </template>\n </Modal>\n</template>`\n\nexport function defineModalStoreComponent() {\n return {\n modalStore: defineComponent<ModalStore>(modalStoreTemplate, {\n context: () => ensureModalStore(),\n }),\n }\n}\n","import { tryResolvePageContext } from '@purestack/ts-common'\nimport type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComponentHead,\n type ComputedRef,\n computed,\n defineComponent,\n type Emits,\n html,\n type RefOrValue,\n unref,\n} from 'regor'\nimport {\n type ComponentVariant,\n type ComponentVariantMode,\n resolveComponentClasses,\n} from '../componentVariant'\nimport { defineModalStoreComponent } from './modalStore'\n\nexport type ModalSize = 'sm' | 'md' | 'lg' | 'xl'\nexport type ModalSlideFrom = 'none' | 'top' | 'right' | 'bottom' | 'left'\n\nconst DEFAULT_MODAL_VARIANT_MODE: ComponentVariantMode = 'stateless'\n\nexport interface Modal {\n id?: string\n title?: RefOrValue<string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n size?: RefOrValue<ModalSize>\n fade?: RefOrValue<boolean>\n slideFrom?: RefOrValue<ModalSlideFrom>\n showClose?: RefOrValue<boolean>\n titleId?: string\n rootClass?: ComputedRef<string>\n classes?: ComputedRef<string>\n emits?: Emits<'close' | 'cancel'>\n}\n\nexport interface ModalTrigger {\n target?: string\n label?: RefOrValue<string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n}\n\nconst modalTemplate = html`<dialog\n class=\"modal\"\n :class=\"rootClass\"\n :id=\"id\"\n :data-modal-id=\"id\"\n data-modal-root\n role=\"dialog\"\n aria-modal=\"true\"\n :aria-labelledby=\"titleId\"\n>\n <slot name=\"content\">\n <article class=\"modal__panel\" role=\"document\" tabindex=\"-1\">\n <div class=\"modal__surface\" :class=\"classes\">\n <header class=\"modal__header\">\n <slot name=\"header\">\n <h2 class=\"modal__title tone-text\" :id=\"titleId\" r-if=\"title\">\n {{ title }}\n </h2>\n </slot>\n <Btn\n r-if=\"showClose\"\n :variant=\"variant\"\n size=\"sm\"\n data-modal-close\n aria-label=\"Close dialog\"\n >\n <span aria-hidden=\"true\">X</span>\n </Btn>\n </header>\n <div class=\"modal__body\">\n <slot name=\"body\">\n <slot></slot>\n </slot>\n </div>\n <footer class=\"modal__footer\"><slot name=\"footer\"></slot></footer>\n </div>\n </article>\n </slot>\n</dialog>`\n\nconst modalTriggerTemplate = html`<Btn\n :tone=\"tone\"\n :variant=\"variant\"\n :data-modal-target=\"target\"\n data-modal-trigger\n>\n {{ label }}\n</Btn>`\n\nfunction defineModalComponent() {\n return defineComponent<Modal>(modalTemplate, {\n props: [\n 'id',\n 'title',\n 'tone',\n 'variant',\n 'variantMode',\n 'size',\n 'fade',\n 'slideFrom',\n 'showClose',\n ],\n context: (head) => {\n markModalRuntimeEmbed(head)\n return resolveModal(head.props)\n },\n })\n}\n\nfunction defineModalTriggerComponent() {\n return defineComponent<ModalTrigger>(modalTriggerTemplate, {\n props: ['target', 'label', 'tone', 'variant'],\n context: (head) => resolveModalTrigger(head.props),\n })\n}\n\nexport function defineModalComponents() {\n return {\n modal: defineModalComponent(),\n modalTrigger: defineModalTriggerComponent(),\n ...defineModalStoreComponent(),\n }\n}\n\nfunction resolveModal(props: Modal): Modal {\n return {\n ...props,\n titleId: `${unref(props.id)}-title`,\n classes: computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: 'surface',\n defaultVariantMode: DEFAULT_MODAL_VARIANT_MODE,\n }),\n ),\n rootClass: computed(() => resolveModalRootClass(props)),\n }\n}\n\nfunction resolveModalTrigger(props: ModalTrigger): ModalTrigger {\n return {\n target: props.target,\n label: props.label,\n tone: props.tone,\n variant: props.variant,\n }\n}\n\nfunction resolveModalRootClass(props: Modal) {\n const size = unref(props.size) || 'md'\n const slideFrom = unref(props.slideFrom) || 'none'\n const fade = unref(props.fade) ?? true\n return [\n `modal--size-${size}`,\n fade ? 'modal--fade' : '',\n slideFrom !== 'none' ? `modal--slide-${slideFrom}` : '',\n fade || slideFrom !== 'none' ? 'modal--animated' : '',\n ]\n .filter(Boolean)\n .join(' ')\n}\n\nfunction markModalRuntimeEmbed(head: ComponentHead<Modal>) {\n tryResolvePageContext(head)?.recordRuntimeEmbed('modal', 'head')\n}\n","import {\n type NavItem,\n type PageContext,\n tryResolvePageContext,\n} from '@purestack/ts-common'\nimport type { SemanticTone } from '@purestack/ts-style'\nimport { urlNormalizer } from '@purestack/ts-util'\nimport {\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type RefOrValue,\n type SRef,\n unref,\n} from 'regor'\nimport {\n type ComponentVariant,\n type ComponentVariantMode,\n resolveComponentClasses,\n} from '../componentVariant'\n\nexport interface NavMenu {\n items?: NavItem[] | SRef<NavItem[]>\n currentUrl?: RefOrValue<string>\n navItems?: ComputedRef<NavItemState[]>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n signInSignedIn?: RefOrValue<boolean>\n signInAvatarSrc?: RefOrValue<string>\n signInAvatarAlt?: RefOrValue<string>\n classes?: ComputedRef<string>\n search?: RefOrValue<boolean>\n signInEnabled?: RefOrValue<boolean>\n resolvedSignInEnabled?: ComputedRef<boolean>\n searchEnabled?: ComputedRef<boolean>\n navRoot?: string\n}\n\nexport interface NavList {\n items?: NavItemState[]\n tone?: SemanticTone\n}\n\nexport interface NavItemState extends NavItem {\n isActive: boolean\n isOpen: boolean\n stateKey: string\n linkClass?: string[]\n ariaCurrent?: string\n}\n\nconst navItemTemplate = html`<li class=\"nav__item\">\n <details\n r-if=\"item.children && item.children.length > 0\"\n class=\"nav__group\"\n :open=\"item.isOpen\"\n :data-nav-group-key=\"item.stateKey\"\n :data-nav-default-open=\"item.isOpen ? 'true' : undefined\"\n >\n <summary class=\"nav__summary w-full\">\n <BtnLink\n variant=\"none\"\n :icon=\"item.icon\"\n :tone=\"item.tone\"\n :class=\"item.linkClass\"\n :aria-current=\"item.ariaCurrent\"\n >\n {{ item.title }}\n </BtnLink>\n <Icon\n class=\"nav__chevron fs-xxs\"\n name=\"tabler:chevron-down\"\n aria-hidden=\"true\"/>\n </summary>\n <NavList :items=\"item.children\" :tone=\"item.tone\"></NavList>\n </details>\n <BtnLink\n r-else\n variant=\"none\"\n :icon=\"item.icon\"\n :href=\"item.url\"\n :tone=\"item.tone\"\n :class=\"item.linkClass\"\n :aria-current=\"item.ariaCurrent\"\n >\n {{ item.title }}\n </BtnLink>\n</li>`\n\nconst navListTemplate = html`<ul class=\"nav__list\">\n <NavItem r-for=\"item in items\"/>\n</ul>`\n\nconst DEFAULT_NAV_MENU_TONE: SemanticTone = 'neutral'\nconst DEFAULT_NAV_MENU_VARIANT: ComponentVariant = 'flat'\nconst DEFAULT_NAV_MENU_VARIANT_MODE: ComponentVariantMode = 'stateless'\n\nconst navMenuTemplate = html`<nav\n class=\"nav__menu\"\n :class=\"classes\"\n :data-nav-root=\"navRoot\"\n aria-label=\"Site navigation\"\n>\n <div class=\"nav__header-row\">\n <div class=\"nav__header\">Navigation</div>\n <SignIn\n r-if=\"resolvedSignInEnabled\"\n class=\"nav__account\"\n :enabled=\"resolvedSignInEnabled\"\n :signedIn=\"signInSignedIn\"\n :avatarSrc=\"signInAvatarSrc\"\n :avatarAlt=\"signInAvatarAlt\"/>\n <button\n class=\"nav__panel-toggle tone-fill-surface-all tone-text-surface-all tone-border-surface-all\"\n type=\"button\"\n title=\"Navigation\"\n aria-label=\"Toggle navigation panel\"\n data-nav-menu-toggle\n >\n <span class=\"nav__panel-toggle-icon\" aria-hidden=\"true\">\n <Icon name=\"iconoir:pin\"/>\n </span>\n <span class=\"nav__panel-toggle-label\">navigation</span>\n </button>\n <button\n class=\"nav__collapse-toggle tone-text-surface-all tone-fill-surface-hover tone-fill-surface-active tone-border-surface-hover tone-border-surface-active opacity-25 opacity-1-hover\"\n type=\"button\"\n title=\"Collapse navigation\"\n aria-label=\"Collapse navigation\"\n data-nav-menu-collapse\n >\n <span\n class=\"nav__collapse-toggle-icon nav__collapse-toggle-icon--collapse p-1\"\n aria-hidden=\"true\"\n >\n <Icon name=\"iconoir:pin-slash\"/>\n </span>\n <span\n class=\"nav__collapse-toggle-icon nav__collapse-toggle-icon--open p-1\"\n aria-hidden=\"true\"\n >\n <Icon name=\"iconoir:pin\"/>\n </span>\n </button>\n </div>\n <NavList :items=\"navItems\"></NavList>\n <SearchBox r-if=\"searchEnabled\" class=\"nav__search mt-1\"/>\n <script>\n window.tsSsgNavMenu?.hydrate(document.currentScript?.parentElement)\n </script>\n</nav>`\n\nfunction resolveNavItems(context?: PageContext): NavItem[] {\n const items = context?.navigation?.items ?? []\n if (items.length > 0) return items\n return context?.navigation?.global ?? []\n}\n\nfunction resolveCurrentPath(\n currentUrl: string | undefined,\n context?: PageContext,\n): string | undefined {\n const fromProp = urlNormalizer.normalizeInternalPath(currentUrl)\n if (fromProp) return fromProp\n const fromContext = urlNormalizer.normalizeInternalPath(\n context?.pageInfo?.urlPath,\n )\n if (fromContext) return fromContext\n if (typeof window !== 'undefined' && window.location?.pathname) {\n return urlNormalizer.normalizeInternalPath(window.location.pathname)\n }\n return undefined\n}\n\nfunction buildNavState(\n items: NavItem[],\n currentPath: string | undefined,\n parentKey = '',\n): NavItemState[] {\n return unref(items).map((item) => {\n const stateKey = resolveNavItemStateKey(item, parentKey)\n const childStates = item.children\n ? buildNavState(item.children, currentPath, stateKey)\n : []\n const itemPath = urlNormalizer.normalizeInternalPath(item.url)\n const isActive = Boolean(\n itemPath && currentPath && itemPath === currentPath,\n )\n const hasActiveChild = childStates.some(\n (child) => child.isActive || child.isOpen,\n )\n return {\n ...item,\n tone: isActive ? 'accent' : 'neutral',\n ...(childStates.length > 0 ? { children: childStates } : {}),\n isActive,\n isOpen: isActive || hasActiveChild,\n stateKey,\n linkClass: [\n 'fs-body ws-normal justify-start w-full tone-fill-surface-hover tone-fill-surface-active rounded-sm',\n isActive ? 'active tone-text-surface-active' : 'tone-text',\n ],\n ariaCurrent: isActive ? 'page' : undefined,\n }\n })\n}\n\nfunction resolveNavItemStateKey(item: NavItem, parentKey: string) {\n const segment = normalizeNavStateKeyPart(item.id ?? item.url ?? item.title)\n return parentKey ? `${parentKey}/${segment}` : segment\n}\n\nfunction normalizeNavStateKeyPart(value: string) {\n const normalized = value\n .trim()\n .replaceAll('\\\\', '/')\n .replace(/^\\/+|\\/+$/g, '')\n return normalized || 'item'\n}\n\nfunction defineNavItemComponent() {\n return defineComponent<{ item: NavItemState }>(navItemTemplate, {})\n}\n\nfunction defineNavListComponent() {\n return defineComponent<NavList>(navListTemplate, {\n props: ['items', 'tone'],\n context: (head) => ({\n ...head.props,\n items: head.props.items,\n tone: head.props.tone,\n }),\n })\n}\n\nfunction defineNavMenuComponent() {\n return defineComponent<NavMenu>(navMenuTemplate, {\n props: [\n 'items',\n 'currentUrl',\n 'search',\n 'signInEnabled',\n 'tone',\n 'variant',\n 'variantMode',\n 'signInSignedIn',\n 'signInAvatarSrc',\n 'signInAvatarAlt',\n ],\n context: (head) => {\n const context = tryResolvePageContext(head)\n const props = head.props\n return {\n ...props,\n classes: computed(() =>\n resolveComponentClasses(\n { ...props, tone: unref(props.tone) || DEFAULT_NAV_MENU_TONE },\n {\n defaultVariant: DEFAULT_NAV_MENU_VARIANT,\n defaultVariantMode: DEFAULT_NAV_MENU_VARIANT_MODE,\n },\n ),\n ),\n searchEnabled: computed(\n () => unref(props.search) ?? context?.site.pagefind?.enabled === true,\n ),\n resolvedSignInEnabled: computed(\n () =>\n unref(props.signInEnabled) ?? context?.site.auth?.enabled === true,\n ),\n navRoot: normalizeNavStateKeyPart(context?.navigation?.root ?? ''),\n navItems: computed(() =>\n buildNavState(\n unref(props.items) ?? resolveNavItems(context),\n resolveCurrentPath(unref(props.currentUrl), context),\n ),\n ),\n }\n },\n })\n}\n\nexport function defineNavigationComponents() {\n const navItem = defineNavItemComponent()\n const navList = defineNavListComponent()\n const navMenu = defineNavMenuComponent()\n return {\n navItem,\n navList,\n navMenu,\n }\n}\n","import type {\n PageContext,\n PageNavigationLink,\n PageNavigationLinks,\n} from '@purestack/ts-common'\nimport { resolvePageContext } from '@purestack/ts-common'\nimport { defineComponent, html } from 'regor'\n\nexport interface PageLinks extends PageNavigationLinks {\n hasLinks?: boolean\n}\n\nconst pageLinksTemplate = html`<Grid\n r-if=\"hasLinks\"\n container=\"nav\"\n columns=\"2\"\n class=\"pt-4 bt-1 b-subtle\"\n aria-label=\"Adjacent pages\"\n>\n <Flex class=\"min-w-0\" justify=\"start\">\n <BtnLink\n r-if=\"previous\"\n :href=\"previous.url\"\n tone=\"neutral\"\n variant=\"outline\"\n size=\"sm\"\n icon=\"iconoir:nav-arrow-left\"\n iconPosition=\"start\"\n rel=\"prev\"\n class=\"w-full ws-normal text-start min-w-0 justify-start\"\n :ariaLabel=\"'Previous: ' + previous.title\"\n >\n <span class=\"d-inline-flex flex-column align-flex-start min-w-0\">\n <span class=\"text-eyebrow fs-xxxs\">Previous</span>\n <span class=\"min-w-0 lh-2\">{{ previous.title }}</span>\n </span>\n </BtnLink>\n </Flex>\n <Flex class=\"min-w-0\" justify=\"start\" justifySm=\"end\">\n <BtnLink\n r-if=\"next\"\n :href=\"next.url\"\n tone=\"neutral\"\n variant=\"outline\"\n size=\"sm\"\n icon=\"iconoir:nav-arrow-right\"\n iconPosition=\"end\"\n rel=\"next\"\n class=\"w-full ws-normal text-end min-w-0 justify-end\"\n :ariaLabel=\"'Next: ' + next.title\"\n >\n <span class=\"d-inline-flex flex-column align-flex-end min-w-0\">\n <span class=\"text-eyebrow fs-xxxs\">Next</span>\n <span class=\"min-w-0 lh-2\">{{ next.title }}</span>\n </span>\n </BtnLink>\n </Flex>\n</Grid>`\n\nfunction resolvePageLinks(\n props: PageLinks,\n context: PageContext | undefined,\n): PageLinks {\n const previous = props.previous ?? context?.navigation?.pageLinks?.previous\n const next = props.next ?? context?.navigation?.pageLinks?.next\n const resolvedPrevious = resolvePageLink(previous)\n const resolvedNext = resolvePageLink(next)\n return {\n previous: resolvedPrevious,\n next: resolvedNext,\n hasLinks: Boolean(resolvedPrevious || resolvedNext),\n }\n}\n\nfunction resolvePageLink(link: PageNavigationLink | undefined) {\n if (!link?.url || !link.title) return undefined\n return link\n}\n\nfunction definePageLinksComponent() {\n return defineComponent<PageLinks>(pageLinksTemplate, {\n props: ['previous', 'next'],\n context: (head) => resolvePageLinks(head.props, resolvePageContext(head)),\n })\n}\n\nexport function definePageLinksComponents() {\n const pageLinks = definePageLinksComponent()\n return { pageLinks }\n}\n","import { resolvePageContext } from '@purestack/ts-common'\nimport {\n dirnamePosix,\n joinPosix,\n normalizePosixPath,\n toOutputAssetRelPath,\n toPosixPath,\n urlNormalizer,\n} from '@purestack/ts-util'\nimport { type ComponentHead, defineComponent, flatten, html } from 'regor'\n\nexport interface PageScript {\n teleport?: string\n src?: string\n sourceRelPath?: string\n type?: string\n async?: unknown\n defer?: unknown\n integrity?: string\n nonce?: string\n crossOrigin?: string\n referrerPolicy?: string\n noModule?: unknown\n}\n\nexport interface RegorApp {\n src?: string\n sourceRelPath?: string\n}\n\nconst pageScriptTemplate = html`<script\n :r-teleport=\"teleport\"\n :src=\"src\"\n :type=\"type\"\n :async=\"async\"\n :defer=\"defer\"\n :integrity=\"integrity\"\n :nonce=\"nonce\"\n :crossorigin=\"crossOrigin\"\n :referrerpolicy=\"referrerPolicy\"\n :nomodule=\"noModule\"\n></script>`\n\nconst regorAppTemplate = html`<App><PageScript :src=\"src\" :sourceRelPath=\"sourceRelPath\"/></App>`\n\nfunction definePageScriptComponent() {\n return defineComponent<PageScript>(pageScriptTemplate, {\n props: [\n 'teleport',\n 'src',\n 'sourceRelPath',\n 'type',\n 'async',\n 'defer',\n 'integrity',\n 'nonce',\n 'crossOrigin',\n 'referrerPolicy',\n 'noModule',\n ],\n context: (head) => resolvePageScript(head),\n })\n}\n\nfunction defineRegorAppComponent() {\n return defineComponent<RegorApp>(regorAppTemplate, {\n props: ['src', 'sourceRelPath'],\n context: (head) => ({\n src: head.props.src,\n sourceRelPath: head.props.sourceRelPath,\n }),\n })\n}\n\nexport function defineScriptComponents() {\n return {\n pageScript: definePageScriptComponent(),\n regorApp: defineRegorAppComponent(),\n }\n}\n\nfunction resolvePageScript(head: ComponentHead<PageScript>): PageScript {\n const props = flatten(head.props)\n const pageContext = resolvePageContext(head)\n const ownerRelPath =\n toOptionalString(props.sourceRelPath) ?? pageContext.pageInfo.relPath\n const src = resolveScriptSrc(\n props.src,\n ownerRelPath,\n (sourceRelPath) => {\n pageContext.recordScriptEntrypoint(sourceRelPath)\n },\n pageContext.resolveScriptPublicPath,\n )\n return {\n ...props,\n src,\n type: toOptionalString(props.type) ?? 'module',\n teleport: toOptionalString(props.teleport) ?? 'body',\n }\n}\n\nfunction resolveScriptSrc(\n src: unknown,\n pageRelPath: string,\n onSourceResolved?: (sourceRelPath: string) => void,\n resolveScriptPublicPath?: (sourceRelPath: string) => string,\n) {\n const normalized = toOptionalString(src)\n if (!normalized) {\n throw new Error('PageScript requires a non-empty \"src\" prop.')\n }\n if (isExternalSrc(normalized)) return normalized\n const { base, suffix } = urlNormalizer.splitSuffix(normalized)\n const sourceRelPath = resolveSourceRelPath(base, pageRelPath)\n onSourceResolved?.(sourceRelPath)\n const publicPath =\n resolveScriptPublicPath?.(sourceRelPath) ??\n `/${toOutputAssetRelPath(sourceRelPath)}`\n return `${publicPath}${suffix}`\n}\n\nfunction resolveSourceRelPath(value: string, pageRelPath: string) {\n if (value.startsWith('/')) {\n return trimLeadingSlashes(value)\n }\n const sourceDir = dirnamePosix(toPosixPath(pageRelPath))\n const normalizedSourceDir = sourceDir === '.' ? '' : sourceDir\n const resolved = normalizePosixPath(joinPosix(normalizedSourceDir, value))\n if (resolved === '..' || resolved.startsWith('../')) {\n throw new Error(`PageScript src resolves outside content root: \"${value}\"`)\n }\n return resolved\n}\n\nfunction isExternalSrc(value: string) {\n return (\n value.startsWith('//') ||\n value.startsWith('http://') ||\n value.startsWith('https://')\n )\n}\n\nfunction trimLeadingSlashes(value: string) {\n return value.replace(/^\\/+/, '')\n}\n\nfunction toOptionalString(value: unknown) {\n if (value === null || value === undefined) return undefined\n const trimmed = String(value).trim()\n return trimmed.length > 0 ? trimmed : undefined\n}\n","import type { PageContext, PageOutlineItem } from '@purestack/ts-common'\nimport { resolvePageContext } from '@purestack/ts-common'\nimport type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type RefOrValue,\n type SRef,\n unref,\n} from 'regor'\nimport {\n type ComponentVariant,\n type ComponentVariantMode,\n resolveComponentClasses,\n} from '../componentVariant'\n\nexport interface PageToc {\n outline?: PageOutlineItem[] | SRef<PageOutlineItem[]>\n title?: string\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n classes?: ComputedRef<string>\n}\n\nconst DEFAULT_PAGE_TOC_VARIANT: ComponentVariant = 'flat'\nconst DEFAULT_PAGE_TOC_VARIANT_MODE: ComponentVariantMode = 'stateless'\n\nexport interface PageTocItem extends PageOutlineItem {\n href: string\n children?: PageTocItem[]\n}\n\nconst pageTocTemplate = html`<nav class=\"page-toc\" :class=\"classes\" aria-label=\"On this page\">\n <button\n class=\"page-toc__panel-toggle tone-fill-button-all tone-text-button-all tone-border-button-all\"\n type=\"button\"\n aria-controls=\"doc-toc\"\n aria-expanded=\"false\"\n >\n <span class=\"page-toc__panel-toggle-label\">on this page</span>\n </button>\n <div class=\"page-toc__header-row\">\n <div class=\"page-toc__header\">{{ title }}</div>\n <button\n class=\"page-toc__restore-toggle tone-text-button-all tone-fill-button-hover tone-fill-button-active tone-border-button-hover tone-border-button-active opacity-25 opacity-1-hover\"\n type=\"button\"\n title=\"Collapse table of contents\"\n aria-label=\"Collapse table of contents\"\n data-page-toc-restore\n >\n <span\n class=\"page-toc__header-toggle-icon page-toc__header-toggle-icon--collapse p-1\"\n >\n <Icon name=\"iconoir:pin-slash\"/>\n </span>\n <span\n class=\"page-toc__header-toggle-icon page-toc__header-toggle-icon--restore p-1\"\n >\n <Icon name=\"iconoir:pin\"/>\n </span>\n </button>\n </div>\n <ul class=\"page-toc__list\" r-if=\"items.length > 0\">\n <li r-for=\"item in items\" class=\"page-toc__item page-toc__item--h2\">\n <BtnLink\n variant=\"link\"\n :href=\"item.href\"\n class=\"page-toc__link justify-start w-full ws-normal fw-400 fs-sm tone-fill-button-active tone-text-button-active py-1 pl-2\"\n >\n {{ item.title }}\n </BtnLink>\n <ul\n r-if=\"item.children && item.children.length > 0\"\n class=\"page-toc__list page-toc__list--nested\"\n >\n <li\n r-for=\"child in item.children\"\n class=\"page-toc__item page-toc__item--h3\"\n >\n <BtnLink\n variant=\"link\"\n :href=\"child.href\"\n class=\"page-toc__link page-toc__link--sub justify-start w-full ws-normal fw-200 fs-xs tone-fill-button-active tone-text-button-active py-1 pl-2\"\n >\n {{ child.title }}\n </BtnLink>\n </li>\n </ul>\n </li>\n </ul>\n <div class=\"page-toc__empty\" r-else>No sections yet.</div>\n <script>\n window.tsSsgPageToc?.hydrate(document.currentScript?.parentElement)\n </script>\n</nav>`\n\nfunction toPageTocItems(items: PageOutlineItem[]): PageTocItem[] {\n return items.map((item) => {\n const { children, ...rest } = item\n const mappedChildren = children ? toPageTocItems(children) : undefined\n return {\n ...rest,\n href: `#${item.id}`,\n ...(mappedChildren ? { children: mappedChildren } : {}),\n }\n })\n}\n\nfunction omitSingleDocumentHeading(items: PageOutlineItem[]) {\n if (items.length !== 1) return items\n const [item] = items\n if (item?.depth !== 1) return items\n return item.children ?? []\n}\n\nfunction resolveItems(props: PageToc, context: PageContext | undefined) {\n const items = unref(props.outline) ?? context?.outline ?? []\n return toPageTocItems(omitSingleDocumentHeading(items))\n}\n\nfunction resolveTitle(props: PageToc) {\n return typeof props.title === 'string' && props.title.trim().length > 0\n ? props.title.trim()\n : 'On this page'\n}\n\nfunction definePageTocComponent() {\n return defineComponent<PageToc>(pageTocTemplate, {\n props: ['outline', 'title', 'tone', 'variant', 'variantMode'],\n context: (head) => {\n const context = resolvePageContext(head)\n return {\n title: resolveTitle(head.props),\n classes: computed(() =>\n resolveComponentClasses(head.props, {\n defaultVariant: DEFAULT_PAGE_TOC_VARIANT,\n defaultVariantMode: DEFAULT_PAGE_TOC_VARIANT_MODE,\n }),\n ),\n items: resolveItems(head.props, context),\n }\n },\n })\n}\n\nexport function definePageTocComponents() {\n const pageToc = definePageTocComponent()\n return { pageToc }\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type RefOrValue,\n} from 'regor'\nimport {\n type ComponentVariant,\n type ComponentVariantMode,\n resolveComponentClasses,\n} from '../componentVariant'\n\nexport interface Panel {\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n bodyClass?: RefOrValue<string>\n classes?: ComputedRef<string>\n}\n\nconst DEFAULT_PANEL_VARIANT: ComponentVariant = 'surface'\nconst DEFAULT_PANEL_VARIANT_MODE: ComponentVariantMode = 'stateless'\n\nconst panelTemplate = html`<section class=\"panel tone-text\" :class=\"classes\">\n <div class=\"panel__body\" :class=\"bodyClass\">\n <slot></slot>\n </div>\n</section>`\n\nfunction definePanelComponent() {\n return defineComponent<Panel>(panelTemplate, {\n props: ['tone', 'variant', 'variantMode', 'bodyClass'],\n context: (head) => resolvePanel(head.props),\n })\n}\n\nexport function definePanelComponents() {\n return {\n panel: definePanelComponent(),\n }\n}\n\nfunction resolvePanel(props: Panel): Panel {\n return {\n ...props,\n classes: computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: DEFAULT_PANEL_VARIANT,\n defaultVariantMode: DEFAULT_PANEL_VARIANT_MODE,\n }),\n ),\n }\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport { defineComponent, html, type RefOrValue } from 'regor'\nimport type {\n ComponentVariant,\n ComponentVariantMode,\n} from '../componentVariant'\n\nexport interface PricingTable {\n eyebrow?: RefOrValue<string>\n title?: RefOrValue<string>\n subtitle?: RefOrValue<string>\n footnote?: RefOrValue<string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n columns?: RefOrValue<number | string>\n columnsLg?: RefOrValue<number | string>\n columnsXl?: RefOrValue<number | string>\n}\n\nexport interface PricingPlan {\n title?: RefOrValue<string>\n summary?: RefOrValue<string>\n price?: RefOrValue<string>\n period?: RefOrValue<string>\n badge?: RefOrValue<string>\n note?: RefOrValue<string>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n icon?: RefOrValue<string>\n ctaLabel?: RefOrValue<string>\n ctaLink?: RefOrValue<string>\n tone?: RefOrValue<SemanticTone>\n}\n\nexport interface PricingFeature {\n icon?: RefOrValue<string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n}\n\nconst pricingTableTemplate = html`<Panel :tone=\"tone\" :variant=\"variant || 'none'\" :variantMode=\"variantMode\">\n <Flex direction=\"column\" align=\"start\">\n <SectionHeader\n r-if=\"eyebrow || title || subtitle || footnote\"\n :eyebrow=\"eyebrow\"\n :title=\"title\"\n :subtitle=\"subtitle\"\n :footnote=\"footnote\"\n titleTag=\"h2\"/>\n <Grid\n :columns=\"columns || 1\"\n :columnsLg=\"columnsLg || 2\"\n :columnsXl=\"columnsXl || 4\"\n alignItems=\"stretch\"\n justifyItems=\"center\"\n >\n <slot></slot>\n </Grid>\n </Flex>\n</Panel>`\n\nconst pricingPlanTemplate = html`<Panel :tone=\"tone\" :variant=\"variant || 'surface'\" :variantMode=\"variantMode\">\n <Flex direction=\"column\" align=\"start\">\n <Flex justify=\"between\" align=\"center\" r-if=\"icon || badge\">\n <IconFrame\n r-if=\"icon\"\n :name=\"icon\"\n :tone=\"tone\"\n variant=\"surface\"\n size=\"lg\"/>\n <Badge r-if=\"badge\" :tone=\"tone\">{{ badge }}</Badge>\n </Flex>\n <SectionHeader :title=\"title\" :subtitle=\"summary\" titleTag=\"h3\"/>\n <Flex align=\"baseline\" r-if=\"price\">\n <strong class=\"fs-h2\">{{ price }}</strong>\n <span r-if=\"period\">{{ period }}</span>\n </Flex>\n <BtnLink :href=\"ctaLink\" :tone=\"tone\" r-if=\"ctaLabel && ctaLink\">\n {{ ctaLabel }}\n </BtnLink>\n <Flex container=\"ul\" direction=\"column\" align=\"start\" class=\"m-0 p-0\">\n <slot></slot>\n </Flex>\n <small r-if=\"note\">{{ note }}</small>\n </Flex>\n</Panel>`\n\nconst pricingFeatureTemplate = html`<Flex container=\"li\" align=\"start\">\n <IconFrame\n :name=\"icon || 'iconoir:check'\"\n :tone=\"tone\"\n :variant=\"variant || 'surface'\"\n size=\"sm\"/>\n <slot></slot>\n</Flex>`\n\nfunction definePricingTableComponent() {\n return defineComponent<PricingTable>(pricingTableTemplate, {\n props: [\n 'eyebrow',\n 'title',\n 'subtitle',\n 'footnote',\n 'tone',\n 'variant',\n 'variantMode',\n 'columns',\n 'columnsLg',\n 'columnsXl',\n ],\n })\n}\n\nfunction definePricingPlanComponent() {\n return defineComponent<PricingPlan>(pricingPlanTemplate, {\n props: [\n 'title',\n 'summary',\n 'price',\n 'period',\n 'badge',\n 'note',\n 'variant',\n 'variantMode',\n 'icon',\n 'ctaLabel',\n 'ctaLink',\n 'tone',\n ],\n })\n}\n\nfunction definePricingFeatureComponent() {\n return defineComponent<PricingFeature>(pricingFeatureTemplate, {\n props: ['icon', 'tone', 'variant'],\n })\n}\n\nexport function definePricingComponents() {\n return {\n pricingTable: definePricingTableComponent(),\n pricingPlan: definePricingPlanComponent(),\n pricingFeature: definePricingFeatureComponent(),\n }\n}\n","import type { PageContext } from '@purestack/ts-common'\n\nimport { resolvePageContext } from '@purestack/ts-common'\nimport type { SemanticTone } from '@purestack/ts-style'\nimport { defineComponent, html, type RefOrValue } from 'regor'\nimport type { ComponentVariant } from '../componentVariant'\n\nexport interface SearchBox {\n placeholder?: RefOrValue<string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n}\n\nconst searchBoxTemplate = html`<div class=\"site-search\" data-pagefind-search>\n <FormInputField\n icon=\"tabler:search\"\n :tone=\"tone\"\n :variant=\"variant\"\n type=\"search\"\n name=\"q\"\n :placeholder=\"placeholder\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n data-pagefind-input\n aria-label=\"Search site content\"/>\n <div\n class=\"site-search__results doc-content\"\n data-pagefind-results\n hidden\n ></div>\n</div>`\n\nfunction defineSearchBoxComponent() {\n return defineComponent<SearchBox>(searchBoxTemplate, {\n props: ['tone', 'variant', 'placeholder'],\n context: (head) => ({\n tone: head.props.tone,\n variant: head.props.variant,\n placeholder: resolveSearchPlaceholder(resolvePageContext(head)),\n }),\n })\n}\n\nexport function defineSearchComponents() {\n return { searchBox: defineSearchBoxComponent() }\n}\n\nfunction resolveSearchPlaceholder(context: PageContext): string {\n const title = context?.site?.siteTitle\n if (typeof title !== 'string') return 'Search'\n const trimmed = title.trim()\n if (trimmed.length === 0) return 'Search'\n return `Search ${trimmed}`\n}\n","import {\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type RefOrValue,\n unref,\n} from 'regor'\n\nexport interface SectionHeader {\n eyebrow?: RefOrValue<string>\n title?: RefOrValue<string>\n subtitle?: RefOrValue<string>\n footnote?: RefOrValue<string>\n titleTag?: RefOrValue<string>\n titleId?: RefOrValue<string>\n eyebrowClass?: RefOrValue<string>\n titleClass?: RefOrValue<string>\n subtitleClass?: RefOrValue<string>\n footnoteClass?: RefOrValue<string>\n resolvedTitleTag?: ComputedRef<string>\n}\n\nconst sectionHeaderTemplate = html`<div class=\"section-header\">\n <div class=\"text-eyebrow\" :class=\"eyebrowClass\" r-if=\"eyebrow\">\n {{ eyebrow }}\n </div>\n <div\n :is=\"resolvedTitleTag\"\n :id=\"titleId\"\n class=\"text-title\"\n :class=\"titleClass\"\n r-if=\"title\"\n >\n {{ title }}\n </div>\n <p class=\"text-tagline\" :class=\"subtitleClass\" r-if=\"subtitle\">\n {{ subtitle }}\n </p>\n <p class=\"prose-meta\" :class=\"footnoteClass\" r-if=\"footnote\">\n {{ footnote }}\n </p>\n <slot></slot>\n</div>`\n\nfunction defineSectionHeaderComponent() {\n return defineComponent<SectionHeader>(sectionHeaderTemplate, {\n props: [\n 'eyebrow',\n 'title',\n 'subtitle',\n 'footnote',\n 'titleTag',\n 'titleId',\n 'eyebrowClass',\n 'titleClass',\n 'subtitleClass',\n 'footnoteClass',\n ],\n context: (head) => resolveSectionHeader(head.props),\n })\n}\n\nexport function defineSectionHeaderComponents() {\n return {\n sectionHeader: defineSectionHeaderComponent(),\n }\n}\n\nfunction resolveSectionHeader(props: SectionHeader): SectionHeader {\n return {\n ...props,\n resolvedTitleTag: computed(() => resolveTitleTag(unref(props.titleTag))),\n }\n}\n\nfunction resolveTitleTag(value: unknown): string {\n const normalized = resolveString(value).toLowerCase()\n if (\n normalized === 'h1' ||\n normalized === 'h2' ||\n normalized === 'h3' ||\n normalized === 'h4' ||\n normalized === 'h5' ||\n normalized === 'h6' ||\n normalized === 'p' ||\n normalized === 'div' ||\n normalized === 'span'\n ) {\n return normalized\n }\n return 'h2'\n}\n\nfunction resolveString(value: unknown) {\n return typeof value === 'string' && value.trim().length > 0\n ? value.trim()\n : ''\n}\n","import { tryResolvePageContext } from '@purestack/ts-common'\nimport type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type RefOrValue,\n unref,\n} from 'regor'\nimport type {\n ComponentVariant,\n ComponentVariantMode,\n} from '../componentVariant'\n\nexport interface SignIn {\n avatarSrc?: RefOrValue<string>\n avatarAlt?: RefOrValue<string>\n icon?: RefOrValue<string>\n accountIcon?: RefOrValue<string>\n label?: RefOrValue<string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n enabled?: RefOrValue<boolean>\n signUp?: RefOrValue<boolean>\n signedIn?: RefOrValue<boolean>\n authEnabled?: ComputedRef<boolean>\n signUpEnabled?: ComputedRef<boolean>\n resolvedIcon?: ComputedRef<string>\n resolvedAccountIcon?: ComputedRef<string>\n resolvedLabel?: ComputedRef<string>\n resolvedAvatarAlt?: ComputedRef<string>\n}\n\nconst DEFAULT_SIGN_IN_ICON = 'lucide:log-in'\nconst DEFAULT_ACCOUNT_ICON = 'tabler:user-filled'\nconst DEFAULT_SIGN_IN_LABEL = 'Account'\n\nconst signInTemplate = html`<details\n r-if=\"authEnabled\"\n class=\"sign-in position-relative\"\n :data-signed-in=\"signedIn\"\n data-menu-runtime\n data-menu-align=\"end\"\n>\n <summary\n class=\"sign-in__trigger topbar__icon rounded-pill cursor-pointer overflow-hidden\"\n aria-label=\"Account menu\"\n >\n <span\n class=\"sign-in__signed-out-view tone-fill-surface-hover tone-fill-surface-active tone-border-surface-hover tone-border-surface-active\"\n aria-hidden=\"true\"\n >\n <Icon :name=\"resolvedIcon\"/>\n </span>\n <span\n class=\"sign-in__signed-in-view tone-fill-surface-hover tone-fill-surface-active tone-border-surface-hover tone-border-surface-active\"\n aria-hidden=\"true\"\n >\n <slot name=\"avatar\">\n <img\n r-if=\"avatarSrc\"\n class=\"sign-in__avatar w-full h-full rounded-pill\"\n :src=\"avatarSrc\"\n :alt=\"resolvedAvatarAlt\"/>\n <Icon r-else :name=\"resolvedAccountIcon\"/>\n </slot>\n </span>\n <span class=\"hidden\">{{ resolvedLabel }}</span>\n </summary>\n <Panel\n class=\"sign-in__panel p-1 mt-1\"\n :tone=\"tone\"\n :variant=\"variant || 'surfaceAlt'\"\n :variantMode=\"variantMode\"\n data-menu-panel\n >\n <slot>\n <Flex\n container=\"nav\"\n direction=\"column\"\n align=\"stretch\"\n class=\"gap-1\"\n aria-label=\"Account\"\n >\n <BtnLink\n class=\"sign-in__signed-out-action justify-start w-full text-start\"\n href=\"/signin/\"\n :tone=\"tone\"\n variant=\"subtleBtn\"\n icon=\"lucide:log-in\"\n >\n Sign in\n </BtnLink>\n <BtnLink\n r-if=\"signUpEnabled\"\n class=\"sign-in__signed-out-action justify-start w-full text-start\"\n href=\"/signup/\"\n :tone=\"tone\"\n variant=\"subtleBtn\"\n icon=\"lucide:user-plus\"\n >\n Sign up\n </BtnLink>\n <BtnLink\n class=\"sign-in__signed-in-action justify-start w-full text-start\"\n href=\"/account/\"\n :tone=\"tone\"\n variant=\"subtleBtn\"\n icon=\"lucide:user-round\"\n >\n Account\n </BtnLink>\n <BtnLink\n class=\"sign-in__signed-in-action justify-start w-full text-start\"\n href=\"/account/settings/\"\n :tone=\"tone\"\n variant=\"subtleBtn\"\n icon=\"lucide:settings\"\n >\n Settings\n </BtnLink>\n <BtnLink\n class=\"sign-in__signed-in-action justify-start w-full text-start\"\n href=\"/signout/\"\n :tone=\"tone\"\n variant=\"subtleBtn\"\n icon=\"lucide:log-out\"\n >\n Sign out\n </BtnLink>\n </Flex>\n </slot>\n </Panel>\n</details>`\n\nfunction defineSignInComponent() {\n return defineComponent<SignIn>(signInTemplate, {\n props: [\n 'enabled',\n 'signUp',\n 'signedIn',\n 'avatarSrc',\n 'avatarAlt',\n 'icon',\n 'accountIcon',\n 'label',\n 'tone',\n 'variant',\n 'variantMode',\n ],\n context: (head) => resolveSignIn(head.props, head),\n })\n}\n\nexport function defineSignInComponents() {\n return { signIn: defineSignInComponent() }\n}\n\nfunction resolveSignIn(props: SignIn, head: unknown): SignIn {\n const auth = tryResolvePageContext(head)?.site?.auth\n return {\n ...props,\n authEnabled: computed(() => unref(props.enabled) ?? auth?.enabled === true),\n signUpEnabled: computed(() => unref(props.signUp) ?? auth?.signUp === true),\n resolvedIcon: computed(() => unref(props.icon) || DEFAULT_SIGN_IN_ICON),\n resolvedAccountIcon: computed(\n () => unref(props.accountIcon) || DEFAULT_ACCOUNT_ICON,\n ),\n resolvedLabel: computed(() => unref(props.label) || DEFAULT_SIGN_IN_LABEL),\n resolvedAvatarAlt: computed(() => unref(props.avatarAlt) || ''),\n }\n}\n","import { tryResolvePageContext } from '@purestack/ts-common'\nimport type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComponentHead,\n type ComputedRef,\n computed,\n defineComponent,\n html,\n isRef,\n type RefOrValue,\n ref,\n unref,\n} from 'regor'\nimport { createAutoId } from '../autoId'\nimport {\n type ComponentVariant,\n type ComponentVariantMode,\n resolveComponentClasses,\n} from '../componentVariant'\n\nconst defaultGroup = 'tabs-default'\nconst DEFAULT_TABS_VARIANT_MODE: ComponentVariantMode = 'stateless'\nconst resolveTabGroup = createAutoId(defaultGroup)\nconst resolveTabId = createAutoId('tab')\n\nexport class Tabs {\n group: string = defaultGroup\n ariaLabel?: RefOrValue<string>\n selectedTab?: RefOrValue<string>\n mobileSelect?: RefOrValue<boolean>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n tabVariant?: RefOrValue<ComponentVariant>\n classes?: ComputedRef<string>\n}\n\nexport interface TabPane {\n id?: string\n label?: RefOrValue<string>\n icon?: RefOrValue<string>\n disabled?: RefOrValue<boolean>\n group?: string\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n variantMode?: RefOrValue<ComponentVariantMode>\n tabVariant?: RefOrValue<ComponentVariant>\n classes?: ComputedRef<string>\n tabClasses?: ComputedRef<string>\n}\n\nconst tabsTemplate = html`<section class=\"tabs\" :class=\"classes\" :data-mobile-select=\"mobileSelect\">\n <slot name=\"header\"></slot>\n <div class=\"tabs__list\" role=\"tablist\" :aria-label=\"ariaLabel || 'Tabs'\">\n <slot></slot>\n </div>\n</section>`\n\nconst tabPaneTemplate = html`<div class=\"tabs__item\">\n <input\n class=\"tabs__control\"\n type=\"radio\"\n :name=\"group\"\n :id=\"id\"\n :value=\"id\"\n r-model=\"selectedTab\"\n :disabled=\"disabled\"/>\n <label\n class=\"tabs__tab\"\n :class=\"tabClasses\"\n role=\"tab\"\n :id=\"id+'-label'\"\n :for=\"id\"\n :aria-controls=\"id+'-panel'\"\n :aria-selected=\"selectedTab === id\"\n :aria-disabled=\"disabled\"\n >\n <Icon class=\"tabs__tab-icon\" :name=\"icon\"/>\n <span class=\"tabs__tab-label\">{{ label || id }}</span>\n </label>\n <section\n class=\"tabs__panel\"\n :class=\"classes\"\n role=\"tabpanel\"\n :id=\"id+'-panel'\"\n :aria-labelledby=\"id+'-label'\"\n >\n <div class=\"tabs__panel-body\" :class=\"class\">\n <slot></slot>\n </div>\n </section>\n</div>`\n\nfunction defineTabsComponent() {\n return defineComponent<Tabs>(tabsTemplate, {\n props: [\n 'ariaLabel',\n 'group',\n 'selectedTab',\n 'mobileSelect',\n 'tone',\n 'variant',\n 'variantMode',\n 'tabVariant',\n ],\n context: (head) => {\n markTabsRuntimeEmbed(head)\n return resolveTabs(head.props)\n },\n })\n}\n\nfunction defineTabPaneComponent() {\n return defineComponent<TabPane>(tabPaneTemplate, {\n props: [\n 'id',\n 'label',\n 'icon',\n 'disabled',\n 'group',\n 'tone',\n 'variant',\n 'variantMode',\n 'tabVariant',\n ],\n context: (head) => resolveTabPane(head),\n })\n}\n\nexport function defineTabsComponents() {\n return {\n tabs: defineTabsComponent(),\n tabPane: defineTabPaneComponent(),\n }\n}\n\nfunction resolveTabs(props: Tabs): Tabs {\n const group = resolveTabGroup(unref(props.group))\n const tabs = new Tabs()\n const selectedTab = ensureSelectedTabIsRef(props.selectedTab)\n return Object.assign(tabs, {\n ...props,\n group,\n selectedTab,\n classes: computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: 'surface',\n defaultVariantMode: DEFAULT_TABS_VARIANT_MODE,\n }),\n ),\n })\n}\n\nfunction ensureSelectedTabIsRef(selectedTab?: RefOrValue<string>) {\n return isRef(selectedTab) ? selectedTab : ref(selectedTab)\n}\n\nfunction resolveTabPane(head: ComponentHead<TabPane>): TabPane {\n const fromParent = head.findContext(Tabs)\n const group = head.props.group || fromParent?.group || defaultGroup\n const id = resolveTabId(unref(head.props.id))\n const tone = head.props.tone || fromParent?.tone\n const variantMode = head.props.variantMode || fromParent?.variantMode\n const tabVariant = head.props.tabVariant || fromParent?.tabVariant\n return {\n ...head.props,\n id,\n group,\n tone,\n variantMode,\n tabVariant,\n classes: computed(() =>\n resolveComponentClasses(\n { tone, variant: head.props.variant, variantMode },\n {\n defaultVariant: 'none',\n defaultVariantMode: DEFAULT_TABS_VARIANT_MODE,\n },\n ),\n ),\n tabClasses: computed(() =>\n resolveComponentClasses(\n { tone, variant: tabVariant },\n {\n defaultVariant: 'underline',\n classes: [unref(head.props.disabled) ? 'tabs__tab--disabled' : ''],\n },\n ),\n ),\n }\n}\n\nfunction markTabsRuntimeEmbed(head: ComponentHead<Tabs>) {\n tryResolvePageContext(head)?.recordRuntimeEmbed('tabs', 'head')\n}\n","import { defineComponent, html } from 'regor'\n\nexport interface ThemeToggle {}\n\n/**\n * One icon button that flips between the light and dark themes. The theme\n * stylesheets decide which glyph shows, so the markup carries no state; the\n * theme runtime binds every [data-theme-toggle] and keeps aria-pressed in sync.\n */\nconst themeToggleTemplate = html`<button\n class=\"theme-toggle\"\n type=\"button\"\n aria-label=\"Dark theme\"\n aria-pressed=\"false\"\n data-theme-toggle\n>\n <Icon\n class=\"theme-toggle__glyph theme-toggle__glyph--light\"\n name=\"lucide:sun\"\n aria-hidden=\"true\"/>\n <Icon\n class=\"theme-toggle__glyph theme-toggle__glyph--dark\"\n name=\"lucide:moon\"\n aria-hidden=\"true\"/>\n</button>`\n\nfunction defineThemeToggleComponent() {\n return defineComponent<ThemeToggle>(themeToggleTemplate)\n}\n\nexport function defineThemeToggleComponents() {\n return { themeToggle: defineThemeToggleComponent() }\n}\n","import { defineComponent, html, type SRef } from 'regor'\nimport type { ToastItem, ToastStore } from './toastStore'\n\nexport interface ToastHost {\n items: SRef<ToastItem[]>\n dismiss: ToastStore['dismiss']\n}\n\nexport const toastHostTemplate = html`<Flex\n direction=\"column\"\n align=\"center\"\n r-if=\"items.length > 0\"\n style=\"position: fixed; top: 1rem; left: 50%; z-index: 1200; max-width: calc(100vw - 2rem); transform: translateX(-50%); pointer-events: none;\"\n>\n <Panel\n class=\"py-0\"\n r-for=\"toast in items\"\n :tone=\"toast.tone\"\n variant=\"surface\"\n style=\"max-width: calc(100vw - 2rem); pointer-events: auto;\"\n >\n <Flex align=\"center\" justify=\"between\" wrap=\"true\">\n <span>{{ toast.message }}</span>\n <Btn\n size=\"sm\"\n variant=\"subtleBtn\"\n icon=\"iconoir:xmark\"\n @click=\"dismiss(toast.id)\"\n >\n Dismiss\n </Btn>\n </Flex>\n </Panel>\n</Flex>`\n\nexport function defineToastComponents() {\n return {\n toastHost: defineComponent<ToastHost>(toastHostTemplate, {\n props: ['items', 'dismiss'],\n }),\n }\n}\n","import type { PageContext, SiteLogoConfig } from '@purestack/ts-common'\n\nimport { resolvePageContext } from '@purestack/ts-common'\nimport type { SemanticTone } from '@purestack/ts-style'\nimport {\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type RefOrValue,\n unref,\n} from 'regor'\nimport {\n type ComponentVariant,\n type ComponentVariantMode,\n resolveComponentClasses,\n} from '../componentVariant'\n\nexport interface TopBar {\n siteLogo: SiteLogoConfig\n logoComponent?: RefOrValue<string>\n resolvedLogoComponent?: ComputedRef<string>\n tone?: RefOrValue<SemanticTone>\n variant?: RefOrValue<ComponentVariant>\n signInSignedIn?: RefOrValue<boolean>\n signInAvatarSrc?: RefOrValue<string>\n signInAvatarAlt?: RefOrValue<string>\n classes?: ComputedRef<string>\n search?: RefOrValue<boolean>\n searchEnabled?: ComputedRef<boolean>\n signInEnabled?: RefOrValue<boolean>\n resolvedSignInEnabled?: ComputedRef<boolean>\n}\n\nconst DEFAULT_TOP_BAR_VARIANT: ComponentVariant = 'surfaceAlt'\nconst DEFAULT_TOP_BAR_VARIANT_MODE: ComponentVariantMode = 'stateless'\n\nfunction resolveTopBar(context: PageContext, props: TopBar): TopBar {\n return {\n ...props,\n siteLogo: context.site.logo,\n resolvedLogoComponent: computed(\n () =>\n unref(props.logoComponent) ?? context.site.logo.component ?? 'SiteLogo',\n ),\n searchEnabled: computed(\n () => unref(props.search) ?? context.site.pagefind?.enabled === true,\n ),\n resolvedSignInEnabled: computed(\n () => unref(props.signInEnabled) ?? context.site.auth?.enabled === true,\n ),\n classes: computed(() =>\n resolveComponentClasses(props, {\n defaultVariant: DEFAULT_TOP_BAR_VARIANT,\n defaultVariantMode: DEFAULT_TOP_BAR_VARIANT_MODE,\n }),\n ),\n }\n}\n\nconst topBarTemplate = html`<input\n class=\"doc-nav-toggle\"\n id=\"doc-nav-toggle\"\n type=\"checkbox\"\n autocomplete=\"off\"\n aria-hidden=\"true\"/>\n<header class=\"topbar\" :class=\"classes\" r-inherit>\n <Flex align=\"center\">\n <div :is=\"resolvedLogoComponent\" class=\"flex-none\" :config=\"siteLogo\"></div>\n <SearchBox\n r-if=\"searchEnabled\"\n class=\"topbar__search flex-auto rounded-md tone-text-surface\"\n variant=\"none\"/>\n <Flex class=\"topbar__controls flex-none\" align=\"center\" justify=\"end\">\n <div class=\"topbar__actions\">\n <ThemeToggle/>\n <slot name=\"actions\"></slot>\n <SignIn\n r-if=\"resolvedSignInEnabled\"\n class=\"topbar__account\"\n :enabled=\"resolvedSignInEnabled\"\n :signedIn=\"signInSignedIn\"\n :avatarSrc=\"signInAvatarSrc\"\n :avatarAlt=\"signInAvatarAlt\"/>\n <label\n class=\"topbar__icon topbar__toggle\"\n for=\"doc-nav-toggle\"\n role=\"button\"\n aria-label=\"Toggle navigation\"\n ></label>\n </div>\n </Flex>\n </Flex>\n</header>`\n\nfunction defineTopBarComponent() {\n return defineComponent<TopBar>(topBarTemplate, {\n props: [\n 'class',\n 'logoComponent',\n 'tone',\n 'variant',\n 'signInSignedIn',\n 'signInAvatarSrc',\n 'signInAvatarAlt',\n 'signInEnabled',\n 'search',\n ],\n context: (head) => resolveTopBar(resolvePageContext(head), head.props),\n })\n}\n\nexport function defineTopBarComponents() {\n return { topBar: defineTopBarComponent() }\n}\n","import {\n type ComponentHead,\n type ComputedRef,\n computed,\n defineComponent,\n html,\n observe,\n type RefOrValue,\n ref,\n sref,\n unref,\n} from 'regor'\nimport type { VirtualListRow } from './virtualList'\nimport type { VirtualTable } from './virtualTable'\n// known limitation: vertical scroll bar is not synced perfectly to the mouse pointer during scroll. eiter fix it or delete this component!\nexport interface VariableVirtualTable extends VirtualTable {\n estimateHeight?: RefOrValue<number | string>\n viewportElement?: ReturnType<typeof sref<HTMLElement | null>>\n unmounted?: () => void\n}\n\nconst variableVirtualTableTemplate = html`<div\n class=\"virtual-table variable-virtual-table\"\n :style=\"viewportStyle\"\n :ref=\"viewportElement\"\n @scroll=\"handleScroll\"\n>\n <table class=\"virtual-table__table\" :style=\"tableStyle\">\n <colgroup :is=\"colGroupComponent\" r-if=\"hasColGroupComponent\"></colgroup>\n <thead :is=\"headerComponent\" r-if=\"hasHeaderComponent\"></thead>\n <tbody>\n <tr class=\"virtual-table__spacer-row\">\n <td :style=\"topSpacerStyle\"></td>\n </tr>\n <tr\n :is=\"rowComponent\"\n :data-virtual-row-index=\"row.index\"\n :item=\"row.item\"\n :index=\"row.index\"\n r-for=\"row in visibleRows\"\n ></tr>\n <tr class=\"virtual-table__spacer-row\">\n <td :style=\"bottomSpacerStyle\"></td>\n </tr>\n </tbody>\n <tfoot :is=\"footerComponent\" r-if=\"hasFooterComponent\"></tfoot>\n </table>\n</div>`\n\nfunction defineVariableVirtualTableComponent() {\n return defineComponent<VariableVirtualTable>(variableVirtualTableTemplate, {\n props: [\n 'items',\n 'height',\n 'estimateHeight',\n 'overscan',\n 'rowComponent',\n 'colGroupComponent',\n 'headerComponent',\n 'footerComponent',\n ],\n context: (head) => resolveVariableVirtualTable(head),\n })\n}\n\nexport function defineVariableVirtualTableComponents() {\n return {\n variableVirtualTable: defineVariableVirtualTableComponent(),\n }\n}\n\nclass VariableVirtualTableContext implements VariableVirtualTable {\n readonly items?: RefOrValue<unknown[]>\n readonly height?: RefOrValue<number | string>\n readonly estimateHeight?: RefOrValue<number | string>\n readonly overscan?: RefOrValue<number | string>\n readonly rowComponent?: RefOrValue<string>\n readonly colGroupComponent?: RefOrValue<string>\n readonly headerComponent?: RefOrValue<string>\n readonly footerComponent?: RefOrValue<string>\n readonly scrollTop = ref(0)\n readonly viewportElement = sref<HTMLElement | null>(null)\n readonly visibleRows: ComputedRef<VirtualListRow[]>\n readonly viewportStyle: ComputedRef<Record<string, string>>\n readonly tableStyle: ComputedRef<Record<string, string>>\n readonly topSpacerStyle: ComputedRef<Record<string, string>>\n readonly bottomSpacerStyle: ComputedRef<Record<string, string>>\n readonly hasColGroupComponent: ComputedRef<boolean>\n readonly hasHeaderComponent: ComputedRef<boolean>\n readonly hasFooterComponent: ComputedRef<boolean>\n private readonly rowHeights: number[] = []\n private rowWindow = new Map<number, VirtualListRow>()\n private readonly rowElements = new Map<number, HTMLElement>()\n private rowObserver?: ResizeObserver\n private bodyObserver?: MutationObserver\n private readonly measurementVersion = ref(0)\n private measuredHeightTotal = 0\n private measuredRowCount = 0\n private pendingFrame = 0\n private scrollEndTimer: ReturnType<typeof setTimeout> | undefined\n private isScrolling = false\n private hasDeferredMeasurements = false\n private readonly resolvedItems: ComputedRef<unknown[]>\n private readonly resolvedHeight: ComputedRef<number>\n private readonly resolvedEstimateHeight: ComputedRef<number>\n private readonly resolvedOverscan: ComputedRef<number>\n private readonly offsets: ComputedRef<number[]>\n private readonly startIndex: ComputedRef<number>\n private readonly firstVisibleIndex: ComputedRef<number>\n private readonly endIndex: ComputedRef<number>\n private readonly pendingIndexes = new Set<number>()\n\n constructor(props: VariableVirtualTable) {\n this.items = props.items\n this.height = props.height\n this.estimateHeight = props.estimateHeight\n this.overscan = props.overscan\n this.rowComponent = props.rowComponent\n this.colGroupComponent = props.colGroupComponent\n this.headerComponent = props.headerComponent\n this.footerComponent = props.footerComponent\n this.resolvedItems = computed(() => {\n const value = unref(props.items)\n return Array.isArray(value) ? value : []\n })\n this.resolvedHeight = computed(() =>\n resolvePositiveNumber(props.height, 560),\n )\n this.resolvedEstimateHeight = computed(() =>\n resolvePositiveNumber(props.estimateHeight ?? props.itemHeight, 56),\n )\n this.resolvedOverscan = computed(() =>\n Math.trunc(resolvePositiveNumber(props.overscan, 6)),\n )\n this.offsets = computed(() => {\n this.measurementVersion()\n const source = this.resolvedItems()\n const estimate = this.currentEstimateHeight()\n const offsets = new Array<number>(source.length + 1)\n offsets[0] = 0\n for (let index = 0; index < source.length; index += 1)\n offsets[index + 1] =\n (offsets[index] ?? 0) + (this.rowHeights[index] ?? estimate)\n\n return offsets\n })\n this.firstVisibleIndex = computed(() =>\n findOffsetIndex(this.offsets(), this.scrollTop()),\n )\n this.startIndex = computed(() =>\n Math.max(0, this.firstVisibleIndex() - this.resolvedOverscan()),\n )\n this.visibleRows = computed(() => this.resolveVisibleRows())\n this.endIndex = computed(() => {\n const rows = this.visibleRows()\n const last = rows[rows.length - 1]\n return last ? last.index + 1 : this.startIndex()\n })\n this.viewportStyle = computed<Record<string, string>>(() => ({\n height: `${this.resolvedHeight()}px`,\n overflow: 'auto',\n width: '100%',\n maxWidth: '100%',\n boxSizing: 'border-box',\n minWidth: '0',\n }))\n this.tableStyle = computed<Record<string, string>>(() => ({\n width: 'max-content',\n minWidth: '100%',\n borderCollapse: 'separate',\n borderSpacing: '0',\n }))\n this.topSpacerStyle = computed<Record<string, string>>(() => ({\n height: `${this.offsets()[this.startIndex()] ?? 0}px`,\n padding: '0',\n border: '0',\n }))\n this.bottomSpacerStyle = computed<Record<string, string>>(() => {\n const offsets = this.offsets()\n const totalHeight = offsets[offsets.length - 1] ?? 0\n const visibleBottom = offsets[this.endIndex()] ?? totalHeight\n return {\n height: `${Math.max(0, totalHeight - visibleBottom)}px`,\n padding: '0',\n border: '0',\n }\n })\n this.hasColGroupComponent = computed(() => !!unref(props.colGroupComponent))\n this.hasHeaderComponent = computed(() => !!unref(props.headerComponent))\n this.hasFooterComponent = computed(() => !!unref(props.footerComponent))\n observe(this.viewportElement, (element) => this.observeViewport(element))\n }\n\n handleScroll = (event: Event) => {\n const target = event.currentTarget\n if (!(target instanceof HTMLElement)) return\n\n this.scrollTop(target.scrollTop)\n this.isScrolling = true\n if (this.scrollEndTimer !== undefined) clearTimeout(this.scrollEndTimer)\n this.scrollEndTimer = setTimeout(() => {\n this.scrollEndTimer = undefined\n this.isScrolling = false\n if (!this.hasDeferredMeasurements) return\n\n this.hasDeferredMeasurements = false\n this.measurementVersion(this.measurementVersion() + 1)\n }, 120)\n }\n\n unmounted = () => {\n if (this.pendingFrame) cancelAnimationFrame(this.pendingFrame)\n if (this.scrollEndTimer !== undefined) clearTimeout(this.scrollEndTimer)\n this.rowObserver?.disconnect()\n this.bodyObserver?.disconnect()\n this.rowElements.clear()\n }\n\n private resolveVisibleRows() {\n const source = this.resolvedItems()\n const offsets = this.offsets()\n const scrollTop = this.scrollTop()\n const overscan = this.resolvedOverscan()\n // Keep the two boundaries on the same scroll-position snapshot.\n const start = Math.max(0, findOffsetIndex(offsets, scrollTop) - overscan)\n const viewportBottom = scrollTop + this.resolvedHeight()\n let end = findOffsetIndex(offsets, viewportBottom) + overscan + 1\n end = Math.min(source.length, Math.max(start, end))\n\n const rows: VirtualListRow[] = []\n const nextWindow = new Map<number, VirtualListRow>()\n for (let index = start; index < end; index += 1) {\n const previous = this.rowWindow.get(index)\n const row =\n previous && previous.item === source[index]\n ? previous\n : { index, item: source[index] }\n rows.push(row)\n nextWindow.set(index, row)\n }\n this.rowWindow = nextWindow\n\n return rows\n }\n\n private observeViewport(element: HTMLElement | null) {\n this.rowObserver?.disconnect()\n this.bodyObserver?.disconnect()\n this.rowElements.clear()\n if (!element) return\n\n this.rowObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const row = entry.target as HTMLElement\n const index = Number(row.getAttribute('data-virtual-row-index'))\n if (this.rowElements.get(index) === row) this.queueMeasurement(index)\n }\n })\n this.bodyObserver = new MutationObserver(() =>\n this.syncMountedRows(element),\n )\n this.bodyObserver.observe(element, { childList: true, subtree: true })\n this.syncMountedRows(element)\n }\n\n private syncMountedRows(viewport: HTMLElement) {\n const next = new Map<number, HTMLElement>()\n for (const row of viewport.querySelectorAll<HTMLElement>(\n ':scope > table > tbody > tr[data-virtual-row-index]',\n )) {\n const index = Number(row.getAttribute('data-virtual-row-index'))\n if (Number.isInteger(index) && index >= 0) next.set(index, row)\n }\n for (const [index, element] of this.rowElements) {\n if (next.get(index) !== element) {\n this.rowObserver?.unobserve(element)\n this.rowElements.delete(index)\n }\n }\n for (const [index, element] of next) {\n if (this.rowElements.get(index) === element) continue\n this.rowElements.set(index, element)\n this.rowObserver?.observe(element)\n this.queueMeasurement(index)\n }\n }\n\n private queueMeasurement(index: number) {\n this.pendingIndexes.add(index)\n if (this.pendingFrame) return\n\n this.pendingFrame = requestAnimationFrame(() => {\n this.pendingFrame = 0\n this.flushMeasurements()\n })\n }\n\n private flushMeasurements() {\n let changed = false\n\n for (const index of this.pendingIndexes) {\n const element = this.rowElements.get(index)\n if (!element) continue\n\n const previous = this.rowHeights[index] ?? this.currentEstimateHeight()\n const next = element.getBoundingClientRect().height\n if (!Number.isFinite(next) || next <= 0) continue\n if (Math.abs(previous - next) < 0.5) continue\n\n this.updateMeasuredAverage(index, next)\n this.rowHeights[index] = next\n changed = true\n }\n\n this.pendingIndexes.clear()\n if (!changed) return\n\n if (this.isScrolling) {\n this.hasDeferredMeasurements = true\n return\n }\n\n this.measurementVersion(this.measurementVersion() + 1)\n }\n\n private currentEstimateHeight() {\n if (this.measuredRowCount === 0) return this.resolvedEstimateHeight()\n return this.measuredHeightTotal / this.measuredRowCount\n }\n\n private updateMeasuredAverage(index: number, next: number) {\n const previous = this.rowHeights[index]\n if (previous === undefined) {\n this.measuredRowCount += 1\n this.measuredHeightTotal += next\n return\n }\n\n this.measuredHeightTotal += next - previous\n }\n}\n\nfunction resolveVariableVirtualTable(\n head: ComponentHead<VariableVirtualTable>,\n) {\n head.autoProps = false\n return new VariableVirtualTableContext(head.props)\n}\n\nfunction resolvePositiveNumber(\n value: RefOrValue<number | string> | undefined,\n fallback: number,\n) {\n const raw = unref(value)\n const parsed = typeof raw === 'number' ? raw : Number.parseFloat(String(raw))\n return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback\n}\n\nfunction findOffsetIndex(offsets: number[], scrollTop: number) {\n if (offsets.length <= 1) return 0\n\n let low = 0\n let high = offsets.length - 1\n while (low < high) {\n const middle = Math.floor((low + high) / 2)\n if ((offsets[middle] ?? 0) <= scrollTop) low = middle + 1\n else high = middle\n }\n\n return Math.max(0, low - 1)\n}\n","import {\n type ComponentHead,\n type ComputedRef,\n computed,\n defineComponent,\n html,\n observe,\n type RefOrValue,\n ref,\n sref,\n unref,\n} from 'regor'\n\nexport interface VirtualListRow {\n index: number\n item: unknown\n}\n\nexport interface VirtualList {\n items?: RefOrValue<unknown[]>\n height?: RefOrValue<number | string>\n itemHeight?: RefOrValue<number | string>\n overscan?: RefOrValue<number | string>\n rowComponent?: RefOrValue<string>\n scrollTop?: ReturnType<typeof ref<number>>\n visibleRows?: ComputedRef<VirtualListRow[]>\n viewportStyle?: ComputedRef<Record<string, string>>\n spacerStyle?: ComputedRef<Record<string, string>>\n windowStyle?: ComputedRef<Record<string, string>>\n itemStyle?: ComputedRef<Record<string, string>>\n handleScroll?: (event: Event) => void\n resolvedRowComponent?: ComputedRef<string>\n}\n\nexport interface VariableVirtualList extends VirtualList {\n estimateHeight?: RefOrValue<number | string>\n rowElementRefs?: Array<ReturnType<typeof sref<HTMLElement | null>>>\n viewportElement?: ReturnType<typeof sref<HTMLElement | null>>\n unmounted?: () => void\n}\n\nconst virtualListTemplate = html`<div class=\"virtual-list\" :style=\"viewportStyle\" @scroll=\"handleScroll\">\n <div class=\"virtual-list__spacer\" :style=\"spacerStyle\">\n <div class=\"virtual-list__window\" :style=\"windowStyle\">\n <div\n class=\"virtual-list__item\"\n :style=\"itemStyle\"\n r-for=\"row in visibleRows\"\n >\n <div\n :is=\"resolvedRowComponent\"\n :item=\"row.item\"\n :index=\"row.index\"\n ></div>\n </div>\n </div>\n </div>\n</div>`\n\nfunction defineVirtualListComponent() {\n return defineComponent<VirtualList>(virtualListTemplate, {\n props: ['items', 'height', 'itemHeight', 'overscan', 'rowComponent'],\n context: (head) => resolveVirtualList(head),\n })\n}\n\nconst variableVirtualListTemplate = html`<div\n class=\"virtual-list variable-virtual-list\"\n :style=\"viewportStyle\"\n :ref=\"viewportElement\"\n @scroll=\"handleScroll\"\n>\n <div class=\"virtual-list__spacer\" :style=\"spacerStyle\">\n <div class=\"virtual-list__window\" :style=\"windowStyle\">\n <div\n class=\"virtual-list__item\"\n :ref=\"rowElementRefs[row.index]\"\n r-for=\"row in visibleRows\"\n >\n <div\n :is=\"resolvedRowComponent\"\n :item=\"row.item\"\n :index=\"row.index\"\n ></div>\n </div>\n </div>\n </div>\n</div>`\n\nfunction defineVariableVirtualListComponent() {\n return defineComponent<VariableVirtualList>(variableVirtualListTemplate, {\n props: ['items', 'height', 'estimateHeight', 'overscan', 'rowComponent'],\n context: (head) => resolveVariableVirtualList(head),\n })\n}\n\nexport function defineVirtualListComponents() {\n return {\n virtualList: defineVirtualListComponent(),\n variableVirtualList: defineVariableVirtualListComponent(),\n }\n}\n\nfunction resolveVirtualList(head: ComponentHead<VirtualList>) {\n const props = head.props\n const scrollTop = ref(0)\n const itemHeight = computed(() => resolvePositiveNumber(props.itemHeight, 44))\n const height = computed(() => resolvePositiveNumber(props.height, 560))\n const overscan = computed(() =>\n Math.trunc(resolvePositiveNumber(props.overscan, 6)),\n )\n const items = computed(() => {\n const value = unref(props.items)\n return Array.isArray(value) ? value : []\n })\n const startIndex = computed(() =>\n Math.max(0, Math.floor(scrollTop() / itemHeight()) - overscan()),\n )\n const visibleCount = computed(\n () => Math.ceil(height() / itemHeight()) + overscan() * 2,\n )\n const visibleRows = computed(() => {\n const source = items()\n const start = startIndex()\n const end = Math.min(source.length, start + visibleCount())\n const rows: VirtualListRow[] = []\n for (let index = start; index < end; index += 1)\n rows.push({ index, item: source[index] })\n\n return rows\n })\n\n return {\n ...props,\n scrollTop,\n visibleRows,\n viewportStyle: computed<Record<string, string>>(() => ({\n height: `${height()}px`,\n })),\n spacerStyle: computed<Record<string, string>>(() => ({\n height: `${items().length * itemHeight()}px`,\n })),\n windowStyle: computed<Record<string, string>>(() => ({\n transform: `translateY(${startIndex() * itemHeight()}px)`,\n })),\n itemStyle: computed<Record<string, string>>(() => ({\n height: `${itemHeight()}px`,\n })),\n resolvedRowComponent: computed(() => {\n const component = unref(props.rowComponent)\n return typeof component === 'string' && component.trim()\n ? component\n : 'div'\n }),\n handleScroll: (event: Event) => {\n const target = event.currentTarget\n if (target instanceof HTMLElement) scrollTop(target.scrollTop)\n },\n }\n}\n\nfunction resolvePositiveNumber(\n value: RefOrValue<number | string> | undefined,\n fallback: number,\n) {\n const raw = unref(value)\n const parsed = typeof raw === 'number' ? raw : Number.parseFloat(String(raw))\n return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback\n}\n\nclass VariableVirtualListContext {\n readonly scrollTop = ref(0)\n readonly viewportElement = sref<HTMLElement | null>(null)\n readonly rowElementRefs: Array<ReturnType<typeof sref<HTMLElement | null>>> =\n []\n readonly visibleRows: ComputedRef<VirtualListRow[]>\n readonly viewportStyle: ComputedRef<Record<string, string>>\n readonly spacerStyle: ComputedRef<Record<string, string>>\n readonly windowStyle: ComputedRef<Record<string, string>>\n readonly resolvedRowComponent: ComputedRef<string>\n private readonly rowHeights: number[] = []\n private rowWindow = new Map<number, VirtualListRow>()\n private readonly rowObservers = new Map<number, ResizeObserver>()\n private readonly measurementVersion = ref(0)\n private measuredHeightTotal = 0\n private measuredRowCount = 0\n private readonly resolvedItems: ComputedRef<unknown[]>\n private readonly resolvedHeight: ComputedRef<number>\n private readonly resolvedEstimateHeight: ComputedRef<number>\n private readonly resolvedOverscan: ComputedRef<number>\n private readonly offsets: ComputedRef<number[]>\n private readonly startIndex: ComputedRef<number>\n private readonly firstVisibleIndex: ComputedRef<number>\n private readonly normalizedScrollTop: ComputedRef<number>\n private pendingIndexes = new Set<number>()\n private pendingFrame = 0\n private scrollEndTimer: ReturnType<typeof setTimeout> | undefined\n private isScrolling = false\n private hasDeferredMeasurements = false\n\n constructor(props: VariableVirtualList) {\n this.resolvedItems = computed(() => {\n const value = unref(props.items)\n return Array.isArray(value) ? value : []\n })\n this.resolvedHeight = computed(() =>\n resolvePositiveNumber(props.height, 560),\n )\n this.resolvedEstimateHeight = computed(() =>\n resolvePositiveNumber(props.estimateHeight ?? props.itemHeight, 56),\n )\n this.resolvedOverscan = computed(() =>\n Math.trunc(resolvePositiveNumber(props.overscan, 6)),\n )\n this.offsets = computed(() => {\n this.measurementVersion()\n const estimate = this.currentEstimateHeight()\n const source = this.resolvedItems()\n const offsets = new Array<number>(source.length + 1)\n offsets[0] = 0\n for (let index = 0; index < source.length; index += 1)\n offsets[index + 1] =\n (offsets[index] ?? 0) + (this.rowHeights[index] ?? estimate)\n\n return offsets\n })\n this.normalizedScrollTop = computed(() => {\n const value = this.scrollTop()\n return value <= 0.5 ? 0 : value\n })\n this.firstVisibleIndex = computed(() =>\n findOffsetIndex(this.offsets(), this.normalizedScrollTop()),\n )\n this.startIndex = computed(() =>\n Math.max(0, this.firstVisibleIndex() - this.resolvedOverscan()),\n )\n this.visibleRows = computed(() => this.resolveVisibleRows())\n this.viewportStyle = computed<Record<string, string>>(() => ({\n height: `${this.resolvedHeight()}px`,\n }))\n this.spacerStyle = computed<Record<string, string>>(() => {\n const offsets = this.offsets()\n return {\n height: `${offsets[offsets.length - 1] ?? 0}px`,\n }\n })\n this.windowStyle = computed<Record<string, string>>(() => ({\n transform: `translateY(${this.offsets()[this.startIndex()] ?? 0}px)`,\n }))\n this.resolvedRowComponent = computed(() => {\n const component = unref(props.rowComponent)\n return typeof component === 'string' && component.trim()\n ? component\n : 'div'\n })\n }\n\n handleScroll = () => {\n this.syncScrollTopFromViewport()\n\n this.isScrolling = true\n if (this.scrollEndTimer !== undefined) clearTimeout(this.scrollEndTimer)\n this.scrollEndTimer = setTimeout(() => {\n this.scrollEndTimer = undefined\n this.isScrolling = false\n this.syncScrollTopFromViewport()\n if (!this.hasDeferredMeasurements) return\n\n this.hasDeferredMeasurements = false\n this.measurementVersion(this.measurementVersion() + 1)\n }, 120)\n }\n\n unmounted = () => {\n if (this.pendingFrame) cancelAnimationFrame(this.pendingFrame)\n if (this.scrollEndTimer !== undefined) clearTimeout(this.scrollEndTimer)\n for (const observer of this.rowObservers.values()) observer.disconnect()\n this.rowObservers.clear()\n }\n\n private resolveVisibleRows() {\n const source = this.resolvedItems()\n const offsets = this.offsets()\n const scrollTop = this.normalizedScrollTop()\n const overscan = this.resolvedOverscan()\n // Resolve both boundaries from the same scroll position. A separate\n // computed start can still hold its previous value during notification.\n const start = Math.max(0, findOffsetIndex(offsets, scrollTop) - overscan)\n const viewportBottom = scrollTop + this.resolvedHeight()\n let end = findOffsetIndex(offsets, viewportBottom) + overscan + 1\n end = Math.min(source.length, Math.max(start, end))\n\n const rows: VirtualListRow[] = []\n const nextWindow = new Map<number, VirtualListRow>()\n for (let index = start; index < end; index += 1) {\n this.ensureRowRef(index)\n const previous = this.rowWindow.get(index)\n const row =\n previous && previous.item === source[index]\n ? previous\n : { index, item: source[index] }\n rows.push(row)\n nextWindow.set(index, row)\n }\n this.rowWindow = nextWindow\n\n return rows\n }\n\n private ensureRowRef(index: number) {\n if (this.rowElementRefs[index]) return\n\n const elementRef = sref<HTMLElement | null>(null)\n this.rowElementRefs[index] = elementRef\n observe(elementRef, (element) => {\n this.observeRowElement(index, element)\n })\n }\n\n private observeRowElement(index: number, element: HTMLElement | null) {\n const existing = this.rowObservers.get(index)\n if (existing) {\n existing.disconnect()\n this.rowObservers.delete(index)\n }\n if (!element) return\n\n const observer = new ResizeObserver(() => {\n this.queueMeasurement(index)\n })\n observer.observe(element)\n this.rowObservers.set(index, observer)\n this.queueMeasurement(index)\n }\n\n private queueMeasurement(index: number) {\n this.pendingIndexes.add(index)\n if (this.pendingFrame) return\n\n this.pendingFrame = requestAnimationFrame(() => {\n this.pendingFrame = 0\n this.flushMeasurements()\n })\n }\n\n private flushMeasurements() {\n this.syncScrollTopFromViewport()\n let changed = false\n\n for (const index of this.pendingIndexes) {\n const element = this.rowElementRefs[index]?.()\n if (!element) continue\n\n const previous = this.rowHeights[index] ?? this.currentEstimateHeight()\n const next = element.getBoundingClientRect().height\n if (!Number.isFinite(next) || next <= 0) continue\n if (Math.abs(previous - next) < 0.5) continue\n\n this.updateMeasuredAverage(index, next)\n this.rowHeights[index] = next\n changed = true\n }\n\n this.pendingIndexes.clear()\n if (!changed) return\n\n if (this.isScrolling) {\n this.hasDeferredMeasurements = true\n return\n }\n\n this.measurementVersion(this.measurementVersion() + 1)\n }\n\n private currentEstimateHeight() {\n if (this.measuredRowCount === 0) return this.resolvedEstimateHeight()\n return this.measuredHeightTotal / this.measuredRowCount\n }\n\n private updateMeasuredAverage(index: number, next: number) {\n const previous = this.rowHeights[index]\n if (previous === undefined) {\n this.measuredRowCount += 1\n this.measuredHeightTotal += next\n return\n }\n\n this.measuredHeightTotal += next - previous\n }\n\n private syncScrollTopFromViewport() {\n const viewport = this.viewportElement()\n if (!viewport) return\n\n this.setScrollTop(viewport.scrollTop)\n }\n\n private setScrollTop(value: number) {\n const next = Number.isFinite(value) && value > 0 ? value : 0\n if (this.scrollTop() === next) return\n\n this.scrollTop(next)\n }\n}\n\nfunction resolveVariableVirtualList(head: ComponentHead<VariableVirtualList>) {\n head.autoProps = false\n return new VariableVirtualListContext(head.props) as VariableVirtualList\n}\n\nfunction findOffsetIndex(offsets: number[], scrollTop: number) {\n if (offsets.length <= 1) return 0\n\n let low = 0\n let high = offsets.length - 1\n while (low < high) {\n const middle = Math.floor((low + high) / 2)\n if ((offsets[middle] ?? 0) <= scrollTop) low = middle + 1\n else high = middle\n }\n\n return Math.max(0, low - 1)\n}\n","import {\n type ComponentHead,\n type ComputedRef,\n computed,\n defineComponent,\n html,\n type RefOrValue,\n ref,\n unref,\n} from 'regor'\nimport type { VirtualListRow } from './virtualList'\n\nexport interface VirtualTable {\n items?: RefOrValue<unknown[]>\n height?: RefOrValue<number | string>\n itemHeight?: RefOrValue<number | string>\n overscan?: RefOrValue<number | string>\n rowComponent?: RefOrValue<string>\n colGroupComponent?: RefOrValue<string>\n headerComponent?: RefOrValue<string>\n footerComponent?: RefOrValue<string>\n tableLayout?: RefOrValue<'auto' | 'fixed'>\n scrollTop?: ReturnType<typeof ref<number>>\n visibleRows?: ComputedRef<VirtualListRow[]>\n viewportStyle?: ComputedRef<Record<string, string>>\n tableStyle?: ComputedRef<Record<string, string>>\n topSpacerStyle?: ComputedRef<Record<string, string>>\n bottomSpacerStyle?: ComputedRef<Record<string, string>>\n handleScroll?: (event: Event) => void\n hasColGroupComponent?: ComputedRef<boolean>\n hasHeaderComponent?: ComputedRef<boolean>\n hasFooterComponent?: ComputedRef<boolean>\n}\n\nconst virtualTableTemplate = html`<div class=\"virtual-table\" :style=\"viewportStyle\" @scroll=\"handleScroll\">\n <table class=\"virtual-table__table\" :style=\"tableStyle\">\n <colgroup :is=\"colGroupComponent\" r-if=\"hasColGroupComponent\"></colgroup>\n <thead :is=\"headerComponent\" r-if=\"hasHeaderComponent\"></thead>\n <tbody>\n <tr class=\"virtual-table__spacer-row\">\n <td :style=\"topSpacerStyle\"></td>\n </tr>\n <tr\n :is=\"rowComponent\"\n :item=\"row.item\"\n :index=\"row.index\"\n style=\"height: var(--virtual-table-item-height) !important;\"\n r-for=\"row in visibleRows\"\n ></tr>\n <tr class=\"virtual-table__spacer-row\">\n <td :style=\"bottomSpacerStyle\"></td>\n </tr>\n </tbody>\n <tfoot :is=\"footerComponent\" r-if=\"hasFooterComponent\"></tfoot>\n </table>\n</div>`\n\nfunction defineVirtualTableComponent() {\n return defineComponent<VirtualTable>(virtualTableTemplate, {\n props: [\n 'items',\n 'height',\n 'itemHeight',\n 'overscan',\n 'rowComponent',\n 'colGroupComponent',\n 'headerComponent',\n 'footerComponent',\n 'tableLayout',\n ],\n context: (head) => resolveVirtualTable(head),\n })\n}\n\nexport function defineVirtualTableComponents() {\n return {\n virtualTable: defineVirtualTableComponent(),\n }\n}\n\nfunction resolveVirtualTable(head: ComponentHead<VirtualTable>) {\n const props = head.props\n const window = resolveFixedVirtualWindow(props)\n const endIndex = computed(() => {\n const rows = window.visibleRows()\n const last = rows[rows.length - 1]\n return last ? last.index + 1 : window.startIndex()\n })\n\n return {\n ...props,\n scrollTop: window.scrollTop,\n visibleRows: window.visibleRows,\n viewportStyle: computed<Record<string, string>>(() => ({\n height: `${window.height()}px`,\n overflow: 'auto',\n width: '100%',\n maxWidth: '100%',\n boxSizing: 'border-box',\n minWidth: '0',\n })),\n tableStyle: computed<Record<string, string>>(() => {\n const fixed = unref(props.tableLayout) === 'fixed'\n return {\n '--virtual-table-item-height': `${window.itemHeight()}px`,\n width: fixed ? '100%' : 'max-content',\n minWidth: '100%',\n borderCollapse: 'separate',\n borderSpacing: '0',\n tableLayout: fixed ? 'fixed' : 'auto',\n }\n }),\n topSpacerStyle: computed<Record<string, string>>(() => ({\n height: `${window.startIndex() * window.itemHeight()}px`,\n padding: '0',\n border: '0',\n })),\n bottomSpacerStyle: computed<Record<string, string>>(() => ({\n height: `${Math.max(0, window.items().length - endIndex()) * window.itemHeight()}px`,\n padding: '0',\n border: '0',\n })),\n hasColGroupComponent: computed(() => !!unref(props.colGroupComponent)),\n hasHeaderComponent: computed(() => !!unref(props.headerComponent)),\n hasFooterComponent: computed(() => !!unref(props.footerComponent)),\n handleScroll: window.handleScroll,\n }\n}\n\nfunction resolveFixedVirtualWindow(props: VirtualTable) {\n const scrollTop = ref(0)\n const itemHeight = computed(() => resolvePositiveNumber(props.itemHeight, 44))\n const height = computed(() => resolvePositiveNumber(props.height, 560))\n const overscan = computed(() =>\n Math.trunc(resolvePositiveNumber(props.overscan, 6)),\n )\n const items = computed(() => {\n const value = unref(props.items)\n return Array.isArray(value) ? value : []\n })\n const startIndex = computed(() =>\n Math.max(0, Math.floor(scrollTop() / itemHeight()) - overscan()),\n )\n const visibleCount = computed(\n () => Math.ceil(height() / itemHeight()) + overscan() * 2,\n )\n const visibleRows = computed(() => {\n const source = items()\n const start = startIndex()\n const end = Math.min(source.length, start + visibleCount())\n const rows: VirtualListRow[] = []\n for (let index = start; index < end; index += 1)\n rows.push({ index, item: source[index] })\n\n return rows\n })\n\n return {\n scrollTop,\n itemHeight,\n height,\n items,\n startIndex,\n visibleRows,\n handleScroll: (event: Event) => {\n const target = event.currentTarget\n if (target instanceof HTMLElement) scrollTop(target.scrollTop)\n },\n }\n}\n\nfunction resolvePositiveNumber(\n value: RefOrValue<number | string> | undefined,\n fallback: number,\n) {\n const raw = unref(value)\n const parsed = typeof raw === 'number' ? raw : Number.parseFloat(String(raw))\n return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback\n}\n","import { defineAlertComponents } from './standard/alertBox/alertBox'\nimport { defineBadgeComponents } from './standard/badge/badge'\nimport { defineBarChartComponents } from './standard/barChart/barChart'\nimport { defineButtonComponents } from './standard/btn/btn'\nimport { defineBtnGroupComponents } from './standard/btnGroup/btnGroup'\nimport { defineClassicLogoComponents } from './standard/classicLogo/classicLogo'\nimport { defineComposerComponents } from './standard/composer/composer'\nimport { defineConsentComponents } from './standard/consent/consent'\nimport { defineContactFormComponents } from './standard/contactForm/contactForm'\nimport { defineDoughnutChartComponents } from './standard/doughnutChart/doughnutChart'\nimport { defineDropFilesComponents } from './standard/dropFiles/dropFiles'\nimport { defineExpandablePanelComponents } from './standard/expandablePanel/expandablePanel'\nimport { defineFlexComponents } from './standard/flex/flex'\nimport { defineFooterComponents } from './standard/footer/footer'\nimport { defineAutoCompleteInputComponents } from './standard/form/autoCompleteInput'\nimport { defineFormComponents } from './standard/form/form'\nimport { defineFormInputField } from './standard/form/formInputField'\nimport { defineFormSelectField } from './standard/form/formSelectField'\nimport { defineMultiAutoCompleteInputComponents } from './standard/form/multiAutoCompleteInput'\nimport { defineGridComponents } from './standard/grid/grid'\nimport { defineIconComponents, type GetSvgIcon } from './standard/icon/icon'\nimport { defineLandingComponents } from './standard/landing/landing'\nimport { defineLineChartComponents } from './standard/lineChart/lineChart'\nimport { defineLogoComponents } from './standard/logo/logo'\nimport { defineModalComponents } from './standard/modal/modal'\nimport { defineNavigationComponents } from './standard/navMenu/navMenu'\nimport { definePageLinksComponents } from './standard/pageLinks/pageLinks'\nimport { defineScriptComponents } from './standard/pageScript/pageScript'\nimport { definePageTocComponents } from './standard/pageToc/pageToc'\nimport { definePanelComponents } from './standard/panel/panel'\nimport { definePricingComponents } from './standard/pricing/pricing'\nimport { defineSearchComponents } from './standard/searchBox/searchBox'\nimport { defineSectionHeaderComponents } from './standard/sectionHeader/sectionHeader'\nimport { defineSignInComponents } from './standard/signIn/signIn'\nimport { defineTabsComponents } from './standard/tabs/tabs'\nimport { defineThemeToggleComponents } from './standard/themeToggle/themeToggle'\nimport { defineToastComponents } from './standard/toast/toastHost'\nimport { defineTopBarComponents } from './standard/topBar/topBar'\nimport { defineVariableVirtualTableComponents } from './standard/virtualList/variableVirtualTable'\nimport { defineVirtualListComponents } from './standard/virtualList/virtualList'\nimport { defineVirtualTableComponents } from './standard/virtualList/virtualTable'\n\nexport function defineComponents(getSvgIcon: GetSvgIcon) {\n return {\n ...defineAlertComponents(),\n ...defineBarChartComponents(),\n ...defineBadgeComponents(),\n ...defineButtonComponents(),\n ...defineBtnGroupComponents(),\n ...defineConsentComponents(),\n ...defineContactFormComponents(),\n ...defineComposerComponents(),\n ...defineDoughnutChartComponents(),\n ...defineDropFilesComponents(),\n ...defineExpandablePanelComponents(),\n ...defineFlexComponents(),\n ...defineFooterComponents(),\n ...defineAutoCompleteInputComponents(),\n ...defineFormComponents(),\n ...defineFormInputField(),\n ...defineFormSelectField(),\n ...defineMultiAutoCompleteInputComponents(),\n ...defineGridComponents(),\n ...defineIconComponents(getSvgIcon),\n ...defineLandingComponents(),\n ...defineLineChartComponents(),\n ...defineLogoComponents(),\n ...defineClassicLogoComponents(),\n ...defineModalComponents(),\n ...defineTopBarComponents(),\n ...defineThemeToggleComponents(),\n ...defineToastComponents(),\n ...defineVirtualListComponents(),\n ...defineVirtualTableComponents(),\n ...defineVariableVirtualTableComponents(),\n ...defineNavigationComponents(),\n ...definePanelComponents(),\n ...definePageLinksComponents(),\n ...definePageTocComponents(),\n ...definePricingComponents(),\n ...defineSearchComponents(),\n ...defineSectionHeaderComponents(),\n ...defineSignInComponents(),\n ...defineTabsComponents(),\n ...defineScriptComponents(),\n }\n}\n","import {\n styleBuilder,\n type ThemeMode,\n type ThemePalette,\n themes,\n} from '@purestack/ts-style'\n\nexport function registerBadgeStyles() {\n themes.forEach((theme, palette) => {\n registerBadgeBaseStyles(theme, palette)\n })\n}\n\nfunction registerBadgeBaseStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder\n .select('.badge', theme)\n .display('inline-flex')\n .alignItems('center')\n .padding('0.12em 0.75em')\n .apply(palette.applyFont(palette.font.size.xxs, palette.font.weight.w700))\n}\n","import {\n styleBuilder,\n type ThemeMode,\n type ThemePalette,\n themes,\n} from '@purestack/ts-style'\n\nconst BAR_CHART_VALUE_FONT_SIZE = '0.15625rem'\nconst BAR_CHART_LABEL_FONT_SIZE = '0.1375rem'\nconst BAR_CHART_AXIS_FONT_SIZE = '0.11875rem'\nconst BAR_CHART_EMPTY_FONT_SIZE = '0.1625rem'\n\nexport function registerBarChartStyles() {\n themes.forEach((theme, palette) => {\n registerBarChartBaseStyles(theme)\n registerBarChartPaintStyles(theme, palette)\n })\n}\n\nfunction registerBarChartBaseStyles(theme: ThemeMode) {\n styleBuilder\n .select('.bar-chart__bar', theme)\n .transition('opacity 180ms ease, filter 180ms ease, transform 180ms ease')\n .transformOrigin('center bottom')\n\n styleBuilder\n .select('.bar-chart__plot:hover .bar-chart__bar', theme)\n .opacity('0.72')\n\n styleBuilder\n .select('.bar-chart__plot:hover .bar-chart__bar:hover', theme)\n .opacity('1')\n .filter('brightness(1.08)')\n\n styleBuilder\n .select(\n '.bar-chart__label, .bar-chart__value, .bar-chart__empty, .bar-chart__grid-line text',\n theme,\n )\n .pointerEvents('none')\n .letterSpacing('normal')\n}\n\nfunction registerBarChartPaintStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder\n .select('.bar-chart__grid-line line', theme)\n .stroke(palette.current.surfaceAlt.rest.border)\n .strokeWidth('0.22')\n\n styleBuilder\n .select('.bar-chart__zero-line', theme)\n .stroke(palette.current.border.subtle)\n .strokeWidth('0.36')\n\n styleBuilder\n .select('.bar-chart__value', theme)\n .fill(palette.current.text.default)\n .fontSize(BAR_CHART_VALUE_FONT_SIZE)\n .fontWeight(palette.font.weight.w700)\n\n styleBuilder\n .select('.bar-chart__label', theme)\n .fill(palette.current.text.subtle)\n .fontSize(BAR_CHART_LABEL_FONT_SIZE)\n .fontWeight(palette.font.weight.w700)\n\n styleBuilder\n .select('.bar-chart__grid-line text', theme)\n .fill(palette.current.text.subtle)\n .fontSize(BAR_CHART_AXIS_FONT_SIZE)\n .fontWeight(palette.font.weight.w500)\n .set('dominant-baseline', 'middle')\n .set('text-anchor', 'end')\n\n styleBuilder\n .select('.bar-chart__empty', theme)\n .fill(palette.current.text.subtle)\n .fontSize(BAR_CHART_EMPTY_FONT_SIZE)\n .fontWeight(palette.font.weight.w700)\n .set('dominant-baseline', 'middle')\n}\n","import type { ThemePalette } from '@purestack/ts-style'\nimport { styleBuilder, type ThemeMode, themes } from '@purestack/ts-style'\n\nexport function registerButtonStyles() {\n themes.forEach((theme, palette) => {\n registerButtonBaseStyles(theme, palette)\n registerButtonSizeStyles(theme, palette)\n })\n}\n\nfunction registerButtonBaseStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder\n .select('.btn', theme)\n .display('inline-flex')\n .background('transparent')\n .verticalAlign('middle')\n .alignItems('center')\n .justifyContent('center')\n .gap('0.25em')\n .border('none')\n .borderColor('transparent')\n .cursor('pointer')\n .textDecoration('none')\n .whiteSpace('nowrap')\n .transition(\n 'background 150ms ease, color 150ms ease, border-color 150ms ease, box-shadow 150ms ease, transform 150ms ease',\n )\n .webkitTapHighlightColor('transparent')\n .padding('0.5em 0.75em')\n .apply(palette.applyFont(palette.font.size.body, palette.font.weight.w500))\n .userSelect('none')\n\n styleBuilder\n .select('.btn:disabled', theme)\n .cursor('not-allowed')\n .transform('none')\n .boxShadow('none')\n\n styleBuilder\n .select('.btn__label', theme)\n .display('inline-flex')\n .alignItems('center')\n\n styleBuilder.select('.btn__icon', theme).width('1.1em').height('1.1em')\n}\n\nfunction registerButtonSizeStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder\n .select('.btn--sm', theme)\n .apply(palette.applyFont(palette.font.size.xs, palette.font.weight.w500))\n\n /*- The default size (md) is defined in the .btn for simplicity. */\n\n styleBuilder\n .select('.btn--lg', theme)\n .apply(palette.applyFont(palette.font.size.h2, palette.font.weight.w500))\n styleBuilder.select('.btn--icon-only', theme).padding('0.25em')\n styleBuilder.select('.btn--icon-only .btn__label', theme).display('none')\n}\n","import type { ThemePalette } from '@purestack/ts-style'\nimport { styleBuilder, type ThemeMode, themes } from '@purestack/ts-style'\n\nexport function registerBtnGroupStyles() {\n themes.forEach((theme, palette) => {\n registerBtnGroupLayoutStyles(theme)\n registerBtnGroupDropDownStyles(theme, palette)\n })\n}\n\nfunction registerBtnGroupLayoutStyles(theme: ThemeMode) {\n styleBuilder\n .select('.btn-group', theme)\n .display('inline-flex')\n .alignItems('center')\n .justifyContent('flex-start')\n .gap('0.375rem')\n .verticalAlign('middle')\n\n styleBuilder.select('.btn-group--center', theme).justifyContent('center')\n styleBuilder.select('.btn-group--end', theme).justifyContent('flex-end')\n styleBuilder.select('.btn-group--wrap', theme).flexWrap('wrap')\n}\n\nfunction registerBtnGroupDropDownStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.btn-group__dropdown', theme)\n .position('relative')\n .display('inline-flex')\n .lineHeight('normal')\n\n styleBuilder.select('.btn-group__toggle', theme).listStyle('none')\n styleBuilder.select('.btn-group__toggle::marker', theme).content('\"\"')\n styleBuilder\n .select('.btn-group__toggle::-webkit-details-marker', theme)\n .display('none')\n\n styleBuilder\n .select('.btn-group__dropdown[open] > .btn-group__toggle', theme)\n .boxShadow(`0 0 0 3px ${palette.current.border.focus}`)\n\n styleBuilder\n .select('.btn-group__menu', theme)\n .position('absolute')\n .display('none')\n .top('calc(100% + 0.375rem)')\n .right('0')\n .zIndex(70)\n .width('max-content')\n .minWidth('max(11rem, 100%)')\n .maxWidth('calc(100vw - 2rem)')\n .padding('0.375rem')\n .gap('0.25rem')\n .boxShadow(palette.effect.strongShadow)\n\n styleBuilder\n .select('.btn-group__dropdown--start > .btn-group__menu', theme)\n .left('0')\n .right('auto')\n\n styleBuilder\n .select('.btn-group__dropdown[open] > .btn-group__menu', theme)\n .display('grid')\n\n styleBuilder\n .select('.btn-group__menu > .btn', theme)\n .width('100%')\n .justifyContent('flex-start')\n .textAlign('left')\n .whiteSpace('normal')\n\n styleBuilder\n .select('.btn-group__menu > .btn .btn__label', theme)\n .minWidth('0')\n .whiteSpace('normal')\n .overflowWrap('anywhere')\n\n styleBuilder\n .select('.btn-group__menu > *', theme)\n .maxWidth('100%')\n .minWidth('0')\n}\n","import type { ThemePalette } from '@purestack/ts-style'\nimport {\n BREAKPOINTS,\n mediaMin,\n styleBuilder,\n type ThemeMode,\n themes,\n} from '@purestack/ts-style'\n\nconst LOGO_DEFAULTS = {\n brandSize: {\n base: '1.5rem',\n sm: '1.5rem',\n md: '1.75rem',\n lg: '2rem',\n xl: '2rem',\n },\n subtitleSize: {\n base: '0.7rem',\n sm: '0.7rem',\n md: '0.74rem',\n lg: '0.77rem',\n xl: '0.77rem',\n },\n iconSize: {\n base: '2rem',\n sm: '2rem',\n md: '2.5rem',\n lg: '2.85rem',\n xl: '2.85rem',\n },\n subtitleInset: {\n base: '0.03125rem',\n sm: '0.03125rem',\n md: '0.0625rem',\n lg: '0.0625rem',\n xl: '0.0625rem',\n },\n} as const\n\ntype LogoResponsiveToken =\n | 'brand-size'\n | 'subtitle-size'\n | 'icon-size'\n | 'subtitle-inset'\n\ntype LogoBreakpoint = 'sm' | 'md' | 'lg' | 'xl'\n\nexport function registerClassicLogoStyles() {\n themes.forEach((theme, palette) => {\n registerClassicLogoShellStyles(theme, palette)\n registerClassicLogoTextStyles(theme, palette)\n registerClassicLogoResponsiveStyles(theme)\n registerClassicLogoInteractiveStyles(theme, palette)\n })\n}\n\nexport function registerClassicLogoShellStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.classic-logo', theme)\n .display('inline-block')\n .width('fit-content')\n\n styleBuilder\n .select('.classic-logo__link', theme)\n .display('inline-flex')\n .alignItems('center')\n .gap('0.25rem')\n .padding('0.25rem 0.5rem')\n .borderRadius(palette.radii.sm)\n .border(`1px solid ${palette.current.border.subtle}`)\n .textDecoration('none')\n .maxWidth('100%')\n .background(palette.current.surface.rest.background)\n\n styleBuilder\n .select('.classic-logo__link:hover', theme)\n .boxShadow(palette.effect.interactiveShadow)\n\n styleBuilder\n .select('.classic-logo__glyph', theme)\n .width(resolveLogoVar('icon-size'))\n .height(resolveLogoVar('icon-size'))\n .minWidth(resolveLogoVar('icon-size'))\n .minHeight(resolveLogoVar('icon-size'))\n .borderRadius(palette.radii.md)\n .display('grid')\n .placeItems('center')\n .position('relative')\n .background(\n `var(--ps-classic-logo-glyph-background, ${palette.current.button.rest.background})`,\n )\n .backgroundColor(\n `var(--ps-classic-logo-glyph-background, ${palette.current.button.rest.background})`,\n )\n .border(`1px solid ${palette.current.button.rest.border}`)\n .color(\n `var(--ps-classic-logo-glyph-foreground, ${palette.current.button.rest.text})`,\n )\n\n styleBuilder\n .select('.classic-logo__glyph > .icon', theme)\n .width('80%')\n .height('80%')\n\n styleBuilder\n .select('.classic-logo__glyph-mark', theme)\n .position('absolute')\n .inset('30%')\n .borderRadius('0.25rem')\n .backgroundColor('currentColor')\n}\n\nexport function registerClassicLogoTextStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.classic-logo__stack', theme)\n .display('inline-grid')\n .justifyItems('stretch')\n .gap('0')\n .minWidth('0')\n .textTransform('uppercase')\n .letterSpacing('0')\n .lineHeight('1')\n .whiteSpace('nowrap')\n\n styleBuilder\n .select('.classic-logo__brand', theme)\n .display('flex')\n .alignItems('center')\n .justifyContent('space-between')\n .fontSize(resolveLogoVar('brand-size'))\n .fontWeight('800')\n\n styleBuilder\n .select('.classic-logo__brand-letter', theme)\n .whiteSpace('nowrap')\n .backgroundClip('text')\n .webkitBackgroundClip('text')\n .color('transparent')\n .webkitTextFillColor('transparent')\n\n styleBuilder\n .select('.classic-logo__subtitle', theme)\n .display('flex')\n .justifyContent('space-between')\n .fontSize(resolveLogoVar('subtitle-size'))\n .fontWeight('700')\n .color(palette.current.text.subtle)\n .marginLeft(resolveLogoVar('subtitle-inset'))\n .marginRight(resolveLogoVar('subtitle-inset'))\n\n styleBuilder\n .select('.classic-logo__subtitle-letter', theme)\n .backgroundClip('text')\n .webkitBackgroundClip('text')\n .color('transparent')\n .webkitTextFillColor('transparent')\n}\n\nexport function registerClassicLogoResponsiveStyles(theme: ThemeMode) {\n styleBuilder\n .select('.classic-logo__glyph', theme)\n .media(mediaMin(BREAKPOINTS.sm))\n .width(resolveLogoVar('icon-size', 'sm'))\n .height(resolveLogoVar('icon-size', 'sm'))\n .minWidth(resolveLogoVar('icon-size', 'sm'))\n .minHeight(resolveLogoVar('icon-size', 'sm'))\n\n styleBuilder\n .select('.classic-logo__glyph', theme)\n .media(mediaMin(BREAKPOINTS.md))\n .width(resolveLogoVar('icon-size', 'md'))\n .height(resolveLogoVar('icon-size', 'md'))\n .minWidth(resolveLogoVar('icon-size', 'md'))\n .minHeight(resolveLogoVar('icon-size', 'md'))\n\n styleBuilder\n .select('.classic-logo__glyph', theme)\n .media(mediaMin(BREAKPOINTS.lg))\n .width(resolveLogoVar('icon-size', 'lg'))\n .height(resolveLogoVar('icon-size', 'lg'))\n .minWidth(resolveLogoVar('icon-size', 'lg'))\n .minHeight(resolveLogoVar('icon-size', 'lg'))\n\n styleBuilder\n .select('.classic-logo__glyph', theme)\n .media(mediaMin(BREAKPOINTS.xl))\n .width(resolveLogoVar('icon-size', 'xl'))\n .height(resolveLogoVar('icon-size', 'xl'))\n .minWidth(resolveLogoVar('icon-size', 'xl'))\n .minHeight(resolveLogoVar('icon-size', 'xl'))\n\n styleBuilder\n .select('.classic-logo__brand', theme)\n .media(mediaMin(BREAKPOINTS.sm))\n .fontSize(resolveLogoVar('brand-size', 'sm'))\n\n styleBuilder\n .select('.classic-logo__brand', theme)\n .media(mediaMin(BREAKPOINTS.md))\n .fontSize(resolveLogoVar('brand-size', 'md'))\n\n styleBuilder\n .select('.classic-logo__brand', theme)\n .media(mediaMin(BREAKPOINTS.lg))\n .fontSize(resolveLogoVar('brand-size', 'lg'))\n\n styleBuilder\n .select('.classic-logo__brand', theme)\n .media(mediaMin(BREAKPOINTS.xl))\n .fontSize(resolveLogoVar('brand-size', 'xl'))\n\n styleBuilder\n .select('.classic-logo__subtitle', theme)\n .media(mediaMin(BREAKPOINTS.sm))\n .fontSize(resolveLogoVar('subtitle-size', 'sm'))\n .marginLeft(resolveLogoVar('subtitle-inset', 'sm'))\n .marginRight(resolveLogoVar('subtitle-inset', 'sm'))\n\n styleBuilder\n .select('.classic-logo__subtitle', theme)\n .media(mediaMin(BREAKPOINTS.md))\n .fontSize(resolveLogoVar('subtitle-size', 'md'))\n .marginLeft(resolveLogoVar('subtitle-inset', 'md'))\n .marginRight(resolveLogoVar('subtitle-inset', 'md'))\n\n styleBuilder\n .select('.classic-logo__subtitle', theme)\n .media(mediaMin(BREAKPOINTS.lg))\n .fontSize(resolveLogoVar('subtitle-size', 'lg'))\n .marginLeft(resolveLogoVar('subtitle-inset', 'lg'))\n .marginRight(resolveLogoVar('subtitle-inset', 'lg'))\n\n styleBuilder\n .select('.classic-logo__subtitle', theme)\n .media(mediaMin(BREAKPOINTS.xl))\n .fontSize(resolveLogoVar('subtitle-size', 'xl'))\n .marginLeft(resolveLogoVar('subtitle-inset', 'xl'))\n .marginRight(resolveLogoVar('subtitle-inset', 'xl'))\n}\n\nfunction resolveLogoVar(\n token: LogoResponsiveToken,\n breakpoint?: LogoBreakpoint,\n): string {\n if (!breakpoint) {\n return `var(--ps-classic-logo-${token}, ${getLogoDefaultValue(token, 'base')})`\n }\n\n return `var(--ps-classic-logo-${token}-${breakpoint}, ${getLogoDefaultValue(token, breakpoint)})`\n}\n\nfunction getLogoDefaultValue(\n token: LogoResponsiveToken,\n breakpoint: 'base' | LogoBreakpoint,\n): string {\n switch (token) {\n case 'brand-size':\n return LOGO_DEFAULTS.brandSize[breakpoint]\n case 'subtitle-size':\n return LOGO_DEFAULTS.subtitleSize[breakpoint]\n case 'icon-size':\n return LOGO_DEFAULTS.iconSize[breakpoint]\n case 'subtitle-inset':\n return LOGO_DEFAULTS.subtitleInset[breakpoint]\n }\n}\n\nexport function registerClassicLogoInteractiveStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.classic-logo__link[href]', theme)\n .cursor('pointer')\n .transition('border-color 180ms ease')\n\n styleBuilder\n .select('.classic-logo__link[href]:hover', theme)\n .borderColor(palette.current.border.default)\n\n styleBuilder\n .select('.classic-logo__link[href]:focus-visible', theme)\n .outline(`2px solid ${palette.current.border.focus}`)\n .outlineOffset('0')\n}\n","import { styleBuilder } from '@purestack/ts-style'\nimport type { ComposerCanvasStyleContext } from './composerCanvasStyleTypes'\n\nconst EMAIL_FONT =\n '0.9375rem/1.55 system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Arial, sans-serif'\n\nexport function registerComposerCanvasPreviewDefaults({\n theme,\n}: ComposerCanvasStyleContext) {\n styleBuilder\n .select('.composer__editor', theme)\n .display('block')\n .width('100%')\n .boxSizing('border-box')\n .padding('0')\n .border('none')\n .borderRadius('0')\n .outline('none')\n .background('#fff')\n .color('#182018')\n .font(EMAIL_FONT)\n .overflowY('auto')\n .overflowWrap('anywhere')\n .whiteSpace('normal')\n .cursor('text')\n .set('caret-color', '#182018')\n .set('user-select', 'text')\n .set('-webkit-user-select', 'text')\n\n styleBuilder\n .select('.composer__editor:empty::before', theme)\n .content('attr(data-placeholder)')\n .color('#777')\n .pointerEvents('none')\n\n styleBuilder\n .select('.composer__editor [data-composer-body]:empty::before', theme)\n .content('attr(data-placeholder)')\n .color('#777')\n .pointerEvents('none')\n\n styleBuilder\n .select('.composer__editor a', theme)\n .color('#1368d8')\n .textDecoration('underline')\n\n styleBuilder\n .select('.composer__editor img', theme)\n .maxWidth('100%')\n .height('auto')\n\n styleBuilder\n .select('.composer__editor table', theme)\n .maxWidth('100%')\n .borderCollapse('collapse')\n\n styleBuilder.select('.composer__editor p:first-child', theme).marginTop('0')\n\n styleBuilder.select('.composer__editor p:last-child', theme).marginBottom('0')\n}\n","import { styleBuilder } from '@purestack/ts-style'\nimport { registerComposerCanvasPreviewDefaults } from './composerCanvasSharedStyle'\nimport type { ComposerCanvasStyleContext } from './composerCanvasStyleTypes'\n\nexport function registerComposerInitialCanvasStyles(\n context: ComposerCanvasStyleContext,\n) {\n styleBuilder\n .select('.composer__editor, .composer__editor *', context.theme)\n .all('initial')\n .boxSizing('border-box')\n\n styleBuilder\n .select('.composer__editor *', context.theme)\n .font('inherit')\n .color('inherit')\n .lineHeight('inherit')\n .caretColor('inherit')\n .textAlign('inherit')\n\n registerComposerCanvasPreviewDefaults(context)\n registerComposerInitialCanvasElementDefaults(context)\n}\n\nfunction registerComposerInitialCanvasElementDefaults({\n theme,\n}: ComposerCanvasStyleContext) {\n styleBuilder\n .select(\n [\n '.composer__editor b',\n '.composer__editor cite',\n '.composer__editor code',\n '.composer__editor del',\n '.composer__editor em',\n '.composer__editor font',\n '.composer__editor i',\n '.composer__editor ins',\n '.composer__editor kbd',\n '.composer__editor s',\n '.composer__editor samp',\n '.composer__editor small',\n '.composer__editor span',\n '.composer__editor strong',\n '.composer__editor sub',\n '.composer__editor sup',\n '.composer__editor tt',\n '.composer__editor u',\n '.composer__editor var',\n ].join(', '),\n theme,\n )\n .display('inline')\n .font('inherit')\n .color('inherit')\n\n styleBuilder\n .select(\n [\n '.composer__editor address',\n '.composer__editor blockquote',\n '.composer__editor caption',\n '.composer__editor center',\n '.composer__editor dd',\n '.composer__editor div',\n '.composer__editor dl',\n '.composer__editor dt',\n '.composer__editor h1',\n '.composer__editor h2',\n '.composer__editor h3',\n '.composer__editor h4',\n '.composer__editor h5',\n '.composer__editor h6',\n '.composer__editor hr',\n '.composer__editor ol',\n '.composer__editor p',\n '.composer__editor pre',\n '.composer__editor ul',\n ].join(', '),\n theme,\n )\n .display('block')\n .font('inherit')\n .color('inherit')\n .lineHeight('inherit')\n .caretColor('inherit')\n\n styleBuilder\n .select('.composer__editor div:empty, .composer__editor p:empty', theme)\n .minHeight('1.55em')\n\n styleBuilder\n .select('.composer__editor br', theme)\n .display('inline')\n .font('inherit')\n .lineHeight('inherit')\n .caretColor('inherit')\n\n styleBuilder\n .select('.composer__editor strong, .composer__editor b', theme)\n .fontWeight('bold')\n\n styleBuilder\n .select(\n '.composer__editor em, .composer__editor i, .composer__editor cite',\n theme,\n )\n .fontStyle('italic')\n\n styleBuilder.select('.composer__editor small', theme).fontSize('80%')\n\n styleBuilder\n .select('.composer__editor sub', theme)\n .fontSize('75%')\n .verticalAlign('sub')\n\n styleBuilder\n .select('.composer__editor sup', theme)\n .fontSize('75%')\n .verticalAlign('super')\n\n styleBuilder\n .select('.composer__editor h1', theme)\n .fontSize('2em')\n .fontWeight('bold')\n .margin('0.67em 0')\n\n styleBuilder\n .select('.composer__editor h2', theme)\n .fontSize('1.5em')\n .fontWeight('bold')\n .margin('0.83em 0')\n\n styleBuilder\n .select('.composer__editor h3', theme)\n .fontSize('1.17em')\n .fontWeight('bold')\n .margin('1em 0')\n\n styleBuilder\n .select('.composer__editor h4', theme)\n .fontWeight('bold')\n .margin('1.33em 0')\n\n styleBuilder\n .select('.composer__editor h5', theme)\n .fontSize('0.83em')\n .fontWeight('bold')\n .margin('1.67em 0')\n\n styleBuilder\n .select('.composer__editor h6', theme)\n .fontSize('0.67em')\n .fontWeight('bold')\n .margin('2.33em 0')\n\n styleBuilder\n .select('.composer__editor blockquote', theme)\n .margin('1em 2.5rem')\n\n styleBuilder\n .select(\n '.composer__editor pre, .composer__editor code, .composer__editor kbd, .composer__editor samp, .composer__editor tt',\n theme,\n )\n .fontFamily('monospace')\n\n styleBuilder\n .select('.composer__editor ol, .composer__editor ul', theme)\n .margin('1em 0')\n .paddingLeft('2.5rem')\n\n styleBuilder\n .select('.composer__editor li', theme)\n .display('list-item')\n .listStyle('inherit')\n\n styleBuilder\n .select('.composer__editor u, .composer__editor ins', theme)\n .textDecoration('underline')\n\n styleBuilder\n .select('.composer__editor s, .composer__editor del', theme)\n .textDecoration('line-through')\n\n styleBuilder.select('.composer__editor ul', theme).listStyle('disc')\n\n styleBuilder.select('.composer__editor ol', theme).listStyle('decimal')\n\n styleBuilder.select('.composer__editor table', theme).display('table')\n\n styleBuilder\n .select('.composer__editor caption', theme)\n .display('table-caption')\n\n styleBuilder\n .select('.composer__editor colgroup', theme)\n .display('table-column-group')\n\n styleBuilder.select('.composer__editor col', theme).display('table-column')\n\n styleBuilder\n .select('.composer__editor thead', theme)\n .display('table-header-group')\n\n styleBuilder\n .select('.composer__editor tbody', theme)\n .display('table-row-group')\n\n styleBuilder\n .select('.composer__editor tfoot', theme)\n .display('table-footer-group')\n\n styleBuilder.select('.composer__editor tr', theme).display('table-row')\n\n styleBuilder\n .select('.composer__editor td, .composer__editor th', theme)\n .display('table-cell')\n .verticalAlign('inherit')\n\n styleBuilder\n .select('.composer__editor th', theme)\n .fontWeight('bold')\n .textAlign('center')\n}\n","import type { ThemePalette } from '@purestack/ts-style'\nimport { styleBuilder, type ThemeMode, themes } from '@purestack/ts-style'\nimport { registerComposerInitialCanvasStyles } from './composerCanvasInitialStyle'\nimport { registerComposerRevertCanvasStyles } from './composerCanvasRevertStyle'\nimport type { ComposerCanvasStyleOption } from './composerCanvasStyleTypes'\nimport { registerComposerThemeCanvasStyles } from './composerCanvasThemeStyle'\n\nconst COMPOSER_CANVAS_STYLE: ComposerCanvasStyleOption = 'initial'\n\nexport function registerComposerStyles() {\n themes.forEach((theme, palette) => {\n registerComposerFieldStyles(theme, palette)\n registerComposerShellStyles(theme, palette)\n registerComposerToolbarStyles(theme, palette)\n registerComposerSurfaceStyles(theme, palette)\n })\n}\n\nfunction registerComposerFieldStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder\n .select('.composer-field', theme)\n .display('grid')\n .minWidth('0')\n .gap('0.6em')\n styleBuilder\n .select('.composer-field__label', theme)\n .apply(palette.applyFont(palette.font.size.xxs, palette.font.weight.w700))\n .color(palette.current.tone)\n .lineHeight('1')\n}\n\nfunction registerComposerShellStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder\n .select('.composer', theme)\n .display('grid')\n .width('100%')\n .boxSizing('border-box')\n .overflow('hidden')\n .borderRadius(palette.radii.md)\n .transition('border-color 160ms ease, box-shadow 160ms ease')\n\n styleBuilder\n .select('.composer:focus-within', theme)\n .borderColor(palette.current.border.default)\n .boxShadow(`0 0 0 3px ${palette.current.border.focus}`)\n}\n\nfunction registerComposerToolbarStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.composer__toolbar', theme)\n .display('flex')\n .flexWrap('wrap')\n .alignItems('center')\n .gap('0.25rem')\n .padding('0.35em')\n .borderBottom(`1px solid ${palette.current.border.default}`)\n .background(palette.current.surfaceAlt.rest.background)\n\n styleBuilder\n .select('.composer__tool', theme)\n .display('inline-flex')\n .flexShrink('0')\n .alignItems('center')\n .justifyContent('center')\n .width('2.1em')\n .height('2.1em')\n .padding('0')\n .border('none')\n .borderRadius('0.375rem')\n .background('transparent')\n .color(palette.current.text.default)\n .cursor('pointer')\n .transition('background 150ms ease, color 150ms ease')\n\n styleBuilder\n .select('.composer__tool:hover:not(:disabled)', theme)\n .background(palette.current.button.hover.background)\n .color(palette.current.button.hover.text)\n\n styleBuilder\n .select('.composer__tool[aria-pressed=\"true\"]', theme)\n .background(palette.current.button.active.background)\n .color(palette.current.button.active.text)\n\n styleBuilder\n .select('.composer__tool:disabled', theme)\n .cursor('not-allowed')\n .opacity('0.55')\n\n styleBuilder\n .select('.composer__tool .icon', theme)\n .width('1.1em')\n .height('1.1em')\n\n styleBuilder\n .select('.composer__divider', theme)\n .width('1px')\n .height('1.4em')\n .margin('0 0.2em')\n .background(palette.current.border.default)\n\n styleBuilder.select('.composer__tool--source', theme).marginLeft('auto')\n}\n\nfunction registerComposerSurfaceStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.composer__surface', theme)\n .position('relative')\n .overflowX('auto')\n\n registerComposerCanvasStyles(theme, palette)\n\n styleBuilder\n .select('.composer__source', theme)\n .width('100%')\n .boxSizing('border-box')\n .padding('0.85em 0.95em')\n .border('none')\n .borderRadius('0')\n .outline('none')\n .background('transparent')\n .color(palette.current.text.default)\n .apply(palette.applyFont(palette.font.size.body))\n .lineHeight('1.55')\n\n styleBuilder\n .select('.composer__source', theme)\n .display('block')\n .resize('vertical')\n .fontFamily('ui-monospace, SFMono-Regular, Menlo, Consolas, monospace')\n .background(palette.current.surface.rest.background)\n .borderTop(`1px solid ${palette.current.border.default}`)\n .borderBottomLeftRadius(palette.radii.md)\n .borderBottomRightRadius(palette.radii.md)\n}\n\nfunction registerComposerCanvasStyles(theme: ThemeMode, palette: ThemePalette) {\n const context = { palette, theme }\n if (COMPOSER_CANVAS_STYLE === 'theme') {\n registerComposerThemeCanvasStyles(context)\n return\n }\n\n if (COMPOSER_CANVAS_STYLE === 'initial') {\n registerComposerInitialCanvasStyles(context)\n return\n }\n\n registerComposerRevertCanvasStyles(context)\n}\n","import {\n BREAKPOINTS,\n getBreakpoint,\n styleBuilder,\n type ThemeMode,\n themes,\n} from '@purestack/ts-style'\n\nexport function registerConsentStyles() {\n themes.forEach((theme) => {\n registerConsentPlacementStyles(theme)\n })\n}\n\nfunction registerConsentPlacementStyles(theme: ThemeMode) {\n styleBuilder\n .select('.consent', theme)\n .position('fixed')\n .left('0')\n .right('0')\n .bottom('0')\n .zIndex(1200)\n .pointerEvents('none')\n\n styleBuilder\n .select('.consent__banner', theme)\n .pointerEvents('auto')\n .margin('0 auto 1em')\n .width(`min(${getBreakpoint(BREAKPOINTS.lg)}, calc(100vw - 2em))`)\n\n styleBuilder\n .select('.consent__panel', theme)\n .pointerEvents('auto')\n .position('fixed')\n .right('0.75em')\n .bottom('4rem')\n .left('0.75em')\n .width(`min(${getBreakpoint(BREAKPOINTS.sm)}, calc(100vw - 2em))`)\n .marginLeft('auto')\n\n styleBuilder\n .select('.consent__banner[hidden], .consent__panel[hidden]', theme)\n .display('none')\n}\n","import type { ThemePalette } from '@purestack/ts-style'\nimport {\n BREAKPOINTS,\n mediaMax,\n styleBuilder,\n type ThemeMode,\n themes,\n} from '@purestack/ts-style'\n\nexport function registerContactFormStyles() {\n themes.forEach((theme, palette) => {\n registerContactFormShellStyles(theme, palette)\n registerContactFormFieldStyles(theme, palette)\n registerContactFormActionStyles(theme)\n registerContactFormResponsiveStyles(theme)\n })\n}\n\nfunction registerContactFormShellStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.contact-form', theme)\n .margin('1.25rem 0 0')\n .padding('1.125rem')\n .display('grid')\n .gap('0.875rem')\n .borderRadius(palette.radii.lg)\n .background(palette.current.surface.rest.background)\n .border(`1px solid ${palette.current.border.default}`)\n .boxShadow(palette.effect.panelShadow)\n styleBuilder\n .select('.contact-form__header', theme)\n .display('grid')\n .gap('0.375rem')\n styleBuilder\n .select('.contact-form__title', theme)\n .margin('0')\n .fontSize('1.05rem')\n .fontWeight('760')\n .letterSpacing('-0.01em')\n .color(palette.current.text.default)\n styleBuilder\n .select('.contact-form__description', theme)\n .margin('0')\n .fontSize('0.93rem')\n .lineHeight('1.6')\n .color(palette.current.text.subtle)\n styleBuilder\n .select('.contact-form__form', theme)\n .display('grid')\n .gap('0.625rem')\n}\n\nfunction registerContactFormFieldStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.contact-form__field', theme)\n .display('grid')\n .gap('0.375rem')\n styleBuilder\n .select('.contact-form__label', theme)\n .fontSize('0.86rem')\n .fontWeight('700')\n .color(palette.current.text.default)\n styleBuilder\n .select(\n '.contact-form__input, .contact-form__select, .contact-form__textarea',\n theme,\n )\n .width('100%')\n .padding('0.625rem 0.75rem')\n .borderRadius(palette.radii.md)\n .border(`1px solid ${palette.current.border.default}`)\n .background(palette.current.surfaceAlt.rest.background)\n .color(palette.current.text.default)\n .fontSize('0.92rem')\n .lineHeight('1.45')\n .boxSizing('border-box')\n .appearance('none')\n styleBuilder\n .select('.contact-form__textarea', theme)\n .resize('vertical')\n .minHeight('8.25rem')\n styleBuilder\n .select(\n '.contact-form__input::placeholder, .contact-form__textarea::placeholder',\n theme,\n )\n .color(palette.current.text.subtle)\n styleBuilder\n .select(\n '.contact-form__input:focus-visible, .contact-form__select:focus-visible, .contact-form__textarea:focus-visible',\n theme,\n )\n .outline(`2px solid ${palette.current.border.focus}`)\n .borderColor(palette.current.border.default)\n}\n\nfunction registerContactFormActionStyles(theme: ThemeMode) {\n styleBuilder\n .select('.contact-form__actions', theme)\n .display('flex')\n .justifyContent('flex-start')\n .paddingTop('0.125rem')\n}\n\nfunction registerContactFormResponsiveStyles(theme: ThemeMode) {\n styleBuilder\n .select('.contact-form', theme)\n .media(mediaMax(BREAKPOINTS.sm))\n .padding('0.875rem')\n}\n","import {\n styleBuilder,\n type ThemeMode,\n type ThemePalette,\n themes,\n} from '@purestack/ts-style'\n\nexport function registerDoughnutChartStyles() {\n themes.forEach((theme, palette) => {\n registerDoughnutChartBaseStyles(theme)\n registerDoughnutChartPaintStyles(theme, palette)\n })\n}\n\nfunction registerDoughnutChartBaseStyles(theme: ThemeMode) {\n styleBuilder\n .select('.doughnut-chart__segment', theme)\n .transition('opacity 180ms ease, filter 180ms ease, transform 180ms ease')\n .transformOrigin('50px 50px')\n\n styleBuilder\n .select('.doughnut-chart__segments:hover .doughnut-chart__segment', theme)\n .opacity('0.72')\n\n styleBuilder\n .select(\n '.doughnut-chart__segments:hover .doughnut-chart__segment:hover',\n theme,\n )\n .opacity('1')\n .filter('brightness(1.08)')\n\n styleBuilder\n .select('.doughnut-chart__center, .doughnut-chart__empty', theme)\n .pointerEvents('none')\n}\n\nfunction registerDoughnutChartPaintStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.doughnut-chart__track', theme)\n .fill(palette.current.surfaceAlt.rest.bgcolor)\n\n styleBuilder\n .select('.doughnut-chart__center-value', theme)\n .fill(palette.current.text.default)\n .apply(palette.applyFont(palette.font.size.body, palette.font.weight.w700))\n .set('dominant-baseline', 'middle')\n\n styleBuilder\n .select('.doughnut-chart__center-label', theme)\n .fill(palette.current.text.subtle)\n .apply(palette.applyFont(palette.font.size.xxxs, palette.font.weight.w700))\n .textTransform('uppercase')\n .set('dominant-baseline', 'middle')\n\n styleBuilder\n .select('.doughnut-chart__empty', theme)\n .fill(palette.current.text.subtle)\n .apply(palette.applyFont(palette.font.size.xxs, palette.font.weight.w700))\n .set('dominant-baseline', 'middle')\n}\n","import type { ThemePalette } from '@purestack/ts-style'\nimport { styleBuilder, type ThemeMode, themes } from '@purestack/ts-style'\n\nexport function registerDropFilesStyles() {\n themes.forEach((theme, palette) => {\n registerDropFilesFieldStyles(theme, palette)\n registerDropFilesZoneStyles(theme, palette)\n registerDropFilesListStyles(theme, palette)\n })\n}\n\nfunction registerDropFilesFieldStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder.select('.drop-files', theme).display('grid').gap('0.65em')\n\n styleBuilder\n .select('.drop-files__label', theme)\n .apply(palette.applyFont(palette.font.size.xxs, palette.font.weight.w700))\n .color(palette.current.tone)\n .lineHeight('1')\n\n styleBuilder\n .select('.drop-files__input', theme)\n .position('absolute')\n .width('1px')\n .height('1px')\n .overflow('hidden')\n .clip('rect(0 0 0 0)')\n .whiteSpace('nowrap')\n}\n\nfunction registerDropFilesZoneStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder\n .select('.drop-files__zone', theme)\n .display('grid')\n .justifyItems('center')\n .gap('0.35em')\n .boxSizing('border-box')\n .width('100%')\n .minHeight('9em')\n .padding('1.25em')\n .borderRadius(palette.radii.md)\n .border(`1px dashed ${palette.current.border.default}`)\n .background(palette.current.surfaceAlt.rest.background)\n .color(palette.current.text.default)\n .cursor('pointer')\n .textAlign('center')\n .transition(\n 'border-color 160ms ease, background 160ms ease, box-shadow 160ms ease',\n )\n\n styleBuilder\n .select('.drop-files__zone:hover:not(.drop-files__zone--disabled)', theme)\n .borderColor(palette.current.tone)\n .background(palette.current.surface.rest.background)\n\n styleBuilder\n .select('.drop-files__zone:focus-visible', theme)\n .outline('none')\n .borderColor(palette.current.border.default)\n .boxShadow(`0 0 0 3px ${palette.current.border.focus}`)\n\n styleBuilder\n .select('.drop-files__zone--dragging', theme)\n .borderColor(palette.current.tone)\n .background(palette.current.button.hover.background)\n .boxShadow(`0 0 0 3px ${palette.current.border.focus}`)\n\n styleBuilder\n .select('.drop-files__zone--disabled', theme)\n .cursor('not-allowed')\n .opacity('0.58')\n\n styleBuilder\n .select('.drop-files__zone-icon', theme)\n .width('2.2em')\n .height('2.2em')\n .color(palette.current.tone)\n\n styleBuilder\n .select('.drop-files__zone-title', theme)\n .apply(palette.applyFont(palette.font.size.sm, palette.font.weight.w700))\n\n styleBuilder\n .select('.drop-files__zone-text, .drop-files__hint', theme)\n .apply(palette.applyFont(palette.font.size.xs))\n .color(palette.current.text.subtle)\n}\n\nfunction registerDropFilesListStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder\n .select('.drop-files__list', theme)\n .display('grid')\n .gap('0.45em')\n .padding('0')\n .margin('0')\n .listStyle('none')\n\n styleBuilder\n .select('.drop-files__item', theme)\n .display('grid')\n .gridTemplateColumns('auto minmax(0, 1fr) auto')\n .alignItems('center')\n .gap('0.65em')\n .boxSizing('border-box')\n .padding('0.6em')\n .borderRadius(palette.radii.md)\n .border(`1px solid ${palette.current.border.subtle}`)\n .background(palette.current.surface.rest.background)\n\n styleBuilder\n .select('.drop-files__item-icon', theme)\n .display('inline-grid')\n .placeItems('center')\n .width('2em')\n .height('2em')\n .borderRadius(palette.radii.sm)\n .background(palette.current.surfaceAlt.rest.background)\n .color(palette.current.tone)\n\n styleBuilder\n .select('.drop-files__item-icon .icon', theme)\n .width('1.1em')\n .height('1.1em')\n\n styleBuilder\n .select('.drop-files__item-body', theme)\n .display('grid')\n .minWidth('0')\n .gap('0.15em')\n\n styleBuilder\n .select('.drop-files__item-name', theme)\n .overflow('hidden')\n .textOverflow('ellipsis')\n .whiteSpace('nowrap')\n .apply(palette.applyFont(palette.font.size.sm, palette.font.weight.w700))\n\n styleBuilder\n .select('.drop-files__item-meta', theme)\n .apply(palette.applyFont(palette.font.size.xxs))\n .color(palette.current.text.subtle)\n\n styleBuilder\n .select('.drop-files__remove', theme)\n .display('inline-grid')\n .placeItems('center')\n .width('2.1em')\n .height('2.1em')\n .padding('0')\n .border('none')\n .borderRadius(palette.radii.sm)\n .background('transparent')\n .color(palette.current.text.subtle)\n .cursor('pointer')\n .transition('background 150ms ease, color 150ms ease')\n\n styleBuilder\n .select('.drop-files__remove:hover:not(:disabled)', theme)\n .background(palette.current.button.hover.background)\n .color(palette.current.button.hover.text)\n\n styleBuilder\n .select('.drop-files__remove:disabled', theme)\n .cursor('not-allowed')\n .opacity('0.55')\n\n styleBuilder\n .select('.drop-files__remove .icon', theme)\n .width('1em')\n .height('1em')\n}\n","import {\n styleBuilder,\n type ThemeMode,\n type ThemePalette,\n themes,\n} from '@purestack/ts-style'\n\nexport function registerExpandablePanelStyles() {\n themes.forEach((theme, palette) => {\n registerExpandablePanelShellStyles(theme, palette)\n registerExpandablePanelSummaryStyles(theme, palette)\n })\n}\n\nfunction registerExpandablePanelShellStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.expandable-panel', theme)\n .boxShadow(palette.effect.panelShadow)\n .padding('0')\n .overflow('hidden')\n .transition(\n 'border-color 180ms ease, box-shadow 180ms ease, background 180ms ease',\n )\n\n styleBuilder\n .select('.expandable-panel[open]', theme)\n .boxShadow(palette.effect.panelShadowStrong)\n}\n\nfunction registerExpandablePanelSummaryStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.expandable-panel[open] .expandable-panel__summary', theme)\n .borderBottomLeftRadius('0 !important')\n .borderBottomRightRadius('0 !important')\n\n styleBuilder\n .select('.expandable-panel__summary:focus-visible', theme)\n .outline(`2px solid ${palette.current.border.focus}`)\n .outlineOffset('-2px')\n\n styleBuilder\n .select('.expandable-panel__chevron', theme)\n .transition(\n 'transform 180ms ease, color 180ms ease, border-color 180ms ease, background 180ms ease',\n )\n\n styleBuilder\n .select('.expandable-panel[open] .expandable-panel__chevron', theme)\n .transform('rotate(180deg)')\n}\n","import type { Style } from '@purestack/ts-css'\nimport {\n BREAKPOINTS,\n mediaMin,\n styleBuilder,\n themes,\n} from '@purestack/ts-style'\n\nexport function registerFlexStyles() {\n themes.forEach((theme) => {\n styleBuilder\n .select('.flex', theme)\n .display('flex')\n .minWidth('0')\n .gap('0.75rem')\n .flexDirection('row')\n .alignItems('stretch')\n .justifyContent('flex-start')\n .flexWrap('nowrap')\n\n styleBuilder.select('.flex > *', theme).minWidth('0')\n\n styleBuilder.select('.flex-inline', theme).display('inline-flex')\n styleBuilder.select('.flex-column', theme).flexDirection('column')\n styleBuilder\n .select('.flex-column-reverse', theme)\n .flexDirection('column-reverse')\n styleBuilder.select('.flex-row-reverse', theme).flexDirection('row-reverse')\n\n styleBuilder.select('.align-stretch', theme).alignItems('stretch')\n styleBuilder.select('.align-start', theme).alignItems('start')\n styleBuilder.select('.align-flex-start', theme).alignItems('flex-start')\n styleBuilder.select('.align-center', theme).alignItems('center')\n styleBuilder.select('.align-end', theme).alignItems('end')\n styleBuilder.select('.align-flex-end', theme).alignItems('flex-end')\n styleBuilder.select('.align-baseline', theme).alignItems('baseline')\n\n styleBuilder.select('.justify-start', theme).justifyContent('flex-start')\n styleBuilder.select('.justify-center', theme).justifyContent('center')\n styleBuilder.select('.justify-end', theme).justifyContent('flex-end')\n styleBuilder.select('.justify-stretch', theme).justifyContent('stretch')\n styleBuilder\n .select('.justify-between', theme)\n .justifyContent('space-between')\n styleBuilder.select('.justify-around', theme).justifyContent('space-around')\n styleBuilder.select('.justify-evenly', theme).justifyContent('space-evenly')\n\n styleBuilder.select('.self-stretch', theme).alignSelf('stretch')\n styleBuilder.select('.self-start', theme).alignSelf('flex-start')\n styleBuilder.select('.self-center', theme).alignSelf('center')\n styleBuilder.select('.self-end', theme).alignSelf('flex-end')\n\n styleBuilder.select('.flex-wrap', theme).flexWrap('wrap')\n styleBuilder.select('.flex-wrap-reverse', theme).flexWrap('wrap-reverse')\n\n applyResponsiveFlexUtilities(theme)\n\n styleBuilder.select('.flex-auto', theme).flex('1 1 auto').minWidth('0')\n styleBuilder.select('.flex-none', theme).flex('0 0 auto')\n styleBuilder.select('.flex-fill', theme).flex('1 1 0%')\n styleBuilder.select('.flex-1', theme).flex('1 1 0%').minWidth('0')\n })\n}\n\nfunction applyResponsiveFlexUtilities(theme: string) {\n applyResponsiveFlexDirectionStyles(theme)\n applyResponsiveFlexAlignStyles(theme)\n applyResponsiveFlexJustifyStyles(theme)\n applyResponsiveFlexWrapStyles(theme)\n}\n\nfunction applyResponsiveFlexDirectionStyles(theme: string) {\n applyResponsiveFlexStyle(\n theme,\n '.flex-direction-sm-row',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.flexDirection('row'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-direction-sm-column',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.flexDirection('column'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-direction-sm-column-reverse',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.flexDirection('column-reverse'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-direction-sm-row-reverse',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.flexDirection('row-reverse'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-direction-md-row',\n mediaMin(BREAKPOINTS.md),\n (style) => style.flexDirection('row'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-direction-md-column',\n mediaMin(BREAKPOINTS.md),\n (style) => style.flexDirection('column'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-direction-md-column-reverse',\n mediaMin(BREAKPOINTS.md),\n (style) => style.flexDirection('column-reverse'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-direction-md-row-reverse',\n mediaMin(BREAKPOINTS.md),\n (style) => style.flexDirection('row-reverse'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-direction-lg-row',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.flexDirection('row'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-direction-lg-column',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.flexDirection('column'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-direction-lg-column-reverse',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.flexDirection('column-reverse'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-direction-lg-row-reverse',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.flexDirection('row-reverse'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-direction-xl-row',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.flexDirection('row'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-direction-xl-column',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.flexDirection('column'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-direction-xl-column-reverse',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.flexDirection('column-reverse'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-direction-xl-row-reverse',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.flexDirection('row-reverse'),\n )\n}\n\nfunction applyResponsiveFlexAlignStyles(theme: string) {\n applyResponsiveFlexStyle(\n theme,\n '.align-sm-stretch',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.alignItems('stretch'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.align-sm-flex-start',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.alignItems('flex-start'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.align-sm-center',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.alignItems('center'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.align-sm-flex-end',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.alignItems('flex-end'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.align-sm-baseline',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.alignItems('baseline'),\n )\n\n applyResponsiveFlexStyle(\n theme,\n '.align-md-stretch',\n mediaMin(BREAKPOINTS.md),\n (style) => style.alignItems('stretch'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.align-md-flex-start',\n mediaMin(BREAKPOINTS.md),\n (style) => style.alignItems('flex-start'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.align-md-center',\n mediaMin(BREAKPOINTS.md),\n (style) => style.alignItems('center'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.align-md-flex-end',\n mediaMin(BREAKPOINTS.md),\n (style) => style.alignItems('flex-end'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.align-md-baseline',\n mediaMin(BREAKPOINTS.md),\n (style) => style.alignItems('baseline'),\n )\n\n applyResponsiveFlexStyle(\n theme,\n '.align-lg-stretch',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.alignItems('stretch'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.align-lg-flex-start',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.alignItems('flex-start'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.align-lg-center',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.alignItems('center'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.align-lg-flex-end',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.alignItems('flex-end'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.align-lg-baseline',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.alignItems('baseline'),\n )\n\n applyResponsiveFlexStyle(\n theme,\n '.align-xl-stretch',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.alignItems('stretch'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.align-xl-flex-start',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.alignItems('flex-start'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.align-xl-center',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.alignItems('center'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.align-xl-flex-end',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.alignItems('flex-end'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.align-xl-baseline',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.alignItems('baseline'),\n )\n}\n\nfunction applyResponsiveFlexJustifyStyles(theme: string) {\n applyResponsiveFlexStyle(\n theme,\n '.justify-sm-start',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.justifyContent('flex-start'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-sm-center',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.justifyContent('center'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-sm-end',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.justifyContent('flex-end'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-sm-stretch',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.justifyContent('stretch'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-sm-between',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.justifyContent('space-between'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-sm-around',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.justifyContent('space-around'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-sm-evenly',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.justifyContent('space-evenly'),\n )\n\n applyResponsiveFlexStyle(\n theme,\n '.justify-md-start',\n mediaMin(BREAKPOINTS.md),\n (style) => style.justifyContent('flex-start'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-md-center',\n mediaMin(BREAKPOINTS.md),\n (style) => style.justifyContent('center'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-md-end',\n mediaMin(BREAKPOINTS.md),\n (style) => style.justifyContent('flex-end'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-md-stretch',\n mediaMin(BREAKPOINTS.md),\n (style) => style.justifyContent('stretch'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-md-between',\n mediaMin(BREAKPOINTS.md),\n (style) => style.justifyContent('space-between'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-md-around',\n mediaMin(BREAKPOINTS.md),\n (style) => style.justifyContent('space-around'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-md-evenly',\n mediaMin(BREAKPOINTS.md),\n (style) => style.justifyContent('space-evenly'),\n )\n\n applyResponsiveFlexStyle(\n theme,\n '.justify-lg-start',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.justifyContent('flex-start'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-lg-center',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.justifyContent('center'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-lg-end',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.justifyContent('flex-end'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-lg-stretch',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.justifyContent('stretch'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-lg-between',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.justifyContent('space-between'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-lg-around',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.justifyContent('space-around'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-lg-evenly',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.justifyContent('space-evenly'),\n )\n\n applyResponsiveFlexStyle(\n theme,\n '.justify-xl-start',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.justifyContent('flex-start'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-xl-center',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.justifyContent('center'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-xl-end',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.justifyContent('flex-end'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-xl-stretch',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.justifyContent('stretch'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-xl-between',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.justifyContent('space-between'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-xl-around',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.justifyContent('space-around'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.justify-xl-evenly',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.justifyContent('space-evenly'),\n )\n}\n\nfunction applyResponsiveFlexWrapStyles(theme: string) {\n applyResponsiveFlexStyle(\n theme,\n '.flex-wrap-sm',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.flexWrap('wrap'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-nowrap-sm',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.flexWrap('nowrap'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-wrap-sm-reverse',\n mediaMin(BREAKPOINTS.sm),\n (style) => style.flexWrap('wrap-reverse'),\n )\n\n applyResponsiveFlexStyle(\n theme,\n '.flex-wrap-md',\n mediaMin(BREAKPOINTS.md),\n (style) => style.flexWrap('wrap'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-nowrap-md',\n mediaMin(BREAKPOINTS.md),\n (style) => style.flexWrap('nowrap'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-wrap-md-reverse',\n mediaMin(BREAKPOINTS.md),\n (style) => style.flexWrap('wrap-reverse'),\n )\n\n applyResponsiveFlexStyle(\n theme,\n '.flex-wrap-lg',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.flexWrap('wrap'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-nowrap-lg',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.flexWrap('nowrap'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-wrap-lg-reverse',\n mediaMin(BREAKPOINTS.lg),\n (style) => style.flexWrap('wrap-reverse'),\n )\n\n applyResponsiveFlexStyle(\n theme,\n '.flex-wrap-xl',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.flexWrap('wrap'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-nowrap-xl',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.flexWrap('nowrap'),\n )\n applyResponsiveFlexStyle(\n theme,\n '.flex-wrap-xl-reverse',\n mediaMin(BREAKPOINTS.xl),\n (style) => style.flexWrap('wrap-reverse'),\n )\n}\n\nfunction applyResponsiveFlexStyle(\n theme: string,\n selector: string,\n media: string,\n apply: (style: Style) => void,\n) {\n apply(styleBuilder.select(selector, theme).media(media))\n}\n","import type { ThemePalette } from '@purestack/ts-style'\nimport { styleBuilder, type ThemeMode, themes } from '@purestack/ts-style'\n\nexport function registerFooterStyles() {\n themes.forEach((theme, palette) => {\n applyFooterShellStyles(theme)\n applyFooterBottomStyles(theme, palette)\n })\n}\n\nexport function applyFooterShellStyles(theme: ThemeMode) {\n styleBuilder\n .select('.site-footer', theme)\n .position('relative')\n .overflow('hidden')\n .padding('0')\n}\n\nexport function applyFooterBottomStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n applyFooterBottomShellStyles(theme, palette)\n}\n\nexport function applyFooterBottomShellStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.site-footer__bottom', theme)\n .apply(palette.applyFont(palette.font.size.xxs))\n .padding('0.5em 1em 0.5em 1em')\n .color(palette.current.text.subtle)\n .borderTop(`1px solid ${palette.current.border.subtle}`)\n styleBuilder\n .select('.site-footer__bottom :where(a)', theme)\n .color(palette.current.text.subtle)\n}\n","import type { ThemePalette } from '@purestack/ts-style'\nimport {\n BREAKPOINTS,\n mediaMax,\n styleBuilder,\n type ThemeMode,\n themes,\n} from '@purestack/ts-style'\n\nexport function registerFormStyles() {\n themes.forEach((theme, palette) => {\n registerFormShellStyles(theme)\n registerFormFieldStyles(theme, palette)\n registerAutoCompleteInputStyles(theme, palette)\n registerMultiAutoCompleteInputStyles(theme, palette)\n registerFormMetaStyles(theme, palette)\n registerFormCheckStyles(theme, palette)\n registerFormStatusStyles(theme, palette)\n registerFormResponsiveStyles(theme)\n registerFormSelectFieldStyles(theme, palette)\n })\n}\n\nfunction registerFormShellStyles(theme: ThemeMode) {\n styleBuilder.select('.form-block', theme).display('grid').gap('0.75rem')\n}\n\nfunction registerFormFieldStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder.select('.form-block__field', theme).display('grid').gap('0.6em')\n styleBuilder\n .select('.form-block__label', theme)\n .apply(palette.applyFont(palette.font.size.xxs, palette.font.weight.w700))\n .color(palette.current.tone)\n .lineHeight('1')\n styleBuilder\n .select('.form-block__input-shell', theme)\n .width('100%')\n .boxSizing('border-box')\n .borderRadius(palette.radii.md)\n .transition('border-color 160ms ease, box-shadow 160ms ease')\n .display('flex')\n .alignItems('stretch')\n .overflow('hidden')\n styleBuilder\n .select(\n '.form-block__input-shell:has(.form-block__input:focus-visible)',\n theme,\n )\n .outline('none')\n .borderColor(palette.current.border.default)\n .boxShadow(`0 0 0 3px ${palette.current.border.focus}`)\n styleBuilder\n .select('.form-block__input', theme)\n .width('100%')\n .minWidth('0')\n .boxSizing('border-box')\n .padding('0.5em 0.6em')\n .border('none')\n .borderRadius('0')\n .apply(palette.applyFont(palette.font.size.sm))\n .background('transparent')\n .boxShadow('none')\n .flex('1 1 auto')\n styleBuilder\n .select('.form-block__input::placeholder', theme)\n .color(palette.current.text.subtle)\n styleBuilder.select('.form-block__input:focus-visible', theme).outline('none')\n styleBuilder\n .select('.form-block__input[type=\"color\"]', theme)\n .padding('0.2rem')\n .height('2rem')\n .cursor('pointer')\n styleBuilder\n .select(\n '.form-block__input[type=\"number\"]::-webkit-outer-spin-button, .form-block__input[type=\"number\"]::-webkit-inner-spin-button',\n theme,\n )\n .appearance('none')\n .margin('0')\n styleBuilder\n .select('.form-block__input[type=\"number\"]', theme)\n .appearance('textfield')\n styleBuilder\n .select('.form-block__input-icon', theme)\n .color(palette.current.text.subtle)\n // Size the icon from the field's text, not from the surrounding page, so it\n // stays in proportion with the value and placeholder beside it.\n styleBuilder\n .select('.icon.form-block__input-icon', theme)\n .fontSize(palette.font.size.sm)\n .width('1.4em')\n .height('1.4em')\n styleBuilder\n .select(\n '.form-block__input-shell > .form-block__input-icon:first-child',\n theme,\n )\n .marginLeft('0.6em')\n .marginRight('0')\n styleBuilder\n .select(\n '.form-block__input-shell > .form-block__input-icon:last-child',\n theme,\n )\n .marginLeft('0')\n .marginRight('0.6em')\n styleBuilder\n .select('.form-block__number-controls', theme)\n .display('grid')\n .gridTemplateRows('1fr 1fr')\n .width('2em')\n .flex('0 0 auto')\n .background('transparent')\n styleBuilder\n .select('.form-block__number-btn', theme)\n .display('grid')\n .placeItems('center')\n .padding('0')\n .border('none')\n .apply(palette.applyFont(palette.font.size.sm, palette.font.weight.w700))\n .lineHeight('1')\n .cursor('pointer')\n}\n\nfunction registerFormSelectFieldStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n registerFormSelectControlStyles(theme)\n registerFormSelectOptionStyles(theme, palette)\n registerFormSelectIconStyles(theme)\n}\n\nfunction registerFormSelectControlStyles(theme: ThemeMode) {\n styleBuilder.select('.form-block__select-shell', theme).position('relative')\n styleBuilder\n .select('.form-block__select', theme)\n .appearance('none')\n .cursor('pointer')\n .paddingRight('2.9em')\n styleBuilder\n .select('.form-block__select:disabled', theme)\n .cursor('not-allowed')\n styleBuilder\n .select(\n '.form-block__select-shell:has(> .form-block__input-icon:first-child) .form-block__select',\n theme,\n )\n .paddingLeft('2.9em')\n}\n\nfunction registerFormSelectOptionStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('option, optgroup', theme)\n .backgroundColor(palette.current.canvascolor)\n styleBuilder\n .select('option:disabled, optgroup:disabled', theme)\n .color(palette.current.text.subtle)\n}\n\nfunction registerFormSelectIconStyles(theme: ThemeMode) {\n styleBuilder\n .select(\n '.form-block__select-shell > .form-block__input-icon:first-child',\n theme,\n )\n .position('absolute')\n .left('0.6em')\n .top('50%')\n .transform('translateY(-50%)')\n .pointerEvents('none')\n .marginLeft('0')\n .marginRight('0')\n\n styleBuilder\n .select(\n '.form-block__select-shell > .form-block__input-icon:last-child',\n theme,\n )\n .position('absolute')\n .right('0.6em')\n .top('50%')\n .transform('translateY(-50%)')\n .pointerEvents('none')\n .marginLeft('0')\n .marginRight('0')\n}\n\nfunction registerAutoCompleteInputStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.auto-complete-input', theme)\n .position('relative')\n .maxWidth('100%')\n\n styleBuilder\n .select('.auto-complete-input__popup', theme)\n .position('absolute')\n .left('0')\n .right('0')\n .top('calc(100% + 0.375rem)')\n .boxSizing('border-box')\n .maxHeight('18rem')\n .overflow('auto')\n .padding('0.35em')\n .borderRadius(palette.radii.md)\n .border(`1px solid ${palette.current.border.default}`)\n .background(palette.current.surface.rest.background)\n .boxShadow(palette.effect.strongShadow)\n .zIndex('70')\n\n styleBuilder\n .select('.auto-complete-input__listbox', theme)\n .display('grid')\n .gap('0.2em')\n\n styleBuilder\n .select('.auto-complete-input__option', theme)\n .borderRadius(palette.radii.sm)\n .color(palette.current.text.default)\n .cursor('pointer')\n .transition('background 140ms ease, color 140ms ease')\n\n styleBuilder\n .select(\n '.auto-complete-input__option:hover:not(.auto-complete-input__option--disabled), .auto-complete-input__option--active',\n theme,\n )\n .background(palette.current.button.hover.background)\n .color(palette.current.button.hover.text)\n\n styleBuilder\n .select('.auto-complete-input__option--selected', theme)\n .background(palette.current.surfaceAlt.rest.background)\n\n styleBuilder\n .select('.auto-complete-input__option--disabled', theme)\n .cursor('not-allowed')\n .opacity('0.55')\n\n styleBuilder\n .select(\n '.auto-complete-input__message, .auto-complete-input__default-row',\n theme,\n )\n .boxSizing('border-box')\n .width('100%')\n .padding('0.55em 0.65em')\n .apply(palette.applyFont(palette.font.size.sm))\n\n styleBuilder\n .select('.auto-complete-input__message', theme)\n .color(palette.current.text.subtle)\n\n styleBuilder\n .select('.auto-complete-input__default-row', theme)\n .display('grid')\n .gridTemplateColumns('minmax(0, 1fr) auto')\n .alignItems('center')\n .gap('0.6em')\n\n styleBuilder\n .select('.auto-complete-input__default-label', theme)\n .overflow('hidden')\n .textOverflow('ellipsis')\n .whiteSpace('nowrap')\n\n styleBuilder\n .select('.auto-complete-input__default-check', theme)\n .width('1em')\n .height('1em')\n .color(palette.current.tone)\n}\n\nfunction registerMultiAutoCompleteInputStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.multi-auto-complete-input', theme)\n .position('relative')\n .maxWidth('100%')\n\n styleBuilder\n .select('.multi-auto-complete-input__shell', theme)\n .minHeight('2.45em')\n .cursor('text')\n\n styleBuilder\n .select('.multi-auto-complete-input__shell--disabled', theme)\n .cursor('not-allowed')\n\n styleBuilder\n .select('.multi-auto-complete-input__control', theme)\n .display('flex')\n .alignItems('center')\n .flexWrap('wrap')\n .gap('0.35em')\n .width('100%')\n .minWidth('0')\n .padding('0.35em')\n .boxSizing('border-box')\n\n styleBuilder\n .select('.multi-auto-complete-input__query', theme)\n .width('8rem')\n .minWidth('7rem')\n .padding('0.15em 0.25em')\n .lineHeight('1.5')\n\n styleBuilder\n .select('.multi-auto-complete-input__item', theme)\n .display('inline-flex')\n .alignItems('center')\n .maxWidth('100%')\n .gap('0.3em')\n .padding('0.18em 0.25em 0.18em 0.55em')\n .borderRadius(palette.radii.sm)\n .background(palette.current.surfaceAlt.rest.background)\n .color(palette.current.text.default)\n .apply(palette.applyFont(palette.font.size.xs, palette.font.weight.w600))\n\n styleBuilder\n .select('.multi-auto-complete-input__item--invalid', theme)\n .background(palette.semanticTone.danger.surface.rest.background)\n .color(palette.semanticTone.danger.text.default)\n\n styleBuilder\n .select('.multi-auto-complete-input__item--disabled', theme)\n .opacity('0.58')\n\n styleBuilder\n .select('.multi-auto-complete-input__item-label', theme)\n .minWidth('0')\n .overflow('hidden')\n .textOverflow('ellipsis')\n .whiteSpace('nowrap')\n\n styleBuilder\n .select('.multi-auto-complete-input__remove', theme)\n .display('grid')\n .placeItems('center')\n .width('1.35em')\n .height('1.35em')\n .padding('0')\n .border('none')\n .borderRadius(palette.radii.sm)\n .background('transparent')\n .color('currentColor')\n .cursor('pointer')\n\n styleBuilder\n .select('.multi-auto-complete-input__remove:hover', theme)\n .background(palette.current.button.hover.background)\n .color(palette.current.button.hover.text)\n\n styleBuilder\n .select('.multi-auto-complete-input__remove .icon', theme)\n .width('1em')\n .height('1em')\n\n styleBuilder\n .select('.multi-auto-complete-input__popup', theme)\n .position('absolute')\n .left('0')\n .right('0')\n .top('calc(100% + 0.375rem)')\n .boxSizing('border-box')\n .maxHeight('18rem')\n .overflow('auto')\n .padding('0.35em')\n .borderRadius(palette.radii.md)\n .border(`1px solid ${palette.current.border.default}`)\n .background(palette.current.surface.rest.background)\n .boxShadow(palette.effect.strongShadow)\n .zIndex('70')\n\n styleBuilder\n .select('.multi-auto-complete-input__listbox', theme)\n .display('grid')\n .gap('0.2em')\n\n styleBuilder\n .select('.multi-auto-complete-input__option', theme)\n .borderRadius(palette.radii.sm)\n .color(palette.current.text.default)\n .cursor('pointer')\n .transition('background 140ms ease, color 140ms ease')\n\n styleBuilder\n .select(\n '.multi-auto-complete-input__option:hover:not(.multi-auto-complete-input__option--disabled), .multi-auto-complete-input__option--active',\n theme,\n )\n .background(palette.current.button.hover.background)\n .color(palette.current.button.hover.text)\n\n styleBuilder\n .select('.multi-auto-complete-input__option--disabled', theme)\n .cursor('not-allowed')\n .opacity('0.55')\n\n styleBuilder\n .select(\n '.multi-auto-complete-input__message, .multi-auto-complete-input__default-row',\n theme,\n )\n .boxSizing('border-box')\n .width('100%')\n .padding('0.55em 0.65em')\n .apply(palette.applyFont(palette.font.size.sm))\n\n styleBuilder\n .select('.multi-auto-complete-input__message', theme)\n .color(palette.current.text.subtle)\n\n styleBuilder\n .select('.multi-auto-complete-input__default-label', theme)\n .display('block')\n .overflow('hidden')\n .textOverflow('ellipsis')\n .whiteSpace('nowrap')\n}\n\nfunction registerFormMetaStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder\n .select('.form-block__meta', theme)\n .display('flex')\n .alignItems('center')\n .justifyContent('space-between')\n .gap('0.625rem')\n styleBuilder\n .select('.form-block__assist-link', theme)\n .apply(palette.applyFont(palette.font.size.xxs, palette.font.weight.w700))\n .textDecoration('none')\n .color(palette.current.tone)\n styleBuilder\n .select('.form-block__assist-link:hover', theme)\n .textDecoration('underline')\n styleBuilder\n .select('.form-block__divider', theme)\n .position('relative')\n .height('1px')\n .background(palette.current.border.default)\n .margin('0.125rem 0')\n styleBuilder\n .select('.form-block__divider::after', theme)\n .content('attr(data-label)')\n .position('absolute')\n .left('50%')\n .top('50%')\n .transform('translate(-50%, -50%)')\n .padding('0 0.5em')\n .apply(palette.applyFont(palette.font.size.xxxs, palette.font.weight.w700))\n .background(palette.current.surfaceAlt.rest.background)\n .color(palette.current.text.subtle)\n}\n\nfunction registerFormCheckStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder\n .select('.form-block__check', theme)\n .position('relative')\n .display('grid')\n .gridTemplateColumns('auto minmax(0, 1fr)')\n .alignItems('start')\n .gap('0.65em')\n .padding('0.45em 0.55em')\n .borderRadius(palette.radii.md)\n .apply(palette.applyFont(palette.font.size.xxs))\n .color(palette.current.tone)\n .cursor('pointer')\n .transition('background 150ms ease, color 150ms ease, opacity 150ms ease')\n styleBuilder\n .select('.form-block__check:hover', theme)\n .background(palette.current.surfaceAlt.hover.background)\n .color(palette.current.surfaceAlt.hover.text)\n styleBuilder\n .select('.form-block__check--bare', theme)\n .gridTemplateColumns('auto')\n .gap('0')\n .padding('0')\n .width('fit-content')\n styleBuilder\n .select('.form-block__check--bare:hover', theme)\n .background('transparent')\n styleBuilder\n .select('.form-block__check:has(.form-block__check-input:disabled)', theme)\n .cursor('not-allowed')\n .opacity('0.62')\n styleBuilder\n .select('.form-block__check-input', theme)\n .position('absolute')\n .width('1px')\n .height('1px')\n .margin('0')\n .opacity('0')\n .pointerEvents('none')\n styleBuilder\n .select('.form-block__check-control', theme)\n .position('relative')\n .display('grid')\n .placeItems('center')\n .width('1.35em')\n .height('1.35em')\n .boxSizing('border-box')\n .border(`1px solid ${palette.current.border.default}`)\n .borderRadius(palette.radii.sm)\n .background(palette.current.surfaceAlt.rest.background)\n .color(palette.current.button.rest.text)\n .boxShadow('inset 0 1px 0 rgba(255, 255, 255, 0.08)')\n .transition(\n 'background 150ms ease, border-color 150ms ease, box-shadow 150ms ease, transform 150ms ease',\n )\n styleBuilder\n .select('.form-block__check-control::after', theme)\n .content('\"\"')\n .width('0.38em')\n .height('0.68em')\n .border('solid currentColor')\n .borderWidth('0 0.16em 0.16em 0')\n .opacity('0')\n .transform('translateY(-0.08em) rotate(45deg) scale(0.72)')\n .transition('opacity 120ms ease, transform 150ms ease')\n styleBuilder\n .select(\n '.form-block__check-input:focus-visible + .form-block__check-control',\n theme,\n )\n .outline('none')\n .borderColor(palette.current.border.default)\n .boxShadow(`0 0 0 3px ${palette.current.border.focus}`)\n styleBuilder\n .select(\n '.form-block__check-input:active + .form-block__check-control',\n theme,\n )\n .transform('scale(0.96)')\n styleBuilder\n .select(\n '.form-block__check-input:checked + .form-block__check-control',\n theme,\n )\n .borderColor(palette.current.button.rest.border)\n .background(palette.current.button.rest.background)\n .boxShadow('none')\n styleBuilder\n .select(\n '.form-block__check-input:checked + .form-block__check-control::after',\n theme,\n )\n .opacity('1')\n .transform('translateY(-0.08em) rotate(45deg) scale(1)')\n styleBuilder\n .select(\n '.form-block__check-input:disabled + .form-block__check-control',\n theme,\n )\n .boxShadow('none')\n styleBuilder\n .select('.form-block__check-label', theme)\n .minWidth('0')\n .lineHeight('1.35')\n}\n\nfunction registerFormStatusStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder\n .select('.form-status', theme)\n .marginTop('0.25rem')\n .padding('0.5em 0.6em')\n .borderRadius(palette.radii.md)\n .apply(palette.applyFont(palette.font.size.sm))\n}\n\nfunction registerFormResponsiveStyles(theme: ThemeMode) {\n styleBuilder\n .select('.form-block__meta', theme)\n .media(mediaMax(BREAKPOINTS.sm))\n .flexDirection('column')\n .alignItems('flex-start')\n}\n","import {\n BREAKPOINTS,\n mediaMin,\n styleBuilder,\n themes,\n} from '@purestack/ts-style'\n\nexport function registerGridStyles() {\n themes.forEach((theme, _palette) => {\n styleBuilder\n .select('.grid', theme)\n .display('grid')\n .minWidth('0')\n .gap('0.75rem')\n .gridTemplateColumns('var(--grid-template-columns)')\n\n styleBuilder.select('.grid > *', theme).minWidth('0')\n\n styleBuilder.select('.align-stretch', theme).alignItems('stretch')\n styleBuilder.select('.align-start', theme).alignItems('start')\n styleBuilder.select('.align-center', theme).alignItems('center')\n styleBuilder.select('.align-end', theme).alignItems('end')\n\n styleBuilder.select('.justify-items-stretch', theme).justifyItems('stretch')\n styleBuilder.select('.justify-items-start', theme).justifyItems('start')\n styleBuilder.select('.justify-items-center', theme).justifyItems('center')\n styleBuilder.select('.justify-items-end', theme).justifyItems('end')\n\n styleBuilder.select('.justify-self-stretch', theme).justifySelf('stretch')\n styleBuilder.select('.justify-self-start', theme).justifySelf('start')\n styleBuilder.select('.justify-self-center', theme).justifySelf('center')\n styleBuilder.select('.justify-self-end', theme).justifySelf('end')\n\n styleBuilder.select('.grid-dense', theme).gridAutoFlow('row dense')\n\n styleBuilder\n .select('.grid', theme)\n .media(mediaMin(BREAKPOINTS.sm))\n .gridTemplateColumns('var(--grid-template-columns-sm)')\n\n styleBuilder\n .select('.grid', theme)\n .media(mediaMin(BREAKPOINTS.md))\n .gridTemplateColumns('var(--grid-template-columns-md)')\n\n styleBuilder\n .select('.grid', theme)\n .media(mediaMin(BREAKPOINTS.lg))\n .gridTemplateColumns('var(--grid-template-columns-lg)')\n\n styleBuilder\n .select('.grid', theme)\n .media(mediaMin(BREAKPOINTS.xl))\n .gridTemplateColumns('var(--grid-template-columns-xl)')\n })\n}\n","import type { ThemePalette } from '@purestack/ts-style'\nimport { styleBuilder, themes } from '@purestack/ts-style'\n\nexport function registerIconStyles() {\n themes.forEach((theme, palette) => {\n registerIconBaseStyles(theme, palette)\n })\n}\n\nfunction registerIconBaseStyles(theme: string, palette: ThemePalette) {\n styleBuilder\n .select('.icon', theme)\n .display('inline-flex')\n .alignItems('center')\n .justifyContent('center')\n .width('1.7em')\n .height('1.7em')\n .lineHeight('0')\n .verticalAlign('middle')\n .flexShrink('0')\n .alignSelf('center')\n\n styleBuilder\n .select('.icon svg', theme)\n .display('block')\n .width('100%')\n .height('100%')\n\n styleBuilder\n .select('.icon-frame', theme)\n .padding('0.25em')\n .display('inline-flex')\n .alignItems('center')\n .justifyContent('center')\n .lineHeight('0')\n .flexShrink('0')\n .borderRadius(palette.radii.md)\n\n styleBuilder\n .select('.icon-frame--sm', theme)\n .borderRadius(palette.radii.sm)\n .padding('0.5em')\n .fontSize('0.6em')\n\n styleBuilder\n .select('.icon-frame--lg', theme)\n .borderRadius('0.75rem')\n .padding('0.5em')\n .fontSize('1.5em')\n}\n","import {\n styleBuilder,\n type ThemeMode,\n type ThemePalette,\n themes,\n} from '@purestack/ts-style'\n\nconst LINE_CHART_VALUE_FONT_SIZE = '0.15rem'\nconst LINE_CHART_LABEL_FONT_SIZE = '0.1375rem'\nconst LINE_CHART_AXIS_FONT_SIZE = '0.11875rem'\nconst LINE_CHART_EMPTY_FONT_SIZE = '0.1625rem'\n\nexport function registerLineChartStyles() {\n themes.forEach((theme, palette) => {\n registerLineChartBaseStyles(theme)\n registerLineChartPaintStyles(theme, palette)\n })\n}\n\nfunction registerLineChartBaseStyles(theme: ThemeMode) {\n styleBuilder\n .select('.line-chart__line', theme)\n .fill('none')\n .strokeWidth('0.72')\n .strokeLinecap('round')\n .strokeLinejoin('round')\n .transition('opacity 180ms ease, filter 180ms ease')\n\n styleBuilder\n .select('.line-chart__area', theme)\n .opacity('0.34')\n .transition('opacity 180ms ease')\n\n styleBuilder.select('.line-chart__point', theme).strokeWidth('0')\n\n styleBuilder\n .select('.line-chart__series:hover .line-chart__line', theme)\n .opacity('0.54')\n\n styleBuilder\n .select('.line-chart__series:hover .line-chart__line:hover', theme)\n .opacity('1')\n .filter('brightness(1.12)')\n\n styleBuilder\n .select(\n '.line-chart__label, .line-chart__value, .line-chart__empty, .line-chart__grid-line text',\n theme,\n )\n .pointerEvents('none')\n .letterSpacing('normal')\n}\n\nfunction registerLineChartPaintStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder\n .select('.line-chart__grid-line line', theme)\n .stroke(palette.current.surfaceAlt.rest.border)\n .strokeWidth('0.22')\n\n styleBuilder\n .select('.line-chart__zero-line', theme)\n .stroke(palette.current.border.subtle)\n .strokeWidth('0.36')\n\n styleBuilder\n .select('.line-chart__value', theme)\n .fill(palette.current.text.default)\n .fontSize(LINE_CHART_VALUE_FONT_SIZE)\n .fontWeight(palette.font.weight.w700)\n\n styleBuilder\n .select('.line-chart__label', theme)\n .fill(palette.current.text.subtle)\n .fontSize(LINE_CHART_LABEL_FONT_SIZE)\n .fontWeight(palette.font.weight.w700)\n\n styleBuilder\n .select('.line-chart__grid-line text', theme)\n .fill(palette.current.text.subtle)\n .fontSize(LINE_CHART_AXIS_FONT_SIZE)\n .fontWeight(palette.font.weight.w500)\n .set('dominant-baseline', 'middle')\n .set('text-anchor', 'end')\n\n styleBuilder\n .select('.line-chart__empty', theme)\n .fill(palette.current.text.subtle)\n .fontSize(LINE_CHART_EMPTY_FONT_SIZE)\n .fontWeight(palette.font.weight.w700)\n .set('dominant-baseline', 'middle')\n}\n","import { styleBuilder, themes } from '@purestack/ts-style'\n\nexport function registerLogoStyles() {\n themes.forEach((theme, palette) => {\n const neutral = palette.semanticTone.neutral\n const accent = `var(--ps-logo-accent-color, ${palette.current.text.default})`\n const brand = `var(--ps-logo-brand-color, ${neutral.text.default})`\n styleBuilder.select('.site-logo', theme).css({\n display: 'inline-flex',\n alignItems: 'center',\n gap: 'var(--ps-logo-gap, 0.375rem)',\n width: 'fit-content',\n maxWidth: '100%',\n minWidth: '0',\n verticalAlign: 'middle',\n textDecoration: 'none',\n color: brand,\n lineHeight: '1',\n borderRadius: palette.radii.md,\n '--ps-logo-size-brand': 'clamp(1.25rem, 3vw, 1.5rem)',\n '--ps-logo-size-mark': 'clamp(1.625rem, 4vw, 2rem)',\n '--ps-logo-size-subtitle': '0.65rem',\n })\n styleBuilder.select('.site-logo--sm', theme).css({\n '--ps-logo-size-brand': '1.25rem',\n '--ps-logo-size-mark': '1.625rem',\n '--ps-logo-size-subtitle': '0.6rem',\n })\n styleBuilder.select('.site-logo--lg', theme).css({\n '--ps-logo-size-brand': '2rem',\n '--ps-logo-size-mark': '2.75rem',\n '--ps-logo-size-subtitle': '0.75rem',\n })\n styleBuilder.select('.site-logo--xl', theme).css({\n '--ps-logo-size-brand': '3rem',\n '--ps-logo-size-mark': '4rem',\n '--ps-logo-size-subtitle': '0.875rem',\n })\n styleBuilder.select('.site-logo--badge, .site-logo--outline', theme).css({\n padding: '0.75rem 1rem',\n border: `1px solid ${neutral.border.subtle}`,\n })\n styleBuilder\n .select('.site-logo--badge', theme)\n .css({ background: neutral.surfaceAlt.rest.background })\n styleBuilder.select('.site-logo--stacked', theme).css({\n flexDirection: 'column',\n textAlign: 'center',\n gap: 'var(--ps-logo-gap, 0.5rem)',\n })\n styleBuilder\n .select('.site-logo--stacked .site-logo__copy', theme)\n .alignItems('center')\n styleBuilder.select('.site-logo__mark', theme).css({\n display: 'inline-grid',\n placeItems: 'center',\n flexShrink: '0',\n width: 'var(--ps-logo-mark-size, var(--ps-logo-size-mark))',\n height: 'var(--ps-logo-mark-size, var(--ps-logo-size-mark))',\n borderRadius: palette.radii.md,\n boxSizing: 'border-box',\n overflow: 'hidden',\n color: `var(--ps-logo-mark-color, ${accent})`,\n background: 'var(--ps-logo-mark-background, transparent)',\n })\n styleBuilder\n .select(\n '.site-logo .site-logo__mark > .icon, .site-logo__mark > svg',\n theme,\n )\n .css({ width: '100%', height: '100%' })\n styleBuilder.select('.site-logo--mark-soft .site-logo__mark', theme).css({\n padding: '0.2em',\n background: `var(--ps-logo-mark-background, ${palette.current.surface.rest.background})`,\n })\n styleBuilder.select('.site-logo--mark-solid .site-logo__mark', theme).css({\n padding: '0.2em',\n background: `var(--ps-logo-mark-background, ${palette.current.button.rest.background})`,\n color: `var(--ps-logo-mark-color, ${palette.current.button.rest.text})`,\n })\n styleBuilder\n .select('.site-logo--mark-outline .site-logo__mark', theme)\n .css({ padding: '0.2em', border: `1px solid ${accent}` })\n styleBuilder\n .select('.site-logo--square .site-logo__mark', theme)\n .borderRadius('0')\n styleBuilder\n .select('.site-logo--circle .site-logo__mark', theme)\n .borderRadius('50%')\n styleBuilder.select('.site-logo__images, .site-logo__image', theme).css({\n display: 'block',\n width: '100%',\n height: '100%',\n objectFit: 'contain',\n })\n styleBuilder\n .select('.site-logo__image--dark', theme)\n .display(theme === 'dark' ? 'block' : 'none')\n styleBuilder\n .select('.site-logo__image--light', theme)\n .display(theme === 'dark' ? 'none' : 'block')\n styleBuilder.select('.site-logo__monogram', theme).css({\n fontSize:\n 'calc(var(--ps-logo-mark-size, var(--ps-logo-size-mark)) * 0.45)',\n fontWeight: '750',\n letterSpacing: '-0.04em',\n })\n styleBuilder.select('.site-logo__copy', theme).css({\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n minWidth: '0',\n gap: '0.35rem',\n })\n styleBuilder.select('.site-logo__name', theme).css({\n fontSize: 'var(--ps-logo-brand-size, var(--ps-logo-size-brand))',\n fontWeight: '700',\n letterSpacing: '-0.045em',\n lineHeight: '1.05',\n maxWidth: '100%',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n color: brand,\n })\n styleBuilder.select('.site-logo__brand', theme).color(brand)\n styleBuilder.select('.site-logo__suffix', theme).color(accent)\n styleBuilder\n .select('.site-logo--wordmark-accent .site-logo__brand', theme)\n .color(accent)\n styleBuilder\n .select('.site-logo--wordmark-gradient .site-logo__brand', theme)\n .css({\n backgroundImage: `linear-gradient(115deg, ${brand}, ${accent})`,\n backgroundClip: 'text',\n '-webkit-background-clip': 'text',\n color: 'transparent',\n })\n styleBuilder.select('.site-logo__subtitle', theme).css({\n fontSize: 'var(--ps-logo-subtitle-size, var(--ps-logo-size-subtitle))',\n color: neutral.text.subtle,\n lineHeight: '1.4',\n letterSpacing: '0.06em',\n maxWidth: '100%',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n })\n styleBuilder\n .select('.site-logo[href]', theme)\n .css({ cursor: 'pointer', transition: 'opacity 160ms ease' })\n styleBuilder\n .select('.site-logo[href]:hover', theme)\n .css({ textDecoration: 'none', opacity: '0.85' })\n styleBuilder.select('.site-logo[href]:focus-visible', theme).css({\n outline: `2px solid ${palette.current.border.focus}`,\n outlineOffset: '5px',\n })\n styleBuilder\n .select('.site-logo--wordmark-gradient .site-logo__brand', theme)\n .media('(forced-colors: active)')\n .css({ backgroundImage: 'none', color: 'LinkText' })\n })\n}\n","import type { ThemePalette } from '@purestack/ts-style'\nimport { styleBuilder, type ThemeMode, themes } from '@purestack/ts-style'\n\nexport function registerModalStyles() {\n themes.forEach((theme, palette) => {\n registerModalShellStyles(theme, palette)\n registerModalMotionStyles(theme)\n registerModalSizeStyles(theme)\n })\n}\n\nfunction registerModalShellStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder\n .select('.modal', theme)\n .position('fixed')\n .inset('0')\n .margin('0')\n .padding('0')\n .border('none')\n .background('transparent')\n .maxWidth('100vw')\n .maxHeight('100vh')\n .width('100%')\n .height('100%')\n .overflow('hidden')\n\n styleBuilder\n .select('.modal[open]', theme)\n .display('grid')\n .placeItems('center')\n\n styleBuilder.select('.modal:not([open])', theme).display('none')\n\n styleBuilder\n .select('.modal::backdrop', theme)\n .background(palette.current.overlay)\n .opacity('1')\n\n styleBuilder\n .select('.modal--fade::backdrop', theme)\n .opacity('0')\n .transition('opacity 420ms ease')\n\n styleBuilder.select('.modal--fade[open]::backdrop', theme).opacity('0.8')\n\n styleBuilder\n .select('.modal__panel', theme)\n .position('relative')\n .display('grid')\n .width('min(92vw, 40rem)')\n .maxHeight('min(86vh, 56.25rem)')\n .overflow('auto')\n .background(palette.current.canvas)\n .boxShadow(palette.effect.softShadow)\n .color(palette.current.text.default)\n .transform('translate3d(0, 0, 0)')\n .opacity('1')\n\n styleBuilder\n .select('.modal__surface', theme)\n .display('grid')\n .gap('1em')\n .minHeight('100%')\n .padding('1em')\n .borderRadius(palette.radii.lg)\n\n styleBuilder\n .select('.modal__header', theme)\n .display('grid')\n .gridTemplateColumns('minmax(0, 1fr) auto minmax(0, 1fr)')\n .alignItems('center')\n .gap('0.6em')\n\n styleBuilder\n .select('.modal__title', theme)\n .gridColumn('2')\n .justifySelf('center')\n .margin('0')\n .apply(palette.applyFont(palette.font.size.h3, palette.font.weight.w700))\n .textAlign('center')\n .color(palette.current.text.default)\n\n styleBuilder\n .select('.modal__header [data-modal-close]', theme)\n .gridColumn('3')\n .justifySelf('end')\n\n styleBuilder\n .select('.modal__body', theme)\n .display('grid')\n .minWidth('0')\n .justifyItems('center')\n .textAlign('center')\n\n styleBuilder\n .select('.modal__footer', theme)\n .display('flex')\n .flexWrap('wrap')\n .alignItems('center')\n .justifyContent('center')\n .gap('0.6em')\n\n styleBuilder.select('.modal__footer:empty', theme).display('none')\n\n styleBuilder\n .select('.modal--animated .modal__panel', theme)\n .transition('transform 700ms cubic-bezier(0.16, 1, 0.3, 1)')\n\n styleBuilder\n .select('.modal--fade.modal--animated .modal__panel', theme)\n .transition(\n 'transform 700ms cubic-bezier(0.16, 1, 0.3, 1), opacity 420ms ease',\n )\n\n styleBuilder\n .select(\n '.modal--fade[data-modal-state=\"opening\"] .modal__panel, .modal--fade[data-modal-state=\"closing\"] .modal__panel',\n theme,\n )\n .opacity('0')\n\n styleBuilder\n .select(\n '.modal--fade.modal--slide-top[data-modal-state=\"opening\"] .modal__panel, .modal--fade.modal--slide-top[data-modal-state=\"closing\"] .modal__panel, .modal--fade.modal--slide-right[data-modal-state=\"opening\"] .modal__panel, .modal--fade.modal--slide-right[data-modal-state=\"closing\"] .modal__panel, .modal--fade.modal--slide-bottom[data-modal-state=\"opening\"] .modal__panel, .modal--fade.modal--slide-bottom[data-modal-state=\"closing\"] .modal__panel, .modal--fade.modal--slide-left[data-modal-state=\"opening\"] .modal__panel, .modal--fade.modal--slide-left[data-modal-state=\"closing\"] .modal__panel',\n theme,\n )\n .opacity('0.45')\n\n styleBuilder\n .select(\n '.modal--fade[data-modal-state=\"opening\"]::backdrop, .modal--fade[data-modal-state=\"closing\"]::backdrop',\n theme,\n )\n .opacity('0')\n}\n\nfunction registerModalMotionStyles(theme: ThemeMode) {\n styleBuilder\n .select(\n '.modal--slide-top[data-modal-state=\"opening\"] .modal__panel, .modal--slide-top[data-modal-state=\"closing\"] .modal__panel',\n theme,\n )\n .transform('translate3d(0, calc(-50vh - 50%), 0)')\n\n styleBuilder\n .select(\n '.modal--slide-right[data-modal-state=\"opening\"] .modal__panel, .modal--slide-right[data-modal-state=\"closing\"] .modal__panel',\n theme,\n )\n .transform('translate3d(calc(50vw + 50%), 0, 0)')\n\n styleBuilder\n .select(\n '.modal--slide-bottom[data-modal-state=\"opening\"] .modal__panel, .modal--slide-bottom[data-modal-state=\"closing\"] .modal__panel',\n theme,\n )\n .transform('translate3d(0, calc(50vh + 50%), 0)')\n\n styleBuilder\n .select(\n '.modal--slide-left[data-modal-state=\"opening\"] .modal__panel, .modal--slide-left[data-modal-state=\"closing\"] .modal__panel',\n theme,\n )\n .transform('translate3d(calc(-50vw - 50%), 0, 0)')\n\n styleBuilder\n .select('.modal--animated .modal__panel', theme)\n .media('prefers-reduced-motion: reduce')\n .transition('none')\n\n styleBuilder\n .select('.modal::backdrop', theme)\n .media('prefers-reduced-motion: reduce')\n .transition('none')\n}\n\nfunction registerModalSizeStyles(theme: ThemeMode) {\n styleBuilder\n .select('.modal--size-sm .modal__panel', theme)\n .width('min(92vw, 26.25rem)')\n styleBuilder\n .select('.modal--size-md .modal__panel', theme)\n .width('min(92vw, 40rem)')\n styleBuilder\n .select('.modal--size-lg .modal__panel', theme)\n .width('min(94vw, 53.75rem)')\n styleBuilder\n .select('.modal--size-xl .modal__panel', theme)\n .width('min(96vw, 67.5rem)')\n}\n","import type { ThemePalette } from '@purestack/ts-style'\nimport {\n BREAKPOINTS,\n mediaBelow,\n mediaMax,\n mediaMin,\n styleBuilder,\n type ThemeMode,\n themes,\n} from '@purestack/ts-style'\n\nexport function registerTopBarStyles() {\n themes.forEach((theme, palette) => {\n registerTopBarShellStyles(theme, palette)\n registerTopBarToggleStyles(theme, palette)\n })\n}\n\nexport function getTopBarToggleVisibleSelectors(targetSelector: string) {\n return [\n { selector: `.template-doc--nav-drawer ${targetSelector}` },\n {\n selector: `.template-doc--has-nav ${targetSelector}`,\n media: mediaBelow(BREAKPOINTS.lg),\n },\n ]\n}\n\nexport function getTopBarToggleHiddenSelectors(targetSelector: string) {\n return [\n {\n selector: `body:not(.template-doc--nav-drawer):not(.template-doc--has-nav) ${targetSelector}`,\n },\n {\n selector: `.template-doc--has-nav:not(.template-doc--nav-drawer) ${targetSelector}`,\n media: mediaMin(BREAKPOINTS.lg),\n },\n ]\n}\n\nexport function registerTopBarShellStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.topbar', theme)\n .padding('1rem')\n .position('sticky')\n .top('0')\n .overflowX('clip')\n .zIndex(40)\n .backdropFilter('blur(0.625rem)')\n .borderTopWidth('0 !important')\n .borderRightWidth('0 !important')\n .borderBottomWidth('1px !important')\n .borderBottomStyle('solid !important')\n .borderLeftWidth('0 !important')\n .borderRadius('0 !important')\n\n styleBuilder.select('.topbar__controls', theme).marginLeft('auto')\n styleBuilder\n .select('.topbar__actions', theme)\n .display('flex')\n .alignItems('center')\n .gap('0rem')\n styleBuilder\n .select('.topbar', theme)\n .media(mediaBelow(BREAKPOINTS.sm))\n .padding('0.75rem')\n styleBuilder\n .select('.topbar > .flex, .topbar__controls', theme)\n .media(mediaBelow(BREAKPOINTS.sm))\n .gap('0.5rem')\n registerTopBarAccountVisibilityStyles(theme)\n\n styleBuilder\n .select('.topbar__icon', theme)\n .width('2.625rem')\n .height('2.625rem')\n .borderRadius(palette.radii.pill)\n .display('grid')\n .placeItems('center')\n .border('1px solid transparent')\n .background('transparent')\n .cursor('pointer')\n .position('relative')\n .padding('0')\n .color(palette.current.text.subtle)\n}\n\nfunction registerTopBarAccountVisibilityStyles(theme: ThemeMode) {\n styleBuilder.select('.topbar__account', theme).display('none')\n for (const rule of getTopBarToggleHiddenSelectors('.topbar__account')) {\n let selector = styleBuilder.select(rule.selector, theme)\n if (rule.media) selector = selector.media(rule.media)\n selector.display('inline-block')\n }\n}\n\nexport function registerTopBarToggleStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n registerTopBarToggleVisibilityStyles(theme, palette)\n registerTopBarToggleGlyphStyles(theme)\n registerTopBarToggleCheckedStateStyles(theme)\n registerTopBarResponsiveSearchStyles(theme)\n}\n\nfunction registerTopBarToggleVisibilityStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.topbar__toggle', theme)\n .background(palette.current.surface.rest.background)\n .borderColor(palette.current.border.default)\n .color(palette.current.text.subtle)\n .display('none')\n styleBuilder\n .select('.template-doc--nav-drawer .topbar__toggle', theme)\n .display('grid')\n styleBuilder\n .select('.template-doc--has-nav .topbar__toggle', theme)\n .media(mediaBelow(BREAKPOINTS.lg))\n .display('grid')\n styleBuilder\n .select('.topbar__toggle:focus-visible', theme)\n .outline(`2px solid ${palette.current.border.focus}`)\n}\n\nfunction registerTopBarToggleGlyphStyles(theme: ThemeMode) {\n styleBuilder\n .select('.topbar__toggle::before', theme)\n .content('\"\"')\n .width('1.125rem')\n .height('0.125rem')\n .background('currentColor')\n .position('absolute')\n .top('0.875rem')\n .left('0.75rem')\n .transition('transform 200ms ease, top 200ms ease')\n .boxShadow('0 0.375rem 0 0 currentColor')\n styleBuilder\n .select('.topbar__toggle::after', theme)\n .content('\"\"')\n .width('1.125rem')\n .height('0.125rem')\n .background('currentColor')\n .position('absolute')\n .top('1.625rem')\n .left('0.75rem')\n .transition('transform 200ms ease, top 200ms ease')\n}\n\nfunction registerTopBarToggleCheckedStateStyles(theme: ThemeMode) {\n styleBuilder.select('.doc-nav-toggle', theme).display('none')\n styleBuilder\n .select('.doc-nav-toggle:checked ~ .topbar .topbar__toggle::before', theme)\n .top('1.25rem')\n .transform('rotate(45deg)')\n .boxShadow('none')\n styleBuilder\n .select('.doc-nav-toggle:checked ~ .topbar .topbar__toggle::after', theme)\n .top('1.25rem')\n .transform('rotate(-45deg)')\n}\n\nfunction registerTopBarResponsiveSearchStyles(theme: ThemeMode) {\n styleBuilder\n .select('.topbar__search', theme)\n .media(mediaMax(BREAKPOINTS.sm))\n .display('none')\n}\n","import type { ThemePalette } from '@purestack/ts-style'\nimport {\n BREAKPOINTS,\n docLayoutVar,\n mediaAbove,\n mediaBelow,\n mediaMax,\n mediaMin,\n styleBuilder,\n type ThemeMode,\n themes,\n} from '@purestack/ts-style'\nimport { getTopBarToggleVisibleSelectors } from '../topBar/topBarStyle'\n\nexport function registerNavStyles() {\n themes.forEach((theme, palette) => {\n registerNavShellStyles(theme, palette)\n registerNavSummaryStyles(theme, palette)\n })\n}\n\nexport function registerNavShellStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('li.nav__item', theme)\n .marginInlineStart('-0.5rem')\n .marginInlineEnd('-0.5rem')\n styleBuilder\n .select('li.nav__item .icon', theme)\n .width('1.3em')\n .height('1.3em')\n styleBuilder.select('li.nav__item .btn', theme).gap('0.5em').padding('0.5em')\n styleBuilder\n .select('.nav__list .nav__list li.nav__item', theme)\n .marginInlineStart('0.75rem')\n .marginInlineEnd('0rem')\n styleBuilder\n .select('.nav__menu', theme)\n .display('block')\n .padding('1em')\n .borderRadius(`${palette.radii.lg} !important`)\n .border('1px solid transparent')\n .apply(palette.applyFont(palette.font.size.body))\n .maxHeight(`calc(100vh - ${docLayoutVar('sidebarTop')} - 1.5625rem)`)\n .overflowY('auto')\n .overflowX('hidden')\n .marginRight(docLayoutVar('activeShellPaddingInlineStart'))\n styleBuilder\n .select('.nav__header-row', theme)\n .display('flex')\n .alignItems('center')\n .justifyContent('space-between')\n .gap('0.5em')\n registerNavAccountPlacementStyles(theme)\n styleBuilder.select('.nav__search', theme).display('none').width('100%')\n styleBuilder\n .select('.nav__search', theme)\n .media(mediaMax(BREAKPOINTS.sm))\n .display('block')\n styleBuilder\n .select('.nav__header', theme)\n .apply(palette.applyFont(palette.font.size.xxs, palette.font.weight.w700))\n .textTransform('uppercase')\n .color(palette.current.text.subtle)\n .opacity('0.5')\n styleBuilder\n .select('.nav__panel-toggle', theme)\n .display('none')\n .alignItems('center')\n .justifyContent('center')\n .padding('0')\n .borderRadius(palette.radii.md)\n .cursor('pointer')\n .transition('background 160ms ease, color 160ms ease')\n .bottom('5rem')\n styleBuilder.select('.nav__panel-toggle-label', theme).display('inline-block')\n styleBuilder.select('.nav__panel-toggle-icon', theme).display('none')\n styleBuilder\n .select(\n '.nav__panel-toggle:focus-visible, .nav__collapse-toggle:focus-visible',\n theme,\n )\n .outline(`2px solid ${palette.current.border.focus}`)\n styleBuilder\n .select('.nav__collapse-toggle', theme)\n .display('none')\n .alignItems('center')\n .justifyContent('center')\n .padding('0.25em')\n .border(`transparent`)\n .borderRadius(palette.radii.md)\n .background('transparent')\n .cursor('pointer')\n .transition('background 160ms ease, color 160ms ease')\n .apply(palette.applyFont(palette.font.size.xxxs))\n // Collapsing belongs to the doc layout, so only a docked menu offers it.\n styleBuilder\n .select('.doc-sidebar .nav__collapse-toggle', theme)\n .display('inline-flex')\n styleBuilder\n .select('.nav__collapse-toggle-icon', theme)\n .display('inline-flex')\n .alignItems('center')\n .justifyContent('center')\n styleBuilder.select('.nav__collapse-toggle-icon--open', theme).display('none')\n styleBuilder\n .select(\n '.template-doc--nav-collapsed .nav__collapse-toggle-icon--collapse',\n theme,\n )\n .display('none')\n styleBuilder\n .select(\n '.template-doc--nav-collapsed .nav__collapse-toggle-icon--open',\n theme,\n )\n .display('inline-flex')\n styleBuilder\n .select('.nav__collapse-toggle-icon svg', theme)\n .display('block')\n .fill('none')\n .stroke('currentColor')\n .strokeWidth('1.9')\n .strokeLinecap('round')\n .strokeLinejoin('round')\n\n styleBuilder\n .select(\n '.template-doc--has-nav:not(.template-doc--nav-drawer) .doc-sidebar',\n theme,\n )\n .media(mediaMin(BREAKPOINTS.lg))\n .transformOrigin('left center')\n .transform('translateX(0)')\n .zIndex(30)\n styleBuilder\n .select(\n '.template-doc.template-doc--nav-ready.template-doc--has-nav:not(.template-doc--nav-drawer) .doc-sidebar',\n theme,\n )\n .media(mediaMin(BREAKPOINTS.lg))\n .transition('transform 260ms ease')\n styleBuilder\n .select(\n '.template-doc--nav-collapsed.template-doc--has-nav:not(.template-doc--nav-drawer) .doc-sidebar',\n theme,\n )\n .media(mediaMin(BREAKPOINTS.lg))\n .width(docLayoutVar('activeRailWidth'))\n .position('fixed')\n .left('0')\n .right('auto')\n .top(docLayoutVar('sidebarTop'))\n .height(`calc(100dvh - ${docLayoutVar('sidebarTop')})`)\n .maxHeight('none')\n .background('transparent')\n .boxShadow('none')\n .overflow('visible')\n .transform(`translateX(calc(-100% + ${docLayoutVar('activeRailWidth')}))`)\n .zIndex(140)\n styleBuilder\n .select(\n '.template-doc--nav-collapsed.template-doc--has-nav:not(.template-doc--nav-drawer) .doc-sidebar.doc-sidebar--open',\n theme,\n )\n .media(mediaMin(BREAKPOINTS.lg))\n .width(docLayoutVar('preferredNavWidth'))\n .background('transparent')\n .boxShadow('none')\n .transform('translateX(0)')\n styleBuilder\n .select(\n '.template-doc.template-doc--nav-collapsed.template-doc--has-nav:not(.template-doc--nav-drawer) .doc-shell',\n theme,\n )\n .media(mediaMin(BREAKPOINTS.lg))\n .gridTemplateColumns('minmax(0, 1fr)')\n styleBuilder\n .select(\n '.template-doc.template-doc--nav-collapsed.template-doc--has-nav:not(.template-doc--nav-drawer) .doc-shell--toc',\n theme,\n )\n .media(mediaAbove(BREAKPOINTS.toc))\n .gridTemplateColumns(`minmax(0, 1fr) ${docLayoutVar('activeTocWidth')}`)\n styleBuilder\n .select(\n '.template-doc.template-doc--nav-collapsed.template-doc--has-nav:not(.template-doc--nav-drawer) .doc-shell--toc',\n theme,\n )\n .media(mediaMax(BREAKPOINTS.toc))\n .gridTemplateColumns('1fr')\n styleBuilder\n .select(\n '.template-doc.template-doc--nav-collapsed.template-doc--toc-collapsed.template-doc--has-nav:not(.template-doc--nav-drawer) .doc-shell--toc',\n theme,\n )\n .media(mediaMin(BREAKPOINTS.lg))\n .gridTemplateColumns('1fr')\n styleBuilder\n .select(\n '.template-doc--nav-collapsed.template-doc--has-nav:not(.template-doc--nav-drawer) .doc-sidebar:not(.doc-sidebar--open) .nav__header, .template-doc--nav-collapsed.template-doc--has-nav:not(.template-doc--nav-drawer) .doc-sidebar:not(.doc-sidebar--open) .nav__collapse-toggle, .template-doc--nav-collapsed.template-doc--has-nav:not(.template-doc--nav-drawer) .doc-sidebar:not(.doc-sidebar--open) .nav__list',\n theme,\n )\n .media(mediaMin(BREAKPOINTS.lg))\n .display('none')\n styleBuilder\n .select(\n '.template-doc--nav-collapsed.template-doc--has-nav:not(.template-doc--nav-drawer) .doc-sidebar:not(.doc-sidebar--open) .nav__menu',\n theme,\n )\n .media(mediaMin(BREAKPOINTS.lg))\n .width(docLayoutVar('activeRailWidth'))\n .marginLeft('0')\n .padding('0')\n .background('transparent')\n .border('none !important')\n .borderRadius('0 !important')\n .overflow('visible')\n styleBuilder\n .select(\n '.template-doc--nav-collapsed.template-doc--has-nav:not(.template-doc--nav-drawer) .doc-sidebar:not(.doc-sidebar--open) .nav__header-row',\n theme,\n )\n .media(mediaMin(BREAKPOINTS.lg))\n .margin('0')\n .width(docLayoutVar('activeRailWidth'))\n .height('7.375rem')\n .position('static')\n styleBuilder\n .select(\n '.template-doc--nav-collapsed.template-doc--has-nav:not(.template-doc--nav-drawer) .doc-sidebar:not(.doc-sidebar--open) .nav__panel-toggle',\n theme,\n )\n .media(mediaMin(BREAKPOINTS.lg))\n .display('inline-flex')\n .position('absolute')\n .alignItems('center')\n .justifyContent('center')\n .writingMode('vertical-rl')\n .textOrientation('mixed')\n .height('auto')\n .padding('0.6em 0')\n .width(docLayoutVar('activeRailWidth'))\n .apply(palette.applyFont(palette.font.size.xxxs, palette.font.weight.w700))\n .textTransform('uppercase')\n .userSelect('none')\n .border(`1px solid ${palette.current.border.default}`)\n .borderLeft('none')\n .borderRadius(`0 ${palette.radii.md} ${palette.radii.md} 0`)\n styleBuilder\n .select(\n '.template-doc--nav-collapsed.template-doc--has-nav:not(.template-doc--nav-drawer) .doc-sidebar.doc-sidebar--open .nav__panel-toggle',\n theme,\n )\n .media(mediaMin(BREAKPOINTS.lg))\n .display('none')\n\n styleBuilder\n .select(\n '.doc-sidebar .nav__panel-toggle, .doc-sidebar .nav__collapse-toggle',\n theme,\n )\n .media(mediaBelow(BREAKPOINTS.lg))\n .display('none')\n styleBuilder\n .select(\n '.template-doc--nav-drawer .nav__panel-toggle, .template-doc--nav-drawer .nav__collapse-toggle',\n theme,\n )\n .display('none')\n styleBuilder\n .select('.nav__list', theme)\n .listStyle('none')\n .margin('0')\n .padding('0')\n styleBuilder\n .select('.template-doc--has-nav .doc-sidebar .nav__menu', theme)\n .media(mediaBelow(BREAKPOINTS.lg))\n .width('100%')\n .maxWidth('none')\n .minHeight(`calc(100dvh - ${docLayoutVar('sidebarTopMobile')})`)\n .maxHeight('none')\n .borderRadius('0 !important')\n .border('0 !important')\n .padding('1rem 1rem 1.25rem')\n .height('100%')\n .overflow('auto')\n .boxSizing('border-box')\n}\n\nfunction registerNavAccountPlacementStyles(theme: ThemeMode) {\n styleBuilder.select('.nav__menu .nav__account', theme).display('none')\n for (const rule of getTopBarToggleVisibleSelectors(\n '.doc-sidebar .nav__menu .nav__account',\n )) {\n let selector = styleBuilder.select(rule.selector, theme)\n if (rule.media) selector = selector.media(rule.media)\n selector.display('inline-block').marginLeft('auto')\n }\n}\n\nexport function registerNavSummaryStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder.select('.nav__summary', theme).position('relative')\n styleBuilder\n .select('.nav__chevron', theme)\n .position('absolute')\n .left('auto')\n .right('0.125rem')\n .transform('rotate(0deg)')\n .transition('transform 160ms ease')\n .top('50%')\n .set('translate', '0 -50%')\n .color(palette.current.text.subtle)\n styleBuilder\n .select('.nav__group[open] > .nav__summary .nav__chevron', theme)\n .transform('rotate(-90deg)')\n styleBuilder.select('.nav__summary::marker', theme).content('\"\"')\n}\n","import type { ThemePalette } from '@purestack/ts-style'\nimport {\n BREAKPOINTS,\n docLayoutVar,\n mediaAbove,\n mediaBelow,\n mediaMax,\n styleBuilder,\n type ThemeMode,\n themes,\n} from '@purestack/ts-style'\n\nexport function registerPageTocStyles() {\n themes.forEach((theme, palette) => {\n registerPageTocShellStyles(theme, palette)\n registerPageTocLinkStyles(theme)\n registerPageTocTargetStyles(theme, palette)\n registerPageTocLayoutStyles(theme, palette)\n })\n}\n\nexport function registerPageTocShellStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.page-toc', theme)\n .display('block')\n .marginLeft(docLayoutVar('activeShellPaddingInlineEnd'))\n .padding('1em')\n .borderRadius(`${palette.radii.lg} !important`)\n .border('1px solid transparent')\n .apply(palette.applyFont(palette.font.size.body))\n .maxHeight(`calc(100vh - ${docLayoutVar('sidebarTop')} - 1.5625rem)`)\n .overflowY('auto')\n .overflowX('hidden')\n styleBuilder\n .select('.page-toc__header-row', theme)\n .display('flex')\n .alignItems('center')\n .justifyContent('space-between')\n .gap('0.5em')\n styleBuilder\n .select('.page-toc__header', theme)\n .apply(palette.applyFont(palette.font.size.xxs, palette.font.weight.w700))\n .textTransform('uppercase')\n .color(palette.current.text.subtle)\n .opacity('0.5')\n styleBuilder\n .select('.page-toc__restore-toggle', theme)\n .display('inline-flex')\n .alignItems('center')\n .justifyContent('center')\n .padding('0.25em')\n .background('transparent')\n .border('transparent')\n .borderRadius(palette.radii.md)\n .cursor('pointer')\n .transition('background 160ms ease, color 160ms ease')\n .apply(palette.applyFont(palette.font.size.xxxs))\n styleBuilder\n .select('.page-toc__header-toggle-icon', theme)\n .display('inline-flex')\n .alignItems('center')\n .justifyContent('center')\n styleBuilder\n .select('.page-toc__header-toggle-icon--restore', theme)\n .display('none')\n styleBuilder\n .select(\n '.template-doc--toc-collapsed .page-toc__header-toggle-icon--collapse',\n theme,\n )\n .display('none')\n styleBuilder\n .select(\n '.template-doc--toc-collapsed .page-toc__header-toggle-icon--restore',\n theme,\n )\n .display('inline-flex')\n styleBuilder\n .select('.page-toc__header-toggle-icon svg', theme)\n .display('block')\n .fill('none')\n .stroke('currentColor')\n .strokeWidth('1.9')\n .strokeLinecap('round')\n .strokeLinejoin('round')\n styleBuilder\n .select('.page-toc__list', theme)\n .listStyle('none')\n .margin('0')\n .padding('0')\n .display('grid')\n .gap('0.25em')\n .overflow('hidden')\n styleBuilder\n .select('.page-toc__list--nested', theme)\n .paddingLeft('0.75em')\n .borderLeft(`1px solid ${palette.current.border.subtle}`)\n styleBuilder.select('.page-toc__item', theme).display('grid')\n styleBuilder\n .select('.page-toc__empty', theme)\n .apply(palette.applyFont(palette.font.size.xs, palette.font.weight.w600))\n .color(palette.current.text.subtle)\n styleBuilder.select('.page-toc__panel-toggle', theme).display('none')\n styleBuilder\n .select('.page-toc__restore-toggle', theme)\n .media(mediaMax(BREAKPOINTS.toc))\n .display('none')\n}\n\nexport function registerPageTocLinkStyles(theme: ThemeMode) {\n styleBuilder\n .select('.page-toc__link', theme)\n .transition('background 160ms ease, color 160ms ease')\n\n styleBuilder.select('.page-toc__link--sub', theme).fontWeight('500')\n}\n\nexport function registerPageTocTargetStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.doc-content .page-toc__target', theme)\n .scrollMarginTop('6rem')\n .padding('0')\n .borderRadius('0')\n .transition('background 200ms ease, color 200ms ease')\n styleBuilder\n .select('.doc-content .page-toc__target', theme)\n .boxShadow(`0 2px 0 0 ${palette.current.tone}`)\n}\n\nexport function registerPageTocLayoutStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n registerPageTocShellGridStyles(theme)\n registerPageTocSidebarBaseStyles(theme)\n registerPageTocMobileOverlayStyles(theme, palette)\n registerPageTocDesktopCollapsedStyles(theme)\n}\n\nfunction registerPageTocShellGridStyles(theme: ThemeMode) {\n styleBuilder\n .select('.doc-shell--toc', theme)\n .gridTemplateColumns(\n `${docLayoutVar('activeNavWidth')} minmax(0, 1fr) ${docLayoutVar('activeTocWidth')}`,\n )\n styleBuilder\n .select('.doc-shell--toc-only', theme)\n .gridTemplateColumns(`minmax(0, 1fr) ${docLayoutVar('activeTocWidth')}`)\n styleBuilder\n .select('.doc-shell--nav-drawer.doc-shell--toc', theme)\n .gridTemplateColumns(`minmax(0, 1fr) ${docLayoutVar('activeTocWidth')}`)\n styleBuilder\n .select('.doc-shell--toc', theme)\n .media(mediaMax(BREAKPOINTS.toc))\n .gridTemplateColumns(`${docLayoutVar('activeNavWidth')} minmax(0, 1fr)`)\n styleBuilder\n .select(\n '.doc-shell--toc-only, .doc-shell--nav-drawer.doc-shell--toc',\n theme,\n )\n .media(mediaMax(BREAKPOINTS.toc))\n .gridTemplateColumns('1fr')\n styleBuilder\n .select(\n '.doc-shell--toc, .template-doc--toc-collapsed .doc-shell--toc',\n theme,\n )\n .media(mediaBelow(BREAKPOINTS.lg))\n .gridTemplateColumns('1fr !important')\n\n styleBuilder\n .select('.template-doc--toc-collapsed .doc-shell--toc', theme)\n .gridTemplateColumns(`${docLayoutVar('activeNavWidth')} minmax(0, 1fr)`)\n styleBuilder\n .select('.template-doc--toc-collapsed .doc-shell--toc-only', theme)\n .gridTemplateColumns('1fr')\n styleBuilder\n .select(\n '.template-doc--toc-collapsed .doc-shell--nav-drawer.doc-shell--toc',\n theme,\n )\n .gridTemplateColumns('1fr')\n}\n\nfunction registerPageTocSidebarBaseStyles(theme: ThemeMode) {\n styleBuilder\n .select('.doc-toc', theme)\n .position('sticky')\n .top(docLayoutVar('sidebarTop'))\n .zIndex(30)\n .alignSelf('start')\n .maxHeight(`calc(100vh - ${docLayoutVar('sidebarTop')} - 1.5625rem)`)\n .overflow('auto')\n .userSelect('none')\n\n styleBuilder\n .select('.template-doc--has-toc .doc-toc', theme)\n .media(mediaAbove(BREAKPOINTS.toc))\n .overflow('visible')\n .transformOrigin('right center')\n .transform('translateX(0)')\n .zIndex(30)\n styleBuilder\n .select(\n '.template-doc.template-doc--nav-ready.template-doc--has-toc .doc-toc',\n theme,\n )\n .transition('transform 260ms ease')\n}\n\nfunction registerPageTocMobileOverlayStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.template-doc--has-toc .doc-toc', theme)\n .media(mediaMax(BREAKPOINTS.lg))\n .top(docLayoutVar('sidebarTopMobile'))\n .height(`calc(100dvh - ${docLayoutVar('sidebarTopMobile')})`)\n .maxHeight('none')\n styleBuilder\n .select('.template-doc--has-toc .doc-toc .page-toc', theme)\n .media(mediaMax(BREAKPOINTS.lg))\n .maxHeight(`calc(100dvh - ${docLayoutVar('sidebarTopMobile')})`)\n styleBuilder\n .select('.template-doc--has-toc .doc-toc', theme)\n .media(mediaMax(BREAKPOINTS.toc))\n .position('fixed')\n .right('0')\n .maxWidth('none')\n .zIndex(140)\n .overflow('hidden')\n .background('transparent')\n .boxShadow('none')\n styleBuilder\n .select('.template-doc--has-toc .doc-toc', theme)\n .media(mediaMax(BREAKPOINTS.sm))\n .width('100%')\n styleBuilder\n .select('.template-doc--has-toc .doc-toc.doc-toc--open', theme)\n .media(mediaMax(BREAKPOINTS.toc))\n .transform('translateX(0)')\n .overflowY('auto')\n .overflowX('hidden')\n .webkitOverflowScrolling('touch')\n styleBuilder\n .select('.template-doc--has-toc .doc-toc:not(.doc-toc--open)', theme)\n .media(mediaMax(BREAKPOINTS.toc))\n .width(docLayoutVar('activeRailWidth'))\n .right('0')\n .left('auto')\n .transform(`translateX(calc(100% - ${docLayoutVar('activeRailWidth')}))`)\n .background('transparent')\n .boxShadow('none')\n .pointerEvents('none')\n styleBuilder\n .select('.template-doc--has-toc.doc-toc-open', theme)\n .media(mediaMax(BREAKPOINTS.sm))\n .overflow('hidden')\n\n styleBuilder\n .select('.template-doc--has-toc.doc-toc-open', theme)\n .media(mediaMax(BREAKPOINTS.sm))\n .overflow('hidden')\n\n styleBuilder\n .select(\n '.template-doc--has-toc .doc-toc:not(.doc-toc--open) .page-toc',\n theme,\n )\n .media(mediaMax(BREAKPOINTS.toc))\n .background('transparent')\n .border('none !important')\n .boxShadow('none')\n\n styleBuilder\n .select('.template-doc--has-toc .page-toc__panel-toggle', theme)\n .media(mediaMax(BREAKPOINTS.toc))\n .position('absolute')\n .left('0')\n .right('auto')\n styleBuilder\n .select('.page-toc__panel-toggle', theme)\n .height('7.5rem')\n .writingMode('vertical-rl')\n .textOrientation('mixed')\n .width(docLayoutVar('activeRailWidth'))\n .transform('rotate(180deg)')\n .bottom('5rem')\n .apply(palette.applyFont(palette.font.size.xxxs, palette.font.weight.w700))\n .border(`1px solid ${palette.current.border.default}`)\n .borderLeft('none')\n .borderRadius(`0 ${palette.radii.md} ${palette.radii.md} 0`)\n .pointerEvents('auto')\n .zIndex(2)\n .userSelect('none')\n .cursor('pointer')\n .display('flex')\n .alignItems('center')\n .justifyContent('center')\n .textTransform('uppercase')\n .position('fixed')\n\n styleBuilder\n .select(\n '.template-doc--has-toc .doc-toc:not(.doc-toc--open) .page-toc > :not(.page-toc__panel-toggle)',\n theme,\n )\n .media(mediaMax(BREAKPOINTS.toc))\n .visibility('hidden')\n styleBuilder\n .select(\n '.template-doc--has-toc .doc-toc.doc-toc--open .page-toc__panel-toggle',\n theme,\n )\n .display('none')\n}\n\nfunction registerPageTocDesktopCollapsedStyles(theme: ThemeMode) {\n styleBuilder\n .select('.template-doc--toc-collapsed .doc-toc', theme)\n .media(mediaAbove(BREAKPOINTS.toc))\n .width(docLayoutVar('activeRailWidth'))\n .position('fixed')\n .top(docLayoutVar('sidebarTop'))\n .right('0')\n .left('auto')\n .height(`calc(100dvh - ${docLayoutVar('sidebarTop')})`)\n .maxHeight('none')\n .background('transparent')\n .boxShadow('none')\n .overflow('visible')\n .transform(`translateX(calc(100% - ${docLayoutVar('activeRailWidth')}))`)\n .zIndex(140)\n styleBuilder\n .select('.doc-toc.doc-toc--open', theme)\n .media(mediaAbove(BREAKPOINTS.md))\n .width(docLayoutVar('preferredTocWidth'))\n .background('transparent')\n .boxShadow('none')\n .transform('translateX(0)')\n styleBuilder\n .select('.page-toc', theme)\n .media(mediaBelow(BREAKPOINTS.md))\n .marginInlineStart('0')\n .borderRadius('0 !important')\n styleBuilder\n .select(\n '.template-doc--toc-collapsed .doc-toc:not(.doc-toc--open) .page-toc__header, .template-doc--toc-collapsed .doc-toc:not(.doc-toc--open) .page-toc__restore-toggle, .template-doc--toc-collapsed .doc-toc:not(.doc-toc--open) .page-toc__list, .template-doc--toc-collapsed .doc-toc:not(.doc-toc--open) .page-toc__empty',\n theme,\n )\n .media(mediaAbove(BREAKPOINTS.toc))\n .display('none')\n styleBuilder\n .select(\n '.template-doc--toc-collapsed .doc-toc:not(.doc-toc--open) .page-toc',\n theme,\n )\n .width(docLayoutVar('activeRailWidth'))\n .marginLeft('0')\n .padding('0')\n .background('transparent')\n .border('none !important')\n .borderRadius('0 !important')\n .overflow('visible')\n}\n","import { styleBuilder, themes } from '@purestack/ts-style'\n\nexport function registerPanelStyles() {\n themes.forEach((theme, palette) => {\n styleBuilder\n .select('.panel', theme)\n .display('grid')\n .padding('1em')\n .boxShadow(palette.effect.panelShadow)\n .overflow('hidden')\n .transition(\n 'border-color 180ms ease, box-shadow 180ms ease, background 180ms ease',\n )\n })\n}\n","import type { ThemePalette } from '@purestack/ts-style'\nimport {\n BREAKPOINTS,\n getBreakpoint,\n mediaAbove,\n styleBuilder,\n type ThemeMode,\n themes,\n} from '@purestack/ts-style'\n\nexport function registerSearchBoxStyles() {\n themes.forEach((theme, palette) => {\n registerSearchBoxShellStyles(theme)\n registerSearchBoxResultStyles(theme, palette)\n })\n}\n\nexport function registerSearchBoxShellStyles(theme: ThemeMode) {\n registerSearchBoxShellContainerStyles(theme)\n registerSearchBoxShellAccessibilityStyles(theme)\n}\n\nfunction registerSearchBoxShellContainerStyles(theme: ThemeMode) {\n styleBuilder\n .select('.site-search', theme)\n .position('relative')\n .maxWidth('100%')\n\n styleBuilder.select('.site-search__field', theme).display('block')\n}\n\nfunction registerSearchBoxShellAccessibilityStyles(theme: ThemeMode) {\n styleBuilder\n .select('.site-search__sr-only', theme)\n .position('absolute')\n .width('1px')\n .height('1px')\n .padding('0')\n .margin('-1px')\n .overflow('hidden')\n .clip('rect(0, 0, 0, 0)')\n .whiteSpace('nowrap')\n .border('0')\n}\n\nexport function registerSearchBoxResultStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n registerSearchBoxResultContainerStyles(theme, palette)\n registerSearchBoxResultTopBarOverlayStyles(theme)\n registerSearchBoxResultListStyles(theme, palette)\n registerSearchBoxResultContentStyles(theme, palette)\n}\n\nfunction registerSearchBoxResultContainerStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.site-search__results', theme)\n .position('absolute')\n .top('calc(100% + 0.5rem)')\n .right('0')\n .width('min(35rem, calc(100vw - 2rem))')\n .maxHeight('26.25rem')\n .overflow('auto')\n .padding('0.5rem')\n .borderRadius(palette.radii.lg)\n .border(`1px solid ${palette.current.border.default}`)\n .background(palette.current.surface.rest.background)\n .boxShadow(palette.effect.strongShadow)\n .zIndex('60')\n}\n\nfunction registerSearchBoxResultTopBarOverlayStyles(theme: ThemeMode) {\n styleBuilder\n .select('.topbar .site-search__results', theme)\n .media(mediaAbove(BREAKPOINTS.sm))\n .position('fixed')\n .top('4.75rem')\n .left('50%')\n .right('auto')\n .transform('translateX(-50%)')\n .width(`min(${getBreakpoint(BREAKPOINTS.sm)}, calc(100vw - 2rem))`)\n .zIndex('120')\n}\n\nfunction registerSearchBoxResultListStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.site-search__results ul.site-search__list', theme)\n .listStyle('none')\n .margin('0')\n .padding('0')\n .display('grid')\n .gap('0.5em')\n\n styleBuilder\n .select('.site-search__results .site-search__item', theme)\n .margin('0')\n .padding('0')\n\n styleBuilder\n .select('.site-search__results .site-search__link', theme)\n .display('grid')\n .gap('0.375rem')\n .padding('0.75rem 0.875rem')\n .borderRadius(palette.radii.md)\n .border(`1px solid ${palette.current.border.subtle}`)\n .background(palette.current.surface.rest.background)\n .textDecoration('none')\n .color(palette.current.text.default)\n .transition(\n 'border-color 160ms ease, background-color 160ms ease, transform 160ms ease',\n )\n\n styleBuilder\n .select('.site-search__results .site-search__link:hover', theme)\n .background(palette.current.surfaceAlt.rest.background)\n .borderColor(palette.current.border.default)\n\n styleBuilder\n .select('.site-search__results .site-search__link:focus-visible', theme)\n .outline(`2px solid ${palette.current.border.focus}`)\n}\n\nfunction registerSearchBoxResultContentStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.site-search__results .site-search__title', theme)\n .display('block')\n .apply(palette.applyFont(palette.font.size.body, palette.font.weight.w700))\n .color(palette.current.text.default)\n .wordBreak('break-word')\n\n styleBuilder\n .select('.site-search__results .site-search__excerpt', theme)\n .display('block')\n .margin('0')\n .apply(palette.applyFont(palette.font.size.sm))\n .color(palette.current.text.subtle)\n .wordBreak('break-word')\n .display('-webkit-box')\n .lineClamp('3')\n .webkitBoxOrient('vertical')\n .overflow('hidden')\n\n styleBuilder\n .select('.site-search__results mark.site-search__highlight', theme)\n .padding('0 0.1875rem')\n .borderRadius('0.3125rem')\n .background(palette.current.button.hover.background)\n .color(palette.current.button.hover.text)\n\n styleBuilder\n .select('.site-search__results .site-search__message', theme)\n .margin('0')\n .padding('0.625rem 0.75rem')\n .borderRadius(palette.radii.md)\n .border(`1px dashed ${palette.current.border.default}`)\n .background(palette.current.surface.rest.background)\n .color(palette.current.text.subtle)\n\n styleBuilder\n .select('.site-search__results .site-search__message--error', theme)\n .border(`1px solid ${palette.semanticTone.danger.surface.rest.border}`)\n .background(palette.semanticTone.danger.surface.rest.background)\n .color(palette.semanticTone.danger.surface.rest.text)\n\n styleBuilder\n .select('.site-search__results .site-search__message--empty', theme)\n .border(`1px solid ${palette.semanticTone.warning.surface.rest.border}`)\n .background(palette.semanticTone.warning.surface.rest.background)\n .color(palette.semanticTone.warning.surface.rest.text)\n}\n","import {\n styleBuilder,\n type ThemeMode,\n type ThemePalette,\n themes,\n} from '@purestack/ts-style'\n\nexport function registerSignInStyles() {\n themes.forEach((theme, palette) => {\n registerSignInDisclosureStyles(theme)\n registerSignInAuthStateStyles(theme)\n registerSignInPanelPlacementStyles(theme)\n registerSignInAvatarStyles(theme, palette)\n })\n}\n\nfunction registerSignInDisclosureStyles(theme: ThemeMode) {\n styleBuilder.select('.sign-in', theme).display('inline-block').lineHeight('0')\n}\n\nfunction registerSignInAuthStateStyles(theme: ThemeMode) {\n styleBuilder\n .select('.sign-in__signed-out-view, .sign-in__signed-in-view', theme)\n .display('inline-flex')\n .alignItems('center')\n .justifyContent('center')\n .width('100%')\n .height('100%')\n\n styleBuilder\n .select(\n '.sign-in__signed-in-view, :scope.signed-in .sign-in:not([data-signed-in=\"false\"]) .sign-in__signed-out-view, .sign-in[data-signed-in=\"true\"] .sign-in__signed-out-view',\n theme,\n )\n .display('none')\n\n styleBuilder\n .select(\n ':scope.signed-in .sign-in:not([data-signed-in=\"false\"]) .sign-in__signed-in-view, .sign-in[data-signed-in=\"true\"] .sign-in__signed-in-view',\n theme,\n )\n .display('inline-flex')\n\n styleBuilder\n .select(\n '.sign-in__signed-in-action, :scope.signed-in .sign-in:not([data-signed-in=\"false\"]) .sign-in__signed-out-action, .sign-in[data-signed-in=\"true\"] .sign-in__signed-out-action',\n theme,\n )\n .display('none')\n\n styleBuilder\n .select(\n ':scope.signed-in .sign-in:not([data-signed-in=\"false\"]) .sign-in__signed-in-action, .sign-in[data-signed-in=\"true\"] .sign-in__signed-in-action',\n theme,\n )\n .display('inline-flex')\n}\n\nfunction registerSignInPanelPlacementStyles(theme: ThemeMode) {\n styleBuilder\n .select('.sign-in__panel', theme)\n .position('absolute')\n .display('block')\n .top('100%')\n .right('0')\n .zIndex(60)\n .minWidth('11.25rem')\n}\n\nfunction registerSignInAvatarStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder\n .select('.sign-in__avatar', theme)\n .display('block')\n .objectFit('cover')\n .borderRadius(palette.radii.pill)\n}\n","import {\n styleBuilder,\n type ThemeMode,\n type ThemePalette,\n themes,\n} from '@purestack/ts-style'\n\nexport function registerTabsStyles() {\n themes.forEach((theme, palette) => {\n registerTabsShellStyles(theme, palette)\n registerTabsControlStyles(theme, palette)\n registerTabsPanelStyles(theme)\n registerTabsResponsiveStyles(theme)\n })\n}\n\nfunction registerTabsShellStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder\n .select('.tabs', theme)\n .display('grid')\n .gap('0.6em')\n .alignContent('start')\n .padding('1em')\n .boxShadow(palette.effect.softShadow)\n\n styleBuilder\n .select('.tabs__list', theme)\n .display('grid')\n .gridTemplateColumns('repeat(auto-fit, minmax(7.5rem, 1fr))')\n .gap('0.6em 0.4em')\n .alignItems('stretch')\n .alignContent('start')\n .minWidth('0')\n\n styleBuilder.select('.tabs__item', theme).display('contents')\n\n styleBuilder\n .select('.tabs__tabs-row', theme)\n .display('none')\n .alignItems('center')\n .gap('0.5em')\n .minWidth('0')\n\n styleBuilder\n .select('.tabs__tab-buttons', theme)\n .display('flex')\n .alignItems('center')\n .gap('0.5em')\n .minWidth('0')\n .flex('1')\n .overflow('hidden')\n\n styleBuilder\n .select('.tabs__overflow', theme)\n .display('none')\n .position('relative')\n .flexShrink('0')\n\n styleBuilder.select('.tabs__overflow--visible', theme).display('inline-flex')\n\n styleBuilder\n .select('.tabs__overflow-toggle', theme)\n .width('2.3em')\n .height('2.3em')\n .padding('0')\n\n styleBuilder\n .select('.tabs__overflow-menu', theme)\n .display('none')\n .position('absolute')\n .right('0')\n .top('calc(100% + 0.375rem)')\n .zIndex(20)\n .minWidth('100%')\n .width('max-content')\n .maxWidth('min(92vw, 28.75rem)')\n .padding('0.375rem')\n .borderRadius(palette.radii.md)\n .border('1px solid transparent')\n .boxShadow(palette.effect.softShadow)\n\n styleBuilder\n .select('.tabs__overflow--open .tabs__overflow-menu', theme)\n .display('grid')\n .gap('0.25rem')\n\n styleBuilder\n .select('.tabs__overflow-option', theme)\n .width('100%')\n .padding('0.4em 0.6em')\n .textAlign('left')\n .whiteSpace('nowrap')\n .apply(palette.applyFont(palette.font.size.xxs, palette.font.weight.w600))\n\n styleBuilder.select('.tabs__overflow-option:hover', theme)\n\n styleBuilder\n .select('.tabs__select-wrap', theme)\n .display('none')\n .margin('0.125rem 0 0.25rem')\n\n styleBuilder\n .select('.tabs__select', theme)\n .display('block')\n .width('100%')\n .minHeight('2.625rem')\n .padding('0.625rem 2.5rem 0.625rem 0.75rem')\n .borderRadius(palette.radii.md)\n .border('1px solid transparent')\n .apply(palette.applyFont(palette.font.size.xs, palette.font.weight.w600))\n .appearance('none')\n .webkitAppearance('none')\n .mozAppearance('none')\n}\n\nfunction registerTabsControlStyles(theme: ThemeMode, palette: ThemePalette) {\n styleBuilder\n .select('.tabs__control', theme)\n .position('absolute')\n .width('1px')\n .height('1px')\n .opacity('0')\n .pointerEvents('none')\n\n styleBuilder\n .select('.tabs__tab, .tabs__tab-buttons > .btn', theme)\n .display('inline-flex')\n .alignItems('center')\n .justifyContent('center')\n .padding('0.5em 0.75em')\n .apply(palette.applyFont(palette.font.size.xxs, palette.font.weight.w700))\n .gap('0.5em')\n .overflow('hidden')\n .textAlign('center')\n .cursor('pointer')\n .transition(\n 'background 160ms ease, color 160ms ease, border-color 160ms ease',\n )\n\n styleBuilder.select('.tabs__tab', theme).gridRow('1')\n\n styleBuilder\n .select('.tabs__tab-buttons > .btn', theme)\n .flexShrink('0')\n .whiteSpace('nowrap')\n\n styleBuilder.select('.tabs__tab-buttons > .btn:hover', theme)\n\n styleBuilder.select('.tabs__tab-buttons > .btn.active', theme)\n\n styleBuilder\n .select('.tabs__tab-icon', theme)\n .display('inline-flex')\n .alignItems('center')\n .justifyContent('center')\n .width('1.7em')\n .height('1.7em')\n .flexShrink('0')\n\n styleBuilder\n .select('.tabs__tab-icon svg', theme)\n .display('block')\n .width('100%')\n .height('100%')\n\n styleBuilder.select('.tabs__tab-label', theme).display('inline-block')\n styleBuilder\n .select('.tabs__tab-label', theme)\n .overflow('hidden')\n .textOverflow('ellipsis')\n .whiteSpace('nowrap')\n .maxWidth('100%')\n\n styleBuilder\n .select('.tabs__control:disabled + .tabs__tab, .tabs__tab--disabled', theme)\n .opacity('0.45')\n .cursor('not-allowed')\n\n styleBuilder\n .select('.tabs__tab-buttons > .btn:disabled', theme)\n .opacity('0.45')\n .cursor('not-allowed')\n\n styleBuilder\n .select('.tabs__control:focus-visible + .tabs__tab', theme)\n .outline('2px solid currentColor')\n .outlineOffset('2px')\n\n styleBuilder\n .select('.tabs__tab-buttons > .btn[hidden]', theme)\n .display('none')\n}\n\nfunction registerTabsPanelStyles(theme: ThemeMode) {\n styleBuilder\n .select('.tabs__panel', theme)\n .gridRow('2')\n .gridColumn('1 / -1')\n .display('none')\n .minWidth('0')\n .padding('0')\n\n styleBuilder\n .select('.tabs__control:checked + .tabs__tab + .tabs__panel', theme)\n .display('block')\n\n styleBuilder\n .select(\n '.tabs__list:not(:has(.tabs__control:checked)) .tabs__item:first-child .tabs__panel',\n theme,\n )\n .display('block')\n\n styleBuilder.select('.tabs__panel-body', theme)\n}\n\nfunction registerTabsResponsiveStyles(theme: ThemeMode) {\n styleBuilder\n .select('.tabs--enhanced > .tabs__tabs-row', theme)\n .display('flex')\n\n styleBuilder\n .select('.tabs--compact > .tabs__select-wrap', theme)\n .display('block')\n\n styleBuilder\n .select('.tabs--enhanced > .tabs__list > .tabs__item > .tabs__tab', theme)\n .display('none')\n\n styleBuilder.select('.tabs--compact > .tabs__tabs-row', theme).display('none')\n\n styleBuilder\n .select('.tabs--compact > .tabs__list', theme)\n .gridTemplateColumns('1fr')\n}\n","import {\n styleBuilder,\n type ThemeMode,\n type ThemePalette,\n themes,\n} from '@purestack/ts-style'\n\nconst GLYPH_MOTION =\n 'transform 360ms cubic-bezier(0.34, 1.56, 0.64, 1), opacity 200ms ease'\n\nexport function registerThemeToggleStyles() {\n themes.forEach((theme, palette) => {\n registerThemeToggleButtonStyles(theme, palette)\n registerThemeToggleGlyphStyles(theme)\n })\n}\n\nfunction registerThemeToggleButtonStyles(\n theme: ThemeMode,\n palette: ThemePalette,\n) {\n styleBuilder\n .select('.theme-toggle, a.topbar__icon', theme)\n .display('inline-grid')\n .placeItems('center')\n .flexShrink('0')\n .width('2.625rem')\n .height('2.625rem')\n .padding('0')\n .borderRadius(palette.radii.pill)\n .border('1px solid transparent')\n .background('transparent')\n .color(palette.current.text.subtle)\n .cursor('pointer')\n .transition('background 160ms ease, color 160ms ease')\n\n styleBuilder\n .select('.theme-toggle:hover, a.topbar__icon:hover', theme)\n .background(palette.current.surface.hover.background)\n .borderColor(palette.current.surface.hover.border)\n .color(palette.current.text.default)\n\n styleBuilder\n .select('.theme-toggle:active, a.topbar__icon:active', theme)\n .background(palette.current.surface.active.background)\n\n styleBuilder\n .select('.theme-toggle:focus-visible, a.topbar__icon:focus-visible', theme)\n .outline(`2px solid ${palette.current.border.focus}`)\n .outlineOffset('2px')\n}\n\n/**\n * Both glyphs share one grid cell. The theme in use shows its own glyph and\n * tucks the other away rotated, so a switch reads as one turning motion.\n */\nfunction registerThemeToggleGlyphStyles(theme: ThemeMode) {\n const shown = theme === 'dark' ? 'dark' : 'light'\n const hidden = theme === 'dark' ? 'light' : 'dark'\n const hiddenTurn = theme === 'dark' ? '90deg' : '-90deg'\n\n styleBuilder\n .select('.theme-toggle .theme-toggle__glyph, a.topbar__icon .icon', theme)\n .gridArea('1 / 1')\n .width('1.25rem')\n .height('1.25rem')\n\n styleBuilder\n .select(`.theme-toggle .theme-toggle__glyph--${shown}`, theme)\n .opacity(1)\n .transform('rotate(0deg) scale(1)')\n\n styleBuilder\n .select(`.theme-toggle .theme-toggle__glyph--${hidden}`, theme)\n .opacity(0)\n .transform(`rotate(${hiddenTurn}) scale(0.5)`)\n\n // Animate only once the runtime has settled the first theme, so a page\n // never loads with the glyphs mid-turn.\n styleBuilder\n .select(':scope[data-theme-ready] .theme-toggle__glyph', theme)\n .transition(GLYPH_MOTION)\n\n styleBuilder\n .select(':scope[data-theme-ready] .theme-toggle__glyph', theme)\n .media('prefers-reduced-motion: reduce')\n .transition('none')\n}\n","import { styleBuilder, themes } from '@purestack/ts-style'\n\nexport function registerVirtualListStyles() {\n themes.forEach((theme) => {\n styleBuilder\n .select('.virtual-list', theme)\n .overflowY('auto')\n .overflowX('auto')\n .minWidth('0')\n\n styleBuilder\n .select('.virtual-list__spacer', theme)\n .position('relative')\n .minWidth('0')\n\n styleBuilder\n .select('.virtual-list__window', theme)\n .position('absolute')\n .top('0')\n .right('0')\n .left('0')\n .willChange('transform')\n\n styleBuilder\n .select('.virtual-list__item', theme)\n .overflow('visible')\n .minWidth('0')\n\n styleBuilder\n .select('.variable-virtual-list .virtual-list__item', theme)\n .overflow('visible')\n .minWidth('0')\n })\n}\n","import { styleBuilder, themes } from '@purestack/ts-style'\n\nexport function registerVirtualTableStyles() {\n themes.forEach((theme) => {\n styleBuilder\n .select('.virtual-table__table th, .virtual-table__table td', theme)\n .verticalAlign('middle')\n\n styleBuilder\n .select('.virtual-table__table thead', theme)\n .position('sticky')\n .top('0')\n .zIndex(2)\n\n styleBuilder\n .select(\n '.virtual-table__table tfoot th, .virtual-table__table tfoot td',\n theme,\n )\n .position('sticky')\n .bottom('0')\n .zIndex(1)\n })\n}\n","import { registerUtilityStyles } from '@purestack/ts-style'\nimport { registerBadgeStyles } from './standard/badge/badgeStyle'\nimport { registerBarChartStyles } from './standard/barChart/barChartStyle'\nimport { registerButtonStyles } from './standard/btn/btnStyle'\nimport { registerBtnGroupStyles } from './standard/btnGroup/btnGroupStyle'\nimport { registerClassicLogoStyles } from './standard/classicLogo/classicLogoStyle'\nimport { registerComposerStyles } from './standard/composer/composerStyle'\nimport { registerConsentStyles } from './standard/consent/consentStyle'\nimport { registerContactFormStyles } from './standard/contactForm/contactFormStyle'\nimport { registerDoughnutChartStyles } from './standard/doughnutChart/doughnutChartStyle'\nimport { registerDropFilesStyles } from './standard/dropFiles/dropFilesStyle'\nimport { registerExpandablePanelStyles } from './standard/expandablePanel/expandablePanelStyle'\nimport { registerFlexStyles } from './standard/flex/flexStyle'\nimport { registerFooterStyles } from './standard/footer/footerStyle'\nimport { registerFormStyles } from './standard/form/formStyle'\nimport { registerGridStyles } from './standard/grid/gridStyle'\nimport { registerIconStyles } from './standard/icon/iconStyle'\nimport { registerLineChartStyles } from './standard/lineChart/lineChartStyle'\nimport { registerLogoStyles } from './standard/logo/logoStyle'\nimport { registerModalStyles } from './standard/modal/modalStyle'\nimport { registerNavStyles } from './standard/navMenu/navMenuStyle'\nimport { registerPageTocStyles } from './standard/pageToc/pageTocStyle'\nimport { registerPanelStyles } from './standard/panel/panelStyle'\nimport { registerSearchBoxStyles } from './standard/searchBox/searchBoxStyle'\nimport { registerSignInStyles } from './standard/signIn/signInStyle'\nimport { registerTabsStyles } from './standard/tabs/tabsStyle'\nimport { registerThemeToggleStyles } from './standard/themeToggle/themeToggleStyle'\nimport { registerTopBarStyles } from './standard/topBar/topBarStyle'\nimport { registerVirtualListStyles } from './standard/virtualList/virtualListStyle'\nimport { registerVirtualTableStyles } from './standard/virtualList/virtualTableStyle'\n\nexport function registerStyles() {\n registerUtilityStyles()\n registerBarChartStyles()\n registerBadgeStyles()\n registerButtonStyles()\n registerBtnGroupStyles()\n registerComposerStyles()\n registerConsentStyles()\n registerContactFormStyles()\n registerDoughnutChartStyles()\n registerDropFilesStyles()\n registerExpandablePanelStyles()\n registerFlexStyles()\n registerFooterStyles()\n registerFormStyles()\n registerGridStyles()\n registerIconStyles()\n registerLineChartStyles()\n registerLogoStyles()\n registerClassicLogoStyles()\n registerModalStyles()\n registerNavStyles()\n registerPageTocStyles()\n registerPanelStyles()\n registerSearchBoxStyles()\n registerSignInStyles()\n registerTabsStyles()\n registerThemeToggleStyles()\n registerTopBarStyles()\n registerVirtualListStyles()\n registerVirtualTableStyles()\n}\n","import { registerSemanticToneUtilityStyles } from '@purestack/ts-style'\nimport { getSvgIcon } from '@purestack/ts-svg-icons'\nimport { defineComponents } from './defineComponents'\nimport { registerStyles } from './registerStyles'\n\n/** The standard server-rendered components and their shared CSS. */\nexport function componentsPlugin() {\n return {\n name: 'purestack:components',\n defaults: true,\n components(): Record<string, object> {\n registerStyles()\n registerSemanticToneUtilityStyles()\n return defineComponents(getSvgIcon)\n },\n }\n}\n","import type { SemanticTone } from '@purestack/ts-style'\nimport { sref } from 'regor'\n\nexport interface ToastItem {\n id: string\n message: string\n tone: SemanticTone\n}\n\nconst TOAST_TIMEOUT_MS: Partial<Record<SemanticTone, number>> = {\n info: 5000,\n success: 5000,\n warning: 10000,\n}\n\nexport class ToastStore {\n readonly items = sref<ToastItem[]>([])\n private nextId = 0\n private readonly timers = new Map<string, ReturnType<typeof setTimeout>>()\n\n notify = (text: string, tone: SemanticTone = 'info') => {\n if (!text) return\n const toast: ToastItem = {\n id: `toast-${++this.nextId}`,\n message: text,\n tone,\n }\n this.items([...this.items(), toast])\n const timeout = TOAST_TIMEOUT_MS[tone]\n if (timeout) {\n this.timers.set(\n toast.id,\n setTimeout(() => this.dismiss(toast.id), timeout),\n )\n }\n }\n\n dismiss = (id: string) => {\n const timer = this.timers.get(id)\n if (timer) clearTimeout(timer)\n this.timers.delete(id)\n this.items(this.items().filter((toast) => toast.id !== id))\n }\n\n clear = () => {\n for (const timer of this.timers.values()) clearTimeout(timer)\n this.timers.clear()\n this.items([])\n }\n}\n"],"mappings":"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AG;AACnB;AAEA,SAAS,kBAAkB,UAAoB;CAC7C,OAAQ,UAAsC,cAAc;AAC9D;;;;ACxBA,MAAa,8CAA8B,IAAI,IAAI;CACjD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAED,MAAa,iDAAiC,IAAI,IAAI;CACpD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;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"}