@leavepulse/ui 0.86.2 → 0.87.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/dist/assets/{LpTable-CEFsRz5J.css → LpTable-ClBFQeTd.css} +51 -19
  2. package/dist/chunks/{ContextMenuItems-D15cGEw9.js → ContextMenuItems-D0jObgzN.js} +27 -3
  3. package/dist/chunks/{DropzoneLinkField-Dz7fIaLh.js → DropzoneLinkField-DhwYRnvd.js} +1 -1
  4. package/dist/chunks/{FieldLeading-DZZLK02U.js → FieldLeading-k9EJOKOI.js} +1 -1
  5. package/dist/chunks/{FieldWrapper-BDDw1F9H.js → FieldWrapper-CVTPnpoG.js} +1 -1
  6. package/dist/chunks/{IconCloseButton-Cn_w4aN3.js → IconCloseButton-CmWOJAXG.js} +1 -1
  7. package/dist/chunks/{LayoutCanvas-Dr5eSfAu.js → LayoutCanvas-j4TZqx1A.js} +1 -1
  8. package/dist/chunks/{LayoutNode-CViJnx6q.js → LayoutNode-4Eaf8ZWj.js} +1 -1
  9. package/dist/chunks/{LpActionBar-C0LK-Aqs.js → LpActionBar-Cx_MSZl9.js} +1 -1
  10. package/dist/chunks/{LpAddressInput-B9sSvodU.js → LpAddressInput-CfqQR5jE.js} +7 -7
  11. package/dist/chunks/{LpAlert-Bpd7122M.js → LpAlert-CYtbpRYW.js} +1 -1
  12. package/dist/chunks/{LpAppShell-DpsQtXvG.js → LpAppShell-BQG98odS.js} +4 -4
  13. package/dist/chunks/{LpAutocomplete-CQID7Zc-.js → LpAutocomplete-VNID5zdy.js} +4 -4
  14. package/dist/chunks/{LpAvatar-DLkiMGKx.js → LpAvatar-CfLBqlY1.js} +1 -1
  15. package/dist/chunks/{LpBadge-RFp8uHFt.js → LpBadge-Bh5roBr_.js} +1 -1
  16. package/dist/chunks/{LpBottomNav-BcJVkAhh.js → LpBottomNav-9AqvZlRW.js} +1 -1
  17. package/dist/chunks/{LpBreadcrumbs-DJ_DB45r.js → LpBreadcrumbs-Zv1fn9e_.js} +1 -1
  18. package/dist/chunks/{LpCalendar-D6tfCr2G.js → LpCalendar-aACjUhpM.js} +1 -1
  19. package/dist/chunks/{LpCheckbox-DcXC2qd5.js → LpCheckbox-P7tEw8GO.js} +2 -2
  20. package/dist/chunks/{LpCodeBlock-kGT15Zou.js → LpCodeBlock-BNThgUdQ.js} +2 -2
  21. package/dist/chunks/{LpCodeDisplay-DlwzZo9o.js → LpCodeDisplay-DsiE-Qy9.js} +4 -4
  22. package/dist/chunks/{LpColorPicker-Cjna_Bio.js → LpColorPicker-EXpwcX-t.js} +3 -3
  23. package/dist/chunks/{LpConfirmDialog-bfcX5F9d.js → LpConfirmDialog-DPiPVRn_.js} +2 -2
  24. package/dist/chunks/{LpConfirmHost-DIgloymi.js → LpConfirmHost-Ddiljlog.js} +1 -1
  25. package/dist/chunks/{LpContextMenu-CUFZIQX2.js → LpContextMenu-DYpDm6iI.js} +2 -2
  26. package/dist/chunks/{LpContextSwitcher-CMweLbv2.js → LpContextSwitcher-BPDSkKyA.js} +2 -2
  27. package/dist/chunks/{LpCopyButton-TGoE43mE.js → LpCopyButton-CxX682t4.js} +1 -1
  28. package/dist/chunks/{LpDataList-Due909Cy.js → LpDataList-DCtF7krm.js} +2 -2
  29. package/dist/chunks/{LpDatePicker-B5gzwI3T.js → LpDatePicker-BElEHVm6.js} +5 -5
  30. package/dist/chunks/{LpDateRangePicker-CwNnpyoL.js → LpDateRangePicker-vLt-drEu.js} +3 -3
  31. package/dist/chunks/{LpDisclosure-CsJ7nnFz.js → LpDisclosure-D4JZ-o8K.js} +1 -1
  32. package/dist/chunks/{LpDrawer-C1q2bl1r.js → LpDrawer-C97k-3L2.js} +1 -1
  33. package/dist/chunks/{LpDropdownMenu-DRABI-Bl.js → LpDropdownMenu-BPEsqZCN.js} +2 -2
  34. package/dist/chunks/{LpEditable-DCPdDDBb.js → LpEditable-CeRAzYMv.js} +2 -2
  35. package/dist/chunks/{LpEmptyState-DT8U4R8L.js → LpEmptyState-DrHBR3yh.js} +1 -1
  36. package/dist/chunks/{LpFieldNotice-mcmO-O-J.js → LpFieldNotice-DUPo1Yii.js} +1 -1
  37. package/dist/chunks/{LpFileTree-B365yOLv.js → LpFileTree-BcQgsw4e.js} +4 -4
  38. package/dist/chunks/{LpFileTreeNode-DfvIGmSz.js → LpFileTreeNode-Dk2WqkPF.js} +4 -4
  39. package/dist/chunks/{LpFormField-C5GOuOY-.js → LpFormField-jbM7K1Hg.js} +1 -1
  40. package/dist/chunks/{LpHintLayer-B0choo1r.js → LpHintLayer-CUSRLtLu.js} +1 -1
  41. package/dist/chunks/{LpHints-BEetUVTl.js → LpHints-BF40CP4_.js} +3 -3
  42. package/dist/chunks/{LpIcon-DCGhNsCU.js → LpIcon-CxHFPwKt.js} +1 -1
  43. package/dist/chunks/{LpInfraNode-BsExhdPE.js → LpInfraNode-BYiMFDnA.js} +2 -2
  44. package/dist/chunks/{LpInput-CKMblRtp.js → LpInput-BU5IsOlE.js} +3 -3
  45. package/dist/chunks/{LpInspector-BNxjuWMP.js → LpInspector-CEko6-pS.js} +4 -4
  46. package/dist/chunks/{LpLightbox-DVyiB4dw.js → LpLightbox-REei-y5e.js} +4 -4
  47. package/dist/chunks/{LpLogInspector-Yj310k4n.js → LpLogInspector-Bwz351LY.js} +2 -2
  48. package/dist/chunks/{LpLogViewer-Bki-IdNC.js → LpLogViewer-BCkqdH66.js} +6 -6
  49. package/dist/chunks/{LpMapPicker-CnpJhiY0.js → LpMapPicker-DVfiy3rR.js} +1 -1
  50. package/dist/chunks/{LpMediaGallery-OJemmbV7.js → LpMediaGallery-BF1Bch3v.js} +4 -4
  51. package/dist/chunks/{LpModal-B5y9_LgA.js → LpModal-BK2T5uIG.js} +1 -1
  52. package/dist/chunks/{LpModalNav-Er99S_AP.js → LpModalNav-Dk4eHpg6.js} +3 -3
  53. package/dist/chunks/{LpNotificationBell-DmR1xDd-.js → LpNotificationBell-CMwUXhFg.js} +4 -4
  54. package/dist/chunks/{LpNotificationFeed-DK7D1f-v.js → LpNotificationFeed-BXsRp9jm.js} +4 -4
  55. package/dist/chunks/{LpNumberField-BeYT7zzt.js → LpNumberField-QUMXvpqx.js} +3 -3
  56. package/dist/chunks/{LpOtpInput-DqwY-U5R.js → LpOtpInput-C14XagVB.js} +1 -1
  57. package/dist/chunks/{LpPagination-V1wEhu1K.js → LpPagination-DGLntZJN.js} +1 -1
  58. package/dist/chunks/{LpPaletteTheme-CWFz4H2D.js → LpPaletteTheme-wiJtP5hV.js} +2 -2
  59. package/dist/chunks/{LpPasswordInput-LaOXNYuV.js → LpPasswordInput-W9AZfzaL.js} +2 -2
  60. package/dist/chunks/{LpPhoneInput-D7Tq2iaz.js → LpPhoneInput-DsRv-Qla.js} +3 -3
  61. package/dist/chunks/{LpPie-CAsGO9jE.js → LpPie-pbrNFbRP.js} +2 -2
  62. package/dist/chunks/{LpPipeline-D-uPcbMN.js → LpPipeline-BHWmvOiv.js} +2 -2
  63. package/dist/chunks/{LpQuota-BR8ck2a9.js → LpQuota-BaCq5YOQ.js} +1 -1
  64. package/dist/chunks/{LpRadioGroup-DSOCL9MD.js → LpRadioGroup-D94KMStE.js} +2 -2
  65. package/dist/chunks/{LpRangeCalendar-QepHrmba.js → LpRangeCalendar-C9gkNMYw.js} +1 -1
  66. package/dist/chunks/{LpRangeSlider-BaAM7XIs.js → LpRangeSlider-CkP9hYUC.js} +1 -1
  67. package/dist/chunks/{LpRepeater-BKq5XPh4.js → LpRepeater-DLLcbQ6J.js} +2 -2
  68. package/dist/chunks/{LpSecretField-Dp-c7wWc.js → LpSecretField-Au7ZQTtm.js} +5 -5
  69. package/dist/chunks/{LpSection-BGzlKIWO.js → LpSection-RKCwB0xN.js} +1 -1
  70. package/dist/chunks/{LpSegmented-CiaF9DUK.js → LpSegmented-DD8MPj4j.js} +2 -2
  71. package/dist/chunks/{LpSelect-CB6Xbnfk.js → LpSelect-BeXz1TWh.js} +4 -4
  72. package/dist/chunks/{LpSidebar-CjE90o3s.js → LpSidebar-DUFlf6Uu.js} +4 -4
  73. package/dist/chunks/{LpSidebarNav-Bgz2tXSq.js → LpSidebarNav-C34YEZIR.js} +3 -3
  74. package/dist/chunks/{LpSidebarRow-CDBnvvd8.js → LpSidebarRow-BeEGgsZi.js} +3 -3
  75. package/dist/chunks/{LpSlider-DTb_Ivkm.js → LpSlider-BCy5rjwK.js} +1 -1
  76. package/dist/chunks/{LpStat-DM5Wfb6K.js → LpStat-eVz7iUfD.js} +2 -2
  77. package/dist/chunks/{LpStatus-_fIwWXQV.js → LpStatus-C6GqSHJj.js} +1 -1
  78. package/dist/chunks/{LpStepMark-iDZw1DYf.js → LpStepMark-CPGVj1XG.js} +1 -1
  79. package/dist/chunks/{LpStepper-CjC3cp1F.js → LpStepper-DBNRA6Q2.js} +1 -1
  80. package/dist/chunks/{LpSwitch-BNHyYDhX.js → LpSwitch-D7hmVsif.js} +1 -1
  81. package/dist/chunks/{LpTabFace-gATEe9pQ.js → LpTabFace-uoZgD_SN.js} +2 -2
  82. package/dist/chunks/{LpTableFilter-B_BFoBqS.js → LpTableFilter-BGFNKyUX.js} +2 -2
  83. package/dist/chunks/{LpTagsInput-By7LMb47.js → LpTagsInput-D9uOSlvf.js} +5 -5
  84. package/dist/chunks/{LpTextarea-Ck6RAfzu.js → LpTextarea-DwE-lQt4.js} +1 -1
  85. package/dist/chunks/{LpThemeStudio-RyI-SWiw.js → LpThemeStudio-COn2H76d.js} +5 -5
  86. package/dist/chunks/{LpThemeSwitcher-BZYJ0AXy.js → LpThemeSwitcher-B3R3nNid.js} +3 -3
  87. package/dist/chunks/{LpTimeField-BTKJVeNt.js → LpTimeField-Mi8H1g_9.js} +2 -2
  88. package/dist/chunks/{LpToaster-YcLJFSsH.js → LpToaster-DOJn6Vey.js} +2 -2
  89. package/dist/chunks/{LpTopologyCanvas-paC1Dup-.js → LpTopologyCanvas-5RFMP4gR.js} +4 -4
  90. package/dist/chunks/{LpTour-D_AN_SsZ.js → LpTour-DUI_hoPv.js} +1 -1
  91. package/dist/chunks/{LpTruncate-DCZjfcE-.js → LpTruncate-CynJhsEw.js} +1 -1
  92. package/dist/chunks/{LpVideoCompress-BfulQ8Rs.js → LpVideoCompress-CPUxXh-c.js} +1 -1
  93. package/dist/chunks/{LpVideoPlayer--87I5Kqu.js → LpVideoPlayer-BbCjEQAx.js} +4 -4
  94. package/dist/chunks/{LpWindow-Bo5qQgVY.js → LpWindow-Dp_0nNqg.js} +2 -2
  95. package/dist/chunks/{LpWorkspaceSwitcher-D50sHs9N.js → LpWorkspaceSwitcher-bjkncjSl.js} +3 -3
  96. package/dist/chunks/{MenuTitle-DCHcfyPH.js → MenuTitle-YcSjF8xo.js} +1 -1
  97. package/dist/chunks/{OptionContent-o58kS7Zh.js → OptionContent-DZb5eKRV.js} +1 -1
  98. package/dist/chunks/{PickerField-DNo1k89A.js → PickerField-CjOTUXDK.js} +1 -1
  99. package/dist/chunks/{RevealToggle-w7-BMcgC.js → RevealToggle-Bl1NcfxB.js} +1 -1
  100. package/dist/chunks/{TourCard-0yYxSdd4.js → TourCard-BovXtMbO.js} +1 -1
  101. package/dist/chunks/{VideoThumb-DL_QkAJY.js → VideoThumb-BfDkIXqE.js} +1 -1
  102. package/dist/chunks/{VideoVolume-D-2TmsVj.js → VideoVolume-DE3i1ree.js} +2 -2
  103. package/dist/chunks/{icons-V0k93Puc.js → icons-C8ccRCKw.js} +1 -1
  104. package/dist/components/ContextMenuItems.vue.js +1 -1
  105. package/dist/components/DropzoneLinkField.vue.js +1 -1
  106. package/dist/components/FieldLeading.vue.js +1 -1
  107. package/dist/components/FieldWrapper.vue.js +1 -1
  108. package/dist/components/IconCloseButton.vue.js +1 -1
  109. package/dist/components/LayoutCanvas.vue.js +1 -1
  110. package/dist/components/LayoutNode.vue.js +1 -1
  111. package/dist/components/LpActionBar.vue.js +1 -1
  112. package/dist/components/LpAddressInput.vue.js +1 -1
  113. package/dist/components/LpAlert.vue.js +1 -1
  114. package/dist/components/LpAppShell.vue.js +1 -1
  115. package/dist/components/LpAutocomplete.vue.js +1 -1
  116. package/dist/components/LpAvatar.vue.js +1 -1
  117. package/dist/components/LpBadge.vue.js +1 -1
  118. package/dist/components/LpBottomNav.vue.js +1 -1
  119. package/dist/components/LpBreadcrumbs.vue.js +1 -1
  120. package/dist/components/LpCalendar.vue.js +1 -1
  121. package/dist/components/LpChart.vue.js +2 -2
  122. package/dist/components/LpCheckbox.vue.js +1 -1
  123. package/dist/components/LpCodeBlock.vue.js +1 -1
  124. package/dist/components/LpCodeDisplay.vue.js +1 -1
  125. package/dist/components/LpColorPicker.vue.js +1 -1
  126. package/dist/components/LpCommandPalette.vue.js +2 -2
  127. package/dist/components/LpConfirmDialog.vue.js +1 -1
  128. package/dist/components/LpConfirmHost.vue.js +1 -1
  129. package/dist/components/LpContextMenu.vue.d.ts +7 -0
  130. package/dist/components/LpContextMenu.vue.js +1 -1
  131. package/dist/components/LpContextSwitcher.vue.js +1 -1
  132. package/dist/components/LpCopyButton.vue.js +1 -1
  133. package/dist/components/LpDataList.vue.js +1 -1
  134. package/dist/components/LpDatePicker.vue.js +1 -1
  135. package/dist/components/LpDateRangePicker.vue.js +1 -1
  136. package/dist/components/LpDisclosure.vue.js +1 -1
  137. package/dist/components/LpDock.vue.js +1 -1
  138. package/dist/components/LpDrawer.vue.js +1 -1
  139. package/dist/components/LpDropdownMenu.vue.js +1 -1
  140. package/dist/components/LpDropzone.vue.js +2 -2
  141. package/dist/components/LpEditable.vue.js +1 -1
  142. package/dist/components/LpEmptyState.vue.js +1 -1
  143. package/dist/components/LpFieldNotice.vue.js +1 -1
  144. package/dist/components/LpFileTree.vue.js +1 -1
  145. package/dist/components/LpFileTreeNode.vue.js +1 -1
  146. package/dist/components/LpFormField.vue.js +1 -1
  147. package/dist/components/LpHintLayer.vue.js +1 -1
  148. package/dist/components/LpHints.vue.js +1 -1
  149. package/dist/components/LpIcon.vue.js +1 -1
  150. package/dist/components/LpImageEditor.vue.js +1 -1
  151. package/dist/components/LpInfraNode.vue.js +1 -1
  152. package/dist/components/LpInput.vue.js +1 -1
  153. package/dist/components/LpInspector.vue.js +1 -1
  154. package/dist/components/LpLightbox.vue.js +1 -1
  155. package/dist/components/LpLogInspector.vue.js +1 -1
  156. package/dist/components/LpLogViewer.vue.js +1 -1
  157. package/dist/components/LpMapPicker.vue.js +1 -1
  158. package/dist/components/LpMediaGallery.vue.js +1 -1
  159. package/dist/components/LpModal.vue.js +1 -1
  160. package/dist/components/LpModalNav.vue.js +1 -1
  161. package/dist/components/LpNotificationBell.vue.js +1 -1
  162. package/dist/components/LpNotificationFeed.vue.js +1 -1
  163. package/dist/components/LpNumberField.vue.js +1 -1
  164. package/dist/components/LpOtpInput.vue.js +1 -1
  165. package/dist/components/LpPagination.vue.js +1 -1
  166. package/dist/components/LpPaletteFacts.vue.js +1 -1
  167. package/dist/components/LpPaletteHeader.vue.js +2 -2
  168. package/dist/components/LpPaletteTheme.vue.js +1 -1
  169. package/dist/components/LpPasswordInput.vue.js +1 -1
  170. package/dist/components/LpPhoneInput.vue.js +1 -1
  171. package/dist/components/LpPie.vue.js +1 -1
  172. package/dist/components/LpPipeline.vue.js +1 -1
  173. package/dist/components/LpQuota.vue.js +1 -1
  174. package/dist/components/LpRadioGroup.vue.js +1 -1
  175. package/dist/components/LpRangeCalendar.vue.js +1 -1
  176. package/dist/components/LpRangeSlider.vue.js +1 -1
  177. package/dist/components/LpRepeater.vue.js +1 -1
  178. package/dist/components/LpSecretField.vue.js +1 -1
  179. package/dist/components/LpSection.vue.js +1 -1
  180. package/dist/components/LpSegmented.vue.js +1 -1
  181. package/dist/components/LpSelect.vue.js +1 -1
  182. package/dist/components/LpShortcutsDialog.vue.js +1 -1
  183. package/dist/components/LpSidebar.vue.js +1 -1
  184. package/dist/components/LpSidebarNav.vue.js +1 -1
  185. package/dist/components/LpSidebarRow.vue.js +1 -1
  186. package/dist/components/LpSlider.vue.js +1 -1
  187. package/dist/components/LpStat.vue.js +1 -1
  188. package/dist/components/LpStatus.vue.js +1 -1
  189. package/dist/components/LpStepMark.vue.js +1 -1
  190. package/dist/components/LpStepper.vue.js +1 -1
  191. package/dist/components/LpSwitch.vue.js +1 -1
  192. package/dist/components/LpTabFace.vue.js +1 -1
  193. package/dist/components/LpTable.vue.d.ts +76 -1
  194. package/dist/components/LpTable.vue.js +513 -102
  195. package/dist/components/LpTableFilter.vue.js +1 -1
  196. package/dist/components/LpTabs.vue.js +2 -2
  197. package/dist/components/LpTagsInput.vue.js +1 -1
  198. package/dist/components/LpTextarea.vue.js +1 -1
  199. package/dist/components/LpThemeStudio.vue.js +1 -1
  200. package/dist/components/LpThemeSwitcher.vue.js +1 -1
  201. package/dist/components/LpTimeField.vue.js +1 -1
  202. package/dist/components/LpToaster.vue.js +1 -1
  203. package/dist/components/LpTopologyCanvas.vue.js +1 -1
  204. package/dist/components/LpTour.vue.js +1 -1
  205. package/dist/components/LpTruncate.vue.js +1 -1
  206. package/dist/components/LpVideoCompress.vue.js +1 -1
  207. package/dist/components/LpVideoPlayer.vue.js +1 -1
  208. package/dist/components/LpVideoTrim.vue.js +4 -4
  209. package/dist/components/LpWindow.vue.js +1 -1
  210. package/dist/components/LpWorkspaceSwitcher.vue.js +1 -1
  211. package/dist/components/MenuTitle.vue.js +1 -1
  212. package/dist/components/OptionContent.vue.js +1 -1
  213. package/dist/components/PickerField.vue.js +1 -1
  214. package/dist/components/RevealToggle.vue.js +1 -1
  215. package/dist/components/TourCard.vue.js +1 -1
  216. package/dist/components/VideoFlash.vue.js +1 -1
  217. package/dist/components/VideoThumb.vue.js +1 -1
  218. package/dist/components/VideoVolume.vue.js +1 -1
  219. package/dist/components/menuWhen.js +1 -1
  220. package/dist/components/tableFeatures.d.ts +9 -0
  221. package/dist/icons-all.js +1 -1
  222. package/dist/index.d.ts +1 -1
  223. package/dist/index.js +90 -85
  224. package/package.json +1 -1
  225. package/src/components/ContextMenuItems.vue +22 -0
  226. package/src/components/LpContextMenu.vue +7 -0
  227. package/src/components/LpTable.vue +396 -3
  228. package/src/components/tableFeatures.ts +10 -0
  229. package/src/index.ts +1 -1
  230. package/src/kit-icons.ts +1 -1
  231. package/src/locales/uk.ts +5 -0
