@plumile/ui 0.1.115 → 0.1.117

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 (274) hide show
  1. package/lib/esm/admin/templates/admin_shell_layout/AdminShellLayout.js +15 -14
  2. package/lib/esm/admin/templates/admin_shell_layout/AdminShellLayout.js.map +1 -1
  3. package/lib/esm/atomic/molecules/markdown/components/MarkdownArticleContainer.css.js +0 -1
  4. package/lib/esm/atomic/molecules/markdown/components/MarkdownDelete.css.js +1 -0
  5. package/lib/esm/backoffice/organisms/backoffice_data_table/BackofficeDataTable.js +59 -56
  6. package/lib/esm/backoffice/organisms/backoffice_data_table/BackofficeDataTable.js.map +1 -1
  7. package/lib/esm/backoffice/organisms/backoffice_data_table/backofficeDataTable.css.js +2 -2
  8. package/lib/esm/backoffice/organisms/backoffice_data_table/backofficeDataTable.css.js.map +1 -1
  9. package/lib/esm/backoffice/organisms/backoffice_virtualized_connection_table/BackofficeVirtualizedConnectionTable.js +3 -2
  10. package/lib/esm/backoffice/organisms/backoffice_virtualized_connection_table/BackofficeVirtualizedConnectionTable.js.map +1 -1
  11. package/lib/esm/backoffice/templates/detail_page_template/DetailPageTemplate.js +42 -39
  12. package/lib/esm/backoffice/templates/detail_page_template/DetailPageTemplate.js.map +1 -1
  13. package/lib/esm/backoffice/templates/detail_page_template/detailPageTemplate.css.js +3 -3
  14. package/lib/esm/backoffice/templates/detail_page_template/detailPageTemplate.css.js.map +1 -1
  15. package/lib/esm/backoffice/templates/list_page_template/ListPageTemplate.js +45 -29
  16. package/lib/esm/backoffice/templates/list_page_template/ListPageTemplate.js.map +1 -1
  17. package/lib/esm/backoffice/templates/list_page_template/listPageTemplate.css.js +73 -13
  18. package/lib/esm/backoffice/templates/list_page_template/listPageTemplate.css.js.map +1 -1
  19. package/lib/esm/components/data-table/DataTable.css.js +52 -52
  20. package/lib/esm/components/data-table/DataTable.css.js.map +1 -1
  21. package/lib/esm/components/data-table/DataTable.js +43 -39
  22. package/lib/esm/components/data-table/DataTable.js.map +1 -1
  23. package/lib/esm/components/data-table/ResponsiveRecordList.css.js +7 -7
  24. package/lib/esm/components/data-table/ResponsiveRecordList.css.js.map +1 -1
  25. package/lib/esm/components/data-table/ResponsiveRecordList.js +86 -61
  26. package/lib/esm/components/data-table/ResponsiveRecordList.js.map +1 -1
  27. package/lib/esm/components/data-table/VirtualizedConnectionTable.js +158 -142
  28. package/lib/esm/components/data-table/VirtualizedConnectionTable.js.map +1 -1
  29. package/lib/esm/components/layout/AppShell.js +2 -1
  30. package/lib/esm/components/layout/AppShell.js.map +1 -1
  31. package/lib/esm/components/layout/PageShell.css.js +8 -8
  32. package/lib/esm/components/layout/PageShell.css.js.map +1 -1
  33. package/lib/esm/components/layout/PageShell.js +115 -107
  34. package/lib/esm/components/layout/PageShell.js.map +1 -1
  35. package/lib/esm/node_modules/dagre-d3-es/src/dagre/layout.js +49 -49
  36. package/lib/esm/node_modules/dagre-d3-es/src/dagre/position/bk.js +69 -69
  37. package/lib/esm/node_modules/es-toolkit/dist/_internal/globalThis.js +8 -0
  38. package/lib/esm/node_modules/es-toolkit/dist/_internal/globalThis.js.map +1 -0
  39. package/lib/esm/node_modules/es-toolkit/dist/_internal/isUnsafeProperty.js +8 -0
  40. package/lib/esm/node_modules/es-toolkit/dist/_internal/isUnsafeProperty.js.map +1 -0
  41. package/lib/esm/node_modules/es-toolkit/dist/compat/_internal/getSymbols.js +8 -0
  42. package/lib/esm/node_modules/es-toolkit/dist/compat/_internal/getSymbols.js.map +1 -0
  43. package/lib/esm/node_modules/es-toolkit/dist/compat/_internal/getTag.js +8 -0
  44. package/lib/esm/node_modules/es-toolkit/dist/compat/_internal/getTag.js.map +1 -0
  45. package/lib/esm/node_modules/es-toolkit/dist/compat/_internal/isPrototype.js +9 -0
  46. package/lib/esm/node_modules/es-toolkit/dist/compat/_internal/isPrototype.js.map +1 -0
  47. package/lib/esm/node_modules/es-toolkit/dist/compat/_internal/tags.js +6 -0
  48. package/lib/esm/node_modules/es-toolkit/dist/compat/_internal/tags.js.map +1 -0
  49. package/lib/esm/node_modules/es-toolkit/dist/compat/function/memoize.js +16 -0
  50. package/lib/esm/node_modules/es-toolkit/dist/compat/function/memoize.js.map +1 -0
  51. package/lib/esm/node_modules/es-toolkit/dist/compat/object/clone.js +101 -0
  52. package/lib/esm/node_modules/es-toolkit/dist/compat/object/clone.js.map +1 -0
  53. package/lib/esm/node_modules/es-toolkit/dist/compat/object/cloneDeep.js +9 -0
  54. package/lib/esm/node_modules/es-toolkit/dist/compat/object/cloneDeep.js.map +1 -0
  55. package/lib/esm/node_modules/es-toolkit/dist/compat/object/cloneDeepWith.js +33 -0
  56. package/lib/esm/node_modules/es-toolkit/dist/compat/object/cloneDeepWith.js.map +1 -0
  57. package/lib/esm/node_modules/es-toolkit/dist/compat/object/merge.js +10 -0
  58. package/lib/esm/node_modules/es-toolkit/dist/compat/object/merge.js.map +1 -0
  59. package/lib/esm/node_modules/es-toolkit/dist/compat/object/mergeWith.js +53 -0
  60. package/lib/esm/node_modules/es-toolkit/dist/compat/object/mergeWith.js.map +1 -0
  61. package/lib/esm/node_modules/es-toolkit/dist/compat/predicate/isArguments.js +9 -0
  62. package/lib/esm/node_modules/es-toolkit/dist/compat/predicate/isArguments.js.map +1 -0
  63. package/lib/esm/node_modules/es-toolkit/dist/compat/predicate/isArray.js +8 -0
  64. package/lib/esm/node_modules/es-toolkit/dist/compat/predicate/isArray.js.map +1 -0
  65. package/lib/esm/node_modules/es-toolkit/dist/compat/predicate/isArrayLike.js +9 -0
  66. package/lib/esm/node_modules/es-toolkit/dist/compat/predicate/isArrayLike.js.map +1 -0
  67. package/lib/esm/node_modules/es-toolkit/dist/compat/predicate/isArrayLikeObject.js +10 -0
  68. package/lib/esm/node_modules/es-toolkit/dist/compat/predicate/isArrayLikeObject.js.map +1 -0
  69. package/lib/esm/node_modules/es-toolkit/dist/compat/predicate/isEmpty.js +20 -0
  70. package/lib/esm/node_modules/es-toolkit/dist/compat/predicate/isEmpty.js.map +1 -0
  71. package/lib/esm/node_modules/es-toolkit/dist/compat/predicate/isObjectLike.js +8 -0
  72. package/lib/esm/node_modules/es-toolkit/dist/compat/predicate/isObjectLike.js.map +1 -0
  73. package/lib/esm/node_modules/es-toolkit/dist/compat/predicate/isPlainObject.js +16 -0
  74. package/lib/esm/node_modules/es-toolkit/dist/compat/predicate/isPlainObject.js.map +1 -0
  75. package/lib/esm/node_modules/es-toolkit/dist/compat/predicate/isTypedArray.js +9 -0
  76. package/lib/esm/node_modules/es-toolkit/dist/compat/predicate/isTypedArray.js.map +1 -0
  77. package/lib/esm/node_modules/es-toolkit/dist/function/noop.js +6 -0
  78. package/lib/esm/node_modules/es-toolkit/dist/function/noop.js.map +1 -0
  79. package/lib/esm/node_modules/es-toolkit/dist/object/clone.js +28 -0
  80. package/lib/esm/node_modules/es-toolkit/dist/object/clone.js.map +1 -0
  81. package/lib/esm/node_modules/es-toolkit/dist/object/cloneDeepWith.js +118 -0
  82. package/lib/esm/node_modules/es-toolkit/dist/object/cloneDeepWith.js.map +1 -0
  83. package/lib/esm/node_modules/es-toolkit/dist/predicate/isBuffer.js +9 -0
  84. package/lib/esm/node_modules/es-toolkit/dist/predicate/isBuffer.js.map +1 -0
  85. package/lib/esm/node_modules/es-toolkit/dist/predicate/isLength.js +8 -0
  86. package/lib/esm/node_modules/es-toolkit/dist/predicate/isLength.js.map +1 -0
  87. package/lib/esm/node_modules/es-toolkit/dist/predicate/isPrimitive.js +8 -0
  88. package/lib/esm/node_modules/es-toolkit/dist/predicate/isPrimitive.js.map +1 -0
  89. package/lib/esm/node_modules/es-toolkit/dist/predicate/isTypedArray.js +8 -0
  90. package/lib/esm/node_modules/es-toolkit/dist/predicate/isTypedArray.js.map +1 -0
  91. package/lib/esm/node_modules/lodash-es/_arrayLikeKeys.js +8 -8
  92. package/lib/esm/node_modules/lodash-es/_assignMergeValue.js +3 -3
  93. package/lib/esm/node_modules/lodash-es/_assignValue.js +3 -3
  94. package/lib/esm/node_modules/lodash-es/_baseClone.js +31 -31
  95. package/lib/esm/node_modules/lodash-es/_baseForOwn.js +3 -3
  96. package/lib/esm/node_modules/lodash-es/_baseIsEqualDeep.js +10 -10
  97. package/lib/esm/node_modules/lodash-es/_baseMerge.js +9 -9
  98. package/lib/esm/node_modules/lodash-es/_baseMergeDeep.js +17 -17
  99. package/lib/esm/node_modules/lodash-es/_baseOrderBy.js +11 -11
  100. package/lib/esm/node_modules/lodash-es/_baseRest.js +3 -3
  101. package/lib/esm/node_modules/lodash-es/_baseSet.js +4 -4
  102. package/lib/esm/node_modules/lodash-es/_baseSetToString.js +7 -7
  103. package/lib/esm/node_modules/lodash-es/_baseToString.js +5 -5
  104. package/lib/esm/node_modules/lodash-es/_createRange.js +3 -3
  105. package/lib/esm/node_modules/lodash-es/_createSet.js +5 -5
  106. package/lib/esm/node_modules/lodash-es/_flatRest.js +3 -3
  107. package/lib/esm/node_modules/lodash-es/_getSymbolsIn.js +7 -7
  108. package/lib/esm/node_modules/lodash-es/_getTag.js +7 -7
  109. package/lib/esm/node_modules/lodash-es/_hasPath.js +4 -4
  110. package/lib/esm/node_modules/lodash-es/_initCloneByTag.js +8 -8
  111. package/lib/esm/node_modules/lodash-es/_initCloneObject.js +3 -3
  112. package/lib/esm/node_modules/lodash-es/_isFlattenable.js +3 -3
  113. package/lib/esm/node_modules/lodash-es/_isIterateeCall.js +4 -4
  114. package/lib/esm/node_modules/lodash-es/_isKey.js +4 -4
  115. package/lib/esm/node_modules/lodash-es/_setToString.js +3 -3
  116. package/lib/esm/node_modules/lodash-es/defaults.js +9 -9
  117. package/lib/esm/node_modules/lodash-es/forIn.js +3 -3
  118. package/lib/esm/node_modules/lodash-es/isEmpty.js +6 -6
  119. package/lib/esm/node_modules/lodash-es/isPlainObject.js +4 -4
  120. package/lib/esm/node_modules/lodash-es/map.js +3 -3
  121. package/lib/esm/node_modules/lodash-es/merge.js +4 -4
  122. package/lib/esm/node_modules/lodash-es/toNumber.js +7 -7
  123. package/lib/esm/node_modules/lodash-es/union.js +5 -5
  124. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{architectureDiagram-Q4EWVU46.js → architectureDiagram-3BPJPVTR.js} +14 -12
  125. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{architectureDiagram-Q4EWVU46.js.map → architectureDiagram-3BPJPVTR.js.map} +1 -1
  126. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{blockDiagram-DXYQGD6D.js → blockDiagram-GPEHLZMM.js} +453 -428
  127. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/blockDiagram-GPEHLZMM.js.map +1 -0
  128. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{c4Diagram-AHTNJAMY.js → c4Diagram-AAUBKEIU.js} +5 -5
  129. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{c4Diagram-AHTNJAMY.js.map → c4Diagram-AAUBKEIU.js.map} +1 -1
  130. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{chunk-EDXVE4YY.js → chunk-2J33WTMH.js} +3 -3
  131. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{chunk-EDXVE4YY.js.map → chunk-2J33WTMH.js.map} +1 -1
  132. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{chunk-5FUZZQ4R.js → chunk-3OPIFGDE.js} +290 -262
  133. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/chunk-3OPIFGDE.js.map +1 -0
  134. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{chunk-5PVQY5BW.js → chunk-5ZQYHXKU.js} +6 -6
  135. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/chunk-5ZQYHXKU.js.map +1 -0
  136. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{chunk-4TB4RGXK.js → chunk-727SXJPM.js} +487 -391
  137. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/chunk-727SXJPM.js.map +1 -0
  138. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{chunk-OYMX7WX6.js → chunk-AQP2D5EJ.js} +157 -147
  139. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/chunk-AQP2D5EJ.js.map +1 -0
  140. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{chunk-ICPOFSXX.js → chunk-CSCIHK7Q.js} +193 -99
  141. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/chunk-CSCIHK7Q.js.map +1 -0
  142. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{chunk-ENJZ2VHE.js → chunk-KSCS5N6A.js} +14 -14
  143. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/chunk-KSCS5N6A.js.map +1 -0
  144. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{chunk-ZZ45TVLE.js → chunk-L5ZTLDWV.js} +4 -4
  145. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{chunk-ZZ45TVLE.js.map → chunk-L5ZTLDWV.js.map} +1 -1
  146. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{chunk-336JU56O.js → chunk-LZXEDZCA.js} +7 -7
  147. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{chunk-336JU56O.js.map → chunk-LZXEDZCA.js.map} +1 -1
  148. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{chunk-YZCP3GAM.js → chunk-ND2GUHAM.js} +3 -3
  149. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{chunk-YZCP3GAM.js.map → chunk-ND2GUHAM.js.map} +1 -1
  150. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{chunk-X2U36JSP.js → chunk-NZK2D7GU.js} +3 -3
  151. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{chunk-X2U36JSP.js.map → chunk-NZK2D7GU.js.map} +1 -1
  152. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{chunk-U2HBQHQK.js → chunk-O5CBEL6O.js} +4 -4
  153. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{chunk-U2HBQHQK.js.map → chunk-O5CBEL6O.js.map} +1 -1
  154. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{chunk-426QAEUC.js → chunk-WU5MYG2G.js} +3 -3
  155. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{chunk-426QAEUC.js.map → chunk-WU5MYG2G.js.map} +1 -1
  156. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{classDiagram-6PBFFD2Q.js → classDiagram-4FO5ZUOK.js} +13 -13
  157. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{classDiagram-6PBFFD2Q.js.map → classDiagram-4FO5ZUOK.js.map} +1 -1
  158. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{classDiagram-v2-HSJHXN6E.js → classDiagram-v2-Q7XG4LA2.js} +13 -13
  159. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{classDiagram-v2-HSJHXN6E.js.map → classDiagram-v2-Q7XG4LA2.js.map} +1 -1
  160. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{dagre-KV5264BT.js → dagre-BM42HDAG.js} +10 -10
  161. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{dagre-KV5264BT.js.map → dagre-BM42HDAG.js.map} +1 -1
  162. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{diagram-MMDJMWI5.js → diagram-2AECGRRQ.js} +5 -5
  163. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{diagram-MMDJMWI5.js.map → diagram-2AECGRRQ.js.map} +1 -1
  164. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{diagram-5BDNPKRD.js → diagram-5GNKFQAL.js} +5 -5
  165. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{diagram-5BDNPKRD.js.map → diagram-5GNKFQAL.js.map} +1 -1
  166. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/diagram-KO2AKTUF.js +435 -0
  167. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/diagram-KO2AKTUF.js.map +1 -0
  168. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{diagram-TYMM5635.js → diagram-LMA3HP47.js} +5 -5
  169. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{diagram-TYMM5635.js.map → diagram-LMA3HP47.js.map} +1 -1
  170. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{diagram-G4DWMVQ6.js → diagram-OG6HWLK6.js} +7 -7
  171. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{diagram-G4DWMVQ6.js.map → diagram-OG6HWLK6.js.map} +1 -1
  172. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{erDiagram-SMLLAGMA.js → erDiagram-TEJ5UH35.js} +11 -11
  173. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{erDiagram-SMLLAGMA.js.map → erDiagram-TEJ5UH35.js.map} +1 -1
  174. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{flowDiagram-DWJPFMVM.js → flowDiagram-I6XJVG4X.js} +12 -12
  175. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{flowDiagram-DWJPFMVM.js.map → flowDiagram-I6XJVG4X.js.map} +1 -1
  176. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{ganttDiagram-T4ZO3ILL.js → ganttDiagram-6RSMTGT7.js} +9 -6
  177. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/ganttDiagram-6RSMTGT7.js.map +1 -0
  178. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{gitGraphDiagram-UUTBAWPF.js → gitGraphDiagram-PVQCEYII.js} +4 -4
  179. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{gitGraphDiagram-UUTBAWPF.js.map → gitGraphDiagram-PVQCEYII.js.map} +1 -1
  180. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{infoDiagram-42DDH7IO.js → infoDiagram-5YYISTIA.js} +5 -5
  181. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{infoDiagram-42DDH7IO.js.map → infoDiagram-5YYISTIA.js.map} +1 -1
  182. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{ishikawaDiagram-UXIWVN3A.js → ishikawaDiagram-YF4QCWOH.js} +5 -5
  183. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{ishikawaDiagram-UXIWVN3A.js.map → ishikawaDiagram-YF4QCWOH.js.map} +1 -1
  184. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{journeyDiagram-VCZTEJTY.js → journeyDiagram-JHISSGLW.js} +4 -4
  185. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{journeyDiagram-VCZTEJTY.js.map → journeyDiagram-JHISSGLW.js.map} +1 -1
  186. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{kanban-definition-6JOO6SKY.js → kanban-definition-UN3LZRKU.js} +9 -9
  187. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{kanban-definition-6JOO6SKY.js.map → kanban-definition-UN3LZRKU.js.map} +1 -1
  188. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{mindmap-definition-QFDTVHPH.js → mindmap-definition-RKZ34NQL.js} +12 -12
  189. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{mindmap-definition-QFDTVHPH.js.map → mindmap-definition-RKZ34NQL.js.map} +1 -1
  190. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{pieDiagram-DEJITSTG.js → pieDiagram-4H26LBE5.js} +5 -5
  191. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{pieDiagram-DEJITSTG.js.map → pieDiagram-4H26LBE5.js.map} +1 -1
  192. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{quadrantDiagram-34T5L4WZ.js → quadrantDiagram-W4KKPZXB.js} +316 -289
  193. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/quadrantDiagram-W4KKPZXB.js.map +1 -0
  194. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{requirementDiagram-MS252O5E.js → requirementDiagram-4Y6WPE33.js} +11 -11
  195. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{requirementDiagram-MS252O5E.js.map → requirementDiagram-4Y6WPE33.js.map} +1 -1
  196. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{sankeyDiagram-XADWPNL6.js → sankeyDiagram-5OEKKPKP.js} +80 -31
  197. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{sankeyDiagram-XADWPNL6.js.map → sankeyDiagram-5OEKKPKP.js.map} +1 -1
  198. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{sequenceDiagram-FGHM5R23.js → sequenceDiagram-3UESZ5HK.js} +17 -10
  199. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/sequenceDiagram-3UESZ5HK.js.map +1 -0
  200. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{stateDiagram-FHFEXIEX.js → stateDiagram-AJRCARHV.js} +12 -12
  201. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{stateDiagram-FHFEXIEX.js.map → stateDiagram-AJRCARHV.js.map} +1 -1
  202. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{stateDiagram-v2-QKLJ7IA2.js → stateDiagram-v2-BHNVJYJU.js} +12 -12
  203. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{stateDiagram-v2-QKLJ7IA2.js.map → stateDiagram-v2-BHNVJYJU.js.map} +1 -1
  204. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{timeline-definition-GMOUNBTQ.js → timeline-definition-PNZ67QCA.js} +5 -5
  205. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{timeline-definition-GMOUNBTQ.js.map → timeline-definition-PNZ67QCA.js.map} +1 -1
  206. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{vennDiagram-DHZGUBPP.js → vennDiagram-CIIHVFJN.js} +5 -5
  207. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{vennDiagram-DHZGUBPP.js.map → vennDiagram-CIIHVFJN.js.map} +1 -1
  208. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{wardleyDiagram-NUSXRM2D.js → wardleyDiagram-YWT4CUSO.js} +188 -122
  209. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/wardleyDiagram-YWT4CUSO.js.map +1 -0
  210. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{xychartDiagram-5P7HB3ND.js → xychartDiagram-2RQKCTM6.js} +6 -6
  211. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/{xychartDiagram-5P7HB3ND.js.map → xychartDiagram-2RQKCTM6.js.map} +1 -1
  212. package/lib/esm/node_modules/mermaid/dist/mermaid.core.js +308 -281
  213. package/lib/esm/node_modules/mermaid/dist/mermaid.core.js.map +1 -1
  214. package/lib/esm/node_modules/stylis/src/Enum.js +2 -2
  215. package/lib/esm/node_modules/stylis/src/Enum.js.map +1 -1
  216. package/lib/esm/node_modules/stylis/src/Middleware.js +13 -0
  217. package/lib/esm/node_modules/stylis/src/Middleware.js.map +1 -0
  218. package/lib/esm/node_modules/uuid/dist/rng.js +9 -0
  219. package/lib/esm/node_modules/uuid/dist/rng.js.map +1 -0
  220. package/lib/esm/node_modules/uuid/dist/{esm-browser/stringify.js → stringify.js} +1 -1
  221. package/lib/esm/node_modules/uuid/dist/stringify.js.map +1 -0
  222. package/lib/esm/node_modules/uuid/dist/v4.js +21 -0
  223. package/lib/esm/node_modules/uuid/dist/v4.js.map +1 -0
  224. package/lib/esm/style.css +1 -1
  225. package/lib/types/admin/templates/admin_shell_layout/AdminShellLayout.d.ts +3 -2
  226. package/lib/types/admin/templates/admin_shell_layout/AdminShellLayout.d.ts.map +1 -1
  227. package/lib/types/backoffice/organisms/backoffice_data_table/BackofficeDataTable.d.ts +3 -2
  228. package/lib/types/backoffice/organisms/backoffice_data_table/BackofficeDataTable.d.ts.map +1 -1
  229. package/lib/types/backoffice/organisms/backoffice_data_table/backofficeDataTable.css.d.ts +1 -0
  230. package/lib/types/backoffice/organisms/backoffice_data_table/backofficeDataTable.css.d.ts.map +1 -1
  231. package/lib/types/backoffice/organisms/backoffice_virtualized_connection_table/BackofficeVirtualizedConnectionTable.d.ts +3 -2
  232. package/lib/types/backoffice/organisms/backoffice_virtualized_connection_table/BackofficeVirtualizedConnectionTable.d.ts.map +1 -1
  233. package/lib/types/backoffice/templates/detail_page_template/DetailPageTemplate.d.ts.map +1 -1
  234. package/lib/types/backoffice/templates/detail_page_template/detailPageTemplate.css.d.ts +5 -0
  235. package/lib/types/backoffice/templates/detail_page_template/detailPageTemplate.css.d.ts.map +1 -1
  236. package/lib/types/backoffice/templates/list_page_template/ListPageTemplate.d.ts +1 -0
  237. package/lib/types/backoffice/templates/list_page_template/ListPageTemplate.d.ts.map +1 -1
  238. package/lib/types/backoffice/templates/list_page_template/listPageTemplate.css.d.ts +17 -2
  239. package/lib/types/backoffice/templates/list_page_template/listPageTemplate.css.d.ts.map +1 -1
  240. package/lib/types/components/data-table/DataTable.css.d.ts +2 -0
  241. package/lib/types/components/data-table/DataTable.css.d.ts.map +1 -1
  242. package/lib/types/components/data-table/DataTable.d.ts +5 -2
  243. package/lib/types/components/data-table/DataTable.d.ts.map +1 -1
  244. package/lib/types/components/data-table/ResponsiveRecordList.css.d.ts +2 -0
  245. package/lib/types/components/data-table/ResponsiveRecordList.css.d.ts.map +1 -1
  246. package/lib/types/components/data-table/ResponsiveRecordList.d.ts +1 -1
  247. package/lib/types/components/data-table/ResponsiveRecordList.d.ts.map +1 -1
  248. package/lib/types/components/data-table/VirtualizedConnectionTable.d.ts +3 -2
  249. package/lib/types/components/data-table/VirtualizedConnectionTable.d.ts.map +1 -1
  250. package/lib/types/components/layout/AppShell.d.ts +3 -2
  251. package/lib/types/components/layout/AppShell.d.ts.map +1 -1
  252. package/lib/types/components/layout/PageShell.css.d.ts +3 -0
  253. package/lib/types/components/layout/PageShell.css.d.ts.map +1 -1
  254. package/lib/types/components/layout/PageShell.d.ts +3 -1
  255. package/lib/types/components/layout/PageShell.d.ts.map +1 -1
  256. package/package.json +6 -6
  257. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/blockDiagram-DXYQGD6D.js.map +0 -1
  258. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/chunk-4TB4RGXK.js.map +0 -1
  259. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/chunk-5FUZZQ4R.js.map +0 -1
  260. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/chunk-5PVQY5BW.js.map +0 -1
  261. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/chunk-ENJZ2VHE.js.map +0 -1
  262. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/chunk-ICPOFSXX.js.map +0 -1
  263. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/chunk-OYMX7WX6.js.map +0 -1
  264. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/ganttDiagram-T4ZO3ILL.js.map +0 -1
  265. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/quadrantDiagram-34T5L4WZ.js.map +0 -1
  266. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/sequenceDiagram-FGHM5R23.js.map +0 -1
  267. package/lib/esm/node_modules/mermaid/dist/chunks/mermaid.core/wardleyDiagram-NUSXRM2D.js.map +0 -1
  268. package/lib/esm/node_modules/uuid/dist/esm-browser/native.js +0 -5
  269. package/lib/esm/node_modules/uuid/dist/esm-browser/native.js.map +0 -1
  270. package/lib/esm/node_modules/uuid/dist/esm-browser/rng.js +0 -13
  271. package/lib/esm/node_modules/uuid/dist/esm-browser/rng.js.map +0 -1
  272. package/lib/esm/node_modules/uuid/dist/esm-browser/stringify.js.map +0 -1
  273. package/lib/esm/node_modules/uuid/dist/esm-browser/v4.js +0 -20
  274. package/lib/esm/node_modules/uuid/dist/esm-browser/v4.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"DataTable.js","names":[],"sources":["../../../../src/components/data-table/DataTable.tsx"],"sourcesContent":["import { type CSSProperties, type JSX } from 'react';\n\nimport * as styles from './DataTable.css.js';\nimport type { DataTableBreakpoint } from './tableBreakpoints.js';\nimport { cx } from '../../theme/tools.js';\nimport { useUiTranslation } from '../../i18n/useUiTranslation.js';\nimport type { SlotClasses } from '../../styles/slots.js';\n\nexport type DataTableColumn<Row> = {\n id: string;\n header: JSX.Element | string;\n cell: (row: Row) => JSX.Element | string | null;\n minVisibleAt?: DataTableBreakpoint;\n className?: string;\n isPrimary?: boolean;\n align?: 'left' | 'center' | 'right';\n priority?: 'primary' | 'important' | 'secondary' | 'debug';\n mobileRole?:\n | 'title'\n | 'subtitle'\n | 'meta'\n | 'badge'\n | 'status'\n | 'action'\n | 'hidden';\n};\n\nexport type GetRowId<Row> = (row: Row, index: number) => string;\n\nexport type DataTableKind = NonNullable<\n Parameters<typeof styles.container>[0]\n>['kind'];\n\nexport type DataTableDensity = NonNullable<\n Parameters<typeof styles.densityRecipe>[0]\n>['density'];\n\nexport type DataTableRowState = NonNullable<\n Parameters<typeof styles.rowStateRecipe>[0]\n>['state'];\n\nexport type DataTableHeaderBehavior = {\n sticky?: boolean;\n offsetTop?: number;\n};\n\ntype DataTableSlot =\n | 'container'\n | 'header'\n | 'headerRow'\n | 'headerCell'\n | 'primaryHeaderCell'\n | 'body'\n | 'row'\n | 'rowEven'\n | 'rowOdd'\n | 'cell'\n | 'primaryCell'\n | 'emptyRow'\n | 'emptyCell';\n\nexport type DataTableProps<Row> = {\n columns: readonly DataTableColumn<Row>[];\n rows: readonly Row[];\n getRowId: GetRowId<Row>;\n emptyState?: JSX.Element;\n className?: string;\n headerClassName?: string;\n bodyClassName?: string;\n rowClassName?: (row: Row, index: number) => string | null | undefined;\n gridTemplateClassName?: string;\n gridTemplateColumns?: string;\n kind?: DataTableKind;\n density?: DataTableDensity;\n headerBehavior?: DataTableHeaderBehavior;\n rowState?: (row: Row, index: number) => DataTableRowState;\n classes?: SlotClasses<DataTableSlot>;\n ariaLabel?: string;\n ariaLabelledBy?: string;\n};\n\nconst DEFAULT_TEMPLATE_CELL = 'minmax(0, 1fr)';\n\nconst getVisibilityClass = (minVisibleAt?: DataTableBreakpoint) => {\n if (minVisibleAt == null) {\n return null;\n }\n\n return styles.hideBelowRecipe({ minVisibleAt });\n};\n\nconst buildInlineTemplate = (\n columnCount: number,\n gridTemplateColumns?: string,\n): CSSProperties => {\n if (typeof gridTemplateColumns === 'string' && gridTemplateColumns !== '') {\n return { gridTemplateColumns };\n }\n return {\n gridTemplateColumns: `repeat(${columnCount}, ${DEFAULT_TEMPLATE_CELL})`,\n };\n};\n\n/**\n * Generic responsive data table component.\n */\nexport const DataTable = <Row,>({\n columns,\n rows,\n getRowId,\n emptyState,\n className,\n headerClassName,\n bodyClassName,\n rowClassName,\n gridTemplateClassName,\n gridTemplateColumns,\n kind,\n density,\n headerBehavior,\n rowState,\n classes,\n ariaLabel,\n ariaLabelledBy,\n}: DataTableProps<Row>): JSX.Element => {\n const { t } = useUiTranslation();\n const resolvedKind: DataTableKind = kind ?? 'default';\n const resolvedAriaLabel = ariaLabel ?? t('common.table.label');\n let tableAriaLabel: string | undefined = resolvedAriaLabel;\n if (ariaLabelledBy != null) {\n tableAriaLabel = undefined;\n }\n const defaultEmptyState = (\n <div className={cx(styles.emptyCell, classes?.emptyCell)}>\n {t('common.table.empty')}\n </div>\n ) as JSX.Element;\n const resolvedEmptyState = emptyState ?? defaultEmptyState;\n const showEmpty = rows.length === 0;\n\n let inlineTemplateStyle: CSSProperties | undefined;\n if (gridTemplateClassName == null) {\n inlineTemplateStyle = buildInlineTemplate(\n columns.length,\n gridTemplateColumns,\n );\n }\n let headerStickyClass: string | null = null;\n if (headerBehavior?.sticky === true) {\n headerStickyClass = styles.stickyHeader;\n }\n let headerStyle: CSSProperties | undefined;\n if (headerBehavior?.offsetTop != null) {\n headerStyle = { top: headerBehavior.offsetTop };\n }\n\n const resolvedDensity: DataTableDensity = density ?? 'default';\n const sharedRowClasses: string[] = [\n styles.densityRecipe({ density: resolvedDensity }),\n ];\n if (gridTemplateClassName != null) {\n sharedRowClasses.push(gridTemplateClassName);\n }\n\n let rowsContent: JSX.Element;\n if (showEmpty) {\n rowsContent = (\n <div className={cx(styles.emptyRow, classes?.emptyRow)} role=\"row\">\n <div role=\"cell\">{resolvedEmptyState}</div>\n </div>\n );\n } else {\n rowsContent = (\n <>\n {rows.map((row, index) => {\n const rowId = getRowId(row, index);\n const rowClasses = [styles.row({ kind: resolvedKind }), classes?.row];\n const state = rowState?.(row, index);\n if (state != null) {\n rowClasses.push(styles.rowStateRecipe({ state }));\n }\n if (index % 2 === 0) {\n rowClasses.push(\n styles.rowEven({ kind: resolvedKind }),\n classes?.rowEven,\n );\n } else {\n rowClasses.push(\n styles.rowOdd({ kind: resolvedKind }),\n classes?.rowOdd,\n );\n }\n for (const sharedClass of sharedRowClasses) {\n rowClasses.push(sharedClass);\n }\n\n if (rowClassName != null) {\n const customClass = rowClassName(row, index);\n if (customClass != null) {\n rowClasses.push(customClass);\n }\n }\n\n return (\n <div\n key={rowId}\n role=\"row\"\n className={cx(...rowClasses)}\n style={inlineTemplateStyle}\n >\n {columns.map((column) => {\n const cellClasses = [\n styles.cell({ kind: resolvedKind }),\n classes?.cell,\n ];\n const visibilityClass = getVisibilityClass(column.minVisibleAt);\n\n if (visibilityClass != null) {\n cellClasses.push(visibilityClass);\n }\n\n if (column.className != null) {\n cellClasses.push(column.className);\n }\n if (column.isPrimary) {\n cellClasses.push(styles.primaryCell, classes?.primaryCell);\n }\n if (column.align != null) {\n cellClasses.push(styles.alignRecipe({ align: column.align }));\n }\n\n const content = column.cell(row);\n\n return (\n <div\n key={column.id}\n role=\"cell\"\n className={cx(...cellClasses)}\n >\n {content}\n </div>\n );\n })}\n </div>\n );\n })}\n </>\n );\n }\n\n return (\n <div\n className={cx(\n styles.container({ kind: resolvedKind }),\n classes?.container,\n className,\n )}\n role=\"table\"\n aria-label={tableAriaLabel}\n aria-labelledby={ariaLabelledBy}\n >\n <div\n className={cx(\n styles.header({ kind: resolvedKind }),\n headerStickyClass,\n classes?.header,\n headerClassName,\n )}\n style={headerStyle}\n role=\"rowgroup\"\n >\n <div\n className={cx(\n styles.headerRow,\n classes?.headerRow,\n ...sharedRowClasses,\n )}\n role=\"row\"\n style={inlineTemplateStyle}\n >\n {columns.map((column) => {\n const headerClasses = [\n styles.headerCell({ kind: resolvedKind }),\n classes?.headerCell,\n ];\n const visibilityClass = getVisibilityClass(column.minVisibleAt);\n if (visibilityClass != null) {\n headerClasses.push(visibilityClass);\n }\n\n if (column.className != null) {\n headerClasses.push(column.className);\n }\n if (column.isPrimary) {\n headerClasses.push(\n styles.primaryHeaderCell,\n classes?.primaryHeaderCell,\n );\n }\n if (column.align != null) {\n headerClasses.push(styles.alignRecipe({ align: column.align }));\n }\n\n return (\n <div\n key={column.id}\n role=\"columnheader\"\n className={cx(...headerClasses)}\n >\n {column.header}\n </div>\n );\n })}\n </div>\n </div>\n\n <div\n className={cx(\n styles.body({ kind: resolvedKind }),\n classes?.body,\n bodyClassName,\n )}\n role=\"rowgroup\"\n >\n {rowsContent}\n </div>\n </div>\n );\n};\n\nexport const __test = {\n getVisibilityClass,\n buildInlineTemplate,\n} as const;\n"],"mappings":";;;;;AAiFA,IAAM,IAAwB,kBAExB,KAAsB,MACtB,KAAgB,OACX,OAGF,EAAuB,EAAE,iBAAc,CAAC,EAG3C,KACJ,GACA,MAEI,OAAO,KAAwB,YAAY,MAAwB,KAC9D,EAAE,wBAAqB,GAEzB,EACL,qBAAqB,UAAU,EAAY,IAAI,EAAsB,IACtE,EAMU,KAAmB,EAC9B,YACA,SACA,aACA,eACA,cACA,oBACA,kBACA,iBACA,0BACA,wBACA,SACA,YACA,mBACA,aACA,YACA,cACA,wBACsC;CACtC,IAAM,EAAE,SAAM,GAAkB,EAC1B,IAA8B,KAAQ,WAExC,IADsB,KAAa,EAAE,qBAAqB;CAE9D,AAAI,KAAkB,SACpB,IAAiB,KAAA;CAEnB,IAAM,IACJ,kBAAC,OAAD;EAAK,WAAW,EAAG,GAAkB,GAAS,UAAU;YACrD,EAAE,qBAAqB;EACpB,CAAA,EAEF,IAAqB,KAAc,GACnC,IAAY,EAAK,WAAW,GAE9B;CACJ,AAAI,MACF,IAAsB,EACpB,EAAQ,QACR,EACD;CAEH,IAAI,IAAmC;CACvC,AAAI,GAAgB,WAAW,OAC7B,IAAoB;CAEtB,IAAI;CACJ,AAAI,GAAgB,aAAa,SAC/B,IAAc,EAAE,KAAK,EAAe,WAAW;CAIjD,IAAM,IAA6B,CACjC,EAAqB,EAAE,SAFiB,KAAW,WAEF,CAAC,CACnD;CACD,AAAI,KAAyB,QAC3B,EAAiB,KAAK,EAAsB;CAG9C,IAAI;CAsFJ,OArFA,AAOE,IAPE,IAEA,kBAAC,OAAD;EAAK,WAAW,EAAG,GAAiB,GAAS,SAAS;EAAE,MAAK;YAC3D,kBAAC,OAAD;GAAK,MAAK;aAAQ;GAAyB,CAAA;EACvC,CAAA,GAIN,kBAAA,GAAA,EAAA,UACG,EAAK,KAAK,GAAK,MAAU;EACxB,IAAM,IAAQ,EAAS,GAAK,EAAM,EAC5B,IAAa,CAAC,EAAW,EAAE,MAAM,GAAc,CAAC,EAAE,GAAS,IAAI,EAC/D,IAAQ,IAAW,GAAK,EAAM;EAIpC,AAHI,KAAS,QACX,EAAW,KAAK,EAAsB,EAAE,UAAO,CAAC,CAAC,EAE/C,IAAQ,KAAM,IAChB,EAAW,KACT,EAAe,EAAE,MAAM,GAAc,CAAC,EACtC,GAAS,QACV,GAED,EAAW,KACT,EAAc,EAAE,MAAM,GAAc,CAAC,EACrC,GAAS,OACV;EAEH,KAAK,IAAM,KAAe,GACxB,EAAW,KAAK,EAAY;EAG9B,IAAI,KAAgB,MAAM;GACxB,IAAM,IAAc,EAAa,GAAK,EAAM;GAC5C,AAAI,KAAe,QACjB,EAAW,KAAK,EAAY;;EAIhC,OACE,kBAAC,OAAD;GAEE,MAAK;GACL,WAAW,EAAG,GAAG,EAAW;GAC5B,OAAO;aAEN,EAAQ,KAAK,MAAW;IACvB,IAAM,IAAc,CAClB,EAAY,EAAE,MAAM,GAAc,CAAC,EACnC,GAAS,KACV,EACK,IAAkB,EAAmB,EAAO,aAAa;IAY/D,AAVI,KAAmB,QACrB,EAAY,KAAK,EAAgB,EAG/B,EAAO,aAAa,QACtB,EAAY,KAAK,EAAO,UAAU,EAEhC,EAAO,aACT,EAAY,KAAK,GAAoB,GAAS,YAAY,EAExD,EAAO,SAAS,QAClB,EAAY,KAAK,EAAmB,EAAE,OAAO,EAAO,OAAO,CAAC,CAAC;IAG/D,IAAM,IAAU,EAAO,KAAK,EAAI;IAEhC,OACE,kBAAC,OAAD;KAEE,MAAK;KACL,WAAW,EAAG,GAAG,EAAY;eAE5B;KACG,EALC,EAAO,GAKR;KAER;GACE,EAtCC,EAsCD;GAER,EACD,CAAA,EAKL,kBAAC,OAAD;EACE,WAAW,EACT,EAAiB,EAAE,MAAM,GAAc,CAAC,EACxC,GAAS,WACT,EACD;EACD,MAAK;EACL,cAAY;EACZ,mBAAiB;YARnB,CAUE,kBAAC,OAAD;GACE,WAAW,EACT,EAAc,EAAE,MAAM,GAAc,CAAC,EACrC,GACA,GAAS,QACT,EACD;GACD,OAAO;GACP,MAAK;aAEL,kBAAC,OAAD;IACE,WAAW,EACT,GACA,GAAS,WACT,GAAG,EACJ;IACD,MAAK;IACL,OAAO;cAEN,EAAQ,KAAK,MAAW;KACvB,IAAM,IAAgB,CACpB,EAAkB,EAAE,MAAM,GAAc,CAAC,EACzC,GAAS,WACV,EACK,IAAkB,EAAmB,EAAO,aAAa;KAkB/D,OAjBI,KAAmB,QACrB,EAAc,KAAK,EAAgB,EAGjC,EAAO,aAAa,QACtB,EAAc,KAAK,EAAO,UAAU,EAElC,EAAO,aACT,EAAc,KACZ,GACA,GAAS,kBACV,EAEC,EAAO,SAAS,QAClB,EAAc,KAAK,EAAmB,EAAE,OAAO,EAAO,OAAO,CAAC,CAAC,EAI/D,kBAAC,OAAD;MAEE,MAAK;MACL,WAAW,EAAG,GAAG,EAAc;gBAE9B,EAAO;MACJ,EALC,EAAO,GAKR;MAER;IACE,CAAA;GACF,CAAA,EAEN,kBAAC,OAAD;GACE,WAAW,EACT,EAAY,EAAE,MAAM,GAAc,CAAC,EACnC,GAAS,MACT,EACD;GACD,MAAK;aAEJ;GACG,CAAA,CACF;;GAIG,IAAS;CACpB;CACA;CACD"}
