@hoardodile/ui 0.1.7 → 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 -504
- 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 -521
- 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 -533
- package/dist/components/color-picker.js.map +1 -1
- package/dist/components/combobox.js +15 -937
- 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 -1007
- package/dist/components/dropdown-menu.js.map +1 -1
- package/dist/components/dropdown-select.js +9 -883
- 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 -589
- 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 -775
- 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 -617
- package/dist/components/pagination-bar.js.map +1 -1
- package/dist/components/pagination.js +6 -684
- package/dist/components/pagination.js.map +1 -1
- package/dist/components/panel-toolbar.js +11 -716
- 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 -590
- 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 -1047
- 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 -809
- 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 -524
- 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.js +2 -1194
- 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.js +1 -21
- package/dist/res-card-template/format.js.map +1 -1
- package/dist/res-card-template/icon.js +1 -39
- package/dist/res-card-template/icon.js.map +1 -1
- package/dist/res-card-template/index.js +3 -329
- package/dist/res-card-template/index.js.map +1 -1
- package/dist/res-card-template/template.js +3 -331
- package/dist/res-card-template/template.js.map +1 -1
- package/dist/viewport.js +1 -11
- package/dist/viewport.js.map +1 -1
- package/package.json +3 -3
- package/src/components/image-crop-panel.dist.test.tsx +54 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/merge-config.ts","../../src/lib/utils.ts","../../src/components/special/gold.tsx","../../src/components/special/kintsugi.tsx","../../src/components/special/oilslick.tsx","../../src/components/special/rainbow.tsx","../../src/components/special/silver.tsx","../../src/components/special-tag-surface.tsx","../../src/lib/colors.ts","../../src/lib/tag-surface.ts"],"names":["jsx","jsxs"],"mappings":"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","file":"tag-surface.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 { cn } from \"@hoardodile/ui/lib/utils\"\n\nimport type { SpecialTagStyleConfig } from \"./types\"\n\nfunction GoldSurface({\n\tid,\n\tactive,\n}: {\n\treadonly id: string\n\treadonly active?: boolean\n}) {\n\tconst gradientId = `${id}-gold-gradient`\n\treturn (\n\t\t<svg\n\t\t\tclassName={cn(\n\t\t\t\t\"size-full\",\n\t\t\t\t!active &&\n\t\t\t\t\t\"[filter:brightness(1.1)] group-hover:[filter:brightness(1.16)]\",\n\t\t\t)}\n\t\t\twidth=\"100%\"\n\t\t\theight=\"100%\"\n\t\t\tviewBox=\"0 0 100 100\"\n\t\t\tpreserveAspectRatio=\"none\"\n\t\t>\n\t\t\t<defs>\n\t\t\t\t<linearGradient\n\t\t\t\t\tid={gradientId}\n\t\t\t\t\tx1=\"0%\"\n\t\t\t\t\ty1=\"0%\"\n\t\t\t\t\tx2=\"100%\"\n\t\t\t\t\ty2=\"0%\"\n\t\t\t\t\tgradientTransform=\"rotate(30, 0.5, 0.5)\"\n\t\t\t\t>\n\t\t\t\t\t<stop offset=\"10%\" stopColor=\"#daa520\" />\n\t\t\t\t\t<stop offset=\"30%\" stopColor=\"#ffd700\" />\n\t\t\t\t\t<stop offset=\"50%\" stopColor=\"#f0e68c\" />\n\t\t\t\t\t<stop offset=\"70%\" stopColor=\"#ffd700\" />\n\t\t\t\t\t<stop offset=\"90%\" stopColor=\"#daa520\" />\n\t\t\t\t</linearGradient>\n\t\t\t</defs>\n\t\t\t<rect\n\t\t\t\twidth=\"100\"\n\t\t\t\theight=\"100\"\n\t\t\t\tfill={active ? \"#8a6d1f\" : `url(#${gradientId})`}\n\t\t\t/>\n\t\t\t{!active && (\n\t\t\t\t<rect\n\t\t\t\t\tx=\"0\"\n\t\t\t\t\ty=\"0\"\n\t\t\t\t\twidth=\"100\"\n\t\t\t\t\theight=\"8\"\n\t\t\t\t\tfill=\"#ffffff\"\n\t\t\t\t\topacity=\"0.12\"\n\t\t\t\t/>\n\t\t\t)}\n\t\t</svg>\n\t)\n}\n\nexport const goldConfig: SpecialTagStyleConfig = {\n\trender: GoldSurface,\n\tdefault: {\n\t\tstyle: {\n\t\t\tcolor: \"#725603\",\n\t\t\tboxShadow: \"inset 0 0 0 1px rgba(114, 86, 3, 0.2)\",\n\t\t},\n\t},\n\tactive: {\n\t\tstyle: {\n\t\t\tcolor: \"#ffffff\",\n\t\t},\n\t},\n}\n","import { cn } from \"@hoardodile/ui/lib/utils\"\n\nimport type { SpecialTagStyleConfig } from \"./types\"\n\nfunction KintsugiSurface({\n\tid,\n\tactive,\n}: {\n\treadonly id: string\n\treadonly active?: boolean\n}) {\n\tif (active) {\n\t\treturn (\n\t\t\t<svg\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"size-full\",\n\t\t\t\t\t!active &&\n\t\t\t\t\t\t\"[filter:brightness(1.02)] group-hover:[filter:brightness(1.06)]\",\n\t\t\t\t)}\n\t\t\t\twidth=\"100%\"\n\t\t\t\theight=\"100%\"\n\t\t\t\tviewBox=\"0 0 100 100\"\n\t\t\t\tpreserveAspectRatio=\"none\"\n\t\t\t>\n\t\t\t\t<rect width=\"100\" height=\"100\" fill=\"#9a9a8a\" />\n\t\t\t</svg>\n\t\t)\n\t}\n\n\tconst goldGradientId = `${id}-kintsugi-gold`\n\n\treturn (\n\t\t<svg\n\t\t\tclassName={cn(\n\t\t\t\t\"size-full\",\n\t\t\t\t!active &&\n\t\t\t\t\t\"[filter:brightness(1.02)] group-hover:[filter:brightness(1.06)]\",\n\t\t\t)}\n\t\t\twidth=\"100%\"\n\t\t\theight=\"100%\"\n\t\t\tviewBox=\"0 0 100 100\"\n\t\t\tpreserveAspectRatio=\"none\"\n\t\t>\n\t\t\t<style>{`\n\t\t\t\t@keyframes ${id}-gold-shimmer {\n\t\t\t\t\t0% { stroke-dashoffset: 60; }\n\t\t\t\t\t100% { stroke-dashoffset: 0; }\n\t\t\t\t}\n\t\t\t\t.${id}-gold-vein {\n\t\t\t\t\tstroke-dasharray: 30 30;\n\t\t\t\t\tanimation: ${id}-gold-shimmer 5s linear infinite;\n\t\t\t\t}\n\t\t\t\t@media (prefers-reduced-motion: reduce) {\n\t\t\t\t\t.${id}-gold-vein {\n\t\t\t\t\t\tanimation: none;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t`}</style>\n\n\t\t\t<defs>\n\t\t\t\t<linearGradient id={goldGradientId} x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">\n\t\t\t\t\t<stop offset=\"0%\" stopColor=\"#b8860b\" />\n\t\t\t\t\t<stop offset=\"35%\" stopColor=\"#ffd700\" />\n\t\t\t\t\t<stop offset=\"50%\" stopColor=\"#fffacd\" />\n\t\t\t\t\t<stop offset=\"65%\" stopColor=\"#ffd700\" />\n\t\t\t\t\t<stop offset=\"100%\" stopColor=\"#b8860b\" />\n\t\t\t\t</linearGradient>\n\t\t\t</defs>\n\n\t\t\t{/* Celadon/cream ceramic base */}\n\t\t\t<rect width=\"100\" height=\"100\" fill=\"#d8d4c5\" />\n\t\t\t<rect width=\"100\" height=\"100\" fill=\"#b8c4b8\" opacity=\"0.35\" />\n\n\t\t\t{/* Subtle surface texture */}\n\t\t\t<ellipse cx=\"30\" cy=\"25\" rx=\"40\" ry=\"25\" fill=\"#ffffff\" opacity=\"0.08\" />\n\t\t\t<ellipse cx=\"75\" cy=\"70\" rx=\"35\" ry=\"28\" fill=\"#000000\" opacity=\"0.04\" />\n\n\t\t\t{/* Crack lines (dark) */}\n\t\t\t<path\n\t\t\t\td=\"M 5 20 Q 25 22 35 45 T 60 80\"\n\t\t\t\tfill=\"none\"\n\t\t\t\tstroke=\"#5a5650\"\n\t\t\t\tstrokeWidth=\"0.7\"\n\t\t\t\topacity=\"0.45\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\td=\"M 80 10 Q 70 35 85 55 T 55 95\"\n\t\t\t\tfill=\"none\"\n\t\t\t\tstroke=\"#5a5650\"\n\t\t\t\tstrokeWidth=\"0.6\"\n\t\t\t\topacity=\"0.40\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\td=\"M 10 70 Q 30 68 45 55 T 75 45\"\n\t\t\t\tfill=\"none\"\n\t\t\t\tstroke=\"#5a5650\"\n\t\t\t\tstrokeWidth=\"0.5\"\n\t\t\t\topacity=\"0.38\"\n\t\t\t/>\n\n\t\t\t{/* Gold repair veins */}\n\t\t\t<path\n\t\t\t\tclassName={`${id}-gold-vein`}\n\t\t\t\td=\"M 4 18 Q 24 20 34 43 T 58 78\"\n\t\t\t\tfill=\"none\"\n\t\t\t\tstroke={`url(#${goldGradientId})`}\n\t\t\t\tstrokeWidth=\"1.4\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\tclassName={`${id}-gold-vein`}\n\t\t\t\td=\"M 82 8 Q 72 33 87 53 T 53 93\"\n\t\t\t\tfill=\"none\"\n\t\t\t\tstroke={`url(#${goldGradientId})`}\n\t\t\t\tstrokeWidth=\"1.2\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\tclassName={`${id}-gold-vein`}\n\t\t\t\td=\"M 8 68 Q 28 66 43 53 T 73 43\"\n\t\t\t\tfill=\"none\"\n\t\t\t\tstroke={`url(#${goldGradientId})`}\n\t\t\t\tstrokeWidth=\"1.0\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nexport const kintsugiConfig: SpecialTagStyleConfig = {\n\trender: KintsugiSurface,\n\tdefault: {\n\t\tstyle: {\n\t\t\tcolor: \"#4a4030\",\n\t\t\tboxShadow: \"inset 0 0 0 1px rgba(74, 64, 48, 0.12)\",\n\t\t},\n\t},\n\tactive: {\n\t\tstyle: {\n\t\t\tcolor: \"#ffffff\",\n\t\t},\n\t},\n}\n","import { cn } from \"@hoardodile/ui/lib/utils\"\n\nimport type { SpecialTagStyleConfig } from \"./types\"\n\nfunction OilslickSurface({\n\tid,\n\tactive,\n}: {\n\treadonly id: string\n\treadonly active?: boolean\n}) {\n\tif (active) {\n\t\treturn (\n\t\t\t<svg\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"size-full\",\n\t\t\t\t\t!active &&\n\t\t\t\t\t\t\"[filter:saturate(1.15)] group-hover:[filter:saturate(1.3)_brightness(1.08)]\",\n\t\t\t\t)}\n\t\t\t\twidth=\"100%\"\n\t\t\t\theight=\"100%\"\n\t\t\t\tviewBox=\"0 0 100 100\"\n\t\t\t\tpreserveAspectRatio=\"none\"\n\t\t\t>\n\t\t\t\t<rect width=\"100\" height=\"100\" fill=\"#1a1a2e\" />\n\t\t\t</svg>\n\t\t)\n\t}\n\n\tconst gradientA = `${id}-oilslick-a`\n\tconst gradientB = `${id}-oilslick-b`\n\tconst gradientC = `${id}-oilslick-c`\n\n\treturn (\n\t\t<svg\n\t\t\tclassName={cn(\n\t\t\t\t\"size-full\",\n\t\t\t\t!active &&\n\t\t\t\t\t\"[filter:saturate(1.15)] group-hover:[filter:saturate(1.3)_brightness(1.08)]\",\n\t\t\t)}\n\t\t\twidth=\"100%\"\n\t\t\theight=\"100%\"\n\t\t\tviewBox=\"0 0 100 100\"\n\t\t\tpreserveAspectRatio=\"none\"\n\t\t>\n\t\t\t<defs>\n\t\t\t\t<radialGradient id={gradientA} cx=\"30%\" cy=\"30%\" r=\"70%\">\n\t\t\t\t\t<stop offset=\"0%\" stopColor=\"#8b5cf6\">\n\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\tattributeName=\"stop-color\"\n\t\t\t\t\t\t\tvalues=\"#8b5cf6;#06b6d4;#8b5cf6\"\n\t\t\t\t\t\t\tdur=\"8s\"\n\t\t\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</stop>\n\t\t\t\t\t<stop offset=\"60%\" stopColor=\"#1e1b4b\" stopOpacity=\"0.9\" />\n\t\t\t\t\t<stop offset=\"100%\" stopColor=\"#0f0f1a\" stopOpacity=\"0\" />\n\t\t\t\t</radialGradient>\n\t\t\t\t<radialGradient id={gradientB} cx=\"70%\" cy=\"60%\" r=\"60%\">\n\t\t\t\t\t<stop offset=\"0%\" stopColor=\"#10b981\">\n\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\tattributeName=\"stop-color\"\n\t\t\t\t\t\t\tvalues=\"#10b981;#f59e0b;#ec4899;#10b981\"\n\t\t\t\t\t\t\tdur=\"10s\"\n\t\t\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</stop>\n\t\t\t\t\t<stop offset=\"55%\" stopColor=\"#1e1b4b\" stopOpacity=\"0.8\" />\n\t\t\t\t\t<stop offset=\"100%\" stopColor=\"#0f0f1a\" stopOpacity=\"0\" />\n\t\t\t\t</radialGradient>\n\t\t\t\t<radialGradient id={gradientC} cx=\"50%\" cy=\"80%\" r=\"55%\">\n\t\t\t\t\t<stop offset=\"0%\" stopColor=\"#ec4899\">\n\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\tattributeName=\"stop-color\"\n\t\t\t\t\t\t\tvalues=\"#ec4899;#8b5cf6;#06b6d4;#ec4899\"\n\t\t\t\t\t\t\tdur=\"7s\"\n\t\t\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</stop>\n\t\t\t\t\t<stop offset=\"50%\" stopColor=\"#1e1b4b\" stopOpacity=\"0.7\" />\n\t\t\t\t\t<stop offset=\"100%\" stopColor=\"#0f0f1a\" stopOpacity=\"0\" />\n\t\t\t\t</radialGradient>\n\t\t\t</defs>\n\n\t\t\t<rect width=\"100\" height=\"100\" fill=\"#0a0a12\" />\n\t\t\t<rect\n\t\t\t\twidth=\"100\"\n\t\t\t\theight=\"100\"\n\t\t\t\tfill={`url(#${gradientA})`}\n\t\t\t\topacity=\"0.85\"\n\t\t\t/>\n\t\t\t<rect\n\t\t\t\twidth=\"100\"\n\t\t\t\theight=\"100\"\n\t\t\t\tfill={`url(#${gradientB})`}\n\t\t\t\topacity=\"0.75\"\n\t\t\t/>\n\t\t\t<rect\n\t\t\t\twidth=\"100\"\n\t\t\t\theight=\"100\"\n\t\t\t\tfill={`url(#${gradientC})`}\n\t\t\t\topacity=\"0.70\"\n\t\t\t/>\n\n\t\t\t{/* Thin oily film highlights */}\n\t\t\t<path\n\t\t\t\td=\"M -10 60 Q 25 45 50 60 T 110 55\"\n\t\t\t\tfill=\"none\"\n\t\t\t\tstroke=\"#ffffff\"\n\t\t\t\tstrokeWidth=\"0.8\"\n\t\t\t\topacity=\"0.12\"\n\t\t\t>\n\t\t\t\t<animate\n\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\tvalues=\"M -10 60 Q 25 45 50 60 T 110 55;M -10 55 Q 30 70 55 50 T 110 65;M -10 60 Q 25 45 50 60 T 110 55\"\n\t\t\t\t\tdur=\"12s\"\n\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t/>\n\t\t\t</path>\n\t\t</svg>\n\t)\n}\n\nexport const oilslickConfig: SpecialTagStyleConfig = {\n\trender: OilslickSurface,\n\tdefault: {\n\t\tstyle: {\n\t\t\tcolor: \"#ffffff\",\n\t\t\tboxShadow:\n\t\t\t\t\"inset 0 0 0 1px rgba(255, 255, 255, 0.08), 0 0 10px rgba(139, 92, 246, 0.20)\",\n\t\t},\n\t},\n\tactive: {\n\t\tstyle: {\n\t\t\tcolor: \"#ffffff\",\n\t\t},\n\t},\n}\n","import { cn } from \"@hoardodile/ui/lib/utils\"\n\nimport type { SpecialTagStyleConfig } from \"./types\"\n\nfunction RainbowSurface({\n\tid,\n\tactive,\n}: {\n\treadonly id: string\n\treadonly active?: boolean\n}) {\n\tconst gradientId = `${id}-rainbow-gradient`\n\treturn (\n\t\t<svg\n\t\t\tclassName={cn(\n\t\t\t\t\"size-full\",\n\t\t\t\t!active && \"group-hover:[filter:brightness(1.08)]\",\n\t\t\t)}\n\t\t\twidth=\"100%\"\n\t\t\theight=\"100%\"\n\t\t\tviewBox=\"0 0 100 100\"\n\t\t\tpreserveAspectRatio=\"none\"\n\t\t>\n\t\t\t<defs>\n\t\t\t\t<linearGradient\n\t\t\t\t\tid={gradientId}\n\t\t\t\t\tx1=\"0%\"\n\t\t\t\t\ty1=\"0%\"\n\t\t\t\t\tx2=\"100%\"\n\t\t\t\t\ty2=\"0%\"\n\t\t\t\t\tgradientTransform=\"rotate(30, 0.5, 0.5)\"\n\t\t\t\t>\n\t\t\t\t\t<stop offset=\"0%\" stopColor=\"#fbffca\" />\n\t\t\t\t\t<stop offset=\"33%\" stopColor=\"#baffbf\" />\n\t\t\t\t\t<stop offset=\"66%\" stopColor=\"#a7efff\" />\n\t\t\t\t\t<stop offset=\"100%\" stopColor=\"#ffabff\" />\n\t\t\t\t</linearGradient>\n\t\t\t</defs>\n\t\t\t<rect\n\t\t\t\twidth=\"100\"\n\t\t\t\theight=\"100\"\n\t\t\t\tfill={active ? \"#005458\" : `url(#${gradientId})`}\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n\nexport const rainbowConfig: SpecialTagStyleConfig = {\n\trender: RainbowSurface,\n\tdefault: {\n\t\tclassName: \"font-bold dark:[text-shadow:0_0_5px_rgba(0,0,0,0.5)]\",\n\t\tstyle: {\n\t\t\tcolor: \"#ffffff\",\n\t\t\ttextShadow: \"0 0 5px rgba(0, 0, 0, 0.2)\",\n\t\t\tboxShadow: \"inset 0 0 0 1px rgba(0, 247, 255, 0.1)\",\n\t\t},\n\t},\n\tactive: {\n\t\tstyle: {\n\t\t\tcolor: \"#ffffff\",\n\t\t},\n\t},\n}\n","import { cn } from \"@hoardodile/ui/lib/utils\"\n\nimport type { SpecialTagStyleConfig } from \"./types\"\n\nfunction SilverSurface({\n\tid,\n\tactive,\n}: {\n\treadonly id: string\n\treadonly active?: boolean\n}) {\n\tconst gradientId = `${id}-silver-gradient`\n\treturn (\n\t\t<svg\n\t\t\tclassName={cn(\n\t\t\t\t\"size-full\",\n\t\t\t\t!active &&\n\t\t\t\t\t\"[filter:brightness(1.1)] group-hover:[filter:brightness(1.16)]\",\n\t\t\t)}\n\t\t\twidth=\"100%\"\n\t\t\theight=\"100%\"\n\t\t\tviewBox=\"0 0 100 100\"\n\t\t\tpreserveAspectRatio=\"none\"\n\t\t>\n\t\t\t<defs>\n\t\t\t\t<linearGradient\n\t\t\t\t\tid={gradientId}\n\t\t\t\t\tx1=\"0%\"\n\t\t\t\t\ty1=\"0%\"\n\t\t\t\t\tx2=\"100%\"\n\t\t\t\t\ty2=\"0%\"\n\t\t\t\t\tgradientTransform=\"rotate(30, 0.5, 0.5)\"\n\t\t\t\t>\n\t\t\t\t\t<stop offset=\"10%\" stopColor=\"#afaeae\" />\n\t\t\t\t\t<stop offset=\"30%\" stopColor=\"#d6d6d6\" />\n\t\t\t\t\t<stop offset=\"50%\" stopColor=\"#eeeeee\" />\n\t\t\t\t\t<stop offset=\"70%\" stopColor=\"#d6d6d6\" />\n\t\t\t\t\t<stop offset=\"90%\" stopColor=\"#afaeae\" />\n\t\t\t\t</linearGradient>\n\t\t\t</defs>\n\t\t\t<rect\n\t\t\t\twidth=\"100\"\n\t\t\t\theight=\"100\"\n\t\t\t\tfill={active ? \"#5a5a5a\" : `url(#${gradientId})`}\n\t\t\t/>\n\t\t\t{!active && (\n\t\t\t\t<rect\n\t\t\t\t\tx=\"0\"\n\t\t\t\t\ty=\"0\"\n\t\t\t\t\twidth=\"100\"\n\t\t\t\t\theight=\"8\"\n\t\t\t\t\tfill=\"#ffffff\"\n\t\t\t\t\topacity=\"0.16\"\n\t\t\t\t/>\n\t\t\t)}\n\t\t</svg>\n\t)\n}\n\nexport const silverConfig: SpecialTagStyleConfig = {\n\trender: SilverSurface,\n\tdefault: {\n\t\tstyle: {\n\t\t\tcolor: \"#2a2a2a\",\n\t\t\tboxShadow: \"inset 0 0 0 1px rgba(0, 0, 0, 0.08)\",\n\t\t},\n\t},\n\tactive: {\n\t\tstyle: {\n\t\t\tcolor: \"#ffffff\",\n\t\t},\n\t},\n}\n","import { cn } from \"@hoardodile/ui/lib/utils\"\nimport { useId } from \"react\"\nimport type { TagSpecialStyle } from \"@hoardodile/ui/lib/colors\"\nimport { goldConfig } from \"./special/gold\"\nimport { kintsugiConfig } from \"./special/kintsugi\"\nimport { oilslickConfig } from \"./special/oilslick\"\nimport { rainbowConfig } from \"./special/rainbow\"\nimport { silverConfig } from \"./special/silver\"\nimport type { SpecialTagStyleConfig } from \"./special/types\"\n\nexport type SpecialTagSurfaceProps = {\n\treadonly style: TagSpecialStyle\n\treadonly active?: boolean\n\treadonly className?: string\n}\n\nconst SPECIAL_TAG_CONFIG: Record<TagSpecialStyle, SpecialTagStyleConfig> = {\n\tsilver: silverConfig,\n\tgold: goldConfig,\n\trainbow: rainbowConfig,\n\toilslick: oilslickConfig,\n\tkintsugi: kintsugiConfig,\n}\n\nexport function getSpecialTagStyleConfig(\n\tstyle: TagSpecialStyle,\n): SpecialTagStyleConfig {\n\treturn SPECIAL_TAG_CONFIG[style]\n}\n\n/**\n * SVG background surface for special tag styles.\n *\n * Each style owns a self-contained SVG renderer in `src/components/special/`.\n * This component only picks the right renderer from the registry and applies\n * positioning; all styling (filters, colors, shadows) lives in the renderer or\n * the chip container config.\n */\nexport function SpecialTagSurface(props: SpecialTagSurfaceProps) {\n\tconst { style, active, className } = props\n\tconst config = SPECIAL_TAG_CONFIG[style]\n\tconst Renderer = config.render\n\tconst reactId = useId()\n\t// React useId() can produce ids containing colons, which break SVG\n\t// url(#id) references in some browsers. Replace them with a safe delimiter.\n\tconst safeId = reactId.replace(/:/g, \"-\")\n\n\treturn (\n\t\t<span className={cn(className)} aria-hidden=\"true\">\n\t\t\t<Renderer id={safeId} active={active} />\n\t\t</span>\n\t)\n}\n","/**\n * Pure color utilities used by tag/category chip rendering.\n *\n * Centralized here so chip components, color pickers, and tests share\n * one definition for \"looks white\"/\"looks black\" and the color-mix\n * blending used to keep chips subtle on cards and sidebars.\n */\n\nexport const TAG_SPECIAL_STYLES = [\n\t\"silver\",\n\t\"gold\",\n\t\"rainbow\",\n\t\"oilslick\",\n\t\"kintsugi\",\n] as const\n\n/** Default color presets shared by every color picker in the app. */\nexport const DEFAULT_COLOR_PRESETS = [\n\t\"#9D9D9D\",\n\t\"#000000\",\n\t\"#FFFFFF\",\n\t\"#27AE60\",\n\t\"#0070DD\",\n\t\"#00BCD4\",\n\t\"#8E44AD\",\n\t\"#FF8000\",\n\t\"#F1C40F\",\n\t\"#E74C3C\",\n] as const\n\nexport type TagSpecialStyle = (typeof TAG_SPECIAL_STYLES)[number]\n\nexport function isSpecialTagStyle(color: string): color is TagSpecialStyle {\n\treturn TAG_SPECIAL_STYLES.includes(color as TagSpecialStyle)\n}\n\nexport type TagChipColors = {\n\treadonly baseBg: string\n\treadonly hoverBg: string\n\treadonly fg: string\n}\n\nconst WHITE_COLOR_PATTERN =\n\t/^(?:#fff(?:fff)?|white|rgba?\\(\\s*255\\s*,\\s*255\\s*,\\s*255\\b)/i\nconst BLACK_COLOR_PATTERN =\n\t/^(?:#000(?:000)?|black|rgba?\\(\\s*0\\s*,\\s*0\\s*,\\s*0\\b)/i\n\n/**\n * Tests whether a CSS color string visually resolves to white in any\n * common short form (`#fff`, `#ffffff`, `white`, `rgb(255,255,255,…)`).\n */\nexport function isWhiteHex(color: string): boolean {\n\tif (color === \"\") return false\n\treturn WHITE_COLOR_PATTERN.test(color.trim())\n}\n\n/** Mirror of {@link isWhiteHex} for black. */\nexport function isBlackHex(color: string): boolean {\n\tif (color === \"\") return false\n\treturn BLACK_COLOR_PATTERN.test(color.trim())\n}\n\n/**\n * Resolve a chip's background/hover/foreground triple for the given\n * `color`. White and black are special-cased so they remain visibly\n * black/white in both light and dark themes instead of vanishing into\n * the chip background.\n */\nexport function computeTagChipColors(color: string): TagChipColors {\n\tif (color === \"\") {\n\t\treturn {\n\t\t\tbaseBg: \"var(--color-muted)\",\n\t\t\thoverBg: \"var(--color-accent)\",\n\t\t\tfg: \"var(--color-foreground)\",\n\t\t}\n\t}\n\tif (isWhiteHex(color)) {\n\t\treturn {\n\t\t\tbaseBg: \"#ffffff\",\n\t\t\thoverBg: \"#f1f5f9\",\n\t\t\tfg: \"#0a0a0a\",\n\t\t}\n\t}\n\tif (isBlackHex(color)) {\n\t\treturn {\n\t\t\tbaseBg: \"#0a0a0a\",\n\t\t\thoverBg: \"#262626\",\n\t\t\tfg: \"#ffffff\",\n\t\t}\n\t}\n\treturn {\n\t\tbaseBg: `color-mix(in srgb, ${color} 6%, var(--color-card))`,\n\t\thoverBg: `color-mix(in srgb, ${color} 20%, var(--color-card))`,\n\t\tfg: color,\n\t}\n}\n","import { getSpecialTagStyleConfig } from \"@hoardodile/ui/components/special-tag-surface\"\nimport {\n\tcomputeTagChipColors,\n\tisSpecialTagStyle,\n\ttype TagSpecialStyle,\n} from \"@hoardodile/ui/lib/colors\"\nimport { cn } from \"@hoardodile/ui/lib/utils\"\nimport type { CSSProperties } from \"react\"\n\nexport type ResolvedTagChipSurface = {\n\treadonly className: string\n\treadonly style: CSSProperties | undefined\n\t/** The special SVG texture to layer under the chip's content, or null. */\n\treadonly texture: TagSpecialStyle | null\n}\n\n/**\n * Resolves a chip's visual surface for a user-assigned color — the single\n * source of chip coloring shared by every tag/category pill in the app.\n *\n * A plain color tints the whole chip (a 6% wash as fill, the color as ink,\n * deepening to the hover tint when `active`); the five special styles\n * (silver, gold, rainbow, oilslick, kintsugi) render their SVG texture;\n * an empty color falls back to the default muted chip, taking the primary\n * fill when `active`.\n */\nexport function resolveTagChipSurface(\n\tcolor: string,\n\tactive: boolean,\n): ResolvedTagChipSurface {\n\tif (isSpecialTagStyle(color)) {\n\t\tconst config = getSpecialTagStyleConfig(color)\n\t\treturn {\n\t\t\tclassName: cn(\n\t\t\t\t\"relative isolate group\",\n\t\t\t\tconfig.default.className,\n\t\t\t\tactive ? config.active?.className : undefined,\n\t\t\t),\n\t\t\tstyle: {\n\t\t\t\t...config.default.style,\n\t\t\t\t...(active ? config.active?.style : {}),\n\t\t\t},\n\t\t\ttexture: color,\n\t\t}\n\t}\n\n\tif (color === \"\") {\n\t\treturn active\n\t\t\t? {\n\t\t\t\t\tclassName: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n\t\t\t\t\tstyle: undefined,\n\t\t\t\t\ttexture: null,\n\t\t\t\t}\n\t\t\t: {\n\t\t\t\t\tclassName: \"bg-muted text-foreground hover:bg-accent\",\n\t\t\t\t\tstyle: undefined,\n\t\t\t\t\ttexture: null,\n\t\t\t\t}\n\t}\n\n\tconst chipColors = computeTagChipColors(color)\n\treturn {\n\t\tclassName: \"bg-(--chip-bg) hover:bg-(--chip-hover-bg)\",\n\t\tstyle: {\n\t\t\t[\"--chip-bg\" as string]: active ? chipColors.hoverBg : chipColors.baseBg,\n\t\t\t[\"--chip-hover-bg\" as string]: chipColors.hoverBg,\n\t\t\tcolor: chipColors.fg,\n\t\t},\n\t\ttexture: null,\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"tag-surface.js"}
|
package/dist/lib/utils.js
CHANGED
|
@@ -1,26 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
// src/lib/utils.ts
|
|
5
|
-
var mergeTheme = {
|
|
6
|
-
text: ["tiny", "ui", "doc", "doc-title", "doc-heading", "quote"],
|
|
7
|
-
spacing: ["chip", "control", "nav", "sidebar", "panel"],
|
|
8
|
-
tracking: ["label"],
|
|
9
|
-
shadow: ["card", "dialog"],
|
|
10
|
-
container: ["reading", "medium", "content"],
|
|
11
|
-
font: ["doc", "heading"],
|
|
12
|
-
ease: ["standard"],
|
|
13
|
-
animate: ["skel", "pop"]
|
|
14
|
-
};
|
|
15
|
-
var twMerge = extendTailwindMerge({
|
|
16
|
-
extend: { theme: mergeTheme }
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
// src/lib/utils.ts
|
|
20
|
-
function cn(...inputs) {
|
|
21
|
-
return twMerge(clsx(inputs));
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export { cn };
|
|
1
|
+
export { cn } from '../chunk-M5OJN54O.js';
|
|
2
|
+
import '../chunk-2HWSCY4T.js';
|
|
25
3
|
//# sourceMappingURL=utils.js.map
|
|
26
4
|
//# sourceMappingURL=utils.js.map
|
package/dist/lib/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"utils.js"}
|
|
@@ -1,23 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
// src/res-card-template/format.ts
|
|
4
|
-
function formatBytes(bytes) {
|
|
5
|
-
if (bytes === void 0) return "";
|
|
6
|
-
if (!Number.isFinite(bytes) || bytes <= 0) return "0 B";
|
|
7
|
-
return prettyBytes(bytes, { binary: true }).replaceAll("iB", "B");
|
|
8
|
-
}
|
|
9
|
-
function formatClockDuration(ms) {
|
|
10
|
-
if (!Number.isFinite(ms) || ms < 0) return "";
|
|
11
|
-
const totalSeconds = Math.floor(ms / 1e3);
|
|
12
|
-
const hours = Math.floor(totalSeconds / 3600);
|
|
13
|
-
const minutes = Math.floor(totalSeconds % 3600 / 60);
|
|
14
|
-
const seconds = totalSeconds % 60;
|
|
15
|
-
if (hours > 0) {
|
|
16
|
-
return `${hours}:${String(minutes).padStart(2, "0")}:${String(seconds).padStart(2, "0")}`;
|
|
17
|
-
}
|
|
18
|
-
return `${minutes}:${String(seconds).padStart(2, "0")}`;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export { formatBytes, formatClockDuration };
|
|
1
|
+
export { formatBytes, formatClockDuration } from '../chunk-UEVND7AS.js';
|
|
22
2
|
//# sourceMappingURL=format.js.map
|
|
23
3
|
//# sourceMappingURL=format.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"format.js"}
|
|
@@ -1,41 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
var LEGACY_ICON_ALIASES = {
|
|
3
|
-
Files: "file",
|
|
4
|
-
Film: "video-frame",
|
|
5
|
-
Image: "gallery",
|
|
6
|
-
Info: "info-circle",
|
|
7
|
-
Music: "music-notes",
|
|
8
|
-
Search: "magnifier",
|
|
9
|
-
Sparkle: "star",
|
|
10
|
-
Video: "video-frame"
|
|
11
|
-
};
|
|
12
|
-
function normalizeSolarGlyphName(raw) {
|
|
13
|
-
const trimmed = raw.trim();
|
|
14
|
-
if (trimmed.length === 0) return void 0;
|
|
15
|
-
const aliased = LEGACY_ICON_ALIASES[trimmed];
|
|
16
|
-
if (aliased !== void 0) return aliased;
|
|
17
|
-
if (/^[a-z][a-z0-9-]*$/.test(trimmed)) return trimmed;
|
|
18
|
-
if (/^[A-Za-z][A-Za-z0-9]*$/.test(trimmed)) {
|
|
19
|
-
return trimmed.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
|
|
20
|
-
}
|
|
21
|
-
return void 0;
|
|
22
|
-
}
|
|
23
|
-
function parseIconRef(raw, pluginId, buildAssetUrl) {
|
|
24
|
-
const trimmed = raw.trim();
|
|
25
|
-
if (trimmed.length === 0) return void 0;
|
|
26
|
-
if (trimmed.startsWith("http://") || trimmed.startsWith("https://") || trimmed.startsWith("data:")) {
|
|
27
|
-
return void 0;
|
|
28
|
-
}
|
|
29
|
-
if (trimmed.includes(".") || trimmed.includes("/") || trimmed.includes("\\")) {
|
|
30
|
-
const rel = trimmed.replace(/^\.[\\/]/, "");
|
|
31
|
-
if (rel.length === 0 || rel.split("/").includes("..")) return void 0;
|
|
32
|
-
return { kind: "asset", url: buildAssetUrl(pluginId, rel) };
|
|
33
|
-
}
|
|
34
|
-
const name = normalizeSolarGlyphName(trimmed);
|
|
35
|
-
if (name === void 0) return void 0;
|
|
36
|
-
return { kind: "icon", name };
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export { normalizeSolarGlyphName, parseIconRef };
|
|
1
|
+
export { normalizeSolarGlyphName, parseIconRef } from '../chunk-POX7TXBH.js';
|
|
40
2
|
//# sourceMappingURL=icon.js.map
|
|
41
3
|
//# sourceMappingURL=icon.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"icon.js"}
|
|
@@ -1,331 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
// src/res-card-template/format.ts
|
|
5
|
-
function formatBytes(bytes) {
|
|
6
|
-
if (bytes === void 0) return "";
|
|
7
|
-
if (!Number.isFinite(bytes) || bytes <= 0) return "0 B";
|
|
8
|
-
return prettyBytes(bytes, { binary: true }).replaceAll("iB", "B");
|
|
9
|
-
}
|
|
10
|
-
function formatClockDuration(ms) {
|
|
11
|
-
if (!Number.isFinite(ms) || ms < 0) return "";
|
|
12
|
-
const totalSeconds = Math.floor(ms / 1e3);
|
|
13
|
-
const hours = Math.floor(totalSeconds / 3600);
|
|
14
|
-
const minutes = Math.floor(totalSeconds % 3600 / 60);
|
|
15
|
-
const seconds = totalSeconds % 60;
|
|
16
|
-
if (hours > 0) {
|
|
17
|
-
return `${hours}:${String(minutes).padStart(2, "0")}:${String(seconds).padStart(2, "0")}`;
|
|
18
|
-
}
|
|
19
|
-
return `${minutes}:${String(seconds).padStart(2, "0")}`;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
// src/res-card-template/icon.ts
|
|
23
|
-
var LEGACY_ICON_ALIASES = {
|
|
24
|
-
Files: "file",
|
|
25
|
-
Film: "video-frame",
|
|
26
|
-
Image: "gallery",
|
|
27
|
-
Info: "info-circle",
|
|
28
|
-
Music: "music-notes",
|
|
29
|
-
Search: "magnifier",
|
|
30
|
-
Sparkle: "star",
|
|
31
|
-
Video: "video-frame"
|
|
32
|
-
};
|
|
33
|
-
function normalizeSolarGlyphName(raw) {
|
|
34
|
-
const trimmed = raw.trim();
|
|
35
|
-
if (trimmed.length === 0) return void 0;
|
|
36
|
-
const aliased = LEGACY_ICON_ALIASES[trimmed];
|
|
37
|
-
if (aliased !== void 0) return aliased;
|
|
38
|
-
if (/^[a-z][a-z0-9-]*$/.test(trimmed)) return trimmed;
|
|
39
|
-
if (/^[A-Za-z][A-Za-z0-9]*$/.test(trimmed)) {
|
|
40
|
-
return trimmed.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
|
|
41
|
-
}
|
|
42
|
-
return void 0;
|
|
43
|
-
}
|
|
44
|
-
function parseIconRef(raw, pluginId, buildAssetUrl) {
|
|
45
|
-
const trimmed = raw.trim();
|
|
46
|
-
if (trimmed.length === 0) return void 0;
|
|
47
|
-
if (trimmed.startsWith("http://") || trimmed.startsWith("https://") || trimmed.startsWith("data:")) {
|
|
48
|
-
return void 0;
|
|
49
|
-
}
|
|
50
|
-
if (trimmed.includes(".") || trimmed.includes("/") || trimmed.includes("\\")) {
|
|
51
|
-
const rel = trimmed.replace(/^\.[\\/]/, "");
|
|
52
|
-
if (rel.length === 0 || rel.split("/").includes("..")) return void 0;
|
|
53
|
-
return { kind: "asset", url: buildAssetUrl(pluginId, rel) };
|
|
54
|
-
}
|
|
55
|
-
const name = normalizeSolarGlyphName(trimmed);
|
|
56
|
-
if (name === void 0) return void 0;
|
|
57
|
-
return { kind: "icon", name };
|
|
58
|
-
}
|
|
59
|
-
function resolvePath(segments, scope) {
|
|
60
|
-
const [namespace, ...rest] = segments;
|
|
61
|
-
const root = namespace === "file" ? scope.file : namespace === "searchMeta" ? scope.searchMeta : namespace === "data" ? scope.data : namespace === "coverMeta" ? scope.coverMeta : scope.source;
|
|
62
|
-
if (root === void 0 || root === null) return void 0;
|
|
63
|
-
let current = root;
|
|
64
|
-
for (const key of rest) {
|
|
65
|
-
if (typeof current !== "object" || current === null) return void 0;
|
|
66
|
-
current = current[key];
|
|
67
|
-
}
|
|
68
|
-
return current;
|
|
69
|
-
}
|
|
70
|
-
function resolveLocaleString(value, locale) {
|
|
71
|
-
if (typeof value === "string") return value;
|
|
72
|
-
const exact = value[locale];
|
|
73
|
-
if (exact !== void 0) return exact;
|
|
74
|
-
const base = locale.split("-")[0] ?? locale;
|
|
75
|
-
const partial = value[base];
|
|
76
|
-
if (partial !== void 0) return partial;
|
|
77
|
-
const first = Object.values(value)[0];
|
|
78
|
-
return first ?? "";
|
|
79
|
-
}
|
|
80
|
-
function evaluateExpression(expr, scope, ctx) {
|
|
81
|
-
if (expr.kind === "path") {
|
|
82
|
-
const value = resolvePath(expr.segments, scope);
|
|
83
|
-
if (value === void 0 || value === null) return "";
|
|
84
|
-
return String(value);
|
|
85
|
-
}
|
|
86
|
-
return evaluateCall(expr.name, expr.args, scope, ctx);
|
|
87
|
-
}
|
|
88
|
-
function evaluateCall(name, args, scope, ctx) {
|
|
89
|
-
switch (name) {
|
|
90
|
-
case "bytes":
|
|
91
|
-
return callPipe(
|
|
92
|
-
args,
|
|
93
|
-
scope,
|
|
94
|
-
ctx,
|
|
95
|
-
(value) => typeof value === "number" ? formatBytes(value) : ""
|
|
96
|
-
);
|
|
97
|
-
case "duration":
|
|
98
|
-
return callPipe(
|
|
99
|
-
args,
|
|
100
|
-
scope,
|
|
101
|
-
ctx,
|
|
102
|
-
(value) => typeof value === "number" ? formatClockDuration(value) : ""
|
|
103
|
-
);
|
|
104
|
-
case "number":
|
|
105
|
-
return callPipe(
|
|
106
|
-
args,
|
|
107
|
-
scope,
|
|
108
|
-
ctx,
|
|
109
|
-
(value) => typeof value === "number" && Number.isFinite(value) ? value.toLocaleString() : ""
|
|
110
|
-
);
|
|
111
|
-
case "inc":
|
|
112
|
-
return callPipe(
|
|
113
|
-
args,
|
|
114
|
-
scope,
|
|
115
|
-
ctx,
|
|
116
|
-
(value) => typeof value === "number" && Number.isFinite(value) ? String(value + 1) : ""
|
|
117
|
-
);
|
|
118
|
-
case "eq":
|
|
119
|
-
return compareCall(args, scope, ctx, (a, b) => a === b);
|
|
120
|
-
case "ne":
|
|
121
|
-
return compareCall(args, scope, ctx, (a, b) => a !== b);
|
|
122
|
-
case "gt":
|
|
123
|
-
return compareCall(args, scope, ctx, (a, b) => {
|
|
124
|
-
if (typeof a !== "number" || typeof b !== "number") return false;
|
|
125
|
-
return a > b;
|
|
126
|
-
});
|
|
127
|
-
case "lt":
|
|
128
|
-
return compareCall(args, scope, ctx, (a, b) => {
|
|
129
|
-
if (typeof a !== "number" || typeof b !== "number") return false;
|
|
130
|
-
return a < b;
|
|
131
|
-
});
|
|
132
|
-
case "gte":
|
|
133
|
-
return compareCall(args, scope, ctx, (a, b) => {
|
|
134
|
-
if (typeof a !== "number" || typeof b !== "number") return false;
|
|
135
|
-
return a >= b;
|
|
136
|
-
});
|
|
137
|
-
case "lte":
|
|
138
|
-
return compareCall(args, scope, ctx, (a, b) => {
|
|
139
|
-
if (typeof a !== "number" || typeof b !== "number") return false;
|
|
140
|
-
return a <= b;
|
|
141
|
-
});
|
|
142
|
-
case "if":
|
|
143
|
-
return callIf(args, scope, ctx);
|
|
144
|
-
case "t":
|
|
145
|
-
return callT(args, ctx);
|
|
146
|
-
case "icon":
|
|
147
|
-
return callIcon(args, ctx);
|
|
148
|
-
case "asset":
|
|
149
|
-
return callAsset(args, ctx);
|
|
150
|
-
case "kind":
|
|
151
|
-
return callKind(args, scope, ctx);
|
|
152
|
-
case "searchKindIcons":
|
|
153
|
-
return callSearchKindIcons(scope, ctx);
|
|
154
|
-
case "join":
|
|
155
|
-
return callJoin(args, scope, ctx);
|
|
156
|
-
default:
|
|
157
|
-
return "";
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
function callPipe(args, scope, ctx, pipeFn) {
|
|
161
|
-
const value = evaluateArgAsPrimitive(args[0], scope, ctx);
|
|
162
|
-
return pipeFn(value);
|
|
163
|
-
}
|
|
164
|
-
function callT(args, ctx) {
|
|
165
|
-
const key = evaluateArgAsString(args[0]);
|
|
166
|
-
if (key.length === 0) return "";
|
|
167
|
-
const map = ctx.manifest.i18n;
|
|
168
|
-
if (map === void 0) return "";
|
|
169
|
-
const value = map[key];
|
|
170
|
-
if (value === void 0) return "";
|
|
171
|
-
return resolveLocaleString(value, ctx.locale);
|
|
172
|
-
}
|
|
173
|
-
function callIcon(args, ctx) {
|
|
174
|
-
const name = evaluateArgAsString(args[0]);
|
|
175
|
-
if (name.length === 0) return null;
|
|
176
|
-
return ctx.renderIcon({ kind: "icon", name }, ctx.iconClassName);
|
|
177
|
-
}
|
|
178
|
-
function callAsset(args, ctx) {
|
|
179
|
-
const path = evaluateArgAsString(args[0]);
|
|
180
|
-
if (path.length === 0) return null;
|
|
181
|
-
const ref = parseIconRef(path, ctx.pluginId, ctx.buildAssetUrl);
|
|
182
|
-
if (ref === void 0) return null;
|
|
183
|
-
return ctx.renderIcon(ref, ctx.iconClassName);
|
|
184
|
-
}
|
|
185
|
-
function callKind(args, scope, ctx) {
|
|
186
|
-
const key = evaluateArgAsString(args[0]);
|
|
187
|
-
if (key.length === 0) return null;
|
|
188
|
-
const kinds = ctx.manifest.ui?.search?.kinds;
|
|
189
|
-
if (kinds === void 0) return null;
|
|
190
|
-
const match = kinds.find((k) => k.key === key);
|
|
191
|
-
if (match === void 0 || match.icon === void 0) return null;
|
|
192
|
-
const rendered = renderCardTemplate(match.icon, scope, ctx);
|
|
193
|
-
if (rendered === null || rendered === void 0 || rendered === "")
|
|
194
|
-
return null;
|
|
195
|
-
return rendered;
|
|
196
|
-
}
|
|
197
|
-
function callSearchKindIcons(scope, ctx) {
|
|
198
|
-
if (scope.searchMeta === void 0 || scope.searchMeta === null || typeof scope.searchMeta !== "object")
|
|
199
|
-
return [];
|
|
200
|
-
const facets = scope.searchMeta.facets;
|
|
201
|
-
if (facets === void 0 || typeof facets !== "object" || facets === null)
|
|
202
|
-
return [];
|
|
203
|
-
const kinds = ctx.manifest.ui?.search?.kinds;
|
|
204
|
-
if (kinds === void 0) return [];
|
|
205
|
-
const results = [];
|
|
206
|
-
for (const kind of kinds) {
|
|
207
|
-
if (kind.icon === void 0) continue;
|
|
208
|
-
const active = facets[kind.key];
|
|
209
|
-
if (active !== true) continue;
|
|
210
|
-
const rendered = renderCardTemplate(kind.icon, scope, ctx);
|
|
211
|
-
if (rendered === null || rendered === void 0 || rendered === "") continue;
|
|
212
|
-
results.push(rendered);
|
|
213
|
-
}
|
|
214
|
-
return results;
|
|
215
|
-
}
|
|
216
|
-
function callJoin(args, scope, ctx) {
|
|
217
|
-
if (args.length === 0) return "";
|
|
218
|
-
const separator = evaluateArgAsString(args[0]);
|
|
219
|
-
const items = [];
|
|
220
|
-
for (let i = 1; i < args.length; i++) {
|
|
221
|
-
const val = evaluateArg(args[i], scope, ctx);
|
|
222
|
-
if (Array.isArray(val)) {
|
|
223
|
-
for (const item of val) {
|
|
224
|
-
if (item !== null && item !== void 0 && item !== "") {
|
|
225
|
-
items.push(item);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
continue;
|
|
229
|
-
}
|
|
230
|
-
if (val !== null && val !== void 0 && val !== "") {
|
|
231
|
-
items.push(val);
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
if (items.length === 0) return "";
|
|
235
|
-
if (items.every((item) => typeof item === "string")) {
|
|
236
|
-
return items.join(separator);
|
|
237
|
-
}
|
|
238
|
-
if (separator.length === 0) return items;
|
|
239
|
-
const interleaved = [];
|
|
240
|
-
for (let i = 0; i < items.length; i++) {
|
|
241
|
-
if (i > 0) interleaved.push(separator);
|
|
242
|
-
interleaved.push(items[i]);
|
|
243
|
-
}
|
|
244
|
-
return interleaved;
|
|
245
|
-
}
|
|
246
|
-
function evaluateArgAsPrimitive(arg, scope, ctx) {
|
|
247
|
-
if (arg === void 0) return void 0;
|
|
248
|
-
if (arg.kind === "string") return arg.value;
|
|
249
|
-
if (arg.expr.kind === "path") {
|
|
250
|
-
const segments = arg.expr.segments;
|
|
251
|
-
if (segments.length === 1) {
|
|
252
|
-
const seg = segments[0];
|
|
253
|
-
const num = Number(seg);
|
|
254
|
-
if (!Number.isNaN(num)) return num;
|
|
255
|
-
}
|
|
256
|
-
return resolvePath(segments, scope);
|
|
257
|
-
}
|
|
258
|
-
if (arg.expr.kind === "call") {
|
|
259
|
-
const result = evaluateCall(arg.expr.name, arg.expr.args, scope, ctx);
|
|
260
|
-
if (typeof result === "string" || typeof result === "number") return result;
|
|
261
|
-
if (Array.isArray(result)) return result;
|
|
262
|
-
return void 0;
|
|
263
|
-
}
|
|
264
|
-
return void 0;
|
|
265
|
-
}
|
|
266
|
-
function evaluateArg(arg, scope, ctx) {
|
|
267
|
-
if (arg === void 0) return void 0;
|
|
268
|
-
if (arg.kind === "string") return arg.value;
|
|
269
|
-
return evaluateExpression(arg.expr, scope, ctx);
|
|
270
|
-
}
|
|
271
|
-
function compareCall(args, scope, ctx, cmp) {
|
|
272
|
-
const a = evaluateArgAsPrimitive(args[0], scope, ctx);
|
|
273
|
-
const b = evaluateArgAsPrimitive(args[1], scope, ctx);
|
|
274
|
-
return cmp(a, b) ? "true" : "";
|
|
275
|
-
}
|
|
276
|
-
function callIf(args, scope, ctx) {
|
|
277
|
-
const cond = evaluateArgAsPrimitive(args[0], scope, ctx);
|
|
278
|
-
const truthy = cond !== void 0 && cond !== null && cond !== "" && cond !== false && cond !== 0;
|
|
279
|
-
if (truthy) {
|
|
280
|
-
const raw = evaluateArgAsPrimitive(args[1], scope, ctx);
|
|
281
|
-
if (raw !== void 0) return raw;
|
|
282
|
-
return evaluateArg(args[1], scope, ctx);
|
|
283
|
-
}
|
|
284
|
-
if (args.length > 2) {
|
|
285
|
-
const raw = evaluateArgAsPrimitive(args[2], scope, ctx);
|
|
286
|
-
if (raw !== void 0) return raw;
|
|
287
|
-
return evaluateArg(args[2], scope, ctx);
|
|
288
|
-
}
|
|
289
|
-
return "";
|
|
290
|
-
}
|
|
291
|
-
function evaluateArgAsString(arg) {
|
|
292
|
-
if (arg === void 0) return "";
|
|
293
|
-
if (arg.kind === "string") return arg.value;
|
|
294
|
-
return "";
|
|
295
|
-
}
|
|
296
|
-
function renderCardTemplate(template, scope, ctx) {
|
|
297
|
-
if (template.length === 0) return "";
|
|
298
|
-
const fragments = parseTemplateFragments(template);
|
|
299
|
-
if (fragments.length === 0) return "";
|
|
300
|
-
const results = [];
|
|
301
|
-
for (const frag of fragments) {
|
|
302
|
-
if (frag.kind === "text") {
|
|
303
|
-
results.push(frag.value);
|
|
304
|
-
continue;
|
|
305
|
-
}
|
|
306
|
-
const expr = parseTemplateExpression(frag.source);
|
|
307
|
-
if (expr === void 0) {
|
|
308
|
-
continue;
|
|
309
|
-
}
|
|
310
|
-
const value = evaluateExpression(expr, scope, ctx);
|
|
311
|
-
if (value !== null && value !== void 0 && value !== "") {
|
|
312
|
-
results.push(value);
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
if (results.length === 0) return null;
|
|
316
|
-
if (results.length === 1) return results[0];
|
|
317
|
-
const allStrings = results.every((r) => typeof r === "string");
|
|
318
|
-
if (allStrings) return results.join("");
|
|
319
|
-
return results;
|
|
320
|
-
}
|
|
321
|
-
function renderSlotBadges(slotValues, scope, ctx) {
|
|
322
|
-
return slotValues.map((template) => renderCardTemplate(template, scope, ctx)).filter((n) => {
|
|
323
|
-
if (n === null || n === void 0 || n === "") return false;
|
|
324
|
-
if (Array.isArray(n) && n.length === 0) return false;
|
|
325
|
-
return true;
|
|
326
|
-
});
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
export { formatBytes, formatClockDuration, normalizeSolarGlyphName, parseIconRef, renderCardTemplate, renderSlotBadges, resolveLocaleString };
|
|
1
|
+
export { renderCardTemplate, renderSlotBadges, resolveLocaleString } from '../chunk-4D36OO5W.js';
|
|
2
|
+
export { normalizeSolarGlyphName, parseIconRef } from '../chunk-POX7TXBH.js';
|
|
3
|
+
export { formatBytes, formatClockDuration } from '../chunk-UEVND7AS.js';
|
|
330
4
|
//# sourceMappingURL=index.js.map
|
|
331
5
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/res-card-template/format.ts","../../src/res-card-template/icon.ts","../../src/res-card-template/template.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import prettyBytes from \"pretty-bytes\"\n\n/**\n * Format a non-negative byte count as a short human-readable string\n * via {@link prettyBytes} with binary conversion (base 1024) and JEDEC\n * labels (`4.5 KB`, `1.2 MB`, `930 GB`) — IEC `KiB`/`MiB`/`GiB` mapped\n * to `KB`/`MB`/`GB`. Matches how Windows and most disk tools report\n * sizes, without switching to decimal (base 1000) units.\n *\n * Returns the empty string for `undefined` so callers can splat the value\n * into a template without conditional checks. Negative or non-finite\n * inputs are clamped to `0 B`.\n */\nexport function formatBytes(bytes: number | undefined): string {\n\tif (bytes === undefined) return \"\"\n\tif (!Number.isFinite(bytes) || bytes <= 0) return \"0 B\"\n\treturn prettyBytes(bytes, { binary: true }).replaceAll(\"iB\", \"B\")\n}\n\n/**\n * Format a duration in milliseconds as a media clock — `m:ss`, or\n * `h:mm:ss` past the hour. Used by the plugin card templates\n * (`{{duration(...)}}`) and the card's inline audio player, so both\n * read the same way.\n */\nexport function formatClockDuration(ms: number): string {\n\tif (!Number.isFinite(ms) || ms < 0) return \"\"\n\tconst totalSeconds = Math.floor(ms / 1000)\n\tconst hours = Math.floor(totalSeconds / 3600)\n\tconst minutes = Math.floor((totalSeconds % 3600) / 60)\n\tconst seconds = totalSeconds % 60\n\tif (hours > 0) {\n\t\treturn `${hours}:${String(minutes).padStart(2, \"0\")}:${String(seconds).padStart(2, \"0\")}`\n\t}\n\treturn `${minutes}:${String(seconds).padStart(2, \"0\")}`\n}\n","import type { ReactNode } from \"react\"\n\n/**\n * A resolved template-icon reference: a Solar glyph name, or an\n * asset image URL derived from a manifest-relative path.\n */\nexport type IconRef =\n\t| { readonly kind: \"icon\"; readonly name: string }\n\t| { readonly kind: \"asset\"; readonly url: string }\n\n/**\n * Legacy whitelist name → Solar kebab glyph. Derived names are handled by\n * the PascalCase conversion; only these diverge.\n */\nconst LEGACY_ICON_ALIASES: Readonly<Record<string, string>> = {\n\tFiles: \"file\",\n\tFilm: \"video-frame\",\n\tImage: \"gallery\",\n\tInfo: \"info-circle\",\n\tMusic: \"music-notes\",\n\tSearch: \"magnifier\",\n\tSparkle: \"star\",\n\tVideo: \"video-frame\",\n}\n\n/**\n * Normalize a raw icon name to Solar kebab-case, or `undefined` when the\n * string cannot name a glyph at all (schemes, separators, punctuation).\n * This is syntax only — membership in the Solar glyph index is left to\n * the renderer that consumes the name.\n */\nexport function normalizeSolarGlyphName(raw: string): string | undefined {\n\tconst trimmed = raw.trim()\n\tif (trimmed.length === 0) return undefined\n\tconst aliased = LEGACY_ICON_ALIASES[trimmed]\n\tif (aliased !== undefined) return aliased\n\tif (/^[a-z][a-z0-9-]*$/.test(trimmed)) return trimmed\n\tif (/^[A-Za-z][A-Za-z0-9]*$/.test(trimmed)) {\n\t\treturn trimmed.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase()\n\t}\n\treturn undefined\n}\n\n/**\n * Parse a manifest-level icon string into a render-ready ref.\n *\n * `<SolarGlyph>` — Solar glyph name (manifest/template icons are\n * Solar-only; PascalCase and the legacy whitelist\n * names normalize to the kebab glyph)\n * `<relative/path>` — resolved through `buildAssetUrl(pluginId, path)`\n * (leading `./` stripped)\n *\n * Empty inputs, schemes (`http(s)`, `data:`), `..`-shaped paths and any\n * string that cannot name a glyph return `undefined`. The renderer treats\n * that as \"nothing\" — icon resolution never throws.\n */\nexport function parseIconRef(\n\traw: string,\n\tpluginId: string,\n\tbuildAssetUrl: (pluginId: string, path: string) => string,\n): IconRef | undefined {\n\tconst trimmed = raw.trim()\n\tif (trimmed.length === 0) return undefined\n\tif (\n\t\ttrimmed.startsWith(\"http://\") ||\n\t\ttrimmed.startsWith(\"https://\") ||\n\t\ttrimmed.startsWith(\"data:\")\n\t) {\n\t\treturn undefined\n\t}\n\tif (\n\t\ttrimmed.includes(\".\") ||\n\t\ttrimmed.includes(\"/\") ||\n\t\ttrimmed.includes(\"\\\\\")\n\t) {\n\t\tconst rel = trimmed.replace(/^\\.[\\\\/]/, \"\")\n\t\tif (rel.length === 0 || rel.split(\"/\").includes(\"..\")) return undefined\n\t\treturn { kind: \"asset\", url: buildAssetUrl(pluginId, rel) }\n\t}\n\tconst name = normalizeSolarGlyphName(trimmed)\n\tif (name === undefined) return undefined\n\treturn { kind: \"icon\", name }\n}\n\n/** How a parsed {@link IconRef} is drawn inside a rendered badge/template. */\nexport type RenderIcon = (ref: IconRef, className?: string) => ReactNode\n","import {\n\ttype TemplateArg as Arg,\n\ttype TemplateExpr as Expr,\n\tparseTemplateExpression,\n\tparseTemplateFragments,\n} from \"@hoardodile/sdk-types/template\"\nimport type { ReactNode } from \"react\"\nimport { formatBytes, formatClockDuration } from \"./format.ts\"\nimport { parseIconRef, type RenderIcon } from \"./icon.ts\"\n\n// The template grammar (fragment splitting, tokenising, parsing) lives\n// in @hoardodile/sdk-types/template — shared verbatim with the CLI's\n// build-time template lint so the two can never drift. This module only\n// evaluates the AST. The parser is lenient: unparseable expressions\n// render as the empty string.\n\n// ── Evaluation context ───────────────────────────────────────────────────────\n\n/** How a referenced icon is drawn; the caller owns the SVG/image resolution. */\nexport type TemplateContext = {\n\treadonly locale: string\n\treadonly pluginId: string\n\treadonly manifest: {\n\t\treadonly i18n?: Record<string, string | Record<string, string>>\n\t\treadonly ui?: {\n\t\t\treadonly search?: {\n\t\t\t\treadonly kinds?: readonly {\n\t\t\t\t\treadonly key: string\n\t\t\t\t\treadonly icon?: string\n\t\t\t\t}[]\n\t\t\t}\n\t\t}\n\t}\n\treadonly iconClassName?: string\n\t/** Renders a parsed {@link IconRef} (glyph or asset) inside the template. */\n\treadonly renderIcon: RenderIcon\n\t/** Resolves a manifest-relative `asset('path')` reference to a URL. */\n\treadonly buildAssetUrl: (pluginId: string, path: string) => string\n}\n\ntype EvalValue = string | ReactNode\n\ntype TemplateScope = {\n\treadonly file: unknown\n\treadonly source: unknown\n\treadonly searchMeta?: unknown\n\treadonly data?: unknown\n\treadonly coverMeta?: unknown\n}\n\n// ── Scope resolution (paths) ─────────────────────────────────────────────────\n\nfunction resolvePath(\n\tsegments: readonly string[],\n\tscope: TemplateScope,\n): unknown {\n\tconst [namespace, ...rest] = segments\n\tconst root =\n\t\tnamespace === \"file\"\n\t\t\t? scope.file\n\t\t\t: namespace === \"searchMeta\"\n\t\t\t\t? scope.searchMeta\n\t\t\t\t: namespace === \"data\"\n\t\t\t\t\t? scope.data\n\t\t\t\t\t: namespace === \"coverMeta\"\n\t\t\t\t\t\t? scope.coverMeta\n\t\t\t\t\t\t: scope.source\n\tif (root === undefined || root === null) return undefined\n\tlet current: unknown = root\n\tfor (const key of rest) {\n\t\tif (typeof current !== \"object\" || current === null) return undefined\n\t\tcurrent = (current as Record<string, unknown>)[key]\n\t}\n\treturn current\n}\n\n// ── Locale resolution ────────────────────────────────────────────────────────\n\n/**\n * Resolve a locale-aware template value: if the value is a plain string,\n * return it directly; if it is a `Record<locale, string>`, pick the best\n * match for the current language. Falls back to the first available key\n * when nothing matches.\n */\nexport function resolveLocaleString(\n\tvalue: string | Record<string, string>,\n\tlocale: string,\n): string {\n\tif (typeof value === \"string\") return value\n\tconst exact = value[locale]\n\tif (exact !== undefined) return exact\n\tconst base = locale.split(\"-\")[0] ?? locale\n\tconst partial = value[base]\n\tif (partial !== undefined) return partial\n\tconst first = Object.values(value)[0]\n\treturn first ?? \"\"\n}\n\n// ── Expression evaluation ────────────────────────────────────────────────────\n\nfunction evaluateExpression(\n\texpr: Expr,\n\tscope: TemplateScope,\n\tctx: TemplateContext,\n): EvalValue {\n\tif (expr.kind === \"path\") {\n\t\tconst value = resolvePath(expr.segments, scope)\n\t\tif (value === undefined || value === null) return \"\"\n\t\treturn String(value)\n\t}\n\treturn evaluateCall(expr.name, expr.args, scope, ctx)\n}\n\nfunction evaluateCall(\n\tname: string,\n\targs: readonly Arg[],\n\tscope: TemplateScope,\n\tctx: TemplateContext,\n): EvalValue {\n\tswitch (name) {\n\t\tcase \"bytes\":\n\t\t\treturn callPipe(args, scope, ctx, (value) =>\n\t\t\t\ttypeof value === \"number\" ? formatBytes(value) : \"\",\n\t\t\t)\n\t\tcase \"duration\":\n\t\t\treturn callPipe(args, scope, ctx, (value) =>\n\t\t\t\ttypeof value === \"number\" ? formatClockDuration(value) : \"\",\n\t\t\t)\n\t\tcase \"number\":\n\t\t\treturn callPipe(args, scope, ctx, (value) =>\n\t\t\t\ttypeof value === \"number\" && Number.isFinite(value)\n\t\t\t\t\t? value.toLocaleString()\n\t\t\t\t\t: \"\",\n\t\t\t)\n\t\tcase \"inc\":\n\t\t\treturn callPipe(args, scope, ctx, (value) =>\n\t\t\t\ttypeof value === \"number\" && Number.isFinite(value)\n\t\t\t\t\t? String(value + 1)\n\t\t\t\t\t: \"\",\n\t\t\t)\n\t\tcase \"eq\":\n\t\t\treturn compareCall(args, scope, ctx, (a, b) => a === b)\n\t\tcase \"ne\":\n\t\t\treturn compareCall(args, scope, ctx, (a, b) => a !== b)\n\t\tcase \"gt\":\n\t\t\treturn compareCall(args, scope, ctx, (a, b) => {\n\t\t\t\tif (typeof a !== \"number\" || typeof b !== \"number\") return false\n\t\t\t\treturn a > b\n\t\t\t})\n\t\tcase \"lt\":\n\t\t\treturn compareCall(args, scope, ctx, (a, b) => {\n\t\t\t\tif (typeof a !== \"number\" || typeof b !== \"number\") return false\n\t\t\t\treturn a < b\n\t\t\t})\n\t\tcase \"gte\":\n\t\t\treturn compareCall(args, scope, ctx, (a, b) => {\n\t\t\t\tif (typeof a !== \"number\" || typeof b !== \"number\") return false\n\t\t\t\treturn a >= b\n\t\t\t})\n\t\tcase \"lte\":\n\t\t\treturn compareCall(args, scope, ctx, (a, b) => {\n\t\t\t\tif (typeof a !== \"number\" || typeof b !== \"number\") return false\n\t\t\t\treturn a <= b\n\t\t\t})\n\t\tcase \"if\":\n\t\t\treturn callIf(args, scope, ctx)\n\t\tcase \"t\":\n\t\t\treturn callT(args, ctx)\n\t\tcase \"icon\":\n\t\t\treturn callIcon(args, ctx)\n\t\tcase \"asset\":\n\t\t\treturn callAsset(args, ctx)\n\t\tcase \"kind\":\n\t\t\treturn callKind(args, scope, ctx)\n\t\tcase \"searchKindIcons\":\n\t\t\treturn callSearchKindIcons(scope, ctx)\n\t\tcase \"join\":\n\t\t\treturn callJoin(args, scope, ctx)\n\t\tdefault:\n\t\t\treturn \"\"\n\t}\n}\n\nfunction callPipe(\n\targs: readonly Arg[],\n\tscope: TemplateScope,\n\tctx: TemplateContext,\n\tpipeFn: (value: unknown) => string,\n): string {\n\tconst value = evaluateArgAsPrimitive(args[0], scope, ctx)\n\treturn pipeFn(value)\n}\n\nfunction callT(args: readonly Arg[], ctx: TemplateContext): string {\n\tconst key = evaluateArgAsString(args[0])\n\tif (key.length === 0) return \"\"\n\tconst map = ctx.manifest.i18n\n\tif (map === undefined) return \"\"\n\tconst value = map[key]\n\tif (value === undefined) return \"\"\n\treturn resolveLocaleString(value, ctx.locale)\n}\n\nfunction callIcon(args: readonly Arg[], ctx: TemplateContext): ReactNode {\n\tconst name = evaluateArgAsString(args[0])\n\tif (name.length === 0) return null\n\treturn ctx.renderIcon({ kind: \"icon\", name }, ctx.iconClassName)\n}\n\nfunction callAsset(args: readonly Arg[], ctx: TemplateContext): ReactNode {\n\tconst path = evaluateArgAsString(args[0])\n\tif (path.length === 0) return null\n\tconst ref = parseIconRef(path, ctx.pluginId, ctx.buildAssetUrl)\n\tif (ref === undefined) return null\n\treturn ctx.renderIcon(ref, ctx.iconClassName)\n}\n\nfunction callKind(\n\targs: readonly Arg[],\n\tscope: TemplateScope,\n\tctx: TemplateContext,\n): ReactNode {\n\tconst key = evaluateArgAsString(args[0])\n\tif (key.length === 0) return null\n\tconst kinds = ctx.manifest.ui?.search?.kinds\n\tif (kinds === undefined) return null\n\tconst match = kinds.find((k) => k.key === key)\n\tif (match === undefined || match.icon === undefined) return null\n\tconst rendered = renderCardTemplate(match.icon, scope, ctx)\n\tif (rendered === null || rendered === undefined || rendered === \"\")\n\t\treturn null\n\treturn rendered\n}\n\nfunction callSearchKindIcons(\n\tscope: TemplateScope,\n\tctx: TemplateContext,\n): readonly ReactNode[] {\n\tif (\n\t\tscope.searchMeta === undefined ||\n\t\tscope.searchMeta === null ||\n\t\ttypeof scope.searchMeta !== \"object\"\n\t)\n\t\treturn []\n\tconst facets = (scope.searchMeta as Record<string, unknown>).facets\n\tif (facets === undefined || typeof facets !== \"object\" || facets === null)\n\t\treturn []\n\tconst kinds = ctx.manifest.ui?.search?.kinds\n\tif (kinds === undefined) return []\n\tconst results: ReactNode[] = []\n\tfor (const kind of kinds) {\n\t\tif (kind.icon === undefined) continue\n\t\tconst active = (facets as Record<string, boolean>)[kind.key]\n\t\tif (active !== true) continue\n\t\tconst rendered = renderCardTemplate(kind.icon, scope, ctx)\n\t\tif (rendered === null || rendered === undefined || rendered === \"\") continue\n\t\tresults.push(rendered)\n\t}\n\treturn results\n}\n\nfunction callJoin(\n\targs: readonly Arg[],\n\tscope: TemplateScope,\n\tctx: TemplateContext,\n): string | readonly ReactNode[] {\n\tif (args.length === 0) return \"\"\n\n\tconst separator = evaluateArgAsString(args[0])\n\tconst items: ReactNode[] = []\n\tfor (let i = 1; i < args.length; i++) {\n\t\tconst val = evaluateArg(args[i], scope, ctx)\n\t\tif (Array.isArray(val)) {\n\t\t\tfor (const item of val) {\n\t\t\t\tif (item !== null && item !== undefined && item !== \"\") {\n\t\t\t\t\titems.push(item)\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tif (val !== null && val !== undefined && val !== \"\") {\n\t\t\titems.push(val)\n\t\t}\n\t}\n\tif (items.length === 0) return \"\"\n\tif (items.every((item) => typeof item === \"string\")) {\n\t\treturn (items as readonly string[]).join(separator)\n\t}\n\tif (separator.length === 0) return items\n\tconst interleaved: ReactNode[] = []\n\tfor (let i = 0; i < items.length; i++) {\n\t\tif (i > 0) interleaved.push(separator)\n\t\tinterleaved.push(items[i])\n\t}\n\treturn interleaved\n}\n\n// ── Argument helpers ─────────────────────────────────────────────────────────\n\nfunction evaluateArgAsPrimitive(\n\targ: Arg | undefined,\n\tscope: TemplateScope,\n\tctx: TemplateContext,\n): unknown {\n\tif (arg === undefined) return undefined\n\tif (arg.kind === \"string\") return arg.value\n\tif (arg.expr.kind === \"path\") {\n\t\tconst segments = arg.expr.segments\n\t\tif (segments.length === 1) {\n\t\t\tconst seg = segments[0]!\n\t\t\tconst num = Number(seg)\n\t\t\tif (!Number.isNaN(num)) return num\n\t\t}\n\t\treturn resolvePath(segments, scope)\n\t}\n\tif (arg.expr.kind === \"call\") {\n\t\tconst result = evaluateCall(arg.expr.name, arg.expr.args, scope, ctx)\n\t\tif (typeof result === \"string\" || typeof result === \"number\") return result\n\t\tif (Array.isArray(result)) return result\n\t\treturn undefined\n\t}\n\treturn undefined\n}\n\nfunction evaluateArg(\n\targ: Arg | undefined,\n\tscope: TemplateScope,\n\tctx: TemplateContext,\n): EvalValue {\n\tif (arg === undefined) return undefined\n\tif (arg.kind === \"string\") return arg.value\n\treturn evaluateExpression(arg.expr, scope, ctx)\n}\n\nfunction compareCall(\n\targs: readonly Arg[],\n\tscope: TemplateScope,\n\tctx: TemplateContext,\n\tcmp: (a: unknown, b: unknown) => boolean,\n): string {\n\tconst a = evaluateArgAsPrimitive(args[0], scope, ctx)\n\tconst b = evaluateArgAsPrimitive(args[1], scope, ctx)\n\treturn cmp(a, b) ? \"true\" : \"\"\n}\n\nfunction callIf(\n\targs: readonly Arg[],\n\tscope: TemplateScope,\n\tctx: TemplateContext,\n): EvalValue {\n\tconst cond = evaluateArgAsPrimitive(args[0], scope, ctx)\n\tconst truthy =\n\t\tcond !== undefined &&\n\t\tcond !== null &&\n\t\tcond !== \"\" &&\n\t\tcond !== false &&\n\t\tcond !== 0\n\tif (truthy) {\n\t\tconst raw = evaluateArgAsPrimitive(args[1], scope, ctx)\n\t\tif (raw !== undefined) return raw as EvalValue\n\t\treturn evaluateArg(args[1], scope, ctx)\n\t}\n\tif (args.length > 2) {\n\t\tconst raw = evaluateArgAsPrimitive(args[2], scope, ctx)\n\t\tif (raw !== undefined) return raw as EvalValue\n\t\treturn evaluateArg(args[2], scope, ctx)\n\t}\n\treturn \"\"\n}\n\nfunction evaluateArgAsString(arg: Arg | undefined): string {\n\tif (arg === undefined) return \"\"\n\tif (arg.kind === \"string\") return arg.value\n\treturn \"\"\n}\n\n// ── Public API ───────────────────────────────────────────────────────────────\n\n/**\n * Render one res-card template string. Returns a ReactNode so that\n * icon-producing functions (`icon`, `asset`, `kind`) can inject\n * components inline with text.\n */\nexport function renderCardTemplate(\n\ttemplate: string,\n\tscope: TemplateScope,\n\tctx: TemplateContext,\n): ReactNode {\n\tif (template.length === 0) return \"\"\n\tconst fragments = parseTemplateFragments(template)\n\tif (fragments.length === 0) return \"\"\n\n\tconst results: ReactNode[] = []\n\tfor (const frag of fragments) {\n\t\tif (frag.kind === \"text\") {\n\t\t\tresults.push(frag.value)\n\t\t\tcontinue\n\t\t}\n\t\tconst expr = parseTemplateExpression(frag.source)\n\t\tif (expr === undefined) {\n\t\t\tcontinue\n\t\t}\n\t\tconst value = evaluateExpression(expr, scope, ctx)\n\t\tif (value !== null && value !== undefined && value !== \"\") {\n\t\t\tresults.push(value)\n\t\t}\n\t}\n\n\tif (results.length === 0) return null\n\tif (results.length === 1) return results[0]\n\tconst allStrings = results.every((r) => typeof r === \"string\")\n\tif (allStrings) return results.join(\"\")\n\treturn results\n}\n\n/** Render every badge in a {@link CoverKindUi} slot array. */\nexport function renderSlotBadges(\n\tslotValues: readonly string[],\n\tscope: TemplateScope,\n\tctx: TemplateContext,\n): readonly ReactNode[] {\n\treturn slotValues\n\t\t.map((template) => renderCardTemplate(template, scope, ctx))\n\t\t.filter((n): n is Exclude<typeof n, null | undefined | \"\"> => {\n\t\t\tif (n === null || n === undefined || n === \"\") return false\n\t\t\tif (Array.isArray(n) && n.length === 0) return false\n\t\t\treturn true\n\t\t})\n}\n"]}
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|