@leaflink/stash 51.9.3 → 51.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (375) hide show
  1. package/assets/icons/cloud-share.svg +1 -0
  2. package/assets/spritesheet.svg +1 -1
  3. package/dist/Accordion.js.map +1 -1
  4. package/dist/Accordion.vue.d.ts +7 -38
  5. package/dist/ActionsDropdown.js +2 -2
  6. package/dist/ActionsDropdown.js.map +1 -1
  7. package/dist/ActionsDropdown.vue.d.ts +0 -74
  8. package/dist/AddressSelect.js +56 -60
  9. package/dist/AddressSelect.js.map +1 -1
  10. package/dist/AddressSelect.vue.d.ts +8 -65
  11. package/dist/Alert.js.map +1 -1
  12. package/dist/Alert.vue.d.ts +4 -41
  13. package/dist/AppNavigationItem.js.map +1 -1
  14. package/dist/AppNavigationItem.vue.d.ts +5 -32
  15. package/dist/AppSidebar.js.map +1 -1
  16. package/dist/AppSidebar.vue.d.ts +8 -35
  17. package/dist/AppTopbar.js +1 -1
  18. package/dist/AppTopbar.js.map +1 -1
  19. package/dist/AppTopbar.vue.d.ts +4 -33
  20. package/dist/Avatar.js.map +1 -1
  21. package/dist/Avatar.vue.d.ts +5 -44
  22. package/dist/Backdrop.js.map +1 -1
  23. package/dist/Backdrop.vue.d.ts +1 -1
  24. package/dist/Badge.js.map +1 -1
  25. package/dist/Badge.vue.d.ts +6 -55
  26. package/dist/Box.vue.d.ts +3 -36
  27. package/dist/Box.vue_vue_type_script_setup_true_lang-rFnvwLVY.js.map +1 -1
  28. package/dist/Button.js.map +1 -1
  29. package/dist/Button.vue.d.ts +5 -50
  30. package/dist/ButtonGroup.js +33 -37
  31. package/dist/ButtonGroup.js.map +1 -1
  32. package/dist/ButtonGroup.vue.d.ts +6 -39
  33. package/dist/Card.js.map +1 -1
  34. package/dist/Card.vue.d.ts +5 -32
  35. package/dist/CardContent.js.map +1 -1
  36. package/dist/CardContent.vue.d.ts +1 -1
  37. package/dist/CardFooter.js.map +1 -1
  38. package/dist/CardFooter.vue.d.ts +1 -1
  39. package/dist/CardHeader.js.map +1 -1
  40. package/dist/CardHeader.vue.d.ts +2 -15
  41. package/dist/CardMedia.js.map +1 -1
  42. package/dist/CardMedia.vue.d.ts +2 -15
  43. package/dist/Carousel.js +66 -72
  44. package/dist/Carousel.js.map +1 -1
  45. package/dist/Carousel.vue.d.ts +10 -10
  46. package/dist/Checkbox.js.map +1 -1
  47. package/dist/Checkbox.vue.d.ts +8 -53
  48. package/dist/ChevronToggle.vue.d.ts +7 -34
  49. package/dist/ChevronToggle.vue_vue_type_script_setup_true_lang-Ce_qOXfR.js.map +1 -1
  50. package/dist/Chip.js.map +1 -1
  51. package/dist/Chip.vue.d.ts +10 -52
  52. package/dist/ConfirmationCodeInput.js +40 -44
  53. package/dist/ConfirmationCodeInput.js.map +1 -1
  54. package/dist/ConfirmationCodeInput.vue.d.ts +8 -43
  55. package/dist/ContextSwitcher.js.map +1 -1
  56. package/dist/ContextSwitcher.vue.d.ts +6 -41
  57. package/dist/Copy.js.map +1 -1
  58. package/dist/Copy.vue.d.ts +3 -34
  59. package/dist/CurrencyInput.js +20 -21
  60. package/dist/CurrencyInput.js.map +1 -1
  61. package/dist/CurrencyInput.vue.d.ts +125 -46
  62. package/dist/CustomRender.js.map +1 -1
  63. package/dist/DataView.js +94 -96
  64. package/dist/DataView.js.map +1 -1
  65. package/dist/DataView.keys-aSOnA4AD.js.map +1 -1
  66. package/dist/DataView.vue.d.ts +15 -57
  67. package/dist/DataViewFilters.js +127 -139
  68. package/dist/DataViewFilters.js.map +1 -1
  69. package/dist/DataViewFilters.keys-BLu07FiP.js.map +1 -1
  70. package/dist/DataViewFilters.vue.d.ts +9 -54
  71. package/dist/DataViewSortButton.js +2 -2
  72. package/dist/DataViewSortButton.js.map +1 -1
  73. package/dist/DataViewSortButton.vue.d.ts +3 -30
  74. package/dist/DataViewToolbar.js +146 -71
  75. package/dist/DataViewToolbar.js.map +1 -1
  76. package/dist/DataViewToolbar.vue.d.ts +106 -40
  77. package/dist/DatePicker.js +4524 -4636
  78. package/dist/DatePicker.js.map +1 -1
  79. package/dist/DatePicker.vue.d.ts +32 -81
  80. package/dist/DescriptionList.js.map +1 -1
  81. package/dist/DescriptionList.vue.d.ts +3 -32
  82. package/dist/DescriptionListDetail.js.map +1 -1
  83. package/dist/DescriptionListDetail.vue.d.ts +1 -1
  84. package/dist/DescriptionListGroup.js.map +1 -1
  85. package/dist/DescriptionListGroup.vue.d.ts +1 -1
  86. package/dist/DescriptionListTerm.js.map +1 -1
  87. package/dist/DescriptionListTerm.vue.d.ts +1 -1
  88. package/dist/Dialog.js.map +1 -1
  89. package/dist/Dialog.vue.d.ts +10 -53
  90. package/dist/Divider.js.map +1 -1
  91. package/dist/Dropdown.js +89 -95
  92. package/dist/Dropdown.js.map +1 -1
  93. package/dist/Dropdown.vue.d.ts +12 -48
  94. package/dist/EmptyState.js +1 -1
  95. package/dist/EmptyState.js.map +1 -1
  96. package/dist/EmptyState.vue.d.ts +5 -62
  97. package/dist/Expand.vue.d.ts +10 -40
  98. package/dist/Expand.vue_vue_type_script_setup_true_lang-CiONJfAp.js.map +1 -1
  99. package/dist/Field.vue.d.ts +4 -53
  100. package/dist/Field.vue_vue_type_script_setup_true_lang-DI6z3AE9.js.map +1 -1
  101. package/dist/FileUpload.js +72 -74
  102. package/dist/FileUpload.js.map +1 -1
  103. package/dist/FileUpload.vue.d.ts +10 -44
  104. package/dist/FilterChip.js.map +1 -1
  105. package/dist/FilterChip.vue.d.ts +6 -41
  106. package/dist/FilterDrawerItem.js +21 -21
  107. package/dist/FilterDrawerItem.js.map +1 -1
  108. package/dist/FilterDrawerItem.vue.d.ts +6 -23
  109. package/dist/FilterDropdown.js +63 -69
  110. package/dist/FilterDropdown.js.map +1 -1
  111. package/dist/FilterDropdown.vue.d.ts +122 -35
  112. package/dist/FilterSelect.js.map +1 -1
  113. package/dist/FilterSelect.vue.d.ts +4 -31
  114. package/dist/Filters.js +157 -164
  115. package/dist/Filters.js.map +1 -1
  116. package/dist/Filters.vue.d.ts +0 -2190
  117. package/dist/HttpError.js +7 -7
  118. package/dist/HttpError.js.map +1 -1
  119. package/dist/HttpError.vue.d.ts +4 -41
  120. package/dist/Icon.js +16 -15
  121. package/dist/Icon.js.map +1 -1
  122. package/dist/Icon.vue.d.ts +4 -37
  123. package/dist/IconLabel.js.map +1 -1
  124. package/dist/IconLabel.vue.d.ts +6 -41
  125. package/dist/Illustration.js +2 -2
  126. package/dist/Illustration.vue.d.ts +3 -42
  127. package/dist/{Illustration.vue_vue_type_script_setup_true_lang-BrqEF8xe.js → Illustration.vue_vue_type_script_setup_true_lang-BVzzNsRt.js} +11 -11
  128. package/dist/{Illustration.vue_vue_type_script_setup_true_lang-BrqEF8xe.js.map → Illustration.vue_vue_type_script_setup_true_lang-BVzzNsRt.js.map} +1 -1
  129. package/dist/Image.js +2 -2
  130. package/dist/Image.vue.d.ts +5 -40
  131. package/dist/{Image.vue_vue_type_script_setup_true_lang-D5u4av0_.js → Image.vue_vue_type_script_setup_true_lang-Dg2Zk2r2.js} +37 -41
  132. package/dist/{Image.vue_vue_type_script_setup_true_lang-D5u4av0_.js.map → Image.vue_vue_type_script_setup_true_lang-Dg2Zk2r2.js.map} +1 -1
  133. package/dist/InlineEdit.js.map +1 -1
  134. package/dist/InlineEdit.vue.d.ts +126 -47
  135. package/dist/Input.js.map +1 -1
  136. package/dist/Input.vue.d.ts +12 -45
  137. package/dist/InputOptions.js +66 -69
  138. package/dist/InputOptions.js.map +1 -1
  139. package/dist/InputOptions.vue.d.ts +10 -55
  140. package/dist/IntegrationIcon.js +7 -7
  141. package/dist/IntegrationIcon.js.map +1 -1
  142. package/dist/IntegrationIcon.vue.d.ts +3 -36
  143. package/dist/Label.vue.d.ts +3 -42
  144. package/dist/Label.vue_vue_type_script_setup_true_lang-CNquF3AP.js.map +1 -1
  145. package/dist/LicenseChip.js.map +1 -1
  146. package/dist/LicenseChip.vue.d.ts +3 -30
  147. package/dist/ListItem.js.map +1 -1
  148. package/dist/ListItem.vue.d.ts +0 -294
  149. package/dist/ListItemCell.js.map +1 -1
  150. package/dist/ListItemCell.vue.d.ts +0 -21
  151. package/dist/ListView.js +4 -7
  152. package/dist/ListView.js.map +1 -1
  153. package/dist/ListView.types.d.ts +0 -29
  154. package/dist/ListView.vue.d.ts +0 -5496
  155. package/dist/Loading.js +2 -2
  156. package/dist/Loading.js.map +1 -1
  157. package/dist/Loading.vue.d.ts +1 -1
  158. package/dist/Logo.js +1 -1
  159. package/dist/Logo.vue.d.ts +6 -41
  160. package/dist/{Logo.vue_vue_type_script_setup_true_lang-Dz8c98sc.js → Logo.vue_vue_type_script_setup_true_lang-Y3iE9utm.js} +17 -17
  161. package/dist/Logo.vue_vue_type_script_setup_true_lang-Y3iE9utm.js.map +1 -0
  162. package/dist/Menu.js.map +1 -1
  163. package/dist/Menu.vue.d.ts +1 -1
  164. package/dist/MenuItem.js.map +1 -1
  165. package/dist/MenuItem.vue.d.ts +1 -1
  166. package/dist/MenusPlugin-B4jpNe7x.js +12 -0
  167. package/dist/{MenusPlugin-Bk6UW6o9.js.map → MenusPlugin-B4jpNe7x.js.map} +1 -1
  168. package/dist/Metric.js.map +1 -1
  169. package/dist/Metric.vue.d.ts +3 -34
  170. package/dist/Modal.js +62 -64
  171. package/dist/Modal.js.map +1 -1
  172. package/dist/Modal.vue.d.ts +13 -60
  173. package/dist/Modals.js +17 -18
  174. package/dist/Modals.js.map +1 -1
  175. package/dist/ModalsPlugin.js +11 -11
  176. package/dist/ModalsPlugin.js.map +1 -1
  177. package/dist/Module.js.map +1 -1
  178. package/dist/Module.keys-CEsrW2f0.js.map +1 -1
  179. package/dist/Module.types-B1FfGGac.js.map +1 -1
  180. package/dist/Module.vue.d.ts +2 -29
  181. package/dist/ModuleContent.js.map +1 -1
  182. package/dist/ModuleContent.vue.d.ts +3 -3
  183. package/dist/ModuleFooter.js.map +1 -1
  184. package/dist/ModuleFooter.vue.d.ts +1 -1
  185. package/dist/ModuleHeader.js.map +1 -1
  186. package/dist/ModuleHeader.vue.d.ts +5 -39
  187. package/dist/MoreActions.js +489 -0
  188. package/dist/MoreActions.js.map +1 -0
  189. package/dist/MoreActions.vue.d.ts +203 -0
  190. package/dist/ObfuscateText.js.map +1 -1
  191. package/dist/ObfuscateText.vue.d.ts +3 -40
  192. package/dist/PageContent.js.map +1 -1
  193. package/dist/PageContent.vue.d.ts +3 -30
  194. package/dist/PageHeader.js.map +1 -1
  195. package/dist/PageHeader.vue.d.ts +6 -35
  196. package/dist/PageNavigation.js +50 -50
  197. package/dist/PageNavigation.js.map +1 -1
  198. package/dist/PageNavigation.vue.d.ts +7 -36
  199. package/dist/Paginate.js.map +1 -1
  200. package/dist/Paginate.vue.d.ts +5 -40
  201. package/dist/PlaidLink.js.map +1 -1
  202. package/dist/PlaidLink.vue.d.ts +12 -49
  203. package/dist/QuickAction.js.map +1 -1
  204. package/dist/QuickAction.vue.d.ts +3 -16
  205. package/dist/Radio.js.map +1 -1
  206. package/dist/Radio.vue.d.ts +0 -93
  207. package/dist/RadioGroup.js +94 -101
  208. package/dist/RadioGroup.js.map +1 -1
  209. package/dist/RadioGroup.vue.d.ts +116 -42
  210. package/dist/RadioNew.js +96 -99
  211. package/dist/RadioNew.js.map +1 -1
  212. package/dist/RadioNew.vue.d.ts +7 -48
  213. package/dist/RangeInput.js.map +1 -1
  214. package/dist/RangeInput.vue.d.ts +1 -1
  215. package/dist/SearchBar.js +38 -39
  216. package/dist/SearchBar.js.map +1 -1
  217. package/dist/SearchBar.vue.d.ts +127 -44
  218. package/dist/SectionHeader.js.map +1 -1
  219. package/dist/SectionHeader.vue.d.ts +6 -37
  220. package/dist/Select.js +171 -183
  221. package/dist/Select.js.map +1 -1
  222. package/dist/Select.vue.d.ts +23 -102
  223. package/dist/SelectStatus.js +38 -38
  224. package/dist/SelectStatus.js.map +1 -1
  225. package/dist/SelectStatus.vue.d.ts +227 -47
  226. package/dist/Skeleton.js.map +1 -1
  227. package/dist/Skeleton.vue.d.ts +3 -34
  228. package/dist/Step.js +44 -44
  229. package/dist/Step.js.map +1 -1
  230. package/dist/Step.vue.d.ts +4 -43
  231. package/dist/Stepper.js.map +1 -1
  232. package/dist/Stepper.vue.d.ts +9 -44
  233. package/dist/Switch.js.map +1 -1
  234. package/dist/Switch.vue.d.ts +8 -47
  235. package/dist/Tab.js +9 -9
  236. package/dist/Tab.js.map +1 -1
  237. package/dist/Tab.vue.d.ts +2 -15
  238. package/dist/TabPanel.js.map +1 -1
  239. package/dist/TabPanel.vue.d.ts +3 -30
  240. package/dist/Table.js +53 -59
  241. package/dist/Table.js.map +1 -1
  242. package/dist/Table.keys-LHQf6FEH.js.map +1 -1
  243. package/dist/Table.vue.d.ts +3 -50
  244. package/dist/TableCell.js +1 -1
  245. package/dist/TableCell.js.map +1 -1
  246. package/dist/TableCell.vue.d.ts +3 -32
  247. package/dist/TableHeaderCell.js +1 -1
  248. package/dist/TableHeaderCell.js.map +1 -1
  249. package/dist/TableHeaderCell.vue.d.ts +3 -30
  250. package/dist/TableHeaderRow.js +47 -45
  251. package/dist/TableHeaderRow.js.map +1 -1
  252. package/dist/TableHeaderRow.vue.d.ts +5 -34
  253. package/dist/TableRow.js +60 -61
  254. package/dist/TableRow.js.map +1 -1
  255. package/dist/TableRow.vue.d.ts +7 -48
  256. package/dist/Tabs.js +2 -2
  257. package/dist/Tabs.vue.d.ts +4 -31
  258. package/dist/Tabs.vue_vue_type_script_setup_true_lang-BlJVDr7o.js +78 -0
  259. package/dist/Tabs.vue_vue_type_script_setup_true_lang-BlJVDr7o.js.map +1 -0
  260. package/dist/TextEditor.js +2414 -2420
  261. package/dist/TextEditor.js.map +1 -1
  262. package/dist/TextEditor.vue.d.ts +9 -40
  263. package/dist/Textarea.js +69 -69
  264. package/dist/Textarea.js.map +1 -1
  265. package/dist/Textarea.vue.d.ts +9 -44
  266. package/dist/Thumbnail.js +1 -1
  267. package/dist/Thumbnail.js.map +1 -1
  268. package/dist/Thumbnail.vue.d.ts +4 -4
  269. package/dist/ThumbnailEmpty.js.map +1 -1
  270. package/dist/ThumbnailEmpty.vue.d.ts +1 -1
  271. package/dist/ThumbnailGroup.js.map +1 -1
  272. package/dist/ThumbnailGroup.keys-EJ4qFNhx.js.map +1 -1
  273. package/dist/ThumbnailGroup.vue.d.ts +26 -22
  274. package/dist/Timeline.js.map +1 -1
  275. package/dist/Timeline.vue.d.ts +3 -32
  276. package/dist/TimelineItem.js.map +1 -1
  277. package/dist/TimelineItem.vue.d.ts +1 -1
  278. package/dist/Toast.js.map +1 -1
  279. package/dist/Toast.vue.d.ts +3 -30
  280. package/dist/Toasts.js.map +1 -1
  281. package/dist/ToastsPlugin.js +11 -11
  282. package/dist/ToastsPlugin.js.map +1 -1
  283. package/dist/Tooltip.js +29 -30
  284. package/dist/Tooltip.js.map +1 -1
  285. package/dist/Tooltip.vue.d.ts +11 -43
  286. package/dist/colors-DDDVvqfQ.js.map +1 -1
  287. package/dist/components.css +1 -1
  288. package/dist/constants.js.map +1 -1
  289. package/dist/directives/autofocus.js.map +1 -1
  290. package/dist/directives/clickoutside.js.map +1 -1
  291. package/dist/directives/observe.js.map +1 -1
  292. package/dist/directives/sticky.js.map +1 -1
  293. package/dist/directives/tooltip.js +3 -3
  294. package/dist/directives/tooltip.js.map +1 -1
  295. package/dist/directives/viewable.js +39 -44
  296. package/dist/directives/viewable.js.map +1 -1
  297. package/dist/{floating-ui.vue-pzUuloyX.js → floating-ui.vue-CL01Y9ER.js} +2 -2
  298. package/dist/{floating-ui.vue-pzUuloyX.js.map → floating-ui.vue-CL01Y9ER.js.map} +1 -1
  299. package/dist/formatDateTime-DG7kBc2T.js +1414 -0
  300. package/dist/{formatDateTime-Dz8bXV0R.js.map → formatDateTime-DG7kBc2T.js.map} +1 -1
  301. package/dist/index-D6bxWkZ1.js.map +1 -1
  302. package/dist/index-XZqpB2_R.js +294 -0
  303. package/dist/{index-ConQ3o31.js.map → index-XZqpB2_R.js.map} +1 -1
  304. package/dist/index.js +99 -104
  305. package/dist/index.js.map +1 -1
  306. package/dist/isDefined-DzVx0B6k.js.map +1 -1
  307. package/dist/keys-BEdEsanp.js.map +1 -1
  308. package/dist/keys-C8Zfr_By.js.map +1 -1
  309. package/dist/locale.js.map +1 -1
  310. package/dist/misc-CHQs-G03.js.map +1 -1
  311. package/dist/obfuscateText.d.ts +1 -1
  312. package/dist/parseISO-wlfIB_QJ.js.map +1 -1
  313. package/dist/searchFuzzy-DBDE6jkd.js +408 -0
  314. package/dist/{searchFuzzy-DRasJ33G.js.map → searchFuzzy-DBDE6jkd.js.map} +1 -1
  315. package/dist/statusLevels-D8EgtE_L.js.map +1 -1
  316. package/dist/storage.js.map +1 -1
  317. package/dist/tailwind-base.d.ts +18 -0
  318. package/dist/tailwind-base.js +19 -9
  319. package/dist/tailwind-base.js.map +1 -1
  320. package/dist/toTimeZone-Coq1oPTt.js.map +1 -1
  321. package/dist/useConfirmBeforeClosing.js.map +1 -1
  322. package/dist/useDialog.d.ts +2 -2
  323. package/dist/useDialog.js +21 -25
  324. package/dist/useDialog.js.map +1 -1
  325. package/dist/useGoogleMaps.js +108 -110
  326. package/dist/useGoogleMaps.js.map +1 -1
  327. package/dist/useMediaQuery.d.ts +0 -6
  328. package/dist/useMediaQuery.js +11 -15
  329. package/dist/useMediaQuery.js.map +1 -1
  330. package/dist/useModals.d.ts +1 -1
  331. package/dist/useModals.js.map +1 -1
  332. package/dist/usePaginationStats-d_q39naC.js.map +1 -1
  333. package/dist/usePlaidLink.js +20 -27
  334. package/dist/usePlaidLink.js.map +1 -1
  335. package/dist/useScriptTag.js.map +1 -1
  336. package/dist/useSearch.js +13 -13
  337. package/dist/useSearch.js.map +1 -1
  338. package/dist/useSelection.js +56 -56
  339. package/dist/useSelection.js.map +1 -1
  340. package/dist/useSortable.js +54 -63
  341. package/dist/useSortable.js.map +1 -1
  342. package/dist/useStepper.d.ts +2 -2
  343. package/dist/useStepper.js +36 -40
  344. package/dist/useStepper.js.map +1 -1
  345. package/dist/useToasts.js +23 -23
  346. package/dist/useToasts.js.map +1 -1
  347. package/dist/useValidation.js +96 -100
  348. package/dist/useValidation.js.map +1 -1
  349. package/dist/utils/calculateElementOverflow.js +4 -4
  350. package/dist/utils/calculateElementOverflow.js.map +1 -1
  351. package/dist/utils/colorScheme.js +2 -2
  352. package/dist/utils/colorScheme.js.map +1 -1
  353. package/dist/utils/createQueryString.js.map +1 -1
  354. package/dist/utils/createValidDate.js.map +1 -1
  355. package/dist/utils/formatDateTime.js +1 -1
  356. package/dist/utils/getContrastingTextColor.js.map +1 -1
  357. package/dist/utils/helpers.js.map +1 -1
  358. package/dist/utils/i18n.js.map +1 -1
  359. package/dist/utils/normalizeDate.js.map +1 -1
  360. package/dist/utils/obfuscateText.js +6 -6
  361. package/dist/utils/obfuscateText.js.map +1 -1
  362. package/dist/utils/searchFuzzy.js +1 -1
  363. package/dist/utils/storage.js +23 -23
  364. package/dist/utils/storage.js.map +1 -1
  365. package/package.json +12 -13
  366. package/tailwind-base.ts +12 -1
  367. package/types/vite.d.ts +7 -0
  368. package/types/vitest.d.ts +7 -0
  369. package/dist/Logo.vue_vue_type_script_setup_true_lang-Dz8c98sc.js.map +0 -1
  370. package/dist/MenusPlugin-Bk6UW6o9.js +0 -12
  371. package/dist/Tabs.vue_vue_type_script_setup_true_lang-CmnBP4i1.js +0 -159
  372. package/dist/Tabs.vue_vue_type_script_setup_true_lang-CmnBP4i1.js.map +0 -1
  373. package/dist/formatDateTime-Dz8bXV0R.js +0 -1418
  374. package/dist/index-ConQ3o31.js +0 -128
  375. package/dist/searchFuzzy-DRasJ33G.js +0 -409
