@arbidocs/blocks 0.5.100 → 0.5.101

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 (137) hide show
  1. package/README.md +9 -1
  2. package/dist/{ConnectedNativeDocxComparison-3UJZR52S.cjs → ConnectedNativeDocxComparison-6BQ2WFF6.cjs} +7 -7
  3. package/dist/{ConnectedNativeDocxComparison-3UJZR52S.cjs.map → ConnectedNativeDocxComparison-6BQ2WFF6.cjs.map} +1 -1
  4. package/dist/{ConnectedNativeDocxComparison-VGJLNVM4.js → ConnectedNativeDocxComparison-DIRGCHMY.js} +6 -6
  5. package/dist/{ConnectedStreamedWordArtifact-MJAVZ3NR.js.map → ConnectedNativeDocxComparison-DIRGCHMY.js.map} +1 -1
  6. package/dist/{ConnectedNativeDocxEditor-A6PGFR35.cjs → ConnectedNativeDocxEditor-4HNYAZEG.cjs} +7 -7
  7. package/dist/{ConnectedNativeDocxEditor-A6PGFR35.cjs.map → ConnectedNativeDocxEditor-4HNYAZEG.cjs.map} +1 -1
  8. package/dist/{ConnectedNativeDocxEditor-O7QEWYGG.js → ConnectedNativeDocxEditor-DKSE3R6C.js} +5 -5
  9. package/dist/{ConnectedNativeDocxEditor-O7QEWYGG.js.map → ConnectedNativeDocxEditor-DKSE3R6C.js.map} +1 -1
  10. package/dist/{ConnectedStreamedWordArtifact-Q7TWGK4B.cjs → ConnectedStreamedWordArtifact-S5I5QCZ7.cjs} +7 -7
  11. package/dist/ConnectedStreamedWordArtifact-S5I5QCZ7.cjs.map +1 -0
  12. package/dist/{ConnectedStreamedWordArtifact-MJAVZ3NR.js → ConnectedStreamedWordArtifact-USNAF4ZM.js} +6 -6
  13. package/dist/{ConnectedNativeDocxComparison-VGJLNVM4.js.map → ConnectedStreamedWordArtifact-USNAF4ZM.js.map} +1 -1
  14. package/dist/{DocumentReviewCard-7VJ3MMYG.cjs → DocumentReviewCard-QHYHBDUA.cjs} +13 -13
  15. package/dist/{DocumentReviewCard-7VJ3MMYG.cjs.map → DocumentReviewCard-QHYHBDUA.cjs.map} +1 -1
  16. package/dist/{DocumentReviewCard-5NZM6FOB.js → DocumentReviewCard-TFAJYWS6.js} +8 -8
  17. package/dist/{DocumentReviewCard-5NZM6FOB.js.map → DocumentReviewCard-TFAJYWS6.js.map} +1 -1
  18. package/dist/{FilesViewerDialog-5VML4F5E.js → FilesViewerDialog-LE5GQQDX.js} +7 -7
  19. package/dist/{FilesViewerDialog-5VML4F5E.js.map → FilesViewerDialog-LE5GQQDX.js.map} +1 -1
  20. package/dist/{FilesViewerDialog-IQ5UDAZX.cjs → FilesViewerDialog-Y5YZJ5O2.cjs} +8 -8
  21. package/dist/{FilesViewerDialog-IQ5UDAZX.cjs.map → FilesViewerDialog-Y5YZJ5O2.cjs.map} +1 -1
  22. package/dist/{WorkspaceTableView-ZIQ7JWT5.cjs → WorkspaceTableView-3D6SYOWT.cjs} +4 -4
  23. package/dist/{WorkspaceTableView-ZIQ7JWT5.cjs.map → WorkspaceTableView-3D6SYOWT.cjs.map} +1 -1
  24. package/dist/{WorkspaceTableView-DYABS53K.js → WorkspaceTableView-WD754UBK.js} +3 -3
  25. package/dist/{WorkspaceTableView-DYABS53K.js.map → WorkspaceTableView-WD754UBK.js.map} +1 -1
  26. package/dist/agents/index.cjs +186 -186
  27. package/dist/agents/index.js +4 -4
  28. package/dist/{chunk-ERDQ4DAX.cjs → chunk-2GFB43GN.cjs} +4 -4
  29. package/dist/{chunk-ERDQ4DAX.cjs.map → chunk-2GFB43GN.cjs.map} +1 -1
  30. package/dist/{chunk-WGAGIF4F.cjs → chunk-2ROYKDEA.cjs} +4 -4
  31. package/dist/{chunk-WGAGIF4F.cjs.map → chunk-2ROYKDEA.cjs.map} +1 -1
  32. package/dist/{chunk-4VSRSF4Q.cjs → chunk-2VWE46ZF.cjs} +114 -57
  33. package/dist/chunk-2VWE46ZF.cjs.map +1 -0
  34. package/dist/{chunk-IK4MSXXR.cjs → chunk-4IRS55N2.cjs} +50 -31
  35. package/dist/chunk-4IRS55N2.cjs.map +1 -0
  36. package/dist/{chunk-Z4VWLWFX.js → chunk-4IXUIRXB.js} +3 -3
  37. package/dist/{chunk-Z4VWLWFX.js.map → chunk-4IXUIRXB.js.map} +1 -1
  38. package/dist/{chunk-KBXATCF4.cjs → chunk-ANT32I6E.cjs} +8 -8
  39. package/dist/{chunk-KBXATCF4.cjs.map → chunk-ANT32I6E.cjs.map} +1 -1
  40. package/dist/{chunk-SWW3KBH2.js → chunk-AZGELQSS.js} +4 -4
  41. package/dist/{chunk-SWW3KBH2.js.map → chunk-AZGELQSS.js.map} +1 -1
  42. package/dist/{chunk-RAF72BBC.cjs → chunk-DVGT3MU6.cjs} +4 -4
  43. package/dist/{chunk-RAF72BBC.cjs.map → chunk-DVGT3MU6.cjs.map} +1 -1
  44. package/dist/{chunk-TVJAVK2G.js → chunk-DW5DFV4O.js} +4 -4
  45. package/dist/{chunk-TVJAVK2G.js.map → chunk-DW5DFV4O.js.map} +1 -1
  46. package/dist/{chunk-4AQ47AB4.js → chunk-DWSSFIK2.js} +3 -3
  47. package/dist/{chunk-4AQ47AB4.js.map → chunk-DWSSFIK2.js.map} +1 -1
  48. package/dist/{chunk-R4JGE2XT.cjs → chunk-FXR6YYPC.cjs} +4 -4
  49. package/dist/{chunk-R4JGE2XT.cjs.map → chunk-FXR6YYPC.cjs.map} +1 -1
  50. package/dist/{chunk-22EZJLGW.js → chunk-G7DQFL52.js} +7 -7
  51. package/dist/{chunk-22EZJLGW.js.map → chunk-G7DQFL52.js.map} +1 -1
  52. package/dist/{chunk-MT3RPUQC.cjs → chunk-H7UDEZEO.cjs} +4 -4
  53. package/dist/{chunk-MT3RPUQC.cjs.map → chunk-H7UDEZEO.cjs.map} +1 -1
  54. package/dist/{chunk-UNQE3JWX.js → chunk-HPS5O6XK.js} +4 -4
  55. package/dist/{chunk-MM5Q7AJL.cjs.map → chunk-HPS5O6XK.js.map} +1 -1
  56. package/dist/{chunk-ETYBZA5E.cjs → chunk-IGVTLCHD.cjs} +4 -4
  57. package/dist/{chunk-ETYBZA5E.cjs.map → chunk-IGVTLCHD.cjs.map} +1 -1
  58. package/dist/{chunk-J24LYNTY.cjs → chunk-ILH2KOHA.cjs} +37 -37
  59. package/dist/{chunk-J24LYNTY.cjs.map → chunk-ILH2KOHA.cjs.map} +1 -1
  60. package/dist/{chunk-7F5Z4K5W.js → chunk-IU5CHOEU.js} +9 -10
  61. package/dist/chunk-IU5CHOEU.js.map +1 -0
  62. package/dist/{chunk-ZATTTPWL.cjs → chunk-KCP42W67.cjs} +4 -4
  63. package/dist/{chunk-ZATTTPWL.cjs.map → chunk-KCP42W67.cjs.map} +1 -1
  64. package/dist/{chunk-YG4S7OCD.js → chunk-LNWEJJUY.js} +3 -3
  65. package/dist/{chunk-YG4S7OCD.js.map → chunk-LNWEJJUY.js.map} +1 -1
  66. package/dist/{chunk-KYR3TXHS.js → chunk-OLCQPGB4.js} +3 -3
  67. package/dist/{chunk-KYR3TXHS.js.map → chunk-OLCQPGB4.js.map} +1 -1
  68. package/dist/{chunk-STCXXO7T.js → chunk-PGCKTXYH.js} +3 -3
  69. package/dist/{chunk-STCXXO7T.js.map → chunk-PGCKTXYH.js.map} +1 -1
  70. package/dist/{chunk-7GPQBAIL.cjs → chunk-Q3OLTA47.cjs} +4 -4
  71. package/dist/{chunk-7GPQBAIL.cjs.map → chunk-Q3OLTA47.cjs.map} +1 -1
  72. package/dist/{chunk-UBI4HXT6.js → chunk-Q45LV2DL.js} +5 -5
  73. package/dist/{chunk-UBI4HXT6.js.map → chunk-Q45LV2DL.js.map} +1 -1
  74. package/dist/{chunk-Z7XKBKQN.js → chunk-QAKL6LNR.js} +8 -8
  75. package/dist/{chunk-Z7XKBKQN.js.map → chunk-QAKL6LNR.js.map} +1 -1
  76. package/dist/{chunk-USIRUI2M.cjs → chunk-QSPKL754.cjs} +29 -29
  77. package/dist/{chunk-USIRUI2M.cjs.map → chunk-QSPKL754.cjs.map} +1 -1
  78. package/dist/{chunk-HJBVSG6H.cjs → chunk-QYDMOBGP.cjs} +4 -4
  79. package/dist/{chunk-HJBVSG6H.cjs.map → chunk-QYDMOBGP.cjs.map} +1 -1
  80. package/dist/{chunk-OYSTBNNA.js → chunk-R3AHNYSS.js} +3 -3
  81. package/dist/{chunk-OYSTBNNA.js.map → chunk-R3AHNYSS.js.map} +1 -1
  82. package/dist/{chunk-JLTPQDQB.js → chunk-RP3IDFHS.js} +3 -3
  83. package/dist/{chunk-JLTPQDQB.js.map → chunk-RP3IDFHS.js.map} +1 -1
  84. package/dist/{chunk-ZAKDIJBP.cjs → chunk-RV2YGRV6.cjs} +48 -48
  85. package/dist/{chunk-ZAKDIJBP.cjs.map → chunk-RV2YGRV6.cjs.map} +1 -1
  86. package/dist/{chunk-SWILV6LT.cjs → chunk-TGHBXJTN.cjs} +4 -4
  87. package/dist/{chunk-SWILV6LT.cjs.map → chunk-TGHBXJTN.cjs.map} +1 -1
  88. package/dist/{chunk-MM5Q7AJL.cjs → chunk-TQXMASFX.cjs} +8 -8
  89. package/dist/chunk-TQXMASFX.cjs.map +1 -0
  90. package/dist/{chunk-VW6MFQFW.js → chunk-UPXQDULH.js} +112 -55
  91. package/dist/chunk-UPXQDULH.js.map +1 -0
  92. package/dist/{chunk-L3V2ANBD.js → chunk-VEHHI5WS.js} +3 -3
  93. package/dist/{chunk-L3V2ANBD.js.map → chunk-VEHHI5WS.js.map} +1 -1
  94. package/dist/{chunk-6OEAZ2TJ.js → chunk-VJQCOZ7O.js} +50 -31
  95. package/dist/chunk-VJQCOZ7O.js.map +1 -0
  96. package/dist/{chunk-VD33HXFZ.cjs → chunk-WW2H5C6L.cjs} +28 -28
  97. package/dist/{chunk-VD33HXFZ.cjs.map → chunk-WW2H5C6L.cjs.map} +1 -1
  98. package/dist/{chunk-OOYT5A7W.js → chunk-X2QJWFFO.js} +3 -3
  99. package/dist/{chunk-OOYT5A7W.js.map → chunk-X2QJWFFO.js.map} +1 -1
  100. package/dist/{chunk-FADUFGZD.js → chunk-XCE4HB3F.js} +3 -3
  101. package/dist/{chunk-FADUFGZD.js.map → chunk-XCE4HB3F.js.map} +1 -1
  102. package/dist/{chunk-LKK52DEY.cjs → chunk-XNXNLXIC.cjs} +9 -10
  103. package/dist/chunk-XNXNLXIC.cjs.map +1 -0
  104. package/dist/collaboration/index.cjs +70 -70
  105. package/dist/collaboration/index.js +2 -2
  106. package/dist/connect/docx.cjs +10 -10
  107. package/dist/connect/docx.js +6 -6
  108. package/dist/connect/index.cjs +680 -644
  109. package/dist/connect/index.cjs.map +1 -1
  110. package/dist/connect/index.js +106 -70
  111. package/dist/connect/index.js.map +1 -1
  112. package/dist/connect/viewer.cjs +6 -6
  113. package/dist/connect/viewer.js +5 -5
  114. package/dist/connection/files/grid/documentCellRenderers.d.ts +19 -4
  115. package/dist/connection/files/grid/useDocumentGridSync.d.ts +4 -15
  116. package/dist/connection/files/grid/useDocumentTable.d.ts +0 -1
  117. package/dist/databases/index.cjs +49 -49
  118. package/dist/databases/index.js +2 -2
  119. package/dist/embed/index.cjs +12 -12
  120. package/dist/embed/index.js +6 -6
  121. package/dist/files/index.cjs +224 -224
  122. package/dist/files/index.js +2 -2
  123. package/dist/index.cjs +299 -299
  124. package/dist/index.js +6 -6
  125. package/dist/tags/TagTable.d.ts +4 -1
  126. package/dist/workflow-canvas/index.cjs +22 -22
  127. package/dist/workflow-canvas/index.js +11 -11
  128. package/node_modules/@arbidocs/coedit/package.json +1 -1
  129. package/package.json +10 -6
  130. package/dist/ConnectedStreamedWordArtifact-Q7TWGK4B.cjs.map +0 -1
  131. package/dist/chunk-4VSRSF4Q.cjs.map +0 -1
  132. package/dist/chunk-6OEAZ2TJ.js.map +0 -1
  133. package/dist/chunk-7F5Z4K5W.js.map +0 -1
  134. package/dist/chunk-IK4MSXXR.cjs.map +0 -1
  135. package/dist/chunk-LKK52DEY.cjs.map +0 -1
  136. package/dist/chunk-UNQE3JWX.js.map +0 -1
  137. package/dist/chunk-VW6MFQFW.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { StreamedWordArtifact } from './chunk-I3FNY475.js';