@@ -1,20 +1,22 @@
1
- import { defineComponent, computed, useAttrs, ref, shallowRef, watch, onMounted, useSlots, onBeforeUnmount, useId, h, openBlock, createElementBlock, normalizeClass, createVNode, withCtx, renderSlot, createCommentVNode, Fragment, renderList, createBlock, createElementVNode, toDisplayString, createTextVNode, Transition, mergeProps, normalizeStyle, withModifiers, TransitionGroup, unref, nextTick } from "vue";
1
+ import { defineComponent, computed, useAttrs, ref, shallowRef, watch, onMounted, useSlots, onBeforeUnmount, useId, h, openBlock, createElementBlock, normalizeClass, createVNode, withCtx, renderSlot, createCommentVNode, createBlock, createTextVNode, toDisplayString, Fragment, renderList, createElementVNode, Transition, mergeProps, normalizeStyle, withModifiers, TransitionGroup, unref, nextTick } from "vue";
2
2
  import { usePaletteScope, suppressPaletteDiscovery, usePaletteCommands } from "../composables/usePaletteCommands.js";
3
3
  import { menuPaletteCommands } from "./commandPalette.js";
4
- import { _ as _sfc_main$1 } from "../chunks/LpDataList-Due909Cy.js";
5
- import { _ as _sfc_main$9 } from "../chunks/LpCheckbox-DcXC2qd5.js";
6
- import { _ as _sfc_main$8 } from "../chunks/LpContextMenu-CUFZIQX2.js";
7
- import { _ as _sfc_main$e } from "../chunks/LpEditable-DCPdDDBb.js";
8
- import { _ as _sfc_main$d } from "../chunks/LpEmptyState-DT8U4R8L.js";
9
- import { _ as _sfc_main$3 } from "../chunks/LpBadge-RFp8uHFt.js";
10
- import { _ as _sfc_main$6 } from "../chunks/LpIcon-DCGhNsCU.js";
11
- import { _ as _sfc_main$c } from "../chunks/LpSkeleton-leTl53V9.js";
12
- import { _ as _sfc_main$f } from "../chunks/LpPagination-V1wEhu1K.js";
13
- import { _ as _sfc_main$a } from "../chunks/LpPopover-BQSuxtai.js";
14
- import { _ as _sfc_main$7 } from "../chunks/LpScrollArea-CqvwfZs2.js";
15
- import { _ as _sfc_main$4 } from "../chunks/LpRollingText-B54Pje7P.js";
4
+ import { _ as _sfc_main$1 } from "../chunks/LpDataList-DCtF7krm.js";
5
+ import { _ as _sfc_main$d } from "../chunks/LpCheckbox-P7tEw8GO.js";
6
+ import { _ as _sfc_main$c } from "../chunks/LpContextMenu-DYpDm6iI.js";
7
+ import { _ as _sfc_main$g } from "../chunks/LpEditable-CeRAzYMv.js";
8
+ import { _ as _sfc_main$f } from "../chunks/LpEmptyState-DrHBR3yh.js";
9
+ import { _ as _sfc_main$8 } from "../chunks/LpBadge-Bh5roBr_.js";
10
+ import { _ as _sfc_main$5 } from "../chunks/LpIcon-CxHFPwKt.js";
11
+ import { _ as _sfc_main$e } from "../chunks/LpSkeleton-leTl53V9.js";
12
+ import { _ as _sfc_main$h } from "../chunks/LpPagination-DGLntZJN.js";
13
+ import { _ as _sfc_main$6 } from "../chunks/LpPopover-BQSuxtai.js";
14
+ import { _ as _sfc_main$b } from "../chunks/LpScrollArea-CqvwfZs2.js";
15
+ import { _ as _sfc_main$9 } from "../chunks/LpRollingText-B54Pje7P.js";
16
16
  import { _ as _sfc_main$2 } from "../chunks/LpShift-DAgS_d2x.js";
