@ansh-ui/vue 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-B6OXKW5Q.js → chunk-AL4PPK25.js} +5 -2
- package/dist/chunk-AL4PPK25.js.map +1 -0
- package/dist/{chunk-2VSROZ2N.js → chunk-D3HH726R.js} +152 -144
- package/dist/chunk-D3HH726R.js.map +1 -0
- package/dist/{chunk-5BQEZYG6.cjs → chunk-EDAF7RAN.cjs} +163 -155
- package/dist/chunk-EDAF7RAN.cjs.map +1 -0
- package/dist/{chunk-TMG3M6TK.js → chunk-G2OX2NH2.js} +3 -3
- package/dist/chunk-G2OX2NH2.js.map +1 -0
- package/dist/{chunk-SOYRICHU.js → chunk-G3EIU6VM.js} +14 -8
- package/dist/chunk-G3EIU6VM.js.map +1 -0
- package/dist/{chunk-KCA7RNJ4.cjs → chunk-IHH6KMBY.cjs} +239 -5
- package/dist/chunk-IHH6KMBY.cjs.map +1 -0
- package/dist/{chunk-J2LA4GRP.cjs → chunk-IO6WJEJI.cjs} +122 -120
- package/dist/chunk-IO6WJEJI.cjs.map +1 -0
- package/dist/{chunk-IOXGBPOV.cjs → chunk-JJBYF7AH.cjs} +14 -8
- package/dist/chunk-JJBYF7AH.cjs.map +1 -0
- package/dist/{chunk-Z7XOFKM4.cjs → chunk-KKCZ5RUE.cjs} +4 -2
- package/dist/chunk-KKCZ5RUE.cjs.map +1 -0
- package/dist/{chunk-6ABPGOJP.js → chunk-LFGAOD32.js} +4 -2
- package/dist/chunk-LFGAOD32.js.map +1 -0
- package/dist/{chunk-EISHOEB6.cjs → chunk-MWGVDY6K.cjs} +3 -3
- package/dist/chunk-MWGVDY6K.cjs.map +1 -0
- package/dist/{chunk-FVKLCGA4.js → chunk-NJMTWLT2.js} +123 -121
- package/dist/chunk-NJMTWLT2.js.map +1 -0
- package/dist/{chunk-T425FIC7.js → chunk-NKRPZTQA.js} +238 -5
- package/dist/chunk-NKRPZTQA.js.map +1 -0
- package/dist/{chunk-JQ4YLXXM.cjs → chunk-PNR4RQ4T.cjs} +5 -2
- package/dist/chunk-PNR4RQ4T.cjs.map +1 -0
- package/dist/data.cjs +16 -16
- package/dist/data.d.cts +54 -52
- package/dist/data.d.ts +54 -52
- package/dist/data.js +1 -1
- package/dist/form.cjs +36 -36
- package/dist/form.d.cts +53 -45
- package/dist/form.d.ts +53 -45
- package/dist/form.js +1 -1
- package/dist/index.cjs +208 -180
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +33 -8
- package/dist/index.d.ts +33 -8
- package/dist/index.js +31 -15
- package/dist/index.js.map +1 -1
- package/dist/layout.cjs +13 -13
- package/dist/layout.d.cts +23 -14
- package/dist/layout.d.ts +23 -14
- package/dist/layout.js +1 -1
- package/dist/motion.cjs +11 -11
- package/dist/motion.d.cts +41 -37
- package/dist/motion.d.ts +41 -37
- package/dist/motion.js +1 -1
- package/dist/navigation.cjs +13 -9
- package/dist/navigation.d.cts +125 -4
- package/dist/navigation.d.ts +125 -4
- package/dist/navigation.js +2 -2
- package/dist/overlay.cjs +14 -14
- package/dist/overlay.d.cts +36 -33
- package/dist/overlay.d.ts +36 -33
- package/dist/overlay.js +2 -2
- package/dist/{position-Cn7qP1pn.d.cts → position-CiY171HP.d.cts} +2 -1
- package/dist/{position-Cn7qP1pn.d.ts → position-CiY171HP.d.ts} +2 -1
- package/dist/primitives.cjs +6 -6
- package/dist/primitives.d.cts +6 -5
- package/dist/primitives.d.ts +6 -5
- package/dist/primitives.js +1 -1
- package/dist/{sidebar-CTZ-Ckko.d.ts → sidebar-B9zDHMbn.d.cts} +5 -4
- package/dist/{sidebar-CQqEmpid.d.cts → sidebar-DMrKHqZ5.d.ts} +5 -4
- package/dist/styles.css +464 -0
- package/dist/{utils-IKPG3zcC.d.cts → utils-D4XwXDeX.d.cts} +2 -1
- package/dist/{utils-IKPG3zcC.d.ts → utils-D4XwXDeX.d.ts} +2 -1
- package/package.json +3 -3
- package/dist/chunk-2VSROZ2N.js.map +0 -1
- package/dist/chunk-5BQEZYG6.cjs.map +0 -1
- package/dist/chunk-6ABPGOJP.js.map +0 -1
- package/dist/chunk-B6OXKW5Q.js.map +0 -1
- package/dist/chunk-EISHOEB6.cjs.map +0 -1
- package/dist/chunk-FVKLCGA4.js.map +0 -1
- package/dist/chunk-IOXGBPOV.cjs.map +0 -1
- package/dist/chunk-J2LA4GRP.cjs.map +0 -1
- package/dist/chunk-JQ4YLXXM.cjs.map +0 -1
- package/dist/chunk-KCA7RNJ4.cjs.map +0 -1
- package/dist/chunk-SOYRICHU.js.map +0 -1
- package/dist/chunk-T425FIC7.js.map +0 -1
- package/dist/chunk-TMG3M6TK.js.map +0 -1
- package/dist/chunk-Z7XOFKM4.cjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data/table.ts","../src/components/data/display.ts","../src/components/data/progress.ts"],"names":["defineComponent","useControllableState","computed","h","_","resolveSlotContent","cx","ref","toHex","parseColor","pickReadable","onBeforeUnmount"],"mappings":"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","file":"chunk-J2LA4GRP.cjs","sourcesContent":["import {\n type PropType,\n type SetupContext,\n type VNodeChild,\n computed,\n defineComponent,\n h,\n} from 'vue'\nimport { type SlotContent, cx, resolveSlotContent } from '../../primitives/utils'\nimport { useControllableState } from '../../primitives/use-controllable-state'\n\n/**\n * Tables — the Vue counterpart of `@ansh-ui/react`'s `Table`/`DataTable`.\n *\n * A real `<table>` with `<th scope>`, not a grid of divs. The semantics are the entire point: a\n * screen reader announces \"Column 3 of 7, Status, row 12\" only if the markup says so. Every\n * div-based table reimplements navigation badly or not at all, and the CSS argument for divs\n * disappeared when `display: contents` and `position: sticky` landed.\n *\n * `DataTable` adds sorting, selection and pagination on top. It stays deliberately short of a full\n * data grid — no virtualisation, no column resizing, no pinned regions. Those need a different\n * architecture (windowing, measured columns), and half-implementing them produces a component that\n * breaks at exactly the scale it was added for.\n *\n * `DataTable` is generic over the row type `T`, which Vue only supports for a plain (non-SFC)\n * component through `defineComponent`'s \"generic setup function\" overload — the setup function\n * itself stays generic (`<T,>(props: DataTableProps<T>, ctx) => …`) while the runtime `props` list\n * is a plain array of keys. That trade means no per-prop runtime validation or default-value\n * coercion (booleans aren't coerced from attribute presence, defaults are applied by hand inside\n * `setup`, mirroring the destructured defaults the React version uses) — acceptable here because the\n * real contract for a data-shaped component like this is the TypeScript signature, not template\n * shorthand.\n */\n\nexport type SortDirection = 'asc' | 'desc'\n\nexport interface SortState {\n columnId: string\n direction: SortDirection\n}\n\nexport interface Column<T> {\n id: string\n header: SlotContent\n /** Render the cell. Receives the row and its index. */\n cell: (row: T, index: number) => VNodeChild\n /** Allow sorting by this column. */\n sortable?: boolean\n /**\n * Value used for the default comparator. Without it a sortable column falls back to comparing\n * rendered output, which sorts \"10\" before \"9\".\n */\n sortValue?: (row: T) => string | number | Date | null | undefined\n align?: 'start' | 'center' | 'end'\n /** Any CSS width — `'12rem'`, `'25%'`, `'minmax(8rem, 1fr)'`. */\n width?: string\n /** Hide below this breakpoint. Uses the token breakpoints. */\n hideBelow?: 'sm' | 'md' | 'lg'\n /** Short label announced instead of a complex header. */\n ariaLabel?: string\n}\n\nexport interface DataTableProps<T> {\n data: readonly T[]\n columns: ReadonlyArray<Column<T>>\n /** Stable row identity. Required — array index breaks selection the moment rows reorder. */\n getRowId: (row: T) => string\n /** Describes the table for screen readers. Rendered as a visually hidden `<caption>`. */\n caption: string\n /** Row checkboxes plus a header select-all. */\n selectable?: boolean\n /** `v-model:selected` — omit for an uncontrolled table that owns its own selection. */\n selected?: readonly string[]\n /** `v-model:sort` — omit for an uncontrolled table that owns its own sort state. */\n sort?: SortState | null\n defaultSort?: SortState | null\n /** Rows per page. Omit to render everything. */\n pageSize?: number\n /** `v-model:page` — omit for an uncontrolled table that owns its own page. */\n page?: number\n /** Show skeleton rows. */\n loading?: boolean\n /** Rendered in place of the body when there are no rows. */\n emptyState?: SlotContent\n onRowClick?: (row: T) => void\n /** Keep the header visible while the body scrolls. */\n stickyHeader?: boolean\n density?: 'comfortable' | 'compact'\n /** Zebra striping. Off by default — borders read as cleaner at density. */\n striped?: boolean\n /** Per-row extra class, for status highlighting. */\n rowClassName?: (row: T) => string | undefined\n}\n\ninterface DataTableEmits {\n 'update:sort': (sort: SortState | null) => void\n 'update:selected': (ids: readonly string[]) => void\n 'update:page': (page: number) => void\n}\n\nconst DATA_TABLE_PROP_KEYS = [\n 'data',\n 'columns',\n 'getRowId',\n 'caption',\n 'selectable',\n 'selected',\n 'sort',\n 'defaultSort',\n 'pageSize',\n 'page',\n 'loading',\n 'emptyState',\n 'onRowClick',\n 'stickyHeader',\n 'density',\n 'striped',\n 'rowClassName',\n] satisfies Array<keyof DataTableProps<unknown>>\n\n/** Default comparator: numbers and dates numerically, strings by locale. */\nfunction compare(a: unknown, b: unknown): number {\n if (a == null && b == null) return 0\n // Nulls sort last in both directions — an empty cell is not \"smallest\", it's absent, and\n // flipping the sort should not fill the top of the table with blanks.\n if (a == null) return 1\n if (b == null) return -1\n\n if (typeof a === 'number' && typeof b === 'number') return a - b\n if (a instanceof Date && b instanceof Date) return a.getTime() - b.getTime()\n // `localeCompare` with `numeric` so \"Item 2\" precedes \"Item 10\".\n return String(a).localeCompare(String(b), undefined, { numeric: true, sensitivity: 'base' })\n}\n\nexport const DataTable = defineComponent(\n <T>(props: DataTableProps<T>, { emit, attrs }: SetupContext<DataTableEmits>) => {\n const [sortState, setSortState] = useControllableState<SortState | null>(\n () => props.sort,\n props.defaultSort ?? null,\n (next) => emit('update:sort', next),\n )\n const [selection, setSelection] = useControllableState<readonly string[]>(\n () => props.selected,\n [],\n (next) => emit('update:selected', next),\n )\n const [currentPage, setCurrentPage] = useControllableState<number>(\n () => props.page,\n 0,\n (next) => emit('update:page', next),\n )\n\n const sorted = computed<readonly T[]>(() => {\n const state = sortState.value\n if (!state) return props.data\n const column = props.columns.find((c) => c.id === state.columnId)\n const sortValue = column?.sortValue\n if (!sortValue) return props.data\n\n // Copied before sorting: mutating the caller's array in place is a bug that surfaces as\n // \"my list reorders when I open the table\".\n const rows = [...props.data]\n rows.sort((a, b) => {\n const result = compare(sortValue(a), sortValue(b))\n return state.direction === 'asc' ? result : -result\n })\n return rows\n })\n\n const pageCount = computed(() =>\n props.pageSize ? Math.max(1, Math.ceil(sorted.value.length / props.pageSize)) : 1,\n )\n const safePage = computed(() => Math.min(currentPage.value, pageCount.value - 1))\n const visible = computed<readonly T[]>(() => {\n const pageSize = props.pageSize\n if (!pageSize) return sorted.value\n const start = safePage.value * pageSize\n return sorted.value.slice(start, start + pageSize)\n })\n\n const visibleIds = computed(() => visible.value.map(props.getRowId))\n const selectedSet = computed(() => new Set(selection.value))\n\n const allVisibleSelected = computed(\n () =>\n visibleIds.value.length > 0 && visibleIds.value.every((id) => selectedSet.value.has(id)),\n )\n const someVisibleSelected = computed(() =>\n visibleIds.value.some((id) => selectedSet.value.has(id)),\n )\n\n const toggleAll = (): void => {\n if (allVisibleSelected.value) {\n // Only clears the current page. Wiping selections on other pages would silently discard\n // work when someone selects across pages then unticks the header.\n setSelection(selection.value.filter((id) => !visibleIds.value.includes(id)))\n } else {\n setSelection([...new Set([...selection.value, ...visibleIds.value])])\n }\n }\n\n const toggleRow = (rowId: string): void => {\n setSelection(\n selectedSet.value.has(rowId)\n ? selection.value.filter((v) => v !== rowId)\n : [...selection.value, rowId],\n )\n }\n\n const onSort = (column: Column<T>): void => {\n if (!column.sortable) return\n const state = sortState.value\n // asc → desc → none. The third state matters: without it there is no way back to the data's\n // natural order, which is often \"most recent first\" from the server.\n if (state?.columnId !== column.id) {\n setSortState({ columnId: column.id, direction: 'asc' })\n } else if (state.direction === 'asc') {\n setSortState({ columnId: column.id, direction: 'desc' })\n } else {\n setSortState(null)\n }\n }\n\n return () => {\n const columns = props.columns\n const selectable = props.selectable ?? false\n const density = props.density ?? 'comfortable'\n const striped = props.striped ?? false\n const columnCount = columns.length + (selectable ? 1 : 0)\n const onRowClick = props.onRowClick\n\n const renderBody = (): VNodeChild[] => {\n if (props.loading) {\n return Array.from({ length: props.pageSize ?? 5 }, (_, rowIndex) =>\n h('tr', { key: `skeleton-${rowIndex}`, class: 'ansh-table__row' }, [\n ...Array.from({ length: columnCount }, (_, cellIndex) =>\n h('td', { key: cellIndex, class: 'ansh-table__cell' }, [\n h('span', {\n class: 'ansh-skeleton',\n style: { width: `${50 + ((cellIndex * 37) % 40)}%`, height: '1em' },\n }),\n ]),\n ),\n ]),\n )\n }\n\n if (visible.value.length === 0) {\n return [\n h('tr', {}, [\n h('td', { colspan: columnCount, class: 'ansh-table__empty' }, [\n props.emptyState ? resolveSlotContent(props.emptyState) : 'No results',\n ]),\n ]),\n ]\n }\n\n return visible.value.map((row, index) => {\n const rowId = props.getRowId(row)\n const isSelected = selectedSet.value.has(rowId)\n\n return h(\n 'tr',\n {\n key: rowId,\n class: cx(\n 'ansh-table__row',\n isSelected && 'ansh-table__row--selected',\n Boolean(onRowClick) && 'ansh-table__row--clickable',\n props.rowClassName?.(row),\n ),\n 'aria-selected': selectable ? isSelected : undefined,\n // A click that started on a control inside the row belongs to that control —\n // opening a detail view because someone ticked a checkbox is the classic\n // clickable-row bug.\n onClick: onRowClick\n ? (event: MouseEvent) => {\n const target = event.target as HTMLElement\n if (target.closest('button, a, input, select, textarea')) return\n onRowClick(row)\n }\n : undefined,\n },\n [\n selectable\n ? h('td', { class: 'ansh-table__cell ansh-table__cell--check' }, [\n h('input', {\n type: 'checkbox',\n class: 'ansh-table__checkbox',\n checked: isSelected,\n 'aria-label': `Select row ${index + 1}`,\n onChange: () => toggleRow(rowId),\n }),\n ])\n : null,\n\n ...columns.map((column) =>\n h(\n 'td',\n {\n key: column.id,\n class: cx(\n 'ansh-table__cell',\n column.align && `ansh-table__cell--${column.align}`,\n column.hideBelow && `ansh-hide-below-${column.hideBelow}`,\n ),\n },\n [column.cell(row, index)],\n ),\n ),\n ],\n )\n })\n }\n\n return h(\n 'div',\n {\n class: cx(\n 'ansh-table-wrap',\n props.stickyHeader && 'ansh-table-wrap--sticky',\n attrs.class as string,\n ),\n },\n [\n h(\n 'table',\n { class: cx('ansh-table', `ansh-table--${density}`, striped && 'ansh-table--striped') },\n [\n h('caption', { class: 'ansh-visually-hidden' }, [\n props.caption,\n sortState.value\n ? `, sorted by ${columns.find((c) => c.id === sortState.value!.columnId)?.id} ${sortState.value.direction === 'asc' ? 'ascending' : 'descending'}`\n : '',\n ]),\n\n h('thead', { class: 'ansh-table__head' }, [\n h('tr', {}, [\n selectable\n ? h('th', { scope: 'col', class: 'ansh-table__cell ansh-table__cell--check' }, [\n h('input', {\n type: 'checkbox',\n class: 'ansh-table__checkbox',\n checked: allVisibleSelected.value,\n // Mixed state when only some rows are ticked — announced as \"partially\n // checked\" rather than lying about the state. A fresh function\n // identity every render is what makes Vue re-invoke this ref callback\n // (mirroring the React version's inline ref) so the flag stays current.\n ref: (el) => {\n if (el) {\n ;(el as HTMLInputElement).indeterminate =\n !allVisibleSelected.value && someVisibleSelected.value\n }\n },\n 'aria-label': allVisibleSelected.value\n ? 'Deselect all rows'\n : 'Select all rows',\n onChange: toggleAll,\n }),\n ])\n : null,\n\n ...columns.map((column) => {\n const isSorted = sortState.value?.columnId === column.id\n return h(\n 'th',\n {\n key: column.id,\n scope: 'col',\n class: cx(\n 'ansh-table__cell',\n 'ansh-table__cell--head',\n column.align && `ansh-table__cell--${column.align}`,\n column.hideBelow && `ansh-hide-below-${column.hideBelow}`,\n ),\n style: column.width ? { width: column.width } : undefined,\n // `aria-sort` on the header is what makes a screen reader announce the\n // sort state; the arrow glyph alone conveys nothing.\n 'aria-sort': isSorted\n ? sortState.value!.direction === 'asc'\n ? 'ascending'\n : 'descending'\n : undefined,\n },\n [\n column.sortable\n ? h(\n 'button',\n {\n type: 'button',\n class: 'ansh-table__sort ansh-focusable',\n onClick: () => onSort(column),\n 'aria-label': column.ariaLabel\n ? `Sort by ${column.ariaLabel}`\n : typeof column.header === 'string'\n ? `Sort by ${column.header}`\n : 'Sort column',\n },\n [\n h('span', {}, [resolveSlotContent(column.header)]),\n h(\n 'span',\n {\n class: cx(\n 'ansh-table__arrow',\n isSorted && 'ansh-table__arrow--on',\n ),\n 'aria-hidden': 'true',\n 'data-direction': isSorted\n ? sortState.value!.direction\n : 'none',\n },\n [\n h('svg', { viewBox: '0 0 10 12', width: '10', height: '12' }, [\n h('path', {\n d: 'M5 1v10M2 4l3-3 3 3M2 8l3 3 3-3',\n stroke: 'currentColor',\n 'stroke-width': '1.4',\n fill: 'none',\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n }),\n ]),\n ],\n ),\n ],\n )\n : resolveSlotContent(column.header),\n ],\n )\n }),\n ]),\n ]),\n\n h('tbody', {}, renderBody()),\n ],\n ),\n\n // Selection count and page changes announced without stealing focus.\n h(\n 'span',\n { class: 'ansh-visually-hidden', role: 'status', 'aria-live': 'polite' },\n selectable && selection.value.length > 0 ? `${selection.value.length} selected` : '',\n ),\n\n props.pageSize && pageCount.value > 1\n ? h(Pagination, {\n page: safePage.value,\n pageCount: pageCount.value,\n total: sorted.value.length,\n pageSize: props.pageSize,\n onPageChange: setCurrentPage,\n })\n : null,\n ],\n )\n }\n },\n {\n name: 'AnshDataTable',\n inheritAttrs: false,\n props: DATA_TABLE_PROP_KEYS,\n emits: ['update:sort', 'update:selected', 'update:page'],\n },\n)\n\nexport interface PaginationProps {\n /** Zero-based. */\n page: number\n pageCount: number\n onPageChange: (page: number) => void\n /** Total row count, for the \"1–20 of 340\" summary. */\n total?: number\n pageSize?: number\n /** Page buttons either side of the current one. Default `1`. */\n siblings?: number\n}\n\n/**\n * Page navigation.\n *\n * `<nav>` with an ordered list, because that is what a pager is — a list of links to positions in a\n * sequence. The current page is marked `aria-current=\"page\"`, which is how a screen reader user\n * knows where they are without counting buttons.\n *\n * The ellipsis is `aria-hidden`; announcing \"ellipsis\" between page 3 and page 12 conveys nothing\n * that the numbers don't already.\n *\n * Fully controlled, same as the React version — there is no internal page state to fall back to, so\n * `onPageChange` stays a plain callback prop rather than a `v-model`-style emit.\n */\nexport const Pagination = defineComponent({\n name: 'AnshPagination',\n inheritAttrs: false,\n props: {\n page: { type: Number, required: true },\n pageCount: { type: Number, required: true },\n onPageChange: { type: Function as PropType<(page: number) => void>, required: true },\n total: { type: Number, default: undefined },\n pageSize: { type: Number, default: undefined },\n siblings: { type: Number, default: 1 },\n },\n setup(props, { attrs }) {\n return () => {\n const pages: Array<number | 'gap'> = []\n const first = 0\n const last = props.pageCount - 1\n\n for (let index = first; index <= last; index++) {\n const nearCurrent = Math.abs(index - props.page) <= props.siblings\n const isEdge = index === first || index === last\n if (nearCurrent || isEdge) {\n pages.push(index)\n } else if (pages[pages.length - 1] !== 'gap') {\n pages.push('gap')\n }\n }\n\n const from = props.pageSize ? props.page * props.pageSize + 1 : null\n const to =\n props.pageSize && props.total\n ? Math.min((props.page + 1) * props.pageSize, props.total)\n : null\n\n return h(\n 'nav',\n { class: cx('ansh-pagination', attrs.class as string), 'aria-label': 'Pagination' },\n [\n from !== null && to !== null\n ? h('p', { class: 'ansh-pagination__summary' }, `${from}–${to} of ${props.total}`)\n : null,\n\n h('ol', { class: 'ansh-pagination__list' }, [\n h('li', {}, [\n h(\n 'button',\n {\n type: 'button',\n class: 'ansh-pagination__button ansh-focusable',\n disabled: props.page === 0,\n 'aria-label': 'Previous page',\n onClick: () => props.onPageChange(props.page - 1),\n },\n [\n h(\n 'svg',\n { viewBox: '0 0 12 12', width: '12', height: '12', 'aria-hidden': 'true' },\n [\n h('path', {\n d: 'M7.5 2.5L4 6l3.5 3.5',\n stroke: 'currentColor',\n 'stroke-width': '1.5',\n fill: 'none',\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n }),\n ],\n ),\n ],\n ),\n ]),\n\n ...pages.map((entry, index) =>\n entry === 'gap'\n ? h(\n 'li',\n { key: `gap-${index}`, 'aria-hidden': 'true', class: 'ansh-pagination__gap' },\n '…',\n )\n : h('li', { key: entry }, [\n h(\n 'button',\n {\n type: 'button',\n class: cx(\n 'ansh-pagination__button',\n entry === props.page && 'ansh-pagination__button--current',\n 'ansh-focusable',\n ),\n 'aria-current': entry === props.page ? 'page' : undefined,\n 'aria-label': `Page ${entry + 1}`,\n onClick: () => props.onPageChange(entry),\n },\n String(entry + 1),\n ),\n ]),\n ),\n\n h('li', {}, [\n h(\n 'button',\n {\n type: 'button',\n class: 'ansh-pagination__button ansh-focusable',\n disabled: props.page >= props.pageCount - 1,\n 'aria-label': 'Next page',\n onClick: () => props.onPageChange(props.page + 1),\n },\n [\n h(\n 'svg',\n { viewBox: '0 0 12 12', width: '12', height: '12', 'aria-hidden': 'true' },\n [\n h('path', {\n d: 'M4.5 2.5L8 6l-3.5 3.5',\n stroke: 'currentColor',\n 'stroke-width': '1.5',\n fill: 'none',\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n }),\n ],\n ),\n ],\n ),\n ]),\n ]),\n ],\n )\n }\n },\n})\n\n/** A plain styled table, for content that isn't driven by data props. */\nexport const Table = defineComponent({\n name: 'AnshTable',\n inheritAttrs: false,\n props: {\n caption: { type: String, default: undefined },\n density: { type: String as PropType<'comfortable' | 'compact'>, default: 'comfortable' },\n striped: { type: Boolean, default: false },\n },\n setup(props, { slots, attrs }) {\n return () =>\n h('div', { class: cx('ansh-table-wrap', attrs.class as string) }, [\n h(\n 'table',\n {\n class: cx(\n 'ansh-table',\n `ansh-table--${props.density}`,\n props.striped && 'ansh-table--striped',\n ),\n },\n [\n props.caption ? h('caption', { class: 'ansh-visually-hidden' }, props.caption) : null,\n slots.default?.(),\n ],\n ),\n ])\n },\n})\n","import { type PropType, type VNode, computed, defineComponent, h, onBeforeUnmount, ref } from 'vue'\nimport { parseColor, pickReadable, toHex } from '@ansh-ui/core'\nimport { type SlotContent, cx, resolveSlotContent } from '../../primitives/utils'\n\n/**\n * Small display components — the Vue counterpart of `@ansh-ui/react`'s data-display primitives.\n *\n * Individually trivial, collectively most of what an application screen is made of. The care here\n * goes into the details that get skipped: a badge whose meaning isn't carried by colour alone, an\n * avatar whose fallback initials are readable against a generated background, an empty state that\n * says what to do next rather than just \"no data\".\n */\n\n// --- Badge ------------------------------------------------------------------\n\nexport type BadgeTone = 'neutral' | 'accent' | 'success' | 'warning' | 'danger' | 'info'\n\n/**\n * A status label.\n *\n * Every badge carries its meaning in **text**, not just colour. A red badge reading \"Failed\" works\n * for everyone; a red dot alone works for nobody using a screen reader and for the ~4% of the\n * population with a colour vision deficiency. The `dot` is decorative reinforcement.\n *\n * `children` in the React version becomes the default slot here. Badge extends `HTMLAttributes` in\n * React, so — unlike the rest of this file — arbitrary native attributes fall through, not just\n * `class`.\n */\nexport const Badge = defineComponent({\n name: 'AnshBadge',\n inheritAttrs: false,\n props: {\n tone: { type: String as PropType<BadgeTone>, default: 'neutral' },\n variant: { type: String as PropType<'soft' | 'solid' | 'outline'>, default: 'soft' },\n size: { type: String as PropType<'sm' | 'md'>, default: 'md' },\n /** Leading dot. Useful for statuses where the label is short. */\n dot: { type: Boolean, default: false },\n icon: { type: [String, Object, Function] as PropType<SlotContent>, default: undefined },\n },\n setup(props, { slots, attrs }) {\n return () => {\n const { class: attrClass, ...restAttrs } = attrs as Record<string, unknown>\n return h(\n 'span',\n {\n class: cx(\n 'ansh-badge',\n `ansh-badge--${props.tone}`,\n `ansh-badge--${props.variant}`,\n `ansh-badge--${props.size}`,\n attrClass as string,\n ),\n ...restAttrs,\n },\n [\n props.dot ? h('span', { class: 'ansh-badge__dot', 'aria-hidden': 'true' }) : null,\n props.icon\n ? h('span', { class: 'ansh-badge__icon' }, [resolveSlotContent(props.icon)])\n : null,\n slots.default?.(),\n ],\n )\n }\n },\n})\n\n// --- Avatar -------------------------------------------------------------------\n\nexport interface AvatarProps {\n src?: string\n /** The person's name. Used for the alt text and to derive the fallback initials. */\n name: string\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n shape?: 'circle' | 'square'\n /** Presence indicator. */\n status?: 'online' | 'offline' | 'busy' | 'away'\n}\n\n/** First letters of the first and last words — \"Ada Lovelace\" → \"AL\". */\nfunction initials(name: string): string {\n const words = name.trim().split(/\\s+/).filter(Boolean)\n if (words.length === 0) return '?'\n if (words.length === 1) return words[0]!.slice(0, 2).toUpperCase()\n return (words[0]![0]! + words[words.length - 1]![0]!).toUpperCase()\n}\n\n/** Stable hash so the same name always gets the same colour. */\nfunction hash(text: string): number {\n let value = 0\n for (let i = 0; i < text.length; i++) {\n value = (value * 31 + text.charCodeAt(i)) | 0\n }\n return Math.abs(value)\n}\n\n/**\n * Avatar extends `HTMLAttributes` in React too, so arbitrary attributes fall through here as well.\n *\n * The fallback colour is derived from the name via `@ansh-ui/core`'s colour engine, then the *text*\n * colour is chosen for contrast against it with `pickReadable` — reused rather than reimplemented, as\n * required. Picking a random background and hardcoding white text is how you get illegible initials\n * on a pale hue, and it is the most common avatar bug there is.\n */\nexport const Avatar = defineComponent({\n name: 'AnshAvatar',\n inheritAttrs: false,\n props: {\n src: { type: String, default: undefined },\n name: { type: String, required: true },\n size: { type: String as PropType<'xs' | 'sm' | 'md' | 'lg' | 'xl'>, default: 'md' },\n shape: { type: String as PropType<'circle' | 'square'>, default: 'circle' },\n status: {\n type: String as PropType<'online' | 'offline' | 'busy' | 'away'>,\n default: undefined,\n },\n },\n setup(props, { attrs }) {\n const failed = ref(false)\n\n // OKLCH rather than HSL for the generated hue: at fixed HSL lightness the yellows come out far\n // brighter than the blues, so a set of avatars looks uneven. Fixed OKLCH lightness is\n // perceptually even across the whole hue circle, which is the entire reason to use it here.\n const colors = computed(() => {\n const hue = hash(props.name) % 360\n const backgroundHex = toHex(parseColor(`oklch(72% 0.13 ${hue})`))\n return {\n background: backgroundHex,\n foreground: toHex(pickReadable(backgroundHex, '#ffffff', '#101828')),\n }\n })\n\n const showImage = computed(() => Boolean(props.src) && !failed.value)\n\n return () => {\n const { class: attrClass, ...restAttrs } = attrs as Record<string, unknown>\n return h(\n 'span',\n {\n class: cx(\n 'ansh-avatar',\n `ansh-avatar--${props.size}`,\n `ansh-avatar--${props.shape}`,\n attrClass as string,\n ),\n ...restAttrs,\n },\n [\n showImage.value\n ? h('img', {\n src: props.src,\n alt: props.name,\n class: 'ansh-avatar__image',\n // Falling back on error rather than showing a broken-image icon, which is what a\n // bare `<img>` does when a CDN URL expires.\n onError: () => {\n failed.value = true\n },\n })\n : h(\n 'span',\n {\n class: 'ansh-avatar__fallback',\n style: { background: colors.value.background, color: colors.value.foreground },\n 'aria-hidden': 'true',\n },\n initials(props.name),\n ),\n\n // The name is always available to assistive technology, even when the initials are\n // shown as decorative.\n !showImage.value ? h('span', { class: 'ansh-visually-hidden' }, props.name) : null,\n\n props.status\n ? h(\n 'span',\n { class: cx('ansh-avatar__status', `ansh-avatar__status--${props.status}`) },\n [h('span', { class: 'ansh-visually-hidden' }, props.status)],\n )\n : null,\n ],\n )\n }\n },\n})\n\n/** Overlapping avatars with an overflow count. */\nexport const AvatarGroup = defineComponent({\n name: 'AnshAvatarGroup',\n inheritAttrs: false,\n props: {\n /** Maximum shown before collapsing into a \"+N\" chip. Default `4`. */\n max: { type: Number, default: 4 },\n size: { type: String as PropType<AvatarProps['size']>, default: undefined },\n },\n setup(props, { slots, attrs }) {\n return () => {\n const items: VNode[] = slots.default?.() ?? []\n const shown = items.slice(0, props.max)\n const overflow = items.length - shown.length\n\n return h(\n 'span',\n {\n class: cx(\n 'ansh-avatar-group',\n props.size && `ansh-avatar-group--${props.size}`,\n attrs.class as string,\n ),\n },\n [\n shown,\n overflow > 0\n ? h(\n 'span',\n {\n class: cx(\n 'ansh-avatar',\n props.size && `ansh-avatar--${props.size}`,\n 'ansh-avatar--circle',\n 'ansh-avatar--more',\n ),\n },\n [\n h(\n 'span',\n { class: 'ansh-avatar__fallback', 'aria-hidden': 'true' },\n `+${overflow}`,\n ),\n h('span', { class: 'ansh-visually-hidden' }, `and ${overflow} more`),\n ],\n )\n : null,\n ],\n )\n }\n },\n})\n\n// --- Kbd ------------------------------------------------------------------\n\n/**\n * A keyboard key.\n *\n * Splits on `+` so `<Kbd>⌘+K</Kbd>` renders two keys with a separator, and the separator is\n * `aria-hidden` — a screen reader should say \"command K\", not \"command plus K\".\n *\n * The React version types its children as a plain `string` rather than a general `ReactNode`, since\n * the split only makes sense on literal text. The default slot is kept here (matching the React\n * call site, `<Kbd>⌘+K</Kbd>`) rather than switching to a string prop, and the text is recovered from\n * the rendered slot nodes — which is exactly what that slot is expected to contain.\n */\nexport const Kbd = defineComponent({\n name: 'AnshKbd',\n inheritAttrs: false,\n setup(_props, { slots, attrs }) {\n return () => {\n const nodes = slots.default?.() ?? []\n const text = nodes\n .map((node) => (typeof node.children === 'string' ? node.children : ''))\n .join('')\n const keys = text.split('+').map((key) => key.trim())\n\n return h(\n 'span',\n { class: cx('ansh-kbd-group', attrs.class as string) },\n keys.map((key, index) =>\n h('span', { key: `${key}-${index}` }, [\n index > 0 ? h('span', { class: 'ansh-kbd__plus', 'aria-hidden': 'true' }, '+') : null,\n h('kbd', { class: 'ansh-kbd' }, key),\n ]),\n ),\n )\n }\n },\n})\n\n// --- Stat -------------------------------------------------------------------\n\nexport interface StatProps {\n label: SlotContent\n value: SlotContent\n /** Change since the previous period. Sign decides the direction and colour. */\n delta?: number\n /** How the delta reads — `'2.4%'` or `'+18 users'`. Defaults to the number with a sign. */\n deltaLabel?: string\n /** For metrics where down is good, like churn or latency. */\n invertDelta?: boolean\n hint?: SlotContent\n icon?: SlotContent\n}\n\n/**\n * A single metric — the building block of every dashboard.\n *\n * The delta's direction is shown by an arrow *and* a sign *and* a colour. Three redundant signals\n * because this is the number people scan fastest and misreading it has consequences.\n */\nexport const Stat = defineComponent({\n name: 'AnshStat',\n inheritAttrs: false,\n props: {\n label: { type: [String, Object, Function] as PropType<SlotContent>, required: true },\n value: { type: [String, Object, Function] as PropType<SlotContent>, required: true },\n delta: { type: Number, default: undefined },\n deltaLabel: { type: String, default: undefined },\n invertDelta: { type: Boolean, default: false },\n hint: { type: [String, Object, Function] as PropType<SlotContent>, default: undefined },\n icon: { type: [String, Object, Function] as PropType<SlotContent>, default: undefined },\n },\n setup(props, { attrs }) {\n return () => {\n const delta = props.delta\n const positive = delta !== undefined && delta > 0\n const negative = delta !== undefined && delta < 0\n const good = props.invertDelta ? negative : positive\n\n return h('div', { class: cx('ansh-stat', attrs.class as string) }, [\n h('div', { class: 'ansh-stat__head' }, [\n h('span', { class: 'ansh-stat__label' }, [resolveSlotContent(props.label)]),\n props.icon\n ? h('span', { class: 'ansh-stat__icon' }, [resolveSlotContent(props.icon)])\n : null,\n ]),\n\n h('div', { class: 'ansh-stat__value' }, [resolveSlotContent(props.value)]),\n\n delta !== undefined\n ? h(\n 'div',\n {\n class: cx(\n 'ansh-stat__delta',\n delta !== 0 && (good ? 'ansh-stat__delta--good' : 'ansh-stat__delta--bad'),\n ),\n },\n [\n h(\n 'span',\n { class: 'ansh-stat__arrow', 'aria-hidden': 'true' },\n positive ? '↑' : negative ? '↓' : '→',\n ),\n h('span', {}, props.deltaLabel ?? `${delta > 0 ? '+' : ''}${delta}%`),\n props.hint\n ? h('span', { class: 'ansh-stat__hint' }, [resolveSlotContent(props.hint)])\n : null,\n ],\n )\n : props.hint\n ? h('div', { class: 'ansh-stat__hint' }, [resolveSlotContent(props.hint)])\n : null,\n ])\n }\n },\n})\n\n// --- Empty state --------------------------------------------------------------\n\nexport interface EmptyStateProps {\n title: SlotContent\n description?: SlotContent\n icon?: SlotContent\n /** The action that resolves the emptiness — \"Create your first invoice\". */\n action?: SlotContent\n size?: 'sm' | 'md'\n}\n\n/**\n * The \"nothing here yet\" panel.\n *\n * Always offers the next step. An empty state that only says \"No results\" leaves the user to work\n * out whether the filter is wrong, the data hasn't loaded, or they need to create something — and\n * that ambiguity is where people abandon a screen.\n */\nexport const EmptyState = defineComponent({\n name: 'AnshEmptyState',\n inheritAttrs: false,\n props: {\n title: { type: [String, Object, Function] as PropType<SlotContent>, required: true },\n description: { type: [String, Object, Function] as PropType<SlotContent>, default: undefined },\n icon: { type: [String, Object, Function] as PropType<SlotContent>, default: undefined },\n action: { type: [String, Object, Function] as PropType<SlotContent>, default: undefined },\n size: { type: String as PropType<'sm' | 'md'>, default: 'md' },\n },\n setup(props, { attrs }) {\n return () =>\n h('div', { class: cx('ansh-empty', `ansh-empty--${props.size}`, attrs.class as string) }, [\n props.icon\n ? h('span', { class: 'ansh-empty__icon', 'aria-hidden': 'true' }, [\n resolveSlotContent(props.icon),\n ])\n : null,\n h('p', { class: 'ansh-empty__title' }, [resolveSlotContent(props.title)]),\n props.description\n ? h('p', { class: 'ansh-empty__description' }, [resolveSlotContent(props.description)])\n : null,\n props.action\n ? h('div', { class: 'ansh-empty__action' }, [resolveSlotContent(props.action)])\n : null,\n ])\n },\n})\n\n// --- Description list -----------------------------------------------------\n\nexport interface DescriptionListProps {\n items: ReadonlyArray<{ term: SlotContent; description: SlotContent }>\n /** Side-by-side rather than stacked. Default `'horizontal'` on wide screens. */\n orientation?: 'horizontal' | 'vertical'\n}\n\n/**\n * Key–value pairs — the detail panel of every record in a CRM.\n *\n * A real `<dl>`/`<dt>`/`<dd>`, which is what makes a screen reader pair each label with its value\n * instead of reading twenty unconnected strings.\n */\nexport const DescriptionList = defineComponent({\n name: 'AnshDescriptionList',\n inheritAttrs: false,\n props: {\n items: {\n type: Array as PropType<DescriptionListProps['items']>,\n required: true,\n },\n orientation: { type: String as PropType<'horizontal' | 'vertical'>, default: 'horizontal' },\n },\n setup(props, { attrs }) {\n return () =>\n h(\n 'dl',\n { class: cx('ansh-dl', `ansh-dl--${props.orientation}`, attrs.class as string) },\n props.items.map((item, index) =>\n h('div', { class: 'ansh-dl__row', key: index }, [\n h('dt', { class: 'ansh-dl__term' }, [resolveSlotContent(item.term)]),\n h('dd', { class: 'ansh-dl__description' }, [resolveSlotContent(item.description)]),\n ]),\n ),\n )\n },\n})\n\n// --- Timeline ---------------------------------------------------------------\n\nexport interface TimelineItem {\n id: string\n title: SlotContent\n description?: SlotContent\n /** Rendered as-is; pass an already-formatted string or a `<time>` VNode. */\n timestamp?: SlotContent\n icon?: SlotContent\n tone?: BadgeTone\n}\n\n/**\n * A chronological feed — audit logs, order history, activity streams.\n *\n * An ordered list, because the order carries meaning. The connecting line is drawn with a\n * pseudo-element on the list item rather than a real element, so it can't be selected, read, or land\n * in a copy-paste of the page.\n */\nexport const Timeline = defineComponent({\n name: 'AnshTimeline',\n inheritAttrs: false,\n props: {\n items: { type: Array as PropType<readonly TimelineItem[]>, required: true },\n },\n setup(props, { attrs }) {\n return () =>\n h(\n 'ol',\n { class: cx('ansh-timeline', attrs.class as string) },\n props.items.map((item) =>\n h(\n 'li',\n {\n key: item.id,\n class: cx('ansh-timeline__item', item.tone && `ansh-timeline__item--${item.tone}`),\n },\n [\n h('span', { class: 'ansh-timeline__marker', 'aria-hidden': 'true' }, [\n item.icon ? resolveSlotContent(item.icon) : null,\n ]),\n h('div', { class: 'ansh-timeline__body' }, [\n h('div', { class: 'ansh-timeline__head' }, [\n h('span', { class: 'ansh-timeline__title' }, [resolveSlotContent(item.title)]),\n item.timestamp\n ? h('span', { class: 'ansh-timeline__time' }, [\n resolveSlotContent(item.timestamp),\n ])\n : null,\n ]),\n item.description\n ? h('p', { class: 'ansh-timeline__description' }, [\n resolveSlotContent(item.description),\n ])\n : null,\n ]),\n ],\n ),\n ),\n )\n },\n})\n\n// --- Code block ---------------------------------------------------------------\n\nexport interface CodeBlockProps {\n code: string\n language?: string\n /** Show a copy button. Default `true`. */\n copyable?: boolean\n /** Show line numbers. */\n lineNumbers?: boolean\n /** Filename or title shown in the header bar. */\n filename?: string\n}\n\n/**\n * A code block with a copy button.\n *\n * No syntax highlighter, matching the React version — shipping one means a tokeniser and a theme in\n * the bundle of every app that displays a snippet, for a cost that lands on consumers who may never\n * render code at all.\n */\nexport const CodeBlock = defineComponent({\n name: 'AnshCodeBlock',\n inheritAttrs: false,\n props: {\n code: { type: String, required: true },\n language: { type: String, default: 'tsx' },\n copyable: { type: Boolean, default: true },\n lineNumbers: { type: Boolean, default: false },\n filename: { type: String, default: undefined },\n },\n setup(props, { attrs }) {\n const copied = ref(false)\n let timer: ReturnType<typeof setTimeout> | undefined\n\n const copy = async (): Promise<void> => {\n try {\n await navigator.clipboard.writeText(props.code)\n copied.value = true\n clearTimeout(timer)\n timer = setTimeout(() => {\n copied.value = false\n }, 1600)\n } catch {\n // Clipboard access is refused on insecure origins and under some permission policies. The\n // code is selectable either way, so failing quietly beats an error dialog.\n }\n }\n\n onBeforeUnmount(() => clearTimeout(timer))\n\n return () => {\n const lines = props.code.split('\\n')\n\n return h('div', { class: cx('ansh-code', attrs.class as string) }, [\n props.filename || props.copyable\n ? h('div', { class: 'ansh-code__bar' }, [\n h('span', { class: 'ansh-code__filename' }, props.filename ?? props.language),\n props.copyable\n ? h(\n 'button',\n { type: 'button', class: 'ansh-code__copy ansh-focusable', onClick: copy },\n [\n copied.value ? 'Copied' : 'Copy',\n h('span', { class: 'ansh-visually-hidden' }, ' code to clipboard'),\n ],\n )\n : null,\n ])\n : null,\n\n h('pre', { class: cx('ansh-code__pre', props.lineNumbers && 'ansh-code__pre--numbered') }, [\n h(\n 'code',\n { class: `language-${props.language}` },\n props.lineNumbers\n ? lines.map((line, index) =>\n h('span', { class: 'ansh-code__line', key: index }, [\n h(\n 'span',\n { class: 'ansh-code__lineno', 'aria-hidden': 'true' },\n String(index + 1),\n ),\n line,\n '\\n',\n ]),\n )\n : props.code,\n ),\n ]),\n ])\n }\n },\n})\n","import { type PropType, defineComponent, h } from 'vue'\nimport { cx } from '../../primitives/utils'\n\n/**\n * Progress indicators — the Vue counterpart of `@ansh-ui/react`'s `Progress`/`CircularProgress`/\n * `Meter`.\n *\n * The distinction that matters and is usually missed: **progress** is work advancing toward\n * completion (`role=\"progressbar\"`), a **meter** is a static measurement within a range\n * (`role=\"meter\"` — disk usage, a score, a quota). Announcing a disk-usage bar as progress tells a\n * screen-reader user that something is loading, which it isn't.\n */\n\nexport interface ProgressProps {\n /** `0`–`max`. Omit for an indeterminate bar. */\n value?: number\n max?: number\n size?: 'sm' | 'md' | 'lg'\n tone?: 'accent' | 'success' | 'warning' | 'danger'\n /** Accessible name — \"Upload progress\", not \"Progress\". */\n label: string\n /** Show the label and percentage above the bar. */\n showLabel?: boolean\n /** Override the announced/displayed text. */\n formatValue?: (value: number, max: number) => string\n}\n\nexport const Progress = defineComponent({\n name: 'AnshProgress',\n inheritAttrs: false,\n props: {\n value: { type: Number, default: undefined },\n max: { type: Number, default: 100 },\n size: { type: String as PropType<'sm' | 'md' | 'lg'>, default: 'md' },\n tone: {\n type: String as PropType<'accent' | 'success' | 'warning' | 'danger'>,\n default: 'accent',\n },\n label: { type: String, required: true },\n showLabel: { type: Boolean, default: false },\n formatValue: {\n type: Function as PropType<(value: number, max: number) => string>,\n default: undefined,\n },\n },\n setup(props, { attrs }) {\n return () => {\n const rawValue = props.value\n const indeterminate = rawValue === undefined\n const clamped = rawValue === undefined ? 0 : Math.min(Math.max(rawValue, 0), props.max)\n const percent = (clamped / props.max) * 100\n const text = props.formatValue\n ? props.formatValue(clamped, props.max)\n : `${Math.round(percent)}%`\n\n return h(\n 'div',\n {\n class: cx(\n 'ansh-progress',\n `ansh-progress--${props.size}`,\n `ansh-progress--${props.tone}`,\n attrs.class as string,\n ),\n },\n [\n props.showLabel\n ? h('div', { class: 'ansh-progress__labels' }, [\n h('span', { class: 'ansh-progress__label' }, props.label),\n !indeterminate ? h('span', { class: 'ansh-progress__value' }, text) : null,\n ])\n : null,\n\n h(\n 'div',\n {\n class: cx(\n 'ansh-progress__track',\n indeterminate && 'ansh-progress__track--indeterminate',\n ),\n role: 'progressbar',\n 'aria-label': props.label,\n // An indeterminate progressbar omits `aria-valuenow` entirely. Setting it to 0 would\n // be announced as \"0 percent\", implying stalled work rather than unknown duration.\n ...(indeterminate\n ? null\n : {\n 'aria-valuenow': clamped,\n 'aria-valuemin': 0,\n 'aria-valuemax': props.max,\n 'aria-valuetext': text,\n }),\n },\n [\n h('div', {\n class: 'ansh-progress__fill',\n style: indeterminate ? undefined : { width: `${percent}%` },\n }),\n ],\n ),\n ],\n )\n }\n },\n})\n\nexport interface CircularProgressProps extends Omit<ProgressProps, 'size'> {\n /** Diameter in px. Default `48`. */\n size?: number\n /** Ring thickness in px. Default `4`. */\n thickness?: number\n}\n\n/**\n * A ring progress indicator.\n *\n * Drawn with `stroke-dasharray` on an SVG circle rather than with conic gradients, so the ends can\n * be rounded and the ring animates smoothly at any size. The circle is rotated -90° so 0% starts at\n * the top, which is where everyone expects it.\n *\n * `children` in the React version — content in the middle, usually the percentage — becomes the\n * default slot here.\n */\nexport const CircularProgress = defineComponent({\n name: 'AnshCircularProgress',\n inheritAttrs: false,\n props: {\n value: { type: Number, default: undefined },\n max: { type: Number, default: 100 },\n size: { type: Number, default: 48 },\n thickness: { type: Number, default: 4 },\n tone: {\n type: String as PropType<'accent' | 'success' | 'warning' | 'danger'>,\n default: 'accent',\n },\n label: { type: String, required: true },\n formatValue: {\n type: Function as PropType<(value: number, max: number) => string>,\n default: undefined,\n },\n },\n setup(props, { attrs, slots }) {\n return () => {\n const rawValue = props.value\n const indeterminate = rawValue === undefined\n const clamped = rawValue === undefined ? 25 : Math.min(Math.max(rawValue, 0), props.max)\n const fraction = clamped / props.max\n\n const radius = (props.size - props.thickness) / 2\n const circumference = 2 * Math.PI * radius\n const text = props.formatValue\n ? props.formatValue(clamped, props.max)\n : `${Math.round(fraction * 100)}%`\n\n return h(\n 'div',\n {\n class: cx(\n 'ansh-ring',\n `ansh-ring--${props.tone}`,\n indeterminate && 'ansh-ring--indeterminate',\n attrs.class as string,\n ),\n style: { width: `${props.size}px`, height: `${props.size}px` },\n role: 'progressbar',\n 'aria-label': props.label,\n ...(indeterminate\n ? null\n : {\n 'aria-valuenow': clamped,\n 'aria-valuemin': 0,\n 'aria-valuemax': props.max,\n 'aria-valuetext': text,\n }),\n },\n [\n h(\n 'svg',\n {\n width: props.size,\n height: props.size,\n viewBox: `0 0 ${props.size} ${props.size}`,\n 'aria-hidden': 'true',\n },\n [\n h('circle', {\n class: 'ansh-ring__track',\n cx: props.size / 2,\n cy: props.size / 2,\n r: radius,\n fill: 'none',\n 'stroke-width': props.thickness,\n }),\n h('circle', {\n class: 'ansh-ring__fill',\n cx: props.size / 2,\n cy: props.size / 2,\n r: radius,\n fill: 'none',\n 'stroke-width': props.thickness,\n 'stroke-linecap': 'round',\n 'stroke-dasharray': circumference,\n 'stroke-dashoffset': circumference * (1 - fraction),\n transform: `rotate(-90 ${props.size / 2} ${props.size / 2})`,\n }),\n ],\n ),\n slots.default ? h('span', { class: 'ansh-ring__content' }, slots.default()) : null,\n ],\n )\n }\n },\n})\n\nexport interface MeterProps {\n value: number\n min?: number\n max?: number\n /** Thresholds that colour the bar — below `low` is danger, above `high` is success. */\n low?: number\n high?: number\n /** Flip the colours, for metrics where high is bad (disk usage, error rate). */\n inverted?: boolean\n label: string\n showValue?: boolean\n formatValue?: (value: number) => string\n}\n\n/**\n * A measurement within a known range — quota, score, capacity.\n *\n * `role=\"meter\"`, not `progressbar`. Colour follows the thresholds, but the numeric value is always\n * rendered too, so the state is never conveyed by colour alone.\n */\nexport const Meter = defineComponent({\n name: 'AnshMeter',\n inheritAttrs: false,\n props: {\n value: { type: Number, required: true },\n min: { type: Number, default: 0 },\n max: { type: Number, default: 100 },\n low: { type: Number, default: undefined },\n high: { type: Number, default: undefined },\n inverted: { type: Boolean, default: false },\n label: { type: String, required: true },\n showValue: { type: Boolean, default: true },\n formatValue: { type: Function as PropType<(value: number) => string>, default: undefined },\n },\n setup(props, { attrs }) {\n return () => {\n const clamped = Math.min(Math.max(props.value, props.min), props.max)\n const percent = ((clamped - props.min) / (props.max - props.min)) * 100\n\n let tone: 'danger' | 'warning' | 'success' = 'success'\n if (props.low !== undefined && clamped < props.low)\n tone = props.inverted ? 'success' : 'danger'\n else if (props.high !== undefined && clamped > props.high)\n tone = props.inverted ? 'danger' : 'success'\n else if (props.low !== undefined || props.high !== undefined) tone = 'warning'\n\n const text = props.formatValue ? props.formatValue(clamped) : String(clamped)\n\n return h('div', { class: cx('ansh-meter', `ansh-meter--${tone}`, attrs.class as string) }, [\n h('div', { class: 'ansh-progress__labels' }, [\n h('span', { class: 'ansh-progress__label' }, props.label),\n props.showValue ? h('span', { class: 'ansh-progress__value' }, text) : null,\n ]),\n h(\n 'div',\n {\n class: 'ansh-progress__track',\n role: 'meter',\n 'aria-label': props.label,\n 'aria-valuenow': clamped,\n 'aria-valuemin': props.min,\n 'aria-valuemax': props.max,\n 'aria-valuetext': text,\n },\n [h('div', { class: 'ansh-progress__fill', style: { width: `${percent}%` } })],\n ),\n ])\n }\n },\n})\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/layout/index.ts","../src/components/layout/resizable.ts"],"names":["defineComponent","ref","h","cx","resolveSlotContent","Comment","Text","useControllableState"],"mappings":"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","file":"chunk-JQ4YLXXM.cjs","sourcesContent":["import { type CSSProperties, type PropType, defineComponent, h, ref } from 'vue'\nimport { type SlotContent, cx, resolveSlotContent } from '../../primitives/utils'\n\n/**\n * Layout primitives — the Vue counterpart of `@ansh-ui/react`'s layout components.\n *\n * These exist because every application rebuilds them, badly. The rebuilt versions hardcode gaps in\n * pixels, so they don't respond to a density setting; they use margins, so they collapse\n * unpredictably; and they don't handle the RTL case.\n *\n * Everything here takes a **token key**, not a raw value: `:gap=\"4\"` means `--ansh-space-4`, so a\n * layout is guaranteed to sit on the spacing scale. Passing an arbitrary string is still possible for\n * the genuine one-off, but the type nudges toward the scale first.\n *\n * Every component here declares only its own props and renders with `inheritAttrs: false` plus a\n * manual `class`/`style`/rest spread, so native attributes not declared as props (`id`, `data-*`, a\n * `@click` listener) fall through onto the rendered element automatically — the same convention\n * `Input` and `PopoverContent` use elsewhere in this package.\n */\n\n/** A key into the spacing scale, or a raw CSS length for the rare exception. */\nexport type SpaceToken =\n 0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10 | 12 | 16 | 20 | 24 | (string & {})\n\n/**\n * A CSS `align-items`/`justify-content` value, typed as a plain string rather than\n * `CSSProperties['alignItems']`/`['justifyContent']`.\n *\n * The indexed-access csstype type is structurally correct but not **portable**: embedding it in an\n * exported component's props makes TypeScript's declaration emitter need to name an internal\n * `csstype` package type by its pnpm store path, which a consumer's project can't resolve and fails\n * the build with TS2742 (\"cannot be named without a reference to .pnpm/csstype@.../csstype\"). A\n * plain string loses autocomplete for the handful of valid values; the runtime behaviour — the\n * string flows straight into the style property — is identical.\n */\ntype FlexAlign = string\n\nfunction space(value: SpaceToken | undefined): string | undefined {\n if (value === undefined) return undefined\n if (typeof value === 'string') return value\n return `var(--ansh-space-${value})`\n}\n\n/** Split `attrs` into the pieces every component here re-merges by hand. */\nfunction splitAttrs(attrs: Record<string, unknown>): {\n class: string\n style: unknown\n rest: Record<string, unknown>\n} {\n const { class: attrClass, style: attrStyle, ...rest } = attrs\n return { class: (attrClass as string | undefined) ?? '', style: attrStyle, rest }\n}\n\n// --- Stack ------------------------------------------------------------------\n\nexport interface StackProps {\n as?: string\n /** Default `'vertical'` — the direction that needs a helper more often. */\n direction?: 'horizontal' | 'vertical'\n gap?: SpaceToken\n align?: FlexAlign\n justify?: FlexAlign\n wrap?: boolean\n /** Grow to fill the cross axis. */\n stretch?: boolean\n /** Insert a hairline divider between children. */\n divide?: boolean\n}\n\nfunction stackProps() {\n return {\n as: { type: String, default: 'div' },\n gap: { type: [Number, String] as PropType<SpaceToken>, default: 4 },\n align: { type: String as PropType<FlexAlign>, default: undefined },\n justify: { type: String as PropType<FlexAlign>, default: undefined },\n wrap: { type: Boolean, default: false },\n stretch: { type: Boolean, default: false },\n divide: { type: Boolean, default: false },\n }\n}\n\nfunction stackStyle(\n direction: 'horizontal' | 'vertical',\n props: {\n gap: SpaceToken\n align?: FlexAlign\n justify?: FlexAlign\n wrap: boolean\n stretch: boolean\n },\n): CSSProperties {\n return {\n display: 'flex',\n flexDirection: direction === 'horizontal' ? 'row' : 'column',\n gap: space(props.gap),\n // Cast at the point of use, not in the public prop type — see the `FlexAlign` doc comment.\n alignItems: (props.align ??\n (props.stretch ? 'stretch' : undefined)) as CSSProperties['alignItems'],\n justifyContent: props.justify as CSSProperties['justifyContent'],\n flexWrap: props.wrap ? 'wrap' : undefined,\n }\n}\n\n/**\n * One-dimensional flex layout.\n *\n * ```vue\n * <Stack direction=\"horizontal\" :gap=\"3\" align=\"center\">\n * <Avatar :src=\"user.avatar\" :name=\"user.name\" />\n * <Stack :gap=\"0.5\">\n * <strong>{{ user.name }}</strong>\n * <Text tone=\"secondary\">{{ user.email }}</Text>\n * </Stack>\n * </Stack>\n * ```\n */\nexport const Stack = defineComponent({\n name: 'AnshStack',\n inheritAttrs: false,\n props: {\n ...stackProps(),\n direction: { type: String as PropType<'horizontal' | 'vertical'>, default: 'vertical' },\n },\n setup(props, { attrs, slots, expose }) {\n const el = ref<HTMLElement | null>(null)\n expose({\n get element() {\n return el.value\n },\n })\n\n return () => {\n const {\n class: attrClass,\n style: attrStyle,\n rest,\n } = splitAttrs(attrs as Record<string, unknown>)\n return h(\n props.as,\n {\n ref: el,\n class: cx('ansh-stack', props.divide && 'ansh-stack--divide', attrClass),\n 'data-direction': props.direction,\n style: [stackStyle(props.direction, props), attrStyle],\n ...rest,\n },\n slots.default?.(),\n )\n }\n },\n})\n\n/** Horizontal `Stack`, for readability at call sites. */\nexport const HStack = defineComponent({\n name: 'AnshHStack',\n inheritAttrs: false,\n props: stackProps(),\n setup(props, { attrs, slots, expose }) {\n const el = ref<HTMLElement | null>(null)\n expose({\n get element() {\n return el.value\n },\n })\n\n return () => {\n const {\n class: attrClass,\n style: attrStyle,\n rest,\n } = splitAttrs(attrs as Record<string, unknown>)\n return h(\n props.as,\n {\n ref: el,\n class: cx('ansh-stack', props.divide && 'ansh-stack--divide', attrClass),\n 'data-direction': 'horizontal',\n style: [stackStyle('horizontal', props), attrStyle],\n ...rest,\n },\n slots.default?.(),\n )\n }\n },\n})\n\n/** Vertical `Stack`, for symmetry with `HStack`. */\nexport const VStack = defineComponent({\n name: 'AnshVStack',\n inheritAttrs: false,\n props: stackProps(),\n setup(props, { attrs, slots, expose }) {\n const el = ref<HTMLElement | null>(null)\n expose({\n get element() {\n return el.value\n },\n })\n\n return () => {\n const {\n class: attrClass,\n style: attrStyle,\n rest,\n } = splitAttrs(attrs as Record<string, unknown>)\n return h(\n props.as,\n {\n ref: el,\n class: cx('ansh-stack', props.divide && 'ansh-stack--divide', attrClass),\n 'data-direction': 'vertical',\n style: [stackStyle('vertical', props), attrStyle],\n ...rest,\n },\n slots.default?.(),\n )\n }\n },\n})\n\n// --- Grid ---------------------------------------------------------------------\n\nexport interface GridProps {\n as?: string\n /** Fixed column count, or `'auto'` for a responsive `auto-fill` track. */\n columns?: number | 'auto'\n /** Minimum column width when `columns=\"auto\"`. Default `'16rem'`. */\n minColumnWidth?: string\n gap?: SpaceToken\n /** Row gap, when it should differ from the column gap. */\n rowGap?: SpaceToken\n align?: FlexAlign\n}\n\n/**\n * Two-dimensional layout.\n *\n * `columns=\"auto\"` uses `repeat(auto-fill, minmax(min(N, 100%), 1fr))`. The inner `min()` is what\n * stops the grid overflowing on a phone: without it, a 16rem minimum on a 15rem-wide viewport\n * produces a track wider than the screen and a horizontal scrollbar.\n */\nexport const Grid = defineComponent({\n name: 'AnshGrid',\n inheritAttrs: false,\n props: {\n as: { type: String, default: 'div' },\n columns: { type: [Number, String] as PropType<number | 'auto'>, default: 'auto' },\n minColumnWidth: { type: String, default: '16rem' },\n gap: { type: [Number, String] as PropType<SpaceToken>, default: 4 },\n rowGap: { type: [Number, String] as PropType<SpaceToken>, default: undefined },\n align: { type: String as PropType<FlexAlign>, default: undefined },\n },\n setup(props, { attrs, slots, expose }) {\n const el = ref<HTMLElement | null>(null)\n expose({\n get element() {\n return el.value\n },\n })\n\n return () => {\n const {\n class: attrClass,\n style: attrStyle,\n rest,\n } = splitAttrs(attrs as Record<string, unknown>)\n return h(\n props.as,\n {\n ref: el,\n class: cx('ansh-grid', attrClass),\n style: [\n {\n display: 'grid',\n gridTemplateColumns:\n props.columns === 'auto'\n ? `repeat(auto-fill, minmax(min(${props.minColumnWidth}, 100%), 1fr))`\n : `repeat(${props.columns}, minmax(0, 1fr))`,\n gap: space(props.gap),\n rowGap: space(props.rowGap),\n alignItems: props.align,\n },\n attrStyle,\n ],\n ...rest,\n },\n slots.default?.(),\n )\n }\n },\n})\n\nexport interface GridItemProps {\n as?: string\n /** Columns to span. `'full'` spans the whole row. */\n span?: number | 'full'\n rowSpan?: number\n}\n\nexport const GridItem = defineComponent({\n name: 'AnshGridItem',\n inheritAttrs: false,\n props: {\n as: { type: String, default: 'div' },\n span: { type: [Number, String] as PropType<number | 'full'>, default: undefined },\n rowSpan: { type: Number, default: undefined },\n },\n setup(props, { attrs, slots, expose }) {\n const el = ref<HTMLElement | null>(null)\n expose({\n get element() {\n return el.value\n },\n })\n\n return () => {\n const {\n class: attrClass,\n style: attrStyle,\n rest,\n } = splitAttrs(attrs as Record<string, unknown>)\n return h(\n props.as,\n {\n ref: el,\n class: attrClass,\n style: [\n {\n gridColumn:\n props.span === 'full'\n ? '1 / -1'\n : props.span\n ? `span ${props.span} / span ${props.span}`\n : undefined,\n gridRow: props.rowSpan ? `span ${props.rowSpan} / span ${props.rowSpan}` : undefined,\n // `minWidth: 0` on every grid child. Without it a child containing a long unbroken\n // string or a table refuses to shrink below its content width and blows out the track.\n minWidth: 0,\n },\n attrStyle,\n ],\n ...rest,\n },\n slots.default?.(),\n )\n }\n },\n})\n\n// --- Container ------------------------------------------------------------\n\nexport interface ContainerProps {\n as?: string\n /** Max content width. Default `'lg'` (72rem). */\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full'\n /** Horizontal padding. Default `6`. */\n padding?: SpaceToken\n}\n\nconst CONTAINER_WIDTH = {\n sm: '40rem',\n md: '56rem',\n lg: '72rem',\n xl: '90rem',\n full: '100%',\n} as const\n\n/** Centred, width-constrained page content. */\nexport const Container = defineComponent({\n name: 'AnshContainer',\n inheritAttrs: false,\n props: {\n as: { type: String, default: 'div' },\n size: { type: String as PropType<'sm' | 'md' | 'lg' | 'xl' | 'full'>, default: 'lg' },\n padding: { type: [Number, String] as PropType<SpaceToken>, default: 6 },\n },\n setup(props, { attrs, slots, expose }) {\n const el = ref<HTMLElement | null>(null)\n expose({\n get element() {\n return el.value\n },\n })\n\n return () => {\n const {\n class: attrClass,\n style: attrStyle,\n rest,\n } = splitAttrs(attrs as Record<string, unknown>)\n return h(\n props.as,\n {\n ref: el,\n class: cx('ansh-container', attrClass),\n style: [\n {\n width: '100%',\n maxWidth: CONTAINER_WIDTH[props.size],\n marginInline: 'auto',\n paddingInline: space(props.padding),\n },\n attrStyle,\n ],\n ...rest,\n },\n slots.default?.(),\n )\n }\n },\n})\n\n// --- Divider --------------------------------------------------------------\n\nexport interface DividerProps {\n orientation?: 'horizontal' | 'vertical'\n /** Optional label rendered in the middle of the rule. */\n label?: SlotContent\n}\n\n/**\n * A rule.\n *\n * With a label it becomes a labelled separator — the \"or continue with\" divider on a sign-in form.\n * `role=\"separator\"` is set only when there's no label; with one, it's a heading-like element and\n * announcing it as a separator loses the text.\n *\n * Renders a plain `<div>` regardless of what `as` a caller might pass, matching\n * `@ansh-ui/react`'s `Divider` — which declares `as` on its props type via `BaseProps` but never\n * actually reads it, always rendering a literal `<div>`. Not declaring `as` here reproduces that\n * quirk exactly: an `as` attribute would simply fall through as an inert HTML attribute, same as it\n * does in React.\n */\nexport const Divider = defineComponent({\n name: 'AnshDivider',\n inheritAttrs: false,\n props: {\n orientation: { type: String as PropType<'horizontal' | 'vertical'>, default: 'horizontal' },\n label: { type: [String, Object, Function] as PropType<SlotContent>, default: undefined },\n },\n setup(props, { attrs }) {\n return () => {\n const {\n class: attrClass,\n style: attrStyle,\n rest,\n } = splitAttrs(attrs as Record<string, unknown>)\n\n if (props.label !== undefined) {\n return h(\n 'div',\n {\n class: cx('ansh-divider', 'ansh-divider--labelled', attrClass),\n style: attrStyle,\n ...rest,\n },\n [\n h('span', { class: 'ansh-divider__line' }),\n h('span', { class: 'ansh-divider__label' }, [resolveSlotContent(props.label)]),\n h('span', { class: 'ansh-divider__line' }),\n ],\n )\n }\n\n return h('div', {\n role: 'separator',\n 'aria-orientation': props.orientation,\n class: cx('ansh-divider', `ansh-divider--${props.orientation}`, attrClass),\n style: attrStyle,\n ...rest,\n })\n }\n },\n})\n\n// --- Spacer -----------------------------------------------------------------\n\nexport interface SpacerProps {\n size?: SpaceToken\n /** Grow to absorb free space in a flex container. */\n grow?: boolean\n}\n\n/** Explicit empty space. `grow` pushes siblings apart in a flex row. */\nexport const Spacer = defineComponent({\n name: 'AnshSpacer',\n props: {\n size: { type: [Number, String] as PropType<SpaceToken>, default: undefined },\n grow: { type: Boolean, default: false },\n },\n setup(props) {\n return () =>\n h('span', {\n 'aria-hidden': 'true',\n style: {\n display: 'block',\n flexGrow: props.grow ? 1 : 0,\n flexShrink: 0,\n ...(props.size !== undefined\n ? { width: space(props.size), height: space(props.size) }\n : null),\n },\n })\n },\n})\n\n// --- Center -----------------------------------------------------------------\n\nexport interface CenterProps {\n as?: string\n}\n\n/** Centre a child on both axes. */\nexport const Center = defineComponent({\n name: 'AnshCenter',\n inheritAttrs: false,\n props: {\n as: { type: String, default: 'div' },\n },\n setup(props, { attrs, slots, expose }) {\n const el = ref<HTMLElement | null>(null)\n expose({\n get element() {\n return el.value\n },\n })\n\n return () => {\n const {\n class: attrClass,\n style: attrStyle,\n rest,\n } = splitAttrs(attrs as Record<string, unknown>)\n return h(\n props.as,\n {\n ref: el,\n class: attrClass,\n style: [{ display: 'grid', placeItems: 'center' }, attrStyle],\n ...rest,\n },\n slots.default?.(),\n )\n }\n },\n})\n\n// --- AspectRatio ------------------------------------------------------------\n\nexport interface AspectRatioProps {\n as?: string\n /** Width ÷ height. `16 / 9` reads better than `1.777`. Default `16 / 9`. */\n ratio?: number\n}\n\n/**\n * Reserve space at a fixed aspect ratio.\n *\n * Uses the `aspect-ratio` property rather than the padding-top hack. The reserved space is what\n * matters: an image that loads without it shifts everything below, which is a Cumulative Layout\n * Shift penalty and the most common cause of a failing Core Web Vitals score.\n */\nexport const AspectRatio = defineComponent({\n name: 'AnshAspectRatio',\n inheritAttrs: false,\n props: {\n as: { type: String, default: 'div' },\n ratio: { type: Number, default: 16 / 9 },\n },\n setup(props, { attrs, slots, expose }) {\n const el = ref<HTMLElement | null>(null)\n expose({\n get element() {\n return el.value\n },\n })\n\n return () => {\n const {\n class: attrClass,\n style: attrStyle,\n rest,\n } = splitAttrs(attrs as Record<string, unknown>)\n return h(\n props.as,\n {\n ref: el,\n class: cx('ansh-aspect', attrClass),\n style: [{ aspectRatio: String(props.ratio) }, attrStyle],\n ...rest,\n },\n slots.default?.(),\n )\n }\n },\n})\n\n// --- ScrollArea ---------------------------------------------------------------\n\nexport interface ScrollAreaProps {\n as?: string\n /** Max height before scrolling starts. */\n maxHeight?: string\n axis?: 'y' | 'x' | 'both'\n /** Fade the content at the scrollable edges. Default `true`. */\n fade?: boolean\n}\n\n/**\n * A scroll container with styled scrollbars and edge fades.\n *\n * The native scrollbar is kept — a JavaScript-rendered one breaks keyboard scrolling, mobile\n * momentum, and the OS \"scroll bar is always visible\" accessibility setting. It is only *styled*,\n * via `scrollbar-width`/`scrollbar-color` with a `::-webkit-scrollbar` fallback.\n *\n * The edge fade is a mask that appears only when there is more content in that direction. It is\n * driven by `animation-timeline: scroll()` where supported, so it costs nothing on the main thread\n * and degrades to no fade where it isn't.\n */\nexport const ScrollArea = defineComponent({\n name: 'AnshScrollArea',\n inheritAttrs: false,\n props: {\n as: { type: String, default: 'div' },\n maxHeight: { type: String, default: undefined },\n axis: { type: String as PropType<'y' | 'x' | 'both'>, default: 'y' },\n fade: { type: Boolean, default: true },\n },\n setup(props, { attrs, slots, expose }) {\n const el = ref<HTMLElement | null>(null)\n expose({\n get element() {\n return el.value\n },\n })\n\n return () => {\n const {\n class: attrClass,\n style: attrStyle,\n rest,\n } = splitAttrs(attrs as Record<string, unknown>)\n return h(\n props.as,\n {\n ref: el,\n class: cx('ansh-scroll', props.fade && 'ansh-scroll--fade', attrClass),\n 'data-axis': props.axis,\n style: [\n {\n maxHeight: props.maxHeight,\n overflowY: props.axis === 'x' ? 'hidden' : 'auto',\n overflowX: props.axis === 'y' ? 'hidden' : 'auto',\n },\n attrStyle,\n ],\n ...rest,\n },\n slots.default?.(),\n )\n }\n },\n})\n","import { Comment, type PropType, Text, type VNode, defineComponent, h, ref } from 'vue'\nimport { cx } from '../../primitives/utils'\nimport { useControllableState } from '../../primitives/use-controllable-state'\n\n/**\n * A two-pane split with a draggable divider — the Vue counterpart of `@ansh-ui/react`'s `Resizable`.\n *\n * The layout every IDE, mail client and admin console needs, and the one most often shipped as\n * mouse-only. The handle here is a real `role=\"separator\"` with `aria-valuenow`, and arrow keys move\n * it in 2% steps — WAI-ARIA calls this a window splitter and it is a documented pattern, not an\n * invention.\n *\n * Sizes are percentages rather than pixels so the split survives a window resize proportionally.\n * Dragging writes to a CSS custom property directly, bypassing Vue's renderer: a re-render per\n * pointer move makes the drag feel heavy on a complex page, and the value is only committed to state\n * on release.\n *\n * `size`/`update:size` follow this package's controlled-prop convention (see `Popover`'s\n * `open`/`update:open`), so `v-model:size` works for the controlled case; `onSizeChange` from the\n * React version becomes the `update:size` emit.\n */\n\nexport interface ResizableProps {\n direction?: 'horizontal' | 'vertical'\n /** First pane's size as a percentage, `0`–`100`. Default `50`. */\n defaultSize?: number\n size?: number\n /** Clamp, as percentages. Defaults `10` and `90`. */\n minSize?: number\n maxSize?: number\n /** Snap points in percent, e.g. `[25, 50, 75]`. Within 3% the handle snaps. */\n snapPoints?: readonly number[]\n /** Accessible name for the handle — \"Resize sidebar\", not \"Resize\". */\n label?: string\n}\n\n/** Drop whitespace-only text nodes and `v-if=\"false\"` comment placeholders from a slot's output. */\nfunction normalizeChildren(nodes: VNode[] | undefined): VNode[] {\n return (nodes ?? []).filter((node) => {\n if (node.type === Comment) return false\n if (node.type === Text && typeof node.children === 'string' && node.children.trim() === '') {\n return false\n }\n return true\n })\n}\n\nexport const Resizable = defineComponent({\n name: 'AnshResizable',\n inheritAttrs: false,\n props: {\n direction: { type: String as PropType<'horizontal' | 'vertical'>, default: 'horizontal' },\n defaultSize: { type: Number, default: 50 },\n size: { type: Number, default: undefined },\n minSize: { type: Number, default: 10 },\n maxSize: { type: Number, default: 90 },\n snapPoints: { type: Array as PropType<readonly number[]>, default: undefined },\n label: { type: String, default: 'Resize panes' },\n },\n emits: ['update:size'],\n setup(props, { attrs, slots, emit, expose }) {\n const [value, setValue] = useControllableState<number>(\n () => props.size,\n props.defaultSize,\n (next) => emit('update:size', next),\n )\n\n const containerRef = ref<HTMLDivElement | null>(null)\n const dragging = ref(false)\n\n expose({\n get element() {\n return containerRef.value\n },\n })\n\n const clamp = (next: number): number => {\n let result = Math.min(Math.max(next, props.minSize), props.maxSize)\n if (props.snapPoints) {\n for (const point of props.snapPoints) {\n if (Math.abs(result - point) < 3) {\n result = point\n break\n }\n }\n }\n return result\n }\n\n const onPointerdown = (event: PointerEvent): void => {\n const container = containerRef.value\n if (!container) return\n\n // Pointer capture keeps events coming to the handle even when the pointer outruns it, which\n // it will — a fast drag easily leaves the 8px handle behind and the drag would otherwise stop\n // dead mid-gesture.\n ;(event.currentTarget as HTMLElement).setPointerCapture(event.pointerId)\n dragging.value = true\n\n let latest = value.value\n\n const onMove = (moveEvent: PointerEvent): void => {\n const rect = container.getBoundingClientRect()\n const fraction =\n props.direction === 'horizontal'\n ? (moveEvent.clientX - rect.left) / rect.width\n : (moveEvent.clientY - rect.top) / rect.height\n\n latest = clamp(fraction * 100)\n // Written straight to the DOM. Vue state is updated once, on release.\n container.style.setProperty('--ansh-split', `${latest}%`)\n }\n\n const onUp = (): void => {\n dragging.value = false\n setValue(latest)\n window.removeEventListener('pointermove', onMove)\n window.removeEventListener('pointerup', onUp)\n window.removeEventListener('pointercancel', onUp)\n }\n\n window.addEventListener('pointermove', onMove)\n window.addEventListener('pointerup', onUp)\n window.addEventListener('pointercancel', onUp)\n }\n\n const onKeydown = (event: KeyboardEvent): void => {\n const step = event.shiftKey ? 10 : 2\n const forward = props.direction === 'horizontal' ? 'ArrowRight' : 'ArrowDown'\n const backward = props.direction === 'horizontal' ? 'ArrowLeft' : 'ArrowUp'\n\n let next: number | null = null\n if (event.key === forward) next = value.value + step\n else if (event.key === backward) next = value.value - step\n else if (event.key === 'Home') next = props.minSize\n else if (event.key === 'End') next = props.maxSize\n // Enter toggles between collapsed and the midpoint — the shortcut people expect from a\n // collapsible sidebar, and the only way to fully collapse without a mouse.\n else if (event.key === 'Enter') next = value.value <= props.minSize + 1 ? 50 : props.minSize\n\n if (next === null) return\n event.preventDefault()\n setValue(clamp(next))\n }\n\n return () => {\n const { class: attrClass, ...restAttrs } = attrs as Record<string, unknown>\n const panes = normalizeChildren(slots.default?.())\n\n return h(\n 'div',\n {\n ref: containerRef,\n class: cx(\n 'ansh-split',\n `ansh-split--${props.direction}`,\n dragging.value && 'ansh-split--dragging',\n attrClass as string,\n ),\n // Reactive on every render, mirroring the React version's `style` prop — kept in sync\n // outside a drag, when the pointer handler above is the one writing it directly.\n style: { ['--ansh-split' as string]: `${value.value}%` },\n ...restAttrs,\n },\n [\n h('div', { class: 'ansh-split__pane' }, [panes[0]]),\n\n h(\n 'div',\n {\n role: 'separator',\n tabindex: 0,\n 'aria-label': props.label,\n 'aria-orientation': props.direction === 'horizontal' ? 'vertical' : 'horizontal',\n 'aria-valuenow': Math.round(value.value),\n 'aria-valuemin': props.minSize,\n 'aria-valuemax': props.maxSize,\n class: 'ansh-split__handle ansh-focusable',\n onPointerdown,\n onKeydown,\n // Double-click resets to centre. Undocumented in the UI but universally expected, and\n // harmless to discover by accident.\n onDblclick: () => setValue(50),\n },\n [h('span', { class: 'ansh-split__grip', 'aria-hidden': 'true' })],\n ),\n\n h('div', { class: 'ansh-split__pane' }, [panes[1]]),\n ],\n )\n }\n },\n})\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/navigation/tabs.ts","../src/components/navigation/breadcrumbs.ts","../src/components/navigation/nav-menu.ts","../src/components/disclosure.ts"],"names":["defineComponent","useControllableState","useId","ref","computed","useRovingFocus","h","cx","resolveSlotContent","onBeforeUnmount","watch"],"mappings":"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","file":"chunk-KCA7RNJ4.cjs","sourcesContent":["import { type PropType, computed, defineComponent, h, ref } from 'vue'\nimport { type SlotContent, cx, resolveSlotContent, useId } from '../../primitives/utils'\nimport { useControllableState } from '../../primitives/use-controllable-state'\nimport { useRovingFocus } from '../../primitives/focus'\n\nexport interface TabItem {\n id: string\n label: SlotContent\n icon?: SlotContent\n /** Count or status shown after the label. */\n badge?: SlotContent\n disabled?: boolean\n content?: SlotContent\n}\n\nexport type TabsVariant = 'underline' | 'pill' | 'enclosed'\nexport type TabsOrientation = 'horizontal' | 'vertical'\nexport type TabsSize = 'sm' | 'md'\n\n/**\n * Tabs — the Vue counterpart of `@ansh-ui/react`'s `Tabs`.\n *\n * The full WAI-ARIA tab pattern: a single tab stop for the whole list (roving tabindex, via\n * `useRovingFocus`), arrow keys to move between tabs, Home/End to jump to the ends, and\n * `aria-controls`/`aria-labelledby` linking each tab to its panel in both directions.\n *\n * `useRovingFocus`'s `items` ref only receives an element for *enabled* tabs — a disabled tab's slot\n * is left `null`, which is exactly what the hook filters out, so disabled tabs are skipped during\n * arrow-key and Home/End navigation without any extra bookkeeping here.\n *\n * Panels are unmounted when inactive rather than hidden (the render function simply never creates\n * the `v-if`-equivalent branch), matching the React version's reasoning: hiding keeps the whole tree\n * mounted, so timers keep running, media keeps buffering and forms keep their state — the last of\n * which sounds desirable until a hidden required field blocks submission with no visible error.\n *\n * `v-model` selects the active tab id. Leave it unbound with `default-value` for an uncontrolled\n * tab bar.\n */\nexport const Tabs = defineComponent({\n name: 'AnshTabs',\n inheritAttrs: false,\n props: {\n items: { type: Array as PropType<readonly TabItem[]>, required: true },\n modelValue: { type: String, default: undefined },\n defaultValue: { type: String, default: undefined },\n variant: { type: String as PropType<TabsVariant>, default: 'underline' },\n orientation: { type: String as PropType<TabsOrientation>, default: 'horizontal' },\n size: { type: String as PropType<TabsSize>, default: 'md' },\n /** Stretch tabs to fill the available width. */\n fitted: { type: Boolean, default: false },\n /**\n * Activate on arrow-key focus, rather than requiring Enter/Space.\n *\n * Automatic is the ARIA-preferred default for cheap panels. Set `false` when switching a tab\n * triggers a fetch — arrowing past three tabs would fire three requests.\n */\n activateOnFocus: { type: Boolean, default: true },\n /** Accessible name for the tab list. */\n label: { type: String, required: true },\n },\n emits: ['update:modelValue'],\n setup(props, { attrs, emit, slots }) {\n const initialActive = props.defaultValue ?? props.items.find((item) => !item.disabled)?.id ?? ''\n\n const [active, setActive] = useControllableState(\n () => props.modelValue,\n initialActive,\n (next) => emit('update:modelValue', next),\n )\n\n const baseId = useId()\n const tabRefs = ref<Array<HTMLElement | null>>([])\n\n const activeItem = computed(() => props.items.find((item) => item.id === active.value))\n const enabledIds = computed(() =>\n props.items.filter((item) => !item.disabled).map((item) => item.id),\n )\n\n const onRovingActiveChange = (position: number): void => {\n const id = enabledIds.value[position]\n if (id !== undefined && props.activateOnFocus) setActive(id)\n }\n\n const onKeydown = useRovingFocus({\n items: tabRefs,\n active: () => enabledIds.value.indexOf(active.value),\n onActiveChange: onRovingActiveChange,\n orientation: props.orientation,\n loop: true,\n })\n\n return () => {\n const { class: attrClass, ...restAttrs } = attrs as Record<string, unknown>\n const currentActive = active.value\n const currentActiveItem = activeItem.value\n const hasPanel = currentActiveItem?.content !== undefined || Boolean(slots.default)\n\n return h(\n 'div',\n {\n class: cx(\n 'ansh-tabs',\n `ansh-tabs--${props.variant}`,\n `ansh-tabs--${props.orientation}`,\n `ansh-tabs--${props.size}`,\n attrClass as string,\n ),\n ...restAttrs,\n },\n [\n h(\n 'div',\n {\n role: 'tablist',\n 'aria-label': props.label,\n 'aria-orientation': props.orientation,\n class: cx('ansh-tabs__list', props.fitted && 'ansh-tabs__list--fitted'),\n onKeydown,\n },\n props.items.map((item, index) => {\n const selected = item.id === currentActive\n return h(\n 'button',\n {\n key: item.id,\n ref: (node) => {\n tabRefs.value[index] = item.disabled ? null : (node as HTMLElement | null)\n },\n type: 'button',\n role: 'tab',\n id: `${baseId}-tab-${item.id}`,\n 'aria-selected': selected,\n 'aria-controls': `${baseId}-panel-${item.id}`,\n // Exactly one tab is in the tab order. Without this, a bar of eight tabs costs a\n // keyboard user eight presses to pass.\n tabindex: selected ? '0' : '-1',\n disabled: item.disabled,\n class: cx(\n 'ansh-tabs__tab',\n selected && 'ansh-tabs__tab--active',\n 'ansh-focusable',\n ),\n onClick: () => setActive(item.id),\n },\n [\n item.icon !== undefined\n ? h('span', { class: 'ansh-tabs__icon' }, [resolveSlotContent(item.icon)])\n : null,\n h('span', {}, [resolveSlotContent(item.label)]),\n item.badge !== undefined\n ? h('span', { class: 'ansh-tabs__badge' }, [resolveSlotContent(item.badge)])\n : null,\n ],\n )\n }),\n ),\n\n hasPanel\n ? h(\n 'div',\n {\n role: 'tabpanel',\n id: `${baseId}-panel-${currentActive}`,\n 'aria-labelledby': `${baseId}-tab-${currentActive}`,\n // Focusable so a keyboard user can Tab from the tab into its panel and scroll it,\n // which is required when the panel has no focusable content of its own.\n tabindex: '0',\n class: 'ansh-tabs__panel ansh-focusable',\n },\n [\n currentActiveItem?.content !== undefined\n ? resolveSlotContent(currentActiveItem.content)\n : slots.default?.(),\n ],\n )\n : null,\n ],\n )\n }\n },\n})\n","import { type PropType, defineComponent, h, ref } from 'vue'\nimport { type SlotContent, cx, resolveSlotContent } from '../../primitives/utils'\n\nexport interface Crumb {\n label: SlotContent\n href?: string\n icon?: SlotContent\n onClick?: () => void\n}\n\n/**\n * A breadcrumb trail — the Vue counterpart of `@ansh-ui/react`'s `Breadcrumbs`.\n *\n * `<nav aria-label=\"Breadcrumb\">` around an ordered list, with the last item marked\n * `aria-current=\"page\"` and rendered as text rather than a link. Making the current page a link to\n * itself is a small thing that wastes a keyboard user's time on every page.\n *\n * Separators are `aria-hidden`, so the trail reads as \"Home, Projects, Invoice 401\" rather than\n * \"Home slash Projects slash\".\n */\nexport const Breadcrumbs = defineComponent({\n name: 'AnshBreadcrumbs',\n inheritAttrs: false,\n props: {\n items: { type: Array as PropType<readonly Crumb[]>, required: true },\n /** Collapse the middle when there are more than this many. Default `Infinity`. */\n maxItems: { type: Number, default: Number.POSITIVE_INFINITY },\n separator: { type: [String, Object, Function] as PropType<SlotContent>, default: undefined },\n },\n setup(props, { attrs }) {\n const expanded = ref(false)\n\n const defaultChevron = () =>\n h('svg', { viewBox: '0 0 12 12', width: '12', height: '12', 'aria-hidden': 'true' }, [\n h('path', {\n d: 'M4.5 2.5L8 6l-3.5 3.5',\n stroke: 'currentColor',\n 'stroke-width': '1.5',\n fill: 'none',\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n }),\n ])\n\n const renderChevron = () =>\n props.separator !== undefined ? resolveSlotContent(props.separator) : defaultChevron()\n\n return () => {\n const { class: attrClass, ...restAttrs } = attrs as Record<string, unknown>\n const items = props.items\n const collapsed = !expanded.value && items.length > props.maxItems && props.maxItems >= 2\n // Keep the first and the last two — the root and where you are — which is the information\n // people actually navigate by.\n const shown = collapsed ? [items[0]!, ...items.slice(-2)] : items\n const gapAfter = collapsed ? 0 : -1\n\n return h(\n 'nav',\n {\n 'aria-label': 'Breadcrumb',\n class: cx('ansh-breadcrumbs', attrClass as string),\n ...restAttrs,\n },\n [\n h(\n 'ol',\n { class: 'ansh-breadcrumbs__list' },\n shown.map((crumb, index) => {\n const isLast = index === shown.length - 1\n\n return h('li', { key: index, class: 'ansh-breadcrumbs__item' }, [\n index > 0\n ? h('span', { class: 'ansh-breadcrumbs__separator', 'aria-hidden': 'true' }, [\n renderChevron(),\n ])\n : null,\n\n isLast\n ? h('span', { class: 'ansh-breadcrumbs__current', 'aria-current': 'page' }, [\n crumb.icon !== undefined ? resolveSlotContent(crumb.icon) : null,\n resolveSlotContent(crumb.label),\n ])\n : h(\n 'a',\n {\n href: crumb.href ?? '#',\n class: 'ansh-breadcrumbs__link ansh-focusable',\n onClick: crumb.onClick\n ? (event: MouseEvent) => {\n event.preventDefault()\n crumb.onClick!()\n }\n : undefined,\n },\n [\n crumb.icon !== undefined ? resolveSlotContent(crumb.icon) : null,\n resolveSlotContent(crumb.label),\n ],\n ),\n\n index === gapAfter\n ? [\n h('span', { class: 'ansh-breadcrumbs__separator', 'aria-hidden': 'true' }, [\n renderChevron(),\n ]),\n h(\n 'button',\n {\n type: 'button',\n class: 'ansh-breadcrumbs__more ansh-focusable',\n 'aria-label': `Show ${items.length - 3} hidden breadcrumbs`,\n 'aria-expanded': false,\n onClick: () => {\n expanded.value = true\n },\n },\n '…',\n ),\n ]\n : null,\n ])\n }),\n ),\n ],\n )\n }\n },\n})\n\nexport interface Step {\n id: string\n label: SlotContent\n description?: SlotContent\n /** Marks the step failed — validation errors on a wizard page. */\n error?: boolean\n /** Allow jumping to this step directly. */\n clickable?: boolean\n}\n\nexport type StepperOrientation = 'horizontal' | 'vertical'\n\n/**\n * A progress stepper for multi-page flows — checkout, onboarding, approvals.\n *\n * The state of each step is announced in text, not just drawn: `aria-current=\"step\"` on the active\n * one and a visually hidden \"completed\"/\"current\"/\"not started\" on each. A stepper that\n * distinguishes its states with a tick glyph and a colour tells a screen-reader user nothing.\n *\n * `current` is always controlled by the caller — there is no uncontrolled mode, matching the React\n * version. `update:current` fires (in addition to plain click handling) so `v-model:current` works\n * for callers that want it.\n */\nexport const Stepper = defineComponent({\n name: 'AnshStepper',\n inheritAttrs: false,\n props: {\n steps: { type: Array as PropType<readonly Step[]>, required: true },\n /** Index of the current step. Steps before it are complete. */\n current: { type: Number, required: true },\n orientation: { type: String as PropType<StepperOrientation>, default: 'horizontal' },\n },\n emits: ['update:current'],\n setup(props, { attrs, emit }) {\n return () => {\n const { class: attrClass, ...restAttrs } = attrs as Record<string, unknown>\n\n return h(\n 'nav',\n {\n class: cx('ansh-stepper', `ansh-stepper--${props.orientation}`, attrClass as string),\n 'aria-label': 'Progress',\n ...restAttrs,\n },\n [\n h(\n 'ol',\n { class: 'ansh-stepper__list' },\n props.steps.map((step, index) => {\n const complete = index < props.current\n const active = index === props.current\n const state = step.error\n ? 'error'\n : complete\n ? 'complete'\n : active\n ? 'current'\n : 'upcoming'\n const interactive = step.clickable && index !== props.current\n\n const inner = [\n h(\n 'span',\n {\n class: cx('ansh-stepper__marker', `ansh-stepper__marker--${state}`),\n 'aria-hidden': 'true',\n },\n [\n step.error\n ? '!'\n : complete\n ? h('svg', { viewBox: '0 0 14 14', width: '12', height: '12' }, [\n h('path', {\n d: 'M2.5 7.5l3 3 6-6.5',\n stroke: 'currentColor',\n 'stroke-width': '2',\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n fill: 'none',\n }),\n ])\n : String(index + 1),\n ],\n ),\n h('span', { class: 'ansh-stepper__text' }, [\n h('span', { class: 'ansh-stepper__label' }, [resolveSlotContent(step.label)]),\n step.description\n ? h('span', { class: 'ansh-stepper__description' }, [\n resolveSlotContent(step.description),\n ])\n : null,\n h('span', { class: 'ansh-visually-hidden' }, [\n step.error\n ? ' — has errors'\n : complete\n ? ' — completed'\n : active\n ? ' — current step'\n : ' — not started',\n ]),\n ]),\n ]\n\n return h(\n 'li',\n {\n key: step.id,\n class: cx('ansh-stepper__item', `ansh-stepper__item--${state}`),\n 'aria-current': active ? 'step' : undefined,\n },\n [\n interactive\n ? h(\n 'button',\n {\n type: 'button',\n class: 'ansh-stepper__button ansh-focusable',\n onClick: () => emit('update:current', index),\n },\n inner,\n )\n : h('span', { class: 'ansh-stepper__button' }, inner),\n ],\n )\n }),\n ),\n ],\n )\n }\n },\n})\n","import { type PropType, defineComponent, h, onBeforeUnmount, ref, watch } from 'vue'\nimport { type SlotContent, cx, resolveSlotContent, useId } from '../../primitives/utils'\n\nexport interface MegaMenuLink {\n id: string\n label: string\n description?: string\n href?: string\n icon?: SlotContent\n onClick?: () => void\n}\n\nexport interface MegaMenuColumn {\n id: string\n heading?: string\n links: readonly MegaMenuLink[]\n}\n\nexport interface NavMenuItem {\n id: string\n label: string\n href?: string\n /** Columns of links. Presence of this makes the item a dropdown rather than a link. */\n columns?: readonly MegaMenuColumn[]\n /** Promoted panel on the right of the dropdown — a featured post, a CTA. */\n feature?: SlotContent\n}\n\n/**\n * A site navigation bar with mega-menu dropdowns — the Vue counterpart of `@ansh-ui/react`'s\n * `NavigationMenu` (exported under that name even though the file is `nav-menu.ts`, matching the\n * React source).\n *\n * The pattern marketing sites need and the one most likely to be built with hover alone. This one:\n *\n * - opens on hover **and** on click/Enter, so it works with a keyboard and on touch;\n * - keeps the panel open while the pointer travels toward it, via a close delay;\n * - closes on Escape, returning focus to the trigger;\n * - marks each trigger `aria-expanded` and links it to its panel with `aria-controls`.\n *\n * The panel is a plain absolutely-positioned element rather than a `Teleport`. A mega menu is\n * full-width and anchored to the bar, not to a point, so a portal's viewport-relative positioning\n * would fight the layout rather than help it — the same reasoning the React version documents.\n */\nexport const NavigationMenu = defineComponent({\n name: 'AnshNavigationMenu',\n inheritAttrs: false,\n props: {\n items: { type: Array as PropType<readonly NavMenuItem[]>, required: true },\n label: { type: String, default: 'Main navigation' },\n },\n setup(props, { attrs }) {\n const openId = ref<string | null>(null)\n const rootRef = ref<HTMLElement | null>(null)\n const baseId = useId()\n let timer: ReturnType<typeof setTimeout> | undefined\n\n const schedule = (next: string | null, delay: number): void => {\n clearTimeout(timer)\n timer = setTimeout(() => {\n openId.value = next\n }, delay)\n }\n\n onBeforeUnmount(() => clearTimeout(timer))\n\n // Close when focus leaves the whole bar. `focusout` with a `relatedTarget` containment check is\n // the reliable way to detect that — a blur handler on each trigger fires while focus is still\n // moving to a link inside the panel, closing it just before the click lands.\n watch(openId, (id, _previous, onCleanup) => {\n if (!id) return\n const root = rootRef.value\n if (!root) return\n\n const onFocusOut = (event: FocusEvent): void => {\n const next = event.relatedTarget as Node | null\n if (next && root.contains(next)) return\n openId.value = null\n }\n const onKeyDown = (event: KeyboardEvent): void => {\n if (event.key !== 'Escape') return\n openId.value = null\n root.querySelector<HTMLElement>('[aria-expanded=\"true\"]')?.focus()\n }\n\n root.addEventListener('focusout', onFocusOut)\n document.addEventListener('keydown', onKeyDown)\n onCleanup(() => {\n root.removeEventListener('focusout', onFocusOut)\n document.removeEventListener('keydown', onKeyDown)\n })\n })\n\n return () => {\n const { class: attrClass, ...restAttrs } = attrs as Record<string, unknown>\n\n return h(\n 'nav',\n {\n ref: rootRef,\n class: cx('ansh-navmenu', attrClass as string),\n 'aria-label': props.label,\n onMouseleave: () => schedule(null, 200),\n ...restAttrs,\n },\n [\n h(\n 'ul',\n { class: 'ansh-navmenu__list' },\n props.items.map((item) => {\n const hasPanel = Boolean(item.columns?.length)\n const open = openId.value === item.id\n const panelId = `${baseId}-${item.id}`\n\n if (!hasPanel) {\n return h('li', { key: item.id, class: 'ansh-navmenu__item' }, [\n h(\n 'a',\n { href: item.href ?? '#', class: 'ansh-navmenu__link ansh-focusable' },\n item.label,\n ),\n ])\n }\n\n return h(\n 'li',\n {\n key: item.id,\n class: cx('ansh-navmenu__item', open && 'ansh-navmenu__item--open'),\n onMouseenter: () => schedule(item.id, 80),\n },\n [\n h(\n 'button',\n {\n type: 'button',\n class: 'ansh-navmenu__link ansh-navmenu__link--trigger ansh-focusable',\n 'aria-expanded': open,\n 'aria-controls': panelId,\n onClick: () => {\n openId.value = open ? null : item.id\n },\n onKeydown: (event: KeyboardEvent) => {\n if (event.key !== 'ArrowDown') return\n event.preventDefault()\n openId.value = item.id\n // Focus the first link in the panel on the next frame, once it exists.\n requestAnimationFrame(() => {\n document\n .getElementById(panelId)\n ?.querySelector<HTMLElement>('a, button')\n ?.focus()\n })\n },\n },\n [\n item.label,\n h(\n 'span',\n {\n class: cx('ansh-navmenu__chevron', open && 'ansh-navmenu__chevron--open'),\n 'aria-hidden': 'true',\n },\n [\n h('svg', { viewBox: '0 0 12 12', width: '10', height: '10' }, [\n h('path', {\n d: 'M3 4.5L6 7.5l3-3',\n stroke: 'currentColor',\n 'stroke-width': '1.5',\n fill: 'none',\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n }),\n ]),\n ],\n ),\n ],\n ),\n\n h(\n 'div',\n {\n id: panelId,\n class: 'ansh-navmenu__panel',\n hidden: !open,\n onMouseenter: () => clearTimeout(timer),\n },\n [\n h('div', { class: 'ansh-navmenu__grid' }, [\n ...item.columns!.map((column) =>\n h('div', { class: 'ansh-navmenu__column', key: column.id }, [\n column.heading\n ? h('p', { class: 'ansh-navmenu__heading' }, column.heading)\n : null,\n h(\n 'ul',\n { class: 'ansh-navmenu__links' },\n column.links.map((link) =>\n h('li', { key: link.id }, [\n h(\n 'a',\n {\n href: link.href ?? '#',\n class: 'ansh-navmenu__entry ansh-focusable',\n onClick: link.onClick\n ? (event: MouseEvent) => {\n event.preventDefault()\n link.onClick!()\n openId.value = null\n }\n : () => {\n openId.value = null\n },\n },\n [\n link.icon !== undefined\n ? h(\n 'span',\n { class: 'ansh-navmenu__icon', 'aria-hidden': 'true' },\n [resolveSlotContent(link.icon)],\n )\n : null,\n h('span', { class: 'ansh-navmenu__entry-text' }, [\n h(\n 'span',\n { class: 'ansh-navmenu__entry-label' },\n link.label,\n ),\n link.description\n ? h(\n 'span',\n { class: 'ansh-navmenu__entry-description' },\n link.description,\n )\n : null,\n ]),\n ],\n ),\n ]),\n ),\n ),\n ]),\n ),\n\n item.feature !== undefined\n ? h('div', { class: 'ansh-navmenu__feature' }, [\n resolveSlotContent(item.feature),\n ])\n : null,\n ]),\n ],\n ),\n ],\n )\n }),\n ),\n ],\n )\n }\n },\n})\n","import { type PropType, defineComponent, h, ref } from 'vue'\nimport { type SlotContent, cx, resolveSlotContent, useId } from '../primitives/utils'\nimport { useControllableState } from '../primitives/use-controllable-state'\nimport { useRovingFocus } from '../primitives/focus'\n\n/**\n * Disclosure widgets — the Vue counterpart of `@ansh-ui/react`'s `disclosure.tsx`.\n *\n * The animation here is the interesting part. Height cannot be transitioned to `auto`, so the usual\n * workarounds are measuring the content with JavaScript (a forced layout on every toggle, and wrong\n * the moment the content reflows) or a `max-height` guess (which either clips tall content or makes\n * short content ease over an invisible gap, so the timing looks wrong).\n *\n * `grid-template-rows: 0fr → 1fr` transitions to the content's intrinsic height with no JavaScript\n * and no magic numbers — pure CSS keyed off the `data-state` attribute these components set. It\n * needs the extra wrapper with `min-height: 0` — without that the grid child refuses to shrink below\n * its content size and nothing animates. See `packages/react/src/styles/navigation.css`'s\n * `.ansh-collapsible__region` / `.ansh-accordion__region` rules for the mechanism itself; nothing on the\n * Vue side has to know about it beyond setting the same attribute.\n */\n\nexport interface CollapsibleProps {\n open?: boolean\n defaultOpen?: boolean\n trigger: SlotContent\n /** Render the trigger as-is rather than wrapping it in the styled button row. */\n bare?: boolean\n}\n\n/**\n * A single show/hide region.\n *\n * `v-model:open` (or `default-open` for an uncontrolled one) drives the disclosed state, routed\n * through `useControllableState` exactly like `Accordion`'s open-item set below.\n */\nexport const Collapsible = defineComponent({\n name: 'AnshCollapsible',\n inheritAttrs: false,\n props: {\n open: { type: Boolean, default: undefined },\n defaultOpen: { type: Boolean, default: false },\n trigger: { type: [String, Object, Function] as PropType<SlotContent>, required: true },\n bare: { type: Boolean, default: false },\n },\n emits: ['update:open'],\n setup(props, { attrs, emit, slots }) {\n const [isOpen, setOpen] = useControllableState(\n () => props.open,\n props.defaultOpen,\n (next) => emit('update:open', next),\n )\n const id = useId()\n\n return () => {\n const { class: attrClass, ...restAttrs } = attrs as Record<string, unknown>\n\n return h(\n 'div',\n {\n class: cx('ansh-collapsible', attrClass as string),\n 'data-state': isOpen.value ? 'open' : 'closed',\n ...restAttrs,\n },\n [\n h(\n 'button',\n {\n type: 'button',\n class: cx(\n props.bare ? 'ansh-collapsible__bare' : 'ansh-collapsible__trigger',\n 'ansh-focusable',\n ),\n 'aria-expanded': isOpen.value,\n 'aria-controls': id,\n onClick: () => setOpen(!isOpen.value),\n },\n [\n resolveSlotContent(props.trigger),\n h(\n 'span',\n {\n class: cx(\n 'ansh-collapsible__chevron',\n isOpen.value && 'ansh-collapsible__chevron--open',\n ),\n 'aria-hidden': 'true',\n },\n [\n h('svg', { viewBox: '0 0 12 12', width: '12', height: '12' }, [\n h('path', {\n d: 'M3 4.5L6 7.5l3-3',\n stroke: 'currentColor',\n 'stroke-width': '1.5',\n fill: 'none',\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n }),\n ]),\n ],\n ),\n ],\n ),\n\n h(\n 'div',\n {\n class: 'ansh-collapsible__region',\n id,\n role: 'region',\n 'data-state': isOpen.value ? 'open' : 'closed',\n },\n [\n // `inert` on the collapsed panel removes its contents from the tab order and the\n // accessibility tree. Without it, a keyboard user tabs into links inside a section\n // that is visually closed — invisible focus, and no way to tell where they are.\n h(\n 'div',\n { class: 'ansh-collapsible__inner', ...(isOpen.value ? null : { inert: true }) },\n slots.default?.(),\n ),\n ],\n ),\n ],\n )\n }\n },\n})\n\nexport interface AccordionItem {\n id: string\n title: SlotContent\n /** Secondary line under the title. */\n subtitle?: SlotContent\n icon?: SlotContent\n disabled?: boolean\n content: SlotContent\n}\n\nexport type AccordionVariant = 'bordered' | 'separated' | 'plain'\n\n/**\n * A stack of collapsible sections — the Vue counterpart of `@ansh-ui/react`'s `Accordion`.\n *\n * Headings are real `<h3>` elements wrapping the button, which is the ARIA-recommended structure: a\n * screen-reader user navigating by heading finds each section, and the button inside carries the\n * expanded state. A `<div>` with `role=\"button\"` looks identical and is invisible to heading\n * navigation.\n *\n * Arrow keys move between headers, and Home/End jump to the ends, via `useRovingFocus` bound to the\n * accordion root. Unlike `Tabs`, this is *not* a single-tab-stop composite — every header stays in\n * the normal Tab order (no `tabindex` is set on them at all), matching the ARIA APG accordion\n * pattern, where arrow keys are an addition to Tab rather than a replacement for it.\n * `useRovingFocus`'s `active()` getter is derived from `document.activeElement` rather than a stored\n * index for exactly that reason — there is no single \"selected\" header the way `Tabs` has a selected\n * tab, only whichever header currently has focus.\n *\n * `v-model` (or `default-value` for an uncontrolled accordion) is the array of open item ids, exactly\n * like the React version's `value`/`defaultValue`.\n */\nexport const Accordion = defineComponent({\n name: 'AnshAccordion',\n inheritAttrs: false,\n props: {\n items: { type: Array as PropType<readonly AccordionItem[]>, required: true },\n /** Allow several panels open at once. Default `false`. */\n multiple: { type: Boolean, default: false },\n modelValue: { type: Array as PropType<readonly string[]>, default: undefined },\n defaultValue: { type: Array as PropType<readonly string[]>, default: () => [] },\n variant: { type: String as PropType<AccordionVariant>, default: 'bordered' },\n },\n emits: ['update:modelValue'],\n setup(props, { attrs, emit }) {\n const [openIds, setOpenIds] = useControllableState<readonly string[]>(\n () => props.modelValue,\n props.defaultValue,\n (next) => emit('update:modelValue', next),\n )\n const baseId = useId()\n const headerRefs = ref<Array<HTMLElement | null>>([])\n\n const toggle = (id: string): void => {\n if (openIds.value.includes(id)) {\n setOpenIds(openIds.value.filter((entry) => entry !== id))\n } else {\n setOpenIds(props.multiple ? [...openIds.value, id] : [id])\n }\n }\n\n const onKeydown = useRovingFocus({\n items: headerRefs,\n // There is no single \"active\" header the way `Tabs` has a selected tab — arrow keys move\n // relative to whichever header currently owns focus.\n active: () => {\n const enabled = headerRefs.value.filter((node): node is HTMLElement => node !== null)\n return enabled.indexOf(document.activeElement as HTMLElement)\n },\n // The hook already moves focus to the target header; there is no selection model to sync.\n onActiveChange: () => {},\n orientation: 'vertical',\n loop: true,\n })\n\n return () => {\n const { class: attrClass, ...restAttrs } = attrs as Record<string, unknown>\n\n return h(\n 'div',\n {\n class: cx('ansh-accordion', `ansh-accordion--${props.variant}`, attrClass as string),\n onKeydown,\n ...restAttrs,\n },\n props.items.map((item, index) => {\n const open = openIds.value.includes(item.id)\n const panelId = `${baseId}-panel-${item.id}`\n const headerId = `${baseId}-header-${item.id}`\n\n return h(\n 'div',\n {\n key: item.id,\n class: cx('ansh-accordion__item', open && 'ansh-accordion__item--open'),\n 'data-state': open ? 'open' : 'closed',\n },\n [\n h('h3', { class: 'ansh-accordion__heading' }, [\n h(\n 'button',\n {\n ref: (node) => {\n headerRefs.value[index] = item.disabled ? null : (node as HTMLElement | null)\n },\n type: 'button',\n id: headerId,\n class: 'ansh-accordion__trigger ansh-focusable',\n 'aria-expanded': open,\n 'aria-controls': panelId,\n disabled: item.disabled,\n onClick: () => toggle(item.id),\n },\n [\n item.icon !== undefined\n ? h('span', { class: 'ansh-accordion__icon' }, [\n resolveSlotContent(item.icon),\n ])\n : null,\n h('span', { class: 'ansh-accordion__text' }, [\n h('span', { class: 'ansh-accordion__title' }, [\n resolveSlotContent(item.title),\n ]),\n item.subtitle\n ? h('span', { class: 'ansh-accordion__subtitle' }, [\n resolveSlotContent(item.subtitle),\n ])\n : null,\n ]),\n h(\n 'span',\n {\n class: cx(\n 'ansh-accordion__chevron',\n open && 'ansh-accordion__chevron--open',\n ),\n 'aria-hidden': 'true',\n },\n [\n h('svg', { viewBox: '0 0 12 12', width: '12', height: '12' }, [\n h('path', {\n d: 'M3 4.5L6 7.5l3-3',\n stroke: 'currentColor',\n 'stroke-width': '1.5',\n fill: 'none',\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n }),\n ]),\n ],\n ),\n ],\n ),\n ]),\n\n h(\n 'div',\n {\n class: 'ansh-accordion__region',\n id: panelId,\n role: 'region',\n 'aria-labelledby': headerId,\n 'data-state': open ? 'open' : 'closed',\n },\n [\n h('div', { class: 'ansh-accordion__panel', ...(open ? null : { inert: true }) }, [\n resolveSlotContent(item.content),\n ]),\n ],\n ),\n ],\n )\n }),\n )\n }\n },\n})\n\nexport interface DisclosureListProps {\n /** Simple show-more list — the pattern for \"N more items\". */\n items: readonly SlotContent[]\n /** How many to show before collapsing. Default `3`. */\n initial?: number\n moreLabel?: (hidden: number) => string\n lessLabel?: string\n}\n\n/** Show a few items with a \"show N more\" toggle. */\nexport const DisclosureList = defineComponent({\n name: 'AnshDisclosureList',\n inheritAttrs: false,\n props: {\n items: { type: Array as PropType<readonly SlotContent[]>, required: true },\n initial: { type: Number, default: 3 },\n moreLabel: {\n type: Function as PropType<(hidden: number) => string>,\n default: (hidden: number) => `Show ${hidden} more`,\n },\n lessLabel: { type: String, default: 'Show less' },\n },\n setup(props, { attrs }) {\n const expanded = ref(false)\n const id = useId()\n\n return () => {\n const { class: attrClass, ...restAttrs } = attrs as Record<string, unknown>\n const hidden = props.items.length - props.initial\n\n if (hidden <= 0) {\n return h(\n 'ul',\n { class: cx('ansh-disclosure-list', attrClass as string), ...restAttrs },\n props.items.map((item, index) => h('li', { key: index }, [resolveSlotContent(item)])),\n )\n }\n\n const shown = expanded.value ? props.items : props.items.slice(0, props.initial)\n\n return h('div', { class: attrClass as string, ...restAttrs }, [\n h(\n 'ul',\n { class: 'ansh-disclosure-list', id },\n shown.map((item, index) => h('li', { key: index }, [resolveSlotContent(item)])),\n ),\n h(\n 'button',\n {\n type: 'button',\n class: 'ansh-disclosure-list__toggle ansh-focusable',\n 'aria-expanded': expanded.value,\n 'aria-controls': id,\n onClick: () => {\n expanded.value = !expanded.value\n },\n },\n expanded.value ? props.lessLabel : props.moreLabel(hidden),\n ),\n ])\n }\n },\n})\n"]}
|