@webiny/app-admin 5.41.4 → 5.42.0-beta.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.
Files changed (183) hide show
  1. package/base/Admin.js +4 -13
  2. package/base/Admin.js.map +1 -1
  3. package/base/providers/TelemetryProvider.d.ts +1 -7
  4. package/base/providers/TelemetryProvider.js +3 -2
  5. package/base/providers/TelemetryProvider.js.map +1 -1
  6. package/base/providers/UiStateProvider.d.ts +1 -7
  7. package/base/providers/UiStateProvider.js +3 -2
  8. package/base/providers/UiStateProvider.js.map +1 -1
  9. package/base/providers/ViewCompositionProvider.js.map +1 -1
  10. package/base/ui/FileManager.js.map +1 -1
  11. package/base/ui/Menu.js +4 -4
  12. package/base/ui/Menu.js.map +1 -1
  13. package/base/ui/Navigation.d.ts +1 -5
  14. package/base/ui/Navigation.js +2 -2
  15. package/base/ui/Navigation.js.map +1 -1
  16. package/base/ui/Search.d.ts +1 -7
  17. package/base/ui/Search.js +2 -2
  18. package/base/ui/Search.js.map +1 -1
  19. package/base/ui/UserMenu.d.ts +1 -7
  20. package/base/ui/UserMenu.js +2 -2
  21. package/base/ui/UserMenu.js.map +1 -1
  22. package/components/AppInstaller/AppInstaller.js +1 -1
  23. package/components/AppInstaller/AppInstaller.js.map +1 -1
  24. package/components/AppInstaller/Sidebar.js +1 -1
  25. package/components/AppInstaller/Sidebar.js.map +1 -1
  26. package/components/BulkActions/Worker.js.map +1 -1
  27. package/components/BulkActions/useDialogWithReport/useDialogWithReport.js.map +1 -1
  28. package/components/Dialogs/DialogsContext.d.ts +4 -13
  29. package/components/Dialogs/DialogsContext.js +83 -61
  30. package/components/Dialogs/DialogsContext.js.map +1 -1
  31. package/components/IconPicker/IconPicker.d.ts +13 -0
  32. package/components/IconPicker/IconPicker.js +46 -0
  33. package/components/IconPicker/IconPicker.js.map +1 -0
  34. package/components/IconPicker/IconPicker.styles.d.ts +63 -0
  35. package/components/IconPicker/IconPicker.styles.js +187 -0
  36. package/components/IconPicker/IconPicker.styles.js.map +1 -0
  37. package/components/IconPicker/IconPickerComponent.d.ts +16 -0
  38. package/components/IconPicker/IconPickerComponent.js +101 -0
  39. package/components/IconPicker/IconPickerComponent.js.map +1 -0
  40. package/components/IconPicker/IconPickerPresenter.d.ts +52 -0
  41. package/components/IconPicker/IconPickerPresenter.js +118 -0
  42. package/components/IconPicker/IconPickerPresenter.js.map +1 -0
  43. package/components/IconPicker/IconPickerPresenter.test.d.ts +1 -0
  44. package/components/IconPicker/IconPickerPresenter.test.js +111 -0
  45. package/components/IconPicker/IconPickerPresenter.test.js.map +1 -0
  46. package/components/IconPicker/IconPickerPresenterProvider.d.ts +9 -0
  47. package/components/IconPicker/IconPickerPresenterProvider.js +26 -0
  48. package/components/IconPicker/IconPickerPresenterProvider.js.map +1 -0
  49. package/components/IconPicker/IconPickerTab.d.ts +32 -0
  50. package/components/IconPicker/IconPickerTab.js +169 -0
  51. package/components/IconPicker/IconPickerTab.js.map +1 -0
  52. package/components/IconPicker/IconRenderer.d.ts +34 -0
  53. package/components/IconPicker/IconRenderer.js +35 -0
  54. package/components/IconPicker/IconRenderer.js.map +1 -0
  55. package/components/IconPicker/IconRepository.d.ts +19 -0
  56. package/components/IconPicker/IconRepository.js +79 -0
  57. package/components/IconPicker/IconRepository.js.map +1 -0
  58. package/components/IconPicker/IconRepository.test.d.ts +1 -0
  59. package/components/IconPicker/IconRepository.test.js +68 -0
  60. package/components/IconPicker/IconRepository.test.js.map +1 -0
  61. package/components/IconPicker/IconRepositoryFactory.d.ts +9 -0
  62. package/components/IconPicker/IconRepositoryFactory.js +40 -0
  63. package/components/IconPicker/IconRepositoryFactory.js.map +1 -0
  64. package/components/IconPicker/Loading.d.ts +14 -0
  65. package/components/IconPicker/Loading.js +76 -0
  66. package/components/IconPicker/Loading.js.map +1 -0
  67. package/components/IconPicker/config/Emojis.d.ts +2 -0
  68. package/components/IconPicker/config/Emojis.js +31 -0
  69. package/components/IconPicker/config/Emojis.js.map +1 -0
  70. package/components/IconPicker/config/FontAwesomeIcons.d.ts +2 -0
  71. package/components/IconPicker/config/FontAwesomeIcons.js +74 -0
  72. package/components/IconPicker/config/FontAwesomeIcons.js.map +1 -0
  73. package/components/IconPicker/config/IconPackProvider.d.ts +7 -0
  74. package/components/IconPicker/config/IconPackProvider.js +29 -0
  75. package/components/IconPicker/config/IconPackProvider.js.map +1 -0
  76. package/components/IconPicker/config/IconType.d.ts +32 -0
  77. package/components/IconPicker/config/IconType.js +92 -0
  78. package/components/IconPicker/config/IconType.js.map +1 -0
  79. package/components/IconPicker/config/index.d.ts +31 -0
  80. package/components/IconPicker/config/index.js +63 -0
  81. package/components/IconPicker/config/index.js.map +1 -0
  82. package/components/IconPicker/defaultIcon.d.ts +6 -0
  83. package/components/IconPicker/defaultIcon.js +14 -0
  84. package/components/IconPicker/defaultIcon.js.map +1 -0
  85. package/components/IconPicker/index.d.ts +7 -0
  86. package/components/IconPicker/index.js +49 -0
  87. package/components/IconPicker/index.js.map +1 -0
  88. package/components/IconPicker/plugins/customPlugin.d.ts +2 -0
  89. package/components/IconPicker/plugins/customPlugin.js +157 -0
  90. package/components/IconPicker/plugins/customPlugin.js.map +1 -0
  91. package/components/IconPicker/plugins/emojisPlugin.d.ts +2 -0
  92. package/components/IconPicker/plugins/emojisPlugin.js +164 -0
  93. package/components/IconPicker/plugins/emojisPlugin.js.map +1 -0
  94. package/components/IconPicker/plugins/graphql.d.ts +20 -0
  95. package/components/IconPicker/plugins/graphql.js +18 -0
  96. package/components/IconPicker/plugins/graphql.js.map +1 -0
  97. package/components/IconPicker/plugins/iconsPlugin.d.ts +2 -0
  98. package/components/IconPicker/plugins/iconsPlugin.js +146 -0
  99. package/components/IconPicker/plugins/iconsPlugin.js.map +1 -0
  100. package/components/IconPicker/types.d.ts +22 -0
  101. package/components/IconPicker/types.js +15 -0
  102. package/components/IconPicker/types.js.map +1 -0
  103. package/components/MultiImageUpload.js.map +1 -1
  104. package/components/OverlayLayout/OverlayLayout.js.map +1 -1
  105. package/components/RichTextEditor/tools/header/index.js.map +1 -1
  106. package/components/RichTextEditor/tools/image/index.js.map +1 -1
  107. package/components/RichTextEditor/tools/image/tunes.js.map +1 -1
  108. package/components/RichTextEditor/tools/image/ui.js.map +1 -1
  109. package/components/RichTextEditor/tools/paragraph/index.js.map +1 -1
  110. package/components/RichTextEditor/tools/textColor/index.js.map +1 -1
  111. package/components/SimpleUI/InputField.js.map +1 -1
  112. package/components/SingleImageUpload.js.map +1 -1
  113. package/hooks/useConfirmationDialog.js.map +1 -1
  114. package/hooks/useDialog.js.map +1 -1
  115. package/hooks/useIsMounted.js.map +1 -1
  116. package/hooks/useKeyHandler.js.map +1 -1
  117. package/hooks/useSnackbar.js.map +1 -1
  118. package/index.d.ts +1 -0
  119. package/index.js +12 -0
  120. package/index.js.map +1 -1
  121. package/package.json +35 -34
  122. package/plugins/MenuPlugin.js.map +1 -1
  123. package/plugins/PermissionRendererPlugin.js.map +1 -1
  124. package/plugins/globalSearch/SearchBar.js.map +1 -1
  125. package/plugins/globalSearch/SearchBarDropdown.js.map +1 -1
  126. package/plugins/globalSearch/index.js.map +1 -1
  127. package/types.d.ts +1 -0
  128. package/types.js +7 -0
  129. package/types.js.map +1 -1
  130. package/ui/elements/AccordionElement.js +3 -4
  131. package/ui/elements/AccordionElement.js.map +1 -1
  132. package/ui/elements/ButtonElement.js.map +1 -1
  133. package/ui/elements/ButtonGroupElement.js +2 -3
  134. package/ui/elements/ButtonGroupElement.js.map +1 -1
  135. package/ui/elements/LabelElement.js.map +1 -1
  136. package/ui/elements/NavigationMenuElement.js +2 -3
  137. package/ui/elements/NavigationMenuElement.js.map +1 -1
  138. package/ui/elements/PlaceholderElement.js.map +1 -1
  139. package/ui/elements/SmallButtonElement.js.map +1 -1
  140. package/ui/elements/TypographyElement.js +2 -3
  141. package/ui/elements/TypographyElement.js.map +1 -1
  142. package/ui/elements/form/DynamicFieldsetElement/DynamicFieldsetRowElement.js +2 -3
  143. package/ui/elements/form/DynamicFieldsetElement/DynamicFieldsetRowElement.js.map +1 -1
  144. package/ui/elements/form/DynamicFieldsetElement.js.map +1 -1
  145. package/ui/elements/form/FileManagerElement/EmptyStateElementRenderer.js.map +1 -1
  146. package/ui/elements/form/FileManagerElement/FileManagerElementRenderer.js.map +1 -1
  147. package/ui/elements/form/FileManagerElement.js.map +1 -1
  148. package/ui/elements/form/FormElement.js +3 -4
  149. package/ui/elements/form/FormElement.js.map +1 -1
  150. package/ui/elements/form/FormFieldElement.js +3 -3
  151. package/ui/elements/form/FormFieldElement.js.map +1 -1
  152. package/ui/elements/form/HiddenElement.js.map +1 -1
  153. package/ui/elements/form/InputElement.js.map +1 -1
  154. package/ui/elements/form/PasswordElement.js.map +1 -1
  155. package/ui/elements/form/SelectElement.js.map +1 -1
  156. package/ui/elements/form/TextareaElement.js.map +1 -1
  157. package/ui/views/AdminView/ContentElement.js.map +1 -1
  158. package/ui/views/AdminView/HeaderElement.js +1 -1
  159. package/ui/views/AdminView/HeaderElement.js.map +1 -1
  160. package/ui/views/AdminView/HeaderSectionCenterElement.js +2 -3
  161. package/ui/views/AdminView/HeaderSectionCenterElement.js.map +1 -1
  162. package/ui/views/AdminView/HeaderSectionLeftElement.js +2 -3
  163. package/ui/views/AdminView/HeaderSectionLeftElement.js.map +1 -1
  164. package/ui/views/AdminView/HeaderSectionRightElement.js +2 -3
  165. package/ui/views/AdminView/HeaderSectionRightElement.js.map +1 -1
  166. package/ui/views/FormView/FormContainerElement.js +2 -3
  167. package/ui/views/FormView/FormContainerElement.js.map +1 -1
  168. package/ui/views/FormView/FormFooterElement.js +2 -3
  169. package/ui/views/FormView/FormFooterElement.js.map +1 -1
  170. package/ui/views/FormView/FormHeaderElement.js +2 -3
  171. package/ui/views/FormView/FormHeaderElement.js.map +1 -1
  172. package/ui/views/FormView.js +2 -3
  173. package/ui/views/FormView.js.map +1 -1
  174. package/ui/views/OverlayView/ContentElement.js +2 -3
  175. package/ui/views/OverlayView/ContentElement.js.map +1 -1
  176. package/ui/views/OverlayView/HeaderElement.js.map +1 -1
  177. package/ui/views/OverlayView/HeaderTitleElement.js.map +1 -1
  178. package/ui/views/OverlayView.js +2 -3
  179. package/ui/views/OverlayView.js.map +1 -1
  180. package/ui/views/SplitView/SplitViewPanelElement.js +2 -3
  181. package/ui/views/SplitView/SplitViewPanelElement.js.map +1 -1
  182. package/ui/views/SplitView.js +2 -3
  183. package/ui/views/SplitView.js.map +1 -1
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.IconPickerPresenter = void 0;
8
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
9
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+ var _mobx = require("mobx");
12
+ var IconPickerPresenter = exports.IconPickerPresenter = /*#__PURE__*/function () {
13
+ function IconPickerPresenter(repository, size) {
14
+ (0, _classCallCheck2.default)(this, IconPickerPresenter);
15
+ (0, _defineProperty2.default)(this, "selectedIcon", null);
16
+ (0, _defineProperty2.default)(this, "filter", "");
17
+ (0, _defineProperty2.default)(this, "activeTab", 0);
18
+ (0, _defineProperty2.default)(this, "isMenuOpened", false);
19
+ this.repository = repository;
20
+ this.size = size;
21
+ (0, _mobx.makeAutoObservable)(this);
22
+ }
23
+ return (0, _createClass2.default)(IconPickerPresenter, [{
24
+ key: "load",
25
+ value: async function load() {
26
+ var icon = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
27
+ if (icon?.value) {
28
+ this.selectedIcon = icon;
29
+ }
30
+ await this.repository.loadIcons();
31
+ if (icon && !icon?.value) {
32
+ this.detectSelectedIcon(icon);
33
+ }
34
+ }
35
+ }, {
36
+ key: "vm",
37
+ get: function get() {
38
+ return {
39
+ activeTab: this.activeTab,
40
+ isMenuOpened: this.isMenuOpened,
41
+ isLoading: this.repository.getLoading().isLoading,
42
+ icons: this.getFilteredIcons(),
43
+ iconTypes: this.repository.getIconTypes(),
44
+ // `toJS` will unwrap an observable into a POJO. This will make it simple to use in child components.
45
+ selectedIcon: (0, _mobx.toJS)(this.selectedIcon),
46
+ filter: this.filter,
47
+ size: this.size
48
+ };
49
+ }
50
+ }, {
51
+ key: "addIcon",
52
+ value: function addIcon(icon) {
53
+ this.repository.addIcon(icon);
54
+ }
55
+ }, {
56
+ key: "closeMenu",
57
+ value: function closeMenu() {
58
+ this.isMenuOpened = false;
59
+ }
60
+ }, {
61
+ key: "openMenu",
62
+ value: function openMenu() {
63
+ this.isMenuOpened = true;
64
+ this.resetActiveTab();
65
+ }
66
+ }, {
67
+ key: "setActiveTab",
68
+ value: function setActiveTab(index) {
69
+ this.activeTab = index;
70
+ }
71
+ }, {
72
+ key: "setIcon",
73
+ value: function setIcon(icon) {
74
+ this.selectedIcon = icon;
75
+ }
76
+ }, {
77
+ key: "setFilter",
78
+ value: function setFilter(value) {
79
+ this.filter = value;
80
+ }
81
+ }, {
82
+ key: "getFilteredIcons",
83
+ value: function getFilteredIcons() {
84
+ var _this = this;
85
+ var hyphenUnderscoreRegex = /[-_]/g;
86
+ var icons = this.repository.getIcons();
87
+ return icons.filter(function (icon) {
88
+ return icon.name.replace(hyphenUnderscoreRegex, " ").toLowerCase().includes(_this.filter.toLowerCase());
89
+ });
90
+ }
91
+ }, {
92
+ key: "getActiveTabByType",
93
+ value: function getActiveTabByType(type) {
94
+ var iconTypes = this.repository.getIconTypes();
95
+ var index = iconTypes.findIndex(function (iconsByType) {
96
+ return iconsByType.name === type;
97
+ });
98
+ return index !== -1 ? index : 0;
99
+ }
100
+ }, {
101
+ key: "resetActiveTab",
102
+ value: function resetActiveTab() {
103
+ this.setActiveTab(this.selectedIcon ? this.getActiveTabByType(this.selectedIcon.type) : 0);
104
+ }
105
+ }, {
106
+ key: "detectSelectedIcon",
107
+ value: function detectSelectedIcon(icon) {
108
+ var iconByName = this.repository.getIcons().find(function (x) {
109
+ return x.name === icon.name && icon.type === x.type;
110
+ });
111
+ if (iconByName) {
112
+ this.selectedIcon = iconByName;
113
+ }
114
+ }
115
+ }]);
116
+ }();
117
+
118
+ //# sourceMappingURL=IconPickerPresenter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_mobx","require","IconPickerPresenter","exports","repository","size","_classCallCheck2","default","_defineProperty2","makeAutoObservable","_createClass2","key","value","load","icon","arguments","length","undefined","selectedIcon","loadIcons","detectSelectedIcon","get","activeTab","isMenuOpened","isLoading","getLoading","icons","getFilteredIcons","iconTypes","getIconTypes","toJS","filter","addIcon","closeMenu","openMenu","resetActiveTab","setActiveTab","index","setIcon","setFilter","_this","hyphenUnderscoreRegex","getIcons","name","replace","toLowerCase","includes","getActiveTabByType","type","findIndex","iconsByType","iconByName","find","x"],"sources":["IconPickerPresenter.ts"],"sourcesContent":["import { makeAutoObservable, toJS } from \"mobx\";\n\nimport { IconRepository } from \"./IconRepository\";\nimport { Icon } from \"./types\";\nimport { IconType } from \"./config\";\n\nexport interface IconPickerPresenterInterface {\n load(icon: Icon): Promise<void>;\n setIcon(icon: Icon): void;\n addIcon(icon: Icon): void;\n setFilter(value: string): void;\n setActiveTab(index: number): void;\n openMenu(): void;\n closeMenu(): void;\n get vm(): {\n isLoading: boolean;\n activeTab: number;\n isMenuOpened: boolean;\n icons: Icon[];\n iconTypes: IconType[];\n selectedIcon: Icon | null;\n filter: string;\n size?: string;\n };\n}\n\nexport class IconPickerPresenter implements IconPickerPresenterInterface {\n private repository: IconRepository;\n private selectedIcon: Icon | null = null;\n private filter = \"\";\n private activeTab = 0;\n private isMenuOpened = false;\n private size: string | undefined;\n\n constructor(repository: IconRepository, size?: string) {\n this.repository = repository;\n this.size = size;\n makeAutoObservable(this);\n }\n\n async load(icon: Icon | null = null) {\n if (icon?.value) {\n this.selectedIcon = icon;\n }\n\n await this.repository.loadIcons();\n\n if (icon && !icon?.value) {\n this.detectSelectedIcon(icon);\n }\n }\n\n get vm() {\n return {\n activeTab: this.activeTab,\n isMenuOpened: this.isMenuOpened,\n isLoading: this.repository.getLoading().isLoading,\n icons: this.getFilteredIcons(),\n iconTypes: this.repository.getIconTypes(),\n // `toJS` will unwrap an observable into a POJO. This will make it simple to use in child components.\n selectedIcon: toJS(this.selectedIcon),\n filter: this.filter,\n size: this.size\n };\n }\n\n addIcon(icon: Icon) {\n this.repository.addIcon(icon);\n }\n\n closeMenu(): void {\n this.isMenuOpened = false;\n }\n\n openMenu(): void {\n this.isMenuOpened = true;\n this.resetActiveTab();\n }\n\n setActiveTab(index: number) {\n this.activeTab = index;\n }\n\n setIcon(icon: Icon | null) {\n this.selectedIcon = icon;\n }\n\n setFilter(value: string) {\n this.filter = value;\n }\n\n private getFilteredIcons() {\n const hyphenUnderscoreRegex = /[-_]/g;\n const icons = this.repository.getIcons();\n\n return icons.filter(icon =>\n icon.name\n .replace(hyphenUnderscoreRegex, \" \")\n .toLowerCase()\n .includes(this.filter.toLowerCase())\n );\n }\n\n private getActiveTabByType(type: string) {\n const iconTypes = this.repository.getIconTypes();\n const index = iconTypes.findIndex(iconsByType => iconsByType.name === type);\n\n return index !== -1 ? index : 0;\n }\n\n private resetActiveTab() {\n this.setActiveTab(this.selectedIcon ? this.getActiveTabByType(this.selectedIcon.type) : 0);\n }\n\n private detectSelectedIcon(icon: Icon) {\n const iconByName = this.repository\n .getIcons()\n .find(x => x.name === icon.name && icon.type === x.type);\n\n if (iconByName) {\n this.selectedIcon = iconByName;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+
3
+ var _IconPickerPresenter = require("./IconPickerPresenter");
4
+ var _IconRepository = require("./IconRepository");
5
+ var mockIconTypes = [{
6
+ name: "icon"
7
+ }, {
8
+ name: "emoji"
9
+ }, {
10
+ name: "custom"
11
+ }];
12
+ var mockIcons = [{
13
+ type: "emoji",
14
+ name: "thumbs_up",
15
+ value: "👍",
16
+ category: "People & Body",
17
+ skinToneSupport: true
18
+ }, {
19
+ type: "icon",
20
+ name: "regular_address-book",
21
+ value: '<path fill="currentColor" d="M384 48c8.8 0 16 7.2 16 16v384c0 8.8-7.2 16-16 16H96c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16h288zM96 0C60.7 0 32 28.7 32 64v384c0 35.3 28.7 64 64 64h288c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64H96zm144 256a64 64 0 1 0 0-128a64 64 0 1 0 0 128zm-32 32c-44.2 0-80 35.8-80 80c0 8.8 7.2 16 16 16h192c8.8 0 16-7.2 16-16c0-44.2-35.8-80-80-80h-64zM512 80c0-8.8-7.2-16-16-16s-16 7.2-16 16v64c0 8.8 7.2 16 16 16s16-7.2 16-16V80zm-16 112c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16s16-7.2 16-16v-64c0-8.8-7.2-16-16-16zm16 144c0-8.8-7.2-16-16-16s-16 7.2-16 16v64c0 8.8 7.2 16 16 16s16-7.2 16-16v-64z"/>',
22
+ category: "Business"
23
+ }];
24
+ var mockIconPackProviders = [{
25
+ name: "mock_icons",
26
+ getIcons: async function getIcons() {
27
+ return mockIcons;
28
+ }
29
+ }];
30
+ describe("IconPickerPresenter", function () {
31
+ var icon = {
32
+ type: "icon",
33
+ name: "solid_bullseye",
34
+ value: '<path fill="currentColor" d="M448 256a192 192 0 1 0-384 0a192 192 0 1 0 384 0zM0 256a256 256 0 1 1 512 0a256 256 0 1 1-512 0zm256 80a80 80 0 1 0 0-160a80 80 0 1 0 0 160zm0-224a144 144 0 1 1 0 288a144 144 0 1 1 0-288zm-32 144a32 32 0 1 1 64 0a32 32 0 1 1-64 0z"/>',
35
+ category: "Business",
36
+ color: "#282fe6"
37
+ };
38
+ var presenter;
39
+ beforeEach(function () {
40
+ var repository = new _IconRepository.IconRepository(mockIconTypes, mockIconPackProviders);
41
+ presenter = new _IconPickerPresenter.IconPickerPresenter(repository);
42
+ });
43
+ it("should create an IconPickerPresenter with the `vm` definition", async function () {
44
+ // let's load icons and set a predefined `selectedIcon`
45
+ await presenter.load(icon);
46
+
47
+ // `vm` should have the expected `selectedIcon` definition
48
+ expect(presenter.vm.selectedIcon).toEqual(icon);
49
+
50
+ // `vm` should have the expected `icons` definition
51
+ expect(presenter.vm.icons).toEqual(mockIcons);
52
+ });
53
+ it("should be able to select an icon", async function () {
54
+ // let's load icons
55
+ await presenter.load();
56
+
57
+ // should be able to set the icon
58
+ presenter.setIcon(presenter.vm.icons[0]);
59
+
60
+ // `vm` should have the expected `selectedIcon` value
61
+ expect(presenter.vm.selectedIcon).toEqual(presenter.vm.icons[0]);
62
+ });
63
+ it("should be able to add an icon", async function () {
64
+ // let's load icons
65
+ await presenter.load();
66
+
67
+ // should be able to set the icon
68
+ presenter.addIcon(icon);
69
+
70
+ // `vm` should have three icons
71
+ expect(presenter.vm.icons.length).toBe(3);
72
+
73
+ // `vm` should have the expected `icons` value
74
+ expect(presenter.vm.icons).toEqual([].concat(mockIcons, [icon]));
75
+ });
76
+ it("should be able to filter icons by name", async function () {
77
+ // let's load icons
78
+ await presenter.load();
79
+
80
+ // should be able to set the filter
81
+ presenter.setFilter("book");
82
+
83
+ // `vm` should have only one icon
84
+ expect(presenter.vm.icons.length).toBe(1);
85
+
86
+ // `vm` should have filtered icon
87
+ expect(presenter.vm.icons[0]).toEqual(mockIcons[1]);
88
+ });
89
+ it("should be able to set active tab on menu open", async function () {
90
+ // let's load icons and set a predefined `selectedIcon`
91
+ await presenter.load(mockIcons[0]);
92
+
93
+ // default `isMenuOpened` should be false
94
+ expect(presenter.vm.isMenuOpened).toBe(false);
95
+
96
+ // default `activeTab` should be 0
97
+ expect(presenter.vm.activeTab).toBe(0);
98
+
99
+ // should be able to set `isMenuOpened`
100
+ // should be able to set `activeTab` based on `selectedIcon` type
101
+ presenter.openMenu();
102
+
103
+ // `vm` should have the expected `isMenuOpened` value
104
+ expect(presenter.vm.isMenuOpened).toBe(true);
105
+
106
+ // `vm` should have the expected `activeTab` value
107
+ expect(presenter.vm.activeTab).toBe(1);
108
+ });
109
+ });
110
+
111
+ //# sourceMappingURL=IconPickerPresenter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_IconPickerPresenter","require","_IconRepository","mockIconTypes","name","mockIcons","type","value","category","skinToneSupport","mockIconPackProviders","getIcons","describe","icon","color","presenter","beforeEach","repository","IconRepository","IconPickerPresenter","it","load","expect","vm","selectedIcon","toEqual","icons","setIcon","addIcon","length","toBe","concat","setFilter","isMenuOpened","activeTab","openMenu"],"sources":["IconPickerPresenter.test.ts"],"sourcesContent":["import { IconPickerPresenter } from \"./IconPickerPresenter\";\nimport { IconRepository } from \"./IconRepository\";\nimport { Icon } from \"./types\";\n\nconst mockIconTypes = [{ name: \"icon\" }, { name: \"emoji\" }, { name: \"custom\" }];\n\nconst mockIcons: Icon[] = [\n {\n type: \"emoji\",\n name: \"thumbs_up\",\n value: \"👍\",\n category: \"People & Body\",\n skinToneSupport: true\n },\n {\n type: \"icon\",\n name: \"regular_address-book\",\n value: '<path fill=\"currentColor\" d=\"M384 48c8.8 0 16 7.2 16 16v384c0 8.8-7.2 16-16 16H96c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16h288zM96 0C60.7 0 32 28.7 32 64v384c0 35.3 28.7 64 64 64h288c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64H96zm144 256a64 64 0 1 0 0-128a64 64 0 1 0 0 128zm-32 32c-44.2 0-80 35.8-80 80c0 8.8 7.2 16 16 16h192c8.8 0 16-7.2 16-16c0-44.2-35.8-80-80-80h-64zM512 80c0-8.8-7.2-16-16-16s-16 7.2-16 16v64c0 8.8 7.2 16 16 16s16-7.2 16-16V80zm-16 112c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16s16-7.2 16-16v-64c0-8.8-7.2-16-16-16zm16 144c0-8.8-7.2-16-16-16s-16 7.2-16 16v64c0 8.8 7.2 16 16 16s16-7.2 16-16v-64z\"/>',\n category: \"Business\"\n }\n];\n\nconst mockIconPackProviders = [\n {\n name: \"mock_icons\",\n getIcons: async () => {\n return mockIcons;\n }\n }\n];\n\ndescribe(\"IconPickerPresenter\", () => {\n const icon: Icon = {\n type: \"icon\",\n name: \"solid_bullseye\",\n value: '<path fill=\"currentColor\" d=\"M448 256a192 192 0 1 0-384 0a192 192 0 1 0 384 0zM0 256a256 256 0 1 1 512 0a256 256 0 1 1-512 0zm256 80a80 80 0 1 0 0-160a80 80 0 1 0 0 160zm0-224a144 144 0 1 1 0 288a144 144 0 1 1 0-288zm-32 144a32 32 0 1 1 64 0a32 32 0 1 1-64 0z\"/>',\n category: \"Business\",\n color: \"#282fe6\"\n };\n\n let presenter: IconPickerPresenter;\n\n beforeEach(() => {\n const repository = new IconRepository(mockIconTypes, mockIconPackProviders);\n presenter = new IconPickerPresenter(repository);\n });\n\n it(\"should create an IconPickerPresenter with the `vm` definition\", async () => {\n // let's load icons and set a predefined `selectedIcon`\n await presenter.load(icon);\n\n // `vm` should have the expected `selectedIcon` definition\n expect(presenter.vm.selectedIcon).toEqual(icon);\n\n // `vm` should have the expected `icons` definition\n expect(presenter.vm.icons).toEqual(mockIcons);\n });\n\n it(\"should be able to select an icon\", async () => {\n // let's load icons\n await presenter.load();\n\n // should be able to set the icon\n presenter.setIcon(presenter.vm.icons[0]);\n\n // `vm` should have the expected `selectedIcon` value\n expect(presenter.vm.selectedIcon).toEqual(presenter.vm.icons[0]);\n });\n\n it(\"should be able to add an icon\", async () => {\n // let's load icons\n await presenter.load();\n\n // should be able to set the icon\n presenter.addIcon(icon);\n\n // `vm` should have three icons\n expect(presenter.vm.icons.length).toBe(3);\n\n // `vm` should have the expected `icons` value\n expect(presenter.vm.icons).toEqual([...mockIcons, icon]);\n });\n\n it(\"should be able to filter icons by name\", async () => {\n // let's load icons\n await presenter.load();\n\n // should be able to set the filter\n presenter.setFilter(\"book\");\n\n // `vm` should have only one icon\n expect(presenter.vm.icons.length).toBe(1);\n\n // `vm` should have filtered icon\n expect(presenter.vm.icons[0]).toEqual(mockIcons[1]);\n });\n\n it(\"should be able to set active tab on menu open\", async () => {\n // let's load icons and set a predefined `selectedIcon`\n await presenter.load(mockIcons[0]);\n\n // default `isMenuOpened` should be false\n expect(presenter.vm.isMenuOpened).toBe(false);\n\n // default `activeTab` should be 0\n expect(presenter.vm.activeTab).toBe(0);\n\n // should be able to set `isMenuOpened`\n // should be able to set `activeTab` based on `selectedIcon` type\n presenter.openMenu();\n\n // `vm` should have the expected `isMenuOpened` value\n expect(presenter.vm.isMenuOpened).toBe(true);\n\n // `vm` should have the expected `activeTab` value\n expect(presenter.vm.activeTab).toBe(1);\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ import { IconPickerPresenterInterface } from "./IconPickerPresenter";
3
+ interface IconPickerPresenterProviderProps {
4
+ presenter: IconPickerPresenterInterface;
5
+ children: React.ReactNode;
6
+ }
7
+ export declare const IconPickerPresenterProvider: ({ presenter, children }: IconPickerPresenterProviderProps) => React.JSX.Element;
8
+ export declare function useIconPicker(): IconPickerPresenterInterface;
9
+ export {};
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.IconPickerPresenterProvider = void 0;
8
+ exports.useIconPicker = useIconPicker;
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var IconPickerPresenterContext = /*#__PURE__*/_react.default.createContext(undefined);
11
+ var IconPickerPresenterProvider = exports.IconPickerPresenterProvider = function IconPickerPresenterProvider(_ref) {
12
+ var presenter = _ref.presenter,
13
+ children = _ref.children;
14
+ return /*#__PURE__*/_react.default.createElement(IconPickerPresenterContext.Provider, {
15
+ value: presenter
16
+ }, children);
17
+ };
18
+ function useIconPicker() {
19
+ var context = _react.default.useContext(IconPickerPresenterContext);
20
+ if (!context) {
21
+ throw Error("Missing <IconPickerPresenterProvider> in the component tree!");
22
+ }
23
+ return context;
24
+ }
25
+
26
+ //# sourceMappingURL=IconPickerPresenterProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","IconPickerPresenterContext","React","createContext","undefined","IconPickerPresenterProvider","exports","_ref","presenter","children","default","createElement","Provider","value","useIconPicker","context","useContext","Error"],"sources":["IconPickerPresenterProvider.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { IconPickerPresenterInterface } from \"./IconPickerPresenter\";\n\ninterface IconPickerPresenterProviderProps {\n presenter: IconPickerPresenterInterface;\n children: React.ReactNode;\n}\n\nconst IconPickerPresenterContext = React.createContext<IconPickerPresenterInterface | undefined>(\n undefined\n);\n\nexport const IconPickerPresenterProvider = ({\n presenter,\n children\n}: IconPickerPresenterProviderProps) => {\n return (\n <IconPickerPresenterContext.Provider value={presenter}>\n {children}\n </IconPickerPresenterContext.Provider>\n );\n};\n\nexport function useIconPicker() {\n const context = React.useContext(IconPickerPresenterContext);\n if (!context) {\n throw Error(`Missing <IconPickerPresenterProvider> in the component tree!`);\n }\n return context;\n}\n"],"mappings":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AASA,IAAMC,0BAA0B,gBAAGC,cAAK,CAACC,aAAa,CAClDC,SACJ,CAAC;AAEM,IAAMC,2BAA2B,GAAAC,OAAA,CAAAD,2BAAA,GAAG,SAA9BA,2BAA2BA,CAAAE,IAAA,EAGA;EAAA,IAFpCC,SAAS,GAAAD,IAAA,CAATC,SAAS;IACTC,QAAQ,GAAAF,IAAA,CAARE,QAAQ;EAER,oBACIX,MAAA,CAAAY,OAAA,CAAAC,aAAA,CAACV,0BAA0B,CAACW,QAAQ;IAACC,KAAK,EAAEL;EAAU,GACjDC,QACgC,CAAC;AAE9C,CAAC;AAEM,SAASK,aAAaA,CAAA,EAAG;EAC5B,IAAMC,OAAO,GAAGb,cAAK,CAACc,UAAU,CAACf,0BAA0B,CAAC;EAC5D,IAAI,CAACc,OAAO,EAAE;IACV,MAAME,KAAK,+DAA+D,CAAC;EAC/E;EACA,OAAOF,OAAO;AAClB","ignoreList":[]}
@@ -0,0 +1,32 @@
1
+ import React from "react";
2
+ import { Icon } from "./types";
3
+ export declare const IconPickerTabRenderer: (() => null) & {
4
+ original: () => null;
5
+ originalName: string;
6
+ displayName: string;
7
+ } & {
8
+ original: (() => null) & {
9
+ original: () => null;
10
+ originalName: string;
11
+ displayName: string;
12
+ };
13
+ originalName: string;
14
+ displayName: string;
15
+ } & {
16
+ createDecorator: (decorator: import("@webiny/react-composition").ComponentDecorator<(() => null) & {
17
+ original: () => null;
18
+ originalName: string;
19
+ displayName: string;
20
+ }>) => (props: unknown) => React.JSX.Element;
21
+ };
22
+ interface CellDecorator {
23
+ (cell: React.ReactElement): React.ReactElement;
24
+ }
25
+ export interface IconPickerTabProps {
26
+ label: string;
27
+ onChange: (icon: Icon) => void;
28
+ actions?: React.ReactElement;
29
+ cellDecorator?: CellDecorator;
30
+ }
31
+ export declare const IconPickerTab: ({ label, actions, onChange, cellDecorator }: IconPickerTabProps) => React.JSX.Element;
32
+ export {};
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.IconPickerTabRenderer = exports.IconPickerTab = void 0;
9
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
10
+ var _react = _interopRequireWildcard(require("react"));
11
+ var _reactVirtualized = require("react-virtualized");
12
+ var _groupBy = _interopRequireDefault(require("lodash/groupBy"));
13
+ var _Tabs = require("@webiny/ui/Tabs");
14
+ var _Typography = require("@webiny/ui/Typography");
15
+ var _DelayedOnChange = require("@webiny/ui/DelayedOnChange");
16
+ var _Input = require("@webiny/ui/Input");
17
+ var _reactComposition = require("@webiny/react-composition");
18
+ var _IconRenderer = require("./IconRenderer");
19
+ var _IconPicker = require("./IconPicker.styles");
20
+ var _IconPickerPresenterProvider = require("./IconPickerPresenterProvider");
21
+ var _IconType = require("./config/IconType");
22
+ var _types = require("./types");
23
+ var _excluded = ["key"];
24
+ var COLUMN_COUNT = 8;
25
+ var IconPickerTabRenderer = exports.IconPickerTabRenderer = (0, _reactComposition.makeDecoratable)("IconPickerTabRenderer", function () {
26
+ return null;
27
+ });
28
+ var getRows = function getRows(icons, size) {
29
+ // Group the icons by their category.
30
+ var groupedObjects = (0, _groupBy.default)(icons, "category");
31
+ var rows = [];
32
+
33
+ // Iterate over each category in the grouped icons.
34
+ for (var key in groupedObjects) {
35
+ // Skip any group where the key is `undefined` (these icons will be handled separately).
36
+ if (key !== "undefined") {
37
+ var rowIcons = groupedObjects[key];
38
+
39
+ // Add a row for the category name.
40
+ rows.push({
41
+ type: "category-name",
42
+ name: key
43
+ });
44
+
45
+ // Split the icons in this category into groups of COLUMN_COUNT and add them as rows.
46
+ while (rowIcons.length) {
47
+ rows.push({
48
+ type: "icons",
49
+ icons: rowIcons.splice(0, size === _types.ICON_PICKER_SIZE.SMALL ? 6 : COLUMN_COUNT)
50
+ });
51
+ }
52
+ }
53
+ }
54
+
55
+ // Handle icons that don't have a category (key is `undefined`).
56
+ if (groupedObjects.undefined) {
57
+ var _rowIcons = groupedObjects.undefined;
58
+
59
+ // Add a row for the `Uncategorized` category name.
60
+ rows.push({
61
+ type: "category-name",
62
+ name: "Uncategorized"
63
+ });
64
+
65
+ // Split these icons into groups of COLUMN_COUNT and add them as rows.
66
+ while (_rowIcons.length) {
67
+ rows.push({
68
+ type: "icons",
69
+ icons: _rowIcons.splice(0, size === _types.ICON_PICKER_SIZE.SMALL ? 6 : COLUMN_COUNT)
70
+ });
71
+ }
72
+ }
73
+ return rows;
74
+ };
75
+ var useIconTypeRows = function useIconTypeRows(type) {
76
+ var presenter = (0, _IconPickerPresenterProvider.useIconPicker)();
77
+ var icons = presenter.vm.icons.filter(function (icon) {
78
+ return icon.type === type;
79
+ });
80
+ var rows = getRows(icons, presenter.vm.size);
81
+ return {
82
+ isEmpty: rows.length === 0,
83
+ rows: rows,
84
+ rowCount: rows.length
85
+ };
86
+ };
87
+ var RowRenderer = function RowRenderer(_ref) {
88
+ var row = _ref.row,
89
+ style = _ref.style,
90
+ cellDecorator = _ref.cellDecorator,
91
+ onIconClick = _ref.onIconClick;
92
+ var presenter = (0, _IconPickerPresenterProvider.useIconPicker)();
93
+ var value = presenter.vm.selectedIcon;
94
+ if (row.type === "category-name") {
95
+ return /*#__PURE__*/_react.default.createElement(_IconPicker.Row, {
96
+ style: style
97
+ }, /*#__PURE__*/_react.default.createElement(_IconPicker.CategoryLabel, null, row.name));
98
+ }
99
+ return /*#__PURE__*/_react.default.createElement(_IconPicker.Row, {
100
+ style: style
101
+ }, row.icons.map(function (item, itemKey) {
102
+ return /*#__PURE__*/_react.default.createElement(_react.Fragment, {
103
+ key: itemKey
104
+ }, cellDecorator(/*#__PURE__*/_react.default.createElement(_IconPicker.Cell, {
105
+ key: itemKey,
106
+ isActive: item.name === value?.name,
107
+ onClick: function onClick() {
108
+ return onIconClick(item);
109
+ }
110
+ }, /*#__PURE__*/_react.default.createElement(_IconRenderer.IconProvider, {
111
+ icon: item
112
+ }, /*#__PURE__*/_react.default.createElement(_IconRenderer.IconRenderer, null)))));
113
+ }));
114
+ };
115
+ var noopDecorator = function noopDecorator(cell) {
116
+ return cell;
117
+ };
118
+ var IconPickerTab = exports.IconPickerTab = function IconPickerTab(_ref2) {
119
+ var label = _ref2.label,
120
+ actions = _ref2.actions,
121
+ onChange = _ref2.onChange,
122
+ _ref2$cellDecorator = _ref2.cellDecorator,
123
+ cellDecorator = _ref2$cellDecorator === void 0 ? noopDecorator : _ref2$cellDecorator;
124
+ var _useIconType = (0, _IconType.useIconType)(),
125
+ type = _useIconType.type;
126
+ var _useIconTypeRows = useIconTypeRows(type),
127
+ isEmpty = _useIconTypeRows.isEmpty,
128
+ rowCount = _useIconTypeRows.rowCount,
129
+ rows = _useIconTypeRows.rows;
130
+ var presenter = (0, _IconPickerPresenterProvider.useIconPicker)();
131
+ var size = presenter.vm.size;
132
+ return /*#__PURE__*/_react.default.createElement(_Tabs.Tab, {
133
+ label: label
134
+ }, /*#__PURE__*/_react.default.createElement(_IconPicker.TabContentWrapper, {
135
+ size: size
136
+ }, /*#__PURE__*/_react.default.createElement(_IconPicker.InputsWrapper, null, /*#__PURE__*/_react.default.createElement(_DelayedOnChange.DelayedOnChange, {
137
+ value: presenter.vm.filter,
138
+ onChange: function onChange(value) {
139
+ return presenter.setFilter(value);
140
+ }
141
+ }, function (_ref3) {
142
+ var value = _ref3.value,
143
+ onChange = _ref3.onChange;
144
+ return /*#__PURE__*/_react.default.createElement(_Input.Input, {
145
+ value: value,
146
+ onChange: onChange,
147
+ placeholder: "Search icons..."
148
+ });
149
+ }), actions ? actions : null), /*#__PURE__*/_react.default.createElement(_IconPicker.ListWrapper, null, isEmpty ? /*#__PURE__*/_react.default.createElement(_IconPicker.NoResultsWrapper, null, /*#__PURE__*/_react.default.createElement(_Typography.Typography, {
150
+ use: "body1"
151
+ }, "No results found.")) : /*#__PURE__*/_react.default.createElement(_reactVirtualized.List, {
152
+ rowRenderer: function rowRenderer(_ref4) {
153
+ var key = _ref4.key,
154
+ props = (0, _objectWithoutProperties2.default)(_ref4, _excluded);
155
+ return /*#__PURE__*/_react.default.createElement(RowRenderer, Object.assign({
156
+ key: key,
157
+ row: rows[props.index],
158
+ cellDecorator: cellDecorator,
159
+ onIconClick: onChange
160
+ }, props));
161
+ },
162
+ height: size === _types.ICON_PICKER_SIZE.SMALL ? 250 : 320,
163
+ rowCount: rowCount,
164
+ rowHeight: 40,
165
+ width: size === _types.ICON_PICKER_SIZE.SMALL ? 255 : 340
166
+ }))));
167
+ };
168
+
169
+ //# sourceMappingURL=IconPickerTab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactVirtualized","_groupBy","_interopRequireDefault","_Tabs","_Typography","_DelayedOnChange","_Input","_reactComposition","_IconRenderer","_IconPicker","_IconPickerPresenterProvider","_IconType","_types","_excluded","COLUMN_COUNT","IconPickerTabRenderer","exports","makeDecoratable","getRows","icons","size","groupedObjects","groupBy","rows","key","rowIcons","push","type","name","length","splice","ICON_PICKER_SIZE","SMALL","undefined","useIconTypeRows","presenter","useIconPicker","vm","filter","icon","isEmpty","rowCount","RowRenderer","_ref","row","style","cellDecorator","onIconClick","value","selectedIcon","default","createElement","Row","CategoryLabel","map","item","itemKey","Fragment","Cell","isActive","onClick","IconProvider","IconRenderer","noopDecorator","cell","IconPickerTab","_ref2","label","actions","onChange","_ref2$cellDecorator","_useIconType","useIconType","_useIconTypeRows","Tab","TabContentWrapper","InputsWrapper","DelayedOnChange","setFilter","_ref3","Input","placeholder","ListWrapper","NoResultsWrapper","Typography","use","List","rowRenderer","_ref4","props","_objectWithoutProperties2","Object","assign","index","height","rowHeight","width"],"sources":["IconPickerTab.tsx"],"sourcesContent":["import React, { Fragment } from \"react\";\nimport { List } from \"react-virtualized\";\nimport groupBy from \"lodash/groupBy\";\n\nimport { Tab } from \"@webiny/ui/Tabs\";\nimport { Typography } from \"@webiny/ui/Typography\";\nimport { DelayedOnChange } from \"@webiny/ui/DelayedOnChange\";\nimport { Input } from \"@webiny/ui/Input\";\nimport { makeDecoratable } from \"@webiny/react-composition\";\n\nimport { IconProvider, IconRenderer } from \"./IconRenderer\";\nimport {\n Row,\n Cell,\n CategoryLabel,\n TabContentWrapper,\n ListWrapper,\n NoResultsWrapper,\n InputsWrapper\n} from \"./IconPicker.styles\";\nimport { useIconPicker } from \"./IconPickerPresenterProvider\";\nimport { useIconType } from \"./config/IconType\";\nimport { Icon, IconPickerGridRow, ICON_PICKER_SIZE } from \"./types\";\n\nconst COLUMN_COUNT = 8;\n\nexport const IconPickerTabRenderer = makeDecoratable(\"IconPickerTabRenderer\", () => null);\n\nconst getRows = (icons: Icon[], size?: string) => {\n // Group the icons by their category.\n const groupedObjects = groupBy(icons, \"category\");\n const rows: IconPickerGridRow[] = [];\n\n // Iterate over each category in the grouped icons.\n for (const key in groupedObjects) {\n // Skip any group where the key is `undefined` (these icons will be handled separately).\n if (key !== \"undefined\") {\n const rowIcons = groupedObjects[key];\n\n // Add a row for the category name.\n rows.push({ type: \"category-name\", name: key });\n\n // Split the icons in this category into groups of COLUMN_COUNT and add them as rows.\n while (rowIcons.length) {\n rows.push({\n type: \"icons\",\n icons: rowIcons.splice(0, size === ICON_PICKER_SIZE.SMALL ? 6 : COLUMN_COUNT)\n });\n }\n }\n }\n\n // Handle icons that don't have a category (key is `undefined`).\n if (groupedObjects.undefined) {\n const rowIcons = groupedObjects.undefined;\n\n // Add a row for the `Uncategorized` category name.\n rows.push({ type: \"category-name\", name: \"Uncategorized\" });\n\n // Split these icons into groups of COLUMN_COUNT and add them as rows.\n while (rowIcons.length) {\n rows.push({\n type: \"icons\",\n icons: rowIcons.splice(0, size === ICON_PICKER_SIZE.SMALL ? 6 : COLUMN_COUNT)\n });\n }\n }\n\n return rows;\n};\n\nconst useIconTypeRows = (type: string) => {\n const presenter = useIconPicker();\n const icons = presenter.vm.icons.filter(icon => icon.type === type);\n const rows = getRows(icons, presenter.vm.size);\n\n return {\n isEmpty: rows.length === 0,\n rows,\n rowCount: rows.length\n };\n};\n\ninterface RenderRowProps {\n onIconClick: (icon: Icon) => void;\n style: Record<string, any>;\n row: IconPickerGridRow;\n cellDecorator: CellDecorator;\n}\n\nconst RowRenderer = ({ row, style, cellDecorator, onIconClick }: RenderRowProps) => {\n const presenter = useIconPicker();\n const value = presenter.vm.selectedIcon;\n\n if (row.type === \"category-name\") {\n return (\n <Row style={style}>\n <CategoryLabel>{row.name}</CategoryLabel>\n </Row>\n );\n }\n\n return (\n <Row style={style}>\n {row.icons.map((item, itemKey) => (\n <Fragment key={itemKey}>\n {cellDecorator(\n <Cell\n key={itemKey}\n isActive={item.name === value?.name}\n onClick={() => onIconClick(item)}\n >\n <IconProvider icon={item}>\n <IconRenderer />\n </IconProvider>\n </Cell>\n )}\n </Fragment>\n ))}\n </Row>\n );\n};\n\ninterface CellDecorator {\n (cell: React.ReactElement): React.ReactElement;\n}\n\nconst noopDecorator: CellDecorator = cell => cell;\n\nexport interface IconPickerTabProps {\n label: string;\n onChange: (icon: Icon) => void;\n actions?: React.ReactElement;\n cellDecorator?: CellDecorator;\n}\n\nexport const IconPickerTab = ({\n label,\n actions,\n onChange,\n cellDecorator = noopDecorator\n}: IconPickerTabProps) => {\n const { type } = useIconType();\n const { isEmpty, rowCount, rows } = useIconTypeRows(type);\n const presenter = useIconPicker();\n const size = presenter.vm.size;\n\n return (\n <Tab label={label}>\n <TabContentWrapper size={size}>\n <InputsWrapper>\n <DelayedOnChange\n value={presenter.vm.filter}\n onChange={value => presenter.setFilter(value)}\n >\n {({ value, onChange }) => (\n <Input\n value={value}\n onChange={onChange}\n placeholder={\"Search icons...\"}\n />\n )}\n </DelayedOnChange>\n {actions ? actions : null}\n </InputsWrapper>\n <ListWrapper>\n {isEmpty ? (\n <NoResultsWrapper>\n <Typography use=\"body1\">No results found.</Typography>\n </NoResultsWrapper>\n ) : (\n <List\n rowRenderer={({ key, ...props }) => (\n <RowRenderer\n key={key}\n row={rows[props.index]}\n cellDecorator={cellDecorator}\n onIconClick={onChange}\n {...props}\n />\n )}\n height={size === ICON_PICKER_SIZE.SMALL ? 250 : 320}\n rowCount={rowCount}\n rowHeight={40}\n width={size === ICON_PICKER_SIZE.SMALL ? 255 : 340}\n />\n )}\n </ListWrapper>\n </TabContentWrapper>\n </Tab>\n );\n};\n"],"mappings":";;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,iBAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAC,sBAAA,CAAAH,OAAA;AAEA,IAAAI,KAAA,GAAAJ,OAAA;AACA,IAAAK,WAAA,GAAAL,OAAA;AACA,IAAAM,gBAAA,GAAAN,OAAA;AACA,IAAAO,MAAA,GAAAP,OAAA;AACA,IAAAQ,iBAAA,GAAAR,OAAA;AAEA,IAAAS,aAAA,GAAAT,OAAA;AACA,IAAAU,WAAA,GAAAV,OAAA;AASA,IAAAW,4BAAA,GAAAX,OAAA;AACA,IAAAY,SAAA,GAAAZ,OAAA;AACA,IAAAa,MAAA,GAAAb,OAAA;AAAoE,IAAAc,SAAA;AAEpE,IAAMC,YAAY,GAAG,CAAC;AAEf,IAAMC,qBAAqB,GAAAC,OAAA,CAAAD,qBAAA,GAAG,IAAAE,iCAAe,EAAC,uBAAuB,EAAE;EAAA,OAAM,IAAI;AAAA,EAAC;AAEzF,IAAMC,OAAO,GAAG,SAAVA,OAAOA,CAAIC,KAAa,EAAEC,IAAa,EAAK;EAC9C;EACA,IAAMC,cAAc,GAAG,IAAAC,gBAAO,EAACH,KAAK,EAAE,UAAU,CAAC;EACjD,IAAMI,IAAyB,GAAG,EAAE;;EAEpC;EACA,KAAK,IAAMC,GAAG,IAAIH,cAAc,EAAE;IAC9B;IACA,IAAIG,GAAG,KAAK,WAAW,EAAE;MACrB,IAAMC,QAAQ,GAAGJ,cAAc,CAACG,GAAG,CAAC;;MAEpC;MACAD,IAAI,CAACG,IAAI,CAAC;QAAEC,IAAI,EAAE,eAAe;QAAEC,IAAI,EAAEJ;MAAI,CAAC,CAAC;;MAE/C;MACA,OAAOC,QAAQ,CAACI,MAAM,EAAE;QACpBN,IAAI,CAACG,IAAI,CAAC;UACNC,IAAI,EAAE,OAAO;UACbR,KAAK,EAAEM,QAAQ,CAACK,MAAM,CAAC,CAAC,EAAEV,IAAI,KAAKW,uBAAgB,CAACC,KAAK,GAAG,CAAC,GAAGlB,YAAY;QAChF,CAAC,CAAC;MACN;IACJ;EACJ;;EAEA;EACA,IAAIO,cAAc,CAACY,SAAS,EAAE;IAC1B,IAAMR,SAAQ,GAAGJ,cAAc,CAACY,SAAS;;IAEzC;IACAV,IAAI,CAACG,IAAI,CAAC;MAAEC,IAAI,EAAE,eAAe;MAAEC,IAAI,EAAE;IAAgB,CAAC,CAAC;;IAE3D;IACA,OAAOH,SAAQ,CAACI,MAAM,EAAE;MACpBN,IAAI,CAACG,IAAI,CAAC;QACNC,IAAI,EAAE,OAAO;QACbR,KAAK,EAAEM,SAAQ,CAACK,MAAM,CAAC,CAAC,EAAEV,IAAI,KAAKW,uBAAgB,CAACC,KAAK,GAAG,CAAC,GAAGlB,YAAY;MAChF,CAAC,CAAC;IACN;EACJ;EAEA,OAAOS,IAAI;AACf,CAAC;AAED,IAAMW,eAAe,GAAG,SAAlBA,eAAeA,CAAIP,IAAY,EAAK;EACtC,IAAMQ,SAAS,GAAG,IAAAC,0CAAa,EAAC,CAAC;EACjC,IAAMjB,KAAK,GAAGgB,SAAS,CAACE,EAAE,CAAClB,KAAK,CAACmB,MAAM,CAAC,UAAAC,IAAI;IAAA,OAAIA,IAAI,CAACZ,IAAI,KAAKA,IAAI;EAAA,EAAC;EACnE,IAAMJ,IAAI,GAAGL,OAAO,CAACC,KAAK,EAAEgB,SAAS,CAACE,EAAE,CAACjB,IAAI,CAAC;EAE9C,OAAO;IACHoB,OAAO,EAAEjB,IAAI,CAACM,MAAM,KAAK,CAAC;IAC1BN,IAAI,EAAJA,IAAI;IACJkB,QAAQ,EAAElB,IAAI,CAACM;EACnB,CAAC;AACL,CAAC;AASD,IAAMa,WAAW,GAAG,SAAdA,WAAWA,CAAAC,IAAA,EAAmE;EAAA,IAA7DC,GAAG,GAAAD,IAAA,CAAHC,GAAG;IAAEC,KAAK,GAAAF,IAAA,CAALE,KAAK;IAAEC,aAAa,GAAAH,IAAA,CAAbG,aAAa;IAAEC,WAAW,GAAAJ,IAAA,CAAXI,WAAW;EACzD,IAAMZ,SAAS,GAAG,IAAAC,0CAAa,EAAC,CAAC;EACjC,IAAMY,KAAK,GAAGb,SAAS,CAACE,EAAE,CAACY,YAAY;EAEvC,IAAIL,GAAG,CAACjB,IAAI,KAAK,eAAe,EAAE;IAC9B,oBACI9B,MAAA,CAAAqD,OAAA,CAAAC,aAAA,CAAC1C,WAAA,CAAA2C,GAAG;MAACP,KAAK,EAAEA;IAAM,gBACdhD,MAAA,CAAAqD,OAAA,CAAAC,aAAA,CAAC1C,WAAA,CAAA4C,aAAa,QAAET,GAAG,CAAChB,IAAoB,CACvC,CAAC;EAEd;EAEA,oBACI/B,MAAA,CAAAqD,OAAA,CAAAC,aAAA,CAAC1C,WAAA,CAAA2C,GAAG;IAACP,KAAK,EAAEA;EAAM,GACbD,GAAG,CAACzB,KAAK,CAACmC,GAAG,CAAC,UAACC,IAAI,EAAEC,OAAO;IAAA,oBACzB3D,MAAA,CAAAqD,OAAA,CAAAC,aAAA,CAACtD,MAAA,CAAA4D,QAAQ;MAACjC,GAAG,EAAEgC;IAAQ,GAClBV,aAAa,cACVjD,MAAA,CAAAqD,OAAA,CAAAC,aAAA,CAAC1C,WAAA,CAAAiD,IAAI;MACDlC,GAAG,EAAEgC,OAAQ;MACbG,QAAQ,EAAEJ,IAAI,CAAC3B,IAAI,KAAKoB,KAAK,EAAEpB,IAAK;MACpCgC,OAAO,EAAE,SAATA,OAAOA,CAAA;QAAA,OAAQb,WAAW,CAACQ,IAAI,CAAC;MAAA;IAAC,gBAEjC1D,MAAA,CAAAqD,OAAA,CAAAC,aAAA,CAAC3C,aAAA,CAAAqD,YAAY;MAACtB,IAAI,EAAEgB;IAAK,gBACrB1D,MAAA,CAAAqD,OAAA,CAAAC,aAAA,CAAC3C,aAAA,CAAAsD,YAAY,MAAE,CACL,CACZ,CACV,CACM,CAAC;EAAA,CACd,CACA,CAAC;AAEd,CAAC;AAMD,IAAMC,aAA4B,GAAG,SAA/BA,aAA4BA,CAAGC,IAAI;EAAA,OAAIA,IAAI;AAAA;AAS1C,IAAMC,aAAa,GAAAjD,OAAA,CAAAiD,aAAA,GAAG,SAAhBA,aAAaA,CAAAC,KAAA,EAKA;EAAA,IAJtBC,KAAK,GAAAD,KAAA,CAALC,KAAK;IACLC,OAAO,GAAAF,KAAA,CAAPE,OAAO;IACPC,QAAQ,GAAAH,KAAA,CAARG,QAAQ;IAAAC,mBAAA,GAAAJ,KAAA,CACRpB,aAAa;IAAbA,aAAa,GAAAwB,mBAAA,cAAGP,aAAa,GAAAO,mBAAA;EAE7B,IAAAC,YAAA,GAAiB,IAAAC,qBAAW,EAAC,CAAC;IAAtB7C,IAAI,GAAA4C,YAAA,CAAJ5C,IAAI;EACZ,IAAA8C,gBAAA,GAAoCvC,eAAe,CAACP,IAAI,CAAC;IAAjDa,OAAO,GAAAiC,gBAAA,CAAPjC,OAAO;IAAEC,QAAQ,GAAAgC,gBAAA,CAARhC,QAAQ;IAAElB,IAAI,GAAAkD,gBAAA,CAAJlD,IAAI;EAC/B,IAAMY,SAAS,GAAG,IAAAC,0CAAa,EAAC,CAAC;EACjC,IAAMhB,IAAI,GAAGe,SAAS,CAACE,EAAE,CAACjB,IAAI;EAE9B,oBACIvB,MAAA,CAAAqD,OAAA,CAAAC,aAAA,CAAChD,KAAA,CAAAuE,GAAG;IAACP,KAAK,EAAEA;EAAM,gBACdtE,MAAA,CAAAqD,OAAA,CAAAC,aAAA,CAAC1C,WAAA,CAAAkE,iBAAiB;IAACvD,IAAI,EAAEA;EAAK,gBAC1BvB,MAAA,CAAAqD,OAAA,CAAAC,aAAA,CAAC1C,WAAA,CAAAmE,aAAa,qBACV/E,MAAA,CAAAqD,OAAA,CAAAC,aAAA,CAAC9C,gBAAA,CAAAwE,eAAe;IACZ7B,KAAK,EAAEb,SAAS,CAACE,EAAE,CAACC,MAAO;IAC3B+B,QAAQ,EAAE,SAAVA,QAAQA,CAAErB,KAAK;MAAA,OAAIb,SAAS,CAAC2C,SAAS,CAAC9B,KAAK,CAAC;IAAA;EAAC,GAE7C,UAAA+B,KAAA;IAAA,IAAG/B,KAAK,GAAA+B,KAAA,CAAL/B,KAAK;MAAEqB,QAAQ,GAAAU,KAAA,CAARV,QAAQ;IAAA,oBACfxE,MAAA,CAAAqD,OAAA,CAAAC,aAAA,CAAC7C,MAAA,CAAA0E,KAAK;MACFhC,KAAK,EAAEA,KAAM;MACbqB,QAAQ,EAAEA,QAAS;MACnBY,WAAW,EAAE;IAAkB,CAClC,CAAC;EAAA,CAEO,CAAC,EACjBb,OAAO,GAAGA,OAAO,GAAG,IACV,CAAC,eAChBvE,MAAA,CAAAqD,OAAA,CAAAC,aAAA,CAAC1C,WAAA,CAAAyE,WAAW,QACP1C,OAAO,gBACJ3C,MAAA,CAAAqD,OAAA,CAAAC,aAAA,CAAC1C,WAAA,CAAA0E,gBAAgB,qBACbtF,MAAA,CAAAqD,OAAA,CAAAC,aAAA,CAAC/C,WAAA,CAAAgF,UAAU;IAACC,GAAG,EAAC;EAAO,GAAC,mBAA6B,CACvC,CAAC,gBAEnBxF,MAAA,CAAAqD,OAAA,CAAAC,aAAA,CAACnD,iBAAA,CAAAsF,IAAI;IACDC,WAAW,EAAE,SAAbA,WAAWA,CAAAC,KAAA;MAAA,IAAKhE,GAAG,GAAAgE,KAAA,CAAHhE,GAAG;QAAKiE,KAAK,OAAAC,yBAAA,CAAAxC,OAAA,EAAAsC,KAAA,EAAA3E,SAAA;MAAA,oBACzBhB,MAAA,CAAAqD,OAAA,CAAAC,aAAA,CAACT,WAAW,EAAAiD,MAAA,CAAAC,MAAA;QACRpE,GAAG,EAAEA,GAAI;QACToB,GAAG,EAAErB,IAAI,CAACkE,KAAK,CAACI,KAAK,CAAE;QACvB/C,aAAa,EAAEA,aAAc;QAC7BC,WAAW,EAAEsB;MAAS,GAClBoB,KAAK,CACZ,CAAC;IAAA,CACJ;IACFK,MAAM,EAAE1E,IAAI,KAAKW,uBAAgB,CAACC,KAAK,GAAG,GAAG,GAAG,GAAI;IACpDS,QAAQ,EAAEA,QAAS;IACnBsD,SAAS,EAAE,EAAG;IACdC,KAAK,EAAE5E,IAAI,KAAKW,uBAAgB,CAACC,KAAK,GAAG,GAAG,GAAG;EAAI,CACtD,CAEI,CACE,CAClB,CAAC;AAEd,CAAC","ignoreList":[]}
@@ -0,0 +1,34 @@
1
+ import React from "react";
2
+ import { Icon } from "./types";
3
+ export declare const IconRenderer: ((props: unknown) => JSX.Element | null) & {
4
+ original: (props: unknown) => JSX.Element | null;
5
+ originalName: string;
6
+ displayName: string;
7
+ } & {
8
+ original: ((props: unknown) => JSX.Element | null) & {
9
+ original: (props: unknown) => JSX.Element | null;
10
+ originalName: string;
11
+ displayName: string;
12
+ };
13
+ originalName: string;
14
+ displayName: string;
15
+ } & {
16
+ createDecorator: (decorator: import("@webiny/react-composition").ComponentDecorator<((props: unknown) => JSX.Element | null) & {
17
+ original: (props: unknown) => JSX.Element | null;
18
+ originalName: string;
19
+ displayName: string;
20
+ }>) => (props: unknown) => React.JSX.Element;
21
+ };
22
+ interface IconContext<T extends Icon = Icon> {
23
+ icon: T;
24
+ size: number;
25
+ }
26
+ declare const IconContext: React.Context<IconContext<Icon> | undefined>;
27
+ interface IconProviderProps {
28
+ icon: Icon;
29
+ size?: number;
30
+ children: React.ReactNode;
31
+ }
32
+ export declare const IconProvider: ({ icon, size, children }: IconProviderProps) => React.JSX.Element;
33
+ export declare function useIcon<T extends Icon = Icon>(): IconContext<T>;
34
+ export {};
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.IconRenderer = exports.IconProvider = void 0;
8
+ exports.useIcon = useIcon;
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var _mobx = require("mobx");
11
+ var _reactComposition = require("@webiny/react-composition");
12
+ var IconRenderer = exports.IconRenderer = (0, _reactComposition.makeDecoratable)("IconPickerIcon", (0, _reactComposition.createVoidComponent)());
13
+ var IconContext = /*#__PURE__*/_react.default.createContext(undefined);
14
+ var IconProvider = exports.IconProvider = function IconProvider(_ref) {
15
+ var icon = _ref.icon,
16
+ _ref$size = _ref.size,
17
+ size = _ref$size === void 0 ? 32 : _ref$size,
18
+ children = _ref.children;
19
+ // I want to use the POJO via the context, to reduce the need of using `observer` HOC everywhere.
20
+ return /*#__PURE__*/_react.default.createElement(IconContext.Provider, {
21
+ value: {
22
+ icon: (0, _mobx.toJS)(icon),
23
+ size: size
24
+ }
25
+ }, children);
26
+ };
27
+ function useIcon() {
28
+ var context = _react.default.useContext(IconContext);
29
+ if (!context) {
30
+ throw Error("Missing <IconProvider> in the component tree!");
31
+ }
32
+ return context;
33
+ }
34
+
35
+ //# sourceMappingURL=IconRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_mobx","_reactComposition","IconRenderer","exports","makeDecoratable","createVoidComponent","IconContext","React","createContext","undefined","IconProvider","_ref","icon","_ref$size","size","children","default","createElement","Provider","value","toJS","useIcon","context","useContext","Error"],"sources":["IconRenderer.tsx"],"sourcesContent":["import React from \"react\";\nimport { toJS } from \"mobx\";\n\nimport { makeDecoratable, createVoidComponent } from \"@webiny/react-composition\";\n\nimport { Icon } from \"./types\";\n\nexport const IconRenderer = makeDecoratable(\"IconPickerIcon\", createVoidComponent());\n\ninterface IconContext<T extends Icon = Icon> {\n icon: T;\n size: number;\n}\n\nconst IconContext = React.createContext<IconContext | undefined>(undefined);\n\ninterface IconProviderProps {\n icon: Icon;\n size?: number;\n children: React.ReactNode;\n}\n\nexport const IconProvider = ({ icon, size = 32, children }: IconProviderProps) => {\n // I want to use the POJO via the context, to reduce the need of using `observer` HOC everywhere.\n return (\n <IconContext.Provider value={{ icon: toJS(icon), size }}>{children}</IconContext.Provider>\n );\n};\n\nexport function useIcon<T extends Icon = Icon>(): IconContext<T> {\n const context = React.useContext(IconContext);\n if (!context) {\n throw Error(`Missing <IconProvider> in the component tree!`);\n }\n return context as IconContext<T>;\n}\n"],"mappings":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AAEA,IAAAE,iBAAA,GAAAF,OAAA;AAIO,IAAMG,YAAY,GAAAC,OAAA,CAAAD,YAAA,GAAG,IAAAE,iCAAe,EAAC,gBAAgB,EAAE,IAAAC,qCAAmB,EAAC,CAAC,CAAC;AAOpF,IAAMC,WAAW,gBAAGC,cAAK,CAACC,aAAa,CAA0BC,SAAS,CAAC;AAQpE,IAAMC,YAAY,GAAAP,OAAA,CAAAO,YAAA,GAAG,SAAfA,YAAYA,CAAAC,IAAA,EAAyD;EAAA,IAAnDC,IAAI,GAAAD,IAAA,CAAJC,IAAI;IAAAC,SAAA,GAAAF,IAAA,CAAEG,IAAI;IAAJA,IAAI,GAAAD,SAAA,cAAG,EAAE,GAAAA,SAAA;IAAEE,QAAQ,GAAAJ,IAAA,CAARI,QAAQ;EACpD;EACA,oBACIlB,MAAA,CAAAmB,OAAA,CAAAC,aAAA,CAACX,WAAW,CAACY,QAAQ;IAACC,KAAK,EAAE;MAAEP,IAAI,EAAE,IAAAQ,UAAI,EAACR,IAAI,CAAC;MAAEE,IAAI,EAAJA;IAAK;EAAE,GAAEC,QAA+B,CAAC;AAElG,CAAC;AAEM,SAASM,OAAOA,CAAA,EAA0C;EAC7D,IAAMC,OAAO,GAAGf,cAAK,CAACgB,UAAU,CAACjB,WAAW,CAAC;EAC7C,IAAI,CAACgB,OAAO,EAAE;IACV,MAAME,KAAK,gDAAgD,CAAC;EAChE;EACA,OAAOF,OAAO;AAClB","ignoreList":[]}
@@ -0,0 +1,19 @@
1
+ import { IconPackProviderInterface as IconPackProvider, IconType } from "./config";
2
+ import { Icon } from "./types";
3
+ export declare class IconRepository {
4
+ private readonly iconPackProviders;
5
+ private readonly iconTypes;
6
+ private loading;
7
+ private icons;
8
+ constructor(iconTypes: IconType[], iconPackProviders: IconPackProvider[]);
9
+ loadIcons(): Promise<void>;
10
+ getIcons(): Icon[];
11
+ addIcon(icon: Icon): void;
12
+ getIconTypes(): IconType[];
13
+ getLoading(): {
14
+ isLoading: boolean;
15
+ loadingLabel: string;
16
+ message: string;
17
+ };
18
+ private runWithLoading;
19
+ }