@hoardodile/ui 0.1.6 → 0.1.8
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-2BVZEYNW.js +97 -0
- package/dist/chunk-2BVZEYNW.js.map +1 -0
- package/dist/chunk-2DTR6CD5.js +47 -0
- package/dist/chunk-2DTR6CD5.js.map +1 -0
- package/dist/chunk-2HWSCY4T.js +20 -0
- package/dist/chunk-2HWSCY4T.js.map +1 -0
- package/dist/chunk-363CCKQ7.js +75 -0
- package/dist/chunk-363CCKQ7.js.map +1 -0
- package/dist/chunk-3ZQJWBVB.js +30 -0
- package/dist/chunk-3ZQJWBVB.js.map +1 -0
- package/dist/chunk-4D36OO5W.js +277 -0
- package/dist/chunk-4D36OO5W.js.map +1 -0
- package/dist/chunk-4UITFLIN.js +31 -0
- package/dist/chunk-4UITFLIN.js.map +1 -0
- package/dist/chunk-6HAIUXNZ.js +11 -0
- package/dist/chunk-6HAIUXNZ.js.map +1 -0
- package/dist/chunk-7JMMFY67.js +62 -0
- package/dist/chunk-7JMMFY67.js.map +1 -0
- package/dist/chunk-7MWWHI6T.js +1149 -0
- package/dist/chunk-7MWWHI6T.js.map +1 -0
- package/dist/chunk-AEHTAUAQ.js +65 -0
- package/dist/chunk-AEHTAUAQ.js.map +1 -0
- package/dist/chunk-ASRGQ5BD.js +130 -0
- package/dist/chunk-ASRGQ5BD.js.map +1 -0
- package/dist/chunk-BFGOE5AI.js +187 -0
- package/dist/chunk-BFGOE5AI.js.map +1 -0
- package/dist/chunk-BRT25IDQ.js +46 -0
- package/dist/chunk-BRT25IDQ.js.map +1 -0
- package/dist/chunk-BU5DQOPM.js +29 -0
- package/dist/chunk-BU5DQOPM.js.map +1 -0
- package/dist/chunk-BWASOT5X.js +266 -0
- package/dist/chunk-BWASOT5X.js.map +1 -0
- package/dist/chunk-F32V4Z7Q.js +26 -0
- package/dist/chunk-F32V4Z7Q.js.map +1 -0
- package/dist/chunk-F7RHDRRJ.js +24 -0
- package/dist/chunk-F7RHDRRJ.js.map +1 -0
- package/dist/chunk-FH5RNCFR.js +21 -0
- package/dist/chunk-FH5RNCFR.js.map +1 -0
- package/dist/chunk-GKSX5ULZ.js +513 -0
- package/dist/chunk-GKSX5ULZ.js.map +1 -0
- package/dist/chunk-JPFDNRCA.js +26 -0
- package/dist/chunk-JPFDNRCA.js.map +1 -0
- package/dist/chunk-KNPRUZ4H.js +13 -0
- package/dist/chunk-KNPRUZ4H.js.map +1 -0
- package/dist/chunk-KOFWEPPB.js +254 -0
- package/dist/chunk-KOFWEPPB.js.map +1 -0
- package/dist/chunk-M5OJN54O.js +10 -0
- package/dist/chunk-M5OJN54O.js.map +1 -0
- package/dist/chunk-OEVALKQ5.js +51 -0
- package/dist/chunk-OEVALKQ5.js.map +1 -0
- package/dist/chunk-OW5FWLPH.js +33 -0
- package/dist/chunk-OW5FWLPH.js.map +1 -0
- package/dist/chunk-POX7TXBH.js +41 -0
- package/dist/chunk-POX7TXBH.js.map +1 -0
- package/dist/chunk-PWJBHUM2.js +58 -0
- package/dist/chunk-PWJBHUM2.js.map +1 -0
- package/dist/chunk-QGMDWGJT.js +23 -0
- package/dist/chunk-QGMDWGJT.js.map +1 -0
- package/dist/chunk-QGTQQNUL.js +36 -0
- package/dist/chunk-QGTQQNUL.js.map +1 -0
- package/dist/chunk-SAY52ZKI.js +152 -0
- package/dist/chunk-SAY52ZKI.js.map +1 -0
- package/dist/chunk-SKDPGSRL.js +166 -0
- package/dist/chunk-SKDPGSRL.js.map +1 -0
- package/dist/chunk-T56ARCUK.js +38 -0
- package/dist/chunk-T56ARCUK.js.map +1 -0
- package/dist/chunk-TDDHQZ62.js +227 -0
- package/dist/chunk-TDDHQZ62.js.map +1 -0
- package/dist/chunk-TMQ5OMBK.js +29 -0
- package/dist/chunk-TMQ5OMBK.js.map +1 -0
- package/dist/chunk-UEVND7AS.js +23 -0
- package/dist/chunk-UEVND7AS.js.map +1 -0
- package/dist/chunk-UPWHCG4S.js +40 -0
- package/dist/chunk-UPWHCG4S.js.map +1 -0
- package/dist/chunk-VWUNF7VX.js +3 -0
- package/dist/chunk-VWUNF7VX.js.map +1 -0
- package/dist/chunk-WI6O7GZK.js +45 -0
- package/dist/chunk-WI6O7GZK.js.map +1 -0
- package/dist/chunk-WVEK3WCX.js +21 -0
- package/dist/chunk-WVEK3WCX.js.map +1 -0
- package/dist/chunk-XBPQEZES.js +48 -0
- package/dist/chunk-XBPQEZES.js.map +1 -0
- package/dist/chunk-ZYAGKKR7.js +142 -0
- package/dist/chunk-ZYAGKKR7.js.map +1 -0
- package/dist/components/alert.js +2 -21
- package/dist/components/alert.js.map +1 -1
- package/dist/components/app-dialog.js +10 -654
- package/dist/components/app-dialog.js.map +1 -1
- package/dist/components/badge.js +2 -23
- package/dist/components/badge.js.map +1 -1
- package/dist/components/breadcrumb.js +5 -501
- package/dist/components/breadcrumb.js.map +1 -1
- package/dist/components/button.js +3 -76
- package/dist/components/button.js.map +1 -1
- package/dist/components/caption-bar.js +7 -518
- package/dist/components/caption-bar.js.map +1 -1
- package/dist/components/checkbox.js +4 -74
- package/dist/components/checkbox.js.map +1 -1
- package/dist/components/chip-button.js +4 -85
- package/dist/components/chip-button.js.map +1 -1
- package/dist/components/close-confirm-dialog.js +12 -662
- package/dist/components/close-confirm-dialog.js.map +1 -1
- package/dist/components/color-picker.js +7 -530
- package/dist/components/color-picker.js.map +1 -1
- package/dist/components/combobox.js +15 -934
- package/dist/components/combobox.js.map +1 -1
- package/dist/components/confirm-by-typing-dialog.js +12 -669
- package/dist/components/confirm-by-typing-dialog.js.map +1 -1
- package/dist/components/confirm-dialog.js +11 -637
- package/dist/components/confirm-dialog.js.map +1 -1
- package/dist/components/count-badge.js +2 -21
- package/dist/components/count-badge.js.map +1 -1
- package/dist/components/dialog.js +8 -569
- package/dist/components/dialog.js.map +1 -1
- package/dist/components/dropdown-menu.js +9 -1004
- package/dist/components/dropdown-menu.js.map +1 -1
- package/dist/components/dropdown-select.js +9 -880
- package/dist/components/dropdown-select.js.map +1 -1
- package/dist/components/empty.js +2 -21
- package/dist/components/empty.js.map +1 -1
- package/dist/components/filter-rail.js +7 -145
- package/dist/components/filter-rail.js.map +1 -1
- package/dist/components/fixed-action-bar.js +2 -21
- package/dist/components/fixed-action-bar.js.map +1 -1
- package/dist/components/font-picker.js +11 -586
- package/dist/components/font-picker.js.map +1 -1
- package/dist/components/form.js +9 -66
- package/dist/components/form.js.map +1 -1
- package/dist/components/icon-tile.js +3 -43
- package/dist/components/icon-tile.js.map +1 -1
- package/dist/components/icon-toggle.js +3 -43
- package/dist/components/icon-toggle.js.map +1 -1
- package/dist/components/icon.js +3 -47
- package/dist/components/icon.js.map +1 -1
- package/dist/components/image-crop-panel.js +19 -772
- package/dist/components/image-crop-panel.js.map +1 -1
- package/dist/components/image-cropper.js +1 -164
- package/dist/components/image-cropper.js.map +1 -1
- package/dist/components/input-group.js +6 -268
- package/dist/components/input-group.js.map +1 -1
- package/dist/components/input.js +3 -58
- package/dist/components/input.js.map +1 -1
- package/dist/components/label.js +3 -38
- package/dist/components/label.js.map +1 -1
- package/dist/components/list-empty-row.js +2 -21
- package/dist/components/list-empty-row.js.map +1 -1
- package/dist/components/management-empty.js +2 -21
- package/dist/components/management-empty.js.map +1 -1
- package/dist/components/management-skeleton.js +4 -59
- package/dist/components/management-skeleton.js.map +1 -1
- package/dist/components/meta-chip.js +2 -21
- package/dist/components/meta-chip.js.map +1 -1
- package/dist/components/mobile-drawer.js +7 -268
- package/dist/components/mobile-drawer.js.map +1 -1
- package/dist/components/page-header.js +3 -42
- package/dist/components/page-header.js.map +1 -1
- package/dist/components/page-scaffold.js +5 -76
- package/dist/components/page-scaffold.js.map +1 -1
- package/dist/components/pagination-bar.js +13 -614
- package/dist/components/pagination-bar.js.map +1 -1
- package/dist/components/pagination.js +6 -681
- package/dist/components/pagination.js.map +1 -1
- package/dist/components/panel-toolbar.js +11 -713
- package/dist/components/panel-toolbar.js.map +1 -1
- package/dist/components/pill-tabs.js +2 -21
- package/dist/components/pill-tabs.js.map +1 -1
- package/dist/components/plugin-download-consent.js +13 -663
- package/dist/components/plugin-download-consent.js.map +1 -1
- package/dist/components/popover.js +5 -242
- package/dist/components/popover.js.map +1 -1
- package/dist/components/preview-card.js +2 -21
- package/dist/components/preview-card.js.map +1 -1
- package/dist/components/progress.js +2 -20
- package/dist/components/progress.js.map +1 -1
- package/dist/components/radio-group.js +2 -21
- package/dist/components/radio-group.js.map +1 -1
- package/dist/components/scroll-area.js +2 -21
- package/dist/components/scroll-area.js.map +1 -1
- package/dist/components/search-field.js +6 -587
- package/dist/components/search-field.js.map +1 -1
- package/dist/components/secondary-stat.js +3 -40
- package/dist/components/secondary-stat.js.map +1 -1
- package/dist/components/section-header.js +3 -43
- package/dist/components/section-header.js.map +1 -1
- package/dist/components/section-label.js +3 -44
- package/dist/components/section-label.js.map +1 -1
- package/dist/components/section-tabs.js +2 -21
- package/dist/components/section-tabs.js.map +1 -1
- package/dist/components/separator.js +3 -47
- package/dist/components/separator.js.map +1 -1
- package/dist/components/sheet.js +8 -467
- package/dist/components/sheet.js.map +1 -1
- package/dist/components/sidebar.js +24 -1044
- package/dist/components/sidebar.js.map +1 -1
- package/dist/components/skeleton.js +3 -39
- package/dist/components/skeleton.js.map +1 -1
- package/dist/components/slider.js +2 -21
- package/dist/components/slider.js.map +1 -1
- package/dist/components/sortable-chip-list.js +2 -21
- package/dist/components/sortable-chip-list.js.map +1 -1
- package/dist/components/special-tag-surface.js +3 -531
- package/dist/components/special-tag-surface.js.map +1 -1
- package/dist/components/spinner.js +3 -63
- package/dist/components/spinner.js.map +1 -1
- package/dist/components/surface.js +3 -49
- package/dist/components/surface.js.map +1 -1
- package/dist/components/switch.js +3 -51
- package/dist/components/switch.js.map +1 -1
- package/dist/components/table.js +2 -20
- package/dist/components/table.js.map +1 -1
- package/dist/components/tag-chip.js +6 -617
- package/dist/components/tag-chip.js.map +1 -1
- package/dist/components/textarea.js +3 -56
- package/dist/components/textarea.js.map +1 -1
- package/dist/components/toast.js +8 -806
- package/dist/components/toast.js.map +1 -1
- package/dist/components/toggle.js +2 -20
- package/dist/components/toggle.js.map +1 -1
- package/dist/components/tooltip.js +3 -80
- package/dist/components/tooltip.js.map +1 -1
- package/dist/hooks/use-dialog-footer-actions.js +1 -9
- package/dist/hooks/use-dialog-footer-actions.js.map +1 -1
- package/dist/hooks/use-form-field.js +1 -34
- package/dist/hooks/use-form-field.js.map +1 -1
- package/dist/hooks/use-mobile.js +2 -27
- package/dist/hooks/use-mobile.js.map +1 -1
- package/dist/hooks/useMobileBackToClose.js +3 -232
- package/dist/hooks/useMobileBackToClose.js.map +1 -1
- package/dist/icons/actions.js +4 -521
- package/dist/icons/actions.js.map +1 -1
- package/dist/icons/icon-style.js +1 -49
- package/dist/icons/icon-style.js.map +1 -1
- package/dist/icons/marks.js +1 -46
- package/dist/icons/marks.js.map +1 -1
- package/dist/icons/registry.d.ts +2 -1
- package/dist/icons/registry.js +2 -1186
- package/dist/icons/registry.js.map +1 -1
- package/dist/index.js +10 -651
- package/dist/index.js.map +1 -1
- package/dist/lib/colors.js +1 -63
- package/dist/lib/colors.js.map +1 -1
- package/dist/lib/merge-config.js +1 -18
- package/dist/lib/merge-config.js.map +1 -1
- package/dist/lib/pagination.js +1 -24
- package/dist/lib/pagination.js.map +1 -1
- package/dist/lib/tag-surface.js +5 -613
- package/dist/lib/tag-surface.js.map +1 -1
- package/dist/lib/utils.js +2 -24
- package/dist/lib/utils.js.map +1 -1
- package/dist/res-card-template/format.d.ts +21 -0
- package/dist/res-card-template/format.js +3 -0
- package/dist/res-card-template/format.js.map +1 -0
- package/dist/res-card-template/icon.d.ts +38 -0
- package/dist/res-card-template/icon.js +3 -0
- package/dist/res-card-template/icon.js.map +1 -0
- package/dist/res-card-template/index.d.ts +4 -0
- package/dist/res-card-template/index.js +5 -0
- package/dist/res-card-template/index.js.map +1 -0
- package/dist/res-card-template/template.d.ts +48 -0
- package/dist/res-card-template/template.js +5 -0
- package/dist/res-card-template/template.js.map +1 -0
- package/dist/viewport.js +1 -11
- package/dist/viewport.js.map +1 -1
- package/package.json +9 -2
- package/src/components/image-crop-panel.dist.test.tsx +54 -0
- package/src/icons/registry.ts +8 -0
- package/src/res-card-template/format.test.ts +45 -0
- package/src/res-card-template/format.ts +36 -0
- package/src/res-card-template/icon.test.ts +100 -0
- package/src/res-card-template/icon.ts +86 -0
- package/src/res-card-template/index.ts +22 -0
- package/src/res-card-template/template.test.ts +457 -0
- package/src/res-card-template/template.ts +429 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/merge-config.ts","../../src/lib/utils.ts","../../src/components/icon.tsx","../../src/components/input.tsx","../../src/icons/icon-style.ts","../../src/icons/registry.ts","../../src/components/pagination.tsx","../../src/viewport.ts","../../src/hooks/use-mobile.ts","../../src/lib/pagination.ts","../../src/components/pagination-bar.tsx"],"names":["jsx","InputPrimitive","Icon","AltArrowLeftBoldWeight","AltArrowLeftBoldDuotone","AltArrowLeftLinear","AltArrowRightBoldWeight","AltArrowRightBoldDuotone","AltArrowRightLinear","useTranslation","jsxs"],"mappings":"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","file":"pagination-bar.js","sourcesContent":["import { extendTailwindMerge } from \"tailwind-merge\"\n\n// The app's `@theme inline` tokens (theme.css) generate utility names\n// tailwind-merge doesn't know, so it misclassifies them — e.g. `text-ui` is\n// parsed as a text color and dropped next to any `text-*` color. The default\n// class groups are theme-backed, so extending the theme (keys mirror the v4\n// token namespaces one-to-one) registers every custom utility with correct\n// conflict semantics. merge-config.test.ts pins this list against theme.css.\nexport const mergeTheme = {\n\ttext: [\"tiny\", \"ui\", \"doc\", \"doc-title\", \"doc-heading\", \"quote\"],\n\tspacing: [\"chip\", \"control\", \"nav\", \"sidebar\", \"panel\"],\n\ttracking: [\"label\"],\n\tshadow: [\"card\", \"dialog\"],\n\tcontainer: [\"reading\", \"medium\", \"content\"],\n\tfont: [\"doc\", \"heading\"],\n\tease: [\"standard\"],\n\tanimate: [\"skel\", \"pop\"],\n} as const\n\nexport const twMerge = extendTailwindMerge({\n\textend: { theme: mergeTheme },\n})\n","import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"./merge-config\"\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs))\n}\n","import type { ComponentType } from \"react\"\nimport { cn } from \"../lib/utils.ts\"\nimport type { IconMode } from \"../icons/icon-style.ts\"\n\n/** Anything renderable through `Icon`: a Solar icon (imported from the\n central registry on the web side) or a local utility mark (marks.tsx) —\n both take `className`; registry icons take `mode` (marks ignore it). */\nexport type IconType = ComponentType<{ className?: string; mode?: IconMode }>\n\n/** The three sanctioned icon sizes: `sm` 12 inside pills and meta lines,\n `md` 16 by default, `lg` 20 for primary toolbar actions. */\nexport type IconSize = \"sm\" | \"md\" | \"lg\"\n\nconst sizeClasses = {\n\tsm: \"size-3\",\n\tmd: \"size-4\",\n\tlg: \"size-5\",\n} as const satisfies Record<IconSize, string>\n\n/**\n * Solar icons with the design system's defaults baked in: callers pass\n * the registry icon — by default it renders the boldDuotone weight,\n * whose second tone takes the palette's `--icon-tone` hue (theme.css\n * recolors the duotone accent via `--solar-secondary-color` under the\n * `hd-icon` hook), so colored palettes feel alive while mono stays\n * neutral.\n *\n * Mode is one channel: `mode` picks the weight directly; `selected` maps\n * to `\"bold\"` (the filled, single-color weight — the only sanctioned use\n * of Bold); otherwise the active icon style preference decides.\n *\n * Sizing is class-based, three tiers only — `sm`/`md`/`lg` map to\n * `size-3/4/5` (12/16/20). Escape the tiers with\n * `className=\"size-[18px]\"` — twMerge lets the later class win.\n *\n * ✓/×/+ semantics never use Solar's Circle/Square composites — the\n * container is full-bleed while the informative mark is barely a third\n * of the box, so it goes muddy at small sizes. The plain marks (Check,\n * Cross, Plus from marks.tsx) cover these at every size; `sm` otherwise\n * belongs to simple single-stroke glyphs (arrows, dots, grips).\n */\nexport function Icon({\n\ticon: IconComponent,\n\tmode,\n\tsize = \"md\",\n\tselected,\n\tclassName,\n\t...rest\n}: {\n\ticon: IconType\n\t/** Explicit weight override; `selected` and the style preference lose\n\t to it. */\n\tmode?: IconMode\n\tsize?: IconSize\n\t/** Selected state — renders the icon's `\"bold\"` weight. */\n\tselected?: boolean\n\tclassName?: string\n} & Record<string, unknown>) {\n\treturn (\n\t\t<IconComponent\n\t\t\tmode={mode ?? (selected === true ? \"bold\" : undefined)}\n\t\t\tclassName={cn(\"hd-icon\", sizeClasses[size], className)}\n\t\t\t{...rest}\n\t\t/>\n\t)\n}\n","import { Input as InputPrimitive } from \"@base-ui/react/input\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@hoardodile/ui/lib/utils\"\n\n/**\n * Muted-fill control (the ControlStub / forms anatomy): fill background,\n * `rounded-lg`, no border — the same anatomy as the search field. Three\n * height tiers ride the control tokens: `sm` h-chip, `md` h-control,\n * `lg` h-10.\n */\nconst inputVariants = cva(\n \"w-full min-w-0 rounded-lg bg-muted text-ui text-foreground outline-none placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-[3px] aria-invalid:ring-destructive/20\",\n {\n variants: {\n size: {\n sm: \"h-chip px-2.5 text-xs\",\n md: \"h-control px-3\",\n lg: \"h-10 px-3.5\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n)\n\nfunction Input({\n className,\n size,\n type,\n ...props\n}: Omit<React.ComponentProps<\"input\">, \"size\"> &\n VariantProps<typeof inputVariants>) {\n return (\n <InputPrimitive\n type={type}\n data-slot=\"input\"\n className={cn(inputVariants({ size }), className)}\n {...props}\n />\n )\n}\n\nexport { Input, inputVariants }\n","import { type ComponentType, createElement, useSyncExternalStore } from \"react\"\nimport type { IconType } from \"../components/icon.tsx\"\n\n/**\n * Icon-mode-aware glyph wrapper (Settings → Icons in the host app).\n *\n * The active icon style lives as `data-icon-style` on `document.documentElement`\n * — the host app writes it from its preference store, plugin iframes receive\n * it through the `themeChanged` push — so this module needs no context or\n * injected state: a single shared `MutationObserver` watches the attribute\n * and every wrapped component re-renders through `useSyncExternalStore`\n * when it flips.\n *\n * Only `linear` needs a component swap: the boldDuotone glyphs change to\n * their thin-line linear counterparts. `grayscale` is pure CSS (theme.css\n * recolors the `.hd-icon` hook), so the store only tracks the mode.\n */\nexport type IconStyleValue = \"duotone\" | \"grayscale\" | \"linear\"\n\n/**\n * The parallel Solar weights an icon registers — named after Solar's own\n * weights (DESIGN.md — Iconography). Every icon carries all of them;\n * adding a mode here forces every registry entry to fill it in.\n */\nexport type IconMode = \"bold\" | \"boldDuotone\" | \"linear\"\n\n/** All three mode glyphs of one icon. Mandatory and complete by type. */\nexport type IconVariants = Record<IconMode, IconType>\n\nfunction readIconMode(): IconMode {\n\treturn document.documentElement.dataset.iconStyle === \"linear\"\n\t\t? \"linear\"\n\t\t: \"boldDuotone\"\n}\n\n// Never read `document` at module load — pure-logic consumers (node test\n// environments) import this module without a DOM. The first subscribe\n// (component mount) snapshots the current value.\nlet currentMode: IconMode = \"boldDuotone\"\nlet observer: MutationObserver | undefined\nconst listeners = new Set<() => void>()\n\nfunction ensureObserver(): void {\n\tif (observer !== undefined || typeof document === \"undefined\") return\n\tobserver = new MutationObserver(() => {\n\t\tconst next = readIconMode()\n\t\tif (next === currentMode) return\n\t\tcurrentMode = next\n\t\tfor (const cb of listeners) cb()\n\t})\n\tobserver.observe(document.documentElement, {\n\t\tattributes: true,\n\t\tattributeFilter: [\"data-icon-style\"],\n\t})\n}\n\nfunction subscribeIconStyle(callback: () => void): () => void {\n\tensureObserver()\n\tcurrentMode = readIconMode()\n\tlisteners.add(callback)\n\treturn () => {\n\t\tlisteners.delete(callback)\n\t}\n}\n\nfunction getIconStyleSnapshot(): IconMode {\n\treturn currentMode\n}\n\n/**\n * Wraps a Solar glyph family so its render follows the host's icon style.\n *\n * `createIcon({ bold, boldDuotone, linear })` — the three parallel weights\n * of one icon. Without a `mode` prop the wrapper renders the glyph for the\n * active icon style; an explicit `mode` overrides it (selected states pass\n * `\"bold\"` through `Icon`).\n *\n * Every wrapped render merges the `hd-icon` hook class, so the duotone /\n * grayscale CSS in theme.css applies to direct renders too. Returns\n * `undefined`-free components callable through the `Icon` wrapper or bare\n * JSX alike.\n */\nexport function createIcon(\n\tvariants: IconVariants,\n): ComponentType<Record<string, unknown>> {\n\tfunction Icon(props: Record<string, unknown>) {\n\t\tconst current = useSyncExternalStore(\n\t\t\tsubscribeIconStyle,\n\t\t\tgetIconStyleSnapshot,\n\t\t\t() => \"boldDuotone\",\n\t\t)\n\t\tconst { mode, ...rest } = props as { readonly mode?: IconMode } & Record<\n\t\t\tstring,\n\t\t\tunknown\n\t\t>\n\t\tconst Component = variants[(mode ?? current) as IconMode]\n\t\tconst className =\n\t\t\ttypeof rest.className === \"string\"\n\t\t\t\t? `hd-icon ${rest.className}`\n\t\t\t\t: \"hd-icon\"\n\t\treturn createElement(Component, { ...rest, className })\n\t}\n\treturn Icon\n}\n","/**\n * Central Solar icon registry for the design system.\n *\n * Every Solar glyph the app renders is exported here through `createIcon`\n * from `@hoardodile/ui` — one component per glyph carrying the three\n * parallel Solar weights (bold / boldDuotone / linear). The wrapper picks\n * the glyph for the active icon style preference (Settings → Icons): in\n * `linear` style the boldDuotone glyphs swap to their thin-line linear\n * counterparts; an explicit `mode` prop overrides (`\"bold\"` for selected\n * states). Every export carries the `hd-icon` hook class so the\n * duotone/grayscale CSS in theme.css applies to direct renders too. All\n * exports are wrapped — never the raw glyphs. Importing Solar directly is\n * confined to this file and @hoardodile/ui internals — consumers import\n * the wrapped exports only.\n *\n * Structure — imports first, one block per Solar weight (bold / bold-duotone /\n * linear, alphabetical by glyph; every glyph has all three), then one\n * export section, alphabetical by name (ordinal, case-sensitive —\n * `BookTone`'s stem `Book` sorts before `Bookmark`):\n *\n * export const <Name> = createIcon({\n * bold: <Name>BoldWeight, — filled, single-color; selected states\n * boldDuotone: <Name>BoldDuotone, — two-tone, the default\n * linear: <Name>Linear, — thin-line; `linear` icon style\n * })\n *\n * Modes are parallel and mandatory: adding a member to `IconMode` forces\n * every entry to register it (guarded by icons.test.ts). One exception:\n * `MenuDots` maps its `linear` slot to the filled weight — the thin-line\n * dots read as noise at small sizes. Tree-shaking keeps only the variants\n * actually imported.\n */\n\nimport { AddCircleIcon as AddCircleBoldWeight } from \"@solar-icons/react/bold/add-circle\"\nimport { AlignLeftIcon as AlignLeftBoldWeight } from \"@solar-icons/react/bold/align-left\"\nimport { AltArrowDownIcon as AltArrowDownBoldWeight } from \"@solar-icons/react/bold/alt-arrow-down\"\nimport { AltArrowLeftIcon as AltArrowLeftBoldWeight } from \"@solar-icons/react/bold/alt-arrow-left\"\nimport { AltArrowRightIcon as AltArrowRightBoldWeight } from \"@solar-icons/react/bold/alt-arrow-right\"\nimport { AltArrowUpIcon as AltArrowUpBoldWeight } from \"@solar-icons/react/bold/alt-arrow-up\"\nimport { ArchiveIcon as ArchiveBoldWeight } from \"@solar-icons/react/bold/archive\"\nimport { ArrowRightIcon as ArrowRightBoldWeight } from \"@solar-icons/react/bold/arrow-right\"\nimport { ArrowToTopLeftIcon as ArrowToTopLeftBoldWeight } from \"@solar-icons/react/bold/arrow-to-top-left\"\nimport { ArrowToTopRightIcon as ArrowToTopRightBoldWeight } from \"@solar-icons/react/bold/arrow-to-top-right\"\nimport { BellIcon as BellBoldWeight } from \"@solar-icons/react/bold/bell\"\nimport { BoltIcon as BoltBoldWeight } from \"@solar-icons/react/bold/bolt\"\nimport { BookIcon as BookBoldWeight } from \"@solar-icons/react/bold/book\"\nimport { Book2Icon as Book2BoldWeight } from \"@solar-icons/react/bold/book-2\"\nimport { BookmarkIcon as BookmarkBoldWeight } from \"@solar-icons/react/bold/bookmark\"\nimport { BookmarkCircleIcon as BookmarkCircleBoldWeight } from \"@solar-icons/react/bold/bookmark-circle\"\nimport { BoxIcon as BoxBoldWeight } from \"@solar-icons/react/bold/box\"\nimport { BranchingPathsUpIcon as BranchingPathsUpBoldWeight } from \"@solar-icons/react/bold/branching-paths-up\"\nimport { BugIcon as BugBoldWeight } from \"@solar-icons/react/bold/bug\"\nimport { CalendarDateIcon as CalendarDateBoldWeight } from \"@solar-icons/react/bold/calendar-date\"\nimport { ChatRoundIcon as ChatRoundBoldWeight } from \"@solar-icons/react/bold/chat-round\"\nimport { ChatRoundDotsIcon as ChatRoundDotsBoldWeight } from \"@solar-icons/react/bold/chat-round-dots\"\nimport { ChatRoundLineIcon as ChatRoundLineBoldWeight } from \"@solar-icons/react/bold/chat-round-line\"\nimport { ChatSquareIcon as ChatSquareBoldWeight } from \"@solar-icons/react/bold/chat-square\"\nimport { CheckCircleIcon as CheckCircleBoldWeight } from \"@solar-icons/react/bold/check-circle\"\nimport { ChecklistIcon as ChecklistBoldWeight } from \"@solar-icons/react/bold/checklist\"\nimport { ClipboardListIcon as ClipboardListBoldWeight } from \"@solar-icons/react/bold/clipboard-list\"\nimport { ClockCircleIcon as ClockCircleBoldWeight } from \"@solar-icons/react/bold/clock-circle\"\nimport { CompassIcon as CompassBoldWeight } from \"@solar-icons/react/bold/compass\"\nimport { CopyIcon as CopyBoldWeight } from \"@solar-icons/react/bold/copy\"\nimport { CrownIcon as CrownBoldWeight } from \"@solar-icons/react/bold/crown\"\nimport { DangerTriangleIcon as DangerTriangleBoldWeight } from \"@solar-icons/react/bold/danger-triangle\"\nimport { DatabaseIcon as DatabaseBoldWeight } from \"@solar-icons/react/bold/database\"\nimport { DisketteIcon as DisketteBoldWeight } from \"@solar-icons/react/bold/diskette\"\nimport { DislikeIcon as DislikeBoldWeight } from \"@solar-icons/react/bold/dislike\"\nimport { DocumentAddIcon as DocumentAddBoldWeight } from \"@solar-icons/react/bold/document-add\"\nimport { DocumentTextIcon as DocumentTextBoldWeight } from \"@solar-icons/react/bold/document-text\"\nimport { DoubleAltArrowDownIcon as DoubleAltArrowDownBoldWeight } from \"@solar-icons/react/bold/double-alt-arrow-down\"\nimport { DownloadIcon as DownloadBoldWeight } from \"@solar-icons/react/bold/download\"\nimport { EraserIcon as EraserBoldWeight } from \"@solar-icons/react/bold/eraser\"\nimport { EyeIcon as EyeBoldWeight } from \"@solar-icons/react/bold/eye\"\nimport { FileIcon as FileBoldWeight } from \"@solar-icons/react/bold/file\"\nimport { FileRemoveIcon as FileRemoveBoldWeight } from \"@solar-icons/react/bold/file-remove\"\nimport { FileTextIcon as FileTextBoldWeight } from \"@solar-icons/react/bold/file-text\"\nimport { FilterIcon as FilterBoldWeight } from \"@solar-icons/react/bold/filter\"\nimport { FiltersIcon as FiltersBoldWeight } from \"@solar-icons/react/bold/filters\"\nimport { FolderIcon as FolderBoldWeight } from \"@solar-icons/react/bold/folder\"\nimport { FolderOpenIcon as FolderOpenBoldWeight } from \"@solar-icons/react/bold/folder-open\"\nimport { FolderPathConnectIcon as FolderPathConnectBoldWeight } from \"@solar-icons/react/bold/folder-path-connect\"\nimport { ForbiddenCircleIcon as ForbiddenCircleBoldWeight } from \"@solar-icons/react/bold/forbidden-circle\"\nimport { GalleryIcon as GalleryBoldWeight } from \"@solar-icons/react/bold/gallery\"\nimport { GalleryAddIcon as GalleryAddBoldWeight } from \"@solar-icons/react/bold/gallery-add\"\nimport { GalleryWideIcon as GalleryWideBoldWeight } from \"@solar-icons/react/bold/gallery-wide\"\nimport { GlobalIcon as GlobalBoldWeight } from \"@solar-icons/react/bold/global\"\nimport { GraphDownIcon as GraphDownBoldWeight } from \"@solar-icons/react/bold/graph-down\"\nimport { GraphUpIcon as GraphUpBoldWeight } from \"@solar-icons/react/bold/graph-up\"\nimport { HamburgerMenuIcon as HamburgerMenuBoldWeight } from \"@solar-icons/react/bold/hamburger-menu\"\nimport { HandHeartIcon as HandHeartBoldWeight } from \"@solar-icons/react/bold/hand-heart\"\nimport { HeartIcon as HeartBoldWeight } from \"@solar-icons/react/bold/heart\"\nimport { HelpIcon as HelpBoldWeight } from \"@solar-icons/react/bold/help\"\nimport { HistoryIcon as HistoryBoldWeight } from \"@solar-icons/react/bold/history\"\nimport { HomeAngleIcon as HomeAngleBoldWeight } from \"@solar-icons/react/bold/home-angle\"\nimport { InfoCircleIcon as InfoCircleBoldWeight } from \"@solar-icons/react/bold/info-circle\"\nimport { LayersIcon as LayersBoldWeight } from \"@solar-icons/react/bold/layers\"\nimport { LetterIcon as LetterBoldWeight } from \"@solar-icons/react/bold/letter\"\nimport { LikeIcon as LikeBoldWeight } from \"@solar-icons/react/bold/like\"\nimport { LinkIcon as LinkBoldWeight } from \"@solar-icons/react/bold/link\"\nimport { ListIcon as ListBoldWeight } from \"@solar-icons/react/bold/list\"\nimport { ListVerticalIcon as ListVerticalBoldWeight } from \"@solar-icons/react/bold/list-vertical\"\nimport { LockPasswordIcon as LockPasswordBoldWeight } from \"@solar-icons/react/bold/lock-password\"\nimport { Login2Icon as Login2BoldWeight } from \"@solar-icons/react/bold/login-2\"\nimport { LogoutIcon as LogoutBoldWeight } from \"@solar-icons/react/bold/logout\"\nimport { MagicWand2Icon as MagicWand2BoldWeight } from \"@solar-icons/react/bold/magic-wand-2\"\nimport { MagnifierIcon as MagnifierBoldWeight } from \"@solar-icons/react/bold/magnifier\"\nimport { MagnifierZoomInIcon as MagnifierZoomInBoldWeight } from \"@solar-icons/react/bold/magnifier-zoom-in\"\nimport { MagnifierZoomOutIcon as MagnifierZoomOutBoldWeight } from \"@solar-icons/react/bold/magnifier-zoom-out\"\nimport { MaximizeIcon as MaximizeBoldWeight } from \"@solar-icons/react/bold/maximize\"\nimport { MenuDotsIcon as MenuDotsBoldWeight } from \"@solar-icons/react/bold/menu-dots\"\nimport { MinimizeIcon as MinimizeBoldWeight } from \"@solar-icons/react/bold/minimize\"\nimport { MinusSquareIcon as MinusSquareBoldWeight } from \"@solar-icons/react/bold/minus-square\"\nimport { MonitorIcon as MonitorBoldWeight } from \"@solar-icons/react/bold/monitor\"\nimport { MonitorSmartphoneIcon as MonitorSmartphoneBoldWeight } from \"@solar-icons/react/bold/monitor-smartphone\"\nimport { MoonIcon as MoonBoldWeight } from \"@solar-icons/react/bold/moon\"\nimport { MoveToFolderIcon as MoveToFolderBoldWeight } from \"@solar-icons/react/bold/move-to-folder\"\nimport { MusicNotesIcon as MusicNotesBoldWeight } from \"@solar-icons/react/bold/music-notes\"\nimport { PaletteIcon as PaletteBoldWeight } from \"@solar-icons/react/bold/palette\"\nimport { PaletteRoundIcon as PaletteRoundBoldWeight } from \"@solar-icons/react/bold/palette-round\"\nimport { PauseIcon as PauseBoldWeight } from \"@solar-icons/react/bold/pause\"\nimport { PenIcon as PenBoldWeight } from \"@solar-icons/react/bold/pen\"\nimport { PenNewRoundIcon as PenNewRoundBoldWeight } from \"@solar-icons/react/bold/pen-new-round\"\nimport { PieChartIcon as PieChartBoldWeight } from \"@solar-icons/react/bold/pie-chart\"\nimport { PinIcon as PinBoldWeight } from \"@solar-icons/react/bold/pin\"\nimport { PlayIcon as PlayBoldWeight } from \"@solar-icons/react/bold/play\"\nimport { PlugCircleIcon as PlugCircleBoldWeight } from \"@solar-icons/react/bold/plug-circle\"\nimport { PlusMinusIcon as PlusMinusBoldWeight } from \"@solar-icons/react/bold/plus-minus\"\nimport { PulseIcon as PulseBoldWeight } from \"@solar-icons/react/bold/pulse\"\nimport { RefreshIcon as RefreshBoldWeight } from \"@solar-icons/react/bold/refresh\"\nimport { RefreshCircleIcon as RefreshCircleBoldWeight } from \"@solar-icons/react/bold/refresh-circle\"\nimport { ReorderIcon as ReorderBoldWeight } from \"@solar-icons/react/bold/reorder\"\nimport { RepeatIcon as RepeatBoldWeight } from \"@solar-icons/react/bold/repeat\"\nimport { ReplyIcon as ReplyBoldWeight } from \"@solar-icons/react/bold/reply\"\nimport { RestartIcon as RestartBoldWeight } from \"@solar-icons/react/bold/restart\"\nimport { RocketIcon as RocketBoldWeight } from \"@solar-icons/react/bold/rocket\"\nimport { RouteIcon as RouteBoldWeight } from \"@solar-icons/react/bold/route\"\nimport { ScaleIcon as ScaleBoldWeight } from \"@solar-icons/react/bold/scale\"\nimport { ServerIcon as ServerBoldWeight } from \"@solar-icons/react/bold/server\"\nimport { SettingsIcon as SettingsBoldWeight } from \"@solar-icons/react/bold/settings\"\nimport { ShareIcon as ShareBoldWeight } from \"@solar-icons/react/bold/share\"\nimport { ShieldCheckIcon as ShieldCheckBoldWeight } from \"@solar-icons/react/bold/shield-check\"\nimport { Shop2Icon as Shop2BoldWeight } from \"@solar-icons/react/bold/shop-2\"\nimport { SidebarMinimalisticIcon as SidebarMinimalisticBoldWeight } from \"@solar-icons/react/bold/sidebar-minimalistic\"\nimport { SliderHorizontalIcon as SliderHorizontalBoldWeight } from \"@solar-icons/react/bold/slider-horizontal\"\nimport { SmartphoneIcon as SmartphoneBoldWeight } from \"@solar-icons/react/bold/smartphone\"\nimport { SortIcon as SortBoldWeight } from \"@solar-icons/react/bold/sort\"\nimport { SortByTimeIcon as SortByTimeBoldWeight } from \"@solar-icons/react/bold/sort-by-time\"\nimport { SortHorizontalIcon as SortHorizontalBoldWeight } from \"@solar-icons/react/bold/sort-horizontal\"\nimport { SortVerticalIcon as SortVerticalBoldWeight } from \"@solar-icons/react/bold/sort-vertical\"\nimport { StarIcon as StarBoldWeight } from \"@solar-icons/react/bold/star\"\nimport { StructureIcon as StructureBoldWeight } from \"@solar-icons/react/bold/structure\"\nimport { SunIcon as SunBoldWeight } from \"@solar-icons/react/bold/sun\"\nimport { TagIcon as TagBoldWeight } from \"@solar-icons/react/bold/tag\"\nimport { TelescopeIcon as TelescopeBoldWeight } from \"@solar-icons/react/bold/telescope\"\nimport { TestTubeIcon as TestTubeBoldWeight } from \"@solar-icons/react/bold/test-tube\"\nimport { TextFormatIcon as TextFormatBoldWeight } from \"@solar-icons/react/bold/text-format\"\nimport { TransferHorizontalIcon as TransferHorizontalBoldWeight } from \"@solar-icons/react/bold/transfer-horizontal\"\nimport { TranslationIcon as TranslationBoldWeight } from \"@solar-icons/react/bold/translation\"\nimport { TrashBinMinimalisticIcon as TrashBinMinimalisticBoldWeight } from \"@solar-icons/react/bold/trash-bin-minimalistic\"\nimport { UndoLeftIcon as UndoLeftBoldWeight } from \"@solar-icons/react/bold/undo-left\"\nimport { UndoLeftRoundIcon as UndoLeftRoundBoldWeight } from \"@solar-icons/react/bold/undo-left-round\"\nimport { UndoRightIcon as UndoRightBoldWeight } from \"@solar-icons/react/bold/undo-right\"\nimport { UndoRightRoundIcon as UndoRightRoundBoldWeight } from \"@solar-icons/react/bold/undo-right-round\"\nimport { UploadIcon as UploadBoldWeight } from \"@solar-icons/react/bold/upload\"\nimport { UserIcon as UserBoldWeight } from \"@solar-icons/react/bold/user\"\nimport { UserIdIcon as UserIdBoldWeight } from \"@solar-icons/react/bold/user-id\"\nimport { UserMinusIcon as UserMinusBoldWeight } from \"@solar-icons/react/bold/user-minus\"\nimport { UserPlusIcon as UserPlusBoldWeight } from \"@solar-icons/react/bold/user-plus\"\nimport { UsersGroupRoundedIcon as UsersGroupRoundedBoldWeight } from \"@solar-icons/react/bold/users-group-rounded\"\nimport { UsersGroupTwoRoundedIcon as UsersGroupTwoRoundedBoldWeight } from \"@solar-icons/react/bold/users-group-two-rounded\"\nimport { VideoFrameIcon as VideoFrameBoldWeight } from \"@solar-icons/react/bold/video-frame\"\nimport { Widget2Icon as Widget2BoldWeight } from \"@solar-icons/react/bold/widget-2\"\nimport { Widget5Icon as Widget5BoldWeight } from \"@solar-icons/react/bold/widget-5\"\nimport { WindowFrameIcon as WindowFrameBoldWeight } from \"@solar-icons/react/bold/window-frame\"\nimport { AddCircleIcon as AddCircleBoldDuotone } from \"@solar-icons/react/bold-duotone/add-circle\"\nimport { AlignLeftIcon as AlignLeftBoldDuotone } from \"@solar-icons/react/bold-duotone/align-left\"\nimport { AltArrowDownIcon as AltArrowDownBoldDuotone } from \"@solar-icons/react/bold-duotone/alt-arrow-down\"\nimport { AltArrowLeftIcon as AltArrowLeftBoldDuotone } from \"@solar-icons/react/bold-duotone/alt-arrow-left\"\nimport { AltArrowRightIcon as AltArrowRightBoldDuotone } from \"@solar-icons/react/bold-duotone/alt-arrow-right\"\nimport { AltArrowUpIcon as AltArrowUpBoldDuotone } from \"@solar-icons/react/bold-duotone/alt-arrow-up\"\nimport { ArchiveIcon as ArchiveBoldDuotone } from \"@solar-icons/react/bold-duotone/archive\"\nimport { ArrowRightIcon as ArrowRightBoldDuotone } from \"@solar-icons/react/bold-duotone/arrow-right\"\nimport { ArrowToTopLeftIcon as ArrowToTopLeftBoldDuotone } from \"@solar-icons/react/bold-duotone/arrow-to-top-left\"\nimport { ArrowToTopRightIcon as ArrowToTopRightBoldDuotone } from \"@solar-icons/react/bold-duotone/arrow-to-top-right\"\nimport { BellIcon as BellBoldDuotone } from \"@solar-icons/react/bold-duotone/bell\"\nimport { BoltIcon as BoltBoldDuotone } from \"@solar-icons/react/bold-duotone/bolt\"\nimport { BookIcon as BookBoldDuotone } from \"@solar-icons/react/bold-duotone/book\"\nimport { Book2Icon as Book2BoldDuotone } from \"@solar-icons/react/bold-duotone/book-2\"\nimport { BookmarkIcon as BookmarkBoldDuotone } from \"@solar-icons/react/bold-duotone/bookmark\"\nimport { BookmarkCircleIcon as BookmarkCircleBoldDuotone } from \"@solar-icons/react/bold-duotone/bookmark-circle\"\nimport { BoxIcon as BoxBoldDuotone } from \"@solar-icons/react/bold-duotone/box\"\nimport { BranchingPathsUpIcon as BranchingPathsUpBoldDuotone } from \"@solar-icons/react/bold-duotone/branching-paths-up\"\nimport { BugIcon as BugBoldDuotone } from \"@solar-icons/react/bold-duotone/bug\"\nimport { CalendarDateIcon as CalendarDateBoldDuotone } from \"@solar-icons/react/bold-duotone/calendar-date\"\nimport { ChatRoundIcon as ChatRoundBoldDuotone } from \"@solar-icons/react/bold-duotone/chat-round\"\nimport { ChatRoundDotsIcon as ChatRoundDotsBoldDuotone } from \"@solar-icons/react/bold-duotone/chat-round-dots\"\nimport { ChatRoundLineIcon as ChatRoundLineBoldDuotone } from \"@solar-icons/react/bold-duotone/chat-round-line\"\nimport { ChatSquareIcon as ChatSquareBoldDuotone } from \"@solar-icons/react/bold-duotone/chat-square\"\nimport { CheckCircleIcon as CheckCircleBoldDuotone } from \"@solar-icons/react/bold-duotone/check-circle\"\nimport { ChecklistIcon as ChecklistBoldDuotone } from \"@solar-icons/react/bold-duotone/checklist\"\nimport { ClipboardListIcon as ClipboardListBoldDuotone } from \"@solar-icons/react/bold-duotone/clipboard-list\"\nimport { ClockCircleIcon as ClockCircleBoldDuotone } from \"@solar-icons/react/bold-duotone/clock-circle\"\nimport { CompassIcon as CompassBoldDuotone } from \"@solar-icons/react/bold-duotone/compass\"\nimport { CopyIcon as CopyBoldDuotone } from \"@solar-icons/react/bold-duotone/copy\"\nimport { CrownIcon as CrownBoldDuotone } from \"@solar-icons/react/bold-duotone/crown\"\nimport { DangerTriangleIcon as DangerTriangleBoldDuotone } from \"@solar-icons/react/bold-duotone/danger-triangle\"\nimport { DatabaseIcon as DatabaseBoldDuotone } from \"@solar-icons/react/bold-duotone/database\"\nimport { DisketteIcon as DisketteBoldDuotone } from \"@solar-icons/react/bold-duotone/diskette\"\nimport { DislikeIcon as DislikeBoldDuotone } from \"@solar-icons/react/bold-duotone/dislike\"\nimport { DocumentAddIcon as DocumentAddBoldDuotone } from \"@solar-icons/react/bold-duotone/document-add\"\nimport { DocumentTextIcon as DocumentTextBoldDuotone } from \"@solar-icons/react/bold-duotone/document-text\"\nimport { DoubleAltArrowDownIcon as DoubleAltArrowDownBoldDuotone } from \"@solar-icons/react/bold-duotone/double-alt-arrow-down\"\nimport { DownloadIcon as DownloadBoldDuotone } from \"@solar-icons/react/bold-duotone/download\"\nimport { EraserIcon as EraserBoldDuotone } from \"@solar-icons/react/bold-duotone/eraser\"\nimport { EyeIcon as EyeBoldDuotone } from \"@solar-icons/react/bold-duotone/eye\"\nimport { FileIcon as FileBoldDuotone } from \"@solar-icons/react/bold-duotone/file\"\nimport { FileRemoveIcon as FileRemoveBoldDuotone } from \"@solar-icons/react/bold-duotone/file-remove\"\nimport { FileTextIcon as FileTextBoldDuotone } from \"@solar-icons/react/bold-duotone/file-text\"\nimport { FilterIcon as FilterBoldDuotone } from \"@solar-icons/react/bold-duotone/filter\"\nimport { FiltersIcon as FiltersBoldDuotone } from \"@solar-icons/react/bold-duotone/filters\"\nimport { FolderIcon as FolderBoldDuotone } from \"@solar-icons/react/bold-duotone/folder\"\nimport { FolderOpenIcon as FolderOpenBoldDuotone } from \"@solar-icons/react/bold-duotone/folder-open\"\nimport { FolderPathConnectIcon as FolderPathConnectBoldDuotone } from \"@solar-icons/react/bold-duotone/folder-path-connect\"\nimport { ForbiddenCircleIcon as ForbiddenCircleBoldDuotone } from \"@solar-icons/react/bold-duotone/forbidden-circle\"\nimport { GalleryIcon as GalleryBoldDuotone } from \"@solar-icons/react/bold-duotone/gallery\"\nimport { GalleryAddIcon as GalleryAddBoldDuotone } from \"@solar-icons/react/bold-duotone/gallery-add\"\nimport { GalleryWideIcon as GalleryWideBoldDuotone } from \"@solar-icons/react/bold-duotone/gallery-wide\"\nimport { GlobalIcon as GlobalBoldDuotone } from \"@solar-icons/react/bold-duotone/global\"\nimport { GraphDownIcon as GraphDownBoldDuotone } from \"@solar-icons/react/bold-duotone/graph-down\"\nimport { GraphUpIcon as GraphUpBoldDuotone } from \"@solar-icons/react/bold-duotone/graph-up\"\nimport { HamburgerMenuIcon as HamburgerMenuBoldDuotone } from \"@solar-icons/react/bold-duotone/hamburger-menu\"\nimport { HandHeartIcon as HandHeartBoldDuotone } from \"@solar-icons/react/bold-duotone/hand-heart\"\nimport { HeartIcon as HeartBoldDuotone } from \"@solar-icons/react/bold-duotone/heart\"\nimport { HelpIcon as HelpBoldDuotone } from \"@solar-icons/react/bold-duotone/help\"\nimport { HistoryIcon as HistoryBoldDuotone } from \"@solar-icons/react/bold-duotone/history\"\nimport { HomeAngleIcon as HomeAngleBoldDuotone } from \"@solar-icons/react/bold-duotone/home-angle\"\nimport { InfoCircleIcon as InfoCircleBoldDuotone } from \"@solar-icons/react/bold-duotone/info-circle\"\nimport { LayersIcon as LayersBoldDuotone } from \"@solar-icons/react/bold-duotone/layers\"\nimport { LetterIcon as LetterBoldDuotone } from \"@solar-icons/react/bold-duotone/letter\"\nimport { LikeIcon as LikeBoldDuotone } from \"@solar-icons/react/bold-duotone/like\"\nimport { LinkIcon as LinkBoldDuotone } from \"@solar-icons/react/bold-duotone/link\"\nimport { ListIcon as ListBoldDuotone } from \"@solar-icons/react/bold-duotone/list\"\nimport { ListVerticalIcon as ListVerticalBoldDuotone } from \"@solar-icons/react/bold-duotone/list-vertical\"\nimport { LockPasswordIcon as LockPasswordBoldDuotone } from \"@solar-icons/react/bold-duotone/lock-password\"\nimport { Login2Icon as Login2BoldDuotone } from \"@solar-icons/react/bold-duotone/login-2\"\nimport { LogoutIcon as LogoutBoldDuotone } from \"@solar-icons/react/bold-duotone/logout\"\nimport { MagicWand2Icon as MagicWand2BoldDuotone } from \"@solar-icons/react/bold-duotone/magic-wand-2\"\nimport { MagnifierIcon as MagnifierBoldDuotone } from \"@solar-icons/react/bold-duotone/magnifier\"\nimport { MagnifierZoomInIcon as MagnifierZoomInBoldDuotone } from \"@solar-icons/react/bold-duotone/magnifier-zoom-in\"\nimport { MagnifierZoomOutIcon as MagnifierZoomOutBoldDuotone } from \"@solar-icons/react/bold-duotone/magnifier-zoom-out\"\nimport { MaximizeIcon as MaximizeBoldDuotone } from \"@solar-icons/react/bold-duotone/maximize\"\nimport { MenuDotsIcon as MenuDotsBoldDuotone } from \"@solar-icons/react/bold-duotone/menu-dots\"\nimport { MinimizeIcon as MinimizeBoldDuotone } from \"@solar-icons/react/bold-duotone/minimize\"\nimport { MinusSquareIcon as MinusSquareBoldDuotone } from \"@solar-icons/react/bold-duotone/minus-square\"\nimport { MonitorIcon as MonitorBoldDuotone } from \"@solar-icons/react/bold-duotone/monitor\"\nimport { MonitorSmartphoneIcon as MonitorSmartphoneBoldDuotone } from \"@solar-icons/react/bold-duotone/monitor-smartphone\"\nimport { MoonIcon as MoonBoldDuotone } from \"@solar-icons/react/bold-duotone/moon\"\nimport { MoveToFolderIcon as MoveToFolderBoldDuotone } from \"@solar-icons/react/bold-duotone/move-to-folder\"\nimport { MusicNotesIcon as MusicNotesBoldDuotone } from \"@solar-icons/react/bold-duotone/music-notes\"\nimport { PaletteIcon as PaletteBoldDuotone } from \"@solar-icons/react/bold-duotone/palette\"\nimport { PaletteRoundIcon as PaletteRoundBoldDuotone } from \"@solar-icons/react/bold-duotone/palette-round\"\nimport { PauseIcon as PauseBoldDuotone } from \"@solar-icons/react/bold-duotone/pause\"\nimport { PenIcon as PenBoldDuotone } from \"@solar-icons/react/bold-duotone/pen\"\nimport { PenNewRoundIcon as PenNewRoundBoldDuotone } from \"@solar-icons/react/bold-duotone/pen-new-round\"\nimport { PieChartIcon as PieChartBoldDuotone } from \"@solar-icons/react/bold-duotone/pie-chart\"\nimport { PinIcon as PinBoldDuotone } from \"@solar-icons/react/bold-duotone/pin\"\nimport { PlayIcon as PlayBoldDuotone } from \"@solar-icons/react/bold-duotone/play\"\nimport { PlugCircleIcon as PlugCircleBoldDuotone } from \"@solar-icons/react/bold-duotone/plug-circle\"\nimport { PlusMinusIcon as PlusMinusBoldDuotone } from \"@solar-icons/react/bold-duotone/plus-minus\"\nimport { PulseIcon as PulseBoldDuotone } from \"@solar-icons/react/bold-duotone/pulse\"\nimport { RefreshIcon as RefreshBoldDuotone } from \"@solar-icons/react/bold-duotone/refresh\"\nimport { RefreshCircleIcon as RefreshCircleBoldDuotone } from \"@solar-icons/react/bold-duotone/refresh-circle\"\nimport { ReorderIcon as ReorderBoldDuotone } from \"@solar-icons/react/bold-duotone/reorder\"\nimport { RepeatIcon as RepeatBoldDuotone } from \"@solar-icons/react/bold-duotone/repeat\"\nimport { ReplyIcon as ReplyBoldDuotone } from \"@solar-icons/react/bold-duotone/reply\"\nimport { RestartIcon as RestartBoldDuotone } from \"@solar-icons/react/bold-duotone/restart\"\nimport { RocketIcon as RocketBoldDuotone } from \"@solar-icons/react/bold-duotone/rocket\"\nimport { RouteIcon as RouteBoldDuotone } from \"@solar-icons/react/bold-duotone/route\"\nimport { ScaleIcon as ScaleBoldDuotone } from \"@solar-icons/react/bold-duotone/scale\"\nimport { ServerIcon as ServerBoldDuotone } from \"@solar-icons/react/bold-duotone/server\"\nimport { SettingsIcon as SettingsBoldDuotone } from \"@solar-icons/react/bold-duotone/settings\"\nimport { ShareIcon as ShareBoldDuotone } from \"@solar-icons/react/bold-duotone/share\"\nimport { ShieldCheckIcon as ShieldCheckBoldDuotone } from \"@solar-icons/react/bold-duotone/shield-check\"\nimport { Shop2Icon as Shop2BoldDuotone } from \"@solar-icons/react/bold-duotone/shop-2\"\nimport { SidebarMinimalisticIcon as SidebarMinimalisticBoldDuotone } from \"@solar-icons/react/bold-duotone/sidebar-minimalistic\"\nimport { SliderHorizontalIcon as SliderHorizontalBoldDuotone } from \"@solar-icons/react/bold-duotone/slider-horizontal\"\nimport { SmartphoneIcon as SmartphoneBoldDuotone } from \"@solar-icons/react/bold-duotone/smartphone\"\nimport { SortIcon as SortBoldDuotone } from \"@solar-icons/react/bold-duotone/sort\"\nimport { SortByTimeIcon as SortByTimeBoldDuotone } from \"@solar-icons/react/bold-duotone/sort-by-time\"\nimport { SortHorizontalIcon as SortHorizontalBoldDuotone } from \"@solar-icons/react/bold-duotone/sort-horizontal\"\nimport { SortVerticalIcon as SortVerticalBoldDuotone } from \"@solar-icons/react/bold-duotone/sort-vertical\"\nimport { StarIcon as StarBoldDuotone } from \"@solar-icons/react/bold-duotone/star\"\nimport { StructureIcon as StructureBoldDuotone } from \"@solar-icons/react/bold-duotone/structure\"\nimport { SunIcon as SunBoldDuotone } from \"@solar-icons/react/bold-duotone/sun\"\nimport { TagIcon as TagBoldDuotone } from \"@solar-icons/react/bold-duotone/tag\"\nimport { TelescopeIcon as TelescopeBoldDuotone } from \"@solar-icons/react/bold-duotone/telescope\"\nimport { TestTubeIcon as TestTubeBoldDuotone } from \"@solar-icons/react/bold-duotone/test-tube\"\nimport { TextFormatIcon as TextFormatBoldDuotone } from \"@solar-icons/react/bold-duotone/text-format\"\nimport { TransferHorizontalIcon as TransferHorizontalBoldDuotone } from \"@solar-icons/react/bold-duotone/transfer-horizontal\"\nimport { TranslationIcon as TranslationBoldDuotone } from \"@solar-icons/react/bold-duotone/translation\"\nimport { TrashBinMinimalisticIcon as TrashBinMinimalisticBoldDuotone } from \"@solar-icons/react/bold-duotone/trash-bin-minimalistic\"\nimport { UndoLeftIcon as UndoLeftBoldDuotone } from \"@solar-icons/react/bold-duotone/undo-left\"\nimport { UndoLeftRoundIcon as UndoLeftRoundBoldDuotone } from \"@solar-icons/react/bold-duotone/undo-left-round\"\nimport { UndoRightIcon as UndoRightBoldDuotone } from \"@solar-icons/react/bold-duotone/undo-right\"\nimport { UndoRightRoundIcon as UndoRightRoundBoldDuotone } from \"@solar-icons/react/bold-duotone/undo-right-round\"\nimport { UploadIcon as UploadBoldDuotone } from \"@solar-icons/react/bold-duotone/upload\"\nimport { UserIcon as UserBoldDuotone } from \"@solar-icons/react/bold-duotone/user\"\nimport { UserIdIcon as UserIdBoldDuotone } from \"@solar-icons/react/bold-duotone/user-id\"\nimport { UserMinusIcon as UserMinusBoldDuotone } from \"@solar-icons/react/bold-duotone/user-minus\"\nimport { UserPlusIcon as UserPlusBoldDuotone } from \"@solar-icons/react/bold-duotone/user-plus\"\nimport { UsersGroupRoundedIcon as UsersGroupRoundedBoldDuotone } from \"@solar-icons/react/bold-duotone/users-group-rounded\"\nimport { UsersGroupTwoRoundedIcon as UsersGroupTwoRoundedBoldDuotone } from \"@solar-icons/react/bold-duotone/users-group-two-rounded\"\nimport { VideoFrameIcon as VideoFrameBoldDuotone } from \"@solar-icons/react/bold-duotone/video-frame\"\nimport { Widget2Icon as Widget2BoldDuotone } from \"@solar-icons/react/bold-duotone/widget-2\"\nimport { Widget5Icon as Widget5BoldDuotone } from \"@solar-icons/react/bold-duotone/widget-5\"\nimport { WindowFrameIcon as WindowFrameBoldDuotone } from \"@solar-icons/react/bold-duotone/window-frame\"\nimport { AddCircleIcon as AddCircleLinear } from \"@solar-icons/react/linear/add-circle\"\nimport { AlignLeftIcon as AlignLeftLinear } from \"@solar-icons/react/linear/align-left\"\nimport { AltArrowDownIcon as AltArrowDownLinear } from \"@solar-icons/react/linear/alt-arrow-down\"\nimport { AltArrowLeftIcon as AltArrowLeftLinear } from \"@solar-icons/react/linear/alt-arrow-left\"\nimport { AltArrowRightIcon as AltArrowRightLinear } from \"@solar-icons/react/linear/alt-arrow-right\"\nimport { AltArrowUpIcon as AltArrowUpLinear } from \"@solar-icons/react/linear/alt-arrow-up\"\nimport { ArchiveIcon as ArchiveLinear } from \"@solar-icons/react/linear/archive\"\nimport { ArrowRightIcon as ArrowRightLinear } from \"@solar-icons/react/linear/arrow-right\"\nimport { ArrowToTopLeftIcon as ArrowToTopLeftLinear } from \"@solar-icons/react/linear/arrow-to-top-left\"\nimport { ArrowToTopRightIcon as ArrowToTopRightLinear } from \"@solar-icons/react/linear/arrow-to-top-right\"\nimport { BellIcon as BellLinear } from \"@solar-icons/react/linear/bell\"\nimport { BoltIcon as BoltLinear } from \"@solar-icons/react/linear/bolt\"\nimport { BookIcon as BookLinear } from \"@solar-icons/react/linear/book\"\nimport { Book2Icon as Book2Linear } from \"@solar-icons/react/linear/book-2\"\nimport { BookmarkIcon as BookmarkLinear } from \"@solar-icons/react/linear/bookmark\"\nimport { BookmarkCircleIcon as BookmarkCircleLinear } from \"@solar-icons/react/linear/bookmark-circle\"\nimport { BoxIcon as BoxLinear } from \"@solar-icons/react/linear/box\"\nimport { BranchingPathsUpIcon as BranchingPathsUpLinear } from \"@solar-icons/react/linear/branching-paths-up\"\nimport { BugIcon as BugLinear } from \"@solar-icons/react/linear/bug\"\nimport { CalendarDateIcon as CalendarDateLinear } from \"@solar-icons/react/linear/calendar-date\"\nimport { ChatRoundIcon as ChatRoundLinear } from \"@solar-icons/react/linear/chat-round\"\nimport { ChatRoundDotsIcon as ChatRoundDotsLinear } from \"@solar-icons/react/linear/chat-round-dots\"\nimport { ChatRoundLineIcon as ChatRoundLineLinear } from \"@solar-icons/react/linear/chat-round-line\"\nimport { ChatSquareIcon as ChatSquareLinear } from \"@solar-icons/react/linear/chat-square\"\nimport { CheckCircleIcon as CheckCircleLinear } from \"@solar-icons/react/linear/check-circle\"\nimport { ChecklistIcon as ChecklistLinear } from \"@solar-icons/react/linear/checklist\"\nimport { ClipboardListIcon as ClipboardListLinear } from \"@solar-icons/react/linear/clipboard-list\"\nimport { ClockCircleIcon as ClockCircleLinear } from \"@solar-icons/react/linear/clock-circle\"\nimport { CompassIcon as CompassLinear } from \"@solar-icons/react/linear/compass\"\nimport { CopyIcon as CopyLinear } from \"@solar-icons/react/linear/copy\"\nimport { CrownIcon as CrownLinear } from \"@solar-icons/react/linear/crown\"\nimport { DangerTriangleIcon as DangerTriangleLinear } from \"@solar-icons/react/linear/danger-triangle\"\nimport { DatabaseIcon as DatabaseLinear } from \"@solar-icons/react/linear/database\"\nimport { DisketteIcon as DisketteLinear } from \"@solar-icons/react/linear/diskette\"\nimport { DislikeIcon as DislikeLinear } from \"@solar-icons/react/linear/dislike\"\nimport { DocumentAddIcon as DocumentAddLinear } from \"@solar-icons/react/linear/document-add\"\nimport { DocumentTextIcon as DocumentTextLinear } from \"@solar-icons/react/linear/document-text\"\nimport { DoubleAltArrowDownIcon as DoubleAltArrowDownLinear } from \"@solar-icons/react/linear/double-alt-arrow-down\"\nimport { DownloadIcon as DownloadLinear } from \"@solar-icons/react/linear/download\"\nimport { EraserIcon as EraserLinear } from \"@solar-icons/react/linear/eraser\"\nimport { EyeIcon as EyeLinear } from \"@solar-icons/react/linear/eye\"\nimport { FileIcon as FileLinear } from \"@solar-icons/react/linear/file\"\nimport { FileRemoveIcon as FileRemoveLinear } from \"@solar-icons/react/linear/file-remove\"\nimport { FileTextIcon as FileTextLinear } from \"@solar-icons/react/linear/file-text\"\nimport { FilterIcon as FilterLinear } from \"@solar-icons/react/linear/filter\"\nimport { FiltersIcon as FiltersLinear } from \"@solar-icons/react/linear/filters\"\nimport { FolderIcon as FolderLinear } from \"@solar-icons/react/linear/folder\"\nimport { FolderOpenIcon as FolderOpenLinear } from \"@solar-icons/react/linear/folder-open\"\nimport { FolderPathConnectIcon as FolderPathConnectLinear } from \"@solar-icons/react/linear/folder-path-connect\"\nimport { ForbiddenCircleIcon as ForbiddenCircleLinear } from \"@solar-icons/react/linear/forbidden-circle\"\nimport { GalleryIcon as GalleryLinear } from \"@solar-icons/react/linear/gallery\"\nimport { GalleryAddIcon as GalleryAddLinear } from \"@solar-icons/react/linear/gallery-add\"\nimport { GalleryWideIcon as GalleryWideLinear } from \"@solar-icons/react/linear/gallery-wide\"\nimport { GlobalIcon as GlobalLinear } from \"@solar-icons/react/linear/global\"\nimport { GraphDownIcon as GraphDownLinear } from \"@solar-icons/react/linear/graph-down\"\nimport { GraphUpIcon as GraphUpLinear } from \"@solar-icons/react/linear/graph-up\"\nimport { HamburgerMenuIcon as HamburgerMenuLinear } from \"@solar-icons/react/linear/hamburger-menu\"\nimport { HandHeartIcon as HandHeartLinear } from \"@solar-icons/react/linear/hand-heart\"\nimport { HeartIcon as HeartLinear } from \"@solar-icons/react/linear/heart\"\nimport { HelpIcon as HelpLinear } from \"@solar-icons/react/linear/help\"\nimport { HistoryIcon as HistoryLinear } from \"@solar-icons/react/linear/history\"\nimport { HomeAngleIcon as HomeAngleLinear } from \"@solar-icons/react/linear/home-angle\"\nimport { InfoCircleIcon as InfoCircleLinear } from \"@solar-icons/react/linear/info-circle\"\nimport { LayersIcon as LayersLinear } from \"@solar-icons/react/linear/layers\"\nimport { LetterIcon as LetterLinear } from \"@solar-icons/react/linear/letter\"\nimport { LikeIcon as LikeLinear } from \"@solar-icons/react/linear/like\"\nimport { LinkIcon as LinkLinear } from \"@solar-icons/react/linear/link\"\nimport { ListIcon as ListLinear } from \"@solar-icons/react/linear/list\"\nimport { ListVerticalIcon as ListVerticalLinear } from \"@solar-icons/react/linear/list-vertical\"\nimport { LockPasswordIcon as LockPasswordLinear } from \"@solar-icons/react/linear/lock-password\"\nimport { Login2Icon as Login2Linear } from \"@solar-icons/react/linear/login-2\"\nimport { LogoutIcon as LogoutLinear } from \"@solar-icons/react/linear/logout\"\nimport { MagicWand2Icon as MagicWand2Linear } from \"@solar-icons/react/linear/magic-wand-2\"\nimport { MagnifierIcon as MagnifierLinear } from \"@solar-icons/react/linear/magnifier\"\nimport { MagnifierZoomInIcon as MagnifierZoomInLinear } from \"@solar-icons/react/linear/magnifier-zoom-in\"\nimport { MagnifierZoomOutIcon as MagnifierZoomOutLinear } from \"@solar-icons/react/linear/magnifier-zoom-out\"\nimport { MaximizeIcon as MaximizeLinear } from \"@solar-icons/react/linear/maximize\"\nimport { MinimizeIcon as MinimizeLinear } from \"@solar-icons/react/linear/minimize\"\nimport { MinusSquareIcon as MinusSquareLinear } from \"@solar-icons/react/linear/minus-square\"\nimport { MonitorIcon as MonitorLinear } from \"@solar-icons/react/linear/monitor\"\nimport { MonitorSmartphoneIcon as MonitorSmartphoneLinear } from \"@solar-icons/react/linear/monitor-smartphone\"\nimport { MoonIcon as MoonLinear } from \"@solar-icons/react/linear/moon\"\nimport { MoveToFolderIcon as MoveToFolderLinear } from \"@solar-icons/react/linear/move-to-folder\"\nimport { MusicNotesIcon as MusicNotesLinear } from \"@solar-icons/react/linear/music-notes\"\nimport { PaletteIcon as PaletteLinear } from \"@solar-icons/react/linear/palette\"\nimport { PaletteRoundIcon as PaletteRoundLinear } from \"@solar-icons/react/linear/palette-round\"\nimport { PauseIcon as PauseLinear } from \"@solar-icons/react/linear/pause\"\nimport { PenIcon as PenLinear } from \"@solar-icons/react/linear/pen\"\nimport { PenNewRoundIcon as PenNewRoundLinear } from \"@solar-icons/react/linear/pen-new-round\"\nimport { PieChartIcon as PieChartLinear } from \"@solar-icons/react/linear/pie-chart\"\nimport { PinIcon as PinLinear } from \"@solar-icons/react/linear/pin\"\nimport { PlayIcon as PlayLinear } from \"@solar-icons/react/linear/play\"\nimport { PlugCircleIcon as PlugCircleLinear } from \"@solar-icons/react/linear/plug-circle\"\nimport { PlusMinusIcon as PlusMinusLinear } from \"@solar-icons/react/linear/plus-minus\"\nimport { PulseIcon as PulseLinear } from \"@solar-icons/react/linear/pulse\"\nimport { RefreshIcon as RefreshLinear } from \"@solar-icons/react/linear/refresh\"\nimport { RefreshCircleIcon as RefreshCircleLinear } from \"@solar-icons/react/linear/refresh-circle\"\nimport { ReorderIcon as ReorderLinear } from \"@solar-icons/react/linear/reorder\"\nimport { RepeatIcon as RepeatLinear } from \"@solar-icons/react/linear/repeat\"\nimport { ReplyIcon as ReplyLinear } from \"@solar-icons/react/linear/reply\"\nimport { RestartIcon as RestartLinear } from \"@solar-icons/react/linear/restart\"\nimport { RocketIcon as RocketLinear } from \"@solar-icons/react/linear/rocket\"\nimport { RouteIcon as RouteLinear } from \"@solar-icons/react/linear/route\"\nimport { ScaleIcon as ScaleLinear } from \"@solar-icons/react/linear/scale\"\nimport { ServerIcon as ServerLinear } from \"@solar-icons/react/linear/server\"\nimport { SettingsIcon as SettingsLinear } from \"@solar-icons/react/linear/settings\"\nimport { ShareIcon as ShareLinear } from \"@solar-icons/react/linear/share\"\nimport { ShieldCheckIcon as ShieldCheckLinear } from \"@solar-icons/react/linear/shield-check\"\nimport { Shop2Icon as Shop2Linear } from \"@solar-icons/react/linear/shop-2\"\nimport { SidebarMinimalisticIcon as SidebarMinimalisticLinear } from \"@solar-icons/react/linear/sidebar-minimalistic\"\nimport { SliderHorizontalIcon as SliderHorizontalLinear } from \"@solar-icons/react/linear/slider-horizontal\"\nimport { SmartphoneIcon as SmartphoneLinear } from \"@solar-icons/react/linear/smartphone\"\nimport { SortIcon as SortLinear } from \"@solar-icons/react/linear/sort\"\nimport { SortByTimeIcon as SortByTimeLinear } from \"@solar-icons/react/linear/sort-by-time\"\nimport { SortHorizontalIcon as SortHorizontalLinear } from \"@solar-icons/react/linear/sort-horizontal\"\nimport { SortVerticalIcon as SortVerticalLinear } from \"@solar-icons/react/linear/sort-vertical\"\nimport { StarIcon as StarLinear } from \"@solar-icons/react/linear/star\"\nimport { StructureIcon as StructureLinear } from \"@solar-icons/react/linear/structure\"\nimport { SunIcon as SunLinear } from \"@solar-icons/react/linear/sun\"\nimport { TagIcon as TagLinear } from \"@solar-icons/react/linear/tag\"\nimport { TelescopeIcon as TelescopeLinear } from \"@solar-icons/react/linear/telescope\"\nimport { TestTubeIcon as TestTubeLinear } from \"@solar-icons/react/linear/test-tube\"\nimport { TextFormatIcon as TextFormatLinear } from \"@solar-icons/react/linear/text-format\"\nimport { TransferHorizontalIcon as TransferHorizontalLinear } from \"@solar-icons/react/linear/transfer-horizontal\"\nimport { TranslationIcon as TranslationLinear } from \"@solar-icons/react/linear/translation\"\nimport { TrashBinMinimalisticIcon as TrashBinMinimalisticLinear } from \"@solar-icons/react/linear/trash-bin-minimalistic\"\nimport { UndoLeftIcon as UndoLeftLinear } from \"@solar-icons/react/linear/undo-left\"\nimport { UndoLeftRoundIcon as UndoLeftRoundLinear } from \"@solar-icons/react/linear/undo-left-round\"\nimport { UndoRightIcon as UndoRightLinear } from \"@solar-icons/react/linear/undo-right\"\nimport { UndoRightRoundIcon as UndoRightRoundLinear } from \"@solar-icons/react/linear/undo-right-round\"\nimport { UploadIcon as UploadLinear } from \"@solar-icons/react/linear/upload\"\nimport { UserIcon as UserLinear } from \"@solar-icons/react/linear/user\"\nimport { UserIdIcon as UserIdLinear } from \"@solar-icons/react/linear/user-id\"\nimport { UserMinusIcon as UserMinusLinear } from \"@solar-icons/react/linear/user-minus\"\nimport { UserPlusIcon as UserPlusLinear } from \"@solar-icons/react/linear/user-plus\"\nimport { UsersGroupRoundedIcon as UsersGroupRoundedLinear } from \"@solar-icons/react/linear/users-group-rounded\"\nimport { UsersGroupTwoRoundedIcon as UsersGroupTwoRoundedLinear } from \"@solar-icons/react/linear/users-group-two-rounded\"\nimport { VideoFrameIcon as VideoFrameLinear } from \"@solar-icons/react/linear/video-frame\"\nimport { Widget2Icon as Widget2Linear } from \"@solar-icons/react/linear/widget-2\"\nimport { Widget5Icon as Widget5Linear } from \"@solar-icons/react/linear/widget-5\"\nimport { WindowFrameIcon as WindowFrameLinear } from \"@solar-icons/react/linear/window-frame\"\nimport { createIcon } from \"./icon-style\"\n\n// ── One icon per glyph - three parallel Solar weights ────────────\nexport const AddCircle = createIcon({\n\tbold: AddCircleBoldWeight,\n\tboldDuotone: AddCircleBoldDuotone,\n\tlinear: AddCircleLinear,\n})\nexport const AlignLeft = createIcon({\n\tbold: AlignLeftBoldWeight,\n\tboldDuotone: AlignLeftBoldDuotone,\n\tlinear: AlignLeftLinear,\n})\nexport const AltArrowDown = createIcon({\n\tbold: AltArrowDownBoldWeight,\n\tboldDuotone: AltArrowDownBoldDuotone,\n\tlinear: AltArrowDownLinear,\n})\nexport const AltArrowLeft = createIcon({\n\tbold: AltArrowLeftBoldWeight,\n\tboldDuotone: AltArrowLeftBoldDuotone,\n\tlinear: AltArrowLeftLinear,\n})\nexport const AltArrowRight = createIcon({\n\tbold: AltArrowRightBoldWeight,\n\tboldDuotone: AltArrowRightBoldDuotone,\n\tlinear: AltArrowRightLinear,\n})\nexport const AltArrowUp = createIcon({\n\tbold: AltArrowUpBoldWeight,\n\tboldDuotone: AltArrowUpBoldDuotone,\n\tlinear: AltArrowUpLinear,\n})\nexport const Archive = createIcon({\n\tbold: ArchiveBoldWeight,\n\tboldDuotone: ArchiveBoldDuotone,\n\tlinear: ArchiveLinear,\n})\nexport const ArrowRight = createIcon({\n\tbold: ArrowRightBoldWeight,\n\tboldDuotone: ArrowRightBoldDuotone,\n\tlinear: ArrowRightLinear,\n})\nexport const ArrowToTopLeft = createIcon({\n\tbold: ArrowToTopLeftBoldWeight,\n\tboldDuotone: ArrowToTopLeftBoldDuotone,\n\tlinear: ArrowToTopLeftLinear,\n})\nexport const ArrowToTopRight = createIcon({\n\tbold: ArrowToTopRightBoldWeight,\n\tboldDuotone: ArrowToTopRightBoldDuotone,\n\tlinear: ArrowToTopRightLinear,\n})\nexport const Bell = createIcon({\n\tbold: BellBoldWeight,\n\tboldDuotone: BellBoldDuotone,\n\tlinear: BellLinear,\n})\nexport const Bolt = createIcon({\n\tbold: BoltBoldWeight,\n\tboldDuotone: BoltBoldDuotone,\n\tlinear: BoltLinear,\n})\nexport const Book = createIcon({\n\tbold: BookBoldWeight,\n\tboldDuotone: BookBoldDuotone,\n\tlinear: BookLinear,\n})\nexport const Book2 = createIcon({\n\tbold: Book2BoldWeight,\n\tboldDuotone: Book2BoldDuotone,\n\tlinear: Book2Linear,\n})\nexport const Bookmark = createIcon({\n\tbold: BookmarkBoldWeight,\n\tboldDuotone: BookmarkBoldDuotone,\n\tlinear: BookmarkLinear,\n})\nexport const BookmarkCircle = createIcon({\n\tbold: BookmarkCircleBoldWeight,\n\tboldDuotone: BookmarkCircleBoldDuotone,\n\tlinear: BookmarkCircleLinear,\n})\nexport const Box = createIcon({\n\tbold: BoxBoldWeight,\n\tboldDuotone: BoxBoldDuotone,\n\tlinear: BoxLinear,\n})\nexport const BranchingPathsUp = createIcon({\n\tbold: BranchingPathsUpBoldWeight,\n\tboldDuotone: BranchingPathsUpBoldDuotone,\n\tlinear: BranchingPathsUpLinear,\n})\nexport const Bug = createIcon({\n\tbold: BugBoldWeight,\n\tboldDuotone: BugBoldDuotone,\n\tlinear: BugLinear,\n})\nexport const CalendarDate = createIcon({\n\tbold: CalendarDateBoldWeight,\n\tboldDuotone: CalendarDateBoldDuotone,\n\tlinear: CalendarDateLinear,\n})\nexport const ChatRound = createIcon({\n\tbold: ChatRoundBoldWeight,\n\tboldDuotone: ChatRoundBoldDuotone,\n\tlinear: ChatRoundLinear,\n})\nexport const ChatRoundDots = createIcon({\n\tbold: ChatRoundDotsBoldWeight,\n\tboldDuotone: ChatRoundDotsBoldDuotone,\n\tlinear: ChatRoundDotsLinear,\n})\nexport const ChatRoundLine = createIcon({\n\tbold: ChatRoundLineBoldWeight,\n\tboldDuotone: ChatRoundLineBoldDuotone,\n\tlinear: ChatRoundLineLinear,\n})\nexport const ChatSquare = createIcon({\n\tbold: ChatSquareBoldWeight,\n\tboldDuotone: ChatSquareBoldDuotone,\n\tlinear: ChatSquareLinear,\n})\nexport const CheckCircle = createIcon({\n\tbold: CheckCircleBoldWeight,\n\tboldDuotone: CheckCircleBoldDuotone,\n\tlinear: CheckCircleLinear,\n})\nexport const Checklist = createIcon({\n\tbold: ChecklistBoldWeight,\n\tboldDuotone: ChecklistBoldDuotone,\n\tlinear: ChecklistLinear,\n})\nexport const ClipboardList = createIcon({\n\tbold: ClipboardListBoldWeight,\n\tboldDuotone: ClipboardListBoldDuotone,\n\tlinear: ClipboardListLinear,\n})\nexport const ClockCircle = createIcon({\n\tbold: ClockCircleBoldWeight,\n\tboldDuotone: ClockCircleBoldDuotone,\n\tlinear: ClockCircleLinear,\n})\nexport const Compass = createIcon({\n\tbold: CompassBoldWeight,\n\tboldDuotone: CompassBoldDuotone,\n\tlinear: CompassLinear,\n})\nexport const Copy = createIcon({\n\tbold: CopyBoldWeight,\n\tboldDuotone: CopyBoldDuotone,\n\tlinear: CopyLinear,\n})\nexport const Crown = createIcon({\n\tbold: CrownBoldWeight,\n\tboldDuotone: CrownBoldDuotone,\n\tlinear: CrownLinear,\n})\nexport const DangerTriangle = createIcon({\n\tbold: DangerTriangleBoldWeight,\n\tboldDuotone: DangerTriangleBoldDuotone,\n\tlinear: DangerTriangleLinear,\n})\nexport const Database = createIcon({\n\tbold: DatabaseBoldWeight,\n\tboldDuotone: DatabaseBoldDuotone,\n\tlinear: DatabaseLinear,\n})\nexport const Diskette = createIcon({\n\tbold: DisketteBoldWeight,\n\tboldDuotone: DisketteBoldDuotone,\n\tlinear: DisketteLinear,\n})\nexport const Dislike = createIcon({\n\tbold: DislikeBoldWeight,\n\tboldDuotone: DislikeBoldDuotone,\n\tlinear: DislikeLinear,\n})\nexport const DocumentAdd = createIcon({\n\tbold: DocumentAddBoldWeight,\n\tboldDuotone: DocumentAddBoldDuotone,\n\tlinear: DocumentAddLinear,\n})\nexport const DocumentText = createIcon({\n\tbold: DocumentTextBoldWeight,\n\tboldDuotone: DocumentTextBoldDuotone,\n\tlinear: DocumentTextLinear,\n})\nexport const DoubleAltArrowDown = createIcon({\n\tbold: DoubleAltArrowDownBoldWeight,\n\tboldDuotone: DoubleAltArrowDownBoldDuotone,\n\tlinear: DoubleAltArrowDownLinear,\n})\nexport const Download = createIcon({\n\tbold: DownloadBoldWeight,\n\tboldDuotone: DownloadBoldDuotone,\n\tlinear: DownloadLinear,\n})\nexport const Eraser = createIcon({\n\tbold: EraserBoldWeight,\n\tboldDuotone: EraserBoldDuotone,\n\tlinear: EraserLinear,\n})\nexport const Eye = createIcon({\n\tbold: EyeBoldWeight,\n\tboldDuotone: EyeBoldDuotone,\n\tlinear: EyeLinear,\n})\nexport const File = createIcon({\n\tbold: FileBoldWeight,\n\tboldDuotone: FileBoldDuotone,\n\tlinear: FileLinear,\n})\nexport const FileRemove = createIcon({\n\tbold: FileRemoveBoldWeight,\n\tboldDuotone: FileRemoveBoldDuotone,\n\tlinear: FileRemoveLinear,\n})\nexport const FileText = createIcon({\n\tbold: FileTextBoldWeight,\n\tboldDuotone: FileTextBoldDuotone,\n\tlinear: FileTextLinear,\n})\nexport const Filter = createIcon({\n\tbold: FilterBoldWeight,\n\tboldDuotone: FilterBoldDuotone,\n\tlinear: FilterLinear,\n})\nexport const Filters = createIcon({\n\tbold: FiltersBoldWeight,\n\tboldDuotone: FiltersBoldDuotone,\n\tlinear: FiltersLinear,\n})\nexport const Folder = createIcon({\n\tbold: FolderBoldWeight,\n\tboldDuotone: FolderBoldDuotone,\n\tlinear: FolderLinear,\n})\nexport const FolderOpen = createIcon({\n\tbold: FolderOpenBoldWeight,\n\tboldDuotone: FolderOpenBoldDuotone,\n\tlinear: FolderOpenLinear,\n})\nexport const FolderPathConnect = createIcon({\n\tbold: FolderPathConnectBoldWeight,\n\tboldDuotone: FolderPathConnectBoldDuotone,\n\tlinear: FolderPathConnectLinear,\n})\nexport const ForbiddenCircle = createIcon({\n\tbold: ForbiddenCircleBoldWeight,\n\tboldDuotone: ForbiddenCircleBoldDuotone,\n\tlinear: ForbiddenCircleLinear,\n})\nexport const Gallery = createIcon({\n\tbold: GalleryBoldWeight,\n\tboldDuotone: GalleryBoldDuotone,\n\tlinear: GalleryLinear,\n})\nexport const GalleryAdd = createIcon({\n\tbold: GalleryAddBoldWeight,\n\tboldDuotone: GalleryAddBoldDuotone,\n\tlinear: GalleryAddLinear,\n})\nexport const GalleryWide = createIcon({\n\tbold: GalleryWideBoldWeight,\n\tboldDuotone: GalleryWideBoldDuotone,\n\tlinear: GalleryWideLinear,\n})\nexport const Global = createIcon({\n\tbold: GlobalBoldWeight,\n\tboldDuotone: GlobalBoldDuotone,\n\tlinear: GlobalLinear,\n})\nexport const GraphDown = createIcon({\n\tbold: GraphDownBoldWeight,\n\tboldDuotone: GraphDownBoldDuotone,\n\tlinear: GraphDownLinear,\n})\nexport const GraphUp = createIcon({\n\tbold: GraphUpBoldWeight,\n\tboldDuotone: GraphUpBoldDuotone,\n\tlinear: GraphUpLinear,\n})\nexport const HamburgerMenu = createIcon({\n\tbold: HamburgerMenuBoldWeight,\n\tboldDuotone: HamburgerMenuBoldDuotone,\n\tlinear: HamburgerMenuLinear,\n})\nexport const HandHeart = createIcon({\n\tbold: HandHeartBoldWeight,\n\tboldDuotone: HandHeartBoldDuotone,\n\tlinear: HandHeartLinear,\n})\nexport const Heart = createIcon({\n\tbold: HeartBoldWeight,\n\tboldDuotone: HeartBoldDuotone,\n\tlinear: HeartLinear,\n})\nexport const Help = createIcon({\n\tbold: HelpBoldWeight,\n\tboldDuotone: HelpBoldDuotone,\n\tlinear: HelpLinear,\n})\nexport const History = createIcon({\n\tbold: HistoryBoldWeight,\n\tboldDuotone: HistoryBoldDuotone,\n\tlinear: HistoryLinear,\n})\nexport const HomeAngle = createIcon({\n\tbold: HomeAngleBoldWeight,\n\tboldDuotone: HomeAngleBoldDuotone,\n\tlinear: HomeAngleLinear,\n})\nexport const InfoCircle = createIcon({\n\tbold: InfoCircleBoldWeight,\n\tboldDuotone: InfoCircleBoldDuotone,\n\tlinear: InfoCircleLinear,\n})\nexport const Layers = createIcon({\n\tbold: LayersBoldWeight,\n\tboldDuotone: LayersBoldDuotone,\n\tlinear: LayersLinear,\n})\nexport const Letter = createIcon({\n\tbold: LetterBoldWeight,\n\tboldDuotone: LetterBoldDuotone,\n\tlinear: LetterLinear,\n})\nexport const Like = createIcon({\n\tbold: LikeBoldWeight,\n\tboldDuotone: LikeBoldDuotone,\n\tlinear: LikeLinear,\n})\nexport const Link = createIcon({\n\tbold: LinkBoldWeight,\n\tboldDuotone: LinkBoldDuotone,\n\tlinear: LinkLinear,\n})\nexport const List = createIcon({\n\tbold: ListBoldWeight,\n\tboldDuotone: ListBoldDuotone,\n\tlinear: ListLinear,\n})\nexport const ListVertical = createIcon({\n\tbold: ListVerticalBoldWeight,\n\tboldDuotone: ListVerticalBoldDuotone,\n\tlinear: ListVerticalLinear,\n})\nexport const LockPassword = createIcon({\n\tbold: LockPasswordBoldWeight,\n\tboldDuotone: LockPasswordBoldDuotone,\n\tlinear: LockPasswordLinear,\n})\nexport const Login2 = createIcon({\n\tbold: Login2BoldWeight,\n\tboldDuotone: Login2BoldDuotone,\n\tlinear: Login2Linear,\n})\nexport const Logout = createIcon({\n\tbold: LogoutBoldWeight,\n\tboldDuotone: LogoutBoldDuotone,\n\tlinear: LogoutLinear,\n})\nexport const MagicWand2 = createIcon({\n\tbold: MagicWand2BoldWeight,\n\tboldDuotone: MagicWand2BoldDuotone,\n\tlinear: MagicWand2Linear,\n})\nexport const Magnifier = createIcon({\n\tbold: MagnifierBoldWeight,\n\tboldDuotone: MagnifierBoldDuotone,\n\tlinear: MagnifierLinear,\n})\nexport const MagnifierZoomIn = createIcon({\n\tbold: MagnifierZoomInBoldWeight,\n\tboldDuotone: MagnifierZoomInBoldDuotone,\n\tlinear: MagnifierZoomInLinear,\n})\nexport const MagnifierZoomOut = createIcon({\n\tbold: MagnifierZoomOutBoldWeight,\n\tboldDuotone: MagnifierZoomOutBoldDuotone,\n\tlinear: MagnifierZoomOutLinear,\n})\nexport const Maximize = createIcon({\n\tbold: MaximizeBoldWeight,\n\tboldDuotone: MaximizeBoldDuotone,\n\tlinear: MaximizeLinear,\n})\nexport const MenuDots = createIcon({\n\tbold: MenuDotsBoldWeight,\n\tboldDuotone: MenuDotsBoldDuotone,\n\tlinear: MenuDotsBoldWeight,\n})\nexport const Minimize = createIcon({\n\tbold: MinimizeBoldWeight,\n\tboldDuotone: MinimizeBoldDuotone,\n\tlinear: MinimizeLinear,\n})\nexport const MinusSquare = createIcon({\n\tbold: MinusSquareBoldWeight,\n\tboldDuotone: MinusSquareBoldDuotone,\n\tlinear: MinusSquareLinear,\n})\nexport const Monitor = createIcon({\n\tbold: MonitorBoldWeight,\n\tboldDuotone: MonitorBoldDuotone,\n\tlinear: MonitorLinear,\n})\nexport const MonitorSmartphone = createIcon({\n\tbold: MonitorSmartphoneBoldWeight,\n\tboldDuotone: MonitorSmartphoneBoldDuotone,\n\tlinear: MonitorSmartphoneLinear,\n})\nexport const Moon = createIcon({\n\tbold: MoonBoldWeight,\n\tboldDuotone: MoonBoldDuotone,\n\tlinear: MoonLinear,\n})\nexport const MoveToFolder = createIcon({\n\tbold: MoveToFolderBoldWeight,\n\tboldDuotone: MoveToFolderBoldDuotone,\n\tlinear: MoveToFolderLinear,\n})\nexport const MusicNotes = createIcon({\n\tbold: MusicNotesBoldWeight,\n\tboldDuotone: MusicNotesBoldDuotone,\n\tlinear: MusicNotesLinear,\n})\nexport const Palette = createIcon({\n\tbold: PaletteBoldWeight,\n\tboldDuotone: PaletteBoldDuotone,\n\tlinear: PaletteLinear,\n})\nexport const PaletteRound = createIcon({\n\tbold: PaletteRoundBoldWeight,\n\tboldDuotone: PaletteRoundBoldDuotone,\n\tlinear: PaletteRoundLinear,\n})\nexport const Pause = createIcon({\n\tbold: PauseBoldWeight,\n\tboldDuotone: PauseBoldDuotone,\n\tlinear: PauseLinear,\n})\nexport const Pen = createIcon({\n\tbold: PenBoldWeight,\n\tboldDuotone: PenBoldDuotone,\n\tlinear: PenLinear,\n})\nexport const PenNewRound = createIcon({\n\tbold: PenNewRoundBoldWeight,\n\tboldDuotone: PenNewRoundBoldDuotone,\n\tlinear: PenNewRoundLinear,\n})\nexport const PieChart = createIcon({\n\tbold: PieChartBoldWeight,\n\tboldDuotone: PieChartBoldDuotone,\n\tlinear: PieChartLinear,\n})\nexport const Pin = createIcon({\n\tbold: PinBoldWeight,\n\tboldDuotone: PinBoldDuotone,\n\tlinear: PinLinear,\n})\nexport const Play = createIcon({\n\tbold: PlayBoldWeight,\n\tboldDuotone: PlayBoldDuotone,\n\tlinear: PlayLinear,\n})\nexport const PlugCircle = createIcon({\n\tbold: PlugCircleBoldWeight,\n\tboldDuotone: PlugCircleBoldDuotone,\n\tlinear: PlugCircleLinear,\n})\nexport const PlusMinus = createIcon({\n\tbold: PlusMinusBoldWeight,\n\tboldDuotone: PlusMinusBoldDuotone,\n\tlinear: PlusMinusLinear,\n})\nexport const Pulse = createIcon({\n\tbold: PulseBoldWeight,\n\tboldDuotone: PulseBoldDuotone,\n\tlinear: PulseLinear,\n})\nexport const Refresh = createIcon({\n\tbold: RefreshBoldWeight,\n\tboldDuotone: RefreshBoldDuotone,\n\tlinear: RefreshLinear,\n})\nexport const RefreshCircle = createIcon({\n\tbold: RefreshCircleBoldWeight,\n\tboldDuotone: RefreshCircleBoldDuotone,\n\tlinear: RefreshCircleLinear,\n})\nexport const Reorder = createIcon({\n\tbold: ReorderBoldWeight,\n\tboldDuotone: ReorderBoldDuotone,\n\tlinear: ReorderLinear,\n})\nexport const Repeat = createIcon({\n\tbold: RepeatBoldWeight,\n\tboldDuotone: RepeatBoldDuotone,\n\tlinear: RepeatLinear,\n})\nexport const Reply = createIcon({\n\tbold: ReplyBoldWeight,\n\tboldDuotone: ReplyBoldDuotone,\n\tlinear: ReplyLinear,\n})\nexport const Restart = createIcon({\n\tbold: RestartBoldWeight,\n\tboldDuotone: RestartBoldDuotone,\n\tlinear: RestartLinear,\n})\nexport const Rocket = createIcon({\n\tbold: RocketBoldWeight,\n\tboldDuotone: RocketBoldDuotone,\n\tlinear: RocketLinear,\n})\nexport const Route = createIcon({\n\tbold: RouteBoldWeight,\n\tboldDuotone: RouteBoldDuotone,\n\tlinear: RouteLinear,\n})\nexport const Scale = createIcon({\n\tbold: ScaleBoldWeight,\n\tboldDuotone: ScaleBoldDuotone,\n\tlinear: ScaleLinear,\n})\nexport const Server = createIcon({\n\tbold: ServerBoldWeight,\n\tboldDuotone: ServerBoldDuotone,\n\tlinear: ServerLinear,\n})\nexport const Settings = createIcon({\n\tbold: SettingsBoldWeight,\n\tboldDuotone: SettingsBoldDuotone,\n\tlinear: SettingsLinear,\n})\nexport const Share = createIcon({\n\tbold: ShareBoldWeight,\n\tboldDuotone: ShareBoldDuotone,\n\tlinear: ShareLinear,\n})\nexport const ShieldCheck = createIcon({\n\tbold: ShieldCheckBoldWeight,\n\tboldDuotone: ShieldCheckBoldDuotone,\n\tlinear: ShieldCheckLinear,\n})\nexport const Shop2 = createIcon({\n\tbold: Shop2BoldWeight,\n\tboldDuotone: Shop2BoldDuotone,\n\tlinear: Shop2Linear,\n})\nexport const SidebarMinimalistic = createIcon({\n\tbold: SidebarMinimalisticBoldWeight,\n\tboldDuotone: SidebarMinimalisticBoldDuotone,\n\tlinear: SidebarMinimalisticLinear,\n})\nexport const SliderHorizontal = createIcon({\n\tbold: SliderHorizontalBoldWeight,\n\tboldDuotone: SliderHorizontalBoldDuotone,\n\tlinear: SliderHorizontalLinear,\n})\nexport const Smartphone = createIcon({\n\tbold: SmartphoneBoldWeight,\n\tboldDuotone: SmartphoneBoldDuotone,\n\tlinear: SmartphoneLinear,\n})\nexport const Sort = createIcon({\n\tbold: SortBoldWeight,\n\tboldDuotone: SortBoldDuotone,\n\tlinear: SortLinear,\n})\nexport const SortByTime = createIcon({\n\tbold: SortByTimeBoldWeight,\n\tboldDuotone: SortByTimeBoldDuotone,\n\tlinear: SortByTimeLinear,\n})\nexport const SortHorizontal = createIcon({\n\tbold: SortHorizontalBoldWeight,\n\tboldDuotone: SortHorizontalBoldDuotone,\n\tlinear: SortHorizontalLinear,\n})\nexport const SortVertical = createIcon({\n\tbold: SortVerticalBoldWeight,\n\tboldDuotone: SortVerticalBoldDuotone,\n\tlinear: SortVerticalLinear,\n})\nexport const Star = createIcon({\n\tbold: StarBoldWeight,\n\tboldDuotone: StarBoldDuotone,\n\tlinear: StarLinear,\n})\nexport const Structure = createIcon({\n\tbold: StructureBoldWeight,\n\tboldDuotone: StructureBoldDuotone,\n\tlinear: StructureLinear,\n})\nexport const Sun = createIcon({\n\tbold: SunBoldWeight,\n\tboldDuotone: SunBoldDuotone,\n\tlinear: SunLinear,\n})\nexport const Tag = createIcon({\n\tbold: TagBoldWeight,\n\tboldDuotone: TagBoldDuotone,\n\tlinear: TagLinear,\n})\nexport const Telescope = createIcon({\n\tbold: TelescopeBoldWeight,\n\tboldDuotone: TelescopeBoldDuotone,\n\tlinear: TelescopeLinear,\n})\nexport const TestTube = createIcon({\n\tbold: TestTubeBoldWeight,\n\tboldDuotone: TestTubeBoldDuotone,\n\tlinear: TestTubeLinear,\n})\nexport const TextFormat = createIcon({\n\tbold: TextFormatBoldWeight,\n\tboldDuotone: TextFormatBoldDuotone,\n\tlinear: TextFormatLinear,\n})\nexport const TransferHorizontal = createIcon({\n\tbold: TransferHorizontalBoldWeight,\n\tboldDuotone: TransferHorizontalBoldDuotone,\n\tlinear: TransferHorizontalLinear,\n})\nexport const Translation = createIcon({\n\tbold: TranslationBoldWeight,\n\tboldDuotone: TranslationBoldDuotone,\n\tlinear: TranslationLinear,\n})\nexport const TrashBinMinimalistic = createIcon({\n\tbold: TrashBinMinimalisticBoldWeight,\n\tboldDuotone: TrashBinMinimalisticBoldDuotone,\n\tlinear: TrashBinMinimalisticLinear,\n})\nexport const UndoLeft = createIcon({\n\tbold: UndoLeftBoldWeight,\n\tboldDuotone: UndoLeftBoldDuotone,\n\tlinear: UndoLeftLinear,\n})\nexport const UndoLeftRound = createIcon({\n\tbold: UndoLeftRoundBoldWeight,\n\tboldDuotone: UndoLeftRoundBoldDuotone,\n\tlinear: UndoLeftRoundLinear,\n})\nexport const UndoRight = createIcon({\n\tbold: UndoRightBoldWeight,\n\tboldDuotone: UndoRightBoldDuotone,\n\tlinear: UndoRightLinear,\n})\nexport const UndoRightRound = createIcon({\n\tbold: UndoRightRoundBoldWeight,\n\tboldDuotone: UndoRightRoundBoldDuotone,\n\tlinear: UndoRightRoundLinear,\n})\nexport const Upload = createIcon({\n\tbold: UploadBoldWeight,\n\tboldDuotone: UploadBoldDuotone,\n\tlinear: UploadLinear,\n})\nexport const User = createIcon({\n\tbold: UserBoldWeight,\n\tboldDuotone: UserBoldDuotone,\n\tlinear: UserLinear,\n})\nexport const UserId = createIcon({\n\tbold: UserIdBoldWeight,\n\tboldDuotone: UserIdBoldDuotone,\n\tlinear: UserIdLinear,\n})\nexport const UserMinus = createIcon({\n\tbold: UserMinusBoldWeight,\n\tboldDuotone: UserMinusBoldDuotone,\n\tlinear: UserMinusLinear,\n})\nexport const UserPlus = createIcon({\n\tbold: UserPlusBoldWeight,\n\tboldDuotone: UserPlusBoldDuotone,\n\tlinear: UserPlusLinear,\n})\nexport const UsersGroupRounded = createIcon({\n\tbold: UsersGroupRoundedBoldWeight,\n\tboldDuotone: UsersGroupRoundedBoldDuotone,\n\tlinear: UsersGroupRoundedLinear,\n})\nexport const UsersGroupTwoRounded = createIcon({\n\tbold: UsersGroupTwoRoundedBoldWeight,\n\tboldDuotone: UsersGroupTwoRoundedBoldDuotone,\n\tlinear: UsersGroupTwoRoundedLinear,\n})\nexport const VideoFrame = createIcon({\n\tbold: VideoFrameBoldWeight,\n\tboldDuotone: VideoFrameBoldDuotone,\n\tlinear: VideoFrameLinear,\n})\nexport const Widget2 = createIcon({\n\tbold: Widget2BoldWeight,\n\tboldDuotone: Widget2BoldDuotone,\n\tlinear: Widget2Linear,\n})\nexport const Widget5 = createIcon({\n\tbold: Widget5BoldWeight,\n\tboldDuotone: Widget5BoldDuotone,\n\tlinear: Widget5Linear,\n})\nexport const WindowFrame = createIcon({\n\tbold: WindowFrameBoldWeight,\n\tboldDuotone: WindowFrameBoldDuotone,\n\tlinear: WindowFrameLinear,\n})\n","import * as React from \"react\"\n\nimport { cn } from \"@hoardodile/ui/lib/utils\"\nimport { Button } from \"@hoardodile/ui/components/button\"\nimport { AltArrowLeft } from \"@hoardodile/ui/icons/registry\"\nimport { AltArrowRight } from \"@hoardodile/ui/icons/registry\"\nimport { MenuDots } from \"@hoardodile/ui/icons/registry\"\nimport { useTranslation } from \"react-i18next\"\n\nfunction Pagination({ className, ...props }: React.ComponentProps<\"nav\">) {\n const { t } = useTranslation(\"ui\", { useSuspense: false })\n return (\n <nav\n role=\"navigation\"\n aria-label={t(\"pagination.region\")}\n data-slot=\"pagination\"\n className={cn(\"mx-auto flex w-full justify-center\", className)}\n {...props}\n />\n )\n}\n\nfunction PaginationContent({\n className,\n ...props\n}: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"pagination-content\"\n className={cn(\"flex items-center gap-1\", className)}\n {...props}\n />\n )\n}\n\nfunction PaginationItem({ ...props }: React.ComponentProps<\"li\">) {\n return <li data-slot=\"pagination-item\" {...props} />\n}\n\ntype PaginationLinkProps = {\n isActive?: boolean\n} & Pick<React.ComponentProps<typeof Button>, \"size\"> &\n React.ComponentProps<\"a\">\n\nfunction PaginationLink({\n className,\n isActive,\n size = \"icon\",\n ...props\n}: PaginationLinkProps) {\n return (\n <Button\n variant={isActive ? \"outline\" : \"ghost\"}\n size={size}\n className={cn(className)}\n nativeButton={false}\n render={\n <a\n aria-current={isActive ? \"page\" : undefined}\n data-slot=\"pagination-link\"\n data-active={isActive}\n {...props}\n />\n }\n />\n )\n}\n\nfunction PaginationPrevious({\n className,\n text,\n ...props\n}: React.ComponentProps<typeof PaginationLink> & { text?: string }) {\n const { t } = useTranslation(\"ui\", { useSuspense: false })\n return (\n <PaginationLink\n aria-label={t(\"pagination.previous\")}\n size=\"default\"\n className={cn(\"pl-2!\", className)}\n {...props}\n >\n <AltArrowLeft data-icon=\"inline-start\" />\n <span className=\"hidden sm:block\">\n {text ?? t(\"pagination.previous\")}\n </span>\n </PaginationLink>\n )\n}\n\nfunction PaginationNext({\n className,\n text,\n ...props\n}: React.ComponentProps<typeof PaginationLink> & { text?: string }) {\n const { t } = useTranslation(\"ui\", { useSuspense: false })\n return (\n <PaginationLink\n aria-label={t(\"pagination.next\")}\n size=\"default\"\n className={cn(\"pr-2!\", className)}\n {...props}\n >\n <span className=\"hidden sm:block\">{text ?? t(\"pagination.next\")}</span>\n <AltArrowRight data-icon=\"inline-end\" />\n </PaginationLink>\n )\n}\n\nfunction PaginationEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n const { t } = useTranslation(\"ui\", { useSuspense: false })\n return (\n <span\n aria-hidden\n data-slot=\"pagination-ellipsis\"\n className={cn(\n \"flex size-9 items-center justify-center [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <MenuDots\n />\n <span className=\"sr-only\">{t(\"pagination.morePages\")}</span>\n </span>\n )\n}\n\nexport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n}\n","/**\n * Mobile viewport initial-scale factor used across the app shell and\n * plugin iframe previews. Kept in one place so it can be changed\n * without hunting through HTML templates and CSS rules.\n */\nexport const MOBILE_INITIAL_SCALE = 0.8\n\n/**\n * Width in pixels at which the app switches from below-md to md+ layouts.\n *\n * This value is intentionally aligned with Tailwind's `md` breakpoint\n * (768 px) so that JS detection and CSS responsive prefixes stay in sync.\n * Components that need to know whether they are in the \"below md\" viewport\n * should use {@link isBelowMd} or {@link useBelowMd} from @hoardodile/ui/hooks/use-mobile.\n */\nexport const MOBILE_BREAKPOINT_PX = 768\n\n/**\n * Same breakpoint expressed in rems, matching Tailwind's default theme\n * (`--breakpoint-md: 48rem`). Useful for CSS media queries and comments.\n */\nexport const MOBILE_BREAKPOINT_REM = MOBILE_BREAKPOINT_PX / 16\n\n/**\n * Media query string that matches viewports below the `md` breakpoint\n * (< 768 px). Shared between JS hooks and anywhere else that needs to detect\n * a below-md viewport.\n *\n * Keep this in sync with the CSS/Tailwind breakpoint so JS and CSS never\n * disagree about the viewport size.\n */\nexport const MOBILE_QUERY = `(max-width: ${MOBILE_BREAKPOINT_PX - 1}px)`\n\n/**\n * Width in pixels at which the app switches from a drawer to a fixed left\n * sidebar (the \"app shell\"). Raised above `md` so mid-size viewports keep\n * the whole width for their content column — below this the sidebar hides\n * behind the hamburger drawer.\n *\n * Use the CSS `sidebar:` / `max-sidebar:` variants (`--breakpoint-sidebar`)\n * at call sites — this value is the single source of truth for both.\n */\nexport const SIDEBAR_BREAKPOINT_PX = 1150\n\n/**\n * Media query string that matches viewports below the sidebar breakpoint\n * (`max-sidebar`), i.e. where the shell shows the drawer instead of the fixed\n * sidebar. Shared between JS hooks and anywhere else that needs the\n * below-sidebar viewport.\n */\nexport const SIDEBAR_QUERY = `(max-width: ${SIDEBAR_BREAKPOINT_PX - 1}px)`\n\n/**\n * Width in pixels at which the right filter rail switches from a fixed\n * column to a drawer (DESIGN.md — Layout: \"the panel becomes an\n * overlay below 1440px\"). Below this the sidebar + panel + content no\n * longer fit comfortably, so the rail hides behind a Filters button.\n *\n * Use the CSS `panel:` / `max-panel:` variants (`--breakpoint-panel`)\n * at call sites — this value is the single source of truth for both.\n */\nexport const PANEL_BREAKPOINT_PX = 1440\n\n/**\n * Media query string that matches viewports below the panel breakpoint\n * (< 1440 px), i.e. where the filter rail lives in a drawer. Shared\n * between JS hooks and anywhere else that needs the below-panel viewport.\n */\nexport const PANEL_QUERY = `(max-width: ${PANEL_BREAKPOINT_PX - 1}px)`\n","import {\n\tMOBILE_QUERY,\n\tPANEL_QUERY,\n\tSIDEBAR_QUERY,\n} from \"@hoardodile/ui/viewport\"\nimport { useMedia } from \"react-use\"\n\n/**\n * One-shot check for viewports below the `md` breakpoint (< 768 px).\n *\n * Prefer {@link useBelowMd} in React components so they re-render when the\n * viewport crosses the breakpoint. Use this helper only in event handlers,\n * utility functions, or effects where a reactive hook is not appropriate.\n */\nexport function isBelowMd(): boolean {\n\tif (typeof window === \"undefined\") return false\n\treturn window.matchMedia(MOBILE_QUERY).matches\n}\n\nexport function useBelowMd(): boolean {\n\treturn useMedia(MOBILE_QUERY, false)\n}\n\n/**\n * Reactive check for viewports below the app-shell sidebar breakpoint\n * (`max-sidebar`), where the fixed sidebar is replaced by the hamburger\n * drawer. Keep in sync with `SIDEBAR_BREAKPOINT_PX` and the\n * `sidebar:` / `max-sidebar:` CSS variants. The shell alone decides its own chrome;\n * compact-UI consumers keep using {@link useBelowMd}.\n */\nexport function useBelowSidebar(): boolean {\n\treturn useMedia(SIDEBAR_QUERY, false)\n}\n\n/**\n * Reactive check for viewports below the filter-rail breakpoint\n * (< 1440 px), where the rail becomes a drawer instead of a fixed right\n * column. Keep in sync with `PANEL_BREAKPOINT_PX` and the\n * `panel:` / `max-panel:` CSS variants.\n */\nexport function useBelowPanel(): boolean {\n\treturn useMedia(PANEL_QUERY, false)\n}\n\n/**\n * Compatibility alias for official shadcn-generated components (e.g.\n * `sidebar.tsx`), which import `useIsMobile` from this module. Mobile\n * detection rules are owned by THIS file for the whole repo (apps and\n * plugins alike) — never let the registry version of `use-mobile.ts`\n * replace it; restore after every `shadcn add`.\n */\nexport function useIsMobile(): boolean {\n\treturn useBelowMd()\n}\n","/**\n * Compute the number of pages for a paginated list given a total row count\n * and the page size. Always at least 1 so the UI never renders \"1 / 0\".\n */\nexport function pageCountOf(total: number, pageSize: number): number {\n\treturn Math.max(1, Math.ceil(total / pageSize))\n}\n\n/**\n * The page numbers a windowed pager renders: the first and last pages are\n * always shown, with an asymmetric window around the active one (more\n * pages trailing than leading) and an ellipsis wherever the gap between\n * two segments is wider than a single page (adjacent numbers render\n * directly, no ellipsis).\n *\n * @example\n * paginationWindow(6, 68) // [1, \"…\", 5, 6, 7, 8, \"…\", 68]\n * paginationWindow(1, 5) // [1, 2, 3, 4, 5]\n */\nexport function paginationWindow(\n\tpage: number,\n\tpageCount: number,\n\tbefore = 1,\n\tafter = 2,\n): readonly (number | \"…\")[] {\n\tconst windowStart = Math.max(2, page - before)\n\tconst windowEnd = Math.min(pageCount - 1, page + after)\n\tconst items: (number | \"…\")[] = [1]\n\tif (windowStart > 2) {\n\t\titems.push(\"…\")\n\t}\n\tfor (let p = windowStart; p <= windowEnd; p++) {\n\t\titems.push(p)\n\t}\n\tif (windowEnd < pageCount - 1) {\n\t\titems.push(\"…\")\n\t}\n\tif (pageCount > 1) {\n\t\titems.push(pageCount)\n\t}\n\treturn items\n}\n","import { Icon } from \"@hoardodile/ui/components/icon\"\nimport { Input } from \"@hoardodile/ui/components/input\"\nimport {\n\tPagination,\n\tPaginationContent,\n\tPaginationItem,\n} from \"@hoardodile/ui/components/pagination\"\nimport { useBelowMd } from \"@hoardodile/ui/hooks/use-mobile\"\nimport { AltArrowLeft, AltArrowRight } from \"@hoardodile/ui/icons/registry\"\nimport { paginationWindow } from \"@hoardodile/ui/lib/pagination\"\nimport { cn } from \"@hoardodile/ui/lib/utils\"\nimport { useState } from \"react\"\nimport { useTranslation } from \"react-i18next\"\n\nexport type PaginationBarProps = {\n\treadonly page: number\n\treadonly pageCount: number\n\treadonly onChangePage: (page: number) => void\n\t/** Result-count label rendered in the left slot (e.g. \"56 messages\"). */\n\treadonly totalLabel: string\n}\n\nconst pageButton =\n\t\"flex h-control min-w-8 cursor-pointer items-center justify-center rounded-lg px-2 text-xs\"\n\n/**\n * The paginator: the result count on the left, balanced by the page-jump\n * field on the right, and the centered row of h-control page chips —\n * chevrons, first and last page always visible with an asymmetric window\n * around the active page (one leading, two trailing) and ellipses for the\n * gap (see {@link paginationWindow}). Below the md breakpoint the window\n * collapses to a compact `page/total` chip, so narrow screens still see\n * how many pages exist. Shared by every paged list (resources,\n * characters, comments, stats, footprints).\n */\nexport function PaginationBar(props: PaginationBarProps) {\n\tconst { page, pageCount, onChangePage, totalLabel } = props\n\tconst { t } = useTranslation(\"ui\", { useSuspense: false })\n\tconst [draft, setDraft] = useState(\"\")\n\tconst isMobile = useBelowMd()\n\n\tfunction jump(): void {\n\t\tconst parsed = Number.parseInt(draft, 10)\n\t\tif (Number.isNaN(parsed)) return\n\t\tconst clamped = Math.min(Math.max(1, parsed), pageCount)\n\t\tsetDraft(\"\")\n\t\tif (clamped !== page) onChangePage(clamped)\n\t}\n\n\tconst pages = isMobile ? [page] : paginationWindow(page, pageCount)\n\tconst chip = (active: boolean) =>\n\t\tcn(\n\t\t\tpageButton,\n\t\t\tactive\n\t\t\t\t? \"bg-muted font-medium text-foreground\"\n\t\t\t\t: \"text-muted-foreground enabled:hover:bg-muted disabled:cursor-not-allowed disabled:opacity-50\",\n\t\t)\n\n\treturn (\n\t\t<Pagination data-testid=\"pagination-bar\">\n\t\t\t<div className=\"flex w-full items-center gap-2\">\n\t\t\t\t<span className=\"w-28 shrink-0 truncate text-xs text-muted-foreground\">\n\t\t\t\t\t{totalLabel}\n\t\t\t\t</span>\n\t\t\t\t<PaginationContent className=\"flex-1 justify-center\">\n\t\t\t\t\t<PaginationItem>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName={chip(false)}\n\t\t\t\t\t\t\tdisabled={page <= 1}\n\t\t\t\t\t\t\taria-label={t(\"pagination.prev\")}\n\t\t\t\t\t\t\tonClick={() => onChangePage(page - 1)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Icon icon={AltArrowLeft} />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</PaginationItem>\n\t\t\t\t\t{pages.map((entry, index) =>\n\t\t\t\t\t\tentry === \"…\" ? (\n\t\t\t\t\t\t\t<PaginationItem key={`ellipsis-${index}`}>\n\t\t\t\t\t\t\t\t<span className=\"px-1 text-xs text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t{entry}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</PaginationItem>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<PaginationItem key={entry}>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tclassName={chip(entry === page)}\n\t\t\t\t\t\t\t\t\tdata-testid={\n\t\t\t\t\t\t\t\t\t\tentry === page ? \"pagination-current\" : undefined\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tonClick={() => onChangePage(entry)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{isMobile ? `${page}/${pageCount}` : entry}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</PaginationItem>\n\t\t\t\t\t\t),\n\t\t\t\t\t)}\n\t\t\t\t\t<PaginationItem>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName={chip(false)}\n\t\t\t\t\t\t\tdisabled={page >= pageCount}\n\t\t\t\t\t\t\taria-label={t(\"pagination.next\")}\n\t\t\t\t\t\t\tonClick={() => onChangePage(page + 1)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Icon icon={AltArrowRight} />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</PaginationItem>\n\t\t\t\t</PaginationContent>\n\t\t\t\t<form\n\t\t\t\t\tclassName=\"flex w-28 items-center justify-end gap-1.5 text-xs text-muted-foreground\"\n\t\t\t\t\tonSubmit={(event) => {\n\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\tjump()\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<span className=\"shrink-0 whitespace-nowrap\">{t(\"pagination.goTo\")}</span>\n\t\t\t\t\t<Input\n\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\tmin={1}\n\t\t\t\t\t\tmax={pageCount}\n\t\t\t\t\t\tvalue={draft}\n\t\t\t\t\t\tonChange={(event) => setDraft(event.target.value)}\n\t\t\t\t\t\tplaceholder={t(\"pagination.jumpToPage\")}\n\t\t\t\t\t\taria-label={t(\"pagination.goTo\")}\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t// Content-elastic width in `ch` units (the native `size`\n\t\t\t\t\t\t// attribute's modern equivalent — `field-sizing` is not\n\t\t\t\t\t\t// supported everywhere yet): one character per digit,\n\t\t\t\t\t\t// with room for the \"Page\" placeholder and padding.\n\t\t\t\t\t\tstyle={{ width: `${Math.max(4, draft.length + 2) + 4}ch` }}\n\t\t\t\t\t\tclassName=\"min-w-0 text-center [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\"\n\t\t\t\t\t/>\n\t\t\t\t</form>\n\t\t\t</div>\n\t\t</Pagination>\n\t)\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/components/pagination-bar.tsx"],"names":[],"mappings":"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","file":"pagination-bar.js","sourcesContent":["import { Icon } from \"@hoardodile/ui/components/icon\"\nimport { Input } from \"@hoardodile/ui/components/input\"\nimport {\n\tPagination,\n\tPaginationContent,\n\tPaginationItem,\n} from \"@hoardodile/ui/components/pagination\"\nimport { useBelowMd } from \"@hoardodile/ui/hooks/use-mobile\"\nimport { AltArrowLeft, AltArrowRight } from \"@hoardodile/ui/icons/registry\"\nimport { paginationWindow } from \"@hoardodile/ui/lib/pagination\"\nimport { cn } from \"@hoardodile/ui/lib/utils\"\nimport { useState } from \"react\"\nimport { useTranslation } from \"react-i18next\"\n\nexport type PaginationBarProps = {\n\treadonly page: number\n\treadonly pageCount: number\n\treadonly onChangePage: (page: number) => void\n\t/** Result-count label rendered in the left slot (e.g. \"56 messages\"). */\n\treadonly totalLabel: string\n}\n\nconst pageButton =\n\t\"flex h-control min-w-8 cursor-pointer items-center justify-center rounded-lg px-2 text-xs\"\n\n/**\n * The paginator: the result count on the left, balanced by the page-jump\n * field on the right, and the centered row of h-control page chips —\n * chevrons, first and last page always visible with an asymmetric window\n * around the active page (one leading, two trailing) and ellipses for the\n * gap (see {@link paginationWindow}). Below the md breakpoint the window\n * collapses to a compact `page/total` chip, so narrow screens still see\n * how many pages exist. Shared by every paged list (resources,\n * characters, comments, stats, footprints).\n */\nexport function PaginationBar(props: PaginationBarProps) {\n\tconst { page, pageCount, onChangePage, totalLabel } = props\n\tconst { t } = useTranslation(\"ui\", { useSuspense: false })\n\tconst [draft, setDraft] = useState(\"\")\n\tconst isMobile = useBelowMd()\n\n\tfunction jump(): void {\n\t\tconst parsed = Number.parseInt(draft, 10)\n\t\tif (Number.isNaN(parsed)) return\n\t\tconst clamped = Math.min(Math.max(1, parsed), pageCount)\n\t\tsetDraft(\"\")\n\t\tif (clamped !== page) onChangePage(clamped)\n\t}\n\n\tconst pages = isMobile ? [page] : paginationWindow(page, pageCount)\n\tconst chip = (active: boolean) =>\n\t\tcn(\n\t\t\tpageButton,\n\t\t\tactive\n\t\t\t\t? \"bg-muted font-medium text-foreground\"\n\t\t\t\t: \"text-muted-foreground enabled:hover:bg-muted disabled:cursor-not-allowed disabled:opacity-50\",\n\t\t)\n\n\treturn (\n\t\t<Pagination data-testid=\"pagination-bar\">\n\t\t\t<div className=\"flex w-full items-center gap-2\">\n\t\t\t\t<span className=\"w-28 shrink-0 truncate text-xs text-muted-foreground\">\n\t\t\t\t\t{totalLabel}\n\t\t\t\t</span>\n\t\t\t\t<PaginationContent className=\"flex-1 justify-center\">\n\t\t\t\t\t<PaginationItem>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName={chip(false)}\n\t\t\t\t\t\t\tdisabled={page <= 1}\n\t\t\t\t\t\t\taria-label={t(\"pagination.prev\")}\n\t\t\t\t\t\t\tonClick={() => onChangePage(page - 1)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Icon icon={AltArrowLeft} />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</PaginationItem>\n\t\t\t\t\t{pages.map((entry, index) =>\n\t\t\t\t\t\tentry === \"…\" ? (\n\t\t\t\t\t\t\t<PaginationItem key={`ellipsis-${index}`}>\n\t\t\t\t\t\t\t\t<span className=\"px-1 text-xs text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t{entry}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</PaginationItem>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<PaginationItem key={entry}>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tclassName={chip(entry === page)}\n\t\t\t\t\t\t\t\t\tdata-testid={\n\t\t\t\t\t\t\t\t\t\tentry === page ? \"pagination-current\" : undefined\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tonClick={() => onChangePage(entry)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{isMobile ? `${page}/${pageCount}` : entry}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</PaginationItem>\n\t\t\t\t\t\t),\n\t\t\t\t\t)}\n\t\t\t\t\t<PaginationItem>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName={chip(false)}\n\t\t\t\t\t\t\tdisabled={page >= pageCount}\n\t\t\t\t\t\t\taria-label={t(\"pagination.next\")}\n\t\t\t\t\t\t\tonClick={() => onChangePage(page + 1)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Icon icon={AltArrowRight} />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</PaginationItem>\n\t\t\t\t</PaginationContent>\n\t\t\t\t<form\n\t\t\t\t\tclassName=\"flex w-28 items-center justify-end gap-1.5 text-xs text-muted-foreground\"\n\t\t\t\t\tonSubmit={(event) => {\n\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\tjump()\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<span className=\"shrink-0 whitespace-nowrap\">{t(\"pagination.goTo\")}</span>\n\t\t\t\t\t<Input\n\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\tmin={1}\n\t\t\t\t\t\tmax={pageCount}\n\t\t\t\t\t\tvalue={draft}\n\t\t\t\t\t\tonChange={(event) => setDraft(event.target.value)}\n\t\t\t\t\t\tplaceholder={t(\"pagination.jumpToPage\")}\n\t\t\t\t\t\taria-label={t(\"pagination.goTo\")}\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t// Content-elastic width in `ch` units (the native `size`\n\t\t\t\t\t\t// attribute's modern equivalent — `field-sizing` is not\n\t\t\t\t\t\t// supported everywhere yet): one character per digit,\n\t\t\t\t\t\t// with room for the \"Page\" placeholder and padding.\n\t\t\t\t\t\tstyle={{ width: `${Math.max(4, draft.length + 2) + 4}ch` }}\n\t\t\t\t\t\tclassName=\"min-w-0 text-center [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\"\n\t\t\t\t\t/>\n\t\t\t\t</form>\n\t\t\t</div>\n\t\t</Pagination>\n\t)\n}\n"]}
|