@nextcloud/vue 8.9.1 → 8.10.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 (311) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +4 -2
  3. package/dist/Components/NcActionButtonGroup.cjs +1 -1
  4. package/dist/Components/NcActionButtonGroup.mjs +1 -1
  5. package/dist/Components/NcActionInput.cjs +1 -1
  6. package/dist/Components/NcActionInput.mjs +1 -1
  7. package/dist/Components/NcActions.cjs +1 -1
  8. package/dist/Components/NcActions.mjs +1 -1
  9. package/dist/Components/NcAppContent.cjs +1 -1
  10. package/dist/Components/NcAppContent.mjs +1 -1
  11. package/dist/Components/NcAppNavigation.cjs +1 -1
  12. package/dist/Components/NcAppNavigation.mjs +1 -1
  13. package/dist/Components/NcAppNavigationCaption.cjs +1 -1
  14. package/dist/Components/NcAppNavigationCaption.mjs +1 -1
  15. package/dist/Components/NcAppNavigationItem.cjs +1 -1
  16. package/dist/Components/NcAppNavigationItem.mjs +1 -1
  17. package/dist/Components/NcAppNavigationList.cjs +6 -6
  18. package/dist/Components/NcAppNavigationList.cjs.map +1 -1
  19. package/dist/Components/NcAppNavigationList.mjs +8 -8
  20. package/dist/Components/NcAppNavigationList.mjs.map +1 -1
  21. package/dist/Components/NcAppNavigationNewItem.cjs +1 -1
  22. package/dist/Components/NcAppNavigationNewItem.mjs +1 -1
  23. package/dist/Components/NcAppNavigationSettings.cjs +1 -1
  24. package/dist/Components/NcAppNavigationSettings.mjs +1 -1
  25. package/dist/Components/NcAppNavigationToggle.cjs +1 -1
  26. package/dist/Components/NcAppNavigationToggle.mjs +1 -1
  27. package/dist/Components/NcAppSettingsDialog.cjs +1 -1
  28. package/dist/Components/NcAppSettingsDialog.mjs +1 -1
  29. package/dist/Components/NcAppSidebar.cjs +1 -1
  30. package/dist/Components/NcAppSidebar.mjs +1 -1
  31. package/dist/Components/NcAvatar.cjs +1 -1
  32. package/dist/Components/NcAvatar.mjs +1 -1
  33. package/dist/Components/NcBreadcrumb.cjs +1 -1
  34. package/dist/Components/NcBreadcrumb.mjs +1 -1
  35. package/dist/Components/NcBreadcrumbs.cjs +1 -1
  36. package/dist/Components/NcBreadcrumbs.mjs +1 -1
  37. package/dist/Components/NcCheckboxRadioSwitch.cjs +1 -1
  38. package/dist/Components/NcCheckboxRadioSwitch.mjs +1 -1
  39. package/dist/Components/NcColorPicker.cjs +1 -1
  40. package/dist/Components/NcColorPicker.mjs +1 -1
  41. package/dist/Components/NcContent.cjs +1 -1
  42. package/dist/Components/NcContent.mjs +1 -1
  43. package/dist/Components/NcDashboardWidget.cjs +1 -1
  44. package/dist/Components/NcDashboardWidget.mjs +1 -1
  45. package/dist/Components/NcDashboardWidgetItem.cjs +1 -1
  46. package/dist/Components/NcDashboardWidgetItem.mjs +1 -1
  47. package/dist/Components/NcDateTime.cjs +1 -1
  48. package/dist/Components/NcDateTime.mjs +1 -1
  49. package/dist/Components/NcDateTimePicker.cjs +2 -2
  50. package/dist/Components/NcDateTimePicker.mjs +4 -4
  51. package/dist/Components/NcDateTimePickerNative.cjs +1 -1
  52. package/dist/Components/NcDateTimePickerNative.mjs +1 -1
  53. package/dist/Components/NcEmojiPicker.cjs +1 -1
  54. package/dist/Components/NcEmojiPicker.mjs +1 -1
  55. package/dist/Components/NcListItem.cjs +1 -1
  56. package/dist/Components/NcListItem.mjs +1 -1
  57. package/dist/Components/NcListItemIcon.cjs +1 -1
  58. package/dist/Components/NcListItemIcon.mjs +1 -1
  59. package/dist/Components/NcModal.cjs +1 -1
  60. package/dist/Components/NcModal.mjs +3 -3
  61. package/dist/Components/NcPasswordField.cjs +1 -1
  62. package/dist/Components/NcPasswordField.mjs +1 -1
  63. package/dist/Components/NcRelatedResourcesPanel.cjs +1 -1
  64. package/dist/Components/NcRelatedResourcesPanel.mjs +1 -1
  65. package/dist/Components/NcRichContenteditable.cjs +1 -1
  66. package/dist/Components/NcRichContenteditable.mjs +2 -2
  67. package/dist/Components/NcRichText.cjs +1 -1
  68. package/dist/Components/NcRichText.mjs +3 -3
  69. package/dist/Components/NcSelect.cjs +1 -1
  70. package/dist/Components/NcSelect.mjs +1 -1
  71. package/dist/Components/NcSelectTags.cjs +1 -1
  72. package/dist/Components/NcSelectTags.mjs +1 -1
  73. package/dist/Components/NcSettingsInputText.cjs +1 -1
  74. package/dist/Components/NcSettingsInputText.mjs +1 -1
  75. package/dist/Components/NcSettingsSection.cjs +1 -1
  76. package/dist/Components/NcSettingsSection.mjs +1 -1
  77. package/dist/Components/NcSettingsSelectGroup.cjs +1 -1
  78. package/dist/Components/NcSettingsSelectGroup.mjs +1 -1
  79. package/dist/Components/NcTextField.cjs +1 -1
  80. package/dist/Components/NcTextField.mjs +1 -1
  81. package/dist/Components/NcTimezonePicker.cjs +1 -1
  82. package/dist/Components/NcTimezonePicker.mjs +1 -1
  83. package/dist/Components/NcUserBubble.cjs +1 -1
  84. package/dist/Components/NcUserBubble.mjs +1 -1
  85. package/dist/Components/NcUserStatusIcon.cjs +1 -1
  86. package/dist/Components/NcUserStatusIcon.mjs +1 -1
  87. package/dist/Functions/reference.cjs +1 -1
  88. package/dist/Functions/reference.mjs +1 -1
  89. package/dist/Functions/usernameToColor.cjs +1 -1
  90. package/dist/Functions/usernameToColor.mjs +1 -1
  91. package/dist/Mixins/richEditor.cjs +1 -1
  92. package/dist/Mixins/richEditor.mjs +1 -1
  93. package/dist/assets/{NcActions-CEbgl0_n.css → NcActions-DL7ZZIjx.css} +12 -12
  94. package/dist/assets/{NcAppContent-Cv8rRTyy.css → NcAppContent-DcXMrsBz.css} +32 -23
  95. package/dist/assets/{NcAppNavigation-D2eVie5R.css → NcAppNavigation-BgGJuJPv.css} +15 -9
  96. package/dist/assets/{NcAppNavigationList-BGig8-Dj.css → NcAppNavigationList-CUnaMQQD.css} +4 -8
  97. package/dist/assets/{NcDateTimePicker-C3D1hmlB.css → NcDateTimePicker-DR7jRFm4.css} +10 -10
  98. package/dist/assets/NcListItem-DLFj1G31.css +175 -0
  99. package/dist/assets/{NcRelatedResourcesPanel-COW9gzml.css → NcRelatedResourcesPanel-D6K7OQFJ.css} +19 -13
  100. package/dist/assets/{NcRichContenteditable-CtbqXSHe.css → NcRichContenteditable-DvTdg1DO.css} +12 -12
  101. package/dist/assets/{NcRichText-BMe-xENJ.css → NcRichText-D2BBsB-_.css} +65 -65
  102. package/dist/assets/{referencePickerModal-C1KJzICb.css → referencePickerModal-DZ7qJeiJ.css} +19 -19
  103. package/dist/chunks/{GenColors-vI-bx9ZY.cjs → GenColors-DQEIzxqb.cjs} +1 -1
  104. package/dist/chunks/{GenColors-vI-bx9ZY.cjs.map → GenColors-DQEIzxqb.cjs.map} +1 -1
  105. package/dist/chunks/{GenColors-BteFtwOv.mjs → GenColors-SIdMEx1i.mjs} +1 -1
  106. package/dist/chunks/{GenColors-BteFtwOv.mjs.map → GenColors-SIdMEx1i.mjs.map} +1 -1
  107. package/dist/chunks/{NcActionButtonGroup-BdxkXNwc.cjs → NcActionButtonGroup-B47_9Jpc.cjs} +1 -1
  108. package/dist/chunks/{NcActionButtonGroup-BdxkXNwc.cjs.map → NcActionButtonGroup-B47_9Jpc.cjs.map} +1 -1
  109. package/dist/chunks/{NcActionButtonGroup-SS3PkUD2.mjs → NcActionButtonGroup-D6_CIr2e.mjs} +1 -1
  110. package/dist/chunks/{NcActionButtonGroup-SS3PkUD2.mjs.map → NcActionButtonGroup-D6_CIr2e.mjs.map} +1 -1
  111. package/dist/chunks/{NcActionInput-D308ZntG.cjs → NcActionInput-BPPLjfW5.cjs} +1 -1
  112. package/dist/chunks/{NcActionInput-D308ZntG.cjs.map → NcActionInput-BPPLjfW5.cjs.map} +1 -1
  113. package/dist/chunks/{NcActionInput-BHq3Le0q.mjs → NcActionInput-GZcIfn-2.mjs} +4 -4
  114. package/dist/chunks/{NcActionInput-BHq3Le0q.mjs.map → NcActionInput-GZcIfn-2.mjs.map} +1 -1
  115. package/dist/chunks/{NcActions-Dfkog_G0.cjs → NcActions-B049TCK5.cjs} +144 -85
  116. package/dist/chunks/NcActions-B049TCK5.cjs.map +1 -0
  117. package/dist/chunks/{NcActions-CpU9WXzM.mjs → NcActions-D2wvJbMw.mjs} +144 -85
  118. package/dist/chunks/NcActions-D2wvJbMw.mjs.map +1 -0
  119. package/dist/chunks/{NcAppContent-BDwOdxJE.mjs → NcAppContent-CUnQ4EVa.mjs} +67 -40
  120. package/dist/chunks/NcAppContent-CUnQ4EVa.mjs.map +1 -0
  121. package/dist/chunks/{NcAppContent-kqYjKpzU.cjs → NcAppContent-CuOJJPbt.cjs} +59 -32
  122. package/dist/chunks/NcAppContent-CuOJJPbt.cjs.map +1 -0
  123. package/dist/chunks/{NcAppNavigation-C1Qe3lsk.mjs → NcAppNavigation-Dl1g_orJ.mjs} +25 -23
  124. package/dist/chunks/NcAppNavigation-Dl1g_orJ.mjs.map +1 -0
  125. package/dist/chunks/{NcAppNavigation-C423R_m2.cjs → NcAppNavigation-DtxPGDOf.cjs} +25 -24
  126. package/dist/chunks/NcAppNavigation-DtxPGDOf.cjs.map +1 -0
  127. package/dist/chunks/{NcAppNavigationCaption-BKchbDsJ.cjs → NcAppNavigationCaption-BefNtbTx.cjs} +1 -1
  128. package/dist/chunks/{NcAppNavigationCaption-BKchbDsJ.cjs.map → NcAppNavigationCaption-BefNtbTx.cjs.map} +1 -1
  129. package/dist/chunks/{NcAppNavigationCaption-DsT6O4Hx.mjs → NcAppNavigationCaption-g4NsNSvL.mjs} +1 -1
  130. package/dist/chunks/{NcAppNavigationCaption-DsT6O4Hx.mjs.map → NcAppNavigationCaption-g4NsNSvL.mjs.map} +1 -1
  131. package/dist/chunks/{NcAppNavigationItem-bjPcEx5D.mjs → NcAppNavigationItem-BSV20azN.mjs} +3 -3
  132. package/dist/chunks/{NcAppNavigationItem-bjPcEx5D.mjs.map → NcAppNavigationItem-BSV20azN.mjs.map} +1 -1
  133. package/dist/chunks/{NcAppNavigationItem-CABF2T4q.cjs → NcAppNavigationItem-DVlpQH-e.cjs} +1 -1
  134. package/dist/chunks/{NcAppNavigationItem-CABF2T4q.cjs.map → NcAppNavigationItem-DVlpQH-e.cjs.map} +1 -1
  135. package/dist/chunks/{NcAppNavigationNewItem-BHCgaCoK.mjs → NcAppNavigationNewItem-C7PviElx.mjs} +1 -1
  136. package/dist/chunks/{NcAppNavigationNewItem-BHCgaCoK.mjs.map → NcAppNavigationNewItem-C7PviElx.mjs.map} +1 -1
  137. package/dist/chunks/{NcAppNavigationNewItem-t45tM5u1.cjs → NcAppNavigationNewItem-DG-KzABc.cjs} +1 -1
  138. package/dist/chunks/{NcAppNavigationNewItem-t45tM5u1.cjs.map → NcAppNavigationNewItem-DG-KzABc.cjs.map} +1 -1
  139. package/dist/chunks/{NcAppNavigationSettings-CBeUiVLk.cjs → NcAppNavigationSettings-CoutbNdC.cjs} +1 -1
  140. package/dist/chunks/{NcAppNavigationSettings-CBeUiVLk.cjs.map → NcAppNavigationSettings-CoutbNdC.cjs.map} +1 -1
  141. package/dist/chunks/{NcAppNavigationSettings-BQD7JA4m.mjs → NcAppNavigationSettings-D8MkJD-a.mjs} +1 -1
  142. package/dist/chunks/{NcAppNavigationSettings-BQD7JA4m.mjs.map → NcAppNavigationSettings-D8MkJD-a.mjs.map} +1 -1
  143. package/dist/chunks/{NcAppNavigationToggle-DDChOnAq.cjs → NcAppNavigationToggle-ACf6tmPq.cjs} +1 -1
  144. package/dist/chunks/{NcAppNavigationToggle-DDChOnAq.cjs.map → NcAppNavigationToggle-ACf6tmPq.cjs.map} +1 -1
  145. package/dist/chunks/{NcAppNavigationToggle-BZxbkhCr.mjs → NcAppNavigationToggle-n8ES2H5d.mjs} +1 -1
  146. package/dist/chunks/{NcAppNavigationToggle-BZxbkhCr.mjs.map → NcAppNavigationToggle-n8ES2H5d.mjs.map} +1 -1
  147. package/dist/chunks/{NcAppSettingsDialog-DeFBTD2J.mjs → NcAppSettingsDialog-CmQPplb5.mjs} +1 -1
  148. package/dist/chunks/{NcAppSettingsDialog-DeFBTD2J.mjs.map → NcAppSettingsDialog-CmQPplb5.mjs.map} +1 -1
  149. package/dist/chunks/{NcAppSettingsDialog-EUys9Os_.cjs → NcAppSettingsDialog-DYr9eXTI.cjs} +1 -1
  150. package/dist/chunks/{NcAppSettingsDialog-EUys9Os_.cjs.map → NcAppSettingsDialog-DYr9eXTI.cjs.map} +1 -1
  151. package/dist/chunks/{NcAppSidebar-Du-IRmEO.cjs → NcAppSidebar-BsbmJ5H_.cjs} +2 -2
  152. package/dist/chunks/{NcAppSidebar-Du-IRmEO.cjs.map → NcAppSidebar-BsbmJ5H_.cjs.map} +1 -1
  153. package/dist/chunks/{NcAppSidebar-CdSvRI6l.mjs → NcAppSidebar-CSjqjYTb.mjs} +3 -3
  154. package/dist/chunks/{NcAppSidebar-CdSvRI6l.mjs.map → NcAppSidebar-CSjqjYTb.mjs.map} +1 -1
  155. package/dist/chunks/{NcAvatar-e0M-nnF6.mjs → NcAvatar-BdtXzaRJ.mjs} +4 -4
  156. package/dist/chunks/{NcAvatar-e0M-nnF6.mjs.map → NcAvatar-BdtXzaRJ.mjs.map} +1 -1
  157. package/dist/chunks/{NcAvatar-BEet_8fB.cjs → NcAvatar-Bn9oT7sS.cjs} +2 -2
  158. package/dist/chunks/{NcAvatar-BEet_8fB.cjs.map → NcAvatar-Bn9oT7sS.cjs.map} +1 -1
  159. package/dist/chunks/{NcBreadcrumb-CVMyBckA.mjs → NcBreadcrumb-D8yGqnFJ.mjs} +1 -1
  160. package/dist/chunks/{NcBreadcrumb-CVMyBckA.mjs.map → NcBreadcrumb-D8yGqnFJ.mjs.map} +1 -1
  161. package/dist/chunks/{NcBreadcrumb-DVXsgQkE.cjs → NcBreadcrumb-DApyHRGZ.cjs} +1 -1
  162. package/dist/chunks/{NcBreadcrumb-DVXsgQkE.cjs.map → NcBreadcrumb-DApyHRGZ.cjs.map} +1 -1
  163. package/dist/chunks/{NcBreadcrumbs-DkgzO9f5.cjs → NcBreadcrumbs-BoA2lxaY.cjs} +1 -1
  164. package/dist/chunks/{NcBreadcrumbs-DkgzO9f5.cjs.map → NcBreadcrumbs-BoA2lxaY.cjs.map} +1 -1
  165. package/dist/chunks/{NcBreadcrumbs-DqRU0BfB.mjs → NcBreadcrumbs-DVyfjkgH.mjs} +2 -2
  166. package/dist/chunks/{NcBreadcrumbs-DqRU0BfB.mjs.map → NcBreadcrumbs-DVyfjkgH.mjs.map} +1 -1
  167. package/dist/chunks/{NcCheckboxRadioSwitch-Dt96X5bR.cjs → NcCheckboxRadioSwitch-BEYj-jaN.cjs} +2 -2
  168. package/dist/chunks/{NcCheckboxRadioSwitch-Dt96X5bR.cjs.map → NcCheckboxRadioSwitch-BEYj-jaN.cjs.map} +1 -1
  169. package/dist/chunks/{NcCheckboxRadioSwitch-7Yib86y3.mjs → NcCheckboxRadioSwitch-DiNnRbJI.mjs} +2 -2
  170. package/dist/chunks/{NcCheckboxRadioSwitch-7Yib86y3.mjs.map → NcCheckboxRadioSwitch-DiNnRbJI.mjs.map} +1 -1
  171. package/dist/chunks/{NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_2603be83_lang-CKROuACA.mjs → NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_2603be83_lang-DMJGZndr.mjs} +1 -1
  172. package/dist/chunks/NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_2603be83_lang-DMJGZndr.mjs.map +1 -0
  173. package/dist/chunks/{NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_2603be83_lang-C1WLneXl.cjs → NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_2603be83_lang-Dh3GUSYj.cjs} +1 -1
  174. package/dist/chunks/NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_2603be83_lang-Dh3GUSYj.cjs.map +1 -0
  175. package/dist/chunks/{NcColorPicker-BVqwn1Fr.cjs → NcColorPicker-Acx2mFFG.cjs} +1 -1
  176. package/dist/chunks/{NcColorPicker-BVqwn1Fr.cjs.map → NcColorPicker-Acx2mFFG.cjs.map} +1 -1
  177. package/dist/chunks/{NcColorPicker-Dkxeigs5.mjs → NcColorPicker-sge8Yr9m.mjs} +2 -2
  178. package/dist/chunks/{NcColorPicker-Dkxeigs5.mjs.map → NcColorPicker-sge8Yr9m.mjs.map} +1 -1
  179. package/dist/chunks/{NcContent-Bmeq8hLO.cjs → NcContent-COHfXhM3.cjs} +1 -1
  180. package/dist/chunks/{NcContent-Bmeq8hLO.cjs.map → NcContent-COHfXhM3.cjs.map} +1 -1
  181. package/dist/chunks/{NcContent-COIw1X7V.mjs → NcContent-kTlEGtKt.mjs} +1 -1
  182. package/dist/chunks/{NcContent-COIw1X7V.mjs.map → NcContent-kTlEGtKt.mjs.map} +1 -1
  183. package/dist/chunks/{NcDashboardWidget-Cxz_n1AN.mjs → NcDashboardWidget-CL7e1yAw.mjs} +3 -3
  184. package/dist/chunks/{NcDashboardWidget-Cxz_n1AN.mjs.map → NcDashboardWidget-CL7e1yAw.mjs.map} +1 -1
  185. package/dist/chunks/{NcDashboardWidget-DArU3jbL.cjs → NcDashboardWidget-CyrKw12p.cjs} +1 -1
  186. package/dist/chunks/{NcDashboardWidget-DArU3jbL.cjs.map → NcDashboardWidget-CyrKw12p.cjs.map} +1 -1
  187. package/dist/chunks/{NcDashboardWidgetItem-BAhzcFfs.cjs → NcDashboardWidgetItem-C6Npm5U9.cjs} +1 -1
  188. package/dist/chunks/{NcDashboardWidgetItem-BAhzcFfs.cjs.map → NcDashboardWidgetItem-C6Npm5U9.cjs.map} +1 -1
  189. package/dist/chunks/{NcDashboardWidgetItem-BV2tuXoj.mjs → NcDashboardWidgetItem-Cq-HAbIB.mjs} +2 -2
  190. package/dist/chunks/{NcDashboardWidgetItem-BV2tuXoj.mjs.map → NcDashboardWidgetItem-Cq-HAbIB.mjs.map} +1 -1
  191. package/dist/chunks/{NcDateTime-B0oaElJX.mjs → NcDateTime-B1X22iSf.mjs} +1 -1
  192. package/dist/chunks/{NcDateTime-B0oaElJX.mjs.map → NcDateTime-B1X22iSf.mjs.map} +1 -1
  193. package/dist/chunks/{NcDateTime-Dl0XztMt.cjs → NcDateTime-CyKYSWsT.cjs} +1 -1
  194. package/dist/chunks/{NcDateTime-Dl0XztMt.cjs.map → NcDateTime-CyKYSWsT.cjs.map} +1 -1
  195. package/dist/chunks/{NcEmojiPicker-BCdoIKXJ.cjs → NcEmojiPicker-DuZc08BD.cjs} +1 -1
  196. package/dist/chunks/{NcEmojiPicker-BCdoIKXJ.cjs.map → NcEmojiPicker-DuZc08BD.cjs.map} +1 -1
  197. package/dist/chunks/{NcEmojiPicker-fRx7dTTf.mjs → NcEmojiPicker-r6eAlCKl.mjs} +4 -4
  198. package/dist/chunks/{NcEmojiPicker-fRx7dTTf.mjs.map → NcEmojiPicker-r6eAlCKl.mjs.map} +1 -1
  199. package/dist/chunks/{NcInputConfirmCancel-DpgXTGmT.cjs → NcInputConfirmCancel-DAaMkW9I.cjs} +1 -1
  200. package/dist/chunks/{NcInputConfirmCancel-DpgXTGmT.cjs.map → NcInputConfirmCancel-DAaMkW9I.cjs.map} +1 -1
  201. package/dist/chunks/{NcInputConfirmCancel-BXZqwqY6.mjs → NcInputConfirmCancel-fwl4-RD4.mjs} +1 -1
  202. package/dist/chunks/{NcInputConfirmCancel-BXZqwqY6.mjs.map → NcInputConfirmCancel-fwl4-RD4.mjs.map} +1 -1
  203. package/dist/chunks/{NcListItem-wxqWqs4s.cjs → NcListItem-8heZoa83.cjs} +28 -23
  204. package/dist/chunks/NcListItem-8heZoa83.cjs.map +1 -0
  205. package/dist/chunks/{NcListItem-C5oWvAZQ.mjs → NcListItem-DxnCJdGU.mjs} +27 -22
  206. package/dist/chunks/NcListItem-DxnCJdGU.mjs.map +1 -0
  207. package/dist/chunks/{NcListItemIcon-DfdkSCin.cjs → NcListItemIcon-D5NW3bY2.cjs} +1 -1
  208. package/dist/chunks/{NcListItemIcon-DfdkSCin.cjs.map → NcListItemIcon-D5NW3bY2.cjs.map} +1 -1
  209. package/dist/chunks/{NcListItemIcon-WH9TUCxb.mjs → NcListItemIcon-DyE902SK.mjs} +1 -1
  210. package/dist/chunks/{NcListItemIcon-WH9TUCxb.mjs.map → NcListItemIcon-DyE902SK.mjs.map} +1 -1
  211. package/dist/chunks/{NcPasswordField-BPAivxc_.mjs → NcPasswordField-BeIfZq-I.mjs} +1 -1
  212. package/dist/chunks/{NcPasswordField-BPAivxc_.mjs.map → NcPasswordField-BeIfZq-I.mjs.map} +1 -1
  213. package/dist/chunks/{NcPasswordField-BgNcvN0V.cjs → NcPasswordField-Bx3rarNt.cjs} +1 -1
  214. package/dist/chunks/{NcPasswordField-BgNcvN0V.cjs.map → NcPasswordField-Bx3rarNt.cjs.map} +1 -1
  215. package/dist/chunks/{NcRelatedResourcesPanel-Cp8Au2iI.cjs → NcRelatedResourcesPanel-BmE02hfU.cjs} +4 -4
  216. package/dist/chunks/NcRelatedResourcesPanel-BmE02hfU.cjs.map +1 -0
  217. package/dist/chunks/{NcRelatedResourcesPanel-LTNqJecS.mjs → NcRelatedResourcesPanel-C8HsjDiN.mjs} +8 -8
  218. package/dist/chunks/NcRelatedResourcesPanel-C8HsjDiN.mjs.map +1 -0
  219. package/dist/chunks/{NcRichContenteditable-CHggLQuR.mjs → NcRichContenteditable-COl1GELF.mjs} +35 -26
  220. package/dist/chunks/NcRichContenteditable-COl1GELF.mjs.map +1 -0
  221. package/dist/chunks/{NcRichContenteditable-hT5m_2tr.cjs → NcRichContenteditable-DVCrsKyc.cjs} +41 -32
  222. package/dist/chunks/NcRichContenteditable-DVCrsKyc.cjs.map +1 -0
  223. package/dist/chunks/{NcRichText-BBXbh0Hh.mjs → NcRichText-BEoKx41c.mjs} +45 -29
  224. package/dist/chunks/NcRichText-BEoKx41c.mjs.map +1 -0
  225. package/dist/chunks/{NcRichText-BWX8BLVh.cjs → NcRichText-Dow2nMvP.cjs} +35 -19
  226. package/dist/chunks/NcRichText-Dow2nMvP.cjs.map +1 -0
  227. package/dist/chunks/{NcSelect-BVmjiQFa.mjs → NcSelect-C_dMqtoe.mjs} +2 -2
  228. package/dist/chunks/{NcSelect-BVmjiQFa.mjs.map → NcSelect-C_dMqtoe.mjs.map} +1 -1
  229. package/dist/chunks/{NcSelect-DjTSAsNL.cjs → NcSelect-CyESQ4uQ.cjs} +1 -1
  230. package/dist/chunks/{NcSelect-DjTSAsNL.cjs.map → NcSelect-CyESQ4uQ.cjs.map} +1 -1
  231. package/dist/chunks/{NcSelectTags-BJvxyO8E.cjs → NcSelectTags-Bl95j2Kh.cjs} +1 -1
  232. package/dist/chunks/{NcSelectTags-BJvxyO8E.cjs.map → NcSelectTags-Bl95j2Kh.cjs.map} +1 -1
  233. package/dist/chunks/{NcSelectTags-Ccv-eQzZ.mjs → NcSelectTags-BoX-3tOa.mjs} +2 -2
  234. package/dist/chunks/{NcSelectTags-Ccv-eQzZ.mjs.map → NcSelectTags-BoX-3tOa.mjs.map} +1 -1
  235. package/dist/chunks/{NcSettingsInputText-CcO2Du6E.cjs → NcSettingsInputText-DlBTOZRv.cjs} +1 -1
  236. package/dist/chunks/{NcSettingsInputText-CcO2Du6E.cjs.map → NcSettingsInputText-DlBTOZRv.cjs.map} +1 -1
  237. package/dist/chunks/{NcSettingsInputText-DXxmqvcd.mjs → NcSettingsInputText-fLyjAE06.mjs} +1 -1
  238. package/dist/chunks/{NcSettingsInputText-DXxmqvcd.mjs.map → NcSettingsInputText-fLyjAE06.mjs.map} +1 -1
  239. package/dist/chunks/{NcSettingsSection-DBe4fKFA.mjs → NcSettingsSection-COSdi50c.mjs} +1 -1
  240. package/dist/chunks/{NcSettingsSection-DBe4fKFA.mjs.map → NcSettingsSection-COSdi50c.mjs.map} +1 -1
  241. package/dist/chunks/{NcSettingsSection-qgIYSB_M.cjs → NcSettingsSection-CoHKnYDP.cjs} +1 -1
  242. package/dist/chunks/{NcSettingsSection-qgIYSB_M.cjs.map → NcSettingsSection-CoHKnYDP.cjs.map} +1 -1
  243. package/dist/chunks/{NcSettingsSelectGroup-DD8PEgvQ.cjs → NcSettingsSelectGroup-2wsNrz7x.cjs} +1 -1
  244. package/dist/chunks/{NcSettingsSelectGroup-DD8PEgvQ.cjs.map → NcSettingsSelectGroup-2wsNrz7x.cjs.map} +1 -1
  245. package/dist/chunks/{NcSettingsSelectGroup-d2TLOW1O.mjs → NcSettingsSelectGroup-BZG67QrR.mjs} +2 -2
  246. package/dist/chunks/{NcSettingsSelectGroup-d2TLOW1O.mjs.map → NcSettingsSelectGroup-BZG67QrR.mjs.map} +1 -1
  247. package/dist/chunks/{NcTextField-CU-YIhL3.mjs → NcTextField-BEpgHsY2.mjs} +1 -1
  248. package/dist/chunks/{NcTextField-CU-YIhL3.mjs.map → NcTextField-BEpgHsY2.mjs.map} +1 -1
  249. package/dist/chunks/{NcTextField-CsnzlYWD.cjs → NcTextField-C-2-Of6b.cjs} +1 -1
  250. package/dist/chunks/{NcTextField-CsnzlYWD.cjs.map → NcTextField-C-2-Of6b.cjs.map} +1 -1
  251. package/dist/chunks/{NcTimezonePicker-C-Ci2IuC.cjs → NcTimezonePicker-BMlKQe6-.cjs} +1 -1
  252. package/dist/chunks/{NcTimezonePicker-C-Ci2IuC.cjs.map → NcTimezonePicker-BMlKQe6-.cjs.map} +1 -1
  253. package/dist/chunks/{NcTimezonePicker-gvp9MAcg.mjs → NcTimezonePicker-JJeMG5Mo.mjs} +2 -2
  254. package/dist/chunks/{NcTimezonePicker-gvp9MAcg.mjs.map → NcTimezonePicker-JJeMG5Mo.mjs.map} +1 -1
  255. package/dist/chunks/{NcUserBubble-COhpp9l_.cjs → NcUserBubble-DMBDwtwW.cjs} +1 -1
  256. package/dist/chunks/{NcUserBubble-COhpp9l_.cjs.map → NcUserBubble-DMBDwtwW.cjs.map} +1 -1
  257. package/dist/chunks/{NcUserBubble-CbufscPi.mjs → NcUserBubble-RZlZRmxZ.mjs} +1 -1
  258. package/dist/chunks/{NcUserBubble-CbufscPi.mjs.map → NcUserBubble-RZlZRmxZ.mjs.map} +1 -1
  259. package/dist/chunks/{NcUserStatusIcon-C7dfcW39.cjs → NcUserStatusIcon-7yBYL8ur.cjs} +4 -4
  260. package/dist/chunks/NcUserStatusIcon-7yBYL8ur.cjs.map +1 -0
  261. package/dist/chunks/{NcUserStatusIcon-0SGYQL9L.mjs → NcUserStatusIcon-DMQxYiY6.mjs} +9 -9
  262. package/dist/chunks/NcUserStatusIcon-DMQxYiY6.mjs.map +1 -0
  263. package/dist/chunks/{ScopeComponent-DFDrMcn0.mjs → ScopeComponent-9FoStIVM.mjs} +1 -1
  264. package/dist/chunks/{ScopeComponent-DFDrMcn0.mjs.map → ScopeComponent-9FoStIVM.mjs.map} +1 -1
  265. package/dist/chunks/{ScopeComponent-DXQGLon_.cjs → ScopeComponent-DdL1psE0.cjs} +1 -1
  266. package/dist/chunks/{ScopeComponent-DXQGLon_.cjs.map → ScopeComponent-DdL1psE0.cjs.map} +1 -1
  267. package/dist/chunks/{_l10n-D8Scz3mH.mjs → _l10n-CAwwH-o2.mjs} +3 -3
  268. package/dist/chunks/_l10n-CAwwH-o2.mjs.map +1 -0
  269. package/dist/chunks/{_l10n-B986q8RC.cjs → _l10n-DZggkcVs.cjs} +3 -3
  270. package/dist/chunks/_l10n-DZggkcVs.cjs.map +1 -0
  271. package/dist/chunks/{index-DYXjj9ET.mjs → index-BAVa4G2v.mjs} +31 -31
  272. package/dist/chunks/index-BAVa4G2v.mjs.map +1 -0
  273. package/dist/chunks/{index-CIsMzBte.cjs → index-CVsxVZon.cjs} +19 -19
  274. package/dist/chunks/index-CVsxVZon.cjs.map +1 -0
  275. package/dist/chunks/{referencePickerModal-DUhJWt2e.mjs → referencePickerModal-CtIcJRWz.mjs} +417 -414
  276. package/dist/chunks/referencePickerModal-CtIcJRWz.mjs.map +1 -0
  277. package/dist/chunks/{referencePickerModal-DV7-XzCc.cjs → referencePickerModal-Ig4S8WI3.cjs} +298 -295
  278. package/dist/chunks/referencePickerModal-Ig4S8WI3.cjs.map +1 -0
  279. package/dist/chunks/{usernameToColor-iYF-oKTP.mjs → usernameToColor-3Z3jKEos.mjs} +1 -1
  280. package/dist/chunks/{usernameToColor-iYF-oKTP.mjs.map → usernameToColor-3Z3jKEos.mjs.map} +1 -1
  281. package/dist/chunks/{usernameToColor-DibvD_OP.cjs → usernameToColor-7pQQJMR_.cjs} +1 -1
  282. package/dist/chunks/{usernameToColor-DibvD_OP.cjs.map → usernameToColor-7pQQJMR_.cjs.map} +1 -1
  283. package/dist/index.cjs +8 -9
  284. package/dist/index.cjs.map +1 -1
  285. package/dist/index.mjs +45 -45
  286. package/package.json +1 -1
  287. package/dist/assets/NcListItem-vwt4bCl6.css +0 -165
  288. package/dist/chunks/NcActions-CpU9WXzM.mjs.map +0 -1
  289. package/dist/chunks/NcActions-Dfkog_G0.cjs.map +0 -1
  290. package/dist/chunks/NcAppContent-BDwOdxJE.mjs.map +0 -1
  291. package/dist/chunks/NcAppContent-kqYjKpzU.cjs.map +0 -1
  292. package/dist/chunks/NcAppNavigation-C1Qe3lsk.mjs.map +0 -1
  293. package/dist/chunks/NcAppNavigation-C423R_m2.cjs.map +0 -1
  294. package/dist/chunks/NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_2603be83_lang-C1WLneXl.cjs.map +0 -1
  295. package/dist/chunks/NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_2603be83_lang-CKROuACA.mjs.map +0 -1
  296. package/dist/chunks/NcListItem-C5oWvAZQ.mjs.map +0 -1
  297. package/dist/chunks/NcListItem-wxqWqs4s.cjs.map +0 -1
  298. package/dist/chunks/NcRelatedResourcesPanel-Cp8Au2iI.cjs.map +0 -1
  299. package/dist/chunks/NcRelatedResourcesPanel-LTNqJecS.mjs.map +0 -1
  300. package/dist/chunks/NcRichContenteditable-CHggLQuR.mjs.map +0 -1
  301. package/dist/chunks/NcRichContenteditable-hT5m_2tr.cjs.map +0 -1
  302. package/dist/chunks/NcRichText-BBXbh0Hh.mjs.map +0 -1
  303. package/dist/chunks/NcRichText-BWX8BLVh.cjs.map +0 -1
  304. package/dist/chunks/NcUserStatusIcon-0SGYQL9L.mjs.map +0 -1
  305. package/dist/chunks/NcUserStatusIcon-C7dfcW39.cjs.map +0 -1
  306. package/dist/chunks/_l10n-B986q8RC.cjs.map +0 -1
  307. package/dist/chunks/_l10n-D8Scz3mH.mjs.map +0 -1
  308. package/dist/chunks/index-CIsMzBte.cjs.map +0 -1
  309. package/dist/chunks/index-DYXjj9ET.mjs.map +0 -1
  310. package/dist/chunks/referencePickerModal-DUhJWt2e.mjs.map +0 -1
  311. package/dist/chunks/referencePickerModal-DV7-XzCc.cjs.map +0 -1
