@imperium/layout 9.0.0 → 9.0.1-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/dist/esm/commonItems.js +9 -0
  2. package/dist/esm/commonItems.js.map +1 -0
  3. package/dist/esm/content/components/ActionForm.js +62 -0
  4. package/dist/esm/content/components/ActionForm.js.map +1 -0
  5. package/dist/esm/content/components/ActionFormSidebarItemComponent.js +36 -0
  6. package/dist/esm/content/components/ActionFormSidebarItemComponent.js.map +1 -0
  7. package/dist/esm/content/components/ActionSidebarItemComponent.js +20 -0
  8. package/dist/esm/content/components/ActionSidebarItemComponent.js.map +1 -0
  9. package/dist/esm/content/components/ContentComponent.js +63 -0
  10. package/dist/esm/content/components/ContentComponent.js.map +1 -0
  11. package/dist/esm/content/components/CustomSidebarItemComponent.js +8 -0
  12. package/dist/esm/content/components/CustomSidebarItemComponent.js.map +1 -0
  13. package/dist/esm/content/components/Header.js +26 -0
  14. package/dist/esm/content/components/Header.js.map +1 -0
  15. package/dist/esm/content/components/PlainSidebarItem.js +20 -0
  16. package/dist/esm/content/components/PlainSidebarItem.js.map +1 -0
  17. package/dist/esm/content/components/SidebarItemWrapper.js +58 -0
  18. package/dist/esm/content/components/SidebarItemWrapper.js.map +1 -0
  19. package/dist/esm/content/components/styles.module.css.js +8 -0
  20. package/dist/esm/content/components/styles.module.css.js.map +1 -0
  21. package/dist/esm/content/createPages.js +32 -0
  22. package/dist/esm/content/createPages.js.map +1 -0
  23. package/dist/esm/content/dividerSidebarItem.js +7 -0
  24. package/dist/esm/content/dividerSidebarItem.js.map +1 -0
  25. package/dist/esm/content/hooks/useBuildContentData.js +18 -0
  26. package/dist/esm/content/hooks/useBuildContentData.js.map +1 -0
  27. package/dist/esm/content/types.js +18 -0
  28. package/dist/esm/content/types.js.map +1 -0
  29. package/dist/esm/content/utils.js +29 -0
  30. package/dist/esm/content/utils.js.map +1 -0
  31. package/dist/esm/datahooks/DataHooks.js +39 -0
  32. package/dist/esm/datahooks/DataHooks.js.map +1 -0
  33. package/dist/esm/datahooks/ExecuteDataHook.js +9 -0
  34. package/dist/esm/datahooks/ExecuteDataHook.js.map +1 -0
  35. package/dist/esm/datahooks/ExecutePermissionHook.js +17 -0
  36. package/dist/esm/datahooks/ExecutePermissionHook.js.map +1 -0
  37. package/dist/esm/datahooks/PermissionHooks.js +16 -0
  38. package/dist/esm/datahooks/PermissionHooks.js.map +1 -0
  39. package/dist/esm/external/style-inject/dist/style-inject.es.js +29 -0
  40. package/dist/esm/external/style-inject/dist/style-inject.es.js.map +1 -0
  41. package/dist/esm/hooks/useBuildData.js +28 -0
  42. package/dist/esm/hooks/useBuildData.js.map +1 -0
  43. package/dist/esm/hooks/useIsActiveRoute.js +22 -0
  44. package/dist/esm/hooks/useIsActiveRoute.js.map +1 -0
  45. package/dist/esm/hooks/useSelectPermission.js +12 -0
  46. package/dist/esm/hooks/useSelectPermission.js.map +1 -0
  47. package/dist/esm/hooks/useSelectState.js +12 -0
  48. package/dist/esm/hooks/useSelectState.js.map +1 -0
  49. package/dist/esm/index.js +21 -0
  50. package/dist/esm/index.js.map +1 -0
  51. package/dist/esm/layout/components/CustomLayoutItemComponent.js +8 -0
  52. package/dist/esm/layout/components/CustomLayoutItemComponent.js.map +1 -0
  53. package/dist/esm/layout/components/DropdownItem.js +40 -0
  54. package/dist/esm/layout/components/DropdownItem.js.map +1 -0
  55. package/dist/esm/layout/components/Layout.js +74 -0
  56. package/dist/esm/layout/components/Layout.js.map +1 -0
  57. package/dist/esm/layout/components/LayoutItemBar.js +29 -0
  58. package/dist/esm/layout/components/LayoutItemBar.js.map +1 -0
  59. package/dist/esm/layout/components/LayoutItemWrapper.js +72 -0
  60. package/dist/esm/layout/components/LayoutItemWrapper.js.map +1 -0
  61. package/dist/esm/layout/components/MenuItem.js +11 -0
  62. package/dist/esm/layout/components/MenuItem.js.map +1 -0
  63. package/dist/esm/layout/components/PlainItem.js +14 -0
  64. package/dist/esm/layout/components/PlainItem.js.map +1 -0
  65. package/dist/esm/layout/components/SecondaryMenuToggleItem.js +16 -0
  66. package/dist/esm/layout/components/SecondaryMenuToggleItem.js.map +1 -0
  67. package/dist/esm/layout/components/styles.module.css.js +8 -0
  68. package/dist/esm/layout/components/styles.module.css.js.map +1 -0
  69. package/dist/esm/layout/hooks/useMobileLayout.js +21 -0
  70. package/dist/esm/layout/hooks/useMobileLayout.js.map +1 -0
  71. package/dist/esm/layout/moveItems.js +65 -0
  72. package/dist/esm/layout/moveItems.js.map +1 -0
  73. package/dist/esm/layout/types.js +12 -0
  74. package/dist/esm/layout/types.js.map +1 -0
  75. package/dist/esm/layout/utils.js +41 -0
  76. package/dist/esm/layout/utils.js.map +1 -0
  77. package/dist/esm/layout/withLayout.js +52 -0
  78. package/dist/esm/layout/withLayout.js.map +1 -0
  79. package/dist/esm/state.js +25 -0
  80. package/dist/esm/state.js.map +1 -0
  81. package/dist/esm/types.js +7 -0
  82. package/dist/esm/types.js.map +1 -0
  83. package/dist/esm/utils.js +9 -0
  84. package/dist/esm/utils.js.map +1 -0
  85. package/dist/stats.html +2689 -0
  86. package/dist/{commonItems.d.ts → types/commonItems.d.ts} +0 -0
  87. package/dist/{content → types/content}/components/ActionForm.d.ts +0 -0
  88. package/dist/{content → types/content}/components/ActionFormSidebarItemComponent.d.ts +0 -0
  89. package/dist/{content → types/content}/components/ActionSidebarItemComponent.d.ts +0 -0
  90. package/dist/{content → types/content}/components/ContentComponent.d.ts +0 -0
  91. package/dist/{content → types/content}/components/CustomSidebarItemComponent.d.ts +0 -0
  92. package/dist/{content → types/content}/components/Header.d.ts +0 -0
  93. package/dist/{content → types/content}/components/PlainSidebarItem.d.ts +0 -0
  94. package/dist/{content → types/content}/components/SidebarItemWrapper.d.ts +0 -0
  95. package/dist/{content → types/content}/createPages.d.ts +0 -0
  96. package/dist/{content → types/content}/dividerSidebarItem.d.ts +0 -0
  97. package/dist/{content → types/content}/hooks/useBuildContentData.d.ts +0 -0
  98. package/dist/{content → types/content}/types.d.ts +0 -0
  99. package/dist/{content → types/content}/utils.d.ts +0 -0
  100. package/dist/{datahooks → types/datahooks}/DataHooks.d.ts +0 -0
  101. package/dist/{datahooks → types/datahooks}/ExecuteDataHook.d.ts +0 -0
  102. package/dist/{datahooks → types/datahooks}/ExecutePermissionHook.d.ts +0 -0
  103. package/dist/{datahooks → types/datahooks}/PermissionHooks.d.ts +0 -0
  104. package/dist/{datahooks → types/datahooks}/types.d.ts +0 -0
  105. package/dist/{hooks → types/hooks}/useBuildData.d.ts +0 -0
  106. package/dist/{hooks → types/hooks}/useIsActiveRoute.d.ts +0 -0
  107. package/dist/{hooks → types/hooks}/useSelectPermission.d.ts +0 -0
  108. package/dist/{hooks → types/hooks}/useSelectState.d.ts +0 -0
  109. package/dist/{index.d.ts → types/index.d.ts} +0 -0
  110. package/dist/{layout → types/layout}/components/CustomLayoutItemComponent.d.ts +0 -0
  111. package/dist/{layout → types/layout}/components/DropdownItem.d.ts +0 -0
  112. package/dist/{layout → types/layout}/components/Layout.d.ts +0 -0
  113. package/dist/{layout → types/layout}/components/LayoutItemBar.d.ts +0 -0
  114. package/dist/{layout → types/layout}/components/LayoutItemWrapper.d.ts +0 -0
  115. package/dist/{layout → types/layout}/components/MenuItem.d.ts +0 -0
  116. package/dist/{layout → types/layout}/components/PlainItem.d.ts +0 -0
  117. package/dist/{layout → types/layout}/components/SecondaryMenuToggleItem.d.ts +0 -0
  118. package/dist/{layout → types/layout}/hooks/useMobileLayout.d.ts +0 -0
  119. package/dist/{layout → types/layout}/moveItems.d.ts +0 -0
  120. package/dist/{layout → types/layout}/types.d.ts +0 -0
  121. package/dist/{layout → types/layout}/utils.d.ts +0 -0
  122. package/dist/{layout → types/layout}/withLayout.d.ts +0 -0
  123. package/dist/{state.d.ts → types/state.d.ts} +0 -0
  124. package/dist/{types.d.ts → types/types.d.ts} +0 -0
  125. package/dist/types/utils.d.ts +3 -0
  126. package/package.json +18 -18
  127. package/client.js +0 -7
  128. package/dist/client.js +0 -3620
  129. package/dist/client.min.js +0 -2
  130. package/dist/client.min.js.map +0 -1
  131. package/dist/utils.d.ts +0 -6
