@nextcloud/vue 8.4.0 → 8.5.1

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 (648) hide show
  1. package/CHANGELOG.md +70 -0
  2. package/dist/Components/NcActionButton.cjs +85 -23
  3. package/dist/Components/NcActionButton.cjs.map +1 -1
  4. package/dist/Components/NcActionButton.mjs +88 -24
  5. package/dist/Components/NcActionButton.mjs.map +1 -1
  6. package/dist/Components/NcActionButtonGroup.cjs +3 -45
  7. package/dist/Components/NcActionButtonGroup.cjs.map +1 -1
  8. package/dist/Components/NcActionButtonGroup.mjs +2 -48
  9. package/dist/Components/NcActionButtonGroup.mjs.map +1 -1
  10. package/dist/Components/NcActionCaption.cjs +8 -9
  11. package/dist/Components/NcActionCaption.cjs.map +1 -1
  12. package/dist/Components/NcActionCaption.mjs +8 -8
  13. package/dist/Components/NcActionCheckbox.cjs +4 -5
  14. package/dist/Components/NcActionCheckbox.cjs.map +1 -1
  15. package/dist/Components/NcActionCheckbox.mjs +13 -13
  16. package/dist/Components/NcActionInput.cjs +3 -234
  17. package/dist/Components/NcActionInput.cjs.map +1 -1
  18. package/dist/Components/NcActionInput.mjs +2 -242
  19. package/dist/Components/NcActionInput.mjs.map +1 -1
  20. package/dist/Components/NcActionLink.cjs +2 -3
  21. package/dist/Components/NcActionLink.cjs.map +1 -1
  22. package/dist/Components/NcActionLink.mjs +3 -3
  23. package/dist/Components/NcActionRadio.cjs +12 -13
  24. package/dist/Components/NcActionRadio.cjs.map +1 -1
  25. package/dist/Components/NcActionRadio.mjs +11 -11
  26. package/dist/Components/NcActionRouter.cjs +5 -6
  27. package/dist/Components/NcActionRouter.cjs.map +1 -1
  28. package/dist/Components/NcActionRouter.mjs +6 -6
  29. package/dist/Components/NcActionSeparator.cjs +6 -7
  30. package/dist/Components/NcActionSeparator.cjs.map +1 -1
  31. package/dist/Components/NcActionSeparator.mjs +9 -9
  32. package/dist/Components/NcActionText.cjs +7 -8
  33. package/dist/Components/NcActionText.cjs.map +1 -1
  34. package/dist/Components/NcActionText.mjs +10 -10
  35. package/dist/Components/NcActionTextEditable.cjs +4 -5
  36. package/dist/Components/NcActionTextEditable.cjs.map +1 -1
  37. package/dist/Components/NcActionTextEditable.mjs +5 -5
  38. package/dist/Components/NcActions.cjs +3 -483
  39. package/dist/Components/NcActions.cjs.map +1 -1
  40. package/dist/Components/NcActions.mjs +2 -489
  41. package/dist/Components/NcActions.mjs.map +1 -1
  42. package/dist/Components/NcAppContent.cjs +3 -222
  43. package/dist/Components/NcAppContent.cjs.map +1 -1
  44. package/dist/Components/NcAppContent.mjs +2 -230
  45. package/dist/Components/NcAppContent.mjs.map +1 -1
  46. package/dist/Components/NcAppContentDetails.cjs +1 -1
  47. package/dist/Components/NcAppContentDetails.mjs +1 -1
  48. package/dist/Components/NcAppContentList.cjs +1 -1
  49. package/dist/Components/NcAppContentList.mjs +1 -1
  50. package/dist/Components/NcAppNavigation.cjs +3 -101
  51. package/dist/Components/NcAppNavigation.cjs.map +1 -1
  52. package/dist/Components/NcAppNavigation.mjs +2 -106
  53. package/dist/Components/NcAppNavigation.mjs.map +1 -1
  54. package/dist/Components/NcAppNavigationCaption.cjs +3 -44
  55. package/dist/Components/NcAppNavigationCaption.cjs.map +1 -1
  56. package/dist/Components/NcAppNavigationCaption.mjs +2 -45
  57. package/dist/Components/NcAppNavigationCaption.mjs.map +1 -1
  58. package/dist/Components/NcAppNavigationIconBullet.cjs +5 -6
  59. package/dist/Components/NcAppNavigationIconBullet.cjs.map +1 -1
  60. package/dist/Components/NcAppNavigationIconBullet.mjs +8 -8
  61. package/dist/Components/NcAppNavigationItem.cjs +3 -498
  62. package/dist/Components/NcAppNavigationItem.cjs.map +1 -1
  63. package/dist/Components/NcAppNavigationItem.mjs +2 -508
  64. package/dist/Components/NcAppNavigationItem.mjs.map +1 -1
  65. package/dist/Components/NcAppNavigationNew.cjs +14 -15
  66. package/dist/Components/NcAppNavigationNew.cjs.map +1 -1
  67. package/dist/Components/NcAppNavigationNew.mjs +6 -6
  68. package/dist/Components/NcAppNavigationNewItem.cjs +3 -87
  69. package/dist/Components/NcAppNavigationNewItem.cjs.map +1 -1
  70. package/dist/Components/NcAppNavigationNewItem.mjs +2 -89
  71. package/dist/Components/NcAppNavigationNewItem.mjs.map +1 -1
  72. package/dist/Components/NcAppNavigationSettings.cjs +3 -102
  73. package/dist/Components/NcAppNavigationSettings.cjs.map +1 -1
  74. package/dist/Components/NcAppNavigationSettings.mjs +2 -103
  75. package/dist/Components/NcAppNavigationSettings.mjs.map +1 -1
  76. package/dist/Components/NcAppNavigationSpacer.cjs +10 -11
  77. package/dist/Components/NcAppNavigationSpacer.cjs.map +1 -1
  78. package/dist/Components/NcAppNavigationSpacer.mjs +10 -10
  79. package/dist/Components/NcAppNavigationToggle.cjs +1 -1
  80. package/dist/Components/NcAppNavigationToggle.mjs +1 -1
  81. package/dist/Components/NcAppSettingsDialog.cjs +3 -182
  82. package/dist/Components/NcAppSettingsDialog.cjs.map +1 -1
  83. package/dist/Components/NcAppSettingsDialog.mjs +2 -188
  84. package/dist/Components/NcAppSettingsDialog.mjs.map +1 -1
  85. package/dist/Components/NcAppSettingsSection.cjs +7 -11
  86. package/dist/Components/NcAppSettingsSection.cjs.map +1 -1
  87. package/dist/Components/NcAppSettingsSection.mjs +7 -10
  88. package/dist/Components/NcAppSettingsSection.mjs.map +1 -1
  89. package/dist/Components/NcAppSidebar.cjs +3 -552
  90. package/dist/Components/NcAppSidebar.cjs.map +1 -1
  91. package/dist/Components/NcAppSidebar.mjs +2 -567
  92. package/dist/Components/NcAppSidebar.mjs.map +1 -1
  93. package/dist/Components/NcAppSidebarTab.cjs +5 -7
  94. package/dist/Components/NcAppSidebarTab.cjs.map +1 -1
  95. package/dist/Components/NcAppSidebarTab.mjs +3 -4
  96. package/dist/Components/NcAppSidebarTab.mjs.map +1 -1
  97. package/dist/Components/NcAvatar.cjs +2 -2
  98. package/dist/Components/NcAvatar.mjs +1 -1
  99. package/dist/Components/NcBreadcrumb.cjs +3 -176
  100. package/dist/Components/NcBreadcrumb.cjs.map +1 -1
  101. package/dist/Components/NcBreadcrumb.mjs +2 -179
  102. package/dist/Components/NcBreadcrumb.mjs.map +1 -1
  103. package/dist/Components/NcBreadcrumbs.cjs +3 -411
  104. package/dist/Components/NcBreadcrumbs.cjs.map +1 -1
  105. package/dist/Components/NcBreadcrumbs.mjs +2 -420
  106. package/dist/Components/NcBreadcrumbs.mjs.map +1 -1
  107. package/dist/Components/NcButton.cjs +42 -30
  108. package/dist/Components/NcButton.cjs.map +1 -1
  109. package/dist/Components/NcButton.mjs +43 -30
  110. package/dist/Components/NcButton.mjs.map +1 -1
  111. package/dist/Components/NcCheckboxRadioSwitch.cjs +3 -600
  112. package/dist/Components/NcCheckboxRadioSwitch.cjs.map +1 -1
  113. package/dist/Components/NcCheckboxRadioSwitch.mjs +2 -604
  114. package/dist/Components/NcCheckboxRadioSwitch.mjs.map +1 -1
  115. package/dist/Components/NcColorPicker.cjs +3 -158
  116. package/dist/Components/NcColorPicker.cjs.map +1 -1
  117. package/dist/Components/NcColorPicker.mjs +2 -167
  118. package/dist/Components/NcColorPicker.mjs.map +1 -1
  119. package/dist/Components/NcContent.cjs +3 -25
  120. package/dist/Components/NcContent.cjs.map +1 -1
  121. package/dist/Components/NcContent.mjs +2 -25
  122. package/dist/Components/NcContent.mjs.map +1 -1
  123. package/dist/Components/NcCounterBubble.cjs +4 -5
  124. package/dist/Components/NcCounterBubble.cjs.map +1 -1
  125. package/dist/Components/NcCounterBubble.mjs +4 -4
  126. package/dist/Components/NcDashboardWidget.cjs +3 -134
  127. package/dist/Components/NcDashboardWidget.cjs.map +1 -1
  128. package/dist/Components/NcDashboardWidget.mjs +2 -139
  129. package/dist/Components/NcDashboardWidget.mjs.map +1 -1
  130. package/dist/Components/NcDashboardWidgetItem.cjs +3 -138
  131. package/dist/Components/NcDashboardWidgetItem.cjs.map +1 -1
  132. package/dist/Components/NcDashboardWidgetItem.mjs +2 -141
  133. package/dist/Components/NcDashboardWidgetItem.mjs.map +1 -1
  134. package/dist/Components/NcDateTime.cjs +2 -129
  135. package/dist/Components/NcDateTime.cjs.map +1 -1
  136. package/dist/Components/NcDateTime.mjs +2 -131
  137. package/dist/Components/NcDateTime.mjs.map +1 -1
  138. package/dist/Components/NcDateTimePicker.cjs +68 -50
  139. package/dist/Components/NcDateTimePicker.cjs.map +1 -1
  140. package/dist/Components/NcDateTimePicker.mjs +72 -53
  141. package/dist/Components/NcDateTimePicker.mjs.map +1 -1
  142. package/dist/Components/NcDateTimePickerNative.cjs +8 -9
  143. package/dist/Components/NcDateTimePickerNative.cjs.map +1 -1
  144. package/dist/Components/NcDateTimePickerNative.mjs +7 -7
  145. package/dist/Components/NcDialog.cjs +3 -172
  146. package/dist/Components/NcDialog.cjs.map +1 -1
  147. package/dist/Components/NcDialog.mjs +2 -177
  148. package/dist/Components/NcDialog.mjs.map +1 -1
  149. package/dist/Components/NcDialogButton.cjs +2 -68
  150. package/dist/Components/NcDialogButton.cjs.map +1 -1
  151. package/dist/Components/NcDialogButton.mjs +2 -72
  152. package/dist/Components/NcDialogButton.mjs.map +1 -1
  153. package/dist/Components/NcEllipsisedOption.cjs +4 -5
  154. package/dist/Components/NcEllipsisedOption.cjs.map +1 -1
  155. package/dist/Components/NcEllipsisedOption.mjs +14 -14
  156. package/dist/Components/NcEmojiPicker.cjs +3 -176
  157. package/dist/Components/NcEmojiPicker.cjs.map +1 -1
  158. package/dist/Components/NcEmojiPicker.mjs +2 -181
  159. package/dist/Components/NcEmojiPicker.mjs.map +1 -1
  160. package/dist/Components/NcEmptyContent.cjs +14 -16
  161. package/dist/Components/NcEmptyContent.cjs.map +1 -1
  162. package/dist/Components/NcEmptyContent.mjs +8 -9
  163. package/dist/Components/NcEmptyContent.mjs.map +1 -1
  164. package/dist/Components/NcGuestContent.cjs +8 -9
  165. package/dist/Components/NcGuestContent.cjs.map +1 -1
  166. package/dist/Components/NcGuestContent.mjs +7 -7
  167. package/dist/Components/NcHeaderMenu.cjs +3 -169
  168. package/dist/Components/NcHeaderMenu.cjs.map +1 -1
  169. package/dist/Components/NcHeaderMenu.mjs +2 -172
  170. package/dist/Components/NcHeaderMenu.mjs.map +1 -1
  171. package/dist/Components/NcHighlight.cjs +1 -1
  172. package/dist/Components/NcHighlight.mjs +1 -1
  173. package/dist/Components/NcIconSvgWrapper.cjs +3 -59
  174. package/dist/Components/NcIconSvgWrapper.cjs.map +1 -1
  175. package/dist/Components/NcIconSvgWrapper.mjs +2 -61
  176. package/dist/Components/NcIconSvgWrapper.mjs.map +1 -1
  177. package/dist/Components/NcInputField.cjs +10 -10
  178. package/dist/Components/NcInputField.cjs.map +1 -1
  179. package/dist/Components/NcInputField.mjs +10 -9
  180. package/dist/Components/NcInputField.mjs.map +1 -1
  181. package/dist/Components/NcListItem.cjs +3 -242
  182. package/dist/Components/NcListItem.cjs.map +1 -1
  183. package/dist/Components/NcListItem.mjs +2 -246
  184. package/dist/Components/NcListItem.mjs.map +1 -1
  185. package/dist/Components/NcListItemIcon.cjs +3 -160
  186. package/dist/Components/NcListItemIcon.cjs.map +1 -1
  187. package/dist/Components/NcListItemIcon.mjs +2 -162
  188. package/dist/Components/NcListItemIcon.mjs.map +1 -1
  189. package/dist/Components/NcLoadingIcon.cjs +9 -10
  190. package/dist/Components/NcLoadingIcon.cjs.map +1 -1
  191. package/dist/Components/NcLoadingIcon.mjs +10 -10
  192. package/dist/Components/NcModal.cjs +31 -23
  193. package/dist/Components/NcModal.cjs.map +1 -1
  194. package/dist/Components/NcModal.mjs +36 -28
  195. package/dist/Components/NcModal.mjs.map +1 -1
  196. package/dist/Components/NcNoteCard.cjs +8 -9
  197. package/dist/Components/NcNoteCard.cjs.map +1 -1
  198. package/dist/Components/NcNoteCard.mjs +8 -9
  199. package/dist/Components/NcNoteCard.mjs.map +1 -1
  200. package/dist/Components/NcPasswordField.cjs +2 -228
  201. package/dist/Components/NcPasswordField.cjs.map +1 -1
  202. package/dist/Components/NcPasswordField.mjs +2 -236
  203. package/dist/Components/NcPasswordField.mjs.map +1 -1
  204. package/dist/Components/NcPopover.cjs +3 -125
  205. package/dist/Components/NcPopover.cjs.map +1 -1
  206. package/dist/Components/NcPopover.mjs +2 -128
  207. package/dist/Components/NcPopover.mjs.map +1 -1
  208. package/dist/Components/NcProgressBar.cjs +3 -57
  209. package/dist/Components/NcProgressBar.cjs.map +1 -1
  210. package/dist/Components/NcProgressBar.mjs +2 -57
  211. package/dist/Components/NcProgressBar.mjs.map +1 -1
  212. package/dist/Components/NcRelatedResourcesPanel.cjs +3 -203
  213. package/dist/Components/NcRelatedResourcesPanel.cjs.map +1 -1
  214. package/dist/Components/NcRelatedResourcesPanel.mjs +2 -207
  215. package/dist/Components/NcRelatedResourcesPanel.mjs.map +1 -1
  216. package/dist/Components/NcRichContenteditable.cjs +5 -512
  217. package/dist/Components/NcRichContenteditable.cjs.map +1 -1
  218. package/dist/Components/NcRichContenteditable.mjs +5 -523
  219. package/dist/Components/NcRichContenteditable.mjs.map +1 -1
  220. package/dist/Components/NcRichText.cjs +1 -1
  221. package/dist/Components/NcRichText.mjs +3 -3
  222. package/dist/Components/NcSavingIndicatorIcon.cjs +2 -58
  223. package/dist/Components/NcSavingIndicatorIcon.cjs.map +1 -1
  224. package/dist/Components/NcSavingIndicatorIcon.mjs +2 -60
  225. package/dist/Components/NcSavingIndicatorIcon.mjs.map +1 -1
  226. package/dist/Components/NcSelect.cjs +3 -435
  227. package/dist/Components/NcSelect.cjs.map +1 -1
  228. package/dist/Components/NcSelect.mjs +2 -444
  229. package/dist/Components/NcSelect.mjs.map +1 -1
  230. package/dist/Components/NcSelectTags.cjs +2 -260
  231. package/dist/Components/NcSelectTags.cjs.map +1 -1
  232. package/dist/Components/NcSelectTags.mjs +2 -265
  233. package/dist/Components/NcSelectTags.mjs.map +1 -1
  234. package/dist/Components/NcSettingsInputText.cjs +3 -91
  235. package/dist/Components/NcSettingsInputText.cjs.map +1 -1
  236. package/dist/Components/NcSettingsInputText.mjs +2 -93
  237. package/dist/Components/NcSettingsInputText.mjs.map +1 -1
  238. package/dist/Components/NcSettingsSection.cjs +3 -96
  239. package/dist/Components/NcSettingsSection.cjs.map +1 -1
  240. package/dist/Components/NcSettingsSection.mjs +2 -97
  241. package/dist/Components/NcSettingsSection.mjs.map +1 -1
  242. package/dist/Components/NcSettingsSelectGroup.cjs +1 -1
  243. package/dist/Components/NcSettingsSelectGroup.mjs +1 -1
  244. package/dist/Components/NcTextArea.cjs +7 -8
  245. package/dist/Components/NcTextArea.cjs.map +1 -1
  246. package/dist/Components/NcTextArea.mjs +9 -9
  247. package/dist/Components/NcTextArea.mjs.map +1 -1
  248. package/dist/Components/NcTextField.cjs +2 -139
  249. package/dist/Components/NcTextField.cjs.map +1 -1
  250. package/dist/Components/NcTextField.mjs +2 -144
  251. package/dist/Components/NcTextField.mjs.map +1 -1
  252. package/dist/Components/NcTimezonePicker.cjs +2 -7198
  253. package/dist/Components/NcTimezonePicker.cjs.map +1 -1
  254. package/dist/Components/NcTimezonePicker.mjs +2 -7203
  255. package/dist/Components/NcTimezonePicker.mjs.map +1 -1
  256. package/dist/Components/NcUserBubble.cjs +3 -193
  257. package/dist/Components/NcUserBubble.cjs.map +1 -1
  258. package/dist/Components/NcUserBubble.mjs +2 -197
  259. package/dist/Components/NcUserBubble.mjs.map +1 -1
  260. package/dist/Components/NcUserStatusIcon.cjs +3 -0
  261. package/dist/Components/NcUserStatusIcon.cjs.map +1 -0
  262. package/dist/Components/NcUserStatusIcon.mjs +4 -0
  263. package/dist/Components/NcUserStatusIcon.mjs.map +1 -0
  264. package/dist/Components/NcVNodes.cjs +10 -11
  265. package/dist/Components/NcVNodes.cjs.map +1 -1
  266. package/dist/Components/NcVNodes.mjs +11 -12
  267. package/dist/Components/NcVNodes.mjs.map +1 -1
  268. package/dist/Directives/Linkify.cjs +4 -5
  269. package/dist/Directives/Linkify.cjs.map +1 -1
  270. package/dist/Directives/Linkify.mjs +5 -6
  271. package/dist/Directives/Linkify.mjs.map +1 -1
  272. package/dist/Directives/Tooltip.cjs +1 -1
  273. package/dist/Directives/Tooltip.mjs +3 -3
  274. package/dist/Functions/usernameToColor.cjs +2 -38
  275. package/dist/Functions/usernameToColor.cjs.map +1 -1
  276. package/dist/Functions/usernameToColor.mjs +2 -39
  277. package/dist/Functions/usernameToColor.mjs.map +1 -1
  278. package/dist/Mixins/richEditor.cjs +2 -2
  279. package/dist/Mixins/richEditor.mjs +2 -2
  280. package/dist/assets/{index-7868494b.css → NcActionButton-YVkNHN_x.css} +17 -16
  281. package/dist/assets/{index-5fa0ac5a.css → NcActionButtonGroup-oXobVIqQ.css} +14 -0
  282. package/dist/assets/{index-e0e6bab6.css → NcActionCheckbox-6Pvlr1E7.css} +1 -1
  283. package/dist/assets/{index-9020d9ca.css → NcActionInput-4zSvDkWm.css} +67 -67
  284. package/dist/assets/{index-4ba699a1.css → NcActionLink-zdzQgwtH.css} +1 -1
  285. package/dist/assets/{index-542cf50a.css → NcActionRadio-eOr9Sp-D.css} +1 -1
  286. package/dist/assets/{index-7fac55ed.css → NcActionRouter-MFTD6tYI.css} +1 -1
  287. package/dist/assets/{index-00012a4c.css → NcActionText-GJYwsw_U.css} +1 -1
  288. package/dist/assets/{index-93ad846c.css → NcActionTextEditable-JrYuWEDd.css} +1 -1
  289. package/dist/assets/{index-b0bba2fc.css → NcActions-vgT9ak04.css} +16 -11
  290. package/dist/assets/{index-4596132f.css → NcAppContent-SZz3PTd8.css} +0 -1
  291. package/dist/assets/{index-5784183b.css → NcAppNavigation-vjqOL-kR.css} +8 -8
  292. package/dist/assets/{index-fe84a063.css → NcAppNavigationCaption-l5yRGXZx.css} +6 -5
  293. package/dist/assets/{index-d8bc189c.css → NcAppNavigationItem-n-wauJE7.css} +5 -0
  294. package/dist/assets/{index-1a317434.css → NcAppNavigationNewItem-MQBvffq9.css} +5 -0
  295. package/dist/assets/{index-a9999048.css → NcAppSettingsDialog-0eOo3ERv.css} +16 -17
  296. package/dist/assets/{index-3b654875.css → NcAvatar-5H9cqcD1.css} +27 -27
  297. package/dist/assets/{index-c20f9f7e.css → NcBreadcrumb-M3hqCbqS.css} +26 -33
  298. package/dist/assets/{index-f5162bbd.css → NcBreadcrumbs-KBV0Jccv.css} +7 -8
  299. package/dist/assets/{index-f091e784.css → NcButton-4Wj3KJn8.css} +43 -43
  300. package/dist/assets/{index-7f77b8ae.css → NcCheckboxRadioSwitch-mgKotCbU.css} +52 -47
  301. package/dist/assets/{index-13720a46.css → NcColorPicker-CNX9fj56.css} +24 -24
  302. package/dist/assets/{index-a9e4fe04.css → NcContent-LWR23l9i.css} +42 -4
  303. package/dist/assets/{index-a7fc7815.css → NcDateTimePicker-amYL2HzW.css} +20 -20
  304. package/dist/assets/{index-86454928.css → NcDialog-DN-rY-55.css} +30 -19
  305. package/dist/assets/{index-2a8e4ca1.css → NcEmojiPicker-lBXbC6Jd.css} +36 -26
  306. package/dist/assets/{index-aacb7cf8.css → NcHeaderMenu-06vdn4tC.css} +17 -24
  307. package/dist/assets/NcIconSvgWrapper-arqrq5Bj.css +44 -0
  308. package/dist/assets/{index-2a1ec06b.css → NcInputField-L2Lld_iG.css} +41 -40
  309. package/dist/assets/{index-a3c23731.css → NcModal-UZh031V1.css} +64 -64
  310. package/dist/assets/{index-61b63a8f.css → NcProgressBar-w4-G5gQR.css} +19 -9
  311. package/dist/assets/{index-ab715d82.css → NcRelatedResourcesPanel-m3uf_nvH.css} +4 -4
  312. package/dist/assets/{index-dab51681.css → NcRichContenteditable-j9edXOEH.css} +26 -25
  313. package/dist/assets/{index-f9bfa317.css → NcSelect-GsLmwj9w.css} +13 -2
  314. package/dist/assets/{index-76a58945.css → NcSettingsSection-PEWm0eeL.css} +13 -13
  315. package/dist/assets/{index-97305c1f.css → NcTextArea-4rVwq6GK.css} +24 -23
  316. package/dist/assets/{index-c221fe05.css → NcUserBubble-jjzI5imn.css} +9 -9
  317. package/dist/assets/{index-57b305d3.css → NcUserStatusIcon-62u43_6P.css} +7 -10
  318. package/dist/assets/{referencePickerModal-3a127978.css → referencePickerModal-VxSowpb5.css} +84 -57
  319. package/dist/chunks/{AlertCircleOutline-7085c10f.cjs → AlertCircleOutline-VgVvRWpm.cjs} +1 -1
  320. package/dist/chunks/{AlertCircleOutline-7085c10f.cjs.map → AlertCircleOutline-VgVvRWpm.cjs.map} +1 -1
  321. package/dist/chunks/{AlertCircleOutline-b73838e0.mjs → AlertCircleOutline-lwSRucNO.mjs} +1 -1
  322. package/dist/chunks/{AlertCircleOutline-b73838e0.mjs.map → AlertCircleOutline-lwSRucNO.mjs.map} +1 -1
  323. package/dist/chunks/{ArrowLeft-2f9b9323.cjs → ArrowLeft-3KC2k3tR.cjs} +1 -1
  324. package/dist/chunks/{ArrowLeft-2f9b9323.cjs.map → ArrowLeft-3KC2k3tR.cjs.map} +1 -1
  325. package/dist/chunks/{ArrowLeft-3779ba88.mjs → ArrowLeft-buaCjhfr.mjs} +1 -1
  326. package/dist/chunks/{ArrowLeft-3779ba88.mjs.map → ArrowLeft-buaCjhfr.mjs.map} +1 -1
  327. package/dist/chunks/{ArrowRight-74a9fcb2.mjs → ArrowRight-4p6gv-9o.mjs} +1 -1
  328. package/dist/chunks/{ArrowRight-74a9fcb2.mjs.map → ArrowRight-4p6gv-9o.mjs.map} +1 -1
  329. package/dist/chunks/{ArrowRight-7315f6c1.cjs → ArrowRight-uEMed4kl.cjs} +1 -1
  330. package/dist/chunks/{ArrowRight-7315f6c1.cjs.map → ArrowRight-uEMed4kl.cjs.map} +1 -1
  331. package/dist/chunks/{Check-be8cd6af.cjs → Check-5uKO4aXx.cjs} +1 -1
  332. package/dist/chunks/{Check-be8cd6af.cjs.map → Check-5uKO4aXx.cjs.map} +1 -1
  333. package/dist/chunks/{Check-2ea0a88a.mjs → Check-FObi_cEO.mjs} +1 -1
  334. package/dist/chunks/{Check-2ea0a88a.mjs.map → Check-FObi_cEO.mjs.map} +1 -1
  335. package/dist/chunks/{ChevronDown-a72d365d.mjs → ChevronDown-TbRvziNU.mjs} +1 -1
  336. package/dist/chunks/{ChevronDown-a72d365d.mjs.map → ChevronDown-TbRvziNU.mjs.map} +1 -1
  337. package/dist/chunks/{ChevronDown-dc32e51d.cjs → ChevronDown-rdCNNu7u.cjs} +1 -1
  338. package/dist/chunks/{ChevronDown-dc32e51d.cjs.map → ChevronDown-rdCNNu7u.cjs.map} +1 -1
  339. package/dist/chunks/{ChevronRight-1a6a6cf2.mjs → ChevronRight-XOmSMmxA.mjs} +1 -1
  340. package/dist/chunks/{ChevronRight-1a6a6cf2.mjs.map → ChevronRight-XOmSMmxA.mjs.map} +1 -1
  341. package/dist/chunks/{ChevronRight-a4c1e0d3.cjs → ChevronRight-bp7fT1r7.cjs} +1 -1
  342. package/dist/chunks/{ChevronRight-a4c1e0d3.cjs.map → ChevronRight-bp7fT1r7.cjs.map} +1 -1
  343. package/dist/chunks/{Close-271f72e2.mjs → Close-5Hzp7J3v.mjs} +1 -1
  344. package/dist/chunks/{Close-271f72e2.mjs.map → Close-5Hzp7J3v.mjs.map} +1 -1
  345. package/dist/chunks/{Close-98cb6f12.cjs → Close-QFLrdRdG.cjs} +1 -1
  346. package/dist/chunks/{Close-98cb6f12.cjs.map → Close-QFLrdRdG.cjs.map} +1 -1
  347. package/dist/chunks/{DotsHorizontal-0ee7d901.mjs → DotsHorizontal-NssXDZGM.mjs} +1 -1
  348. package/dist/chunks/{DotsHorizontal-0ee7d901.mjs.map → DotsHorizontal-NssXDZGM.mjs.map} +1 -1
  349. package/dist/chunks/{DotsHorizontal-ac96129a.cjs → DotsHorizontal-dlN1WvqM.cjs} +1 -1
  350. package/dist/chunks/{DotsHorizontal-ac96129a.cjs.map → DotsHorizontal-dlN1WvqM.cjs.map} +1 -1
  351. package/dist/chunks/{GenColors-7495e6f6.cjs → GenColors-6ePwbl4k.cjs} +23 -18
  352. package/dist/chunks/GenColors-6ePwbl4k.cjs.map +1 -0
  353. package/dist/chunks/{GenColors-5c054042.mjs → GenColors-OwQiytMp.mjs} +16 -11
  354. package/dist/chunks/GenColors-OwQiytMp.mjs.map +1 -0
  355. package/dist/chunks/{GenRandomId-c214d235.cjs.map → GenRandomId-ULxaMkkr.cjs.map} +1 -1
  356. package/dist/chunks/{GenRandomId-cb9ccebe.mjs.map → GenRandomId-VodkdWbp.mjs.map} +1 -1
  357. package/dist/chunks/{Linkify-39f20c9a.mjs.map → Linkify-V7PfCeZ8.mjs.map} +1 -1
  358. package/dist/chunks/{Linkify-40cdd635.cjs.map → Linkify-f3s3nAe_.cjs.map} +1 -1
  359. package/dist/chunks/NcActionButtonGroup-qXVHIy0a.mjs +50 -0
  360. package/dist/chunks/NcActionButtonGroup-qXVHIy0a.mjs.map +1 -0
  361. package/dist/chunks/NcActionButtonGroup-wvQESxxh.cjs +45 -0
  362. package/dist/chunks/NcActionButtonGroup-wvQESxxh.cjs.map +1 -0
  363. package/dist/chunks/NcActionInput-2mvb7ZnC.cjs +234 -0
  364. package/dist/chunks/NcActionInput-2mvb7ZnC.cjs.map +1 -0
  365. package/dist/chunks/NcActionInput-Vdsm4Jt5.mjs +244 -0
  366. package/dist/chunks/NcActionInput-Vdsm4Jt5.mjs.map +1 -0
  367. package/dist/chunks/NcActions-4ml5sv6P.cjs +498 -0
  368. package/dist/chunks/NcActions-4ml5sv6P.cjs.map +1 -0
  369. package/dist/chunks/NcActions-5K-qjttC.mjs +506 -0
  370. package/dist/chunks/NcActions-5K-qjttC.mjs.map +1 -0
  371. package/dist/chunks/NcAppContent-agTfSSHS.mjs +231 -0
  372. package/dist/chunks/NcAppContent-agTfSSHS.mjs.map +1 -0
  373. package/dist/chunks/NcAppContent-kSymH_mo.cjs +221 -0
  374. package/dist/chunks/NcAppContent-kSymH_mo.cjs.map +1 -0
  375. package/dist/chunks/NcAppNavigation-biQcPFmk.mjs +122 -0
  376. package/dist/chunks/NcAppNavigation-biQcPFmk.mjs.map +1 -0
  377. package/dist/chunks/NcAppNavigation-rSC0k8c6.cjs +113 -0
  378. package/dist/chunks/NcAppNavigation-rSC0k8c6.cjs.map +1 -0
  379. package/dist/chunks/NcAppNavigationCaption-E3tdVsYJ.mjs +47 -0
  380. package/dist/chunks/NcAppNavigationCaption-E3tdVsYJ.mjs.map +1 -0
  381. package/dist/chunks/NcAppNavigationCaption-Mugp6fsR.cjs +43 -0
  382. package/dist/chunks/NcAppNavigationCaption-Mugp6fsR.cjs.map +1 -0
  383. package/dist/chunks/NcAppNavigationItem-CzK_gg7C.mjs +508 -0
  384. package/dist/chunks/NcAppNavigationItem-CzK_gg7C.mjs.map +1 -0
  385. package/dist/chunks/NcAppNavigationItem-r0MUwPP7.cjs +496 -0
  386. package/dist/chunks/NcAppNavigationItem-r0MUwPP7.cjs.map +1 -0
  387. package/dist/chunks/NcAppNavigationNewItem-IYhRBzud.cjs +86 -0
  388. package/dist/chunks/NcAppNavigationNewItem-IYhRBzud.cjs.map +1 -0
  389. package/dist/chunks/NcAppNavigationNewItem-X4Ac8vym.mjs +91 -0
  390. package/dist/chunks/NcAppNavigationNewItem-X4Ac8vym.mjs.map +1 -0
  391. package/dist/chunks/NcAppNavigationSettings-0hLCj-s5.mjs +105 -0
  392. package/dist/chunks/NcAppNavigationSettings-0hLCj-s5.mjs.map +1 -0
  393. package/dist/chunks/NcAppNavigationSettings-tvlinWey.cjs +102 -0
  394. package/dist/chunks/NcAppNavigationSettings-tvlinWey.cjs.map +1 -0
  395. package/dist/chunks/{NcAppNavigationToggle-0bc638a8.mjs → NcAppNavigationToggle-RXyDbzmn.mjs} +16 -17
  396. package/dist/chunks/{NcAppNavigationToggle-0bc638a8.mjs.map → NcAppNavigationToggle-RXyDbzmn.mjs.map} +1 -1
  397. package/dist/chunks/NcAppNavigationToggle-ZTz_EO18.cjs +109 -0
  398. package/dist/chunks/{NcAppNavigationToggle-6d192bea.cjs.map → NcAppNavigationToggle-ZTz_EO18.cjs.map} +1 -1
  399. package/dist/chunks/NcAppSettingsDialog-2tyARsR0.cjs +176 -0
  400. package/dist/chunks/NcAppSettingsDialog-2tyARsR0.cjs.map +1 -0
  401. package/dist/chunks/NcAppSettingsDialog-8HAKz-0l.mjs +184 -0
  402. package/dist/chunks/NcAppSettingsDialog-8HAKz-0l.mjs.map +1 -0
  403. package/dist/chunks/NcAppSidebar-PMmg9vsl.cjs +547 -0
  404. package/dist/chunks/NcAppSidebar-PMmg9vsl.cjs.map +1 -0
  405. package/dist/chunks/NcAppSidebar-qaRnOe4Y.mjs +565 -0
  406. package/dist/chunks/NcAppSidebar-qaRnOe4Y.mjs.map +1 -0
  407. package/dist/chunks/{index-309426ff.mjs → NcAvatar-5DJP61Ka.mjs} +73 -145
  408. package/dist/chunks/NcAvatar-5DJP61Ka.mjs.map +1 -0
  409. package/dist/chunks/{index-693e993c.cjs → NcAvatar-YQujzmop.cjs} +56 -128
  410. package/dist/chunks/NcAvatar-YQujzmop.cjs.map +1 -0
  411. package/dist/chunks/NcBreadcrumb-3Ez2uWmp.cjs +172 -0
  412. package/dist/chunks/NcBreadcrumb-3Ez2uWmp.cjs.map +1 -0
  413. package/dist/chunks/NcBreadcrumb-C2oZ_vji.mjs +179 -0
  414. package/dist/chunks/NcBreadcrumb-C2oZ_vji.mjs.map +1 -0
  415. package/dist/chunks/NcBreadcrumbs-H8ec0ouN.cjs +407 -0
  416. package/dist/chunks/NcBreadcrumbs-H8ec0ouN.cjs.map +1 -0
  417. package/dist/chunks/NcBreadcrumbs-tq1eD4Hk.mjs +418 -0
  418. package/dist/chunks/NcBreadcrumbs-tq1eD4Hk.mjs.map +1 -0
  419. package/dist/chunks/NcCheckboxRadioSwitch-BiREcGAk.mjs +607 -0
  420. package/dist/chunks/NcCheckboxRadioSwitch-BiREcGAk.mjs.map +1 -0
  421. package/dist/chunks/NcCheckboxRadioSwitch-xEweFZs1.cjs +603 -0
  422. package/dist/chunks/NcCheckboxRadioSwitch-xEweFZs1.cjs.map +1 -0
  423. package/dist/chunks/NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_2603be83_lang-MzKjkB0t.mjs +3 -0
  424. package/dist/chunks/NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_2603be83_lang-MzKjkB0t.mjs.map +1 -0
  425. package/dist/chunks/NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_2603be83_lang-hGgZcPUX.cjs +3 -0
  426. package/dist/chunks/NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_2603be83_lang-hGgZcPUX.cjs.map +1 -0
  427. package/dist/chunks/NcColorPicker-2IJNZMe-.cjs +161 -0
  428. package/dist/chunks/NcColorPicker-2IJNZMe-.cjs.map +1 -0
  429. package/dist/chunks/NcColorPicker-H0rZhQxw.mjs +172 -0
  430. package/dist/chunks/NcColorPicker-H0rZhQxw.mjs.map +1 -0
  431. package/dist/chunks/NcContent-ZgOMyq2k.cjs +123 -0
  432. package/dist/chunks/NcContent-ZgOMyq2k.cjs.map +1 -0
  433. package/dist/chunks/NcContent-lWYIO3gy.mjs +131 -0
  434. package/dist/chunks/NcContent-lWYIO3gy.mjs.map +1 -0
  435. package/dist/chunks/NcDashboardWidget-hQn58Jv6.mjs +141 -0
  436. package/dist/chunks/NcDashboardWidget-hQn58Jv6.mjs.map +1 -0
  437. package/dist/chunks/NcDashboardWidget-j44iStpo.cjs +134 -0
  438. package/dist/chunks/NcDashboardWidget-j44iStpo.cjs.map +1 -0
  439. package/dist/chunks/NcDashboardWidgetItem-Yp4ii3At.mjs +143 -0
  440. package/dist/chunks/NcDashboardWidgetItem-Yp4ii3At.mjs.map +1 -0
  441. package/dist/chunks/NcDashboardWidgetItem-f4Y_DBsU.cjs +137 -0
  442. package/dist/chunks/NcDashboardWidgetItem-f4Y_DBsU.cjs.map +1 -0
  443. package/dist/chunks/NcDateTime-1ZGz6Hwu.cjs +142 -0
  444. package/dist/chunks/NcDateTime-1ZGz6Hwu.cjs.map +1 -0
  445. package/dist/chunks/NcDateTime-sBcbqRB6.mjs +146 -0
  446. package/dist/chunks/NcDateTime-sBcbqRB6.mjs.map +1 -0
  447. package/dist/chunks/NcDialog-1Nrs9x8z.mjs +214 -0
  448. package/dist/chunks/NcDialog-1Nrs9x8z.mjs.map +1 -0
  449. package/dist/chunks/NcDialog-k6iHgTGm.cjs +206 -0
  450. package/dist/chunks/NcDialog-k6iHgTGm.cjs.map +1 -0
  451. package/dist/chunks/NcDialogButton-37xKCh_l.cjs +68 -0
  452. package/dist/chunks/NcDialogButton-37xKCh_l.cjs.map +1 -0
  453. package/dist/chunks/NcDialogButton-O4JZ53Dj.mjs +73 -0
  454. package/dist/chunks/NcDialogButton-O4JZ53Dj.mjs.map +1 -0
  455. package/dist/chunks/NcEmojiPicker--8moif3g.mjs +249 -0
  456. package/dist/chunks/NcEmojiPicker--8moif3g.mjs.map +1 -0
  457. package/dist/chunks/NcEmojiPicker-gGgrlLAJ.cjs +238 -0
  458. package/dist/chunks/NcEmojiPicker-gGgrlLAJ.cjs.map +1 -0
  459. package/dist/chunks/NcHeaderMenu-5dnFFhRA.cjs +183 -0
  460. package/dist/chunks/NcHeaderMenu-5dnFFhRA.cjs.map +1 -0
  461. package/dist/chunks/NcHeaderMenu-ePmuT5Kz.mjs +190 -0
  462. package/dist/chunks/NcHeaderMenu-ePmuT5Kz.mjs.map +1 -0
  463. package/dist/chunks/NcIconSvgWrapper-P-GkSjTH.mjs +85 -0
  464. package/dist/chunks/NcIconSvgWrapper-P-GkSjTH.mjs.map +1 -0
  465. package/dist/chunks/NcIconSvgWrapper-_lgitSfS.cjs +80 -0
  466. package/dist/chunks/NcIconSvgWrapper-_lgitSfS.cjs.map +1 -0
  467. package/dist/chunks/{NcInputConfirmCancel-a08c5cb4.mjs → NcInputConfirmCancel-HrSwS4LK.mjs} +12 -12
  468. package/dist/chunks/{NcInputConfirmCancel-a08c5cb4.mjs.map → NcInputConfirmCancel-HrSwS4LK.mjs.map} +1 -1
  469. package/dist/chunks/NcInputConfirmCancel-q4IYDSKH.cjs +91 -0
  470. package/dist/chunks/{NcInputConfirmCancel-b99898db.cjs.map → NcInputConfirmCancel-q4IYDSKH.cjs.map} +1 -1
  471. package/dist/chunks/NcListItem-_P2bxfeP.mjs +248 -0
  472. package/dist/chunks/NcListItem-_P2bxfeP.mjs.map +1 -0
  473. package/dist/chunks/NcListItem-wsOnBEF3.cjs +242 -0
  474. package/dist/chunks/NcListItem-wsOnBEF3.cjs.map +1 -0
  475. package/dist/chunks/NcListItemIcon-65Rgi-AZ.cjs +160 -0
  476. package/dist/chunks/NcListItemIcon-65Rgi-AZ.cjs.map +1 -0
  477. package/dist/chunks/NcListItemIcon-IXrbZUKU.mjs +164 -0
  478. package/dist/chunks/NcListItemIcon-IXrbZUKU.mjs.map +1 -0
  479. package/dist/chunks/NcPasswordField-XvXblBeQ.cjs +229 -0
  480. package/dist/chunks/NcPasswordField-XvXblBeQ.cjs.map +1 -0
  481. package/dist/chunks/NcPasswordField-kJ1PZotd.mjs +238 -0
  482. package/dist/chunks/NcPasswordField-kJ1PZotd.mjs.map +1 -0
  483. package/dist/chunks/NcPopover--SjyNre9.cjs +211 -0
  484. package/dist/chunks/NcPopover--SjyNre9.cjs.map +1 -0
  485. package/dist/chunks/NcPopover-yyItaFC6.mjs +218 -0
  486. package/dist/chunks/NcPopover-yyItaFC6.mjs.map +1 -0
  487. package/dist/chunks/NcProgressBar-hQCFE5H3.mjs +99 -0
  488. package/dist/chunks/NcProgressBar-hQCFE5H3.mjs.map +1 -0
  489. package/dist/chunks/NcProgressBar-yrdD1jxU.cjs +95 -0
  490. package/dist/chunks/NcProgressBar-yrdD1jxU.cjs.map +1 -0
  491. package/dist/chunks/NcRelatedResourcesPanel-1nj1tk0J.mjs +205 -0
  492. package/dist/chunks/NcRelatedResourcesPanel-1nj1tk0J.mjs.map +1 -0
  493. package/dist/chunks/NcRelatedResourcesPanel-KxXrRko3.cjs +199 -0
  494. package/dist/chunks/NcRelatedResourcesPanel-KxXrRko3.cjs.map +1 -0
  495. package/dist/chunks/NcRichContenteditable-A0FFbptl.cjs +504 -0
  496. package/dist/chunks/NcRichContenteditable-A0FFbptl.cjs.map +1 -0
  497. package/dist/chunks/NcRichContenteditable-VzFXqSYH.mjs +515 -0
  498. package/dist/chunks/NcRichContenteditable-VzFXqSYH.mjs.map +1 -0
  499. package/dist/chunks/{NcRichText-f729896c.cjs → NcRichText-N44WJqzt.cjs} +112 -71
  500. package/dist/chunks/NcRichText-N44WJqzt.cjs.map +1 -0
  501. package/dist/chunks/{NcRichText-e4bf7767.mjs → NcRichText-YSUTWw6M.mjs} +125 -81
  502. package/dist/chunks/NcRichText-YSUTWw6M.mjs.map +1 -0
  503. package/dist/chunks/NcSavingIndicatorIcon-IqoMFcDK.mjs +62 -0
  504. package/dist/chunks/NcSavingIndicatorIcon-IqoMFcDK.mjs.map +1 -0
  505. package/dist/chunks/NcSavingIndicatorIcon-wcQ0mBIL.cjs +59 -0
  506. package/dist/chunks/NcSavingIndicatorIcon-wcQ0mBIL.cjs.map +1 -0
  507. package/dist/chunks/NcSelect-H-xyiCqP.cjs +462 -0
  508. package/dist/chunks/NcSelect-H-xyiCqP.cjs.map +1 -0
  509. package/dist/chunks/NcSelect-roYZ16y8.mjs +474 -0
  510. package/dist/chunks/NcSelect-roYZ16y8.mjs.map +1 -0
  511. package/dist/chunks/NcSelectTags-3BfQQNLj.mjs +267 -0
  512. package/dist/chunks/NcSelectTags-3BfQQNLj.mjs.map +1 -0
  513. package/dist/chunks/NcSelectTags-iuvfaq_W.cjs +261 -0
  514. package/dist/chunks/NcSelectTags-iuvfaq_W.cjs.map +1 -0
  515. package/dist/chunks/NcSettingsInputText-JHuxEb64.cjs +91 -0
  516. package/dist/chunks/NcSettingsInputText-JHuxEb64.cjs.map +1 -0
  517. package/dist/chunks/NcSettingsInputText-RH5qyxcD.mjs +95 -0
  518. package/dist/chunks/NcSettingsInputText-RH5qyxcD.mjs.map +1 -0
  519. package/dist/chunks/NcSettingsSection-dsoWc5to.cjs +95 -0
  520. package/dist/chunks/NcSettingsSection-dsoWc5to.cjs.map +1 -0
  521. package/dist/chunks/NcSettingsSection-u3WizmVu.mjs +98 -0
  522. package/dist/chunks/NcSettingsSection-u3WizmVu.mjs.map +1 -0
  523. package/dist/chunks/{NcSettingsSelectGroup-ecc8bc5a.mjs → NcSettingsSelectGroup-l7ImtXiI.mjs} +5 -5
  524. package/dist/chunks/{NcSettingsSelectGroup-ecc8bc5a.mjs.map → NcSettingsSelectGroup-l7ImtXiI.mjs.map} +1 -1
  525. package/dist/chunks/{NcSettingsSelectGroup-b065ffc8.cjs → NcSettingsSelectGroup-obOOSE0Z.cjs} +9 -9
  526. package/dist/chunks/{NcSettingsSelectGroup-b065ffc8.cjs.map → NcSettingsSelectGroup-obOOSE0Z.cjs.map} +1 -1
  527. package/dist/chunks/NcTextField-5nK-T1Xg.cjs +140 -0
  528. package/dist/chunks/NcTextField-5nK-T1Xg.cjs.map +1 -0
  529. package/dist/chunks/NcTextField-JlIIeRJa.mjs +146 -0
  530. package/dist/chunks/NcTextField-JlIIeRJa.mjs.map +1 -0
  531. package/dist/chunks/NcTimezonePicker-1NMfD5lj.cjs +7195 -0
  532. package/dist/chunks/NcTimezonePicker-1NMfD5lj.cjs.map +1 -0
  533. package/dist/chunks/NcTimezonePicker-GDJZ0IwA.mjs +7201 -0
  534. package/dist/chunks/NcTimezonePicker-GDJZ0IwA.mjs.map +1 -0
  535. package/dist/chunks/NcUserBubble-ADV-rrgN.cjs +191 -0
  536. package/dist/chunks/NcUserBubble-ADV-rrgN.cjs.map +1 -0
  537. package/dist/chunks/NcUserBubble-HoPxl8_o.mjs +197 -0
  538. package/dist/chunks/NcUserBubble-HoPxl8_o.mjs.map +1 -0
  539. package/dist/chunks/NcUserStatusIcon-WSxqK-Ix.cjs +166 -0
  540. package/dist/chunks/NcUserStatusIcon-WSxqK-Ix.cjs.map +1 -0
  541. package/dist/chunks/NcUserStatusIcon-dgPMbNYQ.mjs +174 -0
  542. package/dist/chunks/NcUserStatusIcon-dgPMbNYQ.mjs.map +1 -0
  543. package/dist/chunks/{ScopeComponent-b039a43c.mjs → ScopeComponent-8lJfv9VF.mjs} +4 -4
  544. package/dist/chunks/{ScopeComponent-b039a43c.mjs.map → ScopeComponent-8lJfv9VF.mjs.map} +1 -1
  545. package/dist/chunks/{ScopeComponent-06c558d3.cjs → ScopeComponent-d_TBKnQk.cjs} +4 -4
  546. package/dist/chunks/{ScopeComponent-06c558d3.cjs.map → ScopeComponent-d_TBKnQk.cjs.map} +1 -1
  547. package/dist/chunks/_l10n-RVZyA63y.cjs +64 -0
  548. package/dist/chunks/_l10n-RVZyA63y.cjs.map +1 -0
  549. package/dist/chunks/_l10n-gZppkly8.mjs +66 -0
  550. package/dist/chunks/_l10n-gZppkly8.mjs.map +1 -0
  551. package/dist/chunks/_plugin-vue2_normalizer-DCfUPqga.cjs.map +1 -0
  552. package/dist/chunks/_plugin-vue2_normalizer-u6G_3nkj.mjs.map +1 -0
  553. package/dist/chunks/{actionGlobal-9e29e11b.cjs → actionGlobal-_f-PhW84.cjs} +3 -7
  554. package/dist/chunks/actionGlobal-_f-PhW84.cjs.map +1 -0
  555. package/dist/chunks/{actionGlobal-8c1c28c9.mjs → actionGlobal-ejpd0zqm.mjs} +3 -7
  556. package/dist/chunks/actionGlobal-ejpd0zqm.mjs.map +1 -0
  557. package/dist/chunks/{actionText-123f26b0.mjs → actionText-AoAs4kqP.mjs} +6 -2
  558. package/dist/chunks/{actionText-e450809c.cjs.map → actionText-AoAs4kqP.mjs.map} +1 -1
  559. package/dist/chunks/{actionText-e450809c.cjs → actionText-pGrMQtZ3.cjs} +6 -2
  560. package/dist/chunks/{actionText-123f26b0.mjs.map → actionText-pGrMQtZ3.cjs.map} +1 -1
  561. package/dist/chunks/emoji-mJIuLpNR.cjs +58 -0
  562. package/dist/chunks/emoji-mJIuLpNR.cjs.map +1 -0
  563. package/dist/chunks/emoji-tllD0Rvt.mjs +61 -0
  564. package/dist/chunks/emoji-tllD0Rvt.mjs.map +1 -0
  565. package/dist/chunks/{focusTrap-5d0f71d4.mjs.map → focusTrap-Py2bQ9-r.mjs.map} +1 -1
  566. package/dist/chunks/{focusTrap-14985831.cjs.map → focusTrap-n3H52LOw.cjs.map} +1 -1
  567. package/dist/chunks/{index-20a9ace9.mjs → index-2phCrsSH.mjs} +1 -1
  568. package/dist/chunks/{index-20a9ace9.mjs.map → index-2phCrsSH.mjs.map} +1 -1
  569. package/dist/chunks/{index-4398f925.cjs → index-AX_b-FPF.cjs} +2 -1
  570. package/dist/chunks/{index-4398f925.cjs.map → index-AX_b-FPF.cjs.map} +1 -1
  571. package/dist/chunks/{index-e894376a.cjs → index-FO4BaGaF.cjs} +1 -1
  572. package/dist/chunks/{index-e894376a.cjs.map → index-FO4BaGaF.cjs.map} +1 -1
  573. package/dist/chunks/{index-5f2a5f57.mjs → index-KrMGGc7j.mjs} +3 -2
  574. package/dist/chunks/{index-5f2a5f57.mjs.map → index-KrMGGc7j.mjs.map} +1 -1
  575. package/dist/chunks/{logger-3612e664.mjs.map → logger-3m1eQsSo.mjs.map} +1 -1
  576. package/dist/chunks/{logger-4998b668.cjs.map → logger-G6OKp5ly.cjs.map} +1 -1
  577. package/dist/chunks/{referencePickerModal-12fa2ad0.cjs → referencePickerModal-byTgSeys.cjs} +152 -170
  578. package/dist/chunks/{referencePickerModal-12fa2ad0.cjs.map → referencePickerModal-byTgSeys.cjs.map} +1 -1
  579. package/dist/chunks/{referencePickerModal-12935fb3.mjs → referencePickerModal-tEVbhwha.mjs} +171 -189
  580. package/dist/chunks/{referencePickerModal-12935fb3.mjs.map → referencePickerModal-tEVbhwha.mjs.map} +1 -1
  581. package/dist/chunks/usernameToColor-LY-6e04n.mjs +41 -0
  582. package/dist/chunks/usernameToColor-LY-6e04n.mjs.map +1 -0
  583. package/dist/chunks/usernameToColor-ty7b2Xom.cjs +39 -0
  584. package/dist/chunks/usernameToColor-ty7b2Xom.cjs.map +1 -0
  585. package/dist/functions/emoji/emoji.d.ts +50 -0
  586. package/dist/{Functions/emoji.mjs → functions/emoji/index.d.ts} +1 -16
  587. package/dist/index.cjs +163 -157
  588. package/dist/index.cjs.map +1 -1
  589. package/dist/index.mjs +157 -149
  590. package/dist/index.mjs.map +1 -1
  591. package/dist/utils/UserStatus.d.ts +1 -3
  592. package/package.json +6 -4
  593. package/dist/Functions/emoji.cjs +0 -36
  594. package/dist/Functions/emoji.cjs.map +0 -1
  595. package/dist/Functions/emoji.mjs.map +0 -1
  596. package/dist/chunks/GenColors-5c054042.mjs.map +0 -1
  597. package/dist/chunks/GenColors-7495e6f6.cjs.map +0 -1
  598. package/dist/chunks/NcAppNavigationToggle-6d192bea.cjs +0 -110
  599. package/dist/chunks/NcInputConfirmCancel-b99898db.cjs +0 -91
  600. package/dist/chunks/NcRichText-e4bf7767.mjs.map +0 -1
  601. package/dist/chunks/NcRichText-f729896c.cjs.map +0 -1
  602. package/dist/chunks/_l10n-72c5e29e.cjs +0 -62
  603. package/dist/chunks/_l10n-72c5e29e.cjs.map +0 -1
  604. package/dist/chunks/_l10n-f5af5269.mjs +0 -64
  605. package/dist/chunks/_l10n-f5af5269.mjs.map +0 -1
  606. package/dist/chunks/_plugin-vue2_normalizer-71e2aa87.mjs.map +0 -1
  607. package/dist/chunks/_plugin-vue2_normalizer-7f9efb60.cjs.map +0 -1
  608. package/dist/chunks/actionGlobal-8c1c28c9.mjs.map +0 -1
  609. package/dist/chunks/actionGlobal-9e29e11b.cjs.map +0 -1
  610. package/dist/chunks/index-309426ff.mjs.map +0 -1
  611. package/dist/chunks/index-693e993c.cjs.map +0 -1
  612. /package/dist/assets/{index-418d4e87.css → NcActionCaption-afJqyJO6.css} +0 -0
  613. /package/dist/assets/{index-018895f7.css → NcActionSeparator-l98xWbiL.css} +0 -0
  614. /package/dist/assets/{index-fc61f2d8.css → NcAppNavigationIconBullet-Nf3ARMLv.css} +0 -0
  615. /package/dist/assets/{index-0ac09203.css → NcAppNavigationNew-joyd78FM.css} +0 -0
  616. /package/dist/assets/{index-f78bd735.css → NcAppNavigationSettings-Jx_6RpSn.css} +0 -0
  617. /package/dist/assets/{index-76dd9f11.css → NcAppNavigationSpacer-MfL8GeCN.css} +0 -0
  618. /package/dist/assets/{NcAppNavigationToggle-48c375e8.css → NcAppNavigationToggle-upUgYNtL.css} +0 -0
  619. /package/dist/assets/{index-1f25a3c0.css → NcAppSettingsSection-ahfdhix_.css} +0 -0
  620. /package/dist/assets/{index-2d5cf6b2.css → NcAppSidebar-iU8Zp4Qk.css} +0 -0
  621. /package/dist/assets/{index-77a548be.css → NcAppSidebarTab-Phau6edJ.css} +0 -0
  622. /package/dist/assets/{index-17673ea1.css → NcCounterBubble-rgkmqN46.css} +0 -0
  623. /package/dist/assets/{index-6416f636.css → NcDashboardWidget-01deRW9Z.css} +0 -0
  624. /package/dist/assets/{index-e7eadba7.css → NcDashboardWidgetItem-S7fELANA.css} +0 -0
  625. /package/dist/assets/{index-8b327013.css → NcDateTimePickerNative-2pQS5L0H.css} +0 -0
  626. /package/dist/assets/{index-a2b51bce.css → NcEllipsisedOption-eoI10kvc.css} +0 -0
  627. /package/dist/assets/{index-c239a2fc.css → NcEmptyContent-pSz7F6Oe.css} +0 -0
  628. /package/dist/assets/{index-8aa4712e.css → NcGuestContent-mGGTzI2_.css} +0 -0
  629. /package/dist/assets/{NcInputConfirmCancel-45d1d76b.css → NcInputConfirmCancel-ks8z8dIn.css} +0 -0
  630. /package/dist/assets/{index-f24e102f.css → NcListItem-xcW2PRrk.css} +0 -0
  631. /package/dist/assets/{index-6f721577.css → NcListItemIcon-PQ2s6ZqX.css} +0 -0
  632. /package/dist/assets/{index-b8f13a1f.css → NcLoadingIcon-hZn7TJM8.css} +0 -0
  633. /package/dist/assets/{NcMentionBubble-6e887c5f.css → NcMentionBubble-2OXF_uEJ.css} +0 -0
  634. /package/dist/assets/{index-400b48a6.css → NcNoteCard-OTfZqVvP.css} +0 -0
  635. /package/dist/assets/{index-4ebacc78.css → NcPopover-MK4GcuPY.css} +0 -0
  636. /package/dist/assets/{index-6c47e88a.css → NcSettingsInputText-MPi6a3Yy.css} +0 -0
  637. /package/dist/assets/{NcSettingsSelectGroup-a29e2156.css → NcSettingsSelectGroup-_Jpb8yE3.css} +0 -0
  638. /package/dist/assets/{index-d211cae8.css → Tooltip-wOLIuz0Q.css} +0 -0
  639. /package/dist/chunks/{GenRandomId-c214d235.cjs → GenRandomId-ULxaMkkr.cjs} +0 -0
  640. /package/dist/chunks/{GenRandomId-cb9ccebe.mjs → GenRandomId-VodkdWbp.mjs} +0 -0
  641. /package/dist/chunks/{Linkify-39f20c9a.mjs → Linkify-V7PfCeZ8.mjs} +0 -0
  642. /package/dist/chunks/{Linkify-40cdd635.cjs → Linkify-f3s3nAe_.cjs} +0 -0
  643. /package/dist/chunks/{_plugin-vue2_normalizer-7f9efb60.cjs → _plugin-vue2_normalizer-DCfUPqga.cjs} +0 -0
  644. /package/dist/chunks/{_plugin-vue2_normalizer-71e2aa87.mjs → _plugin-vue2_normalizer-u6G_3nkj.mjs} +0 -0
  645. /package/dist/chunks/{focusTrap-5d0f71d4.mjs → focusTrap-Py2bQ9-r.mjs} +0 -0
  646. /package/dist/chunks/{focusTrap-14985831.cjs → focusTrap-n3H52LOw.cjs} +0 -0
  647. /package/dist/chunks/{logger-3612e664.mjs → logger-3m1eQsSo.mjs} +0 -0
  648. /package/dist/chunks/{logger-4998b668.cjs → logger-G6OKp5ly.cjs} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"NcButton.cjs","sources":["../../src/components/NcButton/NcButton.vue"],"sourcesContent":["<!--\n - @copyright Copyright (c) 2020 Marco Ambrosini <marcoambrosini@icloud.com>\n -\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\n<docs>\n\n### General description\nGeneral purpose button component. See props for different options.\n[Use material design icons only for icons](https://www.npmjs.com/package/vue-material-design-icons) and remember to set their size to 20.\n\n### Usage\n### Custom icon slot\nTo be used with `vue-material-design-icons` only. For icon classes use the `default-icon` slot.\nIt can be used with one or multiple actions.\n```\n<template>\n<div class=\"wrapper\">\n\t<!-- Style selector -->\n\t<div class=\"grid\">\n\t\t<NcCheckboxRadioSwitch :checked.sync=\"style\" value=\"text\" name=\"style\" type=\"radio\">Text only</NcCheckboxRadioSwitch>\n\t\t<NcCheckboxRadioSwitch :checked.sync=\"style\" value=\"icon\" name=\"style\" type=\"radio\">Icon only</NcCheckboxRadioSwitch>\n\t\t<NcCheckboxRadioSwitch :checked.sync=\"style\" value=\"icontext\" name=\"style\" type=\"radio\">Icon and text</NcCheckboxRadioSwitch>\n\t\t<NcCheckboxRadioSwitch :checked.sync=\"disabled\" type=\"checkbox\">Disabled</NcCheckboxRadioSwitch>\n\t\t<!--<NcCheckboxRadioSwitch :checked.sync=\"readonly\" type=\"checkbox\">Read-only</NcCheckboxRadioSwitch>-->\n\t</div>\n\n\t<h5>Standard buttons</h5>\n\t<div class=\"grid\">\n\t\t<p>Tertiary, no background</p>\n\t\t<p>Tertiary</p>\n\t\t<p>Secondary</p>\n\t\t<p>Primary</p>\n\t\t<NcButton\n\t\t\taria-label=\"Example text\"\n\t\t\t:disabled=\"disabled\"\n\t\t\t:readonly=\"readonly\"\n\t\t\ttype=\"tertiary-no-background\">\n\t\t\t<template v-if=\"style.indexOf('icon') !== -1\" #icon>\n\t\t\t\t<Video\n\t\t\t\t\t:size=\"20\" />\n\t\t\t</template>\n\t\t\t<template v-if=\"style.indexOf('text') !== -1\">Example text</template>\n\t\t</NcButton>\n\t\t<NcButton\n\t\t\taria-label=\"Example text\"\n\t\t\t:disabled=\"disabled\"\n\t\t\t:readonly=\"readonly\"\n\t\t\ttype=\"tertiary\">\n\t\t\t<template v-if=\"style.indexOf('icon') !== -1\" #icon>\n\t\t\t\t<Video\n\t\t\t\t\t:size=\"20\" />\n\t\t\t</template>\n\t\t\t<template v-if=\"style.indexOf('text') !== -1\">Example text</template>\n\t\t</NcButton>\n\t\t<NcButton\n\t\t\taria-label=\"Example text\"\n\t\t\t:disabled=\"disabled\"\n\t\t\t:readonly=\"readonly\">\n\t\t\t<template v-if=\"style.indexOf('icon') !== -1\" #icon>\n\t\t\t\t<Video\n\t\t\t\t\t:size=\"20\" />\n\t\t\t</template>\n\t\t\t<template v-if=\"style.indexOf('text') !== -1\">Example text</template>\n\t\t</NcButton>\n\t\t<NcButton\n\t\t\taria-label=\"Example text\"\n\t\t\t:disabled=\"disabled\"\n\t\t\t:readonly=\"readonly\"\n\t\t\ttype=\"primary\">\n\t\t\t<template v-if=\"style.indexOf('icon') !== -1\" #icon>\n\t\t\t\t<Video\n\t\t\t\t\t:size=\"20\" />\n\t\t\t</template>\n\t\t\t<template v-if=\"style.indexOf('text') !== -1\">Example text</template>\n\t\t</NcButton>\n\t</div>\n\n\t<!-- Wide button -->\n\t<h5>Wide button</h5>\n\t<NcButton\n\t\t:disabled=\"disabled\"\n\t\t:readonly=\"readonly\"\n\t\t:wide=\"true\"\n\t\ttext=\"Example text\">\n\t\t<template #icon>\n\t\t\t<Video\n\t\t\t\t:size=\"20\" />\n\t\t</template>\n\t\tExample text\n\t</NcButton>\n\n\t<!-- Special buttons -->\n\t<h5>Special buttons</h5>\n\t<div class=\"grid\">\n\t\t<p>Success</p>\n\t\t<p>Warning</p>\n\t\t<p>Error</p>\n\t\t<p> - </p>\n\t\t<NcButton\n\t\t\t:disabled=\"disabled\"\n\t\t\t:readonly=\"readonly\"\n\t\t\ttype=\"success\">\n\t\t\t<template #icon>\n\t\t\t\t<Video\n\t\t\t\t\t:size=\"20\" />\n\t\t\t</template>\n\t\t\tExample text\n\t\t</NcButton>\n\t\t<NcButton\n\t\t\t:disabled=\"disabled\"\n\t\t\t:readonly=\"readonly\"\n\t\t\ttype=\"warning\">\n\t\t\t<template #icon>\n\t\t\t\t<Video\n\t\t\t\t\t:size=\"20\" />\n\t\t\t</template>\n\t\t\tExample text\n\t\t</NcButton>\n\t\t<NcButton\n\t\t\t:disabled=\"disabled\"\n\t\t\t:readonly=\"readonly\"\n\t\t\ttype=\"error\">\n\t\t\t<template #icon>\n\t\t\t\t<Video\n\t\t\t\t\t:size=\"20\" />\n\t\t\t</template>\n\t\t\tExample text\n\t\t</NcButton>\n\t\t<p> - </p>\n\t</div>\n</div>\n\n</template>\n<script>\nimport Video from 'vue-material-design-icons/Video'\n\nexport default {\n\tcomponents: {\n\t\tVideo,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\ttoggled: false,\n\t\t\tdisabled: false,\n\t\t\treadonly: false,\n\t\t\tstyle: 'icontext',\n\t\t}\n\t}\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.wrapper {\n\tpadding: 0 12px;\n}\n\n.grid {\n\tdisplay: grid;\n\tgrid-template-columns: 1fr 1fr 1fr 1fr;\n\tgrid-template-rows: repeat(auto-fill, auto);\n\tposition: relative;\n\tmargin: 12px 0;\n}\n\nh5 {\n\tfont-weight: bold;\n\tmargin: 40px 0 20px 0;\n}\n\np {\n\ttext-align: center;\n\tmargin: 4px 0 12px 0;\n\tcolor: var(--color-text-maxcontrast)\n}\n\nbutton {\n\tmargin: auto;\n}\n</style>\n```\n\n### Alignment\nSometimes it is required to change the icon alignment on the button, like for switching between pages as in following example:\n\n```vue\n<template>\n\t<div style=\"display: flex; flex-direction: column; gap: 12px;\">\n\t\t<NcButton aria-label=\"center (default)\" type=\"secondary\" wide>\n\t\t\t<template #icon>\n\t\t\t\t<IconLeft :size=\"20\" />\n\t\t\t</template>\n\t\t\tcenter (default)\n\t\t</NcButton>\n\t\t<NcButton alignment=\"center-reverse\" aria-label=\"center-reverse\" type=\"secondary\" wide>\n\t\t\t<template #icon>\n\t\t\t\t<IconRight :size=\"20\" />\n\t\t\t</template>\n\t\t\tcenter-reverse\n\t\t</NcButton>\n\t\t<div style=\"display: flex; gap: 12px;\">\n\t\t\t<div style=\"display: flex; flex-direction: column; gap: 12px; flex: 1\">\n\t\t\t\t<NcButton alignment=\"start\" aria-label=\"start\" type=\"secondary\" wide>\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconLeft :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\tstart\n\t\t\t\t</NcButton>\n\t\t\t\t<NcButton alignment=\"start-reverse\" aria-label=\"start-reverse\" type=\"secondary\" wide>\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconRight :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\tstart-reverse\n\t\t\t\t</NcButton>\n\t\t\t</div>\n\t\t\t<div style=\"display: flex; flex-direction: column; gap: 12px; flex: 1\">\n\t\t\t\t<NcButton alignment=\"end\" aria-label=\"end\" type=\"secondary\" wide>\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconLeft :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\tend\n\t\t\t\t</NcButton>\n\t\t\t\t<NcButton alignment=\"end-reverse\" aria-label=\"end-reverse\" type=\"secondary\" wide>\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconRight :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\tend-reverse\n\t\t\t\t</NcButton>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n<script>\nimport IconLeft from 'vue-material-design-icons/ArrowLeft.vue'\nimport IconRight from 'vue-material-design-icons/ArrowRight.vue'\n\nexport default {\n\tcomponents: {\n\t\tIconLeft,\n\t\tIconRight,\n\t},\n}\n</script>\n```\n\n### Pressed state\nIt is possible to make the button stateful by adding a pressed state, e.g. if you like to create a favorite button.\nThe button will have the required `aria` attribute for accessibility and visual style (`primary` when pressed, and the configured type otherwise).\n\n```vue\n<template>\n\t<div>\n\t\t<div style=\"display: flex; gap: 12px;\">\n\t\t\t<NcButton :pressed.sync=\"isFavorite\" :aria-label=\"ariaLabel\" type=\"tertiary-no-background\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconStar v-if=\"isFavorite\" :size=\"20\" />\n\t\t\t\t\t<IconStarOutline v-else :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t\t<NcButton :pressed.sync=\"isFavorite\" :aria-label=\"ariaLabel\" type=\"tertiary\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconStar v-if=\"isFavorite\" :size=\"20\" />\n\t\t\t\t\t<IconStarOutline v-else :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t\t<NcButton :pressed.sync=\"isFavorite\" :aria-label=\"ariaLabel\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconStar v-if=\"isFavorite\" :size=\"20\" />\n\t\t\t\t\t<IconStarOutline v-else :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t</div>\n\t\t<div>\n\t\t\tIt is {{ isFavorite ? 'a' : 'not a' }} favorite.\n\t\t</div>\n\t</div>\n</template>\n<script>\nimport IconStar from 'vue-material-design-icons/Star.vue'\nimport IconStarOutline from 'vue-material-design-icons/StarOutline.vue'\n\nexport default {\n\tcomponents: {\n\t\tIconStar,\n\t\tIconStarOutline,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tisFavorite: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\tariaLabel() {\n\t\t\treturn this.isFavorite ? 'Remove as favorite' : 'Add as favorite'\n\t\t},\n\t},\n\tmethods: {\n\t\ttoggleFavorite() {\n\t\t\tthis.isFavorite = !this.isFavorite\n\t\t},\n\t},\n}\n</script>\n```\n\n### Usage example: Sorting table columns\nThe standard way to implement sortable table column headers should be like this:\n\n```vue\n<template>\n\t<table>\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th :aria-sorted=\"sortedName\" class=\"row-name\">\n\t\t\t\t\t<NcButton alignment=\"start-reverse\"\n\t\t\t\t\t\t:wide=\"true\"\n\t\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t\t@click=\"sortName\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<IconDown v-if=\"sortedName === 'ascending'\" class=\"sort-icon\" :size=\"20\" />\n\t\t\t\t\t\t\t<IconUp v-else-if=\"sortedName === 'descending'\" class=\"sort-icon\" :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<span class=\"table-header\">Name</span>\n\t\t\t\t\t</NcButton>\n\t\t\t\t</th>\n\t\t\t\t<th :aria-sorted=\"sortedSize\" class=\"row-size\">\n\t\t\t\t\t<NcButton alignment=\"end\"\n\t\t\t\t\t\t:wide=\"true\"\n\t\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t\t@click=\"sortSize\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<IconDown v-if=\"sortedSize === 'ascending'\" class=\"sort-icon\" :size=\"20\" />\n\t\t\t\t\t\t\t<IconUp v-else-if=\"sortedSize === 'descending'\" class=\"sort-icon\" :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<span class=\"table-header\">Size</span>\n\t\t\t\t\t</NcButton>\n\t\t\t\t</th>\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td class=\"row-name\">Lorem ipsum</td>\n\t\t\t\t<td class=\"row-size\">8 MiB</td>\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n</template>\n<script>\nimport IconUp from 'vue-material-design-icons/MenuUp.vue'\nimport IconDown from 'vue-material-design-icons/MenuDown.vue'\n\nexport default {\n\tcomponents: {\n\t\tIconUp,\n\t\tIconDown,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tsortedName: null,\n\t\t\tsortedSize: null,\n\t\t}\n\t},\n\tmethods: {\n\t\tsortName() {\n\t\t\tif (this.sortedName === 'ascending') {\n\t\t\t\tthis.sortedName = 'descending'\n\t\t\t} else if (this.sortedName === 'descending') {\n\t\t\t\tthis.sortedName = null\n\t\t\t} else {\n\t\t\t\tthis.sortedName = 'ascending'\n\t\t\t}\n\t\t},\n\t\tsortSize() {\n\t\t\tif (this.sortedSize === 'ascending') {\n\t\t\t\tthis.sortedSize = 'descending'\n\t\t\t} else if (this.sortedSize === 'descending') {\n\t\t\t\tthis.sortedSize = null\n\t\t\t} else {\n\t\t\t\tthis.sortedSize = 'ascending'\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n<style>\ntable {\n\ttable-layout: fixed;\n\twidth: 300px;\n}\n\ntd.row-name {\n\tpadding-inline-start: 16px;\n}\n\ntd.row-size {\n\ttext-align: right;\n\tpadding-inline-end: 16px;\n}\n\n.table-header {\n\tfont-weight: normal;\n\tcolor: var(--color-text-maxcontrast);\n}\n\n.sort-icon {\n\tcolor: var(--color-text-maxcontrast);\n\tposition: relative;\n\tinset-inline: -10px;\n}\n\n.row-size .sort-icon {\n\tinset-inline: 10px;\n}\n</style>\n```\n\n</docs>\n\n<script>\n\nexport default {\n\tname: 'NcButton',\n\n\tprops: {\n\t\t/**\n\t\t * Set the text and icon alignment\n\t\t *\n\t\t * @default 'center'\n\t\t */\n\t\talignment: {\n\t\t\ttype: String,\n\t\t\tdefault: 'center',\n\t\t\tvalidator: (alignment) => ['start', 'start-reverse', 'center', 'center-reverse', 'end', 'end-reverse'].includes(alignment),\n\t\t},\n\n\t\t/**\n\t\t * Toggles the disabled state of the button on and off.\n\t\t */\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Specifies the button type\n\t\t * Accepted values: primary, secondary, tertiary, tertiary-no-background, tertiary-on-primary, error, warning, success. If left empty,\n\t\t * the default button style will be applied.\n\t\t */\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['primary', 'secondary', 'tertiary', 'tertiary-no-background', 'tertiary-on-primary', 'error', 'warning', 'success'].indexOf(value) !== -1\n\t\t\t},\n\t\t\tdefault: 'secondary',\n\t\t},\n\n\t\t/**\n\t\t * Specifies the button native type\n\t\t * Accepted values: submit, reset, button. If left empty,\n\t\t * the default \"button\" type will be used.\n\t\t */\n\t\tnativeType: {\n\t\t\ttype: String,\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['submit', 'reset', 'button'].indexOf(value) !== -1\n\t\t\t},\n\t\t\tdefault: 'button',\n\t\t},\n\n\t\t/**\n\t\t * Specifies whether the button should span all the available width.\n\t\t * By default, buttons span the whole width of the container.\n\t\t */\n\t\twide: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Always try to provide an aria-label to your button. Make it more\n\t\t * specific than the button's name by provide some more context. E.g. if\n\t\t * the name of the button is \"send\" in the Mail app, the aria label could\n\t\t * be \"Send email\".\n\t\t */\n\t\tariaLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Providing the href attribute turns the button component into an `a`\n\t\t * element.\n\t\t */\n\t\thref: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Providing the download attribute with href downloads file when clicking.\n\t\t */\n\t\tdownload: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Providing the to attribute turns the button component into a `router-link`\n\t\t * element. Takes precedence over the href attribute.\n\t\t */\n\t\tto: {\n\t\t\ttype: [String, Object],\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Pass in `true` if you want the matching behaviour of `router-link` to\n\t\t * be non-inclusive: https://router.vuejs.org/api/#exact\n\t\t */\n\t\texact: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\t/**\n\t\t * @deprecated To be removed in @nextcloud/vue 9. Migration guide: remove ariaHidden prop from NcAction* components.\n\t\t * @todo Add a check in @nextcloud/vue 9 that this prop is not provided,\n\t\t * otherwise root element will inherit incorrect aria-hidden.\n\t\t */\n\t\tariaHidden: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * The pressed state of the button if it has a checked state\n\t\t * This will add the `aria-pressed` attribute and for the button to have the primary style in checked state.\n\t\t */\n\t\tpressed: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\temits: ['update:pressed', 'click'],\n\n\tcomputed: {\n\t\t/**\n\t\t * The real type to be used for the button, enforces `primary` for pressed state and, if stateful button, any other type for not pressed state\n\t\t * Otherwise the type property is used.\n\t\t */\n\t\trealType() {\n\t\t\t// Force *primary* when pressed\n\t\t\tif (this.pressed) {\n\t\t\t\treturn 'primary'\n\t\t\t}\n\t\t\t// If not pressed but button is configured as stateful button then the type must not be primary\n\t\t\tif (this.pressed === false && this.type === 'primary') {\n\t\t\t\treturn 'secondary'\n\t\t\t}\n\t\t\treturn this.type\n\t\t},\n\n\t\t/**\n\t\t * The flexbox alignment of the button content\n\t\t */\n\t\tflexAlignment() {\n\t\t\treturn this.alignment.split('-')[0]\n\t\t},\n\n\t\t/**\n\t\t * If the button content should be reversed (icon on the end)\n\t\t */\n\t\tisReverseAligned() {\n\t\t\treturn this.alignment.includes('-')\n\t\t},\n\t},\n\n\t/**\n\t * The render function to display the component\n\t *\n\t * @param {Function} h The function to create VNodes\n\t * @return {object|undefined} The created VNode\n\t */\n\trender(h) {\n\t\tconst hasText = !!this.$slots.default\n\t\tconst hasIcon = this.$slots?.icon\n\n\t\t/**\n\t\t * Always fill either the text prop or the ariaLabel one.\n\t\t */\n\t\tif (!hasText && !this.ariaLabel) {\n\t\t\tconsole.warn('You need to fill either the text or the ariaLabel props in the button component.', {\n\t\t\t\ttext: this.$slots.default?.[0]?.text,\n\t\t\t\tariaLabel: this.ariaLabel,\n\t\t\t},\n\t\t\tthis)\n\t\t}\n\n\t\tconst renderButton = ({ navigate, isActive, isExactActive } = {}) => h((this.to || !this.href) ? 'button' : 'a',\n\t\t\t{\n\t\t\t\tclass: [\n\t\t\t\t\t'button-vue',\n\t\t\t\t\t{\n\t\t\t\t\t\t'button-vue--icon-only': hasIcon && !hasText,\n\t\t\t\t\t\t'button-vue--text-only': hasText && !hasIcon,\n\t\t\t\t\t\t'button-vue--icon-and-text': hasIcon && hasText,\n\t\t\t\t\t\t[`button-vue--vue-${this.realType}`]: this.realType,\n\t\t\t\t\t\t'button-vue--wide': this.wide,\n\t\t\t\t\t\t[`button-vue--${this.flexAlignment}`]: this.flexAlignment !== 'center',\n\t\t\t\t\t\t'button-vue--reverse': this.isReverseAligned,\n\t\t\t\t\t\tactive: isActive,\n\t\t\t\t\t\t'router-link-exact-active': isExactActive,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tattrs: {\n\t\t\t\t\t'aria-label': this.ariaLabel,\n\t\t\t\t\t'aria-pressed': this.pressed,\n\t\t\t\t\tdisabled: this.disabled,\n\t\t\t\t\ttype: this.href ? null : this.nativeType,\n\t\t\t\t\trole: this.href ? 'button' : null,\n\t\t\t\t\thref: (!this.to && this.href) ? this.href : null,\n\t\t\t\t\ttarget: (!this.to && this.href) ? '_self' : null,\n\t\t\t\t\trel: (!this.to && this.href) ? 'nofollow noreferrer noopener' : null,\n\t\t\t\t\tdownload: (!this.to && this.href && this.download) ? this.download : null,\n\t\t\t\t\t...this.$attrs,\n\t\t\t\t},\n\t\t\t\ton: {\n\t\t\t\t\t...this.$listeners,\n\t\t\t\t\tclick: ($event) => {\n\t\t\t\t\t\t// Update pressed prop on click if it is set\n\t\t\t\t\t\tif (typeof this.pressed === 'boolean') {\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t * Update the current pressed state of the button (if the `pressed` property was configured)\n\t\t\t\t\t\t\t *\n\t\t\t\t\t\t\t * @property {boolean} newValue The new `pressed`-state\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\tthis.$emit('update:pressed', !this.pressed)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// We have to both navigate and emit the click event\n\t\t\t\t\t\tthis.$emit('click', $event)\n\t\t\t\t\t\tnavigate?.($event)\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t[\n\t\t\t\th('span', { class: 'button-vue__wrapper' }, [\n\t\t\t\t\thasIcon\n\t\t\t\t\t\t? h('span', {\n\t\t\t\t\t\t\tclass: 'button-vue__icon',\n\t\t\t\t\t\t\tattrs: {\n\t\t\t\t\t\t\t\t'aria-hidden': 'true',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t[this.$slots.icon],\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: null,\n\t\t\t\t\thasText ? h('span', { class: 'button-vue__text' }, [this.$slots.default]) : null,\n\t\t\t\t]),\n\t\t\t],\n\t\t)\n\n\t\t// If we have a router-link, we wrap the button in it\n\t\tif (this.to) {\n\t\t\treturn h('router-link', {\n\t\t\t\tprops: {\n\t\t\t\t\tcustom: true,\n\t\t\t\t\tto: this.to,\n\t\t\t\t\texact: this.exact,\n\t\t\t\t},\n\t\t\t\tscopedSlots: {\n\t\t\t\t\tdefault: renderButton,\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t\t// Otherwise we simply return the button\n\t\treturn renderButton()\n\t},\n}\n\n</script>\n\n<style lang=\"scss\" scoped>\n\n.button-vue {\n\tposition: relative;\n\twidth: fit-content;\n\toverflow: hidden;\n\tborder: 0;\n\tpadding: 0;\n\tfont-size: var(--default-font-size);\n\tfont-weight: bold;\n\tmin-height: $clickable-area;\n\tmin-width: $clickable-area;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\n\t// Cursor pointer on element and all children\n\tcursor: pointer;\n\t& *,\n\tspan {\n\t\tcursor: pointer;\n\t}\n\tborder-radius: math.div($clickable-area, 2);\n\ttransition-property: color, border-color, background-color;\n\ttransition-duration: 0.1s;\n\ttransition-timing-function: linear;\n\n\t// No outline feedback for focus. Handled with a toggled class in js (see data)\n\t&:focus {\n\t\toutline: none;\n\t}\n\n\t&:disabled {\n\t\tcursor: default;\n\t\t& * {\n\t\t\tcursor: default;\n\t\t}\n\t\topacity: $opacity_disabled;\n\t\t// Gives a wash out effect\n\t\tfilter: saturate($opacity_normal);\n\t}\n\n\t// Default button type\n\tcolor: var(--color-primary-element-light-text);\n\tbackground-color: var(--color-primary-element-light);\n\t&:hover:not(:disabled) {\n\t\tbackground-color: var(--color-primary-element-light-hover);\n\t}\n\n\t// Back to the default color for this button when active\n\t// TODO: add ripple effect\n\t&:active {\n\t\tbackground-color: var(--color-primary-element-light);\n\t}\n\n\t&__wrapper {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\t}\n\n\t&--end &__wrapper {\n\t\tjustify-content: end;\n\t}\n\t&--start &__wrapper {\n\t\tjustify-content: start;\n\t}\n\t&--reverse &__wrapper {\n\t\tflex-direction: row-reverse;\n\t}\n\n\t&--reverse#{&}--icon-and-text {\n\t\tpadding-inline: calc(var(--default-grid-baseline) * 4) var(--default-grid-baseline);\n\t}\n\n\t&__icon {\n\t\theight: $clickable-area;\n\t\twidth: $clickable-area;\n\t\tmin-height: $clickable-area;\n\t\tmin-width: $clickable-area;\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t}\n\n\t&__text {\n\t\tfont-weight: bold;\n\t\tmargin-bottom: 1px;\n\t\tpadding: 2px 0;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\toverflow: hidden;\n\t}\n\n\t// Icon-only button\n\t&--icon-only {\n\t\twidth: $clickable-area !important;\n\t}\n\n\t// Text-only button\n\t&--text-only {\n\t\tpadding: 0 12px;\n\t\t& .button-vue__text {\n\t\t\tmargin-left: 4px;\n\t\t\tmargin-right: 4px;\n\t\t}\n\t}\n\n\t// Icon and text button\n\t&--icon-and-text {\n\t\tpadding-block: 0;\n\t\tpadding-inline: var(--default-grid-baseline) calc(var(--default-grid-baseline) * 4);\n\t}\n\n\t// Wide button spans the whole width of the container\n\t&--wide {\n\t\twidth: 100%;\n\t}\n\n\t&:focus-visible {\n\t\toutline: 2px solid var(--color-main-text) !important;\n\t\tbox-shadow: 0 0 0 4px var(--color-main-background) !important;\n\t\t&.button-vue--vue-tertiary-on-primary {\n\t\t\toutline: 2px solid var(--color-primary-element-text);\n\t\t\tborder-radius: var(--border-radius);\n\t\t\tbackground-color: transparent;\n\t\t}\n\t}\n\n\t// Button types\n\n\t// Primary\n\t&--vue-primary {\n\t\tbackground-color: var(--color-primary-element);\n\t\tcolor: var(--color-primary-element-text);\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: var(--color-primary-element-hover);\n\t\t}\n\t\t// Back to the default color for this button when active\n\t\t// TODO: add ripple effect\n\t\t&:active {\n\t\t\tbackground-color: var(--color-primary-element);\n\t\t}\n\t}\n\n\t// Secondary\n\t&--vue-secondary {\n\t\tcolor: var(--color-primary-element-light-text);\n\t\tbackground-color: var(--color-primary-element-light);\n\t\t&:hover:not(:disabled) {\n\t\t\tcolor: var(--color-primary-element-light-text);\n\t\t\tbackground-color: var(--color-primary-element-light-hover);\n\t\t}\n\t}\n\n\t// Tertiary\n\t&--vue-tertiary {\n\t\tcolor: var(--color-main-text);\n\t\tbackground-color: transparent;\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: var(--color-background-hover);\n\t\t}\n\t}\n\n\t// Tertiary, no background\n\t&--vue-tertiary-no-background {\n\t\tcolor: var(--color-main-text);\n\t\tbackground-color: transparent;\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: transparent;\n\t\t}\n\t}\n\n\t// Tertiary on primary color (like the header)\n\t&--vue-tertiary-on-primary {\n\t\tcolor: var(--color-primary-element-text);\n\t\tbackground-color: transparent;\n\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: transparent;\n\t\t}\n\t}\n\n\t// Success\n\t&--vue-success {\n\t\tbackground-color: var(--color-success);\n\t\tcolor: white;\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: var(--color-success-hover);\n\t\t}\n\t\t// Back to the default color for this button when active\n\t\t// : add ripple effect\n\t\t&:active {\n\t\t\tbackground-color: var(--color-success);\n\t\t}\n\t}\n\n\t// Warning\n\t&--vue-warning {\n\t\tbackground-color: var(--color-warning);\n\t\tcolor: white;\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: var(--color-warning-hover);\n\t\t}\n\t\t// Back to the default color for this button when active\n\t\t// TODO: add ripple effect\n\t\t&:active {\n\t\t\tbackground-color: var(--color-warning);\n\t\t}\n\t}\n\n\t// Error\n\t&--vue-error {\n\t\tbackground-color: var(--color-error);\n\t\tcolor: white;\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: var(--color-error-hover);\n\t\t}\n\t\t// Back to the default color for this button when active\n\t\t// TODO: add ripple effect\n\t\t&:active {\n\t\t\tbackground-color: var(--color-error);\n\t\t}\n\t}\n}\n\n</style>\n"],"names":["_sfc_main","alignment","value","h","hasText","hasIcon","_a","_c","_b","renderButton","navigate","isActive","isExactActive","$event"],"mappings":"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"}
