@carlonicora/nextjs-jsonapi 1.0.4 → 1.0.6

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 (283) hide show
  1. package/LICENSE +675 -0
  2. package/dist/{AbstractService-BKlpJA61.d.mts → AbstractService-B2n_JdiC.d.mts} +1 -1
  3. package/dist/{AbstractService-D9eSVKNa.d.ts → AbstractService-DtQTYovo.d.ts} +1 -1
  4. package/dist/{content.interface-Dg2lt_An.d.mts → AuthComponent-CPLvEerw.d.mts} +11 -15
  5. package/dist/{content.interface-BhyAiOFq.d.ts → AuthComponent-m6Qp4Hz6.d.ts} +11 -15
  6. package/dist/{BlockNoteEditor-UVO3VZZE.mjs → BlockNoteEditor-BLVXQPXV.mjs} +14 -18
  7. package/dist/{BlockNoteEditor-UVO3VZZE.mjs.map → BlockNoteEditor-BLVXQPXV.mjs.map} +1 -1
  8. package/dist/{BlockNoteEditor-VFWG6LXI.js → BlockNoteEditor-ZTDHULFT.js} +15 -19
  9. package/dist/BlockNoteEditor-ZTDHULFT.js.map +1 -0
  10. package/dist/JsonApiRequest-O7BGUMFO.mjs +23 -0
  11. package/dist/JsonApiRequest-VARLNKAF.js +23 -0
  12. package/dist/JsonApiRequest-VARLNKAF.js.map +1 -0
  13. package/dist/chunk-2LM6LCJW.mjs +1 -0
  14. package/dist/chunk-3APORDYP.mjs +7783 -0
  15. package/dist/chunk-3APORDYP.mjs.map +1 -0
  16. package/dist/{chunk-TMVHSY3Y.js → chunk-5ZEADNNP.js} +36 -17
  17. package/dist/chunk-5ZEADNNP.js.map +1 -0
  18. package/dist/{chunk-ECDTZBYO.mjs → chunk-74F6BBHH.mjs} +21 -2
  19. package/dist/chunk-74F6BBHH.mjs.map +1 -0
  20. package/dist/{chunk-GYWPEPOH.mjs → chunk-7C5RAEBO.mjs} +72 -68
  21. package/dist/chunk-7C5RAEBO.mjs.map +1 -0
  22. package/dist/chunk-A5DDIABK.js +1 -0
  23. package/dist/{chunk-TEGF6ZWG.js → chunk-AGAJMJ4T.js} +47 -9
  24. package/dist/chunk-AGAJMJ4T.js.map +1 -0
  25. package/dist/{chunk-CXQOWQSY.js → chunk-AYHKQWHH.js} +15 -2
  26. package/dist/chunk-AYHKQWHH.js.map +1 -0
  27. package/dist/{chunk-I2REI7OA.js → chunk-HMHGLXWC.js} +33 -15
  28. package/dist/chunk-HMHGLXWC.js.map +1 -0
  29. package/dist/chunk-IWFGEPAA.mjs +1 -0
  30. package/dist/chunk-JC3WJK65.js +1 -0
  31. package/dist/{chunk-L6EQEAXU.mjs → chunk-PYF2U6WG.mjs} +25 -7
  32. package/dist/chunk-PYF2U6WG.mjs.map +1 -0
  33. package/dist/{chunk-YDVTFM7X.mjs → chunk-RBIVEH2K.mjs} +42 -4
  34. package/dist/chunk-RBIVEH2K.mjs.map +1 -0
  35. package/dist/{chunk-V2JJPI7N.js → chunk-RZO2LOW4.js} +237 -233
  36. package/dist/chunk-RZO2LOW4.js.map +1 -0
  37. package/dist/{chunk-X4BIHJ2B.mjs → chunk-SM63SZCP.mjs} +15 -2
  38. package/dist/chunk-SM63SZCP.mjs.map +1 -0
  39. package/dist/chunk-WEC4YMOS.js +7783 -0
  40. package/dist/chunk-WEC4YMOS.js.map +1 -0
  41. package/dist/client/index.d.mts +21 -2
  42. package/dist/client/index.d.ts +21 -2
  43. package/dist/client/index.js +18 -245
  44. package/dist/client/index.js.map +1 -1
  45. package/dist/client/index.mjs +28 -255
  46. package/dist/client/index.mjs.map +1 -1
  47. package/dist/components/index.d.mts +293 -8
  48. package/dist/components/index.d.ts +293 -8
  49. package/dist/components/index.js +78 -2323
  50. package/dist/components/index.js.map +1 -1
  51. package/dist/components/index.mjs +172 -2417
  52. package/dist/components/index.mjs.map +1 -1
  53. package/dist/{config-hXufftVS.d.ts → config-BmnK65TD.d.mts} +1 -0
  54. package/dist/{config-hXufftVS.d.mts → config-BmnK65TD.d.ts} +1 -0
  55. package/dist/config-DQeAo9Kf.d.mts +49 -0
  56. package/dist/config-DQeAo9Kf.d.ts +49 -0
  57. package/dist/contexts/index.d.mts +109 -21
  58. package/dist/contexts/index.d.ts +109 -21
  59. package/dist/contexts/index.js +39 -7
  60. package/dist/contexts/index.js.map +1 -1
  61. package/dist/contexts/index.mjs +40 -8
  62. package/dist/core/index.d.mts +3 -4
  63. package/dist/core/index.d.ts +3 -4
  64. package/dist/core/index.js +3 -7
  65. package/dist/core/index.js.map +1 -1
  66. package/dist/core/index.mjs +4 -8
  67. package/dist/{d3.link.interface-QMdB22bC.d.mts → d3.link.interface-ClC4Irqp.d.mts} +2 -1
  68. package/dist/{d3.link.interface-QMdB22bC.d.ts → d3.link.interface-ClC4Irqp.d.ts} +2 -1
  69. package/dist/features/index.d.mts +17 -86
  70. package/dist/features/index.d.ts +17 -86
  71. package/dist/features/index.js +7 -16
  72. package/dist/features/index.js.map +1 -1
  73. package/dist/features/index.mjs +10 -19
  74. package/dist/hooks/index.d.mts +18 -43
  75. package/dist/hooks/index.d.ts +18 -43
  76. package/dist/hooks/index.js +20 -7
  77. package/dist/hooks/index.js.map +1 -1
  78. package/dist/hooks/index.mjs +19 -6
  79. package/dist/index.d.mts +10 -6
  80. package/dist/index.d.ts +10 -6
  81. package/dist/index.js +13 -10
  82. package/dist/index.js.map +1 -1
  83. package/dist/index.mjs +22 -19
  84. package/dist/interfaces/index.d.mts +2 -1
  85. package/dist/interfaces/index.d.ts +2 -1
  86. package/dist/notification.interface-BBgMUdLR.d.mts +14 -0
  87. package/dist/notification.interface-gyvT-Z2F.d.ts +14 -0
  88. package/dist/permissions/index.d.mts +2 -3
  89. package/dist/permissions/index.d.ts +2 -3
  90. package/dist/server/index.d.mts +38 -18
  91. package/dist/server/index.d.ts +38 -18
  92. package/dist/server/index.js +70 -2
  93. package/dist/server/index.js.map +1 -1
  94. package/dist/server/index.mjs +68 -0
  95. package/dist/server/index.mjs.map +1 -1
  96. package/dist/types-BUAlgqqh.d.ts +39 -0
  97. package/dist/{types-DluCaP1I.d.ts → types-Bl61ob-7.d.mts} +19 -2
  98. package/dist/{types-lQVA8d_P.d.mts → types-Bl61ob-7.d.ts} +19 -2
  99. package/dist/types-iVdVY7ba.d.mts +39 -0
  100. package/dist/useSocket-Cn7fB_B1.d.mts +25 -0
  101. package/dist/useSocket-DzMKRKCA.d.ts +25 -0
  102. package/dist/user.fields-CbdObSmS.d.mts +18 -0
  103. package/dist/user.fields-CbdObSmS.d.ts +18 -0
  104. package/dist/utils/index.d.mts +1 -2
  105. package/dist/utils/index.d.ts +1 -2
  106. package/package.json +5 -3
  107. package/src/client/index.ts +13 -0
  108. package/src/components/forms/index.ts +1 -0
  109. package/src/components/index.ts +5 -0
  110. package/src/components/tables/ContentListTable.tsx +1 -0
  111. package/src/contexts/CommonContext.tsx +52 -0
  112. package/src/contexts/SharedContext.tsx +2 -0
  113. package/src/contexts/SocketContext.tsx +65 -0
  114. package/src/contexts/index.ts +6 -1
  115. package/src/features/auth/components/containers/AuthContainer.tsx +32 -0
  116. package/src/features/auth/components/containers/index.ts +1 -0
  117. package/src/features/auth/components/details/LandingComponent.tsx +39 -0
  118. package/src/features/auth/components/details/index.ts +1 -0
  119. package/src/features/auth/components/forms/AcceptInvitation.tsx +136 -0
  120. package/src/features/auth/components/forms/ActivateAccount.tsx +75 -0
  121. package/src/features/auth/components/forms/Cookies.tsx +32 -0
  122. package/src/features/auth/components/forms/ForgotPassword.tsx +108 -0
  123. package/src/features/auth/components/forms/Login.tsx +118 -0
  124. package/src/features/auth/components/forms/Logout.tsx +19 -0
  125. package/src/features/auth/components/forms/RefreshUser.tsx +39 -0
  126. package/src/features/auth/components/forms/Register.tsx +150 -0
  127. package/src/features/auth/components/forms/ResetPassword.tsx +126 -0
  128. package/src/features/auth/components/forms/index.ts +9 -0
  129. package/src/features/auth/components/index.ts +3 -0
  130. package/src/features/auth/contexts/AuthContext.tsx +77 -0
  131. package/src/features/auth/contexts/index.ts +1 -0
  132. package/src/features/auth/enums/AuthComponent.ts +9 -0
  133. package/src/features/auth/enums/index.ts +1 -0
  134. package/src/features/auth/index.ts +2 -1
  135. package/src/features/auth/utils/AuthCookies.ts +134 -0
  136. package/src/features/auth/utils/index.ts +1 -0
  137. package/src/features/company/components/containers/AdminCompanyContainer.tsx +26 -0
  138. package/src/features/company/components/containers/CompanyContainer.tsx +17 -0
  139. package/src/features/company/components/containers/index.ts +2 -0
  140. package/src/features/company/components/details/CompanyDetails.tsx +26 -0
  141. package/src/features/company/components/details/index.ts +1 -0
  142. package/src/features/company/components/forms/CompanyConfigurationEditor.tsx +151 -0
  143. package/src/features/company/components/forms/CompanyConfigurationSecurityForm.tsx +97 -0
  144. package/src/features/company/components/forms/CompanyDeleter.tsx +121 -0
  145. package/src/features/company/components/forms/CompanyEditor.tsx +245 -0
  146. package/src/features/company/components/forms/CompanyLicense.tsx +213 -0
  147. package/src/features/company/components/forms/index.ts +5 -0
  148. package/src/features/company/components/index.ts +4 -0
  149. package/src/features/company/components/lists/CompaniesList.tsx +31 -0
  150. package/src/features/company/components/lists/index.ts +1 -0
  151. package/src/features/company/contexts/CompanyContext.tsx +99 -0
  152. package/src/features/company/contexts/index.ts +0 -0
  153. package/src/features/company/hooks/index.ts +1 -0
  154. package/src/features/company/hooks/useCompanyTableStructure.tsx +82 -0
  155. package/src/features/feature/components/forms/FormFeatures.tsx +141 -140
  156. package/src/features/feature/components/forms/index.ts +1 -0
  157. package/src/features/feature/components/index.ts +1 -1
  158. package/src/features/feature/index.ts +1 -2
  159. package/src/features/module/index.ts +1 -1
  160. package/src/features/notification/components/common/NotificationErrorBoundary.tsx +51 -0
  161. package/src/features/notification/components/common/index.ts +1 -0
  162. package/src/features/notification/components/containers/NotificationsListContainer.tsx +44 -0
  163. package/src/features/notification/components/containers/index.ts +1 -0
  164. package/src/features/notification/components/index.ts +5 -0
  165. package/src/features/notification/components/lists/NotificationsList.tsx +129 -0
  166. package/src/features/notification/components/lists/index.ts +1 -0
  167. package/src/features/notification/components/modals/NotificationModal.tsx +220 -0
  168. package/src/features/notification/components/modals/index.ts +1 -0
  169. package/src/features/notification/components/notifications/Notification.tsx +120 -0
  170. package/src/features/notification/components/notifications/PushNotificationProvider.tsx +9 -0
  171. package/src/features/notification/components/notifications/index.ts +2 -0
  172. package/src/features/notification/contexts/NotificationContext.tsx +187 -0
  173. package/src/features/notification/contexts/index.ts +1 -0
  174. package/src/features/notification/index.ts +1 -1
  175. package/src/features/push/index.ts +1 -1
  176. package/src/features/role/components/containers/RoleContainer.tsx +18 -0
  177. package/src/features/role/components/containers/index.ts +1 -0
  178. package/src/features/role/components/details/RoleDetails.tsx +21 -0
  179. package/src/features/role/components/details/index.ts +1 -0
  180. package/src/features/role/components/forms/FormRoles.tsx +82 -0
  181. package/src/features/role/components/forms/RemoveUserFromRole.tsx +108 -0
  182. package/src/features/role/components/forms/UserRoleAdd.tsx +128 -0
  183. package/src/features/role/components/forms/index.ts +3 -0
  184. package/src/features/role/components/index.ts +4 -0
  185. package/src/features/role/components/lists/RolesList.tsx +27 -0
  186. package/src/features/role/components/lists/UserRolesList.tsx +31 -0
  187. package/src/features/role/components/lists/index.ts +2 -0
  188. package/src/features/role/contexts/RoleContext.tsx +84 -0
  189. package/src/features/role/contexts/index.ts +1 -0
  190. package/src/features/role/hooks/index.ts +1 -0
  191. package/src/features/role/hooks/useRoleTableStructure.tsx +72 -0
  192. package/src/features/s3/index.ts +1 -1
  193. package/src/features/user/components/containers/UserContainer.tsx +23 -0
  194. package/src/features/user/components/containers/UserIndexContainer.tsx +12 -0
  195. package/src/features/user/components/containers/UsersListContainer.tsx +36 -0
  196. package/src/features/user/components/containers/index.ts +3 -0
  197. package/src/features/user/components/details/UserDetails.tsx +74 -0
  198. package/src/features/user/components/details/UserIndexDetails.tsx +28 -0
  199. package/src/features/user/components/details/index.ts +2 -0
  200. package/src/features/user/components/forms/RoleUserAdd.tsx +93 -0
  201. package/src/features/user/components/forms/UserAvatarEditor.tsx +78 -0
  202. package/src/features/user/components/forms/UserDeleter.tsx +49 -0
  203. package/src/features/user/components/forms/UserEditor.tsx +319 -0
  204. package/src/features/user/components/forms/UserMultiSelect.tsx +218 -0
  205. package/src/features/user/components/forms/UserReactivator.tsx +79 -0
  206. package/src/features/user/components/forms/UserResentInvitationEmail.tsx +88 -0
  207. package/src/features/user/components/forms/UserSelector.tsx +185 -0
  208. package/src/features/user/components/forms/index.ts +8 -0
  209. package/src/features/user/components/index.ts +3 -0
  210. package/src/features/user/components/lists/AdminUsersList.tsx +41 -0
  211. package/src/features/user/components/lists/CompanyUsersList.tsx +44 -0
  212. package/src/features/user/components/lists/RelevantUsersList.tsx +30 -0
  213. package/src/features/user/components/lists/RoleUsersList.tsx +31 -0
  214. package/src/features/user/components/lists/UserListInAdd.tsx +53 -0
  215. package/src/features/user/components/lists/UsersList.tsx +30 -0
  216. package/src/features/user/components/lists/UsersListByContentIds.tsx +30 -0
  217. package/src/features/user/components/lists/index.ts +7 -0
  218. package/src/features/user/components/widgets/UserAvatarList.tsx +31 -0
  219. package/src/features/user/components/widgets/UserSearchPopover.tsx +89 -0
  220. package/src/features/user/contexts/UserContext.tsx +106 -0
  221. package/src/features/user/contexts/index.ts +1 -0
  222. package/src/features/user/hooks/index.ts +2 -0
  223. package/src/features/user/hooks/useUserSearch.ts +53 -0
  224. package/src/features/user/hooks/useUserTableStructure.tsx +115 -0
  225. package/src/features/user/index.ts +0 -1
  226. package/src/hooks/index.ts +4 -0
  227. package/src/hooks/useCustomD3Graph.tsx +2 -0
  228. package/src/hooks/useNotificationSync.ts +20 -0
  229. package/src/hooks/usePageTracker.ts +69 -0
  230. package/src/hooks/usePushNotifications.ts +82 -0
  231. package/src/hooks/useSocket.ts +201 -0
  232. package/src/hooks/useTableGenerator.ts +6 -2
  233. package/src/i18n/config.ts +1 -0
  234. package/src/index.ts +4 -0
  235. package/src/interfaces/d3.link.interface.ts +2 -1
  236. package/src/server/ServerSession.ts +103 -0
  237. package/src/server/index.ts +2 -1
  238. package/src/unified/JsonApiRequest.ts +23 -0
  239. package/dist/ApiRequestDataTypeInterface-CUKFDBx2.d.mts +0 -20
  240. package/dist/ApiRequestDataTypeInterface-CUKFDBx2.d.ts +0 -20
  241. package/dist/BlockNoteEditor-VFWG6LXI.js.map +0 -1
  242. package/dist/JsonApiRequest-S3ICLM7B.mjs +0 -20
  243. package/dist/JsonApiRequest-ZZLSP26T.js +0 -20
  244. package/dist/JsonApiRequest-ZZLSP26T.js.map +0 -1
  245. package/dist/chunk-366S2JCC.mjs +0 -31
  246. package/dist/chunk-366S2JCC.mjs.map +0 -1
  247. package/dist/chunk-5W6AKZE6.mjs +0 -131
  248. package/dist/chunk-5W6AKZE6.mjs.map +0 -1
  249. package/dist/chunk-A3J3AAYM.mjs +0 -97
  250. package/dist/chunk-A3J3AAYM.mjs.map +0 -1
  251. package/dist/chunk-AWONBQQP.js +0 -97
  252. package/dist/chunk-AWONBQQP.js.map +0 -1
  253. package/dist/chunk-CXQOWQSY.js.map +0 -1
  254. package/dist/chunk-DKKMWBP4.mjs +0 -1
  255. package/dist/chunk-DKKMWBP4.mjs.map +0 -1
  256. package/dist/chunk-DO2HLAZO.js +0 -48
  257. package/dist/chunk-DO2HLAZO.js.map +0 -1
  258. package/dist/chunk-DZXDB3K2.mjs +0 -17
  259. package/dist/chunk-DZXDB3K2.mjs.map +0 -1
  260. package/dist/chunk-ECDTZBYO.mjs.map +0 -1
  261. package/dist/chunk-FY4SXJGU.js +0 -806
  262. package/dist/chunk-FY4SXJGU.js.map +0 -1
  263. package/dist/chunk-GYWPEPOH.mjs.map +0 -1
  264. package/dist/chunk-H6FMOA6B.js +0 -1
  265. package/dist/chunk-H6FMOA6B.js.map +0 -1
  266. package/dist/chunk-I2REI7OA.js.map +0 -1
  267. package/dist/chunk-J4Q36PMP.js +0 -31
  268. package/dist/chunk-J4Q36PMP.js.map +0 -1
  269. package/dist/chunk-L6EQEAXU.mjs.map +0 -1
  270. package/dist/chunk-MFO27OHB.mjs +0 -48
  271. package/dist/chunk-MFO27OHB.mjs.map +0 -1
  272. package/dist/chunk-RAF7PNLG.js +0 -131
  273. package/dist/chunk-RAF7PNLG.js.map +0 -1
  274. package/dist/chunk-RUR22SVM.js +0 -17
  275. package/dist/chunk-RUR22SVM.js.map +0 -1
  276. package/dist/chunk-TEGF6ZWG.js.map +0 -1
  277. package/dist/chunk-TMVHSY3Y.js.map +0 -1
  278. package/dist/chunk-V2JJPI7N.js.map +0 -1
  279. package/dist/chunk-WWWMJZEF.mjs +0 -806
  280. package/dist/chunk-WWWMJZEF.mjs.map +0 -1
  281. package/dist/chunk-X4BIHJ2B.mjs.map +0 -1
  282. package/dist/chunk-YDVTFM7X.mjs.map +0 -1
  283. /package/dist/{JsonApiRequest-S3ICLM7B.mjs.map → JsonApiRequest-O7BGUMFO.mjs.map} +0 -0