@@ -3,46 +3,13 @@ import { ComponentProvideOptions } from 'vue';
3
3
  import { default as default_2 } from 'quill/modules/toolbar';
4
4
  import { default as default_3 } from 'quill';
5
5
  import { DefineComponent } from 'vue';
6
- import { ExtractPropTypes } from 'vue';
7
- import { PropType } from 'vue';
8
6
  import { PublicProps } from 'vue';
9
7
 
10
- declare type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
11
-
12
- declare type __VLS_Prettify<T> = {
13
- [K in keyof T]: T[K];
14
- } & {};
15
-
16
- declare type __VLS_TypePropsToRuntimeProps<T> = {
17
- [K in keyof T]-?: {} extends Pick<T, K> ? {
18
- type: PropType<__VLS_NonUndefinedable<T[K]>>;
19
- } : {
20
- type: PropType<T[K]>;
21
- required: true;
22
- };
23
- };
24
-
25
- declare type __VLS_WithDefaults<P, D> = {
26
- [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_Prettify<P[K] & {
27
- default: D[K];
28
- }> : P[K];
29
- };
30
-
31
- declare const _default: DefineComponent<ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<TextEditorProps>, {
32
- modelValue: string;
33
- placeholder: string;
34
- controls: () => never[];
35
- handlers: () => {};
36
- }>>, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
37
- blur: (editor: default_3) => void;
38
- focus: (editor: default_3) => void;
39
- "update:model-value": (value: string) => void;
40
- }, string, PublicProps, Readonly<ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<TextEditorProps>, {
41
- modelValue: string;
42
- placeholder: string;
43
- controls: () => never[];
44
- handlers: () => {};
45
- }>>> & Readonly<{
8
+ declare const _default: DefineComponent<TextEditorProps, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
9
+ blur: (editor: default_3) => any;
10
+ focus: (editor: default_3) => any;
11
+ "update:model-value": (value: string) => any;
12
+ }, string, PublicProps, Readonly<TextEditorProps> & Readonly<{
46
13
  onBlur?: ((editor: default_3) => any) | undefined;
47
14
  onFocus?: ((editor: default_3) => any) | undefined;
48
15
  "onUpdate:model-value"?: ((value: string) => any) | undefined;
@@ -51,7 +18,9 @@ controls: TextEditorControls;
51
18
  placeholder: string;
52
19
  modelValue: string;
53
20
  handlers: TextEditorControlHandlerMap;
54
- }, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;
21
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {
22
+ editorRef: HTMLDivElement;
23
+ }, any>;
55
24
  export default _default;