@@ -1,36 +1,46 @@
1
- import '../assets/NcAppContent-Cv8rRTyy.css';
2
- import l from "../Components/NcButton.mjs";
3
- import { r as p, y as r, a as c } from "./_l10n-D8Scz3mH.mjs";
1
+ import '../assets/NcAppContent-DcXMrsBz.css';
2
+ import p from "../Components/NcButton.mjs";
3
+ import { r, y as c, a as u } from "./_l10n-CAwwH-o2.mjs";
4
4
  import "../Directives/Tooltip.mjs";
5
5
  import { emit as a } from "@nextcloud/event-bus";
6
- import { A as u } from "./ArrowRight-C3BxTDjF.mjs";
7
- import { n as o } from "./_plugin-vue2_normalizer-Bj5bLKV4.mjs";
8
- import { VTooltip as h } from "floating-vue";
9
- import { useIsMobile as f } from "../Composables/useIsMobile.mjs";
10
- import { getBuilder as g } from "@nextcloud/browser-storage";
11
- import { useSwipe as d } from "@vueuse/core";
6
+ import { A as h } from "./ArrowRight-C3BxTDjF.mjs";
7
+ import { useIsMobile as o } from "../Composables/useIsMobile.mjs";
8
+ import { n as l } from "./_plugin-vue2_normalizer-Bj5bLKV4.mjs";
9
+ import { VTooltip as f } from "floating-vue";
10
+ import { getBuilder as d } from "@nextcloud/browser-storage";
11
+ import { useSwipe as g } from "@vueuse/core";
12
12
  import { Pane as m, Splitpanes as _ } from "splitpanes";
