@driftime/sanity-plugin-icon 0.3.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +253 -61
- package/dist/adapters-Bx_MyEX_.js +633 -0
- package/dist/adapters-Bx_MyEX_.js.map +1 -0
- package/dist/drawing-ByrcBbWB.js +50 -0
- package/dist/drawing-ByrcBbWB.js.map +1 -0
- package/dist/index.d.ts +84 -32
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +545 -323
- package/dist/index.js.map +1 -1
- package/dist/names.d.ts +8 -0
- package/dist/names.d.ts.map +1 -0
- package/dist/names.js +0 -0
- package/dist/next-loader.d.ts +64 -0
- package/dist/next-loader.d.ts.map +1 -0
- package/dist/next-loader.js +103 -0
- package/dist/next-loader.js.map +1 -0
- package/dist/next.d.ts +43 -0
- package/dist/next.d.ts.map +1 -0
- package/dist/next.js +52 -0
- package/dist/next.js.map +1 -0
- package/dist/nodes-DAzj56Xn.js +139 -0
- package/dist/nodes-DAzj56Xn.js.map +1 -0
- package/dist/read-worker.d.ts +1 -0
- package/dist/read-worker.js +23 -0
- package/dist/read-worker.js.map +1 -0
- package/dist/registry-B0Dxiwhh.js +68 -0
- package/dist/registry-B0Dxiwhh.js.map +1 -0
- package/dist/registry-BEEpqK3z.js +13 -0
- package/dist/registry-BEEpqK3z.js.map +1 -0
- package/dist/render.d.ts +4 -5
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +5 -5
- package/dist/render.js.map +1 -1
- package/dist/sets-D5_YGFll.js +258 -0
- package/dist/sets-D5_YGFll.js.map +1 -0
- package/dist/sets-kepuObH8.js +90 -0
- package/dist/sets-kepuObH8.js.map +1 -0
- package/dist/sets.d.ts +50 -0
- package/dist/sets.d.ts.map +1 -0
- package/dist/sets.js +14 -0
- package/dist/sets.js.map +1 -0
- package/dist/types-qlHEYDoN.d.ts +20 -0
- package/dist/types-qlHEYDoN.d.ts.map +1 -0
- package/dist/utils-COPacfAq.js +48 -0
- package/dist/utils-COPacfAq.js.map +1 -0
- package/dist/vite-ifICG8y9.d.ts +98 -0
- package/dist/vite-ifICG8y9.d.ts.map +1 -0
- package/dist/vite.d.ts +2 -0
- package/dist/vite.js +88 -0
- package/dist/vite.js.map +1 -0
- package/package.json +42 -5
- package/dist/drawing-BThiR2bN.js +0 -129
- package/dist/drawing-BThiR2bN.js.map +0 -1
- package/dist/types-_D2jGm25.d.ts +0 -16
- package/dist/types-_D2jGm25.d.ts.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["isDefined","useState","ArrayOfObjectsFormNode","ArrayOfObjectsMember","BaseFormNode","DocumentFieldActionNode","ObjectFieldProps","ObjectFormNode","ObjectMember","ChangeIndicator","FieldActionsProvider","FieldActionsResolver","FormField","getPublishedId","useFormValue","hasMembers","node","collectNodeValidation","validation","collectMemberValidation","members","flatMap","member","kind","field","fieldSet","item","FieldProps","Field","t0","$","_c","actions","schemaType","title","description","presence","level","inputId","path","changed","children","inputProps","t1","Symbol","for","headerActions","setHeaderActions","t2","documentId","fieldValidation","focused","t3","publishedId","undefined","t4","name","t5","readOnly","deprecated","t6","t7","ComponentProps","ComponentType","createElement","defaultIconProps","width","height","strokeWidth","createSanityIcon","icon","props","Icon","SanityIcon","gridCellSize","gridRowGap","gridRowHeight","gridColumns","gridVisibleRows","gridHeight","gridOverscan","gridLayoutStyle","justifyItems","rowGap","const","Button","ComponentProps","Drawing","gridCellSize","LibraryIcon","CellProps","Omit","icon","selected","focusable","position","total","onSelect","onHover","element","HTMLElement","Cell","t0","$","_c","props","t1","t2","Symbol","for","width","height","t3","node","t4","t5","event","currentTarget","t6","label","Box","Button","Flex","Grid","Text","ComponentProps","RefObject","CellProps","Cell","gridColumns","gridHeight","gridLayoutStyle","gridRowHeight","getVisibleRows","LibraryIcon","LibraryProps","Omit","icons","rows","ReturnType","selected","activeIndex","activeCell","HTMLButtonElement","search","onSelect","icon","onHover","onClearSearch","Library","t0","$","_c","props","totalRows","firstRow","lastRow","t1","visible","slice","t2","Symbol","for","height","overflowY","t3","length","paddingTop","paddingBottom","map","offset","index","name","undefined","Button","Flex","Grid","Stack","Text","ComponentProps","CellProps","Cell","gridColumns","gridLayoutStyle","LibraryIcon","RecentProps","Omit","icons","selected","onSelect","icon","onHover","onForget","Recent","t0","$","_c","props","t1","Symbol","for","t2","t3","t4","length","index","name","map","t5","isDefined","Stack","Text","Popover","ComponentProps","LibraryIcon","HoveredIcon","icon","element","HTMLElement","tooltipMargins","TooltipProps","Omit","hovered","Tooltip","t0","$","_c","props","t1","t2","t3","Symbol","for","pointerEvents","t4","maxWidth","label","tags","t5","convertCase","isDefined","IconNode","parseIconNode","LibraryIcon","name","label","tags","node","terms","normalizeTerms","value","toLowerCase","replaceAll","trim","selectIcons","library","names","byName","Map","map","icon","Set","flatMap","get","readLibrary","drawings","Promise","all","nodes","Record","default","Object","keys","iconTags","join","libraryRequest","undefined","requestLibrary","useEffect","useState","LibraryIcon","requestLibrary","useIconLibrary","$","_c","library","setLibrary","t0","t1","Symbol","for","active","load","loaded","isDefined","useEffect","useRef","useState","HoveredIcon","LibraryIcon","useIconTooltip","scrolling","$","_c","hovered","setHovered","hoverStart","undefined","t0","t1","Symbol","for","current","clearTimeout","t2","clearHover","t3","handleHover","icon","element","setTimeout","t4","storageKey","limit","readRecent","stored","JSON","parse","globalThis","localStorage","getItem","Array","isArray","filter","entry","writeRecent","name","updated","slice","setItem","stringify","clearRecent","removeItem","useState","clearRecent","readRecent","writeRecent","useRecentIcons","$","_c","recent","setRecent","t0","Symbol","for","remember","name","t1","forget","t2","gridColumns","gridHeight","gridOverscan","gridRowHeight","gridVisibleRows","getNextIndex","key","current","last","undefined","getVisibleRows","scrollRow","count","totalRows","Math","ceil","firstRow","max","lastRow","min","getCenteredScrollTop","index","floor","getRevealedScrollTop","scrollTop","top","isDefined","SearchIcon","Box","Dialog","Flex","Spinner","Stack","Text","TextInput","ChangeEvent","ComponentProps","KeyboardEvent","useEffect","useRef","useState","Library","Recent","Tooltip","gridHeight","gridRowHeight","useIconLibrary","useIconTooltip","useRecentIcons","getCenteredScrollTop","getNextIndex","getRevealedScrollTop","getVisibleRows","LibraryIcon","normalizeTerms","selectIcons","SanityIconName","PickerProps","Omit","allowed","selected","onSelect","icon","Picker","t0","$","_c","props","library","icons","recent","remember","forget","search","setSearch","scrollRow","setScrollRow","movedIndex","setMovedIndex","scrolling","setScrolling","scroller","activeCell","focusIndex","undefined","scrollFrame","scrollStop","query","searching","results","filter","terms","includes","byName","Map","map","_temp","recentIcons","flatMap","entry","icon_1","get","hovered","handleHover","clearHover","rows","length","selectedIndex","findIndex","icon_2","name","activeIndex","Math","max","element","current","scrollTop","t1","t2","Symbol","for","cancelAnimationFrame","clearTimeout","t3","t4","focus","t5","handleSelect","icon_3","t6","clearSearch","handleSearch","event","currentTarget","value","selectActive","icon_4","handleSearchKeyDown","event_0","key","preventDefault","handleScroll","setTimeout","requestAnimationFrame","element_0","floor","handleGridKeyDown","event_1","last","next","index","min","element_1","t7","t8","height","t9","toLocaleString","t10","t11","icon_0","ComponentProps","SquareDashedIconProps","SquareDashedIcon","props","$","_c","t0","t1","t10","t11","t2","t3","t4","t5","t6","t7","t8","t9","Symbol","for","t12","SanityIconConfig","SanityIconOptions","resolveIconOptions","options","config","icons","iconTypeName","SanityIcon","_type","name","node","defaultIconProps","convertCase","isDefined","CloseIcon","Button","Flex","useState","ObjectInputProps","ObjectSchemaType","set","setIfMissing","unset","Drawing","Picker","SquareDashedIcon","LibraryIcon","resolveIconNode","serializeIconNode","resolveIconOptions","SanityIconConfig","SanityIconOptions","SanityIcon","iconTypeName","IconSchemaType","options","InputProps","Partial","createInput","config","Input","t0","$","_c","id","schemaType","value","onChange","readOnly","name","node","open","setOpen","t1","icons","selectedNode","selectedLabel","undefined","t2","handleSelect","icon","_type","T0","t3","T1","t4","t5","t6","t7","t8","t9","t10","t11","t12","t13","defaultIconProps","isDefined","createElement","Drawing","resolveIconNode","SanityIcon","createIconPreview","value","node","undefined","IconPreview","Field","createSanityIcon","convertCase","isDefined","defineField","defineType","createInput","SquareDashedIcon","createIconPreview","SanityIconConfig","SanityIcon","iconTypeName","createIconType","config","name","type","icon","description","components","field","input","validation","rule","custom","value","Partial","node","preview","select","prepare","selection","title","media","_type","fields","iconNodes","ObjectOptions","TypeAliasDefinition","definePlugin","createIconType","iconTypeName","IntrinsicDefinitions","icon","SanityIconDefinition","SanityIconName","SanityIconOptions","icons","Omit","options","SanityIconConfig","plugin","config","name","schema","types","iconPlugin"],"sources":["../../@repo/components/field.tsx","../../@repo/lib/icons.ts","../src/config/grid.ts","../src/components/picker/cell.tsx","../src/components/picker/library.tsx","../src/components/picker/recent.tsx","../src/components/picker/tooltip.tsx","../src/lib/library.ts","../src/hooks/use-icon-library.ts","../src/hooks/use-icon-tooltip.ts","../src/lib/recent.ts","../src/hooks/use-recent-icons.ts","../src/lib/grid.ts","../src/components/picker/picker.tsx","../src/icons/square-dashed.tsx","../src/lib/options.ts","../src/types.ts","../src/components/input.tsx","../src/lib/preview.ts","../src/schemas/types/icon.ts","../src/plugin.ts"],"sourcesContent":["import { isDefined } from \"@repo/lib/utils\";\nimport { useState } from \"react\";\nimport type {\n ArrayOfObjectsFormNode,\n ArrayOfObjectsMember,\n BaseFormNode,\n DocumentFieldActionNode,\n ObjectFieldProps,\n ObjectFormNode,\n ObjectMember,\n} from \"sanity\";\nimport {\n ChangeIndicator,\n FieldActionsProvider,\n FieldActionsResolver,\n FormField,\n getPublishedId,\n useFormValue,\n} from \"sanity\";\n\n/**\n * Checks whether a form node holds members of its own, as an object or an array of objects does.\n *\n * @param node - The form node to check.\n * @returns True if the node holds members.\n */\nfunction hasMembers(node: BaseFormNode): node is ObjectFormNode | ArrayOfObjectsFormNode {\n return \"members\" in node;\n}\n\n/**\n * Gathers the validation reported on a form node and on anything inside it.\n *\n * @param node - The form node to gather validation from.\n * @returns Every validation reported on the node or within it.\n */\nfunction collectNodeValidation(node: BaseFormNode): BaseFormNode[\"validation\"] {\n return [...node.validation, ...(hasMembers(node) ? collectMemberValidation(node.members) : [])];\n}\n\n/**\n * Gathers the validation reported anywhere inside a field's members. The form hands a field only what\n * is reported at its own path, which suits a frame drawing its members inline but leaves one that\n * hides them showing nothing they report.\n *\n * @param members - The members to gather validation from.\n * @returns Every validation reported on a member or within one.\n */\nfunction collectMemberValidation(members: (ObjectMember | ArrayOfObjectsMember)[]): BaseFormNode[\"validation\"] {\n return members.flatMap((member) => {\n if (member.kind === \"field\") return collectNodeValidation(member.field);\n if (member.kind === \"fieldSet\") return collectMemberValidation(member.fieldSet.members);\n if (member.kind === \"item\") return collectNodeValidation(member.item);\n\n return [];\n });\n}\n\nexport type FieldProps = ObjectFieldProps;\n\nexport function Field({\n actions,\n schemaType,\n title,\n description,\n presence,\n validation,\n level,\n inputId,\n path,\n changed,\n children,\n inputProps,\n}: FieldProps) {\n const [headerActions, setHeaderActions] = useState<DocumentFieldActionNode[]>([]);\n\n const documentId = useFormValue([\"_id\"]);\n const publishedId = typeof documentId === \"string\" ? getPublishedId(documentId) : undefined;\n const focused = inputProps.focused === true;\n const fieldValidation = [...validation, ...collectMemberValidation(inputProps.members)];\n\n return (\n <>\n {isDefined(publishedId) && isDefined(actions) && (\n <FieldActionsResolver\n actions={actions}\n documentId={publishedId}\n documentType={schemaType.name}\n onActions={setHeaderActions}\n path={path}\n schemaType={schemaType}\n />\n )}\n <FieldActionsProvider actions={headerActions} focused={focused} path={path}>\n <FormField\n __unstable_headerActions={headerActions}\n __unstable_presence={presence}\n description={description}\n inputId={inputId}\n level={level}\n title={title}\n validation={fieldValidation}\n deprecated={schemaType.deprecated}\n path={path}\n readOnly={inputProps.readOnly}\n >\n <ChangeIndicator path={path} hasFocus={focused} isChanged={changed}>\n {children}\n </ChangeIndicator>\n </FormField>\n </FieldActionsProvider>\n </>\n );\n}\n","import type { ComponentProps, ComponentType } from \"react\";\nimport { createElement } from \"react\";\n\n/**\n * Properties the plugin's own icons are drawn with. Icons taken from `@sanity/icons` are left alone,\n * since they already carry the sizing and stroke the rest of the Studio uses.\n */\nexport const defaultIconProps: ComponentProps<\"svg\"> = { width: \"1em\", height: \"1em\", strokeWidth: 1.5 };\n\n/**\n * Creates a Sanity Studio icon component from an SVG icon.\n *\n * @param icon - The icon component to wrap.\n * @param props - Additional props merged over the default properties a Studio icon is drawn with.\n * @returns A Studio icon component.\n */\nexport function createSanityIcon(icon: ComponentType<ComponentProps<\"svg\">>, props?: ComponentProps<\"svg\">) {\n const Icon = icon;\n\n function SanityIcon() {\n return createElement(Icon, { ...defaultIconProps, ...props });\n }\n\n return SanityIcon;\n}\n","/** Size of one cell, in pixels. Fixed so the grid never reflows. */\nexport const gridCellSize = 40;\n\n/** Space between rows, in pixels. */\nconst gridRowGap = 4;\n\n/** Distance from one row to the next, which placing a window over the grid depends on knowing. */\nexport const gridRowHeight = gridCellSize + gridRowGap;\n\n/** How many icons a row holds. */\nexport const gridColumns = 8;\n\n/** How many rows the scrolling area shows at once. */\nexport const gridVisibleRows = 8;\n\n/** Height of the scrolling area, sized to the rows it shows. The final row carries no trailing gap. */\nexport const gridHeight = gridVisibleRows * gridRowHeight - gridRowGap;\n\n/**\n * Rows built either side of the visible ones. Everything built is also painted, so a row scrolled\n * into view is already there rather than arriving with it.\n */\nexport const gridOverscan = gridVisibleRows;\n\n/** Layout both grids share, so a recent icon sits on the same columns as the library below it. */\nexport const gridLayoutStyle = { justifyItems: \"center\", rowGap: gridRowGap } as const;\n","import { Button } from \"@sanity/ui\";\nimport type { ComponentProps } from \"react\";\n\nimport { Drawing } from \"@/components/drawing\";\nimport { gridCellSize } from \"@/config/grid\";\nimport type { LibraryIcon } from \"@/lib/library\";\n\nexport type CellProps = Omit<\n ComponentProps<typeof Button>,\n \"icon\" | \"selected\" | \"onSelect\" | \"onClick\" | \"onMouseEnter\"\n> & {\n icon: LibraryIcon;\n selected: boolean;\n focusable: boolean;\n position: number;\n total: number;\n onSelect: (icon: LibraryIcon) => void;\n onHover: (icon: LibraryIcon, element: HTMLElement) => void;\n};\n\nexport function Cell({ icon, selected, focusable, position, total, onSelect, onHover, ...props }: CellProps) {\n return (\n <Button\n type=\"button\"\n role=\"option\"\n aria-selected={selected}\n aria-posinset={position}\n aria-setsize={total}\n tabIndex={focusable ? 0 : -1}\n mode=\"bleed\"\n selected={selected}\n padding={0}\n style={{ width: gridCellSize, height: gridCellSize }}\n icon={<Drawing node={icon.node} width=\"1.25em\" height=\"1.25em\" strokeWidth={1.5} />}\n aria-label={icon.label}\n onClick={() => {\n onSelect(icon);\n }}\n onMouseEnter={(event) => {\n onHover(icon, event.currentTarget);\n }}\n {...props}\n />\n );\n}\n","import { Box, Button, Flex, Grid, Text } from \"@sanity/ui\";\nimport type { ComponentProps, RefObject } from \"react\";\n\nimport type { CellProps } from \"@/components/picker/cell\";\nimport { Cell } from \"@/components/picker/cell\";\nimport { gridColumns, gridHeight, gridLayoutStyle, gridRowHeight } from \"@/config/grid\";\nimport type { getVisibleRows } from \"@/lib/grid\";\nimport type { LibraryIcon } from \"@/lib/library\";\n\nexport type LibraryProps = Omit<ComponentProps<typeof Box>, \"children\" | \"onSelect\"> & {\n icons: LibraryIcon[];\n rows: ReturnType<typeof getVisibleRows>;\n selected: string | undefined;\n activeIndex: number;\n activeCell: RefObject<HTMLButtonElement | null>;\n search: string;\n onSelect: (icon: LibraryIcon) => void;\n onHover: CellProps[\"onHover\"];\n onClearSearch: () => void;\n};\n\nexport function Library({\n icons,\n rows,\n selected,\n activeIndex,\n activeCell,\n search,\n onSelect,\n onHover,\n onClearSearch,\n ...props\n}: LibraryProps) {\n const { totalRows, firstRow, lastRow } = rows;\n const visible = icons.slice(firstRow * gridColumns, lastRow * gridColumns);\n\n return (\n <Box role=\"listbox\" aria-label=\"Icon library\" style={{ height: gridHeight, overflowY: \"auto\" }} {...props}>\n {icons.length === 0 && (\n <Flex align=\"center\" justify=\"center\" direction=\"column\" gap={3} style={{ height: gridHeight }}>\n <Text size={1} muted>{`Nothing matches \"${search}\".`}</Text>\n <Button type=\"button\" mode=\"ghost\" text=\"Clear search\" onClick={onClearSearch} />\n </Flex>\n )}\n {icons.length > 0 && (\n <Grid\n gridTemplateColumns={gridColumns}\n style={{\n ...gridLayoutStyle,\n paddingTop: firstRow * gridRowHeight,\n paddingBottom: (totalRows - lastRow) * gridRowHeight,\n }}\n >\n {visible.map((icon, offset) => {\n const index = firstRow * gridColumns + offset;\n\n return (\n <Cell\n key={icon.name}\n ref={index === activeIndex ? activeCell : undefined}\n icon={icon}\n selected={icon.name === selected}\n focusable={index === activeIndex}\n position={index + 1}\n total={icons.length}\n onSelect={onSelect}\n onHover={onHover}\n />\n );\n })}\n </Grid>\n )}\n </Box>\n );\n}\n","import { Button, Flex, Grid, Stack, Text } from \"@sanity/ui\";\nimport type { ComponentProps } from \"react\";\n\nimport type { CellProps } from \"@/components/picker/cell\";\nimport { Cell } from \"@/components/picker/cell\";\nimport { gridColumns, gridLayoutStyle } from \"@/config/grid\";\nimport type { LibraryIcon } from \"@/lib/library\";\n\nexport type RecentProps = Omit<ComponentProps<typeof Stack>, \"children\" | \"onSelect\"> & {\n icons: LibraryIcon[];\n selected: string | undefined;\n onSelect: (icon: LibraryIcon) => void;\n onHover: CellProps[\"onHover\"];\n onForget: () => void;\n};\n\nexport function Recent({ icons, selected, onSelect, onHover, onForget, ...props }: RecentProps) {\n return (\n <Stack gap={3} {...props}>\n <Flex align=\"center\" justify=\"space-between\" gap={2}>\n <Text size={1} weight=\"medium\" muted>\n Recent icons\n </Text>\n <Button\n type=\"button\"\n mode=\"bleed\"\n fontSize={1}\n padding={2}\n text=\"Clear\"\n onClick={onForget}\n aria-label=\"Forget the recently used icons\"\n />\n </Flex>\n <Grid role=\"listbox\" aria-label=\"Recent icons\" gridTemplateColumns={gridColumns} style={gridLayoutStyle}>\n {icons.map((icon, index) => (\n <Cell\n key={icon.name}\n icon={icon}\n selected={icon.name === selected}\n focusable\n position={index + 1}\n total={icons.length}\n onSelect={onSelect}\n onHover={onHover}\n />\n ))}\n </Grid>\n </Stack>\n );\n}\n","import { isDefined } from \"@repo/lib/utils\";\nimport { Stack, Text } from \"@sanity/ui\";\nimport { Popover } from \"@sanity/ui/popover\";\nimport type { ComponentProps } from \"react\";\n\nimport type { LibraryIcon } from \"@/lib/library\";\n\n/** The icon a tooltip is describing, paired with the cell it points at. */\nexport interface HoveredIcon {\n /** Icon the cell holds. */\n icon: LibraryIcon;\n /** Cell the tooltip anchors itself to. */\n element: HTMLElement;\n}\n\n/**\n * Gap between a tooltip and the cell it points at, given as margins because that is the only lever\n * `@sanity/ui` offers for it. Top only, since a tooltip always sits above.\n */\nconst tooltipMargins: [number, number, number, number] = [-4, 0, 0, 0];\n\nexport type TooltipProps = Omit<ComponentProps<typeof Popover>, \"open\" | \"referenceElement\" | \"content\"> & {\n hovered: HoveredIcon | undefined;\n};\n\nexport function Tooltip({ hovered, ...props }: TooltipProps) {\n return (\n <Popover\n open={isDefined(hovered)}\n referenceElement={hovered?.element ?? null}\n placement=\"top\"\n portal\n padding={3}\n __unstable_margins={tooltipMargins}\n style={{ pointerEvents: \"none\" }}\n content={\n isDefined(hovered) && (\n <Stack gap={3} style={{ maxWidth: \"16rem\" }}>\n <Text size={1} weight=\"medium\">\n {hovered.icon.label}\n </Text>\n {isDefined(hovered.icon.tags) && (\n <Text size={1} muted>\n {hovered.icon.tags}\n </Text>\n )}\n </Stack>\n )\n }\n {...props}\n />\n );\n}\n","import { convertCase, isDefined } from \"@repo/lib/utils\";\n\nimport type { IconNode } from \"@/lib/nodes\";\nimport { parseIconNode } from \"@/lib/nodes\";\n\n/** Single icon the library offers, carrying the terms a search matches it on. */\nexport interface LibraryIcon {\n /** Name the icon goes by in the library it came from. */\n name: string;\n /** Readable form of the name, shown beside the icon. */\n label: string;\n /** What the icon depicts, as a readable list. */\n tags: string;\n /** Shapes the icon is drawn from. */\n node: IconNode;\n /** Name and tags flattened into the form a search compares against. */\n terms: string;\n}\n\n/**\n * Flattens text into the form a search compares against, so a hyphenated icon name and a multi-word\n * tag are matched the same way.\n *\n * @param value - The text to flatten.\n * @returns The text in comparable form.\n */\nexport function normalizeTerms(value: string) {\n return value\n .toLowerCase()\n .replaceAll(/[\\s-]+/gu, \" \")\n .trim();\n}\n\n/**\n * Narrows the library to a chosen set of icons, in the order they were named. A name the library does\n * not recognise is skipped, so a set outlives the release it was written against.\n *\n * @param library - Every icon the library offers.\n * @param names - Names of the icons to offer, or nothing to offer them all.\n * @returns The icons on offer.\n */\nexport function selectIcons(library: LibraryIcon[], names: string[] | undefined) {\n if (!isDefined(names)) return library;\n\n const byName = new Map(library.map((icon) => [icon.name, icon]));\n\n return [...new Set(names)].flatMap((name) => {\n const icon = byName.get(name);\n\n return isDefined(icon) ? [icon] : [];\n });\n}\n\n/**\n * Reads the icon library, pairing each drawing with the terms it can be found by. Both files come\n * from the same release as the icons themselves, so the drawings and their terms never disagree.\n *\n * @returns Every icon the library offers.\n */\nasync function readLibrary() {\n const [drawings, tags] = await Promise.all([\n import(\"lucide-static/icon-nodes.json\"),\n import(\"lucide-static/tags.json\"),\n ]);\n\n const nodes: Record<string, unknown> = drawings.default;\n const terms: Record<string, string[]> = tags.default;\n\n return Object.keys(nodes).flatMap((name) => {\n const node = parseIconNode(nodes[name]);\n if (!isDefined(node)) return [];\n\n const iconTags = terms[name] ?? [];\n\n return [\n {\n name,\n label: convertCase(name, \"sentence\"),\n tags: iconTags.join(\", \"),\n node,\n terms: normalizeTerms([name, ...iconTags].join(\" \")),\n },\n ];\n });\n}\n\n/**\n * The library once asked for, held so every field in a Studio session shares the one request. It is a\n * megabyte of data that never changes within a release, so asking twice only ever costs.\n */\nlet libraryRequest: Promise<LibraryIcon[]> | undefined = undefined;\n\n/**\n * Reads the icon library, waiting on whatever request is already under way.\n *\n * @returns Every icon the library offers.\n */\nexport async function requestLibrary() {\n libraryRequest ??= readLibrary();\n const library = await libraryRequest;\n\n return library;\n}\n","import { useEffect, useState } from \"react\";\n\nimport type { LibraryIcon } from \"@/lib/library\";\nimport { requestLibrary } from \"@/lib/library\";\n\n/**\n * Reads the icon library. Callers mount only while a picker is open, so a Studio that never opens one\n * never pays what it costs to read.\n *\n * @returns Every icon the library offers, or undefined while it is still being read.\n */\nexport function useIconLibrary() {\n const [library, setLibrary] = useState<LibraryIcon[]>();\n\n useEffect(() => {\n let active = true;\n\n async function load() {\n const loaded = await requestLibrary();\n if (active) setLibrary(loaded);\n }\n\n void load();\n\n return () => {\n active = false;\n };\n }, []);\n\n return library;\n}\n","import { isDefined } from \"@repo/lib/utils\";\nimport { useEffect, useRef, useState } from \"react\";\n\nimport type { HoveredIcon } from \"@/components/picker/tooltip\";\nimport type { LibraryIcon } from \"@/lib/library\";\n\n/**\n * Tracks which icon the cursor rests on, holding a tooltip back until it has settled somewhere.\n *\n * @param scrolling - Whether the grid is currently moving under the cursor.\n * @returns The icon being hovered, alongside ways to follow the cursor and to dismiss it.\n */\nexport function useIconTooltip(scrolling: boolean) {\n const [hovered, setHovered] = useState<HoveredIcon>();\n const hoverStart = useRef<ReturnType<typeof setTimeout>>(undefined);\n\n useEffect(\n () => () => {\n if (isDefined(hoverStart.current)) clearTimeout(hoverStart.current);\n },\n [],\n );\n\n function clearHover() {\n if (isDefined(hoverStart.current)) clearTimeout(hoverStart.current);\n if (isDefined(hovered)) setHovered(undefined);\n }\n\n function handleHover(icon: LibraryIcon, element: HTMLElement) {\n if (scrolling || element === hovered?.element) return;\n\n if (isDefined(hoverStart.current)) clearTimeout(hoverStart.current);\n\n if (isDefined(hovered)) {\n setHovered({ icon, element });\n\n return;\n }\n\n hoverStart.current = setTimeout(() => {\n setHovered({ icon, element });\n }, 200);\n }\n\n return { hovered, handleHover, clearHover };\n}\n","/** Where the icons an author reached for last are kept, in the browser rather than the dataset. */\nconst storageKey = \"driftime:sanity-plugin-icon:recent\";\n\n/** How many icons are remembered. */\nconst limit = 8;\n\n/**\n * Reads the icons an author reached for last.\n *\n * @returns Names of the remembered icons, most recent first.\n */\nexport function readRecent() {\n try {\n const stored: unknown = JSON.parse(globalThis.localStorage.getItem(storageKey) ?? \"[]\");\n if (!Array.isArray(stored)) return [];\n\n return stored.filter((entry: unknown) => typeof entry === \"string\");\n } catch {\n return [];\n }\n}\n\n/**\n * Remembers an icon as the one reached for most recently.\n *\n * @param name - Name of the chosen icon.\n * @returns Names of the remembered icons, most recent first.\n */\nexport function writeRecent(name: string) {\n const updated = [name, ...readRecent().filter((entry) => entry !== name)].slice(0, limit);\n\n try {\n globalThis.localStorage.setItem(storageKey, JSON.stringify(updated));\n } catch {\n // A Studio with storage blocked simply does not remember, which is not worth reporting.\n }\n\n return updated;\n}\n\n/** Forgets every icon reached for so far. */\nexport function clearRecent() {\n try {\n globalThis.localStorage.removeItem(storageKey);\n } catch {\n // A Studio with storage blocked has nothing to forget.\n }\n}\n","import { useState } from \"react\";\n\nimport { clearRecent, readRecent, writeRecent } from \"@/lib/recent\";\n\n/**\n * Tracks the icons an author reached for last, keeping what is remembered and what is drawn in step.\n * The stored list is read as the picker mounts, so another tab choosing an icon is picked up too.\n *\n * @returns The remembered names, most recent first, alongside ways to add to and empty them.\n */\nexport function useRecentIcons() {\n const [recent, setRecent] = useState<string[]>(readRecent);\n\n function remember(name: string) {\n setRecent(writeRecent(name));\n }\n\n function forget() {\n clearRecent();\n setRecent([]);\n }\n\n return { recent, remember, forget };\n}\n","import { gridColumns, gridHeight, gridOverscan, gridRowHeight, gridVisibleRows } from \"@/config/grid\";\n\n/**\n * Works out which icon a key press moves to, so the library can be walked without a mouse.\n *\n * @param key - The key pressed.\n * @param current - Index of the icon the grid is on.\n * @param last - Index of the final icon in the results.\n * @returns The index moved to, or undefined when the key does not move.\n */\nexport function getNextIndex(key: string, current: number, last: number) {\n if (key === \"ArrowRight\") return current + 1;\n if (key === \"ArrowLeft\") return current - 1;\n if (key === \"ArrowDown\") return current + gridColumns;\n if (key === \"ArrowUp\") return current - gridColumns;\n if (key === \"Home\") return 0;\n if (key === \"End\") return last;\n\n return undefined;\n}\n\n/**\n * Works out which rows the grid builds for a given scroll position, so only the icons near the\n * viewport are mounted. The rows above and below stand in as padding, keeping the scrollbar honest.\n *\n * @param scrollRow - Row the scrolling area has reached.\n * @param count - Number of icons in the results.\n * @returns The row the grid starts building at, the row it stops at, and the row count in total.\n */\nexport function getVisibleRows(scrollRow: number, count: number) {\n const totalRows = Math.ceil(count / gridColumns);\n const firstRow = Math.max(0, scrollRow - gridOverscan);\n const lastRow = Math.min(totalRows, firstRow + gridVisibleRows + gridOverscan * 2);\n\n return { totalRows, firstRow, lastRow };\n}\n\n/**\n * Works out where the scrolling area sits to show a given icon in the middle, for opening on the\n * icon already chosen.\n *\n * @param index - Index of the icon to show.\n * @returns The position to scroll to.\n */\nexport function getCenteredScrollTop(index: number) {\n return Math.max(0, Math.floor(index / gridColumns) * gridRowHeight - gridHeight / 2);\n}\n\n/**\n * Works out where the scrolling area moves to bring a given icon into view, staying put when the\n * icon already shows. Taken from the index rather than the icon's own cell, since Home and End can\n * land outside the rows that are mounted.\n *\n * @param index - Index of the icon to reveal.\n * @param scrollTop - Position the scrolling area has reached.\n * @returns The position to scroll to.\n */\nexport function getRevealedScrollTop(index: number, scrollTop: number) {\n const top = Math.floor(index / gridColumns) * gridRowHeight;\n\n if (top < scrollTop) return top;\n if (top + gridRowHeight > scrollTop + gridHeight) return top + gridRowHeight - gridHeight;\n\n return scrollTop;\n}\n","import { isDefined } from \"@repo/lib/utils\";\nimport { SearchIcon } from \"@sanity/icons/Search\";\nimport { Box, Dialog, Flex, Spinner, Stack, Text, TextInput } from \"@sanity/ui\";\nimport type { ChangeEvent, ComponentProps, KeyboardEvent } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\n\nimport { Library } from \"@/components/picker/library\";\nimport { Recent } from \"@/components/picker/recent\";\nimport { Tooltip } from \"@/components/picker/tooltip\";\nimport { gridHeight, gridRowHeight } from \"@/config/grid\";\nimport { useIconLibrary } from \"@/hooks/use-icon-library\";\nimport { useIconTooltip } from \"@/hooks/use-icon-tooltip\";\nimport { useRecentIcons } from \"@/hooks/use-recent-icons\";\nimport { getCenteredScrollTop, getNextIndex, getRevealedScrollTop, getVisibleRows } from \"@/lib/grid\";\nimport type { LibraryIcon } from \"@/lib/library\";\nimport { normalizeTerms, selectIcons } from \"@/lib/library\";\nimport type { SanityIconName } from \"@/plugin\";\n\nexport type PickerProps = Omit<\n ComponentProps<typeof Dialog>,\n \"children\" | \"header\" | \"width\" | \"selected\" | \"onSelect\"\n> & {\n allowed: SanityIconName[] | undefined;\n selected: string | undefined;\n onSelect: (icon: LibraryIcon) => void;\n};\n\nexport function Picker({ allowed, selected, onSelect, ...props }: PickerProps) {\n const library = useIconLibrary();\n const icons = selectIcons(library ?? [], allowed);\n const { recent, remember, forget } = useRecentIcons();\n\n const [search, setSearch] = useState(\"\");\n const [scrollRow, setScrollRow] = useState(0);\n const [movedIndex, setMovedIndex] = useState<number>();\n const [scrolling, setScrolling] = useState(false);\n\n const scroller = useRef<HTMLDivElement>(null);\n const activeCell = useRef<HTMLButtonElement>(null);\n const focusIndex = useRef<number>(undefined);\n const scrollFrame = useRef<number>(undefined);\n const scrollStop = useRef<ReturnType<typeof setTimeout>>(undefined);\n\n const query = normalizeTerms(search);\n const searching = isDefined(query);\n const results = icons.filter((icon) => !searching || icon.terms.includes(query));\n\n const byName = new Map(icons.map((icon) => [icon.name, icon]));\n const recentIcons = searching\n ? []\n : recent.flatMap((entry) => {\n const icon = byName.get(entry);\n\n return isDefined(icon) ? [icon] : [];\n });\n\n const { hovered, handleHover, clearHover } = useIconTooltip(scrolling);\n\n const rows = getVisibleRows(scrollRow, results.length);\n\n const selectedIndex = searching || !isDefined(selected) ? -1 : icons.findIndex((icon) => icon.name === selected);\n const activeIndex = movedIndex ?? Math.max(0, selectedIndex);\n\n useEffect(() => {\n const element = scroller.current;\n if (!isDefined(element) || selectedIndex === -1) return;\n\n element.scrollTop = getCenteredScrollTop(selectedIndex);\n }, [scroller, selectedIndex]);\n\n useEffect(\n () => () => {\n if (isDefined(scrollFrame.current)) cancelAnimationFrame(scrollFrame.current);\n if (isDefined(scrollStop.current)) clearTimeout(scrollStop.current);\n },\n [],\n );\n\n useEffect(() => {\n if (focusIndex.current !== activeIndex) return;\n\n focusIndex.current = undefined;\n if (isDefined(activeCell.current)) activeCell.current.focus();\n }, [activeIndex]);\n\n function handleSelect(icon: LibraryIcon) {\n remember(icon.name);\n onSelect(icon);\n }\n\n function clearSearch() {\n setSearch(\"\");\n setMovedIndex(undefined);\n }\n\n function handleSearch(event: ChangeEvent<HTMLInputElement>) {\n setSearch(event.currentTarget.value);\n setMovedIndex(undefined);\n\n if (isDefined(scroller.current)) scroller.current.scrollTop = 0;\n }\n\n function selectActive() {\n const icon = results[activeIndex];\n\n if (isDefined(icon)) handleSelect(icon);\n }\n\n function handleSearchKeyDown(event: KeyboardEvent<HTMLInputElement>) {\n if (event.key === \"Enter\") {\n event.preventDefault();\n selectActive();\n\n return;\n }\n\n if (event.key !== \"ArrowDown\") return;\n\n event.preventDefault();\n\n if (isDefined(activeCell.current)) activeCell.current.focus();\n }\n\n function handleScroll() {\n clearHover();\n if (!scrolling) setScrolling(true);\n\n if (isDefined(scrollStop.current)) clearTimeout(scrollStop.current);\n scrollStop.current = setTimeout(() => {\n setScrolling(false);\n }, 150);\n\n if (isDefined(scrollFrame.current)) return;\n\n scrollFrame.current = requestAnimationFrame(() => {\n scrollFrame.current = undefined;\n\n const element = scroller.current;\n if (isDefined(element)) setScrollRow(Math.floor(element.scrollTop / gridRowHeight));\n });\n }\n\n function handleGridKeyDown(event: KeyboardEvent<HTMLDivElement>) {\n const last = results.length - 1;\n if (last < 0) return;\n\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n selectActive();\n\n return;\n }\n\n const next = getNextIndex(event.key, activeIndex, last);\n if (!isDefined(next)) return;\n\n event.preventDefault();\n\n const index = Math.min(Math.max(next, 0), last);\n focusIndex.current = index;\n setMovedIndex(index);\n\n const element = scroller.current;\n if (!isDefined(element)) return;\n\n element.scrollTop = getRevealedScrollTop(index, element.scrollTop);\n }\n\n return (\n <Dialog header=\"Select icon\" width={1} {...props}>\n <Stack gap={4} padding={4}>\n <TextInput\n icon={<SearchIcon />}\n placeholder=\"Search by name or by what the icon depicts\"\n value={search}\n onChange={handleSearch}\n onKeyDown={handleSearchKeyDown}\n disabled={!isDefined(library) || icons.length === 0}\n aria-label=\"Search the icon library\"\n />\n {!isDefined(library) && (\n <Flex align=\"center\" justify=\"center\" style={{ height: gridHeight }}>\n <Spinner muted />\n </Flex>\n )}\n {isDefined(recentIcons) && (\n <Recent\n icons={recentIcons}\n selected={selected}\n onSelect={handleSelect}\n onHover={handleHover}\n onForget={forget}\n onMouseLeave={clearHover}\n />\n )}\n {isDefined(library) && (\n <Stack gap={3}>\n <Box paddingY={2}>\n <Text size={1} weight=\"medium\" muted>\n All icons ({results.length.toLocaleString(\"en-US\")})\n </Text>\n </Box>\n {icons.length === 0 && (\n <Flex align=\"center\" justify=\"center\" style={{ height: gridHeight }}>\n <Text size={1} muted>\n No icons are available to choose from.\n </Text>\n </Flex>\n )}\n {icons.length > 0 && (\n <Library\n ref={scroller}\n icons={results}\n rows={rows}\n selected={selected}\n activeIndex={activeIndex}\n activeCell={activeCell}\n search={search}\n onSelect={handleSelect}\n onHover={handleHover}\n onClearSearch={clearSearch}\n onScroll={handleScroll}\n onMouseLeave={clearHover}\n onKeyDown={handleGridKeyDown}\n />\n )}\n </Stack>\n )}\n <Tooltip key={hovered?.icon.name} hovered={hovered} />\n </Stack>\n </Dialog>\n );\n}\n","import type { ComponentProps } from \"react\";\n\nexport type SquareDashedIconProps = ComponentProps<\"svg\">;\n\nexport function SquareDashedIcon(props: SquareDashedIconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={24}\n height={24}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M5 3a2 2 0 0 0-2 2\" />\n <path d=\"M19 3a2 2 0 0 1 2 2\" />\n <path d=\"M21 19a2 2 0 0 1-2 2\" />\n <path d=\"M5 21a2 2 0 0 1-2-2\" />\n <path d=\"M9 3h1\" />\n <path d=\"M9 21h1\" />\n <path d=\"M14 3h1\" />\n <path d=\"M14 21h1\" />\n <path d=\"M3 9v1\" />\n <path d=\"M21 9v1\" />\n <path d=\"M3 14v1\" />\n <path d=\"M21 14v1\" />\n </svg>\n );\n}\n","import type { SanityIconConfig, SanityIconOptions } from \"@/plugin\";\n\n/**\n * Settles what an icon field offers. The list says what is on and replaces whatever the plugin was\n * given, so one line tells you the whole answer.\n *\n * @param options - Options the field itself was given.\n * @param config - Configuration the plugin was given.\n * @returns The settings the field runs on.\n */\nexport function resolveIconOptions(options: SanityIconOptions | undefined, config: SanityIconConfig) {\n return {\n icons: options?.icons ?? config.icons,\n };\n}\n","/** Type name of the icon object. */\nexport const iconTypeName = \"icon\";\n\n/**\n * An icon an author chose, stored as the name it was chosen by alongside the shapes it draws.\n *\n * @public\n */\nexport interface SanityIcon {\n _type: typeof iconTypeName;\n /** Name the icon goes by in the library it was taken from. */\n name?: string;\n /** Shapes the icon is drawn from, written when the icon is chosen. */\n node?: string;\n}\n","import { defaultIconProps } from \"@repo/lib/icons\";\nimport { convertCase, isDefined } from \"@repo/lib/utils\";\nimport { CloseIcon } from \"@sanity/icons/Close\";\nimport { Button, Flex } from \"@sanity/ui\";\nimport { useState } from \"react\";\nimport type { ObjectInputProps, ObjectSchemaType } from \"sanity\";\nimport { set, setIfMissing, unset } from \"sanity\";\n\nimport { Drawing } from \"@/components/drawing\";\nimport { Picker } from \"@/components/picker/picker\";\nimport { SquareDashedIcon } from \"@/icons/square-dashed\";\nimport type { LibraryIcon } from \"@/lib/library\";\nimport { resolveIconNode, serializeIconNode } from \"@/lib/nodes\";\nimport { resolveIconOptions } from \"@/lib/options\";\nimport type { SanityIconConfig, SanityIconOptions } from \"@/plugin\";\nimport type { SanityIcon } from \"@/types\";\nimport { iconTypeName } from \"@/types\";\n\n/** Compiled shape of an icon field, carrying the options the field itself was given. */\ninterface IconSchemaType extends ObjectSchemaType {\n options?: SanityIconOptions;\n}\n\nexport type InputProps = ObjectInputProps<Partial<SanityIcon>, IconSchemaType>;\n\n/**\n * Creates the input an icon field is drawn with, holding the configuration the plugin was given so a\n * field naming its own icons replaces them rather than adding to them.\n *\n * @param config - Configuration every field falls back to.\n * @returns The input component.\n */\nexport function createInput(config: SanityIconConfig) {\n function Input({ id, schemaType, value, onChange, readOnly }: InputProps) {\n const { name, node } = value ?? {};\n\n const [open, setOpen] = useState(false);\n\n const { icons } = resolveIconOptions(schemaType.options, config);\n const selectedNode = resolveIconNode(node);\n const selectedLabel = isDefined(name) ? convertCase(name, \"sentence\") : undefined;\n\n function handleSelect(icon: LibraryIcon) {\n onChange([\n setIfMissing({ _type: iconTypeName satisfies SanityIcon[\"_type\"] }),\n set(icon.name, [\"name\" satisfies keyof SanityIcon]),\n set(serializeIconNode(icon.node), [\"node\" satisfies keyof SanityIcon]),\n ]);\n\n setOpen(false);\n }\n\n return (\n <Flex gap={2}>\n <Button\n id={id}\n type=\"button\"\n mode=\"ghost\"\n icon={\n isDefined(selectedNode) ? (\n <Drawing node={selectedNode} {...defaultIconProps} />\n ) : (\n <SquareDashedIcon {...defaultIconProps} />\n )\n }\n text={selectedLabel ?? \"Select icon\"}\n disabled={readOnly}\n onClick={() => {\n setOpen(true);\n }}\n aria-label={isDefined(selectedLabel) ? `${selectedLabel} currently selected` : \"Select icon\"}\n />\n {isDefined(value) && (\n <Button\n type=\"button\"\n mode=\"ghost\"\n tone=\"critical\"\n icon={<CloseIcon />}\n text=\"Clear\"\n disabled={readOnly}\n onClick={() => {\n onChange(unset());\n }}\n aria-label=\"Clear the currently selected icon\"\n />\n )}\n {open && (\n <Picker\n id={`${id}-library`}\n allowed={icons}\n selected={name}\n onSelect={handleSelect}\n onClose={() => {\n setOpen(false);\n }}\n onClickOutside={() => {\n setOpen(false);\n }}\n />\n )}\n </Flex>\n );\n }\n\n return Input;\n}\n","import { defaultIconProps } from \"@repo/lib/icons\";\nimport { isDefined } from \"@repo/lib/utils\";\nimport { createElement } from \"react\";\n\nimport { Drawing } from \"@/components/drawing\";\nimport { resolveIconNode } from \"@/lib/nodes\";\nimport type { SanityIcon } from \"@/types\";\n\n/**\n * Builds the media a stored icon previews with, so a document lists the drawing an author chose\n * rather than one placeholder standing in for every icon alike.\n *\n * @param value - The stored icon.\n * @returns The media component, or undefined when nothing readable was stored.\n * @public\n */\nexport function createIconPreview(value: SanityIcon | undefined) {\n const node = resolveIconNode(value?.node);\n if (!isDefined(node)) return undefined;\n\n return function IconPreview() {\n return createElement(Drawing, { node, ...defaultIconProps });\n };\n}\n","import { Field } from \"@repo/components/field\";\nimport { createSanityIcon } from \"@repo/lib/icons\";\nimport { convertCase, isDefined } from \"@repo/lib/utils\";\nimport { defineField, defineType } from \"sanity\";\n\nimport { createInput } from \"@/components/input\";\nimport { SquareDashedIcon } from \"@/icons/square-dashed\";\nimport { createIconPreview } from \"@/lib/preview\";\nimport type { SanityIconConfig } from \"@/plugin\";\nimport type { SanityIcon } from \"@/types\";\nimport { iconTypeName } from \"@/types\";\n\n/**\n * Creates the object type an icon is stored as, offering the icons it is given to every field that\n * does not name its own.\n *\n * @param config - Configuration every field falls back to.\n * @returns An object type definition for a stored icon.\n */\nexport function createIconType(config: SanityIconConfig) {\n return defineType({\n name: iconTypeName satisfies SanityIcon[\"_type\"],\n type: \"object\",\n icon: createSanityIcon(SquareDashedIcon),\n description: \"Icon chosen from the Lucide library.\",\n // Deliberately the flat frame a primitive field gets, not the collapsible fieldset Sanity wraps an object in.\n components: { field: Field, input: createInput(config) },\n validation: (rule) =>\n rule.custom((value: Partial<SanityIcon> | undefined) =>\n !isDefined(value?.name) || isDefined(value.node) ? true : \"Select the icon again so its drawing is stored.\",\n ),\n preview: {\n select: {\n name: \"name\",\n node: \"node\",\n },\n prepare(selection: { name?: string; node?: string }) {\n const { name, node } = selection;\n\n return {\n title: isDefined(name) ? convertCase(name, \"sentence\") : \"No icon\",\n media: createIconPreview({ _type: iconTypeName, name, node }),\n };\n },\n },\n fields: [\n defineField({\n name: \"name\" satisfies keyof SanityIcon,\n type: \"string\",\n description: \"Name of the chosen icon in the library it was taken from.\",\n }),\n defineField({\n name: \"node\" satisfies keyof SanityIcon,\n type: \"text\",\n description: \"Shapes the icon is drawn from, written when the icon is chosen.\",\n }),\n ],\n });\n}\n","import type iconNodes from \"lucide-static/icon-nodes.json\";\nimport type { ObjectOptions, TypeAliasDefinition } from \"sanity\";\nimport { definePlugin } from \"sanity\";\n\nimport { createIconType } from \"@/schemas/types/icon\";\nimport type { iconTypeName } from \"@/types\";\n\ndeclare module \"@sanity/types\" {\n interface IntrinsicDefinitions {\n icon: SanityIconDefinition;\n }\n}\n\n/**\n * Names of every icon the library offers, read from the Lucide release a project resolved rather than\n * from a list this plugin ships, so an icon added since the last plugin release still completes.\n *\n * @public\n */\nexport type SanityIconName = keyof typeof iconNodes;\n\n/**\n * Options an icon field takes, narrowing what its picker offers.\n *\n * @public\n */\nexport interface SanityIconOptions extends ObjectOptions {\n /** Icons an author may choose from, offered in the order they are named. Every icon when omitted. */\n icons?: SanityIconName[];\n}\n\n/**\n * Shape of a field or array member holding an icon, so its options are completed and checked the way\n * a built-in type's are.\n *\n * @public\n */\nexport interface SanityIconDefinition extends Omit<TypeAliasDefinition<typeof iconTypeName, undefined>, \"options\"> {\n options?: SanityIconOptions;\n}\n\n/**\n * Everything the plugin accepts, all of which may be left out.\n *\n * @public\n */\nexport interface SanityIconConfig {\n /** Icons an author may choose from, offered in the order they are named. Every icon when omitted. */\n icons?: SanityIconName[];\n}\n\nconst plugin = definePlugin<SanityIconConfig>((config) => ({\n name: \"@driftime/sanity-plugin-icon\",\n schema: {\n types: [createIconType(config)],\n },\n}));\n\n/**\n * Creates the icon field type for Sanity Studio, offering the Lucide library through a searchable\n * picker and storing the chosen drawing ready to render.\n *\n * @param config - Plugin configuration.\n * @returns Sanity plugin definition.\n * @public\n */\nexport function iconPlugin(config: SanityIconConfig = {}) {\n return plugin(config);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["isDefined","useState","ArrayOfObjectsFormNode","ArrayOfObjectsMember","BaseFormNode","DocumentFieldActionNode","ObjectFieldProps","ObjectFormNode","ObjectMember","ChangeIndicator","FieldActionsProvider","FieldActionsResolver","FormField","getPublishedId","useFormValue","hasMembers","node","collectNodeValidation","validation","collectMemberValidation","members","flatMap","member","kind","field","fieldSet","item","FieldProps","Field","t0","$","_c","actions","schemaType","title","description","presence","level","inputId","path","changed","children","inputProps","t1","Symbol","for","headerActions","setHeaderActions","t2","documentId","fieldValidation","focused","t3","publishedId","undefined","t4","name","t5","readOnly","deprecated","t6","t7","_c","ComponentProps","ComponentType","createElement","defaultIconProps","width","height","strokeWidth","createSanityIcon","icon","props","Icon","SanityIcon","gridCellSize","gridRowGap","gridRowHeight","gridColumns","gridVisibleRows","gridHeight","gridOverscan","gridLayoutStyle","justifyItems","rowGap","const","Button","ComponentProps","Drawing","gridCellSize","LibraryIcon","CellProps","Omit","icon","selected","focusable","position","total","onSelect","onHover","element","HTMLElement","Cell","t0","$","_c","props","t1","t2","Symbol","for","width","height","t3","drawing","t4","t5","event","currentTarget","t6","label","_c","isDefined","Box","Button","Flex","Grid","Text","ComponentProps","RefObject","CellProps","Cell","gridColumns","gridHeight","gridLayoutStyle","gridRowHeight","getVisibleRows","LibraryIcon","LibraryProps","Omit","icons","rows","ReturnType","selected","activeIndex","activeCell","HTMLButtonElement","search","onSelect","icon","onHover","onClearSearch","Library","t0","$","_c","props","totalRows","firstRow","lastRow","T0","t1","t2","t3","t4","t5","t6","visible","slice","height","overflowY","undefined","paddingTop","paddingBottom","map","offset","index","name","length","t7","_c","WarningOutlineIcon","Card","Flex","Stack","Text","ComponentProps","LibraryProblem","CodeTextProps","Omit","text","CodeText","t0","$","_c","props","t1","t2","parts","split","map","part","index","start","slice","join","length","t3","ProblemProps","problem","Problem","Symbol","for","title","description","t4","t5","_c","Button","Flex","Grid","Stack","Text","ComponentProps","CellProps","Cell","gridColumns","gridLayoutStyle","LibraryIcon","RecentProps","Omit","icons","selected","onSelect","icon","onHover","onForget","Recent","t0","$","_c","props","t1","Symbol","for","t2","t3","t4","length","index","name","map","t5","_c","iconRegistry","convertCase","isDefined","IconDrawing","getIconSetKey","parseIconSet","LibraryIcon","name","label","tags","drawing","terms","LibraryProblem","title","description","LibraryResult","icons","problem","normalizeTerms","value","toLowerCase","replaceAll","trim","splitMatches","text","query","start","match","pattern","split","map","word","String","raw","join","parts","RegExp","part","index","slice","length","selectIcons","library","names","byName","Map","icon","Set","flatMap","get","formatList","identifiers","identifier","describeMissingLibrary","packageName","family","listed","sitePackage","readLibrary","style","Promise","ready","info","libraries","Object","keys","packagePrefix","styles","installed","resolvedStyle","loader","sets","module","set","default","keywords","node","root","libraryRequests","requestLibrary","key","request","result","isDefined","Stack","Text","Popover","CSSProperties","ComponentProps","LibraryIcon","splitMatches","HoveredIcon","icon","element","HTMLElement","tooltipMargins","matchStyle","background","color","textDecorationLine","textUnderlineOffset","HighlightProps","Omit","text","query","Highlight","t0","$","_c","props","t1","map","_temp","t2","part","match","start","TooltipProps","hovered","Tooltip","t3","Symbol","for","pointerEvents","t4","maxWidth","label","tags","t5","_c","_temp","useEffect","useState","LibraryResult","requestLibrary","useIconLibrary","library","style","$","_c","result","setResult","t0","t1","active","load","loaded","_c","isDefined","useEffect","useRef","useState","HoveredIcon","LibraryIcon","useIconTooltip","scrolling","$","_c","hovered","setHovered","hoverStart","undefined","scrolledOnto","t0","t1","Symbol","for","current","clearTimeout","t2","t3","landed","element","isConnected","matches","setTimeout","t4","clearHover","t5","handleHover","icon","t6","_c","storageKey","limit","getStorageKey","scope","readRecent","stored","JSON","parse","globalThis","localStorage","getItem","Array","isArray","filter","entry","writeRecent","name","updated","slice","setItem","stringify","clearRecent","removeItem","useState","clearRecent","readRecent","writeRecent","useRecentIcons","scope","$","_c","t0","recent","setRecent","t1","remember","name","t2","forget","t3","_c","gridColumns","gridHeight","gridOverscan","gridRowHeight","gridVisibleRows","getNextIndex","key","current","last","undefined","getVisibleRows","scrollRow","count","totalRows","Math","ceil","firstRow","max","lastRow","min","getCenteredScrollTop","index","floor","getRevealedScrollTop","scrollTop","top","isDefined","SearchIcon","Box","Dialog","Flex","Spinner","Stack","Text","TextInput","ChangeEvent","ComponentProps","KeyboardEvent","useEffect","useRef","useState","Library","Problem","Recent","Tooltip","gridHeight","gridRowHeight","useIconLibrary","useIconTooltip","useRecentIcons","getCenteredScrollTop","getNextIndex","getRevealedScrollTop","getVisibleRows","LibraryIcon","normalizeTerms","selectIcons","getIconSetKey","PickerProps","Omit","library","iconStyle","allowed","selected","onSelect","icon","Picker","t0","$","_c","libraryName","props","result","icons","t1","t2","t3","recent","remember","forget","search","setSearch","scrollRow","setScrollRow","movedIndex","setMovedIndex","scrolling","setScrolling","scroller","activeCell","focusIndex","undefined","scrollFrame","scrollStop","query","searching","results","filter","terms","includes","byName","Map","map","_temp","recentIcons","flatMap","entry","icon_1","get","hovered","handleHover","clearHover","rows","length","selectedIndex","findIndex","icon_2","name","activeIndex","Math","max","element","current","scrollTop","t4","t5","Symbol","for","cancelAnimationFrame","clearTimeout","t6","t7","focus","t8","handleSelect","icon_3","t9","clearSearch","handleSearch","event","currentTarget","value","selectActive","icon_4","handleSearchKeyDown","event_0","key","preventDefault","handleScroll","setTimeout","requestAnimationFrame","element_0","floor","handleGridKeyDown","event_1","last","next","index","min","element_1","T0","t10","t11","T1","t12","t13","t14","problem","t15","height","t16","t17","t18","toLocaleString","t19","t20","t21","t22","icon_0","_c","ComponentProps","SquareDashedIconProps","SquareDashedIcon","props","$","_c","t0","t1","t10","t11","t2","t3","t4","t5","t6","t7","t8","t9","Symbol","for","t12","_c","isDefined","SanityIconConfig","SanityIconOptions","SanityIconSelection","resolveIconOptions","options","config","library","style","icons","Partial","iconTypeName","SanityIcon","_type","library","style","name","node","defaultIconProps","convertCase","isDefined","CloseIcon","Button","Flex","useState","ObjectInputProps","ObjectSchemaType","set","setIfMissing","unset","Drawing","Picker","SquareDashedIcon","LibraryIcon","resolveIconDrawing","serializeIconDrawing","resolveIconOptions","SanityIconConfig","SanityIconOptions","SanityIcon","iconTypeName","IconSchemaType","options","InputProps","Partial","createInput","config","Input","t0","$","_c","id","schemaType","value","onChange","readOnly","library","storedLibrary","name","node","open","setOpen","t1","style","icons","selectedDrawing","selectedName","undefined","selectedLabel","t2","handleSelect","icon","_type","drawing","T0","t3","T1","t4","t5","t6","t7","t8","t9","t10","t11","t12","t13","_c","isDefined","createElement","Drawing","resolveIconDrawing","SanityIcon","createIconPreview","value","drawing","node","undefined","IconPreview","width","height","Field","createSanityIcon","convertCase","isDefined","defineField","defineType","createInput","SquareDashedIcon","createIconPreview","SanityIconConfig","SanityIcon","iconTypeName","createIconType","config","name","type","icon","description","components","field","input","validation","rule","custom","value","Partial","node","preview","select","prepare","selection","title","media","_type","fields","SanityIconNames","BaseSchemaTypeOptions","TypeAliasDefinition","definePlugin","pluginName","iconLibraryStyles","createIconType","iconTypeName","IntrinsicDefinitions","icon","SanityIconDefinition","IconLibraryStyles","SanityIconLibrary","SanityIconStyle","Library","SanityIconName","ListedLibraryId","NonNullable","Extract","IconLibraryId","SanityIconSelection","library","style","icons","SanityIconOptions","Omit","options","SanityIconConfig","plugin","config","name","schema","types","iconPlugin"],"sources":["../../@repo/components/field.tsx","../../@repo/lib/icons.ts","../src/config/grid.ts","../src/components/picker/cell.tsx","../src/components/picker/library.tsx","../src/components/picker/problem.tsx","../src/components/picker/recent.tsx","../src/lib/library.ts","../src/components/picker/tooltip.tsx","../src/hooks/use-icon-library.ts","../src/hooks/use-icon-tooltip.ts","../src/lib/recent.ts","../src/hooks/use-recent-icons.ts","../src/lib/grid.ts","../src/components/picker/picker.tsx","../src/icons/square-dashed.tsx","../src/lib/options.ts","../src/types.ts","../src/components/input.tsx","../src/lib/preview.ts","../src/schemas/types/icon.ts","../src/plugin.ts"],"sourcesContent":["import { isDefined } from \"@repo/lib/utils\";\nimport { useState } from \"react\";\nimport type {\n ArrayOfObjectsFormNode,\n ArrayOfObjectsMember,\n BaseFormNode,\n DocumentFieldActionNode,\n ObjectFieldProps,\n ObjectFormNode,\n ObjectMember,\n} from \"sanity\";\nimport {\n ChangeIndicator,\n FieldActionsProvider,\n FieldActionsResolver,\n FormField,\n getPublishedId,\n useFormValue,\n} from \"sanity\";\n\n/**\n * Checks whether a form node has members, as objects and arrays of objects do.\n *\n * @param node - The form node to check.\n * @returns True if the node has members.\n */\nfunction hasMembers(node: BaseFormNode): node is ObjectFormNode | ArrayOfObjectsFormNode {\n return \"members\" in node;\n}\n\n/**\n * Collects the validation on a form node and everything inside it.\n *\n * @param node - The form node.\n * @returns Every validation result on the node or inside it.\n */\nfunction collectNodeValidation(node: BaseFormNode): BaseFormNode[\"validation\"] {\n return [...node.validation, ...(hasMembers(node) ? collectMemberValidation(node.members) : [])];\n}\n\n/**\n * Collects the validation anywhere inside a field's members. The form only passes a field the\n * validation at its own path, so a field that hides its members would otherwise show none of theirs.\n *\n * @param members - The members.\n * @returns Every validation result on the members or inside them.\n */\nfunction collectMemberValidation(members: (ObjectMember | ArrayOfObjectsMember)[]): BaseFormNode[\"validation\"] {\n return members.flatMap((member) => {\n if (member.kind === \"field\") return collectNodeValidation(member.field);\n if (member.kind === \"fieldSet\") return collectMemberValidation(member.fieldSet.members);\n if (member.kind === \"item\") return collectNodeValidation(member.item);\n\n return [];\n });\n}\n\nexport type FieldProps = ObjectFieldProps;\n\nexport function Field({\n actions,\n schemaType,\n title,\n description,\n presence,\n validation,\n level,\n inputId,\n path,\n changed,\n children,\n inputProps,\n}: FieldProps) {\n const [headerActions, setHeaderActions] = useState<DocumentFieldActionNode[]>([]);\n\n const documentId = useFormValue([\"_id\"]);\n const publishedId = typeof documentId === \"string\" ? getPublishedId(documentId) : undefined;\n const focused = inputProps.focused === true;\n const fieldValidation = [...validation, ...collectMemberValidation(inputProps.members)];\n\n return (\n <>\n {isDefined(publishedId) && isDefined(actions) && (\n <FieldActionsResolver\n actions={actions}\n documentId={publishedId}\n documentType={schemaType.name}\n onActions={setHeaderActions}\n path={path}\n schemaType={schemaType}\n />\n )}\n <FieldActionsProvider actions={headerActions} focused={focused} path={path}>\n <FormField\n __unstable_headerActions={headerActions}\n __unstable_presence={presence}\n description={description}\n inputId={inputId}\n level={level}\n title={title}\n validation={fieldValidation}\n deprecated={schemaType.deprecated}\n path={path}\n readOnly={inputProps.readOnly}\n >\n <ChangeIndicator path={path} hasFocus={focused} isChanged={changed}>\n {children}\n </ChangeIndicator>\n </FormField>\n </FieldActionsProvider>\n </>\n );\n}\n","import type { ComponentProps, ComponentType } from \"react\";\nimport { createElement } from \"react\";\n\n/** Default props for the plugin's own icons. Icons from `@sanity/icons` already match the Studio. */\nexport const defaultIconProps: ComponentProps<\"svg\"> = { width: \"1em\", height: \"1em\", strokeWidth: 1.5 };\n\n/**\n * Wraps an SVG icon component for use in the Studio.\n *\n * @param icon - The icon to wrap.\n * @param props - Props that override the Studio icon defaults.\n * @returns An icon component.\n */\nexport function createSanityIcon(icon: ComponentType<ComponentProps<\"svg\">>, props?: ComponentProps<\"svg\">) {\n const Icon = icon;\n\n function SanityIcon() {\n return createElement(Icon, { ...defaultIconProps, ...props });\n }\n\n return SanityIcon;\n}\n","/** Cell size in pixels, fixed so the grid never reflows. */\nexport const gridCellSize = 40;\n\n/** Gap between rows in pixels. */\nconst gridRowGap = 4;\n\n/** Distance from one row to the next, used to position the rendered rows. */\nexport const gridRowHeight = gridCellSize + gridRowGap;\n\n/** Icons per row. */\nexport const gridColumns = 8;\n\n/** Rows visible at once. */\nexport const gridVisibleRows = 8;\n\n/** Height of the scrolling area. The last row has no gap after it. */\nexport const gridHeight = gridVisibleRows * gridRowHeight - gridRowGap;\n\n/** Extra rows rendered above and below the visible ones, so rows are already drawn as they scroll into view. */\nexport const gridOverscan = gridVisibleRows;\n\n/** Layout shared by both grids, so recent icons line up with the library's columns. */\nexport const gridLayoutStyle = { justifyItems: \"center\", rowGap: gridRowGap } as const;\n","import { Button } from \"@sanity/ui\";\nimport type { ComponentProps } from \"react\";\n\nimport { Drawing } from \"@/components/drawing\";\nimport { gridCellSize } from \"@/config/grid\";\nimport type { LibraryIcon } from \"@/lib/library\";\n\nexport type CellProps = Omit<\n ComponentProps<typeof Button>,\n \"icon\" | \"selected\" | \"onSelect\" | \"onClick\" | \"onMouseEnter\"\n> & {\n icon: LibraryIcon;\n selected: boolean;\n focusable: boolean;\n position: number;\n total: number;\n onSelect: (icon: LibraryIcon) => void;\n onHover: (icon: LibraryIcon, element: HTMLElement) => void;\n};\n\nexport function Cell({ icon, selected, focusable, position, total, onSelect, onHover, ...props }: CellProps) {\n return (\n <Button\n type=\"button\"\n role=\"option\"\n aria-selected={selected}\n aria-posinset={position}\n aria-setsize={total}\n tabIndex={focusable ? 0 : -1}\n mode=\"bleed\"\n selected={selected}\n padding={0}\n style={{ width: gridCellSize, height: gridCellSize }}\n icon={<Drawing drawing={icon.drawing} width=\"1.25em\" height=\"1.25em\" />}\n aria-label={icon.label}\n onClick={() => {\n onSelect(icon);\n }}\n onMouseEnter={(event) => {\n onHover(icon, event.currentTarget);\n }}\n {...props}\n />\n );\n}\n","import { isDefined } from \"@repo/lib/utils\";\nimport { Box, Button, Flex, Grid, Text } from \"@sanity/ui\";\nimport type { ComponentProps, RefObject } from \"react\";\n\nimport type { CellProps } from \"@/components/picker/cell\";\nimport { Cell } from \"@/components/picker/cell\";\nimport { gridColumns, gridHeight, gridLayoutStyle, gridRowHeight } from \"@/config/grid\";\nimport type { getVisibleRows } from \"@/lib/grid\";\nimport type { LibraryIcon } from \"@/lib/library\";\n\nexport type LibraryProps = Omit<ComponentProps<typeof Box>, \"children\" | \"onSelect\"> & {\n icons: LibraryIcon[];\n rows: ReturnType<typeof getVisibleRows>;\n selected: string | undefined;\n activeIndex: number;\n activeCell: RefObject<HTMLButtonElement | null>;\n search: string;\n onSelect: (icon: LibraryIcon) => void;\n onHover: CellProps[\"onHover\"];\n onClearSearch: () => void;\n};\n\nexport function Library({\n icons,\n rows,\n selected,\n activeIndex,\n activeCell,\n search,\n onSelect,\n onHover,\n onClearSearch,\n ...props\n}: LibraryProps) {\n const { totalRows, firstRow, lastRow } = rows;\n const visible = icons.slice(firstRow * gridColumns, lastRow * gridColumns);\n\n return (\n <Box\n role=\"listbox\"\n aria-label=\"Icon library\"\n style={isDefined(icons) ? { height: gridHeight, overflowY: \"auto\" } : undefined}\n {...props}\n >\n {!isDefined(icons) && (\n <Flex align=\"center\" justify=\"center\" direction=\"column\" gap={3} paddingTop={5} paddingBottom={6}>\n <Text size={1} muted>{`Nothing matches \"${search}\".`}</Text>\n <Button type=\"button\" mode=\"ghost\" text=\"Clear search\" onClick={onClearSearch} />\n </Flex>\n )}\n {isDefined(icons) && (\n <Grid\n gridTemplateColumns={gridColumns}\n style={{\n ...gridLayoutStyle,\n paddingTop: firstRow * gridRowHeight,\n paddingBottom: (totalRows - lastRow) * gridRowHeight,\n }}\n >\n {visible.map((icon, offset) => {\n const index = firstRow * gridColumns + offset;\n\n return (\n <Cell\n key={icon.name}\n ref={index === activeIndex ? activeCell : undefined}\n icon={icon}\n selected={icon.name === selected}\n focusable={index === activeIndex}\n position={index + 1}\n total={icons.length}\n onSelect={onSelect}\n onHover={onHover}\n />\n );\n })}\n </Grid>\n )}\n </Box>\n );\n}\n","import { WarningOutlineIcon } from \"@sanity/icons/WarningOutline\";\nimport { Card, Flex, Stack, Text } from \"@sanity/ui\";\nimport type { ComponentProps } from \"react\";\n\nimport type { LibraryProblem } from \"@/lib/library\";\n\nexport type CodeTextProps = Omit<ComponentProps<\"span\">, \"children\"> & {\n text: string;\n};\n\nexport function CodeText({ text, ...props }: CodeTextProps) {\n const parts = text.split(\"`\");\n\n return (\n <span {...props}>\n {parts.map((part, index) => {\n const start = parts.slice(0, index).join(\"`\").length;\n\n return index % 2 === 1 ? <code key={start}>{part}</code> : part;\n })}\n </span>\n );\n}\n\nexport type ProblemProps = Omit<ComponentProps<typeof Card>, \"children\"> & {\n problem: LibraryProblem;\n};\n\nexport function Problem({ problem, ...props }: ProblemProps) {\n return (\n <Card tone=\"caution\" padding={4} radius={2} border {...props}>\n <Flex gap={3}>\n <Text size={1}>\n <WarningOutlineIcon />\n </Text>\n <Stack gap={3}>\n <Text size={1} weight=\"medium\">\n <CodeText text={problem.title} />\n </Text>\n <Text size={1} muted>\n <CodeText text={problem.description} />\n </Text>\n </Stack>\n </Flex>\n </Card>\n );\n}\n","import { Button, Flex, Grid, Stack, Text } from \"@sanity/ui\";\nimport type { ComponentProps } from \"react\";\n\nimport type { CellProps } from \"@/components/picker/cell\";\nimport { Cell } from \"@/components/picker/cell\";\nimport { gridColumns, gridLayoutStyle } from \"@/config/grid\";\nimport type { LibraryIcon } from \"@/lib/library\";\n\nexport type RecentProps = Omit<ComponentProps<typeof Stack>, \"children\" | \"onSelect\"> & {\n icons: LibraryIcon[];\n selected: string | undefined;\n onSelect: (icon: LibraryIcon) => void;\n onHover: CellProps[\"onHover\"];\n onForget: () => void;\n};\n\nexport function Recent({ icons, selected, onSelect, onHover, onForget, ...props }: RecentProps) {\n return (\n <Stack gap={3} {...props}>\n <Flex align=\"center\" justify=\"space-between\" gap={2}>\n <Text size={1} weight=\"medium\" muted>\n Recent icons\n </Text>\n <Button\n type=\"button\"\n mode=\"bleed\"\n fontSize={1}\n padding={2}\n text=\"Clear\"\n onClick={onForget}\n aria-label=\"Clear recent icons\"\n />\n </Flex>\n <Grid role=\"listbox\" aria-label=\"Recent icons\" gridTemplateColumns={gridColumns} style={gridLayoutStyle}>\n {icons.map((icon, index) => (\n <Cell\n key={icon.name}\n icon={icon}\n selected={icon.name === selected}\n focusable\n position={index + 1}\n total={icons.length}\n onSelect={onSelect}\n onHover={onHover}\n />\n ))}\n </Grid>\n </Stack>\n );\n}\n","import { iconRegistry } from \"@driftime/sanity-plugin-icon/sets\";\nimport { convertCase, isDefined } from \"@repo/lib/utils\";\n\nimport type { IconDrawing } from \"@/lib/nodes\";\nimport { getIconSetKey } from \"@/lib/registry\";\nimport { parseIconSet } from \"@/lib/sets\";\n\n/** Icon in the library, with the terms a search matches against. */\nexport interface LibraryIcon {\n /** Name of the icon in its library. */\n name: string;\n /** Readable form of the name. */\n label: string;\n /** Keywords describing the icon, as a comma-separated list. */\n tags: string;\n /** The icon's shapes and the SVG attributes they're drawn inside. */\n drawing: IconDrawing;\n /** Name and keywords, normalised for search. */\n terms: string;\n}\n\n/** Why a library's icons can't be shown, and what to do about it, with code marked by backticks. */\nexport interface LibraryProblem {\n /** What's wrong, in a few words. */\n title: string;\n /** What to do about it. */\n description: string;\n}\n\n/** Outcome of loading a library: its icons, or why they can't be shown. */\nexport type LibraryResult =\n | { icons: LibraryIcon[]; problem?: undefined }\n | { icons?: undefined; problem: LibraryProblem };\n\n/**\n * Normalises text for search, so hyphenated names and multi-word keywords match the same way.\n *\n * @param value - The text.\n * @returns The normalised text.\n */\nexport function normalizeTerms(value: string) {\n return value\n .toLowerCase()\n .replaceAll(/[\\s-]+/gu, \" \")\n .trim();\n}\n\n/**\n * Splits text into the parts a search matches and the parts it doesn't, matching the way search does: ignoring case,\n * and treating spaces and hyphens alike.\n *\n * @param text - The text to split.\n * @param query - The normalised search.\n * @returns The parts in order, each with where it starts in the text and whether it matches.\n */\nexport function splitMatches(text: string, query: string) {\n if (!isDefined(query)) return [{ text, start: 0, match: false }];\n\n const pattern = query\n .split(\" \")\n .map((word) => word.replaceAll(/[$()*+.?[\\\\\\]^{|}]/gu, String.raw`\\$&`))\n .join(String.raw`[\\s-]+`);\n\n const parts = text.split(new RegExp(`(${pattern})`, \"giu\"));\n\n return parts.map((part, index) => ({\n text: part,\n start: parts.slice(0, index).join(\"\").length,\n match: index % 2 === 1,\n }));\n}\n\n/**\n * Narrows the library to the named icons, in the order given. Unknown names are skipped, so a list keeps working\n * across library releases.\n *\n * @param library - Every icon in the library.\n * @param names - The icons to offer, or undefined for all of them.\n * @returns The icons to offer.\n */\nexport function selectIcons(library: LibraryIcon[], names: string[] | undefined) {\n if (!isDefined(names)) return library;\n\n const byName = new Map(library.map((icon) => [icon.name, icon]));\n\n return [...new Set(names)].flatMap((name) => {\n const icon = byName.get(name);\n\n return isDefined(icon) ? [icon] : [];\n });\n}\n\n/**\n * Lists identifiers as inline code, separated by commas.\n *\n * @param identifiers - The identifiers.\n * @returns The list.\n */\nfunction formatList(identifiers: string[]) {\n return identifiers.map((identifier) => `\\`${identifier}\\``).join(\", \");\n}\n\n/**\n * Describes why a library the project hasn't installed can't be shown, and what to add.\n *\n * @param label - Readable name of the library.\n * @param packageName - Package the library is read from, or an example of one for a family of packages.\n * @param family - Whether the library is a family of packages, one per style.\n * @param listed - Whether the project's `package.json` lists the package.\n * @param sitePackage - Another package of the library the project lists, or undefined when there's none.\n * @returns The problem.\n */\nfunction describeMissingLibrary(\n label: string,\n packageName: string,\n family: boolean,\n listed: boolean,\n sitePackage: string | undefined,\n): LibraryProblem {\n if (listed) {\n return {\n title: `${label} isn't installed yet`,\n description: `\\`${packageName}\\` is in \\`package.json\\` but not in \\`node_modules\\`. Reinstall the project's dependencies.`,\n };\n }\n\n if (isDefined(sitePackage)) {\n return {\n title: `${label} needs \\`${packageName}\\``,\n description: `The Studio reads ${label} from \\`${packageName}\\`, not \\`${sitePackage}\\`. Add it as a dev dependency.`,\n };\n }\n\n return {\n title: `${label} isn't installed`,\n description: family\n ? `Install a ${label} style package, such as \\`${packageName}\\`.`\n : `Install \\`${packageName}\\` in the project.`,\n };\n}\n\n/**\n * Loads one library style from the sets the build step converted.\n *\n * @param library - Identifier of the library, or undefined when none is set.\n * @param style - Identifier of the style, or undefined for the library's default.\n * @returns The icons, or why they can't be shown.\n */\nasync function readLibrary(library: string | undefined, style: string | undefined): Promise<LibraryResult> {\n if (!isDefined(library)) {\n return {\n problem: {\n title: \"No icon library set\",\n description: \"Set `library` in the icon plugin's configuration or in the field's options.\",\n },\n };\n }\n\n if (!iconRegistry.ready) {\n return {\n problem: {\n title: \"Icons aren't set up\",\n description: \"Add `withIcons()` to the Studio's build configuration, then restart the Studio.\",\n },\n };\n }\n\n const info = iconRegistry.libraries[library];\n if (!isDefined(info)) {\n return {\n problem: {\n title: \"Unknown icon library\",\n description: `There's no icon library called \\`${library}\\`. Use one of: ${formatList(Object.keys(iconRegistry.libraries))}.`,\n },\n };\n }\n\n const { label, packageName, packagePrefix, styles, listed, installed, sitePackage } = info;\n if (!installed) {\n return { problem: describeMissingLibrary(label, packageName, isDefined(packagePrefix), listed, sitePackage) };\n }\n\n const resolvedStyle = style ?? styles[0] ?? \"\";\n const loader = iconRegistry.sets[getIconSetKey(library, resolvedStyle)];\n if (!isDefined(loader)) {\n return {\n problem: isDefined(packagePrefix)\n ? {\n title: `${label} style \\`${resolvedStyle}\\` isn't installed`,\n description: `Install \\`${packagePrefix}${resolvedStyle}\\` in the project.`,\n }\n : {\n title: `Unknown ${label} style`,\n description: `${label} has no \\`${resolvedStyle}\\` style. Use one of: ${formatList(styles)}.`,\n },\n };\n }\n\n const module = await loader();\n const set = parseIconSet(module.default);\n if (!isDefined(set)) {\n return { problem: { title: `Couldn't load ${label}`, description: \"Restart the Studio and try again.\" } };\n }\n\n return {\n icons: set.icons.map(({ name, keywords, node, root }) => ({\n name,\n label: convertCase(name, \"title\"),\n tags: keywords.join(\", \"),\n drawing: { root: root ?? set.root, node },\n terms: normalizeTerms([name, ...keywords].join(\" \")),\n })),\n };\n}\n\n/** Library requests shared by every field in the session, keyed by library and style, since the data never changes. */\nconst libraryRequests = new Map<string, Promise<LibraryResult>>();\n\n/**\n * Loads a library style, reusing a request already in progress.\n *\n * @param library - Identifier of the library, or undefined when none is set.\n * @param style - Identifier of the style, or undefined for the library's default.\n * @returns The icons, or why they can't be shown.\n */\nexport async function requestLibrary(library: string | undefined, style: string | undefined) {\n const key = getIconSetKey(library ?? \"\", style ?? \"\");\n let request = libraryRequests.get(key);\n\n if (!isDefined(request)) {\n request = readLibrary(library, style);\n libraryRequests.set(key, request);\n }\n\n const result = await request;\n\n return result;\n}\n","import { isDefined } from \"@repo/lib/utils\";\nimport { Stack, Text } from \"@sanity/ui\";\nimport { Popover } from \"@sanity/ui/popover\";\nimport type { CSSProperties, ComponentProps } from \"react\";\n\nimport type { LibraryIcon } from \"@/lib/library\";\nimport { splitMatches } from \"@/lib/library\";\n\n/** Icon under the cursor and the cell showing it. */\nexport interface HoveredIcon {\n /** Icon in the cell. */\n icon: LibraryIcon;\n /** Cell the tooltip points at. */\n element: HTMLElement;\n}\n\n/**\n * Gap between the tooltip and its cell, set through margins because `@sanity/ui` offers no other way.\n * Only the top is set, since the tooltip always appears above the cell.\n */\nconst tooltipMargins: [number, number, number, number] = [-4, 0, 0, 0];\n\n/** Underlines a search match in place of the browser's highlighter-pen look, keeping the text's own colour. */\nconst matchStyle: CSSProperties = {\n background: \"none\",\n color: \"inherit\",\n textDecorationLine: \"underline\",\n textUnderlineOffset: \"0.2em\",\n};\n\nexport type HighlightProps = Omit<ComponentProps<\"span\">, \"children\"> & {\n text: string;\n query: string;\n};\n\nexport function Highlight({ text, query, ...props }: HighlightProps) {\n return (\n <span {...props}>\n {splitMatches(text, query).map((part) =>\n part.match ? (\n <mark key={part.start} style={matchStyle}>\n {part.text}\n </mark>\n ) : (\n part.text\n ),\n )}\n </span>\n );\n}\n\nexport type TooltipProps = Omit<ComponentProps<typeof Popover>, \"open\" | \"referenceElement\" | \"content\"> & {\n hovered: HoveredIcon | undefined;\n query: string;\n};\n\nexport function Tooltip({ hovered, query, ...props }: TooltipProps) {\n return (\n <Popover\n open={isDefined(hovered)}\n referenceElement={hovered?.element ?? null}\n placement=\"top\"\n portal\n padding={3}\n __unstable_margins={tooltipMargins}\n style={{ pointerEvents: \"none\" }}\n content={\n isDefined(hovered) && (\n <Stack gap={3} style={{ maxWidth: \"16rem\" }}>\n <Text size={1} weight=\"medium\">\n <Highlight text={hovered.icon.label} query={query} />\n </Text>\n {isDefined(hovered.icon.tags) && (\n <Text size={1} muted>\n <Highlight text={hovered.icon.tags} query={query} />\n </Text>\n )}\n </Stack>\n )\n }\n {...props}\n />\n );\n}\n","import { useEffect, useState } from \"react\";\n\nimport type { LibraryResult } from \"@/lib/library\";\nimport { requestLibrary } from \"@/lib/library\";\n\n/**\n * Loads an icon library style. Only an open picker calls this, so a Studio that never opens one never loads it.\n *\n * @param library - Identifier of the library, or undefined when none is set.\n * @param style - Identifier of the style, or undefined for the library's default.\n * @returns The icons or why they can't be shown, or undefined while loading.\n */\nexport function useIconLibrary(library: string | undefined, style: string | undefined) {\n const [result, setResult] = useState<LibraryResult>();\n\n useEffect(() => {\n let active = true;\n\n async function load() {\n const loaded = await requestLibrary(library, style);\n if (active) setResult(loaded);\n }\n\n void load();\n\n return () => {\n active = false;\n };\n }, [library, style]);\n\n return result;\n}\n","import { isDefined } from \"@repo/lib/utils\";\nimport { useEffect, useRef, useState } from \"react\";\n\nimport type { HoveredIcon } from \"@/components/picker/tooltip\";\nimport type { LibraryIcon } from \"@/lib/library\";\n\n/**\n * Tracks the icon under the cursor, showing its tooltip after a short delay. Tooltips are held back while the grid\n * scrolls, and the icon left under the cursor gets its tooltip once scrolling stops.\n *\n * @param scrolling - Whether the grid is scrolling.\n * @returns The hovered icon, and functions to update and clear it.\n */\nexport function useIconTooltip(scrolling: boolean) {\n const [hovered, setHovered] = useState<HoveredIcon>();\n const hoverStart = useRef<ReturnType<typeof setTimeout>>(undefined);\n const scrolledOnto = useRef<HoveredIcon>(undefined);\n\n useEffect(\n () => () => {\n if (isDefined(hoverStart.current)) clearTimeout(hoverStart.current);\n },\n [],\n );\n\n useEffect(() => {\n const landed = scrolledOnto.current;\n if (scrolling || !isDefined(landed)) return;\n\n scrolledOnto.current = undefined;\n if (!landed.element.isConnected || !landed.element.matches(\":hover\")) return;\n\n hoverStart.current = setTimeout(() => {\n setHovered(landed);\n }, 200);\n }, [scrolling]);\n\n function clearHover() {\n if (isDefined(hoverStart.current)) clearTimeout(hoverStart.current);\n if (isDefined(hovered)) setHovered(undefined);\n }\n\n function handleHover(icon: LibraryIcon, element: HTMLElement) {\n if (scrolling) {\n scrolledOnto.current = { icon, element };\n\n return;\n }\n\n if (element === hovered?.element) return;\n\n if (isDefined(hoverStart.current)) clearTimeout(hoverStart.current);\n\n if (isDefined(hovered)) {\n setHovered({ icon, element });\n\n return;\n }\n\n hoverStart.current = setTimeout(() => {\n setHovered({ icon, element });\n }, 200);\n }\n\n return { hovered, handleHover, clearHover };\n}\n","/** Local storage key for recent icons, which are kept in the browser rather than the dataset. */\nconst storageKey = \"driftime:sanity-plugin-icon:recent\";\n\n/** Number of recent icons to keep. */\nconst limit = 8;\n\n/**\n * Builds the storage key for one library style.\n *\n * @param scope - The library and style, such as `phosphor/bold`.\n * @returns The storage key.\n */\nfunction getStorageKey(scope: string) {\n return `${storageKey}:${scope}`;\n}\n\n/**\n * Reads the recently chosen icons.\n *\n * @param scope - The library and style, such as `phosphor/bold`.\n * @returns The icon names, most recent first.\n */\nexport function readRecent(scope: string) {\n try {\n const stored: unknown = JSON.parse(globalThis.localStorage.getItem(getStorageKey(scope)) ?? \"[]\");\n if (!Array.isArray(stored)) return [];\n\n return stored.filter((entry: unknown) => typeof entry === \"string\");\n } catch {\n return [];\n }\n}\n\n/**\n * Adds an icon to the front of the recent list.\n *\n * @param scope - The library and style, such as `phosphor/bold`.\n * @param name - The chosen icon's name.\n * @returns The updated icon names, most recent first.\n */\nexport function writeRecent(scope: string, name: string) {\n const updated = [name, ...readRecent(scope).filter((entry) => entry !== name)].slice(0, limit);\n\n try {\n globalThis.localStorage.setItem(getStorageKey(scope), JSON.stringify(updated));\n } catch {\n // If storage is blocked, the icon just isn't remembered.\n }\n\n return updated;\n}\n\n/**\n * Clears the recent icons.\n *\n * @param scope - The library and style, such as `phosphor/bold`.\n */\nexport function clearRecent(scope: string) {\n try {\n globalThis.localStorage.removeItem(getStorageKey(scope));\n } catch {\n // If storage is blocked, there's nothing to clear.\n }\n}\n","import { useState } from \"react\";\n\nimport { clearRecent, readRecent, writeRecent } from \"@/lib/recent\";\n\n/**\n * Tracks the icons an author chose most recently from one library style. The list is read when the picker opens, so\n * choices made in another tab are included.\n *\n * @param scope - The library and style, such as `phosphor/bold`.\n * @returns The recent icon names, most recent first, and functions to add to and clear them.\n */\nexport function useRecentIcons(scope: string) {\n const [recent, setRecent] = useState<string[]>(() => readRecent(scope));\n\n function remember(name: string) {\n setRecent(writeRecent(scope, name));\n }\n\n function forget() {\n clearRecent(scope);\n setRecent([]);\n }\n\n return { recent, remember, forget };\n}\n","import { gridColumns, gridHeight, gridOverscan, gridRowHeight, gridVisibleRows } from \"@/config/grid\";\n\n/**\n * Works out which icon a key press moves to.\n *\n * @param key - The key pressed.\n * @param current - Index of the current icon.\n * @param last - Index of the last icon.\n * @returns The new index, or undefined when the key doesn't move.\n */\nexport function getNextIndex(key: string, current: number, last: number) {\n if (key === \"ArrowRight\") return current + 1;\n if (key === \"ArrowLeft\") return current - 1;\n if (key === \"ArrowDown\") return current + gridColumns;\n if (key === \"ArrowUp\") return current - gridColumns;\n if (key === \"Home\") return 0;\n if (key === \"End\") return last;\n\n return undefined;\n}\n\n/**\n * Works out which rows to render at a scroll position, so only icons near the viewport are mounted.\n * Padding replaces the other rows, so the scrollbar stays the right size.\n *\n * @param scrollRow - The row scrolled to.\n * @param count - Number of icons in the results.\n * @returns The first and last rows to render, and the total number of rows.\n */\nexport function getVisibleRows(scrollRow: number, count: number) {\n const totalRows = Math.ceil(count / gridColumns);\n const firstRow = Math.max(0, scrollRow - gridOverscan);\n const lastRow = Math.min(totalRows, firstRow + gridVisibleRows + gridOverscan * 2);\n\n return { totalRows, firstRow, lastRow };\n}\n\n/**\n * Works out the scroll position that centres an icon, for opening on the selected icon.\n *\n * @param index - Index of the icon.\n * @returns The scroll position.\n */\nexport function getCenteredScrollTop(index: number) {\n return Math.max(0, Math.floor(index / gridColumns) * gridRowHeight - gridHeight / 2);\n}\n\n/**\n * Works out the scroll position that brings an icon into view, keeping the current one if it's\n * already visible. It uses the index because Home and End can move to rows that aren't mounted.\n *\n * @param index - Index of the icon.\n * @param scrollTop - The current scroll position.\n * @returns The scroll position.\n */\nexport function getRevealedScrollTop(index: number, scrollTop: number) {\n const top = Math.floor(index / gridColumns) * gridRowHeight;\n\n if (top < scrollTop) return top;\n if (top + gridRowHeight > scrollTop + gridHeight) return top + gridRowHeight - gridHeight;\n\n return scrollTop;\n}\n","import { isDefined } from \"@repo/lib/utils\";\nimport { SearchIcon } from \"@sanity/icons/Search\";\nimport { Box, Dialog, Flex, Spinner, Stack, Text, TextInput } from \"@sanity/ui\";\nimport type { ChangeEvent, ComponentProps, KeyboardEvent } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\n\nimport { Library } from \"@/components/picker/library\";\nimport { Problem } from \"@/components/picker/problem\";\nimport { Recent } from \"@/components/picker/recent\";\nimport { Tooltip } from \"@/components/picker/tooltip\";\nimport { gridHeight, gridRowHeight } from \"@/config/grid\";\nimport { useIconLibrary } from \"@/hooks/use-icon-library\";\nimport { useIconTooltip } from \"@/hooks/use-icon-tooltip\";\nimport { useRecentIcons } from \"@/hooks/use-recent-icons\";\nimport { getCenteredScrollTop, getNextIndex, getRevealedScrollTop, getVisibleRows } from \"@/lib/grid\";\nimport type { LibraryIcon } from \"@/lib/library\";\nimport { normalizeTerms, selectIcons } from \"@/lib/library\";\nimport { getIconSetKey } from \"@/lib/registry\";\n\nexport type PickerProps = Omit<\n ComponentProps<typeof Dialog>,\n \"children\" | \"header\" | \"width\" | \"selected\" | \"onSelect\"\n> & {\n library: string | undefined;\n iconStyle: string | undefined;\n allowed: string[] | undefined;\n selected: string | undefined;\n onSelect: (icon: LibraryIcon) => void;\n};\n\nexport function Picker({ library: libraryName, iconStyle, allowed, selected, onSelect, ...props }: PickerProps) {\n const result = useIconLibrary(libraryName, iconStyle);\n const library = result?.icons;\n const icons = selectIcons(library ?? [], allowed);\n const { recent, remember, forget } = useRecentIcons(getIconSetKey(libraryName ?? \"\", iconStyle ?? \"default\"));\n\n const [search, setSearch] = useState(\"\");\n const [scrollRow, setScrollRow] = useState(0);\n const [movedIndex, setMovedIndex] = useState<number>();\n const [scrolling, setScrolling] = useState(false);\n\n const scroller = useRef<HTMLDivElement>(null);\n const activeCell = useRef<HTMLButtonElement>(null);\n const focusIndex = useRef<number>(undefined);\n const scrollFrame = useRef<number>(undefined);\n const scrollStop = useRef<ReturnType<typeof setTimeout>>(undefined);\n\n const query = normalizeTerms(search);\n const searching = isDefined(query);\n const results = icons.filter((icon) => !searching || icon.terms.includes(query));\n\n const byName = new Map(icons.map((icon) => [icon.name, icon]));\n const recentIcons = searching\n ? []\n : recent.flatMap((entry) => {\n const icon = byName.get(entry);\n\n return isDefined(icon) ? [icon] : [];\n });\n\n const { hovered, handleHover, clearHover } = useIconTooltip(scrolling);\n\n const rows = getVisibleRows(scrollRow, results.length);\n\n const selectedIndex = searching || !isDefined(selected) ? -1 : icons.findIndex((icon) => icon.name === selected);\n const activeIndex = movedIndex ?? Math.max(0, selectedIndex);\n\n useEffect(() => {\n const element = scroller.current;\n if (!isDefined(element) || selectedIndex === -1) return;\n\n element.scrollTop = getCenteredScrollTop(selectedIndex);\n }, [scroller, selectedIndex]);\n\n useEffect(\n () => () => {\n if (isDefined(scrollFrame.current)) cancelAnimationFrame(scrollFrame.current);\n if (isDefined(scrollStop.current)) clearTimeout(scrollStop.current);\n },\n [],\n );\n\n useEffect(() => {\n if (focusIndex.current !== activeIndex) return;\n\n focusIndex.current = undefined;\n if (isDefined(activeCell.current)) activeCell.current.focus();\n }, [activeIndex]);\n\n function handleSelect(icon: LibraryIcon) {\n remember(icon.name);\n onSelect(icon);\n }\n\n function clearSearch() {\n setSearch(\"\");\n setMovedIndex(undefined);\n }\n\n function handleSearch(event: ChangeEvent<HTMLInputElement>) {\n setSearch(event.currentTarget.value);\n setMovedIndex(undefined);\n\n if (isDefined(scroller.current)) scroller.current.scrollTop = 0;\n }\n\n function selectActive() {\n const icon = results[activeIndex];\n\n if (isDefined(icon)) handleSelect(icon);\n }\n\n function handleSearchKeyDown(event: KeyboardEvent<HTMLInputElement>) {\n if (event.key === \"Enter\") {\n event.preventDefault();\n selectActive();\n\n return;\n }\n\n if (event.key !== \"ArrowDown\") return;\n\n event.preventDefault();\n\n if (isDefined(activeCell.current)) activeCell.current.focus();\n }\n\n function handleScroll() {\n clearHover();\n if (!scrolling) setScrolling(true);\n\n if (isDefined(scrollStop.current)) clearTimeout(scrollStop.current);\n scrollStop.current = setTimeout(() => {\n setScrolling(false);\n }, 150);\n\n if (isDefined(scrollFrame.current)) return;\n\n scrollFrame.current = requestAnimationFrame(() => {\n scrollFrame.current = undefined;\n\n const element = scroller.current;\n if (isDefined(element)) setScrollRow(Math.floor(element.scrollTop / gridRowHeight));\n });\n }\n\n function handleGridKeyDown(event: KeyboardEvent<HTMLDivElement>) {\n const last = results.length - 1;\n if (last < 0) return;\n\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n selectActive();\n\n return;\n }\n\n const next = getNextIndex(event.key, activeIndex, last);\n if (!isDefined(next)) return;\n\n event.preventDefault();\n\n const index = Math.min(Math.max(next, 0), last);\n focusIndex.current = index;\n setMovedIndex(index);\n\n const element = scroller.current;\n if (!isDefined(element)) return;\n\n element.scrollTop = getRevealedScrollTop(index, element.scrollTop);\n }\n\n return (\n <Dialog header=\"Select icon\" width={1} {...props}>\n <Stack gap={4} padding={4}>\n {!isDefined(result?.problem) && (\n <TextInput\n type=\"search\"\n icon={<SearchIcon />}\n placeholder=\"Search by name or keyword\"\n value={search}\n onChange={handleSearch}\n onKeyDown={handleSearchKeyDown}\n disabled={!isDefined(library) || !isDefined(icons)}\n aria-label=\"Search the icon library\"\n />\n )}\n {!isDefined(result) && (\n <Flex align=\"center\" justify=\"center\" style={{ height: gridHeight }}>\n <Spinner muted />\n </Flex>\n )}\n {isDefined(result?.problem) && <Problem problem={result.problem} />}\n {isDefined(recentIcons) && (\n <Recent\n icons={recentIcons}\n selected={selected}\n onSelect={handleSelect}\n onHover={handleHover}\n onForget={forget}\n onMouseLeave={clearHover}\n />\n )}\n {isDefined(library) && (\n <Stack gap={3}>\n <Box paddingY={2}>\n <Text size={1} weight=\"medium\" muted>\n All icons ({results.length.toLocaleString(\"en-US\")})\n </Text>\n </Box>\n {!isDefined(icons) && (\n <Flex align=\"center\" justify=\"center\" paddingTop={5} paddingBottom={6}>\n <Text size={1} muted>\n No icons available.\n </Text>\n </Flex>\n )}\n {isDefined(icons) && (\n <Library\n ref={scroller}\n icons={results}\n rows={rows}\n selected={selected}\n activeIndex={activeIndex}\n activeCell={activeCell}\n search={search}\n onSelect={handleSelect}\n onHover={handleHover}\n onClearSearch={clearSearch}\n onScroll={handleScroll}\n onMouseLeave={clearHover}\n onKeyDown={handleGridKeyDown}\n />\n )}\n </Stack>\n )}\n <Tooltip key={hovered?.icon.name} hovered={hovered} query={query} />\n </Stack>\n </Dialog>\n );\n}\n","import type { ComponentProps } from \"react\";\n\nexport type SquareDashedIconProps = ComponentProps<\"svg\">;\n\nexport function SquareDashedIcon(props: SquareDashedIconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={24}\n height={24}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M5 3a2 2 0 0 0-2 2\" />\n <path d=\"M19 3a2 2 0 0 1 2 2\" />\n <path d=\"M21 19a2 2 0 0 1-2 2\" />\n <path d=\"M5 21a2 2 0 0 1-2-2\" />\n <path d=\"M9 3h1\" />\n <path d=\"M9 21h1\" />\n <path d=\"M14 3h1\" />\n <path d=\"M14 21h1\" />\n <path d=\"M3 9v1\" />\n <path d=\"M21 9v1\" />\n <path d=\"M3 14v1\" />\n <path d=\"M21 14v1\" />\n </svg>\n );\n}\n","import { isDefined } from \"@repo/lib/utils\";\n\nimport type { SanityIconConfig, SanityIconOptions, SanityIconSelection } from \"@/plugin\";\n\n/**\n * Resolves the library, style, and icons a field offers. A field that names a library replaces all three of the\n * plugin's, and one that doesn't uses the plugin's.\n *\n * @param options - The field's options.\n * @param config - The plugin configuration.\n * @returns The field's settings, whose library is undefined when neither the field nor the plugin names one.\n */\nexport function resolveIconOptions(options: SanityIconOptions | undefined, config: SanityIconConfig | undefined) {\n const { library, style, icons }: Partial<SanityIconSelection> =\n (isDefined(options?.library) ? options : config) ?? {};\n\n return { library, style, icons };\n}\n","/** Schema type name of the icon object. */\nexport const iconTypeName = \"icon\";\n\n/**\n * Stored icon: which library it came from, its name, and the shapes it's drawn from.\n *\n * @public\n */\nexport interface SanityIcon {\n _type: typeof iconTypeName;\n /** Identifier of the library the icon came from. */\n library?: string;\n /** Identifier of the library style the icon came from. */\n style?: string;\n /** Name of the icon in its library. */\n name?: string;\n /** Shapes the icon is drawn from, saved when it's chosen. */\n node?: string;\n}\n","import { defaultIconProps } from \"@repo/lib/icons\";\nimport { convertCase, isDefined } from \"@repo/lib/utils\";\nimport { CloseIcon } from \"@sanity/icons/Close\";\nimport { Button, Flex } from \"@sanity/ui\";\nimport { useState } from \"react\";\nimport type { ObjectInputProps, ObjectSchemaType } from \"sanity\";\nimport { set, setIfMissing, unset } from \"sanity\";\n\nimport { Drawing } from \"@/components/drawing\";\nimport { Picker } from \"@/components/picker/picker\";\nimport { SquareDashedIcon } from \"@/icons/square-dashed\";\nimport type { LibraryIcon } from \"@/lib/library\";\nimport { resolveIconDrawing, serializeIconDrawing } from \"@/lib/nodes\";\nimport { resolveIconOptions } from \"@/lib/options\";\nimport type { SanityIconConfig, SanityIconOptions } from \"@/plugin\";\nimport type { SanityIcon } from \"@/types\";\nimport { iconTypeName } from \"@/types\";\n\n/** Compiled icon field type, with the field's own options. */\ninterface IconSchemaType extends ObjectSchemaType {\n options?: SanityIconOptions;\n}\n\nexport type InputProps = ObjectInputProps<Partial<SanityIcon>, IconSchemaType>;\n\n/**\n * Creates the icon field input, bound to the plugin's configuration. A field's own icons replace the\n * plugin's rather than adding to them.\n *\n * @param config - The plugin configuration.\n * @returns The input component.\n */\nexport function createInput(config: SanityIconConfig) {\n function Input({ id, schemaType, value, onChange, readOnly }: InputProps) {\n const { library: storedLibrary, name, node } = value ?? {};\n\n const [open, setOpen] = useState(false);\n\n const { library, style, icons } = resolveIconOptions(schemaType.options, config);\n const selectedDrawing = resolveIconDrawing(node);\n const selectedName = storedLibrary === library ? name : undefined;\n const selectedLabel = isDefined(name) ? convertCase(name, \"title\") : undefined;\n\n function handleSelect(icon: LibraryIcon) {\n onChange([\n setIfMissing({ _type: iconTypeName satisfies SanityIcon[\"_type\"] }),\n isDefined(library)\n ? set(library, [\"library\" satisfies keyof SanityIcon])\n : unset([\"library\" satisfies keyof SanityIcon]),\n isDefined(style)\n ? set(style, [\"style\" satisfies keyof SanityIcon])\n : unset([\"style\" satisfies keyof SanityIcon]),\n set(icon.name, [\"name\" satisfies keyof SanityIcon]),\n set(serializeIconDrawing(icon.drawing), [\"node\" satisfies keyof SanityIcon]),\n ]);\n\n setOpen(false);\n }\n\n return (\n <Flex gap={2}>\n <Button\n id={id}\n type=\"button\"\n mode=\"ghost\"\n icon={\n isDefined(selectedDrawing) ? (\n <Drawing drawing={selectedDrawing} width=\"1em\" height=\"1em\" />\n ) : (\n <SquareDashedIcon {...defaultIconProps} />\n )\n }\n text={selectedLabel ?? \"Select icon\"}\n disabled={readOnly}\n onClick={() => {\n setOpen(true);\n }}\n aria-label={isDefined(selectedLabel) ? `${selectedLabel} currently selected` : \"Select icon\"}\n />\n {isDefined(value) && (\n <Button\n type=\"button\"\n mode=\"ghost\"\n tone=\"critical\"\n icon={<CloseIcon />}\n text=\"Clear\"\n disabled={readOnly}\n onClick={() => {\n onChange(unset());\n }}\n aria-label=\"Clear the selected icon\"\n />\n )}\n {open && (\n <Picker\n id={`${id}-library`}\n library={library}\n iconStyle={style}\n allowed={icons}\n selected={selectedName}\n onSelect={handleSelect}\n onClose={() => {\n setOpen(false);\n }}\n onClickOutside={() => {\n setOpen(false);\n }}\n />\n )}\n </Flex>\n );\n }\n\n return Input;\n}\n","import { isDefined } from \"@repo/lib/utils\";\nimport { createElement } from \"react\";\n\nimport { Drawing } from \"@/components/drawing\";\nimport { resolveIconDrawing } from \"@/lib/nodes\";\nimport type { SanityIcon } from \"@/types\";\n\n/**\n * Creates preview media for a stored icon, so each document shows its own icon instead of a placeholder.\n *\n * @param value - The stored icon.\n * @returns The media component, or undefined when nothing readable was stored.\n * @public\n */\nexport function createIconPreview(value: SanityIcon | undefined) {\n const drawing = resolveIconDrawing(value?.node);\n if (!isDefined(drawing)) return undefined;\n\n return function IconPreview() {\n return createElement(Drawing, { drawing, width: \"1em\", height: \"1em\" });\n };\n}\n","import { Field } from \"@repo/components/field\";\nimport { createSanityIcon } from \"@repo/lib/icons\";\nimport { convertCase, isDefined } from \"@repo/lib/utils\";\nimport { defineField, defineType } from \"sanity\";\n\nimport { createInput } from \"@/components/input\";\nimport { SquareDashedIcon } from \"@/icons/square-dashed\";\nimport { createIconPreview } from \"@/lib/preview\";\nimport type { SanityIconConfig } from \"@/plugin\";\nimport type { SanityIcon } from \"@/types\";\nimport { iconTypeName } from \"@/types\";\n\n/**\n * Creates the icon object type, offering the plugin's icons to fields that don't set their own.\n *\n * @param config - The plugin configuration.\n * @returns The icon type.\n */\nexport function createIconType(config: SanityIconConfig) {\n return defineType({\n name: iconTypeName satisfies SanityIcon[\"_type\"],\n type: \"object\",\n icon: createSanityIcon(SquareDashedIcon),\n description: \"Icon chosen from an icon library.\",\n // Uses a primitive field's flat frame on purpose, instead of Sanity's collapsible object fieldset.\n components: { field: Field, input: createInput(config) },\n validation: (rule) =>\n rule.custom((value: Partial<SanityIcon> | undefined) =>\n !isDefined(value?.name) || isDefined(value.node) ? true : \"Select the icon again to save its drawing.\",\n ),\n preview: {\n select: {\n name: \"name\",\n node: \"node\",\n },\n prepare(selection: { name?: string; node?: string }) {\n const { name, node } = selection;\n\n return {\n title: isDefined(name) ? convertCase(name, \"title\") : \"No icon\",\n media: createIconPreview({ _type: iconTypeName, name, node }),\n };\n },\n },\n fields: [\n defineField({\n name: \"library\" satisfies keyof SanityIcon,\n type: \"string\",\n description: \"Identifier of the library the icon came from.\",\n }),\n defineField({\n name: \"style\" satisfies keyof SanityIcon,\n type: \"string\",\n description: \"Identifier of the library style the icon came from.\",\n }),\n defineField({\n name: \"name\" satisfies keyof SanityIcon,\n type: \"string\",\n description: \"Name of the icon in its library.\",\n }),\n defineField({\n name: \"node\" satisfies keyof SanityIcon,\n type: \"text\",\n description: \"Shapes the icon is drawn from, saved when it's chosen.\",\n }),\n ],\n });\n}\n","import type { SanityIconNames } from \"@driftime/sanity-plugin-icon/names\";\nimport type { BaseSchemaTypeOptions, TypeAliasDefinition } from \"sanity\";\nimport { definePlugin } from \"sanity\";\n\nimport { pluginName } from \"@/config/defaults\";\nimport type { iconLibraryStyles } from \"@/lib/libraries\";\nimport { createIconType } from \"@/schemas/types/icon\";\nimport type { iconTypeName } from \"@/types\";\n\ndeclare module \"@sanity/types\" {\n interface IntrinsicDefinitions {\n /** Definition of a field of type `icon`. */\n icon: SanityIconDefinition;\n }\n}\n\n/** Styles of each supported library, from the plugin's own list. */\ntype IconLibraryStyles = typeof iconLibraryStyles;\n\n/**\n * Identifier of a library the plugin supports.\n *\n * @public\n */\nexport type SanityIconLibrary = keyof IconLibraryStyles;\n\n/**\n * Styles a library offers. The project's own icon folders have one style, `default`.\n *\n * @public\n */\nexport type SanityIconStyle<Library extends string> = Library extends SanityIconLibrary\n ? IconLibraryStyles[Library][number]\n : \"default\";\n\n/**\n * Names of a library's icons, once the build step has listed the installed version's, or any name before then.\n *\n * @public\n */\nexport type SanityIconName<Library extends string> = Library extends keyof SanityIconNames\n ? SanityIconNames[Library]\n : string;\n\n/** Libraries the build step has listed, or any identifier before it has, so the project's own folders can be named. */\ntype ListedLibraryId = [keyof SanityIconNames] extends [never]\n ? string & NonNullable<unknown>\n : Extract<keyof SanityIconNames, string>;\n\n/** Libraries a field can name: the supported ones, plus the project's own folders. */\ntype IconLibraryId = SanityIconLibrary | ListedLibraryId;\n\n/**\n * A choice of library, style, and icons, where the style and icons are checked against the library.\n *\n * @public\n */\nexport type SanityIconSelection = {\n [Library in IconLibraryId]: {\n /** Identifier of the icon library, such as `phosphor`. */\n library: Library;\n /** Identifier of the library style, such as `bold`. Defaults to the library's first style. */\n style?: SanityIconStyle<Library>;\n /** Icons authors can choose from, in the order listed. Defaults to every icon. */\n icons?: SanityIconName<Library>[];\n };\n}[IconLibraryId];\n\n/**\n * Options for an icon field. A field that names a library replaces the plugin's library, style, and icons, and one\n * that doesn't uses the plugin's.\n *\n * @public\n */\nexport type SanityIconOptions = BaseSchemaTypeOptions &\n (SanityIconSelection | { library?: undefined; style?: undefined; icons?: undefined });\n\n/**\n * Definition of a field or array member holding an icon, so its options are type-checked like a\n * built-in type's.\n *\n * @public\n */\nexport interface SanityIconDefinition extends Omit<TypeAliasDefinition<typeof iconTypeName, undefined>, \"options\"> {\n /** Options for the field. */\n options?: SanityIconOptions;\n}\n\n/**\n * Plugin configuration, naming the library every icon field uses unless it names its own.\n *\n * @public\n */\nexport type SanityIconConfig = SanityIconSelection;\n\nconst plugin = definePlugin<SanityIconConfig>((config) => ({\n name: pluginName,\n schema: {\n types: [createIconType(config)],\n },\n}));\n\n/**\n * Adds an icon field type to Sanity Studio, with a searchable picker for the installed icon libraries that\n * stores the chosen icon's drawing.\n *\n * @param config - The plugin configuration.\n * @returns The plugin.\n * @public\n */\nexport function iconPlugin(config: SanityIconConfig) {\n return plugin(config);\n}\n"],"mappings":"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"}
|
package/dist/names.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Names of the icons in each installed library, keyed by library. This is a placeholder: the build step replaces this
|
|
3
|
+
* package's copy of it with the names it found in the project, so options that list icons can be checked.
|
|
4
|
+
*
|
|
5
|
+
* @public
|
|
6
|
+
*/
|
|
7
|
+
export type SanityIconNames = Record<never, never>;
|
|
8
|
+
//# sourceMappingURL=names.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"names.d.ts","names":["SanityIconNames","Record"],"sources":["../src/names.ts"],"mappings":"AAMA;;;;;;YAAYA,kBAAkBC"}
|
package/dist/names.js
ADDED
|
File without changes
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The parts of a webpack or Turbopack loader's context the build step uses.
|
|
3
|
+
*
|
|
4
|
+
* @public
|
|
5
|
+
*/
|
|
6
|
+
interface LoaderContext {
|
|
7
|
+
/** Path of the module being loaded. */
|
|
8
|
+
resourcePath: string;
|
|
9
|
+
/**
|
|
10
|
+
* Reads the loader's options.
|
|
11
|
+
*
|
|
12
|
+
* @returns The options.
|
|
13
|
+
*/
|
|
14
|
+
getOptions: () => unknown;
|
|
15
|
+
/**
|
|
16
|
+
* Tells the bundler to run the loader again when a file changes.
|
|
17
|
+
*
|
|
18
|
+
* @param file - The file.
|
|
19
|
+
*/
|
|
20
|
+
addDependency?: (file: string) => void;
|
|
21
|
+
/**
|
|
22
|
+
* Tells the bundler to run the loader again when anything in a folder changes.
|
|
23
|
+
*
|
|
24
|
+
* @param folder - The folder.
|
|
25
|
+
*/
|
|
26
|
+
addContextDependency?: (folder: string) => void;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Converts every installed library, writes each set to a file the bundler can split into its own chunk, and returns
|
|
30
|
+
* the registry that replaces the placeholder.
|
|
31
|
+
*
|
|
32
|
+
* @param resourcePath - Path of the placeholder being replaced.
|
|
33
|
+
* @param options - The loader's options.
|
|
34
|
+
* @returns The registry's code, and the files and folders it was generated from.
|
|
35
|
+
*/
|
|
36
|
+
declare function generateRegistryOnce(resourcePath: string, options: unknown): Promise<{
|
|
37
|
+
code: string;
|
|
38
|
+
files: string[];
|
|
39
|
+
folders: string[];
|
|
40
|
+
}>;
|
|
41
|
+
/**
|
|
42
|
+
* Generates the registry, running again when the project's `package.json` changes while it runs, so a package
|
|
43
|
+
* installed during a run isn't missed.
|
|
44
|
+
*
|
|
45
|
+
* @param resourcePath - Path of the placeholder being replaced.
|
|
46
|
+
* @param options - The loader's options.
|
|
47
|
+
* @param attempts - Runs allowed, including this one.
|
|
48
|
+
* @returns The registry's code, and the files and folders it was generated from.
|
|
49
|
+
* @public
|
|
50
|
+
*/
|
|
51
|
+
export declare function generateRegistry(resourcePath: string, options: unknown, attempts?: number): ReturnType<typeof generateRegistryOnce>;
|
|
52
|
+
/**
|
|
53
|
+
* Webpack and Turbopack loader that replaces the placeholder registry with the project's converted icon sets. The
|
|
54
|
+
* bundler keeps this module loaded, so it imports a fresh copy of itself, versioned by the plugin's code, and runs that
|
|
55
|
+
* copy's build step, so updating the plugin takes effect without restarting the bundler.
|
|
56
|
+
*
|
|
57
|
+
* @param this - The loader context.
|
|
58
|
+
* @returns The registry's code.
|
|
59
|
+
* @throws When the plugin's build step can't be loaded.
|
|
60
|
+
* @public
|
|
61
|
+
*/
|
|
62
|
+
declare function iconSetsLoader(this: LoaderContext): Promise<string>;
|
|
63
|
+
export { iconSetsLoader as default };
|
|
64
|
+
//# sourceMappingURL=next-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next-loader.d.ts","names":["LoaderContext","generateRegistryOnce","Promise","generateRegistry","ReturnType","LoaderContext","iconSetsLoader","Promise","default","generateRegistry"],"sources":["../src/build/loader.ts","../src/next-loader.ts"],"mappings":"AAiBA;;;;;UAAiBA;;EAEf;;;;;;EAMA;;;;;;EAMA,iBAAiB;;;;;;EAMjB,wBAAwB;;;;;;;;;;iBAWXC,qBAAqB,sBAAsB,mBAAgBC;;;;;;;;;;;;;;;wBA+EpDC,iBACpB,sBACA,kBACA,oBACCC,kBAAkBH;;;;;;;;;;;iBCnGNK,eAAe,MAAMD,gBAAaE"}
|