@@ -0,0 +1,65 @@
1
+ import debug from 'debug';
2
+ import { groupBy } from 'lodash-es';
3
+ import { isDropdownLayoutItem, isMenuLayoutItem } from './types.js';
4
+
5
+ debug("imperium.layout.moveItems");
6
+ function pullItems(items, pulled = []) {
7
+ return items.reduce((memo, item) => {
8
+ if (isDropdownLayoutItem(item)) {
9
+ return [
10
+ ...memo,
11
+ {
12
+ ...item,
13
+ dropdown: pullItems(item.dropdown, pulled)
14
+ }
15
+ ];
16
+ }
17
+ if (isMenuLayoutItem(item)) {
18
+ return [
19
+ ...memo,
20
+ {
21
+ ...item,
22
+ menu: pullItems(item.menu, pulled)
23
+ }
24
+ ];
25
+ }
26
+ if (!item.moveToKey) {
27
+ return [...memo, item];
28
+ }
29
+ pulled.push(item);
30
+ return memo;
31
+ }, []);
32
+ }
33
+ function addItems(items, pulled) {
34
+ return items.reduce((memo, item) => {
35
+ if (isDropdownLayoutItem(item)) {
36
+ const newItems = item.key && pulled[item.key] ? pulled[item.key] : [];
37
+ return [
38
+ ...memo,
39
+ {
40
+ ...item,
41
+ dropdown: [...addItems(item.dropdown, pulled), ...newItems]
42
+ }
43
+ ];
44
+ }
45
+ if (isMenuLayoutItem(item) && item.key) {
46
+ const newItems = item.key && pulled[item.key] ? pulled[item.key] : [];
47
+ return [
48
+ ...memo,
49
+ {
50
+ ...item,
51
+ menu: [...addItems(item.menu, pulled), ...newItems]
52
+ }
53
+ ];
54
+ }
55
+ return [...memo, item];
56
+ }, []);
57
+ }
58
+ function moveItems(items) {
59
+ const pulled = [];
60
+ const itemsMinusPulled = pullItems(items, pulled);
61
+ return addItems(itemsMinusPulled, groupBy(pulled, "moveToKey"));
62
+ }
63
+
64
+ export { moveItems };
65
+ //# sourceMappingURL=moveItems.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moveItems.js","sources":["../../../src/layout/moveItems.ts"],"sourcesContent":["import debug from 'debug';\nimport {groupBy} from 'lodash-es';\nimport type {LayoutItem} from './types';\nimport {isDropdownLayoutItem, isMenuLayoutItem} from './types';\n\nconst d = debug('imperium.layout.moveItems');\n\nfunction pullItems(items: LayoutItem[], pulled: LayoutItem[] = []): LayoutItem[] {\n\treturn items.reduce((memo, item) => {\n\t\tif (isDropdownLayoutItem(item)) {\n\t\t\treturn [\n\t\t\t\t...memo,\n\t\t\t\t{\n\t\t\t\t\t...item,\n\t\t\t\t\tdropdown: pullItems(item.dropdown, pulled),\n\t\t\t\t},\n\t\t\t];\n\t\t}\n\n\t\tif (isMenuLayoutItem(item)) {\n\t\t\treturn [\n\t\t\t\t...memo,\n\t\t\t\t{\n\t\t\t\t\t...item,\n\t\t\t\t\tmenu: pullItems(item.menu, pulled),\n\t\t\t\t},\n\t\t\t];\n\t\t}\n\n\t\tif (!item.moveToKey) {\n\t\t\treturn [...memo, item];\n\t\t}\n\n\t\tpulled.push(item);\n\t\treturn memo;\n\t}, [] as LayoutItem[]);\n}\n\nfunction addItems(items: LayoutItem[], pulled: Record<string, LayoutItem[]>): LayoutItem[] {\n\treturn items.reduce((memo, item) => {\n\t\tif (isDropdownLayoutItem(item)) {\n\t\t\tconst newItems = item.key && pulled[item.key] ? pulled[item.key] : [];\n\t\t\treturn [\n\t\t\t\t...memo,\n\t\t\t\t{\n\t\t\t\t\t...item,\n\t\t\t\t\tdropdown: [...addItems(item.dropdown, pulled), ...newItems],\n\t\t\t\t},\n\t\t\t];\n\t\t}\n\n\t\tif (isMenuLayoutItem(item) && item.key) {\n\t\t\tconst newItems = item.key && pulled[item.key] ? pulled[item.key] : [];\n\t\t\treturn [\n\t\t\t\t...memo,\n\t\t\t\t{\n\t\t\t\t\t...item,\n\t\t\t\t\tmenu: [...addItems(item.menu, pulled), ...newItems],\n\t\t\t\t},\n\t\t\t];\n\t\t}\n\t\treturn [...memo, item];\n\t}, [] as LayoutItem[]);\n}\n\nexport function moveItems(items: LayoutItem[]) {\n\tconst pulled: LayoutItem[] = [];\n\tconst itemsMinusPulled = pullItems(items, pulled);\n\treturn addItems(itemsMinusPulled, groupBy(pulled, 'moveToKey'));\n}\n"],"names":[],"mappings":";;;;AAKU,MAAM,2BAA2B,EAAA;AAE3C,SAAmB,SAAA,CAAA,KAAA,EAAqB,MAAuB,GAAA,EAAkB,EAAA;AAChF,EAAA,OAAO,KAAM,CAAA,MAAA,CAAO,CAAC,IAAA,EAAM,IAAS,KAAA;AACnC,IAAI,IAAA,oBAAA,CAAqB,IAAI,CAAG,EAAA;AAC/B,MAAO,OAAA;AAAA,QACN,GAAG,IAAA;AAAA,QACH;AAAA,UACI,GAAA,IAAA;AAAA,UACH,QAAU,EAAA,SAAA,CAAU,IAAK,CAAA,QAAA,EAAU,MAAM,CAAA;AAAA,SAC1C;AAAA,OACD,CAAA;AAAA,KACD;AAEA,IAAI,IAAA,gBAAA,CAAiB,IAAI,CAAG,EAAA;AAC3B,MAAO,OAAA;AAAA,QACN,GAAG,IAAA;AAAA,QACH;AAAA,UACI,GAAA,IAAA;AAAA,UACH,IAAM,EAAA,SAAA,CAAU,IAAK,CAAA,IAAA,EAAM,MAAM,CAAA;AAAA,SAClC;AAAA,OACD,CAAA;AAAA,KACD;AAEA,IAAI,IAAA,CAAC,KAAK,SAAW,EAAA;AACpB,MAAO,OAAA,CAAC,GAAG,IAAA,EAAM,IAAI,CAAA,CAAA;AAAA,KACtB;AAEA,IAAA,MAAA,CAAO,KAAK,IAAI,CAAA,CAAA;AAChB,IAAO,OAAA,IAAA,CAAA;AAAA,GACR,EAAG,EAAkB,CAAA,CAAA;AACtB,CAAA;AAEA,SAAA,QAAA,CAAkB,OAAqB,MAAoD,EAAA;AAC1F,EAAA,OAAO,KAAM,CAAA,MAAA,CAAO,CAAC,IAAA,EAAM,IAAS,KAAA;AACnC,IAAI,IAAA,oBAAA,CAAqB,IAAI,CAAG,EAAA;AAC/B,MAAM,MAAA,QAAA,GAAW,KAAK,GAAO,IAAA,MAAA,CAAO,KAAK,GAAO,CAAA,GAAA,MAAA,CAAO,IAAK,CAAA,GAAA,CAAA,GAAO,EAAC,CAAA;AACpE,MAAO,OAAA;AAAA,QACN,GAAG,IAAA;AAAA,QACH;AAAA,UACI,GAAA,IAAA;AAAA,UACH,QAAA,EAAU,CAAC,GAAG,QAAA,CAAS,KAAK,QAAU,EAAA,MAAM,CAAG,EAAA,GAAG,QAAQ,CAAA;AAAA,SAC3D;AAAA,OACD,CAAA;AAAA,KACD;AAEA,IAAA,IAAI,gBAAiB,CAAA,IAAI,CAAK,IAAA,IAAA,CAAK,GAAK,EAAA;AACvC,MAAM,MAAA,QAAA,GAAW,KAAK,GAAO,IAAA,MAAA,CAAO,KAAK,GAAO,CAAA,GAAA,MAAA,CAAO,IAAK,CAAA,GAAA,CAAA,GAAO,EAAC,CAAA;AACpE,MAAO,OAAA;AAAA,QACN,GAAG,IAAA;AAAA,QACH;AAAA,UACI,GAAA,IAAA;AAAA,UACH,IAAA,EAAM,CAAC,GAAG,QAAA,CAAS,KAAK,IAAM,EAAA,MAAM,CAAG,EAAA,GAAG,QAAQ,CAAA;AAAA,SACnD;AAAA,OACD,CAAA;AAAA,KACD;AACA,IAAO,OAAA,CAAC,GAAG,IAAA,EAAM,IAAI,CAAA,CAAA;AAAA,GACtB,EAAG,EAAkB,CAAA,CAAA;AACtB,CAAA;AAEO,SAAA,SAAA,CAAmB,KAAqB,EAAA;AAC9C,EAAA,MAAM,SAAuB,EAAC,CAAA;AAC9B,EAAM,MAAA,gBAAA,GAAmB,SAAU,CAAA,KAAA,EAAO,MAAM,CAAA,CAAA;AAChD,EAAA,OAAO,QAAS,CAAA,gBAAA,EAAkB,OAAQ,CAAA,MAAA,EAAQ,WAAW,CAAC,CAAA,CAAA;AAC/D;;;;"}
@@ -0,0 +1,12 @@
1
+ function isCustomLayoutItem(value) {
2
+ return !!value.render;
3
+ }
4
+ function isDropdownLayoutItem(value) {
5
+ return !!value.dropdown;
6
+ }
7
+ function isMenuLayoutItem(value) {
8
+ return !!value.menu;
9
+ }
10
+
11
+ export { isCustomLayoutItem, isDropdownLayoutItem, isMenuLayoutItem };
12
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sources":["../../../src/layout/types.ts"],"sourcesContent":["import type {SemanticICONS} from 'semantic-ui-react';\nimport type {HorizontalPositionedItem, RouteItem, VisibilityItem, WeightedItem} from '../commonItems';\nimport type {DataHookItem} from '../datahooks/types';\nimport type {Data, PermissionSelectorHook} from '../types';\n\n/**\n * Describes a basic weighted, possibly visible item\n */\nexport interface BaseLayoutItem extends WeightedItem, VisibilityItem {\n\ttext: string | ((data: Data) => string);\n\ticon?: SemanticICONS | ((data: Data) => SemanticICONS);\n\tmoveToKey?: string;\n}\n\nexport interface CustomLayoutItem extends WeightedItem, VisibilityItem {\n\trender: (data: Data) => JSX.Element | null;\n\tmoveToKey?: string;\n}\n\n/**\n * Describes a menu that displays a dropdown list of items\n */\nexport interface DropdownLayoutItem extends BaseLayoutItem {\n\tdropdown: ((BaseLayoutItem & RouteItem<Data>) | CustomLayoutItem)[];\n\tkey?: string;\n}\n\n/**\n * Describes a menu that displays a sub menu (not a dropdown list)\n */\nexport interface MenuLayoutItem extends BaseLayoutItem {\n\tmenu: ((BaseLayoutItem & RouteItem<Data>) | CustomLayoutItem)[];\n\tkey?: string;\n}\n\n/**\n * Describes a horizontal menu item which is either a route item or dropdown menu\n */\nexport type LayoutItem = (BaseLayoutItem & RouteItem<Data>) | DropdownLayoutItem | MenuLayoutItem | CustomLayoutItem;\n\nexport interface LayoutData {\n\tpermissionSelectorHooks?: PermissionSelectorHook[];\n\tdataHooks?: DataHookItem[];\n\tprimaryMenu?: (LayoutItem & HorizontalPositionedItem)[]; // primary menu\n\tstatusbar?: (LayoutItem & HorizontalPositionedItem)[];\n\tsecondaryMenu?: LayoutItem[]; // secondary menu\n\tfooter?: (LayoutItem & HorizontalPositionedItem)[]; // footer\n}\n\nexport function isCustomLayoutItem(value: any): value is CustomLayoutItem {\n\treturn !!(value as CustomLayoutItem).render;\n}\n\nexport function isDropdownLayoutItem(value: any): value is DropdownLayoutItem {\n\treturn !!(value as DropdownLayoutItem).dropdown;\n}\n\nexport function isMenuLayoutItem(value: any): value is MenuLayoutItem {\n\treturn !!(value as MenuLayoutItem).menu;\n}\n"],"names":[],"mappings":"AAiDO,SAAA,kBAAA,CAA4B,KAAuC,EAAA;AACzE,EAAO,OAAA,CAAC,CAAE,KAA2B,CAAA,MAAA,CAAA;AACtC,CAAA;AAEO,SAAA,oBAAA,CAA8B,KAAyC,EAAA;AAC7E,EAAO,OAAA,CAAC,CAAE,KAA6B,CAAA,QAAA,CAAA;AACxC,CAAA;AAEO,SAAA,gBAAA,CAA0B,KAAqC,EAAA;AACrE,EAAO,OAAA,CAAC,CAAE,KAAyB,CAAA,IAAA,CAAA;AACpC;;;;"}
@@ -0,0 +1,41 @@
1
+ import React from 'react';
2
+ import { Link } from 'react-router-dom';
3
+ import { Icon } from 'semantic-ui-react';
4
+ import { isHorizontalPositionedItem } from '../commonItems.js';
5
+
6
+ function splitPositionedItems(items) {
7
+ return items.reduce((memo, v) => {
8
+ if (isHorizontalPositionedItem(v) && v.position === "right") {
9
+ return {
10
+ leftItems: memo.leftItems,
11
+ rightItems: [...memo.rightItems, v]
12
+ };
13
+ }
14
+ return {
15
+ leftItems: [...memo.leftItems, v],
16
+ rightItems: memo.rightItems
17
+ };
18
+ }, { leftItems: [], rightItems: [] });
19
+ }
20
+ function linkParameters(item, data) {
21
+ return item.to ? {
22
+ as: Link,
23
+ active: data.active,
24
+ to: typeof item.to === "function" ? item.to(data) : item.to
25
+ } : {};
26
+ }
27
+ function getText(item, data) {
28
+ return typeof item.text === "function" ? item.text(data) : item.text;
29
+ }
30
+ function getIcon(item, data) {
31
+ let iconName;
32
+ if (item.icon) {
33
+ iconName = typeof item.icon === "function" ? item.icon(data) : item.icon;
34
+ }
35
+ return item.icon ? /* @__PURE__ */ React.createElement(Icon, {
36
+ name: iconName
37
+ }) : null;
38
+ }
39
+
40
+ export { getIcon, getText, linkParameters, splitPositionedItems };
41
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sources":["../../../src/layout/utils.tsx"],"sourcesContent":["import {Link} from 'react-router-dom';\nimport {Icon, SemanticICONS} from 'semantic-ui-react';\nimport type {RouteItem} from '../commonItems';\nimport {isHorizontalPositionedItem} from '../commonItems';\nimport type {Data} from '../types';\nimport type {BaseLayoutItem, LayoutItem} from './types';\n\n/**\n * Splits positioned items into left and right arrays (if horizontal)\n * @param items\n */\nexport function splitPositionedItems<T extends LayoutItem>(items: T[]) {\n\treturn items.reduce(\n\t\t(memo, v) => {\n\t\t\tif (isHorizontalPositionedItem(v) && v.position === 'right') {\n\t\t\t\treturn {\n\t\t\t\t\tleftItems: memo.leftItems,\n\t\t\t\t\trightItems: [...memo.rightItems, v],\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tleftItems: [...memo.leftItems, v],\n\t\t\t\trightItems: memo.rightItems,\n\t\t\t};\n\t\t},\n\t\t{leftItems: [], rightItems: []} as {leftItems: T[]; rightItems: T[]},\n\t);\n}\n\nexport function linkParameters(item: BaseLayoutItem & RouteItem<Data>, data: Data) {\n\treturn item.to\n\t\t? {\n\t\t\t\tas: Link,\n\t\t\t\tactive: data.active,\n\t\t\t\tto: typeof item.to === 'function' ? item.to(data) : item.to,\n\t\t }\n\t\t: {};\n}\n\nexport function getText(item: BaseLayoutItem, data: Data) {\n\treturn typeof item.text === 'function' ? item.text(data) : item.text;\n}\n\nexport function getIcon(item: BaseLayoutItem, data: Data) {\n\t// Generate the icon component, if it exists\n\tlet iconName: SemanticICONS | undefined;\n\tif (item.icon) {\n\t\ticonName = typeof item.icon === 'function' ? item.icon(data) : item.icon;\n\t}\n\treturn item.icon ? <Icon name={iconName} /> : null;\n}\n"],"names":[],"mappings":";;;;;AAWO,SAAA,oBAAA,CAAoD,KAAY,EAAA;AACtE,EAAA,OAAO,KAAM,CAAA,MAAA,CACZ,CAAC,IAAA,EAAM,CAAM,KAAA;AACZ,IAAA,IAAI,0BAA2B,CAAA,CAAC,CAAK,IAAA,CAAA,CAAE,aAAa,OAAS,EAAA;AAC5D,MAAO,OAAA;AAAA,QACN,WAAW,IAAK,CAAA,SAAA;AAAA,QAChB,UAAY,EAAA,CAAC,GAAG,IAAA,CAAK,YAAY,CAAC,CAAA;AAAA,OACnC,CAAA;AAAA,KACD;AACA,IAAO,OAAA;AAAA,MACN,SAAW,EAAA,CAAC,GAAG,IAAA,CAAK,WAAW,CAAC,CAAA;AAAA,MAChC,YAAY,IAAK,CAAA,UAAA;AAAA,KAClB,CAAA;AAAA,GACD,EACA,EAAC,SAAW,EAAA,IAAI,UAAY,EAAA,IAC7B,CAAA,CAAA;AACD,CAAA;AAEO,SAAA,cAAA,CAAwB,MAAwC,IAAY,EAAA;AAClF,EAAA,OAAO,KAAK,EACT,GAAA;AAAA,IACA,EAAI,EAAA,IAAA;AAAA,IACJ,QAAQ,IAAK,CAAA,MAAA;AAAA,IACb,EAAA,EAAI,OAAO,IAAK,CAAA,EAAA,KAAO,aAAa,IAAK,CAAA,EAAA,CAAG,IAAI,CAAA,GAAI,IAAK,CAAA,EAAA;AAAA,MAEzD,EAAC,CAAA;AACL,CAAA;AAEO,SAAA,OAAA,CAAiB,MAAsB,IAAY,EAAA;AACzD,EAAO,OAAA,OAAO,KAAK,IAAS,KAAA,UAAA,GAAa,KAAK,IAAK,CAAA,IAAI,IAAI,IAAK,CAAA,IAAA,CAAA;AACjE,CAAA;AAEO,SAAA,OAAA,CAAiB,MAAsB,IAAY,EAAA;AAEzD,EAAI,IAAA,QAAA,CAAA;AACJ,EAAA,IAAI,KAAK,IAAM,EAAA;AACd,IAAW,QAAA,GAAA,OAAO,KAAK,IAAS,KAAA,UAAA,GAAa,KAAK,IAAK,CAAA,IAAI,IAAI,IAAK,CAAA,IAAA,CAAA;AAAA,GACrE;AACA,EAAO,OAAA,IAAA,CAAK,uBAAQ,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA;AAAA,IAAK,IAAM,EAAA,QAAA;AAAA,GAAU,CAAK,GAAA,IAAA,CAAA;AAC/C;;;;"}
@@ -0,0 +1,52 @@
1
+ import React from 'react';
2
+ import debug from 'debug';
3
+ import { DataHooks } from '../datahooks/DataHooks.js';
4
+ import { PermissionHooks } from '../datahooks/PermissionHooks.js';
5
+ import { isImperiumLayoutClientModule } from '../types.js';
6
+ import { Layout } from './components/Layout.js';
7
+
8
+ const d = debug("imperium.layout.withLayout");
9
+ const initialLayoutModuleData = {
10
+ dataHooks: [],
11
+ permissionSelectorHooks: [],
12
+ primaryMenu: [],
13
+ statusbar: [],
14
+ secondaryMenu: [],
15
+ footer: []
16
+ };
17
+ function withLayout(client) {
18
+ const layoutModuleData = client.modules.reduce((memo, module) => {
19
+ if (isImperiumLayoutClientModule(module)) {
20
+ return {
21
+ dataHooks: [...memo.dataHooks || [], ...module.layout.dataHooks || []],
22
+ permissionSelectorHooks: [...memo.permissionSelectorHooks || [], ...module.layout.permissionSelectorHooks || []],
23
+ primaryMenu: [...memo.primaryMenu || [], ...module.layout.primaryMenu || []],
24
+ statusbar: [...memo.statusbar || [], ...module.layout.statusbar || []],
25
+ secondaryMenu: [...memo.secondaryMenu || [], ...module.layout.secondaryMenu || []],
26
+ footer: [...memo.footer || [], ...module.layout.footer || []]
27
+ };
28
+ }
29
+ return memo;
30
+ }, initialLayoutModuleData);
31
+ d("Layout items processed", layoutModuleData);
32
+ return function layoutHoc(Wrapped) {
33
+ const displayName = Wrapped.displayName || Wrapped.name || "";
34
+ function WithLayout(props) {
35
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Layout, {
36
+ ...layoutModuleData
37
+ }, /* @__PURE__ */ React.createElement(Wrapped, {
38
+ ...props,
39
+ layout: layoutModuleData
40
+ })), /* @__PURE__ */ React.createElement(DataHooks, {
41
+ dataHooks: layoutModuleData.dataHooks
42
+ }), /* @__PURE__ */ React.createElement(PermissionHooks, {
43
+ permissionHooks: layoutModuleData.permissionSelectorHooks
44
+ }));
45
+ }
46
+ WithLayout.displayName = `withLayout(${displayName})`;
47
+ return WithLayout;
48
+ };
49
+ }
50
+
51
+ export { withLayout };
52
+ //# sourceMappingURL=withLayout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withLayout.js","sources":["../../../src/layout/withLayout.tsx"],"sourcesContent":["import type {Hoc, ImperiumClient} from '@imperium/client';\nimport debug from 'debug';\nimport type {ComponentType} from 'react';\nimport {DataHooks} from '../datahooks/DataHooks';\nimport {PermissionHooks} from '../datahooks/PermissionHooks';\nimport {isImperiumLayoutClientModule} from '../types';\nimport {Layout} from './components/Layout';\nimport type {LayoutData} from './types';\n\nconst d = debug('imperium.layout.withLayout');\n\nconst initialLayoutModuleData: Required<LayoutData> = {\n\tdataHooks: [],\n\tpermissionSelectorHooks: [],\n\tprimaryMenu: [],\n\tstatusbar: [],\n\tsecondaryMenu: [],\n\tfooter: [],\n};\n\nexport function withLayout(client: ImperiumClient): Hoc {\n\tconst layoutModuleData = client.modules.reduce((memo, module) => {\n\t\tif (isImperiumLayoutClientModule(module)) {\n\t\t\treturn {\n\t\t\t\tdataHooks: [...(memo.dataHooks || []), ...(module.layout.dataHooks || [])],\n\t\t\t\tpermissionSelectorHooks: [...(memo.permissionSelectorHooks || []), ...(module.layout.permissionSelectorHooks || [])],\n\t\t\t\tprimaryMenu: [...(memo.primaryMenu || []), ...(module.layout.primaryMenu || [])],\n\t\t\t\tstatusbar: [...(memo.statusbar || []), ...(module.layout.statusbar || [])],\n\t\t\t\tsecondaryMenu: [...(memo.secondaryMenu || []), ...(module.layout.secondaryMenu || [])],\n\t\t\t\tfooter: [...(memo.footer || []), ...(module.layout.footer || [])],\n\t\t\t} as Required<LayoutData>;\n\t\t}\n\t\treturn memo;\n\t}, initialLayoutModuleData);\n\td('Layout items processed', layoutModuleData);\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\treturn function layoutHoc(Wrapped: ComponentType<any>) {\n\t\tconst displayName = Wrapped.displayName || Wrapped.name || '';\n\n\t\tfunction WithLayout(props: unknown) {\n\t\t\treturn (\n\t\t\t\t<>\n\t\t\t\t\t<Layout {...layoutModuleData}>\n\t\t\t\t\t\t<Wrapped {...props} layout={layoutModuleData} />\n\t\t\t\t\t</Layout>\n\t\t\t\t\t<DataHooks dataHooks={layoutModuleData.dataHooks} />\n\t\t\t\t\t<PermissionHooks permissionHooks={layoutModuleData.permissionSelectorHooks} />\n\t\t\t\t</>\n\t\t\t);\n\t\t}\n\n\t\tWithLayout.displayName = `withLayout(${displayName})`;\n\n\t\treturn WithLayout;\n\t};\n}\n"],"names":[],"mappings":";;;;;;;AASA,MAAM,CAAA,GAAI,MAAM,4BAA4B,CAAA,CAAA;AAE5C,MAAM,uBAAgD,GAAA;AAAA,EACrD,WAAW,EAAC;AAAA,EACZ,yBAAyB,EAAC;AAAA,EAC1B,aAAa,EAAC;AAAA,EACd,WAAW,EAAC;AAAA,EACZ,eAAe,EAAC;AAAA,EAChB,QAAQ,EAAC;AACV,CAAA,CAAA;AAEO,SAAA,UAAA,CAAoB,MAA6B,EAAA;AACvD,EAAA,MAAM,mBAAmB,MAAO,CAAA,OAAA,CAAQ,MAAO,CAAA,CAAC,MAAM,MAAW,KAAA;AAChE,IAAI,IAAA,4BAAA,CAA6B,MAAM,CAAG,EAAA;AACzC,MAAO,OAAA;AAAA,QACN,SAAW,EAAA,CAAC,GAAI,IAAA,CAAK,SAAa,IAAA,EAAK,EAAA,GAAI,MAAO,CAAA,MAAA,CAAO,SAAa,IAAA,EAAG,CAAA;AAAA,QACzE,uBAAyB,EAAA,CAAC,GAAI,IAAA,CAAK,uBAA2B,IAAA,EAAK,EAAA,GAAI,MAAO,CAAA,MAAA,CAAO,uBAA2B,IAAA,EAAG,CAAA;AAAA,QACnH,WAAa,EAAA,CAAC,GAAI,IAAA,CAAK,WAAe,IAAA,EAAK,EAAA,GAAI,MAAO,CAAA,MAAA,CAAO,WAAe,IAAA,EAAG,CAAA;AAAA,QAC/E,SAAW,EAAA,CAAC,GAAI,IAAA,CAAK,SAAa,IAAA,EAAK,EAAA,GAAI,MAAO,CAAA,MAAA,CAAO,SAAa,IAAA,EAAG,CAAA;AAAA,QACzE,aAAe,EAAA,CAAC,GAAI,IAAA,CAAK,aAAiB,IAAA,EAAK,EAAA,GAAI,MAAO,CAAA,MAAA,CAAO,aAAiB,IAAA,EAAG,CAAA;AAAA,QACrF,MAAQ,EAAA,CAAC,GAAI,IAAA,CAAK,MAAU,IAAA,EAAK,EAAA,GAAI,MAAO,CAAA,MAAA,CAAO,MAAU,IAAA,EAAG,CAAA;AAAA,OACjE,CAAA;AAAA,KACD;AACA,IAAO,OAAA,IAAA,CAAA;AAAA,KACL,uBAAuB,CAAA,CAAA;AAC1B,EAAA,CAAA,CAAE,0BAA0B,gBAAgB,CAAA,CAAA;AAG5C,EAAA,OAAO,mBAAmB,OAA6B,EAAA;AACtD,IAAA,MAAM,WAAc,GAAA,OAAA,CAAQ,WAAe,IAAA,OAAA,CAAQ,IAAQ,IAAA,EAAA,CAAA;AAE3D,IAAA,SAAA,UAAA,CAAoB,KAAgB,EAAA;AACnC,MAAA,iFAEG,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA;AAAA,QAAW,GAAA,gBAAA;AAAA,OAAA,kBACV,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA;AAAA,QAAY,GAAA,KAAA;AAAA,QAAO,MAAQ,EAAA,gBAAA;AAAA,OAAkB,CAC/C,mBACC,KAAA,CAAA,aAAA,CAAA,SAAA,EAAA;AAAA,QAAU,WAAW,gBAAiB,CAAA,SAAA;AAAA,OAAW,mBACjD,KAAA,CAAA,aAAA,CAAA,eAAA,EAAA;AAAA,QAAgB,iBAAiB,gBAAiB,CAAA,uBAAA;AAAA,OAAyB,CAC7E,CAAA,CAAA;AAAA,KAEF;AAEA,IAAA,UAAA,CAAW,cAAc,CAAc,WAAA,EAAA,WAAA,CAAA,CAAA,CAAA,CAAA;AAEvC,IAAO,OAAA,UAAA,CAAA;AAAA,GACR,CAAA;AACD;;;;"}
@@ -0,0 +1,25 @@
1
+ import { createSliceHook } from '@imperium/state';
2
+ import { createSlice } from '@reduxjs/toolkit';
3
+
4
+ const state = createSlice({
5
+ name: "imperiumLayout",
6
+ initialState: {
7
+ isMobile: false,
8
+ params: {},
9
+ permissions: {}
10
+ },
11
+ reducers: {
12
+ setMobile: (st, action) => ({ ...st, isMobile: action.payload }),
13
+ setParams: (st, action) => {
14
+ st.params = action.payload;
15
+ },
16
+ setPermission: (st, action) => {
17
+ st.permissions[action.payload.permission] = action.payload.result;
18
+ }
19
+ }
20
+ });
21
+ const useLayoutState = createSliceHook(state);
22
+ const { actions } = state;
23
+
24
+ export { actions, state, useLayoutState };
25
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sources":["../../src/state.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport {createSliceHook} from '@imperium/state';\nimport {createSlice, PayloadAction} from '@reduxjs/toolkit';\n\nexport const state = createSlice({\n\tname: 'imperiumLayout',\n\tinitialState: {\n\t\tisMobile: false,\n\t\tparams: {},\n\t\tpermissions: {} as Record<string, boolean>,\n\t},\n\treducers: {\n\t\tsetMobile: (st, action: PayloadAction<boolean>) => ({...st, isMobile: action.payload}),\n\t\tsetParams: (st, action: PayloadAction<Record<string, string>>) => {\n\t\t\tst.params = action.payload;\n\t\t},\n\t\tsetPermission: (st, action: PayloadAction<{permission: string; result: boolean}>) => {\n\t\t\tst.permissions[action.payload.permission] = action.payload.result;\n\t\t},\n\t},\n});\n\nexport const useLayoutState = createSliceHook(state);\n\nexport const {actions} = state;\n"],"names":[],"mappings":";;;AAIO,MAAM,QAAQ,WAAY,CAAA;AAAA,EAChC,IAAM,EAAA,gBAAA;AAAA,EACN,YAAc,EAAA;AAAA,IACb,QAAU,EAAA,KAAA;AAAA,IACV,QAAQ,EAAC;AAAA,IACT,aAAa,EAAC;AAAA,GACf;AAAA,EACA,QAAU,EAAA;AAAA,IACT,SAAA,EAAW,CAAC,EAAI,EAAA,MAAA,WAAwC,EAAI,EAAA,QAAA,EAAU,OAAO,OAAO,EAAA,CAAA;AAAA,IACpF,SAAA,EAAW,CAAC,EAAA,EAAI,MAAkD,KAAA;AACjE,MAAA,EAAA,CAAG,SAAS,MAAO,CAAA,OAAA,CAAA;AAAA,KACpB;AAAA,IACA,aAAA,EAAe,CAAC,EAAA,EAAI,MAAiE,KAAA;AACpF,MAAA,EAAA,CAAG,WAAY,CAAA,MAAA,CAAO,OAAQ,CAAA,UAAA,CAAA,GAAc,OAAO,OAAQ,CAAA,MAAA,CAAA;AAAA,KAC5D;AAAA,GACD;AACD,CAAC,EAAA;AAEY,MAAA,cAAA,GAAiB,gBAAgB,KAAK,EAAA;AAE5C,MAAM,EAAC,OAAW,EAAA,GAAA;;;;"}
@@ -0,0 +1,7 @@
1
+ function isImperiumLayoutClientModule(module) {
2
+ const layoutModule = module;
3
+ return layoutModule.layout !== void 0;
4
+ }
5
+
6
+ export { isImperiumLayoutClientModule };
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sources":["../../src/types.ts"],"sourcesContent":["import type {ImperiumClientModule} from '@imperium/client';\nimport type {Location} from 'history';\nimport type {LayoutData} from './layout/types';\n\nexport type State = Record<string, any>;\n/**\n * A hook that selects from redux state.\n */\nexport type StateSelectorHook = () => State;\n\nexport type PermissionResults = Record<string, boolean>;\n\nexport type PermissionSelectorHook = (data: Data) => PermissionResults;\n\n/**\n * The visibility query can either be a mingo query or a function that returns a boolean. The data is an object with the router path merged with any state selector hook data.\n */\nexport type VisibilityQueryFn = (data: Data) => boolean;\n\nexport interface Data extends Record<string, unknown> {\n\tloc: Location;\n\troute: {\n\t\tpath: string[];\n\t\thash: string;\n\t\tsearch: Record<string, any>;\n\t};\n\tstate: State;\n\tactive: boolean;\n\tpermissions: PermissionResults;\n\tid?: string;\n}\n\nexport interface ImperiumLayoutClientModule extends ImperiumClientModule {\n\tlayout: LayoutData;\n}\n\nexport function isImperiumLayoutClientModule(module: ImperiumClientModule): module is ImperiumLayoutClientModule {\n\tconst layoutModule = module as ImperiumLayoutClientModule;\n\treturn layoutModule.layout !== undefined;\n}\n"],"names":[],"mappings":"AAoCO,SAAA,4BAAA,CAAsC,MAAoE,EAAA;AAChH,EAAA,MAAM,YAAe,GAAA,MAAA,CAAA;AACrB,EAAA,OAAO,aAAa,MAAW,KAAA,KAAA,CAAA,CAAA;AAChC;;;;"}
@@ -0,0 +1,9 @@
1
+ import { memoize, sortBy } from 'lodash-es';
2
+
3
+ function sortWeightedItemsImpl(items) {
4
+ return sortBy(items, (v) => v.weight || 0);
5
+ }
6
+ const sortWeightedItems = memoize(sortWeightedItemsImpl);
7
+
8
+ export { sortWeightedItems };
9
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sources":["../../src/utils.ts"],"sourcesContent":["import type {MemoizedFunction} from 'lodash';\nimport {memoize, sortBy} from 'lodash-es';\nimport type {WeightedItem} from './commonItems';\n\n/**\n * Sorts weighted items\n */\nfunction sortWeightedItemsImpl<T extends WeightedItem>(items: T[]) {\n\treturn sortBy(items, v => v.weight || 0);\n}\n\nexport const sortWeightedItems: (<T extends WeightedItem>(items: T[]) => unknown[] | Array<T[][keyof T[]]>) & MemoizedFunction =\n\tmemoize(sortWeightedItemsImpl);\n"],"names":[],"mappings":";;AAOA,SAAA,qBAAA,CAAuD,KAAY,EAAA;AAClE,EAAA,OAAO,MAAO,CAAA,KAAA,EAAO,CAAK,CAAA,KAAA,CAAA,CAAE,UAAU,CAAC,CAAA,CAAA;AACxC,CAAA;AAEa,MAAA,iBAAA,GACZ,QAAQ,qBAAqB;;;;"}