13
13
  import "splitpanes/dist/splitpanes.css";
14
- p(r);
15
- const z = {
14
+ r(c);
15
+ const S = {
16
16
  name: "NcAppDetailsToggle",
17
17
  directives: {
18
- tooltip: h
18
+ tooltip: f
19
19
  },
20
20
  components: {
21
- NcButton: l,
22
- ArrowRight: u
21
+ NcButton: p,
22
+ ArrowRight: h
23
+ },
24
+ setup() {
25
+ return {
26
+ isMobile: o()
27
+ };
23
28
  },
24
29
  computed: {
25
30
  title() {
26
- return c("Go back to the list");
31
+ return u("Go back to the list");
27
32
  }
28
33
  },
29
- beforeMount() {
30
- this.toggleAppNavigationButton(!0);
34
+ watch: {
35
+ isMobile: {
36
+ immediate: !0,
37
+ handler() {
38
+ this.toggleAppNavigationButton(this.isMobile);
39
+ }
40
+ }
31
41
  },
32
42
  beforeDestroy() {
33
- this.toggleAppNavigationButton(!1);
43
+ this.isMobile && this.toggleAppNavigationButton(!1);
34
44
  },
35
45
  methods: {
36
46
  toggleAppNavigationButton(e = !0) {
@@ -39,25 +49,25 @@ const z = {
39
49
  }
40
50
  }
41
51
  };
42
- var S = function() {
52
+ var z = function() {
43
53
  var t = this, i = t._self._c;
44
- return i("NcButton", { directives: [{ name: "tooltip", rawName: "v-tooltip", value: t.title, expression: "title" }], staticClass: "app-details-toggle", attrs: { "aria-label": t.title }, scopedSlots: t._u([{ key: "icon", fn: function() {
54
+ return i("NcButton", { directives: [{ name: "tooltip", rawName: "v-tooltip", value: t.title, expression: "title" }], staticClass: "app-details-toggle", class: { "app-details-toggle--mobile": t.isMobile }, attrs: { type: "tertiary", "aria-label": t.title }, scopedSlots: t._u([{ key: "icon", fn: function() {
45
55
  return [i("ArrowRight", { attrs: { size: 20 } })];
46
56
  }, proxy: !0 }]) });
47
- }, v = [], w = /* @__PURE__ */ o(
48
- z,
57
+ }, v = [], w = /* @__PURE__ */ l(
49
58
  S,
59
+ z,
50
60
  v,
51
61
  !1,
52
62
  null,
53
- "5244e83e",
63
+ "7e250fb8",
54
64
  null,
55
65
  null
56
66
  );
57
- const C = w.exports, n = g("nextcloud").persist().build(), N = {
67
+ const y = w.exports, n = d("nextcloud").persist().build(), b = {
58
68
  name: "NcAppContent",
59
69
  components: {
60
- NcAppDetailsToggle: C,
70
+ NcAppDetailsToggle: y,
61
71
  Pane: m,
62
72
  Splitpanes: _
63
73
  },
@@ -116,6 +126,19 @@ const C = w.exports, n = g("nextcloud").persist().build(), N = {
116
126
  pageHeading: {
117
127
  type: String,
118
128
  default: null
129
+ },
130
+ /**
131
+ * Content layout used when there is a list together with content:
132
+ * - `vertical-split` - a 2-column layout with list and default content separated vertically
133
+ * - `no-split` - a single column layout; List is shown when `showDetails` is `false`, otherwise the default slot content is shown with a back button to return to the list.
134
+ * On mobile screen `no-split` layout is forced.
135
+ */
136
+ layout: {
137
+ type: String,
138
+ default: "vertical-split",
139
+ validator(e) {
140
+ return ["no-split", "vertical-split"].includes(e);
141
+ }
119
142
  }
120
143
  },
121
144
  emits: [
@@ -124,13 +147,14 @@ const C = w.exports, n = g("nextcloud").persist().build(), N = {
124
147
  ],
125
148
  setup() {
126
149
  return {
127
- isMobile: f()
150
+ isMobile: o()
128
151
  };
129
152
  },
130
153
  data() {
131
154
  return {
132
155
  contentHeight: 0,
133
156
  hasList: !1,
157
+ hasContent: !1,
134
158
  swiping: {},
135
159
  listPaneSize: this.restorePaneConfig()
136
160
  };
@@ -166,12 +190,12 @@ const C = w.exports, n = g("nextcloud").persist().build(), N = {
166
190
  }
167
191
  },
168
192
  updated() {
169
- this.checkListSlot();
193
+ this.checkSlots();
170
194
  },
171
195
  mounted() {
172
- this.allowSwipeNavigation && (this.swiping = d(this.$el, {
196
+ this.allowSwipeNavigation && (this.swiping = g(this.$el, {
173
197
  onSwipeEnd: this.handleSwipe
174
- })), this.checkListSlot(), this.restorePaneConfig();
198
+ })), this.checkSlots(), this.restorePaneConfig();
175
199
  },
176
200
  methods: {
177
201
  /**
@@ -192,9 +216,8 @@ const C = w.exports, n = g("nextcloud").persist().build(), N = {
192
216
  n.setItem(this.paneConfigID, JSON.stringify(t)), this.listPaneSize = t, this.$emit("resize:list", { size: t }), console.debug("AppContent pane config", t);
193
217
  },
194
218
  // $slots is not reactive, we need to update this manually
195
- checkListSlot() {
196
- const e = !!this.$slots.list;
197
- this.hasList !== e && (this.hasList = e);
219
+ checkSlots() {
220
+ this.hasList = !!this.$scopedSlots.list, this.hasContent = !!this.$scopedSlots.default;
198
221
  },
199
222
  // browserStorage is not reactive, we need to update this manually
200
223
  restorePaneConfig() {
@@ -210,22 +233,26 @@ const C = w.exports, n = g("nextcloud").persist().build(), N = {
210
233
  }
211
234
  }
212
235
  };
213
- var D = function() {
236
+ var C = function() {
214
237
  var t = this, i = t._self._c;
215
- return i("main", { staticClass: "app-content no-snapper", class: { "app-content--has-list": t.hasList }, attrs: { id: "app-content-vue" } }, [t.pageHeading ? i("h1", { staticClass: "hidden-visually" }, [t._v(" " + t._s(t.pageHeading) + " ")]) : t._e(), t.hasList ? [t.isMobile ? i("div", { staticClass: "app-content-wrapper app-content-wrapper--mobile", class: t.showDetails ? "app-content-wrapper--show-details" : "app-content-wrapper--show-list" }, [t.hasList && t.showDetails ? i("NcAppDetailsToggle", { nativeOn: { click: function(s) {
238
+ return i("main", { staticClass: "app-content no-snapper", class: { "app-content--has-list": t.hasList }, attrs: { id: "app-content-vue" } }, [t.pageHeading ? i("h1", { staticClass: "hidden-visually" }, [t._v(" " + t._s(t.pageHeading) + " ")]) : t._e(), t.hasList ? [t.isMobile || t.layout === "no-split" ? i("div", { staticClass: "app-content-wrapper app-content-wrapper--no-split", class: {
239
+ "app-content-wrapper--show-details": t.showDetails,
240
+ "app-content-wrapper--show-list": !t.showDetails,
241
+ "app-content-wrapper--mobile": t.isMobile
242
+ } }, [t.showDetails ? i("NcAppDetailsToggle", { nativeOn: { click: function(s) {
216
243
  return s.stopPropagation(), s.preventDefault(), t.hideDetails.apply(null, arguments);
217
- } } }) : t._e(), t._t("list"), t._t("default")], 2) : i("div", { staticClass: "app-content-wrapper" }, [i("Splitpanes", { staticClass: "default-theme", on: { resized: t.handlePaneResize } }, [i("Pane", { staticClass: "splitpanes__pane-list", attrs: { size: t.listPaneSize || t.paneDefaults.list.size, "min-size": t.paneDefaults.list.min, "max-size": t.paneDefaults.list.max } }, [t._t("list")], 2), i("Pane", { staticClass: "splitpanes__pane-details", attrs: { size: t.detailsPaneSize, "min-size": t.paneDefaults.details.min, "max-size": t.paneDefaults.details.max } }, [t._t("default")], 2)], 1)], 1)] : t._t("default")], 2);
218
- }, y = [], P = /* @__PURE__ */ o(
219
- N,
244
+ } } }) : t._e(), t.showDetails ? t._t("default") : t._t("list")], 2) : t.layout === "vertical-split" ? i("div", { staticClass: "app-content-wrapper" }, [i("Splitpanes", { staticClass: "default-theme", on: { resized: t.handlePaneResize } }, [i("Pane", { staticClass: "splitpanes__pane-list", attrs: { size: t.listPaneSize || t.paneDefaults.list.size, "min-size": t.paneDefaults.list.min, "max-size": t.paneDefaults.list.max } }, [t._t("list")], 2), i("Pane", { staticClass: "splitpanes__pane-details", attrs: { size: t.detailsPaneSize, "min-size": t.paneDefaults.details.min, "max-size": t.paneDefaults.details.max } }, [t._t("default")], 2)], 1)], 1) : t._e()] : t._e(), t.hasList ? t._e() : t._t("default")], 2);
245
+ }, D = [], N = /* @__PURE__ */ l(
246
+ b,
247
+ C,
220
248
  D,
221
- y,
222
249
  !1,
223
250
  null,
224
- "27fc3f3a",
251
+ "0b75042f",
225
252
  null,
226
253
  null
227
254
  );
228
- const H = P.exports;
255
+ const H = N.exports;
229
256
  export {
230
257
  H as N
231
258
  };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NcAppContent-CUnQ4EVa.mjs","sources":["../../src/components/NcAppContent/NcAppDetailsToggle.vue","../../src/components/NcAppContent/NcAppContent.vue"],"sourcesContent":["<!--\n - @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<NcButton v-tooltip=\"title\"\n\t\ttype=\"tertiary\"\n\t\t:aria-label=\"title\"\n\t\tclass=\"app-details-toggle\"\n\t\t:class=\"{ 'app-details-toggle--mobile': isMobile }\">\n\t\t<template #icon>\n\t\t\t<ArrowRight :size=\"20\" />\n\t\t</template>\n\t</NcButton>\n</template>\n\n<script>\nimport NcButton from '../NcButton/index.js'\nimport { t } from '../../l10n.js'\nimport Tooltip from '../../directives/Tooltip/index.js'\n\nimport { emit } from '@nextcloud/event-bus'\n\nimport ArrowRight from 'vue-material-design-icons/ArrowRight.vue'\nimport { useIsMobile } from '../../composables/useIsMobile/index.js'\n\nexport default {\n\tname: 'NcAppDetailsToggle',\n\n\tdirectives: {\n\t\ttooltip: Tooltip,\n\t},\n\n\tcomponents: {\n\t\tNcButton,\n\t\tArrowRight,\n\t},\n\tsetup() {\n\t\treturn {\n\t\t\tisMobile: useIsMobile(),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\ttitle() {\n\t\t\treturn t('Go back to the list')\n\t\t},\n\t},\n\twatch: {\n\t\tisMobile: {\n\t\t\timmediate: true,\n\t\t\thandler() {\n\t\t\t\tthis.toggleAppNavigationButton(this.isMobile)\n\t\t\t},\n\t\t},\n\t},\n\n\tbeforeDestroy() {\n\t\tif (this.isMobile) {\n\t\t\tthis.toggleAppNavigationButton(false)\n\t\t}\n\t},\n\n\tmethods: {\n\t\ttoggleAppNavigationButton(hide = true) {\n\t\t\tconst appNavigationToggle = document.querySelector('.app-navigation .app-navigation-toggle')\n\t\t\tif (appNavigationToggle) {\n\t\t\t\tappNavigationToggle.style.display = hide ? 'none' : null\n\n\t\t\t\t// If we hide the NavigationToggle, we need to make sure the Navigation is also closed\n\t\t\t\tif (hide === true) {\n\t\t\t\t\temit('toggle-navigation', { open: false })\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.app-details-toggle {\n\tposition: sticky;\n\twidth: $clickable-area;\n\theight: $clickable-area;\n\tpadding: $icon-margin;\n\tcursor: pointer;\n\topacity: .6;\n\ttransform: rotate(180deg);\n\tbackground-color: var(--color-main-background);\n\tz-index: 2000;\n\n\ttop: var(--app-navigation-padding);\n\t// Navigation Toggle button width + 2 paddings around\n\tleft: calc(var(--default-clickable-area) + var(--app-navigation-padding) * 2);\n\t&--mobile {\n\t\t// There is no NavigationToggle button\n\t\tleft: var(--app-navigation-padding);\n\t}\n\n\t&:active,\n\t&:hover,\n\t&:focus {\n\t\topacity: 1;\n\t}\n}\n\n</style>\n","<!--\n - @copyright Copyright (c) 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author Christoph Wurst <christoph@winzerhof-wurst.at>\n - @author Marco Ambrosini <marcoambrosini@icloud.com>\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<docs>\n### General description\n\nThis components provides a wrapper around the main app's content.\n\nSingle-column layouts can just use the default slot. A resizable column\ncan be added by providing content to the named slot `list`.\n\n### CSS variables\nIn the css section some css variables are declared and will be available for\nall the children of the NcAppContent component\n\n### Examples\n\n#### Usage: Single-column content\n```vue\n<template>\n\t<NcAppContent>\n\t\t<h2>Single-column main content</h2>\n\t</NcAppContent>\n</template>\n```\n\n#### Usage: Two resizable columns\n```vue\n<template>\n\t<NcAppContent>\n\t\t<template #list>\n\t\t\t<div>Resizable list content</div>\n\t\t</template>\n\n\t\t<div>Main content</div>\n\t</NcAppContent>\n</template>\n```\n\n#### Overriding Defaults\nThe default, min and max sizes (in percent) of the resizable list column can be overridden.\nThe list size must be between the min and the max width value.\n\n```\n<NcAppContent\n\t:list-size=\"35\"\n\t:list-min-width=\"20\"\n\t:list-max-width=\"45\"\n>...</NcAppContent>\n```\n</docs>\n\n<template>\n\t<main id=\"app-content-vue\" class=\"app-content no-snapper\" :class=\"{ 'app-content--has-list': hasList }\">\n\t\t<h1 v-if=\"pageHeading\" class=\"hidden-visually\">\n\t\t\t{{ pageHeading }}\n\t\t</h1>\n\n\t\t<template v-if=\"hasList\">\n\t\t\t<!-- Mobile view does not allow resizeable panes -->\n\t\t\t<div v-if=\"isMobile || layout === 'no-split'\"\n\t\t\t\tclass=\"app-content-wrapper app-content-wrapper--no-split\"\n\t\t\t\t:class=\"{\n\t\t\t\t\t'app-content-wrapper--show-details': showDetails,\n\t\t\t\t\t'app-content-wrapper--show-list': !showDetails,\n\t\t\t\t\t'app-content-wrapper--mobile': isMobile,}\">\n\t\t\t\t<NcAppDetailsToggle v-if=\"showDetails\" @click.native.stop.prevent=\"hideDetails\" />\n\t\t\t\t<slot v-if=\"!showDetails\" name=\"list\" />\n\n\t\t\t\t<slot v-else />\n\t\t\t</div>\n\t\t\t<div v-else-if=\"layout === 'vertical-split'\" class=\"app-content-wrapper\">\n\t\t\t\t<Splitpanes class=\"default-theme\"\n\t\t\t\t\t@resized=\"handlePaneResize\">\n\t\t\t\t\t<Pane class=\"splitpanes__pane-list\"\n\t\t\t\t\t\t:size=\"listPaneSize || paneDefaults.list.size\"\n\t\t\t\t\t\t:min-size=\"paneDefaults.list.min\"\n\t\t\t\t\t\t:max-size=\"paneDefaults.list.max\">\n\t\t\t\t\t\t<!-- @slot Provide a list to the app content -->\n\t\t\t\t\t\t<slot name=\"list\" />\n\t\t\t\t\t</Pane>\n\n\t\t\t\t\t<Pane class=\"splitpanes__pane-details\"\n\t\t\t\t\t\t:size=\"detailsPaneSize\"\n\t\t\t\t\t\t:min-size=\"paneDefaults.details.min\"\n\t\t\t\t\t\t:max-size=\"paneDefaults.details.max\">\n\t\t\t\t\t\t<!-- @slot Provide the main content to the app content -->\n\t\t\t\t\t\t<slot />\n\t\t\t\t\t</Pane>\n\t\t\t\t</Splitpanes>\n\t\t\t</div>\n\t\t</template>\n\t\t<!-- @slot Provide the main content to the app content -->\n\t\t<slot v-if=\"!hasList\" />\n\t</main>\n</template>\n\n<script>\nimport NcAppDetailsToggle from './NcAppDetailsToggle.vue'\nimport { useIsMobile } from '../../composables/useIsMobile/index.js'\n\nimport { getBuilder } from '@nextcloud/browser-storage'\nimport { useSwipe } from '@vueuse/core'\nimport { Splitpanes, Pane } from 'splitpanes'\n\nimport 'splitpanes/dist/splitpanes.css'\nimport { emit } from '@nextcloud/event-bus'\n\nconst browserStorage = getBuilder('nextcloud').persist().build()\n\n/**\n * App content container to be used for the main content of your app\n *\n */\nexport default {\n\tname: 'NcAppContent',\n\n\tcomponents: {\n\t\tNcAppDetailsToggle,\n\t\tPane,\n\t\tSplitpanes,\n\t},\n\tprops: {\n\t\t/**\n\t\t * Allows to disable the control by swipe of the app navigation open state\n\t\t */\n\t\tallowSwipeNavigation: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Allows you to set the default width of the resizable list in %\n\t\t * Must be between listMinWidth and listMaxWidth\n\t\t */\n\t\tlistSize: {\n\t\t\ttype: Number,\n\t\t\tdefault: 20,\n\t\t},\n\n\t\t/**\n\t\t * Allows you to set the minimum width of the list column in %\n\t\t */\n\t\tlistMinWidth: {\n\t\t\ttype: Number,\n\t\t\tdefault: 15,\n\t\t},\n\n\t\t/**\n\t\t * Allows you to set the maximum width of the list column in %\n\t\t */\n\t\tlistMaxWidth: {\n\t\t\ttype: Number,\n\t\t\tdefault: 40,\n\t\t},\n\n\t\t/**\n\t\t * Specify the config key for the pane config sizes\n\t\t * Default is the global var appName if you use the webpack-vue-config\n\t\t */\n\t\tpaneConfigKey: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * When in mobile view, only the list or the details are shown\n\t\t * If you provide a list, you need to provide a variable\n\t\t * that will be set to true by the user when an element of\n\t\t * the list gets selected. The details will then show a back\n\t\t * arrow to return to the list that will update this prop to false.\n\t\t */\n\t\tshowDetails: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Specify the `<h1>` page heading\n\t\t */\n\t\tpageHeading: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\t/**\n\t\t * Content layout used when there is a list together with content:\n\t\t * - `vertical-split` - a 2-column layout with list and default content separated vertically\n\t\t * - `no-split` - a single column layout; List is shown when `showDetails` is `false`, otherwise the default slot content is shown with a back button to return to the list.\n\t\t * On mobile screen `no-split` layout is forced.\n\t\t */\n\t\tlayout: {\n\t\t\ttype: String,\n\t\t\tdefault: 'vertical-split',\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['no-split', 'vertical-split'].includes(value)\n\t\t\t},\n\t\t},\n\t},\n\n\temits: [\n\t\t'update:showDetails',\n\t\t'resize:list',\n\t],\n\n\tsetup() {\n\t\treturn {\n\t\t\tisMobile: useIsMobile(),\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tcontentHeight: 0,\n\t\t\thasList: false,\n\t\t\thasContent: false,\n\t\t\tswiping: {},\n\t\t\tlistPaneSize: this.restorePaneConfig(),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tpaneConfigID() {\n\t\t\t// If provided, let's use it\n\t\t\tif (this.paneConfigKey !== '') {\n\t\t\t\treturn `pane-list-size-${this.paneConfigKey}`\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\t// Using the webpack-vue-config, appName is a global variable\n\t\t\t\t// This will throw a ReferenceError when the global variable is missing\n\t\t\t\t// In that case either you provide paneConfigKey or else it fallback\n\t\t\t\t// to a global storage key\n\t\t\t\treturn `pane-list-size-${appName}`\n\t\t\t} catch (e) {\n\t\t\t\tconsole.info('[INFO] AppContent:', 'falling back to global nextcloud pane config')\n\t\t\t\treturn 'pane-list-size-nextcloud'\n\t\t\t}\n\t\t},\n\n\t\tdetailsPaneSize() {\n\t\t\tif (this.listPaneSize) {\n\t\t\t\treturn 100 - this.listPaneSize\n\t\t\t}\n\t\t\treturn this.paneDefaults.details.size\n\t\t},\n\n\t\tpaneDefaults() {\n\t\t\treturn {\n\t\t\t\tlist: {\n\t\t\t\t\tsize: this.listSize,\n\t\t\t\t\tmin: this.listMinWidth,\n\t\t\t\t\tmax: this.listMaxWidth,\n\t\t\t\t},\n\n\t\t\t\t// set the inverse values of the details column\n\t\t\t\t// based on the provided (or default) values of the list column\n\t\t\t\tdetails: {\n\t\t\t\t\tsize: 100 - this.listSize,\n\t\t\t\t\tmin: 100 - this.listMaxWidth,\n\t\t\t\t\tmax: 100 - this.listMinWidth,\n\t\t\t\t},\n\t\t\t}\n\t\t},\n\t},\n\n\tupdated() {\n\t\tthis.checkSlots()\n\t},\n\n\tmounted() {\n\t\tif (this.allowSwipeNavigation) {\n\t\t\tthis.swiping = useSwipe(this.$el, {\n\t\t\t\tonSwipeEnd: this.handleSwipe,\n\t\t\t})\n\t\t}\n\n\t\tthis.checkSlots()\n\t\tthis.restorePaneConfig()\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * handle the swipe event\n\t\t *\n\t\t * @param {TouchEvent} e The touch event\n\t\t * @param {import('@vueuse/core').SwipeDirection} direction The swipe direction of the event\n\t\t */\n\t\thandleSwipe(e, direction) {\n\t\t\tconst minSwipeX = 70\n\t\t\tconst touchZone = 300\n\t\t\tif (Math.abs(this.swiping.lengthX) > minSwipeX) {\n\t\t\t\tif (this.swiping.coordsStart.x < (touchZone / 2) && direction === 'right') {\n\t\t\t\t\temit('toggle-navigation', {\n\t\t\t\t\t\topen: true,\n\t\t\t\t\t})\n\t\t\t\t} else if (this.swiping.coordsStart.x < touchZone * 1.5 && direction === 'left') {\n\t\t\t\t\temit('toggle-navigation', {\n\t\t\t\t\t\topen: false,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\thandlePaneResize(event) {\n\t\t\tconst listPaneSize = parseInt(event[0].size, 10)\n\t\t\tbrowserStorage.setItem(this.paneConfigID, JSON.stringify(listPaneSize))\n\t\t\tthis.listPaneSize = listPaneSize\n\t\t\t/**\n\t\t\t * Emitted when the list pane is resized by the user\n\t\t\t */\n\t\t\tthis.$emit('resize:list', { size: listPaneSize })\n\t\t\tconsole.debug('AppContent pane config', listPaneSize)\n\t\t},\n\n\t\t// $slots is not reactive, we need to update this manually\n\t\tcheckSlots() {\n\t\t\tthis.hasList = !!this.$scopedSlots.list\n\t\t\tthis.hasContent = !!this.$scopedSlots.default\n\t\t},\n\n\t\t// browserStorage is not reactive, we need to update this manually\n\t\trestorePaneConfig() {\n\t\t\tconst listPaneSize = parseInt(browserStorage.getItem(this.paneConfigID), 10)\n\t\t\tif (!isNaN(listPaneSize) && listPaneSize !== this.listPaneSize) {\n\t\t\t\tconsole.debug('AppContent pane config', listPaneSize)\n\t\t\t\tthis.listPaneSize = listPaneSize\n\t\t\t\treturn listPaneSize\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * The user clicked the back arrow from the details view\n\t\t */\n\t\thideDetails() {\n\t\t\tthis.$emit('update:showDetails', false)\n\t\t},\n\t},\n}\n</script>\n<style lang=\"scss\" scoped>\n\n.app-content {\n\tposition: initial;\n\tz-index: 1000;\n\tflex-basis: 100vw;\n\theight: 100%;\n\t// Overriding server styles TODO: cleanup!\n\tmargin: 0 !important;\n\tbackground-color: var(--color-main-background);\n\tmin-width: 0;\n\n\t&:not(.app-content--has-list) {\n\t\toverflow: auto;\n\t}\n}\n\n.app-content-wrapper {\n\tposition: relative;\n\twidth: 100%;\n\theight: 100%;\n}\n\n// Mobile list/details handling\n.app-content-wrapper--no-split {\n\t&.app-content-wrapper--show-list :deep() {\n\t\t.app-content-list {\n\t\t\tdisplay: flex;\n\t\t}\n\t\t.app-content-details {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\t&.app-content-wrapper--show-details :deep() {\n\t\t.app-content-list {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.app-content-details {\n\t\t\tdisplay: block;\n\t\t}\n\t}\n}\n\n:deep(.splitpanes.default-theme) {\n\t.app-content-list {\n\t\tmax-width: none;\n\t\t/* Thin scrollbar is hard to catch on resizable columns */\n\t\tscrollbar-width: auto;\n\t}\n\n\t.splitpanes__pane {\n\t\tbackground-color: transparent;\n\t\ttransition: none;\n\n\t\t&-list {\n\t\t\tmin-width: 300px;\n\t\t\tposition: sticky;\n\t\t\ttop: var(--header-height);\n\n\t\t\t@media only screen and (width < $breakpoint-mobile) {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\n\t\t&-details {\n\t\t\toverflow-y: auto;\n\n\t\t\t@media only screen and (width < $breakpoint-mobile) {\n\t\t\t\tmin-width: 100%;\n\t\t\t}\n\t\t}\n\t}\n\n\t.splitpanes__splitter {\n\t\twidth: 9px;\n\t\tmargin-left: -5px;\n\t\tbackground-color: transparent;\n\t\tborder-left: none;\n\n\t\t&:before,\n\t\t&:after {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n\n.app-content-wrapper--show-list {\n\t:deep(.app-content-list) {\n\t\tmax-width: none;\n\t}\n}\n</style>\n"],"names":["_sfc_main","Tooltip","NcButton","ArrowRight","useIsMobile","t","hide","appNavigationToggle","emit","browserStorage","getBuilder","NcAppDetailsToggle","Pane","Splitpanes","value","useSwipe","direction","event","listPaneSize"],"mappings":"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"}
@@ -1,29 +1,39 @@
1
- require('../assets/NcAppContent-Cv8rRTyy.css');
1
+ require('../assets/NcAppContent-DcXMrsBz.css');
2
2
  "use strict";
3
- const r = require("../Components/NcButton.cjs"), n = require("./_l10n-B986q8RC.cjs");
3
+ const u = require("../Components/NcButton.cjs"), n = require("./_l10n-DZggkcVs.cjs");
4
4
  require("../Directives/Tooltip.cjs");
5
- const a = require("@nextcloud/event-bus"), u = require("./ArrowRight-CxzzJJQ6.cjs"), p = require("./_plugin-vue2_normalizer-GXKvuwrq.cjs"), c = require("floating-vue"), h = require("../Composables/useIsMobile.cjs"), g = require("@nextcloud/browser-storage"), d = require("@vueuse/core"), o = require("splitpanes");
5
+ const a = require("@nextcloud/event-bus"), c = require("./ArrowRight-CxzzJJQ6.cjs"), p = require("../Composables/useIsMobile.cjs"), r = require("./_plugin-vue2_normalizer-GXKvuwrq.cjs"), h = require("floating-vue"), g = require("@nextcloud/browser-storage"), d = require("@vueuse/core"), l = require("splitpanes");
6
6
  require("splitpanes/dist/splitpanes.css");
7
7
  n.register(n.t24);
8
8
  const f = {
9
9
  name: "NcAppDetailsToggle",
10
10
  directives: {
11
- tooltip: c.VTooltip
11
+ tooltip: h.VTooltip
12
12
  },
13
13
  components: {
14
- NcButton: r,
15
- ArrowRight: u.ArrowRight
14
+ NcButton: u,
15
+ ArrowRight: c.ArrowRight
16
+ },
17
+ setup() {
18
+ return {
19
+ isMobile: p.useIsMobile()
20
+ };
16
21
  },
17
22
  computed: {
18
23
  title() {
19
24
  return n.t("Go back to the list");
20
25
  }
21
26
  },
22
- beforeMount() {
23
- this.toggleAppNavigationButton(!0);
27
+ watch: {
28
+ isMobile: {
29
+ immediate: !0,
30
+ handler() {
31
+ this.toggleAppNavigationButton(this.isMobile);
32
+ }
33
+ }
24
34
  },
25
35
  beforeDestroy() {
26
- this.toggleAppNavigationButton(!1);
36
+ this.isMobile && this.toggleAppNavigationButton(!1);
27
37
  },
28
38
  methods: {
29
39
  toggleAppNavigationButton(t = !0) {
@@ -34,25 +44,25 @@ const f = {
34
44
  };
35
45
  var m = function() {
36
46
  var e = this, i = e._self._c;
37
- return i("NcButton", { directives: [{ name: "tooltip", rawName: "v-tooltip", value: e.title, expression: "title" }], staticClass: "app-details-toggle", attrs: { "aria-label": e.title }, scopedSlots: e._u([{ key: "icon", fn: function() {
47
+ return i("NcButton", { directives: [{ name: "tooltip", rawName: "v-tooltip", value: e.title, expression: "title" }], staticClass: "app-details-toggle", class: { "app-details-toggle--mobile": e.isMobile }, attrs: { type: "tertiary", "aria-label": e.title }, scopedSlots: e._u([{ key: "icon", fn: function() {
38
48
  return [i("ArrowRight", { attrs: { size: 20 } })];
39
49
  }, proxy: !0 }]) });
40
- }, _ = [], z = /* @__PURE__ */ p.normalizeComponent(
50
+ }, _ = [], S = /* @__PURE__ */ r.normalizeComponent(
41
51
  f,
42
52
  m,
43
53
  _,
44
54
  !1,
45
55
  null,
46
- "5244e83e",
56
+ "7e250fb8",
47
57
  null,
48
58
  null
49
59
  );
50
- const S = z.exports, l = g.getBuilder("nextcloud").persist().build(), w = {
60
+ const w = S.exports, o = g.getBuilder("nextcloud").persist().build(), z = {
51
61
  name: "NcAppContent",
52
62
  components: {
53
- NcAppDetailsToggle: S,
54
- Pane: o.Pane,
55
- Splitpanes: o.Splitpanes
63
+ NcAppDetailsToggle: w,
64
+ Pane: l.Pane,
65
+ Splitpanes: l.Splitpanes
56
66
  },
57
67
  props: {
58
68
  /**
@@ -109,6 +119,19 @@ const S = z.exports, l = g.getBuilder("nextcloud").persist().build(), w = {
109
119
  pageHeading: {
110
120
  type: String,
111
121
  default: null
122
+ },
123
+ /**
124
+ * Content layout used when there is a list together with content:
125
+ * - `vertical-split` - a 2-column layout with list and default content separated vertically
126
+ * - `no-split` - a single column layout; List is shown when `showDetails` is `false`, otherwise the default slot content is shown with a back button to return to the list.
127
+ * On mobile screen `no-split` layout is forced.
128
+ */
129
+ layout: {
130
+ type: String,
131
+ default: "vertical-split",
132
+ validator(t) {
133
+ return ["no-split", "vertical-split"].includes(t);
134
+ }
112
135
  }
113
136
  },
114
137
  emits: [
@@ -117,13 +140,14 @@ const S = z.exports, l = g.getBuilder("nextcloud").persist().build(), w = {
117
140
  ],
118
141
  setup() {
119
142
  return {
120
- isMobile: h.useIsMobile()
143
+ isMobile: p.useIsMobile()
121
144
  };
122
145
  },
123
146
  data() {
124
147
  return {
125
148
  contentHeight: 0,
126
149
  hasList: !1,
150
+ hasContent: !1,
127
151
  swiping: {},
128
152
  listPaneSize: this.restorePaneConfig()
129
153
  };
@@ -159,12 +183,12 @@ const S = z.exports, l = g.getBuilder("nextcloud").persist().build(), w = {
159
183
  }
160
184
  },
161
185
  updated() {
162
- this.checkListSlot();
186
+ this.checkSlots();
163
187
  },
164
188
  mounted() {
165
189
  this.allowSwipeNavigation && (this.swiping = d.useSwipe(this.$el, {
166
190
  onSwipeEnd: this.handleSwipe
167
- })), this.checkListSlot(), this.restorePaneConfig();
191
+ })), this.checkSlots(), this.restorePaneConfig();
168
192
  },
169
193
  methods: {
170
194
  /**
@@ -182,16 +206,15 @@ const S = z.exports, l = g.getBuilder("nextcloud").persist().build(), w = {
182
206
  },
183
207
  handlePaneResize(t) {
184
208
  const e = parseInt(t[0].size, 10);
185
- l.setItem(this.paneConfigID, JSON.stringify(e)), this.listPaneSize = e, this.$emit("resize:list", { size: e }), console.debug("AppContent pane config", e);
209
+ o.setItem(this.paneConfigID, JSON.stringify(e)), this.listPaneSize = e, this.$emit("resize:list", { size: e }), console.debug("AppContent pane config", e);
186
210
  },
187
211
  // $slots is not reactive, we need to update this manually
188
- checkListSlot() {
189
- const t = !!this.$slots.list;
190
- this.hasList !== t && (this.hasList = t);
212
+ checkSlots() {
213
+ this.hasList = !!this.$scopedSlots.list, this.hasContent = !!this.$scopedSlots.default;
191
214
  },
192
215
  // browserStorage is not reactive, we need to update this manually
193
216
  restorePaneConfig() {
194
- const t = parseInt(l.getItem(this.paneConfigID), 10);
217
+ const t = parseInt(o.getItem(this.paneConfigID), 10);
195
218
  if (!isNaN(t) && t !== this.listPaneSize)
196
219
  return console.debug("AppContent pane config", t), this.listPaneSize = t, t;
197
220
  },
@@ -205,18 +228,22 @@ const S = z.exports, l = g.getBuilder("nextcloud").persist().build(), w = {
205
228
  };
206
229
  var v = function() {
207
230
  var e = this, i = e._self._c;
208
- return i("main", { staticClass: "app-content no-snapper", class: { "app-content--has-list": e.hasList }, attrs: { id: "app-content-vue" } }, [e.pageHeading ? i("h1", { staticClass: "hidden-visually" }, [e._v(" " + e._s(e.pageHeading) + " ")]) : e._e(), e.hasList ? [e.isMobile ? i("div", { staticClass: "app-content-wrapper app-content-wrapper--mobile", class: e.showDetails ? "app-content-wrapper--show-details" : "app-content-wrapper--show-list" }, [e.hasList && e.showDetails ? i("NcAppDetailsToggle", { nativeOn: { click: function(s) {
231
+ return i("main", { staticClass: "app-content no-snapper", class: { "app-content--has-list": e.hasList }, attrs: { id: "app-content-vue" } }, [e.pageHeading ? i("h1", { staticClass: "hidden-visually" }, [e._v(" " + e._s(e.pageHeading) + " ")]) : e._e(), e.hasList ? [e.isMobile || e.layout === "no-split" ? i("div", { staticClass: "app-content-wrapper app-content-wrapper--no-split", class: {
232
+ "app-content-wrapper--show-details": e.showDetails,
233
+ "app-content-wrapper--show-list": !e.showDetails,
234
+ "app-content-wrapper--mobile": e.isMobile
235
+ } }, [e.showDetails ? i("NcAppDetailsToggle", { nativeOn: { click: function(s) {
209
236
  return s.stopPropagation(), s.preventDefault(), e.hideDetails.apply(null, arguments);
210
- } } }) : e._e(), e._t("list"), e._t("default")], 2) : i("div", { staticClass: "app-content-wrapper" }, [i("Splitpanes", { staticClass: "default-theme", on: { resized: e.handlePaneResize } }, [i("Pane", { staticClass: "splitpanes__pane-list", attrs: { size: e.listPaneSize || e.paneDefaults.list.size, "min-size": e.paneDefaults.list.min, "max-size": e.paneDefaults.list.max } }, [e._t("list")], 2), i("Pane", { staticClass: "splitpanes__pane-details", attrs: { size: e.detailsPaneSize, "min-size": e.paneDefaults.details.min, "max-size": e.paneDefaults.details.max } }, [e._t("default")], 2)], 1)], 1)] : e._t("default")], 2);
211
- }, C = [], N = /* @__PURE__ */ p.normalizeComponent(
212
- w,
237
+ } } }) : e._e(), e.showDetails ? e._t("default") : e._t("list")], 2) : e.layout === "vertical-split" ? i("div", { staticClass: "app-content-wrapper" }, [i("Splitpanes", { staticClass: "default-theme", on: { resized: e.handlePaneResize } }, [i("Pane", { staticClass: "splitpanes__pane-list", attrs: { size: e.listPaneSize || e.paneDefaults.list.size, "min-size": e.paneDefaults.list.min, "max-size": e.paneDefaults.list.max } }, [e._t("list")], 2), i("Pane", { staticClass: "splitpanes__pane-details", attrs: { size: e.detailsPaneSize, "min-size": e.paneDefaults.details.min, "max-size": e.paneDefaults.details.max } }, [e._t("default")], 2)], 1)], 1) : e._e()] : e._e(), e.hasList ? e._e() : e._t("default")], 2);
238
+ }, b = [], C = /* @__PURE__ */ r.normalizeComponent(
239
+ z,
213
240
  v,
214
- C,
241
+ b,
215
242
  !1,
216
243
  null,
217
- "27fc3f3a",
244
+ "0b75042f",
218
245
  null,
219
246
  null
220
247
  );
221
- const D = N.exports;
222
- exports.NcAppContent = D;
248
+ const y = C.exports;
249
+ exports.NcAppContent = y;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NcAppContent-CuOJJPbt.cjs","sources":["../../src/components/NcAppContent/NcAppDetailsToggle.vue","../../src/components/NcAppContent/NcAppContent.vue"],"sourcesContent":["<!--\n - @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<NcButton v-tooltip=\"title\"\n\t\ttype=\"tertiary\"\n\t\t:aria-label=\"title\"\n\t\tclass=\"app-details-toggle\"\n\t\t:class=\"{ 'app-details-toggle--mobile': isMobile }\">\n\t\t<template #icon>\n\t\t\t<ArrowRight :size=\"20\" />\n\t\t</template>\n\t</NcButton>\n</template>\n\n<script>\nimport NcButton from '../NcButton/index.js'\nimport { t } from '../../l10n.js'\nimport Tooltip from '../../directives/Tooltip/index.js'\n\nimport { emit } from '@nextcloud/event-bus'\n\nimport ArrowRight from 'vue-material-design-icons/ArrowRight.vue'\nimport { useIsMobile } from '../../composables/useIsMobile/index.js'\n\nexport default {\n\tname: 'NcAppDetailsToggle',\n\n\tdirectives: {\n\t\ttooltip: Tooltip,\n\t},\n\n\tcomponents: {\n\t\tNcButton,\n\t\tArrowRight,\n\t},\n\tsetup() {\n\t\treturn {\n\t\t\tisMobile: useIsMobile(),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\ttitle() {\n\t\t\treturn t('Go back to the list')\n\t\t},\n\t},\n\twatch: {\n\t\tisMobile: {\n\t\t\timmediate: true,\n\t\t\thandler() {\n\t\t\t\tthis.toggleAppNavigationButton(this.isMobile)\n\t\t\t},\n\t\t},\n\t},\n\n\tbeforeDestroy() {\n\t\tif (this.isMobile) {\n\t\t\tthis.toggleAppNavigationButton(false)\n\t\t}\n\t},\n\n\tmethods: {\n\t\ttoggleAppNavigationButton(hide = true) {\n\t\t\tconst appNavigationToggle = document.querySelector('.app-navigation .app-navigation-toggle')\n\t\t\tif (appNavigationToggle) {\n\t\t\t\tappNavigationToggle.style.display = hide ? 'none' : null\n\n\t\t\t\t// If we hide the NavigationToggle, we need to make sure the Navigation is also closed\n\t\t\t\tif (hide === true) {\n\t\t\t\t\temit('toggle-navigation', { open: false })\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.app-details-toggle {\n\tposition: sticky;\n\twidth: $clickable-area;\n\theight: $clickable-area;\n\tpadding: $icon-margin;\n\tcursor: pointer;\n\topacity: .6;\n\ttransform: rotate(180deg);\n\tbackground-color: var(--color-main-background);\n\tz-index: 2000;\n\n\ttop: var(--app-navigation-padding);\n\t// Navigation Toggle button width + 2 paddings around\n\tleft: calc(var(--default-clickable-area) + var(--app-navigation-padding) * 2);\n\t&--mobile {\n\t\t// There is no NavigationToggle button\n\t\tleft: var(--app-navigation-padding);\n\t}\n\n\t&:active,\n\t&:hover,\n\t&:focus {\n\t\topacity: 1;\n\t}\n}\n\n</style>\n","<!--\n - @copyright Copyright (c) 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author Christoph Wurst <christoph@winzerhof-wurst.at>\n - @author Marco Ambrosini <marcoambrosini@icloud.com>\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<docs>\n### General description\n\nThis components provides a wrapper around the main app's content.\n\nSingle-column layouts can just use the default slot. A resizable column\ncan be added by providing content to the named slot `list`.\n\n### CSS variables\nIn the css section some css variables are declared and will be available for\nall the children of the NcAppContent component\n\n### Examples\n\n#### Usage: Single-column content\n```vue\n<template>\n\t<NcAppContent>\n\t\t<h2>Single-column main content</h2>\n\t</NcAppContent>\n</template>\n```\n\n#### Usage: Two resizable columns\n```vue\n<template>\n\t<NcAppContent>\n\t\t<template #list>\n\t\t\t<div>Resizable list content</div>\n\t\t</template>\n\n\t\t<div>Main content</div>\n\t</NcAppContent>\n</template>\n```\n\n#### Overriding Defaults\nThe default, min and max sizes (in percent) of the resizable list column can be overridden.\nThe list size must be between the min and the max width value.\n\n```\n<NcAppContent\n\t:list-size=\"35\"\n\t:list-min-width=\"20\"\n\t:list-max-width=\"45\"\n>...</NcAppContent>\n```\n</docs>\n\n<template>\n\t<main id=\"app-content-vue\" class=\"app-content no-snapper\" :class=\"{ 'app-content--has-list': hasList }\">\n\t\t<h1 v-if=\"pageHeading\" class=\"hidden-visually\">\n\t\t\t{{ pageHeading }}\n\t\t</h1>\n\n\t\t<template v-if=\"hasList\">\n\t\t\t<!-- Mobile view does not allow resizeable panes -->\n\t\t\t<div v-if=\"isMobile || layout === 'no-split'\"\n\t\t\t\tclass=\"app-content-wrapper app-content-wrapper--no-split\"\n\t\t\t\t:class=\"{\n\t\t\t\t\t'app-content-wrapper--show-details': showDetails,\n\t\t\t\t\t'app-content-wrapper--show-list': !showDetails,\n\t\t\t\t\t'app-content-wrapper--mobile': isMobile,}\">\n\t\t\t\t<NcAppDetailsToggle v-if=\"showDetails\" @click.native.stop.prevent=\"hideDetails\" />\n\t\t\t\t<slot v-if=\"!showDetails\" name=\"list\" />\n\n\t\t\t\t<slot v-else />\n\t\t\t</div>\n\t\t\t<div v-else-if=\"layout === 'vertical-split'\" class=\"app-content-wrapper\">\n\t\t\t\t<Splitpanes class=\"default-theme\"\n\t\t\t\t\t@resized=\"handlePaneResize\">\n\t\t\t\t\t<Pane class=\"splitpanes__pane-list\"\n\t\t\t\t\t\t:size=\"listPaneSize || paneDefaults.list.size\"\n\t\t\t\t\t\t:min-size=\"paneDefaults.list.min\"\n\t\t\t\t\t\t:max-size=\"paneDefaults.list.max\">\n\t\t\t\t\t\t<!-- @slot Provide a list to the app content -->\n\t\t\t\t\t\t<slot name=\"list\" />\n\t\t\t\t\t</Pane>\n\n\t\t\t\t\t<Pane class=\"splitpanes__pane-details\"\n\t\t\t\t\t\t:size=\"detailsPaneSize\"\n\t\t\t\t\t\t:min-size=\"paneDefaults.details.min\"\n\t\t\t\t\t\t:max-size=\"paneDefaults.details.max\">\n\t\t\t\t\t\t<!-- @slot Provide the main content to the app content -->\n\t\t\t\t\t\t<slot />\n\t\t\t\t\t</Pane>\n\t\t\t\t</Splitpanes>\n\t\t\t</div>\n\t\t</template>\n\t\t<!-- @slot Provide the main content to the app content -->\n\t\t<slot v-if=\"!hasList\" />\n\t</main>\n</template>\n\n<script>\nimport NcAppDetailsToggle from './NcAppDetailsToggle.vue'\nimport { useIsMobile } from '../../composables/useIsMobile/index.js'\n\nimport { getBuilder } from '@nextcloud/browser-storage'\nimport { useSwipe } from '@vueuse/core'\nimport { Splitpanes, Pane } from 'splitpanes'\n\nimport 'splitpanes/dist/splitpanes.css'\nimport { emit } from '@nextcloud/event-bus'\n\nconst browserStorage = getBuilder('nextcloud').persist().build()\n\n/**\n * App content container to be used for the main content of your app\n *\n */\nexport default {\n\tname: 'NcAppContent',\n\n\tcomponents: {\n\t\tNcAppDetailsToggle,\n\t\tPane,\n\t\tSplitpanes,\n\t},\n\tprops: {\n\t\t/**\n\t\t * Allows to disable the control by swipe of the app navigation open state\n\t\t */\n\t\tallowSwipeNavigation: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Allows you to set the default width of the resizable list in %\n\t\t * Must be between listMinWidth and listMaxWidth\n\t\t */\n\t\tlistSize: {\n\t\t\ttype: Number,\n\t\t\tdefault: 20,\n\t\t},\n\n\t\t/**\n\t\t * Allows you to set the minimum width of the list column in %\n\t\t */\n\t\tlistMinWidth: {\n\t\t\ttype: Number,\n\t\t\tdefault: 15,\n\t\t},\n\n\t\t/**\n\t\t * Allows you to set the maximum width of the list column in %\n\t\t */\n\t\tlistMaxWidth: {\n\t\t\ttype: Number,\n\t\t\tdefault: 40,\n\t\t},\n\n\t\t/**\n\t\t * Specify the config key for the pane config sizes\n\t\t * Default is the global var appName if you use the webpack-vue-config\n\t\t */\n\t\tpaneConfigKey: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * When in mobile view, only the list or the details are shown\n\t\t * If you provide a list, you need to provide a variable\n\t\t * that will be set to true by the user when an element of\n\t\t * the list gets selected. The details will then show a back\n\t\t * arrow to return to the list that will update this prop to false.\n\t\t */\n\t\tshowDetails: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Specify the `<h1>` page heading\n\t\t */\n\t\tpageHeading: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\t/**\n\t\t * Content layout used when there is a list together with content:\n\t\t * - `vertical-split` - a 2-column layout with list and default content separated vertically\n\t\t * - `no-split` - a single column layout; List is shown when `showDetails` is `false`, otherwise the default slot content is shown with a back button to return to the list.\n\t\t * On mobile screen `no-split` layout is forced.\n\t\t */\n\t\tlayout: {\n\t\t\ttype: String,\n\t\t\tdefault: 'vertical-split',\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['no-split', 'vertical-split'].includes(value)\n\t\t\t},\n\t\t},\n\t},\n\n\temits: [\n\t\t'update:showDetails',\n\t\t'resize:list',\n\t],\n\n\tsetup() {\n\t\treturn {\n\t\t\tisMobile: useIsMobile(),\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tcontentHeight: 0,\n\t\t\thasList: false,\n\t\t\thasContent: false,\n\t\t\tswiping: {},\n\t\t\tlistPaneSize: this.restorePaneConfig(),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tpaneConfigID() {\n\t\t\t// If provided, let's use it\n\t\t\tif (this.paneConfigKey !== '') {\n\t\t\t\treturn `pane-list-size-${this.paneConfigKey}`\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\t// Using the webpack-vue-config, appName is a global variable\n\t\t\t\t// This will throw a ReferenceError when the global variable is missing\n\t\t\t\t// In that case either you provide paneConfigKey or else it fallback\n\t\t\t\t// to a global storage key\n\t\t\t\treturn `pane-list-size-${appName}`\n\t\t\t} catch (e) {\n\t\t\t\tconsole.info('[INFO] AppContent:', 'falling back to global nextcloud pane config')\n\t\t\t\treturn 'pane-list-size-nextcloud'\n\t\t\t}\n\t\t},\n\n\t\tdetailsPaneSize() {\n\t\t\tif (this.listPaneSize) {\n\t\t\t\treturn 100 - this.listPaneSize\n\t\t\t}\n\t\t\treturn this.paneDefaults.details.size\n\t\t},\n\n\t\tpaneDefaults() {\n\t\t\treturn {\n\t\t\t\tlist: {\n\t\t\t\t\tsize: this.listSize,\n\t\t\t\t\tmin: this.listMinWidth,\n\t\t\t\t\tmax: this.listMaxWidth,\n\t\t\t\t},\n\n\t\t\t\t// set the inverse values of the details column\n\t\t\t\t// based on the provided (or default) values of the list column\n\t\t\t\tdetails: {\n\t\t\t\t\tsize: 100 - this.listSize,\n\t\t\t\t\tmin: 100 - this.listMaxWidth,\n\t\t\t\t\tmax: 100 - this.listMinWidth,\n\t\t\t\t},\n\t\t\t}\n\t\t},\n\t},\n\n\tupdated() {\n\t\tthis.checkSlots()\n\t},\n\n\tmounted() {\n\t\tif (this.allowSwipeNavigation) {\n\t\t\tthis.swiping = useSwipe(this.$el, {\n\t\t\t\tonSwipeEnd: this.handleSwipe,\n\t\t\t})\n\t\t}\n\n\t\tthis.checkSlots()\n\t\tthis.restorePaneConfig()\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * handle the swipe event\n\t\t *\n\t\t * @param {TouchEvent} e The touch event\n\t\t * @param {import('@vueuse/core').SwipeDirection} direction The swipe direction of the event\n\t\t */\n\t\thandleSwipe(e, direction) {\n\t\t\tconst minSwipeX = 70\n\t\t\tconst touchZone = 300\n\t\t\tif (Math.abs(this.swiping.lengthX) > minSwipeX) {\n\t\t\t\tif (this.swiping.coordsStart.x < (touchZone / 2) && direction === 'right') {\n\t\t\t\t\temit('toggle-navigation', {\n\t\t\t\t\t\topen: true,\n\t\t\t\t\t})\n\t\t\t\t} else if (this.swiping.coordsStart.x < touchZone * 1.5 && direction === 'left') {\n\t\t\t\t\temit('toggle-navigation', {\n\t\t\t\t\t\topen: false,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\thandlePaneResize(event) {\n\t\t\tconst listPaneSize = parseInt(event[0].size, 10)\n\t\t\tbrowserStorage.setItem(this.paneConfigID, JSON.stringify(listPaneSize))\n\t\t\tthis.listPaneSize = listPaneSize\n\t\t\t/**\n\t\t\t * Emitted when the list pane is resized by the user\n\t\t\t */\n\t\t\tthis.$emit('resize:list', { size: listPaneSize })\n\t\t\tconsole.debug('AppContent pane config', listPaneSize)\n\t\t},\n\n\t\t// $slots is not reactive, we need to update this manually\n\t\tcheckSlots() {\n\t\t\tthis.hasList = !!this.$scopedSlots.list\n\t\t\tthis.hasContent = !!this.$scopedSlots.default\n\t\t},\n\n\t\t// browserStorage is not reactive, we need to update this manually\n\t\trestorePaneConfig() {\n\t\t\tconst listPaneSize = parseInt(browserStorage.getItem(this.paneConfigID), 10)\n\t\t\tif (!isNaN(listPaneSize) && listPaneSize !== this.listPaneSize) {\n\t\t\t\tconsole.debug('AppContent pane config', listPaneSize)\n\t\t\t\tthis.listPaneSize = listPaneSize\n\t\t\t\treturn listPaneSize\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * The user clicked the back arrow from the details view\n\t\t */\n\t\thideDetails() {\n\t\t\tthis.$emit('update:showDetails', false)\n\t\t},\n\t},\n}\n</script>\n<style lang=\"scss\" scoped>\n\n.app-content {\n\tposition: initial;\n\tz-index: 1000;\n\tflex-basis: 100vw;\n\theight: 100%;\n\t// Overriding server styles TODO: cleanup!\n\tmargin: 0 !important;\n\tbackground-color: var(--color-main-background);\n\tmin-width: 0;\n\n\t&:not(.app-content--has-list) {\n\t\toverflow: auto;\n\t}\n}\n\n.app-content-wrapper {\n\tposition: relative;\n\twidth: 100%;\n\theight: 100%;\n}\n\n// Mobile list/details handling\n.app-content-wrapper--no-split {\n\t&.app-content-wrapper--show-list :deep() {\n\t\t.app-content-list {\n\t\t\tdisplay: flex;\n\t\t}\n\t\t.app-content-details {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\t&.app-content-wrapper--show-details :deep() {\n\t\t.app-content-list {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.app-content-details {\n\t\t\tdisplay: block;\n\t\t}\n\t}\n}\n\n:deep(.splitpanes.default-theme) {\n\t.app-content-list {\n\t\tmax-width: none;\n\t\t/* Thin scrollbar is hard to catch on resizable columns */\n\t\tscrollbar-width: auto;\n\t}\n\n\t.splitpanes__pane {\n\t\tbackground-color: transparent;\n\t\ttransition: none;\n\n\t\t&-list {\n\t\t\tmin-width: 300px;\n\t\t\tposition: sticky;\n\t\t\ttop: var(--header-height);\n\n\t\t\t@media only screen and (width < $breakpoint-mobile) {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\n\t\t&-details {\n\t\t\toverflow-y: auto;\n\n\t\t\t@media only screen and (width < $breakpoint-mobile) {\n\t\t\t\tmin-width: 100%;\n\t\t\t}\n\t\t}\n\t}\n\n\t.splitpanes__splitter {\n\t\twidth: 9px;\n\t\tmargin-left: -5px;\n\t\tbackground-color: transparent;\n\t\tborder-left: none;\n\n\t\t&:before,\n\t\t&:after {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n\n.app-content-wrapper--show-list {\n\t:deep(.app-content-list) {\n\t\tmax-width: none;\n\t}\n}\n</style>\n"],"names":["_sfc_main","Tooltip","NcButton","ArrowRight","useIsMobile","t","hide","appNavigationToggle","emit","browserStorage","getBuilder","NcAppDetailsToggle","Pane","Splitpanes","value","useSwipe","e","direction","event","listPaneSize"],"mappings":"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"}
@@ -1,20 +1,22 @@
1
- import '../assets/NcAppNavigation-D2eVie5R.css';
1
+ import '../assets/NcAppNavigation-BgGJuJPv.css';
2
2
  import { useIsMobile as n } from "../Composables/useIsMobile.mjs";
3
3
  import { g as s } from "./focusTrap-Be9GEB5C.mjs";
4
4
  import { subscribe as p, emit as o, unsubscribe as r } from "@nextcloud/event-bus";
5
5
  import { createFocusTrap as l } from "focus-trap";
6
- import { N as g } from "./NcAppNavigationToggle-BZxbkhCr.mjs";
7
- import c from "vue";
8
- import { n as u } from "./_plugin-vue2_normalizer-Bj5bLKV4.mjs";
9
- const d = {
6
+ import { N as g } from "./NcAppNavigationToggle-n8ES2H5d.mjs";
7
+ import c from "../Components/NcAppNavigationList.mjs";
8
+ import u from "vue";
9
+ import { n as d } from "./_plugin-vue2_normalizer-Bj5bLKV4.mjs";
10
+ const v = {
10
11
  name: "NcAppNavigation",
11
12
  components: {
13
+ NcAppNavigationList: c,
12
14
  NcAppNavigationToggle: g
13
15
  },
14
16
  // Injected from NcContent
15
17
  inject: {
16
18
  setHasAppNavigation: {
17
- default: () => () => c.util.warn("NcAppNavigation is not mounted inside NcContent, this is probably an error."),
19
+ default: () => () => u.util.warn("NcAppNavigation is not mounted inside NcContent, this is probably an error."),
18
20
  from: "NcContent:setHasAppNavigation"
19
21
  }
20
22
  },
@@ -72,23 +74,23 @@ const d = {
72
74
  *
73
75
  * @param {boolean} [state] set the state instead of inverting the current one
74
76
  */
75
- toggleNavigation(a) {
76
- if (this.open === a) {
77
+ toggleNavigation(i) {
78
+ if (this.open === i) {
77
79
  o("navigation-toggled", {
78
80
  open: this.open
79
81
  });
80
82
  return;
81
83
  }
82
- this.open = typeof a > "u" ? !this.open : a;
83
- const t = getComputedStyle(document.body), e = parseInt(t.getPropertyValue("--animation-quick")) || 100;
84
+ this.open = typeof i > "u" ? !this.open : i;
85
+ const t = getComputedStyle(document.body), a = parseInt(t.getPropertyValue("--animation-quick")) || 100;
84
86
  setTimeout(() => {
85
87
  o("navigation-toggled", {
86
88
  open: this.open
87
89
  });
88
- }, 1.5 * e);
90
+ }, 1.5 * a);
89
91
  },
90
- toggleNavigationByEventBus({ open: a }) {
91
- this.toggleNavigation(a);
92
+ toggleNavigationByEventBus({ open: i }) {
93
+ this.toggleNavigation(i);
92
94
  },
93
95
  /**
94
96
  * Activate focus trap if it is currently needed, otherwise deactivate
@@ -102,21 +104,21 @@ const d = {
102
104
  }
103
105
  };
104
106
  var f = function() {
105
- var t = this, e = t._self._c;
106
- return e("div", { ref: "appNavigationContainer", staticClass: "app-navigation", class: { "app-navigation--close": !t.open } }, [e("nav", { staticClass: "app-navigation__content", attrs: { id: "app-navigation-vue", "aria-hidden": t.open ? "false" : "true", "aria-label": t.ariaLabel || void 0, "aria-labelledby": t.ariaLabelledby || void 0, inert: !t.open || void 0 }, on: { keydown: function(i) {
107
- return !i.type.indexOf("key") && t._k(i.keyCode, "esc", 27, i.key, ["Esc", "Escape"]) ? null : t.handleEsc.apply(null, arguments);
108
- } } }, [t._t("default"), t.$scopedSlots.list ? e("ul", { staticClass: "app-navigation__list" }, [t._t("list")], 2) : t._e(), t._t("footer")], 2), e("NcAppNavigationToggle", { attrs: { open: t.open }, on: { "update:open": t.toggleNavigation } })], 1);
109
- }, v = [], h = /* @__PURE__ */ u(
110
- d,
111
- f,
107
+ var t = this, a = t._self._c;
108
+ return a("div", { ref: "appNavigationContainer", staticClass: "app-navigation", class: { "app-navigation--close": !t.open } }, [a("nav", { staticClass: "app-navigation__content", attrs: { id: "app-navigation-vue", "aria-hidden": t.open ? "false" : "true", "aria-label": t.ariaLabel || void 0, "aria-labelledby": t.ariaLabelledby || void 0, inert: !t.open || void 0 }, on: { keydown: function(e) {
109
+ return !e.type.indexOf("key") && t._k(e.keyCode, "esc", 27, e.key, ["Esc", "Escape"]) ? null : t.handleEsc.apply(null, arguments);
110
+ } } }, [a("div", { staticClass: "app-navigation__body", class: { "app-navigation__body--no-list": !t.$scopedSlots.list } }, [t._t("default")], 2), t.$scopedSlots.list ? a("NcAppNavigationList", { staticClass: "app-navigation__list" }, [t._t("list")], 2) : t._e(), t._t("footer")], 2), a("NcAppNavigationToggle", { attrs: { open: t.open }, on: { "update:open": t.toggleNavigation } })], 1);
111
+ }, h = [], m = /* @__PURE__ */ d(
112
112
  v,
113
+ f,
114
+ h,
113
115
  !1,
114
116
  null,
115
- "bddd2251",
117
+ "e7c1d2d1",
116
118
  null,
117
119
  null
118
120
  );
119
- const k = h.exports;
121
+ const S = m.exports;
120
122
  export {
121
- k as N
123
+ S as N
122
124
  };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NcAppNavigation-Dl1g_orJ.mjs","sources":["../../src/components/NcAppNavigation/NcAppNavigation.vue"],"sourcesContent":["<!--\n - @copyright Copyright (c) 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author Christoph Wurst <christoph@winzerhof-wurst.at>\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n - @author Marco Ambrosini <marcoambrosini@icloud.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<docs>\nThe navigation bar can be open and closed from anywhere in the app using the\nnextcloud event bus.\n\n### Install the event bus package\n\n```bash\nnpm i -S @nextcloud/event-bus\n```\n\n### Usage\n\n#### Open the navigation\n\n```js static\nimport { emit } from '@nextcloud/event-bus'\nemit('toggle-navigation', {\n\topen: true,\n})\n```\n\n#### Close the navigation\n\n```js static\nimport { emit } from '@nextcloud/event-bus'\nemit('toggle-navigation', {\n\topen: false,\n})\n```\n\n</docs>\n\n<template>\n\t<div ref=\"appNavigationContainer\"\n\t\tclass=\"app-navigation\"\n\t\t:class=\"{'app-navigation--close':!open }\">\n\t\t<nav id=\"app-navigation-vue\"\n\t\t\t:aria-hidden=\"open ? 'false' : 'true'\"\n\t\t\t:aria-label=\"ariaLabel || undefined\"\n\t\t\t:aria-labelledby=\"ariaLabelledby || undefined\"\n\t\t\tclass=\"app-navigation__content\"\n\t\t\t:inert=\"!open || undefined\"\n\t\t\t@keydown.esc=\"handleEsc\">\n\t\t\t<div class=\"app-navigation__body\" :class=\"{ 'app-navigation__body--no-list': !$scopedSlots.list }\">\n\t\t\t\t<!-- The main content of the navigation. If no list is passed to the #list slot, stretched vertically. -->\n\t\t\t\t<slot />\n\t\t\t</div>\n\n\t\t\t<NcAppNavigationList v-if=\"$scopedSlots.list\" class=\"app-navigation__list\">\n\t\t\t\t<!-- List for Navigation list items. Stretched between the main content and the footer -->\n\t\t\t\t<slot name=\"list\" />\n\t\t\t</NcAppNavigationList>\n\n\t\t\t<!-- Footer for e.g. NcAppNavigationSettings -->\n\t\t\t<slot name=\"footer\" />\n\t\t</nav>\n\t\t<NcAppNavigationToggle :open=\"open\" @update:open=\"toggleNavigation\" />\n\t</div>\n</template>\n\n<script>\nimport { useIsMobile } from '../../composables/useIsMobile/index.js'\nimport { getTrapStack } from '../../utils/focusTrap.js'\nimport { emit, subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport { createFocusTrap } from 'focus-trap'\n\nimport NcAppNavigationToggle from '../NcAppNavigationToggle/index.js'\nimport NcAppNavigationList from '../NcAppNavigationList/index.js'\nimport Vue from 'vue'\n\nexport default {\n\tname: 'NcAppNavigation',\n\n\tcomponents: {\n\t\tNcAppNavigationList,\n\t\tNcAppNavigationToggle,\n\t},\n\n\t// Injected from NcContent\n\tinject: {\n\t\tsetHasAppNavigation: {\n\t\t\tdefault: () => () => Vue.util.warn('NcAppNavigation is not mounted inside NcContent, this is probably an error.'),\n\t\t\tfrom: 'NcContent:setHasAppNavigation',\n\t\t},\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * The aria label to describe the navigation\n\t\t */\n\t\tariaLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * aria-labelledby attribute to describe the navigation\n\t\t */\n\t\tariaLabelledby: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\n\tsetup() {\n\t\treturn {\n\t\t\tisMobile: useIsMobile(),\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\topen: !this.isMobile,\n\t\t\tfocusTrap: null,\n\t\t}\n\t},\n\n\twatch: {\n\t\tisMobile() {\n\t\t\tthis.open = !this.isMobile\n\t\t\tthis.toggleFocusTrap()\n\t\t},\n\t\topen() {\n\t\t\tthis.toggleFocusTrap()\n\t\t},\n\t},\n\n\tmounted() {\n\t\tthis.setHasAppNavigation(true)\n\t\tsubscribe('toggle-navigation', this.toggleNavigationByEventBus)\n\t\t// Emit an event with the initial state of the navigation\n\t\temit('navigation-toggled', {\n\t\t\topen: this.open,\n\t\t})\n\n\t\tthis.focusTrap = createFocusTrap(this.$refs.appNavigationContainer, {\n\t\t\tallowOutsideClick: true,\n\t\t\tfallbackFocus: this.$refs.appNavigationContainer,\n\t\t\ttrapStack: getTrapStack(),\n\t\t\tescapeDeactivates: false,\n\t\t})\n\t\tthis.toggleFocusTrap()\n\t},\n\tunmounted() {\n\t\tthis.setHasAppNavigation(false)\n\t\tunsubscribe('toggle-navigation', this.toggleNavigationByEventBus)\n\t\tthis.focusTrap.deactivate()\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Toggle the navigation\n\t\t *\n\t\t * @param {boolean} [state] set the state instead of inverting the current one\n\t\t */\n\t\ttoggleNavigation(state) {\n\t\t\t// Early return if alreay in that state\n\t\t\tif (this.open === state) {\n\t\t\t\temit('navigation-toggled', {\n\t\t\t\t\topen: this.open,\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.open = (typeof state === 'undefined') ? !this.open : state\n\t\t\tconst bodyStyles = getComputedStyle(document.body)\n\t\t\tconst animationLength = parseInt(bodyStyles.getPropertyValue('--animation-quick')) || 100\n\n\t\t\tsetTimeout(() => {\n\t\t\t\temit('navigation-toggled', {\n\t\t\t\t\topen: this.open,\n\t\t\t\t})\n\t\t\t// We wait for 1.5 times the animation length to give the animation time to really finish.\n\t\t\t}, 1.5 * animationLength)\n\t\t},\n\n\t\ttoggleNavigationByEventBus({ open }) {\n\t\t\tthis.toggleNavigation(open)\n\t\t},\n\n\t\t/**\n\t\t * Activate focus trap if it is currently needed, otherwise deactivate\n\t\t */\n\t\ttoggleFocusTrap() {\n\t\t\tif (this.isMobile && this.open) {\n\t\t\t\tthis.focusTrap.activate()\n\t\t\t} else {\n\t\t\t\tthis.focusTrap.deactivate()\n\t\t\t}\n\t\t},\n\n\t\thandleEsc() {\n\t\t\tif (this.isMobile) {\n\t\t\t\tthis.toggleNavigation(false)\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\">\n.app-navigation,\n.app-content {\n\t/** Distance of the app naviation toggle and the first navigation item to the top edge of the app content container */\n\t--app-navigation-padding: #{$app-navigation-padding};\n}\n</style>\n\n<style lang=\"scss\" scoped>\n.app-navigation {\n\t// Set scoped variable override\n\t// Using --color-text-maxcontrast as a fallback evaluates to an invalid value as it references itself in this scope instead of the variable defined higher up\n\t--color-text-maxcontrast: var(--color-text-maxcontrast-background-blur, var(--color-text-maxcontrast-default));\n\ttransition: transform var(--animation-quick), margin var(--animation-quick);\n\twidth: $navigation-width;\n\t// Left toggle button padding + toggle button + right padding from NcAppContent\n\tmax-width: calc(100vw - (var(--app-navigation-padding) + var(--default-clickable-area) + var(--default-grid-baseline)));\n\tposition: relative;\n\ttop: 0;\n\tleft: 0;\n\tpadding: 0px;\n\t// Above appcontent\n\tz-index: 1800;\n\theight: 100%;\n\tbox-sizing: border-box;\n\t-webkit-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n\tflex-grow: 0;\n\tflex-shrink: 0;\n\tbackground-color: var(--color-main-background-blur, var(--color-main-background));\n\t-webkit-backdrop-filter: var(--filter-background-blur, none);\n\tbackdrop-filter: var(--filter-background-blur, none);\n\n\t&--close {\n\t\ttransform: translateX(-100%);\n\t\tposition: absolute;\n\t}\n\n\t// For legacy purposes support passing a bare list to the content in #default slot and including #footer slot\n\t// Same styles as NcAppNavigationList\n\t&__content > ul {\n\t\tposition: relative;\n\t\twidth: 100%;\n\t\toverflow-x: hidden;\n\t\toverflow-y: auto;\n\t\tbox-sizing: border-box;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: var(--default-grid-baseline, 4px);\n\t\tpadding: var(--app-navigation-padding);\n\t}\n\n\t// Always stretch the navigation list\n\t& &__list {\n\t\theight: 100%;\n\t}\n\n\t// Stretch the main content if there is no stretched list\n\t&__body--no-list {\n\t\tflex: 1 1 auto;\n\t\toverflow: auto;\n\t\theight: 100%;\n\t}\n\n\t&__content {\n\t\theight: 100%;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t}\n}\n\n// add extra border for high contrast mode\n[data-themes*='highcontrast'] {\n\t.app-navigation {\n\t\tborder-right: 1px solid var(--color-border);\n\t}\n}\n\n// When on mobile, we make the navigation slide over the appcontent\n@media only screen and (max-width: $breakpoint-mobile) {\n\t.app-navigation:not(.app-navigation--close) {\n\t\tposition: absolute;\n\t}\n}\n</style>\n"],"names":["_sfc_main","NcAppNavigationList","NcAppNavigationToggle","Vue","useIsMobile","subscribe","emit","createFocusTrap","getTrapStack","unsubscribe","state","bodyStyles","animationLength","open"],"mappings":";;;;;;;;AA6FA,MAAAA,IAAA;AAAA,EACA,MAAA;AAAA,EAEA,YAAA;AAAA,IACA,qBAAAC;AAAA,IACA,uBAAAC;AAAA,EACA;AAAA;AAAA,EAGA,QAAA;AAAA,IACA,qBAAA;AAAA,MACA,SAAA,MAAA,MAAAC,EAAA,KAAA,KAAA,6EAAA;AAAA,MACA,MAAA;AAAA,IACA;AAAA,EACA;AAAA,EAEA,OAAA;AAAA;AAAA;AAAA;AAAA,IAIA,WAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IAKA,gBAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA,EACA;AAAA,EAEA,QAAA;AACA,WAAA;AAAA,MACA,UAAAC,EAAA;AAAA,IACA;AAAA,EACA;AAAA,EAEA,OAAA;AACA,WAAA;AAAA,MACA,MAAA,CAAA,KAAA;AAAA,MACA,WAAA;AAAA,IACA;AAAA,EACA;AAAA,EAEA,OAAA;AAAA,IACA,WAAA;AACA,WAAA,OAAA,CAAA,KAAA,UACA,KAAA,gBAAA;AAAA,IACA;AAAA,IACA,OAAA;AACA,WAAA,gBAAA;AAAA,IACA;AAAA,EACA;AAAA,EAEA,UAAA;AACA,SAAA,oBAAA,EAAA,GACAC,EAAA,qBAAA,KAAA,0BAAA,GAEAC,EAAA,sBAAA;AAAA,MACA,MAAA,KAAA;AAAA,IACA,CAAA,GAEA,KAAA,YAAAC,EAAA,KAAA,MAAA,wBAAA;AAAA,MACA,mBAAA;AAAA,MACA,eAAA,KAAA,MAAA;AAAA,MACA,WAAAC,EAAA;AAAA,MACA,mBAAA;AAAA,IACA,CAAA,GACA,KAAA,gBAAA;AAAA,EACA;AAAA,EACA,YAAA;AACA,SAAA,oBAAA,EAAA,GACAC,EAAA,qBAAA,KAAA,0BAAA,GACA,KAAA,UAAA,WAAA;AAAA,EACA;AAAA,EAEA,SAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,iBAAAC,GAAA;AAEA,UAAA,KAAA,SAAAA,GAAA;AACA,QAAAJ,EAAA,sBAAA;AAAA,UACA,MAAA,KAAA;AAAA,QACA,CAAA;AACA;AAAA,MACA;AAEA,WAAA,OAAA,OAAAI,IAAA,MAAA,CAAA,KAAA,OAAAA;AACA,YAAAC,IAAA,iBAAA,SAAA,IAAA,GACAC,IAAA,SAAAD,EAAA,iBAAA,mBAAA,CAAA,KAAA;AAEA,iBAAA,MAAA;AACA,QAAAL,EAAA,sBAAA;AAAA,UACA,MAAA,KAAA;AAAA,QACA,CAAA;AAAA,MAEA,GAAA,MAAAM,CAAA;AAAA,IACA;AAAA,IAEA,2BAAA,EAAA,MAAAC,KAAA;AACA,WAAA,iBAAAA,CAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IAKA,kBAAA;AACA,MAAA,KAAA,YAAA,KAAA,OACA,KAAA,UAAA,SAAA,IAEA,KAAA,UAAA,WAAA;AAAA,IAEA;AAAA,IAEA,YAAA;AACA,MAAA,KAAA,YACA,KAAA,iBAAA,EAAA;AAAA,IAEA;AAAA,EACA;AACA;;;;;;;;;;;;;;;;;"}