1
+ {"version":3,"file":"DataTable.js","names":[],"sources":["../../../../src/components/data-table/DataTable.tsx"],"sourcesContent":["import { type CSSProperties, type JSX, type ReactNode } from 'react';\n\nimport * as styles from './DataTable.css.js';\nimport type { DataTableBreakpoint } from './tableBreakpoints.js';\nimport { cx } from '../../theme/tools.js';\nimport { useUiTranslation } from '../../i18n/useUiTranslation.js';\nimport type { SlotClasses } from '../../styles/slots.js';\n\nexport type DataTableColumn<Row> = {\n id: string;\n header: JSX.Element | string;\n cell: (row: Row) => JSX.Element | string | null;\n minVisibleAt?: DataTableBreakpoint;\n className?: string;\n isPrimary?: boolean;\n align?: 'left' | 'center' | 'right';\n priority?: 'primary' | 'important' | 'secondary' | 'debug';\n mobileRole?:\n | 'title'\n | 'subtitle'\n | 'meta'\n | 'badge'\n | 'status'\n | 'action'\n | 'hidden';\n};\n\nexport type GetRowId<Row> = (row: Row, index: number) => string;\n\nexport type DataTableKind = NonNullable<\n Parameters<typeof styles.container>[0]\n>['kind'];\n\nexport type DataTableDensity = NonNullable<\n Parameters<typeof styles.densityRecipe>[0]\n>['density'];\n\nexport type DataTableRowState = NonNullable<\n Parameters<typeof styles.rowStateRecipe>[0]\n>['state'];\n\nexport type DataTableHeaderBehavior = {\n sticky?: boolean;\n offsetTop?: number;\n};\n\nexport type DataTableBodyScrollMode = 'page' | 'contained';\n\ntype DataTableSlot =\n | 'container'\n | 'header'\n | 'headerRow'\n | 'headerCell'\n | 'primaryHeaderCell'\n | 'body'\n | 'row'\n | 'rowEven'\n | 'rowOdd'\n | 'cell'\n | 'primaryCell'\n | 'emptyRow'\n | 'emptyCell';\n\nexport type DataTableProps<Row> = {\n columns: readonly DataTableColumn<Row>[];\n rows: readonly Row[];\n getRowId: GetRowId<Row>;\n emptyState?: JSX.Element;\n className?: string;\n headerClassName?: string;\n bodyClassName?: string;\n rowClassName?: (row: Row, index: number) => string | null | undefined;\n gridTemplateClassName?: string;\n gridTemplateColumns?: string;\n kind?: DataTableKind;\n density?: DataTableDensity;\n headerBehavior?: DataTableHeaderBehavior;\n bodyScrollMode?: DataTableBodyScrollMode;\n rowState?: (row: Row, index: number) => DataTableRowState;\n classes?: SlotClasses<DataTableSlot>;\n ariaLabel?: string;\n ariaLabelledBy?: string;\n bodyFooterNode?: ReactNode;\n};\n\nconst DEFAULT_TEMPLATE_CELL = 'minmax(0, 1fr)';\n\nconst getVisibilityClass = (minVisibleAt?: DataTableBreakpoint) => {\n if (minVisibleAt == null) {\n return null;\n }\n\n return styles.hideBelowRecipe({ minVisibleAt });\n};\n\nconst buildInlineTemplate = (\n columnCount: number,\n gridTemplateColumns?: string,\n): CSSProperties => {\n if (typeof gridTemplateColumns === 'string' && gridTemplateColumns !== '') {\n return { gridTemplateColumns };\n }\n return {\n gridTemplateColumns: `repeat(${columnCount}, ${DEFAULT_TEMPLATE_CELL})`,\n };\n};\n\n/**\n * Generic responsive data table component.\n */\nexport const DataTable = <Row,>({\n columns,\n rows,\n getRowId,\n emptyState,\n className,\n headerClassName,\n bodyClassName,\n rowClassName,\n gridTemplateClassName,\n gridTemplateColumns,\n kind,\n density,\n headerBehavior,\n bodyScrollMode = 'page',\n rowState,\n classes,\n ariaLabel,\n ariaLabelledBy,\n bodyFooterNode,\n}: DataTableProps<Row>): JSX.Element => {\n const { t } = useUiTranslation();\n const resolvedKind: DataTableKind = kind ?? 'default';\n const resolvedAriaLabel = ariaLabel ?? t('common.table.label');\n let tableAriaLabel: string | undefined = resolvedAriaLabel;\n if (ariaLabelledBy != null) {\n tableAriaLabel = undefined;\n }\n const defaultEmptyState = (\n <div className={cx(styles.emptyCell, classes?.emptyCell)}>\n {t('common.table.empty')}\n </div>\n ) as JSX.Element;\n const resolvedEmptyState = emptyState ?? defaultEmptyState;\n const showEmpty = rows.length === 0;\n const hasContainedBodyScroll = bodyScrollMode === 'contained';\n\n let inlineTemplateStyle: CSSProperties | undefined;\n if (gridTemplateClassName == null) {\n inlineTemplateStyle = buildInlineTemplate(\n columns.length,\n gridTemplateColumns,\n );\n }\n let headerStickyClass: string | null = null;\n if (headerBehavior?.sticky === true) {\n headerStickyClass = styles.stickyHeader;\n }\n let headerStyle: CSSProperties | undefined;\n if (headerBehavior?.offsetTop != null) {\n headerStyle = { top: headerBehavior.offsetTop };\n }\n\n const resolvedDensity: DataTableDensity = density ?? 'default';\n const sharedRowClasses: string[] = [\n styles.densityRecipe({ density: resolvedDensity }),\n ];\n if (gridTemplateClassName != null) {\n sharedRowClasses.push(gridTemplateClassName);\n }\n\n let rowsContent: JSX.Element;\n if (showEmpty) {\n rowsContent = (\n <div className={cx(styles.emptyRow, classes?.emptyRow)} role=\"row\">\n <div role=\"cell\">{resolvedEmptyState}</div>\n </div>\n );\n } else {\n rowsContent = (\n <>\n {rows.map((row, index) => {\n const rowId = getRowId(row, index);\n const rowClasses = [styles.row({ kind: resolvedKind }), classes?.row];\n const state = rowState?.(row, index);\n if (state != null) {\n rowClasses.push(styles.rowStateRecipe({ state }));\n }\n if (index % 2 === 0) {\n rowClasses.push(\n styles.rowEven({ kind: resolvedKind }),\n classes?.rowEven,\n );\n } else {\n rowClasses.push(\n styles.rowOdd({ kind: resolvedKind }),\n classes?.rowOdd,\n );\n }\n for (const sharedClass of sharedRowClasses) {\n rowClasses.push(sharedClass);\n }\n\n if (rowClassName != null) {\n const customClass = rowClassName(row, index);\n if (customClass != null) {\n rowClasses.push(customClass);\n }\n }\n\n return (\n <div\n key={rowId}\n role=\"row\"\n className={cx(...rowClasses)}\n style={inlineTemplateStyle}\n >\n {columns.map((column) => {\n const cellClasses = [\n styles.cell({ kind: resolvedKind }),\n classes?.cell,\n ];\n const visibilityClass = getVisibilityClass(column.minVisibleAt);\n\n if (visibilityClass != null) {\n cellClasses.push(visibilityClass);\n }\n\n if (column.className != null) {\n cellClasses.push(column.className);\n }\n if (column.isPrimary) {\n cellClasses.push(styles.primaryCell, classes?.primaryCell);\n }\n if (column.align != null) {\n cellClasses.push(styles.alignRecipe({ align: column.align }));\n }\n\n const content = column.cell(row);\n\n return (\n <div\n key={column.id}\n role=\"cell\"\n className={cx(...cellClasses)}\n >\n {content}\n </div>\n );\n })}\n </div>\n );\n })}\n </>\n );\n }\n\n let containedContainerClassName: string | null = null;\n let containedBodyClassName: string | null = null;\n if (hasContainedBodyScroll) {\n containedContainerClassName = styles.containerWithContainedBody;\n containedBodyClassName = styles.bodyContained;\n }\n\n return (\n <div\n className={cx(\n styles.container({ kind: resolvedKind }),\n containedContainerClassName,\n classes?.container,\n className,\n )}\n role=\"table\"\n aria-label={tableAriaLabel}\n aria-labelledby={ariaLabelledBy}\n data-scroll-mode={bodyScrollMode}\n >\n <div\n className={cx(\n styles.header({ kind: resolvedKind }),\n headerStickyClass,\n classes?.header,\n headerClassName,\n )}\n style={headerStyle}\n role=\"rowgroup\"\n >\n <div\n className={cx(\n styles.headerRow,\n classes?.headerRow,\n ...sharedRowClasses,\n )}\n role=\"row\"\n style={inlineTemplateStyle}\n >\n {columns.map((column) => {\n const headerClasses = [\n styles.headerCell({ kind: resolvedKind }),\n classes?.headerCell,\n ];\n const visibilityClass = getVisibilityClass(column.minVisibleAt);\n if (visibilityClass != null) {\n headerClasses.push(visibilityClass);\n }\n\n if (column.className != null) {\n headerClasses.push(column.className);\n }\n if (column.isPrimary) {\n headerClasses.push(\n styles.primaryHeaderCell,\n classes?.primaryHeaderCell,\n );\n }\n if (column.align != null) {\n headerClasses.push(styles.alignRecipe({ align: column.align }));\n }\n\n return (\n <div\n key={column.id}\n role=\"columnheader\"\n className={cx(...headerClasses)}\n >\n {column.header}\n </div>\n );\n })}\n </div>\n </div>\n\n <div\n className={cx(\n styles.body({ kind: resolvedKind }),\n containedBodyClassName,\n classes?.body,\n bodyClassName,\n )}\n role=\"rowgroup\"\n data-scroll-mode={bodyScrollMode}\n >\n {rowsContent}\n {bodyFooterNode}\n </div>\n </div>\n );\n};\n\nexport const __test = {\n getVisibilityClass,\n buildInlineTemplate,\n} as const;\n"],"mappings":"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"}
@@ -9,17 +9,17 @@
9
9
  /* empty css */