1
+ {"version":3,"file":"NcButton.cjs","sources":["../../src/components/NcButton/NcButton.vue"],"sourcesContent":["<!--\n - @copyright Copyright (c) 2020 Marco Ambrosini <marcoambrosini@icloud.com>\n -\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\n<docs>\n\n### General description\nGeneral purpose button component. See props for different options.\n[Use material design icons only for icons](https://www.npmjs.com/package/vue-material-design-icons) and remember to set their size to 20.\n\n### Usage\n### Custom icon slot\nTo be used with `vue-material-design-icons` only. For icon classes use the `default-icon` slot.\nIt can be used with one or multiple actions.\n```\n<template>\n<div class=\"wrapper\">\n\t<!-- Style selector -->\n\t<div class=\"grid\">\n\t\t<NcCheckboxRadioSwitch :checked.sync=\"style\" value=\"text\" name=\"style\" type=\"radio\">Text only</NcCheckboxRadioSwitch>\n\t\t<NcCheckboxRadioSwitch :checked.sync=\"style\" value=\"icon\" name=\"style\" type=\"radio\">Icon only</NcCheckboxRadioSwitch>\n\t\t<NcCheckboxRadioSwitch :checked.sync=\"style\" value=\"icontext\" name=\"style\" type=\"radio\">Icon and text</NcCheckboxRadioSwitch>\n\t\t<NcCheckboxRadioSwitch :checked.sync=\"disabled\" type=\"checkbox\">Disabled</NcCheckboxRadioSwitch>\n\t\t<!--<NcCheckboxRadioSwitch :checked.sync=\"readonly\" type=\"checkbox\">Read-only</NcCheckboxRadioSwitch>-->\n\t</div>\n\n\t<h5>Standard buttons</h5>\n\t<div class=\"grid\">\n\t\t<p>Tertiary, no background</p>\n\t\t<p>Tertiary</p>\n\t\t<p>Secondary</p>\n\t\t<p>Primary</p>\n\t\t<NcButton\n\t\t\taria-label=\"Example text\"\n\t\t\t:disabled=\"disabled\"\n\t\t\t:readonly=\"readonly\"\n\t\t\ttype=\"tertiary-no-background\">\n\t\t\t<template v-if=\"style.indexOf('icon') !== -1\" #icon>\n\t\t\t\t<Video\n\t\t\t\t\t:size=\"20\" />\n\t\t\t</template>\n\t\t\t<template v-if=\"style.indexOf('text') !== -1\">Example text</template>\n\t\t</NcButton>\n\t\t<NcButton\n\t\t\taria-label=\"Example text\"\n\t\t\t:disabled=\"disabled\"\n\t\t\t:readonly=\"readonly\"\n\t\t\ttype=\"tertiary\">\n\t\t\t<template v-if=\"style.indexOf('icon') !== -1\" #icon>\n\t\t\t\t<Video\n\t\t\t\t\t:size=\"20\" />\n\t\t\t</template>\n\t\t\t<template v-if=\"style.indexOf('text') !== -1\">Example text</template>\n\t\t</NcButton>\n\t\t<NcButton\n\t\t\taria-label=\"Example text\"\n\t\t\t:disabled=\"disabled\"\n\t\t\t:readonly=\"readonly\">\n\t\t\t<template v-if=\"style.indexOf('icon') !== -1\" #icon>\n\t\t\t\t<Video\n\t\t\t\t\t:size=\"20\" />\n\t\t\t</template>\n\t\t\t<template v-if=\"style.indexOf('text') !== -1\">Example text</template>\n\t\t</NcButton>\n\t\t<NcButton\n\t\t\taria-label=\"Example text\"\n\t\t\t:disabled=\"disabled\"\n\t\t\t:readonly=\"readonly\"\n\t\t\ttype=\"primary\">\n\t\t\t<template v-if=\"style.indexOf('icon') !== -1\" #icon>\n\t\t\t\t<Video\n\t\t\t\t\t:size=\"20\" />\n\t\t\t</template>\n\t\t\t<template v-if=\"style.indexOf('text') !== -1\">Example text</template>\n\t\t</NcButton>\n\t</div>\n\n\t<!-- Wide button -->\n\t<h5>Wide button</h5>\n\t<NcButton\n\t\t:disabled=\"disabled\"\n\t\t:readonly=\"readonly\"\n\t\t:wide=\"true\"\n\t\ttext=\"Example text\">\n\t\t<template #icon>\n\t\t\t<Video\n\t\t\t\t:size=\"20\" />\n\t\t</template>\n\t\tExample text\n\t</NcButton>\n\n\t<!-- Special buttons -->\n\t<h5>Special buttons</h5>\n\t<div class=\"grid\">\n\t\t<p>Success</p>\n\t\t<p>Warning</p>\n\t\t<p>Error</p>\n\t\t<p> - </p>\n\t\t<NcButton\n\t\t\t:disabled=\"disabled\"\n\t\t\t:readonly=\"readonly\"\n\t\t\ttype=\"success\">\n\t\t\t<template #icon>\n\t\t\t\t<Video\n\t\t\t\t\t:size=\"20\" />\n\t\t\t</template>\n\t\t\tExample text\n\t\t</NcButton>\n\t\t<NcButton\n\t\t\t:disabled=\"disabled\"\n\t\t\t:readonly=\"readonly\"\n\t\t\ttype=\"warning\">\n\t\t\t<template #icon>\n\t\t\t\t<Video\n\t\t\t\t\t:size=\"20\" />\n\t\t\t</template>\n\t\t\tExample text\n\t\t</NcButton>\n\t\t<NcButton\n\t\t\t:disabled=\"disabled\"\n\t\t\t:readonly=\"readonly\"\n\t\t\ttype=\"error\">\n\t\t\t<template #icon>\n\t\t\t\t<Video\n\t\t\t\t\t:size=\"20\" />\n\t\t\t</template>\n\t\t\tExample text\n\t\t</NcButton>\n\t\t<p> - </p>\n\t</div>\n</div>\n\n</template>\n<script>\nimport Video from 'vue-material-design-icons/Video'\n\nexport default {\n\tcomponents: {\n\t\tVideo,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\ttoggled: false,\n\t\t\tdisabled: false,\n\t\t\treadonly: false,\n\t\t\tstyle: 'icontext',\n\t\t}\n\t}\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.wrapper {\n\tpadding: 0 12px;\n}\n\n.grid {\n\tdisplay: grid;\n\tgrid-template-columns: 1fr 1fr 1fr 1fr;\n\tgrid-template-rows: repeat(auto-fill, auto);\n\tposition: relative;\n\tmargin: 12px 0;\n}\n\nh5 {\n\tfont-weight: bold;\n\tmargin: 40px 0 20px 0;\n}\n\np {\n\ttext-align: center;\n\tmargin: 4px 0 12px 0;\n\tcolor: var(--color-text-maxcontrast)\n}\n\nbutton {\n\tmargin: auto;\n}\n</style>\n```\n\n### Alignment\nSometimes it is required to change the icon alignment on the button, like for switching between pages as in following example:\n\n```vue\n<template>\n\t<div style=\"display: flex; flex-direction: column; gap: 12px;\">\n\t\t<NcButton aria-label=\"center (default)\" type=\"secondary\" wide>\n\t\t\t<template #icon>\n\t\t\t\t<IconLeft :size=\"20\" />\n\t\t\t</template>\n\t\t\tcenter (default)\n\t\t</NcButton>\n\t\t<NcButton alignment=\"center-reverse\" aria-label=\"center-reverse\" type=\"secondary\" wide>\n\t\t\t<template #icon>\n\t\t\t\t<IconRight :size=\"20\" />\n\t\t\t</template>\n\t\t\tcenter-reverse\n\t\t</NcButton>\n\t\t<div style=\"display: flex; gap: 12px;\">\n\t\t\t<div style=\"display: flex; flex-direction: column; gap: 12px; flex: 1\">\n\t\t\t\t<NcButton alignment=\"start\" aria-label=\"start\" type=\"secondary\" wide>\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconLeft :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\tstart\n\t\t\t\t</NcButton>\n\t\t\t\t<NcButton alignment=\"start-reverse\" aria-label=\"start-reverse\" type=\"secondary\" wide>\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconRight :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\tstart-reverse\n\t\t\t\t</NcButton>\n\t\t\t</div>\n\t\t\t<div style=\"display: flex; flex-direction: column; gap: 12px; flex: 1\">\n\t\t\t\t<NcButton alignment=\"end\" aria-label=\"end\" type=\"secondary\" wide>\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconLeft :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\tend\n\t\t\t\t</NcButton>\n\t\t\t\t<NcButton alignment=\"end-reverse\" aria-label=\"end-reverse\" type=\"secondary\" wide>\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconRight :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\tend-reverse\n\t\t\t\t</NcButton>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n<script>\nimport IconLeft from 'vue-material-design-icons/ArrowLeft.vue'\nimport IconRight from 'vue-material-design-icons/ArrowRight.vue'\n\nexport default {\n\tcomponents: {\n\t\tIconLeft,\n\t\tIconRight,\n\t},\n}\n</script>\n```\n\n### Pressed state\n\nIt is possible to make the button stateful by adding a pressed state, e.g. if you like to create a favorite button.\nThe button will have the required `aria` attribute for accessibility and visual style (`primary` when pressed, and the configured type otherwise).\n\nDo not change `text` or `aria-label` of the pressed/unpressed button. See: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-pressed\n\n```vue\n<template>\n\t<div>\n\t\t<div style=\"display: flex; gap: 12px;\">\n\t\t\t<NcButton :pressed.sync=\"isFavorite\" aria-label=\"Favorite\" type=\"tertiary-no-background\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconStar v-if=\"isFavorite\" :size=\"20\" />\n\t\t\t\t\t<IconStarOutline v-else :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\n\t\t\t<NcButton :pressed.sync=\"isFavorite\" type=\"tertiary\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconStar v-if=\"isFavorite\" :size=\"20\" />\n\t\t\t\t\t<IconStarOutline v-else :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\tFavorite\n\t\t\t</NcButton>\n\n\t\t\t<NcButton :pressed.sync=\"isFavorite\" aria-label=\"Favorite\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconStar v-if=\"isFavorite\" :size=\"20\" />\n\t\t\t\t\t<IconStarOutline v-else :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t</div>\n\t\t<div>\n\t\t\tIt is {{ isFavorite ? 'a' : 'not a' }} favorite.\n\t\t</div>\n\t</div>\n</template>\n<script>\nimport IconStar from 'vue-material-design-icons/Star.vue'\nimport IconStarOutline from 'vue-material-design-icons/StarOutline.vue'\n\nexport default {\n\tcomponents: {\n\t\tIconStar,\n\t\tIconStarOutline,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tisFavorite: false,\n\t\t}\n\t},\n\tmethods: {\n\t\ttoggleFavorite() {\n\t\t\tthis.isFavorite = !this.isFavorite\n\t\t},\n\t},\n}\n</script>\n```\n\n### Usage example: Sorting table columns\nThe standard way to implement sortable table column headers should be like this:\n\n```vue\n<template>\n\t<table>\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th :aria-sorted=\"sortedName\" class=\"row-name\">\n\t\t\t\t\t<NcButton alignment=\"start-reverse\"\n\t\t\t\t\t\t:wide=\"true\"\n\t\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t\t@click=\"sortName\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<IconDown v-if=\"sortedName === 'ascending'\" class=\"sort-icon\" :size=\"20\" />\n\t\t\t\t\t\t\t<IconUp v-else-if=\"sortedName === 'descending'\" class=\"sort-icon\" :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<span class=\"table-header\">Name</span>\n\t\t\t\t\t</NcButton>\n\t\t\t\t</th>\n\t\t\t\t<th :aria-sorted=\"sortedSize\" class=\"row-size\">\n\t\t\t\t\t<NcButton alignment=\"end\"\n\t\t\t\t\t\t:wide=\"true\"\n\t\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t\t@click=\"sortSize\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<IconDown v-if=\"sortedSize === 'ascending'\" class=\"sort-icon\" :size=\"20\" />\n\t\t\t\t\t\t\t<IconUp v-else-if=\"sortedSize === 'descending'\" class=\"sort-icon\" :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<span class=\"table-header\">Size</span>\n\t\t\t\t\t</NcButton>\n\t\t\t\t</th>\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td class=\"row-name\">Lorem ipsum</td>\n\t\t\t\t<td class=\"row-size\">8 MiB</td>\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n</template>\n<script>\nimport IconUp from 'vue-material-design-icons/MenuUp.vue'\nimport IconDown from 'vue-material-design-icons/MenuDown.vue'\n\nexport default {\n\tcomponents: {\n\t\tIconUp,\n\t\tIconDown,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tsortedName: null,\n\t\t\tsortedSize: null,\n\t\t}\n\t},\n\tmethods: {\n\t\tsortName() {\n\t\t\tif (this.sortedName === 'ascending') {\n\t\t\t\tthis.sortedName = 'descending'\n\t\t\t} else if (this.sortedName === 'descending') {\n\t\t\t\tthis.sortedName = null\n\t\t\t} else {\n\t\t\t\tthis.sortedName = 'ascending'\n\t\t\t}\n\t\t},\n\t\tsortSize() {\n\t\t\tif (this.sortedSize === 'ascending') {\n\t\t\t\tthis.sortedSize = 'descending'\n\t\t\t} else if (this.sortedSize === 'descending') {\n\t\t\t\tthis.sortedSize = null\n\t\t\t} else {\n\t\t\t\tthis.sortedSize = 'ascending'\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n<style>\ntable {\n\ttable-layout: fixed;\n\twidth: 300px;\n}\n\ntd.row-name {\n\tpadding-inline-start: 16px;\n}\n\ntd.row-size {\n\ttext-align: right;\n\tpadding-inline-end: 16px;\n}\n\n.table-header {\n\tfont-weight: normal;\n\tcolor: var(--color-text-maxcontrast);\n}\n\n.sort-icon {\n\tcolor: var(--color-text-maxcontrast);\n\tposition: relative;\n\tinset-inline: -10px;\n}\n\n.row-size .sort-icon {\n\tinset-inline: 10px;\n}\n</style>\n```\n\n</docs>\n\n<script>\n\nexport default {\n\tname: 'NcButton',\n\n\tinject: {\n\t\tgetNcPopoverTriggerAttrs: {\n\t\t\tfrom: 'NcPopover:trigger:attrs',\n\t\t\tdefault: () => () => ({}),\n\t\t},\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * Set the text and icon alignment\n\t\t *\n\t\t * @default 'center'\n\t\t */\n\t\talignment: {\n\t\t\ttype: String,\n\t\t\tdefault: 'center',\n\t\t\tvalidator: (alignment) => ['start', 'start-reverse', 'center', 'center-reverse', 'end', 'end-reverse'].includes(alignment),\n\t\t},\n\n\t\t/**\n\t\t * Toggles the disabled state of the button on and off.\n\t\t */\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Specifies the button type\n\t\t * Accepted values: primary, secondary, tertiary, tertiary-no-background, tertiary-on-primary, error, warning, success. If left empty,\n\t\t * the default button style will be applied.\n\t\t */\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['primary', 'secondary', 'tertiary', 'tertiary-no-background', 'tertiary-on-primary', 'error', 'warning', 'success'].indexOf(value) !== -1\n\t\t\t},\n\t\t\tdefault: 'secondary',\n\t\t},\n\n\t\t/**\n\t\t * Specifies the button native type\n\t\t * Accepted values: submit, reset, button. If left empty,\n\t\t * the default \"button\" type will be used.\n\t\t */\n\t\tnativeType: {\n\t\t\ttype: String,\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['submit', 'reset', 'button'].indexOf(value) !== -1\n\t\t\t},\n\t\t\tdefault: 'button',\n\t\t},\n\n\t\t/**\n\t\t * Specifies whether the button should span all the available width.\n\t\t * By default, buttons span the whole width of the container.\n\t\t */\n\t\twide: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Always try to provide an aria-label to your button. Make it more\n\t\t * specific than the button's name by provide some more context. E.g. if\n\t\t * the name of the button is \"send\" in the Mail app, the aria label could\n\t\t * be \"Send email\".\n\t\t */\n\t\tariaLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Providing the href attribute turns the button component into an `a`\n\t\t * element.\n\t\t */\n\t\thref: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Providing the download attribute with href downloads file when clicking.\n\t\t */\n\t\tdownload: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Providing the to attribute turns the button component into a `router-link`\n\t\t * element. Takes precedence over the href attribute.\n\t\t */\n\t\tto: {\n\t\t\ttype: [String, Object],\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Pass in `true` if you want the matching behaviour of `router-link` to\n\t\t * be non-inclusive: https://router.vuejs.org/api/#exact\n\t\t */\n\t\texact: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\t/**\n\t\t * @deprecated To be removed in @nextcloud/vue 9. Migration guide: remove ariaHidden prop from NcAction* components.\n\t\t * @todo Add a check in @nextcloud/vue 9 that this prop is not provided,\n\t\t * otherwise root element will inherit incorrect aria-hidden.\n\t\t */\n\t\tariaHidden: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * The pressed state of the button if it has a checked state\n\t\t * This will add the `aria-pressed` attribute and for the button to have the primary style in checked state.\n\t\t *\n\t\t * Pressed state is not supported for links\n\t\t */\n\t\tpressed: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\temits: ['update:pressed', 'click'],\n\n\tcomputed: {\n\t\t/**\n\t\t * The real type to be used for the button, enforces `primary` for pressed state and, if stateful button, any other type for not pressed state\n\t\t * Otherwise the type property is used.\n\t\t */\n\t\trealType() {\n\t\t\t// Force *primary* when pressed\n\t\t\tif (this.pressed) {\n\t\t\t\treturn 'primary'\n\t\t\t}\n\t\t\t// If not pressed but button is configured as stateful button then the type must not be primary\n\t\t\tif (this.pressed === false && this.type === 'primary') {\n\t\t\t\treturn 'secondary'\n\t\t\t}\n\t\t\treturn this.type\n\t\t},\n\n\t\t/**\n\t\t * The flexbox alignment of the button content\n\t\t */\n\t\tflexAlignment() {\n\t\t\treturn this.alignment.split('-')[0]\n\t\t},\n\n\t\t/**\n\t\t * If the button content should be reversed (icon on the end)\n\t\t */\n\t\tisReverseAligned() {\n\t\t\treturn this.alignment.includes('-')\n\t\t},\n\n\t\tncPopoverTriggerAttrs() {\n\t\t\treturn this.getNcPopoverTriggerAttrs()\n\t\t},\n\t},\n\n\t/**\n\t * The render function to display the component\n\t *\n\t * @param {Function} h The function to create VNodes\n\t * @return {object|undefined} The created VNode\n\t */\n\trender(h) {\n\t\tconst hasText = !!this.$slots.default\n\t\tconst hasIcon = this.$slots?.icon\n\n\t\t/**\n\t\t * Always fill either the text prop or the ariaLabel one.\n\t\t */\n\t\tif (!hasText && !this.ariaLabel) {\n\t\t\tconsole.warn('You need to fill either the text or the ariaLabel props in the button component.', {\n\t\t\t\ttext: this.$slots.default?.[0]?.text,\n\t\t\t\tariaLabel: this.ariaLabel,\n\t\t\t},\n\t\t\tthis)\n\t\t}\n\n\t\tconst isLink = (this.to || this.href)\n\n\t\tconst hasPressed = !isLink && typeof this.pressed === 'boolean'\n\n\t\tconst renderButton = ({ href, navigate, isActive, isExactActive } = {}) => h(isLink ? 'a' : 'button',\n\t\t\t{\n\t\t\t\tclass: [\n\t\t\t\t\t'button-vue',\n\t\t\t\t\t{\n\t\t\t\t\t\t'button-vue--icon-only': hasIcon && !hasText,\n\t\t\t\t\t\t'button-vue--text-only': hasText && !hasIcon,\n\t\t\t\t\t\t'button-vue--icon-and-text': hasIcon && hasText,\n\t\t\t\t\t\t[`button-vue--vue-${this.realType}`]: this.realType,\n\t\t\t\t\t\t'button-vue--wide': this.wide,\n\t\t\t\t\t\t[`button-vue--${this.flexAlignment}`]: this.flexAlignment !== 'center',\n\t\t\t\t\t\t'button-vue--reverse': this.isReverseAligned,\n\t\t\t\t\t\tactive: isActive,\n\t\t\t\t\t\t'router-link-exact-active': isExactActive,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tattrs: {\n\t\t\t\t\t'aria-label': this.ariaLabel,\n\t\t\t\t\t'aria-pressed': hasPressed ? this.pressed.toString() : undefined,\n\t\t\t\t\tdisabled: this.disabled,\n\t\t\t\t\ttype: isLink ? null : this.nativeType,\n\t\t\t\t\trole: isLink ? 'button' : null,\n\t\t\t\t\thref: this.to ? href : (this.href || null),\n\t\t\t\t\ttarget: isLink ? '_self' : null,\n\t\t\t\t\trel: isLink ? 'nofollow noreferrer noopener' : null,\n\t\t\t\t\tdownload: (!this.to && this.href && this.download) ? this.download : null,\n\t\t\t\t\t// If this button is used as a popover trigger, we need to apply trigger attrs, e.g. aria attributes\n\t\t\t\t\t...this.ncPopoverTriggerAttrs,\n\t\t\t\t\t// Inherit all the component attrs\n\t\t\t\t\t...this.$attrs,\n\t\t\t\t},\n\t\t\t\ton: {\n\t\t\t\t\t...this.$listeners,\n\t\t\t\t\tclick: ($event) => {\n\t\t\t\t\t\tif (hasPressed) {\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t * Update the current pressed state of the button (if the `pressed` property was configured)\n\t\t\t\t\t\t\t *\n\t\t\t\t\t\t\t * @property {boolean} newValue The new `pressed`-state\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\tthis.$emit('update:pressed', !this.pressed)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// We have to both navigate and emit the click event\n\t\t\t\t\t\tthis.$emit('click', $event)\n\t\t\t\t\t\tnavigate?.($event)\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t[\n\t\t\t\th('span', { class: 'button-vue__wrapper' }, [\n\t\t\t\t\thasIcon\n\t\t\t\t\t\t? h('span', {\n\t\t\t\t\t\t\tclass: 'button-vue__icon',\n\t\t\t\t\t\t\tattrs: {\n\t\t\t\t\t\t\t\t'aria-hidden': 'true',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t[this.$slots.icon],\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: null,\n\t\t\t\t\thasText ? h('span', { class: 'button-vue__text' }, [this.$slots.default]) : null,\n\t\t\t\t]),\n\t\t\t],\n\t\t)\n\n\t\t// If we have a router-link, we wrap the button in it\n\t\tif (this.to) {\n\t\t\treturn h('router-link', {\n\t\t\t\tprops: {\n\t\t\t\t\tcustom: true,\n\t\t\t\t\tto: this.to,\n\t\t\t\t\texact: this.exact,\n\t\t\t\t},\n\t\t\t\tscopedSlots: {\n\t\t\t\t\tdefault: renderButton,\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t\t// Otherwise we simply return the button\n\t\treturn renderButton()\n\t},\n}\n\n</script>\n\n<style lang=\"scss\" scoped>\n\n.button-vue {\n\tposition: relative;\n\twidth: fit-content;\n\toverflow: hidden;\n\tborder: 0;\n\tpadding: 0;\n\tfont-size: var(--default-font-size);\n\tfont-weight: bold;\n\tmin-height: $clickable-area;\n\tmin-width: $clickable-area;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\n\t// Cursor pointer on element and all children\n\tcursor: pointer;\n\t& *,\n\tspan {\n\t\tcursor: pointer;\n\t}\n\tborder-radius: math.div($clickable-area, 2);\n\ttransition-property: color, border-color, background-color;\n\ttransition-duration: 0.1s;\n\ttransition-timing-function: linear;\n\n\t// No outline feedback for focus. Handled with a toggled class in js (see data)\n\t&:focus {\n\t\toutline: none;\n\t}\n\n\t&:disabled {\n\t\tcursor: default;\n\t\t& * {\n\t\t\tcursor: default;\n\t\t}\n\t\topacity: $opacity_disabled;\n\t\t// Gives a wash out effect\n\t\tfilter: saturate($opacity_normal);\n\t}\n\n\t// Default button type\n\tcolor: var(--color-primary-element-light-text);\n\tbackground-color: var(--color-primary-element-light);\n\t&:hover:not(:disabled) {\n\t\tbackground-color: var(--color-primary-element-light-hover);\n\t}\n\n\t// Back to the default color for this button when active\n\t// TODO: add ripple effect\n\t&:active {\n\t\tbackground-color: var(--color-primary-element-light);\n\t}\n\n\t&__wrapper {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\t}\n\n\t&--end &__wrapper {\n\t\tjustify-content: end;\n\t}\n\t&--start &__wrapper {\n\t\tjustify-content: start;\n\t}\n\t&--reverse &__wrapper {\n\t\tflex-direction: row-reverse;\n\t}\n\n\t&--reverse#{&}--icon-and-text {\n\t\tpadding-inline: calc(var(--default-grid-baseline) * 4) var(--default-grid-baseline);\n\t}\n\n\t&__icon {\n\t\theight: $clickable-area;\n\t\twidth: $clickable-area;\n\t\tmin-height: $clickable-area;\n\t\tmin-width: $clickable-area;\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t}\n\n\t&__text {\n\t\tfont-weight: bold;\n\t\tmargin-bottom: 1px;\n\t\tpadding: 2px 0;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\toverflow: hidden;\n\t}\n\n\t// Icon-only button\n\t&--icon-only {\n\t\twidth: $clickable-area !important;\n\t}\n\n\t// Text-only button\n\t&--text-only {\n\t\tpadding: 0 12px;\n\t\t& .button-vue__text {\n\t\t\tmargin-left: 4px;\n\t\t\tmargin-right: 4px;\n\t\t}\n\t}\n\n\t// Icon and text button\n\t&--icon-and-text {\n\t\tpadding-block: 0;\n\t\tpadding-inline: var(--default-grid-baseline) calc(var(--default-grid-baseline) * 4);\n\t}\n\n\t// Wide button spans the whole width of the container\n\t&--wide {\n\t\twidth: 100%;\n\t}\n\n\t&:focus-visible {\n\t\toutline: 2px solid var(--color-main-text) !important;\n\t\tbox-shadow: 0 0 0 4px var(--color-main-background) !important;\n\t\t&.button-vue--vue-tertiary-on-primary {\n\t\t\toutline: 2px solid var(--color-primary-element-text);\n\t\t\tborder-radius: var(--border-radius);\n\t\t\tbackground-color: transparent;\n\t\t}\n\t}\n\n\t// Button types\n\n\t// Primary\n\t&--vue-primary {\n\t\tbackground-color: var(--color-primary-element);\n\t\tcolor: var(--color-primary-element-text);\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: var(--color-primary-element-hover);\n\t\t}\n\t\t// Back to the default color for this button when active\n\t\t// TODO: add ripple effect\n\t\t&:active {\n\t\t\tbackground-color: var(--color-primary-element);\n\t\t}\n\t}\n\n\t// Secondary\n\t&--vue-secondary {\n\t\tcolor: var(--color-primary-element-light-text);\n\t\tbackground-color: var(--color-primary-element-light);\n\t\t&:hover:not(:disabled) {\n\t\t\tcolor: var(--color-primary-element-light-text);\n\t\t\tbackground-color: var(--color-primary-element-light-hover);\n\t\t}\n\t}\n\n\t// Tertiary\n\t&--vue-tertiary {\n\t\tcolor: var(--color-main-text);\n\t\tbackground-color: transparent;\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: var(--color-background-hover);\n\t\t}\n\t}\n\n\t// Tertiary, no background\n\t&--vue-tertiary-no-background {\n\t\tcolor: var(--color-main-text);\n\t\tbackground-color: transparent;\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: transparent;\n\t\t}\n\t}\n\n\t// Tertiary on primary color (like the header)\n\t&--vue-tertiary-on-primary {\n\t\tcolor: var(--color-primary-element-text);\n\t\tbackground-color: transparent;\n\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: transparent;\n\t\t}\n\t}\n\n\t// Success\n\t&--vue-success {\n\t\tbackground-color: var(--color-success);\n\t\tcolor: white;\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: var(--color-success-hover);\n\t\t}\n\t\t// Back to the default color for this button when active\n\t\t// : add ripple effect\n\t\t&:active {\n\t\t\tbackground-color: var(--color-success);\n\t\t}\n\t}\n\n\t// Warning\n\t&--vue-warning {\n\t\tbackground-color: var(--color-warning);\n\t\tcolor: white;\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: var(--color-warning-hover);\n\t\t}\n\t\t// Back to the default color for this button when active\n\t\t// TODO: add ripple effect\n\t\t&:active {\n\t\t\tbackground-color: var(--color-warning);\n\t\t}\n\t}\n\n\t// Error\n\t&--vue-error {\n\t\tbackground-color: var(--color-error);\n\t\tcolor: white;\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: var(--color-error-hover);\n\t\t}\n\t\t// Back to the default color for this button when active\n\t\t// TODO: add ripple effect\n\t\t&:active {\n\t\t\tbackground-color: var(--color-error);\n\t\t}\n\t}\n}\n\n</style>\n"],"names":["_sfc_main","alignment","value","h","hasText","hasIcon","isLink","hasPressed","renderButton","href","navigate","isActive","isExactActive","$event"],"mappings":"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"}
@@ -1,7 +1,13 @@
1
- import "../assets/index-f091e784.css";
2
- import { n as h } from "../chunks/_plugin-vue2_normalizer-71e2aa87.mjs";
3
- const p = {
1
+ import "../assets/NcButton-4Wj3KJn8.css";
2
+ import { n as p } from "../chunks/_plugin-vue2_normalizer-u6G_3nkj.mjs";
3
+ const c = {
4
4
  name: "NcButton",
5
+ inject: {
6
+ getNcPopoverTriggerAttrs: {
7
+ from: "NcPopover:trigger:attrs",
8
+ default: () => () => ({})
9
+ }
10
+ },
5
11
  props: {
6
12
  /**
7
13
  * Set the text and icon alignment
@@ -105,6 +111,8 @@ const p = {
105
111
  /**
106
112
  * The pressed state of the button if it has a checked state
107
113
  * This will add the `aria-pressed` attribute and for the button to have the primary style in checked state.
114
+ *
115
+ * Pressed state is not supported for links
108
116
  */
109
117
  pressed: {
110
118
  type: Boolean,
@@ -131,6 +139,9 @@ const p = {
131
139
  */
132
140
  isReverseAligned() {
133
141
  return this.alignment.includes("-");
142
+ },
143
+ ncPopoverTriggerAttrs() {
144
+ return this.getNcPopoverTriggerAttrs();
134
145
  }
135
146
  },
136
147
  /**
@@ -140,25 +151,24 @@ const p = {
140
151
  * @return {object|undefined} The created VNode
141
152
  */
142
153
  render(t) {
143
- var l, i, o;
144
- const e = !!this.$slots.default, s = (l = this.$slots) == null ? void 0 : l.icon;
145
- !e && !this.ariaLabel && console.warn(
154
+ const r = !!this.$slots.default, n = this.$slots?.icon;
155
+ !r && !this.ariaLabel && console.warn(
146
156
  "You need to fill either the text or the ariaLabel props in the button component.",
147
157
  {
148
- text: (o = (i = this.$slots.default) == null ? void 0 : i[0]) == null ? void 0 : o.text,
158
+ text: this.$slots.default?.[0]?.text,
149
159
  ariaLabel: this.ariaLabel
150
160
  },
151
161
  this
152
162
  );
153
- const r = ({ navigate: n, isActive: u, isExactActive: d } = {}) => t(
154
- this.to || !this.href ? "button" : "a",
163
+ const e = this.to || this.href, s = !e && typeof this.pressed == "boolean", i = ({ href: a, navigate: o, isActive: u, isExactActive: d } = {}) => t(
164
+ e ? "a" : "button",
155
165
  {
156
166
  class: [
157
167
  "button-vue",
158
168
  {
159
- "button-vue--icon-only": s && !e,
160
- "button-vue--text-only": e && !s,
161
- "button-vue--icon-and-text": s && e,
169
+ "button-vue--icon-only": n && !r,
170
+ "button-vue--text-only": r && !n,
171
+ "button-vue--icon-and-text": n && r,
162
172
  [`button-vue--vue-${this.realType}`]: this.realType,
163
173
  "button-vue--wide": this.wide,
164
174
  [`button-vue--${this.flexAlignment}`]: this.flexAlignment !== "center",
@@ -169,26 +179,29 @@ const p = {
169
179
  ],
170
180
  attrs: {
171
181
  "aria-label": this.ariaLabel,
172
- "aria-pressed": this.pressed,
182
+ "aria-pressed": s ? this.pressed.toString() : void 0,
173
183
  disabled: this.disabled,
174
- type: this.href ? null : this.nativeType,
175
- role: this.href ? "button" : null,
176
- href: !this.to && this.href ? this.href : null,
177
- target: !this.to && this.href ? "_self" : null,
178
- rel: !this.to && this.href ? "nofollow noreferrer noopener" : null,
184
+ type: e ? null : this.nativeType,
185
+ role: e ? "button" : null,
186
+ href: this.to ? a : this.href || null,
187
+ target: e ? "_self" : null,
188
+ rel: e ? "nofollow noreferrer noopener" : null,
179
189
  download: !this.to && this.href && this.download ? this.download : null,
190
+ // If this button is used as a popover trigger, we need to apply trigger attrs, e.g. aria attributes
191
+ ...this.ncPopoverTriggerAttrs,
192
+ // Inherit all the component attrs
180
193
  ...this.$attrs
181
194
  },
182
195
  on: {
183
196
  ...this.$listeners,
184
- click: (a) => {
185
- typeof this.pressed == "boolean" && this.$emit("update:pressed", !this.pressed), this.$emit("click", a), n == null || n(a);
197
+ click: (l) => {
198
+ s && this.$emit("update:pressed", !this.pressed), this.$emit("click", l), o?.(l);
186
199
  }
187
200
  }
188
201
  },
189
202
  [
190
203
  t("span", { class: "button-vue__wrapper" }, [
191
- s ? t(
204
+ n ? t(
192
205
  "span",
193
206
  {
194
207
  class: "button-vue__icon",
@@ -198,7 +211,7 @@ const p = {
198
211
  },
199
212
  [this.$slots.icon]
200
213
  ) : null,
201
- e ? t("span", { class: "button-vue__text" }, [this.$slots.default]) : null
214
+ r ? t("span", { class: "button-vue__text" }, [this.$slots.default]) : null
202
215
  ])
203
216
  ]
204
217
  );
@@ -209,22 +222,22 @@ const p = {
209
222
  exact: this.exact
210
223
  },
211
224
  scopedSlots: {
212
- default: r
225
+ default: i
213
226
  }
214
- }) : r();
227
+ }) : i();
215
228
  }
216
- }, c = null, f = null;
217
- var y = /* @__PURE__ */ h(
218
- p,
229
+ }, h = null, f = null;
230
+ var y = /* @__PURE__ */ p(
219
231
  c,
232
+ h,
220
233
  f,
221
234
  !1,
222
235
  null,
223
- "8f4e0666",
236
+ "fe3b5af5",
224
237
  null,
225
238
  null
226
239
  );
227
- const m = y.exports;
240
+ const v = y.exports;
228
241
  export {
229
- m as default
242
+ v as default
230
243
  };
@@ -1 +1 @@
1
- {"version":3,"file":"NcButton.mjs","sources":["../../src/components/NcButton/NcButton.vue"],"sourcesContent":["<!--\n - @copyright Copyright (c) 2020 Marco Ambrosini <marcoambrosini@icloud.com>\n -\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\n<docs>\n\n### General description\nGeneral purpose button component. See props for different options.\n[Use material design icons only for icons](https://www.npmjs.com/package/vue-material-design-icons) and remember to set their size to 20.\n\n### Usage\n### Custom icon slot\nTo be used with `vue-material-design-icons` only. For icon classes use the `default-icon` slot.\nIt can be used with one or multiple actions.\n```\n<template>\n<div class=\"wrapper\">\n\t<!-- Style selector -->\n\t<div class=\"grid\">\n\t\t<NcCheckboxRadioSwitch :checked.sync=\"style\" value=\"text\" name=\"style\" type=\"radio\">Text only</NcCheckboxRadioSwitch>\n\t\t<NcCheckboxRadioSwitch :checked.sync=\"style\" value=\"icon\" name=\"style\" type=\"radio\">Icon only</NcCheckboxRadioSwitch>\n\t\t<NcCheckboxRadioSwitch :checked.sync=\"style\" value=\"icontext\" name=\"style\" type=\"radio\">Icon and text</NcCheckboxRadioSwitch>\n\t\t<NcCheckboxRadioSwitch :checked.sync=\"disabled\" type=\"checkbox\">Disabled</NcCheckboxRadioSwitch>\n\t\t<!--<NcCheckboxRadioSwitch :checked.sync=\"readonly\" type=\"checkbox\">Read-only</NcCheckboxRadioSwitch>-->\n\t</div>\n\n\t<h5>Standard buttons</h5>\n\t<div class=\"grid\">\n\t\t<p>Tertiary, no background</p>\n\t\t<p>Tertiary</p>\n\t\t<p>Secondary</p>\n\t\t<p>Primary</p>\n\t\t<NcButton\n\t\t\taria-label=\"Example text\"\n\t\t\t:disabled=\"disabled\"\n\t\t\t:readonly=\"readonly\"\n\t\t\ttype=\"tertiary-no-background\">\n\t\t\t<template v-if=\"style.indexOf('icon') !== -1\" #icon>\n\t\t\t\t<Video\n\t\t\t\t\t:size=\"20\" />\n\t\t\t</template>\n\t\t\t<template v-if=\"style.indexOf('text') !== -1\">Example text</template>\n\t\t</NcButton>\n\t\t<NcButton\n\t\t\taria-label=\"Example text\"\n\t\t\t:disabled=\"disabled\"\n\t\t\t:readonly=\"readonly\"\n\t\t\ttype=\"tertiary\">\n\t\t\t<template v-if=\"style.indexOf('icon') !== -1\" #icon>\n\t\t\t\t<Video\n\t\t\t\t\t:size=\"20\" />\n\t\t\t</template>\n\t\t\t<template v-if=\"style.indexOf('text') !== -1\">Example text</template>\n\t\t</NcButton>\n\t\t<NcButton\n\t\t\taria-label=\"Example text\"\n\t\t\t:disabled=\"disabled\"\n\t\t\t:readonly=\"readonly\">\n\t\t\t<template v-if=\"style.indexOf('icon') !== -1\" #icon>\n\t\t\t\t<Video\n\t\t\t\t\t:size=\"20\" />\n\t\t\t</template>\n\t\t\t<template v-if=\"style.indexOf('text') !== -1\">Example text</template>\n\t\t</NcButton>\n\t\t<NcButton\n\t\t\taria-label=\"Example text\"\n\t\t\t:disabled=\"disabled\"\n\t\t\t:readonly=\"readonly\"\n\t\t\ttype=\"primary\">\n\t\t\t<template v-if=\"style.indexOf('icon') !== -1\" #icon>\n\t\t\t\t<Video\n\t\t\t\t\t:size=\"20\" />\n\t\t\t</template>\n\t\t\t<template v-if=\"style.indexOf('text') !== -1\">Example text</template>\n\t\t</NcButton>\n\t</div>\n\n\t<!-- Wide button -->\n\t<h5>Wide button</h5>\n\t<NcButton\n\t\t:disabled=\"disabled\"\n\t\t:readonly=\"readonly\"\n\t\t:wide=\"true\"\n\t\ttext=\"Example text\">\n\t\t<template #icon>\n\t\t\t<Video\n\t\t\t\t:size=\"20\" />\n\t\t</template>\n\t\tExample text\n\t</NcButton>\n\n\t<!-- Special buttons -->\n\t<h5>Special buttons</h5>\n\t<div class=\"grid\">\n\t\t<p>Success</p>\n\t\t<p>Warning</p>\n\t\t<p>Error</p>\n\t\t<p> - </p>\n\t\t<NcButton\n\t\t\t:disabled=\"disabled\"\n\t\t\t:readonly=\"readonly\"\n\t\t\ttype=\"success\">\n\t\t\t<template #icon>\n\t\t\t\t<Video\n\t\t\t\t\t:size=\"20\" />\n\t\t\t</template>\n\t\t\tExample text\n\t\t</NcButton>\n\t\t<NcButton\n\t\t\t:disabled=\"disabled\"\n\t\t\t:readonly=\"readonly\"\n\t\t\ttype=\"warning\">\n\t\t\t<template #icon>\n\t\t\t\t<Video\n\t\t\t\t\t:size=\"20\" />\n\t\t\t</template>\n\t\t\tExample text\n\t\t</NcButton>\n\t\t<NcButton\n\t\t\t:disabled=\"disabled\"\n\t\t\t:readonly=\"readonly\"\n\t\t\ttype=\"error\">\n\t\t\t<template #icon>\n\t\t\t\t<Video\n\t\t\t\t\t:size=\"20\" />\n\t\t\t</template>\n\t\t\tExample text\n\t\t</NcButton>\n\t\t<p> - </p>\n\t</div>\n</div>\n\n</template>\n<script>\nimport Video from 'vue-material-design-icons/Video'\n\nexport default {\n\tcomponents: {\n\t\tVideo,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\ttoggled: false,\n\t\t\tdisabled: false,\n\t\t\treadonly: false,\n\t\t\tstyle: 'icontext',\n\t\t}\n\t}\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.wrapper {\n\tpadding: 0 12px;\n}\n\n.grid {\n\tdisplay: grid;\n\tgrid-template-columns: 1fr 1fr 1fr 1fr;\n\tgrid-template-rows: repeat(auto-fill, auto);\n\tposition: relative;\n\tmargin: 12px 0;\n}\n\nh5 {\n\tfont-weight: bold;\n\tmargin: 40px 0 20px 0;\n}\n\np {\n\ttext-align: center;\n\tmargin: 4px 0 12px 0;\n\tcolor: var(--color-text-maxcontrast)\n}\n\nbutton {\n\tmargin: auto;\n}\n</style>\n```\n\n### Alignment\nSometimes it is required to change the icon alignment on the button, like for switching between pages as in following example:\n\n```vue\n<template>\n\t<div style=\"display: flex; flex-direction: column; gap: 12px;\">\n\t\t<NcButton aria-label=\"center (default)\" type=\"secondary\" wide>\n\t\t\t<template #icon>\n\t\t\t\t<IconLeft :size=\"20\" />\n\t\t\t</template>\n\t\t\tcenter (default)\n\t\t</NcButton>\n\t\t<NcButton alignment=\"center-reverse\" aria-label=\"center-reverse\" type=\"secondary\" wide>\n\t\t\t<template #icon>\n\t\t\t\t<IconRight :size=\"20\" />\n\t\t\t</template>\n\t\t\tcenter-reverse\n\t\t</NcButton>\n\t\t<div style=\"display: flex; gap: 12px;\">\n\t\t\t<div style=\"display: flex; flex-direction: column; gap: 12px; flex: 1\">\n\t\t\t\t<NcButton alignment=\"start\" aria-label=\"start\" type=\"secondary\" wide>\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconLeft :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\tstart\n\t\t\t\t</NcButton>\n\t\t\t\t<NcButton alignment=\"start-reverse\" aria-label=\"start-reverse\" type=\"secondary\" wide>\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconRight :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\tstart-reverse\n\t\t\t\t</NcButton>\n\t\t\t</div>\n\t\t\t<div style=\"display: flex; flex-direction: column; gap: 12px; flex: 1\">\n\t\t\t\t<NcButton alignment=\"end\" aria-label=\"end\" type=\"secondary\" wide>\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconLeft :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\tend\n\t\t\t\t</NcButton>\n\t\t\t\t<NcButton alignment=\"end-reverse\" aria-label=\"end-reverse\" type=\"secondary\" wide>\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconRight :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\tend-reverse\n\t\t\t\t</NcButton>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n<script>\nimport IconLeft from 'vue-material-design-icons/ArrowLeft.vue'\nimport IconRight from 'vue-material-design-icons/ArrowRight.vue'\n\nexport default {\n\tcomponents: {\n\t\tIconLeft,\n\t\tIconRight,\n\t},\n}\n</script>\n```\n\n### Pressed state\nIt is possible to make the button stateful by adding a pressed state, e.g. if you like to create a favorite button.\nThe button will have the required `aria` attribute for accessibility and visual style (`primary` when pressed, and the configured type otherwise).\n\n```vue\n<template>\n\t<div>\n\t\t<div style=\"display: flex; gap: 12px;\">\n\t\t\t<NcButton :pressed.sync=\"isFavorite\" :aria-label=\"ariaLabel\" type=\"tertiary-no-background\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconStar v-if=\"isFavorite\" :size=\"20\" />\n\t\t\t\t\t<IconStarOutline v-else :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t\t<NcButton :pressed.sync=\"isFavorite\" :aria-label=\"ariaLabel\" type=\"tertiary\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconStar v-if=\"isFavorite\" :size=\"20\" />\n\t\t\t\t\t<IconStarOutline v-else :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t\t<NcButton :pressed.sync=\"isFavorite\" :aria-label=\"ariaLabel\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconStar v-if=\"isFavorite\" :size=\"20\" />\n\t\t\t\t\t<IconStarOutline v-else :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t</div>\n\t\t<div>\n\t\t\tIt is {{ isFavorite ? 'a' : 'not a' }} favorite.\n\t\t</div>\n\t</div>\n</template>\n<script>\nimport IconStar from 'vue-material-design-icons/Star.vue'\nimport IconStarOutline from 'vue-material-design-icons/StarOutline.vue'\n\nexport default {\n\tcomponents: {\n\t\tIconStar,\n\t\tIconStarOutline,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tisFavorite: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\tariaLabel() {\n\t\t\treturn this.isFavorite ? 'Remove as favorite' : 'Add as favorite'\n\t\t},\n\t},\n\tmethods: {\n\t\ttoggleFavorite() {\n\t\t\tthis.isFavorite = !this.isFavorite\n\t\t},\n\t},\n}\n</script>\n```\n\n### Usage example: Sorting table columns\nThe standard way to implement sortable table column headers should be like this:\n\n```vue\n<template>\n\t<table>\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th :aria-sorted=\"sortedName\" class=\"row-name\">\n\t\t\t\t\t<NcButton alignment=\"start-reverse\"\n\t\t\t\t\t\t:wide=\"true\"\n\t\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t\t@click=\"sortName\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<IconDown v-if=\"sortedName === 'ascending'\" class=\"sort-icon\" :size=\"20\" />\n\t\t\t\t\t\t\t<IconUp v-else-if=\"sortedName === 'descending'\" class=\"sort-icon\" :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<span class=\"table-header\">Name</span>\n\t\t\t\t\t</NcButton>\n\t\t\t\t</th>\n\t\t\t\t<th :aria-sorted=\"sortedSize\" class=\"row-size\">\n\t\t\t\t\t<NcButton alignment=\"end\"\n\t\t\t\t\t\t:wide=\"true\"\n\t\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t\t@click=\"sortSize\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<IconDown v-if=\"sortedSize === 'ascending'\" class=\"sort-icon\" :size=\"20\" />\n\t\t\t\t\t\t\t<IconUp v-else-if=\"sortedSize === 'descending'\" class=\"sort-icon\" :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<span class=\"table-header\">Size</span>\n\t\t\t\t\t</NcButton>\n\t\t\t\t</th>\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td class=\"row-name\">Lorem ipsum</td>\n\t\t\t\t<td class=\"row-size\">8 MiB</td>\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n</template>\n<script>\nimport IconUp from 'vue-material-design-icons/MenuUp.vue'\nimport IconDown from 'vue-material-design-icons/MenuDown.vue'\n\nexport default {\n\tcomponents: {\n\t\tIconUp,\n\t\tIconDown,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tsortedName: null,\n\t\t\tsortedSize: null,\n\t\t}\n\t},\n\tmethods: {\n\t\tsortName() {\n\t\t\tif (this.sortedName === 'ascending') {\n\t\t\t\tthis.sortedName = 'descending'\n\t\t\t} else if (this.sortedName === 'descending') {\n\t\t\t\tthis.sortedName = null\n\t\t\t} else {\n\t\t\t\tthis.sortedName = 'ascending'\n\t\t\t}\n\t\t},\n\t\tsortSize() {\n\t\t\tif (this.sortedSize === 'ascending') {\n\t\t\t\tthis.sortedSize = 'descending'\n\t\t\t} else if (this.sortedSize === 'descending') {\n\t\t\t\tthis.sortedSize = null\n\t\t\t} else {\n\t\t\t\tthis.sortedSize = 'ascending'\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n<style>\ntable {\n\ttable-layout: fixed;\n\twidth: 300px;\n}\n\ntd.row-name {\n\tpadding-inline-start: 16px;\n}\n\ntd.row-size {\n\ttext-align: right;\n\tpadding-inline-end: 16px;\n}\n\n.table-header {\n\tfont-weight: normal;\n\tcolor: var(--color-text-maxcontrast);\n}\n\n.sort-icon {\n\tcolor: var(--color-text-maxcontrast);\n\tposition: relative;\n\tinset-inline: -10px;\n}\n\n.row-size .sort-icon {\n\tinset-inline: 10px;\n}\n</style>\n```\n\n</docs>\n\n<script>\n\nexport default {\n\tname: 'NcButton',\n\n\tprops: {\n\t\t/**\n\t\t * Set the text and icon alignment\n\t\t *\n\t\t * @default 'center'\n\t\t */\n\t\talignment: {\n\t\t\ttype: String,\n\t\t\tdefault: 'center',\n\t\t\tvalidator: (alignment) => ['start', 'start-reverse', 'center', 'center-reverse', 'end', 'end-reverse'].includes(alignment),\n\t\t},\n\n\t\t/**\n\t\t * Toggles the disabled state of the button on and off.\n\t\t */\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Specifies the button type\n\t\t * Accepted values: primary, secondary, tertiary, tertiary-no-background, tertiary-on-primary, error, warning, success. If left empty,\n\t\t * the default button style will be applied.\n\t\t */\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['primary', 'secondary', 'tertiary', 'tertiary-no-background', 'tertiary-on-primary', 'error', 'warning', 'success'].indexOf(value) !== -1\n\t\t\t},\n\t\t\tdefault: 'secondary',\n\t\t},\n\n\t\t/**\n\t\t * Specifies the button native type\n\t\t * Accepted values: submit, reset, button. If left empty,\n\t\t * the default \"button\" type will be used.\n\t\t */\n\t\tnativeType: {\n\t\t\ttype: String,\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['submit', 'reset', 'button'].indexOf(value) !== -1\n\t\t\t},\n\t\t\tdefault: 'button',\n\t\t},\n\n\t\t/**\n\t\t * Specifies whether the button should span all the available width.\n\t\t * By default, buttons span the whole width of the container.\n\t\t */\n\t\twide: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Always try to provide an aria-label to your button. Make it more\n\t\t * specific than the button's name by provide some more context. E.g. if\n\t\t * the name of the button is \"send\" in the Mail app, the aria label could\n\t\t * be \"Send email\".\n\t\t */\n\t\tariaLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Providing the href attribute turns the button component into an `a`\n\t\t * element.\n\t\t */\n\t\thref: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Providing the download attribute with href downloads file when clicking.\n\t\t */\n\t\tdownload: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Providing the to attribute turns the button component into a `router-link`\n\t\t * element. Takes precedence over the href attribute.\n\t\t */\n\t\tto: {\n\t\t\ttype: [String, Object],\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Pass in `true` if you want the matching behaviour of `router-link` to\n\t\t * be non-inclusive: https://router.vuejs.org/api/#exact\n\t\t */\n\t\texact: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\t/**\n\t\t * @deprecated To be removed in @nextcloud/vue 9. Migration guide: remove ariaHidden prop from NcAction* components.\n\t\t * @todo Add a check in @nextcloud/vue 9 that this prop is not provided,\n\t\t * otherwise root element will inherit incorrect aria-hidden.\n\t\t */\n\t\tariaHidden: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * The pressed state of the button if it has a checked state\n\t\t * This will add the `aria-pressed` attribute and for the button to have the primary style in checked state.\n\t\t */\n\t\tpressed: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\temits: ['update:pressed', 'click'],\n\n\tcomputed: {\n\t\t/**\n\t\t * The real type to be used for the button, enforces `primary` for pressed state and, if stateful button, any other type for not pressed state\n\t\t * Otherwise the type property is used.\n\t\t */\n\t\trealType() {\n\t\t\t// Force *primary* when pressed\n\t\t\tif (this.pressed) {\n\t\t\t\treturn 'primary'\n\t\t\t}\n\t\t\t// If not pressed but button is configured as stateful button then the type must not be primary\n\t\t\tif (this.pressed === false && this.type === 'primary') {\n\t\t\t\treturn 'secondary'\n\t\t\t}\n\t\t\treturn this.type\n\t\t},\n\n\t\t/**\n\t\t * The flexbox alignment of the button content\n\t\t */\n\t\tflexAlignment() {\n\t\t\treturn this.alignment.split('-')[0]\n\t\t},\n\n\t\t/**\n\t\t * If the button content should be reversed (icon on the end)\n\t\t */\n\t\tisReverseAligned() {\n\t\t\treturn this.alignment.includes('-')\n\t\t},\n\t},\n\n\t/**\n\t * The render function to display the component\n\t *\n\t * @param {Function} h The function to create VNodes\n\t * @return {object|undefined} The created VNode\n\t */\n\trender(h) {\n\t\tconst hasText = !!this.$slots.default\n\t\tconst hasIcon = this.$slots?.icon\n\n\t\t/**\n\t\t * Always fill either the text prop or the ariaLabel one.\n\t\t */\n\t\tif (!hasText && !this.ariaLabel) {\n\t\t\tconsole.warn('You need to fill either the text or the ariaLabel props in the button component.', {\n\t\t\t\ttext: this.$slots.default?.[0]?.text,\n\t\t\t\tariaLabel: this.ariaLabel,\n\t\t\t},\n\t\t\tthis)\n\t\t}\n\n\t\tconst renderButton = ({ navigate, isActive, isExactActive } = {}) => h((this.to || !this.href) ? 'button' : 'a',\n\t\t\t{\n\t\t\t\tclass: [\n\t\t\t\t\t'button-vue',\n\t\t\t\t\t{\n\t\t\t\t\t\t'button-vue--icon-only': hasIcon && !hasText,\n\t\t\t\t\t\t'button-vue--text-only': hasText && !hasIcon,\n\t\t\t\t\t\t'button-vue--icon-and-text': hasIcon && hasText,\n\t\t\t\t\t\t[`button-vue--vue-${this.realType}`]: this.realType,\n\t\t\t\t\t\t'button-vue--wide': this.wide,\n\t\t\t\t\t\t[`button-vue--${this.flexAlignment}`]: this.flexAlignment !== 'center',\n\t\t\t\t\t\t'button-vue--reverse': this.isReverseAligned,\n\t\t\t\t\t\tactive: isActive,\n\t\t\t\t\t\t'router-link-exact-active': isExactActive,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tattrs: {\n\t\t\t\t\t'aria-label': this.ariaLabel,\n\t\t\t\t\t'aria-pressed': this.pressed,\n\t\t\t\t\tdisabled: this.disabled,\n\t\t\t\t\ttype: this.href ? null : this.nativeType,\n\t\t\t\t\trole: this.href ? 'button' : null,\n\t\t\t\t\thref: (!this.to && this.href) ? this.href : null,\n\t\t\t\t\ttarget: (!this.to && this.href) ? '_self' : null,\n\t\t\t\t\trel: (!this.to && this.href) ? 'nofollow noreferrer noopener' : null,\n\t\t\t\t\tdownload: (!this.to && this.href && this.download) ? this.download : null,\n\t\t\t\t\t...this.$attrs,\n\t\t\t\t},\n\t\t\t\ton: {\n\t\t\t\t\t...this.$listeners,\n\t\t\t\t\tclick: ($event) => {\n\t\t\t\t\t\t// Update pressed prop on click if it is set\n\t\t\t\t\t\tif (typeof this.pressed === 'boolean') {\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t * Update the current pressed state of the button (if the `pressed` property was configured)\n\t\t\t\t\t\t\t *\n\t\t\t\t\t\t\t * @property {boolean} newValue The new `pressed`-state\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\tthis.$emit('update:pressed', !this.pressed)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// We have to both navigate and emit the click event\n\t\t\t\t\t\tthis.$emit('click', $event)\n\t\t\t\t\t\tnavigate?.($event)\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t[\n\t\t\t\th('span', { class: 'button-vue__wrapper' }, [\n\t\t\t\t\thasIcon\n\t\t\t\t\t\t? h('span', {\n\t\t\t\t\t\t\tclass: 'button-vue__icon',\n\t\t\t\t\t\t\tattrs: {\n\t\t\t\t\t\t\t\t'aria-hidden': 'true',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t[this.$slots.icon],\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: null,\n\t\t\t\t\thasText ? h('span', { class: 'button-vue__text' }, [this.$slots.default]) : null,\n\t\t\t\t]),\n\t\t\t],\n\t\t)\n\n\t\t// If we have a router-link, we wrap the button in it\n\t\tif (this.to) {\n\t\t\treturn h('router-link', {\n\t\t\t\tprops: {\n\t\t\t\t\tcustom: true,\n\t\t\t\t\tto: this.to,\n\t\t\t\t\texact: this.exact,\n\t\t\t\t},\n\t\t\t\tscopedSlots: {\n\t\t\t\t\tdefault: renderButton,\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t\t// Otherwise we simply return the button\n\t\treturn renderButton()\n\t},\n}\n\n</script>\n\n<style lang=\"scss\" scoped>\n\n.button-vue {\n\tposition: relative;\n\twidth: fit-content;\n\toverflow: hidden;\n\tborder: 0;\n\tpadding: 0;\n\tfont-size: var(--default-font-size);\n\tfont-weight: bold;\n\tmin-height: $clickable-area;\n\tmin-width: $clickable-area;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\n\t// Cursor pointer on element and all children\n\tcursor: pointer;\n\t& *,\n\tspan {\n\t\tcursor: pointer;\n\t}\n\tborder-radius: math.div($clickable-area, 2);\n\ttransition-property: color, border-color, background-color;\n\ttransition-duration: 0.1s;\n\ttransition-timing-function: linear;\n\n\t// No outline feedback for focus. Handled with a toggled class in js (see data)\n\t&:focus {\n\t\toutline: none;\n\t}\n\n\t&:disabled {\n\t\tcursor: default;\n\t\t& * {\n\t\t\tcursor: default;\n\t\t}\n\t\topacity: $opacity_disabled;\n\t\t// Gives a wash out effect\n\t\tfilter: saturate($opacity_normal);\n\t}\n\n\t// Default button type\n\tcolor: var(--color-primary-element-light-text);\n\tbackground-color: var(--color-primary-element-light);\n\t&:hover:not(:disabled) {\n\t\tbackground-color: var(--color-primary-element-light-hover);\n\t}\n\n\t// Back to the default color for this button when active\n\t// TODO: add ripple effect\n\t&:active {\n\t\tbackground-color: var(--color-primary-element-light);\n\t}\n\n\t&__wrapper {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\t}\n\n\t&--end &__wrapper {\n\t\tjustify-content: end;\n\t}\n\t&--start &__wrapper {\n\t\tjustify-content: start;\n\t}\n\t&--reverse &__wrapper {\n\t\tflex-direction: row-reverse;\n\t}\n\n\t&--reverse#{&}--icon-and-text {\n\t\tpadding-inline: calc(var(--default-grid-baseline) * 4) var(--default-grid-baseline);\n\t}\n\n\t&__icon {\n\t\theight: $clickable-area;\n\t\twidth: $clickable-area;\n\t\tmin-height: $clickable-area;\n\t\tmin-width: $clickable-area;\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t}\n\n\t&__text {\n\t\tfont-weight: bold;\n\t\tmargin-bottom: 1px;\n\t\tpadding: 2px 0;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\toverflow: hidden;\n\t}\n\n\t// Icon-only button\n\t&--icon-only {\n\t\twidth: $clickable-area !important;\n\t}\n\n\t// Text-only button\n\t&--text-only {\n\t\tpadding: 0 12px;\n\t\t& .button-vue__text {\n\t\t\tmargin-left: 4px;\n\t\t\tmargin-right: 4px;\n\t\t}\n\t}\n\n\t// Icon and text button\n\t&--icon-and-text {\n\t\tpadding-block: 0;\n\t\tpadding-inline: var(--default-grid-baseline) calc(var(--default-grid-baseline) * 4);\n\t}\n\n\t// Wide button spans the whole width of the container\n\t&--wide {\n\t\twidth: 100%;\n\t}\n\n\t&:focus-visible {\n\t\toutline: 2px solid var(--color-main-text) !important;\n\t\tbox-shadow: 0 0 0 4px var(--color-main-background) !important;\n\t\t&.button-vue--vue-tertiary-on-primary {\n\t\t\toutline: 2px solid var(--color-primary-element-text);\n\t\t\tborder-radius: var(--border-radius);\n\t\t\tbackground-color: transparent;\n\t\t}\n\t}\n\n\t// Button types\n\n\t// Primary\n\t&--vue-primary {\n\t\tbackground-color: var(--color-primary-element);\n\t\tcolor: var(--color-primary-element-text);\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: var(--color-primary-element-hover);\n\t\t}\n\t\t// Back to the default color for this button when active\n\t\t// TODO: add ripple effect\n\t\t&:active {\n\t\t\tbackground-color: var(--color-primary-element);\n\t\t}\n\t}\n\n\t// Secondary\n\t&--vue-secondary {\n\t\tcolor: var(--color-primary-element-light-text);\n\t\tbackground-color: var(--color-primary-element-light);\n\t\t&:hover:not(:disabled) {\n\t\t\tcolor: var(--color-primary-element-light-text);\n\t\t\tbackground-color: var(--color-primary-element-light-hover);\n\t\t}\n\t}\n\n\t// Tertiary\n\t&--vue-tertiary {\n\t\tcolor: var(--color-main-text);\n\t\tbackground-color: transparent;\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: var(--color-background-hover);\n\t\t}\n\t}\n\n\t// Tertiary, no background\n\t&--vue-tertiary-no-background {\n\t\tcolor: var(--color-main-text);\n\t\tbackground-color: transparent;\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: transparent;\n\t\t}\n\t}\n\n\t// Tertiary on primary color (like the header)\n\t&--vue-tertiary-on-primary {\n\t\tcolor: var(--color-primary-element-text);\n\t\tbackground-color: transparent;\n\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: transparent;\n\t\t}\n\t}\n\n\t// Success\n\t&--vue-success {\n\t\tbackground-color: var(--color-success);\n\t\tcolor: white;\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: var(--color-success-hover);\n\t\t}\n\t\t// Back to the default color for this button when active\n\t\t// : add ripple effect\n\t\t&:active {\n\t\t\tbackground-color: var(--color-success);\n\t\t}\n\t}\n\n\t// Warning\n\t&--vue-warning {\n\t\tbackground-color: var(--color-warning);\n\t\tcolor: white;\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: var(--color-warning-hover);\n\t\t}\n\t\t// Back to the default color for this button when active\n\t\t// TODO: add ripple effect\n\t\t&:active {\n\t\t\tbackground-color: var(--color-warning);\n\t\t}\n\t}\n\n\t// Error\n\t&--vue-error {\n\t\tbackground-color: var(--color-error);\n\t\tcolor: white;\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: var(--color-error-hover);\n\t\t}\n\t\t// Back to the default color for this button when active\n\t\t// TODO: add ripple effect\n\t\t&:active {\n\t\t\tbackground-color: var(--color-error);\n\t\t}\n\t}\n}\n\n</style>\n"],"names":["_sfc_main","alignment","value","h","hasText","hasIcon","_a","_c","_b","renderButton","navigate","isActive","isExactActive","$event"],"mappings":"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"}
1
+ {"version":3,"file":"NcButton.mjs","sources":["../../src/components/NcButton/NcButton.vue"],"sourcesContent":["<!--\n - @copyright Copyright (c) 2020 Marco Ambrosini <marcoambrosini@icloud.com>\n -\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\n<docs>\n\n### General description\nGeneral purpose button component. See props for different options.\n[Use material design icons only for icons](https://www.npmjs.com/package/vue-material-design-icons) and remember to set their size to 20.\n\n### Usage\n### Custom icon slot\nTo be used with `vue-material-design-icons` only. For icon classes use the `default-icon` slot.\nIt can be used with one or multiple actions.\n```\n<template>\n<div class=\"wrapper\">\n\t<!-- Style selector -->\n\t<div class=\"grid\">\n\t\t<NcCheckboxRadioSwitch :checked.sync=\"style\" value=\"text\" name=\"style\" type=\"radio\">Text only</NcCheckboxRadioSwitch>\n\t\t<NcCheckboxRadioSwitch :checked.sync=\"style\" value=\"icon\" name=\"style\" type=\"radio\">Icon only</NcCheckboxRadioSwitch>\n\t\t<NcCheckboxRadioSwitch :checked.sync=\"style\" value=\"icontext\" name=\"style\" type=\"radio\">Icon and text</NcCheckboxRadioSwitch>\n\t\t<NcCheckboxRadioSwitch :checked.sync=\"disabled\" type=\"checkbox\">Disabled</NcCheckboxRadioSwitch>\n\t\t<!--<NcCheckboxRadioSwitch :checked.sync=\"readonly\" type=\"checkbox\">Read-only</NcCheckboxRadioSwitch>-->\n\t</div>\n\n\t<h5>Standard buttons</h5>\n\t<div class=\"grid\">\n\t\t<p>Tertiary, no background</p>\n\t\t<p>Tertiary</p>\n\t\t<p>Secondary</p>\n\t\t<p>Primary</p>\n\t\t<NcButton\n\t\t\taria-label=\"Example text\"\n\t\t\t:disabled=\"disabled\"\n\t\t\t:readonly=\"readonly\"\n\t\t\ttype=\"tertiary-no-background\">\n\t\t\t<template v-if=\"style.indexOf('icon') !== -1\" #icon>\n\t\t\t\t<Video\n\t\t\t\t\t:size=\"20\" />\n\t\t\t</template>\n\t\t\t<template v-if=\"style.indexOf('text') !== -1\">Example text</template>\n\t\t</NcButton>\n\t\t<NcButton\n\t\t\taria-label=\"Example text\"\n\t\t\t:disabled=\"disabled\"\n\t\t\t:readonly=\"readonly\"\n\t\t\ttype=\"tertiary\">\n\t\t\t<template v-if=\"style.indexOf('icon') !== -1\" #icon>\n\t\t\t\t<Video\n\t\t\t\t\t:size=\"20\" />\n\t\t\t</template>\n\t\t\t<template v-if=\"style.indexOf('text') !== -1\">Example text</template>\n\t\t</NcButton>\n\t\t<NcButton\n\t\t\taria-label=\"Example text\"\n\t\t\t:disabled=\"disabled\"\n\t\t\t:readonly=\"readonly\">\n\t\t\t<template v-if=\"style.indexOf('icon') !== -1\" #icon>\n\t\t\t\t<Video\n\t\t\t\t\t:size=\"20\" />\n\t\t\t</template>\n\t\t\t<template v-if=\"style.indexOf('text') !== -1\">Example text</template>\n\t\t</NcButton>\n\t\t<NcButton\n\t\t\taria-label=\"Example text\"\n\t\t\t:disabled=\"disabled\"\n\t\t\t:readonly=\"readonly\"\n\t\t\ttype=\"primary\">\n\t\t\t<template v-if=\"style.indexOf('icon') !== -1\" #icon>\n\t\t\t\t<Video\n\t\t\t\t\t:size=\"20\" />\n\t\t\t</template>\n\t\t\t<template v-if=\"style.indexOf('text') !== -1\">Example text</template>\n\t\t</NcButton>\n\t</div>\n\n\t<!-- Wide button -->\n\t<h5>Wide button</h5>\n\t<NcButton\n\t\t:disabled=\"disabled\"\n\t\t:readonly=\"readonly\"\n\t\t:wide=\"true\"\n\t\ttext=\"Example text\">\n\t\t<template #icon>\n\t\t\t<Video\n\t\t\t\t:size=\"20\" />\n\t\t</template>\n\t\tExample text\n\t</NcButton>\n\n\t<!-- Special buttons -->\n\t<h5>Special buttons</h5>\n\t<div class=\"grid\">\n\t\t<p>Success</p>\n\t\t<p>Warning</p>\n\t\t<p>Error</p>\n\t\t<p> - </p>\n\t\t<NcButton\n\t\t\t:disabled=\"disabled\"\n\t\t\t:readonly=\"readonly\"\n\t\t\ttype=\"success\">\n\t\t\t<template #icon>\n\t\t\t\t<Video\n\t\t\t\t\t:size=\"20\" />\n\t\t\t</template>\n\t\t\tExample text\n\t\t</NcButton>\n\t\t<NcButton\n\t\t\t:disabled=\"disabled\"\n\t\t\t:readonly=\"readonly\"\n\t\t\ttype=\"warning\">\n\t\t\t<template #icon>\n\t\t\t\t<Video\n\t\t\t\t\t:size=\"20\" />\n\t\t\t</template>\n\t\t\tExample text\n\t\t</NcButton>\n\t\t<NcButton\n\t\t\t:disabled=\"disabled\"\n\t\t\t:readonly=\"readonly\"\n\t\t\ttype=\"error\">\n\t\t\t<template #icon>\n\t\t\t\t<Video\n\t\t\t\t\t:size=\"20\" />\n\t\t\t</template>\n\t\t\tExample text\n\t\t</NcButton>\n\t\t<p> - </p>\n\t</div>\n</div>\n\n</template>\n<script>\nimport Video from 'vue-material-design-icons/Video'\n\nexport default {\n\tcomponents: {\n\t\tVideo,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\ttoggled: false,\n\t\t\tdisabled: false,\n\t\t\treadonly: false,\n\t\t\tstyle: 'icontext',\n\t\t}\n\t}\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.wrapper {\n\tpadding: 0 12px;\n}\n\n.grid {\n\tdisplay: grid;\n\tgrid-template-columns: 1fr 1fr 1fr 1fr;\n\tgrid-template-rows: repeat(auto-fill, auto);\n\tposition: relative;\n\tmargin: 12px 0;\n}\n\nh5 {\n\tfont-weight: bold;\n\tmargin: 40px 0 20px 0;\n}\n\np {\n\ttext-align: center;\n\tmargin: 4px 0 12px 0;\n\tcolor: var(--color-text-maxcontrast)\n}\n\nbutton {\n\tmargin: auto;\n}\n</style>\n```\n\n### Alignment\nSometimes it is required to change the icon alignment on the button, like for switching between pages as in following example:\n\n```vue\n<template>\n\t<div style=\"display: flex; flex-direction: column; gap: 12px;\">\n\t\t<NcButton aria-label=\"center (default)\" type=\"secondary\" wide>\n\t\t\t<template #icon>\n\t\t\t\t<IconLeft :size=\"20\" />\n\t\t\t</template>\n\t\t\tcenter (default)\n\t\t</NcButton>\n\t\t<NcButton alignment=\"center-reverse\" aria-label=\"center-reverse\" type=\"secondary\" wide>\n\t\t\t<template #icon>\n\t\t\t\t<IconRight :size=\"20\" />\n\t\t\t</template>\n\t\t\tcenter-reverse\n\t\t</NcButton>\n\t\t<div style=\"display: flex; gap: 12px;\">\n\t\t\t<div style=\"display: flex; flex-direction: column; gap: 12px; flex: 1\">\n\t\t\t\t<NcButton alignment=\"start\" aria-label=\"start\" type=\"secondary\" wide>\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconLeft :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\tstart\n\t\t\t\t</NcButton>\n\t\t\t\t<NcButton alignment=\"start-reverse\" aria-label=\"start-reverse\" type=\"secondary\" wide>\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconRight :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\tstart-reverse\n\t\t\t\t</NcButton>\n\t\t\t</div>\n\t\t\t<div style=\"display: flex; flex-direction: column; gap: 12px; flex: 1\">\n\t\t\t\t<NcButton alignment=\"end\" aria-label=\"end\" type=\"secondary\" wide>\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconLeft :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\tend\n\t\t\t\t</NcButton>\n\t\t\t\t<NcButton alignment=\"end-reverse\" aria-label=\"end-reverse\" type=\"secondary\" wide>\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconRight :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\tend-reverse\n\t\t\t\t</NcButton>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n<script>\nimport IconLeft from 'vue-material-design-icons/ArrowLeft.vue'\nimport IconRight from 'vue-material-design-icons/ArrowRight.vue'\n\nexport default {\n\tcomponents: {\n\t\tIconLeft,\n\t\tIconRight,\n\t},\n}\n</script>\n```\n\n### Pressed state\n\nIt is possible to make the button stateful by adding a pressed state, e.g. if you like to create a favorite button.\nThe button will have the required `aria` attribute for accessibility and visual style (`primary` when pressed, and the configured type otherwise).\n\nDo not change `text` or `aria-label` of the pressed/unpressed button. See: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-pressed\n\n```vue\n<template>\n\t<div>\n\t\t<div style=\"display: flex; gap: 12px;\">\n\t\t\t<NcButton :pressed.sync=\"isFavorite\" aria-label=\"Favorite\" type=\"tertiary-no-background\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconStar v-if=\"isFavorite\" :size=\"20\" />\n\t\t\t\t\t<IconStarOutline v-else :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\n\t\t\t<NcButton :pressed.sync=\"isFavorite\" type=\"tertiary\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconStar v-if=\"isFavorite\" :size=\"20\" />\n\t\t\t\t\t<IconStarOutline v-else :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\tFavorite\n\t\t\t</NcButton>\n\n\t\t\t<NcButton :pressed.sync=\"isFavorite\" aria-label=\"Favorite\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconStar v-if=\"isFavorite\" :size=\"20\" />\n\t\t\t\t\t<IconStarOutline v-else :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t</div>\n\t\t<div>\n\t\t\tIt is {{ isFavorite ? 'a' : 'not a' }} favorite.\n\t\t</div>\n\t</div>\n</template>\n<script>\nimport IconStar from 'vue-material-design-icons/Star.vue'\nimport IconStarOutline from 'vue-material-design-icons/StarOutline.vue'\n\nexport default {\n\tcomponents: {\n\t\tIconStar,\n\t\tIconStarOutline,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tisFavorite: false,\n\t\t}\n\t},\n\tmethods: {\n\t\ttoggleFavorite() {\n\t\t\tthis.isFavorite = !this.isFavorite\n\t\t},\n\t},\n}\n</script>\n```\n\n### Usage example: Sorting table columns\nThe standard way to implement sortable table column headers should be like this:\n\n```vue\n<template>\n\t<table>\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th :aria-sorted=\"sortedName\" class=\"row-name\">\n\t\t\t\t\t<NcButton alignment=\"start-reverse\"\n\t\t\t\t\t\t:wide=\"true\"\n\t\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t\t@click=\"sortName\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<IconDown v-if=\"sortedName === 'ascending'\" class=\"sort-icon\" :size=\"20\" />\n\t\t\t\t\t\t\t<IconUp v-else-if=\"sortedName === 'descending'\" class=\"sort-icon\" :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<span class=\"table-header\">Name</span>\n\t\t\t\t\t</NcButton>\n\t\t\t\t</th>\n\t\t\t\t<th :aria-sorted=\"sortedSize\" class=\"row-size\">\n\t\t\t\t\t<NcButton alignment=\"end\"\n\t\t\t\t\t\t:wide=\"true\"\n\t\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t\t@click=\"sortSize\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<IconDown v-if=\"sortedSize === 'ascending'\" class=\"sort-icon\" :size=\"20\" />\n\t\t\t\t\t\t\t<IconUp v-else-if=\"sortedSize === 'descending'\" class=\"sort-icon\" :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<span class=\"table-header\">Size</span>\n\t\t\t\t\t</NcButton>\n\t\t\t\t</th>\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td class=\"row-name\">Lorem ipsum</td>\n\t\t\t\t<td class=\"row-size\">8 MiB</td>\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n</template>\n<script>\nimport IconUp from 'vue-material-design-icons/MenuUp.vue'\nimport IconDown from 'vue-material-design-icons/MenuDown.vue'\n\nexport default {\n\tcomponents: {\n\t\tIconUp,\n\t\tIconDown,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tsortedName: null,\n\t\t\tsortedSize: null,\n\t\t}\n\t},\n\tmethods: {\n\t\tsortName() {\n\t\t\tif (this.sortedName === 'ascending') {\n\t\t\t\tthis.sortedName = 'descending'\n\t\t\t} else if (this.sortedName === 'descending') {\n\t\t\t\tthis.sortedName = null\n\t\t\t} else {\n\t\t\t\tthis.sortedName = 'ascending'\n\t\t\t}\n\t\t},\n\t\tsortSize() {\n\t\t\tif (this.sortedSize === 'ascending') {\n\t\t\t\tthis.sortedSize = 'descending'\n\t\t\t} else if (this.sortedSize === 'descending') {\n\t\t\t\tthis.sortedSize = null\n\t\t\t} else {\n\t\t\t\tthis.sortedSize = 'ascending'\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n<style>\ntable {\n\ttable-layout: fixed;\n\twidth: 300px;\n}\n\ntd.row-name {\n\tpadding-inline-start: 16px;\n}\n\ntd.row-size {\n\ttext-align: right;\n\tpadding-inline-end: 16px;\n}\n\n.table-header {\n\tfont-weight: normal;\n\tcolor: var(--color-text-maxcontrast);\n}\n\n.sort-icon {\n\tcolor: var(--color-text-maxcontrast);\n\tposition: relative;\n\tinset-inline: -10px;\n}\n\n.row-size .sort-icon {\n\tinset-inline: 10px;\n}\n</style>\n```\n\n</docs>\n\n<script>\n\nexport default {\n\tname: 'NcButton',\n\n\tinject: {\n\t\tgetNcPopoverTriggerAttrs: {\n\t\t\tfrom: 'NcPopover:trigger:attrs',\n\t\t\tdefault: () => () => ({}),\n\t\t},\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * Set the text and icon alignment\n\t\t *\n\t\t * @default 'center'\n\t\t */\n\t\talignment: {\n\t\t\ttype: String,\n\t\t\tdefault: 'center',\n\t\t\tvalidator: (alignment) => ['start', 'start-reverse', 'center', 'center-reverse', 'end', 'end-reverse'].includes(alignment),\n\t\t},\n\n\t\t/**\n\t\t * Toggles the disabled state of the button on and off.\n\t\t */\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Specifies the button type\n\t\t * Accepted values: primary, secondary, tertiary, tertiary-no-background, tertiary-on-primary, error, warning, success. If left empty,\n\t\t * the default button style will be applied.\n\t\t */\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['primary', 'secondary', 'tertiary', 'tertiary-no-background', 'tertiary-on-primary', 'error', 'warning', 'success'].indexOf(value) !== -1\n\t\t\t},\n\t\t\tdefault: 'secondary',\n\t\t},\n\n\t\t/**\n\t\t * Specifies the button native type\n\t\t * Accepted values: submit, reset, button. If left empty,\n\t\t * the default \"button\" type will be used.\n\t\t */\n\t\tnativeType: {\n\t\t\ttype: String,\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['submit', 'reset', 'button'].indexOf(value) !== -1\n\t\t\t},\n\t\t\tdefault: 'button',\n\t\t},\n\n\t\t/**\n\t\t * Specifies whether the button should span all the available width.\n\t\t * By default, buttons span the whole width of the container.\n\t\t */\n\t\twide: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Always try to provide an aria-label to your button. Make it more\n\t\t * specific than the button's name by provide some more context. E.g. if\n\t\t * the name of the button is \"send\" in the Mail app, the aria label could\n\t\t * be \"Send email\".\n\t\t */\n\t\tariaLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Providing the href attribute turns the button component into an `a`\n\t\t * element.\n\t\t */\n\t\thref: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Providing the download attribute with href downloads file when clicking.\n\t\t */\n\t\tdownload: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Providing the to attribute turns the button component into a `router-link`\n\t\t * element. Takes precedence over the href attribute.\n\t\t */\n\t\tto: {\n\t\t\ttype: [String, Object],\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Pass in `true` if you want the matching behaviour of `router-link` to\n\t\t * be non-inclusive: https://router.vuejs.org/api/#exact\n\t\t */\n\t\texact: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\t/**\n\t\t * @deprecated To be removed in @nextcloud/vue 9. Migration guide: remove ariaHidden prop from NcAction* components.\n\t\t * @todo Add a check in @nextcloud/vue 9 that this prop is not provided,\n\t\t * otherwise root element will inherit incorrect aria-hidden.\n\t\t */\n\t\tariaHidden: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * The pressed state of the button if it has a checked state\n\t\t * This will add the `aria-pressed` attribute and for the button to have the primary style in checked state.\n\t\t *\n\t\t * Pressed state is not supported for links\n\t\t */\n\t\tpressed: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\temits: ['update:pressed', 'click'],\n\n\tcomputed: {\n\t\t/**\n\t\t * The real type to be used for the button, enforces `primary` for pressed state and, if stateful button, any other type for not pressed state\n\t\t * Otherwise the type property is used.\n\t\t */\n\t\trealType() {\n\t\t\t// Force *primary* when pressed\n\t\t\tif (this.pressed) {\n\t\t\t\treturn 'primary'\n\t\t\t}\n\t\t\t// If not pressed but button is configured as stateful button then the type must not be primary\n\t\t\tif (this.pressed === false && this.type === 'primary') {\n\t\t\t\treturn 'secondary'\n\t\t\t}\n\t\t\treturn this.type\n\t\t},\n\n\t\t/**\n\t\t * The flexbox alignment of the button content\n\t\t */\n\t\tflexAlignment() {\n\t\t\treturn this.alignment.split('-')[0]\n\t\t},\n\n\t\t/**\n\t\t * If the button content should be reversed (icon on the end)\n\t\t */\n\t\tisReverseAligned() {\n\t\t\treturn this.alignment.includes('-')\n\t\t},\n\n\t\tncPopoverTriggerAttrs() {\n\t\t\treturn this.getNcPopoverTriggerAttrs()\n\t\t},\n\t},\n\n\t/**\n\t * The render function to display the component\n\t *\n\t * @param {Function} h The function to create VNodes\n\t * @return {object|undefined} The created VNode\n\t */\n\trender(h) {\n\t\tconst hasText = !!this.$slots.default\n\t\tconst hasIcon = this.$slots?.icon\n\n\t\t/**\n\t\t * Always fill either the text prop or the ariaLabel one.\n\t\t */\n\t\tif (!hasText && !this.ariaLabel) {\n\t\t\tconsole.warn('You need to fill either the text or the ariaLabel props in the button component.', {\n\t\t\t\ttext: this.$slots.default?.[0]?.text,\n\t\t\t\tariaLabel: this.ariaLabel,\n\t\t\t},\n\t\t\tthis)\n\t\t}\n\n\t\tconst isLink = (this.to || this.href)\n\n\t\tconst hasPressed = !isLink && typeof this.pressed === 'boolean'\n\n\t\tconst renderButton = ({ href, navigate, isActive, isExactActive } = {}) => h(isLink ? 'a' : 'button',\n\t\t\t{\n\t\t\t\tclass: [\n\t\t\t\t\t'button-vue',\n\t\t\t\t\t{\n\t\t\t\t\t\t'button-vue--icon-only': hasIcon && !hasText,\n\t\t\t\t\t\t'button-vue--text-only': hasText && !hasIcon,\n\t\t\t\t\t\t'button-vue--icon-and-text': hasIcon && hasText,\n\t\t\t\t\t\t[`button-vue--vue-${this.realType}`]: this.realType,\n\t\t\t\t\t\t'button-vue--wide': this.wide,\n\t\t\t\t\t\t[`button-vue--${this.flexAlignment}`]: this.flexAlignment !== 'center',\n\t\t\t\t\t\t'button-vue--reverse': this.isReverseAligned,\n\t\t\t\t\t\tactive: isActive,\n\t\t\t\t\t\t'router-link-exact-active': isExactActive,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tattrs: {\n\t\t\t\t\t'aria-label': this.ariaLabel,\n\t\t\t\t\t'aria-pressed': hasPressed ? this.pressed.toString() : undefined,\n\t\t\t\t\tdisabled: this.disabled,\n\t\t\t\t\ttype: isLink ? null : this.nativeType,\n\t\t\t\t\trole: isLink ? 'button' : null,\n\t\t\t\t\thref: this.to ? href : (this.href || null),\n\t\t\t\t\ttarget: isLink ? '_self' : null,\n\t\t\t\t\trel: isLink ? 'nofollow noreferrer noopener' : null,\n\t\t\t\t\tdownload: (!this.to && this.href && this.download) ? this.download : null,\n\t\t\t\t\t// If this button is used as a popover trigger, we need to apply trigger attrs, e.g. aria attributes\n\t\t\t\t\t...this.ncPopoverTriggerAttrs,\n\t\t\t\t\t// Inherit all the component attrs\n\t\t\t\t\t...this.$attrs,\n\t\t\t\t},\n\t\t\t\ton: {\n\t\t\t\t\t...this.$listeners,\n\t\t\t\t\tclick: ($event) => {\n\t\t\t\t\t\tif (hasPressed) {\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t * Update the current pressed state of the button (if the `pressed` property was configured)\n\t\t\t\t\t\t\t *\n\t\t\t\t\t\t\t * @property {boolean} newValue The new `pressed`-state\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\tthis.$emit('update:pressed', !this.pressed)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// We have to both navigate and emit the click event\n\t\t\t\t\t\tthis.$emit('click', $event)\n\t\t\t\t\t\tnavigate?.($event)\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t[\n\t\t\t\th('span', { class: 'button-vue__wrapper' }, [\n\t\t\t\t\thasIcon\n\t\t\t\t\t\t? h('span', {\n\t\t\t\t\t\t\tclass: 'button-vue__icon',\n\t\t\t\t\t\t\tattrs: {\n\t\t\t\t\t\t\t\t'aria-hidden': 'true',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t[this.$slots.icon],\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: null,\n\t\t\t\t\thasText ? h('span', { class: 'button-vue__text' }, [this.$slots.default]) : null,\n\t\t\t\t]),\n\t\t\t],\n\t\t)\n\n\t\t// If we have a router-link, we wrap the button in it\n\t\tif (this.to) {\n\t\t\treturn h('router-link', {\n\t\t\t\tprops: {\n\t\t\t\t\tcustom: true,\n\t\t\t\t\tto: this.to,\n\t\t\t\t\texact: this.exact,\n\t\t\t\t},\n\t\t\t\tscopedSlots: {\n\t\t\t\t\tdefault: renderButton,\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t\t// Otherwise we simply return the button\n\t\treturn renderButton()\n\t},\n}\n\n</script>\n\n<style lang=\"scss\" scoped>\n\n.button-vue {\n\tposition: relative;\n\twidth: fit-content;\n\toverflow: hidden;\n\tborder: 0;\n\tpadding: 0;\n\tfont-size: var(--default-font-size);\n\tfont-weight: bold;\n\tmin-height: $clickable-area;\n\tmin-width: $clickable-area;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\n\t// Cursor pointer on element and all children\n\tcursor: pointer;\n\t& *,\n\tspan {\n\t\tcursor: pointer;\n\t}\n\tborder-radius: math.div($clickable-area, 2);\n\ttransition-property: color, border-color, background-color;\n\ttransition-duration: 0.1s;\n\ttransition-timing-function: linear;\n\n\t// No outline feedback for focus. Handled with a toggled class in js (see data)\n\t&:focus {\n\t\toutline: none;\n\t}\n\n\t&:disabled {\n\t\tcursor: default;\n\t\t& * {\n\t\t\tcursor: default;\n\t\t}\n\t\topacity: $opacity_disabled;\n\t\t// Gives a wash out effect\n\t\tfilter: saturate($opacity_normal);\n\t}\n\n\t// Default button type\n\tcolor: var(--color-primary-element-light-text);\n\tbackground-color: var(--color-primary-element-light);\n\t&:hover:not(:disabled) {\n\t\tbackground-color: var(--color-primary-element-light-hover);\n\t}\n\n\t// Back to the default color for this button when active\n\t// TODO: add ripple effect\n\t&:active {\n\t\tbackground-color: var(--color-primary-element-light);\n\t}\n\n\t&__wrapper {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\t}\n\n\t&--end &__wrapper {\n\t\tjustify-content: end;\n\t}\n\t&--start &__wrapper {\n\t\tjustify-content: start;\n\t}\n\t&--reverse &__wrapper {\n\t\tflex-direction: row-reverse;\n\t}\n\n\t&--reverse#{&}--icon-and-text {\n\t\tpadding-inline: calc(var(--default-grid-baseline) * 4) var(--default-grid-baseline);\n\t}\n\n\t&__icon {\n\t\theight: $clickable-area;\n\t\twidth: $clickable-area;\n\t\tmin-height: $clickable-area;\n\t\tmin-width: $clickable-area;\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t}\n\n\t&__text {\n\t\tfont-weight: bold;\n\t\tmargin-bottom: 1px;\n\t\tpadding: 2px 0;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\toverflow: hidden;\n\t}\n\n\t// Icon-only button\n\t&--icon-only {\n\t\twidth: $clickable-area !important;\n\t}\n\n\t// Text-only button\n\t&--text-only {\n\t\tpadding: 0 12px;\n\t\t& .button-vue__text {\n\t\t\tmargin-left: 4px;\n\t\t\tmargin-right: 4px;\n\t\t}\n\t}\n\n\t// Icon and text button\n\t&--icon-and-text {\n\t\tpadding-block: 0;\n\t\tpadding-inline: var(--default-grid-baseline) calc(var(--default-grid-baseline) * 4);\n\t}\n\n\t// Wide button spans the whole width of the container\n\t&--wide {\n\t\twidth: 100%;\n\t}\n\n\t&:focus-visible {\n\t\toutline: 2px solid var(--color-main-text) !important;\n\t\tbox-shadow: 0 0 0 4px var(--color-main-background) !important;\n\t\t&.button-vue--vue-tertiary-on-primary {\n\t\t\toutline: 2px solid var(--color-primary-element-text);\n\t\t\tborder-radius: var(--border-radius);\n\t\t\tbackground-color: transparent;\n\t\t}\n\t}\n\n\t// Button types\n\n\t// Primary\n\t&--vue-primary {\n\t\tbackground-color: var(--color-primary-element);\n\t\tcolor: var(--color-primary-element-text);\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: var(--color-primary-element-hover);\n\t\t}\n\t\t// Back to the default color for this button when active\n\t\t// TODO: add ripple effect\n\t\t&:active {\n\t\t\tbackground-color: var(--color-primary-element);\n\t\t}\n\t}\n\n\t// Secondary\n\t&--vue-secondary {\n\t\tcolor: var(--color-primary-element-light-text);\n\t\tbackground-color: var(--color-primary-element-light);\n\t\t&:hover:not(:disabled) {\n\t\t\tcolor: var(--color-primary-element-light-text);\n\t\t\tbackground-color: var(--color-primary-element-light-hover);\n\t\t}\n\t}\n\n\t// Tertiary\n\t&--vue-tertiary {\n\t\tcolor: var(--color-main-text);\n\t\tbackground-color: transparent;\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: var(--color-background-hover);\n\t\t}\n\t}\n\n\t// Tertiary, no background\n\t&--vue-tertiary-no-background {\n\t\tcolor: var(--color-main-text);\n\t\tbackground-color: transparent;\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: transparent;\n\t\t}\n\t}\n\n\t// Tertiary on primary color (like the header)\n\t&--vue-tertiary-on-primary {\n\t\tcolor: var(--color-primary-element-text);\n\t\tbackground-color: transparent;\n\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: transparent;\n\t\t}\n\t}\n\n\t// Success\n\t&--vue-success {\n\t\tbackground-color: var(--color-success);\n\t\tcolor: white;\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: var(--color-success-hover);\n\t\t}\n\t\t// Back to the default color for this button when active\n\t\t// : add ripple effect\n\t\t&:active {\n\t\t\tbackground-color: var(--color-success);\n\t\t}\n\t}\n\n\t// Warning\n\t&--vue-warning {\n\t\tbackground-color: var(--color-warning);\n\t\tcolor: white;\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: var(--color-warning-hover);\n\t\t}\n\t\t// Back to the default color for this button when active\n\t\t// TODO: add ripple effect\n\t\t&:active {\n\t\t\tbackground-color: var(--color-warning);\n\t\t}\n\t}\n\n\t// Error\n\t&--vue-error {\n\t\tbackground-color: var(--color-error);\n\t\tcolor: white;\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: var(--color-error-hover);\n\t\t}\n\t\t// Back to the default color for this button when active\n\t\t// TODO: add ripple effect\n\t\t&:active {\n\t\t\tbackground-color: var(--color-error);\n\t\t}\n\t}\n}\n\n</style>\n"],"names":["_sfc_main","alignment","value","h","hasText","hasIcon","isLink","hasPressed","renderButton","href","navigate","isActive","isExactActive","$event"],"mappings":"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"}