@cratis/components 4.23.1 → 4.24.0

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.
Files changed (156) hide show
  1. package/compat-manifest.json +11 -11
  2. package/dist/esm/IconPicker/IconPicker.d.ts +57 -0
  3. package/dist/esm/IconPicker/IconPicker.d.ts.map +1 -0
  4. package/dist/esm/IconPicker/IconPicker.js +59 -0
  5. package/dist/esm/IconPicker/IconPicker.js.map +1 -0
  6. package/dist/esm/IconPicker/IconPickerAllowed.d.ts +8 -0
  7. package/dist/esm/IconPicker/IconPickerAllowed.d.ts.map +1 -0
  8. package/dist/esm/IconPicker/IconPickerAllowed.js +4 -0
  9. package/dist/esm/IconPicker/IconPickerAllowed.js.map +1 -0
  10. package/dist/esm/IconPicker/IconPickerBrowser.d.ts +32 -0
  11. package/dist/esm/IconPicker/IconPickerBrowser.d.ts.map +1 -0
  12. package/dist/esm/IconPicker/IconPickerBrowser.js +4 -0
  13. package/dist/esm/IconPicker/IconPickerBrowser.js.map +1 -0
  14. package/dist/esm/IconPicker/IconPickerBrowserGroup.d.ts +9 -0
  15. package/dist/esm/IconPicker/IconPickerBrowserGroup.d.ts.map +1 -0
  16. package/dist/esm/IconPicker/IconPickerBrowserGroup.js +4 -0
  17. package/dist/esm/IconPicker/IconPickerBrowserGroup.js.map +1 -0
  18. package/dist/esm/IconPicker/IconPickerCatalog.d.ts +19 -0
  19. package/dist/esm/IconPicker/IconPickerCatalog.d.ts.map +1 -0
  20. package/dist/esm/IconPicker/IconPickerCatalog.js +4 -0
  21. package/dist/esm/IconPicker/IconPickerCatalog.js.map +1 -0
  22. package/dist/esm/IconPicker/IconPickerCatalogStatus.d.ts +3 -0
  23. package/dist/esm/IconPicker/IconPickerCatalogStatus.d.ts.map +1 -0
  24. package/dist/esm/IconPicker/IconPickerCatalogStatus.js +4 -0
  25. package/dist/esm/IconPicker/IconPickerCatalogStatus.js.map +1 -0
  26. package/dist/esm/IconPicker/IconPickerCategoryFilter.d.ts +25 -0
  27. package/dist/esm/IconPicker/IconPickerCategoryFilter.d.ts.map +1 -0
  28. package/dist/esm/IconPicker/IconPickerCategoryFilter.js +23 -0
  29. package/dist/esm/IconPicker/IconPickerCategoryFilter.js.map +1 -0
  30. package/dist/esm/IconPicker/IconPickerEntry.d.ts +25 -0
  31. package/dist/esm/IconPicker/IconPickerEntry.d.ts.map +1 -0
  32. package/dist/esm/IconPicker/IconPickerEntry.js +4 -0
  33. package/dist/esm/IconPicker/IconPickerEntry.js.map +1 -0
  34. package/dist/esm/IconPicker/IconPickerGrid.d.ts +29 -0
  35. package/dist/esm/IconPicker/IconPickerGrid.d.ts.map +1 -0
  36. package/dist/esm/IconPicker/IconPickerGrid.js +24 -0
  37. package/dist/esm/IconPicker/IconPickerGrid.js.map +1 -0
  38. package/dist/esm/IconPicker/IconPickerIndexEntry.d.ts +11 -0
  39. package/dist/esm/IconPicker/IconPickerIndexEntry.d.ts.map +1 -0
  40. package/dist/esm/IconPicker/IconPickerIndexEntry.js +4 -0
  41. package/dist/esm/IconPicker/IconPickerIndexEntry.js.map +1 -0
  42. package/dist/esm/IconPicker/IconPickerLabels.d.ts +76 -0
  43. package/dist/esm/IconPicker/IconPickerLabels.d.ts.map +1 -0
  44. package/dist/esm/IconPicker/IconPickerLabels.js +4 -0
  45. package/dist/esm/IconPicker/IconPickerLabels.js.map +1 -0
  46. package/dist/esm/IconPicker/IconPickerLibrary.d.ts +12 -0
  47. package/dist/esm/IconPicker/IconPickerLibrary.d.ts.map +1 -0
  48. package/dist/esm/IconPicker/IconPickerLibrary.js +4 -0
  49. package/dist/esm/IconPicker/IconPickerLibrary.js.map +1 -0
  50. package/dist/esm/IconPicker/IconPickerLibraryFilter.d.ts +20 -0
  51. package/dist/esm/IconPicker/IconPickerLibraryFilter.d.ts.map +1 -0
  52. package/dist/esm/IconPicker/IconPickerLibraryFilter.js +7 -0
  53. package/dist/esm/IconPicker/IconPickerLibraryFilter.js.map +1 -0
  54. package/dist/esm/IconPicker/IconPickerParts.d.ts +65 -0
  55. package/dist/esm/IconPicker/IconPickerParts.d.ts.map +1 -0
  56. package/dist/esm/IconPicker/IconPickerParts.js +4 -0
  57. package/dist/esm/IconPicker/IconPickerParts.js.map +1 -0
  58. package/dist/esm/IconPicker/IconPickerPlacement.d.ts +3 -0
  59. package/dist/esm/IconPicker/IconPickerPlacement.d.ts.map +1 -0
  60. package/dist/esm/IconPicker/IconPickerPlacement.js +4 -0
  61. package/dist/esm/IconPicker/IconPickerPlacement.js.map +1 -0
  62. package/dist/esm/IconPicker/IconPickerPopout.d.ts +32 -0
  63. package/dist/esm/IconPicker/IconPickerPopout.d.ts.map +1 -0
  64. package/dist/esm/IconPicker/IconPickerPopout.js +41 -0
  65. package/dist/esm/IconPicker/IconPickerPopout.js.map +1 -0
  66. package/dist/esm/IconPicker/IconPickerResults.d.ts +31 -0
  67. package/dist/esm/IconPicker/IconPickerResults.d.ts.map +1 -0
  68. package/dist/esm/IconPicker/IconPickerResults.js +21 -0
  69. package/dist/esm/IconPicker/IconPickerResults.js.map +1 -0
  70. package/dist/esm/IconPicker/IconPickerSearch.d.ts +21 -0
  71. package/dist/esm/IconPicker/IconPickerSearch.d.ts.map +1 -0
  72. package/dist/esm/IconPicker/IconPickerSearch.js +21 -0
  73. package/dist/esm/IconPicker/IconPickerSearch.js.map +1 -0
  74. package/dist/esm/IconPicker/IconPickerSummary.d.ts +12 -0
  75. package/dist/esm/IconPicker/IconPickerSummary.d.ts.map +1 -0
  76. package/dist/esm/IconPicker/IconPickerSummary.js +4 -0
  77. package/dist/esm/IconPicker/IconPickerSummary.js.map +1 -0
  78. package/dist/esm/IconPicker/IconPickerTile.d.ts +36 -0
  79. package/dist/esm/IconPicker/IconPickerTile.d.ts.map +1 -0
  80. package/dist/esm/IconPicker/IconPickerTile.js +22 -0
  81. package/dist/esm/IconPicker/IconPickerTile.js.map +1 -0
  82. package/dist/esm/IconPicker/IconPickerTrigger.d.ts +39 -0
  83. package/dist/esm/IconPicker/IconPickerTrigger.d.ts.map +1 -0
  84. package/dist/esm/IconPicker/IconPickerTrigger.js +13 -0
  85. package/dist/esm/IconPicker/IconPickerTrigger.js.map +1 -0
  86. package/dist/esm/IconPicker/IconPickerValue.d.ts +16 -0
  87. package/dist/esm/IconPicker/IconPickerValue.d.ts.map +1 -0
  88. package/dist/esm/IconPicker/IconPickerValue.js +4 -0
  89. package/dist/esm/IconPicker/IconPickerValue.js.map +1 -0
  90. package/dist/esm/IconPicker/createIconPickerIndex.d.ts +10 -0
  91. package/dist/esm/IconPicker/createIconPickerIndex.d.ts.map +1 -0
  92. package/dist/esm/IconPicker/createIconPickerIndex.js +21 -0
  93. package/dist/esm/IconPicker/createIconPickerIndex.js.map +1 -0
  94. package/dist/esm/IconPicker/defaultIconPickerLabels.d.ts +4 -0
  95. package/dist/esm/IconPicker/defaultIconPickerLabels.d.ts.map +1 -0
  96. package/dist/esm/IconPicker/defaultIconPickerLabels.js +35 -0
  97. package/dist/esm/IconPicker/defaultIconPickerLabels.js.map +1 -0
  98. package/dist/esm/IconPicker/formatIconPickerIdentity.d.ts +8 -0
  99. package/dist/esm/IconPicker/formatIconPickerIdentity.d.ts.map +1 -0
  100. package/dist/esm/IconPicker/formatIconPickerIdentity.js +4 -0
  101. package/dist/esm/IconPicker/formatIconPickerIdentity.js.map +1 -0
  102. package/dist/esm/IconPicker/groupIconPickerByCategory.d.ts +10 -0
  103. package/dist/esm/IconPicker/groupIconPickerByCategory.d.ts.map +1 -0
  104. package/dist/esm/IconPicker/groupIconPickerByCategory.js +17 -0
  105. package/dist/esm/IconPicker/groupIconPickerByCategory.js.map +1 -0
  106. package/dist/esm/IconPicker/iconPickerIdentity.d.ts +8 -0
  107. package/dist/esm/IconPicker/iconPickerIdentity.d.ts.map +1 -0
  108. package/dist/esm/IconPicker/iconPickerIdentity.js +4 -0
  109. package/dist/esm/IconPicker/iconPickerIdentity.js.map +1 -0
  110. package/dist/esm/IconPicker/index.d.ts +19 -0
  111. package/dist/esm/IconPicker/index.d.ts.map +1 -0
  112. package/dist/esm/IconPicker/index.js +8 -0
  113. package/dist/esm/IconPicker/index.js.map +1 -0
  114. package/dist/esm/IconPicker/isIconPickerAllowed.d.ts +10 -0
  115. package/dist/esm/IconPicker/isIconPickerAllowed.d.ts.map +1 -0
  116. package/dist/esm/IconPicker/isIconPickerAllowed.js +12 -0
  117. package/dist/esm/IconPicker/isIconPickerAllowed.js.map +1 -0
  118. package/dist/esm/IconPicker/isSameIconPickerValue.d.ts +10 -0
  119. package/dist/esm/IconPicker/isSameIconPickerValue.d.ts.map +1 -0
  120. package/dist/esm/IconPicker/isSameIconPickerValue.js +4 -0
  121. package/dist/esm/IconPicker/isSameIconPickerValue.js.map +1 -0
  122. package/dist/esm/IconPicker/searchIconPickerIndex.d.ts +9 -0
  123. package/dist/esm/IconPicker/searchIconPickerIndex.d.ts.map +1 -0
  124. package/dist/esm/IconPicker/searchIconPickerIndex.js +9 -0
  125. package/dist/esm/IconPicker/searchIconPickerIndex.js.map +1 -0
  126. package/dist/esm/IconPicker/toIconPickerValue.d.ts +9 -0
  127. package/dist/esm/IconPicker/toIconPickerValue.d.ts.map +1 -0
  128. package/dist/esm/IconPicker/toIconPickerValue.js +6 -0
  129. package/dist/esm/IconPicker/toIconPickerValue.js.map +1 -0
  130. package/dist/esm/IconPicker/useGridColumns.d.ts +12 -0
  131. package/dist/esm/IconPicker/useGridColumns.d.ts.map +1 -0
  132. package/dist/esm/IconPicker/useGridColumns.js +26 -0
  133. package/dist/esm/IconPicker/useGridColumns.js.map +1 -0
  134. package/dist/esm/IconPicker/useIconPickerBrowser.d.ts +10 -0
  135. package/dist/esm/IconPicker/useIconPickerBrowser.d.ts.map +1 -0
  136. package/dist/esm/IconPicker/useIconPickerBrowser.js +45 -0
  137. package/dist/esm/IconPicker/useIconPickerBrowser.js.map +1 -0
  138. package/dist/esm/IconPicker/useIsVisible.d.ts +12 -0
  139. package/dist/esm/IconPicker/useIsVisible.d.ts.map +1 -0
  140. package/dist/esm/IconPicker/useIsVisible.js +23 -0
  141. package/dist/esm/IconPicker/useIsVisible.js.map +1 -0
  142. package/dist/esm/IconPicker/useNarrowViewport.d.ts +9 -0
  143. package/dist/esm/IconPicker/useNarrowViewport.d.ts.map +1 -0
  144. package/dist/esm/IconPicker/useNarrowViewport.js +15 -0
  145. package/dist/esm/IconPicker/useNarrowViewport.js.map +1 -0
  146. package/dist/esm/IconPicker/useRovingFocus.d.ts +29 -0
  147. package/dist/esm/IconPicker/useRovingFocus.d.ts.map +1 -0
  148. package/dist/esm/IconPicker/useRovingFocus.js +70 -0
  149. package/dist/esm/IconPicker/useRovingFocus.js.map +1 -0
  150. package/dist/esm/styles.IconPicker.css +459 -0
  151. package/dist/esm/styles.css +456 -0
  152. package/dist/esm/types/parts.d.ts +28 -0
  153. package/dist/esm/types/parts.d.ts.map +1 -1
  154. package/dist/esm/types/parts.js +28 -0
  155. package/dist/esm/types/parts.js.map +1 -1
  156. package/package.json +6 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconPickerSummary.d.ts","sourceRoot":"","sources":["../../../IconPicker/IconPickerSummary.ts"],"names":[],"mappings":"AAGA,kFAAkF;AAClF,MAAM,WAAW,iBAAiB;IAC9B,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IAEd,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IAEd,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,4 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+ export {};