10
10
  import { createRuntimeFn as e } from "@vanilla-extract/recipes/createRuntimeFn";
11
11
  //#region src/components/data-table/ResponsiveRecordList.css.ts
12
- var t = "r17fa50", n = "r17fa52 r17fa51 txvbqb9hy", r = "r17fa53 txvbqb9hy", i = "r17fa54 txvbqb9ip txvbqbai7 txvbqbao7 txvbqbu7g", a = e({
13
- defaultClassName: "r17fa5a r17fa56 r17fa55 txvbqb9ip txvbqbai7 txvbqbaog txvbqbk5y _1995g4r1 _1995g4r0 _1995g4r2 _1995g4ra _1995g4rd _1995g4rh _1995g4rl",
12
+ var t = "r17fa50", n = "r17fa52 r17fa51 txvbqb9hy", r = "r17fa53 txvbqb9ip txvbqbai7 txvbqbcgg txvbqbjh7", i = "r17fa55 r17fa54 txvbqb9my txvbqbjh7 txvbqbu7g", a = "r17fa56 txvbqb9hy", o = "r17fa57 txvbqb9ip txvbqbai7 txvbqbao7 txvbqbu7g", s = e({
13
+ defaultClassName: "r17fa5d r17fa59 r17fa58 txvbqb9ip txvbqbai7 txvbqbaog txvbqbk5y _1995g4r1 _1995g4r0 _1995g4r2 _1995g4ra _1995g4rd _1995g4rh _1995g4rl",
14
14
  variantClassNames: { density: {
15
- compact: "r17fa5b r17fa57 txvbqbao7 txvbqblb7",
16
- default: "r17fa5c r17fa58 txvbqbaog txvbqblbg",
17
- comfortable: "r17fa5d r17fa59 txvbqbaog txvbqblbg"
15
+ compact: "r17fa5e r17fa5a txvbqbao7 txvbqblb7",
16
+ default: "r17fa5f r17fa5b txvbqbaog txvbqblbg",
17
+ comfortable: "r17fa5g r17fa5c txvbqbaog txvbqblbg"
18
18
  } },
19
19
  defaultVariants: { density: "compact" },
20
20
  compoundVariants: []
21
- }), o = "r17fa5e txvbqbcg txvbqb9ip txvbqbaog txvbqbdpp txvbqbk5y", s = "r17fa5f txvbqb9ip txvbqbai7 txvbqbany txvbqbk5y", c = "r17fa5g txvbqbv9z txvbqb8y txvbqbamp txvbqbfap txvbqbk5y txvbqbl87", l = "r17fa5h txvbqbva1 txvbqb8p txvbqbfap txvbqbk5y txvbqbl87", u = "r17fa5i txvbqb9iy txvbqbao7 txvbqbbtp txvbqbbth", d = "r17fa5j txvbqb9ip txvbqbai7 txvbqbb9g txvbqbk5y", f = "r17fa5k txvbqbva3 txvbqb8p txvbqbamp txvbqbefg txvbqb66", p = "r17fa5l txvbqbv9z txvbqb8y txvbqbk5y txvbqbl87", m = "r17fa5m txvbqbcp txvbqb9ip txvbqbajy txvbqbao7", h = "r17fa5n txvbqbcp txvbqb9ip txvbqbaj7 txvbqbdp7";
21
+ }), c = "r17fa5h txvbqbcg txvbqb9ip txvbqbaog txvbqbdpp txvbqbk5y", l = "r17fa5i txvbqb9ip txvbqbai7 txvbqbany txvbqbk5y", u = "r17fa5j txvbqbv9z txvbqb8y txvbqbamp txvbqbfap txvbqbk5y txvbqbl87", d = "r17fa5k txvbqbva1 txvbqb8p txvbqbfap txvbqbk5y txvbqbl87", f = "r17fa5l txvbqb9iy txvbqbao7 txvbqbbtp txvbqbbth", p = "r17fa5m txvbqb9ip txvbqbai7 txvbqbb9g txvbqbk5y", m = "r17fa5n txvbqbva3 txvbqb8p txvbqbamp txvbqbefg txvbqb66", h = "r17fa5o txvbqbv9z txvbqb8y txvbqbk5y txvbqbl87", g = "r17fa5p txvbqbcp txvbqb9ip txvbqbajy txvbqbao7", _ = "r17fa5q txvbqbcp txvbqb9ip txvbqbaj7 txvbqbdp7";
22
22
  //#endregion