17
- import { _ as _sfc_main$b } from "../chunks/LpTableFilter-B_BFoBqS.js";
17
+ import { _ as _sfc_main$7 } from "../chunks/LpTableFilter-BGFNKyUX.js";
18
+ import { _ as _sfc_main$3 } from "../chunks/LpDropdownMenu-BPEsqZCN.js";
19
+ import { _ as _sfc_main$a } from "../chunks/LpSegmented-DD8MPj4j.js";
18
20
  import { useKitStorage } from "../composables/usePersisted.js";
19
21
  import { useAsyncTask } from "../composables/useAsyncTask.js";
20
22
  import { useTableFacets } from "./tableFacets.js";
@@ -27,12 +29,12 @@ import { orderPinned, pinOffsets, groupRows, rowWindow, presetHidden, sortByKeys
27
29
  import { devWarn } from "../composables/devWarn.js";
28
30
  import { startPointerDrag } from "../composables/pointerDrag.js";
29
31
  import { isHTMLElement, nodeWindow } from "../composables/realm.js";
30
- import { _ as _sfc_main$5 } from "../chunks/LpButton-DSHioIfD.js";
32
+ import { _ as _sfc_main$4 } from "../chunks/LpButton-DSHioIfD.js";
31
33
  import { toCsv, downloadFile, fileStem } from "./exportData.js";
32
34
  import { toHiddenSets, sameHidden, summarizeShown, parseTableState, mergeRestored, serializeTableState, fromHiddenSets } from "./tableFilter.js";
33
35
  import { resolveRowMenu } from "./tableRowMenu.js";
34
36
  import { _ as _export_sfc } from "../chunks/_plugin-vue_export-helper-1tPrXgE0.js";
35
- import '../assets/LpTable-CEFsRz5J.css';const _hoisted_1 = {
37
+ import '../assets/LpTable-ClBFQeTd.css';const _hoisted_1 = {
36
38
  key: 0,
37
39
  class: "flex min-h-8 flex-wrap items-center gap-x-3 gap-y-2 pb-3 text-xs"
38
40
  };
@@ -42,61 +44,101 @@ const _hoisted_2 = {
42
44
  };
43
45
  const _hoisted_3 = {
44
46
  key: 1,
47
+ class: "flex flex-wrap items-center gap-1 text-sm"
48
+ };
49
+ const _hoisted_4 = {
50
+ key: 2,
45
51
  class: "flex min-w-0 flex-1 flex-wrap items-center gap-1.5"
46
52
  };
47
- const _hoisted_4 = { class: "truncate" };
48
- const _hoisted_5 = { class: "text-muted" };
49
- const _hoisted_6 = { class: "flex items-center gap-2 whitespace-nowrap text-muted" };
50
- const _hoisted_7 = {
53
+ const _hoisted_5 = { class: "truncate" };
54
+ const _hoisted_6 = { class: "text-muted" };
55
+ const _hoisted_7 = { class: "flex items-center gap-2 whitespace-nowrap text-muted" };
56
+ const _hoisted_8 = {
51
57
  key: 0,
52
58
  class: "flex items-center gap-2"
53
59
  };
54
- const _hoisted_8 = {
60
+ const _hoisted_9 = {
55
61
  key: 0,
56
62
  class: "flex items-center gap-2"
57
63
  };
58
- const _hoisted_9 = { class: "hidden sm:inline" };
59
- const _hoisted_10 = ["aria-rowcount"];
60
- const _hoisted_11 = { class: "border-b border-line bg-surface-soft" };
61
- const _hoisted_12 = ["inert"];
62
- const _hoisted_13 = ["data-lp-col", "aria-sort"];
63
- const _hoisted_14 = ["onClick"];
64
- const _hoisted_15 = {
64
+ const _hoisted_10 = { class: "hidden sm:inline" };
65
+ const _hoisted_11 = ["aria-rowcount"];
66
+ const _hoisted_12 = { class: "border-b border-line bg-surface-soft" };
67
+ const _hoisted_13 = ["inert"];
68
+ const _hoisted_14 = ["data-lp-col", "aria-sort"];
69
+ const _hoisted_15 = ["onClick"];
70
+ const _hoisted_16 = {
65
71
  key: 1,
66
72
  class: "tabular-nums text-brand"
67
73
  };
68
- const _hoisted_16 = ["aria-label", "data-lp-filter"];
69
- const _hoisted_17 = ["aria-label", "aria-valuenow", "data-lp-resize", "onPointerdown", "onDblclick", "onKeydown"];
70
- const _hoisted_18 = {
74
+ const _hoisted_17 = ["aria-label", "data-lp-filter"];
75
+ const _hoisted_18 = ["aria-label", "aria-valuenow", "data-lp-resize", "onPointerdown", "onDblclick", "onKeydown"];
76
+ const _hoisted_19 = {
71
77
  key: 0,
72
78
  class: "sr-only"
73
79
  };
74
- const _hoisted_19 = {
80
+ const _hoisted_20 = {
75
81
  key: "lp-table-empty",
76
82
  class: "lp-row-empty"
77
83
  };
78
- const _hoisted_20 = ["colspan"];
79
- const _hoisted_21 = {
84
+ const _hoisted_21 = ["colspan"];
85
+ const _hoisted_22 = {
80
86
  key: "lp-virtual-before",
81
87
  "aria-hidden": "true"
82
88
  };
83
- const _hoisted_22 = ["colspan"];
84
89
  const _hoisted_23 = ["colspan"];
85
- const _hoisted_24 = ["aria-expanded", "aria-label", "onClick"];
86
- const _hoisted_25 = {
90
+ const _hoisted_24 = ["colspan"];
91
+ const _hoisted_25 = ["aria-expanded", "aria-label", "onClick"];
92
+ const _hoisted_26 = {
87
93
  key: 1,
88
94
  class: "border-b border-line/60 last:border-0",
89
95
  "data-lp-row-detail": ""
90
96
  };
91
- const _hoisted_26 = ["colspan"];
92
- const _hoisted_27 = ["onContextmenu", "aria-rowindex", "data-paint-key", "data-lp-context-row", "onClick", "onPointerdown"];
93
- const _hoisted_28 = ["aria-expanded", "aria-label", "onClick"];
94
- const _hoisted_29 = ["onPointerdown"];
95
- const _hoisted_30 = {
97
+ const _hoisted_27 = ["colspan"];
98
+ const _hoisted_28 = ["onContextmenu", "aria-rowindex", "data-paint-key", "data-lp-context-row", "onClick", "onPointerdown"];
99
+ const _hoisted_29 = ["aria-expanded", "aria-label", "onClick"];
100
+ const _hoisted_30 = ["onPointerdown"];
101
+ const _hoisted_31 = {
96
102
  key: "lp-virtual-after",
97
103
  "aria-hidden": "true"
98
104
  };
99
- const _hoisted_31 = ["colspan"];
105
+ const _hoisted_32 = ["colspan"];
106
+ const _hoisted_33 = {
107
+ key: 1,
108
+ class: "sr-only"
109
+ };
110
+ const _hoisted_34 = ["aria-expanded", "aria-label", "onClick"];
111
+ const _hoisted_35 = ["data-paint-key", "data-lp-context-row", "onContextmenu", "onClick", "onPointerdown"];
112
+ const _hoisted_36 = ["onPointerdown"];
113
+ const _hoisted_37 = ["data-cue", "inert"];
114
+ const _hoisted_38 = { class: "flex min-w-0 flex-col gap-2 p-4" };
115
+ const _hoisted_39 = {
116
+ key: 0,
117
+ class: "min-w-0 truncate pr-6 font-medium text-ink"
118
+ };
119
+ const _hoisted_40 = {
120
+ key: 1,
121
+ class: "grid grid-cols-[auto_minmax(0,1fr)] items-baseline gap-x-3 gap-y-1 text-sm"
122
+ };
123
+ const _hoisted_41 = { class: "text-xs text-muted" };
124
+ const _hoisted_42 = { class: "min-w-0 truncate text-ink" };
125
+ const _hoisted_43 = {
126
+ key: 2,
127
+ class: "min-w-0 flex-1"
128
+ };
129
+ const _hoisted_44 = {
130
+ key: 0,
131
+ class: "min-w-0 truncate font-medium text-ink"
132
+ };
133
+ const _hoisted_45 = {
134
+ key: 1,
135
+ class: "flex min-w-0 flex-wrap items-center gap-x-2 gap-y-0.5 text-xs text-muted"
136
+ };
137
+ const _hoisted_46 = {
138
+ key: 0,
139
+ "aria-hidden": "true"
140
+ };
141
+ const _hoisted_47 = ["title"];
100
142
  const __default__ = { inheritAttrs: false };
101
143
  const _sfc_main = /* @__PURE__ */ defineComponent({
102
144
  ...__default__,
@@ -148,9 +190,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
148
190
  expandable: { type: [Boolean, Function] },
149
191
  expanded: { default: void 0 },
150
192
  virtualRowHeight: { default: void 0 },
151
- virtualOverscan: { default: 6 }
193
+ virtualOverscan: { default: 6 },
194
+ layout: { default: void 0 },
195
+ layouts: { default: void 0 },
196
+ layoutBelow: { default: void 0 },
197
+ variant: { default: "framed" },
198
+ cardWidth: { default: "16rem" }
152
199
  },
153
- emits: ["update:selected", "update:sort", "update:filters", "resetFilters", "update:allMatching", "update:selectionToken", "update:sorts", "update:columnWidths", "update:columnPreset", "update:collapsedGroups", "update:expanded", "cellEdit", "rowClick"],
200
+ emits: ["update:selected", "update:sort", "update:filters", "resetFilters", "update:allMatching", "update:selectionToken", "update:sorts", "update:columnWidths", "update:columnPreset", "update:collapsedGroups", "update:expanded", "cellEdit", "rowClick", "update:layout"],
154
201
  setup(__props, { expose: __expose, emit: __emit }) {
155
202
  const props = __props;
156
203
  const labelSet = useLabels(
@@ -195,7 +242,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
195
242
  collapseRow: "Collapse row",
196
243
  groupCount: "{label} ({count})",
197
244
  expandGroup: "Expand {label}",
198
- collapseGroup: "Collapse {label}"
245
+ collapseGroup: "Collapse {label}",
246
+ layoutTable: "Table",
247
+ layoutCards: "Cards",
248
+ layoutList: "List",
249
+ layoutSwitch: "View",
250
+ sortBy: "Sort"
199
251
  },
200
252
  () => props.labels
201
253
  );
@@ -647,6 +699,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
647
699
  if (state.hidden) writeHidden(mergeRestored(hiddenValues.value, state.hidden));
648
700
  if (state.columns) hiddenColumns.value = new Set(state.columns);
649
701
  }
702
+ const layout = store.get(`${storageKey.value}:layout`);
703
+ if ((layout === "table" || layout === "cards" || layout === "list") && (!props.layouts || props.layouts.includes(layout))) {
704
+ ownLayout.value = layout;
705
+ if (props.layout !== void 0 && props.layout !== layout) emit("update:layout", layout);
706
+ }
650
707
  }
651
708
  restored.value = true;
652
709
  });
@@ -801,7 +858,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
801
858
  });
802
859
  const slots = useSlots();
803
860
  const showBar = computed(
804
- () => props.summary || props.exportable || !!slots.toolbar || !!props.selectable && props.selected.length > 0 || activeFilters.value.length > 0
861
+ () => props.summary || props.exportable || !!slots.toolbar || layoutChoices.value.length > 0 || !!props.selectable && props.selected.length > 0 || activeFilters.value.length > 0
805
862
  );
806
863
  const filteredOut = computed(() => {
807
864
  if (busy.value || failed.value || displayRows.value.length) return false;
@@ -810,6 +867,75 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
810
867
  return props.rows.length > 0;
811
868
  });
812
869
  const cellY = computed(() => props.density === "compact" ? "py-1.5" : "py-3");
870
+ const ownLayout = ref("table");
871
+ const chosenLayout = computed(() => props.layout ?? ownLayout.value);
872
+ const frameWidth = ref(Number.POSITIVE_INFINITY);
873
+ useResizeObserver(frameEl, (_, el) => frameWidth.value = el.clientWidth, { immediate: true });
874
+ const activeLayout = computed(
875
+ () => chosenLayout.value === "table" && props.layoutBelow && frameWidth.value < props.layoutBelow ? "list" : chosenLayout.value
876
+ );
877
+ const layoutChoices = computed(() => props.layouts && props.layouts.length > 1 ? props.layouts : []);
878
+ const LAYOUT_ICONS = {
879
+ table: "lucide:table-2",
880
+ cards: "lucide:layout-grid",
881
+ list: "lucide:list"
882
+ };
883
+ const layoutOptions = computed(
884
+ () => layoutChoices.value.map((value) => {
885
+ const label = text.value[`layout${value[0].toUpperCase()}${value.slice(1)}`] ?? value;
886
+ return { value, icon: LAYOUT_ICONS[value], ariaLabel: label };
887
+ })
888
+ );
889
+ function chooseLayout(next) {
890
+ const layout = next;
891
+ if (layout === chosenLayout.value) return;
892
+ ownLayout.value = layout;
893
+ emit("update:layout", layout);
894
+ }
895
+ const headerless = computed(() => activeLayout.value !== "table");
896
+ const sortableColumns = computed(() => props.columns.filter((col) => col.sortable && col.label));
897
+ const filterableColumns = computed(() => props.columns.filter((col) => col.filterable && col.label));
898
+ function sortMenu() {
899
+ const current = activeSort.value;
900
+ const dir = current?.dir ?? "asc";
901
+ return [
902
+ // The columns, the one sorted by ticked; picking one keeps the direction.
903
+ ...sortableColumns.value.map((col) => ({
904
+ label: col.label,
905
+ selected: current?.key === col.key,
906
+ onSelect: () => writeSorts([{ key: col.key, dir }])
907
+ })),
908
+ {
909
+ label: text.value.sortAsc,
910
+ icon: "lucide:arrow-up",
911
+ separatorBefore: true,
912
+ disabled: !current,
913
+ selected: current?.dir === "asc",
914
+ onSelect: () => current && writeSorts([{ key: current.key, dir: "asc" }])
915
+ },
916
+ {
917
+ label: text.value.sortDesc,
918
+ icon: "lucide:arrow-down",
919
+ disabled: !current,
920
+ selected: current?.dir === "desc",
921
+ onSelect: () => current && writeSorts([{ key: current.key, dir: "desc" }])
922
+ },
923
+ { label: text.value.sortClear, icon: "lucide:x", separatorBefore: true, disabled: !current, onSelect: () => writeSorts([]) }
924
+ ];
925
+ }
926
+ const sortSummary = computed(() => {
927
+ const current = activeSort.value;
928
+ const col = current && props.columns.find((c) => c.key === current.key);
929
+ return col ? col.label : text.value.sortBy;
930
+ });
931
+ const cardColumns = computed(
932
+ () => orderPinned(props.columns.filter((col) => !hiddenColumns.value.has(col.key)))
933
+ );
934
+ const titleColumn = computed(() => cardColumns.value[0]);
935
+ const fieldColumns = computed(() => cardColumns.value.slice(1).filter((col) => col.label));
936
+ watch(chosenLayout, (layout) => {
937
+ if (storageKey.value && restored.value) store.set(`${storageKey.value}:layout`, layout);
938
+ });
813
939
  const SKELETON_WIDTHS = [72, 48, 88, 60, 40, 80, 56];
814
940
  function skeletonWidth(row, col) {
815
941
  return `${SKELETON_WIDTHS[(row * 3 + col * 2) % SKELETON_WIDTHS.length]}%`;
@@ -874,7 +1000,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
874
1000
  });
875
1001
  useResizeObserver(viewportEl, (_, el) => viewportHeight.value = el.clientHeight, { immediate: true });
876
1002
  const rowWindowed = computed(
877
- () => props.virtualRowHeight ? rowWindow(scrollTop.value, viewportHeight.value, props.virtualRowHeight, allEntries.value.length, props.virtualOverscan) : null
1003
+ () => props.virtualRowHeight && !headerless.value ? rowWindow(scrollTop.value, viewportHeight.value, props.virtualRowHeight, allEntries.value.length, props.virtualOverscan) : null
878
1004
  );
879
1005
  const viewEntries = computed(
880
1006
  () => rowWindowed.value ? allEntries.value.slice(rowWindowed.value.start, rowWindowed.value.end) : allEntries.value
@@ -987,9 +1113,69 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
987
1113
  _ctx.$slots.toolbar ? (openBlock(), createElementBlock("div", _hoisted_2, [
988
1114
  renderSlot(_ctx.$slots, "toolbar", {}, void 0, true)
989
1115
  ])) : createCommentVNode("", true),
990
- activeFilters.value.length ? (openBlock(), createElementBlock("div", _hoisted_3, [
1116
+ headerless.value && (sortableColumns.value.length || filterableColumns.value.length) ? (openBlock(), createElementBlock("div", _hoisted_3, [
1117
+ sortableColumns.value.length ? (openBlock(), createBlock(_sfc_main$3, {
1118
+ key: 0,
1119
+ items: sortMenu()
1120
+ }, {
1121
+ trigger: withCtx(() => [
1122
+ createVNode(_sfc_main$4, {
1123
+ variant: "ghost",
1124
+ size: "sm",
1125
+ "aria-label": text.value.sortBy
1126
+ }, {
1127
+ default: withCtx(() => [
1128
+ createVNode(_sfc_main$5, {
1129
+ name: activeSort.value ? activeSort.value.dir === "asc" ? "lucide:arrow-up" : "lucide:arrow-down" : "lucide:arrow-up-down",
1130
+ size: 14
1131
+ }, null, 8, ["name"]),
1132
+ createTextVNode(" " + toDisplayString(sortSummary.value), 1)
1133
+ ]),
1134
+ _: 1
1135
+ }, 8, ["aria-label"])
1136
+ ]),
1137
+ _: 1
1138
+ }, 8, ["items"])) : createCommentVNode("", true),
1139
+ (openBlock(true), createElementBlock(Fragment, null, renderList(filterableColumns.value, (col) => {
1140
+ return openBlock(), createBlock(_sfc_main$6, {
1141
+ key: col.key,
1142
+ align: "start",
1143
+ "panel-class": "w-72",
1144
+ "aria-label": text.value.filterColumn.replace("{column}", col.label)
1145
+ }, {
1146
+ trigger: withCtx(() => [
1147
+ createVNode(_sfc_main$4, {
1148
+ variant: "ghost",
1149
+ size: "sm",
1150
+ class: normalizeClass(hiddenValues.value[col.key]?.size ? "text-brand" : ""),
1151
+ "aria-label": text.value.filterColumn.replace("{column}", col.label),
1152
+ "data-lp-filter": col.key
1153
+ }, {
1154
+ default: withCtx(() => [
1155
+ createVNode(_sfc_main$5, {
1156
+ name: hiddenValues.value[col.key]?.size ? "lucide:filter-x" : "lucide:filter",
1157
+ size: 14
1158
+ }, null, 8, ["name"]),
1159
+ createTextVNode(" " + toDisplayString(col.label), 1)
1160
+ ]),
1161
+ _: 2
1162
+ }, 1032, ["class", "aria-label", "data-lp-filter"])
1163
+ ]),
1164
+ default: withCtx(() => [
1165
+ createVNode(_sfc_main$7, {
1166
+ options: facetOptions.value.get(col.key)?.value ?? [],
1167
+ hidden: hiddenValues.value[col.key] ?? /* @__PURE__ */ new Set(),
1168
+ labels: filterLabels(),
1169
+ "onUpdate:hidden": (next) => setHidden(col.key, next)
1170
+ }, null, 8, ["options", "hidden", "labels", "onUpdate:hidden"])
1171
+ ]),
1172
+ _: 2
1173
+ }, 1032, ["aria-label"]);
1174
+ }), 128))
1175
+ ])) : createCommentVNode("", true),
1176
+ activeFilters.value.length ? (openBlock(), createElementBlock("div", _hoisted_4, [
991
1177
  (openBlock(true), createElementBlock(Fragment, null, renderList(activeFilters.value, (f) => {
992
- return openBlock(), createBlock(_sfc_main$3, {
1178
+ return openBlock(), createBlock(_sfc_main$8, {
993
1179
  key: f.col.key,
994
1180
  tone: "brand",
995
1181
  removable: "",
@@ -998,8 +1184,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
998
1184
  onRemove: ($event) => showAllValues(f.col.key)
999
1185
  }, {
1000
1186
  default: withCtx(() => [
1001
- createElementVNode("span", _hoisted_4, [
1002
- createElementVNode("span", _hoisted_5, toDisplayString(f.col.label) + ":", 1),
1187
+ createElementVNode("span", _hoisted_5, [
1188
+ createElementVNode("span", _hoisted_6, toDisplayString(f.col.label) + ":", 1),
1003
1189
  createTextVNode(" " + toDisplayString(f.text), 1)
1004
1190
  ])
1005
1191
  ]),
@@ -1018,8 +1204,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1018
1204
  class: "ml-auto shrink-0"
1019
1205
  }, {
1020
1206
  default: withCtx(() => [
1021
- createElementVNode("div", _hoisted_6, [
1022
- createVNode(_sfc_main$4, {
1207
+ createElementVNode("div", _hoisted_7, [
1208
+ createVNode(_sfc_main$9, {
1023
1209
  value: statusText.value,
1024
1210
  align: "end",
1025
1211
  class: normalizeClass(["tabular-nums", __props.selectable && __props.selected.length ? "font-medium text-ink" : ""]),
@@ -1032,7 +1218,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1032
1218
  "leave-to-class": "opacity-0"
1033
1219
  }, {
1034
1220
  default: withCtx(() => [
1035
- __props.selectable && __props.selected.length ? (openBlock(), createElementBlock("span", _hoisted_7, [
1221
+ __props.selectable && __props.selected.length ? (openBlock(), createElementBlock("span", _hoisted_8, [
1036
1222
  createVNode(Transition, {
1037
1223
  "enter-active-class": "transition-opacity duration-fast motion-reduce:transition-none",
1038
1224
  "leave-active-class": "transition-opacity duration-fast motion-reduce:transition-none",
@@ -1040,8 +1226,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1040
1226
  "leave-to-class": "opacity-0"
1041
1227
  }, {
1042
1228
  default: withCtx(() => [
1043
- __props.load && pageAllSelected.value && !__props.allMatching && total.value > pageKeys.value.length ? (openBlock(), createElementBlock("span", _hoisted_8, [
1044
- createElementVNode("span", _hoisted_9, toDisplayString(text.value.pageSelected.replace("{count}", String(pageKeys.value.length))), 1),
1229
+ __props.load && pageAllSelected.value && !__props.allMatching && total.value > pageKeys.value.length ? (openBlock(), createElementBlock("span", _hoisted_9, [
1230
+ createElementVNode("span", _hoisted_10, toDisplayString(text.value.pageSelected.replace("{count}", String(pageKeys.value.length))), 1),
1045
1231
  createElementVNode("button", {
1046
1232
  type: "button",
1047
1233
  class: "rounded-control px-1.5 py-0.5 font-medium text-brand outline-none transition-colors duration-fast hover:bg-brand-soft focus-visible:ring-2 focus-visible:ring-ring",
@@ -1065,14 +1251,22 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1065
1251
  ]),
1066
1252
  _: 3
1067
1253
  }),
1068
- __props.exportable ? (openBlock(), createBlock(_sfc_main$5, {
1254
+ layoutOptions.value.length ? (openBlock(), createBlock(_sfc_main$a, {
1069
1255
  key: 0,
1256
+ "model-value": chosenLayout.value,
1257
+ options: layoutOptions.value,
1258
+ size: "sm",
1259
+ "aria-label": text.value.layoutSwitch,
1260
+ "onUpdate:modelValue": chooseLayout
1261
+ }, null, 8, ["model-value", "options", "aria-label"])) : createCommentVNode("", true),
1262
+ __props.exportable ? (openBlock(), createBlock(_sfc_main$4, {
1263
+ key: 1,
1070
1264
  variant: "ghost",
1071
1265
  size: "sm",
1072
1266
  onClick: _cache[1] || (_cache[1] = ($event) => exportCsv())
1073
1267
  }, {
1074
1268
  default: withCtx(() => [
1075
- createVNode(_sfc_main$6, {
1269
+ createVNode(_sfc_main$5, {
1076
1270
  name: "lucide:download",
1077
1271
  size: 14
1078
1272
  }),
@@ -1093,14 +1287,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1093
1287
  class: "flex min-h-0 flex-auto flex-col"
1094
1288
  }, {
1095
1289
  default: withCtx(() => [
1096
- createVNode(_sfc_main$7, mergeProps(scrollAttrs.value, {
1290
+ !headerless.value ? (openBlock(), createBlock(_sfc_main$b, mergeProps({ key: 0 }, scrollAttrs.value, {
1097
1291
  fade: false,
1098
- class: "min-h-0 flex-1 rounded-card border border-line bg-surface",
1292
+ class: ["min-h-0 flex-1", __props.variant === "framed" ? "rounded-card border border-line bg-surface" : ""],
1099
1293
  style: __props.load && floor.value ? { minHeight: `${floor.value + 2}px` } : void 0,
1100
1294
  "bar-inset-top": barInsetTop.value
1101
1295
  }), {
1102
1296
  default: withCtx(() => [
1103
- createVNode(_sfc_main$8, {
1297
+ createVNode(_sfc_main$c, {
1104
1298
  items: contextMenu.value,
1105
1299
  always: "",
1106
1300
  "no-hint": !__props.rowMenu,
@@ -1122,7 +1316,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1122
1316
  ref: headEl,
1123
1317
  class: normalizeClass(__props.stickyHeader ? "sticky top-0 z-10 bg-surface-soft" : "")
1124
1318
  }, [
1125
- createElementVNode("tr", _hoisted_11, [
1319
+ createElementVNode("tr", _hoisted_12, [
1126
1320
  expansionOn.value ? (openBlock(), createElementBlock("th", {
1127
1321
  key: 0,
1128
1322
  class: normalizeClass(["w-px p-0", cellY.value]),
@@ -1137,12 +1331,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1137
1331
  class: normalizeClass(["lp-tick lp-tick-open", ticksShown.value ? "" : "lp-tick-hidden"]),
1138
1332
  inert: !ticksShown.value
1139
1333
  }, [
1140
- createVNode(_sfc_main$9, {
1334
+ createVNode(_sfc_main$d, {
1141
1335
  "model-value": allChecked.value,
1142
1336
  indeterminate: someChecked.value,
1143
1337
  "onUpdate:modelValue": toggleAll
1144
1338
  }, null, 8, ["model-value", "indeterminate"])
1145
- ], 10, _hoisted_12)
1339
+ ], 10, _hoisted_13)
1146
1340
  ], 6)) : createCommentVNode("", true),
1147
1341
  (openBlock(true), createElementBlock(Fragment, null, renderList(shownColumns.value, (col) => {
1148
1342
  return openBlock(), createElementBlock("th", {
@@ -1152,21 +1346,21 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1152
1346
  "data-lp-col": measuredCol(col),
1153
1347
  "aria-sort": sortOf(col) ? sortOf(col).dir === "asc" ? "ascending" : "descending" : void 0
1154
1348
  }, [
1155
- col.sortable || col.filterable ? (openBlock(), createBlock(_sfc_main$8, {
1349
+ col.sortable || col.filterable ? (openBlock(), createBlock(_sfc_main$c, {
1156
1350
  key: 0,
1157
1351
  items: headerMenu(col)
1158
1352
  }, {
1159
1353
  default: withCtx(() => [
1160
1354
  createElementVNode("button", {
1161
1355
  type: "button",
1162
- class: normalizeClass(["group/sort -mx-1 inline-flex items-center gap-1 rounded-small px-1 outline-none transition-colors duration-[var(--duration-fast)] hover:text-ink focus-visible:ring-2 focus-visible:ring-ring", [
1356
+ class: normalizeClass(["group/sort -mx-1 inline-flex items-center gap-1 rounded-small px-1 uppercase outline-none transition-colors duration-[var(--duration-fast)] hover:text-ink focus-visible:ring-2 focus-visible:ring-ring", [
1163
1357
  col.align === "right" ? "flex-row-reverse" : "",
1164
1358
  sortOf(col) ? "text-ink" : ""
1165
1359
  ]]),
1166
1360
  onClick: ($event) => toggleSort(col, $event)
1167
1361
  }, [
1168
1362
  createTextVNode(toDisplayString(col.label) + " ", 1),
1169
- col.sortable ? (openBlock(), createBlock(_sfc_main$6, {
1363
+ col.sortable ? (openBlock(), createBlock(_sfc_main$5, {
1170
1364
  key: 0,
1171
1365
  name: sortIcon(col),
1172
1366
  size: 13,
@@ -1175,14 +1369,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1175
1369
  sortOf(col) ? "opacity-100" : "opacity-40 group-hover/sort:opacity-70"
1176
1370
  ])
1177
1371
  }, null, 8, ["name", "class"])) : createCommentVNode("", true),
1178
- sortPosition(col) ? (openBlock(), createElementBlock("span", _hoisted_15, toDisplayString(sortPosition(col)), 1)) : createCommentVNode("", true)
1179
- ], 10, _hoisted_14)
1372
+ sortPosition(col) ? (openBlock(), createElementBlock("span", _hoisted_16, toDisplayString(sortPosition(col)), 1)) : createCommentVNode("", true)
1373
+ ], 10, _hoisted_15)
1180
1374
  ]),
1181
1375
  _: 2
1182
1376
  }, 1032, ["items"])) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
1183
1377
  createTextVNode(toDisplayString(col.label), 1)
1184
1378
  ], 64)),
1185
- col.filterable ? (openBlock(), createBlock(_sfc_main$a, {
1379
+ col.filterable ? (openBlock(), createBlock(_sfc_main$6, {
1186
1380
  key: 2,
1187
1381
  align: "start",
1188
1382
  "panel-class": "w-72",
@@ -1195,14 +1389,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1195
1389
  "aria-label": text.value.filterColumn.replace("{column}", col.label),
1196
1390
  "data-lp-filter": col.key
1197
1391
  }, [
1198
- createVNode(_sfc_main$6, {
1392
+ createVNode(_sfc_main$5, {
1199
1393
  name: hiddenValues.value[col.key]?.size ? "lucide:filter-x" : "lucide:filter",
1200
1394
  size: 12
1201
1395
  }, null, 8, ["name"])
1202
- ], 10, _hoisted_16)
1396
+ ], 10, _hoisted_17)
1203
1397
  ]),
1204
1398
  default: withCtx(() => [
1205
- createVNode(_sfc_main$b, {
1399
+ createVNode(_sfc_main$7, {
1206
1400
  options: facetOptions.value.get(col.key)?.value ?? [],
1207
1401
  hidden: hiddenValues.value[col.key] ?? /* @__PURE__ */ new Set(),
1208
1402
  labels: filterLabels(),
@@ -1225,8 +1419,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1225
1419
  }, ["stop"])),
1226
1420
  onDblclick: withModifiers(($event) => clearWidth(col), ["stop"]),
1227
1421
  onKeydown: ($event) => onResizeKey($event, col)
1228
- }, null, 40, _hoisted_17)) : createCommentVNode("", true)
1229
- ], 14, _hoisted_13);
1422
+ }, null, 40, _hoisted_18)) : createCommentVNode("", true)
1423
+ ], 14, _hoisted_14);
1230
1424
  }), 128))
1231
1425
  ])
1232
1426
  ], 2),
@@ -1257,26 +1451,26 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1257
1451
  key: col.key,
1258
1452
  class: normalizeClass(["px-4", [alignClass(col.align), cellY.value]])
1259
1453
  }, [
1260
- createVNode(_sfc_main$c, {
1454
+ createVNode(_sfc_main$e, {
1261
1455
  class: "inline-block h-3 align-middle",
1262
1456
  style: normalizeStyle({ width: skeletonWidth(n, ci) })
1263
1457
  }, null, 8, ["style"]),
1264
- n === 1 && ci === 0 ? (openBlock(), createElementBlock("span", _hoisted_18, toDisplayString(text.value.loading), 1)) : createCommentVNode("", true)
1458
+ n === 1 && ci === 0 ? (openBlock(), createElementBlock("span", _hoisted_19, toDisplayString(text.value.loading), 1)) : createCommentVNode("", true)
1265
1459
  ], 2);
1266
1460
  }), 128))
1267
1461
  ]);
1268
- }), 128)) : displayRows.value.length === 0 ? (openBlock(), createElementBlock("tr", _hoisted_19, [
1462
+ }), 128)) : displayRows.value.length === 0 ? (openBlock(), createElementBlock("tr", _hoisted_20, [
1269
1463
  createElementVNode("td", {
1270
1464
  colspan: colSpan.value,
1271
1465
  class: "p-0"
1272
1466
  }, [
1273
- createVNode(_sfc_main$d, {
1467
+ createVNode(_sfc_main$f, {
1274
1468
  compact: "",
1275
1469
  icon: failed.value ? "lucide:circle-alert" : filteredOut.value ? "lucide:filter-x" : __props.emptyIcon,
1276
1470
  title: failed.value ? text.value.error : filteredOut.value ? text.value.noMatches : text.value.empty
1277
1471
  }, {
1278
1472
  default: withCtx(() => [
1279
- filteredOut.value ? (openBlock(), createBlock(_sfc_main$5, {
1473
+ filteredOut.value ? (openBlock(), createBlock(_sfc_main$4, {
1280
1474
  key: 0,
1281
1475
  variant: "outline",
1282
1476
  size: "sm",
@@ -1290,14 +1484,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1290
1484
  ]),
1291
1485
  _: 1
1292
1486
  }, 8, ["icon", "title"])
1293
- ], 8, _hoisted_20)
1487
+ ], 8, _hoisted_21)
1294
1488
  ])) : createCommentVNode("", true),
1295
- rowWindowed.value?.before ? (openBlock(), createElementBlock("tr", _hoisted_21, [
1489
+ rowWindowed.value?.before ? (openBlock(), createElementBlock("tr", _hoisted_22, [
1296
1490
  createElementVNode("td", {
1297
1491
  colspan: colSpan.value,
1298
1492
  class: "p-0",
1299
1493
  style: normalizeStyle({ height: `${rowWindowed.value.before}px` })
1300
- }, null, 12, _hoisted_22)
1494
+ }, null, 12, _hoisted_23)
1301
1495
  ])) : createCommentVNode("", true),
1302
1496
  (openBlock(true), createElementBlock(Fragment, null, renderList(viewEntries.value, (entry) => {
1303
1497
  return openBlock(), createElementBlock(Fragment, {
@@ -1326,16 +1520,16 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1326
1520
  "aria-label": (entry.collapsed ? text.value.expandGroup : text.value.collapseGroup).replace("{label}", entry.label),
1327
1521
  onClick: ($event) => toggleGroup(entry.group)
1328
1522
  }, [
1329
- createVNode(_sfc_main$6, {
1523
+ createVNode(_sfc_main$5, {
1330
1524
  name: "lucide:chevron-right",
1331
1525
  size: 14,
1332
1526
  class: normalizeClass(["transition-transform duration-fast motion-reduce:transition-none", entry.collapsed ? "" : "rotate-90"])
1333
1527
  }, null, 8, ["class"]),
1334
1528
  createTextVNode(" " + toDisplayString(entry.label), 1)
1335
- ], 8, _hoisted_24)
1529
+ ], 8, _hoisted_25)
1336
1530
  ], true)
1337
- ], 10, _hoisted_23)
1338
- ], 4)) : entry.kind === "detail" ? (openBlock(), createElementBlock("tr", _hoisted_25, [
1531
+ ], 10, _hoisted_24)
1532
+ ], 4)) : entry.kind === "detail" ? (openBlock(), createElementBlock("tr", _hoisted_26, [
1339
1533
  createElementVNode("td", {
1340
1534
  colspan: colSpan.value,
1341
1535
  class: "px-4 py-3"
@@ -1344,7 +1538,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1344
1538
  row: entry.row,
1345
1539
  close: () => toggleExpanded(keyFor(entry.row, entry.index))
1346
1540
  }, void 0, true)
1347
- ], 8, _hoisted_26)
1541
+ ], 8, _hoisted_27)
1348
1542
  ])) : (openBlock(), createElementBlock("tr", mergeProps({
1349
1543
  key: 2,
1350
1544
  onContextmenu: ($event) => onRowContextMenu(entry.row),
@@ -1374,12 +1568,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1374
1568
  "aria-label": expandedKeys.value.has(keyFor(entry.row, entry.index)) ? text.value.collapseRow : text.value.expandRow,
1375
1569
  onClick: ($event) => toggleExpanded(keyFor(entry.row, entry.index))
1376
1570
  }, [
1377
- createVNode(_sfc_main$6, {
1571
+ createVNode(_sfc_main$5, {
1378
1572
  name: "lucide:chevron-right",
1379
1573
  size: 14,
1380
1574
  class: normalizeClass(["transition-transform duration-fast motion-reduce:transition-none", expandedKeys.value.has(keyFor(entry.row, entry.index)) ? "rotate-90" : ""])
1381
1575
  }, null, 8, ["class"])
1382
- ], 8, _hoisted_28)) : createCommentVNode("", true)
1576
+ ], 8, _hoisted_29)) : createCommentVNode("", true)
1383
1577
  ], 34)) : createCommentVNode("", true),
1384
1578
  __props.selectable ? (openBlock(), createElementBlock("td", {
1385
1579
  key: 1,
@@ -1391,12 +1585,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1391
1585
  createElementVNode("div", {
1392
1586
  class: normalizeClass(["lp-tick lp-tick-open", ticksShown.value ? "" : "lp-tick-cue"])
1393
1587
  }, [
1394
- createVNode(_sfc_main$9, {
1588
+ createVNode(_sfc_main$d, {
1395
1589
  "model-value": isSelected(keyFor(entry.row, entry.index)),
1396
1590
  "onUpdate:modelValue": (v) => toggleRow(keyFor(entry.row, entry.index), v)
1397
1591
  }, null, 8, ["model-value", "onUpdate:modelValue"])
1398
1592
  ], 2)
1399
- ], 42, _hoisted_29)) : createCommentVNode("", true),
1593
+ ], 42, _hoisted_30)) : createCommentVNode("", true),
1400
1594
  (openBlock(true), createElementBlock(Fragment, null, renderList(shownColumns.value, (col) => {
1401
1595
  return openBlock(), createElementBlock("td", {
1402
1596
  key: col.key,
@@ -1418,7 +1612,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1418
1612
  onKeydown: _cache[8] || (_cache[8] = withModifiers(() => {
1419
1613
  }, ["stop"]))
1420
1614
  }, [
1421
- createVNode(_sfc_main$e, {
1615
+ createVNode(_sfc_main$g, {
1422
1616
  "model-value": String(entry.row[col.key] ?? ""),
1423
1617
  label: col.label,
1424
1618
  size: "sm",
@@ -1431,33 +1625,250 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1431
1625
  ], true)
1432
1626
  ], 6);
1433
1627
  }), 128))
1434
- ], 16, _hoisted_27))
1628
+ ], 16, _hoisted_28))
1435
1629
  ], 64);
1436
1630
  }), 128)),
1437
- rowWindowed.value?.after ? (openBlock(), createElementBlock("tr", _hoisted_30, [
1631
+ rowWindowed.value?.after ? (openBlock(), createElementBlock("tr", _hoisted_31, [
1438
1632
  createElementVNode("td", {
1439
1633
  colspan: colSpan.value,
1440
1634
  class: "p-0",
1441
1635
  style: normalizeStyle({ height: `${rowWindowed.value.after}px` })
1442
- }, null, 12, _hoisted_31)
1636
+ }, null, 12, _hoisted_32)
1443
1637
  ])) : createCommentVNode("", true)
1444
1638
  ]),
1445
1639
  _: 3
1446
1640
  }, 8, ["css", "class", "aria-busy"])
1447
- ], 14, _hoisted_10)
1641
+ ], 14, _hoisted_11)
1448
1642
  ]),
1449
1643
  _: 3
1450
1644
  }, 8, ["items", "no-hint", "title", "subtitle", "title-icon", "title-image"])
1451
1645
  ]),
1452
1646
  _: 3
1453
- }, 16, ["style", "bar-inset-top"])
1647
+ }, 16, ["class", "style", "bar-inset-top"])) : (openBlock(), createBlock(_sfc_main$c, {
1648
+ key: 1,
1649
+ items: contextMenu.value,
1650
+ always: "",
1651
+ "no-hint": !__props.rowMenu,
1652
+ title: menuHead.value?.title,
1653
+ subtitle: menuHead.value?.subtitle,
1654
+ "title-icon": menuHead.value?.icon,
1655
+ "title-image": menuHead.value?.image
1656
+ }, {
1657
+ default: withCtx(() => [
1658
+ (openBlock(), createBlock(TransitionGroup, mergeProps({
1659
+ key: activeLayout.value,
1660
+ tag: "div",
1661
+ name: "lp-row",
1662
+ css: animating.value
1663
+ }, scrollAttrs.value, {
1664
+ class: ["min-h-0 transition-opacity", [
1665
+ busy.value && displayRows.value.length ? "opacity-60" : "",
1666
+ activeLayout.value === "cards" ? "grid gap-3" : __props.variant === "framed" ? "overflow-hidden rounded-card border border-line bg-surface" : ""
1667
+ ]],
1668
+ style: activeLayout.value === "cards" ? { gridTemplateColumns: `repeat(auto-fill, minmax(min(${__props.cardWidth}, 100%), 1fr))` } : void 0,
1669
+ "aria-busy": busy.value || void 0,
1670
+ ref: (el) => unref(roving).setContainer(el?.$el ?? null)
1671
+ }), {
1672
+ default: withCtx(() => [
1673
+ displayRows.value.length === 0 && busy.value ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(__props.skeletonRows, (n) => {
1674
+ return openBlock(), createElementBlock("div", {
1675
+ key: `lp-table-skeleton-${n}`,
1676
+ class: normalizeClass(["lp-row-empty", activeLayout.value === "cards" ? "flex flex-col gap-3 rounded-card border border-line bg-surface p-4" : ["flex flex-col gap-2 border-b border-line/60 px-4 last:border-0", cellY.value]])
1677
+ }, [
1678
+ createVNode(_sfc_main$e, {
1679
+ class: "h-3.5",
1680
+ style: normalizeStyle({ width: skeletonWidth(n, 0) })
1681
+ }, null, 8, ["style"]),
1682
+ createVNode(_sfc_main$e, {
1683
+ class: "h-3",
1684
+ style: normalizeStyle({ width: skeletonWidth(n, 1) })
1685
+ }, null, 8, ["style"]),
1686
+ activeLayout.value === "cards" ? (openBlock(), createBlock(_sfc_main$e, {
1687
+ key: 0,
1688
+ class: "h-3",
1689
+ style: normalizeStyle({ width: skeletonWidth(n, 2) })
1690
+ }, null, 8, ["style"])) : createCommentVNode("", true),
1691
+ n === 1 ? (openBlock(), createElementBlock("span", _hoisted_33, toDisplayString(text.value.loading), 1)) : createCommentVNode("", true)
1692
+ ], 2);
1693
+ }), 128)) : displayRows.value.length === 0 ? (openBlock(), createElementBlock("div", {
1694
+ key: "lp-table-empty",
1695
+ class: normalizeClass(["lp-row-empty", activeLayout.value === "cards" ? "col-span-full rounded-card border border-line bg-surface" : ""])
1696
+ }, [
1697
+ createVNode(_sfc_main$f, {
1698
+ compact: "",
1699
+ icon: failed.value ? "lucide:circle-alert" : filteredOut.value ? "lucide:filter-x" : __props.emptyIcon,
1700
+ title: failed.value ? text.value.error : filteredOut.value ? text.value.noMatches : text.value.empty
1701
+ }, {
1702
+ default: withCtx(() => [
1703
+ filteredOut.value ? (openBlock(), createBlock(_sfc_main$4, {
1704
+ key: 0,
1705
+ variant: "outline",
1706
+ size: "sm",
1707
+ onClick: resetFilters
1708
+ }, {
1709
+ default: withCtx(() => [
1710
+ createTextVNode(toDisplayString(text.value.resetFilters), 1)
1711
+ ]),
1712
+ _: 1
1713
+ })) : createCommentVNode("", true)
1714
+ ]),
1715
+ _: 1
1716
+ }, 8, ["icon", "title"])
1717
+ ], 2)) : createCommentVNode("", true),
1718
+ (openBlock(true), createElementBlock(Fragment, null, renderList(allEntries.value, (entry) => {
1719
+ return openBlock(), createElementBlock(Fragment, {
1720
+ key: entry.id
1721
+ }, [
1722
+ entry.kind === "group" ? (openBlock(), createElementBlock("div", {
1723
+ key: 0,
1724
+ class: normalizeClass(["text-xs font-medium text-muted", activeLayout.value === "cards" ? "col-span-full pt-2" : ["border-b border-line/60 bg-surface-soft/60 px-4", cellY.value]])
1725
+ }, [
1726
+ renderSlot(_ctx.$slots, "group", {
1727
+ value: entry.value,
1728
+ rows: entry.rows,
1729
+ label: entry.label,
1730
+ collapsed: entry.collapsed,
1731
+ toggle: () => toggleGroup(entry.group)
1732
+ }, () => [
1733
+ createElementVNode("button", {
1734
+ type: "button",
1735
+ class: "inline-flex items-center gap-1 rounded-small outline-none transition-colors duration-fast hover:text-ink focus-visible:ring-2 focus-visible:ring-ring",
1736
+ "aria-expanded": !entry.collapsed,
1737
+ "aria-label": (entry.collapsed ? text.value.expandGroup : text.value.collapseGroup).replace("{label}", entry.label),
1738
+ onClick: ($event) => toggleGroup(entry.group)
1739
+ }, [
1740
+ createVNode(_sfc_main$5, {
1741
+ name: "lucide:chevron-right",
1742
+ size: 14,
1743
+ class: normalizeClass(["transition-transform duration-fast motion-reduce:transition-none", entry.collapsed ? "" : "rotate-90"])
1744
+ }, null, 8, ["class"]),
1745
+ createTextVNode(" " + toDisplayString(entry.label), 1)
1746
+ ], 8, _hoisted_34)
1747
+ ], true)
1748
+ ], 2)) : entry.kind === "detail" ? (openBlock(), createElementBlock("div", {
1749
+ key: 1,
1750
+ class: normalizeClass(["px-4 py-3", activeLayout.value === "cards" ? "col-span-full" : "border-b border-line/60 last:border-0"]),
1751
+ "data-lp-row-detail": ""
1752
+ }, [
1753
+ renderSlot(_ctx.$slots, "expanded", {
1754
+ row: entry.row,
1755
+ close: () => toggleExpanded(keyFor(entry.row, entry.index))
1756
+ }, void 0, true)
1757
+ ], 2)) : (openBlock(), createElementBlock("div", mergeProps({
1758
+ key: 2,
1759
+ class: ["lp-item group relative outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring", [
1760
+ activeLayout.value === "cards" ? ["flex min-w-0 flex-col overflow-hidden rounded-card border bg-surface hover:border-line-strong focus-visible:ring-offset-0", isSelected(keyFor(entry.row, entry.index)) ? "border-brand bg-brand-soft/30" : "border-line"] : ["flex min-w-0 items-center gap-3 border-b border-line/60 px-4 last:border-0 hover:bg-surface-soft/60 focus-visible:ring-inset data-[active]:bg-surface-soft/40", cellY.value, isSelected(keyFor(entry.row, entry.index)) ? "bg-brand-soft/40" : ""]
1761
+ ]]
1762
+ }, { ref_for: true }, unref(roving).itemProps(String(keyFor(entry.row, entry.index))), {
1763
+ "data-paint-key": __props.selectable ? String(keyFor(entry.row, entry.index)) : void 0,
1764
+ "data-lp-context-row": __props.rowMenu ? "" : void 0,
1765
+ onContextmenu: ($event) => onRowContextMenu(entry.row),
1766
+ onClick: ($event) => onRowClick(entry.row, keyFor(entry.row, entry.index)),
1767
+ onPointerdown: ($event) => onRowPointerDown($event, keyFor(entry.row, entry.index)),
1768
+ onKeydown: onRowKeydown
1769
+ }), [
1770
+ __props.selectable ? (openBlock(), createElementBlock("div", {
1771
+ key: 0,
1772
+ class: normalizeClass(["cursor-pointer select-none", activeLayout.value === "cards" ? "absolute top-2 right-2 z-[1]" : ["shrink-0 transition-[margin] duration-medium ease-[var(--ease-emphasized)] motion-reduce:transition-none", ticksShown.value ? "" : "-mr-3"]]),
1773
+ onClick: _cache[9] || (_cache[9] = withModifiers(() => {
1774
+ }, ["stop"])),
1775
+ onPointerdown: withModifiers(($event) => unref(paint).onPointerDown($event, keyFor(entry.row, entry.index)), ["stop"])
1776
+ }, [
1777
+ createElementVNode("div", {
1778
+ class: normalizeClass(["lp-tick", activeLayout.value === "cards" ? "lp-tick-card" : ticksShown.value ? "lp-tick-line" : ""]),
1779
+ "data-cue": activeLayout.value === "cards" && !ticksShown.value ? "" : void 0,
1780
+ inert: activeLayout.value !== "cards" && !ticksShown.value
1781
+ }, [
1782
+ createVNode(_sfc_main$d, {
1783
+ "model-value": isSelected(keyFor(entry.row, entry.index)),
1784
+ "onUpdate:modelValue": (v) => toggleRow(keyFor(entry.row, entry.index), v)
1785
+ }, null, 8, ["model-value", "onUpdate:modelValue"])
1786
+ ], 10, _hoisted_37)
1787
+ ], 42, _hoisted_36)) : createCommentVNode("", true),
1788
+ activeLayout.value === "cards" ? renderSlot(_ctx.$slots, "card", {
1789
+ key: 1,
1790
+ row: entry.row,
1791
+ selected: isSelected(keyFor(entry.row, entry.index)),
1792
+ toggle: () => toggleRow(keyFor(entry.row, entry.index), !isSelected(keyFor(entry.row, entry.index))),
1793
+ openMenu: openRowMenu
1794
+ }, () => [
1795
+ createElementVNode("div", _hoisted_38, [
1796
+ titleColumn.value ? (openBlock(), createElementBlock("div", _hoisted_39, [
1797
+ renderSlot(_ctx.$slots, `cell-${titleColumn.value.key}`, {
1798
+ row: entry.row,
1799
+ value: entry.row[titleColumn.value.key],
1800
+ openMenu: openRowMenu
1801
+ }, () => [
1802
+ createTextVNode(toDisplayString(entry.row[titleColumn.value.key]), 1)
1803
+ ], true)
1804
+ ])) : createCommentVNode("", true),
1805
+ fieldColumns.value.length ? (openBlock(), createElementBlock("dl", _hoisted_40, [
1806
+ (openBlock(true), createElementBlock(Fragment, null, renderList(fieldColumns.value, (col) => {
1807
+ return openBlock(), createElementBlock(Fragment, {
1808
+ key: col.key
1809
+ }, [
1810
+ createElementVNode("dt", _hoisted_41, toDisplayString(col.label), 1),
1811
+ createElementVNode("dd", _hoisted_42, [
1812
+ renderSlot(_ctx.$slots, `cell-${col.key}`, {
1813
+ row: entry.row,
1814
+ value: entry.row[col.key],
1815
+ openMenu: openRowMenu
1816
+ }, () => [
1817
+ createTextVNode(toDisplayString(entry.row[col.key]), 1)
1818
+ ], true)
1819
+ ])
1820
+ ], 64);
1821
+ }), 128))
1822
+ ])) : createCommentVNode("", true)
1823
+ ])
1824
+ ], true) : (openBlock(), createElementBlock("div", _hoisted_43, [
1825
+ titleColumn.value ? (openBlock(), createElementBlock("div", _hoisted_44, [
1826
+ renderSlot(_ctx.$slots, `cell-${titleColumn.value.key}`, {
1827
+ row: entry.row,
1828
+ value: entry.row[titleColumn.value.key],
1829
+ openMenu: openRowMenu
1830
+ }, () => [
1831
+ createTextVNode(toDisplayString(entry.row[titleColumn.value.key]), 1)
1832
+ ], true)
1833
+ ])) : createCommentVNode("", true),
1834
+ fieldColumns.value.length ? (openBlock(), createElementBlock("div", _hoisted_45, [
1835
+ (openBlock(true), createElementBlock(Fragment, null, renderList(fieldColumns.value, (col, ci) => {
1836
+ return openBlock(), createElementBlock(Fragment, {
1837
+ key: col.key
1838
+ }, [
1839
+ ci > 0 ? (openBlock(), createElementBlock("span", _hoisted_46, "·")) : createCommentVNode("", true),
1840
+ createElementVNode("span", {
1841
+ class: "min-w-0 truncate",
1842
+ title: col.label
1843
+ }, [
1844
+ renderSlot(_ctx.$slots, `cell-${col.key}`, {
1845
+ row: entry.row,
1846
+ value: entry.row[col.key],
1847
+ openMenu: openRowMenu
1848
+ }, () => [
1849
+ createTextVNode(toDisplayString(entry.row[col.key]), 1)
1850
+ ], true)
1851
+ ], 8, _hoisted_47)
1852
+ ], 64);
1853
+ }), 128))
1854
+ ])) : createCommentVNode("", true)
1855
+ ]))
1856
+ ], 16, _hoisted_35))
1857
+ ], 64);
1858
+ }), 128))
1859
+ ]),
1860
+ _: 3
1861
+ }, 16, ["css", "class", "style", "aria-busy"]))
1862
+ ]),
1863
+ _: 3
1864
+ }, 8, ["items", "no-hint", "title", "subtitle", "title-icon", "title-image"]))
1454
1865
  ]),
1455
1866
  _: 3
1456
1867
  }, 8, ["disabled"]),
1457
- __props.load && total.value > __props.pageSize ? (openBlock(), createBlock(_sfc_main$f, {
1868
+ __props.load && total.value > __props.pageSize ? (openBlock(), createBlock(_sfc_main$h, {
1458
1869
  key: 0,
1459
1870
  page: page.value,
1460
- "onUpdate:page": _cache[9] || (_cache[9] = ($event) => page.value = $event),
1871
+ "onUpdate:page": _cache[10] || (_cache[10] = ($event) => page.value = $event),
1461
1872
  total: total.value,
1462
1873
  "page-size": __props.pageSize,
1463
1874
  disabled: busy.value
@@ -1466,7 +1877,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1466
1877
  };
1467
1878
  }
1468
1879
  });
1469
- const LpTable = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-3fb24315"]]);
1880
+ const LpTable = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-2dac799f"]]);
1470
1881
  export {
1471
1882
  LpTable as default
1472
1883
  };