@solidxai/core-ui 0.1.12-beta.7 → 0.1.12-beta.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. package/dist/components/auth/AuthLayout.d.ts.map +1 -1
  2. package/dist/components/auth/AuthLayout.js +19 -17
  3. package/dist/components/auth/AuthLayout.js.map +1 -1
  4. package/dist/components/auth/AuthLayout.tsx +59 -34
  5. package/dist/components/common/BackendReconnectIndicator.d.ts +6 -0
  6. package/dist/components/common/BackendReconnectIndicator.d.ts.map +1 -0
  7. package/dist/components/common/BackendReconnectIndicator.js +25 -0
  8. package/dist/components/common/BackendReconnectIndicator.js.map +1 -0
  9. package/dist/components/common/BackendReconnectIndicator.tsx +45 -0
  10. package/dist/components/common/SettingsComponent.d.ts.map +1 -1
  11. package/dist/components/common/SettingsComponent.js +7 -3
  12. package/dist/components/common/SettingsComponent.js.map +1 -1
  13. package/dist/components/common/SettingsComponent.module.css +144 -12
  14. package/dist/components/common/SettingsComponent.tsx +22 -3
  15. package/dist/components/common/SolidAdmin.d.ts.map +1 -1
  16. package/dist/components/common/SolidAdmin.js +7 -2
  17. package/dist/components/common/SolidAdmin.js.map +1 -1
  18. package/dist/components/common/SolidAdmin.tsx +7 -2
  19. package/dist/components/common/SolidBreadcrumb.d.ts.map +1 -1
  20. package/dist/components/common/SolidBreadcrumb.js +1 -6
  21. package/dist/components/common/SolidBreadcrumb.js.map +1 -1
  22. package/dist/components/common/SolidBreadcrumb.tsx +1 -8
  23. package/dist/components/common/SolidMaterialSymbol.d.ts +10 -0
  24. package/dist/components/common/SolidMaterialSymbol.d.ts.map +1 -0
  25. package/dist/components/common/SolidMaterialSymbol.js +69 -0
  26. package/dist/components/common/SolidMaterialSymbol.js.map +1 -0
  27. package/dist/components/common/SolidMaterialSymbol.tsx +96 -0
  28. package/dist/components/common/SolidToastProvider.d.ts.map +1 -1
  29. package/dist/components/common/SolidToastProvider.js +14 -1
  30. package/dist/components/common/SolidToastProvider.js.map +1 -1
  31. package/dist/components/common/SolidToastProvider.tsx +19 -1
  32. package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.module.css +3 -1
  33. package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
  34. package/dist/components/core/common/SolidGlobalSearchElement.js +3 -2
  35. package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
  36. package/dist/components/core/common/SolidGlobalSearchElement.tsx +14 -18
  37. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.d.ts.map +1 -1
  38. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.js +43 -16
  39. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.js.map +1 -1
  40. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.tsx +24 -2
  41. package/dist/components/core/form/SolidFormFooter.js +1 -1
  42. package/dist/components/core/form/SolidFormFooter.js.map +1 -1
  43. package/dist/components/core/form/SolidFormFooter.tsx +1 -1
  44. package/dist/components/core/form/SolidFormLayouts.js +1 -1
  45. package/dist/components/core/form/SolidFormLayouts.js.map +1 -1
  46. package/dist/components/core/form/SolidFormLayouts.tsx +2 -2
  47. package/dist/components/core/form/fields/SolidMediaMultipleField.d.ts.map +1 -1
  48. package/dist/components/core/form/fields/SolidMediaMultipleField.js +120 -56
  49. package/dist/components/core/form/fields/SolidMediaMultipleField.js.map +1 -1
  50. package/dist/components/core/form/fields/SolidMediaMultipleField.tsx +63 -50
  51. package/dist/components/core/form/fields/SolidMediaSingleField.d.ts.map +1 -1
  52. package/dist/components/core/form/fields/SolidMediaSingleField.js +115 -37
  53. package/dist/components/core/form/fields/SolidMediaSingleField.js.map +1 -1
  54. package/dist/components/core/form/fields/SolidMediaSingleField.tsx +36 -35
  55. package/dist/components/core/form/fields/SolidRichTextField.d.ts.map +1 -1
  56. package/dist/components/core/form/fields/SolidRichTextField.js +67 -4
  57. package/dist/components/core/form/fields/SolidRichTextField.js.map +1 -1
  58. package/dist/components/core/form/fields/SolidRichTextField.tsx +89 -7
  59. package/dist/components/core/form/fields/mediaFieldUtils.d.ts +3 -0
  60. package/dist/components/core/form/fields/mediaFieldUtils.d.ts.map +1 -0
  61. package/dist/components/core/form/fields/mediaFieldUtils.js +30 -0
  62. package/dist/components/core/form/fields/mediaFieldUtils.js.map +1 -0
  63. package/dist/components/core/form/fields/mediaFieldUtils.ts +45 -0
  64. package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.d.ts.map +1 -1
  65. package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.js +1 -1
  66. package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.js.map +1 -1
  67. package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.tsx +3 -1
  68. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.d.ts.map +1 -1
  69. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js +22 -23
  70. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js.map +1 -1
  71. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.tsx +13 -7
  72. package/dist/components/core/form/fields/widgets/SolidIconEditWidget.d.ts.map +1 -1
  73. package/dist/components/core/form/fields/widgets/SolidIconEditWidget.js +16 -11
  74. package/dist/components/core/form/fields/widgets/SolidIconEditWidget.js.map +1 -1
  75. package/dist/components/core/form/fields/widgets/SolidIconEditWidget.tsx +32 -18
  76. package/dist/components/core/form/fields/widgets/SolidIconViewWidget.d.ts.map +1 -1
  77. package/dist/components/core/form/fields/widgets/SolidIconViewWidget.js +3 -1
  78. package/dist/components/core/form/fields/widgets/SolidIconViewWidget.js.map +1 -1
  79. package/dist/components/core/form/fields/widgets/SolidIconViewWidget.tsx +11 -5
  80. package/dist/components/core/list/SolidDataTable.d.ts.map +1 -1
  81. package/dist/components/core/list/SolidDataTable.js +3 -2
  82. package/dist/components/core/list/SolidDataTable.js.map +1 -1
  83. package/dist/components/core/list/SolidDataTable.tsx +3 -2
  84. package/dist/components/core/list/SolidListView.d.ts.map +1 -1
  85. package/dist/components/core/list/SolidListView.js +11 -5
  86. package/dist/components/core/list/SolidListView.js.map +1 -1
  87. package/dist/components/core/list/SolidListView.tsx +15 -8
  88. package/dist/components/core/list/SolidListViewColumn.d.ts.map +1 -1
  89. package/dist/components/core/list/SolidListViewColumn.js +1 -0
  90. package/dist/components/core/list/SolidListViewColumn.js.map +1 -1
  91. package/dist/components/core/list/SolidListViewColumn.tsx +1 -0
  92. package/dist/components/core/list/columns/SolidShortTextColumn.d.ts.map +1 -1
  93. package/dist/components/core/list/columns/SolidShortTextColumn.js +7 -2
  94. package/dist/components/core/list/columns/SolidShortTextColumn.js.map +1 -1
  95. package/dist/components/core/list/columns/SolidShortTextColumn.tsx +7 -2
  96. package/dist/components/core/list/columns/relations/SolidRelationManyToManyColumn.d.ts.map +1 -1
  97. package/dist/components/core/list/columns/relations/SolidRelationManyToManyColumn.js +4 -1
  98. package/dist/components/core/list/columns/relations/SolidRelationManyToManyColumn.js.map +1 -1
  99. package/dist/components/core/list/columns/relations/SolidRelationManyToManyColumn.tsx +5 -2
  100. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.d.ts.map +1 -1
  101. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.js +2 -1
  102. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.js.map +1 -1
  103. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.tsx +2 -1
  104. package/dist/components/core/list/columns/relations/SolidRelationOneToManyColumn.d.ts.map +1 -1
  105. package/dist/components/core/list/columns/relations/SolidRelationOneToManyColumn.js +4 -1
  106. package/dist/components/core/list/columns/relations/SolidRelationOneToManyColumn.js.map +1 -1
  107. package/dist/components/core/list/columns/relations/SolidRelationOneToManyColumn.tsx +5 -2
  108. package/dist/components/core/locales/SolidLocale.d.ts.map +1 -1
  109. package/dist/components/core/locales/SolidLocale.js +1 -1
  110. package/dist/components/core/locales/SolidLocale.js.map +1 -1
  111. package/dist/components/core/locales/SolidLocale.tsx +1 -0
  112. package/dist/components/core/model/CreateModel.css +26 -0
  113. package/dist/components/core/model/FieldMetaData.d.ts.map +1 -1
  114. package/dist/components/core/model/FieldMetaData.js +21 -3
  115. package/dist/components/core/model/FieldMetaData.js.map +1 -1
  116. package/dist/components/core/model/FieldMetaData.tsx +45 -4
  117. package/dist/components/core/model/FieldMetaDataForm.css +82 -0
  118. package/dist/components/core/model/FieldMetaDataForm.d.ts +1 -0
  119. package/dist/components/core/model/FieldMetaDataForm.d.ts.map +1 -1
  120. package/dist/components/core/model/FieldMetaDataForm.js +246 -235
  121. package/dist/components/core/model/FieldMetaDataForm.js.map +1 -1
  122. package/dist/components/core/model/FieldMetaDataForm.tsx +46 -34
  123. package/dist/components/core/model/FieldSelector.js +1 -1
  124. package/dist/components/core/model/FieldSelector.js.map +1 -1
  125. package/dist/components/core/model/FieldSelector.tsx +1 -1
  126. package/dist/components/core/model/ModelMetaData.js +1 -1
  127. package/dist/components/core/model/ModelMetaData.js.map +1 -1
  128. package/dist/components/core/model/ModelMetaData.tsx +1 -1
  129. package/dist/components/core/module/CreateModule.css +55 -2
  130. package/dist/components/core/module/CreateModule.d.ts.map +1 -1
  131. package/dist/components/core/module/CreateModule.js +2 -2
  132. package/dist/components/core/module/CreateModule.js.map +1 -1
  133. package/dist/components/core/module/CreateModule.tsx +3 -2
  134. package/dist/components/core/module/ModuleMetadataExplorer.css +27 -0
  135. package/dist/components/core/module/ModuleMetadataExplorer.d.ts.map +1 -1
  136. package/dist/components/core/module/ModuleMetadataExplorer.js +1 -1
  137. package/dist/components/core/module/ModuleMetadataExplorer.js.map +1 -1
  138. package/dist/components/core/module/ModuleMetadataExplorer.tsx +1 -0
  139. package/dist/components/core/tree/SolidTreeView.d.ts.map +1 -1
  140. package/dist/components/core/tree/SolidTreeView.js +6 -1
  141. package/dist/components/core/tree/SolidTreeView.js.map +1 -1
  142. package/dist/components/core/tree/SolidTreeView.tsx +7 -1
  143. package/dist/components/layout/AdminHeaderActions.d.ts.map +1 -1
  144. package/dist/components/layout/AdminHeaderActions.js +10 -9
  145. package/dist/components/layout/AdminHeaderActions.js.map +1 -1
  146. package/dist/components/layout/AdminHeaderActions.tsx +2 -0
  147. package/dist/components/layout/AppSidebar.d.ts.map +1 -1
  148. package/dist/components/layout/AppSidebar.js +2 -1
  149. package/dist/components/layout/AppSidebar.js.map +1 -1
  150. package/dist/components/layout/AppSidebar.tsx +12 -5
  151. package/dist/components/layout/SolidMenuItemIcon.d.ts +9 -0
  152. package/dist/components/layout/SolidMenuItemIcon.d.ts.map +1 -0
  153. package/dist/components/layout/SolidMenuItemIcon.js +20 -0
  154. package/dist/components/layout/SolidMenuItemIcon.js.map +1 -0
  155. package/dist/components/layout/SolidMenuItemIcon.tsx +45 -0
  156. package/dist/components/layout/navbar-two-menu.d.ts.map +1 -1
  157. package/dist/components/layout/navbar-two-menu.js +6 -7
  158. package/dist/components/layout/navbar-two-menu.js.map +1 -1
  159. package/dist/components/layout/navbar-two-menu.tsx +4 -12
  160. package/dist/components/shad-cn-ui/SolidCodeEditor.d.ts.map +1 -1
  161. package/dist/components/shad-cn-ui/SolidCodeEditor.js +30 -2
  162. package/dist/components/shad-cn-ui/SolidCodeEditor.js.map +1 -1
  163. package/dist/components/shad-cn-ui/SolidCodeEditor.tsx +38 -1
  164. package/dist/helpers/backendHealthMonitor.d.ts +39 -0
  165. package/dist/helpers/backendHealthMonitor.d.ts.map +1 -0
  166. package/dist/helpers/backendHealthMonitor.js +255 -0
  167. package/dist/helpers/backendHealthMonitor.js.map +1 -0
  168. package/dist/helpers/backendHealthMonitor.ts +177 -0
  169. package/dist/helpers/helpers.d.ts +1 -0
  170. package/dist/helpers/helpers.d.ts.map +1 -1
  171. package/dist/helpers/helpers.js +9 -0
  172. package/dist/helpers/helpers.js.map +1 -1
  173. package/dist/helpers/helpers.ts +11 -1
  174. package/dist/helpers/menuItemIcons.d.ts +34 -0
  175. package/dist/helpers/menuItemIcons.d.ts.map +1 -0
  176. package/dist/helpers/menuItemIcons.js +144 -0
  177. package/dist/helpers/menuItemIcons.js.map +1 -0
  178. package/dist/helpers/menuItemIcons.ts +191 -0
  179. package/dist/helpers/relationDisplay.d.ts +3 -0
  180. package/dist/helpers/relationDisplay.d.ts.map +1 -0
  181. package/dist/helpers/relationDisplay.js +92 -0
  182. package/dist/helpers/relationDisplay.js.map +1 -0
  183. package/dist/helpers/relationDisplay.ts +101 -0
  184. package/dist/helpers/settingsPayload.d.ts +1 -0
  185. package/dist/helpers/settingsPayload.d.ts.map +1 -1
  186. package/dist/helpers/settingsPayload.js.map +1 -1
  187. package/dist/helpers/settingsPayload.ts +1 -0
  188. package/dist/helpers/solidIcons.d.ts +2 -0
  189. package/dist/helpers/solidIcons.d.ts.map +1 -1
  190. package/dist/helpers/solidIcons.js +8 -0
  191. package/dist/helpers/solidIcons.js.map +1 -1
  192. package/dist/helpers/solidIcons.tsx +10 -1
  193. package/dist/helpers/waitForBackendAvailability.d.ts +1 -0
  194. package/dist/helpers/waitForBackendAvailability.d.ts.map +1 -1
  195. package/dist/helpers/waitForBackendAvailability.js +35 -22
  196. package/dist/helpers/waitForBackendAvailability.js.map +1 -1
  197. package/dist/helpers/waitForBackendAvailability.ts +18 -12
  198. package/dist/http/solidHttp.d.ts.map +1 -1
  199. package/dist/http/solidHttp.js +10 -4
  200. package/dist/http/solidHttp.js.map +1 -1
  201. package/dist/http/solidHttp.ts +9 -4
  202. package/dist/redux/api/datasourceIntrospectionApi.d.ts +4 -0
  203. package/dist/redux/api/datasourceIntrospectionApi.d.ts.map +1 -1
  204. package/dist/redux/api/datasourceIntrospectionApi.js.map +1 -1
  205. package/dist/redux/api/datasourceIntrospectionApi.ts +4 -0
  206. package/dist/redux/api/fetchBaseQuery.d.ts.map +1 -1
  207. package/dist/redux/api/fetchBaseQuery.js +9 -3
  208. package/dist/redux/api/fetchBaseQuery.js.map +1 -1
  209. package/dist/redux/api/fetchBaseQuery.tsx +9 -3
  210. package/dist/redux/store/StoreProvider.d.ts.map +1 -1
  211. package/dist/redux/store/StoreProvider.js +4 -3
  212. package/dist/redux/store/StoreProvider.js.map +1 -1
  213. package/dist/redux/store/StoreProvider.tsx +4 -3
  214. package/dist/resources/globals.css +341 -49
  215. package/dist/resources/solid-custom.css +410 -12
  216. package/dist/resources/solid-responsive.css +27 -16
  217. package/dist/resources/solid-tailwind-generated.css +1 -1
  218. package/dist/routes/AppEventListener.d.ts.map +1 -1
  219. package/dist/routes/AppEventListener.js +23 -0
  220. package/dist/routes/AppEventListener.js.map +1 -1
  221. package/dist/routes/AppEventListener.tsx +29 -0
  222. package/dist/routes/pages/admin/core/DashboardPage.module.css +12 -0
  223. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.css +306 -3
  224. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.d.ts.map +1 -1
  225. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.js +745 -393
  226. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.js.map +1 -1
  227. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.tsx +1074 -420
  228. package/dist/routes/pages/admin/core/DatasourcesPage.css +15 -0
  229. package/dist/routes/pages/admin/core/DatasourcesPage.d.ts.map +1 -1
  230. package/dist/routes/pages/admin/core/DatasourcesPage.js +7 -188
  231. package/dist/routes/pages/admin/core/DatasourcesPage.js.map +1 -1
  232. package/dist/routes/pages/admin/core/DatasourcesPage.tsx +3 -393
  233. package/package.json +1 -1
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Normalizes relation display values into safe text for UI rendering.
3
+ *
4
+ * Relation labels in Solid can come from a configured `userKeyField`, but in
5
+ * some edge cases that field may contain locale maps or other JSON-shaped
6
+ * values instead of plain text. These helpers prevent raw objects from being
7
+ * passed into React by:
8
+ * - returning scalar values as strings
9
+ * - collapsing arrays into comma-separated text
10
+ * - preferring common label-like object keys such as `label` or `displayName`
11
+ * - falling back through nested object values and finally `JSON.stringify`
12
+ *
13
+ * `getRelatedRecordDisplayText` applies that normalization to a related record
14
+ * and falls back from the configured user-key field to `displayName`, `name`,
15
+ * and `id` when needed.
16
+ *
17
+ * For arbitrary JSON:
18
+ * - arrays are normalized item-by-item and joined with `, `
19
+ * - objects return the first readable nested text that can be derived
20
+ * - if no readable nested text is found, the object is stringified as JSON
21
+ *
22
+ * Examples:
23
+ * - `getRelationDisplayText("Acme")` -> `"Acme"`
24
+ * - `getRelationDisplayText({ en_US: "Acme", fr_FR: "Acme FR" })` -> `"Acme"`
25
+ * - `getRelationDisplayText({ label: "Acme", value: 12 })` -> `"Acme"`
26
+ * - `getRelationDisplayText(["A", { en_US: "B" }])` -> `"A, B"`
27
+ * - `getRelationDisplayText({ firstName: "Harish", lastName: "Patel" })` -> `"Harish"`
28
+ * - `getRelationDisplayText({ foo: {}, bar: [] })` -> `"{}"`
29
+ * This reaches the final `JSON.stringify` fallback because no readable
30
+ * scalar text can be derived from the nested values.
31
+ * - `getRelatedRecordDisplayText({ code: { en_US: "A-100" }, id: 7 }, "code")` -> `"A-100"`
32
+ * - `getRelatedRecordDisplayText({ id: 7 }, "missingField")` -> `"7"`
33
+ */
34
+ var RELATION_DISPLAY_CANDIDATE_KEYS = [
35
+ "label",
36
+ "displayName",
37
+ "name",
38
+ "title",
39
+ "value",
40
+ "text",
41
+ ];
42
+ export var getRelationDisplayText = function (value) {
43
+ if (value === null || value === undefined) {
44
+ return "";
45
+ }
46
+ if (typeof value === "string") {
47
+ return value;
48
+ }
49
+ if (typeof value === "number" || typeof value === "bigint" || typeof value === "boolean") {
50
+ return String(value);
51
+ }
52
+ if (Array.isArray(value)) {
53
+ return value
54
+ .map(function (item) { return getRelationDisplayText(item); })
55
+ .filter(Boolean)
56
+ .join(", ");
57
+ }
58
+ if (typeof value === "object") {
59
+ var objectValue = value;
60
+ for (var _i = 0, RELATION_DISPLAY_CANDIDATE_KEYS_1 = RELATION_DISPLAY_CANDIDATE_KEYS; _i < RELATION_DISPLAY_CANDIDATE_KEYS_1.length; _i++) {
61
+ var key = RELATION_DISPLAY_CANDIDATE_KEYS_1[_i];
62
+ var candidate = objectValue[key];
63
+ var candidateText = getRelationDisplayText(candidate);
64
+ if (candidateText) {
65
+ return candidateText;
66
+ }
67
+ }
68
+ for (var _a = 0, _b = Object.values(objectValue); _a < _b.length; _a++) {
69
+ var candidate = _b[_a];
70
+ var candidateText = getRelationDisplayText(candidate);
71
+ if (candidateText) {
72
+ return candidateText;
73
+ }
74
+ }
75
+ try {
76
+ return JSON.stringify(objectValue);
77
+ }
78
+ catch (_c) {
79
+ return "";
80
+ }
81
+ }
82
+ return String(value);
83
+ };
84
+ export var getRelatedRecordDisplayText = function (record, userKeyField) {
85
+ var _a, _b;
86
+ if (!record) {
87
+ return "";
88
+ }
89
+ var rawDisplayValue = userKeyField ? record[userKeyField] : undefined;
90
+ return getRelationDisplayText((_b = (_a = rawDisplayValue !== null && rawDisplayValue !== void 0 ? rawDisplayValue : record.displayName) !== null && _a !== void 0 ? _a : record.name) !== null && _b !== void 0 ? _b : record.id);
91
+ };
92
+ //# sourceMappingURL=relationDisplay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relationDisplay.js","sourceRoot":"","sources":["../../src/helpers/relationDisplay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,IAAM,+BAA+B,GAAG;IACpC,OAAO;IACP,aAAa;IACb,MAAM;IACN,OAAO;IACP,OAAO;IACP,MAAM;CACT,CAAC;AAEF,MAAM,CAAC,IAAM,sBAAsB,GAAG,UAAC,KAAc;IACjD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;QACvC,OAAO,EAAE,CAAC;KACb;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC3B,OAAO,KAAK,CAAC;KAChB;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;QACtF,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;KACxB;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACtB,OAAO,KAAK;aACP,GAAG,CAAC,UAAC,IAAI,IAAK,OAAA,sBAAsB,CAAC,IAAI,CAAC,EAA5B,CAA4B,CAAC;aAC3C,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,IAAI,CAAC,CAAC;KACnB;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC3B,IAAM,WAAW,GAAG,KAAgC,CAAC;QAErD,KAAkB,UAA+B,EAA/B,mEAA+B,EAA/B,6CAA+B,EAA/B,IAA+B,EAAE;YAA9C,IAAM,GAAG,wCAAA;YACV,IAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YACnC,IAAM,aAAa,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC;YACxD,IAAI,aAAa,EAAE;gBACf,OAAO,aAAa,CAAC;aACxB;SACJ;QAED,KAAwB,UAA0B,EAA1B,KAAA,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAA1B,cAA0B,EAA1B,IAA0B,EAAE;YAA/C,IAAM,SAAS,SAAA;YAChB,IAAM,aAAa,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC;YACxD,IAAI,aAAa,EAAE;gBACf,OAAO,aAAa,CAAC;aACxB;SACJ;QAED,IAAI;YACA,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;SACtC;QAAC,WAAM;YACJ,OAAO,EAAE,CAAC;SACb;KACJ;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,CAAC,IAAM,2BAA2B,GAAG,UAAC,MAAkD,EAAE,YAAqB;;IACjH,IAAI,CAAC,MAAM,EAAE;QACT,OAAO,EAAE,CAAC;KACb;IAED,IAAM,eAAe,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAExE,OAAO,sBAAsB,CACzB,MAAA,MAAA,eAAe,aAAf,eAAe,cAAf,eAAe,GAAI,MAAM,CAAC,WAAW,mCAAI,MAAM,CAAC,IAAI,mCAAI,MAAM,CAAC,EAAE,CACpE,CAAC;AACN,CAAC,CAAC","sourcesContent":["/**\n * Normalizes relation display values into safe text for UI rendering.\n *\n * Relation labels in Solid can come from a configured `userKeyField`, but in\n * some edge cases that field may contain locale maps or other JSON-shaped\n * values instead of plain text. These helpers prevent raw objects from being\n * passed into React by:\n * - returning scalar values as strings\n * - collapsing arrays into comma-separated text\n * - preferring common label-like object keys such as `label` or `displayName`\n * - falling back through nested object values and finally `JSON.stringify`\n *\n * `getRelatedRecordDisplayText` applies that normalization to a related record\n * and falls back from the configured user-key field to `displayName`, `name`,\n * and `id` when needed.\n *\n * For arbitrary JSON:\n * - arrays are normalized item-by-item and joined with `, `\n * - objects return the first readable nested text that can be derived\n * - if no readable nested text is found, the object is stringified as JSON\n *\n * Examples:\n * - `getRelationDisplayText(\"Acme\")` -> `\"Acme\"`\n * - `getRelationDisplayText({ en_US: \"Acme\", fr_FR: \"Acme FR\" })` -> `\"Acme\"`\n * - `getRelationDisplayText({ label: \"Acme\", value: 12 })` -> `\"Acme\"`\n * - `getRelationDisplayText([\"A\", { en_US: \"B\" }])` -> `\"A, B\"`\n * - `getRelationDisplayText({ firstName: \"Harish\", lastName: \"Patel\" })` -> `\"Harish\"`\n * - `getRelationDisplayText({ foo: {}, bar: [] })` -> `\"{}\"`\n * This reaches the final `JSON.stringify` fallback because no readable\n * scalar text can be derived from the nested values.\n * - `getRelatedRecordDisplayText({ code: { en_US: \"A-100\" }, id: 7 }, \"code\")` -> `\"A-100\"`\n * - `getRelatedRecordDisplayText({ id: 7 }, \"missingField\")` -> `\"7\"`\n */\nconst RELATION_DISPLAY_CANDIDATE_KEYS = [\n \"label\",\n \"displayName\",\n \"name\",\n \"title\",\n \"value\",\n \"text\",\n];\n\nexport const getRelationDisplayText = (value: unknown): string => {\n if (value === null || value === undefined) {\n return \"\";\n }\n\n if (typeof value === \"string\") {\n return value;\n }\n\n if (typeof value === \"number\" || typeof value === \"bigint\" || typeof value === \"boolean\") {\n return String(value);\n }\n\n if (Array.isArray(value)) {\n return value\n .map((item) => getRelationDisplayText(item))\n .filter(Boolean)\n .join(\", \");\n }\n\n if (typeof value === \"object\") {\n const objectValue = value as Record<string, unknown>;\n\n for (const key of RELATION_DISPLAY_CANDIDATE_KEYS) {\n const candidate = objectValue[key];\n const candidateText = getRelationDisplayText(candidate);\n if (candidateText) {\n return candidateText;\n }\n }\n\n for (const candidate of Object.values(objectValue)) {\n const candidateText = getRelationDisplayText(candidate);\n if (candidateText) {\n return candidateText;\n }\n }\n\n try {\n return JSON.stringify(objectValue);\n } catch {\n return \"\";\n }\n }\n\n return String(value);\n};\n\nexport const getRelatedRecordDisplayText = (record: Record<string, unknown> | null | undefined, userKeyField?: string): string => {\n if (!record) {\n return \"\";\n }\n\n const rawDisplayValue = userKeyField ? record[userKeyField] : undefined;\n\n return getRelationDisplayText(\n rawDisplayValue ?? record.displayName ?? record.name ?? record.id\n );\n};\n"]}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Normalizes relation display values into safe text for UI rendering.
3
+ *
4
+ * Relation labels in Solid can come from a configured `userKeyField`, but in
5
+ * some edge cases that field may contain locale maps or other JSON-shaped
6
+ * values instead of plain text. These helpers prevent raw objects from being
7
+ * passed into React by:
8
+ * - returning scalar values as strings
9
+ * - collapsing arrays into comma-separated text
10
+ * - preferring common label-like object keys such as `label` or `displayName`
11
+ * - falling back through nested object values and finally `JSON.stringify`
12
+ *
13
+ * `getRelatedRecordDisplayText` applies that normalization to a related record
14
+ * and falls back from the configured user-key field to `displayName`, `name`,
15
+ * and `id` when needed.
16
+ *
17
+ * For arbitrary JSON:
18
+ * - arrays are normalized item-by-item and joined with `, `
19
+ * - objects return the first readable nested text that can be derived
20
+ * - if no readable nested text is found, the object is stringified as JSON
21
+ *
22
+ * Examples:
23
+ * - `getRelationDisplayText("Acme")` -> `"Acme"`
24
+ * - `getRelationDisplayText({ en_US: "Acme", fr_FR: "Acme FR" })` -> `"Acme"`
25
+ * - `getRelationDisplayText({ label: "Acme", value: 12 })` -> `"Acme"`
26
+ * - `getRelationDisplayText(["A", { en_US: "B" }])` -> `"A, B"`
27
+ * - `getRelationDisplayText({ firstName: "Harish", lastName: "Patel" })` -> `"Harish"`
28
+ * - `getRelationDisplayText({ foo: {}, bar: [] })` -> `"{}"`
29
+ * This reaches the final `JSON.stringify` fallback because no readable
30
+ * scalar text can be derived from the nested values.
31
+ * - `getRelatedRecordDisplayText({ code: { en_US: "A-100" }, id: 7 }, "code")` -> `"A-100"`
32
+ * - `getRelatedRecordDisplayText({ id: 7 }, "missingField")` -> `"7"`
33
+ */
34
+ const RELATION_DISPLAY_CANDIDATE_KEYS = [
35
+ "label",
36
+ "displayName",
37
+ "name",
38
+ "title",
39
+ "value",
40
+ "text",
41
+ ];
42
+
43
+ export const getRelationDisplayText = (value: unknown): string => {
44
+ if (value === null || value === undefined) {
45
+ return "";
46
+ }
47
+
48
+ if (typeof value === "string") {
49
+ return value;
50
+ }
51
+
52
+ if (typeof value === "number" || typeof value === "bigint" || typeof value === "boolean") {
53
+ return String(value);
54
+ }
55
+
56
+ if (Array.isArray(value)) {
57
+ return value
58
+ .map((item) => getRelationDisplayText(item))
59
+ .filter(Boolean)
60
+ .join(", ");
61
+ }
62
+
63
+ if (typeof value === "object") {
64
+ const objectValue = value as Record<string, unknown>;
65
+
66
+ for (const key of RELATION_DISPLAY_CANDIDATE_KEYS) {
67
+ const candidate = objectValue[key];
68
+ const candidateText = getRelationDisplayText(candidate);
69
+ if (candidateText) {
70
+ return candidateText;
71
+ }
72
+ }
73
+
74
+ for (const candidate of Object.values(objectValue)) {
75
+ const candidateText = getRelationDisplayText(candidate);
76
+ if (candidateText) {
77
+ return candidateText;
78
+ }
79
+ }
80
+
81
+ try {
82
+ return JSON.stringify(objectValue);
83
+ } catch {
84
+ return "";
85
+ }
86
+ }
87
+
88
+ return String(value);
89
+ };
90
+
91
+ export const getRelatedRecordDisplayText = (record: Record<string, unknown> | null | undefined, userKeyField?: string): string => {
92
+ if (!record) {
93
+ return "";
94
+ }
95
+
96
+ const rawDisplayValue = userKeyField ? record[userKeyField] : undefined;
97
+
98
+ return getRelationDisplayText(
99
+ rawDisplayValue ?? record.displayName ?? record.name ?? record.id
100
+ );
101
+ };
@@ -13,6 +13,7 @@ export type AdminSettingDefinition = {
13
13
  encrypted?: boolean;
14
14
  label?: string;
15
15
  description?: string;
16
+ helpText?: string;
16
17
  placeholder?: string;
17
18
  group?: string;
18
19
  sortOrder?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"settingsPayload.d.ts","sourceRoot":"","sources":["../../src/helpers/settingsPayload.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE5D,MAAM,MAAM,mBAAmB,GAC3B,WAAW,GACX,UAAU,GACV,SAAS,GACT,SAAS,GACT,MAAM,GACN,UAAU,GACV,aAAa,GACb,iBAAiB,GACjB,QAAQ,CAAC;AAEb,MAAM,MAAM,aAAa,GACrB,YAAY,GACZ,uBAAuB,GACvB,uBAAuB,GACvB,eAAe,CAAC;AAEpB,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,mBAAmB,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,GAAG,CAAC;IACX,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,CAAC,EAAE,sBAAsB,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACvD,CAAC;AA0BF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,GAAG,GAAG,sBAAsB,EAAE,CAY1E;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAkBhE;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,GAAG,OAKjD;AAED,wBAAgB,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,UASlD;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,EAAE,KAAK,EAAE,GAAG,UAGhF"}
1
+ {"version":3,"file":"settingsPayload.d.ts","sourceRoot":"","sources":["../../src/helpers/settingsPayload.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE5D,MAAM,MAAM,mBAAmB,GAC3B,WAAW,GACX,UAAU,GACV,SAAS,GACT,SAAS,GACT,MAAM,GACN,UAAU,GACV,aAAa,GACb,iBAAiB,GACjB,QAAQ,CAAC;AAEb,MAAM,MAAM,aAAa,GACrB,YAAY,GACZ,uBAAuB,GACvB,uBAAuB,GACvB,eAAe,CAAC;AAEpB,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,mBAAmB,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,GAAG,CAAC;IACX,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,CAAC,EAAE,sBAAsB,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACvD,CAAC;AA0BF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,GAAG,GAAG,sBAAsB,EAAE,CAY1E;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAkBhE;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,GAAG,OAKjD;AAED,wBAAgB,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,UASlD;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,EAAE,KAAK,EAAE,GAAG,UAGhF"}
@@ -1 +1 @@
1
- {"version":3,"file":"settingsPayload.js","sourceRoot":"","sources":["../../src/helpers/settingsPayload.ts"],"names":[],"mappings":"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","sourcesContent":["export type SettingsOptionValue = string | number | boolean;\n\nexport type SettingsControlType =\n | \"shortText\"\n | \"longText\"\n | \"numeric\"\n | \"boolean\"\n | \"date\"\n | \"datetime\"\n | \"mediaSingle\"\n | \"selectionStatic\"\n | \"custom\";\n\nexport type SettingsLevel =\n | \"system-env\"\n | \"system-admin-readonly\"\n | \"system-admin-editable\"\n | \"internal-user\";\n\nexport type SettingsOption = {\n label: string;\n value: SettingsOptionValue;\n};\n\nexport type AdminSettingDefinition = {\n moduleName: string;\n key: string;\n value: any;\n level: SettingsLevel;\n encrypted?: boolean;\n label?: string;\n description?: string;\n placeholder?: string;\n group?: string;\n sortOrder?: number;\n controlType?: SettingsControlType;\n settingsWidget?: string;\n options?: SettingsOption[];\n editable?: boolean;\n};\n\nexport type AdminSettingsResponse = {\n data?: AdminSettingDefinition[] | Record<string, any>;\n};\n\nfunction unwrapSettingsContainer(payload: any): any {\n if (!payload || typeof payload !== \"object\") {\n return payload;\n }\n\n if (Array.isArray(payload)) {\n return payload;\n }\n\n if (Array.isArray(payload?.data)) {\n return payload.data;\n }\n\n if (\n payload?.data &&\n typeof payload.data === \"object\" &&\n (Array.isArray(payload.data.data) || (payload.data.data && typeof payload.data.data === \"object\"))\n ) {\n return unwrapSettingsContainer(payload.data);\n }\n\n return payload;\n}\n\nexport function extractSettingsList(payload: any): AdminSettingDefinition[] {\n const normalizedPayload = unwrapSettingsContainer(payload);\n\n if (Array.isArray(normalizedPayload?.data)) {\n return normalizedPayload.data;\n }\n\n if (Array.isArray(normalizedPayload)) {\n return normalizedPayload;\n }\n\n return [];\n}\n\nexport function getSettingsMap(payload: any): Record<string, any> {\n const normalizedPayload = unwrapSettingsContainer(payload);\n\n if (\n normalizedPayload?.data &&\n !Array.isArray(normalizedPayload.data) &&\n typeof normalizedPayload.data === \"object\" &&\n !Array.isArray(normalizedPayload.data?.data)\n ) {\n return normalizedPayload.data;\n }\n\n const list = extractSettingsList(normalizedPayload);\n if (!list.length) {\n return {};\n }\n\n return Object.fromEntries(list.map((setting) => [setting.key, setting.value]));\n}\n\nexport function toLegacySettingsShape(payload: any) {\n return {\n ...payload,\n data: getSettingsMap(payload),\n };\n}\n\nexport function humanizeSettingToken(value?: string) {\n if (!value) return \"\";\n\n return value\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/[-_]+/g, \" \")\n .replace(/\\s+/g, \" \")\n .trim()\n .replace(/\\b\\w/g, (match) => match.toUpperCase());\n}\n\nexport function getSettingOptionLabel(setting: AdminSettingDefinition, value: any) {\n const option = setting.options?.find((item) => item.value === value);\n return option?.label ?? String(value ?? \"\");\n}\n"]}
1
+ {"version":3,"file":"settingsPayload.js","sourceRoot":"","sources":["../../src/helpers/settingsPayload.ts"],"names":[],"mappings":"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","sourcesContent":["export type SettingsOptionValue = string | number | boolean;\n\nexport type SettingsControlType =\n | \"shortText\"\n | \"longText\"\n | \"numeric\"\n | \"boolean\"\n | \"date\"\n | \"datetime\"\n | \"mediaSingle\"\n | \"selectionStatic\"\n | \"custom\";\n\nexport type SettingsLevel =\n | \"system-env\"\n | \"system-admin-readonly\"\n | \"system-admin-editable\"\n | \"internal-user\";\n\nexport type SettingsOption = {\n label: string;\n value: SettingsOptionValue;\n};\n\nexport type AdminSettingDefinition = {\n moduleName: string;\n key: string;\n value: any;\n level: SettingsLevel;\n encrypted?: boolean;\n label?: string;\n description?: string;\n helpText?: string;\n placeholder?: string;\n group?: string;\n sortOrder?: number;\n controlType?: SettingsControlType;\n settingsWidget?: string;\n options?: SettingsOption[];\n editable?: boolean;\n};\n\nexport type AdminSettingsResponse = {\n data?: AdminSettingDefinition[] | Record<string, any>;\n};\n\nfunction unwrapSettingsContainer(payload: any): any {\n if (!payload || typeof payload !== \"object\") {\n return payload;\n }\n\n if (Array.isArray(payload)) {\n return payload;\n }\n\n if (Array.isArray(payload?.data)) {\n return payload.data;\n }\n\n if (\n payload?.data &&\n typeof payload.data === \"object\" &&\n (Array.isArray(payload.data.data) || (payload.data.data && typeof payload.data.data === \"object\"))\n ) {\n return unwrapSettingsContainer(payload.data);\n }\n\n return payload;\n}\n\nexport function extractSettingsList(payload: any): AdminSettingDefinition[] {\n const normalizedPayload = unwrapSettingsContainer(payload);\n\n if (Array.isArray(normalizedPayload?.data)) {\n return normalizedPayload.data;\n }\n\n if (Array.isArray(normalizedPayload)) {\n return normalizedPayload;\n }\n\n return [];\n}\n\nexport function getSettingsMap(payload: any): Record<string, any> {\n const normalizedPayload = unwrapSettingsContainer(payload);\n\n if (\n normalizedPayload?.data &&\n !Array.isArray(normalizedPayload.data) &&\n typeof normalizedPayload.data === \"object\" &&\n !Array.isArray(normalizedPayload.data?.data)\n ) {\n return normalizedPayload.data;\n }\n\n const list = extractSettingsList(normalizedPayload);\n if (!list.length) {\n return {};\n }\n\n return Object.fromEntries(list.map((setting) => [setting.key, setting.value]));\n}\n\nexport function toLegacySettingsShape(payload: any) {\n return {\n ...payload,\n data: getSettingsMap(payload),\n };\n}\n\nexport function humanizeSettingToken(value?: string) {\n if (!value) return \"\";\n\n return value\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/[-_]+/g, \" \")\n .replace(/\\s+/g, \" \")\n .trim()\n .replace(/\\b\\w/g, (match) => match.toUpperCase());\n}\n\nexport function getSettingOptionLabel(setting: AdminSettingDefinition, value: any) {\n const option = setting.options?.find((item) => item.value === value);\n return option?.label ?? String(value ?? \"\");\n}\n"]}
@@ -30,6 +30,7 @@ export type AdminSettingDefinition = {
30
30
  encrypted?: boolean;
31
31
  label?: string;
32
32
  description?: string;
33
+ helpText?: string;
33
34
  placeholder?: string;
34
35
  group?: string;
35
36
  sortOrder?: number;
@@ -2,4 +2,6 @@ export declare const solidIcons: {
2
2
  category: string;
3
3
  icons: string[];
4
4
  }[];
5
+ export declare const solidMaterialIconNames: Set<string>;
6
+ export declare function hasSolidMaterialIconName(value?: string | null): boolean;
5
7
  //# sourceMappingURL=solidIcons.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"solidIcons.d.ts","sourceRoot":"","sources":["../../src/helpers/solidIcons.tsx"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU;;;GAsyDtB,CAAA"}
1
+ {"version":3,"file":"solidIcons.d.ts","sourceRoot":"","sources":["../../src/helpers/solidIcons.tsx"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU;;;GAsyDtB,CAAA;AAED,eAAO,MAAM,sBAAsB,aAElC,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAGvE"}
@@ -1828,4 +1828,12 @@ export var solidIcons = [
1828
1828
  ]
1829
1829
  }
1830
1830
  ];
1831
+ export var solidMaterialIconNames = new Set(solidIcons.flatMap(function (_a) {
1832
+ var icons = _a.icons;
1833
+ return icons;
1834
+ }));
1835
+ export function hasSolidMaterialIconName(value) {
1836
+ var normalizedValue = typeof value === "string" ? value.trim() : "";
1837
+ return normalizedValue.length > 0 && solidMaterialIconNames.has(normalizedValue);
1838
+ }
1831
1839
  //# sourceMappingURL=solidIcons.js.map