23
- export { a as card, h as cardActions, m as cardBadges, o as cardHeader, u as cardMetaGrid, d as cardMetaItem, f as cardMetaLabel, p as cardMetaValue, l as cardSubtitle, c as cardTitle, s as cardTitleGroup, i as cards, n as cardsOnly, r as forceHidden, t as tableOnly };
23
+ export { s as card, _ as cardActions, g as cardBadges, c as cardHeader, f as cardMetaGrid, p as cardMetaItem, m as cardMetaLabel, h as cardMetaValue, d as cardSubtitle, u as cardTitle, l as cardTitleGroup, o as cards, n as cardsOnly, i as cardsViewport, r as containedRoot, a as forceHidden, t as tableOnly };
24
24
 
25
25
  //# sourceMappingURL=ResponsiveRecordList.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ResponsiveRecordList.css.js","names":[],"sources":["../../../../src/components/data-table/ResponsiveRecordList.css.ts"],"sourcesContent":["import { style } from '@vanilla-extract/css';\nimport { recipe } from '@vanilla-extract/recipes';\n\nimport { adminSurfaceRecipe } from '../../admin/theme/adminSurface.css.js';\nimport { sprinkles } from '../../theme/sprinkles.css.js';\nimport { vars } from '../../theme/themeContract.js';\n\nconst TABLET_MEDIA_QUERY = 'screen and (max-width: 767px)';\n\nexport const tableOnly = style({\n '@media': {\n [TABLET_MEDIA_QUERY]: {\n display: 'none',\n },\n },\n});\n\nexport const cardsOnly = style([\n sprinkles({\n display: 'none',\n }),\n {\n '@media': {\n [TABLET_MEDIA_QUERY]: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n },\n },\n },\n]);\n\nexport const forceHidden = sprinkles({\n display: 'none',\n});\n\nexport const cards = sprinkles({\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n width: 'full',\n});\n\nexport const card = recipe({\n base: style([\n sprinkles({\n display: 'flex',\n flexDirection: 'column',\n gap: 3,\n minWidth: 0,\n }),\n adminSurfaceRecipe({\n level: 'panel',\n radius: 'md',\n border: 'subtle',\n elevation: 'subtle',\n padding: 'md',\n }),\n {\n selectors: {\n '&:hover': {\n borderColor: vars.colors.border,\n boxShadow: vars.boxShadow.md,\n },\n },\n },\n ]),\n variants: {\n density: {\n compact: sprinkles({\n gap: 2,\n padding: 3,\n }),\n default: sprinkles({\n gap: 3,\n padding: 4,\n }),\n comfortable: sprinkles({\n gap: 3,\n padding: 4,\n }),\n },\n },\n defaultVariants: {\n density: 'compact',\n },\n});\n\nexport const cardHeader = sprinkles({\n alignItems: 'flex-start',\n display: 'flex',\n gap: 3,\n justifyContent: 'space-between',\n minWidth: 0,\n});\n\nexport const cardTitleGroup = sprinkles({\n display: 'flex',\n flexDirection: 'column',\n gap: 1,\n minWidth: 0,\n});\n\nexport const cardTitle = sprinkles({\n color: 'text',\n fontSize: 'sm',\n fontWeight: 'semibold',\n lineHeight: 'tight',\n minWidth: 0,\n overflowWrap: 'anywhere',\n});\n\nexport const cardSubtitle = sprinkles({\n color: 'textSecondary',\n fontSize: 'xs',\n lineHeight: 'tight',\n minWidth: 0,\n overflowWrap: 'anywhere',\n});\n\nexport const cardMetaGrid = sprinkles({\n display: 'grid',\n gap: 2,\n gridTemplateColumns: {\n base: 2,\n sm: 1,\n },\n});\n\nexport const cardMetaItem = sprinkles({\n display: 'flex',\n flexDirection: 'column',\n gap: 0.5,\n minWidth: 0,\n});\n\nexport const cardMetaLabel = sprinkles({\n color: 'textMuted',\n fontSize: 'xs',\n fontWeight: 'semibold',\n letterSpacing: 'caps',\n textTransform: 'uppercase',\n});\n\nexport const cardMetaValue = sprinkles({\n color: 'text',\n fontSize: 'sm',\n minWidth: 0,\n overflowWrap: 'anywhere',\n});\n\nexport const cardBadges = sprinkles({\n alignItems: 'center',\n display: 'flex',\n flexWrap: 'wrap',\n gap: 2,\n});\n\nexport const cardActions = sprinkles({\n alignItems: 'center',\n display: 'flex',\n flexShrink: 0,\n justifyContent: 'flex-end',\n});\n"],"mappings":""}