3
- import { useConnectedNativeDocxAdapter } from './chunk-Z4VWLWFX.js';
3
+ import { useConnectedNativeDocxAdapter } from './chunk-4IXUIRXB.js';
4
4
  import { jsx } from 'react/jsx-runtime';
5
5
 
6
6
  function ConnectedStreamedWordArtifact({
@@ -12,5 +12,5 @@ function ConnectedStreamedWordArtifact({
12
12
  }
13
13
 
14
14
  export { ConnectedStreamedWordArtifact };
15
- //# sourceMappingURL=chunk-FADUFGZD.js.map
16
- //# sourceMappingURL=chunk-FADUFGZD.js.map
15
+ //# sourceMappingURL=chunk-XCE4HB3F.js.map
16
+ //# sourceMappingURL=chunk-XCE4HB3F.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/connection/docx/ConnectedStreamedWordArtifact.tsx"],"names":[],"mappings":";;;;AAMO,SAAS,6BAAA,CAA8B;AAAA,EAC5C,WAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA0E;AACxE,EAAA,MAAM,OAAA,GAAU,8BAA8B,WAAW,CAAA;AACzD,EAAA,uBAAO,GAAA,CAAC,oBAAA,EAAA,EAAsB,GAAG,KAAA,EAAO,OAAA,EAAkB,CAAA;AAC5D","file":"chunk-FADUFGZD.js","sourcesContent":["import { useConnectedNativeDocxAdapter } from './ConnectedNativeDocxEditor'\nimport {\n StreamedWordArtifact,\n type StreamedWordArtifactProps,\n} from '../../docx/StreamedWordArtifact'\n\nexport function ConnectedStreamedWordArtifact({\n fontBaseUrl,\n ...props\n}: Omit<StreamedWordArtifactProps, 'adapter'> & { fontBaseUrl?: string }) {\n const adapter = useConnectedNativeDocxAdapter(fontBaseUrl)\n return <StreamedWordArtifact {...props} adapter={adapter} />\n}\n"]}
1
+ {"version":3,"sources":["../src/connection/docx/ConnectedStreamedWordArtifact.tsx"],"names":[],"mappings":";;;;AAMO,SAAS,6BAAA,CAA8B;AAAA,EAC5C,WAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA0E;AACxE,EAAA,MAAM,OAAA,GAAU,8BAA8B,WAAW,CAAA;AACzD,EAAA,uBAAO,GAAA,CAAC,oBAAA,EAAA,EAAsB,GAAG,KAAA,EAAO,OAAA,EAAkB,CAAA;AAC5D","file":"chunk-XCE4HB3F.js","sourcesContent":["import { useConnectedNativeDocxAdapter } from './ConnectedNativeDocxEditor'\nimport {\n StreamedWordArtifact,\n type StreamedWordArtifactProps,\n} from '../../docx/StreamedWordArtifact'\n\nexport function ConnectedStreamedWordArtifact({\n fontBaseUrl,\n ...props\n}: Omit<StreamedWordArtifactProps, 'adapter'> & { fontBaseUrl?: string }) {\n const adapter = useConnectedNativeDocxAdapter(fontBaseUrl)\n return <StreamedWordArtifact {...props} adapter={adapter} />\n}\n"]}
@@ -165,12 +165,7 @@ function GridView({
165
165
  { getRowTestId, getCellTestId }
166
166
  );
167
167
  }, [hasTestIdHooks, getRowTestId, getCellTestId, isLoading]);
168
- const getRowId = react.useCallback(
169
- (params) => {
170
- return getItemId(params.data);
171
- },
172
- [getItemId]
173
- );
168
+ const getRowId = react.useCallback((params) => getItemIdRef.current(params.data), []);
174
169
  const selectionRef = react.useRef(selection);
175
170
  selectionRef.current = selection;
176
171
  const onSelectionChangeRef = react.useRef(selection?.onSelectionChange);
@@ -293,6 +288,10 @@ function GridView({
293
288
  (c) => c.colId !== "ag-Grid-SelectionColumn" && desired.has(c.colId) && desired.get(c.colId) !== !!c.hide
294
289
  ).map((c) => ({ colId: c.colId, hide: desired.get(c.colId) }));
295
290
  if (fixes.length) api.applyColumnState({ state: fixes });
291
+ } else if (desiredHiddenRef.current && event.visible !== void 0 && event.columns) {
292
+ for (const column of event.columns) {
293
+ desiredHiddenRef.current.set(column.getColId(), !event.visible);
294
+ }
296
295
  } else {
297
296
  snapshotDesiredHidden();
298
297
  }
@@ -520,6 +519,7 @@ function GridView({
520
519
  pinnedTopRowData,
521
520
  getRowId,
522
521
  initialState,
522
+ ...combinedOptions,
523
523
  onGridReady: handleGridReady,
524
524
  onFirstDataRendered: handleFirstDataRendered,
525
525
  onModelUpdated: handleModelUpdated,
@@ -527,8 +527,7 @@ function GridView({
527
527
  onCellValueChanged,
528
528
  onRowClicked: handleRowClicked,
529
529
  onStateUpdated: handleStateUpdated,
530
- onColumnVisible: handleColumnVisible,
531
- ...combinedOptions
530
+ onColumnVisible: handleColumnVisible
532
531
  }
533
532
  )
534
533
  }
@@ -536,5 +535,5 @@ function GridView({
536
535
  }
537
536
 
538
537
  exports.GridView = GridView;
539
- //# sourceMappingURL=chunk-LKK52DEY.cjs.map
540
- //# sourceMappingURL=chunk-LKK52DEY.cjs.map
538
+ //# sourceMappingURL=chunk-XNXNLXIC.cjs.map
539
+ //# sourceMappingURL=chunk-XNXNLXIC.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/files/grid-test-ids.ts","../src/files/GridView.tsx"],"names":["themeQuartz","useRef","useMediaQuery","BREAKPOINT_QUERIES","useMemo","useCallback","useEffect","jsxs","jsx","AgGridReact","AllCommunityModule"],"mappings":";;;;;;;;;AAcO,SAAS,iBACd,IAAA,EACA,SAAA,EACA,EAAE,YAAA,EAAc,eAAc,EACxB;AACN,EAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,aAAA,EAAe;AACrC,EAAA,IAAA,CAAK,gBAAA,CAA8B,2CAA2C,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AAC/F,IAAA,MAAM,OAAO,SAAA,CAAU,GAAA,CAAI,IAAI,YAAA,CAAa,QAAQ,KAAK,EAAE,CAAA;AAC3D,IAAA,IAAI,SAAS,MAAA,EAAW;AACxB,IAAA,IAAI,cAAc,GAAA,CAAI,YAAA,CAAa,aAAA,EAAe,YAAA,CAAa,IAAI,CAAC,CAAA;AACpE,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,GAAA,CAAI,gBAAA,CAA8B,kBAAkB,CAAA,CAAE,OAAA,CAAQ,CAAC,IAAA,KAAS;AACtE,QAAA,IAAA,CAAK,YAAA,CAAa,eAAe,aAAA,CAAc,IAAA,CAAK,aAAa,QAAQ,CAAA,IAAK,EAAA,EAAI,IAAI,CAAC,CAAA;AAAA,MACzF,CAAC,CAAA;AAAA,IACH;AAAA,EACF,CAAC,CAAA;AACH;AAMO,SAAS,gBAAA,CACd,IAAA,EACA,YAAA,EACA,OAAA,EACY;AACZ,EAAA,IAAI,CAAC,OAAA,CAAQ,YAAA,IAAgB,CAAC,OAAA,CAAQ,aAAA,SAAsB,MAAM;AAAA,EAAC,CAAA;AACnE,EAAA,MAAM,MAAM,MAAM,gBAAA,CAAiB,IAAA,EAAM,YAAA,IAAgB,OAAO,CAAA;AAChE,EAAA,GAAA,EAAI;AACJ,EAAA,IAAI,OAAO,gBAAA,KAAqB,WAAA,EAAa,OAAO,MAAM;AAAA,EAAC,CAAA;AAC3D,EAAA,MAAM,QAAA,GAAW,IAAI,gBAAA,CAAiB,GAAG,CAAA;AACzC,EAAA,QAAA,CAAS,QAAQ,IAAA,EAAM,EAAE,WAAW,IAAA,EAAM,OAAA,EAAS,MAAM,CAAA;AACzD,EAAA,OAAO,MAAM,SAAS,UAAA,EAAW;AACnC;ACZA,IAAM,MAAA,GAAS,CAAC,IAAA,EAAc,KAAA,KAC5B,KAAA,KAAU,MAAA,GAAY,CAAA,UAAA,EAAa,IAAI,CAAA,EAAA,CAAA,GAAO,CAAA,UAAA,EAAa,IAAI,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,CAAA;AAE7E,IAAM,SAAA,GAAYA,4BAAY,UAAA,CAAW;AAAA;AAAA;AAAA,EAGvC,eAAA,EAAiB,OAAO,YAAY,CAAA;AAAA,EACpC,eAAA,EAAiB,OAAO,YAAY,CAAA;AAAA,EACpC,WAAA,EAAa,OAAO,QAAQ,CAAA;AAAA,EAC5B,qBAAA,EAAuB,MAAA,CAAO,OAAA,EAAS,GAAG,CAAA;AAAA,EAC1C,eAAA,EAAiB,OAAO,YAAY,CAAA;AAAA,EACpC,qBAAA,EAAuB,OAAO,YAAY,CAAA;AAAA,EAC1C,aAAA,EAAe,MAAA,CAAO,OAAA,EAAS,GAAG,CAAA;AAAA;AAAA;AAAA,EAGlC,0BAAA,EAA4B,MAAA,CAAO,QAAA,EAAU,GAAG,CAAA;AAAA,EAChD,6BAAA,EAA+B,OAAO,QAAQ,CAAA;AAAA,EAC9C,WAAA,EAAa,OAAO,SAAS,CAAA;AAAA,EAC7B,gBAAA,EAAkB,EAAE,KAAA,EAAO,MAAA,CAAO,SAAS,CAAA,EAAE;AAAA,EAC7C,kBAAA,EAAoB,KAAA;AAAA;AAAA,EAEpB,6BAAA,EAA+B,aAAA;AAAA,EAC/B,8BAAA,EAAgC,KAAA;AAAA,EAChC,6BAAA,EAA+B,CAAA;AAAA;AAAA;AAAA;AAAA,EAK/B,UAAA,EAAY,SAAA;AAAA,EACZ,QAAA,EAAU,EAAA;AAAA,EACV,cAAA,EAAgB,EAAA;AAAA,EAChB,gBAAA,EAAkB,GAAA;AAAA;AAAA,EAGlB,YAAA,EAAc,EAAA;AAAA,EACd,SAAA,EAAW,EAAA;AAAA,EACX,qBAAA,EAAuB,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOvB,WAAW,EAAE,KAAA,EAAO,SAAS,KAAA,EAAO,CAAA,EAAG,OAAO,oBAAA,EAAqB;AAAA,EACnE,YAAA,EAAc,KAAA;AAAA;AAAA,EACd,aAAA,EAAe,EAAE,KAAA,EAAO,OAAA,EAAS,OAAO,CAAA,EAAG,KAAA,EAAO,MAAA,CAAO,QAAQ,CAAA,EAAE;AAAA;AAAA,EAGnE,YAAA,EAAc,uBAAA;AAAA,EACd,mBAAA,EAAqB,uBAAA;AAAA,EACrB,oBAAA,EAAsB;AAAA;AACxB,CAAC,CAAA;AAiGD,IAAM,gBAAA,GAAmB,EAAA;AAElB,SAAS,QAAA,CAAY;AAAA,EAC1B,KAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,cAAA,GAAiB,YAAA;AAAA,EACjB,WAAA;AAAA,EACA,WAAA;AAAA,EACA,kBAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA,GAAe,KAAA;AAAA,EACf,SAAA;AAAA,EACA,iBAAA;AAAA,EACA,qBAAA;AAAA,EACA,SAAA,GAAY,QAAA;AAAA,EACZ,MAAA,GAAS,GAAA;AAAA,EACT,SAAA,EAAW,aAAA;AAAA,EACX,MAAA,GAAS,WAAA;AAAA,EACT,mBAAA;AAAA,EACA,gBAAA;AAAA,EACA,UAAA,GAAa,KAAA;AAAA,EACb,0BAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,EAAqB;AAEnB,EAAA,MAAM,UAAA,GAAaC,aAA0B,IAAI,CAAA;AAIjD,EAAA,MAAM,eAAA,GAAkBC,+BAAA,CAAcC,oCAAA,CAAmB,aAAa,CAAA;AACtE,EAAA,MAAM,SAAA,GAAY,kBACd,IAAA,CAAK,GAAA,CAAI,iBAAiB,WAAA,EAAa,SAAA,IAAa,EAAA,EAAI,gBAAgB,CAAA,GACxE,aAAA;AAOJ,EAAA,MAAM,mBAAA,GAAsBF,aAAO,SAAS,CAAA;AAM5C,EAAA,MAAM,mBAAA,GAAsBA,aAAO,SAAS,CAAA;AAG5C,EAAA,MAAM,YAAA,GAAeG,cAAQ,MAAM;AACjC,IAAA,IAAI,CAAC,cAAc,OAAO,MAAA;AAC1B,IAAA,OAAO,mBAAA,CAAoB,OAAA;AAAA,EAC7B,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAGjB,EAAA,MAAM,aAAA,GAAgBC,kBAAY,MAAM;AACtC,IAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,iBAAA,IAAqB,CAAC,WAAW,OAAA,EAAS;AAIhE,IAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,OAAA,CAAQ,QAAA,EAAS;AAE1C,IAAA,iBAAA,CAAkB,KAAK,CAAA;AAAA,EACzB,CAAA,EAAG,CAAC,YAAA,EAAc,iBAAiB,CAAC,CAAA;AAGpC,EAAA,MAAM,4BAAA,GAA+BA,kBAAY,MAAM;AACrD,IAAA,IAAI,CAAC,UAAA,CAAW,OAAA,IAAW,CAAC,WAAW,IAAA,EAAM;AAK7C,IAAA,MAAM,YAAA,GAAe,UAAA,CAAW,OAAA,CAAQ,cAAA,EAAe;AACvD,IAAA,MAAM,kBAAkB,YAAA,CAAa,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAA,CAAI,UAAU,yBAAyB,CAAA;AAC1F,IAAA,MAAM,uBAAuB,YAAA,CAAa,SAAA;AAAA,MACxC,CAAC,GAAA,KAAQ,GAAA,CAAI,KAAA,KAAU;AAAA,KACzB;AAGA,IAAA,IAAI,CAAC,eAAA,IAAmB,eAAA,CAAgB,IAAA,IAAQ,yBAAyB,CAAA,EAAG;AAE1E,MAAA,UAAA,CAAW,OAAA,CAAQ,iBAAA,CAAkB,CAAC,yBAAyB,GAAG,IAAI,CAAA;AAGtE,MAAA,UAAA,CAAW,QAAQ,gBAAA,CAAiB;AAAA,QAClC,KAAA,EAAO;AAAA,UACL;AAAA,YACE,KAAA,EAAO,yBAAA;AAAA,YACP,IAAA,EAAM,KAAA;AAAA,YACN,KAAA,EAAO,iBAAiB,KAAA,IAAS,EAAA;AAAA,YACjC,MAAA,EAAQ;AAAA;AAAA;AACV,SACF;AAAA,QACA,YAAA,EAAc,EAAE,IAAA,EAAM,MAAA,EAAU;AAAA,QAChC,UAAA,EAAY;AAAA,OACb,CAAA;AAGD,MAAA,IAAI,yBAAyB,CAAA,EAAG;AAC9B,QAAA,UAAA,CAAW,OAAA,CAAQ,WAAA,CAAY,CAAC,yBAAyB,GAAG,CAAC,CAAA;AAAA,MAC/D;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,SAAA,EAAW,IAAI,CAAC,CAAA;AAGpB,EAAA,MAAM,YAAA,GAAeJ,aAAuB,IAAI,CAAA;AAChD,EAAA,MAAM,QAAA,GAAWA,aAAO,KAAK,CAAA;AAC7B,EAAA,QAAA,CAAS,OAAA,GAAU,KAAA;AACnB,EAAA,MAAM,YAAA,GAAeA,aAAO,SAAS,CAAA;AACrC,EAAA,YAAA,CAAa,OAAA,GAAU,SAAA;AACvB,EAAA,MAAM,cAAA,GAAiB,OAAA,CAAQ,YAAA,IAAgB,aAAa,CAAA;AAC5D,EAAAK,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,OAAO,YAAA,CAAa,OAAA;AAC1B,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,cAAA,EAAgB;AAC9B,IAAA,OAAO,gBAAA;AAAA,MACL,IAAA;AAAA,MACA,MAAM,IAAI,GAAA,CAAI,QAAA,CAAS,QAAQ,GAAA,CAAI,CAAC,IAAA,KAAS,CAAC,aAAa,OAAA,CAAQ,IAAI,CAAA,EAAG,IAAI,CAAC,CAAC,CAAA;AAAA,MAChF,EAAE,cAAc,aAAA;AAAc,KAChC;AAAA,EACF,GAAG,CAAC,cAAA,EAAgB,YAAA,EAAc,aAAA,EAAe,SAAS,CAAC,CAAA;AAK3D,EAAA,MAAM,QAAA,GAAWD,iBAAA,CAAY,CAAC,MAAA,KAAwB,YAAA,CAAa,QAAQ,MAAA,CAAO,IAAI,CAAA,EAAG,EAAE,CAAA;AAI3F,EAAA,MAAM,YAAA,GAAeJ,aAAO,SAAS,CAAA;AACrC,EAAA,YAAA,CAAa,OAAA,GAAU,SAAA;AAEvB,EAAA,MAAM,oBAAA,GAAuBA,YAAA,CAAO,SAAA,EAAW,iBAAiB,CAAA;AAChE,EAAA,oBAAA,CAAqB,UAAU,SAAA,EAAW,iBAAA;AAE1C,EAAA,MAAM,mBAAA,GAAsBA,aAAO,KAAK,CAAA;AAExC,EAAA,MAAM,sBAAA,GAAyBI,kBAAY,MAAM;AAC/C,IAAA,IAAI,oBAAoB,OAAA,EAAS;AACjC,IAAA,IAAI,CAAC,oBAAA,CAAqB,OAAA,IAAW,CAAC,WAAW,OAAA,EAAS;AAE1D,IAAA,MAAM,aAAA,GAAgB,UAAA,CAAW,OAAA,CAAQ,gBAAA,EAAiB;AAC1D,IAAA,MAAM,YAAA,GAAe,aAAA,CAClB,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,IAAI,CAAA,CACvB,MAAA,CAAO,CAAC,IAAA,KAAoB,IAAA,KAAS,MAAS,CAAA;AAEjD,IAAA,oBAAA,CAAqB,QAAQ,YAAY,CAAA;AAAA,EAC3C,CAAA,EAAG,EAAE,CAAA;AAIL,EAAA,MAAM,kBAAA,GAAqB,SAAA,EAAW,UAAA,GAAa,SAAA,CAAU,QAAA,GAAW,MAAA;AACxE,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,MAAM,UAAA,CAAW,OAAA;AACvB,IAAA,IAAI,CAAC,GAAA,IAAO,GAAA,CAAI,WAAA,EAAY,IAAK,CAAC,kBAAA,EAAoB;AACtD,IAAA,MAAM,SAAS,IAAI,GAAA,CAAI,kBAAA,CAAmB,GAAA,CAAI,SAAS,CAAC,CAAA;AACxD,IAAA,MAAM,OAAsB,EAAC;AAC7B,IAAA,MAAM,SAAwB,EAAC;AAC/B,IAAA,GAAA,CAAI,WAAA,CAAY,CAAC,IAAA,KAAS;AACxB,MAAA,IAAI,CAAC,KAAK,IAAA,EAAM;AAChB,MAAA,MAAM,OAAO,MAAA,CAAO,GAAA,CAAI,SAAA,CAAU,IAAA,CAAK,IAAI,CAAC,CAAA;AAC5C,MAAA,IAAI,QAAQ,CAAC,IAAA,CAAK,YAAW,EAAG,IAAA,CAAK,KAAK,IAAI,CAAA;AAAA,WAAA,IACrC,CAAC,IAAA,IAAQ,IAAA,CAAK,YAAW,EAAG,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,IACvD,CAAC,CAAA;AACD,IAAA,mBAAA,CAAoB,OAAA,GAAU,IAAA;AAC9B,IAAA,IAAI;AACF,MAAA,IAAI,IAAA,CAAK,MAAA,EAAQ,GAAA,CAAI,gBAAA,CAAiB,EAAE,KAAA,EAAO,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,CAAA;AACpF,MAAA,IAAI,MAAA,CAAO,MAAA,EAAQ,GAAA,CAAI,gBAAA,CAAiB,EAAE,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAU,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,CAAA;AAAA,IAC3F,CAAA,SAAE;AACA,MAAA,mBAAA,CAAoB,OAAA,GAAU,KAAA;AAAA,IAChC;AAAA,EACF,CAAA,EAAG,CAAC,kBAAA,EAAoB,SAAS,CAAC,CAAA;AAElC,EAAA,MAAM,gBAAA,GAAmBD,iBAAA;AAAA,IACvB,CAAC,KAAA,KAA8B;AAC7B,MAAA,IAAI,CAAC,UAAA,IAAc,CAAC,KAAA,CAAM,IAAA,EAAM;AAGhC,MAAA,MAAM,MAAA,GAAS,MAAM,KAAA,EAAO,MAAA;AAC5B,MAAA,IAAI,MAAA,EAAQ,OAAA,CAAQ,qDAAqD,CAAA,EAAG;AAC5E,MAAA,UAAA,CAAW,MAAM,IAAI,CAAA;AAAA,IACvB,CAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAWA,EAAA,MAAM,gBAAA,GAAmBJ,aAAoC,IAAI,CAAA;AAEjE,EAAA,MAAM,qBAAA,GAAwBI,kBAAY,MAAM;AAC9C,IAAA,MAAM,MAAM,UAAA,CAAW,OAAA;AACvB,IAAA,IAAI,CAAC,GAAA,EAAK;AACV,IAAA,gBAAA,CAAiB,UAAU,IAAI,GAAA,CAAI,GAAA,CAAI,cAAA,GAAiB,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,EAAE,KAAA,EAAO,CAAC,CAAC,CAAA,CAAE,IAAI,CAAC,CAAC,CAAA;AAAA,EACzF,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,eAAA,GAAkBA,iBAAA;AAAA,IACtB,CAAC,KAAA,KAA6B;AAC5B,MAAA,UAAA,CAAW,UAAU,KAAA,CAAM,GAAA;AAI3B,MAAA,IAAI,CAAC,YAAA,IAAgB,qBAAA,EAAuB,MAAA,EAAQ;AAClD,QAAA,MAAM,YAAA,GAAe,KAAA,CAAM,GAAA,CAAI,cAAA,EAAe;AAC9C,QAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,CAAC,GAAA,KAAQ,CAAC,GAAA,CAAI,KAAA,EAAO,GAAG,CAAC,CAAC,CAAA;AACpE,QAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,qBAAqB,CAAA;AAGhD,QAAA,MAAM,YAAA,GAAe,QAAA,CAAS,GAAA,CAAI,yBAAyB,CAAA;AAC3D,QAAA,MAAM,YAAA,GAAe;AAAA;AAAA,UAEnB,YAAA,GACI,EAAE,GAAG,YAAA,EAAc,IAAA,EAAM,KAAA,EAAM,GAC/B,EAAE,KAAA,EAAO,yBAAA,EAA2B,IAAA,EAAM,KAAA,EAAO,OAAO,EAAA,EAAG;AAAA;AAAA,UAE/D,GAAG,qBAAA,CACA,MAAA,CAAO,CAAC,KAAA,KAAU,UAAU,yBAAyB,CAAA,CACrD,GAAA,CAAI,CAAC,KAAA,KAAU;AACd,YAAA,MAAM,GAAA,GAAM,QAAA,CAAS,GAAA,CAAI,KAAK,CAAA;AAC9B,YAAA,OAAO,MAAM,EAAE,GAAG,GAAA,EAAK,IAAA,EAAM,OAAM,GAAI,MAAA;AAAA,UACzC,CAAC,CAAA;AAAA;AAAA,UAEH,GAAG,aACA,MAAA,CAAO,CAAC,QAAQ,GAAA,CAAI,KAAA,KAAU,yBAAA,IAA6B,CAAC,UAAA,CAAW,GAAA,CAAI,IAAI,KAAK,CAAC,CAAA,CACrF,GAAA,CAAI,CAAC,GAAA,MAAS,EAAE,GAAG,GAAA,EAAK,IAAA,EAAM,IAAA,EAAK,CAAE;AAAA,SAC1C,CAAE,MAAA,CAAO,CAAC,GAAA,KAAwC,QAAQ,MAAS,CAAA;AAEnE,QAAA,KAAA,CAAM,IAAI,gBAAA,CAAiB,EAAE,OAAO,YAAA,EAAc,UAAA,EAAY,MAAM,CAAA;AAAA,MACtE;AAMA,MAAA,IAAI,YAAA,IAAgB,uBAAuB,MAAA,EAAQ;AACjD,QAAA,MAAM,YAAA,GAAe,KAAA,CAAM,GAAA,CAAI,cAAA,EAAe;AAC9C,QAAA,MAAM,cAAc,IAAI,GAAA;AAAA,UACtB,YAAA,CAAa,aAAa,aAAA,IAAiB,YAAA,CAAa,IAAI,CAAC,CAAA,KAAM,EAAE,KAAK;AAAA,SAC5E;AACA,QAAA,MAAM,UAAU,YAAA,CAAa,MAAA;AAAA,UAC3B,CAAC,QAAQ,CAAC,WAAA,CAAY,IAAI,GAAA,CAAI,KAAK,CAAA,IAAK,GAAA,CAAI,KAAA,KAAU;AAAA,SACxD;AACA,QAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AAEtB,UAAA,MAAM,cAAA,GAAiB,IAAI,GAAA,CAAI,qBAAqB,CAAA;AACpD,UAAA,KAAA,CAAM,IAAI,gBAAA,CAAiB;AAAA,YACzB,KAAA,EAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,cAC3B,GAAG,GAAA;AAAA,cACH,IAAA,EAAM,CAAC,cAAA,CAAe,GAAA,CAAI,IAAI,KAAK;AAAA,aACrC,CAAE;AAAA,WACH,CAAA;AAAA,QACH;AAAA,MACF;AAGA,MAAA,4BAAA,EAA6B;AAK7B,MAAA,qBAAA,EAAsB;AAGtB,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,WAAA,CAAY,EAAE,GAAA,EAAK,KAAA,CAAM,GAAA,EAAK,CAAA;AAAA,MAChC;AAGA,MAAA,MAAM,MAAM,YAAA,CAAa,OAAA;AACzB,MAAA,IAAI,GAAA,IAAO,GAAA,CAAI,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAClC,QAAA,MAAM,cAAc,IAAI,GAAA,CAAI,IAAI,QAAA,CAAS,GAAA,CAAI,SAAS,CAAC,CAAA;AACvD,QAAA,KAAA,CAAM,GAAA,CAAI,WAAA,CAAY,CAAC,IAAA,KAAS;AAC9B,UAAA,IAAI,IAAA,CAAK,QAAQ,WAAA,CAAY,GAAA,CAAI,UAAU,IAAA,CAAK,IAAI,CAAC,CAAA,EAAG;AACtD,YAAA,IAAA,CAAK,YAAY,IAAI,CAAA;AAAA,UACvB;AAAA,QACF,CAAC,CAAA;AAAA,MACH;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,WAAA;AAAA,MACA,SAAA;AAAA,MACA,4BAAA;AAAA,MACA,qBAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA;AACF,GACF;AAGA,EAAA,MAAM,mBAAA,GAAsBA,iBAAA;AAAA,IAC1B,CAAC,KAAA,KAAiC;AAChC,MAAA,MAAM,MAAM,UAAA,CAAW,OAAA;AACvB,MAAA,IAAI,CAAC,GAAA,EAAK;AAGV,MAAA,IAAI,KAAA,CAAM,WAAW,oBAAA,EAAsB;AACzC,QAAA,MAAM,UAAU,gBAAA,CAAiB,OAAA;AACjC,QAAA,IAAI,CAAC,OAAA,EAAS;AAGd,QAAA,MAAM,KAAA,GAAQ,GAAA,CACX,cAAA,EAAe,CACf,MAAA;AAAA,UACC,CAAC,CAAA,KACC,CAAA,CAAE,KAAA,KAAU,yBAAA,IACZ,QAAQ,GAAA,CAAI,CAAA,CAAE,KAAK,CAAA,IACnB,QAAQ,GAAA,CAAI,CAAA,CAAE,KAAK,CAAA,KAAM,CAAC,CAAC,CAAA,CAAE;AAAA,SACjC,CACC,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,KAAA,EAAO,CAAA,CAAE,KAAA,EAAO,IAAA,EAAM,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAE,KAAK,GAAE,CAAE,CAAA;AAC9D,QAAA,IAAI,MAAM,MAAA,EAAQ,GAAA,CAAI,iBAAiB,EAAE,KAAA,EAAO,OAAO,CAAA;AAAA,MACzD,WAAW,gBAAA,CAAiB,OAAA,IAAW,MAAM,OAAA,KAAY,MAAA,IAAa,MAAM,OAAA,EAAS;AAInF,QAAA,KAAA,MAAW,MAAA,IAAU,MAAM,OAAA,EAAS;AAClC,UAAA,gBAAA,CAAiB,QAAQ,GAAA,CAAI,MAAA,CAAO,UAAS,EAAG,CAAC,MAAM,OAAO,CAAA;AAAA,QAChE;AAAA,MACF,CAAA,MAAO;AAEL,QAAA,qBAAA,EAAsB;AAAA,MACxB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,qBAAqB;AAAA,GACxB;AAGA,EAAA,MAAM,uBAAA,GAA0BA,kBAAY,MAAM;AAGhD,IAAA,4BAAA,EAA6B;AAG7B,IAAA,qBAAA,EAAsB;AAAA,EACxB,CAAA,EAAG,CAAC,4BAAA,EAA8B,qBAAqB,CAAC,CAAA;AAGxD,EAAA,MAAM,kBAAA,GAAqBA,kBAAY,MAAM;AAAA,EAE7C,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,YAAA,GAAeJ,YAAA,CAAY,EAAE,CAAA;AACnC,EAAAK,eAAA,CAAU,MAAM;AACd,IAAA,YAAA,CAAa,OAAA,GAAU,KAAA;AAAA,EACzB,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAGV,EAAA,MAAM,kBAAA,GAAqBD,kBAAY,MAAM;AAC3C,IAAA,aAAA,EAAc;AAAA,EAChB,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAMlB,EAAA,MAAM,cAAA,GAAiCD,cAAQ,MAAM;AACnD,IAAA,OAAO;AAAA;AAAA;AAAA,MAGL,WAAW,mBAAA,CAAoB,OAAA;AAAA,MAC/B,gBAAA,EAAkB,IAAA;AAAA;AAAA,MAClB,mBAAA,EAAqB,IAAA;AAAA;AAAA;AAAA;AAAA,MAIrB,SAAA,EAAW,EAAA;AAAA;AAAA,MACX,4BAAA,EAA8B,KAAA;AAAA;AAAA,MAC9B,yBAAA,EAA2B,KAAA;AAAA;AAAA,MAC3B,WAAA,EAAa,KAAA;AAAA;AAAA,MACb,2BAAA,EAA6B,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAK7B,QAAA;AAAA,MAEA,YAAA,EAAc,WAAW,IAAA,GACrB;AAAA,QACE,IAAA,EAAM,SAAA,CAAU,IAAA,KAAS,QAAA,GAAW,WAAA,GAAc,UAAA;AAAA,QAClD,SAAA,EAAW,UAAA;AAAA;AAAA;AAAA,QAEX,oBAAA,EAAsB,UAAU,IAAA,KAAS,QAAA;AAAA,QACzC,UAAA,EAAY,IAAA;AAAA,QACZ,cAAA,EAAgB,UAAU,IAAA,KAAS;AAAA,OACrC,GACA,MAAA;AAAA,MACJ,kBAAA,EAAoB,WAAW,IAAA,GAC3B;AAAA,QACE,QAAA,EAAU,UAAU,IAAA,KAAS,UAAA;AAAA,QAC7B,KAAA,EAAO,EAAA;AAAA,QACP,WAAA,EAAa,IAAA;AAAA;AAAA,QACb,eAAA,EAAiB;AAAA;AAAA,OACnB,GACA,MAAA;AAAA;AAAA,MAEJ,SAAA,EAAW,QAAA;AAAA;AAAA,MAEX,6BAAA,EAA+B,IAAA;AAAA;AAAA,MAE/B,iBAAA,EAAmB,IAAA;AAAA;AAAA,MACnB,yBAAA,EAA2B,IAAA;AAAA;AAAA,MAC3B,uBAAA,EAAyB,IAAA;AAAA;AAAA,MACzB,uBAAA,EAAyB,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASzB,gBAAA,EAAkB,GAAA;AAAA,MAClB,gBAAA,EAAkB,GAAA;AAAA,MAClB,kBAAA,EAAoB,IAAA;AAAA;AAAA,MAEpB,UAAA;AAAA,MACA,0BAAA;AAAA,MACA,aAAA,EAAe;AAAA,QACb,QAAA,EAAU,IAAA;AAAA,QACV,SAAA,EAAW,IAAA;AAAA,QACX,UAAA,EAAY,KAAA;AAAA;AAAA,QACZ,YAAA,EAAc,CAAC,KAAA,EAAO,MAAA,EAAQ,IAAI,CAAA;AAAA;AAAA,QAClC,QAAA,EAAU,KAAA;AAAA;AAAA,QACV,UAAA,EAAY,KAAA;AAAA;AAAA,QACZ,cAAA,EAAgB,KAAA;AAAA;AAAA,QAChB,gBAAA,EAAkB,KAAA;AAAA;AAAA,QAClB,YAAA,EAAc;AAAA,UACZ,gBAAA,EAAkB,CAAA;AAAA,UAClB,OAAA,EAAS,CAAC,OAAO;AAAA;AACnB;AACF,KACF;AAAA,EACF,GAAG,CAAC,SAAA,EAAW,MAAM,QAAA,EAAU,UAAA,EAAY,0BAA0B,CAAC,CAAA;AAGtE,EAAA,MAAM,eAAA,GAAkBA,aAAA;AAAA,IACtB,OAAO,EAAE,GAAG,cAAA,EAAgB,GAAG,WAAA,EAAY,CAAA;AAAA,IAC3C,CAAC,gBAAgB,WAAW;AAAA,GAC9B;AAsBA,EAAA,MAAM,cAAA,GAAiBA,cAAQ,MAAM;AACnC,IAAA,MAAM,KAAA,GAA6B,EAAE,MAAA,EAAO;AAC5C,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,MAAM,UAAU,EAAA,GAAK,IAAA;AACrB,MAAA,MAAM,MAAA,GAAS,CAAA;AACf,MAAA,MAAM,aAAA,GAAgB,EAAA;AAEtB,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAI,aAAA,EAAe,SAAA,GAAY,MAAA,GAAS,OAAO,CAAC,CAAA;AAClF,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,OAAO,SAAA,GAAY,MAAA,GAAS,QAAA,IAAY,OAAO,CAAC,CAAA;AAC/E,MAAA,MAAM,IAAA,GAAO,KAAA;AACb,MAAA,IAAA,CAAK,wBAAwB,CAAA,GAAI,CAAA,EAAG,KAAK,CAAA,CAAA;AACzC,MAAA,IAAA,CAAK,mBAAmB,CAAA,GAAI,CAAA,EAAG,QAAA,GAAW,CAAC,CAAA,EAAA,CAAA;AAC3C,MAAA,IAAA,CAAK,mBAAmB,CAAA,GAAI,CAAA,EAAG,QAAQ,OAAA,GAAU,QAAA,GAAW,IAAI,MAAM,CAAA,EAAA,CAAA;AAAA,IACxE;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,EAAG,CAAC,MAAA,EAAQ,SAAS,CAAC,CAAA;AAKtB,EAAAE,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,MAAM,UAAA,CAAW,OAAA;AACvB,IAAA,IAAI,CAAC,GAAA,IAAO,GAAA,CAAI,WAAA,EAAY,IAAK,CAAC,SAAA,EAAW;AAC7C,IAAA,GAAA,CAAI,aAAA,CAAc,aAAa,SAAS,CAAA;AACxC,IAAA,GAAA,CAAI,eAAA,EAAgB;AAAA,EACtB,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAA,MAAM,kBAAA,GAAqBF,cAAQ,MAAM;AACvC,IAAA,MAAM,YAAY,SAAA,IAAa,EAAA;AAK/B,IAAA,MAAM,UAAA,GAAa,YAAY,mBAAA,GAAsB,EAAA;AACrD,IAAA,OAAO,CAAC,WAAW,UAAU,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,EACzD,CAAA,EAAG,CAAC,SAAA,EAAW,SAAS,CAAC,CAAA;AAGzB,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,MAAM,gBAAA,GAAmB,EAAA;AACzB,IAAA,uBACEG,eAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,aAAA,EAAa,GAAG,MAAM,CAAA,QAAA,CAAA;AAAA,QACtB,SAAA,EAAW,GAAG,kBAAkB,CAAA,gDAAA,CAAA;AAAA,QAChC,KAAA,EAAO,cAAA;AAAA,QACP,WAAA,EAAU,MAAA;AAAA,QACV,YAAA,EAAY,cAAA;AAAA,QAGZ,QAAA,EAAA;AAAA,0BAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,0EAAA,EACb,QAAA,EAAA;AAAA,4BAAAC,cAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wCAAA,EAAyC,CAAA;AAAA,4BACxDA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EAA0C,CAAA;AAAA,4BACzDA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EAA0C,CAAA;AAAA,4BACzDA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EAA0C,CAAA;AAAA,4BACzDA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EAA0C,CAAA;AAAA,4BACzDA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iDAAA,EAAkD;AAAA,WAAA,EACnE,CAAA;AAAA,UAEC,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,kBAAkB,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,MAAA,qBAChDD,eAAA,CAAC,KAAA,EAAA,EAAiB,WAAU,0DAAA,EAC1B,QAAA,EAAA;AAAA,4BAAAC,cAAA,CAAC,KAAA,EAAA,EAAI,WAAU,8CAAA,EAA+C,CAAA;AAAA,4BAC9DA,cAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,uCAAA;AAAA,gBACV,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,EAAG,KAAO,MAAA,GAAS,EAAA,GAAM,EAAG,CAAA,CAAA,CAAA;AAAI;AAAA,aAClD;AAAA,4BACAA,cAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,uCAAA;AAAA,gBACV,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,EAAG,IAAM,MAAA,GAAS,EAAA,GAAM,EAAG,CAAA,CAAA,CAAA;AAAI;AAAA,aACjD;AAAA,4BACAA,cAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,uCAAA;AAAA,gBACV,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,EAAG,IAAM,MAAA,GAAS,CAAA,GAAK,EAAG,CAAA,CAAA,CAAA;AAAI;AAAA,aAChD;AAAA,4BACAA,cAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,+CAAA;AAAA,gBACV,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,EAAG,IAAM,MAAA,GAAS,CAAA,GAAK,CAAE,CAAA,CAAA,CAAA;AAAI;AAAA;AAC/C,WAAA,EAAA,EAjBQ,MAkBV,CACD;AAAA;AAAA;AAAA,KACH;AAAA,EAEJ;AAKA,EAAA,IAAA,CAAK,SAAA,IAAa,KAAA,CAAM,MAAA,KAAW,CAAA,KAAM,UAAA,EAAY;AACnD,IAAA,uBACEA,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,aAAA,EAAa,GAAG,MAAM,CAAA,MAAA,CAAA;AAAA,QAGtB,SAAA,EAAU,4EAAA;AAAA,QAEV,QAAA,kBAAAD,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAA,EACZ,QAAA,EAAA;AAAA,UAAA,UAAA,CAAW,wBACVC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EAAiC,qBAAW,IAAA,EAAK,CAAA;AAAA,UAEjE,WAAW,KAAA,oBAASA,cAAA,CAAC,QAAG,SAAA,EAAU,0BAAA,EAA4B,qBAAW,KAAA,EAAM,CAAA;AAAA,UAC/E,WAAW,OAAA,oBACVA,cAAA,CAAC,OAAE,SAAA,EAAU,qCAAA,EAAuC,qBAAW,OAAA,EAAQ,CAAA;AAAA,UAExE,UAAA,CAAW;AAAA,SAAA,EACd;AAAA;AAAA,KACF;AAAA,EAEJ;AAEA,EAAA,uBACEA,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,YAAA;AAAA,MACL,SAAA,EAAW,kBAAA;AAAA,MACX,KAAA,EAAO,cAAA;AAAA,MACP,aAAA,EAAa,MAAA;AAAA,MAEb,QAAA,kBAAAA,cAAA;AAAA,QAACC,uBAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,SAAA;AAAA,UACP,OAAA,EAAS,CAACC,kCAAkB,CAAA;AAAA,UAC5B,UAAA;AAAA,UACA,OAAA,EAAS,KAAA;AAAA,UACT,mBAAA;AAAA,UACA,gBAAA;AAAA,UACA,QAAA;AAAA,UACA,YAAA;AAAA,UACC,GAAG,eAAA;AAAA,UAIJ,WAAA,EAAa,eAAA;AAAA,UACb,mBAAA,EAAqB,uBAAA;AAAA,UACrB,cAAA,EAAgB,kBAAA;AAAA,UAChB,kBAAA,EAAoB,sBAAA;AAAA,UACpB,kBAAA;AAAA,UACA,YAAA,EAAc,gBAAA;AAAA,UACd,cAAA,EAAgB,kBAAA;AAAA,UAChB,eAAA,EAAiB;AAAA;AAAA;AACnB;AAAA,GACF;AAEJ","file":"chunk-XNXNLXIC.cjs","sourcesContent":["/**\n * Test-id hooks for AG Grid, which owns its row and cell DOM. AG Grid stamps every row with a\n * `row-id` attribute and every cell with `col-id`; these helpers turn them into `data-testid`s\n * a host chooses, so a custom UI keeps its own test-id scheme.\n */\n\nexport interface GridTestIdOptions<T> {\n /** Test id of the row for `item` (set on the centre-column row element). */\n getRowTestId?: (item: T) => string\n /** Test id of the cell in column `colId` of `item`. */\n getCellTestId?: (colId: string, item: T) => string\n}\n\n/** Stamp `data-testid`s onto the rows and cells under `root`. Idempotent. */\nexport function applyGridTestIds<T>(\n root: ParentNode,\n itemsById: Map<string, T>,\n { getRowTestId, getCellTestId }: GridTestIdOptions<T>\n): void {\n if (!getRowTestId && !getCellTestId) return\n root.querySelectorAll<HTMLElement>('.ag-center-cols-container .ag-row[row-id]').forEach((row) => {\n const item = itemsById.get(row.getAttribute('row-id') ?? '')\n if (item === undefined) return\n if (getRowTestId) row.setAttribute('data-testid', getRowTestId(item))\n if (getCellTestId) {\n row.querySelectorAll<HTMLElement>('.ag-cell[col-id]').forEach((cell) => {\n cell.setAttribute('data-testid', getCellTestId(cell.getAttribute('col-id') ?? '', item))\n })\n }\n })\n}\n\n/**\n * Keep the ids applied as AG Grid creates and recycles rows (it virtualises). Returns the\n * disconnect function.\n */\nexport function watchGridTestIds<T>(\n root: HTMLElement,\n getItemsById: () => Map<string, T>,\n options: GridTestIdOptions<T>\n): () => void {\n if (!options.getRowTestId && !options.getCellTestId) return () => {}\n const run = () => applyGridTestIds(root, getItemsById(), options)\n run()\n if (typeof MutationObserver === 'undefined') return () => {}\n const observer = new MutationObserver(run)\n observer.observe(root, { childList: true, subtree: true })\n return () => observer.disconnect()\n}\n","/**\n * GridView — a flexible AG Grid presentational core.\n *\n * Pure and app-agnostic: it owns no global state and pulls in no store. Column\n * state persistence (order / width / visibility / sort / filter) is exposed as a\n * controlled/uncontrolled prop pair — `gridState` (initial state, read once at\n * mount) and `onGridStateChange` (called whenever AG Grid's state changes). An\n * app wires those to wherever it keeps the state (Zustand, localStorage, a URL,\n * a server) via a thin adapter; the core stays decoupled.\n *\n * Themed here (colours/fonts/borders via the host CSS variables, so it inherits the host's\n * light/dark theme). The structural helper classes (cell-numeric, multiline clamp, scrollbars,\n * row kebabs) live in `@arbidocs/blocks/grid.css`, which the consuming app imports globally.\n */\n\nimport React, { useRef, useCallback, useMemo, useEffect } from 'react'\nimport { AgGridReact } from 'ag-grid-react'\nimport {\n ColDef,\n GridOptions,\n GridApi,\n IRowNode,\n GridState,\n themeQuartz,\n CellValueChangedEvent,\n ColumnVisibleEvent,\n GridReadyEvent,\n RowClickedEvent,\n} from 'ag-grid-community'\nimport { AllCommunityModule } from 'ag-grid-community'\nimport { BREAKPOINT_QUERIES, useMediaQuery } from '../lib/use-media-query'\nimport { watchGridTestIds } from './grid-test-ids'\n\n// Create the custom ARBI theme using themeQuartz\n// Colours reference the host CSS variables (hsl(var(--token))), so dark mode follows the app.\n// This enables dark mode support and consistent theming\nconst cssVar = (name: string, alpha?: number): string =>\n alpha === undefined ? `hsl(var(--${name}))` : `hsl(var(--${name}) / ${alpha})`\n\nconst arbiTheme = themeQuartz.withParams({\n // Match TagTable: a plain canvas, muted header, fine row borders and a rounded frame.\n // Every colour is a host CSS variable, so light/dark follow the app with no .dark overrides.\n backgroundColor: cssVar('background'),\n foregroundColor: cssVar('foreground'),\n borderColor: cssVar('border'),\n headerBackgroundColor: cssVar('muted', 0.4),\n headerTextColor: cssVar('foreground'),\n oddRowBackgroundColor: cssVar('background'),\n rowHoverColor: cssVar('muted', 0.6),\n // Checkbox-selected rows: a light accent tint. A row opened elsewhere (e.g. the viewer) may take\n // the full accent, so the two states stay distinguishable.\n selectedRowBackgroundColor: cssVar('accent', 0.6),\n rangeSelectionBackgroundColor: cssVar('accent'),\n accentColor: cssVar('primary'),\n inputFocusBorder: { color: cssVar('primary') },\n headerColumnBorder: false,\n // Keep the header as quiet as TagTable; reveal resize handles on hover (see grid.css).\n headerColumnResizeHandleColor: 'transparent',\n headerColumnResizeHandleHeight: '40%',\n headerColumnResizeHandleWidth: 1,\n\n // Font settings — inherit the host app's font. A googleFont here never\n // loaded under the apps' CSP, so every grid silently fell back to the\n // browser's default SERIF and read as unstyled.\n fontFamily: 'inherit',\n fontSize: 14,\n headerFontSize: 14,\n headerFontWeight: 500,\n\n // Sizing\n headerHeight: 37,\n rowHeight: 40,\n cellHorizontalPadding: 12,\n\n // Borders - structural settings only.\n // Row border is a real hairline in the theme border colour (not hardcoded\n // white, which was invisible on the light-mode background and wrong in dark\n // mode) so adjacent rows are clearly separated — important now that rows can\n // be tall and multi-line (e.g. the Abstract column).\n rowBorder: { style: 'solid', width: 1, color: 'hsl(var(--border))' },\n columnBorder: false, // Row hairlines only\n wrapperBorder: { style: 'solid', width: 1, color: cssVar('border') },\n\n // Use the same radius token as TagTable's rounded-lg container.\n borderRadius: 'var(--radius-lg, 8px)',\n wrapperBorderRadius: 'var(--radius-lg, 8px)',\n checkboxBorderRadius: 2, // Keep checkboxes square\n})\n\n// Selection configuration\nexport interface GridViewSelection<T> {\n mode: 'single' | 'multiple'\n selected: T[]\n onSelectionChange: (items: T[]) => void\n /**\n * Keep the grid's ticked rows equal to `selected` after mount (default: `selected` only seeds the\n * grid). For a host that changes the selection itself, e.g. ticking a parent ticks its sub-tasks.\n */\n controlled?: boolean\n}\n\n// Empty state configuration\nexport interface GridViewEmptyState {\n icon?: React.ReactNode\n title?: string\n message?: string\n action?: React.ReactNode\n}\n\n/** Grid events GridView binds itself; `gridOptions` may not override them. */\ntype GridViewOwnedEvent =\n | 'onGridReady'\n | 'onFirstDataRendered'\n | 'onModelUpdated'\n | 'onSelectionChanged'\n | 'onCellValueChanged'\n | 'onRowClicked'\n | 'onStateUpdated'\n | 'onColumnVisible'\n\n// Generic props to make this grid reusable with different data types\nexport interface GridViewProps<T> {\n // Core data\n items: T[]\n // Column configuration\n columnDefs: ColDef<T>[]\n // Row identity function\n getItemId: (item: T) => string\n // Selection handling\n selection?: GridViewSelection<T>\n // Empty state\n emptyState?: GridViewEmptyState\n // Loading state\n isLoading?: boolean\n loadingMessage?: string\n // Grid options. The events GridView handles itself are left out: they are spread over its own\n // handlers, so passing one here silently replaced them (an `onGridReady` here left the grid api\n // unset and selection never reached `selection.onSelectionChange`). Use the dedicated props.\n gridOptions?: Partial<Omit<GridOptions<T>, GridViewOwnedEvent>>\n // Grid initialization\n onGridReady?: (params: { api: GridApi<T> }) => void\n // Cell value changes\n onCellValueChanged?: (event: CellValueChangedEvent<T>) => void\n // Row click handler\n onRowClick?: (item: T) => void\n // State persistence.\n // The core is decoupled from any store: when `persistState` is on it seeds\n // AG Grid from `gridState` (read once at mount) and reports every subsequent\n // state change through `onGridStateChange`. An app-adapter wires these to its\n // own store. `gridId` is retained as an opaque identity hint for adapters\n // (the core itself does not read it).\n persistState?: boolean\n gridId?: string\n // Persisted column/sort/filter state to restore at mount (controlled input).\n gridState?: GridState\n // Called whenever AG Grid's state changes so an adapter can persist it.\n onGridStateChange?: (state: GridState) => void\n // Initial visible columns (applied when no saved state exists)\n initialVisibleColumns?: string[]\n // Basic styling\n className?: string\n height?: string | number\n // Per-instance row height. Applied via the theme (not just gridOptions) so the\n // theme's calculated line-height tracks it and cell content stays vertically\n // centered. Fixed height — keeps row virtualization on the fast path.\n rowHeight?: number\n testId?: string\n // Pinned rows\n pinnedBottomRowData?: T[]\n pinnedTopRowData?: T[]\n // Pagination (disabled by default)\n pagination?: boolean\n paginationPageSizeSelector?: number[]\n // Test-id hooks: the grid owns its row/cell DOM, so ids are stamped onto it after render.\n // `getRowTestId` names a row; `getCellTestId` a cell (by colId). Without them AG Grid's own\n // `row-id` / `col-id` attributes are still there to select by.\n getRowTestId?: (item: T) => string\n getCellTestId?: (colId: string, item: T) => string\n // Force empty-state UI even when items.length > 0.\n // Used when rows are present but all hidden by an external filter.\n showEmpty?: boolean\n}\n\n/** Minimum row height on coarse pointers: 44px touch target + the 1px row border + breathing room. */\nconst TOUCH_ROW_HEIGHT = 52\n\nexport function GridView<T>({\n items,\n columnDefs,\n getItemId,\n selection,\n emptyState,\n isLoading = false,\n loadingMessage = 'Loading...',\n gridOptions,\n onGridReady,\n onCellValueChanged,\n onRowClick,\n persistState = false,\n gridState,\n onGridStateChange,\n initialVisibleColumns,\n className = 'w-full',\n height = 500,\n rowHeight: rowHeightProp,\n testId = 'grid-view',\n pinnedBottomRowData,\n pinnedTopRowData,\n pagination = false,\n paginationPageSizeSelector,\n getRowTestId,\n getCellTestId,\n showEmpty,\n}: GridViewProps<T>) {\n // Reference to the grid API\n const gridApiRef = useRef<GridApi<T> | null>(null)\n\n // On touch screens rows grow to a 44px-hit-area-friendly height: AG Grid clips cell content\n // (pills, filename buttons, avatar chips) to the row, so a taller hit area needs a taller row.\n const isCoarsePointer = useMediaQuery(BREAKPOINT_QUERIES.coarsePointer)\n const rowHeight = isCoarsePointer\n ? Math.max(rowHeightProp ?? gridOptions?.rowHeight ?? 40, TOUCH_ROW_HEIGHT)\n : rowHeightProp\n\n // Initial row height, captured once so it can live in the (stable) default\n // grid options. rowHeight is NOT passed as a reactive prop — that would make\n // the AgGridReact wrapper re-process grid options on every change and snap\n // manually-resized columns back to their colDef widths. Subsequent changes are\n // applied imperatively (see effect below).\n const initialRowHeightRef = useRef(rowHeight)\n\n // Persisted state to seed the grid with — captured once at mount so a reactive\n // `gridState` prop (e.g. an adapter re-reading its store each render) can never\n // re-initialise the grid mid-session. Mirrors AG Grid's own initialState,\n // which is read once.\n const initialGridStateRef = useRef(gridState)\n\n // Get initial state for the grid (read once at mount)\n const initialState = useMemo(() => {\n if (!persistState) return undefined\n return initialGridStateRef.current\n }, [persistState])\n\n // Save grid state via the adapter using modern AG Grid state API\n const saveGridState = useCallback(() => {\n if (!persistState || !onGridStateChange || !gridApiRef.current) return\n\n // Use AG Grid's comprehensive state API to capture complete state\n // This includes: filters, sort, column order, column visibility, column widths, etc.\n const state = gridApiRef.current.getState()\n\n onGridStateChange(state)\n }, [persistState, onGridStateChange])\n\n // Ensure selection column is visible after grid initialization\n const ensureSelectionColumnVisible = useCallback(() => {\n if (!gridApiRef.current || !selection?.mode) return\n\n // IMPORTANT: Force selection column to be visible after state restoration\n // This ensures even old saved states don't hide the selection column\n // Also handles case where selection column is completely missing from state\n const currentState = gridApiRef.current.getColumnState()\n const selectionColumn = currentState.find((col) => col.colId === 'ag-Grid-SelectionColumn')\n const selectionColumnIndex = currentState.findIndex(\n (col) => col.colId === 'ag-Grid-SelectionColumn'\n )\n\n // Fix if column is hidden OR missing entirely OR not in first position\n if (!selectionColumn || selectionColumn.hide || selectionColumnIndex !== 0) {\n // Use setColumnsVisible for more reliable visibility control\n gridApiRef.current.setColumnsVisible(['ag-Grid-SelectionColumn'], true)\n\n // Also apply state to ensure proper width\n gridApiRef.current.applyColumnState({\n state: [\n {\n colId: 'ag-Grid-SelectionColumn',\n hide: false,\n width: selectionColumn?.width || 48,\n pinned: null, // Ensure not pinned in wrong position\n },\n ],\n defaultState: { hide: undefined },\n applyOrder: false,\n })\n\n // Move selection column to first position if it's not there\n if (selectionColumnIndex !== 0) {\n gridApiRef.current.moveColumns(['ag-Grid-SelectionColumn'], 0)\n }\n }\n }, [selection?.mode])\n\n // Stamp host test ids onto AG Grid's rows and cells (it virtualises, so keep watching).\n const containerRef = useRef<HTMLDivElement>(null)\n const itemsRef = useRef(items)\n itemsRef.current = items\n const getItemIdRef = useRef(getItemId)\n getItemIdRef.current = getItemId\n const hasTestIdHooks = Boolean(getRowTestId || getCellTestId)\n useEffect(() => {\n const root = containerRef.current\n if (!root || !hasTestIdHooks) return\n return watchGridTestIds(\n root,\n () => new Map(itemsRef.current.map((item) => [getItemIdRef.current(item), item])),\n { getRowTestId, getCellTestId }\n )\n }, [hasTestIdHooks, getRowTestId, getCellTestId, isLoading])\n\n // Row identity, stable for the grid's life (through the latest `getItemId`): an inline\n // `getItemId` used to change it, and with it the default options and their `defaultColDef`, on\n // every host render; AG Grid then re-applied the columns and recreated every header's label.\n const getRowId = useCallback((params: { data: T }) => getItemIdRef.current(params.data), [])\n\n // Refs for selection — avoids handleGridReady/handleSelectionChanged recreating\n // when selection object changes (which happens on every selectionConfig recompute)\n const selectionRef = useRef(selection)\n selectionRef.current = selection\n\n const onSelectionChangeRef = useRef(selection?.onSelectionChange)\n onSelectionChangeRef.current = selection?.onSelectionChange\n\n const syncingSelectionRef = useRef(false)\n\n const handleSelectionChanged = useCallback(() => {\n if (syncingSelectionRef.current) return\n if (!onSelectionChangeRef.current || !gridApiRef.current) return\n\n const selectedNodes = gridApiRef.current.getSelectedNodes()\n const selectedData = selectedNodes\n .map((node) => node.data)\n .filter((item): item is T => item !== undefined)\n\n onSelectionChangeRef.current(selectedData)\n }, [])\n\n // Handle row clicks\n // A controlled selection: tick and untick rows so the grid shows exactly `selection.selected`.\n const controlledSelected = selection?.controlled ? selection.selected : undefined\n useEffect(() => {\n const api = gridApiRef.current\n if (!api || api.isDestroyed() || !controlledSelected) return\n const wanted = new Set(controlledSelected.map(getItemId))\n const tick: IRowNode<T>[] = []\n const untick: IRowNode<T>[] = []\n api.forEachNode((node) => {\n if (!node.data) return\n const want = wanted.has(getItemId(node.data))\n if (want && !node.isSelected()) tick.push(node)\n else if (!want && node.isSelected()) untick.push(node)\n })\n syncingSelectionRef.current = true\n try {\n if (tick.length) api.setNodesSelected({ nodes: tick, newValue: true, source: 'api' })\n if (untick.length) api.setNodesSelected({ nodes: untick, newValue: false, source: 'api' })\n } finally {\n syncingSelectionRef.current = false\n }\n }, [controlledSelected, getItemId])\n\n const handleRowClicked = useCallback(\n (event: RowClickedEvent<T>) => {\n if (!onRowClick || !event.data) return\n // Don't fire when the click originated from an interactive element inside the cell\n // (e.g. action buttons). AG Grid fires rowClicked regardless of DOM stopPropagation.\n const target = event.event?.target as HTMLElement | null\n if (target?.closest('button, input, a, select, textarea, [role=\"button\"]')) return\n onRowClick(event.data)\n },\n [onRowClick]\n )\n\n // The visibility the user actually intends, per colId. AG Grid re-processes the\n // column definitions on some React re-renders even when the `columnDefs`\n // reference is unchanged, and that reset restores each colDef's `hide` — so a\n // column the user turned on (e.g. via a fields menu) silently disappears the\n // next time the host re-renders (opening an editor, selecting a row, …). We\n // remember the intended visibility and restore it whenever such a reset fires.\n // A Map (not a Set of hidden ids) so a genuinely NEW column from a real\n // columnDefs change — one we've never seen — is left at its colDef default\n // rather than force-shown.\n const desiredHiddenRef = useRef<Map<string, boolean> | null>(null)\n\n const snapshotDesiredHidden = useCallback(() => {\n const api = gridApiRef.current\n if (!api) return\n desiredHiddenRef.current = new Map(api.getColumnState().map((c) => [c.colId, !!c.hide]))\n }, [])\n\n // Handle grid ready\n const handleGridReady = useCallback(\n (event: GridReadyEvent<T>) => {\n gridApiRef.current = event.api\n\n // Apply initial visible columns when no saved state exists\n // This prevents showing all columns by default for new users\n if (!initialState && initialVisibleColumns?.length) {\n const currentState = event.api.getColumnState()\n const stateMap = new Map(currentState.map((col) => [col.colId, col]))\n const visibleSet = new Set(initialVisibleColumns)\n\n // Build ordered state: selection column first (always visible), then visible columns, then hidden\n const selectionCol = stateMap.get('ag-Grid-SelectionColumn')\n const orderedState = [\n // Selection column first - ALWAYS visible, create if not in state\n selectionCol\n ? { ...selectionCol, hide: false }\n : { colId: 'ag-Grid-SelectionColumn', hide: false, width: 48 },\n // Visible columns in specified order\n ...initialVisibleColumns\n .filter((colId) => colId !== 'ag-Grid-SelectionColumn') // Don't duplicate selection column\n .map((colId) => {\n const col = stateMap.get(colId)\n return col ? { ...col, hide: false } : undefined\n }),\n // Hidden columns (everything else)\n ...currentState\n .filter((col) => col.colId !== 'ag-Grid-SelectionColumn' && !visibleSet.has(col.colId))\n .map((col) => ({ ...col, hide: true })),\n ].filter((col): col is NonNullable<typeof col> => col !== undefined)\n\n event.api.applyColumnState({ state: orderedState, applyOrder: true })\n }\n\n // When restoring persisted state, detect columns from columnDefs that\n // aren't in the saved state (e.g. newly added columns) and append them.\n // AG Grid's maintainColumnOrder adds them but may place them inconsistently;\n // this ensures they appear as hidden at the end so the navigator picks them up.\n if (initialState && initialVisibleColumns?.length) {\n const currentState = event.api.getColumnState()\n const savedColIds = new Set(\n initialState.columnOrder?.orderedColIds ?? currentState.map((c) => c.colId)\n )\n const newCols = currentState.filter(\n (col) => !savedColIds.has(col.colId) && col.colId !== 'ag-Grid-SelectionColumn'\n )\n if (newCols.length > 0) {\n // Make new columns visible if they're in the default visible set\n const defaultVisible = new Set(initialVisibleColumns)\n event.api.applyColumnState({\n state: newCols.map((col) => ({\n ...col,\n hide: !defaultVisible.has(col.colId),\n })),\n })\n }\n }\n\n // Ensure selection column is visible (in case saved state hides it)\n ensureSelectionColumnVisible()\n\n // Seed the intended column visibility from the state AG Grid settled on\n // (colDefs + restored persisted state) so a later colDef-driven reset can\n // be undone rather than silently hiding a user-shown column.\n snapshotDesiredHidden()\n\n // Call the provided onGridReady callback\n if (onGridReady) {\n onGridReady({ api: event.api })\n }\n\n // Restore selection state if needed (read from ref to keep callback stable)\n const sel = selectionRef.current\n if (sel && sel.selected.length > 0) {\n const selectedIds = new Set(sel.selected.map(getItemId))\n event.api.forEachNode((node) => {\n if (node.data && selectedIds.has(getItemId(node.data))) {\n node.setSelected(true)\n }\n })\n }\n },\n [\n onGridReady,\n getItemId,\n ensureSelectionColumnVisible,\n snapshotDesiredHidden,\n initialState,\n initialVisibleColumns,\n ]\n )\n\n // Undo AG Grid's colDef-driven visibility reset; record genuine user changes.\n const handleColumnVisible = useCallback(\n (event: ColumnVisibleEvent<T>) => {\n const api = gridApiRef.current\n if (!api) return\n // A columnDefs re-apply reports `gridOptionsChanged`; a real toggle reports\n // an interaction source (api, toolPanelUi, columnMenu, …).\n if (event.source === 'gridOptionsChanged') {\n const desired = desiredHiddenRef.current\n if (!desired) return\n // Only correct columns we've seen before (in the snapshot); a brand-new\n // column keeps its colDef default.\n const fixes = api\n .getColumnState()\n .filter(\n (c) =>\n c.colId !== 'ag-Grid-SelectionColumn' &&\n desired.has(c.colId) &&\n desired.get(c.colId) !== !!c.hide\n )\n .map((c) => ({ colId: c.colId, hide: desired.get(c.colId) }))\n if (fixes.length) api.applyColumnState({ state: fixes })\n } else if (desiredHiddenRef.current && event.visible !== undefined && event.columns) {\n // Genuine change — this is now the intended visibility. Taken from the event itself: the\n // column state can still report the previous visibility while it is being dispatched\n // (seen for a change made before the grid's first data render).\n for (const column of event.columns) {\n desiredHiddenRef.current.set(column.getColId(), !event.visible)\n }\n } else {\n // A mixed change (applied column state): read the whole visibility back.\n snapshotDesiredHidden()\n }\n },\n [snapshotDesiredHidden]\n )\n\n // Handle first data rendered - no auto-sizing, let flex columns handle it\n const handleFirstDataRendered = useCallback(() => {\n // Columns with flex will auto-fill, columns with width stay fixed\n // Also ensure selection column is visible as a backup (handles timing issues with initialState)\n ensureSelectionColumnVisible()\n // Seed the intended visibility from the state AG Grid settled on (colDefs +\n // any restored persisted state), so later resets can be undone.\n snapshotDesiredHidden()\n }, [ensureSelectionColumnVisible, snapshotDesiredHidden])\n\n // Track when AG Grid processes row updates\n const handleModelUpdated = useCallback(() => {\n // AG Grid handles model updates internally\n }, [])\n\n // Track row data changes for AG Grid updates\n const prevItemsRef = useRef<T[]>([])\n useEffect(() => {\n prevItemsRef.current = items\n }, [items])\n\n // Handle state updates - save state when it changes (modern AG Grid approach)\n const handleStateUpdated = useCallback(() => {\n saveGridState()\n }, [saveGridState])\n\n // Removed problematic useEffect that caused unnecessary re-renders\n // AG Grid handles selection internally, only sync on initial load\n\n // Default grid options with minimal settings - memoized to prevent re-renders\n const defaultOptions: GridOptions<T> = useMemo(() => {\n return {\n // Initial row height (stable — captured once). Live changes go through the\n // imperative effect, not this option, to avoid column-state churn.\n rowHeight: initialRowHeightRef.current,\n suppressMenuHide: true, // Prevent hiding columns since we don't have enterprise sidebar\n maintainColumnOrder: true, // Preserve column order when columns are added/removed\n\n // Row virtualization: Render rows as needed for performance\n // rowBuffer renders extra rows above/below viewport for smoother scrolling\n rowBuffer: 10, // Render 10 extra rows above/below viewport for smooth scrolling\n suppressColumnVirtualisation: false, // Keep column virtualization enabled\n suppressRowVirtualisation: false, // ENABLE row virtualization - only render visible rows\n animateRows: false, // Disable row animations\n suppressColumnMoveAnimation: true, // Disable column move/resize animations\n\n // Efficient updates with React Query cache\n // getRowId enables change detection - grid only re-renders changed rows\n // Works perfectly with React Query's cache updates\n getRowId: getRowId,\n\n rowSelection: selection?.mode\n ? {\n mode: selection.mode === 'single' ? 'singleRow' : 'multiRow',\n selectAll: 'filtered', // Header checkbox selects all filtered rows (across all pages)\n // In multi-row mode, only checkboxes should toggle selection (clicking row body would replace selection)\n enableClickSelection: selection.mode === 'single',\n checkboxes: true,\n headerCheckbox: selection.mode === 'multiple',\n }\n : undefined,\n selectionColumnDef: selection?.mode\n ? {\n sortable: selection.mode === 'multiple',\n width: 48,\n lockVisible: true, // Cannot be hidden\n suppressMovable: true, // Cannot be moved\n }\n : undefined,\n // Use normal layout for better performance - autoHeight causes forced reflows\n domLayout: 'normal',\n // Stop editing when clicking outside the cell/grid\n stopEditingWhenCellsLoseFocus: true,\n // Additional performance optimizations\n suppressCellFocus: true, // Don't focus cells on click (faster)\n suppressRowHoverHighlight: true, // Disable hover highlight - reduces DOM manipulation during scroll\n suppressScrollOnNewData: true, // Don't scroll when data updates\n suppressAggFuncInHeader: true, // Don't show aggregation functions (faster)\n // Tooltip UX: the AG Grid default show-delay is 2 s which hurts\n // discoverability for cells where tooltips carry the \"reveal full\n // content\" affordance for non-editable users. 300 ms is snappy\n // without being accidental. tooltipInteraction lets users hover\n // onto the tooltip itself (e.g. to select / copy long text).\n // These are AG Grid's native tooltip controls — no React / Radix\n // provider involved, zero per-row cost; tooltip DOM is created on\n // demand when hover-delay elapses and destroyed on mouseout.\n tooltipShowDelay: 300,\n tooltipHideDelay: 4000,\n tooltipInteraction: true,\n // Pagination (disabled by default)\n pagination,\n paginationPageSizeSelector,\n defaultColDef: {\n sortable: true,\n resizable: true,\n unSortIcon: false, // Sort glyph only on the sorted column (every header carrying one was noise)\n sortingOrder: ['asc', 'desc', null], // 3-way sorting: asc → desc → unsorted (AG Grid default)\n wrapText: false, // Disable text wrapping for cleaner display\n autoHeight: false, // Use fixed row height from theme\n wrapHeaderText: false, // Disable header text wrapping for cleaner look\n autoHeaderHeight: false, // Fixed header height\n filterParams: {\n maxNumConditions: 1,\n buttons: ['reset'],\n },\n },\n }\n }, [selection?.mode, getRowId, pagination, paginationPageSizeSelector])\n\n // Combine default options with passed options - memoized to prevent re-renders\n const combinedOptions = useMemo(\n () => ({ ...defaultOptions, ...gridOptions }),\n [defaultOptions, gridOptions]\n )\n\n // Apply fixed height for better performance — autoHeight causes forced\n // reflows by measuring all rows, avoid it.\n //\n // Also derive the geometry the wrapping multiline columns (.cell-multiline —\n // Abstract, Author, custom text fields) need so their overflow clip lands on\n // a WHOLE-line boundary (never mid-line, which reads as a half-line\n // \"bleeding\" into the neighbouring row). All computed once here per\n // row-height change and handed to CSS as variables — zero per-row cost on the\n // million-row grid:\n // --multiline-line-clamp : whole number of lines that fit — drives the CSS\n // line-clamp that hides overflow lines entirely.\n // --multiline-pad-y : vertical cell padding, shrunk on very short rows so\n // at least one whole line always fits.\n // --multiline-max-h : cap of exactly N whole lines + TOP padding + borders.\n // Deliberately excludes the bottom padding: AG Grid\n // forces cell height, so overflow clips at the\n // padding-box edge and any bottom padding becomes a\n // window onto the next (clamped-away) line. Ending the\n // box right at line N's bottom puts the clip on the\n // line boundary; the row supplies the visual gap below.\n const containerStyle = useMemo(() => {\n const style: React.CSSProperties = { height }\n if (rowHeight) {\n const LINE_PX = 14 * 1.35 // grid font-size × multiline line-height (18.9px)\n const BORDER = 2 // multiline cell top + bottom border (1px each, border-box)\n const PREFERRED_PAD = 16 // preferred total vertical padding (8px top + 8px bottom)\n // Don't let padding eat the room a single line needs on short rows.\n const padTotal = Math.max(0, Math.min(PREFERRED_PAD, rowHeight - BORDER - LINE_PX))\n const lines = Math.max(1, Math.floor((rowHeight - BORDER - padTotal) / LINE_PX))\n const vars = style as Record<string, string | number>\n vars['--multiline-line-clamp'] = `${lines}`\n vars['--multiline-pad-y'] = `${padTotal / 2}px`\n vars['--multiline-max-h'] = `${lines * LINE_PX + padTotal / 2 + BORDER}px`\n }\n return style\n }, [height, rowHeight])\n\n // Apply rowHeight changes imperatively via the grid option (not the theme —\n // recreating the theme would re-initialise the grid). This only re-lays-out\n // rows; columns, row virtualization, and the transaction bus are untouched.\n useEffect(() => {\n const api = gridApiRef.current\n if (!api || api.isDestroyed() || !rowHeight) return\n api.setGridOption('rowHeight', rowHeight)\n api.resetRowHeights()\n }, [rowHeight])\n\n const containerClassName = useMemo(() => {\n const baseClass = className || ''\n // Height-adjustable grids vertically center cell content (CSS) so a\n // one-line cell or a lone pill sits in the middle of the row, and multi-line\n // text (e.g. Abstract) is balanced top-to-bottom — flagged here, applied in\n // grid.css.\n const alignClass = rowHeight ? 'ag-cells-centered' : ''\n return [baseClass, alignClass].filter(Boolean).join(' ')\n }, [className, rowHeight])\n\n // Show loading state — grey skeleton rows so the page transition feels instant\n if (isLoading) {\n const skeletonRowCount = 12\n return (\n <div\n data-testid={`${testId}-loading`}\n className={`${containerClassName} overflow-hidden rounded-lg border border-border`}\n style={containerStyle}\n aria-busy=\"true\"\n aria-label={loadingMessage}\n >\n {/* Header skeleton */}\n <div className=\"flex h-[37px] items-center gap-4 border-b border-border bg-muted/40 px-3\">\n <div className=\"h-3 w-6 rounded bg-muted animate-pulse\" />\n <div className=\"h-3 w-32 rounded bg-muted animate-pulse\" />\n <div className=\"h-3 w-24 rounded bg-muted animate-pulse\" />\n <div className=\"h-3 w-20 rounded bg-muted animate-pulse\" />\n <div className=\"h-3 w-28 rounded bg-muted animate-pulse\" />\n <div className=\"h-3 w-16 rounded bg-muted animate-pulse ml-auto\" />\n </div>\n {/* Row skeletons */}\n {Array.from({ length: skeletonRowCount }).map((_, rowIdx) => (\n <div key={rowIdx} className=\"flex h-10 items-center gap-4 border-b border-border px-3\">\n <div className=\"h-4 w-4 rounded-sm bg-muted/70 animate-pulse\" />\n <div\n className=\"h-3 rounded bg-muted/70 animate-pulse\"\n style={{ width: `${20 + ((rowIdx * 17) % 40)}%` }}\n />\n <div\n className=\"h-3 rounded bg-muted/60 animate-pulse\"\n style={{ width: `${8 + ((rowIdx * 11) % 12)}%` }}\n />\n <div\n className=\"h-3 rounded bg-muted/60 animate-pulse\"\n style={{ width: `${6 + ((rowIdx * 7) % 10)}%` }}\n />\n <div\n className=\"h-3 rounded bg-muted/50 animate-pulse ml-auto\"\n style={{ width: `${5 + ((rowIdx * 5) % 8)}%` }}\n />\n </div>\n ))}\n </div>\n )\n }\n\n // Show empty state\n // showEmpty lets callers force this UI (e.g. when an external filter hid\n // every row but the underlying items array is non-empty).\n if ((showEmpty ?? items.length === 0) && emptyState) {\n return (\n <div\n data-testid={`${testId}-empty`}\n // Capped by its container (a landscape phone is shorter than 24rem) and scrollable, with the\n // content centred by auto margins so a tall one still starts at the top.\n className=\"flex h-96 max-h-full flex-col items-center overflow-y-auto p-6 text-center\"\n >\n <div className=\"my-auto flex flex-col items-center\">\n {emptyState.icon && (\n <div className=\"text-muted-foreground/60 mb-4\">{emptyState.icon}</div>\n )}\n {emptyState.title && <h3 className=\"text-xl font-medium mb-2\">{emptyState.title}</h3>}\n {emptyState.message && (\n <p className=\"text-muted-foreground mb-6 max-w-md\">{emptyState.message}</p>\n )}\n {emptyState.action}\n </div>\n </div>\n )\n }\n\n return (\n <div\n ref={containerRef}\n className={containerClassName}\n style={containerStyle}\n data-testid={testId}\n >\n <AgGridReact\n theme={arbiTheme}\n modules={[AllCommunityModule]}\n columnDefs={columnDefs}\n rowData={items}\n pinnedBottomRowData={pinnedBottomRowData}\n pinnedTopRowData={pinnedTopRowData}\n getRowId={getRowId}\n initialState={initialState}\n {...combinedOptions}\n // The events GridView binds itself come after the host's options, so an options object\n // that names one anyway (it is typed out, but untyped objects slip through) cannot replace\n // them: a no-op `onColumnVisible` there used to switch off the visibility guard.\n onGridReady={handleGridReady}\n onFirstDataRendered={handleFirstDataRendered}\n onModelUpdated={handleModelUpdated}\n onSelectionChanged={handleSelectionChanged}\n onCellValueChanged={onCellValueChanged}\n onRowClicked={handleRowClicked}\n onStateUpdated={handleStateUpdated}\n onColumnVisible={handleColumnVisible}\n />\n </div>\n )\n}\n"]}
@@ -2,10 +2,10 @@
2
2
  'use strict';
3
3
 
4
4
  var chunkVZKTOGZR_cjs = require('../chunk-VZKTOGZR.cjs');
5
- var chunkETYBZA5E_cjs = require('../chunk-ETYBZA5E.cjs');
5
+ var chunkIGVTLCHD_cjs = require('../chunk-IGVTLCHD.cjs');
6
6
  require('../chunk-7G2LJMUG.cjs');
7
7
  var chunkVLCY46K6_cjs = require('../chunk-VLCY46K6.cjs');
8
- require('../chunk-LKK52DEY.cjs');
8
+ require('../chunk-XNXNLXIC.cjs');
9
9
  var chunkMOIZ2R5X_cjs = require('../chunk-MOIZ2R5X.cjs');
10
10
  require('../chunk-FX3K6LNZ.cjs');
11
11
  require('../chunk-ULWRNGGE.cjs');
@@ -36,275 +36,275 @@ Object.defineProperty(exports, "vCardFilename", {
36
36
  });
37
37
  Object.defineProperty(exports, "ActionMenu", {
38
38
  enumerable: true,
39
- get: function () { return chunkETYBZA5E_cjs.ActionMenu; }
39
+ get: function () { return chunkIGVTLCHD_cjs.ActionMenu; }
40
40
  });
41
41
  Object.defineProperty(exports, "AddContactsForm", {
42
42
  enumerable: true,
43
- get: function () { return chunkETYBZA5E_cjs.AddContactsForm; }
43
+ get: function () { return chunkIGVTLCHD_cjs.AddContactsForm; }
44
44
  });
45
45
  Object.defineProperty(exports, "AddContactsResults", {
46
46
  enumerable: true,
47
- get: function () { return chunkETYBZA5E_cjs.AddContactsResults; }
47
+ get: function () { return chunkIGVTLCHD_cjs.AddContactsResults; }
48
48
  });
49
49
  Object.defineProperty(exports, "DEFAULT_ADD_CONTACTS_LABELS", {
50
50
  enumerable: true,
51
- get: function () { return chunkETYBZA5E_cjs.DEFAULT_ADD_CONTACTS_LABELS; }
51
+ get: function () { return chunkIGVTLCHD_cjs.DEFAULT_ADD_CONTACTS_LABELS; }
52
52
  });
53
53
  Object.defineProperty(exports, "DEFAULT_CONTACT_INVITE_LABELS", {
54
54
  enumerable: true,
55
- get: function () { return chunkETYBZA5E_cjs.DEFAULT_CONTACT_INVITE_LABELS; }
55
+ get: function () { return chunkIGVTLCHD_cjs.DEFAULT_CONTACT_INVITE_LABELS; }
56
56
  });
57
57
  Object.defineProperty(exports, "DEFAULT_CONTACT_OUTCOME_LABELS", {
58
58
  enumerable: true,
59
- get: function () { return chunkETYBZA5E_cjs.DEFAULT_CONTACT_OUTCOME_LABELS; }
59
+ get: function () { return chunkIGVTLCHD_cjs.DEFAULT_CONTACT_OUTCOME_LABELS; }
60
60
  });
61
61
  Object.defineProperty(exports, "DEFAULT_DM_ACCESS_REQUEST_BANNER_LABELS", {
62
62
  enumerable: true,
63
- get: function () { return chunkETYBZA5E_cjs.DEFAULT_DM_ACCESS_REQUEST_BANNER_LABELS; }
63
+ get: function () { return chunkIGVTLCHD_cjs.DEFAULT_DM_ACCESS_REQUEST_BANNER_LABELS; }
64
64
  });
65
65
  Object.defineProperty(exports, "DEFAULT_DM_GRANT_ACCESS_DIALOG_LABELS", {
66
66
  enumerable: true,
67
- get: function () { return chunkETYBZA5E_cjs.DEFAULT_DM_GRANT_ACCESS_DIALOG_LABELS; }
67
+ get: function () { return chunkIGVTLCHD_cjs.DEFAULT_DM_GRANT_ACCESS_DIALOG_LABELS; }
68
68
  });
69
69
  Object.defineProperty(exports, "DEFAULT_DM_THREAD_FRAME_LABELS", {
70
70
  enumerable: true,
71
- get: function () { return chunkETYBZA5E_cjs.DEFAULT_DM_THREAD_FRAME_LABELS; }
71
+ get: function () { return chunkIGVTLCHD_cjs.DEFAULT_DM_THREAD_FRAME_LABELS; }
72
72
  });
73
73
  Object.defineProperty(exports, "DEFAULT_MAIL_FOLDER_TREE_LABELS", {
74
74
  enumerable: true,
75
- get: function () { return chunkETYBZA5E_cjs.DEFAULT_MAIL_FOLDER_TREE_LABELS; }
75
+ get: function () { return chunkIGVTLCHD_cjs.DEFAULT_MAIL_FOLDER_TREE_LABELS; }
76
76
  });
77
77
  Object.defineProperty(exports, "DEFAULT_RECIPIENT_PICKER_LABELS", {
78
78
  enumerable: true,
79
- get: function () { return chunkETYBZA5E_cjs.DEFAULT_RECIPIENT_PICKER_LABELS; }
79
+ get: function () { return chunkIGVTLCHD_cjs.DEFAULT_RECIPIENT_PICKER_LABELS; }
80
80
  });
81
81
  Object.defineProperty(exports, "DmAccessRequestBanner", {
82
82
  enumerable: true,
83
- get: function () { return chunkETYBZA5E_cjs.DmAccessRequestBanner; }
83
+ get: function () { return chunkIGVTLCHD_cjs.DmAccessRequestBanner; }
84
84
  });
85
85
  Object.defineProperty(exports, "DmGrantAccessDialogView", {
86
86
  enumerable: true,
87
- get: function () { return chunkETYBZA5E_cjs.DmGrantAccessDialogView; }
87
+ get: function () { return chunkIGVTLCHD_cjs.DmGrantAccessDialogView; }
88
88
  });
89
89
  Object.defineProperty(exports, "DmInviteAvatar", {
90
90
  enumerable: true,
91
- get: function () { return chunkETYBZA5E_cjs.DmInviteAvatar; }
91
+ get: function () { return chunkIGVTLCHD_cjs.DmInviteAvatar; }
92
92
  });
93
93
  Object.defineProperty(exports, "DmThreadFrame", {
94
94
  enumerable: true,
95
- get: function () { return chunkETYBZA5E_cjs.DmThreadFrame; }
95
+ get: function () { return chunkIGVTLCHD_cjs.DmThreadFrame; }
96
96
  });
97
97
  Object.defineProperty(exports, "EMPTY_CONTACT_FORM", {
98
98
  enumerable: true,
99
- get: function () { return chunkETYBZA5E_cjs.EMPTY_CONTACT_FORM; }
99
+ get: function () { return chunkIGVTLCHD_cjs.EMPTY_CONTACT_FORM; }
100
100
  });
101
101
  Object.defineProperty(exports, "MAX_INVITE_EMAILS", {
102
102
  enumerable: true,
103
- get: function () { return chunkETYBZA5E_cjs.MAX_INVITE_EMAILS; }
103
+ get: function () { return chunkIGVTLCHD_cjs.MAX_INVITE_EMAILS; }
104
104
  });
105
105
  Object.defineProperty(exports, "MailActionBar", {
106
106
  enumerable: true,
107
- get: function () { return chunkETYBZA5E_cjs.MailActionBar; }
107
+ get: function () { return chunkIGVTLCHD_cjs.MailActionBar; }
108
108
  });
109
109
  Object.defineProperty(exports, "MailConversationView", {
110
110
  enumerable: true,
111
- get: function () { return chunkETYBZA5E_cjs.MailConversationView; }
111
+ get: function () { return chunkIGVTLCHD_cjs.MailConversationView; }
112
112
  });
113
113
  Object.defineProperty(exports, "MailDeliveryBadge", {
114
114
  enumerable: true,
115
- get: function () { return chunkETYBZA5E_cjs.MailDeliveryBadge; }
115
+ get: function () { return chunkIGVTLCHD_cjs.MailDeliveryBadge; }
116
116
  });
117
117
  Object.defineProperty(exports, "MailDeliveryList", {
118
118
  enumerable: true,
119
- get: function () { return chunkETYBZA5E_cjs.MailDeliveryList; }
119
+ get: function () { return chunkIGVTLCHD_cjs.MailDeliveryList; }
120
120
  });
121
121
  Object.defineProperty(exports, "MailDocumentPicker", {
122
122
  enumerable: true,
123
- get: function () { return chunkETYBZA5E_cjs.MailDocumentPicker; }
123
+ get: function () { return chunkIGVTLCHD_cjs.MailDocumentPicker; }
124
124
  });
125
125
  Object.defineProperty(exports, "MailFlagButton", {
126
126
  enumerable: true,
127
- get: function () { return chunkETYBZA5E_cjs.MailFlagButton; }
127
+ get: function () { return chunkIGVTLCHD_cjs.MailFlagButton; }
128
128
  });
129
129
  Object.defineProperty(exports, "MailFolderTree", {
130
130
  enumerable: true,
131
- get: function () { return chunkETYBZA5E_cjs.MailFolderTree; }
131
+ get: function () { return chunkIGVTLCHD_cjs.MailFolderTree; }
132
132
  });
133
133
  Object.defineProperty(exports, "MailGrid", {
134
134
  enumerable: true,
135
- get: function () { return chunkETYBZA5E_cjs.MailGrid; }
135
+ get: function () { return chunkIGVTLCHD_cjs.MailGrid; }
136
136
  });
137
137
  Object.defineProperty(exports, "MailMessageContent", {
138
138
  enumerable: true,
139
- get: function () { return chunkETYBZA5E_cjs.MailMessageContent; }
139
+ get: function () { return chunkIGVTLCHD_cjs.MailMessageContent; }
140
140
  });
141
141
  Object.defineProperty(exports, "MailMessagePreview", {
142
142
  enumerable: true,
143
- get: function () { return chunkETYBZA5E_cjs.MailMessagePreview; }
143
+ get: function () { return chunkIGVTLCHD_cjs.MailMessagePreview; }
144
144
  });
145
145
  Object.defineProperty(exports, "MailMessageView", {
146
146
  enumerable: true,
147
- get: function () { return chunkETYBZA5E_cjs.MailMessageView; }
147
+ get: function () { return chunkIGVTLCHD_cjs.MailMessageView; }
148
148
  });
149
149
  Object.defineProperty(exports, "MemberBulkActions", {
150
150
  enumerable: true,
151
- get: function () { return chunkETYBZA5E_cjs.MemberBulkActions; }
151
+ get: function () { return chunkIGVTLCHD_cjs.MemberBulkActions; }
152
152
  });
153
153
  Object.defineProperty(exports, "MemberListLoading", {
154
154
  enumerable: true,
155
- get: function () { return chunkETYBZA5E_cjs.MemberListLoading; }
155
+ get: function () { return chunkIGVTLCHD_cjs.MemberListLoading; }
156
156
  });
157
157
  Object.defineProperty(exports, "MemberMutedText", {
158
158
  enumerable: true,
159
- get: function () { return chunkETYBZA5E_cjs.MemberMutedText; }
159
+ get: function () { return chunkIGVTLCHD_cjs.MemberMutedText; }
160
160
  });
161
161
  Object.defineProperty(exports, "MemberNameCell", {
162
162
  enumerable: true,
163
- get: function () { return chunkETYBZA5E_cjs.MemberNameCell; }
163
+ get: function () { return chunkIGVTLCHD_cjs.MemberNameCell; }
164
164
  });
165
165
  Object.defineProperty(exports, "MemberRoleCell", {
166
166
  enumerable: true,
167
- get: function () { return chunkETYBZA5E_cjs.MemberRoleCell; }
167
+ get: function () { return chunkIGVTLCHD_cjs.MemberRoleCell; }
168
168
  });
169
169
  Object.defineProperty(exports, "NEEDS_CONNECTION", {
170
170
  enumerable: true,
171
- get: function () { return chunkETYBZA5E_cjs.NEEDS_CONNECTION; }
171
+ get: function () { return chunkIGVTLCHD_cjs.NEEDS_CONNECTION; }
172
172
  });
173
173
  Object.defineProperty(exports, "PlainMailBodyEditor", {
174
174
  enumerable: true,
175
- get: function () { return chunkETYBZA5E_cjs.PlainMailBodyEditor; }
175
+ get: function () { return chunkIGVTLCHD_cjs.PlainMailBodyEditor; }
176
176
  });
177
177
  Object.defineProperty(exports, "RecipientPicker", {
178
178
  enumerable: true,
179
- get: function () { return chunkETYBZA5E_cjs.RecipientPicker; }
179
+ get: function () { return chunkIGVTLCHD_cjs.RecipientPicker; }
180
180
  });
181
181
  Object.defineProperty(exports, "RoleSelect", {
182
182
  enumerable: true,
183
- get: function () { return chunkETYBZA5E_cjs.RoleSelect; }
183
+ get: function () { return chunkIGVTLCHD_cjs.RoleSelect; }
184
184
  });
185
185
  Object.defineProperty(exports, "applyContactInviteResults", {
186
186
  enumerable: true,
187
- get: function () { return chunkETYBZA5E_cjs.applyContactInviteResults; }
187
+ get: function () { return chunkIGVTLCHD_cjs.applyContactInviteResults; }
188
188
  });
189
189
  Object.defineProperty(exports, "buildMailFolderTree", {
190
190
  enumerable: true,
191
- get: function () { return chunkETYBZA5E_cjs.buildMailFolderTree; }
191
+ get: function () { return chunkIGVTLCHD_cjs.buildMailFolderTree; }
192
192
  });
193
193
  Object.defineProperty(exports, "contactName", {
194
194
  enumerable: true,
195
- get: function () { return chunkETYBZA5E_cjs.contactName; }
195
+ get: function () { return chunkIGVTLCHD_cjs.contactName; }
196
196
  });
197
197
  Object.defineProperty(exports, "contactOutcomeMessage", {
198
198
  enumerable: true,
199
- get: function () { return chunkETYBZA5E_cjs.contactOutcomeMessage; }
199
+ get: function () { return chunkIGVTLCHD_cjs.contactOutcomeMessage; }
200
200
  });
201
201
  Object.defineProperty(exports, "contactStatusLabel", {
202
202
  enumerable: true,
203
- get: function () { return chunkETYBZA5E_cjs.contactStatusLabel; }
203
+ get: function () { return chunkIGVTLCHD_cjs.contactStatusLabel; }
204
204
  });
205
205
  Object.defineProperty(exports, "contactToForm", {
206
206
  enumerable: true,
207
- get: function () { return chunkETYBZA5E_cjs.contactToForm; }
207
+ get: function () { return chunkIGVTLCHD_cjs.contactToForm; }
208
208
  });
209
209
  Object.defineProperty(exports, "descendantFolderIds", {
210
210
  enumerable: true,
211
- get: function () { return chunkETYBZA5E_cjs.descendantFolderIds; }
211
+ get: function () { return chunkIGVTLCHD_cjs.descendantFolderIds; }
212
212
  });
213
213
  Object.defineProperty(exports, "draftMailCompose", {
214
214
  enumerable: true,
215
- get: function () { return chunkETYBZA5E_cjs.draftMailCompose; }
215
+ get: function () { return chunkIGVTLCHD_cjs.draftMailCompose; }
216
216
  });
217
217
  Object.defineProperty(exports, "emailTokens", {
218
218
  enumerable: true,
219
- get: function () { return chunkETYBZA5E_cjs.emailTokens; }
219
+ get: function () { return chunkIGVTLCHD_cjs.emailTokens; }
220
220
  });
221
221
  Object.defineProperty(exports, "emptyMailCompose", {
222
222
  enumerable: true,
223
- get: function () { return chunkETYBZA5E_cjs.emptyMailCompose; }
223
+ get: function () { return chunkIGVTLCHD_cjs.emptyMailCompose; }
224
224
  });
225
225
  Object.defineProperty(exports, "failContactInvites", {
226
226
  enumerable: true,
227
- get: function () { return chunkETYBZA5E_cjs.failContactInvites; }
227
+ get: function () { return chunkIGVTLCHD_cjs.failContactInvites; }
228
228
  });
229
229
  Object.defineProperty(exports, "formToContactCard", {
230
230
  enumerable: true,
231
- get: function () { return chunkETYBZA5E_cjs.formToContactCard; }
231
+ get: function () { return chunkIGVTLCHD_cjs.formToContactCard; }
232
232
  });
233
233
  Object.defineProperty(exports, "hasCalendarPart", {
234
234
  enumerable: true,
235
- get: function () { return chunkETYBZA5E_cjs.hasCalendarPart; }
235
+ get: function () { return chunkIGVTLCHD_cjs.hasCalendarPart; }
236
236
  });
237
237
  Object.defineProperty(exports, "inviteEmail", {
238
238
  enumerable: true,
239
- get: function () { return chunkETYBZA5E_cjs.inviteEmail; }
239
+ get: function () { return chunkIGVTLCHD_cjs.inviteEmail; }
240
240
  });
241
241
  Object.defineProperty(exports, "isInboxFolder", {
242
242
  enumerable: true,
243
- get: function () { return chunkETYBZA5E_cjs.isInboxFolder; }
243
+ get: function () { return chunkIGVTLCHD_cjs.isInboxFolder; }
244
244
  });
245
245
  Object.defineProperty(exports, "isInvitableEmail", {
246
246
  enumerable: true,
247
- get: function () { return chunkETYBZA5E_cjs.isInvitableEmail; }
247
+ get: function () { return chunkIGVTLCHD_cjs.isInvitableEmail; }
248
248
  });
249
249
  Object.defineProperty(exports, "mailAddressLabel", {
250
250
  enumerable: true,
251
- get: function () { return chunkETYBZA5E_cjs.mailAddressLabel; }
251
+ get: function () { return chunkIGVTLCHD_cjs.mailAddressLabel; }
252
252
  });
253
253
  Object.defineProperty(exports, "matchesContact", {
254
254
  enumerable: true,
255
- get: function () { return chunkETYBZA5E_cjs.matchesContact; }
255
+ get: function () { return chunkIGVTLCHD_cjs.matchesContact; }
256
256
  });
257
257
  Object.defineProperty(exports, "normalizeVCardDate", {
258
258
  enumerable: true,
259
- get: function () { return chunkETYBZA5E_cjs.normalizeVCardDate; }
259
+ get: function () { return chunkIGVTLCHD_cjs.normalizeVCardDate; }
260
260
  });
261
261
  Object.defineProperty(exports, "parseEmails", {
262
262
  enumerable: true,
263
- get: function () { return chunkETYBZA5E_cjs.parseEmails; }
263
+ get: function () { return chunkIGVTLCHD_cjs.parseEmails; }
264
264
  });
265
265
  Object.defineProperty(exports, "parseMailRecipients", {
266
266
  enumerable: true,
267
- get: function () { return chunkETYBZA5E_cjs.parseMailRecipients; }
267
+ get: function () { return chunkIGVTLCHD_cjs.parseMailRecipients; }
268
268
  });
269
269
  Object.defineProperty(exports, "planContactInvites", {
270
270
  enumerable: true,
271
- get: function () { return chunkETYBZA5E_cjs.planContactInvites; }
271
+ get: function () { return chunkIGVTLCHD_cjs.planContactInvites; }
272
272
  });
273
273
  Object.defineProperty(exports, "primaryEmail", {
274
274
  enumerable: true,
275
- get: function () { return chunkETYBZA5E_cjs.primaryEmail; }
275
+ get: function () { return chunkIGVTLCHD_cjs.primaryEmail; }
276
276
  });
277
277
  Object.defineProperty(exports, "replyMailCompose", {
278
278
  enumerable: true,
279
- get: function () { return chunkETYBZA5E_cjs.replyMailCompose; }
279
+ get: function () { return chunkIGVTLCHD_cjs.replyMailCompose; }
280
280
  });
281
281
  Object.defineProperty(exports, "summarizeContactInvites", {
282
282
  enumerable: true,
283
- get: function () { return chunkETYBZA5E_cjs.summarizeContactInvites; }
283
+ get: function () { return chunkIGVTLCHD_cjs.summarizeContactInvites; }
284
284
  });
285
285
  Object.defineProperty(exports, "summarizeImport", {
286
286
  enumerable: true,
287
- get: function () { return chunkETYBZA5E_cjs.summarizeImport; }
287
+ get: function () { return chunkIGVTLCHD_cjs.summarizeImport; }
288
288
  });
289
289
  Object.defineProperty(exports, "summarizeUnsentInvites", {
290
290
  enumerable: true,
291
- get: function () { return chunkETYBZA5E_cjs.summarizeUnsentInvites; }
291
+ get: function () { return chunkIGVTLCHD_cjs.summarizeUnsentInvites; }
292
292
  });
293
293
  Object.defineProperty(exports, "toAddContactsRow", {
294
294
  enumerable: true,
295
- get: function () { return chunkETYBZA5E_cjs.toAddContactsRow; }
295
+ get: function () { return chunkIGVTLCHD_cjs.toAddContactsRow; }
296
296
  });
297
297
  Object.defineProperty(exports, "toAddContactsRows", {
298
298
  enumerable: true,
299
- get: function () { return chunkETYBZA5E_cjs.toAddContactsRows; }
299
+ get: function () { return chunkIGVTLCHD_cjs.toAddContactsRows; }
300
300
  });
301
301
  Object.defineProperty(exports, "toggleMailFolder", {
302
302
  enumerable: true,
303
- get: function () { return chunkETYBZA5E_cjs.toggleMailFolder; }
303
+ get: function () { return chunkIGVTLCHD_cjs.toggleMailFolder; }
304
304
  });
305
305
  Object.defineProperty(exports, "validateContactForm", {
306
306
  enumerable: true,
307
- get: function () { return chunkETYBZA5E_cjs.validateContactForm; }
307
+ get: function () { return chunkIGVTLCHD_cjs.validateContactForm; }
308
308
  });
309
309
  Object.defineProperty(exports, "DEFAULT_SHARE_CONTROL_LABELS", {
310
310
  enumerable: true,
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
  export { ContactCard, DEFAULT_CONTACT_CARD_LABELS, contactToVCard, downloadVCard, vCardFilename } from '../chunk-VQKGCV6H.js';
3
- export { ActionMenu, AddContactsForm, AddContactsResults, DEFAULT_ADD_CONTACTS_LABELS, DEFAULT_CONTACT_INVITE_LABELS, DEFAULT_CONTACT_OUTCOME_LABELS, DEFAULT_DM_ACCESS_REQUEST_BANNER_LABELS, DEFAULT_DM_GRANT_ACCESS_DIALOG_LABELS, DEFAULT_DM_THREAD_FRAME_LABELS, DEFAULT_MAIL_FOLDER_TREE_LABELS, DEFAULT_RECIPIENT_PICKER_LABELS, DmAccessRequestBanner, DmGrantAccessDialogView, DmInviteAvatar, DmThreadFrame, EMPTY_CONTACT_FORM, MAX_INVITE_EMAILS, MailActionBar, MailConversationView, MailDeliveryBadge, MailDeliveryList, MailDocumentPicker, MailFlagButton, MailFolderTree, MailGrid, MailMessageContent, MailMessagePreview, MailMessageView, MemberBulkActions, MemberListLoading, MemberMutedText, MemberNameCell, MemberRoleCell, NEEDS_CONNECTION, PlainMailBodyEditor, RecipientPicker, RoleSelect, applyContactInviteResults, buildMailFolderTree, contactName, contactOutcomeMessage, contactStatusLabel, contactToForm, descendantFolderIds, draftMailCompose, emailTokens, emptyMailCompose, failContactInvites, formToContactCard, hasCalendarPart, inviteEmail, isInboxFolder, isInvitableEmail, mailAddressLabel, matchesContact, normalizeVCardDate, parseEmails, parseMailRecipients, planContactInvites, primaryEmail, replyMailCompose, summarizeContactInvites, summarizeImport, summarizeUnsentInvites, toAddContactsRow, toAddContactsRows, toggleMailFolder, validateContactForm } from '../chunk-4AQ47AB4.js';
3
+ export { ActionMenu, AddContactsForm, AddContactsResults, DEFAULT_ADD_CONTACTS_LABELS, DEFAULT_CONTACT_INVITE_LABELS, DEFAULT_CONTACT_OUTCOME_LABELS, DEFAULT_DM_ACCESS_REQUEST_BANNER_LABELS, DEFAULT_DM_GRANT_ACCESS_DIALOG_LABELS, DEFAULT_DM_THREAD_FRAME_LABELS, DEFAULT_MAIL_FOLDER_TREE_LABELS, DEFAULT_RECIPIENT_PICKER_LABELS, DmAccessRequestBanner, DmGrantAccessDialogView, DmInviteAvatar, DmThreadFrame, EMPTY_CONTACT_FORM, MAX_INVITE_EMAILS, MailActionBar, MailConversationView, MailDeliveryBadge, MailDeliveryList, MailDocumentPicker, MailFlagButton, MailFolderTree, MailGrid, MailMessageContent, MailMessagePreview, MailMessageView, MemberBulkActions, MemberListLoading, MemberMutedText, MemberNameCell, MemberRoleCell, NEEDS_CONNECTION, PlainMailBodyEditor, RecipientPicker, RoleSelect, applyContactInviteResults, buildMailFolderTree, contactName, contactOutcomeMessage, contactStatusLabel, contactToForm, descendantFolderIds, draftMailCompose, emailTokens, emptyMailCompose, failContactInvites, formToContactCard, hasCalendarPart, inviteEmail, isInboxFolder, isInvitableEmail, mailAddressLabel, matchesContact, normalizeVCardDate, parseEmails, parseMailRecipients, planContactInvites, primaryEmail, replyMailCompose, summarizeContactInvites, summarizeImport, summarizeUnsentInvites, toAddContactsRow, toAddContactsRows, toggleMailFolder, validateContactForm } from '../chunk-DWSSFIK2.js';
4
4
  import '../chunk-NBV56SGU.js';
5
5
  export { DEFAULT_SHARE_CONTROL_LABELS, ShareControl } from '../chunk-K4BGOPGG.js';
6
- import '../chunk-7F5Z4K5W.js';
6
+ import '../chunk-IU5CHOEU.js';
7
7
  export { DEFAULT_DM_INVITE_CHIP_LABELS, DmInviteChip, DmThreadHeader } from '../chunk-2S3LT5KE.js';
8
8
  import '../chunk-SLSBJRWW.js';
9
9
  import '../chunk-TX2ZICS7.js';