sanity-plugin-iconify 4.0.2 โ†’ 5.0.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 CHANGED
@@ -41,7 +41,9 @@ Enhance your [Sanity](https://www.sanity.io/) project with the Iconify plugin, w
41
41
 
42
42
  ## ๐Ÿš€ Getting Started
43
43
 
44
- > **Requires Sanity Studio v5 or v6.** For Sanity Studio v3/v4, use [v2.x](https://github.com/waspeer/sanity-plugin-iconify/tree/v2).
44
+ > **Requires Sanity Studio v6.9.2 or later** โ€” the first release to ship [`@sanity/ui`](https://github.com/sanity-io/ui) v4. The plugin declares `@sanity/ui` as a peer dependency so it shares the Studio's own copy; a Studio that ships `@sanity/ui` v3 would load a second, separate copy and break React context.
45
+ >
46
+ > For Sanity Studio v5, or v6.0โ€“v6.9.1, install `sanity-plugin-iconify@4`. For Sanity Studio v3/v4, use [v2.x](https://github.com/waspeer/sanity-plugin-iconify/tree/v2).
45
47
 
46
48
  ### Installation
47
49
 
@@ -281,9 +283,26 @@ git push origin new-feature-branch
281
283
 
282
284
  ## ๐Ÿงช Develop & test
283
285
 
284
- This plugin uses [@sanity/plugin-kit](https://github.com/sanity-io/plugin-kit) with default configuration for build & watch scripts.
286
+ The repo ships a dev studio in `dev/` that loads the plugin straight from `src/`.
287
+ Copy `dev/.env.example` to `dev/.env`, fill in a Sanity project id and dataset,
288
+ then:
285
289
 
286
- See [Testing a plugin in Sanity Studio](https://github.com/sanity-io/plugin-kit#testing-a-plugin-in-sanity-studio) on how to run this plugin with hotreload in the studio.
290
+ ```sh
291
+ pnpm install # or: vp install
292
+ pnpm dev # dev studio on http://localhost:3333
293
+ pnpm build # verify package, bundle with tsdown, check the dist output
294
+ pnpm test # unit/type tests (vitest)
295
+ pnpm test:e2e # playwright against the dev studio, running the plugin from src
296
+ pnpm test:e2e:dist # same specs against a production build of dist/
297
+ vp check # format, lint and type check (oxfmt + oxlint via vite-plus)
298
+ ```
299
+
300
+ Tooling is [vite-plus](https://viteplus.dev): `vp check --fix` also runs on
301
+ staged files through lefthook, which additionally lints commit messages with
302
+ commitlint (the changelog is generated from them).
303
+
304
+ [@sanity/plugin-kit](https://github.com/sanity-io/plugin-kit) is used for
305
+ `verify-package` only; bundling is done by [tsdown](https://tsdown.dev).
287
306
 
288
307
  ## ๐Ÿ‘ Acknowledgments
289
308
 
package/dist/index.cjs CHANGED
@@ -16,7 +16,7 @@ var __copyProps = (to, from, except, desc) => {
16
16
  }
17
17
  return to;
18
18
  };
19
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule || !__hasOwnProp.call(mod, "default") ? __defProp(target, "default", {
20
20
  value: mod,
21
21
  enumerable: true
22
22
  }) : target, mod));
@@ -25,6 +25,8 @@ let sanity = require("sanity");
25
25
  let _sanity_ui = require("@sanity/ui");
26
26
  let _sanity_ui_theme = require("@sanity/ui/theme");
27
27
  let react = require("react");
28
+ let _sanity_ui_popover = require("@sanity/ui/popover");
29
+ let _sanity_ui_toast = require("@sanity/ui/toast");
28
30
  let downshift = require("downshift");
29
31
  let ts_pattern = require("ts-pattern");
30
32
  let _tanstack_react_query = require("@tanstack/react-query");
@@ -33,7 +35,7 @@ let styled_components = require("styled-components");
33
35
  styled_components = __toESM(styled_components, 1);
34
36
  let react_jsx_runtime = require("react/jsx-runtime");
35
37
  let _iconify_react = require("@iconify/react");
36
- let _sanity_icons = require("@sanity/icons");
38
+ let _sanity_icons_Trash = require("@sanity/icons/Trash");
37
39
  let _iconify_utils = require("@iconify/utils");
38
40
  let change_case = require("change-case");
39
41
  //#region src/lib/api.ts
@@ -80,7 +82,7 @@ function useSearch({ collections }) {
80
82
  },
81
83
  enabled: debouncedTerm.length > 0,
82
84
  placeholderData: _tanstack_react_query.keepPreviousData,
83
- staleTime: 300 * 1e3
85
+ staleTime: 3e5
84
86
  });
85
87
  return {
86
88
  term,
@@ -216,7 +218,7 @@ function UnsetButton(props) {
216
218
  radius: 2,
217
219
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_sanity_ui.Button, {
218
220
  "data-testid": "iconify-unset",
219
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_sanity_icons.TrashIcon, {}),
221
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_sanity_icons_Trash.TrashIcon, {}),
220
222
  onClick: onUnset,
221
223
  mode: "bleed",
222
224
  fontSize: 1,
@@ -229,7 +231,7 @@ function UnsetButton(props) {
229
231
  const IconifyCombobox = (0, react.memo)(function IconifyCombobox(props) {
230
232
  const { selectedIcon, onSelect: pushSelection, collections, studioElementProps, fieldFocused } = props;
231
233
  const id = (0, react.useId)();
232
- const toast = (0, _sanity_ui.useToast)();
234
+ const toast = (0, _sanity_ui_toast.useToast)();
233
235
  const inputRef = (0, react.useRef)(null);
234
236
  const composedInputRef = (0, react.useCallback)((node) => {
235
237
  inputRef.current = node;
@@ -304,7 +306,7 @@ const IconifyCombobox = (0, react.memo)(function IconifyCombobox(props) {
304
306
  onBlur: handleBlur,
305
307
  selectedIcon,
306
308
  suffix: selectedIcon ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(UnsetButton, { onUnset: handleUnset }) : null
307
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_sanity_ui.Popover, {
309
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_sanity_ui_popover.Popover, {
308
310
  open: true,
309
311
  style: { display: isOpen ? "block" : "none" },
310
312
  placement: "bottom",
@@ -350,15 +352,16 @@ const IconifyInput = (0, react.memo)(function IconifyInput(props) {
350
352
  const options = schemaType.options;
351
353
  const collections = !!options?.collections?.length && options.collections || !!config?.collections?.length && config.collections || null;
352
354
  const showName = options?.showName ?? config?.showName ?? false;
355
+ const handleSelect = (0, react.useCallback)((icon) => {
356
+ pushChange(icon === "" ? (0, sanity.unset)() : (0, sanity.set)(icon, ["name"]));
357
+ }, [pushChange]);
353
358
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(QueryClientProvider, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_sanity_ui.ThemeProvider, {
354
359
  theme,
355
360
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_sanity_ui.Stack, {
356
- space: 2,
361
+ gap: 2,
357
362
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconifyCombobox, {
358
363
  selectedIcon,
359
- onSelect: (0, react.useCallback)((icon) => {
360
- pushChange(icon === "" ? (0, sanity.unset)() : (0, sanity.set)(icon, ["name"]));
361
- }, [pushChange]),
364
+ onSelect: handleSelect,
362
365
  collections,
363
366
  studioElementProps: elementProps,
364
367
  fieldFocused: focused
package/dist/index.d.cts CHANGED
@@ -1,37 +1,50 @@
1
1
  import { BaseSchemaDefinition, BaseSchemaDefinition as BaseSchemaDefinition$1, ConditionalPropertyCallbackContext, FieldGroupDefinition, FieldsetDefinition, InitialValueProperty, ObjectOptions, RuleDef, ValidationBuilder } from "sanity";
2
-
3
2
  //#region node_modules/.pnpm/@iconify+types@2.0.0/node_modules/@iconify/types/types.d.ts
4
3
  /**
5
4
  * Icon set information block.
6
5
  */
7
6
  interface IconifyInfo {
8
7
  // Icon set name.
9
- name: string; // Total number of icons.
10
- total?: number; // Version string.
11
- version?: string; // Author information.
8
+ name: string;
9
+ // Total number of icons.
10
+ total?: number;
11
+ // Version string.
12
+ version?: string;
13
+ // Author information.
12
14
  author: {
13
15
  // Author name.
14
- name: string; // Link to author's website or icon set website.
16
+ name: string;
17
+ // Link to author's website or icon set website.
15
18
  url?: string;
16
- }; // License
19
+ };
20
+ // License
17
21
  license: {
18
22
  // Human readable license.
19
- title: string; // SPDX license identifier.
20
- spdx?: string; // License URL.
23
+ title: string;
24
+ // SPDX license identifier.
25
+ spdx?: string;
26
+ // License URL.
21
27
  url?: string;
22
- }; // Array of icons that should be used for samples in icon sets list.
23
- samples?: string[]; // Icon grid: number or array of numbers.
24
- height?: number | number[]; // Display height for samples: 16 - 24
25
- displayHeight?: number; // Category on Iconify collections list.
26
- category?: string; // List of tags to group similar icon sets.
27
- tags?: string[]; // Palette status. True if icons have predefined color scheme, false if icons use currentColor.
28
+ };
29
+ // Array of icons that should be used for samples in icon sets list.
30
+ samples?: string[];
31
+ // Icon grid: number or array of numbers.
32
+ height?: number | number[];
33
+ // Display height for samples: 16 - 24
34
+ displayHeight?: number;
35
+ // Category on Iconify collections list.
36
+ category?: string;
37
+ // List of tags to group similar icon sets.
38
+ tags?: string[];
39
+ // Palette status. True if icons have predefined color scheme, false if icons use currentColor.
28
40
  // Ideally, icon set should not mix icons with and without palette to simplify search.
29
- palette?: boolean; // If true, icon set should not appear in icon sets list.
41
+ palette?: boolean;
42
+ // If true, icon set should not appear in icon sets list.
30
43
  hidden?: boolean;
31
44
  }
32
45
  //#endregion
33
46
  //#region src/lib/icon-types.gen.d.ts
34
- type IconPrefix = 'material-symbols' | 'material-symbols-light' | 'ic' | 'mdi' | 'mdi-light' | 'line-md' | 'solar' | 'tabler' | 'boxicons' | 'mingcute' | 'ri' | 'mynaui' | 'iconamoon' | 'iconoir' | 'lucide' | 'lucide-lab' | 'uil' | 'tdesign' | 'si' | 'majesticons' | 'gg' | 'flowbite' | 'basil' | 'pixelarticons' | 'pixel' | 'akar-icons' | 'ci' | 'proicons' | 'typcn' | 'meteor-icons' | 'prime' | 'circum' | 'fe' | 'eos-icons' | 'bitcoin-icons' | 'humbleicons' | 'uim' | 'uit' | 'uis' | 'gridicons' | 'mi' | 'cuida' | 'weui' | 'duo-icons' | 'svg-spinners' | 'hugeicons' | 'lets-icons' | 'streamline-ultimate' | 'streamline-plump' | 'streamline-sharp' | 'mage' | 'stash' | 'lineicons' | 'wordpress' | 'icon-park-outline' | 'icon-park-solid' | 'icon-park-twotone' | 'jam' | 'streamline-cyber' | 'guidance' | 'carbon' | 'ion' | 'famicons' | 'ant-design' | 'lsicon' | 'gravity-ui' | 'cil' | 'at-icons' | 'ep' | 'charm' | 'quill' | 'bytesize' | 'bi' | 'streamline-pixel' | 'streamline-block' | 'rivet-icons' | 'nimbus' | 'formkit' | 'fluent' | 'ph' | 'glyphs' | 'glyphs-poly' | 'teenyicons' | 'clarity' | 'streamline-freehand' | 'ix' | 'octicon' | 'memory' | 'system-uicons' | 'radix-icons' | 'zondicons' | 'uiw' | 'codex' | 'ei' | 'heroicons' | 'sidekickicons' | 'pepicons-pop' | 'pepicons-print' | 'pepicons-pencil' | 'f7' | 'pajamas' | 'garden' | 'streamline' | 'streamline-flex' | 'fa7-solid' | 'fa7-regular' | 'picon' | 'ooui' | 'oui' | 'nrk' | 'dinkie-icons' | 'qlementine-icons' | 'streamline-ultimate-color' | 'streamline-plump-color' | 'streamline-freehand-color' | 'streamline-kameleon-color' | 'streamline-stickies-color' | 'fluent-color' | 'streamline-color' | 'streamline-flex-color' | 'streamline-sharp-color' | 'streamline-cyber-color' | 'icon-park' | 'marketeq' | 'vscode-icons' | 'codicon' | 'material-icon-theme' | 'file-icons' | 'devicon' | 'devicon-plain' | 'catppuccin' | 'skill-icons' | 'gcp' | 'unjs' | 'simple-icons' | 'logos' | 'streamline-logos' | 'cib' | 'fa7-brands' | 'bxl' | 'nonicons' | 'arcticons' | 'cbi' | 'brandico' | 'entypo-social' | 'token' | 'token-branded' | 'cryptocurrency' | 'cryptocurrency-color' | 'openmoji' | 'twemoji' | 'noto' | 'fluent-emoji-flat' | 'fluent-emoji-high-contrast' | 'noto-v1' | 'emojione' | 'emojione-monotone' | 'emojione-v1' | 'fxemoji' | 'streamline-emojis' | 'circle-flags' | 'flag' | 'flagpack' | 'cif' | 'pinhead' | 'roentgen' | 'maki' | 'temaki' | 'gis' | 'map' | 'geo' | 'game-icons' | 'fad' | 'academicons' | 'wi' | 'meteocons' | 'healthicons' | 'medical-icon' | 'covid' | 'ginetex' | 'la' | 'eva' | 'dashicons' | 'flat-color-icons' | 'entypo' | 'foundation' | 'raphael' | 'icons8' | 'iwwa' | 'gala' | 'heroicons-outline' | 'heroicons-solid' | 'bx' | 'bxs' | 'fa6-solid' | 'fa6-regular' | 'fa6-brands' | 'fa-solid' | 'fa-regular' | 'fa-brands' | 'fa' | 'fluent-mdl2' | 'fontisto' | 'icomoon-free' | 'subway' | 'oi' | 'wpf' | 'simple-line-icons' | 'et' | 'el' | 'vaadin' | 'grommet-icons' | 'whh' | 'si-glyph' | 'zmdi' | 'ls' | 'bpmn' | 'flat-ui' | 'vs' | 'topcoat' | 'il' | 'websymbol' | 'fontelico' | 'ps' | 'feather' | 'mono-icons' | 'pepicons' | 'fluent-emoji';
47
+ type IconPrefix = 'material-symbols' | 'material-symbols-light' | 'ic' | 'mdi' | 'mdi-light' | 'line-md' | 'solar' | 'tabler' | 'iconmind' | 'boxicons' | 'mingcute' | 'keyline-icons' | 'ri' | 'mynaui' | 'griddy-icons' | 'iconamoon' | 'iconoir' | 'lucide' | 'lucide-lab' | 'uil' | 'tdesign' | 'si' | 'majesticons' | 'gg' | 'flowbite' | 'vadivam' | 'basil' | 'pixelarticons' | 'pixel' | 'akar-icons' | 'ci' | 'proicons' | 'typcn' | 'meteor-icons' | 'prime' | 'circum' | 'fe' | 'eos-icons' | 'bitcoin-icons' | 'humbleicons' | 'uim' | 'uit' | 'uis' | 'gridicons' | 'mi' | 'cuida' | 'weui' | 'duo-icons' | 'svg-spinners' | 'reicon' | 'hugeicons' | 'lets-icons' | 'streamline-ultimate' | 'streamline-plump' | 'streamline-sharp' | 'mage' | 'stash' | 'lineicons' | 'wordpress' | 'icon-park-outline' | 'icon-park-solid' | 'icon-park-twotone' | 'jam' | 'streamline-cyber' | 'guidance' | 'carbon' | 'ion' | 'famicons' | 'ant-design' | 'lsicon' | 'gravity-ui' | 'cil' | 'at-icons' | 'ep' | 'charm' | 'quill' | 'bytesize' | 'bi' | 'streamline-pixel' | 'streamline-block' | 'rivet-icons' | 'nimbus' | 'formkit' | 'fluent' | 'ph' | 'glyphs' | 'glyphs-poly' | 'teenyicons' | 'clarity' | 'streamline-freehand' | 'ix' | 'octicon' | 'memory' | 'system-uicons' | 'radix-icons' | 'zondicons' | 'uiw' | 'codex' | 'ei' | 'heroicons' | 'sidekickicons' | 'pepicons-pop' | 'pepicons-print' | 'pepicons-pencil' | 'f7' | 'pajamas' | 'garden' | 'streamline' | 'streamline-flex' | 'fa7-solid' | 'fa7-regular' | 'picon' | 'ooui' | 'oui' | 'nrk' | 'dinkie-icons' | 'qlementine-icons' | 'streamline-ultimate-color' | 'streamline-plump-color' | 'streamline-freehand-color' | 'streamline-kameleon-color' | 'streamline-stickies-color' | 'fluent-color' | 'streamline-color' | 'streamline-flex-color' | 'streamline-sharp-color' | 'streamline-cyber-color' | 'icon-park' | 'marketeq' | 'vscode-icons' | 'codicon' | 'material-icon-theme' | 'file-icons' | 'devicon' | 'devicon-plain' | 'catppuccin' | 'skill-icons' | 'gcp' | 'k8s' | 'unjs' | 'simple-icons' | 'logos' | 'streamline-logos' | 'cib' | 'fa7-brands' | 'bxl' | 'nonicons' | 'arcticons' | 'thesvg' | 'thesvg-color' | 'selfhst' | 'cbi' | 'brandico' | 'entypo-social' | 'token' | 'token-branded' | 'cryptocurrency' | 'cryptocurrency-color' | 'openmoji' | 'twemoji' | 'noto' | 'fluent-emoji-flat' | 'fluent-emoji-high-contrast' | 'noto-v1' | 'emojione' | 'emojione-monotone' | 'emojione-v1' | 'fxemoji' | 'streamline-emojis' | 'circle-flags' | 'flag' | 'flagpack' | 'cif' | 'pinhead' | 'roentgen' | 'maki' | 'temaki' | 'gis' | 'map' | 'geo' | 'osmic' | 'game-icons' | 'fad' | 'academicons' | 'wi' | 'meteocons' | 'healthicons' | 'medical-icon' | 'covid' | 'ginetex' | 'la' | 'eva' | 'dashicons' | 'flat-color-icons' | 'entypo' | 'foundation' | 'raphael' | 'icons8' | 'iwwa' | 'gala' | 'heroicons-outline' | 'heroicons-solid' | 'bx' | 'bxs' | 'fa6-solid' | 'fa6-regular' | 'fa6-brands' | 'fa-solid' | 'fa-regular' | 'fa-brands' | 'fa' | 'fluent-mdl2' | 'fontisto' | 'icomoon-free' | 'subway' | 'oi' | 'wpf' | 'simple-line-icons' | 'et' | 'el' | 'vaadin' | 'grommet-icons' | 'whh' | 'si-glyph' | 'zmdi' | 'ls' | 'bpmn' | 'flat-ui' | 'vs' | 'topcoat' | 'il' | 'websymbol' | 'fontelico' | 'ps' | 'feather' | 'mono-icons' | 'pepicons' | 'fluent-emoji';
35
48
  //#endregion
36
49
  //#region src/lib/types.d.ts
37
50
  type IconOptions = {
@@ -84,6 +97,6 @@ declare module 'sanity' {
84
97
  * })
85
98
  * ```
86
99
  */
87
- declare const iconify: import("sanity").Plugin<void | IconifyPluginConfig>;
100
+ export declare const iconify: import("sanity").Plugin<void | IconifyPluginConfig>;
88
101
  //#endregion
89
- export { type BaseSchemaDefinition, type IconConditionalProperty, type IconConditionalPropertyCallbackContext, type IconDefinition, type IconOptions, type IconPrefix, type IconRule, type IconValue, type IconifyPluginConfig, type IconifySearchResult, iconify };
102
+ export type { BaseSchemaDefinition, IconConditionalProperty, IconConditionalPropertyCallbackContext, IconDefinition, IconOptions, IconPrefix, IconRule, IconValue, IconifyPluginConfig, IconifySearchResult };
package/dist/index.d.mts CHANGED
@@ -1,37 +1,50 @@
1
1
  import { BaseSchemaDefinition, BaseSchemaDefinition as BaseSchemaDefinition$1, ConditionalPropertyCallbackContext, FieldGroupDefinition, FieldsetDefinition, InitialValueProperty, ObjectOptions, RuleDef, ValidationBuilder } from "sanity";
2
-
3
2
  //#region node_modules/.pnpm/@iconify+types@2.0.0/node_modules/@iconify/types/types.d.ts
4
3
  /**
5
4
  * Icon set information block.
6
5
  */
7
6
  interface IconifyInfo {
8
7
  // Icon set name.
9
- name: string; // Total number of icons.
10
- total?: number; // Version string.
11
- version?: string; // Author information.
8
+ name: string;
9
+ // Total number of icons.
10
+ total?: number;
11
+ // Version string.
12
+ version?: string;
13
+ // Author information.
12
14
  author: {
13
15
  // Author name.
14
- name: string; // Link to author's website or icon set website.
16
+ name: string;
17
+ // Link to author's website or icon set website.
15
18
  url?: string;
16
- }; // License
19
+ };
20
+ // License
17
21
  license: {
18
22
  // Human readable license.
19
- title: string; // SPDX license identifier.
20
- spdx?: string; // License URL.
23
+ title: string;
24
+ // SPDX license identifier.
25
+ spdx?: string;
26
+ // License URL.
21
27
  url?: string;
22
- }; // Array of icons that should be used for samples in icon sets list.
23
- samples?: string[]; // Icon grid: number or array of numbers.
24
- height?: number | number[]; // Display height for samples: 16 - 24
25
- displayHeight?: number; // Category on Iconify collections list.
26
- category?: string; // List of tags to group similar icon sets.
27
- tags?: string[]; // Palette status. True if icons have predefined color scheme, false if icons use currentColor.
28
+ };
29
+ // Array of icons that should be used for samples in icon sets list.
30
+ samples?: string[];
31
+ // Icon grid: number or array of numbers.
32
+ height?: number | number[];
33
+ // Display height for samples: 16 - 24
34
+ displayHeight?: number;
35
+ // Category on Iconify collections list.
36
+ category?: string;
37
+ // List of tags to group similar icon sets.
38
+ tags?: string[];
39
+ // Palette status. True if icons have predefined color scheme, false if icons use currentColor.
28
40
  // Ideally, icon set should not mix icons with and without palette to simplify search.
29
- palette?: boolean; // If true, icon set should not appear in icon sets list.
41
+ palette?: boolean;
42
+ // If true, icon set should not appear in icon sets list.
30
43
  hidden?: boolean;
31
44
  }
32
45
  //#endregion
33
46
  //#region src/lib/icon-types.gen.d.ts
34
- type IconPrefix = 'material-symbols' | 'material-symbols-light' | 'ic' | 'mdi' | 'mdi-light' | 'line-md' | 'solar' | 'tabler' | 'boxicons' | 'mingcute' | 'ri' | 'mynaui' | 'iconamoon' | 'iconoir' | 'lucide' | 'lucide-lab' | 'uil' | 'tdesign' | 'si' | 'majesticons' | 'gg' | 'flowbite' | 'basil' | 'pixelarticons' | 'pixel' | 'akar-icons' | 'ci' | 'proicons' | 'typcn' | 'meteor-icons' | 'prime' | 'circum' | 'fe' | 'eos-icons' | 'bitcoin-icons' | 'humbleicons' | 'uim' | 'uit' | 'uis' | 'gridicons' | 'mi' | 'cuida' | 'weui' | 'duo-icons' | 'svg-spinners' | 'hugeicons' | 'lets-icons' | 'streamline-ultimate' | 'streamline-plump' | 'streamline-sharp' | 'mage' | 'stash' | 'lineicons' | 'wordpress' | 'icon-park-outline' | 'icon-park-solid' | 'icon-park-twotone' | 'jam' | 'streamline-cyber' | 'guidance' | 'carbon' | 'ion' | 'famicons' | 'ant-design' | 'lsicon' | 'gravity-ui' | 'cil' | 'at-icons' | 'ep' | 'charm' | 'quill' | 'bytesize' | 'bi' | 'streamline-pixel' | 'streamline-block' | 'rivet-icons' | 'nimbus' | 'formkit' | 'fluent' | 'ph' | 'glyphs' | 'glyphs-poly' | 'teenyicons' | 'clarity' | 'streamline-freehand' | 'ix' | 'octicon' | 'memory' | 'system-uicons' | 'radix-icons' | 'zondicons' | 'uiw' | 'codex' | 'ei' | 'heroicons' | 'sidekickicons' | 'pepicons-pop' | 'pepicons-print' | 'pepicons-pencil' | 'f7' | 'pajamas' | 'garden' | 'streamline' | 'streamline-flex' | 'fa7-solid' | 'fa7-regular' | 'picon' | 'ooui' | 'oui' | 'nrk' | 'dinkie-icons' | 'qlementine-icons' | 'streamline-ultimate-color' | 'streamline-plump-color' | 'streamline-freehand-color' | 'streamline-kameleon-color' | 'streamline-stickies-color' | 'fluent-color' | 'streamline-color' | 'streamline-flex-color' | 'streamline-sharp-color' | 'streamline-cyber-color' | 'icon-park' | 'marketeq' | 'vscode-icons' | 'codicon' | 'material-icon-theme' | 'file-icons' | 'devicon' | 'devicon-plain' | 'catppuccin' | 'skill-icons' | 'gcp' | 'unjs' | 'simple-icons' | 'logos' | 'streamline-logos' | 'cib' | 'fa7-brands' | 'bxl' | 'nonicons' | 'arcticons' | 'cbi' | 'brandico' | 'entypo-social' | 'token' | 'token-branded' | 'cryptocurrency' | 'cryptocurrency-color' | 'openmoji' | 'twemoji' | 'noto' | 'fluent-emoji-flat' | 'fluent-emoji-high-contrast' | 'noto-v1' | 'emojione' | 'emojione-monotone' | 'emojione-v1' | 'fxemoji' | 'streamline-emojis' | 'circle-flags' | 'flag' | 'flagpack' | 'cif' | 'pinhead' | 'roentgen' | 'maki' | 'temaki' | 'gis' | 'map' | 'geo' | 'game-icons' | 'fad' | 'academicons' | 'wi' | 'meteocons' | 'healthicons' | 'medical-icon' | 'covid' | 'ginetex' | 'la' | 'eva' | 'dashicons' | 'flat-color-icons' | 'entypo' | 'foundation' | 'raphael' | 'icons8' | 'iwwa' | 'gala' | 'heroicons-outline' | 'heroicons-solid' | 'bx' | 'bxs' | 'fa6-solid' | 'fa6-regular' | 'fa6-brands' | 'fa-solid' | 'fa-regular' | 'fa-brands' | 'fa' | 'fluent-mdl2' | 'fontisto' | 'icomoon-free' | 'subway' | 'oi' | 'wpf' | 'simple-line-icons' | 'et' | 'el' | 'vaadin' | 'grommet-icons' | 'whh' | 'si-glyph' | 'zmdi' | 'ls' | 'bpmn' | 'flat-ui' | 'vs' | 'topcoat' | 'il' | 'websymbol' | 'fontelico' | 'ps' | 'feather' | 'mono-icons' | 'pepicons' | 'fluent-emoji';
47
+ type IconPrefix = 'material-symbols' | 'material-symbols-light' | 'ic' | 'mdi' | 'mdi-light' | 'line-md' | 'solar' | 'tabler' | 'iconmind' | 'boxicons' | 'mingcute' | 'keyline-icons' | 'ri' | 'mynaui' | 'griddy-icons' | 'iconamoon' | 'iconoir' | 'lucide' | 'lucide-lab' | 'uil' | 'tdesign' | 'si' | 'majesticons' | 'gg' | 'flowbite' | 'vadivam' | 'basil' | 'pixelarticons' | 'pixel' | 'akar-icons' | 'ci' | 'proicons' | 'typcn' | 'meteor-icons' | 'prime' | 'circum' | 'fe' | 'eos-icons' | 'bitcoin-icons' | 'humbleicons' | 'uim' | 'uit' | 'uis' | 'gridicons' | 'mi' | 'cuida' | 'weui' | 'duo-icons' | 'svg-spinners' | 'reicon' | 'hugeicons' | 'lets-icons' | 'streamline-ultimate' | 'streamline-plump' | 'streamline-sharp' | 'mage' | 'stash' | 'lineicons' | 'wordpress' | 'icon-park-outline' | 'icon-park-solid' | 'icon-park-twotone' | 'jam' | 'streamline-cyber' | 'guidance' | 'carbon' | 'ion' | 'famicons' | 'ant-design' | 'lsicon' | 'gravity-ui' | 'cil' | 'at-icons' | 'ep' | 'charm' | 'quill' | 'bytesize' | 'bi' | 'streamline-pixel' | 'streamline-block' | 'rivet-icons' | 'nimbus' | 'formkit' | 'fluent' | 'ph' | 'glyphs' | 'glyphs-poly' | 'teenyicons' | 'clarity' | 'streamline-freehand' | 'ix' | 'octicon' | 'memory' | 'system-uicons' | 'radix-icons' | 'zondicons' | 'uiw' | 'codex' | 'ei' | 'heroicons' | 'sidekickicons' | 'pepicons-pop' | 'pepicons-print' | 'pepicons-pencil' | 'f7' | 'pajamas' | 'garden' | 'streamline' | 'streamline-flex' | 'fa7-solid' | 'fa7-regular' | 'picon' | 'ooui' | 'oui' | 'nrk' | 'dinkie-icons' | 'qlementine-icons' | 'streamline-ultimate-color' | 'streamline-plump-color' | 'streamline-freehand-color' | 'streamline-kameleon-color' | 'streamline-stickies-color' | 'fluent-color' | 'streamline-color' | 'streamline-flex-color' | 'streamline-sharp-color' | 'streamline-cyber-color' | 'icon-park' | 'marketeq' | 'vscode-icons' | 'codicon' | 'material-icon-theme' | 'file-icons' | 'devicon' | 'devicon-plain' | 'catppuccin' | 'skill-icons' | 'gcp' | 'k8s' | 'unjs' | 'simple-icons' | 'logos' | 'streamline-logos' | 'cib' | 'fa7-brands' | 'bxl' | 'nonicons' | 'arcticons' | 'thesvg' | 'thesvg-color' | 'selfhst' | 'cbi' | 'brandico' | 'entypo-social' | 'token' | 'token-branded' | 'cryptocurrency' | 'cryptocurrency-color' | 'openmoji' | 'twemoji' | 'noto' | 'fluent-emoji-flat' | 'fluent-emoji-high-contrast' | 'noto-v1' | 'emojione' | 'emojione-monotone' | 'emojione-v1' | 'fxemoji' | 'streamline-emojis' | 'circle-flags' | 'flag' | 'flagpack' | 'cif' | 'pinhead' | 'roentgen' | 'maki' | 'temaki' | 'gis' | 'map' | 'geo' | 'osmic' | 'game-icons' | 'fad' | 'academicons' | 'wi' | 'meteocons' | 'healthicons' | 'medical-icon' | 'covid' | 'ginetex' | 'la' | 'eva' | 'dashicons' | 'flat-color-icons' | 'entypo' | 'foundation' | 'raphael' | 'icons8' | 'iwwa' | 'gala' | 'heroicons-outline' | 'heroicons-solid' | 'bx' | 'bxs' | 'fa6-solid' | 'fa6-regular' | 'fa6-brands' | 'fa-solid' | 'fa-regular' | 'fa-brands' | 'fa' | 'fluent-mdl2' | 'fontisto' | 'icomoon-free' | 'subway' | 'oi' | 'wpf' | 'simple-line-icons' | 'et' | 'el' | 'vaadin' | 'grommet-icons' | 'whh' | 'si-glyph' | 'zmdi' | 'ls' | 'bpmn' | 'flat-ui' | 'vs' | 'topcoat' | 'il' | 'websymbol' | 'fontelico' | 'ps' | 'feather' | 'mono-icons' | 'pepicons' | 'fluent-emoji';
35
48
  //#endregion
36
49
  //#region src/lib/types.d.ts
37
50
  type IconOptions = {
@@ -84,6 +97,6 @@ declare module 'sanity' {
84
97
  * })
85
98
  * ```
86
99
  */
87
- declare const iconify: import("sanity").Plugin<void | IconifyPluginConfig>;
100
+ export declare const iconify: import("sanity").Plugin<void | IconifyPluginConfig>;
88
101
  //#endregion
89
- export { type BaseSchemaDefinition, type IconConditionalProperty, type IconConditionalPropertyCallbackContext, type IconDefinition, type IconOptions, type IconPrefix, type IconRule, type IconValue, type IconifyPluginConfig, type IconifySearchResult, iconify };
102
+ export type { BaseSchemaDefinition, IconConditionalProperty, IconConditionalPropertyCallbackContext, IconDefinition, IconOptions, IconPrefix, IconRule, IconValue, IconifyPluginConfig, IconifySearchResult };
package/dist/index.mjs CHANGED
@@ -1,7 +1,9 @@
1
1
  import { definePlugin, set, unset } from "sanity";
2
- import { Box, Button, Card, Flex, Grid, Popover, Stack, Text, TextInput, ThemeProvider, useToast } from "@sanity/ui";
2
+ import { Box, Button, Card, Flex, Grid, Stack, Text, TextInput, ThemeProvider } from "@sanity/ui";
3
3
  import { buildTheme } from "@sanity/ui/theme";
4
4
  import { forwardRef, memo, useCallback, useEffect, useId, useMemo, useRef, useState } from "react";
5
+ import { Popover } from "@sanity/ui/popover";
6
+ import { useToast } from "@sanity/ui/toast";
5
7
  import { useCombobox } from "downshift";
6
8
  import { match } from "ts-pattern";
7
9
  import { QueryClient, QueryClientProvider, keepPreviousData, useQuery, useQueryClient } from "@tanstack/react-query";
@@ -9,7 +11,7 @@ import { useDebounce } from "use-debounce";
9
11
  import styled from "styled-components";
10
12
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
11
13
  import { Icon } from "@iconify/react";
12
- import { TrashIcon } from "@sanity/icons";
14
+ import { TrashIcon } from "@sanity/icons/Trash";
13
15
  import { stringToIcon } from "@iconify/utils";
14
16
  import { sentenceCase } from "change-case";
15
17
  //#region src/lib/api.ts
@@ -56,7 +58,7 @@ function useSearch({ collections }) {
56
58
  },
57
59
  enabled: debouncedTerm.length > 0,
58
60
  placeholderData: keepPreviousData,
59
- staleTime: 300 * 1e3
61
+ staleTime: 3e5
60
62
  });
61
63
  return {
62
64
  term,
@@ -326,15 +328,16 @@ const IconifyInput = memo(function IconifyInput(props) {
326
328
  const options = schemaType.options;
327
329
  const collections = !!options?.collections?.length && options.collections || !!config?.collections?.length && config.collections || null;
328
330
  const showName = options?.showName ?? config?.showName ?? false;
331
+ const handleSelect = useCallback((icon) => {
332
+ pushChange(icon === "" ? unset() : set(icon, ["name"]));
333
+ }, [pushChange]);
329
334
  return /* @__PURE__ */ jsx(QueryClientProvider$1, { children: /* @__PURE__ */ jsx(ThemeProvider, {
330
335
  theme,
331
336
  children: /* @__PURE__ */ jsxs(Stack, {
332
- space: 2,
337
+ gap: 2,
333
338
  children: [/* @__PURE__ */ jsx(IconifyCombobox, {
334
339
  selectedIcon,
335
- onSelect: useCallback((icon) => {
336
- pushChange(icon === "" ? unset() : set(icon, ["name"]));
337
- }, [pushChange]),
340
+ onSelect: handleSelect,
338
341
  collections,
339
342
  studioElementProps: elementProps,
340
343
  fieldFocused: focused
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sanity-plugin-iconify",
3
- "version": "4.0.2",
3
+ "version": "5.0.1",
4
4
  "description": "Icon picker based on Iconify",
5
5
  "keywords": [
6
6
  "sanity",
@@ -10,14 +10,23 @@
10
10
  "bugs": {
11
11
  "url": "https://github.com/waspeer/sanity-plugin-iconify/issues"
12
12
  },
13
+ "license": "MIT",
14
+ "author": "Wannes Salomรฉ <mail@wannessalome.nl>",
13
15
  "repository": {
14
16
  "type": "git",
15
17
  "url": "git+ssh://git@github.com/waspeer/sanity-plugin-iconify.git"
16
18
  },
17
- "license": "MIT",
18
- "author": "Wannes Salomรฉ <mail@wannessalome.nl>",
19
- "sideEffects": true,
19
+ "files": [
20
+ "dist",
21
+ "sanity.json",
22
+ "src",
23
+ "v2-incompatible.js"
24
+ ],
20
25
  "type": "module",
26
+ "sideEffects": true,
27
+ "main": "./dist/index.cjs",
28
+ "module": "./dist/index.mjs",
29
+ "types": "./dist/index.d.mts",
21
30
  "exports": {
22
31
  ".": {
23
32
  "source": "./src/index.ts",
@@ -32,15 +41,6 @@
32
41
  },
33
42
  "./package.json": "./package.json"
34
43
  },
35
- "main": "./dist/index.cjs",
36
- "module": "./dist/index.mjs",
37
- "types": "./dist/index.d.mts",
38
- "files": [
39
- "dist",
40
- "sanity.json",
41
- "src",
42
- "v2-incompatible.js"
43
- ],
44
44
  "scripts": {
45
45
  "build": "run-s build:verify build:bundle build:check",
46
46
  "build:bundle": "tsdown",
@@ -48,9 +48,7 @@
48
48
  "build:verify": "plugin-kit verify-package --silent",
49
49
  "dev": "vite dev --config dev/vite.config.ts",
50
50
  "dev:dist": "vite build --config dev/vite.config.ts && vite preview --config dev/vite.config.ts",
51
- "format": "prettier --write --cache --ignore-unknown .",
52
51
  "generate-types": "node src/lib/generate-types",
53
- "lint": "eslint .",
54
52
  "prepublishOnly": "node scripts/check-dist.mjs",
55
53
  "release": "release-it",
56
54
  "test": "vitest run",
@@ -62,60 +60,58 @@
62
60
  "test:watch": "vitest",
63
61
  "watch": "tsdown --watch"
64
62
  },
65
- "browserslist": "extends @sanity/browserslist-config",
66
63
  "dependencies": {
67
64
  "@iconify/react": "^6.0.2",
68
- "@iconify/utils": "^3.1.3",
69
- "@sanity/icons": "^3.7.4",
65
+ "@iconify/utils": "^3.1.7",
66
+ "@sanity/icons": "^5.2.1",
70
67
  "@sanity/incompatible-plugin": "^1.0.5",
71
- "@sanity/ui": "^3.2.0",
72
- "@tanstack/react-query": "^5.101.0",
68
+ "@tanstack/react-query": "^5.102.8",
73
69
  "change-case": "^5.4.4",
74
- "downshift": "^9.3.6",
70
+ "downshift": "^9.4.0",
75
71
  "ts-pattern": "^5.9.0",
76
72
  "use-debounce": "^10.1.1"
77
73
  },
78
74
  "devDependencies": {
79
- "@commitlint/cli": "^21.0.2",
80
- "@commitlint/config-conventional": "^21.0.2",
81
- "@iconify/json": "^2.2.486",
75
+ "@commitlint/cli": "^21.2.2",
76
+ "@commitlint/config-conventional": "^21.2.2",
77
+ "@iconify/json": "^2.2.526",
82
78
  "@iconify/types": "^2.0.0",
83
- "@playwright/test": "^1.61.0",
84
- "@release-it/conventional-changelog": "^11.0.1",
85
- "@sanity/plugin-kit": "^4.0.20",
86
- "@tanstack/eslint-plugin-query": "^5.101.0",
87
- "@tanstack/react-query-devtools": "^5.101.0",
88
- "@types/react": "^19.2.17",
89
- "@types/styled-components": "^5.1.36",
90
- "@vitejs/plugin-react": "^6.0.1",
91
- "@vitest/ui": "^4.1.9",
92
- "@waspeer/config": "^3.0.0",
93
- "eslint": "^10.1.0",
94
- "lefthook": "^2.1.9",
95
- "npm-run-all2": "^9.0.2",
96
- "prettier": "^3.8.4",
97
- "publint": "^0.3.18",
98
- "react": "^19.2.7",
99
- "react-dom": "^19.2.7",
100
- "react-is": "^19.2.7",
101
- "release-it": "^20.2.0",
102
- "rimraf": "^6.1.3",
103
- "sanity": "^6.0.0",
104
- "tsdown": "^0.22.2",
105
- "tsx": "^4.22.4",
106
- "typescript": "^6.0.2",
107
- "vite": "^8.0.2",
108
- "vitest": "^4.1.9"
79
+ "@playwright/test": "^1.63.0",
80
+ "@release-it/conventional-changelog": "^12.0.0",
81
+ "@sanity/pkg-utils": "^12.3.4",
82
+ "@sanity/plugin-kit": "^10.0.9",
83
+ "@sanity/ui": "^4.2.0",
84
+ "@tanstack/react-query-devtools": "^5.102.8",
85
+ "@types/react": "^19.3.0",
86
+ "@types/react-dom": "^19.3.0",
87
+ "@vitejs/plugin-react": "^6.1.1",
88
+ "@vitest/ui": "^5.0.0",
89
+ "lefthook": "^2.1.12",
90
+ "npm-run-all2": "^9.0.3",
91
+ "publint": "^0.3.24",
92
+ "react": "^19.3.0",
93
+ "react-dom": "^19.3.0",
94
+ "react-is": "^19.3.0",
95
+ "release-it": "^21.0.2",
96
+ "sanity": "^6.13.1",
97
+ "tsdown": "^0.23.0",
98
+ "tsx": "^4.23.13",
99
+ "typescript": "^7.0.2",
100
+ "vite": "^8.2.2",
101
+ "vite-plus": "^0.3.1",
102
+ "vitest": "^5.0.0"
109
103
  },
110
104
  "peerDependencies": {
105
+ "@sanity/ui": "^4.0.1",
111
106
  "react": "^19.2",
112
- "sanity": "^5.0.0-0 || ^6.0.0-0",
107
+ "sanity": "^6.9.2",
113
108
  "styled-components": "^6"
114
109
  },
115
- "packageManager": "pnpm@10.17.0",
110
+ "browserslist": "extends @sanity/browserslist-config",
116
111
  "engines": {
117
112
  "node": ">=22.12"
118
113
  },
114
+ "packageManager": "pnpm@10.17.0",
119
115
  "pnpm": {
120
116
  "onlyBuiltDependencies": [
121
117
  "esbuild",
@@ -123,33 +119,30 @@
123
119
  "unrs-resolver"
124
120
  ],
125
121
  "overrides": {
126
- "@babel/core@<7.29.6": ">=7.29.6",
127
- "@isaacs/brace-expansion@<5.0.1": ">=5.0.1",
128
- "@typescript-eslint/utils": "^8.61.1",
129
- "brace-expansion@>=4.0.0 <5.0.6": ">=5.0.6",
130
122
  "brace-expansion@<2.0.3": ">=2.0.3",
131
- "esbuild@<0.28.1": ">=0.28.1",
132
- "follow-redirects@<1.16.0": ">=1.16.0",
133
- "lodash@<4.17.23": ">=4.17.23",
134
- "micromatch@<4.0.8": ">=4.0.8",
135
123
  "minimatch@<10.2.3": ">=10.2.3",
136
- "picomatch@<4.0.4": ">=4.0.4",
137
- "postcss@<8.5.18": ">=8.5.18",
138
- "prismjs@<1.30.0": ">=1.30.0",
139
- "rollup@<4.59.0": ">=4.59.0",
140
- "serialize-javascript@<7.0.5": ">=7.0.5",
141
- "shell-quote@<1.8.4": ">=1.8.4",
142
- "tmp@<0.2.6": ">=0.2.6",
143
- "uuid@>=11.0.0 <11.1.1": ">=11.1.1"
124
+ "picomatch@<4.0.4": ">=4.0.4"
125
+ },
126
+ "peerDependencyRules": {
127
+ "allowAny": [
128
+ "vite",
129
+ "vitest"
130
+ ],
131
+ "allowedVersions": {
132
+ "vite": "*",
133
+ "vitest": "*"
134
+ }
144
135
  }
145
136
  },
146
137
  "sanityPlugin": {
147
138
  "verifyPackage": {
148
- "scripts": false,
149
- "eslintImports": false,
139
+ "bannedFiles": false,
140
+ "esmOnly": false,
150
141
  "nodeEngine": false,
142
+ "oxfmt": false,
143
+ "oxlint": false,
151
144
  "pkg-utils": false,
152
- "rollupConfig": false,
145
+ "scripts": false,
153
146
  "tsconfig": false
154
147
  }
155
148
  }
@@ -1,4 +1,5 @@
1
- import { Popover, useToast } from '@sanity/ui';
1
+ import { Popover } from '@sanity/ui/popover';
2
+ import { useToast } from '@sanity/ui/toast';
2
3
  import { useCombobox } from 'downshift';
3
4
  import { memo, useCallback, useEffect, useId, useRef } from 'react';
4
5
  import type { ObjectInputProps } from 'sanity';
@@ -1,4 +1,4 @@
1
- import { TrashIcon } from '@sanity/icons';
1
+ import { TrashIcon } from '@sanity/icons/Trash';
2
2
  import { Button, Card } from '@sanity/ui';
3
3
 
4
4
  // ------------ //
@@ -36,7 +36,7 @@ export const IconifyInput = memo(function IconifyInput(props: IconifyInputProps)
36
36
  return (
37
37
  <QueryClientProvider>
38
38
  <ThemeProvider theme={theme}>
39
- <Stack space={2}>
39
+ <Stack gap={2}>
40
40
  <IconifyCombobox
41
41
  selectedIcon={selectedIcon}
42
42
  onSelect={handleSelect}
package/src/lib/api.ts CHANGED
@@ -44,7 +44,6 @@ export function useSearch({ collections }: { collections: string[] | null }) {
44
44
  [setDebouncedTerm],
45
45
  );
46
46
 
47
- // eslint-disable-next-line @tanstack/query/exhaustive-deps -- queryClient from useQueryClient() is a stable reference, not a query dependency
48
47
  const { isLoading, isError, error, data, isPlaceholderData } = useQuery<string[], Error>({
49
48
  queryKey: ['search', collections, debouncedTerm],
50
49
  queryFn: async ({ signal }) => {
@@ -1 +1 @@
1
- export type IconPrefix = 'material-symbols' | 'material-symbols-light' | 'ic' | 'mdi' | 'mdi-light' | 'line-md' | 'solar' | 'tabler' | 'boxicons' | 'mingcute' | 'ri' | 'mynaui' | 'iconamoon' | 'iconoir' | 'lucide' | 'lucide-lab' | 'uil' | 'tdesign' | 'si' | 'majesticons' | 'gg' | 'flowbite' | 'basil' | 'pixelarticons' | 'pixel' | 'akar-icons' | 'ci' | 'proicons' | 'typcn' | 'meteor-icons' | 'prime' | 'circum' | 'fe' | 'eos-icons' | 'bitcoin-icons' | 'humbleicons' | 'uim' | 'uit' | 'uis' | 'gridicons' | 'mi' | 'cuida' | 'weui' | 'duo-icons' | 'svg-spinners' | 'hugeicons' | 'lets-icons' | 'streamline-ultimate' | 'streamline-plump' | 'streamline-sharp' | 'mage' | 'stash' | 'lineicons' | 'wordpress' | 'icon-park-outline' | 'icon-park-solid' | 'icon-park-twotone' | 'jam' | 'streamline-cyber' | 'guidance' | 'carbon' | 'ion' | 'famicons' | 'ant-design' | 'lsicon' | 'gravity-ui' | 'cil' | 'at-icons' | 'ep' | 'charm' | 'quill' | 'bytesize' | 'bi' | 'streamline-pixel' | 'streamline-block' | 'rivet-icons' | 'nimbus' | 'formkit' | 'fluent' | 'ph' | 'glyphs' | 'glyphs-poly' | 'teenyicons' | 'clarity' | 'streamline-freehand' | 'ix' | 'octicon' | 'memory' | 'system-uicons' | 'radix-icons' | 'zondicons' | 'uiw' | 'codex' | 'ei' | 'heroicons' | 'sidekickicons' | 'pepicons-pop' | 'pepicons-print' | 'pepicons-pencil' | 'f7' | 'pajamas' | 'garden' | 'streamline' | 'streamline-flex' | 'fa7-solid' | 'fa7-regular' | 'picon' | 'ooui' | 'oui' | 'nrk' | 'dinkie-icons' | 'qlementine-icons' | 'streamline-ultimate-color' | 'streamline-plump-color' | 'streamline-freehand-color' | 'streamline-kameleon-color' | 'streamline-stickies-color' | 'fluent-color' | 'streamline-color' | 'streamline-flex-color' | 'streamline-sharp-color' | 'streamline-cyber-color' | 'icon-park' | 'marketeq' | 'vscode-icons' | 'codicon' | 'material-icon-theme' | 'file-icons' | 'devicon' | 'devicon-plain' | 'catppuccin' | 'skill-icons' | 'gcp' | 'unjs' | 'simple-icons' | 'logos' | 'streamline-logos' | 'cib' | 'fa7-brands' | 'bxl' | 'nonicons' | 'arcticons' | 'cbi' | 'brandico' | 'entypo-social' | 'token' | 'token-branded' | 'cryptocurrency' | 'cryptocurrency-color' | 'openmoji' | 'twemoji' | 'noto' | 'fluent-emoji-flat' | 'fluent-emoji-high-contrast' | 'noto-v1' | 'emojione' | 'emojione-monotone' | 'emojione-v1' | 'fxemoji' | 'streamline-emojis' | 'circle-flags' | 'flag' | 'flagpack' | 'cif' | 'pinhead' | 'roentgen' | 'maki' | 'temaki' | 'gis' | 'map' | 'geo' | 'game-icons' | 'fad' | 'academicons' | 'wi' | 'meteocons' | 'healthicons' | 'medical-icon' | 'covid' | 'ginetex' | 'la' | 'eva' | 'dashicons' | 'flat-color-icons' | 'entypo' | 'foundation' | 'raphael' | 'icons8' | 'iwwa' | 'gala' | 'heroicons-outline' | 'heroicons-solid' | 'bx' | 'bxs' | 'fa6-solid' | 'fa6-regular' | 'fa6-brands' | 'fa-solid' | 'fa-regular' | 'fa-brands' | 'fa' | 'fluent-mdl2' | 'fontisto' | 'icomoon-free' | 'subway' | 'oi' | 'wpf' | 'simple-line-icons' | 'et' | 'el' | 'vaadin' | 'grommet-icons' | 'whh' | 'si-glyph' | 'zmdi' | 'ls' | 'bpmn' | 'flat-ui' | 'vs' | 'topcoat' | 'il' | 'websymbol' | 'fontelico' | 'ps' | 'feather' | 'mono-icons' | 'pepicons' | 'fluent-emoji';
1
+ export type IconPrefix = 'material-symbols' | 'material-symbols-light' | 'ic' | 'mdi' | 'mdi-light' | 'line-md' | 'solar' | 'tabler' | 'iconmind' | 'boxicons' | 'mingcute' | 'keyline-icons' | 'ri' | 'mynaui' | 'griddy-icons' | 'iconamoon' | 'iconoir' | 'lucide' | 'lucide-lab' | 'uil' | 'tdesign' | 'si' | 'majesticons' | 'gg' | 'flowbite' | 'vadivam' | 'basil' | 'pixelarticons' | 'pixel' | 'akar-icons' | 'ci' | 'proicons' | 'typcn' | 'meteor-icons' | 'prime' | 'circum' | 'fe' | 'eos-icons' | 'bitcoin-icons' | 'humbleicons' | 'uim' | 'uit' | 'uis' | 'gridicons' | 'mi' | 'cuida' | 'weui' | 'duo-icons' | 'svg-spinners' | 'reicon' | 'hugeicons' | 'lets-icons' | 'streamline-ultimate' | 'streamline-plump' | 'streamline-sharp' | 'mage' | 'stash' | 'lineicons' | 'wordpress' | 'icon-park-outline' | 'icon-park-solid' | 'icon-park-twotone' | 'jam' | 'streamline-cyber' | 'guidance' | 'carbon' | 'ion' | 'famicons' | 'ant-design' | 'lsicon' | 'gravity-ui' | 'cil' | 'at-icons' | 'ep' | 'charm' | 'quill' | 'bytesize' | 'bi' | 'streamline-pixel' | 'streamline-block' | 'rivet-icons' | 'nimbus' | 'formkit' | 'fluent' | 'ph' | 'glyphs' | 'glyphs-poly' | 'teenyicons' | 'clarity' | 'streamline-freehand' | 'ix' | 'octicon' | 'memory' | 'system-uicons' | 'radix-icons' | 'zondicons' | 'uiw' | 'codex' | 'ei' | 'heroicons' | 'sidekickicons' | 'pepicons-pop' | 'pepicons-print' | 'pepicons-pencil' | 'f7' | 'pajamas' | 'garden' | 'streamline' | 'streamline-flex' | 'fa7-solid' | 'fa7-regular' | 'picon' | 'ooui' | 'oui' | 'nrk' | 'dinkie-icons' | 'qlementine-icons' | 'streamline-ultimate-color' | 'streamline-plump-color' | 'streamline-freehand-color' | 'streamline-kameleon-color' | 'streamline-stickies-color' | 'fluent-color' | 'streamline-color' | 'streamline-flex-color' | 'streamline-sharp-color' | 'streamline-cyber-color' | 'icon-park' | 'marketeq' | 'vscode-icons' | 'codicon' | 'material-icon-theme' | 'file-icons' | 'devicon' | 'devicon-plain' | 'catppuccin' | 'skill-icons' | 'gcp' | 'k8s' | 'unjs' | 'simple-icons' | 'logos' | 'streamline-logos' | 'cib' | 'fa7-brands' | 'bxl' | 'nonicons' | 'arcticons' | 'thesvg' | 'thesvg-color' | 'selfhst' | 'cbi' | 'brandico' | 'entypo-social' | 'token' | 'token-branded' | 'cryptocurrency' | 'cryptocurrency-color' | 'openmoji' | 'twemoji' | 'noto' | 'fluent-emoji-flat' | 'fluent-emoji-high-contrast' | 'noto-v1' | 'emojione' | 'emojione-monotone' | 'emojione-v1' | 'fxemoji' | 'streamline-emojis' | 'circle-flags' | 'flag' | 'flagpack' | 'cif' | 'pinhead' | 'roentgen' | 'maki' | 'temaki' | 'gis' | 'map' | 'geo' | 'osmic' | 'game-icons' | 'fad' | 'academicons' | 'wi' | 'meteocons' | 'healthicons' | 'medical-icon' | 'covid' | 'ginetex' | 'la' | 'eva' | 'dashicons' | 'flat-color-icons' | 'entypo' | 'foundation' | 'raphael' | 'icons8' | 'iwwa' | 'gala' | 'heroicons-outline' | 'heroicons-solid' | 'bx' | 'bxs' | 'fa6-solid' | 'fa6-regular' | 'fa6-brands' | 'fa-solid' | 'fa-regular' | 'fa-brands' | 'fa' | 'fluent-mdl2' | 'fontisto' | 'icomoon-free' | 'subway' | 'oi' | 'wpf' | 'simple-line-icons' | 'et' | 'el' | 'vaadin' | 'grommet-icons' | 'whh' | 'si-glyph' | 'zmdi' | 'ls' | 'bpmn' | 'flat-ui' | 'vs' | 'topcoat' | 'il' | 'websymbol' | 'fontelico' | 'ps' | 'feather' | 'mono-icons' | 'pepicons' | 'fluent-emoji';