1
+ {"version":3,"file":"ResponsiveRecordList.css.js","names":[],"sources":["../../../../src/components/data-table/ResponsiveRecordList.css.ts"],"sourcesContent":["import { style } from '@vanilla-extract/css';\nimport { recipe } from '@vanilla-extract/recipes';\n\nimport { adminSurfaceRecipe } from '../../admin/theme/adminSurface.css.js';\nimport { sprinkles } from '../../theme/sprinkles.css.js';\nimport { vars } from '../../theme/themeContract.js';\n\nconst TABLET_MEDIA_QUERY = 'screen and (max-width: 767px)';\n\nexport const tableOnly = style({\n '@media': {\n [TABLET_MEDIA_QUERY]: {\n display: 'none',\n },\n },\n});\n\nexport const cardsOnly = style([\n sprinkles({\n display: 'none',\n }),\n {\n '@media': {\n [TABLET_MEDIA_QUERY]: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n },\n },\n },\n]);\n\nexport const containedRoot = sprinkles({\n display: 'flex',\n flexDirection: 'column',\n height: 'full',\n minHeight: 0,\n});\n\nexport const cardsViewport = style([\n sprinkles({\n flex: 1,\n minHeight: 0,\n width: 'full',\n }),\n {\n overflowY: 'auto',\n scrollbarWidth: 'thin',\n scrollbarColor: `${vars.colors.border} transparent`,\n },\n]);\n\nexport const forceHidden = sprinkles({\n display: 'none',\n});\n\nexport const cards = sprinkles({\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n width: 'full',\n});\n\nexport const card = recipe({\n base: style([\n sprinkles({\n display: 'flex',\n flexDirection: 'column',\n gap: 3,\n minWidth: 0,\n }),\n adminSurfaceRecipe({\n level: 'panel',\n radius: 'md',\n border: 'subtle',\n elevation: 'subtle',\n padding: 'md',\n }),\n {\n selectors: {\n '&:hover': {\n borderColor: vars.colors.border,\n boxShadow: vars.boxShadow.md,\n },\n },\n },\n ]),\n variants: {\n density: {\n compact: sprinkles({\n gap: 2,\n padding: 3,\n }),\n default: sprinkles({\n gap: 3,\n padding: 4,\n }),\n comfortable: sprinkles({\n gap: 3,\n padding: 4,\n }),\n },\n },\n defaultVariants: {\n density: 'compact',\n },\n});\n\nexport const cardHeader = sprinkles({\n alignItems: 'flex-start',\n display: 'flex',\n gap: 3,\n justifyContent: 'space-between',\n minWidth: 0,\n});\n\nexport const cardTitleGroup = sprinkles({\n display: 'flex',\n flexDirection: 'column',\n gap: 1,\n minWidth: 0,\n});\n\nexport const cardTitle = sprinkles({\n color: 'text',\n fontSize: 'sm',\n fontWeight: 'semibold',\n lineHeight: 'tight',\n minWidth: 0,\n overflowWrap: 'anywhere',\n});\n\nexport const cardSubtitle = sprinkles({\n color: 'textSecondary',\n fontSize: 'xs',\n lineHeight: 'tight',\n minWidth: 0,\n overflowWrap: 'anywhere',\n});\n\nexport const cardMetaGrid = sprinkles({\n display: 'grid',\n gap: 2,\n gridTemplateColumns: {\n base: 2,\n sm: 1,\n },\n});\n\nexport const cardMetaItem = sprinkles({\n display: 'flex',\n flexDirection: 'column',\n gap: 0.5,\n minWidth: 0,\n});\n\nexport const cardMetaLabel = sprinkles({\n color: 'textMuted',\n fontSize: 'xs',\n fontWeight: 'semibold',\n letterSpacing: 'caps',\n textTransform: 'uppercase',\n});\n\nexport const cardMetaValue = sprinkles({\n color: 'text',\n fontSize: 'sm',\n minWidth: 0,\n overflowWrap: 'anywhere',\n});\n\nexport const cardBadges = sprinkles({\n alignItems: 'center',\n display: 'flex',\n flexWrap: 'wrap',\n gap: 2,\n});\n\nexport const cardActions = sprinkles({\n alignItems: 'center',\n display: 'flex',\n flexShrink: 0,\n justifyContent: 'flex-end',\n});\n"],"mappings":""}
@@ -1,84 +1,109 @@
1
- import { DataTable as e } from "./DataTable.js";
2
- import { card as t, cardActions as n, cardBadges as r, cardHeader as i, cardMetaGrid as a, cardMetaItem as o, cardMetaLabel as s, cardMetaValue as c, cardSubtitle as l, cardTitle as u, cardTitleGroup as d, cards as f, cardsOnly as p, tableOnly as m } from "./ResponsiveRecordList.css.js";
3
- import { Fragment as h, jsx as g, jsxs as _ } from "react/jsx-runtime";
1
+ import { cx as e } from "../../theme/tools.js";
2
+ import { DataTable as t } from "./DataTable.js";
3
+ import { card as n, cardActions as r, cardBadges as i, cardHeader as a, cardMetaGrid as o, cardMetaItem as s, cardMetaLabel as c, cardMetaValue as l, cardSubtitle as u, cardTitle as d, cardTitleGroup as f, cards as p, cardsOnly as m, cardsViewport as h, containedRoot as g, tableOnly as _ } from "./ResponsiveRecordList.css.js";
4
+ import { useEffect as v, useState as y } from "react";
5
+ import { Fragment as b, jsx as x, jsxs as S } from "react/jsx-runtime";
4
6
  //#region src/components/data-table/ResponsiveRecordList.tsx