@@ -1,806 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;
2
-
3
- var _chunkI2REI7OAjs = require('./chunk-I2REI7OA.js');
4
-
5
-
6
- var _chunk7QVYU63Ejs = require('./chunk-7QVYU63E.js');
7
-
8
- // src/hooks/TableGeneratorRegistry.ts
9
- var TableGeneratorRegistry = (_class = class _TableGeneratorRegistry {
10
- static {
11
- _chunk7QVYU63Ejs.__name.call(void 0, this, "TableGeneratorRegistry");
12
- }
13
-
14
- __init() {this.registry = /* @__PURE__ */ new Map()}
15
- constructor() {;_class.prototype.__init.call(this);
16
- }
17
- static getInstance() {
18
- if (!_TableGeneratorRegistry.instance) {
19
- _TableGeneratorRegistry.instance = new _TableGeneratorRegistry();
20
- }
21
- return _TableGeneratorRegistry.instance;
22
- }
23
- register(type, hook) {
24
- if (!this.registry.has(type)) this.registry.set(type, hook);
25
- }
26
- get(type, params) {
27
- const hook = this.registry.get(type);
28
- if (!hook) {
29
- throw new Error(
30
- `Table generator for type "${type}" is not registered. Available types: ${Array.from(this.registry.keys()).join(
31
- ", "
32
- )}`
33
- );
34
- }
35
- return hook(params);
36
- }
37
- isRegistered(type) {
38
- return this.registry.has(type);
39
- }
40
- getRegisteredTypes() {
41
- return Array.from(this.registry.keys());
42
- }
43
- unregister(type) {
44
- return this.registry.delete(type);
45
- }
46
- clear() {
47
- this.registry.clear();
48
- }
49
- }, _class);
50
- var tableGeneratorRegistry = TableGeneratorRegistry.getInstance();
51
-
52
- // src/hooks/url.rewriter.ts
53
- var _nextintl = require('next-intl');
54
- var _react = require('react');
55
-
56
- // src/hooks/usePageUrlGenerator.ts
57
- function usePageUrlGenerator() {
58
- const generateUrl = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (params) => {
59
- if (!params.page) return "/";
60
- const pathParams = [
61
- `${params.language ? `/${params.language}` : ""}${typeof params.page === "string" ? params.page : params.page.pageUrl}`
62
- ];
63
- if (params.id) {
64
- pathParams.push(params.id);
65
- if (params.childPage) {
66
- pathParams.push(typeof params.childPage === "string" ? params.childPage : _nullishCoalesce(params.childPage.pageUrl, () => ( "")));
67
- if (params.childId) {
68
- pathParams.push(params.childId);
69
- }
70
- }
71
- }
72
- const response = pathParams.join(`/`);
73
- if (params.additionalParameters) {
74
- const searchParams = new URLSearchParams();
75
- for (const key in params.additionalParameters) {
76
- if (params.additionalParameters[key]) {
77
- searchParams.append(key, params.additionalParameters[key]);
78
- }
79
- }
80
- return `${response}?${searchParams.toString()}`;
81
- }
82
- return response;
83
- }, "generateUrl");
84
- return generateUrl;
85
- }
86
- _chunk7QVYU63Ejs.__name.call(void 0, usePageUrlGenerator, "usePageUrlGenerator");
87
-
88
- // src/hooks/url.rewriter.ts
89
- function useUrlRewriter() {
90
- const locale = _nextintl.useLocale.call(void 0, );
91
- const generateUrl = usePageUrlGenerator();
92
- return _react.useCallback.call(void 0,
93
- (params) => {
94
- window.history.replaceState(
95
- null,
96
- "",
97
- generateUrl({ page: params.page, id: params.id, childPage: params.childPage, language: locale })
98
- );
99
- },
100
- [locale, generateUrl]
101
- );
102
- }
103
- _chunk7QVYU63Ejs.__name.call(void 0, useUrlRewriter, "useUrlRewriter");
104
-
105
- // src/hooks/useDataListRetriever.ts
106
-
107
- function useDataListRetriever(params) {
108
- const [data, setData] = _react.useState.call(void 0, void 0);
109
- const [nextPage, setNextPage] = _react.useState.call(void 0, void 0);
110
- const [previousPage, setPreviousPage] = _react.useState.call(void 0, void 0);
111
- const [isLoaded, setIsLoaded] = _react.useState.call(void 0, false);
112
- const [ready, setReady] = _react.useState.call(void 0, _nullishCoalesce(params.ready, () => ( true)));
113
- const searchTermRef = _react.useRef.call(void 0, "");
114
- const additionalParamsRef = _react.useRef.call(void 0, {});
115
- const requestIdRef = _react.useRef.call(void 0, 0);
116
- const abortControllerRef = _react.useRef.call(void 0, null);
117
- const isFetchingRef = _react.useRef.call(void 0, false);
118
- const resolvedType = params.module;
119
- const resolvedService = _chunkI2REI7OAjs.AbstractService;
120
- const parsePageParams = _react.useCallback.call(void 0, (url) => {
121
- if (!url) return null;
122
- try {
123
- const urlObj = new URL(url);
124
- const offset = parseInt(urlObj.searchParams.get("page[offset]") || "0", 10);
125
- const size = parseInt(urlObj.searchParams.get("page[size]") || "25", 10);
126
- return { offset, size };
127
- } catch (e) {
128
- return null;
129
- }
130
- }, []);
131
- const adjustPaginationUrl = _react.useCallback.call(void 0, (url, delta) => {
132
- if (!url) return void 0;
133
- try {
134
- const urlObj = new URL(url);
135
- const currentOffset = parseInt(urlObj.searchParams.get("page[offset]") || "0", 10);
136
- const newOffset = Math.max(0, currentOffset + delta);
137
- urlObj.searchParams.set("page[offset]", String(newOffset));
138
- return urlObj.toString();
139
- } catch (e2) {
140
- return url;
141
- }
142
- }, []);
143
- const pageInfo = _react.useMemo.call(void 0, () => {
144
- if (!data || data.length === 0) return void 0;
145
- const nextParams = parsePageParams(nextPage);
146
- const prevParams = parsePageParams(previousPage);
147
- let currentOffset = 0;
148
- let pageSize = 25;
149
- if (nextParams) {
150
- pageSize = nextParams.size;
151
- currentOffset = Math.max(0, nextParams.offset - pageSize);
152
- } else if (prevParams) {
153
- pageSize = prevParams.size;
154
- currentOffset = prevParams.offset + pageSize;
155
- }
156
- const startItem = currentOffset + 1;
157
- const endItem = currentOffset + data.length;
158
- return { startItem, endItem, pageSize };
159
- }, [data, nextPage, previousPage, parsePageParams]);
160
- const stableParams = _react.useMemo.call(void 0,
161
- () => ({
162
- service: resolvedService,
163
- type: resolvedType,
164
- retriever: params.retriever,
165
- retrieverParams: params.retrieverParams,
166
- requiresSearch: params.requiresSearch
167
- }),
168
- [resolvedService, resolvedType, params.retriever, params.retrieverParams, params.requiresSearch]
169
- );
170
- const fetchData = _react.useCallback.call(void 0,
171
- async (fetchParams) => {
172
- if (ready === false) {
173
- return;
174
- }
175
- if (isFetchingRef.current && !_optionalChain([fetchParams, 'optionalAccess', _ => _.callNext]) && !_optionalChain([fetchParams, 'optionalAccess', _2 => _2.callPrevious])) {
176
- return;
177
- }
178
- const thisRequestId = ++requestIdRef.current;
179
- isFetchingRef.current = true;
180
- if (stableParams.requiresSearch === true && _optionalChain([fetchParams, 'optionalAccess', _3 => _3.isRefine]) !== true && _optionalChain([fetchParams, 'optionalAccess', _4 => _4.isRefresh]) !== true)
181
- return;
182
- if (!nextPage && !previousPage && isLoaded && _optionalChain([fetchParams, 'optionalAccess', _5 => _5.callNext]) !== true && _optionalChain([fetchParams, 'optionalAccess', _6 => _6.callPrevious]) !== true && params.search === searchTermRef.current)
183
- return;
184
- const currentSearchTerm = searchTermRef.current;
185
- setIsLoaded(false);
186
- try {
187
- let response;
188
- const nextRef = { next: void 0 };
189
- const previousRef = { previous: void 0 };
190
- const selfRef = { self: void 0 };
191
- if (nextPage && _optionalChain([fetchParams, 'optionalAccess', _7 => _7.callNext]) && _optionalChain([fetchParams, 'optionalAccess', _8 => _8.isRefine]) !== true) {
192
- const ServiceClass = stableParams.service;
193
- response = await ServiceClass.next({
194
- type: stableParams.type,
195
- endpoint: nextPage,
196
- next: nextRef,
197
- previous: previousRef,
198
- self: selfRef
199
- });
200
- } else if (previousPage && _optionalChain([fetchParams, 'optionalAccess', _9 => _9.callPrevious]) && _optionalChain([fetchParams, 'optionalAccess', _10 => _10.isRefine]) !== true) {
201
- const ServiceClass = stableParams.service;
202
- response = await ServiceClass.previous({
203
- type: stableParams.type,
204
- endpoint: previousPage,
205
- next: nextRef,
206
- previous: previousRef,
207
- self: selfRef
208
- });
209
- } else {
210
- let retrieverParams = stableParams.retrieverParams ? { ...stableParams.retrieverParams } : {};
211
- retrieverParams = {
212
- ...retrieverParams,
213
- ...additionalParamsRef.current
214
- };
215
- retrieverParams.search = currentSearchTerm;
216
- retrieverParams.next = nextRef;
217
- retrieverParams.previous = previousRef;
218
- retrieverParams.self = selfRef;
219
- response = await stableParams.retriever(retrieverParams);
220
- }
221
- if (thisRequestId === requestIdRef.current && !_optionalChain([abortControllerRef, 'access', _11 => _11.current, 'optionalAccess', _12 => _12.signal, 'access', _13 => _13.aborted])) {
222
- if (_optionalChain([fetchParams, 'optionalAccess', _14 => _14.isRefresh]) === true) {
223
- setData(response);
224
- } else {
225
- setData((prevData) => [...prevData ? prevData : [], ...response]);
226
- }
227
- setIsLoaded(true);
228
- setNextPage(nextRef.next ? nextRef.next : void 0);
229
- setPreviousPage(previousRef.previous ? previousRef.previous : void 0);
230
- }
231
- } catch (error) {
232
- if (thisRequestId === requestIdRef.current) {
233
- setIsLoaded(true);
234
- console.error("Error fetching data:", error);
235
- }
236
- } finally {
237
- if (thisRequestId === requestIdRef.current) {
238
- isFetchingRef.current = false;
239
- }
240
- }
241
- },
242
- [stableParams, ready, params.search]
243
- );
244
- const setRefreshedElement = _react.useCallback.call(void 0,
245
- (element) => {
246
- setData((prevData) => {
247
- if (!prevData) return prevData;
248
- const index = prevData.findIndex((data2) => data2.id === element.id);
249
- if (index === -1) return prevData;
250
- return prevData.map((item, i) => i === index ? element : item);
251
- });
252
- },
253
- [setData]
254
- );
255
- const removeElement = _react.useCallback.call(void 0,
256
- (element) => {
257
- setData((prevData) => {
258
- if (!prevData) return prevData;
259
- const index = prevData.findIndex((data2) => data2.id === element.id);
260
- if (index === -1) return prevData;
261
- setNextPage((prev) => adjustPaginationUrl(prev, -1));
262
- const newData = [...prevData];
263
- newData.splice(index, 1);
264
- return newData;
265
- });
266
- },
267
- [adjustPaginationUrl]
268
- );
269
- _react.useEffect.call(void 0, () => {
270
- if (ready && !isLoaded) {
271
- fetchData({ isRefresh: true });
272
- }
273
- }, [ready, fetchData]);
274
- const loadNext = _react.useCallback.call(void 0,
275
- async (onlyNewRecords) => {
276
- if (nextPage) fetchData({ isRefresh: onlyNewRecords, callNext: true });
277
- },
278
- [fetchData, nextPage]
279
- );
280
- const loadPrevious = _react.useCallback.call(void 0,
281
- async (onlyNewRecords) => {
282
- if (previousPage) fetchData({ isRefresh: onlyNewRecords, callPrevious: true });
283
- },
284
- [fetchData, previousPage]
285
- );
286
- const addAdditionalParameter = _react.useCallback.call(void 0,
287
- (key, value) => {
288
- if (value === null) {
289
- delete additionalParamsRef.current[key];
290
- } else {
291
- additionalParamsRef.current[key] = value;
292
- }
293
- setReady(true);
294
- setNextPage(void 0);
295
- setPreviousPage(void 0);
296
- fetchData({ isRefine: true, isRefresh: true });
297
- },
298
- [fetchData]
299
- );
300
- const removeAdditionalParameter = _react.useCallback.call(void 0,
301
- (key) => {
302
- if (additionalParamsRef.current[key] !== void 0) {
303
- delete additionalParamsRef.current[key];
304
- setNextPage(void 0);
305
- setPreviousPage(void 0);
306
- fetchData({ isRefine: true, isRefresh: true });
307
- }
308
- },
309
- [fetchData]
310
- );
311
- const search = _react.useCallback.call(void 0,
312
- async (search2) => {
313
- if (search2 === searchTermRef.current) return;
314
- setNextPage(void 0);
315
- setPreviousPage(void 0);
316
- searchTermRef.current = search2;
317
- fetchData({ isRefine: true, isRefresh: true });
318
- },
319
- [fetchData]
320
- );
321
- const isSearch = !!searchTermRef.current;
322
- const refresh = _react.useCallback.call(void 0, async () => {
323
- setNextPage(void 0);
324
- setPreviousPage(void 0);
325
- fetchData({ isRefresh: true });
326
- }, [fetchData]);
327
- _react.useEffect.call(void 0, () => {
328
- return () => {
329
- if (abortControllerRef.current) {
330
- abortControllerRef.current.abort();
331
- }
332
- };
333
- }, []);
334
- return {
335
- ready,
336
- setReady,
337
- isLoaded,
338
- data,
339
- next: nextPage ? loadNext : void 0,
340
- previous: previousPage ? loadPrevious : void 0,
341
- search,
342
- addAdditionalParameter,
343
- removeAdditionalParameter,
344
- refresh,
345
- setRefreshedElement,
346
- isSearch,
347
- removeElement,
348
- pageInfo
349
- };
350
- }
351
- _chunk7QVYU63Ejs.__name.call(void 0, useDataListRetriever, "useDataListRetriever");
352
-
353
- // src/hooks/useDebounce.ts
354
-
355
- function useDebounce(callback, delay) {
356
- const timeoutRef = _react.useRef.call(void 0, null);
357
- const callbackRef = _react.useRef.call(void 0, callback);
358
- _react.useEffect.call(void 0, () => {
359
- callbackRef.current = callback;
360
- }, [callback]);
361
- const debouncedFunction = _react.useCallback.call(void 0,
362
- (...args) => {
363
- if (timeoutRef.current) {
364
- clearTimeout(timeoutRef.current);
365
- }
366
- timeoutRef.current = setTimeout(() => {
367
- callbackRef.current(...args);
368
- }, delay);
369
- },
370
- [delay]
371
- );
372
- const cancel = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, () => {
373
- if (timeoutRef.current) {
374
- clearTimeout(timeoutRef.current);
375
- }
376
- }, "cancel");
377
- return Object.assign(debouncedFunction, { cancel });
378
- }
379
- _chunk7QVYU63Ejs.__name.call(void 0, useDebounce, "useDebounce");
380
-
381
- // src/hooks/useTableGenerator.ts
382
- function registerTableGenerator(type, hook) {
383
- tableGeneratorRegistry.register(type.name, hook);
384
- }
385
- _chunk7QVYU63Ejs.__name.call(void 0, registerTableGenerator, "registerTableGenerator");
386
- function useTableGenerator(type, params) {
387
- return tableGeneratorRegistry.get(type.name, params);
388
- }
389
- _chunk7QVYU63Ejs.__name.call(void 0, useTableGenerator, "useTableGenerator");
390
-
391
- // src/hooks/useCustomD3Graph.tsx
392
- var _d3 = require('d3'); var d3 = _interopRequireWildcard(_d3);
393
- var _lucidereact = require('lucide-react');
394
-
395
- var _server = require('react-dom/server');
396
- var _jsxruntime = require('react/jsx-runtime');
397
- function useCustomD3Graph(nodes, links, onNodeClick, visibleNodeIds, loadingNodeIds, containerKey) {
398
- const svgRef = _react.useRef.call(void 0, null);
399
- const zoomRef = _react.useRef.call(void 0, null);
400
- const zoomBehaviorRef = _react.useRef.call(void 0, null);
401
- const nodePositionsRef = _react.useRef.call(void 0, /* @__PURE__ */ new Map());
402
- const prevContainerKeyRef = _react.useRef.call(void 0, containerKey);
403
- const zoomToNode = _react.useCallback.call(void 0,
404
- (nodeId, childIds = []) => {
405
- if (!svgRef.current || !zoomBehaviorRef.current) return;
406
- const svg = d3.select(svgRef.current);
407
- const zoom2 = zoomBehaviorRef.current;
408
- const targetNode = nodes.find((n) => n.id === nodeId);
409
- const childNodes = nodes.filter((n) => childIds.includes(n.id));
410
- if (!targetNode) return;
411
- const positions = [];
412
- if (targetNode.fx !== void 0 && targetNode.fy !== void 0 && targetNode.fx !== null && targetNode.fy !== null) {
413
- positions.push({ x: targetNode.fx, y: targetNode.fy });
414
- } else if (targetNode.x !== void 0 && targetNode.y !== void 0 && targetNode.x !== null && targetNode.y !== null) {
415
- positions.push({ x: targetNode.x, y: targetNode.y });
416
- }
417
- childNodes.forEach((child) => {
418
- if (child.fx !== void 0 && child.fy !== void 0 && child.fx !== null && child.fy !== null) {
419
- positions.push({ x: child.fx, y: child.fy });
420
- } else if (child.x !== void 0 && child.y !== void 0 && child.x !== null && child.y !== null) {
421
- positions.push({ x: child.x, y: child.y });
422
- }
423
- });
424
- if (positions.length === 0) return;
425
- const bounds = {
426
- xMin: Math.min(...positions.map((p) => p.x)),
427
- xMax: Math.max(...positions.map((p) => p.x)),
428
- yMin: Math.min(...positions.map((p) => p.y)),
429
- yMax: Math.max(...positions.map((p) => p.y))
430
- };
431
- const padding = 150;
432
- bounds.xMin -= padding;
433
- bounds.xMax += padding;
434
- bounds.yMin -= padding;
435
- bounds.yMax += padding;
436
- const width = svgRef.current.clientWidth;
437
- const height = svgRef.current.clientHeight;
438
- const contentWidth = bounds.xMax - bounds.xMin;
439
- const contentHeight = bounds.yMax - bounds.yMin;
440
- const scaleX = width / contentWidth;
441
- const scaleY = height / contentHeight;
442
- let scale = Math.min(scaleX, scaleY);
443
- scale = Math.min(Math.max(scale, 0.2), 1.5);
444
- const centerX = (bounds.xMin + bounds.xMax) / 2;
445
- const centerY = (bounds.yMin + bounds.yMax) / 2;
446
- const translateX = width / 2 - centerX * scale;
447
- const translateY = height / 2 - centerY * scale;
448
- svg.transition().duration(750).call(zoom2.transform, d3.zoomIdentity.translate(translateX, translateY).scale(scale));
449
- },
450
- [nodes]
451
- );
452
- const colorScale = _react.useMemo.call(void 0, () => {
453
- const accentColor = "var(--accent)";
454
- const contentColor = "hsl(30, 80%, 55%)";
455
- const groupTypes = /* @__PURE__ */ new Set();
456
- nodes.forEach((node) => {
457
- groupTypes.add(node.instanceType);
458
- });
459
- const typeColorMap = /* @__PURE__ */ new Map();
460
- Array.from(groupTypes).forEach((type, index) => {
461
- if (type === _optionalChain([nodes, 'access', _15 => _15[0], 'optionalAccess', _16 => _16.instanceType])) {
462
- typeColorMap.set(type, accentColor);
463
- } else if (type === "documents" || type === "articles" || type === "hyperlinks") {
464
- typeColorMap.set(type, contentColor);
465
- } else {
466
- const hueShift = index * 137.508 % 360;
467
- typeColorMap.set(type, `hsl(${hueShift}, 32%, 52%)`);
468
- }
469
- });
470
- return typeColorMap;
471
- }, [nodes]);
472
- const washOutColor = _react.useCallback.call(void 0, (color) => {
473
- const hslMatch = color.match(/hsl\((\d+\.?\d*),\s*(\d+\.?\d*)%,\s*(\d+\.?\d*)%\)/);
474
- if (hslMatch) {
475
- const hue = parseFloat(hslMatch[1]);
476
- return `hsl(${hue}, 15%, 80%)`;
477
- }
478
- if (color.includes("var(--accent)")) {
479
- return "hsl(0, 0%, 80%)";
480
- }
481
- return "hsl(0, 0%, 80%)";
482
- }, []);
483
- const getNodeColor = _react.useCallback.call(void 0,
484
- (node) => {
485
- const baseColor = colorScale.get(node.instanceType) || "gray";
486
- if (node.washedOut) {
487
- return washOutColor(baseColor);
488
- }
489
- return baseColor;
490
- },
491
- [colorScale, washOutColor]
492
- );
493
- _react.useEffect.call(void 0, () => {
494
- if (!nodes.length || !svgRef.current) return;
495
- const visibleNodes = visibleNodeIds ? nodes.filter((node2) => visibleNodeIds.has(node2.id)) : nodes.filter((node2) => node2.visible !== false);
496
- const visibleNodeIdSet = new Set(visibleNodes.map((node2) => node2.id));
497
- const visibleLinks = links.filter((link2) => {
498
- const sourceId = typeof link2.source === "string" ? link2.source : link2.source.id;
499
- const targetId = typeof link2.target === "string" ? link2.target : link2.target.id;
500
- return visibleNodeIdSet.has(sourceId) && visibleNodeIdSet.has(targetId);
501
- });
502
- const svg = d3.select(svgRef.current);
503
- svg.selectAll("*").remove();
504
- const container = _optionalChain([svgRef, 'access', _17 => _17.current, 'optionalAccess', _18 => _18.parentElement]);
505
- if (!container) return;
506
- const width = container.clientWidth;
507
- const height = container.clientHeight;
508
- svg.attr("width", width).attr("height", height).attr("viewBox", `0 0 ${width} ${height}`);
509
- const graphGroup = svg.append("g").attr("class", "graph-content");
510
- const zoom2 = d3.zoom().scaleExtent([0.1, 4]).on("zoom", (event) => {
511
- const transform = event.transform;
512
- graphGroup.attr("transform", transform.toString());
513
- zoomRef.current = transform;
514
- });
515
- zoomBehaviorRef.current = zoom2;
516
- svg.call(zoom2).on("wheel.zoom", null).on("dblclick.zoom", null);
517
- const nodeRadius = 40;
518
- const childDistanceFromRoot = Math.min(width, height) * 0.4;
519
- const grandchildDistanceFromChild = nodeRadius * 10;
520
- const centralNodeId = nodes[0].id;
521
- const nodeHierarchy = /* @__PURE__ */ new Map();
522
- nodeHierarchy.set(centralNodeId, {
523
- depth: 0,
524
- parent: null,
525
- children: []
526
- });
527
- visibleLinks.forEach((link2) => {
528
- const sourceId = typeof link2.source === "string" ? link2.source : link2.source.id;
529
- const targetId = typeof link2.target === "string" ? link2.target : link2.target.id;
530
- if (sourceId === centralNodeId) {
531
- nodeHierarchy.set(targetId, { depth: 1, parent: centralNodeId, children: [] });
532
- const rootNode = nodeHierarchy.get(centralNodeId);
533
- if (rootNode) {
534
- rootNode.children.push(targetId);
535
- }
536
- }
537
- });
538
- visibleLinks.forEach((link2) => {
539
- const sourceId = typeof link2.source === "string" ? link2.source : link2.source.id;
540
- const targetId = typeof link2.target === "string" ? link2.target : link2.target.id;
541
- const sourceNode = nodeHierarchy.get(sourceId);
542
- if (sourceNode && sourceNode.depth === 1 && !nodeHierarchy.has(targetId)) {
543
- nodeHierarchy.set(targetId, { depth: 2, parent: sourceId, children: [] });
544
- sourceNode.children.push(targetId);
545
- }
546
- });
547
- const rootChildren = _optionalChain([nodeHierarchy, 'access', _19 => _19.get, 'call', _20 => _20(centralNodeId), 'optionalAccess', _21 => _21.children]) || [];
548
- const childAngleStep = 2 * Math.PI / Math.max(rootChildren.length, 1);
549
- rootChildren.forEach((childId, index) => {
550
- const childNode = nodeHierarchy.get(childId);
551
- if (childNode) {
552
- const angle = index * childAngleStep;
553
- childNode.angle = angle;
554
- childNode.x = width / 2 + childDistanceFromRoot * Math.cos(angle);
555
- childNode.y = height / 2 + childDistanceFromRoot * Math.sin(angle);
556
- }
557
- });
558
- for (const [nodeId, node2] of nodeHierarchy.entries()) {
559
- if (node2.depth === 1 && node2.angle !== void 0 && node2.x !== void 0 && node2.y !== void 0) {
560
- const childAngle = node2.angle;
561
- const childX = node2.x;
562
- const childY = node2.y;
563
- const grandchildren = node2.children;
564
- if (grandchildren.length === 0) continue;
565
- const dirX = childX - width / 2;
566
- const dirY = childY - height / 2;
567
- const dirLength = Math.sqrt(dirX * dirX + dirY * dirY);
568
- const normDirX = dirX / dirLength;
569
- const normDirY = dirY / dirLength;
570
- if (grandchildren.length === 1) {
571
- const grandchildId = grandchildren[0];
572
- const grandchildNode = nodeHierarchy.get(grandchildId);
573
- if (grandchildNode) {
574
- grandchildNode.x = childX + normDirX * grandchildDistanceFromChild;
575
- grandchildNode.y = childY + normDirY * grandchildDistanceFromChild;
576
- grandchildNode.angle = childAngle;
577
- }
578
- } else {
579
- const numChildren = grandchildren.length;
580
- const minArc = Math.PI / 3;
581
- const maxArc = Math.PI;
582
- const arcProgress = Math.min(1, (numChildren - 2) / 5);
583
- const arcSpan = minArc + arcProgress * (maxArc - minArc);
584
- const startAngle = childAngle - arcSpan / 2;
585
- grandchildren.forEach((grandchildId, index) => {
586
- const grandchildNode = nodeHierarchy.get(grandchildId);
587
- if (!grandchildNode) return;
588
- const angleOffset = numChildren > 1 ? index / (numChildren - 1) * arcSpan : 0;
589
- const angle = startAngle + angleOffset;
590
- grandchildNode.x = childX + grandchildDistanceFromChild * Math.cos(angle);
591
- grandchildNode.y = childY + grandchildDistanceFromChild * Math.sin(angle);
592
- grandchildNode.angle = angle;
593
- });
594
- }
595
- }
596
- }
597
- visibleNodes.forEach((node2) => {
598
- const savedPosition = nodePositionsRef.current.get(node2.id);
599
- if (savedPosition) {
600
- node2.fx = savedPosition.x;
601
- node2.fy = savedPosition.y;
602
- } else {
603
- const hierarchyNode = nodeHierarchy.get(node2.id);
604
- if (hierarchyNode && hierarchyNode.x !== void 0 && hierarchyNode.y !== void 0) {
605
- node2.fx = hierarchyNode.x;
606
- node2.fy = hierarchyNode.y;
607
- nodePositionsRef.current.set(node2.id, { x: hierarchyNode.x, y: hierarchyNode.y });
608
- } else if (node2.id === centralNodeId) {
609
- node2.fx = width / 2;
610
- node2.fy = height / 2;
611
- nodePositionsRef.current.set(node2.id, { x: width / 2, y: height / 2 });
612
- }
613
- }
614
- });
615
- const simulation = d3.forceSimulation(visibleNodes).force(
616
- "link",
617
- d3.forceLink(visibleLinks).id((d) => d.id).distance(nodeRadius * 3).strength(0.1)
618
- ).force("charge", d3.forceManyBody().strength(-500).distanceMax(300)).force("collision", d3.forceCollide().radius(nodeRadius * 1.2)).force("center", d3.forceCenter(width / 2, height / 2).strength(0.1));
619
- simulation.stop();
620
- for (let i = 0; i < 100; i++) {
621
- simulation.tick();
622
- }
623
- visibleNodes.forEach((node2) => {
624
- if (node2.fx === void 0) {
625
- node2.fx = node2.x;
626
- node2.fy = node2.y;
627
- }
628
- });
629
- const link = graphGroup.append("g").attr("stroke", "#999").attr("stroke-opacity", 0.6).selectAll("line").data(visibleLinks).join("line").attr("x1", (d) => d.source.x || 0).attr("y1", (d) => d.source.y || 0).attr("x2", (d) => d.target.x || 0).attr("y2", (d) => d.target.y || 0).attr("stroke-width", 1.5);
630
- const node = graphGroup.append("g").selectAll("g").data(visibleNodes).join("g").attr("class", "node-group").attr("cursor", "pointer").attr("transform", (d) => `translate(${d.x || 0}, ${d.y || 0})`).call(
631
- d3.drag().subject(function(d) {
632
- return d;
633
- }).on("start", function(event, d) {
634
- d.fx = d.x;
635
- d.fy = d.y;
636
- }).on("drag", function(event, d) {
637
- d.fx = event.x;
638
- d.fy = event.y;
639
- d3.select(this).attr("transform", `translate(${event.x}, ${event.y})`);
640
- d3.select(this).attr("transform", `translate(${event.x}, ${event.y})`);
641
- nodePositionsRef.current.set(d.id, { x: event.x, y: event.y });
642
- link.attr("x1", (l) => {
643
- const source = l.source;
644
- return source.fx || source.x || 0;
645
- }).attr("y1", (l) => {
646
- const source = l.source;
647
- return source.fy || source.y || 0;
648
- }).attr("x2", (l) => {
649
- const target = l.target;
650
- return target.fx || target.x || 0;
651
- }).attr("y2", (l) => {
652
- const target = l.target;
653
- return target.fy || target.y || 0;
654
- });
655
- }).on("end", function(event, d) {
656
- d.fx = event.x;
657
- d.fy = event.y;
658
- })
659
- ).on("mouseenter", function(_event, d) {
660
- if (d.instanceType === "root") return;
661
- const currentNode = d3.select(this);
662
- currentNode.raise();
663
- const currentZoom = _optionalChain([zoomRef, 'access', _22 => _22.current, 'optionalAccess', _23 => _23.k]) || 1;
664
- const targetScreenFontSize = 20;
665
- const baseFontSize = 12;
666
- const textScale = targetScreenFontSize / (baseFontSize * currentZoom);
667
- const hoverTextOffset = nodeRadius * 1.4 + 5 / currentZoom;
668
- currentNode.select("circle").transition().duration(250).ease(d3.easeExpOut).attr("r", nodeRadius * 1.4).attr("filter", "drop-shadow(0px 4px 12px rgba(0, 0, 0, 0.3))");
669
- currentNode.select("text").transition().duration(250).ease(d3.easeExpOut).attr("dy", -hoverTextOffset).attr("transform", `translate(0, ${-hoverTextOffset}) scale(${textScale}) translate(0, ${hoverTextOffset})`);
670
- }).on("mouseleave", function(_event, d) {
671
- if (d.instanceType === "root") return;
672
- const currentNode = d3.select(this);
673
- currentNode.select("circle").transition().duration(250).ease(d3.easeExpOut).attr("r", nodeRadius).attr("filter", null);
674
- const normalOffset = nodeRadius + 5;
675
- currentNode.select("text").transition().duration(250).ease(d3.easeExpOut).attr("dy", -normalOffset).attr("transform", `translate(0, ${-normalOffset}) scale(1) translate(0, ${normalOffset})`);
676
- });
677
- node.append("circle").attr("r", nodeRadius).attr("fill", (d) => getNodeColor(d)).attr("stroke", "#fff").attr("stroke-width", 1.5).on("click", (event, d) => {
678
- event.preventDefault();
679
- event.stopPropagation();
680
- if (zoomBehaviorRef.current) {
681
- svg.on(".zoom", null);
682
- setTimeout(() => {
683
- if (zoomBehaviorRef.current) {
684
- svg.call(zoomBehaviorRef.current).on("wheel.zoom", null).on("dblclick.zoom", null);
685
- }
686
- }, 100);
687
- }
688
- onNodeClick(d.id);
689
- });
690
- node.each(function(d) {
691
- if (d.icon) {
692
- const Icon = d.icon;
693
- const iconSvg = _server.renderToStaticMarkup.call(void 0, /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Icon, { size: nodeRadius / 2, color: "white" }));
694
- const iconGroup = d3.select(this).append("g").html(iconSvg).attr("transform", `translate(${-nodeRadius / 4}, ${-nodeRadius / 4})`).style("pointer-events", "all").on("click", (event) => {
695
- event.stopPropagation();
696
- onNodeClick(d.id);
697
- });
698
- }
699
- });
700
- node.each(function(d) {
701
- if (loadingNodeIds && loadingNodeIds.has(d.id)) {
702
- d3.select(this).selectAll("g").remove();
703
- const spinnerSvg = _server.renderToStaticMarkup.call(void 0, /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Loader2, { size: nodeRadius / 2, color: "white" }));
704
- d3.select(this).append("g").html(spinnerSvg).attr("class", "animate-spin").attr("transform", `translate(${-nodeRadius / 4}, ${-nodeRadius / 4})`).style("pointer-events", "none");
705
- }
706
- });
707
- node.each(function(d) {
708
- const textElement = d3.select(this).append("text").attr("text-anchor", "middle").attr("font-size", 12).attr("pointer-events", "none");
709
- if (d.instanceType === "root") {
710
- const words = d.name.split(" ");
711
- const lineHeight = 1.2;
712
- const numLines = words.length;
713
- const startY = -((numLines - 1) * lineHeight) / 2;
714
- textElement.attr("fill", "var(--accent-foreground)").attr("dominant-baseline", "middle");
715
- words.forEach((word, index) => {
716
- textElement.append("tspan").attr("x", 0).attr("dy", index === 0 ? `${startY}em` : `${lineHeight}em`).text(word);
717
- });
718
- } else {
719
- textElement.attr("dy", -nodeRadius - 5).attr("fill", "currentColor").text(d.name);
720
- }
721
- });
722
- return () => {
723
- simulation.stop();
724
- };
725
- }, [nodes, links, colorScale, visibleNodeIds, loadingNodeIds, onNodeClick]);
726
- const zoomIn = _react.useCallback.call(void 0, () => {
727
- if (!svgRef.current || !zoomBehaviorRef.current) return;
728
- const svg = d3.select(svgRef.current);
729
- const zoom2 = zoomBehaviorRef.current;
730
- const currentTransform = zoomRef.current || d3.zoomIdentity;
731
- const newScale = Math.min(currentTransform.k * 1.3, 4);
732
- svg.transition().duration(300).call(zoom2.transform, d3.zoomIdentity.translate(currentTransform.x, currentTransform.y).scale(newScale));
733
- }, []);
734
- const zoomOut = _react.useCallback.call(void 0, () => {
735
- if (!svgRef.current || !zoomBehaviorRef.current) return;
736
- const svg = d3.select(svgRef.current);
737
- const zoom2 = zoomBehaviorRef.current;
738
- const currentTransform = zoomRef.current || d3.zoomIdentity;
739
- const newScale = Math.max(currentTransform.k * 0.7, 0.1);
740
- svg.transition().duration(300).call(zoom2.transform, d3.zoomIdentity.translate(currentTransform.x, currentTransform.y).scale(newScale));
741
- }, []);
742
- const zoomToFitAll = _react.useCallback.call(void 0, () => {
743
- if (!svgRef.current || !zoomBehaviorRef.current) return;
744
- const svg = d3.select(svgRef.current);
745
- const zoom2 = zoomBehaviorRef.current;
746
- const visibleNodes = visibleNodeIds ? nodes.filter((node) => visibleNodeIds.has(node.id)) : nodes.filter((node) => node.visible !== false);
747
- if (visibleNodes.length === 0) return;
748
- const positions = [];
749
- visibleNodes.forEach((node) => {
750
- if (node.fx !== void 0 && node.fy !== void 0 && node.fx !== null && node.fy !== null) {
751
- positions.push({ x: node.fx, y: node.fy });
752
- } else if (node.x !== void 0 && node.y !== void 0 && node.x !== null && node.y !== null) {
753
- positions.push({ x: node.x, y: node.y });
754
- }
755
- });
756
- if (positions.length === 0) return;
757
- const bounds = {
758
- xMin: Math.min(...positions.map((p) => p.x)),
759
- xMax: Math.max(...positions.map((p) => p.x)),
760
- yMin: Math.min(...positions.map((p) => p.y)),
761
- yMax: Math.max(...positions.map((p) => p.y))
762
- };
763
- const padding = 150;
764
- bounds.xMin -= padding;
765
- bounds.xMax += padding;
766
- bounds.yMin -= padding;
767
- bounds.yMax += padding;
768
- const width = svgRef.current.clientWidth;
769
- const height = svgRef.current.clientHeight;
770
- const contentWidth = bounds.xMax - bounds.xMin;
771
- const contentHeight = bounds.yMax - bounds.yMin;
772
- const scaleX = width / contentWidth;
773
- const scaleY = height / contentHeight;
774
- let scale = Math.min(scaleX, scaleY);
775
- scale = Math.min(Math.max(scale, 0.1), 2);
776
- const centerX = (bounds.xMin + bounds.xMax) / 2;
777
- const centerY = (bounds.yMin + bounds.yMax) / 2;
778
- const translateX = width / 2 - centerX * scale;
779
- const translateY = height / 2 - centerY * scale;
780
- svg.transition().duration(750).call(zoom2.transform, d3.zoomIdentity.translate(translateX, translateY).scale(scale));
781
- }, [nodes, visibleNodeIds]);
782
- _react.useEffect.call(void 0, () => {
783
- if (containerKey !== void 0 && containerKey !== prevContainerKeyRef.current) {
784
- const timeoutId = setTimeout(() => {
785
- zoomToFitAll();
786
- }, 100);
787
- prevContainerKeyRef.current = containerKey;
788
- return () => clearTimeout(timeoutId);
789
- }
790
- }, [containerKey, zoomToFitAll]);
791
- return { svgRef, zoomIn, zoomOut, zoomToNode, zoomToFitAll };
792
- }
793
- _chunk7QVYU63Ejs.__name.call(void 0, useCustomD3Graph, "useCustomD3Graph");
794
-
795
-
796
-
797
-
798
-
799
-
800
-
801
-
802
-
803
-
804
-
805
- exports.TableGeneratorRegistry = TableGeneratorRegistry; exports.tableGeneratorRegistry = tableGeneratorRegistry; exports.usePageUrlGenerator = usePageUrlGenerator; exports.useUrlRewriter = useUrlRewriter; exports.useDataListRetriever = useDataListRetriever; exports.useDebounce = useDebounce; exports.registerTableGenerator = registerTableGenerator; exports.useTableGenerator = useTableGenerator; exports.useCustomD3Graph = useCustomD3Graph;
806
- //# sourceMappingURL=chunk-FY4SXJGU.js.map