56
25
 
57
26
  declare interface FieldProps {
@@ -118,7 +87,7 @@ declare type IconName = (typeof iconNames)[number];
118
87
  *
119
88
  * https://github.com/LeafLink/stash/blob/main/CONTRIBUTING.md#adding-a-new-icon
120
89
  */
121
- declare const iconNames: readonly ["action-dots", "activity", "alert-bell", "archive", "arrow-down", "arrow-left", "arrow-right", "arrow-up", "badge-discount", "badge-seller-elite", "badge-seller-power", "badge-seller-verified", "bank", "book-customer", "building-office", "bulk-add", "calendar-reschedule", "calendar", "camera", "caret-down", "caret-up", "change-log", "check", "chevron-down", "chevron-left", "chevron-right", "chevron-up", "circle-check", "circle-close", "circle-dollar", "circle-empty", "circle-info", "circle-partial", "circle-percent", "circle-question-mark", "circle-slash", "circle-status", "circle-warning", "clipboard-checkmark", "clipboard-inventory", "close", "combine", "compass", "contact", "contract", "copy", "credit-card", "credit-profile", "dashboard", "document-accept", "document-invoice", "document-recieved", "document-sent", "document-view", "document", "dolly", "download", "edit", "ellipsis", "envelope-open", "envelope", "equals", "export", "face-id", "face", "figma", "file-csv", "file", "filter-funnel", "filter-line", "fingerprint", "flag", "folder", "folder-bar-graph", "folder-orders", "font-bold", "font-clear-format", "font-italic", "font-underline", "gear", "github", "globe", "graph-bar-chart", "graph-line-chart", "graph-pie-chart", "hazard", "hazard-outline", "headset-agent", "headset-mic", "heart-filled", "heart-outline", "help-question-mark", "hide", "history", "home", "image", "import", "keyboard-return", "tier-1", "tier-2", "tier-3", "license-approved", "license-certificate", "lightbulb", "link-add", "link-unlink", "link", "list-bulleted", "list-items", "list-numbered", "loading-big", "loading-empty", "loading-small", "location", "lock-unlock", "lock", "logo-facebook", "logo-instagram", "logo-linkedin", "logo-ll", "logo-metrc", "logo-plaid", "logo-x", "logo-youtube", "logout", "medical", "megaphone-sound", "megaphone", "menu", "message-dispute", "message-reply", "message", "minus", "mj-leaf", "money", "note-add", "note", "open-in-new", "paperclip", "paper-plane", "performance", "phone", "plus", "preview", "print", "product-menu-manage", "product-menu-search", "product-menu", "queue-add", "queue", "recent", "refresh", "register", "reorder", "reply", "report-download", "sample", "save", "scale-law", "scale-weight", "search", "seed-cycle", "share", "shop-bag-browse", "shop-bag-reorder", "shop-bag", "shop-basket", "shop-cart-add", "shop-cart", "show", "sign-dollar", "sign-percent", "sort", "split", "star-filled", "star-outline", "start", "storefront", "submit", "swap-horizontal", "swap-vertical", "tag-star", "tag", "tag-leaf", "test-results", "ticket-star", "ticket", "tool-dropper", "tool-wrench", "transfer", "trashcan", "truck", "upload", "user-add", "user-admin", "user-check", "user-group", "user", "view-card", "view-detailed", "view-list", "warehouse", "working"];
90
+ declare const iconNames: readonly ["action-dots", "activity", "alert-bell", "archive", "arrow-down", "arrow-left", "arrow-right", "arrow-up", "badge-discount", "badge-seller-elite", "badge-seller-power", "badge-seller-verified", "bank", "book-customer", "building-office", "bulk-add", "calendar-reschedule", "calendar", "camera", "caret-down", "caret-up", "change-log", "check", "chevron-down", "chevron-left", "chevron-right", "chevron-up", "circle-check", "circle-close", "circle-dollar", "circle-empty", "circle-info", "circle-partial", "circle-percent", "circle-question-mark", "circle-slash", "circle-status", "circle-warning", "clipboard-checkmark", "clipboard-inventory", "close", "cloud-share", "combine", "compass", "contact", "contract", "copy", "credit-card", "credit-profile", "dashboard", "document-accept", "document-invoice", "document-recieved", "document-sent", "document-view", "document", "dolly", "download", "edit", "ellipsis", "envelope-open", "envelope", "equals", "export", "face-id", "face", "figma", "file-csv", "file", "filter-funnel", "filter-line", "fingerprint", "flag", "folder", "folder-bar-graph", "folder-orders", "font-bold", "font-clear-format", "font-italic", "font-underline", "gear", "github", "globe", "graph-bar-chart", "graph-line-chart", "graph-pie-chart", "hazard", "hazard-outline", "headset-agent", "headset-mic", "heart-filled", "heart-outline", "help-question-mark", "hide", "history", "home", "image", "import", "keyboard-return", "tier-1", "tier-2", "tier-3", "license-approved", "license-certificate", "lightbulb", "link-add", "link-unlink", "link", "list-bulleted", "list-items", "list-numbered", "loading-big", "loading-empty", "loading-small", "location", "lock-unlock", "lock", "logo-facebook", "logo-instagram", "logo-linkedin", "logo-ll", "logo-metrc", "logo-plaid", "logo-x", "logo-youtube", "logout", "medical", "megaphone-sound", "megaphone", "menu", "message-dispute", "message-reply", "message", "minus", "mj-leaf", "money", "note-add", "note", "open-in-new", "paperclip", "paper-plane", "performance", "phone", "plus", "preview", "print", "product-menu-manage", "product-menu-search", "product-menu", "queue-add", "queue", "recent", "refresh", "register", "reorder", "reply", "report-download", "sample", "save", "scale-law", "scale-weight", "search", "seed-cycle", "share", "shop-bag-browse", "shop-bag-reorder", "shop-bag", "shop-basket", "shop-cart-add", "shop-cart", "show", "sign-dollar", "sign-percent", "sort", "split", "star-filled", "star-outline", "start", "storefront", "submit", "swap-horizontal", "swap-vertical", "tag-star", "tag", "tag-leaf", "test-results", "ticket-star", "ticket", "tool-dropper", "tool-wrench", "transfer", "trashcan", "truck", "upload", "user-add", "user-admin", "user-check", "user-group", "user", "view-card", "view-detailed", "view-list", "warehouse", "working"];
122
91
 
123
92
  declare const TEXT_EDITOR_ALLOWED_CONTROLS: readonly ["bold", "italic", "underline", "link", "divider", "list"];
124
93
 
package/dist/Textarea.js CHANGED
@@ -1,7 +1,7 @@
1
- import { defineComponent as M, useAttrs as k, useSlots as E, useCssModule as H, ref as x, computed as w, watch as A, onMounted as I, nextTick as P, onBeforeUnmount as V, createBlock as $, openBlock as q, mergeProps as y, unref as p, createSlots as D, withCtx as b, createElementVNode as L, renderSlot as j } from "vue";
2
- import { _ as F } from "./Field.vue_vue_type_script_setup_true_lang-DI6z3AE9.js";
3
- import { _ as N } from "./_plugin-vue_export-helper-CHgC5LLL.js";
4
- const U = ["id", "aria-errormessage", "aria-invalid", "maxlength", "value", "placeholder", "disabled", "readonly", "rows"], W = /* @__PURE__ */ M({
1
+ import { defineComponent as k, useAttrs as E, useSlots as H, useCssModule as A, ref as x, computed as w, watch as I, onMounted as P, nextTick as V, onBeforeUnmount as $, createBlock as q, openBlock as D, mergeProps as y, unref as p, createSlots as L, withCtx as b, createElementVNode as j, renderSlot as F } from "vue";
2
+ import { _ as N } from "./Field.vue_vue_type_script_setup_true_lang-DI6z3AE9.js";
3
+ import { _ as U } from "./_plugin-vue_export-helper-CHgC5LLL.js";
4
+ const W = ["id", "aria-errormessage", "aria-invalid", "maxlength", "value", "placeholder", "disabled", "readonly", "rows"], Y = /* @__PURE__ */ k({
5
5
  name: "ll-textarea",
6
6
  __name: "Textarea",
7
7
  props: {
@@ -27,114 +27,114 @@ const U = ["id", "aria-errormessage", "aria-invalid", "maxlength", "value", "pla
27
27
  },
28
28
  emits: ["update:model-value"],
29
29
  setup(g, { emit: _ }) {
30
- const c = k(), B = E(), m = H(), t = g, z = _, u = x(), l = x(), R = w(() => t.isReadOnly || "readonly" in c && c.readonly !== !1), O = w(() => {
31
- const e = { ...c };
32
- return delete e["data-test"], delete e.class, e;
30
+ const u = E(), B = H(), m = A(), e = g, z = _, f = x(), i = x(), R = w(() => e.isReadOnly || "readonly" in u && u.readonly !== !1), O = w(() => {
31
+ const t = { ...u };
32
+ return delete t["data-test"], delete t.class, t;
33
33
  });
34
- A(
35
- () => t.resize,
36
- (e) => {
37
- var o;
38
- e ? h() : (o = l.value) == null || o.disconnect();
34
+ I(
35
+ () => e.resize,
36
+ (t) => {
37
+ t ? h() : i.value?.disconnect();
39
38
  }
40
39
  );
41
- const T = (e) => {
42
- z("update:model-value", e.target.value);
40
+ const T = (t) => {
41
+ z("update:model-value", t.target.value);
43
42
  }, h = () => {
44
- l.value || !u.value || (l.value = new ResizeObserver(([e]) => {
45
- const { target: o } = e, a = v(u.value) || document.documentElement, { scrollTop: n } = a;
46
- let s = 0;
43
+ i.value || !f.value || (i.value = new ResizeObserver((t) => {
44
+ const o = t[0];
45
+ if (!o)
46
+ return;
47
+ const { target: n } = o, a = v(f.value) || document.documentElement, { scrollTop: s } = a;
48
+ let r = 0;
47
49
  if (a === document.documentElement) {
48
- const { top: r, height: i } = S(o), { innerHeight: d } = window;
49
- s = Math.max(r + i - (d + n), 0);
50
+ const { top: d, height: c } = S(n), { innerHeight: l } = window;
51
+ r = Math.max(d + c - (l + s), 0);
50
52
  } else {
51
- const { top: r, height: i } = o.getBoundingClientRect(), { top: d } = a.getBoundingClientRect(), { offsetHeight: f } = a, C = r - d;
52
- s = Math.max(C + i - f, 0);
53
+ const { top: d, height: c } = n.getBoundingClientRect(), { top: l } = a.getBoundingClientRect(), { offsetHeight: C } = a, M = d - l;
54
+ r = Math.max(M + c - C, 0);
53
55
  }
54
- s && requestAnimationFrame(() => {
55
- a.scrollTop = n + s;
56
+ r && requestAnimationFrame(() => {
57
+ a.scrollTop = s + r;
56
58
  });
57
- }), l.value.observe(u.value));
58
- }, v = (e) => {
59
- const o = e.parentElement;
59
+ }), i.value.observe(f.value));
60
+ }, v = (t) => {
61
+ const o = t.parentElement;
60
62
  if (!o)
61
63
  return null;
62
- const { overflowY: a } = getComputedStyle(o);
63
- return a !== "visible" ? o : o === document.body ? document.documentElement : v(o);
64
- }, S = (e) => {
65
- const { offsetWidth: o, offsetHeight: a } = e;
66
- let n = 0, s = 0;
67
- const r = function({ offsetLeft: i, offsetTop: d, offsetParent: f }) {
68
- n += i, s += d, f && r(f);
64
+ const { overflowY: n } = getComputedStyle(o);
65
+ return n !== "visible" ? o : o === document.body ? document.documentElement : v(o);
66
+ }, S = (t) => {
67
+ const { offsetWidth: o, offsetHeight: n } = t;
68
+ let a = 0, s = 0;
69
+ const r = function({ offsetLeft: d, offsetTop: c, offsetParent: l }) {
70
+ a += d, s += c, l && r(l);
69
71
  };
70
- return r(e), {
72
+ return r(t), {
71
73
  top: s,
72
- left: n,
74
+ left: a,
73
75
  width: o,
74
- height: a
76
+ height: n
75
77
  };
76
78
  };
77
- return I(async () => {
78
- var e;
79
- if (t.value !== null)
79
+ return P(async () => {
80
+ if (e.value !== null)
80
81
  throw new Error("ll-input: use :model-value or v-model instead of :value.");
81
- if (c.onInput)
82
+ if (u.onInput)
82
83
  throw new Error("ll-input: use the @update:model-value event instead of @input");
83
- (typeof t.resize == "boolean" && t.resize || (e = t.resize) != null && e.forceBrowserScroll) && (await P(), h());
84
- }), V(() => {
85
- var e;
86
- (e = l.value) == null || e.disconnect();
87
- }), (e, o) => (q(), $(F, y(t, {
84
+ (typeof e.resize == "boolean" && e.resize || e.resize?.forceBrowserScroll) && (await V(), h());
85
+ }), $(() => {
86
+ i.value?.disconnect();
87
+ }), (t, o) => (D(), q(N, y(e, {
88
88
  class: ["stash-textarea", [p(m).root]],
89
89
  "data-test": "stash-textarea"
90
- }), D({
91
- default: b(({ fieldId: a, fieldErrorId: n, hasError: s }) => [
92
- L("textarea", y({
93
- id: a,
90
+ }), L({
91
+ default: b(({ fieldId: n, fieldErrorId: a, hasError: s }) => [
92
+ j("textarea", y({
93
+ id: n,
94
94
  ref_key: "textareaRef",
95
- ref: u,
96
- "aria-errormessage": n,
95
+ ref: f,
96
+ "aria-errormessage": a,
97
97
  "aria-invalid": s,
98
98
  class: [
99
99
  p(m).textarea,
100
100
  "tw-border tw-border-ice-500",
101
101
  {
102
102
  "stash-textarea--error tw-border-red-500 tw-text-red-500": s,
103
- "tw-text-ice-700 hover:tw-border-ice-500 focus:tw-border-blue-500 active:tw-border-blue-500": !s && !t.disabled,
104
- "tw-resize-y": t.resize,
105
- "tw-min-h-[100px]": !t.rows,
106
- "tw-resize-none": !t.resize
103
+ "tw-text-ice-700 hover:tw-border-ice-500 focus:tw-border-blue-500 active:tw-border-blue-500": !s && !e.disabled,
104
+ "tw-resize-y": e.resize,
105
+ "tw-min-h-[100px]": !e.rows,
106
+ "tw-resize-none": !e.resize
107
107
  }
108
108
  ],
109
- maxlength: t.maxlength,
110
- value: t.modelValue,
109
+ maxlength: e.maxlength,
110
+ value: e.modelValue,
111
111
  "data-test": "stash-textarea|textarea",
112
- placeholder: t.placeholder
112
+ placeholder: e.placeholder
113
113
  }, O.value, {
114
- disabled: t.disabled,
114
+ disabled: e.disabled,
115
115
  readonly: R.value,
116
- rows: t.rows,
116
+ rows: e.rows,
117
117
  onInput: T
118
- }), null, 16, U)
118
+ }), null, 16, W)
119
119
  ]),
120
120
  _: 2
121
121
  }, [
122
122
  p(B).hint ? {
123
123
  name: "hint",
124
124
  fn: b(() => [
125
- j(e.$slots, "hint")
125
+ F(t.$slots, "hint")
126
126
  ]),
127
127
  key: "0"
128
128
  } : void 0
129
129
  ]), 1040, ["class"]));
130
130
  }
131
- }), Y = "_root_slydx_2", G = "_textarea_slydx_7", J = {
132
- root: Y,
133
- textarea: G
134
- }, K = {
135
- $style: J
136
- }, ee = /* @__PURE__ */ N(W, [["__cssModules", K]]);
131
+ }), G = "_root_slydx_2", J = "_textarea_slydx_7", K = {
132
+ root: G,
133
+ textarea: J
134
+ }, Q = {
135
+ $style: K
136
+ }, te = /* @__PURE__ */ U(Y, [["__cssModules", Q]]);
137
137
  export {
138
- ee as default
138
+ te as default
139
139
  };
140
140
  //# sourceMappingURL=Textarea.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Textarea.js","sources":["../src/components/Textarea/Textarea.vue"],"sourcesContent":["<script lang=\"ts\" setup>\n import { computed, nextTick, onBeforeUnmount, onMounted, ref, useAttrs, useCssModule, useSlots, watch } from 'vue';\n\n import { FieldProps } from '../Field/Field.types';\n import Field from '../Field/Field.vue';\n\n export interface TextareaResizeOptions {\n /**\n * It will automatically scroll the page down when it reaches the bottom of the viewport/element\n */\n forceBrowserScroll: boolean;\n }\n\n export interface TextAreaProps extends FieldProps {\n /**\n * Value for the textarea element.\n */\n modelValue?: string;\n\n /**\n * Deprecated. Use :model-value or v-model instead of :value.\n * @deprecated Use :model-value or v-model instead of :value.\n */\n value?: string | number | null;\n\n /**\n * Allow textarea to be resizable vertically.\n * Alternatively if you want to disable automatic scroll when resizing, you can set `{ forceBrowserScroll: false }`\n */\n resize?: boolean | TextareaResizeOptions;\n\n /**\n * Placeholder text for the textarea element.\n * **Note:** placeholders should be used to display examples; they should not be used as labels because they are not accessible as labels. If a real label cannot be used, use the `aria-label` attribute.\n */\n placeholder?: string;\n\n /**\n * Number of rows to display in the textarea.\n */\n rows?: number;\n\n /**\n * Maximum number of characters allowed in the textarea.\n */\n maxlength?: number;\n }\n\n defineOptions({\n name: 'll-textarea',\n });\n\n const attrs = useAttrs();\n const slots = useSlots();\n const classes = useCssModule();\n\n const props = withDefaults(defineProps<TextAreaProps>(), {\n modelValue: '',\n value: null,\n resize: false,\n maxlength: undefined,\n rows: undefined,\n placeholder: undefined,\n });\n\n const emits = defineEmits<{\n /**\n * Emitted when the model value changes.\n */\n (e: 'update:model-value', value: string): void;\n }>();\n\n const textareaRef = ref<HTMLTextAreaElement>();\n const observer = ref<ResizeObserver>();\n const isReadOnly = computed(() => props.isReadOnly || ('readonly' in attrs && attrs.readonly !== false));\n\n const inputAttrs = computed(() => {\n const allAttrs = { ...attrs };\n\n delete allAttrs['data-test'];\n delete allAttrs.class;\n\n return allAttrs;\n });\n\n watch(\n () => props.resize,\n (v) => {\n if (v) {\n setupResizeObserver();\n } else {\n observer.value?.disconnect();\n }\n },\n );\n\n const onInput = (event: Event) => {\n emits('update:model-value', (event.target as HTMLTextAreaElement).value);\n };\n\n const setupResizeObserver = () => {\n if (observer.value || !textareaRef.value) {\n return;\n }\n\n // the ResizeObserver will be in charge to detect if page needs to scroll when resizing the component\n observer.value = new ResizeObserver(([entry]) => {\n const { target } = entry;\n const parent = findParentScrollable(textareaRef.value as HTMLTextAreaElement) || document.documentElement;\n\n const { scrollTop: scrollPosition } = parent;\n let offsetDiff = 0;\n\n // checks if the closest parent element scrollable is the document page\n if (parent === document.documentElement) {\n const { top, height } = getOffsetClipRect(target as HTMLElement);\n const { innerHeight: viewportHeight } = window;\n\n offsetDiff = Math.max(top + height - (viewportHeight + scrollPosition), 0);\n } else {\n const { top, height } = (target as HTMLElement).getBoundingClientRect();\n const { top: parentTop } = parent.getBoundingClientRect();\n const { offsetHeight: parentHeight } = parent;\n const offsetTop = top - parentTop;\n\n offsetDiff = Math.max(offsetTop + height - parentHeight, 0);\n }\n\n if (offsetDiff) {\n requestAnimationFrame(() => {\n parent.scrollTop = scrollPosition + offsetDiff;\n });\n }\n });\n\n observer.value.observe(textareaRef.value);\n };\n\n /**\n * Retrieve the closest parent that has a scroll. Defaults to the document page.\n */\n const findParentScrollable = (el: HTMLElement): HTMLElement | null => {\n const parent = el.parentElement as HTMLElement;\n if (!parent) {\n return null;\n }\n\n const { overflowY } = getComputedStyle(parent);\n if (overflowY !== 'visible') {\n return parent;\n }\n\n if (parent === document.body) {\n return document.documentElement;\n }\n\n return findParentScrollable(parent);\n };\n\n /**\n * Retrieve element absolute positioning relative to the page.\n */\n const getOffsetClipRect = (el: HTMLElement) => {\n const { offsetWidth: width, offsetHeight: height } = el;\n\n let left = 0;\n let top = 0;\n\n const findPos = function ({ offsetLeft, offsetTop, offsetParent }: HTMLElement) {\n left += offsetLeft;\n top += offsetTop;\n\n if (offsetParent) {\n findPos(offsetParent as HTMLElement);\n }\n };\n\n findPos(el);\n\n return {\n top,\n left,\n width,\n height,\n };\n };\n\n onMounted(async () => {\n if (props.value !== null) {\n throw new Error('ll-input: use :model-value or v-model instead of :value.');\n }\n\n if (attrs.onInput) {\n throw new Error('ll-input: use the @update:model-value event instead of @input');\n }\n\n if (\n (typeof props.resize === 'boolean' && props.resize) ||\n (props.resize as TextareaResizeOptions)?.forceBrowserScroll\n ) {\n await nextTick();\n setupResizeObserver();\n }\n });\n\n onBeforeUnmount(() => {\n observer.value?.disconnect();\n });\n</script>\n\n<template>\n <Field v-bind=\"props\" class=\"stash-textarea\" :class=\"[classes.root]\" data-test=\"stash-textarea\">\n <template #default=\"{ fieldId, fieldErrorId, hasError }\">\n <textarea\n :id=\"fieldId\"\n ref=\"textareaRef\"\n :aria-errormessage=\"fieldErrorId\"\n :aria-invalid=\"hasError\"\n :class=\"[\n classes.textarea,\n 'tw-border tw-border-ice-500',\n {\n 'stash-textarea--error tw-border-red-500 tw-text-red-500': hasError,\n 'tw-text-ice-700 hover:tw-border-ice-500 focus:tw-border-blue-500 active:tw-border-blue-500':\n !hasError && !props.disabled,\n 'tw-resize-y': props.resize,\n 'tw-min-h-[100px]': !props.rows,\n 'tw-resize-none': !props.resize,\n },\n ]\"\n :maxlength=\"props.maxlength\"\n :value=\"props.modelValue\"\n data-test=\"stash-textarea|textarea\"\n :placeholder=\"props.placeholder\"\n v-bind=\"inputAttrs\"\n :disabled=\"props.disabled\"\n :readonly=\"isReadOnly\"\n :rows=\"props.rows\"\n @input=\"onInput\"\n ></textarea>\n </template>\n <template v-if=\"slots.hint\" #hint>\n <!-- @slot Hint content -->\n <slot name=\"hint\"></slot>\n </template>\n </Field>\n</template>\n\n<style module>\n .root {\n position: relative;\n width: 100%;\n }\n\n .textarea {\n background: var(--color-white);\n border-radius: theme('borderRadius.DEFAULT');\n display: block;\n outline: none;\n padding: theme('spacing[1.5]');\n width: 100%;\n\n &::placeholder {\n color: var(--color-ice-500);\n opacity: 1;\n }\n\n &[disabled] {\n background-color: var(--color-ice-100);\n border-color: var(--color-ice-500);\n color: var(--color-ice-500);\n pointer-events: none;\n }\n\n &[disabled]:active,\n &[disabled]:focus {\n box-shadow: none;\n }\n\n &[disabled]::placeholder {\n text-transform: none;\n color: var(--color-ice-500);\n }\n\n &[readonly] {\n border-color: transparent;\n background-color: transparent;\n padding-left: 0;\n padding-right: 0;\n min-height: unset;\n }\n }\n</style>\n"],"names":["attrs","useAttrs","slots","useSlots","classes","useCssModule","props","__props","emits","__emit","textareaRef","ref","observer","isReadOnly","computed","inputAttrs","allAttrs","watch","v","setupResizeObserver","_a","onInput","event","entry","target","parent","findParentScrollable","scrollPosition","offsetDiff","top","height","getOffsetClipRect","viewportHeight","parentTop","parentHeight","offsetTop","el","overflowY","width","left","findPos","offsetLeft","offsetParent","onMounted","nextTick","onBeforeUnmount"],"mappings":"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"}
1
+ {"version":3,"file":"Textarea.js","sources":["../src/components/Textarea/Textarea.vue"],"sourcesContent":["<script lang=\"ts\" setup>\n import { computed, nextTick, onBeforeUnmount, onMounted, ref, useAttrs, useCssModule, useSlots, watch } from 'vue';\n\n import { FieldProps } from '../Field/Field.types';\n import Field from '../Field/Field.vue';\n\n export interface TextareaResizeOptions {\n /**\n * It will automatically scroll the page down when it reaches the bottom of the viewport/element\n */\n forceBrowserScroll: boolean;\n }\n\n export interface TextAreaProps extends FieldProps {\n /**\n * Value for the textarea element.\n */\n modelValue?: string;\n\n /**\n * Deprecated. Use :model-value or v-model instead of :value.\n * @deprecated Use :model-value or v-model instead of :value.\n */\n value?: string | number | null;\n\n /**\n * Allow textarea to be resizable vertically.\n * Alternatively if you want to disable automatic scroll when resizing, you can set `{ forceBrowserScroll: false }`\n */\n resize?: boolean | TextareaResizeOptions;\n\n /**\n * Placeholder text for the textarea element.\n * **Note:** placeholders should be used to display examples; they should not be used as labels because they are not accessible as labels. If a real label cannot be used, use the `aria-label` attribute.\n */\n placeholder?: string;\n\n /**\n * Number of rows to display in the textarea.\n */\n rows?: number;\n\n /**\n * Maximum number of characters allowed in the textarea.\n */\n maxlength?: number;\n }\n\n defineOptions({\n name: 'll-textarea',\n });\n\n const attrs = useAttrs();\n const slots = useSlots();\n const classes = useCssModule();\n\n const props = withDefaults(defineProps<TextAreaProps>(), {\n modelValue: '',\n value: null,\n resize: false,\n maxlength: undefined,\n rows: undefined,\n placeholder: undefined,\n });\n\n const emits = defineEmits<{\n /**\n * Emitted when the model value changes.\n */\n (e: 'update:model-value', value: string): void;\n }>();\n\n const textareaRef = ref<HTMLTextAreaElement>();\n const observer = ref<ResizeObserver>();\n const isReadOnly = computed(() => props.isReadOnly || ('readonly' in attrs && attrs.readonly !== false));\n\n const inputAttrs = computed(() => {\n const allAttrs = { ...attrs };\n\n delete allAttrs['data-test'];\n delete allAttrs.class;\n\n return allAttrs;\n });\n\n watch(\n () => props.resize,\n (v) => {\n if (v) {\n setupResizeObserver();\n } else {\n observer.value?.disconnect();\n }\n },\n );\n\n const onInput = (event: Event) => {\n emits('update:model-value', (event.target as HTMLTextAreaElement).value);\n };\n\n const setupResizeObserver = () => {\n if (observer.value || !textareaRef.value) {\n return;\n }\n\n // the ResizeObserver will be in charge to detect if page needs to scroll when resizing the component\n observer.value = new ResizeObserver((entries) => {\n const entry = entries[0];\n\n if (!entry) {\n return;\n }\n\n const { target } = entry;\n const parent = findParentScrollable(textareaRef.value as HTMLTextAreaElement) || document.documentElement;\n\n const { scrollTop: scrollPosition } = parent;\n let offsetDiff = 0;\n\n // checks if the closest parent element scrollable is the document page\n if (parent === document.documentElement) {\n const { top, height } = getOffsetClipRect(target as HTMLElement);\n const { innerHeight: viewportHeight } = window;\n\n offsetDiff = Math.max(top + height - (viewportHeight + scrollPosition), 0);\n } else {\n const { top, height } = (target as HTMLElement).getBoundingClientRect();\n const { top: parentTop } = parent.getBoundingClientRect();\n const { offsetHeight: parentHeight } = parent;\n const offsetTop = top - parentTop;\n\n offsetDiff = Math.max(offsetTop + height - parentHeight, 0);\n }\n\n if (offsetDiff) {\n requestAnimationFrame(() => {\n parent.scrollTop = scrollPosition + offsetDiff;\n });\n }\n });\n\n observer.value.observe(textareaRef.value);\n };\n\n /**\n * Retrieve the closest parent that has a scroll. Defaults to the document page.\n */\n const findParentScrollable = (el: HTMLElement): HTMLElement | null => {\n const parent = el.parentElement as HTMLElement;\n if (!parent) {\n return null;\n }\n\n const { overflowY } = getComputedStyle(parent);\n if (overflowY !== 'visible') {\n return parent;\n }\n\n if (parent === document.body) {\n return document.documentElement;\n }\n\n return findParentScrollable(parent);\n };\n\n /**\n * Retrieve element absolute positioning relative to the page.\n */\n const getOffsetClipRect = (el: HTMLElement) => {\n const { offsetWidth: width, offsetHeight: height } = el;\n\n let left = 0;\n let top = 0;\n\n const findPos = function ({ offsetLeft, offsetTop, offsetParent }: HTMLElement) {\n left += offsetLeft;\n top += offsetTop;\n\n if (offsetParent) {\n findPos(offsetParent as HTMLElement);\n }\n };\n\n findPos(el);\n\n return {\n top,\n left,\n width,\n height,\n };\n };\n\n onMounted(async () => {\n if (props.value !== null) {\n throw new Error('ll-input: use :model-value or v-model instead of :value.');\n }\n\n if (attrs.onInput) {\n throw new Error('ll-input: use the @update:model-value event instead of @input');\n }\n\n if (\n (typeof props.resize === 'boolean' && props.resize) ||\n (props.resize as TextareaResizeOptions)?.forceBrowserScroll\n ) {\n await nextTick();\n setupResizeObserver();\n }\n });\n\n onBeforeUnmount(() => {\n observer.value?.disconnect();\n });\n</script>\n\n<template>\n <Field v-bind=\"props\" class=\"stash-textarea\" :class=\"[classes.root]\" data-test=\"stash-textarea\">\n <template #default=\"{ fieldId, fieldErrorId, hasError }\">\n <textarea\n :id=\"fieldId\"\n ref=\"textareaRef\"\n :aria-errormessage=\"fieldErrorId\"\n :aria-invalid=\"hasError\"\n :class=\"[\n classes.textarea,\n 'tw-border tw-border-ice-500',\n {\n 'stash-textarea--error tw-border-red-500 tw-text-red-500': hasError,\n 'tw-text-ice-700 hover:tw-border-ice-500 focus:tw-border-blue-500 active:tw-border-blue-500':\n !hasError && !props.disabled,\n 'tw-resize-y': props.resize,\n 'tw-min-h-[100px]': !props.rows,\n 'tw-resize-none': !props.resize,\n },\n ]\"\n :maxlength=\"props.maxlength\"\n :value=\"props.modelValue\"\n data-test=\"stash-textarea|textarea\"\n :placeholder=\"props.placeholder\"\n v-bind=\"inputAttrs\"\n :disabled=\"props.disabled\"\n :readonly=\"isReadOnly\"\n :rows=\"props.rows\"\n @input=\"onInput\"\n ></textarea>\n </template>\n <template v-if=\"slots.hint\" #hint>\n <!-- @slot Hint content -->\n <slot name=\"hint\"></slot>\n </template>\n </Field>\n</template>\n\n<style module>\n .root {\n position: relative;\n width: 100%;\n }\n\n .textarea {\n background: var(--color-white);\n border-radius: theme('borderRadius.DEFAULT');\n display: block;\n outline: none;\n padding: theme('spacing[1.5]');\n width: 100%;\n\n &::placeholder {\n color: var(--color-ice-500);\n opacity: 1;\n }\n\n &[disabled] {\n background-color: var(--color-ice-100);\n border-color: var(--color-ice-500);\n color: var(--color-ice-500);\n pointer-events: none;\n }\n\n &[disabled]:active,\n &[disabled]:focus {\n box-shadow: none;\n }\n\n &[disabled]::placeholder {\n text-transform: none;\n color: var(--color-ice-500);\n }\n\n &[readonly] {\n border-color: transparent;\n background-color: transparent;\n padding-left: 0;\n padding-right: 0;\n min-height: unset;\n }\n }\n</style>\n"],"names":["attrs","useAttrs","slots","useSlots","classes","useCssModule","props","__props","emits","__emit","textareaRef","ref","observer","isReadOnly","computed","inputAttrs","allAttrs","watch","v","setupResizeObserver","onInput","event","entries","entry","target","parent","findParentScrollable","scrollPosition","offsetDiff","top","height","getOffsetClipRect","viewportHeight","parentTop","parentHeight","offsetTop","el","overflowY","width","left","findPos","offsetLeft","offsetParent","onMounted","nextTick","onBeforeUnmount","_createBlock","Field","_mergeProps","_unref","fieldId","fieldErrorId","hasError","_createElementVNode","_renderSlot","_ctx"],"mappings":"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"}
@@ -1,63 +1,28 @@
1
1
  import { ComponentOptionsMixin } from 'vue';
2
2
  import { ComponentProvideOptions } from 'vue';
3
3
  import { DefineComponent } from 'vue';
4
- import { ExtractPropTypes } from 'vue';
5
- import { PropType } from 'vue';
6
4
  import { PublicProps } from 'vue';
7
5
 
8
- declare type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
9
-
10
- declare type __VLS_Prettify<T> = {
11
- [K in keyof T]: T[K];
12
- } & {};
13
-
14
- declare type __VLS_TypePropsToRuntimeProps<T> = {
15
- [K in keyof T]-?: {} extends Pick<T, K> ? {
16
- type: PropType<__VLS_NonUndefinedable<T[K]>>;
17
- } : {
18
- type: PropType<T[K]>;
19
- required: true;
20
- };
21
- };
22
-
23
- declare type __VLS_WithDefaults<P, D> = {
24
- [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_Prettify<P[K] & {
25
- default: D[K];
26
- }> : P[K];
27
- };
28
-
29
6
  declare type __VLS_WithTemplateSlots<T, S> = T & {
30
7
  new (): {
31
8
  $slots: S;
32
9
  };
33
10
  };
34
11
 
35
- declare const _default: __VLS_WithTemplateSlots<DefineComponent<ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<TextAreaProps>, {
36
- modelValue: string;
37
- value: null;
38
- resize: boolean;
39
- maxlength: undefined;
40
- rows: undefined;
41
- placeholder: undefined;
42
- }>>, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
43
- "update:model-value": (value: string) => void;
44
- }, string, PublicProps, Readonly<ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<TextAreaProps>, {
45
- modelValue: string;
46
- value: null;
47
- resize: boolean;
48
- maxlength: undefined;
49
- rows: undefined;
50
- placeholder: undefined;
51
- }>>> & Readonly<{
12
+ declare const _default: __VLS_WithTemplateSlots<DefineComponent<TextAreaProps, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {} & {
13
+ "update:model-value": (value: string) => any;
14
+ }, string, PublicProps, Readonly<TextAreaProps> & Readonly<{
52
15
  "onUpdate:model-value"?: ((value: string) => any) | undefined;
53
16
  }>, {
54
17
  resize: boolean | TextareaResizeOptions;
18
+ value: string | number | null;
55
19
  placeholder: string;
56
20
  modelValue: string;
57
- value: string | number | null;
58
21
  maxlength: number;
59
22
  rows: number;
60
- }, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>, {
23
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {
24
+ textareaRef: HTMLTextAreaElement;
25
+ }, any>, {
61
26
  hint?(_: {}): any;
62
27
  }>;
63
28
  export default _default;
@@ -119,7 +84,7 @@ declare interface FieldProps {
119
84
  disabled?: boolean;
120
85
  }
121
86
 
122
- export declare interface TextAreaProps extends FieldProps {
87
+ declare interface TextAreaProps extends FieldProps {
123
88
  /**
124
89
  * Value for the textarea element.
125
90
  */
@@ -149,7 +114,7 @@ export declare interface TextAreaProps extends FieldProps {
149
114
  maxlength?: number;
150
115
  }
151
116
 
152
- export declare interface TextareaResizeOptions {
117
+ declare interface TextareaResizeOptions {
153
118
  /**
154
119
  * It will automatically scroll the page down when it reaches the bottom of the viewport/element
155
120
  */
package/dist/Thumbnail.js CHANGED
@@ -2,7 +2,7 @@ import { defineComponent as w, useCssModule as q, inject as C, computed as T, to
2
2
  import { t as V } from "./locale.js";
3
3
  import z from "./Button.js";
4
4
  import E from "./Icon.js";
5
- import { _ as U } from "./Image.vue_vue_type_script_setup_true_lang-D5u4av0_.js";
5
+ import { _ as U } from "./Image.vue_vue_type_script_setup_true_lang-Dg2Zk2r2.js";
6
6
  import { T as d } from "./ThumbnailGroup.keys-EJ4qFNhx.js";
7
7
  import { _ as j } from "./_plugin-vue_export-helper-CHgC5LLL.js";
8
8
  const A = ["aria-current", "draggable"], D = /* @__PURE__ */ w({
@@ -1 +1 @@
1
- {"version":3,"file":"Thumbnail.js","sources":["../src/components/Thumbnail/Thumbnail.vue"],"sourcesContent":["<script lang=\"ts\">\n import { ThumbnailDefinition, ThumbnailVariant } from './Thumbnail.types';\n\n export * from './Thumbnail.types';\n</script>\n\n<script setup lang=\"ts\" generic=\"ThumbnailItem extends ThumbnailDefinition\">\n import { computed, inject, toValue, useCssModule } from 'vue';\n\n import { t } from '../../locale';\n import Button from '../Button/Button.vue';\n import Icon from '../Icon/Icon.vue';\n import Image from '../Image/Image.vue';\n import { THUMBNAIL_INJECTION } from '../ThumbnailGroup/ThumbnailGroup.keys';\n\n const props = withDefaults(\n defineProps<{\n /**\n * Thumbnail data containing and id and the image url\n */\n thumbnail: ThumbnailItem;\n\n /**\n * Thumbnail alt text for the image\n * @default ''\n */\n altText?: string;\n\n /**\n * Whether the thumbnail has some transparency or is fully opaque\n * @default 'opaque'\n */\n variant?: ThumbnailVariant;\n }>(),\n {\n variant: 'opaque',\n altText: '',\n },\n );\n\n const emit = defineEmits<{\n /**\n * Emits when a thumbnail is removed\n */\n remove: [index: number];\n\n /**\n * Emits when a thumbnail is clicked\n */\n click: [index: number];\n }>();\n\n const classes = useCssModule();\n\n const { thumbnails, activeThumbnail, draggable, isDragging, radius, removable } = inject(\n THUMBNAIL_INJECTION.key,\n THUMBNAIL_INJECTION.defaults,\n );\n\n const thumbnailIndex = computed(() => toValue(thumbnails).findIndex((t) => t === props.thumbnail));\n\n function handleThumbnailClick() {\n activeThumbnail.value = thumbnailIndex.value;\n emit('click', thumbnailIndex.value);\n }\n\n function handleRemove() {\n emit('remove', thumbnailIndex.value);\n activeThumbnail.value = -1;\n }\n</script>\n\n<template>\n <li\n class=\"stash-thumbnail tw-group tw-relative tw-cursor-pointer focus-visible:tw-outline-none\"\n :class=\"[\n {\n [classes['thumbnail-translucent']]: props.variant === 'translucent',\n [classes['thumbnail-opaque']]: props.variant === 'opaque',\n [classes['thumbnail-removable']]: removable,\n [classes['thumbnail-circle']]: radius === 'circle',\n [classes['thumbnail-rounded']]: radius === 'rounded',\n },\n ]\"\n :aria-current=\"activeThumbnail === thumbnailIndex\"\n :draggable=\"draggable\"\n data-test=\"stash-thumbnail\"\n tabindex=\"0\"\n @click=\"handleThumbnailClick()\"\n >\n <Image\n class=\"stash-thumbnail__img tw-border-ice-200 tw-outline-blue-500/15 tw-transition-colors\"\n :class=\"[\n classes['thumbnail-img'],\n {\n [classes['thumbnail-mask']]: removable && radius !== 'circle',\n [classes['thumbnail-active']]: activeThumbnail === thumbnailIndex && !isDragging,\n 'group-hover:tw-border-blue-500 group-focus-visible:tw-border-blue-500 group-focus-visible:tw-outline':\n !isDragging,\n },\n ]\"\n data-test=\"stash-thumbnail|img\"\n :radius=\"radius\"\n :src=\"thumbnail.imageUrl\"\n :alt=\"altText\"\n />\n\n <Button\n v-if=\"removable\"\n class=\"stash-thumbnail__remove\"\n :class=\"[classes['thumbnail-remove']]\"\n data-test=\"stash-thumbnail|remove\"\n :aria-label=\"t('ll.thumbnail.removeButton', { index: thumbnailIndex + 1 })\"\n type=\"button\"\n icon\n @click.stop.prevent=\"handleRemove\"\n >\n <Icon name=\"close\" size=\"small\" />\n </Button>\n\n <!-- @slot: Slot to add a hint below the image -->\n <slot name=\"hint\" />\n </li>\n</template>\n\n<style module>\n .thumbnail-remove {\n position: absolute;\n top: calc(theme('spacing[1.5]') * -1);\n right: calc(theme('spacing[1.5]') * -1);\n padding: 1px;\n height: auto;\n width: auto !important;\n min-width: auto;\n border-radius: theme('borderRadius.full');\n background: var(--color-blue-500);\n color: white;\n\n &:hover,\n &:focus {\n background: var(--color-blue-600);\n }\n\n &:focus {\n outline: none;\n }\n }\n\n .thumbnail-img {\n border-style: solid;\n object-fit: cover;\n height: theme('spacing.12');\n width: theme('spacing.12');\n border-width: 1px;\n outline-width: theme('borderSpacing.1');\n\n .thumbnail-translucent & {\n opacity: theme('opacity.40');\n\n &:hover,\n &.thumbnail-active {\n opacity: theme('opacity.100');\n }\n }\n }\n\n .thumbnail-active {\n border: 1px solid var(--color-ice-500);\n }\n\n .thumbnail-mask {\n mask-image: radial-gradient(circle at top right, transparent 20%, white 20.5%);\n }\n\n .thumbnail-full {\n border-radius: theme('borderRadius.full');\n }\n\n .thumbnail-rounded {\n border-radius: theme('borderRadius.DEFAULT');\n }\n</style>\n"],"names":["props","__props","emit","__emit","classes","useCssModule","thumbnails","activeThumbnail","draggable","isDragging","radius","removable","inject","THUMBNAIL_INJECTION","thumbnailIndex","computed","toValue","t","handleThumbnailClick","handleRemove"],"mappings":";;;;;;;;;;;;;;;;AAeE,UAAMA,IAAQC,GAyBRC,IAAOC,GAYPC,IAAUC,EAAa,GAEvB,EAAE,YAAAC,GAAY,iBAAAC,GAAiB,WAAAC,GAAW,YAAAC,GAAY,QAAAC,GAAQ,WAAAC,MAAcC;AAAA,MAChFC,EAAoB;AAAA,MACpBA,EAAoB;AAAA,IACtB,GAEMC,IAAiBC,EAAS,MAAMC,EAAQV,CAAU,EAAE,UAAU,CAACW,MAAMA,MAAMjB,EAAM,SAAS,CAAC;AAEjG,aAASkB,IAAuB;AAC9B,MAAAX,EAAgB,QAAQO,EAAe,OAClCZ,EAAA,SAASY,EAAe,KAAK;AAAA,IAAA;AAGpC,aAASK,IAAe;AACjB,MAAAjB,EAAA,UAAUY,EAAe,KAAK,GACnCP,EAAgB,QAAQ;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Thumbnail.js","sources":["../src/components/Thumbnail/Thumbnail.vue"],"sourcesContent":["<script lang=\"ts\">\n import { ThumbnailDefinition, ThumbnailVariant } from './Thumbnail.types';\n\n export * from './Thumbnail.types';\n</script>\n\n<script setup lang=\"ts\" generic=\"ThumbnailItem extends ThumbnailDefinition\">\n import { computed, inject, toValue, useCssModule } from 'vue';\n\n import { t } from '../../locale';\n import Button from '../Button/Button.vue';\n import Icon from '../Icon/Icon.vue';\n import Image from '../Image/Image.vue';\n import { THUMBNAIL_INJECTION } from '../ThumbnailGroup/ThumbnailGroup.keys';\n\n const props = withDefaults(\n defineProps<{\n /**\n * Thumbnail data containing and id and the image url\n */\n thumbnail: ThumbnailItem;\n\n /**\n * Thumbnail alt text for the image\n * @default ''\n */\n altText?: string;\n\n /**\n * Whether the thumbnail has some transparency or is fully opaque\n * @default 'opaque'\n */\n variant?: ThumbnailVariant;\n }>(),\n {\n variant: 'opaque',\n altText: '',\n },\n );\n\n const emit = defineEmits<{\n /**\n * Emits when a thumbnail is removed\n */\n remove: [index: number];\n\n /**\n * Emits when a thumbnail is clicked\n */\n click: [index: number];\n }>();\n\n const classes = useCssModule();\n\n const { thumbnails, activeThumbnail, draggable, isDragging, radius, removable } = inject(\n THUMBNAIL_INJECTION.key,\n THUMBNAIL_INJECTION.defaults,\n );\n\n const thumbnailIndex = computed(() => toValue(thumbnails).findIndex((t) => t === props.thumbnail));\n\n function handleThumbnailClick() {\n activeThumbnail.value = thumbnailIndex.value;\n emit('click', thumbnailIndex.value);\n }\n\n function handleRemove() {\n emit('remove', thumbnailIndex.value);\n activeThumbnail.value = -1;\n }\n</script>\n\n<template>\n <li\n class=\"stash-thumbnail tw-group tw-relative tw-cursor-pointer focus-visible:tw-outline-none\"\n :class=\"[\n {\n [classes['thumbnail-translucent']]: props.variant === 'translucent',\n [classes['thumbnail-opaque']]: props.variant === 'opaque',\n [classes['thumbnail-removable']]: removable,\n [classes['thumbnail-circle']]: radius === 'circle',\n [classes['thumbnail-rounded']]: radius === 'rounded',\n },\n ]\"\n :aria-current=\"activeThumbnail === thumbnailIndex\"\n :draggable=\"draggable\"\n data-test=\"stash-thumbnail\"\n tabindex=\"0\"\n @click=\"handleThumbnailClick()\"\n >\n <Image\n class=\"stash-thumbnail__img tw-border-ice-200 tw-outline-blue-500/15 tw-transition-colors\"\n :class=\"[\n classes['thumbnail-img'],\n {\n [classes['thumbnail-mask']]: removable && radius !== 'circle',\n [classes['thumbnail-active']]: activeThumbnail === thumbnailIndex && !isDragging,\n 'group-hover:tw-border-blue-500 group-focus-visible:tw-border-blue-500 group-focus-visible:tw-outline':\n !isDragging,\n },\n ]\"\n data-test=\"stash-thumbnail|img\"\n :radius=\"radius\"\n :src=\"thumbnail.imageUrl\"\n :alt=\"altText\"\n />\n\n <Button\n v-if=\"removable\"\n class=\"stash-thumbnail__remove\"\n :class=\"[classes['thumbnail-remove']]\"\n data-test=\"stash-thumbnail|remove\"\n :aria-label=\"t('ll.thumbnail.removeButton', { index: thumbnailIndex + 1 })\"\n type=\"button\"\n icon\n @click.stop.prevent=\"handleRemove\"\n >\n <Icon name=\"close\" size=\"small\" />\n </Button>\n\n <!-- @slot: Slot to add a hint below the image -->\n <slot name=\"hint\" />\n </li>\n</template>\n\n<style module>\n .thumbnail-remove {\n position: absolute;\n top: calc(theme('spacing[1.5]') * -1);\n right: calc(theme('spacing[1.5]') * -1);\n padding: 1px;\n height: auto;\n width: auto !important;\n min-width: auto;\n border-radius: theme('borderRadius.full');\n background: var(--color-blue-500);\n color: white;\n\n &:hover,\n &:focus {\n background: var(--color-blue-600);\n }\n\n &:focus {\n outline: none;\n }\n }\n\n .thumbnail-img {\n border-style: solid;\n object-fit: cover;\n height: theme('spacing.12');\n width: theme('spacing.12');\n border-width: 1px;\n outline-width: theme('borderSpacing.1');\n\n .thumbnail-translucent & {\n opacity: theme('opacity.40');\n\n &:hover,\n &.thumbnail-active {\n opacity: theme('opacity.100');\n }\n }\n }\n\n .thumbnail-active {\n border: 1px solid var(--color-ice-500);\n }\n\n .thumbnail-mask {\n mask-image: radial-gradient(circle at top right, transparent 20%, white 20.5%);\n }\n\n .thumbnail-full {\n border-radius: theme('borderRadius.full');\n }\n\n .thumbnail-rounded {\n border-radius: theme('borderRadius.DEFAULT');\n }\n</style>\n"],"names":["props","__props","emit","__emit","classes","useCssModule","thumbnails","activeThumbnail","draggable","isDragging","radius","removable","inject","THUMBNAIL_INJECTION","thumbnailIndex","computed","toValue","t","handleThumbnailClick","handleRemove","_createElementBlock","_unref","_createVNode","Image","thumbnail","altText","_createBlock","Button","_normalizeClass","Icon","_renderSlot","_ctx"],"mappings":";;;;;;;;;;;;;;;;AAeE,UAAMA,IAAQC,GAyBRC,IAAOC,GAYPC,IAAUC,EAAA,GAEV,EAAE,YAAAC,GAAY,iBAAAC,GAAiB,WAAAC,GAAW,YAAAC,GAAY,QAAAC,GAAQ,WAAAC,MAAcC;AAAA,MAChFC,EAAoB;AAAA,MACpBA,EAAoB;AAAA,IAAA,GAGhBC,IAAiBC,EAAS,MAAMC,EAAQV,CAAU,EAAE,UAAU,CAACW,MAAMA,MAAMjB,EAAM,SAAS,CAAC;AAEjG,aAASkB,IAAuB;AAC9B,MAAAX,EAAgB,QAAQO,EAAe,OACvCZ,EAAK,SAASY,EAAe,KAAK;AAAA,IACpC;AAEA,aAASK,IAAe;AACtB,MAAAjB,EAAK,UAAUY,EAAe,KAAK,GACnCP,EAAgB,QAAQ;AAAA,IAC1B;2BAIAa,EAiDK,MAAA;AAAA,MAhDH,UAAM,wFAAsF;AAAA;WACjEC,EAAAjB,CAAA,EAAO,uBAAA,CAAA,GAA4BJ,EAAM,YAAO;AAAA,WAA6BqB,EAAAjB,CAAA,EAAO,kBAAA,CAAA,GAAuBJ,EAAM,YAAO;AAAA,UAAwB,CAAAqB,EAAAjB,CAAA,2BAAiCiB,EAAAV,CAAA;AAAA,UAAoB,CAAAU,EAAAjB,CAAA,wBAA8BiB,EAAAX,CAAA,MAAM;AAAA,UAAwB,CAAAW,EAAAjB,CAAA,yBAA+BiB,EAAAX,CAAA,MAAM;AAAA,QAAA;AAAA;MAShU,gBAAcW,EAAAd,CAAA,MAAoBO,EAAA;AAAA,MAClC,WAAWO,EAAAb,CAAA;AAAA,MACZ,aAAU;AAAA,MACV,UAAS;AAAA,MACR,gCAAOU,EAAA;AAAA,IAAoB;MAE5BI,EAeEC,GAAA;AAAA,QAdA,UAAM,sFAAoF;AAAA,UACxEF,EAAAjB,CAAA,EAAO,eAAA;AAAA;aAAwCiB,EAAAjB,CAAA,EAAO,gBAAA,CAAA,GAAqBiB,EAAAV,CAAA,KAAaU,EAAAX,CAAA,MAAM;AAAA,YAA0B,CAAAW,EAAAjB,CAAA,EAAO,kBAAA,CAAA,GAAuBiB,EAAAd,CAAA,MAAoBO,EAAA,UAAmBO,EAAAZ,CAAA;AAAA,qHAA2IY,EAAAZ,CAAA;AAAA,UAAA;AAAA;QAS1V,aAAU;AAAA,QACT,QAAQY,EAAAX,CAAA;AAAA,QACR,KAAKc,EAAAA,UAAU;AAAA,QACf,KAAKC,EAAAA;AAAAA,MAAAA;MAIAJ,EAAAV,CAAA,UADRe,EAWSC,GAAA;AAAA;QATP,OAAKC,EAAA,CAAC,2BAAyB,CACtBP,EAAAjB,CAAA,EAAO,kBAAA,CAAA,CAAA,CAAA;AAAA,QAChB,aAAU;AAAA,QACT,cAAYiB,EAAAJ,CAAA,EAAC,6BAAA,EAAA,OAAuCH,EAAA,QAAc,GAAA;AAAA,QACnE,MAAK;AAAA,QACL,MAAA;AAAA,QACC,WAAoBK,GAAY,CAAA,QAAA,SAAA,CAAA;AAAA,MAAA;mBAEjC,MAAkC;AAAA,UAAlCG,EAAkCO,GAAA;AAAA,YAA5B,MAAK;AAAA,YAAQ,MAAK;AAAA,UAAA;;;;MAI1BC,EAAoBC,EAAA,QAAA,MAAA;AAAA,IAAA;;;;;;;;;;;;;"}
@@ -9,22 +9,22 @@ import { VNodeProps } from 'vue';
9
9
  declare const _default: <ThumbnailItem extends ThumbnailDefinition>(__VLS_props: {
10
10
  readonly onClick?: ((index: number) => any) | undefined;
11
11
  readonly onRemove?: ((index: number) => any) | undefined;
12
- variant?: ThumbnailVariant | undefined;
13
12
  thumbnail: ThumbnailItem;
14
13
  altText?: string | undefined;
14
+ variant?: ThumbnailVariant | undefined;
15
15
  } & VNodeProps & AllowedComponentProps & ComponentCustomProps, __VLS_ctx?: {
16
- attrs: any;
17
16
  slots: {
18
17
  hint?(_: {}): any;
19
18
  };
19
+ attrs: any;
20
20
  emit: ((evt: "click", index: number) => void) & ((evt: "remove", index: number) => void);
21
21
  } | undefined, __VLS_expose?: ((exposed: ShallowUnwrapRef< {}>) => void) | undefined, __VLS_setup?: Promise<{
22
22
  props: {
23
23
  readonly onClick?: ((index: number) => any) | undefined;
24
24
  readonly onRemove?: ((index: number) => any) | undefined;
25
- variant?: ThumbnailVariant | undefined;
26
25
  thumbnail: ThumbnailItem;
27
26
  altText?: string | undefined;
27
+ variant?: ThumbnailVariant | undefined;
28
28
  } & VNodeProps & AllowedComponentProps & ComponentCustomProps;
29
29
  expose(exposed: ShallowUnwrapRef< {}>): void;
30
30
  attrs: any;
@@ -39,9 +39,9 @@ declare const _default: <ThumbnailItem extends ThumbnailDefinition>(__VLS_props:
39
39
  props: {
40
40
  readonly onClick?: ((index: number) => any) | undefined;
41
41
  readonly onRemove?: ((index: number) => any) | undefined;
42
- variant?: ThumbnailVariant | undefined;
43
42
  thumbnail: ThumbnailItem;
44
43
  altText?: string | undefined;
44
+ variant?: ThumbnailVariant | undefined;
45
45
  } & VNodeProps & AllowedComponentProps & ComponentCustomProps;
46
46
  expose(exposed: ShallowUnwrapRef< {}>): void;
47
47
  attrs: any;
@@ -1 +1 @@
1
- {"version":3,"file":"ThumbnailEmpty.js","sources":["../src/components/ThumbnailEmpty/ThumbnailEmpty.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { inject, useCssModule } from 'vue';\n\n import Icon from '../Icon/Icon.vue';\n import { THUMBNAIL_INJECTION } from '../ThumbnailGroup/ThumbnailGroup.keys';\n\n const classes = useCssModule();\n\n const { radius } = inject(THUMBNAIL_INJECTION.key, THUMBNAIL_INJECTION.defaults);\n</script>\n\n<template>\n <li\n class=\"stash-thumbnail-empty\"\n :class=\"[\n classes['thumbnail-empty'],\n {\n 'tw-rounded-full': radius === 'circle',\n 'tw-rounded': radius === 'rounded',\n },\n ]\"\n data-test=\"stash-thumbnail-empty\"\n >\n <Icon name=\"image\" data-test=\"stash-thumbnail-empty|icon\" />\n </li>\n</template>\n\n<style module>\n .thumbnail-empty {\n height: theme('spacing.12');\n width: theme('spacing.12');\n border-width: 1px;\n outline-width: theme('borderSpacing.1');\n border-style: dashed;\n border-color: var(--colors-ice-500);\n background-color: var(--colors-ice-100);\n color: var(--colors-ice-700);\n display: flex;\n justify-content: center;\n align-items: center;\n }\n</style>\n"],"names":["classes","useCssModule","radius","inject","THUMBNAIL_INJECTION"],"mappings":";;;;;;;AAME,UAAMA,IAAUC,EAAa,GAEvB,EAAE,QAAAC,EAAO,IAAIC,EAAOC,EAAoB,KAAKA,EAAoB,QAAQ;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"ThumbnailEmpty.js","sources":["../src/components/ThumbnailEmpty/ThumbnailEmpty.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { inject, useCssModule } from 'vue';\n\n import Icon from '../Icon/Icon.vue';\n import { THUMBNAIL_INJECTION } from '../ThumbnailGroup/ThumbnailGroup.keys';\n\n const classes = useCssModule();\n\n const { radius } = inject(THUMBNAIL_INJECTION.key, THUMBNAIL_INJECTION.defaults);\n</script>\n\n<template>\n <li\n class=\"stash-thumbnail-empty\"\n :class=\"[\n classes['thumbnail-empty'],\n {\n 'tw-rounded-full': radius === 'circle',\n 'tw-rounded': radius === 'rounded',\n },\n ]\"\n data-test=\"stash-thumbnail-empty\"\n >\n <Icon name=\"image\" data-test=\"stash-thumbnail-empty|icon\" />\n </li>\n</template>\n\n<style module>\n .thumbnail-empty {\n height: theme('spacing.12');\n width: theme('spacing.12');\n border-width: 1px;\n outline-width: theme('borderSpacing.1');\n border-style: dashed;\n border-color: var(--colors-ice-500);\n background-color: var(--colors-ice-100);\n color: var(--colors-ice-700);\n display: flex;\n justify-content: center;\n align-items: center;\n }\n</style>\n"],"names":["classes","useCssModule","radius","inject","THUMBNAIL_INJECTION","_createElementBlock","_unref","_createVNode","Icon"],"mappings":";;;;;;;AAME,UAAMA,IAAUC,EAAA,GAEV,EAAE,QAAAC,EAAA,IAAWC,EAAOC,EAAoB,KAAKA,EAAoB,QAAQ;2BAI/EC,EAYK,MAAA;AAAA,MAXH,UAAM,yBAAuB;AAAA,QACbC,EAAAN,CAAA,EAAO,iBAAA;AAAA;6BAAwDM,EAAAJ,CAAA,MAAM;AAAA,wBAAqCI,EAAAJ,CAAA,MAAM;AAAA,QAAA;AAAA;MAOhI,aAAU;AAAA,IAAA;MAEVK,EAA4DC,GAAA;AAAA,QAAtD,MAAK;AAAA,QAAQ,aAAU;AAAA,MAAA;;;;;;;;"}
@@ -3,7 +3,7 @@ import { ComponentProvideOptions } from 'vue';
3
3
  import { DefineComponent } from 'vue';
4
4
  import { PublicProps } from 'vue';
5
5
 
6
- declare const _default: DefineComponent< {}, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;
6
+ declare const _default: DefineComponent< {}, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, HTMLLIElement>;
7
7
  export default _default;
8
8
 
9
9
  export { }
@@ -1 +1 @@
1
- {"version":3,"file":"ThumbnailGroup.js","sources":["../src/components/ThumbnailGroup/ThumbnailGroup.vue"],"sourcesContent":["<script lang=\"ts\">\n import type { ThumbnailEmptyOptions, ThumbnailRadius } from './ThumbnailGroup.types';\n\n export * from '../../composables/useSortable/useSortable';\n export * from './ThumbnailGroup.types';\n</script>\n\n<script setup lang=\"ts\" generic=\"Thumbnail extends ThumbnailDefinition\">\n import { computed, provide, ref } from 'vue';\n\n import useSortable, {\n moveSortableElements,\n type SortableOnDragEndEvent,\n type SortableOnDragStartEvent,\n } from '../../composables/useSortable/useSortable';\n import { ThumbnailDefinition } from '../Thumbnail/Thumbnail.types';\n import ThumbnailEmpty from '../ThumbnailEmpty/ThumbnailEmpty.vue';\n import { THUMBNAIL_INJECTION } from './ThumbnailGroup.keys';\n\n const emit = defineEmits<{\n /**\n * Emits when a thumbnail starts dragging\n */\n dragStart: [event: SortableOnDragStartEvent];\n\n /**\n * Emits when a thumbnail stops dragging\n */\n dragEnd: [event: SortableOnDragEndEvent];\n\n /**\n * Emits when the thumbnails are updated\n */\n 'update:thumbnails': [thumbnails: Thumbnail[]];\n }>();\n\n const props = withDefaults(\n defineProps<{\n /**\n * Enable drag and drop functionality\n * @default false\n */\n draggable?: boolean;\n\n /**\n * Thumbnail radius. Can be 'rounded' or 'circle'\n * @default 'rounded'\n */\n radius?: ThumbnailRadius;\n\n /**\n * Shows a close button on the thumbnail when set to true\n * @default false\n */\n removable?: boolean;\n\n /**\n * Shows empty thumbnails when set to true\n */\n showEmpty?: boolean;\n\n /**\n * Empty thumbnail options. Only applicable when `showEmpty` is true\n * @default { max: 6 }\n */\n emptyOptions?: ThumbnailEmptyOptions;\n\n /**\n * List of thumbnails to display\n * @default []\n */\n thumbnails?: Thumbnail[];\n }>(),\n {\n thumbnails: () => [],\n draggable: false,\n radius: 'rounded',\n variant: 'opaque',\n removable: false,\n showEmpty: false,\n emptyOptions: () => ({ max: 6 }),\n },\n );\n\n /**\n * The active thumbnail index\n */\n const activeThumbnail = defineModel<number>('activeThumbnail', {\n default: -1,\n });\n\n const internalThumbnails = computed({\n get() {\n return props.thumbnails;\n },\n set(value) {\n emit('update:thumbnails', value);\n },\n });\n\n const thumbnailRef = ref<HTMLElement | null>(null);\n const { isDragging } = useSortable({\n ref: thumbnailRef,\n list: internalThumbnails,\n isEnabled: props.draggable,\n ghostClass: 'thumbnail-ghost',\n chosenClass: 'thumbnail-chosen',\n sortInPlace: false,\n onDragStart: (e) => emit('dragStart', e),\n onDragEnd: (e) => {\n activeThumbnail.value = e.newIndex;\n moveSortableElements({ list: internalThumbnails, from: e.oldIndex, to: e.newIndex });\n emit('dragEnd', e);\n },\n });\n\n const emptyThumbnailsCount = computed(() => {\n if (!props.showEmpty) return 0;\n\n const { max } = props.emptyOptions || {};\n\n return internalThumbnails.value.length < max ? max - internalThumbnails.value.length : 0;\n });\n\n provide(\n THUMBNAIL_INJECTION.key,\n Object.freeze({\n draggable: computed(() => props.draggable),\n removable: computed(() => props.removable),\n thumbnails: internalThumbnails,\n radius: props.radius,\n activeThumbnail,\n isDragging,\n }),\n );\n</script>\n\n<template>\n <ul ref=\"thumbnailRef\" class=\"stash-thumbnail-group tw-flex tw-flex-wrap tw-gap-3\" data-test=\"stash-thumbnail-group\">\n <slot v-bind=\"{ activeThumbnail, isDragging }\"></slot>\n\n <ThumbnailEmpty v-for=\"(_, index) in emptyThumbnailsCount\" :key=\"`empty_thumb_${index}`\" />\n </ul>\n</template>\n\n<style>\n .thumbnail-ghost {\n .stash-thumbnail-item__img {\n border: 1px solid var(-color-blue-500);\n mask-image: none !important;\n box-shadow: theme('boxShadow.DEFAULT');\n }\n\n .stash-thumbnail-item__remove {\n opacity: 0;\n }\n }\n</style>\n\n<style scoped>\n :deep(.thumbnail-chosen) {\n opacity: 0 !important;\n }\n</style>\n"],"names":["emit","__emit","props","__props","activeThumbnail","_useModel","internalThumbnails","computed","value","thumbnailRef","ref","isDragging","useSortable","moveSortableElements","emptyThumbnailsCount","max","provide","THUMBNAIL_INJECTION"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAmBE,UAAMA,IAAOC,GAiBPC,IAAQC,GAmDRC,IAAkBC,EAAoBF,GAAA,iBAE3C,GAEKG,IAAqBC,EAAS;AAAA,MAClC,MAAM;AACJ,eAAOL,EAAM;AAAA,MACf;AAAA,MACA,IAAIM,GAAO;AACT,QAAAR,EAAK,qBAAqBQ,CAAK;AAAA,MAAA;AAAA,IACjC,CACD,GAEKC,IAAeC,EAAwB,IAAI,GAC3C,EAAE,YAAAC,EAAW,IAAIC,EAAY;AAAA,MACjC,KAAKH;AAAA,MACL,MAAMH;AAAA,MACN,WAAWJ,EAAM;AAAA,MACjB,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,aAAa;AAAA,MACb,aAAa,CAAC,MAAMF,EAAK,aAAa,CAAC;AAAA,MACvC,WAAW,CAAC,MAAM;AAChB,QAAAI,EAAgB,QAAQ,EAAE,UACLS,EAAA,EAAE,MAAMP,GAAoB,MAAM,EAAE,UAAU,IAAI,EAAE,UAAU,GACnFN,EAAK,WAAW,CAAC;AAAA,MAAA;AAAA,IACnB,CACD,GAEKc,IAAuBP,EAAS,MAAM;AACtC,UAAA,CAACL,EAAM,UAAkB,QAAA;AAE7B,YAAM,EAAE,KAAAa,EAAA,IAAQb,EAAM,gBAAgB,CAAC;AAEvC,aAAOI,EAAmB,MAAM,SAASS,IAAMA,IAAMT,EAAmB,MAAM,SAAS;AAAA,IAAA,CACxF;AAED,WAAAU;AAAA,MACEC,EAAoB;AAAA,MACpB,OAAO,OAAO;AAAA,QACZ,WAAWV,EAAS,MAAML,EAAM,SAAS;AAAA,QACzC,WAAWK,EAAS,MAAML,EAAM,SAAS;AAAA,QACzC,YAAYI;AAAA,QACZ,QAAQJ,EAAM;AAAA,QACd,iBAAAE;AAAA,QACA,YAAAO;AAAA,MACD,CAAA;AAAA,IACH;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"ThumbnailGroup.js","sources":["../src/components/ThumbnailGroup/ThumbnailGroup.vue"],"sourcesContent":["<script lang=\"ts\">\n import type { ThumbnailEmptyOptions, ThumbnailRadius } from './ThumbnailGroup.types';\n\n export * from '../../composables/useSortable/useSortable';\n export * from './ThumbnailGroup.types';\n</script>\n\n<script setup lang=\"ts\" generic=\"Thumbnail extends ThumbnailDefinition\">\n import { computed, provide, ref } from 'vue';\n\n import useSortable, {\n moveSortableElements,\n type SortableOnDragEndEvent,\n type SortableOnDragStartEvent,\n } from '../../composables/useSortable/useSortable';\n import { ThumbnailDefinition } from '../Thumbnail/Thumbnail.types';\n import ThumbnailEmpty from '../ThumbnailEmpty/ThumbnailEmpty.vue';\n import { THUMBNAIL_INJECTION } from './ThumbnailGroup.keys';\n\n const emit = defineEmits<{\n /**\n * Emits when a thumbnail starts dragging\n */\n dragStart: [event: SortableOnDragStartEvent];\n\n /**\n * Emits when a thumbnail stops dragging\n */\n dragEnd: [event: SortableOnDragEndEvent];\n\n /**\n * Emits when the thumbnails are updated\n */\n 'update:thumbnails': [thumbnails: Thumbnail[]];\n }>();\n\n const props = withDefaults(\n defineProps<{\n /**\n * Enable drag and drop functionality\n * @default false\n */\n draggable?: boolean;\n\n /**\n * Thumbnail radius. Can be 'rounded' or 'circle'\n * @default 'rounded'\n */\n radius?: ThumbnailRadius;\n\n /**\n * Shows a close button on the thumbnail when set to true\n * @default false\n */\n removable?: boolean;\n\n /**\n * Shows empty thumbnails when set to true\n */\n showEmpty?: boolean;\n\n /**\n * Empty thumbnail options. Only applicable when `showEmpty` is true\n * @default { max: 6 }\n */\n emptyOptions?: ThumbnailEmptyOptions;\n\n /**\n * List of thumbnails to display\n * @default []\n */\n thumbnails?: Thumbnail[];\n }>(),\n {\n thumbnails: () => [],\n draggable: false,\n radius: 'rounded',\n variant: 'opaque',\n removable: false,\n showEmpty: false,\n emptyOptions: () => ({ max: 6 }),\n },\n );\n\n /**\n * The active thumbnail index\n */\n const activeThumbnail = defineModel<number>('activeThumbnail', {\n default: -1,\n });\n\n const internalThumbnails = computed({\n get() {\n return props.thumbnails;\n },\n set(value) {\n emit('update:thumbnails', value);\n },\n });\n\n const thumbnailRef = ref<HTMLElement | null>(null);\n const { isDragging } = useSortable({\n ref: thumbnailRef,\n list: internalThumbnails,\n isEnabled: props.draggable,\n ghostClass: 'thumbnail-ghost',\n chosenClass: 'thumbnail-chosen',\n sortInPlace: false,\n onDragStart: (e) => emit('dragStart', e),\n onDragEnd: (e) => {\n activeThumbnail.value = e.newIndex;\n moveSortableElements({ list: internalThumbnails, from: e.oldIndex, to: e.newIndex });\n emit('dragEnd', e);\n },\n });\n\n const emptyThumbnailsCount = computed(() => {\n if (!props.showEmpty) return 0;\n\n const { max } = props.emptyOptions || {};\n\n return internalThumbnails.value.length < max ? max - internalThumbnails.value.length : 0;\n });\n\n provide(\n THUMBNAIL_INJECTION.key,\n Object.freeze({\n draggable: computed(() => props.draggable),\n removable: computed(() => props.removable),\n thumbnails: internalThumbnails,\n radius: props.radius,\n activeThumbnail,\n isDragging,\n }),\n );\n</script>\n\n<template>\n <ul ref=\"thumbnailRef\" class=\"stash-thumbnail-group tw-flex tw-flex-wrap tw-gap-3\" data-test=\"stash-thumbnail-group\">\n <slot v-bind=\"{ activeThumbnail, isDragging }\"></slot>\n\n <ThumbnailEmpty v-for=\"(_, index) in emptyThumbnailsCount\" :key=\"`empty_thumb_${index}`\" />\n </ul>\n</template>\n\n<style>\n .thumbnail-ghost {\n .stash-thumbnail-item__img {\n border: 1px solid var(-color-blue-500);\n mask-image: none !important;\n box-shadow: theme('boxShadow.DEFAULT');\n }\n\n .stash-thumbnail-item__remove {\n opacity: 0;\n }\n }\n</style>\n\n<style scoped>\n :deep(.thumbnail-chosen) {\n opacity: 0 !important;\n }\n</style>\n"],"names":["emit","__emit","props","__props","activeThumbnail","_useModel","internalThumbnails","computed","value","thumbnailRef","ref","isDragging","useSortable","moveSortableElements","emptyThumbnailsCount","max","provide","THUMBNAIL_INJECTION","_createElementBlock","_renderSlot","_ctx","_normalizeProps","_guardReactiveProps","_unref","_openBlock","_Fragment","_renderList","_","index","_createBlock","ThumbnailEmpty"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAmBE,UAAMA,IAAOC,GAiBPC,IAAQC,GAmDRC,IAAkBC,EAAmBF,GAAC,iBAE3C,GAEKG,IAAqBC,EAAS;AAAA,MAClC,MAAM;AACJ,eAAOL,EAAM;AAAA,MACf;AAAA,MACA,IAAIM,GAAO;AACT,QAAAR,EAAK,qBAAqBQ,CAAK;AAAA,MACjC;AAAA,IAAA,CACD,GAEKC,IAAeC,EAAwB,IAAI,GAC3C,EAAE,YAAAC,EAAA,IAAeC,EAAY;AAAA,MACjC,KAAKH;AAAA,MACL,MAAMH;AAAA,MACN,WAAWJ,EAAM;AAAA,MACjB,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,aAAa;AAAA,MACb,aAAa,CAAC,MAAMF,EAAK,aAAa,CAAC;AAAA,MACvC,WAAW,CAAC,MAAM;AAChB,QAAAI,EAAgB,QAAQ,EAAE,UAC1BS,EAAqB,EAAE,MAAMP,GAAoB,MAAM,EAAE,UAAU,IAAI,EAAE,UAAU,GACnFN,EAAK,WAAW,CAAC;AAAA,MACnB;AAAA,IAAA,CACD,GAEKc,IAAuBP,EAAS,MAAM;AAC1C,UAAI,CAACL,EAAM,UAAW,QAAO;AAE7B,YAAM,EAAE,KAAAa,EAAA,IAAQb,EAAM,gBAAgB,CAAA;AAEtC,aAAOI,EAAmB,MAAM,SAASS,IAAMA,IAAMT,EAAmB,MAAM,SAAS;AAAA,IACzF,CAAC;AAED,WAAAU;AAAA,MACEC,EAAoB;AAAA,MACpB,OAAO,OAAO;AAAA,QACZ,WAAWV,EAAS,MAAML,EAAM,SAAS;AAAA,QACzC,WAAWK,EAAS,MAAML,EAAM,SAAS;AAAA,QACzC,YAAYI;AAAA,QACZ,QAAQJ,EAAM;AAAA,QACd,iBAAAE;AAAA,QACA,YAAAO;AAAA,MAAA,CACD;AAAA,IAAA,mBAKHO,EAIK,MAAA;AAAA,eAJG;AAAA,MAAJ,KAAIT;AAAA,MAAe,OAAM;AAAA,MAAsD,aAAU;AAAA,IAAA;MAC3FU,EAAsDC,EAAA,QAAA,WAAAC,EAAAC,EAAA,EAAA,iBAAtClB,EAAA,OAAe,YAAEmB,EAAAZ,CAAA,EAAA,CAAU,CAAA,GAAA,QAAA,EAAA;AAAA,OAE3Ca,EAAA,EAAA,GAAAN,EAA2FO,GAAA,MAAAC,EAAtDZ,EAAA,OAAoB,CAAjCa,GAAGC,YAA3BC,EAA2FC,GAAA;AAAA,QAA/B,oBAAoBF,CAAK;AAAA,MAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ThumbnailGroup.keys-EJ4qFNhx.js","sources":["../src/components/ThumbnailGroup/ThumbnailGroup.keys.ts"],"sourcesContent":["import { computed, ref } from 'vue';\n\nimport { InjectionWithDefaults } from '../../../types/utils';\nimport { ThumbnailDefinition } from '../Thumbnail/Thumbnail.types';\nimport { ThumbnailInjection, ThumbnailRadius } from './ThumbnailGroup.types';\n\n// See: https://vuejs.org/guide/typescript/composition-api.html#typing-provide-inject\nexport const THUMBNAIL_INJECTION: InjectionWithDefaults<ThumbnailInjection<ThumbnailDefinition>> = Object.freeze({\n key: Symbol('THUMBNAIL_INJECTION_KEY'),\n defaults: Object.freeze({\n radius: 'rounded' as ThumbnailRadius,\n draggable: computed(() => false),\n removable: computed(() => false),\n thumbnails: computed(() => [] as ThumbnailDefinition[]),\n activeThumbnail: ref(undefined),\n isDragging: ref(false),\n }),\n});\n"],"names":["THUMBNAIL_INJECTION","computed","ref"],"mappings":";AAOa,MAAAA,IAAsF,OAAO,OAAO;AAAA,EAC/G,KAAK,OAAO,yBAAyB;AAAA,EACrC,UAAU,OAAO,OAAO;AAAA,IACtB,QAAQ;AAAA,IACR,WAAWC,EAAS,MAAM,EAAK;AAAA,IAC/B,WAAWA,EAAS,MAAM,EAAK;AAAA,IAC/B,YAAYA,EAAS,MAAM,EAA2B;AAAA,IACtD,iBAAiBC,EAAI,MAAS;AAAA,IAC9B,YAAYA,EAAI,EAAK;AAAA,EACtB,CAAA;AACH,CAAC;"}
1
+ {"version":3,"file":"ThumbnailGroup.keys-EJ4qFNhx.js","sources":["../src/components/ThumbnailGroup/ThumbnailGroup.keys.ts"],"sourcesContent":["import { computed, ref } from 'vue';\n\nimport { InjectionWithDefaults } from '../../../types/utils';\nimport { ThumbnailDefinition } from '../Thumbnail/Thumbnail.types';\nimport { ThumbnailInjection, ThumbnailRadius } from './ThumbnailGroup.types';\n\n// See: https://vuejs.org/guide/typescript/composition-api.html#typing-provide-inject\nexport const THUMBNAIL_INJECTION: InjectionWithDefaults<ThumbnailInjection<ThumbnailDefinition>> = Object.freeze({\n key: Symbol('THUMBNAIL_INJECTION_KEY'),\n defaults: Object.freeze({\n radius: 'rounded' as ThumbnailRadius,\n draggable: computed(() => false),\n removable: computed(() => false),\n thumbnails: computed(() => [] as ThumbnailDefinition[]),\n activeThumbnail: ref(undefined),\n isDragging: ref(false),\n }),\n});\n"],"names":["THUMBNAIL_INJECTION","computed","ref"],"mappings":";AAOO,MAAMA,IAAsF,OAAO,OAAO;AAAA,EAC/G,KAAK,OAAO,yBAAyB;AAAA,EACrC,UAAU,OAAO,OAAO;AAAA,IACtB,QAAQ;AAAA,IACR,WAAWC,EAAS,MAAM,EAAK;AAAA,IAC/B,WAAWA,EAAS,MAAM,EAAK;AAAA,IAC/B,YAAYA,EAAS,MAAM,EAA2B;AAAA,IACtD,iBAAiBC,EAAI,MAAS;AAAA,IAC9B,YAAYA,EAAI,EAAK;AAAA,EAAA,CACtB;AACH,CAAC;"}