5
- var v = (e, t) => e == null ? null : e.cell(t), y = (e, t) => e.find((e) => e.mobileRole === t) ?? null, b = (e) => e.mobileRole === "hidden" ? !1 : e.mobileRole === "meta" ? !0 : e.mobileRole == null ? e.priority === "important" || e.priority === "secondary" : !1, x = ({ columns: x, rows: S, getRowId: C, mode: w = "auto", density: T = "compact", renderAction: E, className: D, ...O }) => {
6
- let k = y(x, "title") ?? x.find((e) => e.isPrimary === !0 || e.priority === "primary") ?? x[0] ?? null, A = y(x, "subtitle"), j = x.filter((e) => e.mobileRole === "badge" || e.mobileRole === "status"), M = x.filter((e) => e !== k && e !== A && b(e)), N = /* @__PURE__ */ g(h, { children: O.emptyState ?? null });
7
- return S.length > 0 && (N = /* @__PURE__ */ g("div", {
8
- className: f,
9
- children: S.map((e, f) => {
10
- let p = C(e, f), m = v(k, e), h = v(A, e), y = E?.(e), b = null;
11
- h != null && h !== "" && (b = /* @__PURE__ */ g("div", {
12
- className: l,
7
+ var C = "(max-width: 767px)", w = (e, t) => e == null ? null : e.cell(t), T = (e, t) => e.find((e) => e.mobileRole === t) ?? null, E = (e) => e.mobileRole === "hidden" ? !1 : e.mobileRole === "meta" ? !0 : e.mobileRole == null ? e.priority === "important" || e.priority === "secondary" : !1, D = () => {
8
+ let [e, t] = y(() => typeof window > "u" ? !1 : window.matchMedia(C).matches);
9
+ return v(() => {
10
+ if (typeof window > "u") return () => {};
11
+ let e = window.matchMedia(C), n = () => {
12
+ t(e.matches);
13
+ };
14
+ return n(), e.addEventListener("change", n), () => {
15
+ e.removeEventListener("change", n);
16
+ };
17
+ }, []), e;
18
+ }, O = ({ columns: v, rows: y, getRowId: C, mode: O = "auto", density: k = "compact", renderAction: A, className: j, bodyScrollMode: M, ...N }) => {
19
+ let P = M === "contained", F = D(), I = null, L, R = null;
20
+ P && (I = g, L = h, R = h);
21
+ let z = T(v, "title") ?? v.find((e) => e.isPrimary === !0 || e.priority === "primary") ?? v[0] ?? null, B = T(v, "subtitle"), V = v.filter((e) => e.mobileRole === "badge" || e.mobileRole === "status"), H = v.filter((e) => e !== z && e !== B && E(e)), U = /* @__PURE__ */ x(b, { children: N.emptyState ?? null });
22
+ if (y.length > 0 && (U = /* @__PURE__ */ x("div", {
23
+ className: p,
24
+ children: y.map((e, t) => {
25
+ let p = C(e, t), m = w(z, e), h = w(B, e), g = A?.(e), _ = null;
26
+ h != null && h !== "" && (_ = /* @__PURE__ */ x("div", {
27
+ className: u,
13
28
  children: h
14
29
  }));
15
- let x = null;
16
- y != null && (x = /* @__PURE__ */ g("div", {
17
- className: n,
18
- children: y
19
- }));
20
- let S = null;
21
- j.length > 0 && (S = /* @__PURE__ */ g("div", {
30
+ let v = null;
31
+ g != null && (v = /* @__PURE__ */ x("div", {
22
32
  className: r,
23
- children: j.map((t) => /* @__PURE__ */ g("span", { children: t.cell(e) }, t.id))
33
+ children: g
24
34
  }));
25
- let w = null;
26
- return M.length > 0 && (w = /* @__PURE__ */ g("dl", {
27
- className: a,
28
- children: M.map((t) => /* @__PURE__ */ _("div", {
29
- className: o,
30
- children: [/* @__PURE__ */ g("dt", {
31
- className: s,
32
- children: t.header
33
- }), /* @__PURE__ */ g("dd", {
35
+ let y = null;
36
+ V.length > 0 && (y = /* @__PURE__ */ x("div", {
37
+ className: i,
38
+ children: V.map((t) => /* @__PURE__ */ x("span", { children: t.cell(e) }, t.id))
39
+ }));
40
+ let b = null;
41
+ return H.length > 0 && (b = /* @__PURE__ */ x("dl", {
42
+ className: o,
43
+ children: H.map((t) => /* @__PURE__ */ S("div", {
44
+ className: s,
45
+ children: [/* @__PURE__ */ x("dt", {
34
46
  className: c,
47
+ children: t.header
48
+ }), /* @__PURE__ */ x("dd", {
49
+ className: l,
35
50
  children: t.cell(e)
36
51
  })]
37
52
  }, t.id))
38
- })), /* @__PURE__ */ _("article", {
39
- className: t({ density: T }),
53
+ })), /* @__PURE__ */ S("article", {
54
+ className: n({ density: k }),
40
55
  children: [
41
- /* @__PURE__ */ _("div", {
42
- className: i,
43
- children: [/* @__PURE__ */ _("div", {
44
- className: d,
45
- children: [/* @__PURE__ */ g("div", {
46
- className: u,
56
+ /* @__PURE__ */ S("div", {
57
+ className: a,
58
+ children: [/* @__PURE__ */ S("div", {
59
+ className: f,
60
+ children: [/* @__PURE__ */ x("div", {
61
+ className: d,
47
62
  children: m
48
- }), b]
49
- }), x]
63
+ }), _]
64
+ }), v]
50
65
  }),
51
- S,
52
- w
66
+ y,
67
+ b
53
68
  ]
54
69
  }, p);
55
70
  })
56
- })), w === "cards" ? /* @__PURE__ */ g("div", {
57
- className: D,
58
- children: N
59
- }) : w === "table" ? /* @__PURE__ */ g(e, {
60
- ...O,
61
- rows: S,
62
- columns: x,
71
+ })), O === "cards") return /* @__PURE__ */ x("div", {
72
+ className: e(j, I),
73
+ children: /* @__PURE__ */ S("div", {
74
+ className: L,
75
+ children: [U, N.bodyFooterNode]
76
+ })
77
+ });
78
+ if (O === "table") return /* @__PURE__ */ x(t, {
79
+ ...N,
80
+ rows: y,
81
+ columns: v,
63
82
  getRowId: C,
64
- className: D,
65
- density: T
66
- }) : /* @__PURE__ */ _("div", {
67
- className: D,
68
- children: [/* @__PURE__ */ g(e, {
69
- ...O,
70
- rows: S,
71
- columns: x,
83
+ className: j,
84
+ density: k,
85
+ bodyScrollMode: M,
86
+ bodyFooterNode: N.bodyFooterNode
87
+ });
88
+ let W = N.bodyFooterNode, G = null;
89
+ return F && (W = null, G = N.bodyFooterNode), /* @__PURE__ */ S("div", {
90
+ className: e(j, I),
91
+ children: [/* @__PURE__ */ x(t, {
92
+ ...N,
93
+ rows: y,
94
+ columns: v,
72
95
  getRowId: C,
73
- density: T,
74
- className: m
75
- }), /* @__PURE__ */ g("div", {
76
- className: p,
77
- children: N
96
+ density: k,
97
+ className: _,
98
+ bodyScrollMode: M,
99
+ bodyFooterNode: W
100
+ }), /* @__PURE__ */ S("div", {
101
+ className: e(m, R),
102
+ children: [U, G]
78
103
  })]
79
104
  });
80
105
  };
81
106
  //#endregion
82
- export { x as ResponsiveRecordList, x as default };
107
+ export { O as ResponsiveRecordList, O as default };
83
108
 
84
109
  //# sourceMappingURL=ResponsiveRecordList.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ResponsiveRecordList.js","names":[],"sources":["../../../../src/components/data-table/ResponsiveRecordList.tsx"],"sourcesContent":["import { type JSX, type ReactNode } from 'react';\n\nimport {\n DataTable,\n type DataTableColumn,\n type DataTableDensity,\n type DataTableProps,\n} from './DataTable.js';\nimport * as styles from './ResponsiveRecordList.css.js';\n\nexport type ResponsiveRecordListMode = 'table' | 'cards' | 'auto';\nexport type ResponsiveRecordListDensity = DataTableDensity;\n\nexport type ResponsiveRecordListColumn<Row> = DataTableColumn<Row> & {\n priority?: 'primary' | 'important' | 'secondary' | 'debug';\n mobileRole?:\n | 'title'\n | 'subtitle'\n | 'meta'\n | 'badge'\n | 'status'\n | 'action'\n | 'hidden';\n};\n\nexport type ResponsiveRecordListProps<Row> = Omit<\n DataTableProps<Row>,\n 'columns'\n> & {\n columns: readonly ResponsiveRecordListColumn<Row>[];\n mode?: ResponsiveRecordListMode;\n density?: ResponsiveRecordListDensity;\n renderAction?: (row: Row) => ReactNode;\n};\n\nconst renderCellText = <Row,>(\n column: ResponsiveRecordListColumn<Row> | null,\n row: Row,\n): ReactNode => {\n if (column == null) {\n return null;\n }\n return column.cell(row);\n};\n\nconst findColumn = <Row,>(\n columns: readonly ResponsiveRecordListColumn<Row>[],\n role: ResponsiveRecordListColumn<Row>['mobileRole'],\n): ResponsiveRecordListColumn<Row> | null => {\n return (\n columns.find((column) => {\n return column.mobileRole === role;\n }) ?? null\n );\n};\n\nconst isMetaColumn = <Row,>(\n column: ResponsiveRecordListColumn<Row>,\n): boolean => {\n if (column.mobileRole === 'hidden') {\n return false;\n }\n if (column.mobileRole === 'meta') {\n return true;\n }\n if (column.mobileRole != null) {\n return false;\n }\n return column.priority === 'important' || column.priority === 'secondary';\n};\n\nexport const ResponsiveRecordList = <Row,>({\n columns,\n rows,\n getRowId,\n mode = 'auto',\n density = 'compact',\n renderAction,\n className,\n ...tableProps\n}: ResponsiveRecordListProps<Row>): JSX.Element => {\n const titleColumn =\n findColumn(columns, 'title') ??\n columns.find((column) => {\n return column.isPrimary === true || column.priority === 'primary';\n }) ??\n columns[0] ??\n null;\n const subtitleColumn = findColumn(columns, 'subtitle');\n const badgeColumns = columns.filter((column) => {\n return column.mobileRole === 'badge' || column.mobileRole === 'status';\n });\n const metaColumns = columns.filter((column) => {\n return (\n column !== titleColumn &&\n column !== subtitleColumn &&\n isMetaColumn(column)\n );\n });\n\n let cards: JSX.Element = <>{tableProps.emptyState ?? null}</>;\n if (rows.length > 0) {\n cards = (\n <div className={styles.cards}>\n {rows.map((row, index) => {\n const rowId = getRowId(row, index);\n const title = renderCellText(titleColumn, row);\n const subtitle = renderCellText(subtitleColumn, row);\n const action = renderAction?.(row);\n let subtitleNode: JSX.Element | null = null;\n if (subtitle != null && subtitle !== '') {\n subtitleNode = (\n <div className={styles.cardSubtitle}>{subtitle}</div>\n );\n }\n let actionNode: JSX.Element | null = null;\n if (action != null) {\n actionNode = <div className={styles.cardActions}>{action}</div>;\n }\n let badgeNode: JSX.Element | null = null;\n if (badgeColumns.length > 0) {\n badgeNode = (\n <div className={styles.cardBadges}>\n {badgeColumns.map((column) => {\n return <span key={column.id}>{column.cell(row)}</span>;\n })}\n </div>\n );\n }\n let metaNode: JSX.Element | null = null;\n if (metaColumns.length > 0) {\n metaNode = (\n <dl className={styles.cardMetaGrid}>\n {metaColumns.map((column) => {\n return (\n <div key={column.id} className={styles.cardMetaItem}>\n <dt className={styles.cardMetaLabel}>{column.header}</dt>\n <dd className={styles.cardMetaValue}>\n {column.cell(row)}\n </dd>\n </div>\n );\n })}\n </dl>\n );\n }\n\n return (\n <article key={rowId} className={styles.card({ density })}>\n <div className={styles.cardHeader}>\n <div className={styles.cardTitleGroup}>\n <div className={styles.cardTitle}>{title}</div>\n {subtitleNode}\n </div>\n {actionNode}\n </div>\n {badgeNode}\n {metaNode}\n </article>\n );\n })}\n </div>\n );\n }\n\n if (mode === 'cards') {\n return <div className={className}>{cards}</div>;\n }\n\n if (mode === 'table') {\n return (\n <DataTable\n {...tableProps}\n rows={rows}\n columns={columns}\n getRowId={getRowId}\n className={className}\n density={density}\n />\n );\n }\n\n return (\n <div className={className}>\n <DataTable\n {...tableProps}\n rows={rows}\n columns={columns}\n getRowId={getRowId}\n density={density}\n className={styles.tableOnly}\n />\n <div className={styles.cardsOnly}>{cards}</div>\n </div>\n );\n};\n\nexport default ResponsiveRecordList;\n"],"mappings":";;;;AAmCA,IAAM,KACJ,GACA,MAEI,KAAU,OACL,OAEF,EAAO,KAAK,EAAI,EAGnB,KACJ,GACA,MAGE,EAAQ,MAAM,MACL,EAAO,eAAe,EAC7B,IAAI,MAIJ,KACJ,MAEI,EAAO,eAAe,WACjB,KAEL,EAAO,eAAe,SACjB,KAEL,EAAO,cAAc,OAGlB,EAAO,aAAa,eAAe,EAAO,aAAa,cAFrD,IAKE,KAA8B,EACzC,YACA,SACA,aACA,UAAO,QACP,aAAU,WACV,iBACA,cACA,GAAG,QAC8C;CACjD,IAAM,IACJ,EAAW,GAAS,QAAQ,IAC5B,EAAQ,MAAM,MACL,EAAO,cAAc,MAAQ,EAAO,aAAa,UACxD,IACF,EAAQ,MACR,MACI,IAAiB,EAAW,GAAS,WAAW,EAChD,IAAe,EAAQ,QAAQ,MAC5B,EAAO,eAAe,WAAW,EAAO,eAAe,SAC9D,EACI,IAAc,EAAQ,QAAQ,MAEhC,MAAW,KACX,MAAW,KACX,EAAa,EAAO,CAEtB,EAEE,IAAqB,kBAAA,GAAA,EAAA,UAAG,EAAW,cAAc,MAAQ,CAAA;CAkF7D,OAjFI,EAAK,SAAS,MAChB,IACE,kBAAC,OAAD;EAAK,WAAW;YACb,EAAK,KAAK,GAAK,MAAU;GACxB,IAAM,IAAQ,EAAS,GAAK,EAAM,EAC5B,IAAQ,EAAe,GAAa,EAAI,EACxC,IAAW,EAAe,GAAgB,EAAI,EAC9C,IAAS,IAAe,EAAI,EAC9B,IAAmC;GACvC,AAAI,KAAY,QAAQ,MAAa,OACnC,IACE,kBAAC,OAAD;IAAK,WAAW;cAAsB;IAAe,CAAA;GAGzD,IAAI,IAAiC;GACrC,AAAI,KAAU,SACZ,IAAa,kBAAC,OAAD;IAAK,WAAW;cAAqB;IAAa,CAAA;GAEjE,IAAI,IAAgC;GACpC,AAAI,EAAa,SAAS,MACxB,IACE,kBAAC,OAAD;IAAK,WAAW;cACb,EAAa,KAAK,MACV,kBAAC,QAAD,EAAA,UAAuB,EAAO,KAAK,EAAI,EAAQ,EAApC,EAAO,GAA6B,CACtD;IACE,CAAA;GAGV,IAAI,IAA+B;GAkBnC,OAjBI,EAAY,SAAS,MACvB,IACE,kBAAC,MAAD;IAAI,WAAW;cACZ,EAAY,KAAK,MAEd,kBAAC,OAAD;KAAqB,WAAW;eAAhC,CACE,kBAAC,MAAD;MAAI,WAAW;gBAAuB,EAAO;MAAY,CAAA,EACzD,kBAAC,MAAD;MAAI,WAAW;gBACZ,EAAO,KAAK,EAAI;MACd,CAAA,CACD;OALI,EAAO,GAKX,CAER;IACC,CAAA,GAKP,kBAAC,WAAD;IAAqB,WAAW,EAAY,EAAE,YAAS,CAAC;cAAxD;KACE,kBAAC,OAAD;MAAK,WAAW;gBAAhB,CACE,kBAAC,OAAD;OAAK,WAAW;iBAAhB,CACE,kBAAC,OAAD;QAAK,WAAW;kBAAmB;QAAY,CAAA,EAC9C,EACG;UACL,EACG;;KACL;KACA;KACO;MAVI,EAUJ;IAEZ;EACE,CAAA,GAIN,MAAS,UACJ,kBAAC,OAAD;EAAgB;YAAY;EAAY,CAAA,GAG7C,MAAS,UAET,kBAAC,GAAD;EACE,GAAI;EACE;EACG;EACC;EACC;EACF;EACT,CAAA,GAKJ,kBAAC,OAAD;EAAgB;YAAhB,CACE,kBAAC,GAAD;GACE,GAAI;GACE;GACG;GACC;GACD;GACT,WAAW;GACX,CAAA,EACF,kBAAC,OAAD;GAAK,WAAW;aAAmB;GAAY,CAAA,CAC3C"}
1
+ {"version":3,"file":"ResponsiveRecordList.js","names":[],"sources":["../../../../src/components/data-table/ResponsiveRecordList.tsx"],"sourcesContent":["import { useEffect, useState, type JSX, type ReactNode } from 'react';\n\nimport {\n DataTable,\n type DataTableColumn,\n type DataTableDensity,\n type DataTableProps,\n} from './DataTable.js';\nimport * as styles from './ResponsiveRecordList.css.js';\nimport { cx } from '../../theme/tools.js';\n\nconst CARDS_MEDIA_QUERY = '(max-width: 767px)';\n\nexport type ResponsiveRecordListMode = 'table' | 'cards' | 'auto';\nexport type ResponsiveRecordListDensity = DataTableDensity;\n\nexport type ResponsiveRecordListColumn<Row> = DataTableColumn<Row> & {\n priority?: 'primary' | 'important' | 'secondary' | 'debug';\n mobileRole?:\n | 'title'\n | 'subtitle'\n | 'meta'\n | 'badge'\n | 'status'\n | 'action'\n | 'hidden';\n};\n\nexport type ResponsiveRecordListProps<Row> = Omit<\n DataTableProps<Row>,\n 'columns'\n> & {\n columns: readonly ResponsiveRecordListColumn<Row>[];\n mode?: ResponsiveRecordListMode;\n density?: ResponsiveRecordListDensity;\n renderAction?: (row: Row) => ReactNode;\n};\n\nconst renderCellText = <Row,>(\n column: ResponsiveRecordListColumn<Row> | null,\n row: Row,\n): ReactNode => {\n if (column == null) {\n return null;\n }\n return column.cell(row);\n};\n\nconst findColumn = <Row,>(\n columns: readonly ResponsiveRecordListColumn<Row>[],\n role: ResponsiveRecordListColumn<Row>['mobileRole'],\n): ResponsiveRecordListColumn<Row> | null => {\n return (\n columns.find((column) => {\n return column.mobileRole === role;\n }) ?? null\n );\n};\n\nconst isMetaColumn = <Row,>(\n column: ResponsiveRecordListColumn<Row>,\n): boolean => {\n if (column.mobileRole === 'hidden') {\n return false;\n }\n if (column.mobileRole === 'meta') {\n return true;\n }\n if (column.mobileRole != null) {\n return false;\n }\n return column.priority === 'important' || column.priority === 'secondary';\n};\n\nconst useIsCardsViewport = (): boolean => {\n const [matches, setMatches] = useState(() => {\n if (typeof window === 'undefined') {\n return false;\n }\n return window.matchMedia(CARDS_MEDIA_QUERY).matches;\n });\n\n useEffect(() => {\n if (typeof window === 'undefined') {\n return () => {};\n }\n const mediaQuery = window.matchMedia(CARDS_MEDIA_QUERY);\n const handleChange = () => {\n setMatches(mediaQuery.matches);\n };\n\n handleChange();\n mediaQuery.addEventListener('change', handleChange);\n\n return () => {\n mediaQuery.removeEventListener('change', handleChange);\n };\n }, []);\n\n return matches;\n};\n\nexport const ResponsiveRecordList = <Row,>({\n columns,\n rows,\n getRowId,\n mode = 'auto',\n density = 'compact',\n renderAction,\n className,\n bodyScrollMode,\n ...tableProps\n}: ResponsiveRecordListProps<Row>): JSX.Element => {\n const hasContainedBodyScroll = bodyScrollMode === 'contained';\n const isCardsViewport = useIsCardsViewport();\n let containedRootClassName: string | null = null;\n let cardsViewportClassName: string | undefined;\n let containedCardsOnlyClassName: string | null = null;\n if (hasContainedBodyScroll) {\n containedRootClassName = styles.containedRoot;\n cardsViewportClassName = styles.cardsViewport;\n containedCardsOnlyClassName = styles.cardsViewport;\n }\n const titleColumn =\n findColumn(columns, 'title') ??\n columns.find((column) => {\n return column.isPrimary === true || column.priority === 'primary';\n }) ??\n columns[0] ??\n null;\n const subtitleColumn = findColumn(columns, 'subtitle');\n const badgeColumns = columns.filter((column) => {\n return column.mobileRole === 'badge' || column.mobileRole === 'status';\n });\n const metaColumns = columns.filter((column) => {\n return (\n column !== titleColumn &&\n column !== subtitleColumn &&\n isMetaColumn(column)\n );\n });\n\n let cards: JSX.Element = <>{tableProps.emptyState ?? null}</>;\n if (rows.length > 0) {\n cards = (\n <div className={styles.cards}>\n {rows.map((row, index) => {\n const rowId = getRowId(row, index);\n const title = renderCellText(titleColumn, row);\n const subtitle = renderCellText(subtitleColumn, row);\n const action = renderAction?.(row);\n let subtitleNode: JSX.Element | null = null;\n if (subtitle != null && subtitle !== '') {\n subtitleNode = (\n <div className={styles.cardSubtitle}>{subtitle}</div>\n );\n }\n let actionNode: JSX.Element | null = null;\n if (action != null) {\n actionNode = <div className={styles.cardActions}>{action}</div>;\n }\n let badgeNode: JSX.Element | null = null;\n if (badgeColumns.length > 0) {\n badgeNode = (\n <div className={styles.cardBadges}>\n {badgeColumns.map((column) => {\n return <span key={column.id}>{column.cell(row)}</span>;\n })}\n </div>\n );\n }\n let metaNode: JSX.Element | null = null;\n if (metaColumns.length > 0) {\n metaNode = (\n <dl className={styles.cardMetaGrid}>\n {metaColumns.map((column) => {\n return (\n <div key={column.id} className={styles.cardMetaItem}>\n <dt className={styles.cardMetaLabel}>{column.header}</dt>\n <dd className={styles.cardMetaValue}>\n {column.cell(row)}\n </dd>\n </div>\n );\n })}\n </dl>\n );\n }\n\n return (\n <article key={rowId} className={styles.card({ density })}>\n <div className={styles.cardHeader}>\n <div className={styles.cardTitleGroup}>\n <div className={styles.cardTitle}>{title}</div>\n {subtitleNode}\n </div>\n {actionNode}\n </div>\n {badgeNode}\n {metaNode}\n </article>\n );\n })}\n </div>\n );\n }\n\n if (mode === 'cards') {\n return (\n <div className={cx(className, containedRootClassName)}>\n <div className={cardsViewportClassName}>\n {cards}\n {tableProps.bodyFooterNode}\n </div>\n </div>\n );\n }\n\n if (mode === 'table') {\n return (\n <DataTable\n {...tableProps}\n rows={rows}\n columns={columns}\n getRowId={getRowId}\n className={className}\n density={density}\n bodyScrollMode={bodyScrollMode}\n bodyFooterNode={tableProps.bodyFooterNode}\n />\n );\n }\n\n let tableBodyFooterNode = tableProps.bodyFooterNode;\n let cardsBodyFooterNode: ReactNode = null;\n if (isCardsViewport) {\n tableBodyFooterNode = null;\n cardsBodyFooterNode = tableProps.bodyFooterNode;\n }\n\n return (\n <div className={cx(className, containedRootClassName)}>\n <DataTable\n {...tableProps}\n rows={rows}\n columns={columns}\n getRowId={getRowId}\n density={density}\n className={styles.tableOnly}\n bodyScrollMode={bodyScrollMode}\n bodyFooterNode={tableBodyFooterNode}\n />\n <div className={cx(styles.cardsOnly, containedCardsOnlyClassName)}>\n {cards}\n {cardsBodyFooterNode}\n </div>\n </div>\n );\n};\n\nexport default ResponsiveRecordList;\n"],"mappings":"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"}