4
+ //# sourceMappingURL=IconPickerSummary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconPickerSummary.js","sourceRoot":"","sources":["../../../IconPicker/IconPickerSummary.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qGAAqG","sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/** What the popout is currently showing, for {@link IconPickerLabels.summary}. */\nexport interface IconPickerSummary {\n /** How many icons match. */\n count: number;\n\n /** The active search, or an empty string. */\n query: string;\n\n /** The name of the active category filter, if any. */\n category?: string;\n\n /** The name of the active library filter, if any. */\n library?: string;\n}\n"]}
@@ -0,0 +1,36 @@
1
+ import type { IconPickerEntry } from './IconPickerEntry.js';
2
+ import type { IconPickerParts } from './IconPickerParts.js';
3
+ /** Props for {@link IconPickerTile}. */
4
+ export interface IconPickerTileProps {
5
+ /** The icon the tile stands for. */
6
+ entry: IconPickerEntry;
7
+ /** Whether this icon is the current selection. */
8
+ selected: boolean;
9
+ /** Whether the field accepts this icon. An icon it does not accept is shown but cannot be chosen. */
10
+ allowed: boolean;
11
+ /** The name of the icon's library, shown when several libraries are offered. */
12
+ providerName?: string;
13
+ /** The text marking a deprecated icon. */
14
+ deprecatedLabel: string;
15
+ /** The text saying why an icon cannot be chosen. */
16
+ notAllowedLabel: string;
17
+ /** Picks the icon. */
18
+ onChoose: (entry: IconPickerEntry) => void;
19
+ /** The roving-focus props: tab stop, index marker and focus handler. */
20
+ roving: {
21
+ tabIndex: number;
22
+ onFocus: () => void;
23
+ [attribute: `data-${string}`]: number;
24
+ };
25
+ /** Pass-through attributes for the tile and its inner parts. */
26
+ parts?: Pick<IconPickerParts, 'tile' | 'tileIcon' | 'tileName' | 'provider'>;
27
+ }
28
+ /**
29
+ * One selectable icon: a bordered tile with the glyph centered in a fixed icon area and the name
30
+ * always visible and centered beneath it. The glyph is only drawn once the tile nears the viewport.
31
+ *
32
+ * Selection is shown by a check mark and a heavier border, and focus by an offset outline, so neither
33
+ * depends on color alone. An icon the field does not accept stays focusable and explains itself.
34
+ */
35
+ export declare const IconPickerTile: ({ entry, selected, allowed, providerName, deprecatedLabel, notAllowedLabel, onChoose, roving, parts, }: IconPickerTileProps) => import("react").JSX.Element;
36
+ //# sourceMappingURL=IconPickerTile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconPickerTile.d.ts","sourceRoot":"","sources":["../../../IconPicker/IconPickerTile.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAmB,CAAC;AAGzD,wCAAwC;AACxC,MAAM,WAAW,mBAAmB;IAChC,oCAAoC;IACpC,KAAK,EAAE,eAAe,CAAC;IAEvB,kDAAkD;IAClD,QAAQ,EAAE,OAAO,CAAC;IAElB,qGAAqG;IACrG,OAAO,EAAE,OAAO,CAAC;IAEjB,gFAAgF;IAChF,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,0CAA0C;IAC1C,eAAe,EAAE,MAAM,CAAC;IAExB,oDAAoD;IACpD,eAAe,EAAE,MAAM,CAAC;IAExB,sBAAsB;IACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAE3C,wEAAwE;IACxE,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,IAAI,CAAC;QAAC,CAAC,SAAS,EAAE,QAAQ,MAAM,EAAE,GAAG,MAAM,CAAA;KAAE,CAAC;IAEzF,gEAAgE;IAChE,KAAK,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC,CAAC;CAChF;AAED;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,2GAUxB,mBAAmB,gCAyDrB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { FaCheck } from 'react-icons/fa6';
3
+ import { classNames } from '../ClassNames/classNames.js';
4
+ import { useIsVisible } from './useIsVisible.js';
5
+
6
+ const IconPickerTile = ({ entry, selected, allowed, providerName, deprecatedLabel, notAllowedLabel, onChoose, roving, parts, }) => {
7
+ const { ref, isVisible } = useIsVisible();
8
+ const choose = () => {
9
+ if (allowed)
10
+ onChoose(entry);
11
+ };
12
+ const onKeyDown = (event) => {
13
+ if (event.key !== 'Enter' && event.key !== ' ')
14
+ return;
15
+ event.preventDefault();
16
+ choose();
17
+ };
18
+ return (jsxs("div", { ...parts?.tile, ...roving, ref: ref, role: 'option', "aria-selected": selected, "aria-disabled": !allowed || undefined, title: entry.name, className: classNames('cratis-icon-picker__tile', parts?.tile?.className), "data-cratis-part": 'tile', "data-selected": selected || undefined, "data-disabled": !allowed || undefined, "data-deprecated": entry.deprecated || undefined, onClick: choose, onKeyDown: onKeyDown, children: [jsx("span", { ...parts?.tileIcon, "aria-hidden": 'true', className: classNames('cratis-icon-picker__tile-icon', parts?.tileIcon?.className), "data-cratis-part": 'tileIcon', children: isVisible ? entry.renderPreview() : null }), jsx("span", { ...parts?.tileName, className: classNames('cratis-icon-picker__tile-name', parts?.tileName?.className), "data-cratis-part": 'tileName', children: entry.name }), providerName !== undefined && (jsx("span", { ...parts?.provider, className: classNames('cratis-icon-picker__provider', parts?.provider?.className), "data-cratis-part": 'provider', children: providerName })), entry.deprecated && jsx("span", { className: 'cratis-icon-picker__flag', children: deprecatedLabel }), !allowed && jsx("span", { className: 'cratis-icon-picker__flag', children: notAllowedLabel }), selected && jsx(FaCheck, { className: 'cratis-icon-picker__check', "aria-hidden": 'true', focusable: 'false' })] }));
19
+ };
20
+
21
+ export { IconPickerTile };
22
+ //# sourceMappingURL=IconPickerTile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconPickerTile.js","sources":["../../../IconPicker/IconPickerTile.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport type { KeyboardEvent } from 'react';\nimport { FaCheck } from 'react-icons/fa6';\nimport { classNames } from '../ClassNames/classNames';\nimport type { IconPickerEntry } from './IconPickerEntry';\nimport type { IconPickerParts } from './IconPickerParts';\nimport { useIsVisible } from './useIsVisible';\n\n/** Props for {@link IconPickerTile}. */\nexport interface IconPickerTileProps {\n /** The icon the tile stands for. */\n entry: IconPickerEntry;\n\n /** Whether this icon is the current selection. */\n selected: boolean;\n\n /** Whether the field accepts this icon. An icon it does not accept is shown but cannot be chosen. */\n allowed: boolean;\n\n /** The name of the icon's library, shown when several libraries are offered. */\n providerName?: string;\n\n /** The text marking a deprecated icon. */\n deprecatedLabel: string;\n\n /** The text saying why an icon cannot be chosen. */\n notAllowedLabel: string;\n\n /** Picks the icon. */\n onChoose: (entry: IconPickerEntry) => void;\n\n /** The roving-focus props: tab stop, index marker and focus handler. */\n roving: { tabIndex: number; onFocus: () => void; [attribute: `data-${string}`]: number };\n\n /** Pass-through attributes for the tile and its inner parts. */\n parts?: Pick<IconPickerParts, 'tile' | 'tileIcon' | 'tileName' | 'provider'>;\n}\n\n/**\n * One selectable icon: a bordered tile with the glyph centered in a fixed icon area and the name\n * always visible and centered beneath it. The glyph is only drawn once the tile nears the viewport.\n *\n * Selection is shown by a check mark and a heavier border, and focus by an offset outline, so neither\n * depends on color alone. An icon the field does not accept stays focusable and explains itself.\n */\nexport const IconPickerTile = ({\n entry,\n selected,\n allowed,\n providerName,\n deprecatedLabel,\n notAllowedLabel,\n onChoose,\n roving,\n parts,\n}: IconPickerTileProps) => {\n const { ref, isVisible } = useIsVisible();\n const choose = () => {\n if (allowed) onChoose(entry);\n };\n const onKeyDown = (event: KeyboardEvent<HTMLElement>) => {\n if (event.key !== 'Enter' && event.key !== ' ') return;\n event.preventDefault();\n choose();\n };\n\n return (\n <div\n {...parts?.tile}\n {...roving}\n ref={ref}\n role='option'\n aria-selected={selected}\n aria-disabled={!allowed || undefined}\n title={entry.name}\n className={classNames('cratis-icon-picker__tile', parts?.tile?.className)}\n data-cratis-part='tile'\n data-selected={selected || undefined}\n data-disabled={!allowed || undefined}\n data-deprecated={entry.deprecated || undefined}\n onClick={choose}\n onKeyDown={onKeyDown}\n >\n <span\n {...parts?.tileIcon}\n aria-hidden='true'\n className={classNames('cratis-icon-picker__tile-icon', parts?.tileIcon?.className)}\n data-cratis-part='tileIcon'\n >\n {isVisible ? entry.renderPreview() : null}\n </span>\n <span\n {...parts?.tileName}\n className={classNames('cratis-icon-picker__tile-name', parts?.tileName?.className)}\n data-cratis-part='tileName'\n >\n {entry.name}\n </span>\n {providerName !== undefined && (\n <span\n {...parts?.provider}\n className={classNames('cratis-icon-picker__provider', parts?.provider?.className)}\n data-cratis-part='provider'\n >\n {providerName}\n </span>\n )}\n {entry.deprecated && <span className='cratis-icon-picker__flag'>{deprecatedLabel}</span>}\n {!allowed && <span className='cratis-icon-picker__flag'>{notAllowedLabel}</span>}\n {selected && <FaCheck className='cratis-icon-picker__check' aria-hidden='true' focusable='false' />}\n </div>\n );\n};\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;AA+CO,MAAM,cAAc,GAAG,CAAC,EAC3B,KAAK,EACL,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,eAAe,EACf,eAAe,EACf,QAAQ,EACR,MAAM,EACN,KAAK,GACa,KAAI;IACtB,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,YAAY,EAAE;IACzC,MAAM,MAAM,GAAG,MAAK;AAChB,QAAA,IAAI,OAAO;YAAE,QAAQ,CAAC,KAAK,CAAC;AAChC,IAAA,CAAC;AACD,IAAA,MAAM,SAAS,GAAG,CAAC,KAAiC,KAAI;QACpD,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG;YAAE;QAChD,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,MAAM,EAAE;AACZ,IAAA,CAAC;IAED,QACIA,iBACQ,KAAK,EAAE,IAAI,EAAA,GACX,MAAM,EACV,GAAG,EAAE,GAAG,EACR,IAAI,EAAC,QAAQ,EAAA,eAAA,EACE,QAAQ,EAAA,eAAA,EACR,CAAC,OAAO,IAAI,SAAS,EACpC,KAAK,EAAE,KAAK,CAAC,IAAI,EACjB,SAAS,EAAE,UAAU,CAAC,0BAA0B,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,sBACxD,MAAM,EAAA,eAAA,EACR,QAAQ,IAAI,SAAS,EAAA,eAAA,EACrB,CAAC,OAAO,IAAI,SAAS,EAAA,iBAAA,EACnB,KAAK,CAAC,UAAU,IAAI,SAAS,EAC9C,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,SAAS,aAEpBC,GAAA,CAAA,MAAA,EAAA,EAAA,GACQ,KAAK,EAAE,QAAQ,EAAA,aAAA,EACP,MAAM,EAClB,SAAS,EAAE,UAAU,CAAC,+BAA+B,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAA,kBAAA,EACjE,UAAU,YAE1B,SAAS,GAAG,KAAK,CAAC,aAAa,EAAE,GAAG,IAAI,GACtC,EACPA,GAAA,CAAA,MAAA,EAAA,EAAA,GACQ,KAAK,EAAE,QAAQ,EACnB,SAAS,EAAE,UAAU,CAAC,+BAA+B,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAA,kBAAA,EACjE,UAAU,EAAA,QAAA,EAE1B,KAAK,CAAC,IAAI,GACR,EACN,YAAY,KAAK,SAAS,KACvBA,GAAA,CAAA,MAAA,EAAA,EAAA,GACQ,KAAK,EAAE,QAAQ,EACnB,SAAS,EAAE,UAAU,CAAC,8BAA8B,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAA,kBAAA,EAChE,UAAU,EAAA,QAAA,EAE1B,YAAY,GACV,CACV,EACA,KAAK,CAAC,UAAU,IAAIA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,0BAA0B,EAAA,QAAA,EAAE,eAAe,EAAA,CAAQ,EACvF,CAAC,OAAO,IAAIA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,0BAA0B,YAAE,eAAe,EAAA,CAAQ,EAC/E,QAAQ,IAAIA,GAAA,CAAC,OAAO,EAAA,EAAC,SAAS,EAAC,2BAA2B,EAAA,aAAA,EAAa,MAAM,EAAC,SAAS,EAAC,OAAO,EAAA,CAAG,CAAA,EAAA,CACjG;AAEd;;"}
@@ -0,0 +1,39 @@
1
+ import type { IconPickerEntry } from './IconPickerEntry.js';
2
+ import type { IconPickerParts } from './IconPickerParts.js';
3
+ /** Props for {@link IconPickerTrigger}. */
4
+ export interface IconPickerTriggerProps {
5
+ /** The selected icon, when the catalog holds it. */
6
+ entry: IconPickerEntry | undefined;
7
+ /** What names the selection when the catalog does not hold it, or the placeholder when nothing is selected. */
8
+ fallbackName: string;
9
+ /** The name of the selected icon's library, shown when several libraries are offered. */
10
+ providerName?: string;
11
+ /** Whether the selection is absent from a complete catalog. */
12
+ missing: boolean;
13
+ /** Whether the popout is open. */
14
+ open: boolean;
15
+ /** Whether the control is disabled. */
16
+ disabled: boolean;
17
+ /** Whether the control shows its value without letting it change. */
18
+ readOnly: boolean;
19
+ /** Whether the control is marked invalid. */
20
+ invalid: boolean;
21
+ /** The element id of the trigger. */
22
+ id?: string;
23
+ /** The element id of the name, which the trigger's accessible name includes. */
24
+ nameId: string;
25
+ /** The accessible name of the trigger, without the selection. */
26
+ label: string;
27
+ /** The id of an element naming the trigger, supplied by the host. */
28
+ labelledBy?: string;
29
+ /** The ids of the elements describing the trigger. */
30
+ describedBy?: string;
31
+ /** Pass-through attributes. */
32
+ parts?: IconPickerParts;
33
+ }
34
+ /**
35
+ * The closed control: the selected glyph and its name, which opens the popout. A selection the catalog
36
+ * does not hold shows its raw qualified identity with a warning mark rather than another icon.
37
+ */
38
+ export declare const IconPickerTrigger: ({ entry, fallbackName, providerName, missing, open, disabled, readOnly, invalid, id, nameId, label, labelledBy, describedBy, parts, }: IconPickerTriggerProps) => import("react").JSX.Element;
39
+ //# sourceMappingURL=IconPickerTrigger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconPickerTrigger.d.ts","sourceRoot":"","sources":["../../../IconPicker/IconPickerTrigger.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAmB,CAAC;AAEzD,2CAA2C;AAC3C,MAAM,WAAW,sBAAsB;IACnC,oDAAoD;IACpD,KAAK,EAAE,eAAe,GAAG,SAAS,CAAC;IAEnC,+GAA+G;IAC/G,YAAY,EAAE,MAAM,CAAC;IAErB,yFAAyF;IACzF,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,+DAA+D;IAC/D,OAAO,EAAE,OAAO,CAAC;IAEjB,kCAAkC;IAClC,IAAI,EAAE,OAAO,CAAC;IAEd,uCAAuC;IACvC,QAAQ,EAAE,OAAO,CAAC;IAElB,qEAAqE;IACrE,QAAQ,EAAE,OAAO,CAAC;IAElB,6CAA6C;IAC7C,OAAO,EAAE,OAAO,CAAC;IAEjB,qCAAqC;IACrC,EAAE,CAAC,EAAE,MAAM,CAAC;IAEZ,gFAAgF;IAChF,MAAM,EAAE,MAAM,CAAC;IAEf,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;IAEd,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,eAAe,CAAC;CAC3B;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,0IAe3B,sBAAsB,gCAuDxB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { Button } from 'react-aria-components/Button';
3
+ import { FaTriangleExclamation, FaChevronDown } from 'react-icons/fa6';
4
+ import { classNames } from '../ClassNames/classNames.js';
5
+
6
+ const IconPickerTrigger = ({ entry, fallbackName, providerName, missing, open, disabled, readOnly, invalid, id, nameId, label, labelledBy, describedBy, parts, }) => {
7
+ const name = entry?.name ?? fallbackName;
8
+ const glyph = entry ? (entry.renderPreview()) : missing ? (jsx(FaTriangleExclamation, { focusable: 'false' })) : null;
9
+ return (jsxs(Button, { ...parts?.trigger, id: id, isDisabled: disabled, "aria-disabled": readOnly || undefined, "aria-label": labelledBy ? undefined : `${label}: ${name}`, "aria-labelledby": labelledBy ? `${labelledBy} ${nameId}` : undefined, "aria-describedby": describedBy, className: classNames('cratis-icon-picker__trigger', parts?.trigger?.className), "data-cratis-part": 'trigger', "data-disabled": disabled || undefined, "data-invalid": invalid || undefined, "data-readonly": readOnly || undefined, "data-open": open || undefined, "data-missing": missing || undefined, children: [jsx("span", { ...parts?.glyph, "aria-hidden": 'true', className: classNames('cratis-icon-picker__glyph', parts?.glyph?.className), "data-cratis-part": 'glyph', children: glyph }), jsx("span", { ...parts?.name, id: nameId, className: classNames('cratis-icon-picker__name', parts?.name?.className), "data-cratis-part": 'name', children: name }), providerName !== undefined && (jsx("span", { ...parts?.provider, className: classNames('cratis-icon-picker__provider', parts?.provider?.className), "data-cratis-part": 'provider', children: providerName })), jsx(FaChevronDown, { className: 'cratis-icon-picker__chevron', "aria-hidden": 'true', focusable: 'false' })] }));
10
+ };
11
+
12
+ export { IconPickerTrigger };
13
+ //# sourceMappingURL=IconPickerTrigger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconPickerTrigger.js","sources":["../../../IconPicker/IconPickerTrigger.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport type { ReactNode } from 'react';\nimport { Button, type ButtonProps } from 'react-aria-components/Button';\nimport { FaChevronDown, FaTriangleExclamation } from 'react-icons/fa6';\nimport { classNames } from '../ClassNames/classNames';\nimport type { IconPickerEntry } from './IconPickerEntry';\nimport type { IconPickerParts } from './IconPickerParts';\n\n/** Props for {@link IconPickerTrigger}. */\nexport interface IconPickerTriggerProps {\n /** The selected icon, when the catalog holds it. */\n entry: IconPickerEntry | undefined;\n\n /** What names the selection when the catalog does not hold it, or the placeholder when nothing is selected. */\n fallbackName: string;\n\n /** The name of the selected icon's library, shown when several libraries are offered. */\n providerName?: string;\n\n /** Whether the selection is absent from a complete catalog. */\n missing: boolean;\n\n /** Whether the popout is open. */\n open: boolean;\n\n /** Whether the control is disabled. */\n disabled: boolean;\n\n /** Whether the control shows its value without letting it change. */\n readOnly: boolean;\n\n /** Whether the control is marked invalid. */\n invalid: boolean;\n\n /** The element id of the trigger. */\n id?: string;\n\n /** The element id of the name, which the trigger's accessible name includes. */\n nameId: string;\n\n /** The accessible name of the trigger, without the selection. */\n label: string;\n\n /** The id of an element naming the trigger, supplied by the host. */\n labelledBy?: string;\n\n /** The ids of the elements describing the trigger. */\n describedBy?: string;\n\n /** Pass-through attributes. */\n parts?: IconPickerParts;\n}\n\n/**\n * The closed control: the selected glyph and its name, which opens the popout. A selection the catalog\n * does not hold shows its raw qualified identity with a warning mark rather than another icon.\n */\nexport const IconPickerTrigger = ({\n entry,\n fallbackName,\n providerName,\n missing,\n open,\n disabled,\n readOnly,\n invalid,\n id,\n nameId,\n label,\n labelledBy,\n describedBy,\n parts,\n}: IconPickerTriggerProps) => {\n const name = entry?.name ?? fallbackName;\n const glyph: ReactNode = entry ? (\n entry.renderPreview()\n ) : missing ? (\n <FaTriangleExclamation focusable='false' />\n ) : null;\n\n return (\n <Button\n // SAFETY: spread only onto a React Aria Button, which renders an HTMLButtonElement - the same\n // element the part is typed against; only its declared event-callback parameter types are wider.\n {...(parts?.trigger as unknown as ButtonProps | undefined)}\n id={id}\n isDisabled={disabled}\n aria-disabled={readOnly || undefined}\n aria-label={labelledBy ? undefined : `${label}: ${name}`}\n aria-labelledby={labelledBy ? `${labelledBy} ${nameId}` : undefined}\n aria-describedby={describedBy}\n className={classNames('cratis-icon-picker__trigger', parts?.trigger?.className)}\n data-cratis-part='trigger'\n data-disabled={disabled || undefined}\n data-invalid={invalid || undefined}\n data-readonly={readOnly || undefined}\n data-open={open || undefined}\n data-missing={missing || undefined}\n >\n <span\n {...parts?.glyph}\n aria-hidden='true'\n className={classNames('cratis-icon-picker__glyph', parts?.glyph?.className)}\n data-cratis-part='glyph'\n >\n {glyph}\n </span>\n <span\n {...parts?.name}\n id={nameId}\n className={classNames('cratis-icon-picker__name', parts?.name?.className)}\n data-cratis-part='name'\n >\n {name}\n </span>\n {providerName !== undefined && (\n <span\n {...parts?.provider}\n className={classNames('cratis-icon-picker__provider', parts?.provider?.className)}\n data-cratis-part='provider'\n >\n {providerName}\n </span>\n )}\n <FaChevronDown className='cratis-icon-picker__chevron' aria-hidden='true' focusable='false' />\n </Button>\n );\n};\n"],"names":["_jsx","_jsxs"],"mappings":";;;;;AA2DO,MAAM,iBAAiB,GAAG,CAAC,EAC9B,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,EAAE,EACF,MAAM,EACN,KAAK,EACL,UAAU,EACV,WAAW,EACX,KAAK,GACgB,KAAI;AACrB,IAAA,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,IAAI,YAAY;AACxC,IAAA,MAAM,KAAK,GAAc,KAAK,IAC1B,KAAK,CAAC,aAAa,EAAE,IACrB,OAAO,IACPA,GAAA,CAAC,qBAAqB,IAAC,SAAS,EAAC,OAAO,EAAA,CAAG,IAC3C,IAAI;AAER,IAAA,QACIC,IAAA,CAAC,MAAM,OAGE,KAAK,EAAE,OAA8C,EAC1D,EAAE,EAAE,EAAE,EACN,UAAU,EAAE,QAAQ,mBACL,QAAQ,IAAI,SAAS,EAAA,YAAA,EACxB,UAAU,GAAG,SAAS,GAAG,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,IAAI,EAAE,EAAA,iBAAA,EACvC,UAAU,GAAG,GAAG,UAAU,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,GAAG,SAAS,EAAA,kBAAA,EACjD,WAAW,EAC7B,SAAS,EAAE,UAAU,CAAC,6BAA6B,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,EAAA,kBAAA,EAC9D,SAAS,mBACX,QAAQ,IAAI,SAAS,EAAA,cAAA,EACtB,OAAO,IAAI,SAAS,mBACnB,QAAQ,IAAI,SAAS,EAAA,WAAA,EACzB,IAAI,IAAI,SAAS,EAAA,cAAA,EACd,OAAO,IAAI,SAAS,aAElCD,GAAA,CAAA,MAAA,EAAA,EAAA,GACQ,KAAK,EAAE,KAAK,EAAA,aAAA,EACJ,MAAM,EAClB,SAAS,EAAE,UAAU,CAAC,2BAA2B,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,sBAC1D,OAAO,EAAA,QAAA,EAEvB,KAAK,EAAA,CACH,EACPA,iBACQ,KAAK,EAAE,IAAI,EACf,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,UAAU,CAAC,0BAA0B,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,EAAA,kBAAA,EACxD,MAAM,YAEtB,IAAI,EAAA,CACF,EACN,YAAY,KAAK,SAAS,KACvBA,GAAA,CAAA,MAAA,EAAA,EAAA,GACQ,KAAK,EAAE,QAAQ,EACnB,SAAS,EAAE,UAAU,CAAC,8BAA8B,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,sBAChE,UAAU,EAAA,QAAA,EAE1B,YAAY,EAAA,CACV,CACV,EACDA,GAAA,CAAC,aAAa,IAAC,SAAS,EAAC,6BAA6B,EAAA,aAAA,EAAa,MAAM,EAAC,SAAS,EAAC,OAAO,EAAA,CAAG,CAAA,EAAA,CACzF;AAErB;;"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * The qualified, persisted identity of an icon: the shape a host stores and the picker emits.
3
+ *
4
+ * Labels, display names, CSS classes, SVG markup and catalog order are never identity. Two values name
5
+ * the same icon only when `library`, `key` and `variant` all match, so an icon called `home` in one
6
+ * library is never mistaken for an icon called `home` in another.
7
+ */
8
+ export interface IconPickerValue {
9
+ /** The stable identity of the icon library the icon belongs to. */
10
+ library: string;
11
+ /** The stable key of the icon within its library. */
12
+ key: string;
13
+ /** The optional style variant of the icon, such as `outline` or `solid`. */
14
+ variant?: string;
15
+ }
16
+ //# sourceMappingURL=IconPickerValue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconPickerValue.d.ts","sourceRoot":"","sources":["../../../IconPicker/IconPickerValue.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC5B,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAEhB,qDAAqD;IACrD,GAAG,EAAE,MAAM,CAAC;IAEZ,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,4 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+ export {};
4
+ //# sourceMappingURL=IconPickerValue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconPickerValue.js","sourceRoot":"","sources":["../../../IconPicker/IconPickerValue.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qGAAqG","sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/**\n * The qualified, persisted identity of an icon: the shape a host stores and the picker emits.\n *\n * Labels, display names, CSS classes, SVG markup and catalog order are never identity. Two values name\n * the same icon only when `library`, `key` and `variant` all match, so an icon called `home` in one\n * library is never mistaken for an icon called `home` in another.\n */\nexport interface IconPickerValue {\n /** The stable identity of the icon library the icon belongs to. */\n library: string;\n\n /** The stable key of the icon within its library. */\n key: string;\n\n /** The optional style variant of the icon, such as `outline` or `solid`. */\n variant?: string;\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import type { IconPickerEntry } from './IconPickerEntry.js';
2
+ import type { IconPickerIndexEntry } from './IconPickerIndexEntry.js';
3
+ /**
4
+ * Prepares a catalog's icons for searching, once per catalog instead of once per keystroke. An icon
5
+ * listed twice under one qualified identity is kept once - the first - so identities stay unique.
6
+ * @param icons The catalog's icons.
7
+ * @returns The icons in catalog order, each with its identity and lowercase search text.
8
+ */
9
+ export declare const createIconPickerIndex: (icons: readonly IconPickerEntry[]) => IconPickerIndexEntry[];
10
+ //# sourceMappingURL=createIconPickerIndex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createIconPickerIndex.d.ts","sourceRoot":"","sources":["../../../IconPicker/createIconPickerIndex.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAAwB,CAAC;AAGnE;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,UAAW,SAAS,eAAe,EAAE,KAAG,oBAAoB,EAc7F,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { iconPickerIdentity } from './iconPickerIdentity.js';
2
+
3
+ const createIconPickerIndex = (icons) => {
4
+ const seen = new Set();
5
+ const index = [];
6
+ for (const entry of icons) {
7
+ const identity = iconPickerIdentity(entry);
8
+ if (seen.has(identity))
9
+ continue;
10
+ seen.add(identity);
11
+ index.push({
12
+ entry,
13
+ identity,
14
+ searchText: [entry.name, ...(entry.tags ?? []), ...(entry.aliases ?? [])].join('\n').toLocaleLowerCase(),
15
+ });
16
+ }
17
+ return index;
18
+ };
19
+
20
+ export { createIconPickerIndex };
21
+ //# sourceMappingURL=createIconPickerIndex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createIconPickerIndex.js","sources":["../../../IconPicker/createIconPickerIndex.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport type { IconPickerEntry } from './IconPickerEntry';\nimport type { IconPickerIndexEntry } from './IconPickerIndexEntry';\nimport { iconPickerIdentity } from './iconPickerIdentity';\n\n/**\n * Prepares a catalog's icons for searching, once per catalog instead of once per keystroke. An icon\n * listed twice under one qualified identity is kept once - the first - so identities stay unique.\n * @param icons The catalog's icons.\n * @returns The icons in catalog order, each with its identity and lowercase search text.\n */\nexport const createIconPickerIndex = (icons: readonly IconPickerEntry[]): IconPickerIndexEntry[] => {\n const seen = new Set<string>();\n const index: IconPickerIndexEntry[] = [];\n for (const entry of icons) {\n const identity = iconPickerIdentity(entry);\n if (seen.has(identity)) continue;\n seen.add(identity);\n index.push({\n entry,\n identity,\n searchText: [entry.name, ...(entry.tags ?? []), ...(entry.aliases ?? [])].join('\\n').toLocaleLowerCase(),\n });\n }\n return index;\n};\n"],"names":[],"mappings":";;AAaO,MAAM,qBAAqB,GAAG,CAAC,KAAiC,KAA4B;AAC/F,IAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;IAC9B,MAAM,KAAK,GAA2B,EAAE;AACxC,IAAA,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE;AACvB,QAAA,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,CAAC;AAC1C,QAAA,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC;YACP,KAAK;YACL,QAAQ;AACR,YAAA,UAAU,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE;AAC3G,SAAA,CAAC;IACN;AACA,IAAA,OAAO,KAAK;AAChB;;"}
@@ -0,0 +1,4 @@
1
+ import type { IconPickerLabels } from './IconPickerLabels.js';
2
+ /** The English text an {@link IconPicker} uses for every label a host does not override. */
3
+ export declare const defaultIconPickerLabels: Required<IconPickerLabels>;
4
+ //# sourceMappingURL=defaultIconPickerLabels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultIconPickerLabels.d.ts","sourceRoot":"","sources":["../../../IconPicker/defaultIconPickerLabels.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAoB,CAAC;AAE3D,4FAA4F;AAC5F,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,gBAAgB,CAiC9D,CAAC"}
@@ -0,0 +1,35 @@
1
+ const defaultIconPickerLabels = {
2
+ placeholder: 'Select an icon',
3
+ title: 'Choose an icon',
4
+ search: 'Search icons',
5
+ searchPlaceholder: 'Search by name or tag',
6
+ clearSearch: 'Clear search',
7
+ close: 'Close',
8
+ categories: 'Categories',
9
+ allCategories: 'All',
10
+ uncategorized: 'Other',
11
+ showAll: count => `Show all ${count}`,
12
+ library: 'Library',
13
+ allLibraries: 'All libraries',
14
+ summary: ({ count, query, category, library }) => [
15
+ `${count} ${count === 1 ? 'icon' : 'icons'}`,
16
+ category === undefined ? undefined : `in ${category}`,
17
+ library === undefined ? undefined : `from ${library}`,
18
+ query === '' ? undefined : `matching “${query}”`,
19
+ ]
20
+ .filter(part => part !== undefined)
21
+ .join(' '),
22
+ loading: 'Loading icons…',
23
+ empty: 'There are no icons to choose from.',
24
+ noResults: query => (query === '' ? 'No icons match the filters.' : `No icons match “${query}”.`),
25
+ clearFilters: 'Clear filters',
26
+ error: 'The icons could not be loaded.',
27
+ missingSelection: identity => `The selected icon ${identity} is not in the catalog.`,
28
+ deprecated: 'Deprecated',
29
+ notAllowed: 'Not available for this field',
30
+ trigger: 'Icon',
31
+ credit: (name, version, attribution) => [name, version, attribution].filter(part => part !== undefined && part !== '').join(' · '),
32
+ };
33
+
34
+ export { defaultIconPickerLabels };
35
+ //# sourceMappingURL=defaultIconPickerLabels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultIconPickerLabels.js","sources":["../../../IconPicker/defaultIconPickerLabels.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport type { IconPickerLabels } from './IconPickerLabels';\n\n/** The English text an {@link IconPicker} uses for every label a host does not override. */\nexport const defaultIconPickerLabels: Required<IconPickerLabels> = {\n placeholder: 'Select an icon',\n title: 'Choose an icon',\n search: 'Search icons',\n searchPlaceholder: 'Search by name or tag',\n clearSearch: 'Clear search',\n close: 'Close',\n categories: 'Categories',\n allCategories: 'All',\n uncategorized: 'Other',\n showAll: count => `Show all ${count}`,\n library: 'Library',\n allLibraries: 'All libraries',\n summary: ({ count, query, category, library }) =>\n [\n `${count} ${count === 1 ? 'icon' : 'icons'}`,\n category === undefined ? undefined : `in ${category}`,\n library === undefined ? undefined : `from ${library}`,\n query === '' ? undefined : `matching “${query}”`,\n ]\n .filter(part => part !== undefined)\n .join(' '),\n loading: 'Loading icons…',\n empty: 'There are no icons to choose from.',\n noResults: query => (query === '' ? 'No icons match the filters.' : `No icons match “${query}”.`),\n clearFilters: 'Clear filters',\n error: 'The icons could not be loaded.',\n missingSelection: identity => `The selected icon ${identity} is not in the catalog.`,\n deprecated: 'Deprecated',\n notAllowed: 'Not available for this field',\n trigger: 'Icon',\n credit: (name, version, attribution) =>\n [name, version, attribution].filter(part => part !== undefined && part !== '').join(' · '),\n};\n"],"names":[],"mappings":"AAMO,MAAM,uBAAuB,GAA+B;AAC/D,IAAA,WAAW,EAAE,gBAAgB;AAC7B,IAAA,KAAK,EAAE,gBAAgB;AACvB,IAAA,MAAM,EAAE,cAAc;AACtB,IAAA,iBAAiB,EAAE,uBAAuB;AAC1C,IAAA,WAAW,EAAE,cAAc;AAC3B,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,UAAU,EAAE,YAAY;AACxB,IAAA,aAAa,EAAE,KAAK;AACpB,IAAA,aAAa,EAAE,OAAO;AACtB,IAAA,OAAO,EAAE,KAAK,IAAI,CAAA,SAAA,EAAY,KAAK,CAAA,CAAE;AACrC,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,YAAY,EAAE,eAAe;AAC7B,IAAA,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,KACzC;AACI,QAAA,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,OAAO,CAAA,CAAE;QAC5C,QAAQ,KAAK,SAAS,GAAG,SAAS,GAAG,CAAA,GAAA,EAAM,QAAQ,CAAA,CAAE;QACrD,OAAO,KAAK,SAAS,GAAG,SAAS,GAAG,CAAA,KAAA,EAAQ,OAAO,CAAA,CAAE;QACrD,KAAK,KAAK,EAAE,GAAG,SAAS,GAAG,CAAA,UAAA,EAAa,KAAK,CAAA,CAAA,CAAG;AACnD;SACI,MAAM,CAAC,IAAI,IAAI,IAAI,KAAK,SAAS;SACjC,IAAI,CAAC,GAAG,CAAC;AAClB,IAAA,OAAO,EAAE,gBAAgB;AACzB,IAAA,KAAK,EAAE,oCAAoC;AAC3C,IAAA,SAAS,EAAE,KAAK,KAAK,KAAK,KAAK,EAAE,GAAG,6BAA6B,GAAG,CAAA,gBAAA,EAAmB,KAAK,IAAI,CAAC;AACjG,IAAA,YAAY,EAAE,eAAe;AAC7B,IAAA,KAAK,EAAE,gCAAgC;AACvC,IAAA,gBAAgB,EAAE,QAAQ,IAAI,CAAA,kBAAA,EAAqB,QAAQ,CAAA,uBAAA,CAAyB;AACpF,IAAA,UAAU,EAAE,YAAY;AACxB,IAAA,UAAU,EAAE,8BAA8B;AAC1C,IAAA,OAAO,EAAE,MAAM;AACf,IAAA,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,KAC/B,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;;;"}
@@ -0,0 +1,8 @@
1
+ import type { IconPickerValue } from './IconPickerValue.js';
2
+ /**
3
+ * Writes a qualified identity out for people, as shown for a selection the catalog does not contain.
4
+ * @param value The qualified icon value.
5
+ * @returns The library, key and variant joined with slashes.
6
+ */
7
+ export declare const formatIconPickerIdentity: (value: IconPickerValue) => string;
8
+ //# sourceMappingURL=formatIconPickerIdentity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatIconPickerIdentity.d.ts","sourceRoot":"","sources":["../../../IconPicker/formatIconPickerIdentity.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAmB,CAAC;AAEzD;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,UAAW,eAAe,KAAG,MACyC,CAAC"}
@@ -0,0 +1,4 @@
1
+ const formatIconPickerIdentity = (value) => [value.library, value.key, value.variant].filter(part => part !== undefined && part !== '').join(' / ');
2
+
3
+ export { formatIconPickerIdentity };
4
+ //# sourceMappingURL=formatIconPickerIdentity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatIconPickerIdentity.js","sources":["../../../IconPicker/formatIconPickerIdentity.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport type { IconPickerValue } from './IconPickerValue';\n\n/**\n * Writes a qualified identity out for people, as shown for a selection the catalog does not contain.\n * @param value The qualified icon value.\n * @returns The library, key and variant joined with slashes.\n */\nexport const formatIconPickerIdentity = (value: IconPickerValue): string =>\n [value.library, value.key, value.variant].filter(part => part !== undefined && part !== '').join(' / ');\n"],"names":[],"mappings":"AAUO,MAAM,wBAAwB,GAAG,CAAC,KAAsB,KAC3D,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK;;"}
@@ -0,0 +1,10 @@
1
+ import type { IconPickerBrowserGroup } from './IconPickerBrowserGroup.js';
2
+ import type { IconPickerIndexEntry } from './IconPickerIndexEntry.js';
3
+ /**
4
+ * Groups icons by category, in the order each category first appears. An icon listing several
5
+ * categories appears in each; one listing none lands in a final group named with an empty string.
6
+ * @param matches The icons to group.
7
+ * @returns The groups.
8
+ */
9
+ export declare const groupIconPickerByCategory: (matches: readonly IconPickerIndexEntry[]) => IconPickerBrowserGroup[];
10
+ //# sourceMappingURL=groupIconPickerByCategory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groupIconPickerByCategory.d.ts","sourceRoot":"","sources":["../../../IconPicker/groupIconPickerByCategory.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA0B,CAAC;AACvE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAAwB,CAAC;AAEnE;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,YAAa,SAAS,oBAAoB,EAAE,KAAG,sBAAsB,EAa1G,CAAC"}
@@ -0,0 +1,17 @@
1
+ const groupIconPickerByCategory = (matches) => {
2
+ const groups = new Map();
3
+ for (const { entry } of matches) {
4
+ const categories = entry.categories.length === 0 ? [''] : entry.categories;
5
+ for (const category of new Set(categories)) {
6
+ const group = groups.get(category) ?? { category, entries: [] };
7
+ group.entries.push(entry);
8
+ groups.set(category, group);
9
+ }
10
+ }
11
+ const ordered = [...groups.values()];
12
+ const uncategorized = ordered.filter(group => group.category === '');
13
+ return [...ordered.filter(group => group.category !== ''), ...uncategorized];
14
+ };
15
+
16
+ export { groupIconPickerByCategory };
17
+ //# sourceMappingURL=groupIconPickerByCategory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groupIconPickerByCategory.js","sources":["../../../IconPicker/groupIconPickerByCategory.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport type { IconPickerBrowserGroup } from './IconPickerBrowserGroup';\nimport type { IconPickerIndexEntry } from './IconPickerIndexEntry';\n\n/**\n * Groups icons by category, in the order each category first appears. An icon listing several\n * categories appears in each; one listing none lands in a final group named with an empty string.\n * @param matches The icons to group.\n * @returns The groups.\n */\nexport const groupIconPickerByCategory = (matches: readonly IconPickerIndexEntry[]): IconPickerBrowserGroup[] => {\n const groups = new Map<string, IconPickerBrowserGroup>();\n for (const { entry } of matches) {\n const categories = entry.categories.length === 0 ? [''] : entry.categories;\n for (const category of new Set(categories)) {\n const group = groups.get(category) ?? { category, entries: [] };\n group.entries.push(entry);\n groups.set(category, group);\n }\n }\n const ordered = [...groups.values()];\n const uncategorized = ordered.filter(group => group.category === '');\n return [...ordered.filter(group => group.category !== ''), ...uncategorized];\n};\n"],"names":[],"mappings":"AAYO,MAAM,yBAAyB,GAAG,CAAC,OAAwC,KAA8B;AAC5G,IAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkC;AACxD,IAAA,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,OAAO,EAAE;QAC7B,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,UAAU;QAC1E,KAAK,MAAM,QAAQ,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,EAAE;AACxC,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;AAC/D,YAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AACzB,YAAA,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC;QAC/B;IACJ;IACA,MAAM,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACpC,IAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,EAAE,CAAC;IACpE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,EAAE,CAAC,EAAE,GAAG,aAAa,CAAC;AAChF;;"}
@@ -0,0 +1,8 @@
1
+ import type { IconPickerValue } from './IconPickerValue.js';
2
+ /**
3
+ * Builds a string that is equal for two values exactly when they name the same icon.
4
+ * @param value The qualified icon value.
5
+ * @returns A stable identity string over `library`, `key` and `variant`.
6
+ */
7
+ export declare const iconPickerIdentity: (value: IconPickerValue) => string;
8
+ //# sourceMappingURL=iconPickerIdentity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iconPickerIdentity.d.ts","sourceRoot":"","sources":["../../../IconPicker/iconPickerIdentity.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAmB,CAAC;AAEzD;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,UAAW,eAAe,KAAG,MACS,CAAC"}
@@ -0,0 +1,4 @@
1
+ const iconPickerIdentity = (value) => JSON.stringify([value.library, value.key, value.variant ?? null]);
2
+
3
+ export { iconPickerIdentity };
4
+ //# sourceMappingURL=iconPickerIdentity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iconPickerIdentity.js","sources":["../../../IconPicker/iconPickerIdentity.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport type { IconPickerValue } from './IconPickerValue';\n\n/**\n * Builds a string that is equal for two values exactly when they name the same icon.\n * @param value The qualified icon value.\n * @returns A stable identity string over `library`, `key` and `variant`.\n */\nexport const iconPickerIdentity = (value: IconPickerValue): string =>\n JSON.stringify([value.library, value.key, value.variant ?? null]);\n"],"names":[],"mappings":"AAUO,MAAM,kBAAkB,GAAG,CAAC,KAAsB,KACrD,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC;;"}
@@ -0,0 +1,19 @@
1
+ export { IconPicker } from './IconPicker.js';
2
+ export type { IconPickerProps } from './IconPicker.js';
3
+ export type { IconPickerAllowed } from './IconPickerAllowed.js';
4
+ export type { IconPickerCatalog } from './IconPickerCatalog.js';
5
+ export type { IconPickerCatalogStatus } from './IconPickerCatalogStatus.js';
6
+ export type { IconPickerEntry } from './IconPickerEntry.js';
7
+ export type { IconPickerLabels } from './IconPickerLabels.js';
8
+ export type { IconPickerLibrary } from './IconPickerLibrary.js';
9
+ export type { IconPickerParts, IconPickerPartAttributes } from './IconPickerParts.js';
10
+ export type { IconPickerPlacement } from './IconPickerPlacement.js';
11
+ export type { IconPickerSummary } from './IconPickerSummary.js';
12
+ export type { IconPickerValue } from './IconPickerValue.js';
13
+ export { defaultIconPickerLabels } from './defaultIconPickerLabels.js';
14
+ export { formatIconPickerIdentity } from './formatIconPickerIdentity.js';
15
+ export { iconPickerIdentity } from './iconPickerIdentity.js';
16
+ export { isIconPickerAllowed } from './isIconPickerAllowed.js';
17
+ export { isSameIconPickerValue } from './isSameIconPickerValue.js';
18
+ export { toIconPickerValue } from './toIconPickerValue.js';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../IconPicker/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAc,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAc,CAAC;AACpD,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAqB,CAAC;AAC7D,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAqB,CAAC;AAC7D,YAAY,EAAE,uBAAuB,EAAE,MAAM,8BAA2B,CAAC;AACzE,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAmB,CAAC;AACzD,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAoB,CAAC;AAC3D,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAqB,CAAC;AAC7D,YAAY,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,sBAAmB,CAAC;AACnF,YAAY,EAAE,mBAAmB,EAAE,MAAM,0BAAuB,CAAC;AACjE,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAqB,CAAC;AAC7D,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAmB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA2B,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA4B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAsB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAAuB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAAyB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAqB,CAAC"}
@@ -0,0 +1,8 @@
1
+ export { IconPicker } from './IconPicker.js';
2
+ export { defaultIconPickerLabels } from './defaultIconPickerLabels.js';
3
+ export { formatIconPickerIdentity } from './formatIconPickerIdentity.js';
4
+ export { iconPickerIdentity } from './iconPickerIdentity.js';
5
+ export { isIconPickerAllowed } from './isIconPickerAllowed.js';
6
+ export { isSameIconPickerValue } from './isSameIconPickerValue.js';
7
+ export { toIconPickerValue } from './toIconPickerValue.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,10 @@
1
+ import type { IconPickerAllowed } from './IconPickerAllowed.js';
2
+ import type { IconPickerEntry } from './IconPickerEntry.js';
3
+ /**
4
+ * Tells whether a field accepts an icon.
5
+ * @param entry The catalog entry.
6
+ * @param allowed The field's restriction, or undefined when it accepts every icon in the catalog.
7
+ * @returns True when the icon may be selected.
8
+ */
9
+ export declare const isIconPickerAllowed: (entry: IconPickerEntry, allowed: IconPickerAllowed | undefined) => boolean;
10
+ //# sourceMappingURL=isIconPickerAllowed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isIconPickerAllowed.d.ts","sourceRoot":"","sources":["../../../IconPicker/isIconPickerAllowed.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAmB,CAAC;AAGzD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,UAAW,eAAe,WAAW,iBAAiB,GAAG,SAAS,KAAG,OAIpG,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { isSameIconPickerValue } from './isSameIconPickerValue.js';
2
+
3
+ const isIconPickerAllowed = (entry, allowed) => {
4
+ if (allowed === undefined)
5
+ return true;
6
+ if (typeof allowed === 'function')
7
+ return allowed(entry);
8
+ return allowed.some(value => isSameIconPickerValue(value, entry));
9
+ };
10
+
11
+ export { isIconPickerAllowed };
12
+ //# sourceMappingURL=isIconPickerAllowed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isIconPickerAllowed.js","sources":["../../../IconPicker/isIconPickerAllowed.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport type { IconPickerAllowed } from './IconPickerAllowed';\nimport type { IconPickerEntry } from './IconPickerEntry';\nimport { isSameIconPickerValue } from './isSameIconPickerValue';\n\n/**\n * Tells whether a field accepts an icon.\n * @param entry The catalog entry.\n * @param allowed The field's restriction, or undefined when it accepts every icon in the catalog.\n * @returns True when the icon may be selected.\n */\nexport const isIconPickerAllowed = (entry: IconPickerEntry, allowed: IconPickerAllowed | undefined): boolean => {\n if (allowed === undefined) return true;\n if (typeof allowed === 'function') return allowed(entry);\n return allowed.some(value => isSameIconPickerValue(value, entry));\n};\n"],"names":[],"mappings":";;MAaa,mBAAmB,GAAG,CAAC,KAAsB,EAAE,OAAsC,KAAa;IAC3G,IAAI,OAAO,KAAK,SAAS;AAAE,QAAA,OAAO,IAAI;IACtC,IAAI,OAAO,OAAO,KAAK,UAAU;AAAE,QAAA,OAAO,OAAO,CAAC,KAAK,CAAC;AACxD,IAAA,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACrE;;"}
@@ -0,0 +1,10 @@
1
+ import type { IconPickerValue } from './IconPickerValue.js';
2
+ /**
3
+ * Compares two qualified icon values. All three fields decide: the same key in another library, or
4
+ * the same key and library in another variant, is a different icon.
5
+ * @param left The first value.
6
+ * @param right The second value.
7
+ * @returns True when both name the same icon.
8
+ */
9
+ export declare const isSameIconPickerValue: (left: IconPickerValue, right: IconPickerValue) => boolean;
10
+ //# sourceMappingURL=isSameIconPickerValue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isSameIconPickerValue.d.ts","sourceRoot":"","sources":["../../../IconPicker/isSameIconPickerValue.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAmB,CAAC;AAEzD;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,SAAU,eAAe,SAAS,eAAe,KAAG,OACQ,CAAC"}
@@ -0,0 +1,4 @@
1
+ const isSameIconPickerValue = (left, right) => left.library === right.library && left.key === right.key && left.variant === right.variant;
2
+
3
+ export { isSameIconPickerValue };
4
+ //# sourceMappingURL=isSameIconPickerValue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isSameIconPickerValue.js","sources":["../../../IconPicker/isSameIconPickerValue.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport type { IconPickerValue } from './IconPickerValue';\n\n/**\n * Compares two qualified icon values. All three fields decide: the same key in another library, or\n * the same key and library in another variant, is a different icon.\n * @param left The first value.\n * @param right The second value.\n * @returns True when both name the same icon.\n */\nexport const isSameIconPickerValue = (left: IconPickerValue, right: IconPickerValue): boolean =>\n left.library === right.library && left.key === right.key && left.variant === right.variant;\n"],"names":[],"mappings":"AAYO,MAAM,qBAAqB,GAAG,CAAC,IAAqB,EAAE,KAAsB,KAC/E,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC;;"}
@@ -0,0 +1,9 @@
1
+ import type { IconPickerIndexEntry } from './IconPickerIndexEntry.js';
2
+ /**
3
+ * Narrows an index to the icons whose name, tags or aliases contain every word of a query, ignoring case.
4
+ * @param index The prepared icons.
5
+ * @param query What was typed. Blank matches everything.
6
+ * @returns The matching icons, in catalog order.
7
+ */
8
+ export declare const searchIconPickerIndex: (index: readonly IconPickerIndexEntry[], query: string) => IconPickerIndexEntry[];
9
+ //# sourceMappingURL=searchIconPickerIndex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchIconPickerIndex.d.ts","sourceRoot":"","sources":["../../../IconPicker/searchIconPickerIndex.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAAwB,CAAC;AAEnE;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,UAAW,SAAS,oBAAoB,EAAE,SAAS,MAAM,KAAG,oBAAoB,EAIjH,CAAC"}
@@ -0,0 +1,9 @@
1
+ const searchIconPickerIndex = (index, query) => {
2
+ const words = query.toLocaleLowerCase().split(/\s+/).filter(word => word.length > 0);
3
+ if (words.length === 0)
4
+ return [...index];
5
+ return index.filter(candidate => words.every(word => candidate.searchText.includes(word)));
6
+ };
7
+
8
+ export { searchIconPickerIndex };
9
+ //# sourceMappingURL=searchIconPickerIndex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchIconPickerIndex.js","sources":["../../../IconPicker/searchIconPickerIndex.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport type { IconPickerIndexEntry } from './IconPickerIndexEntry';\n\n/**\n * Narrows an index to the icons whose name, tags or aliases contain every word of a query, ignoring case.\n * @param index The prepared icons.\n * @param query What was typed. Blank matches everything.\n * @returns The matching icons, in catalog order.\n */\nexport const searchIconPickerIndex = (index: readonly IconPickerIndexEntry[], query: string): IconPickerIndexEntry[] => {\n const words = query.toLocaleLowerCase().split(/\\s+/).filter(word => word.length > 0);\n if (words.length === 0) return [...index];\n return index.filter(candidate => words.every(word => candidate.searchText.includes(word)));\n};\n"],"names":[],"mappings":"MAWa,qBAAqB,GAAG,CAAC,KAAsC,EAAE,KAAa,KAA4B;IACnH,MAAM,KAAK,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACpF,IAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,CAAC,GAAG,KAAK,CAAC;IACzC,OAAO,KAAK,CAAC,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9F;;"}
@@ -0,0 +1,9 @@
1
+ import type { IconPickerValue } from './IconPickerValue.js';
2
+ /**
3
+ * Reduces anything carrying a qualified identity to just that identity - never the name, preview or
4
+ * category an entry also holds - which is what the picker emits and a host persists.
5
+ * @param source A value or catalog entry.
6
+ * @returns A fresh value holding `library`, `key` and, when present, `variant`.
7
+ */
8
+ export declare const toIconPickerValue: (source: IconPickerValue) => IconPickerValue;
9
+ //# sourceMappingURL=toIconPickerValue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toIconPickerValue.d.ts","sourceRoot":"","sources":["../../../IconPicker/toIconPickerValue.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAmB,CAAC;AAEzD;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,WAAY,eAAe,KAAG,eAGmB,CAAC"}
@@ -0,0 +1,6 @@
1
+ const toIconPickerValue = (source) => source.variant === undefined
2
+ ? { library: source.library, key: source.key }
3
+ : { library: source.library, key: source.key, variant: source.variant };
4
+
5
+ export { toIconPickerValue };
6
+ //# sourceMappingURL=toIconPickerValue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toIconPickerValue.js","sources":["../../../IconPicker/toIconPickerValue.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport type { IconPickerValue } from './IconPickerValue';\n\n/**\n * Reduces anything carrying a qualified identity to just that identity - never the name, preview or\n * category an entry also holds - which is what the picker emits and a host persists.\n * @param source A value or catalog entry.\n * @returns A fresh value holding `library`, `key` and, when present, `variant`.\n */\nexport const toIconPickerValue = (source: IconPickerValue): IconPickerValue =>\n source.variant === undefined\n ? { library: source.library, key: source.key }\n : { library: source.library, key: source.key, variant: source.variant };\n"],"names":[],"mappings":"AAWO,MAAM,iBAAiB,GAAG,CAAC,MAAuB,KACrD,MAAM,CAAC,OAAO,KAAK;AACf,MAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG;MAC1C,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO;;"}
@@ -0,0 +1,12 @@
1
+ import { type RefObject } from 'react';
2
+ /** How many columns a grid is assumed to have until it has been measured. */
3
+ export declare const defaultGridColumns = 4;
4
+ /**
5
+ * Counts the columns a CSS grid currently lays out, so Up and Down can move a whole row. The browser
6
+ * resolves `repeat(auto-fill, …)` into real tracks, so the count is read back from the grid's computed
7
+ * style whenever it resizes. Environments that cannot lay out - or measure - a grid keep the default.
8
+ * @param grid The grid element.
9
+ * @returns The grid's column count.
10
+ */
11
+ export declare const useGridColumns: (grid: RefObject<HTMLElement | null>) => number;
12
+ //# sourceMappingURL=useGridColumns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGridColumns.d.ts","sourceRoot":"","sources":["../../../IconPicker/useGridColumns.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE5D,6EAA6E;AAC7E,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,SAAU,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,KAAG,MAmBpE,CAAC"}