@flux-ui/components 3.0.0-next.3 → 3.0.0-next.30

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 (549) hide show
  1. package/README.md +12 -40
  2. package/dist/component/FluxAction.vue.d.ts +7 -7
  3. package/dist/component/FluxActionBar.vue.d.ts +5 -5
  4. package/dist/component/FluxActionPane.vue.d.ts +2 -2
  5. package/dist/component/FluxActions.vue.d.ts +52 -50
  6. package/dist/component/FluxAlert.vue.d.ts +2 -2
  7. package/dist/component/FluxAnimatedColors.vue.d.ts +3 -2
  8. package/dist/component/FluxAspectRatio.vue.d.ts +2 -2
  9. package/dist/component/FluxAutoGrid.vue.d.ts +2 -2
  10. package/dist/component/FluxAvatar.vue.d.ts +7 -7
  11. package/dist/component/FluxBadge.vue.d.ts +8 -8
  12. package/dist/component/FluxBadgeStack.vue.d.ts +2 -2
  13. package/dist/component/FluxBorderShine.vue.d.ts +8 -9
  14. package/dist/component/FluxBoxedIcon.vue.d.ts +5 -5
  15. package/dist/component/FluxButton.vue.d.ts +8 -8
  16. package/dist/component/FluxButtonGroup.vue.d.ts +2 -2
  17. package/dist/component/FluxButtonStack.vue.d.ts +2 -2
  18. package/dist/component/FluxCalendar.vue.d.ts +5 -5
  19. package/dist/component/FluxCalendarEvent.vue.d.ts +5 -5
  20. package/dist/component/FluxCheckbox.vue.d.ts +6 -6
  21. package/dist/component/FluxChip.vue.d.ts +5 -5
  22. package/dist/component/FluxClickablePane.vue.d.ts +2 -2
  23. package/dist/component/FluxColorPicker.vue.d.ts +5 -5
  24. package/dist/component/FluxColorSelect.vue.d.ts +5 -5
  25. package/dist/component/FluxComment.vue.d.ts +2 -2
  26. package/dist/component/FluxConfirm.vue.d.ts +2 -2
  27. package/dist/component/FluxContainer.vue.d.ts +2 -2
  28. package/dist/component/FluxDataTable.vue.d.ts +52 -21
  29. package/dist/component/FluxDatePicker.vue.d.ts +6 -6
  30. package/dist/component/FluxDestructiveButton.vue.d.ts +7 -7
  31. package/dist/component/FluxDisabled.vue.d.ts +2 -2
  32. package/dist/component/FluxDivider.vue.d.ts +2 -2
  33. package/dist/component/FluxDotPattern.vue.d.ts +2 -2
  34. package/dist/component/FluxDropZone.vue.d.ts +6 -6
  35. package/dist/component/FluxDynamicView.vue.d.ts +2 -3
  36. package/dist/component/FluxExpandable.vue.d.ts +10 -10
  37. package/dist/component/FluxExpandableGroup.vue.d.ts +2 -2
  38. package/dist/component/FluxFader.vue.d.ts +5 -5
  39. package/dist/component/FluxFaderItem.vue.d.ts +2 -2
  40. package/dist/component/FluxFilter.vue.d.ts +8 -140
  41. package/dist/component/FluxFilterBar.vue.d.ts +38 -0
  42. package/dist/component/FluxFilterBase.vue.d.ts +45 -0
  43. package/dist/component/FluxFilterDate.vue.d.ts +2 -2
  44. package/dist/component/FluxFilterDateRange.vue.d.ts +2 -2
  45. package/dist/component/FluxFilterOption.vue.d.ts +5 -5
  46. package/dist/component/FluxFilterOptionAsync.vue.d.ts +5 -5
  47. package/dist/component/FluxFilterOptions.vue.d.ts +5 -5
  48. package/dist/component/FluxFilterOptionsAsync.vue.d.ts +5 -5
  49. package/dist/component/FluxFilterRange.vue.d.ts +2 -2
  50. package/dist/component/FluxFilterWindow.vue.d.ts +163 -0
  51. package/dist/component/FluxFlickeringGrid.vue.d.ts +2 -2
  52. package/dist/component/FluxFlyout.vue.d.ts +42 -41
  53. package/dist/component/FluxFocalPointEditor.vue.d.ts +5 -5
  54. package/dist/component/FluxFocalPointImage.vue.d.ts +2 -2
  55. package/dist/component/FluxForm.vue.d.ts +6 -6
  56. package/dist/component/FluxFormColumn.vue.d.ts +2 -2
  57. package/dist/component/FluxFormDateInput.vue.d.ts +52 -51
  58. package/dist/component/FluxFormDateRangeInput.vue.d.ts +50 -49
  59. package/dist/component/FluxFormDateTimeInput.vue.d.ts +50 -49
  60. package/dist/component/FluxFormField.vue.d.ts +2 -2
  61. package/dist/component/FluxFormFieldAddition.vue.d.ts +2 -2
  62. package/dist/component/FluxFormGrid.vue.d.ts +23 -0
  63. package/dist/component/FluxFormInput.vue.d.ts +12 -10
  64. package/dist/component/FluxFormInputAddition.vue.d.ts +2 -2
  65. package/dist/component/FluxFormInputGroup.vue.d.ts +3 -2
  66. package/dist/component/FluxFormPinInput.vue.d.ts +5 -5
  67. package/dist/component/FluxFormRangeSlider.vue.d.ts +25 -25
  68. package/dist/component/FluxFormRow.vue.d.ts +2 -2
  69. package/dist/component/FluxFormSection.vue.d.ts +2 -2
  70. package/dist/component/FluxFormSelect.vue.d.ts +6 -6
  71. package/dist/component/FluxFormSelectAsync.vue.d.ts +6 -6
  72. package/dist/component/FluxFormSlider.vue.d.ts +15 -15
  73. package/dist/component/FluxFormTextArea.vue.d.ts +7 -7
  74. package/dist/component/FluxFormTimeZonePicker.vue.d.ts +6 -6
  75. package/dist/component/FluxGallery.vue.d.ts +6 -6
  76. package/dist/component/FluxGalleryItem.vue.d.ts +5 -5
  77. package/dist/component/FluxGrid.vue.d.ts +2 -2
  78. package/dist/component/FluxGridColumn.vue.d.ts +2 -2
  79. package/dist/component/FluxGridPattern.vue.d.ts +2 -2
  80. package/dist/component/FluxIcon.vue.d.ts +5 -5
  81. package/dist/component/FluxInfo.vue.d.ts +2 -2
  82. package/dist/component/FluxInfoStack.vue.d.ts +2 -2
  83. package/dist/component/FluxItem.vue.d.ts +18 -0
  84. package/dist/component/FluxItemActions.vue.d.ts +21 -0
  85. package/dist/component/FluxItemContent.vue.d.ts +21 -0
  86. package/dist/component/FluxItemMedia.vue.d.ts +22 -0
  87. package/dist/component/FluxItemStack.vue.d.ts +18 -0
  88. package/dist/component/FluxLegend.vue.d.ts +2 -2
  89. package/dist/component/FluxLink.vue.d.ts +7 -7
  90. package/dist/component/FluxMenu.vue.d.ts +2 -2
  91. package/dist/component/FluxMenuGroup.vue.d.ts +2 -2
  92. package/dist/component/FluxMenuItem.vue.d.ts +25 -7
  93. package/dist/component/FluxMenuOptions.vue.d.ts +5 -5
  94. package/dist/component/FluxMenuSubHeader.vue.d.ts +2 -2
  95. package/dist/component/FluxMenuTitle.vue.d.ts +2 -2
  96. package/dist/component/FluxNotice.vue.d.ts +5 -5
  97. package/dist/component/FluxNoticeStack.vue.d.ts +2 -2
  98. package/dist/component/FluxOverflowBar.vue.d.ts +40 -0
  99. package/dist/component/FluxOverlay.vue.d.ts +5 -6
  100. package/dist/component/FluxOverlayProvider.vue.d.ts +3 -0
  101. package/dist/component/FluxPagination.vue.d.ts +5 -5
  102. package/dist/component/FluxPaginationBar.vue.d.ts +6 -6
  103. package/dist/component/FluxPaginationButton.vue.d.ts +30 -0
  104. package/dist/component/FluxPane.vue.d.ts +2 -2
  105. package/dist/component/FluxPaneBody.vue.d.ts +2 -2
  106. package/dist/component/FluxPaneDeck.vue.d.ts +2 -2
  107. package/dist/component/FluxPaneFooter.vue.d.ts +2 -2
  108. package/dist/component/FluxPaneGroup.vue.d.ts +2 -2
  109. package/dist/component/FluxPaneHeader.vue.d.ts +2 -2
  110. package/dist/component/FluxPaneIllustration.vue.d.ts +2 -2
  111. package/dist/component/FluxPaneMedia.vue.d.ts +3 -2
  112. package/dist/component/FluxPercentageBar.vue.d.ts +2 -2
  113. package/dist/component/FluxPersona.vue.d.ts +5 -5
  114. package/dist/component/FluxPlaceholder.vue.d.ts +5 -5
  115. package/dist/component/FluxPressable.vue.d.ts +7 -7
  116. package/dist/component/FluxPrimaryButton.vue.d.ts +7 -7
  117. package/dist/component/FluxPrimaryLinkButton.vue.d.ts +25 -0
  118. package/dist/component/FluxProgressBar.vue.d.ts +2 -2
  119. package/dist/component/FluxPrompt.vue.d.ts +31 -27
  120. package/dist/component/FluxPublishButton.vue.d.ts +7 -7
  121. package/dist/component/FluxQuantitySelector.vue.d.ts +5 -5
  122. package/dist/component/FluxRemove.vue.d.ts +5 -5
  123. package/dist/component/FluxRoot.vue.d.ts +2 -2
  124. package/dist/component/FluxSecondaryButton.vue.d.ts +7 -7
  125. package/dist/component/FluxSecondaryLinkButton.vue.d.ts +25 -0
  126. package/dist/component/FluxSegmentedControl.vue.d.ts +5 -5
  127. package/dist/component/FluxSegmentedView.vue.d.ts +5 -5
  128. package/dist/component/FluxSeparator.vue.d.ts +2 -2
  129. package/dist/component/FluxSlideOver.vue.d.ts +7 -7
  130. package/dist/component/FluxSnackbar.vue.d.ts +6 -6
  131. package/dist/component/FluxSnackbarProvider.vue.d.ts +2 -2
  132. package/dist/component/FluxSpacer.vue.d.ts +2 -2
  133. package/dist/component/FluxSpacing.vue.d.ts +2 -2
  134. package/dist/component/FluxSpinner.vue.d.ts +2 -2
  135. package/dist/component/FluxSplitButton.vue.d.ts +2 -2
  136. package/dist/component/FluxStack.vue.d.ts +2 -2
  137. package/dist/component/FluxStatistic.vue.d.ts +8 -5
  138. package/dist/component/FluxStepper.vue.d.ts +5 -6
  139. package/dist/component/FluxStepperStep.vue.d.ts +2 -2
  140. package/dist/component/FluxStepperSteps.vue.d.ts +5 -5
  141. package/dist/component/FluxTab.vue.d.ts +2 -2
  142. package/dist/component/FluxTabBar.vue.d.ts +2 -2
  143. package/dist/component/FluxTabBarItem.vue.d.ts +36 -36
  144. package/dist/component/FluxTable.vue.d.ts +15 -10
  145. package/dist/component/FluxTableActions.vue.d.ts +2 -2
  146. package/dist/component/FluxTableBar.vue.d.ts +20 -0
  147. package/dist/component/FluxTableCell.vue.d.ts +3 -2
  148. package/dist/component/FluxTableHeader.vue.d.ts +6 -6
  149. package/dist/component/FluxTableRow.vue.d.ts +2 -2
  150. package/dist/component/FluxTabs.vue.d.ts +5 -6
  151. package/dist/component/FluxTag.vue.d.ts +8 -8
  152. package/dist/component/FluxTagStack.vue.d.ts +2 -2
  153. package/dist/component/FluxTicks.vue.d.ts +2 -2
  154. package/dist/component/FluxTimeline.vue.d.ts +2 -2
  155. package/dist/component/FluxTimelineItem.vue.d.ts +2 -2
  156. package/dist/component/FluxToggle.vue.d.ts +5 -5
  157. package/dist/component/FluxToolbar.vue.d.ts +2 -2
  158. package/dist/component/FluxToolbarGroup.vue.d.ts +2 -2
  159. package/dist/component/FluxTooltip.vue.d.ts +5 -6
  160. package/dist/component/FluxTooltipProvider.vue.d.ts +2 -2
  161. package/dist/component/FluxWindow.vue.d.ts +3 -3
  162. package/dist/component/index.d.ts +12 -1
  163. package/dist/component/primitive/Anchor.vue.d.ts +2 -2
  164. package/dist/component/primitive/AnchorPopup.vue.d.ts +2 -3
  165. package/dist/component/primitive/CoordinatePicker.vue.d.ts +6 -6
  166. package/dist/component/primitive/CoordinatePickerThumb.vue.d.ts +7 -7
  167. package/dist/component/primitive/FilterBadge.vue.d.ts +12 -0
  168. package/dist/component/primitive/FilterItem.vue.d.ts +5 -5
  169. package/dist/component/primitive/FilterMenuRenderer.d.ts +21 -10
  170. package/dist/component/primitive/FilterOptionBase.vue.d.ts +6 -6
  171. package/dist/component/primitive/SelectBase.vue.d.ts +170 -101
  172. package/dist/component/primitive/SliderBase.vue.d.ts +7 -7
  173. package/dist/component/primitive/SliderThumb.vue.d.ts +7 -7
  174. package/dist/component/primitive/SliderTrack.vue.d.ts +2 -2
  175. package/dist/component/primitive/VNodeRenderer.d.ts +5 -6
  176. package/dist/component/primitive/index.d.ts +2 -1
  177. package/dist/composable/index.d.ts +1 -1
  178. package/dist/composable/private/index.d.ts +0 -2
  179. package/dist/composable/private/useFormSelect.d.ts +6 -7
  180. package/dist/composable/private/useTranslate.d.ts +0 -1
  181. package/dist/composable/useBreakpoints.d.ts +1 -2
  182. package/dist/composable/useDisabled.d.ts +2 -3
  183. package/dist/composable/useDisabledInjection.d.ts +2 -2
  184. package/dist/composable/useExpandableGroupInjection.d.ts +2 -2
  185. package/dist/composable/useFilterInjection.d.ts +2 -2
  186. package/dist/composable/useFlyoutInjection.d.ts +2 -6
  187. package/dist/composable/useFormFieldInjection.d.ts +2 -2
  188. package/dist/composable/useTableInjection.d.ts +2 -7
  189. package/dist/composable/useTooltipInjection.d.ts +3 -0
  190. package/dist/data/di.d.ts +4 -1
  191. package/dist/data/filter.d.ts +18 -2
  192. package/dist/data/helper.d.ts +0 -1
  193. package/dist/data/i18n.d.ts +1 -2
  194. package/dist/data/iconRegistry.d.ts +0 -1
  195. package/dist/data/index.d.ts +0 -1
  196. package/dist/data/inputMask.d.ts +0 -1
  197. package/dist/data/store.d.ts +2 -3
  198. package/dist/index.css +6058 -0
  199. package/dist/index.d.ts +1 -2
  200. package/dist/index.js +17628 -0
  201. package/dist/index.js.map +1 -0
  202. package/dist/transition/FluxAutoHeightTransition.vue.d.ts +2 -2
  203. package/dist/transition/FluxAutoWidthTransition.vue.d.ts +2 -2
  204. package/dist/transition/FluxBreakthroughTransition.vue.d.ts +2 -2
  205. package/dist/transition/FluxFadeTransition.vue.d.ts +2 -2
  206. package/dist/transition/FluxOverlayTransition.vue.d.ts +2 -2
  207. package/dist/transition/FluxRouteTransition.vue.d.ts +2 -2
  208. package/dist/transition/FluxSlideOverTransition.vue.d.ts +2 -2
  209. package/dist/transition/FluxTooltipTransition.vue.d.ts +2 -2
  210. package/dist/transition/FluxVerticalWindowTransition.vue.d.ts +2 -2
  211. package/dist/transition/FluxWindowTransition.vue.d.ts +2 -2
  212. package/dist/transition/index.d.ts +0 -1
  213. package/dist/util/createDialogRenderer.d.ts +1 -2
  214. package/dist/util/createLabelForDateRange.d.ts +0 -1
  215. package/dist/util/index.d.ts +0 -1
  216. package/dist/vite.d.ts +7 -0
  217. package/package.json +24 -23
  218. package/src/component/FluxActionBar.vue +1 -1
  219. package/src/component/FluxAnimatedColors.vue +6 -4
  220. package/src/component/FluxAutoGrid.vue +1 -1
  221. package/src/component/FluxBorderShine.vue +1 -1
  222. package/src/component/FluxCalendar.vue +3 -3
  223. package/src/component/FluxColorPicker.vue +1 -1
  224. package/src/component/FluxContainer.vue +1 -1
  225. package/src/component/FluxDataTable.vue +68 -16
  226. package/src/component/FluxDatePicker.vue +7 -5
  227. package/src/component/FluxDynamicView.vue +1 -1
  228. package/src/component/FluxExpandable.vue +1 -1
  229. package/src/component/FluxExpandableGroup.vue +1 -1
  230. package/src/component/FluxFader.vue +2 -1
  231. package/src/component/FluxFilter.vue +20 -107
  232. package/src/component/FluxFilterBar.vue +117 -0
  233. package/src/component/FluxFilterBase.vue +141 -0
  234. package/src/component/FluxFilterOptionAsync.vue +1 -2
  235. package/src/component/FluxFilterOptionsAsync.vue +1 -2
  236. package/src/component/FluxFilterWindow.vue +83 -0
  237. package/src/component/FluxFlyout.vue +4 -3
  238. package/src/component/FluxForm.vue +7 -7
  239. package/src/component/FluxFormGrid.vue +23 -0
  240. package/src/component/FluxFormInput.vue +10 -1
  241. package/src/component/FluxFormInputGroup.vue +2 -0
  242. package/src/component/FluxFormSelect.vue +1 -1
  243. package/src/component/FluxFormSelectAsync.vue +2 -2
  244. package/src/component/FluxFormTimeZonePicker.vue +5 -0
  245. package/src/component/FluxGallery.vue +2 -2
  246. package/src/component/FluxGrid.vue +1 -1
  247. package/src/component/FluxIcon.vue +0 -12
  248. package/src/component/FluxItem.vue +11 -0
  249. package/src/component/FluxItemActions.vue +18 -0
  250. package/src/component/FluxItemContent.vue +15 -0
  251. package/src/component/FluxItemMedia.vue +20 -0
  252. package/src/component/FluxItemStack.vue +14 -0
  253. package/src/component/FluxMenuItem.vue +10 -2
  254. package/src/component/FluxMenuOptions.vue +1 -1
  255. package/src/component/FluxOverflowBar.vue +133 -0
  256. package/src/component/FluxOverlay.vue +1 -1
  257. package/src/component/FluxOverlayProvider.vue +39 -0
  258. package/src/component/FluxPagination.vue +16 -14
  259. package/src/component/FluxPaginationBar.vue +27 -38
  260. package/src/component/FluxPaginationButton.vue +39 -0
  261. package/src/component/FluxPaneMedia.vue +2 -0
  262. package/src/component/FluxPressable.vue +1 -1
  263. package/src/component/FluxPrimaryLinkButton.vue +28 -0
  264. package/src/component/FluxProgressBar.vue +1 -1
  265. package/src/component/FluxRoot.vue +3 -26
  266. package/src/component/FluxSecondaryLinkButton.vue +28 -0
  267. package/src/component/FluxStack.vue +1 -1
  268. package/src/component/FluxStatistic.vue +23 -9
  269. package/src/component/FluxStepper.vue +1 -1
  270. package/src/component/FluxTabBar.vue +23 -17
  271. package/src/component/FluxTabBarItem.vue +1 -1
  272. package/src/component/FluxTable.vue +25 -4
  273. package/src/component/FluxTableBar.vue +37 -0
  274. package/src/component/FluxTableCell.vue +3 -1
  275. package/src/component/FluxTabs.vue +1 -1
  276. package/src/component/FluxTooltip.vue +3 -1
  277. package/src/component/FluxTooltipProvider.vue +7 -3
  278. package/src/component/index.ts +12 -0
  279. package/src/component/primitive/AnchorPopup.vue +11 -5
  280. package/src/component/primitive/FilterBadge.vue +43 -0
  281. package/src/component/primitive/FilterItem.vue +1 -1
  282. package/src/component/primitive/FilterMenuRenderer.ts +10 -198
  283. package/src/component/primitive/SelectBase.vue +9 -2
  284. package/src/component/primitive/index.ts +2 -0
  285. package/src/composable/index.ts +1 -0
  286. package/src/composable/private/index.ts +0 -1
  287. package/src/composable/private/useFormSelect.ts +2 -2
  288. package/src/composable/useFilterInjection.ts +1 -8
  289. package/src/composable/useTooltipInjection.ts +8 -0
  290. package/src/css/base.scss +6 -3
  291. package/src/css/component/Action.module.scss +10 -7
  292. package/src/css/component/Avatar.module.scss +14 -14
  293. package/src/css/component/Badge.module.scss +17 -16
  294. package/src/css/component/Button.module.scss +69 -35
  295. package/src/css/component/Calendar.module.scss +12 -12
  296. package/src/css/component/Chip.module.scss +7 -19
  297. package/src/css/component/Color.module.scss +4 -4
  298. package/src/css/component/Comment.module.scss +15 -14
  299. package/src/css/component/DatePicker.module.scss +12 -23
  300. package/src/css/component/Divider.module.scss +2 -2
  301. package/src/css/component/DropZone.module.scss +27 -24
  302. package/src/css/component/Expandable.module.scss +4 -4
  303. package/src/css/component/Filter.module.scss +45 -5
  304. package/src/css/component/Flyout.module.scss +1 -1
  305. package/src/css/component/Form.module.scss +91 -50
  306. package/src/css/component/Gallery.module.scss +14 -4
  307. package/src/css/component/Icon.module.scss +36 -50
  308. package/src/css/component/Info.module.scss +2 -3
  309. package/src/css/component/Item.module.scss +74 -0
  310. package/src/css/component/Layout.module.scss +3 -0
  311. package/src/css/component/Menu.module.scss +29 -30
  312. package/src/css/component/Notice.module.scss +43 -43
  313. package/src/css/component/OverflowBar.module.scss +41 -0
  314. package/src/css/component/Overlay.module.scss +55 -7
  315. package/src/css/component/Pagination.module.scss +70 -33
  316. package/src/css/component/Pane.module.scss +52 -9
  317. package/src/css/component/PercentageBar.module.scss +1 -1
  318. package/src/css/component/Placeholder.module.scss +4 -4
  319. package/src/css/component/Progress.module.scss +17 -6
  320. package/src/css/component/Remove.module.scss +4 -4
  321. package/src/css/component/SegmentedControl.module.scss +8 -8
  322. package/src/css/component/Snackbar.module.scss +19 -18
  323. package/src/css/component/Spinner.module.scss +2 -2
  324. package/src/css/component/Statistic.module.scss +12 -39
  325. package/src/css/component/Stepper.module.scss +9 -9
  326. package/src/css/component/Tab.module.scss +21 -9
  327. package/src/css/component/Table.module.scss +67 -20
  328. package/src/css/component/Timeline.module.scss +20 -20
  329. package/src/css/component/Toolbar.module.scss +7 -2
  330. package/src/css/component/Tooltip.module.scss +4 -2
  331. package/src/css/component/Transition.module.scss +5 -5
  332. package/src/css/component/Visual.module.scss +3 -3
  333. package/src/css/component/base/Button.module.scss +10 -0
  334. package/src/css/component/base/Pane.module.scss +4 -8
  335. package/src/css/component/primitive/CoordinatePicker.module.scss +3 -3
  336. package/src/css/component/primitive/Slider.module.scss +10 -15
  337. package/src/css/mixin/breakpoints.scss +15 -3
  338. package/src/css/mixin/focus-ring.scss +2 -2
  339. package/src/css/typography.scss +13 -7
  340. package/src/css/variables.scss +218 -186
  341. package/src/data/di.ts +5 -0
  342. package/src/data/filter.ts +161 -1
  343. package/src/data/i18n.ts +1 -1
  344. package/src/data/iconRegistry.ts +5 -1
  345. package/src/data/store.ts +6 -4
  346. package/src/index.ts +1 -0
  347. package/src/util/createDialogRenderer.ts +36 -19
  348. package/src/vite.d.ts +2 -8
  349. package/tsconfig.json +4 -42
  350. package/dist/component/FluxAction.vue.d.ts.map +0 -1
  351. package/dist/component/FluxActionBar.vue.d.ts.map +0 -1
  352. package/dist/component/FluxActionPane.vue.d.ts.map +0 -1
  353. package/dist/component/FluxActions.vue.d.ts.map +0 -1
  354. package/dist/component/FluxAlert.vue.d.ts.map +0 -1
  355. package/dist/component/FluxAnimatedColors.vue.d.ts.map +0 -1
  356. package/dist/component/FluxAspectRatio.vue.d.ts.map +0 -1
  357. package/dist/component/FluxAutoGrid.vue.d.ts.map +0 -1
  358. package/dist/component/FluxAvatar.vue.d.ts.map +0 -1
  359. package/dist/component/FluxBadge.vue.d.ts.map +0 -1
  360. package/dist/component/FluxBadgeStack.vue.d.ts.map +0 -1
  361. package/dist/component/FluxBorderShine.vue.d.ts.map +0 -1
  362. package/dist/component/FluxBoxedIcon.vue.d.ts.map +0 -1
  363. package/dist/component/FluxButton.vue.d.ts.map +0 -1
  364. package/dist/component/FluxButtonGroup.vue.d.ts.map +0 -1
  365. package/dist/component/FluxButtonStack.vue.d.ts.map +0 -1
  366. package/dist/component/FluxCalendar.vue.d.ts.map +0 -1
  367. package/dist/component/FluxCalendarEvent.vue.d.ts.map +0 -1
  368. package/dist/component/FluxCheckbox.vue.d.ts.map +0 -1
  369. package/dist/component/FluxChip.vue.d.ts.map +0 -1
  370. package/dist/component/FluxClickablePane.vue.d.ts.map +0 -1
  371. package/dist/component/FluxColorPicker.vue.d.ts.map +0 -1
  372. package/dist/component/FluxColorSelect.vue.d.ts.map +0 -1
  373. package/dist/component/FluxComment.vue.d.ts.map +0 -1
  374. package/dist/component/FluxConfirm.vue.d.ts.map +0 -1
  375. package/dist/component/FluxContainer.vue.d.ts.map +0 -1
  376. package/dist/component/FluxDataTable.vue.d.ts.map +0 -1
  377. package/dist/component/FluxDatePicker.vue.d.ts.map +0 -1
  378. package/dist/component/FluxDestructiveButton.vue.d.ts.map +0 -1
  379. package/dist/component/FluxDisabled.vue.d.ts.map +0 -1
  380. package/dist/component/FluxDivider.vue.d.ts.map +0 -1
  381. package/dist/component/FluxDotPattern.vue.d.ts.map +0 -1
  382. package/dist/component/FluxDropZone.vue.d.ts.map +0 -1
  383. package/dist/component/FluxDynamicView.vue.d.ts.map +0 -1
  384. package/dist/component/FluxExpandable.vue.d.ts.map +0 -1
  385. package/dist/component/FluxExpandableGroup.vue.d.ts.map +0 -1
  386. package/dist/component/FluxFader.vue.d.ts.map +0 -1
  387. package/dist/component/FluxFaderItem.vue.d.ts.map +0 -1
  388. package/dist/component/FluxFilter.vue.d.ts.map +0 -1
  389. package/dist/component/FluxFilterDate.vue.d.ts.map +0 -1
  390. package/dist/component/FluxFilterDateRange.vue.d.ts.map +0 -1
  391. package/dist/component/FluxFilterOption.vue.d.ts.map +0 -1
  392. package/dist/component/FluxFilterOptionAsync.vue.d.ts.map +0 -1
  393. package/dist/component/FluxFilterOptions.vue.d.ts.map +0 -1
  394. package/dist/component/FluxFilterOptionsAsync.vue.d.ts.map +0 -1
  395. package/dist/component/FluxFilterRange.vue.d.ts.map +0 -1
  396. package/dist/component/FluxFlickeringGrid.vue.d.ts.map +0 -1
  397. package/dist/component/FluxFlyout.vue.d.ts.map +0 -1
  398. package/dist/component/FluxFocalPointEditor.vue.d.ts.map +0 -1
  399. package/dist/component/FluxFocalPointImage.vue.d.ts.map +0 -1
  400. package/dist/component/FluxForm.vue.d.ts.map +0 -1
  401. package/dist/component/FluxFormColumn.vue.d.ts.map +0 -1
  402. package/dist/component/FluxFormDateInput.vue.d.ts.map +0 -1
  403. package/dist/component/FluxFormDateRangeInput.vue.d.ts.map +0 -1
  404. package/dist/component/FluxFormDateTimeInput.vue.d.ts.map +0 -1
  405. package/dist/component/FluxFormField.vue.d.ts.map +0 -1
  406. package/dist/component/FluxFormFieldAddition.vue.d.ts.map +0 -1
  407. package/dist/component/FluxFormInput.vue.d.ts.map +0 -1
  408. package/dist/component/FluxFormInputAddition.vue.d.ts.map +0 -1
  409. package/dist/component/FluxFormInputGroup.vue.d.ts.map +0 -1
  410. package/dist/component/FluxFormPinInput.vue.d.ts.map +0 -1
  411. package/dist/component/FluxFormRangeSlider.vue.d.ts.map +0 -1
  412. package/dist/component/FluxFormRow.vue.d.ts.map +0 -1
  413. package/dist/component/FluxFormSection.vue.d.ts.map +0 -1
  414. package/dist/component/FluxFormSelect.vue.d.ts.map +0 -1
  415. package/dist/component/FluxFormSelectAsync.vue.d.ts.map +0 -1
  416. package/dist/component/FluxFormSlider.vue.d.ts.map +0 -1
  417. package/dist/component/FluxFormTextArea.vue.d.ts.map +0 -1
  418. package/dist/component/FluxFormTimeZonePicker.vue.d.ts.map +0 -1
  419. package/dist/component/FluxGallery.vue.d.ts.map +0 -1
  420. package/dist/component/FluxGalleryItem.vue.d.ts.map +0 -1
  421. package/dist/component/FluxGrid.vue.d.ts.map +0 -1
  422. package/dist/component/FluxGridColumn.vue.d.ts.map +0 -1
  423. package/dist/component/FluxGridPattern.vue.d.ts.map +0 -1
  424. package/dist/component/FluxIcon.vue.d.ts.map +0 -1
  425. package/dist/component/FluxInfo.vue.d.ts.map +0 -1
  426. package/dist/component/FluxInfoStack.vue.d.ts.map +0 -1
  427. package/dist/component/FluxLegend.vue.d.ts.map +0 -1
  428. package/dist/component/FluxLink.vue.d.ts.map +0 -1
  429. package/dist/component/FluxMenu.vue.d.ts.map +0 -1
  430. package/dist/component/FluxMenuGroup.vue.d.ts.map +0 -1
  431. package/dist/component/FluxMenuItem.vue.d.ts.map +0 -1
  432. package/dist/component/FluxMenuOptions.vue.d.ts.map +0 -1
  433. package/dist/component/FluxMenuSubHeader.vue.d.ts.map +0 -1
  434. package/dist/component/FluxMenuTitle.vue.d.ts.map +0 -1
  435. package/dist/component/FluxNotice.vue.d.ts.map +0 -1
  436. package/dist/component/FluxNoticeStack.vue.d.ts.map +0 -1
  437. package/dist/component/FluxOverlay.vue.d.ts.map +0 -1
  438. package/dist/component/FluxPagination.vue.d.ts.map +0 -1
  439. package/dist/component/FluxPaginationBar.vue.d.ts.map +0 -1
  440. package/dist/component/FluxPane.vue.d.ts.map +0 -1
  441. package/dist/component/FluxPaneBody.vue.d.ts.map +0 -1
  442. package/dist/component/FluxPaneDeck.vue.d.ts.map +0 -1
  443. package/dist/component/FluxPaneFooter.vue.d.ts.map +0 -1
  444. package/dist/component/FluxPaneGroup.vue.d.ts.map +0 -1
  445. package/dist/component/FluxPaneHeader.vue.d.ts.map +0 -1
  446. package/dist/component/FluxPaneIllustration.vue.d.ts.map +0 -1
  447. package/dist/component/FluxPaneMedia.vue.d.ts.map +0 -1
  448. package/dist/component/FluxPercentageBar.vue.d.ts.map +0 -1
  449. package/dist/component/FluxPersona.vue.d.ts.map +0 -1
  450. package/dist/component/FluxPlaceholder.vue.d.ts.map +0 -1
  451. package/dist/component/FluxPressable.vue.d.ts.map +0 -1
  452. package/dist/component/FluxPrimaryButton.vue.d.ts.map +0 -1
  453. package/dist/component/FluxProgressBar.vue.d.ts.map +0 -1
  454. package/dist/component/FluxPrompt.vue.d.ts.map +0 -1
  455. package/dist/component/FluxPublishButton.vue.d.ts.map +0 -1
  456. package/dist/component/FluxQuantitySelector.vue.d.ts.map +0 -1
  457. package/dist/component/FluxRemove.vue.d.ts.map +0 -1
  458. package/dist/component/FluxRoot.vue.d.ts.map +0 -1
  459. package/dist/component/FluxSecondaryButton.vue.d.ts.map +0 -1
  460. package/dist/component/FluxSegmentedControl.vue.d.ts.map +0 -1
  461. package/dist/component/FluxSegmentedView.vue.d.ts.map +0 -1
  462. package/dist/component/FluxSeparator.vue.d.ts.map +0 -1
  463. package/dist/component/FluxSlideOver.vue.d.ts.map +0 -1
  464. package/dist/component/FluxSnackbar.vue.d.ts.map +0 -1
  465. package/dist/component/FluxSnackbarProvider.vue.d.ts.map +0 -1
  466. package/dist/component/FluxSpacer.vue.d.ts.map +0 -1
  467. package/dist/component/FluxSpacing.vue.d.ts.map +0 -1
  468. package/dist/component/FluxSpinner.vue.d.ts.map +0 -1
  469. package/dist/component/FluxSplitButton.vue.d.ts.map +0 -1
  470. package/dist/component/FluxStack.vue.d.ts.map +0 -1
  471. package/dist/component/FluxStatistic.vue.d.ts.map +0 -1
  472. package/dist/component/FluxStepper.vue.d.ts.map +0 -1
  473. package/dist/component/FluxStepperStep.vue.d.ts.map +0 -1
  474. package/dist/component/FluxStepperSteps.vue.d.ts.map +0 -1
  475. package/dist/component/FluxTab.vue.d.ts.map +0 -1
  476. package/dist/component/FluxTabBar.vue.d.ts.map +0 -1
  477. package/dist/component/FluxTabBarItem.vue.d.ts.map +0 -1
  478. package/dist/component/FluxTable.vue.d.ts.map +0 -1
  479. package/dist/component/FluxTableActions.vue.d.ts.map +0 -1
  480. package/dist/component/FluxTableCell.vue.d.ts.map +0 -1
  481. package/dist/component/FluxTableHeader.vue.d.ts.map +0 -1
  482. package/dist/component/FluxTableRow.vue.d.ts.map +0 -1
  483. package/dist/component/FluxTabs.vue.d.ts.map +0 -1
  484. package/dist/component/FluxTag.vue.d.ts.map +0 -1
  485. package/dist/component/FluxTagStack.vue.d.ts.map +0 -1
  486. package/dist/component/FluxTicks.vue.d.ts.map +0 -1
  487. package/dist/component/FluxTimeline.vue.d.ts.map +0 -1
  488. package/dist/component/FluxTimelineItem.vue.d.ts.map +0 -1
  489. package/dist/component/FluxToggle.vue.d.ts.map +0 -1
  490. package/dist/component/FluxToolbar.vue.d.ts.map +0 -1
  491. package/dist/component/FluxToolbarGroup.vue.d.ts.map +0 -1
  492. package/dist/component/FluxTooltip.vue.d.ts.map +0 -1
  493. package/dist/component/FluxTooltipProvider.vue.d.ts.map +0 -1
  494. package/dist/component/FluxWindow.vue.d.ts.map +0 -1
  495. package/dist/component/index.d.ts.map +0 -1
  496. package/dist/component/primitive/Anchor.vue.d.ts.map +0 -1
  497. package/dist/component/primitive/AnchorPopup.vue.d.ts.map +0 -1
  498. package/dist/component/primitive/CoordinatePicker.vue.d.ts.map +0 -1
  499. package/dist/component/primitive/CoordinatePickerThumb.vue.d.ts.map +0 -1
  500. package/dist/component/primitive/FilterItem.vue.d.ts.map +0 -1
  501. package/dist/component/primitive/FilterMenuRenderer.d.ts.map +0 -1
  502. package/dist/component/primitive/FilterOptionBase.vue.d.ts.map +0 -1
  503. package/dist/component/primitive/SelectBase.vue.d.ts.map +0 -1
  504. package/dist/component/primitive/SliderBase.vue.d.ts.map +0 -1
  505. package/dist/component/primitive/SliderThumb.vue.d.ts.map +0 -1
  506. package/dist/component/primitive/SliderTrack.vue.d.ts.map +0 -1
  507. package/dist/component/primitive/VNodeRenderer.d.ts.map +0 -1
  508. package/dist/component/primitive/index.d.ts.map +0 -1
  509. package/dist/composable/index.d.ts.map +0 -1
  510. package/dist/composable/private/index.d.ts.map +0 -1
  511. package/dist/composable/private/useFormSelect.d.ts.map +0 -1
  512. package/dist/composable/private/useLoaded.d.ts +0 -5
  513. package/dist/composable/private/useLoaded.d.ts.map +0 -1
  514. package/dist/composable/private/useTranslate.d.ts.map +0 -1
  515. package/dist/composable/useBreakpoints.d.ts.map +0 -1
  516. package/dist/composable/useDisabled.d.ts.map +0 -1
  517. package/dist/composable/useDisabledInjection.d.ts.map +0 -1
  518. package/dist/composable/useExpandableGroupInjection.d.ts.map +0 -1
  519. package/dist/composable/useFilterInjection.d.ts.map +0 -1
  520. package/dist/composable/useFlyoutInjection.d.ts.map +0 -1
  521. package/dist/composable/useFormFieldInjection.d.ts.map +0 -1
  522. package/dist/composable/useTableInjection.d.ts.map +0 -1
  523. package/dist/data/di.d.ts.map +0 -1
  524. package/dist/data/filter.d.ts.map +0 -1
  525. package/dist/data/helper.d.ts.map +0 -1
  526. package/dist/data/i18n.d.ts.map +0 -1
  527. package/dist/data/iconRegistry.d.ts.map +0 -1
  528. package/dist/data/index.d.ts.map +0 -1
  529. package/dist/data/inputMask.d.ts.map +0 -1
  530. package/dist/data/store.d.ts.map +0 -1
  531. package/dist/flux.css +0 -1
  532. package/dist/flux.js +0 -11402
  533. package/dist/flux.js.map +0 -1
  534. package/dist/index.d.ts.map +0 -1
  535. package/dist/transition/FluxAutoHeightTransition.vue.d.ts.map +0 -1
  536. package/dist/transition/FluxAutoWidthTransition.vue.d.ts.map +0 -1
  537. package/dist/transition/FluxBreakthroughTransition.vue.d.ts.map +0 -1
  538. package/dist/transition/FluxFadeTransition.vue.d.ts.map +0 -1
  539. package/dist/transition/FluxOverlayTransition.vue.d.ts.map +0 -1
  540. package/dist/transition/FluxRouteTransition.vue.d.ts.map +0 -1
  541. package/dist/transition/FluxSlideOverTransition.vue.d.ts.map +0 -1
  542. package/dist/transition/FluxTooltipTransition.vue.d.ts.map +0 -1
  543. package/dist/transition/FluxVerticalWindowTransition.vue.d.ts.map +0 -1
  544. package/dist/transition/FluxWindowTransition.vue.d.ts.map +0 -1
  545. package/dist/transition/index.d.ts.map +0 -1
  546. package/dist/util/createDialogRenderer.d.ts.map +0 -1
  547. package/dist/util/createLabelForDateRange.d.ts.map +0 -1
  548. package/dist/util/index.d.ts.map +0 -1
  549. package/src/composable/private/useLoaded.ts +0 -21
package/dist/flux.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"flux.js","sources":["../../../node_modules/clsx/dist/clsx.mjs","../src/composable/useBreakpoints.ts","../src/data/di.ts","../src/data/filter.ts","../src/data/helper.ts","../src/data/i18n.ts","../src/data/iconRegistry.ts","../src/data/store.ts","../../../node_modules/imask/esm/core/utils.js","../../../node_modules/imask/esm/core/action-details.js","../../../node_modules/imask/esm/core/holder.js","../../../node_modules/imask/esm/masked/factory.js","../../../node_modules/imask/esm/controls/mask-element.js","../../../node_modules/imask/esm/controls/html-mask-element.js","../../../node_modules/imask/esm/controls/html-input-mask-element.js","../../../node_modules/imask/esm/controls/html-contenteditable-mask-element.js","../../../node_modules/imask/esm/controls/input-history.js","../../../node_modules/imask/esm/controls/input.js","../../../node_modules/imask/esm/core/change-details.js","../../../node_modules/imask/esm/core/continuous-tail-details.js","../../../node_modules/imask/esm/masked/base.js","../../../node_modules/imask/esm/masked/pattern/chunk-tail-details.js","../../../node_modules/imask/esm/masked/pattern/cursor.js","../../../node_modules/imask/esm/masked/pattern/fixed-definition.js","../../../node_modules/imask/esm/masked/pattern/input-definition.js","../../../node_modules/imask/esm/masked/regexp.js","../../../node_modules/imask/esm/masked/pattern.js","../src/data/inputMask.ts","../src/composable/useDisabledInjection.ts","../src/composable/useDisabled.ts","../src/composable/useExpandableGroupInjection.ts","../src/composable/useFilterInjection.ts","../src/composable/useFlyoutInjection.ts","../src/composable/useFormFieldInjection.ts","../src/composable/useTableInjection.ts","../../../node_modules/@basmilius/utils/dist/utils.js","../../../node_modules/lodash-es/_freeGlobal.js","../../../node_modules/lodash-es/_root.js","../../../node_modules/lodash-es/_Symbol.js","../../../node_modules/lodash-es/_getRawTag.js","../../../node_modules/lodash-es/_objectToString.js","../../../node_modules/lodash-es/_baseGetTag.js","../../../node_modules/lodash-es/isObjectLike.js","../../../node_modules/lodash-es/isSymbol.js","../../../node_modules/lodash-es/_arrayMap.js","../../../node_modules/lodash-es/isArray.js","../../../node_modules/lodash-es/_baseToString.js","../../../node_modules/lodash-es/toString.js","../../../node_modules/lodash-es/_baseSlice.js","../../../node_modules/lodash-es/_castSlice.js","../../../node_modules/lodash-es/_hasUnicode.js","../../../node_modules/lodash-es/_asciiToArray.js","../../../node_modules/lodash-es/_unicodeToArray.js","../../../node_modules/lodash-es/_stringToArray.js","../../../node_modules/lodash-es/_createCaseFirst.js","../../../node_modules/lodash-es/upperFirst.js","../../../node_modules/lodash-es/capitalize.js","../../../node_modules/lodash-es/_arrayReduce.js","../../../node_modules/lodash-es/_basePropertyOf.js","../../../node_modules/lodash-es/_deburrLetter.js","../../../node_modules/lodash-es/deburr.js","../../../node_modules/lodash-es/_asciiWords.js","../../../node_modules/lodash-es/_hasUnicodeWord.js","../../../node_modules/lodash-es/_unicodeWords.js","../../../node_modules/lodash-es/words.js","../../../node_modules/lodash-es/_createCompounder.js","../../../node_modules/lodash-es/camelCase.js","../../internals/dist/flux-internals.js","../src/component/FluxIcon.vue","../src/component/FluxPressable.vue","../src/component/FluxButton.vue","../src/composable/private/useFormSelect.ts","../src/composable/private/useLoaded.ts","../src/composable/private/useTranslate.ts","../src/component/FluxPane.vue","../src/component/FluxFlyout.vue","../src/component/FluxTooltip.vue","../src/component/FluxActionBar.vue","../src/component/FluxActionPane.vue","../src/component/FluxActions.vue","../src/component/FluxAnimatedColors.vue","../src/transition/FluxAutoHeightTransition.vue","../src/transition/FluxAutoWidthTransition.vue","../src/component/FluxAvatar.vue","../src/component/FluxBadge.vue","../src/component/FluxBorderShine.vue","../src/component/primitive/AnchorPopup.vue","../src/component/FluxFormInput.vue","../src/component/primitive/FilterOptionBase.vue","../src/component/FluxMenu.vue","../src/component/FluxTag.vue","../src/component/primitive/SelectBase.vue","../src/component/FluxTicks.vue","../src/component/primitive/SliderBase.vue","../src/component/primitive/SliderThumb.vue","../src/util/createDialogRenderer.ts","../src/util/createLabelForDateRange.ts","../src/component/primitive/FilterItem.vue","../src/component/primitive/FilterMenuRenderer.ts","../src/component/primitive/VNodeRenderer.ts","../src/component/FluxCalendar.vue","../src/component/FluxCalendarEvent.vue","../src/component/FluxCheckbox.vue","../src/component/FluxChip.vue","../src/component/FluxClickablePane.vue","../src/component/FluxComment.vue","../src/component/primitive/CoordinatePickerThumb.vue","../src/component/primitive/CoordinatePicker.vue","../src/component/FluxFormField.vue","../src/component/FluxFormSlider.vue","../src/component/FluxColorPicker.vue","../src/component/FluxColorSelect.vue","../src/component/FluxTable.vue","../src/component/FluxDataTable.vue","../src/component/FluxDatePicker.vue","../src/component/FluxDisabled.vue","../src/component/FluxDivider.vue","../src/component/FluxDotPattern.vue","../src/component/FluxDropZone.vue","../src/component/FluxExpandable.vue","../src/component/FluxExpandableGroup.vue","../src/component/FluxFader.vue","../src/component/FluxWindow.vue","../src/component/FluxFilter.vue","../src/component/FluxFilterDate.vue","../src/component/FluxFilterDateRange.vue","../src/component/FluxFilterOption.vue","../src/component/FluxFilterOptionAsync.vue","../src/component/FluxFilterOptions.vue","../src/component/FluxFilterOptionsAsync.vue","../src/component/FluxFilterRange.vue","../src/component/FluxFlickeringGrid.vue","../src/component/FluxFocalPointEditor.vue","../src/component/FluxFocalPointImage.vue","../src/component/FluxForm.vue","../src/component/FluxFormDateInput.vue","../src/component/FluxFormDateRangeInput.vue","../src/component/FluxFormDateTimeInput.vue","../src/component/FluxFormPinInput.vue","../src/component/FluxFormRangeSlider.vue","../src/component/FluxFormSelect.vue","../src/component/FluxFormSelectAsync.vue","../src/component/FluxFormTextArea.vue","../src/component/FluxFormTimeZonePicker.vue","../src/component/FluxRemove.vue","../src/component/FluxGalleryItem.vue","../src/component/FluxGallery.vue","../src/component/FluxGridPattern.vue","../src/component/FluxLink.vue","../src/component/FluxMenuOptions.vue","../src/component/FluxNotice.vue","../src/component/FluxOverlay.vue","../src/component/FluxPagination.vue","../src/component/FluxPaginationBar.vue","../src/component/FluxPaneIllustration.vue","../src/component/FluxPaneMedia.vue","../src/component/FluxPlaceholder.vue","../src/component/FluxProgressBar.vue","../src/component/FluxQuantitySelector.vue","../src/component/FluxAlert.vue","../src/component/FluxConfirm.vue","../src/component/FluxPrompt.vue","../src/component/FluxSnackbar.vue","../src/component/FluxSnackbarProvider.vue","../src/component/FluxTooltipProvider.vue","../src/component/FluxRoot.vue","../src/component/FluxSegmentedControl.vue","../src/component/FluxSegmentedView.vue","../src/component/FluxSlideOver.vue","../src/component/FluxSpacing.vue","../src/component/FluxStepperSteps.vue","../src/component/FluxStepper.vue","../src/component/FluxTabBar.vue","../src/component/FluxTabBarItem.vue","../src/component/FluxTabs.vue","../src/component/FluxTableCell.vue","../src/component/FluxTableHeader.vue","../src/component/FluxToggle.vue"],"sourcesContent":["function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import type { Ref } from 'vue';\nimport { onMounted, onUnmounted, ref } from 'vue';\n\nconst BREAKPOINTS = {\n xs: 0,\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280\n} as const;\n\ntype Breakpoint = keyof typeof BREAKPOINTS;\n\nexport default function () {\n const currentBreakpoint = ref<Breakpoint | null>(null);\n const breakpointRefs = Object.fromEntries(\n Object.keys(BREAKPOINTS).map((key) => [key, ref(false)])\n ) as Record<Breakpoint, Ref<boolean>>;\n\n const updateBreakpoints = () => {\n const width = window.innerWidth;\n let activeBreakpoint: Breakpoint | null = null;\n\n for (const [key, value] of Object.entries(BREAKPOINTS).reverse() as [\n Breakpoint,\n number\n ][]) {\n if (width >= value) {\n activeBreakpoint = key;\n break;\n }\n }\n\n currentBreakpoint.value = activeBreakpoint;\n\n for (const key of Object.keys(BREAKPOINTS) as Breakpoint[]) {\n breakpointRefs[key].value = key === activeBreakpoint;\n }\n };\n\n onMounted(() => {\n updateBreakpoints();\n window.addEventListener('resize', updateBreakpoints, {passive: true});\n });\n\n onUnmounted(() => {\n window.removeEventListener('resize', updateBreakpoints);\n });\n\n return {\n currentBreakpoint,\n ...breakpointRefs\n };\n}\n","import type { FluxFilterState, FluxFilterValue } from '@flux-ui/types';\nimport type { ComponentInternalInstance, InjectionKey, Ref } from 'vue';\n\nexport const FluxDisabledInjectionKey: InjectionKey<Ref<boolean>> = Symbol();\nexport const FluxExpandableGroupInjectionKey: InjectionKey<FluxExpandableGroupInjection> = Symbol();\nexport const FluxFlyoutInjectionKey: InjectionKey<FluxFlyoutInjection> = Symbol();\nexport const FluxFilterInjectionKey: InjectionKey<FluxFilterInjection> = Symbol();\nexport const FluxFormFieldInjectionKey: InjectionKey<FluxFormFieldInjection> = Symbol();\nexport const FluxTableInjectionKey: InjectionKey<FluxTableInjection> = Symbol();\n\nexport type FluxExpandableGroupInjection = {\n closeAll(): void;\n register(uid: number, expandable: ComponentInternalInstance): void;\n unregister(uid: number): void;\n};\n\nexport type FluxFilterInjection = {\n readonly state: Ref<FluxFilterState>;\n\n back(): void;\n reset(name: string | number): void;\n getValue(name: string | number): FluxFilterValue | undefined;\n hasValue(name: string | number): boolean;\n setValue(name: string | number, value?: FluxFilterValue): void;\n};\n\nexport type FluxFlyoutInjection = {\n readonly isClosing: Ref<boolean>;\n readonly isOpen: Ref<boolean>;\n readonly isOpening: Ref<boolean>;\n};\n\nexport type FluxFormFieldInjection = {\n readonly id?: string;\n};\n\nexport type FluxTableInjection = {\n readonly isBordered: boolean;\n readonly isHoverable: boolean;\n readonly isSeparated: boolean;\n readonly isStriped: boolean;\n};\n","import type { FluxFilterOptionHeader, FluxFilterOptionItem } from '@flux-ui/types';\n\nexport function isFluxFilterOptionHeader(obj: object): obj is FluxFilterOptionHeader {\n return 'title' in obj;\n}\n\nexport function isFluxFilterOptionItem(obj: object): obj is FluxFilterOptionItem {\n return 'label' in obj && 'value' in obj;\n}\n","import type { FluxFormSelectGroup, FluxFormSelectOption } from '@flux-ui/types';\n\nexport function isFluxFormSelectGroup(item: unknown): item is FluxFormSelectGroup {\n return item !== null && typeof item === 'object' && !('value' in item);\n}\n\nexport function isFluxFormSelectOption(item: unknown): item is FluxFormSelectOption {\n return item !== null && typeof item === 'object' && 'value' in item;\n}\n","export type FluxTranslate = (key: FluxTranslation, params?: Record<string, string | number>) => string;\nexport type FluxTranslation = keyof typeof english;\n\nexport const english = {\n 'flux.back': 'Back',\n 'flux.cancel': 'Cancel',\n 'flux.comingSoon': 'Coming soon',\n 'flux.continue': 'Continue',\n 'flux.customPeriod': 'Custom period',\n 'flux.filter': 'Filter',\n 'flux.filterReset': 'Reset filters',\n 'flux.justNow': 'Just now',\n 'flux.max': 'Max',\n 'flux.min': 'Min',\n 'flux.nSelected': '{n} selected',\n 'flux.ok': 'Ok',\n 'flux.optional': 'Optional',\n 'flux.preview': 'Preview',\n 'flux.previewClose': 'Close preview',\n 'flux.displayingOf': '{from}–{to} of {total}',\n 'flux.rowsPerPage': 'Rows per page',\n 'flux.next': 'Next',\n 'flux.noItems': 'There are no items (left).',\n 'flux.pagination': 'Pagination',\n 'flux.paginationNavigateTitle': 'Navigate',\n 'flux.paginationNavigateMessage': 'Please provide the desired page number you wish to navigate to.',\n 'flux.paginationNavigatePage': 'Page',\n 'flux.previous': 'Previous',\n 'flux.search': 'Search...',\n 'flux.sort': 'Sort',\n 'flux.sortAscending': 'Ascending',\n 'flux.sortDescending': 'Descending',\n 'flux.sortRemove': 'Remove sorting',\n 'flux.today': 'Today',\n 'flux.galleryPlaceholderButton': 'Pick image',\n 'flux.galleryPlaceholderMessage': 'Drop an image here or click the button to upload...',\n 'flux.galleryPlaceholderTitle': 'Gallery',\n 'flux.timezoneEurope': 'Europe',\n 'flux.timezoneAmerica': 'America',\n 'flux.timezoneUs': 'United States',\n 'flux.timezoneAustralia': 'Australia',\n 'flux.timezoneCanada': 'Canada',\n 'flux.timezoneMexico': 'Mexico',\n 'flux.timezoneAfrica': 'Africa',\n 'flux.timezoneAntarctica': 'Antarctica',\n 'flux.timezoneArctic': 'Arctic',\n 'flux.timezoneAsia': 'Asia',\n 'flux.timezoneAtlantic': 'Atlantic',\n 'flux.timezoneBrazil': 'Brazil',\n 'flux.timezoneChile': 'Chile',\n 'flux.timezoneEtc': 'ETC',\n 'flux.timezoneOther': 'Other',\n 'flux.timezoneIndian': 'Indian',\n 'flux.timezonePacific': 'Pacific'\n} as const;\n","import type { FluxIconName } from '@flux-ui/types';\nimport type { IconDefinition, IconPathData } from '@fortawesome/fontawesome-common-types';\n\ntype Icon = [number, number, string[], string, IconPathData];\ntype IconRegistry = Partial<{ [key in FluxIconName]: Icon; }>;\ntype Icons = Record<string, IconDefinition>;\n\nexport let iconRegistry: IconRegistry = {};\n\nexport function fluxRegisterIcons(icons: Icons): void {\n iconRegistry = Object.keys(icons).reduce((acc: IconRegistry, key: string) => {\n const {icon, iconName} = icons[key];\n acc[iconName] = icon;\n\n if (Array.isArray(icon[2])) {\n icon[2].forEach((iconName: string) => acc[iconName as FluxIconName] = icon);\n }\n\n return acc;\n }, {});\n}\n","import type { FluxAlertObject, FluxConfirmObject, FluxPromptObject, FluxSnackbarObject, FluxTooltipObject } from '@flux-ui/types';\nimport type { ComputedRef } from 'vue';\nimport { computed, reactive } from 'vue';\n\nexport type FluxState = {\n dialogCount: number;\n readonly alerts: FluxAlertObject[];\n readonly confirms: FluxConfirmObject[];\n readonly prompts: FluxPromptObject[];\n readonly snackbars: FluxSnackbarObject[];\n readonly tooltips: FluxTooltipObject[];\n};\n\nexport type FluxStore = FluxState & {\n readonly inertMain: ComputedRef<boolean>;\n readonly tooltip: ComputedRef<FluxTooltipObject | null>;\n\n addAlert(spec: Omit<FluxAlertObject, 'id'>): number;\n addConfirm(spec: Omit<FluxConfirmObject, 'id'>): number;\n addPrompt(spec: Omit<FluxPromptObject, 'id'>): number;\n addSnackbar(spec: Omit<FluxSnackbarObject, 'id'>): number;\n addTooltip(spec: Omit<FluxTooltipObject, 'id'>): number;\n registerDialog(): VoidFunction;\n removeAlert(id: number): void;\n removeConfirm(id: number): void;\n removePrompt(id: number): void;\n removeSnackbar(id: number): void;\n removeTooltip(id: number): void;\n showAlert(spec: Omit<FluxAlertObject, 'id' | 'onClose'>): Promise<void>;\n showConfirm(spec: Omit<FluxConfirmObject, 'id' | 'onCancel' | 'onConfirm'>): Promise<boolean>;\n showPrompt(spec: Omit<FluxPromptObject, 'id' | 'onCancel' | 'onConfirm'>): Promise<string | false>;\n showSnackbar({duration, ...spec}: Omit<FluxSnackbarObject, 'id'> & { readonly duration?: number; }): Promise<void> | void;\n updateSnackbar(id: number, spec: Partial<Omit<FluxSnackbarObject, 'id'>>): void;\n updateTooltip(id: number, spec: Partial<Omit<FluxTooltipObject, 'id'>>): void;\n showSnackbarSync({duration, ...spec}: Omit<FluxSnackbarObject, 'id'> & { readonly duration?: number; }): void;\n};\n\nconst DEFAULT_SNACKBAR_DURATION = 6000;\n\nconst state = reactive<FluxState>({\n dialogCount: 0,\n alerts: [],\n confirms: [],\n prompts: [],\n snackbars: [],\n tooltips: []\n});\n\nlet alertId: number = 0;\nlet tooltipId: number = 0;\n\nexport function addAlert(spec: Omit<FluxAlertObject, 'id'>): number {\n const id = ++alertId;\n\n state.alerts.push({\n id,\n ...spec\n });\n\n return id;\n}\n\nexport function addConfirm(spec: Omit<FluxConfirmObject, 'id'>): number {\n const id = ++alertId;\n\n state.confirms.push({\n id,\n ...spec\n });\n\n return id;\n}\n\nexport function addPrompt(spec: Omit<FluxPromptObject, 'id'>): number {\n const id = ++alertId;\n\n state.prompts.push({\n id,\n ...spec\n });\n\n return id;\n}\n\nexport function addSnackbar(spec: Omit<FluxSnackbarObject, 'id'>): number {\n const id = ++alertId;\n\n state.snackbars.unshift({\n id,\n ...spec\n });\n\n return id;\n}\n\nexport function addTooltip(spec: Omit<FluxTooltipObject, 'id'>): number {\n const id = ++tooltipId;\n\n state.tooltips.push({\n id,\n ...spec\n });\n\n return id;\n}\n\nexport function registerDialog(): VoidFunction {\n ++state.dialogCount;\n return () => --state.dialogCount;\n}\n\nexport function removeAlert(id: number): void {\n const index = state.alerts.findIndex(a => a.id === id);\n state.alerts.splice(index, 1);\n}\n\nexport function removeConfirm(id: number): void {\n const index = state.confirms.findIndex(c => c.id === id);\n state.confirms.splice(index, 1);\n}\n\nexport function removePrompt(id: number): void {\n const index = state.prompts.findIndex(c => c.id === id);\n state.prompts.splice(index, 1);\n}\n\nexport function removeSnackbar(id: number): void {\n const index = state.snackbars.findIndex(s => s.id === id);\n state.snackbars.splice(index, 1);\n}\n\nexport function removeTooltip(id: number): void {\n const index = state.tooltips.findIndex(t => t.id === id);\n state.tooltips.splice(index, 1);\n}\n\nexport function updateSnackbar(id: number, spec: Partial<Omit<FluxSnackbarObject, 'id'>>): void {\n const index = state.snackbars.findIndex(s => s.id === id);\n Object.assign(state.snackbars[index], spec);\n}\n\nexport function updateTooltip(id: number, spec: Partial<Omit<FluxTooltipObject, 'id'>>): void {\n const index = state.tooltips.findIndex(s => s.id === id);\n Object.assign(state.tooltips[index], spec);\n}\n\nexport async function showAlert(spec: Omit<FluxAlertObject, 'id' | 'onClose'>): Promise<void> {\n return new Promise(resolve => {\n const id = addAlert({\n ...spec,\n onClose(): void {\n resolve();\n removeAlert(id);\n }\n });\n });\n}\n\nexport async function showConfirm(spec: Omit<FluxConfirmObject, 'id' | 'onCancel' | 'onConfirm'>): Promise<boolean> {\n return new Promise(resolve => {\n const id = addConfirm({\n ...spec,\n onCancel(): void {\n resolve(false);\n removeConfirm(id);\n },\n onConfirm(): void {\n resolve(true);\n removeConfirm(id);\n }\n });\n });\n}\n\nexport async function showPrompt(spec: Omit<FluxPromptObject, 'id' | 'onCancel' | 'onConfirm'>): Promise<string | false> {\n return new Promise(resolve => {\n const id = addPrompt({\n ...spec,\n onCancel(): void {\n resolve(false);\n removePrompt(id);\n },\n onConfirm(text: string): void {\n resolve(text);\n removePrompt(id);\n }\n });\n });\n}\n\nexport function showSnackbar({duration, ...spec}: Omit<FluxSnackbarObject, 'id'> & { readonly duration?: number; }): void;\n\nexport async function showSnackbar({duration, ...spec}: Omit<FluxSnackbarObject, 'id'> & { readonly duration?: number; }): Promise<void> {\n const id = addSnackbar(spec);\n await new Promise(resolve => setTimeout(() => requestAnimationFrame(resolve), duration ?? DEFAULT_SNACKBAR_DURATION));\n removeSnackbar(id);\n}\n\nexport function useFluxStore(): FluxStore {\n const inertMain = computed(() => state.dialogCount > 0);\n const tooltip = computed(() => state.tooltips[state.tooltips.length - 1] || null);\n\n return {\n ...state,\n inertMain,\n tooltip,\n addAlert,\n addConfirm,\n addPrompt,\n addSnackbar,\n addTooltip,\n registerDialog,\n removeAlert,\n removeConfirm,\n removePrompt,\n removeSnackbar,\n removeTooltip,\n showAlert,\n showConfirm,\n showPrompt,\n showSnackbar,\n updateSnackbar,\n updateTooltip,\n showSnackbarSync: promiseToVoidFunction(showSnackbar)\n };\n}\n\ntype Fn = (...args: any[]) => any;\ntype FnSync<T extends Fn> = (...args: Parameters<T>) => void;\n\nfunction promiseToVoidFunction<T extends Fn>(fn: T): FnSync<T> {\n return (...args: any[]) => fn(...args);\n}\n","/** Checks if value is string */\nfunction isString(str) {\n return typeof str === 'string' || str instanceof String;\n}\n\n/** Checks if value is object */\nfunction isObject(obj) {\n var _obj$constructor;\n return typeof obj === 'object' && obj != null && (obj == null || (_obj$constructor = obj.constructor) == null ? void 0 : _obj$constructor.name) === 'Object';\n}\nfunction pick(obj, keys) {\n if (Array.isArray(keys)) return pick(obj, (_, k) => keys.includes(k));\n return Object.entries(obj).reduce((acc, _ref) => {\n let [k, v] = _ref;\n if (keys(v, k)) acc[k] = v;\n return acc;\n }, {});\n}\n\n/** Direction */\nconst DIRECTION = {\n NONE: 'NONE',\n LEFT: 'LEFT',\n FORCE_LEFT: 'FORCE_LEFT',\n RIGHT: 'RIGHT',\n FORCE_RIGHT: 'FORCE_RIGHT'\n};\n\n/** Direction */\n\nfunction forceDirection(direction) {\n switch (direction) {\n case DIRECTION.LEFT:\n return DIRECTION.FORCE_LEFT;\n case DIRECTION.RIGHT:\n return DIRECTION.FORCE_RIGHT;\n default:\n return direction;\n }\n}\n\n/** Escapes regular expression control chars */\nfunction escapeRegExp(str) {\n return str.replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1');\n}\n\n// cloned from https://github.com/epoberezkin/fast-deep-equal with small changes\nfunction objectIncludes(b, a) {\n if (a === b) return true;\n const arrA = Array.isArray(a),\n arrB = Array.isArray(b);\n let i;\n if (arrA && arrB) {\n if (a.length != b.length) return false;\n for (i = 0; i < a.length; i++) if (!objectIncludes(a[i], b[i])) return false;\n return true;\n }\n if (arrA != arrB) return false;\n if (a && b && typeof a === 'object' && typeof b === 'object') {\n const dateA = a instanceof Date,\n dateB = b instanceof Date;\n if (dateA && dateB) return a.getTime() == b.getTime();\n if (dateA != dateB) return false;\n const regexpA = a instanceof RegExp,\n regexpB = b instanceof RegExp;\n if (regexpA && regexpB) return a.toString() == b.toString();\n if (regexpA != regexpB) return false;\n const keys = Object.keys(a);\n // if (keys.length !== Object.keys(b).length) return false;\n\n for (i = 0; i < keys.length; i++) if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n for (i = 0; i < keys.length; i++) if (!objectIncludes(b[keys[i]], a[keys[i]])) return false;\n return true;\n } else if (a && b && typeof a === 'function' && typeof b === 'function') {\n return a.toString() === b.toString();\n }\n return false;\n}\n\n/** Selection range */\n\nexport { DIRECTION, escapeRegExp, forceDirection, isObject, isString, objectIncludes, pick };\n","import { DIRECTION } from './utils.js';\n\n/** Provides details of changing input */\nclass ActionDetails {\n /** Current input value */\n\n /** Current cursor position */\n\n /** Old input value */\n\n /** Old selection */\n\n constructor(opts) {\n Object.assign(this, opts);\n\n // double check if left part was changed (autofilling, other non-standard input triggers)\n while (this.value.slice(0, this.startChangePos) !== this.oldValue.slice(0, this.startChangePos)) {\n --this.oldSelection.start;\n }\n if (this.insertedCount) {\n // double check right part\n while (this.value.slice(this.cursorPos) !== this.oldValue.slice(this.oldSelection.end)) {\n if (this.value.length - this.cursorPos < this.oldValue.length - this.oldSelection.end) ++this.oldSelection.end;else ++this.cursorPos;\n }\n }\n }\n\n /** Start changing position */\n get startChangePos() {\n return Math.min(this.cursorPos, this.oldSelection.start);\n }\n\n /** Inserted symbols count */\n get insertedCount() {\n return this.cursorPos - this.startChangePos;\n }\n\n /** Inserted symbols */\n get inserted() {\n return this.value.substr(this.startChangePos, this.insertedCount);\n }\n\n /** Removed symbols count */\n get removedCount() {\n // Math.max for opposite operation\n return Math.max(this.oldSelection.end - this.startChangePos ||\n // for Delete\n this.oldValue.length - this.value.length, 0);\n }\n\n /** Removed symbols */\n get removed() {\n return this.oldValue.substr(this.startChangePos, this.removedCount);\n }\n\n /** Unchanged head symbols */\n get head() {\n return this.value.substring(0, this.startChangePos);\n }\n\n /** Unchanged tail symbols */\n get tail() {\n return this.value.substring(this.startChangePos + this.insertedCount);\n }\n\n /** Remove direction */\n get removeDirection() {\n if (!this.removedCount || this.insertedCount) return DIRECTION.NONE;\n\n // align right if delete at right\n return (this.oldSelection.end === this.cursorPos || this.oldSelection.start === this.cursorPos) &&\n // if not range removed (event with backspace)\n this.oldSelection.end === this.oldSelection.start ? DIRECTION.RIGHT : DIRECTION.LEFT;\n }\n}\n\nexport { ActionDetails as default };\n","/** Applies mask on element */\nfunction IMask(el, opts) {\n // currently available only for input-like elements\n return new IMask.InputMask(el, opts);\n}\n\nexport { IMask as default };\n","import { isString, isObject, pick } from '../core/utils.js';\nimport IMask from '../core/holder.js';\n\n// TODO can't use overloads here because of https://github.com/microsoft/TypeScript/issues/50754\n// export function maskedClass(mask: string): typeof MaskedPattern;\n// export function maskedClass(mask: DateConstructor): typeof MaskedDate;\n// export function maskedClass(mask: NumberConstructor): typeof MaskedNumber;\n// export function maskedClass(mask: Array<any> | ArrayConstructor): typeof MaskedDynamic;\n// export function maskedClass(mask: MaskedDate): typeof MaskedDate;\n// export function maskedClass(mask: MaskedNumber): typeof MaskedNumber;\n// export function maskedClass(mask: MaskedEnum): typeof MaskedEnum;\n// export function maskedClass(mask: MaskedRange): typeof MaskedRange;\n// export function maskedClass(mask: MaskedRegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: MaskedFunction): typeof MaskedFunction;\n// export function maskedClass(mask: MaskedPattern): typeof MaskedPattern;\n// export function maskedClass(mask: MaskedDynamic): typeof MaskedDynamic;\n// export function maskedClass(mask: Masked): typeof Masked;\n// export function maskedClass(mask: typeof Masked): typeof Masked;\n// export function maskedClass(mask: typeof MaskedDate): typeof MaskedDate;\n// export function maskedClass(mask: typeof MaskedNumber): typeof MaskedNumber;\n// export function maskedClass(mask: typeof MaskedEnum): typeof MaskedEnum;\n// export function maskedClass(mask: typeof MaskedRange): typeof MaskedRange;\n// export function maskedClass(mask: typeof MaskedRegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: typeof MaskedFunction): typeof MaskedFunction;\n// export function maskedClass(mask: typeof MaskedPattern): typeof MaskedPattern;\n// export function maskedClass(mask: typeof MaskedDynamic): typeof MaskedDynamic;\n// export function maskedClass<Mask extends typeof Masked> (mask: Mask): Mask;\n// export function maskedClass(mask: RegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: (value: string, ...args: any[]) => boolean): typeof MaskedFunction;\n\n/** Get Masked class by mask type */\nfunction maskedClass(mask) /* TODO */{\n if (mask == null) throw new Error('mask property should be defined');\n if (mask instanceof RegExp) return IMask.MaskedRegExp;\n if (isString(mask)) return IMask.MaskedPattern;\n if (mask === Date) return IMask.MaskedDate;\n if (mask === Number) return IMask.MaskedNumber;\n if (Array.isArray(mask) || mask === Array) return IMask.MaskedDynamic;\n if (IMask.Masked && mask.prototype instanceof IMask.Masked) return mask;\n if (IMask.Masked && mask instanceof IMask.Masked) return mask.constructor;\n if (mask instanceof Function) return IMask.MaskedFunction;\n console.warn('Mask not found for mask', mask); // eslint-disable-line no-console\n return IMask.Masked;\n}\nfunction normalizeOpts(opts) {\n if (!opts) throw new Error('Options in not defined');\n if (IMask.Masked) {\n if (opts.prototype instanceof IMask.Masked) return {\n mask: opts\n };\n\n /*\n handle cases like:\n 1) opts = Masked\n 2) opts = { mask: Masked, ...instanceOpts }\n */\n const {\n mask = undefined,\n ...instanceOpts\n } = opts instanceof IMask.Masked ? {\n mask: opts\n } : isObject(opts) && opts.mask instanceof IMask.Masked ? opts : {};\n if (mask) {\n const _mask = mask.mask;\n return {\n ...pick(mask, (_, k) => !k.startsWith('_')),\n mask: mask.constructor,\n _mask,\n ...instanceOpts\n };\n }\n }\n if (!isObject(opts)) return {\n mask: opts\n };\n return {\n ...opts\n };\n}\n\n// TODO can't use overloads here because of https://github.com/microsoft/TypeScript/issues/50754\n\n// From masked\n// export default function createMask<Opts extends Masked, ReturnMasked=Opts> (opts: Opts): ReturnMasked;\n// // From masked class\n// export default function createMask<Opts extends MaskedOptions<typeof Masked>, ReturnMasked extends Masked=InstanceType<Opts['mask']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedDate>, ReturnMasked extends MaskedDate=MaskedDate<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedNumber>, ReturnMasked extends MaskedNumber=MaskedNumber<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedEnum>, ReturnMasked extends MaskedEnum=MaskedEnum<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedRange>, ReturnMasked extends MaskedRange=MaskedRange<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedRegExp>, ReturnMasked extends MaskedRegExp=MaskedRegExp<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedFunction>, ReturnMasked extends MaskedFunction=MaskedFunction<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedPattern>, ReturnMasked extends MaskedPattern=MaskedPattern<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedDynamic>, ReturnMasked extends MaskedDynamic=MaskedDynamic<Opts['parent']>> (opts: Opts): ReturnMasked;\n// // From mask opts\n// export default function createMask<Opts extends MaskedOptions<Masked>, ReturnMasked=Opts extends MaskedOptions<infer M> ? M : never> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedNumberOptions, ReturnMasked extends MaskedNumber=MaskedNumber<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedDateFactoryOptions, ReturnMasked extends MaskedDate=MaskedDate<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedEnumOptions, ReturnMasked extends MaskedEnum=MaskedEnum<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedRangeOptions, ReturnMasked extends MaskedRange=MaskedRange<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedPatternOptions, ReturnMasked extends MaskedPattern=MaskedPattern<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedDynamicOptions, ReturnMasked extends MaskedDynamic=MaskedDynamic<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<RegExp>, ReturnMasked extends MaskedRegExp=MaskedRegExp<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<Function>, ReturnMasked extends MaskedFunction=MaskedFunction<Opts['parent']>> (opts: Opts): ReturnMasked;\n\n/** Creates new {@link Masked} depending on mask type */\nfunction createMask(opts) {\n if (IMask.Masked && opts instanceof IMask.Masked) return opts;\n const nOpts = normalizeOpts(opts);\n const MaskedClass = maskedClass(nOpts.mask);\n if (!MaskedClass) throw new Error(\"Masked class is not found for provided mask \" + nOpts.mask + \", appropriate module needs to be imported manually before creating mask.\");\n if (nOpts.mask === MaskedClass) delete nOpts.mask;\n if (nOpts._mask) {\n nOpts.mask = nOpts._mask;\n delete nOpts._mask;\n }\n return new MaskedClass(nOpts);\n}\nIMask.createMask = createMask;\n\nexport { createMask as default, maskedClass, normalizeOpts };\n","import IMask from '../core/holder.js';\n\n/** Generic element API to use with mask */\nclass MaskElement {\n /** */\n\n /** */\n\n /** */\n\n /** Safely returns selection start */\n get selectionStart() {\n let start;\n try {\n start = this._unsafeSelectionStart;\n } catch {}\n return start != null ? start : this.value.length;\n }\n\n /** Safely returns selection end */\n get selectionEnd() {\n let end;\n try {\n end = this._unsafeSelectionEnd;\n } catch {}\n return end != null ? end : this.value.length;\n }\n\n /** Safely sets element selection */\n select(start, end) {\n if (start == null || end == null || start === this.selectionStart && end === this.selectionEnd) return;\n try {\n this._unsafeSelect(start, end);\n } catch {}\n }\n\n /** */\n get isActive() {\n return false;\n }\n /** */\n\n /** */\n\n /** */\n}\nIMask.MaskElement = MaskElement;\n\nexport { MaskElement as default };\n","import MaskElement from './mask-element.js';\nimport IMask from '../core/holder.js';\n\nconst KEY_Z = 90;\nconst KEY_Y = 89;\n\n/** Bridge between HTMLElement and {@link Masked} */\nclass HTMLMaskElement extends MaskElement {\n /** HTMLElement to use mask on */\n\n constructor(input) {\n super();\n this.input = input;\n this._onKeydown = this._onKeydown.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onBeforeinput = this._onBeforeinput.bind(this);\n this._onCompositionEnd = this._onCompositionEnd.bind(this);\n }\n get rootElement() {\n var _this$input$getRootNo, _this$input$getRootNo2, _this$input;\n return (_this$input$getRootNo = (_this$input$getRootNo2 = (_this$input = this.input).getRootNode) == null ? void 0 : _this$input$getRootNo2.call(_this$input)) != null ? _this$input$getRootNo : document;\n }\n\n /** Is element in focus */\n get isActive() {\n return this.input === this.rootElement.activeElement;\n }\n\n /** Binds HTMLElement events to mask internal events */\n bindEvents(handlers) {\n this.input.addEventListener('keydown', this._onKeydown);\n this.input.addEventListener('input', this._onInput);\n this.input.addEventListener('beforeinput', this._onBeforeinput);\n this.input.addEventListener('compositionend', this._onCompositionEnd);\n this.input.addEventListener('drop', handlers.drop);\n this.input.addEventListener('click', handlers.click);\n this.input.addEventListener('focus', handlers.focus);\n this.input.addEventListener('blur', handlers.commit);\n this._handlers = handlers;\n }\n _onKeydown(e) {\n if (this._handlers.redo && (e.keyCode === KEY_Z && e.shiftKey && (e.metaKey || e.ctrlKey) || e.keyCode === KEY_Y && e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n if (this._handlers.undo && e.keyCode === KEY_Z && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (!e.isComposing) this._handlers.selectionChange(e);\n }\n _onBeforeinput(e) {\n if (e.inputType === 'historyUndo' && this._handlers.undo) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (e.inputType === 'historyRedo' && this._handlers.redo) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n }\n _onCompositionEnd(e) {\n this._handlers.input(e);\n }\n _onInput(e) {\n if (!e.isComposing) this._handlers.input(e);\n }\n\n /** Unbinds HTMLElement events to mask internal events */\n unbindEvents() {\n this.input.removeEventListener('keydown', this._onKeydown);\n this.input.removeEventListener('input', this._onInput);\n this.input.removeEventListener('beforeinput', this._onBeforeinput);\n this.input.removeEventListener('compositionend', this._onCompositionEnd);\n this.input.removeEventListener('drop', this._handlers.drop);\n this.input.removeEventListener('click', this._handlers.click);\n this.input.removeEventListener('focus', this._handlers.focus);\n this.input.removeEventListener('blur', this._handlers.commit);\n this._handlers = {};\n }\n}\nIMask.HTMLMaskElement = HTMLMaskElement;\n\nexport { HTMLMaskElement as default };\n","import HTMLMaskElement from './html-mask-element.js';\nimport IMask from '../core/holder.js';\nimport './mask-element.js';\n\n/** Bridge between InputElement and {@link Masked} */\nclass HTMLInputMaskElement extends HTMLMaskElement {\n /** InputElement to use mask on */\n\n constructor(input) {\n super(input);\n this.input = input;\n }\n\n /** Returns InputElement selection start */\n get _unsafeSelectionStart() {\n return this.input.selectionStart != null ? this.input.selectionStart : this.value.length;\n }\n\n /** Returns InputElement selection end */\n get _unsafeSelectionEnd() {\n return this.input.selectionEnd;\n }\n\n /** Sets InputElement selection */\n _unsafeSelect(start, end) {\n this.input.setSelectionRange(start, end);\n }\n get value() {\n return this.input.value;\n }\n set value(value) {\n this.input.value = value;\n }\n}\nIMask.HTMLMaskElement = HTMLMaskElement;\n\nexport { HTMLInputMaskElement as default };\n","import HTMLMaskElement from './html-mask-element.js';\nimport IMask from '../core/holder.js';\nimport './mask-element.js';\n\nclass HTMLContenteditableMaskElement extends HTMLMaskElement {\n /** Returns HTMLElement selection start */\n get _unsafeSelectionStart() {\n const root = this.rootElement;\n const selection = root.getSelection && root.getSelection();\n const anchorOffset = selection && selection.anchorOffset;\n const focusOffset = selection && selection.focusOffset;\n if (focusOffset == null || anchorOffset == null || anchorOffset < focusOffset) {\n return anchorOffset;\n }\n return focusOffset;\n }\n\n /** Returns HTMLElement selection end */\n get _unsafeSelectionEnd() {\n const root = this.rootElement;\n const selection = root.getSelection && root.getSelection();\n const anchorOffset = selection && selection.anchorOffset;\n const focusOffset = selection && selection.focusOffset;\n if (focusOffset == null || anchorOffset == null || anchorOffset > focusOffset) {\n return anchorOffset;\n }\n return focusOffset;\n }\n\n /** Sets HTMLElement selection */\n _unsafeSelect(start, end) {\n if (!this.rootElement.createRange) return;\n const range = this.rootElement.createRange();\n range.setStart(this.input.firstChild || this.input, start);\n range.setEnd(this.input.lastChild || this.input, end);\n const root = this.rootElement;\n const selection = root.getSelection && root.getSelection();\n if (selection) {\n selection.removeAllRanges();\n selection.addRange(range);\n }\n }\n\n /** HTMLElement value */\n get value() {\n return this.input.textContent || '';\n }\n set value(value) {\n this.input.textContent = value;\n }\n}\nIMask.HTMLContenteditableMaskElement = HTMLContenteditableMaskElement;\n\nexport { HTMLContenteditableMaskElement as default };\n","class InputHistory {\n constructor() {\n this.states = [];\n this.currentIndex = 0;\n }\n get currentState() {\n return this.states[this.currentIndex];\n }\n get isEmpty() {\n return this.states.length === 0;\n }\n push(state) {\n // if current index points before the last element then remove the future\n if (this.currentIndex < this.states.length - 1) this.states.length = this.currentIndex + 1;\n this.states.push(state);\n if (this.states.length > InputHistory.MAX_LENGTH) this.states.shift();\n this.currentIndex = this.states.length - 1;\n }\n go(steps) {\n this.currentIndex = Math.min(Math.max(this.currentIndex + steps, 0), this.states.length - 1);\n return this.currentState;\n }\n undo() {\n return this.go(-1);\n }\n redo() {\n return this.go(+1);\n }\n clear() {\n this.states.length = 0;\n this.currentIndex = 0;\n }\n}\nInputHistory.MAX_LENGTH = 100;\n\nexport { InputHistory as default };\n","import { DIRECTION } from '../core/utils.js';\nimport ActionDetails from '../core/action-details.js';\nimport createMask, { maskedClass } from '../masked/factory.js';\nimport MaskElement from './mask-element.js';\nimport HTMLInputMaskElement from './html-input-mask-element.js';\nimport HTMLContenteditableMaskElement from './html-contenteditable-mask-element.js';\nimport IMask from '../core/holder.js';\nimport InputHistory from './input-history.js';\nimport './html-mask-element.js';\n\n/** Listens to element events and controls changes between element and {@link Masked} */\nclass InputMask {\n /**\n View element\n */\n\n /** Internal {@link Masked} model */\n\n constructor(el, opts) {\n this.el = el instanceof MaskElement ? el : el.isContentEditable && el.tagName !== 'INPUT' && el.tagName !== 'TEXTAREA' ? new HTMLContenteditableMaskElement(el) : new HTMLInputMaskElement(el);\n this.masked = createMask(opts);\n this._listeners = {};\n this._value = '';\n this._unmaskedValue = '';\n this._rawInputValue = '';\n this.history = new InputHistory();\n this._saveSelection = this._saveSelection.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onChange = this._onChange.bind(this);\n this._onDrop = this._onDrop.bind(this);\n this._onFocus = this._onFocus.bind(this);\n this._onClick = this._onClick.bind(this);\n this._onUndo = this._onUndo.bind(this);\n this._onRedo = this._onRedo.bind(this);\n this.alignCursor = this.alignCursor.bind(this);\n this.alignCursorFriendly = this.alignCursorFriendly.bind(this);\n this._bindEvents();\n\n // refresh\n this.updateValue();\n this._onChange();\n }\n maskEquals(mask) {\n var _this$masked;\n return mask == null || ((_this$masked = this.masked) == null ? void 0 : _this$masked.maskEquals(mask));\n }\n\n /** Masked */\n get mask() {\n return this.masked.mask;\n }\n set mask(mask) {\n if (this.maskEquals(mask)) return;\n if (!(mask instanceof IMask.Masked) && this.masked.constructor === maskedClass(mask)) {\n // TODO \"any\" no idea\n this.masked.updateOptions({\n mask\n });\n return;\n }\n const masked = mask instanceof IMask.Masked ? mask : createMask({\n mask\n });\n masked.unmaskedValue = this.masked.unmaskedValue;\n this.masked = masked;\n }\n\n /** Raw value */\n get value() {\n return this._value;\n }\n set value(str) {\n if (this.value === str) return;\n this.masked.value = str;\n this.updateControl('auto');\n }\n\n /** Unmasked value */\n get unmaskedValue() {\n return this._unmaskedValue;\n }\n set unmaskedValue(str) {\n if (this.unmaskedValue === str) return;\n this.masked.unmaskedValue = str;\n this.updateControl('auto');\n }\n\n /** Raw input value */\n get rawInputValue() {\n return this._rawInputValue;\n }\n set rawInputValue(str) {\n if (this.rawInputValue === str) return;\n this.masked.rawInputValue = str;\n this.updateControl();\n this.alignCursor();\n }\n\n /** Typed unmasked value */\n get typedValue() {\n return this.masked.typedValue;\n }\n set typedValue(val) {\n if (this.masked.typedValueEquals(val)) return;\n this.masked.typedValue = val;\n this.updateControl('auto');\n }\n\n /** Display value */\n get displayValue() {\n return this.masked.displayValue;\n }\n\n /** Starts listening to element events */\n _bindEvents() {\n this.el.bindEvents({\n selectionChange: this._saveSelection,\n input: this._onInput,\n drop: this._onDrop,\n click: this._onClick,\n focus: this._onFocus,\n commit: this._onChange,\n undo: this._onUndo,\n redo: this._onRedo\n });\n }\n\n /** Stops listening to element events */\n _unbindEvents() {\n if (this.el) this.el.unbindEvents();\n }\n\n /** Fires custom event */\n _fireEvent(ev, e) {\n const listeners = this._listeners[ev];\n if (!listeners) return;\n listeners.forEach(l => l(e));\n }\n\n /** Current selection start */\n get selectionStart() {\n return this._cursorChanging ? this._changingCursorPos : this.el.selectionStart;\n }\n\n /** Current cursor position */\n get cursorPos() {\n return this._cursorChanging ? this._changingCursorPos : this.el.selectionEnd;\n }\n set cursorPos(pos) {\n if (!this.el || !this.el.isActive) return;\n this.el.select(pos, pos);\n this._saveSelection();\n }\n\n /** Stores current selection */\n _saveSelection( /* ev */\n ) {\n if (this.displayValue !== this.el.value) {\n console.warn('Element value was changed outside of mask. Syncronize mask using `mask.updateValue()` to work properly.'); // eslint-disable-line no-console\n }\n this._selection = {\n start: this.selectionStart,\n end: this.cursorPos\n };\n }\n\n /** Syncronizes model value from view */\n updateValue() {\n this.masked.value = this.el.value;\n this._value = this.masked.value;\n this._unmaskedValue = this.masked.unmaskedValue;\n this._rawInputValue = this.masked.rawInputValue;\n }\n\n /** Syncronizes view from model value, fires change events */\n updateControl(cursorPos) {\n const newUnmaskedValue = this.masked.unmaskedValue;\n const newValue = this.masked.value;\n const newRawInputValue = this.masked.rawInputValue;\n const newDisplayValue = this.displayValue;\n const isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue || this._rawInputValue !== newRawInputValue;\n this._unmaskedValue = newUnmaskedValue;\n this._value = newValue;\n this._rawInputValue = newRawInputValue;\n if (this.el.value !== newDisplayValue) this.el.value = newDisplayValue;\n if (cursorPos === 'auto') this.alignCursor();else if (cursorPos != null) this.cursorPos = cursorPos;\n if (isChanged) this._fireChangeEvents();\n if (!this._historyChanging && (isChanged || this.history.isEmpty)) this.history.push({\n unmaskedValue: newUnmaskedValue,\n selection: {\n start: this.selectionStart,\n end: this.cursorPos\n }\n });\n }\n\n /** Updates options with deep equal check, recreates {@link Masked} model if mask type changes */\n updateOptions(opts) {\n const {\n mask,\n ...restOpts\n } = opts; // TODO types, yes, mask is optional\n\n const updateMask = !this.maskEquals(mask);\n const updateOpts = this.masked.optionsIsChanged(restOpts);\n if (updateMask) this.mask = mask;\n if (updateOpts) this.masked.updateOptions(restOpts); // TODO\n\n if (updateMask || updateOpts) this.updateControl();\n }\n\n /** Updates cursor */\n updateCursor(cursorPos) {\n if (cursorPos == null) return;\n this.cursorPos = cursorPos;\n\n // also queue change cursor for mobile browsers\n this._delayUpdateCursor(cursorPos);\n }\n\n /** Delays cursor update to support mobile browsers */\n _delayUpdateCursor(cursorPos) {\n this._abortUpdateCursor();\n this._changingCursorPos = cursorPos;\n this._cursorChanging = setTimeout(() => {\n if (!this.el) return; // if was destroyed\n this.cursorPos = this._changingCursorPos;\n this._abortUpdateCursor();\n }, 10);\n }\n\n /** Fires custom events */\n _fireChangeEvents() {\n this._fireEvent('accept', this._inputEvent);\n if (this.masked.isComplete) this._fireEvent('complete', this._inputEvent);\n }\n\n /** Aborts delayed cursor update */\n _abortUpdateCursor() {\n if (this._cursorChanging) {\n clearTimeout(this._cursorChanging);\n delete this._cursorChanging;\n }\n }\n\n /** Aligns cursor to nearest available position */\n alignCursor() {\n this.cursorPos = this.masked.nearestInputPos(this.masked.nearestInputPos(this.cursorPos, DIRECTION.LEFT));\n }\n\n /** Aligns cursor only if selection is empty */\n alignCursorFriendly() {\n if (this.selectionStart !== this.cursorPos) return; // skip if range is selected\n this.alignCursor();\n }\n\n /** Adds listener on custom event */\n on(ev, handler) {\n if (!this._listeners[ev]) this._listeners[ev] = [];\n this._listeners[ev].push(handler);\n return this;\n }\n\n /** Removes custom event listener */\n off(ev, handler) {\n if (!this._listeners[ev]) return this;\n if (!handler) {\n delete this._listeners[ev];\n return this;\n }\n const hIndex = this._listeners[ev].indexOf(handler);\n if (hIndex >= 0) this._listeners[ev].splice(hIndex, 1);\n return this;\n }\n\n /** Handles view input event */\n _onInput(e) {\n this._inputEvent = e;\n this._abortUpdateCursor();\n const details = new ActionDetails({\n // new state\n value: this.el.value,\n cursorPos: this.cursorPos,\n // old state\n oldValue: this.displayValue,\n oldSelection: this._selection\n });\n const oldRawValue = this.masked.rawInputValue;\n const offset = this.masked.splice(details.startChangePos, details.removed.length, details.inserted, details.removeDirection, {\n input: true,\n raw: true\n }).offset;\n\n // force align in remove direction only if no input chars were removed\n // otherwise we still need to align with NONE (to get out from fixed symbols for instance)\n const removeDirection = oldRawValue === this.masked.rawInputValue ? details.removeDirection : DIRECTION.NONE;\n let cursorPos = this.masked.nearestInputPos(details.startChangePos + offset, removeDirection);\n if (removeDirection !== DIRECTION.NONE) cursorPos = this.masked.nearestInputPos(cursorPos, DIRECTION.NONE);\n this.updateControl(cursorPos);\n delete this._inputEvent;\n }\n\n /** Handles view change event and commits model value */\n _onChange() {\n if (this.displayValue !== this.el.value) this.updateValue();\n this.masked.doCommit();\n this.updateControl();\n this._saveSelection();\n }\n\n /** Handles view drop event, prevents by default */\n _onDrop(ev) {\n ev.preventDefault();\n ev.stopPropagation();\n }\n\n /** Restore last selection on focus */\n _onFocus(ev) {\n this.alignCursorFriendly();\n }\n\n /** Restore last selection on focus */\n _onClick(ev) {\n this.alignCursorFriendly();\n }\n _onUndo() {\n this._applyHistoryState(this.history.undo());\n }\n _onRedo() {\n this._applyHistoryState(this.history.redo());\n }\n _applyHistoryState(state) {\n if (!state) return;\n this._historyChanging = true;\n this.unmaskedValue = state.unmaskedValue;\n this.el.select(state.selection.start, state.selection.end);\n this._saveSelection();\n this._historyChanging = false;\n }\n\n /** Unbind view events and removes element reference */\n destroy() {\n this._unbindEvents();\n this._listeners.length = 0;\n delete this.el;\n }\n}\nIMask.InputMask = InputMask;\n\nexport { InputMask as default };\n","import IMask from './holder.js';\n\n/** Provides details of changing model value */\nclass ChangeDetails {\n /** Inserted symbols */\n\n /** Additional offset if any changes occurred before tail */\n\n /** Raw inserted is used by dynamic mask */\n\n /** Can skip chars */\n\n static normalize(prep) {\n return Array.isArray(prep) ? prep : [prep, new ChangeDetails()];\n }\n constructor(details) {\n Object.assign(this, {\n inserted: '',\n rawInserted: '',\n tailShift: 0,\n skip: false\n }, details);\n }\n\n /** Aggregate changes */\n aggregate(details) {\n this.inserted += details.inserted;\n this.rawInserted += details.rawInserted;\n this.tailShift += details.tailShift;\n this.skip = this.skip || details.skip;\n return this;\n }\n\n /** Total offset considering all changes */\n get offset() {\n return this.tailShift + this.inserted.length;\n }\n get consumed() {\n return Boolean(this.rawInserted) || this.skip;\n }\n equals(details) {\n return this.inserted === details.inserted && this.tailShift === details.tailShift && this.rawInserted === details.rawInserted && this.skip === details.skip;\n }\n}\nIMask.ChangeDetails = ChangeDetails;\n\nexport { ChangeDetails as default };\n","/** Provides details of continuous extracted tail */\nclass ContinuousTailDetails {\n /** Tail value as string */\n\n /** Tail start position */\n\n /** Start position */\n\n constructor(value, from, stop) {\n if (value === void 0) {\n value = '';\n }\n if (from === void 0) {\n from = 0;\n }\n this.value = value;\n this.from = from;\n this.stop = stop;\n }\n toString() {\n return this.value;\n }\n extend(tail) {\n this.value += String(tail);\n }\n appendTo(masked) {\n return masked.append(this.toString(), {\n tail: true\n }).aggregate(masked._appendPlaceholder());\n }\n get state() {\n return {\n value: this.value,\n from: this.from,\n stop: this.stop\n };\n }\n set state(state) {\n Object.assign(this, state);\n }\n unshift(beforePos) {\n if (!this.value.length || beforePos != null && this.from >= beforePos) return '';\n const shiftChar = this.value[0];\n this.value = this.value.slice(1);\n return shiftChar;\n }\n shift() {\n if (!this.value.length) return '';\n const shiftChar = this.value[this.value.length - 1];\n this.value = this.value.slice(0, -1);\n return shiftChar;\n }\n}\n\nexport { ContinuousTailDetails as default };\n","import ChangeDetails from '../core/change-details.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport { isString, DIRECTION, objectIncludes, forceDirection } from '../core/utils.js';\nimport IMask from '../core/holder.js';\n\n/** Append flags */\n\n/** Extract flags */\n\n// see https://github.com/microsoft/TypeScript/issues/6223\n\n/** Provides common masking stuff */\nclass Masked {\n /** */\n\n /** */\n\n /** Transforms value before mask processing */\n\n /** Transforms each char before mask processing */\n\n /** Validates if value is acceptable */\n\n /** Does additional processing at the end of editing */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n constructor(opts) {\n this._value = '';\n this._update({\n ...Masked.DEFAULTS,\n ...opts\n });\n this._initialized = true;\n }\n\n /** Sets and applies new options */\n updateOptions(opts) {\n if (!this.optionsIsChanged(opts)) return;\n this.withValueRefresh(this._update.bind(this, opts));\n }\n\n /** Sets new options */\n _update(opts) {\n Object.assign(this, opts);\n }\n\n /** Mask state */\n get state() {\n return {\n _value: this.value,\n _rawInputValue: this.rawInputValue\n };\n }\n set state(state) {\n this._value = state._value;\n }\n\n /** Resets value */\n reset() {\n this._value = '';\n }\n get value() {\n return this._value;\n }\n set value(value) {\n this.resolve(value, {\n input: true\n });\n }\n\n /** Resolve new value */\n resolve(value, flags) {\n if (flags === void 0) {\n flags = {\n input: true\n };\n }\n this.reset();\n this.append(value, flags, '');\n this.doCommit();\n }\n get unmaskedValue() {\n return this.value;\n }\n set unmaskedValue(value) {\n this.resolve(value, {});\n }\n get typedValue() {\n return this.parse ? this.parse(this.value, this) : this.unmaskedValue;\n }\n set typedValue(value) {\n if (this.format) {\n this.value = this.format(value, this);\n } else {\n this.unmaskedValue = String(value);\n }\n }\n\n /** Value that includes raw user input */\n get rawInputValue() {\n return this.extractInput(0, this.displayValue.length, {\n raw: true\n });\n }\n set rawInputValue(value) {\n this.resolve(value, {\n raw: true\n });\n }\n get displayValue() {\n return this.value;\n }\n get isComplete() {\n return true;\n }\n get isFilled() {\n return this.isComplete;\n }\n\n /** Finds nearest input position in direction */\n nearestInputPos(cursorPos, direction) {\n return cursorPos;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n return Math.min(this.displayValue.length, toPos - fromPos);\n }\n\n /** Extracts value in range considering flags */\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n return this.displayValue.slice(fromPos, toPos);\n }\n\n /** Extracts tail in range */\n extractTail(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n return new ContinuousTailDetails(this.extractInput(fromPos, toPos), fromPos);\n }\n\n /** Appends tail */\n appendTail(tail) {\n if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\n return tail.appendTo(this);\n }\n\n /** Appends char */\n _appendCharRaw(ch, flags) {\n if (!ch) return new ChangeDetails();\n this._value += ch;\n return new ChangeDetails({\n inserted: ch,\n rawInserted: ch\n });\n }\n\n /** Appends char */\n _appendChar(ch, flags, checkTail) {\n if (flags === void 0) {\n flags = {};\n }\n const consistentState = this.state;\n let details;\n [ch, details] = this.doPrepareChar(ch, flags);\n if (ch) {\n details = details.aggregate(this._appendCharRaw(ch, flags));\n\n // TODO handle `skip`?\n\n // try `autofix` lookahead\n if (!details.rawInserted && this.autofix === 'pad') {\n const noFixState = this.state;\n this.state = consistentState;\n let fixDetails = this.pad(flags);\n const chDetails = this._appendCharRaw(ch, flags);\n fixDetails = fixDetails.aggregate(chDetails);\n\n // if fix was applied or\n // if details are equal use skip restoring state optimization\n if (chDetails.rawInserted || fixDetails.equals(details)) {\n details = fixDetails;\n } else {\n this.state = noFixState;\n }\n }\n }\n if (details.inserted) {\n let consistentTail;\n let appended = this.doValidate(flags) !== false;\n if (appended && checkTail != null) {\n // validation ok, check tail\n const beforeTailState = this.state;\n if (this.overwrite === true) {\n consistentTail = checkTail.state;\n for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.unshift(this.displayValue.length - details.tailShift);\n }\n }\n let tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\n\n // not ok, try shift\n if (!(appended && tailDetails.inserted) && this.overwrite === 'shift') {\n this.state = beforeTailState;\n consistentTail = checkTail.state;\n for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.shift();\n }\n tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\n }\n\n // if ok, rollback state after tail\n if (appended && tailDetails.inserted) this.state = beforeTailState;\n }\n\n // revert all if something went wrong\n if (!appended) {\n details = new ChangeDetails();\n this.state = consistentState;\n if (checkTail && consistentTail) checkTail.state = consistentTail;\n }\n }\n return details;\n }\n\n /** Appends optional placeholder at the end */\n _appendPlaceholder() {\n return new ChangeDetails();\n }\n\n /** Appends optional eager placeholder at the end */\n _appendEager() {\n return new ChangeDetails();\n }\n\n /** Appends symbols considering flags */\n append(str, flags, tail) {\n if (!isString(str)) throw new Error('value should be string');\n const checkTail = isString(tail) ? new ContinuousTailDetails(String(tail)) : tail;\n if (flags != null && flags.tail) flags._beforeTailState = this.state;\n let details;\n [str, details] = this.doPrepare(str, flags);\n for (let ci = 0; ci < str.length; ++ci) {\n const d = this._appendChar(str[ci], flags, checkTail);\n if (!d.rawInserted && !this.doSkipInvalid(str[ci], flags, checkTail)) break;\n details.aggregate(d);\n }\n if ((this.eager === true || this.eager === 'append') && flags != null && flags.input && str) {\n details.aggregate(this._appendEager());\n }\n\n // append tail but aggregate only tailShift\n if (checkTail != null) {\n details.tailShift += this.appendTail(checkTail).tailShift;\n // TODO it's a good idea to clear state after appending ends\n // but it causes bugs when one append calls another (when dynamic dispatch set rawInputValue)\n // this._resetBeforeTailState();\n }\n return details;\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n this._value = this.displayValue.slice(0, fromPos) + this.displayValue.slice(toPos);\n return new ChangeDetails();\n }\n\n /** Calls function and reapplies current value */\n withValueRefresh(fn) {\n if (this._refreshing || !this._initialized) return fn();\n this._refreshing = true;\n const rawInput = this.rawInputValue;\n const value = this.value;\n const ret = fn();\n this.rawInputValue = rawInput;\n // append lost trailing chars at the end\n if (this.value && this.value !== value && value.indexOf(this.value) === 0) {\n this.append(value.slice(this.displayValue.length), {}, '');\n this.doCommit();\n }\n delete this._refreshing;\n return ret;\n }\n runIsolated(fn) {\n if (this._isolated || !this._initialized) return fn(this);\n this._isolated = true;\n const state = this.state;\n const ret = fn(this);\n this.state = state;\n delete this._isolated;\n return ret;\n }\n doSkipInvalid(ch, flags, checkTail) {\n return Boolean(this.skipInvalid);\n }\n\n /** Prepares string before mask processing */\n doPrepare(str, flags) {\n if (flags === void 0) {\n flags = {};\n }\n return ChangeDetails.normalize(this.prepare ? this.prepare(str, this, flags) : str);\n }\n\n /** Prepares each char before mask processing */\n doPrepareChar(str, flags) {\n if (flags === void 0) {\n flags = {};\n }\n return ChangeDetails.normalize(this.prepareChar ? this.prepareChar(str, this, flags) : str);\n }\n\n /** Validates if value is acceptable */\n doValidate(flags) {\n return (!this.validate || this.validate(this.value, this, flags)) && (!this.parent || this.parent.doValidate(flags));\n }\n\n /** Does additional processing at the end of editing */\n doCommit() {\n if (this.commit) this.commit(this.value, this);\n }\n splice(start, deleteCount, inserted, removeDirection, flags) {\n if (inserted === void 0) {\n inserted = '';\n }\n if (removeDirection === void 0) {\n removeDirection = DIRECTION.NONE;\n }\n if (flags === void 0) {\n flags = {\n input: true\n };\n }\n const tailPos = start + deleteCount;\n const tail = this.extractTail(tailPos);\n const eagerRemove = this.eager === true || this.eager === 'remove';\n let oldRawValue;\n if (eagerRemove) {\n removeDirection = forceDirection(removeDirection);\n oldRawValue = this.extractInput(0, tailPos, {\n raw: true\n });\n }\n let startChangePos = start;\n const details = new ChangeDetails();\n\n // if it is just deletion without insertion\n if (removeDirection !== DIRECTION.NONE) {\n startChangePos = this.nearestInputPos(start, deleteCount > 1 && start !== 0 && !eagerRemove ? DIRECTION.NONE : removeDirection);\n\n // adjust tailShift if start was aligned\n details.tailShift = startChangePos - start;\n }\n details.aggregate(this.remove(startChangePos));\n if (eagerRemove && removeDirection !== DIRECTION.NONE && oldRawValue === this.rawInputValue) {\n if (removeDirection === DIRECTION.FORCE_LEFT) {\n let valLength;\n while (oldRawValue === this.rawInputValue && (valLength = this.displayValue.length)) {\n details.aggregate(new ChangeDetails({\n tailShift: -1\n })).aggregate(this.remove(valLength - 1));\n }\n } else if (removeDirection === DIRECTION.FORCE_RIGHT) {\n tail.unshift();\n }\n }\n return details.aggregate(this.append(inserted, flags, tail));\n }\n maskEquals(mask) {\n return this.mask === mask;\n }\n optionsIsChanged(opts) {\n return !objectIncludes(this, opts);\n }\n typedValueEquals(value) {\n const tval = this.typedValue;\n return value === tval || Masked.EMPTY_VALUES.includes(value) && Masked.EMPTY_VALUES.includes(tval) || (this.format ? this.format(value, this) === this.format(this.typedValue, this) : false);\n }\n pad(flags) {\n return new ChangeDetails();\n }\n}\nMasked.DEFAULTS = {\n skipInvalid: true\n};\nMasked.EMPTY_VALUES = [undefined, null, ''];\nIMask.Masked = Masked;\n\nexport { Masked as default };\n","import ChangeDetails from '../../core/change-details.js';\nimport { isString } from '../../core/utils.js';\nimport ContinuousTailDetails from '../../core/continuous-tail-details.js';\nimport IMask from '../../core/holder.js';\n\nclass ChunksTailDetails {\n /** */\n\n constructor(chunks, from) {\n if (chunks === void 0) {\n chunks = [];\n }\n if (from === void 0) {\n from = 0;\n }\n this.chunks = chunks;\n this.from = from;\n }\n toString() {\n return this.chunks.map(String).join('');\n }\n extend(tailChunk) {\n if (!String(tailChunk)) return;\n tailChunk = isString(tailChunk) ? new ContinuousTailDetails(String(tailChunk)) : tailChunk;\n const lastChunk = this.chunks[this.chunks.length - 1];\n const extendLast = lastChunk && (\n // if stops are same or tail has no stop\n lastChunk.stop === tailChunk.stop || tailChunk.stop == null) &&\n // if tail chunk goes just after last chunk\n tailChunk.from === lastChunk.from + lastChunk.toString().length;\n if (tailChunk instanceof ContinuousTailDetails) {\n // check the ability to extend previous chunk\n if (extendLast) {\n // extend previous chunk\n lastChunk.extend(tailChunk.toString());\n } else {\n // append new chunk\n this.chunks.push(tailChunk);\n }\n } else if (tailChunk instanceof ChunksTailDetails) {\n if (tailChunk.stop == null) {\n // unwrap floating chunks to parent, keeping `from` pos\n let firstTailChunk;\n while (tailChunk.chunks.length && tailChunk.chunks[0].stop == null) {\n firstTailChunk = tailChunk.chunks.shift(); // not possible to be `undefined` because length was checked above\n firstTailChunk.from += tailChunk.from;\n this.extend(firstTailChunk);\n }\n }\n\n // if tail chunk still has value\n if (tailChunk.toString()) {\n // if chunks contains stops, then popup stop to container\n tailChunk.stop = tailChunk.blockIndex;\n this.chunks.push(tailChunk);\n }\n }\n }\n appendTo(masked) {\n if (!(masked instanceof IMask.MaskedPattern)) {\n const tail = new ContinuousTailDetails(this.toString());\n return tail.appendTo(masked);\n }\n const details = new ChangeDetails();\n for (let ci = 0; ci < this.chunks.length; ++ci) {\n const chunk = this.chunks[ci];\n const lastBlockIter = masked._mapPosToBlock(masked.displayValue.length);\n const stop = chunk.stop;\n let chunkBlock;\n if (stop != null && (\n // if block not found or stop is behind lastBlock\n !lastBlockIter || lastBlockIter.index <= stop)) {\n if (chunk instanceof ChunksTailDetails ||\n // for continuous block also check if stop is exist\n masked._stops.indexOf(stop) >= 0) {\n details.aggregate(masked._appendPlaceholder(stop));\n }\n chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n }\n if (chunkBlock) {\n const tailDetails = chunkBlock.appendTail(chunk);\n details.aggregate(tailDetails);\n\n // get not inserted chars\n const remainChars = chunk.toString().slice(tailDetails.rawInserted.length);\n if (remainChars) details.aggregate(masked.append(remainChars, {\n tail: true\n }));\n } else {\n details.aggregate(masked.append(chunk.toString(), {\n tail: true\n }));\n }\n }\n return details;\n }\n get state() {\n return {\n chunks: this.chunks.map(c => c.state),\n from: this.from,\n stop: this.stop,\n blockIndex: this.blockIndex\n };\n }\n set state(state) {\n const {\n chunks,\n ...props\n } = state;\n Object.assign(this, props);\n this.chunks = chunks.map(cstate => {\n const chunk = \"chunks\" in cstate ? new ChunksTailDetails() : new ContinuousTailDetails();\n chunk.state = cstate;\n return chunk;\n });\n }\n unshift(beforePos) {\n if (!this.chunks.length || beforePos != null && this.from >= beforePos) return '';\n const chunkShiftPos = beforePos != null ? beforePos - this.from : beforePos;\n let ci = 0;\n while (ci < this.chunks.length) {\n const chunk = this.chunks[ci];\n const shiftChar = chunk.unshift(chunkShiftPos);\n if (chunk.toString()) {\n // chunk still contains value\n // but not shifted - means no more available chars to shift\n if (!shiftChar) break;\n ++ci;\n } else {\n // clean if chunk has no value\n this.chunks.splice(ci, 1);\n }\n if (shiftChar) return shiftChar;\n }\n return '';\n }\n shift() {\n if (!this.chunks.length) return '';\n let ci = this.chunks.length - 1;\n while (0 <= ci) {\n const chunk = this.chunks[ci];\n const shiftChar = chunk.shift();\n if (chunk.toString()) {\n // chunk still contains value\n // but not shifted - means no more available chars to shift\n if (!shiftChar) break;\n --ci;\n } else {\n // clean if chunk has no value\n this.chunks.splice(ci, 1);\n }\n if (shiftChar) return shiftChar;\n }\n return '';\n }\n}\n\nexport { ChunksTailDetails as default };\n","import { DIRECTION } from '../../core/utils.js';\n\nclass PatternCursor {\n constructor(masked, pos) {\n this.masked = masked;\n this._log = [];\n const {\n offset,\n index\n } = masked._mapPosToBlock(pos) || (pos < 0 ?\n // first\n {\n index: 0,\n offset: 0\n } :\n // last\n {\n index: this.masked._blocks.length,\n offset: 0\n });\n this.offset = offset;\n this.index = index;\n this.ok = false;\n }\n get block() {\n return this.masked._blocks[this.index];\n }\n get pos() {\n return this.masked._blockStartPos(this.index) + this.offset;\n }\n get state() {\n return {\n index: this.index,\n offset: this.offset,\n ok: this.ok\n };\n }\n set state(s) {\n Object.assign(this, s);\n }\n pushState() {\n this._log.push(this.state);\n }\n popState() {\n const s = this._log.pop();\n if (s) this.state = s;\n return s;\n }\n bindBlock() {\n if (this.block) return;\n if (this.index < 0) {\n this.index = 0;\n this.offset = 0;\n }\n if (this.index >= this.masked._blocks.length) {\n this.index = this.masked._blocks.length - 1;\n this.offset = this.block.displayValue.length; // TODO this is stupid type error, `block` depends on index that was changed above\n }\n }\n _pushLeft(fn) {\n this.pushState();\n for (this.bindBlock(); 0 <= this.index; --this.index, this.offset = ((_this$block = this.block) == null ? void 0 : _this$block.displayValue.length) || 0) {\n var _this$block;\n if (fn()) return this.ok = true;\n }\n return this.ok = false;\n }\n _pushRight(fn) {\n this.pushState();\n for (this.bindBlock(); this.index < this.masked._blocks.length; ++this.index, this.offset = 0) {\n if (fn()) return this.ok = true;\n }\n return this.ok = false;\n }\n pushLeftBeforeFilled() {\n return this._pushLeft(() => {\n if (this.block.isFixed || !this.block.value) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.FORCE_LEFT);\n if (this.offset !== 0) return true;\n });\n }\n pushLeftBeforeInput() {\n // cases:\n // filled input: 00|\n // optional empty input: 00[]|\n // nested block: XX<[]>|\n return this._pushLeft(() => {\n if (this.block.isFixed) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.LEFT);\n return true;\n });\n }\n pushLeftBeforeRequired() {\n return this._pushLeft(() => {\n if (this.block.isFixed || this.block.isOptional && !this.block.value) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.LEFT);\n return true;\n });\n }\n pushRightBeforeFilled() {\n return this._pushRight(() => {\n if (this.block.isFixed || !this.block.value) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.FORCE_RIGHT);\n if (this.offset !== this.block.value.length) return true;\n });\n }\n pushRightBeforeInput() {\n return this._pushRight(() => {\n if (this.block.isFixed) return;\n\n // const o = this.offset;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.NONE);\n // HACK cases like (STILL DOES NOT WORK FOR NESTED)\n // aa|X\n // aa<X|[]>X_ - this will not work\n // if (o && o === this.offset && this.block instanceof PatternInputDefinition) continue;\n return true;\n });\n }\n pushRightBeforeRequired() {\n return this._pushRight(() => {\n if (this.block.isFixed || this.block.isOptional && !this.block.value) return;\n\n // TODO check |[*]XX_\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.NONE);\n return true;\n });\n }\n}\n\nexport { PatternCursor as default };\n","import ChangeDetails from '../../core/change-details.js';\nimport { DIRECTION, isString } from '../../core/utils.js';\nimport ContinuousTailDetails from '../../core/continuous-tail-details.js';\nimport '../../core/holder.js';\n\nclass PatternFixedDefinition {\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n constructor(opts) {\n Object.assign(this, opts);\n this._value = '';\n this.isFixed = true;\n }\n get value() {\n return this._value;\n }\n get unmaskedValue() {\n return this.isUnmasking ? this.value : '';\n }\n get rawInputValue() {\n return this._isRawInput ? this.value : '';\n }\n get displayValue() {\n return this.value;\n }\n reset() {\n this._isRawInput = false;\n this._value = '';\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this._value.length;\n }\n this._value = this._value.slice(0, fromPos) + this._value.slice(toPos);\n if (!this._value) this._isRawInput = false;\n return new ChangeDetails();\n }\n nearestInputPos(cursorPos, direction) {\n if (direction === void 0) {\n direction = DIRECTION.NONE;\n }\n const minPos = 0;\n const maxPos = this._value.length;\n switch (direction) {\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n return minPos;\n case DIRECTION.NONE:\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n default:\n return maxPos;\n }\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this._value.length;\n }\n return this._isRawInput ? toPos - fromPos : 0;\n }\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this._value.length;\n }\n if (flags === void 0) {\n flags = {};\n }\n return flags.raw && this._isRawInput && this._value.slice(fromPos, toPos) || '';\n }\n get isComplete() {\n return true;\n }\n get isFilled() {\n return Boolean(this._value);\n }\n _appendChar(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (this.isFilled) return new ChangeDetails();\n const appendEager = this.eager === true || this.eager === 'append';\n const appended = this.char === ch;\n const isResolved = appended && (this.isUnmasking || flags.input || flags.raw) && (!flags.raw || !appendEager) && !flags.tail;\n const details = new ChangeDetails({\n inserted: this.char,\n rawInserted: isResolved ? this.char : ''\n });\n this._value = this.char;\n this._isRawInput = isResolved && (flags.raw || flags.input);\n return details;\n }\n _appendEager() {\n return this._appendChar(this.char, {\n tail: true\n });\n }\n _appendPlaceholder() {\n const details = new ChangeDetails();\n if (this.isFilled) return details;\n this._value = details.inserted = this.char;\n return details;\n }\n extractTail() {\n return new ContinuousTailDetails('');\n }\n appendTail(tail) {\n if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\n return tail.appendTo(this);\n }\n append(str, flags, tail) {\n const details = this._appendChar(str[0], flags);\n if (tail != null) {\n details.tailShift += this.appendTail(tail).tailShift;\n }\n return details;\n }\n doCommit() {}\n get state() {\n return {\n _value: this._value,\n _rawInputValue: this.rawInputValue\n };\n }\n set state(state) {\n this._value = state._value;\n this._isRawInput = Boolean(state._rawInputValue);\n }\n pad(flags) {\n return this._appendPlaceholder();\n }\n}\n\nexport { PatternFixedDefinition as default };\n","import createMask from '../factory.js';\nimport ChangeDetails from '../../core/change-details.js';\nimport { DIRECTION } from '../../core/utils.js';\nimport '../../core/holder.js';\n\nclass PatternInputDefinition {\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n constructor(opts) {\n const {\n parent,\n isOptional,\n placeholderChar,\n displayChar,\n lazy,\n eager,\n ...maskOpts\n } = opts;\n this.masked = createMask(maskOpts);\n Object.assign(this, {\n parent,\n isOptional,\n placeholderChar,\n displayChar,\n lazy,\n eager\n });\n }\n reset() {\n this.isFilled = false;\n this.masked.reset();\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.value.length;\n }\n if (fromPos === 0 && toPos >= 1) {\n this.isFilled = false;\n return this.masked.remove(fromPos, toPos);\n }\n return new ChangeDetails();\n }\n get value() {\n return this.masked.value || (this.isFilled && !this.isOptional ? this.placeholderChar : '');\n }\n get unmaskedValue() {\n return this.masked.unmaskedValue;\n }\n get rawInputValue() {\n return this.masked.rawInputValue;\n }\n get displayValue() {\n return this.masked.value && this.displayChar || this.value;\n }\n get isComplete() {\n return Boolean(this.masked.value) || this.isOptional;\n }\n _appendChar(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (this.isFilled) return new ChangeDetails();\n const state = this.masked.state;\n // simulate input\n let details = this.masked._appendChar(ch, this.currentMaskFlags(flags));\n if (details.inserted && this.doValidate(flags) === false) {\n details = new ChangeDetails();\n this.masked.state = state;\n }\n if (!details.inserted && !this.isOptional && !this.lazy && !flags.input) {\n details.inserted = this.placeholderChar;\n }\n details.skip = !details.inserted && !this.isOptional;\n this.isFilled = Boolean(details.inserted);\n return details;\n }\n append(str, flags, tail) {\n // TODO probably should be done via _appendChar\n return this.masked.append(str, this.currentMaskFlags(flags), tail);\n }\n _appendPlaceholder() {\n if (this.isFilled || this.isOptional) return new ChangeDetails();\n this.isFilled = true;\n return new ChangeDetails({\n inserted: this.placeholderChar\n });\n }\n _appendEager() {\n return new ChangeDetails();\n }\n extractTail(fromPos, toPos) {\n return this.masked.extractTail(fromPos, toPos);\n }\n appendTail(tail) {\n return this.masked.appendTail(tail);\n }\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.value.length;\n }\n return this.masked.extractInput(fromPos, toPos, flags);\n }\n nearestInputPos(cursorPos, direction) {\n if (direction === void 0) {\n direction = DIRECTION.NONE;\n }\n const minPos = 0;\n const maxPos = this.value.length;\n const boundPos = Math.min(Math.max(cursorPos, minPos), maxPos);\n switch (direction) {\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n return this.isComplete ? boundPos : minPos;\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n return this.isComplete ? boundPos : maxPos;\n case DIRECTION.NONE:\n default:\n return boundPos;\n }\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.value.length;\n }\n return this.value.slice(fromPos, toPos).length;\n }\n doValidate(flags) {\n return this.masked.doValidate(this.currentMaskFlags(flags)) && (!this.parent || this.parent.doValidate(this.currentMaskFlags(flags)));\n }\n doCommit() {\n this.masked.doCommit();\n }\n get state() {\n return {\n _value: this.value,\n _rawInputValue: this.rawInputValue,\n masked: this.masked.state,\n isFilled: this.isFilled\n };\n }\n set state(state) {\n this.masked.state = state.masked;\n this.isFilled = state.isFilled;\n }\n currentMaskFlags(flags) {\n var _flags$_beforeTailSta;\n return {\n ...flags,\n _beforeTailState: (flags == null || (_flags$_beforeTailSta = flags._beforeTailState) == null ? void 0 : _flags$_beforeTailSta.masked) || (flags == null ? void 0 : flags._beforeTailState)\n };\n }\n pad(flags) {\n return new ChangeDetails();\n }\n}\nPatternInputDefinition.DEFAULT_DEFINITIONS = {\n '0': /\\d/,\n 'a': /[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/,\n // http://stackoverflow.com/a/22075070\n '*': /./\n};\n\nexport { PatternInputDefinition as default };\n","import Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/change-details.js';\nimport '../core/continuous-tail-details.js';\nimport '../core/utils.js';\n\n/** Masking by RegExp */\nclass MaskedRegExp extends Masked {\n /** */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n /** */\n\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n const mask = opts.mask;\n if (mask) opts.validate = value => value.search(mask) >= 0;\n super._update(opts);\n }\n}\nIMask.MaskedRegExp = MaskedRegExp;\n\nexport { MaskedRegExp as default };\n","import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport { DIRECTION } from '../core/utils.js';\nimport Masked from './base.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport ChunksTailDetails from './pattern/chunk-tail-details.js';\nimport PatternCursor from './pattern/cursor.js';\nimport PatternFixedDefinition from './pattern/fixed-definition.js';\nimport PatternInputDefinition from './pattern/input-definition.js';\nimport './regexp.js';\nimport '../core/continuous-tail-details.js';\n\n/** Pattern mask */\nclass MaskedPattern extends Masked {\n /** */\n\n /** */\n\n /** Single char for empty input */\n\n /** Single char for filled input */\n\n /** Show placeholder only when needed */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n /** */\n\n constructor(opts) {\n super({\n ...MaskedPattern.DEFAULTS,\n ...opts,\n definitions: Object.assign({}, PatternInputDefinition.DEFAULT_DEFINITIONS, opts == null ? void 0 : opts.definitions)\n });\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n opts.definitions = Object.assign({}, this.definitions, opts.definitions);\n super._update(opts);\n this._rebuildMask();\n }\n _rebuildMask() {\n const defs = this.definitions;\n this._blocks = [];\n this.exposeBlock = undefined;\n this._stops = [];\n this._maskedBlocks = {};\n const pattern = this.mask;\n if (!pattern || !defs) return;\n let unmaskingBlock = false;\n let optionalBlock = false;\n for (let i = 0; i < pattern.length; ++i) {\n if (this.blocks) {\n const p = pattern.slice(i);\n const bNames = Object.keys(this.blocks).filter(bName => p.indexOf(bName) === 0);\n // order by key length\n bNames.sort((a, b) => b.length - a.length);\n // use block name with max length\n const bName = bNames[0];\n if (bName) {\n const {\n expose,\n repeat,\n ...bOpts\n } = normalizeOpts(this.blocks[bName]); // TODO type Opts<Arg & Extra>\n const blockOpts = {\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n overwrite: this.overwrite,\n autofix: this.autofix,\n ...bOpts,\n repeat,\n parent: this\n };\n const maskedBlock = repeat != null ? new IMask.RepeatBlock(blockOpts /* TODO */) : createMask(blockOpts);\n if (maskedBlock) {\n this._blocks.push(maskedBlock);\n if (expose) this.exposeBlock = maskedBlock;\n\n // store block index\n if (!this._maskedBlocks[bName]) this._maskedBlocks[bName] = [];\n this._maskedBlocks[bName].push(this._blocks.length - 1);\n }\n i += bName.length - 1;\n continue;\n }\n }\n let char = pattern[i];\n let isInput = (char in defs);\n if (char === MaskedPattern.STOP_CHAR) {\n this._stops.push(this._blocks.length);\n continue;\n }\n if (char === '{' || char === '}') {\n unmaskingBlock = !unmaskingBlock;\n continue;\n }\n if (char === '[' || char === ']') {\n optionalBlock = !optionalBlock;\n continue;\n }\n if (char === MaskedPattern.ESCAPE_CHAR) {\n ++i;\n char = pattern[i];\n if (!char) break;\n isInput = false;\n }\n const def = isInput ? new PatternInputDefinition({\n isOptional: optionalBlock,\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n ...normalizeOpts(defs[char]),\n parent: this\n }) : new PatternFixedDefinition({\n char,\n eager: this.eager,\n isUnmasking: unmaskingBlock\n });\n this._blocks.push(def);\n }\n }\n get state() {\n return {\n ...super.state,\n _blocks: this._blocks.map(b => b.state)\n };\n }\n set state(state) {\n if (!state) {\n this.reset();\n return;\n }\n const {\n _blocks,\n ...maskedState\n } = state;\n this._blocks.forEach((b, bi) => b.state = _blocks[bi]);\n super.state = maskedState;\n }\n reset() {\n super.reset();\n this._blocks.forEach(b => b.reset());\n }\n get isComplete() {\n return this.exposeBlock ? this.exposeBlock.isComplete : this._blocks.every(b => b.isComplete);\n }\n get isFilled() {\n return this._blocks.every(b => b.isFilled);\n }\n get isFixed() {\n return this._blocks.every(b => b.isFixed);\n }\n get isOptional() {\n return this._blocks.every(b => b.isOptional);\n }\n doCommit() {\n this._blocks.forEach(b => b.doCommit());\n super.doCommit();\n }\n get unmaskedValue() {\n return this.exposeBlock ? this.exposeBlock.unmaskedValue : this._blocks.reduce((str, b) => str += b.unmaskedValue, '');\n }\n set unmaskedValue(unmaskedValue) {\n if (this.exposeBlock) {\n const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length);\n this.exposeBlock.unmaskedValue = unmaskedValue;\n this.appendTail(tail);\n this.doCommit();\n } else super.unmaskedValue = unmaskedValue;\n }\n get value() {\n return this.exposeBlock ? this.exposeBlock.value :\n // TODO return _value when not in change?\n this._blocks.reduce((str, b) => str += b.value, '');\n }\n set value(value) {\n if (this.exposeBlock) {\n const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length);\n this.exposeBlock.value = value;\n this.appendTail(tail);\n this.doCommit();\n } else super.value = value;\n }\n get typedValue() {\n return this.exposeBlock ? this.exposeBlock.typedValue : super.typedValue;\n }\n set typedValue(value) {\n if (this.exposeBlock) {\n const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length);\n this.exposeBlock.typedValue = value;\n this.appendTail(tail);\n this.doCommit();\n } else super.typedValue = value;\n }\n get displayValue() {\n return this._blocks.reduce((str, b) => str += b.displayValue, '');\n }\n appendTail(tail) {\n return super.appendTail(tail).aggregate(this._appendPlaceholder());\n }\n _appendEager() {\n var _this$_mapPosToBlock;\n const details = new ChangeDetails();\n let startBlockIndex = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index;\n if (startBlockIndex == null) return details;\n\n // TODO test if it works for nested pattern masks\n if (this._blocks[startBlockIndex].isFilled) ++startBlockIndex;\n for (let bi = startBlockIndex; bi < this._blocks.length; ++bi) {\n const d = this._blocks[bi]._appendEager();\n if (!d.inserted) break;\n details.aggregate(d);\n }\n return details;\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const blockIter = this._mapPosToBlock(this.displayValue.length);\n const details = new ChangeDetails();\n if (!blockIter) return details;\n for (let bi = blockIter.index, block; block = this._blocks[bi]; ++bi) {\n var _flags$_beforeTailSta;\n const blockDetails = block._appendChar(ch, {\n ...flags,\n _beforeTailState: (_flags$_beforeTailSta = flags._beforeTailState) == null || (_flags$_beforeTailSta = _flags$_beforeTailSta._blocks) == null ? void 0 : _flags$_beforeTailSta[bi]\n });\n details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\n }\n return details;\n }\n extractTail(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n const chunkTail = new ChunksTailDetails();\n if (fromPos === toPos) return chunkTail;\n this._forEachBlocksInRange(fromPos, toPos, (b, bi, bFromPos, bToPos) => {\n const blockChunk = b.extractTail(bFromPos, bToPos);\n blockChunk.stop = this._findStopBefore(bi);\n blockChunk.from = this._blockStartPos(bi);\n if (blockChunk instanceof ChunksTailDetails) blockChunk.blockIndex = bi;\n chunkTail.extend(blockChunk);\n });\n return chunkTail;\n }\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n if (flags === void 0) {\n flags = {};\n }\n if (fromPos === toPos) return '';\n let input = '';\n this._forEachBlocksInRange(fromPos, toPos, (b, _, fromPos, toPos) => {\n input += b.extractInput(fromPos, toPos, flags);\n });\n return input;\n }\n _findStopBefore(blockIndex) {\n let stopBefore;\n for (let si = 0; si < this._stops.length; ++si) {\n const stop = this._stops[si];\n if (stop <= blockIndex) stopBefore = stop;else break;\n }\n return stopBefore;\n }\n\n /** Appends placeholder depending on laziness */\n _appendPlaceholder(toBlockIndex) {\n const details = new ChangeDetails();\n if (this.lazy && toBlockIndex == null) return details;\n const startBlockIter = this._mapPosToBlock(this.displayValue.length);\n if (!startBlockIter) return details;\n const startBlockIndex = startBlockIter.index;\n const endBlockIndex = toBlockIndex != null ? toBlockIndex : this._blocks.length;\n this._blocks.slice(startBlockIndex, endBlockIndex).forEach(b => {\n if (!b.lazy || toBlockIndex != null) {\n var _blocks2;\n details.aggregate(b._appendPlaceholder((_blocks2 = b._blocks) == null ? void 0 : _blocks2.length));\n }\n });\n return details;\n }\n\n /** Finds block in pos */\n _mapPosToBlock(pos) {\n let accVal = '';\n for (let bi = 0; bi < this._blocks.length; ++bi) {\n const block = this._blocks[bi];\n const blockStartPos = accVal.length;\n accVal += block.displayValue;\n if (pos <= accVal.length) {\n return {\n index: bi,\n offset: pos - blockStartPos\n };\n }\n }\n }\n _blockStartPos(blockIndex) {\n return this._blocks.slice(0, blockIndex).reduce((pos, b) => pos += b.displayValue.length, 0);\n }\n _forEachBlocksInRange(fromPos, toPos, fn) {\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n const fromBlockIter = this._mapPosToBlock(fromPos);\n if (fromBlockIter) {\n const toBlockIter = this._mapPosToBlock(toPos);\n // process first block\n const isSameBlock = toBlockIter && fromBlockIter.index === toBlockIter.index;\n const fromBlockStartPos = fromBlockIter.offset;\n const fromBlockEndPos = toBlockIter && isSameBlock ? toBlockIter.offset : this._blocks[fromBlockIter.index].displayValue.length;\n fn(this._blocks[fromBlockIter.index], fromBlockIter.index, fromBlockStartPos, fromBlockEndPos);\n if (toBlockIter && !isSameBlock) {\n // process intermediate blocks\n for (let bi = fromBlockIter.index + 1; bi < toBlockIter.index; ++bi) {\n fn(this._blocks[bi], bi, 0, this._blocks[bi].displayValue.length);\n }\n\n // process last block\n fn(this._blocks[toBlockIter.index], toBlockIter.index, 0, toBlockIter.offset);\n }\n }\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n const removeDetails = super.remove(fromPos, toPos);\n this._forEachBlocksInRange(fromPos, toPos, (b, _, bFromPos, bToPos) => {\n removeDetails.aggregate(b.remove(bFromPos, bToPos));\n });\n return removeDetails;\n }\n nearestInputPos(cursorPos, direction) {\n if (direction === void 0) {\n direction = DIRECTION.NONE;\n }\n if (!this._blocks.length) return 0;\n const cursor = new PatternCursor(this, cursorPos);\n if (direction === DIRECTION.NONE) {\n // -------------------------------------------------\n // NONE should only go out from fixed to the right!\n // -------------------------------------------------\n if (cursor.pushRightBeforeInput()) return cursor.pos;\n cursor.popState();\n if (cursor.pushLeftBeforeInput()) return cursor.pos;\n return this.displayValue.length;\n }\n\n // FORCE is only about a|* otherwise is 0\n if (direction === DIRECTION.LEFT || direction === DIRECTION.FORCE_LEFT) {\n // try to break fast when *|a\n if (direction === DIRECTION.LEFT) {\n cursor.pushRightBeforeFilled();\n if (cursor.ok && cursor.pos === cursorPos) return cursorPos;\n cursor.popState();\n }\n\n // forward flow\n cursor.pushLeftBeforeInput();\n cursor.pushLeftBeforeRequired();\n cursor.pushLeftBeforeFilled();\n\n // backward flow\n if (direction === DIRECTION.LEFT) {\n cursor.pushRightBeforeInput();\n cursor.pushRightBeforeRequired();\n if (cursor.ok && cursor.pos <= cursorPos) return cursor.pos;\n cursor.popState();\n if (cursor.ok && cursor.pos <= cursorPos) return cursor.pos;\n cursor.popState();\n }\n if (cursor.ok) return cursor.pos;\n if (direction === DIRECTION.FORCE_LEFT) return 0;\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n return 0;\n }\n if (direction === DIRECTION.RIGHT || direction === DIRECTION.FORCE_RIGHT) {\n // forward flow\n cursor.pushRightBeforeInput();\n cursor.pushRightBeforeRequired();\n if (cursor.pushRightBeforeFilled()) return cursor.pos;\n if (direction === DIRECTION.FORCE_RIGHT) return this.displayValue.length;\n\n // backward flow\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n return this.nearestInputPos(cursorPos, DIRECTION.LEFT);\n }\n return cursorPos;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n let total = 0;\n this._forEachBlocksInRange(fromPos, toPos, (b, _, bFromPos, bToPos) => {\n total += b.totalInputPositions(bFromPos, bToPos);\n });\n return total;\n }\n\n /** Get block by name */\n maskedBlock(name) {\n return this.maskedBlocks(name)[0];\n }\n\n /** Get all blocks by name */\n maskedBlocks(name) {\n const indices = this._maskedBlocks[name];\n if (!indices) return [];\n return indices.map(gi => this._blocks[gi]);\n }\n pad(flags) {\n const details = new ChangeDetails();\n this._forEachBlocksInRange(0, this.displayValue.length, b => details.aggregate(b.pad(flags)));\n return details;\n }\n}\nMaskedPattern.DEFAULTS = {\n ...Masked.DEFAULTS,\n lazy: true,\n placeholderChar: '_'\n};\nMaskedPattern.STOP_CHAR = '`';\nMaskedPattern.ESCAPE_CHAR = '\\\\';\nMaskedPattern.InputDefinition = PatternInputDefinition;\nMaskedPattern.FixedDefinition = PatternFixedDefinition;\nIMask.MaskedPattern = MaskedPattern;\n\nexport { MaskedPattern as default };\n","import type { InputMask } from 'imask';\nimport imask from 'imask/holder';\n\nimport 'imask/masked/pattern';\n\nexport function bic(element: HTMLInputElement): InputMask<{}> {\n return imask(element, {\n definitions: {\n '#': /[A-Z0-9]/\n },\n mask: 'aaaaaa##[000]',\n prepareChar: (str: string) => str.toUpperCase()\n });\n}\n\nexport function iban(element: HTMLInputElement): InputMask<{}> {\n return imask(element, {\n definitions: {\n '#': /[A-Z0-9]/\n },\n mask: 'aa00 #### 0000 0000[ 0000 0000 0000 0000]',\n prepareChar: (str: string) => str.toUpperCase()\n });\n}\n\nexport function vat(element: HTMLInputElement): InputMask<{}> {\n return imask(element, {\n definitions: {\n '#': /[A-Z0-9]/\n },\n mask: 'aa########[#####]',\n prepareChar: (str: string) => str.toUpperCase()\n });\n}\n","import { inject, ref } from 'vue';\nimport { FluxDisabledInjectionKey } from '$flux/data';\n\nexport default function () {\n return inject(FluxDisabledInjectionKey, ref(false));\n}\n","import type { Ref } from 'vue';\nimport { computed, unref } from 'vue';\nimport useDisabledInjection from './useDisabledInjection';\n\nexport default function (componentDisabled: Ref<boolean>) {\n const treeDisabled = useDisabledInjection();\n\n return computed(() => unref(componentDisabled) || unref(treeDisabled));\n}\n","import { inject } from 'vue';\nimport { FluxExpandableGroupInjectionKey } from '$flux/data';\n\nexport default function () {\n return inject(FluxExpandableGroupInjectionKey, {\n closeAll: () => void 0,\n register: () => void 0,\n unregister: () => void 0\n });\n}\n","import { inject, ref } from 'vue';\nimport { FluxFilterInjectionKey } from '$flux/data';\n\nexport default function () {\n return inject(FluxFilterInjectionKey, {\n // note(Bas): The default value is never used, but required by\n // Vue, so that explains the empty getter and function below.\n state: ref({\n get resettable() {\n return [];\n },\n\n reset(): void {\n }\n }),\n back: () => void 0,\n reset: () => void 0,\n getValue: () => void 0,\n hasValue: () => false,\n setValue: () => void 0\n });\n}\n","import { inject, ref } from 'vue';\nimport { FluxFlyoutInjectionKey } from '$flux/data';\n\nexport default function () {\n return inject(FluxFlyoutInjectionKey, {\n isClosing: ref(false),\n isOpen: ref(false),\n isOpening: ref(false)\n });\n}\n","import { inject, useId } from 'vue';\nimport { FluxFormFieldInjectionKey } from '$flux/data';\n\nexport default function () {\n return inject(FluxFormFieldInjectionKey, {\n id: useId()\n });\n}\n","import { inject } from 'vue';\nimport { FluxTableInjectionKey } from '$flux/data';\n\nexport default function () {\n return inject(FluxTableInjectionKey, {\n isBordered: false,\n isHoverable: false,\n isSeparated: false,\n isStriped: false\n });\n}\n","// src/roundStep.ts\nfunction roundStep_default(value, step) {\n return Math.round(value / step) * step;\n}\n\n// src/clampWithStepPrecision.ts\nfunction clampWithStepPrecision_default(value, min, max, step) {\n return Math.max(min, Math.min(max, +roundStep_default(value * (max - min) + min, step).toPrecision(4)));\n}\n// src/countDecimals.ts\nfunction countDecimals_default(value) {\n return value.toString().split(\".\")[1]?.length ?? 0;\n}\n// src/defineStore.ts\nimport { defineStore, storeToRefs } from \"pinia\";\nfunction defineStore_default(id, setup) {\n const storeFn = defineStore(id, setup);\n return () => {\n const store = storeFn();\n const keys = Object.getOwnPropertyNames(store);\n const refs = storeToRefs(store);\n const result = {};\n for (const key of keys) {\n if (key.startsWith(\"$\") || key.startsWith(\"_\")) {\n continue;\n }\n if (key in refs) {\n result[key] = refs[key];\n continue;\n }\n result[key] = store[key];\n }\n return result;\n };\n}\n// src/downloadUrl.ts\nfunction downloadUrl_default(url, filename) {\n const anchor = document.createElement(\"a\");\n anchor.download = filename;\n anchor.href = url;\n document.body.appendChild(anchor);\n anchor.click();\n document.body.removeChild(anchor);\n}\n\n// src/downloadBlob.ts\nfunction downloadBlob_default(blob, filename) {\n const url = URL.createObjectURL(blob);\n downloadUrl_default(url, filename);\n URL.revokeObjectURL(url);\n}\n// src/downloadString.ts\nfunction downloadString_default(data, filename, type) {\n const blob = new Blob([data], { type });\n downloadBlob_default(blob, filename);\n}\n// src/formatDate.ts\nfunction formatDate_default(dateTime) {\n return dateTime.toLocaleString({\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\"\n });\n}\n// src/formatDateFull.ts\nfunction formatDateFull_default(dateTime) {\n return dateTime.toLocaleString({\n weekday: \"long\",\n day: \"numeric\",\n month: \"long\"\n });\n}\n// src/formatDateTime.ts\nfunction formatDateTime_default(dateTime) {\n return dateTime.toLocaleString({\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\"\n });\n}\n// src/formatMonth.ts\nfunction formatMonth_default(dateTime) {\n return dateTime.toLocaleString({\n month: \"long\"\n });\n}\n// src/formatNumber.ts\nfunction formatNumber_default(value, decimals = 0) {\n const formatter = new Intl.NumberFormat(navigator.language, {\n maximumFractionDigits: decimals,\n minimumFractionDigits: decimals\n });\n return formatter.format(value);\n}\n// src/formatPercentage.ts\nfunction formatPercentage_default(value) {\n return new Intl.NumberFormat(navigator.language, {\n maximumFractionDigits: 1,\n minimumFractionDigits: 0,\n style: \"percent\"\n }).format(value);\n}\n// src/formatTime.ts\nfunction formatTime_default(dateTime) {\n return dateTime.toLocaleString({\n hour: \"2-digit\",\n minute: \"2-digit\"\n });\n}\n// src/generateStepTicks.ts\nfunction generateStepTicks_default(lower, upper, target = 5, isSmall) {\n const STEP_TICK_SIZES = [1, 5, 10, 25, 50, 100, 250, 500, 1000, 2500, 5000, 1e4];\n const STEP_TICK_SMALL_SIZES = [0.1, 0.5, ...STEP_TICK_SIZES];\n const delta = upper - lower;\n const sizes = isSmall ? STEP_TICK_SMALL_SIZES : STEP_TICK_SIZES;\n for (const size of sizes) {\n const count = Math.floor(delta / size);\n const steps2 = [];\n if (count > target + 1) {\n continue;\n }\n steps2.push(lower);\n for (let i = 1;i < count; ++i) {\n steps2.push(i * size + lower);\n }\n steps2.push(upper);\n return steps2;\n }\n const digits = delta.toString().length - 1;\n const power = Math.pow(10, digits);\n const steps = [];\n for (let i = 0;i < delta; i += power) {\n steps.push(i + lower);\n }\n return steps;\n}\n// src/getPrototypeChain.ts\nfunction getPrototypeChain_default(obj) {\n const entries = {};\n do {\n if (obj.name === \"\") {\n break;\n }\n for (const [key, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(obj.prototype))) {\n if ([\"constructor\", \"clone\", \"toJSON\"].includes(key)) {\n continue;\n }\n if (!descriptor.get && !descriptor.set) {\n continue;\n }\n entries[key] = descriptor;\n }\n } while (obj = Object.getPrototypeOf(obj));\n return entries;\n}\n// src/hexToRGB.ts\nfunction hexToRGB_default(hex) {\n const color = parseInt(hex.startsWith(\"#\") ? hex.substring(1) : hex, 16);\n return [\n color >> 16 & 255,\n color >> 8 & 255,\n color & 255\n ];\n}\n// src/hueToRGB.ts\nfunction hueToRGB_default(p, q, t) {\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n}\n\n// src/hslToRGB.ts\nfunction hslToRGB_default(h, s, l) {\n let r, g, b;\n h /= 360;\n s /= 100;\n l /= 100;\n if (s === 0) {\n r = g = b = l;\n } else {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n r = hueToRGB_default(p, q, h + 1 / 3);\n g = hueToRGB_default(p, q, h);\n b = hueToRGB_default(p, q, h - 1 / 3);\n }\n r = Math.round(r * 255);\n g = Math.round(g * 255);\n b = Math.round(b * 255);\n return [r, g, b];\n}\n\n// src/rgbToHSV.ts\nfunction rgbToHSV_default(r, g, b) {\n r /= 255;\n g /= 255;\n b /= 255;\n let cmin = Math.min(r, g, b), cmax = Math.max(r, g, b), delta = cmax - cmin, h, s = cmax === 0 ? 0 : delta / cmax, v = cmax;\n if (cmax === cmin) {\n h = 0;\n } else {\n if (cmax === r) {\n h = (g - b) / delta + (g < b ? 6 : 0);\n } else if (cmax === g) {\n h = (b - r) / delta + 2;\n } else {\n h = (r - g) / delta + 4;\n }\n h /= 6;\n }\n return [h, s, v];\n}\n\n// src/hslToHSV.ts\nfunction hslToHSV_default(h, s, v) {\n return rgbToHSV_default(...hslToRGB_default(h, s, v));\n}\n// src/hsvToRGB.ts\nfunction hsvToRGB_default(h, s, v) {\n let r = 0, g = 0, b = 0;\n let i = Math.floor(h * 6), f = h * 6 - i, p = v * (1 - s), q = v * (1 - f * s), t = v * (1 - (1 - f) * s);\n switch (i % 6) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n case 5:\n r = v;\n g = p;\n b = q;\n break;\n }\n r = Math.round(r * 255);\n g = Math.round(g * 255);\n b = Math.round(b * 255);\n return [r, g, b];\n}\n\n// src/rgbToHSL.ts\nfunction rgbToHSL_default(r, g, b) {\n r /= 255;\n g /= 255;\n b /= 255;\n let cmin = Math.min(r, g, b), cmax = Math.max(r, g, b), delta = cmax - cmin, h, s, l;\n if (delta === 0) {\n h = 0;\n } else if (cmax === r) {\n h = (g - b) / delta % 6;\n } else if (cmax === g) {\n h = (b - r) / delta + 2;\n } else {\n h = (r - g) / delta + 4;\n }\n h = Math.round(h * 60);\n if (h < 0) {\n h += 360;\n }\n l = (cmax + cmin) / 2;\n s = delta === 0 ? 0 : delta / (1 - Math.abs(2 * l - 1));\n s = +(s * 100).toFixed(1);\n l = +(l * 100).toFixed(1);\n return [h, s, l];\n}\n\n// src/hsvToHSL.ts\nfunction hsvToHSL_default(h, s, v) {\n return rgbToHSL_default(...hsvToRGB_default(h, s, v));\n}\n// src/isHtmlElement.ts\nfunction isHtmlElement_default(elm) {\n if (!globalThis.document) {\n return false;\n }\n return elm instanceof HTMLElement;\n}\n// src/isPointInPolygon.ts\nfunction isPointInPolygon_default(point, polygon) {\n let inside = false;\n for (let i = 0, j = polygon.length - 1;i < polygon.length; j = i++) {\n const xi = polygon[i][0], yi = polygon[i][1];\n const xj = polygon[j][0], yj = polygon[j][1];\n const intersect = yi > point[1] != yj > point[1] && point[0] < (xj - xi) * (point[1] - yi) / (yj - yi) + xi;\n if (intersect) {\n inside = !inside;\n }\n }\n return inside;\n}\n// src/isToday.ts\nfunction isToday_default(dateTime, today) {\n return today.hasSame(dateTime, \"day\");\n}\n// src/mulberry32.ts\nfunction mulberry32(seed) {\n const state = new Uint32Array(1);\n state[0] = seed;\n function next() {\n const innerState = state[0] = state[0] + 1831565813 | 0;\n let t = Math.imul(innerState ^ innerState >>> 15, 1 | innerState);\n t = t + Math.imul(t ^ t >>> 7, 61 | t) ^ t;\n return ((t ^ t >>> 14) >>> 0) / 4294967296;\n }\n function nextBetween(from, to) {\n return next() * (to - from) + from;\n }\n function fork() {\n return mulberry32(next() * 2 ** 32);\n }\n return {\n fork,\n next,\n nextBetween\n };\n}\nvar mulberry32_default = mulberry32;\n// src/openUrl.ts\nfunction openUrl_default(url) {\n if (window.location !== window.parent.location) {\n window.open(url, \"_top\");\n } else {\n window.location.href = url;\n }\n}\n// src/rgbToHEX.ts\nfunction rgbToHEX_default(r, g, b) {\n const sr = r.toString(16).padStart(2, \"0\");\n const sg = g.toString(16).padStart(2, \"0\");\n const sb = b.toString(16).padStart(2, \"0\");\n return `#${sr}${sg}${sb}`;\n}\n// src/setObjectMethod.ts\nfunction setObjectMethod_default(obj, key, fn) {\n obj.prototype[key] = fn;\n}\n// src/setObjectValue.ts\nfunction setObjectValue_default(obj, key, value) {\n Object.defineProperty(obj, key, { value });\n}\n// src/viewTransition.ts\nfunction viewTransition_default(fn) {\n if (\"startViewTransition\" in document) {\n document.startViewTransition(fn);\n } else {\n fn();\n }\n}\n// src/waitFor.ts\nasync function waitFor_default(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n// src/index.ts\nvar MDASH = \"—\";\nvar NDASH = \"–\";\nvar NOOP = () => {\n return;\n};\nexport {\n waitFor_default as waitFor,\n viewTransition_default as viewTransition,\n setObjectValue_default as setObjectValue,\n setObjectMethod_default as setObjectMethod,\n roundStep_default as roundStep,\n rgbToHSV_default as rgbToHSV,\n rgbToHSL_default as rgbToHSL,\n rgbToHEX_default as rgbToHEX,\n openUrl_default as openUrl,\n mulberry32_default as mulberry32,\n isToday_default as isToday,\n isPointInPolygon_default as isPointInPolygon,\n isHtmlElement_default as isHtmlElement,\n hueToRGB_default as hueToRGB,\n hsvToRGB_default as hsvToRGB,\n hsvToHSL_default as hsvToHSL,\n hslToRGB_default as hslToRGB,\n hslToHSV_default as hslToHSV,\n hexToRGB_default as hexToRGB,\n getPrototypeChain_default as getPrototypeChain,\n generateStepTicks_default as generateStepTicks,\n formatTime_default as formatTime,\n formatPercentage_default as formatPercentage,\n formatNumber_default as formatNumber,\n formatMonth_default as formatMonth,\n formatDateTime_default as formatDateTime,\n formatDateFull_default as formatDateFull,\n formatDate_default as formatDate,\n downloadUrl_default as downloadUrl,\n downloadString_default as downloadString,\n downloadBlob_default as downloadBlob,\n defineStore_default as defineStore,\n countDecimals_default as countDecimals,\n clampWithStepPrecision_default as clampWithStepPrecision,\n NOOP,\n NDASH,\n MDASH\n};\n\n//# debugId=1AD0E300F4EDB03F64756E2164756E21\n//# sourceMappingURL=utils.js.map\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nexport default baseSlice;\n","import baseSlice from './_baseSlice.js';\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\nexport default castSlice;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n return reHasUnicode.test(string);\n}\n\nexport default hasUnicode;\n","/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n return string.split('');\n}\n\nexport default asciiToArray;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n return string.match(reUnicode) || [];\n}\n\nexport default unicodeToArray;\n","import asciiToArray from './_asciiToArray.js';\nimport hasUnicode from './_hasUnicode.js';\nimport unicodeToArray from './_unicodeToArray.js';\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n}\n\nexport default stringToArray;\n","import castSlice from './_castSlice.js';\nimport hasUnicode from './_hasUnicode.js';\nimport stringToArray from './_stringToArray.js';\nimport toString from './toString.js';\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n}\n\nexport default createCaseFirst;\n","import createCaseFirst from './_createCaseFirst.js';\n\n/**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\nvar upperFirst = createCaseFirst('toUpperCase');\n\nexport default upperFirst;\n","import toString from './toString.js';\nimport upperFirst from './upperFirst.js';\n\n/**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\nfunction capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n}\n\nexport default capitalize;\n","/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\nexport default arrayReduce;\n","/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n}\n\nexport default basePropertyOf;\n","import basePropertyOf from './_basePropertyOf.js';\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n};\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\nexport default deburrLetter;\n","import deburrLetter from './_deburrLetter.js';\nimport toString from './toString.js';\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;\n\n/** Used to compose unicode capture groups. */\nvar rsCombo = '[' + rsComboRange + ']';\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\nexport default deburr;\n","/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n return string.match(reAsciiWord) || [];\n}\n\nexport default asciiWords;\n","/** Used to detect strings that need a more robust regexp to match words. */\nvar reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n/**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\nfunction hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n}\n\nexport default hasUnicodeWord;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\",\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq;\n\n/** Used to match complex or compound words. */\nvar reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n].join('|'), 'g');\n\n/**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n}\n\nexport default unicodeWords;\n","import asciiWords from './_asciiWords.js';\nimport hasUnicodeWord from './_hasUnicodeWord.js';\nimport toString from './toString.js';\nimport unicodeWords from './_unicodeWords.js';\n\n/**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\nfunction words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n}\n\nexport default words;\n","import arrayReduce from './_arrayReduce.js';\nimport deburr from './deburr.js';\nimport words from './words.js';\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\";\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n}\n\nexport default createCompounder;\n","import capitalize from './capitalize.js';\nimport createCompounder from './_createCompounder.js';\n\n/**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\nvar camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n});\n\nexport default camelCase;\n","import{computed as E,ref as _,unref as b}from\"vue\";function N(e,t){let o=_(!1),n=_(e),s=E(()=>{let c=[],m=b(n).month,h=b(n).startOf(\"month\");do c.push(h),h=h.plus({day:1});while(h.month===m);let y=c[0],T=c[c.length-1];for(let x=1;x<y.weekday;++x)c.unshift(y.minus({day:x}));for(let x=T.weekday+1;x<=7;++x)c.push(T.plus({day:x-T.weekday}));while(c.length/7<6){let x=c[c.length-1];for(let S=1;S<=7;++S)c.push(x.plus({day:S}))}return c}),r=E(()=>b(s).slice(0,7).map((c)=>c.toLocaleString({weekday:t?.weekDayLength??\"short\"}))),i=E(()=>b(n).plus({month:1})),a=E(()=>b(n).minus({month:1})),f=E(()=>b(n).toLocaleString({month:t?.monthLength??\"long\"})),l=E(()=>b(n).year.toString());function u(c){o.value=n.value>c,n.value=c}function v(){u(b(n).plus({month:1}))}function L(){u(b(n).minus({month:1}))}return{isTransitioningToPast:o,viewDate:n,viewDateNext:i,viewDatePrevious:a,viewMonth:f,viewYear:l,dates:s,days:r,setViewDate:u,nextMonth:v,previousMonth:L}}import{computed as me,unref as xe}from\"vue\";function U(e,t){return{months:me(()=>{let n=[],s=xe(e),r=s.startOf(\"year\");while(r.month<=12&&r.year===s.year)n.push({date:r,label:r.toLocaleString({month:t})}),r=r.plus({months:1});return n})}}import{computed as be,ref as he,unref as P,watch as ye}from\"vue\";function K(e,t=10){let o=he(0),n=be(()=>{let i=P(e).year,a=[],f=i-i%t+P(o)*t;for(let l=0;l<t;++l)a.push(f+l);return a});function s(){++o.value}function r(){--o.value}return ye(e,()=>o.value=0),{years:n,next:s,previous:r}}import{onMounted as De,onUnmounted as Ae,ref as Se,unref as Y,watchEffect as Ie}from\"vue\";import{Fragment as Te}from\"vue\";function z(e){let t=[];for(let o of e){if(o.type===Te&&Array.isArray(o.children)){t.push(...o.children);continue}t.push(o)}return t}import{isHtmlElement as ve}from\"@basmilius/utils\";var Ee=[\"a:not([disabled])\",\"button:not([disabled])\",\"input[type=checkbox]:not([disabled])\",\"input[type=radio]:not([disabled])\",\"input[type=text]:not([disabled])\",'[tabindex]:not([disabled]):not([tabindex=\"-1\"])'].join(\",\");function d(e){return Array.from(e.querySelectorAll(Ee)).filter(ve).filter((t)=>t.offsetWidth>0||t.offsetHeight>0||t===document.activeElement)}function M(e,t,o){let n=d(e),s=n.indexOf(t);if(s===-1)return null;let r=Le(n);ge(r,s,o);let i=we(s,o,r,n);if(!i){if(o===\"up\"||o===\"left\")i=n[s-1];if(o===\"down\"||o===\"right\")i=n[s+1]}return i}function ge(e,t,o){let n=e[t];e.forEach((s)=>{let r=s.center;switch(o){case\"up\":r={x:r.x,y:s.top+s.height};break;case\"down\":r={x:r.x,y:s.top};break;case\"left\":r={x:s.left+s.width,y:r.y};break;case\"right\":r={x:s.left,y:r.y};break}s.distance=Math.sqrt(Math.pow(n.center.x-r.x,2)+Math.pow(n.center.y-r.y,2))})}function we(e,t,o,n){let s=o[e],r=[];switch(t){case\"up\":r=o.map((a,f)=>f===e||a.top+a.height>s.top?Number.MAX_SAFE_INTEGER:a.distance);break;case\"down\":r=o.map((a,f)=>f===e||a.top<s.top+s.height?Number.MAX_SAFE_INTEGER:a.distance);break;case\"left\":r=o.map((a,f)=>f===e||a.left+a.width>s.left?Number.MAX_SAFE_INTEGER:a.distance);break;case\"right\":r=o.map((a,f)=>f===e||a.left<s.left+s.width?Number.MAX_SAFE_INTEGER:a.distance);break}let i=r.indexOf(Math.min(...r));if(r[i]!==Number.MAX_SAFE_INTEGER)return n[i];return null}function Le(e){return e.map((t)=>t.getBoundingClientRect()).map((t)=>({height:t.height,width:t.width,top:t.top,left:t.left,right:t.right,bottom:t.bottom,center:{x:t.left+t.width/2,y:t.top+t.height/2},distance:0}))}function B(e){let t=\"UnknownComponent\";if(e.type&&e.type.__name)t=e.type.__name;return t}import{camelCase as Me}from\"lodash-es\";function V(e){return Object.fromEntries(Object.entries(e.props??{}).map(([t,o])=>[Me(t),o]))}function q(e,t){if(!e.exposed||!(t in e.exposed))throw new Error(`'${t}' was not exposed by the component.`);return e.exposed[t]}import{isHtmlElement as Re}from\"@basmilius/utils\";function R(e,t,o=void 0){let n=d(e),s=o||document.activeElement;if(!s||!Re(s))return n[0]||void 0;let r=n.indexOf(s);return n[r+t]||void 0}function F(e){return Array.from(e.querySelectorAll('a[href], button, input, textarea, select, details, [tabindex]:not([tabindex=\"-1\"])')).filter((t)=>!t.hasAttribute(\"disabled\")||t.getAttribute(\"disabled\")!==\"true\").filter((t)=>!t.hasAttribute(\"aria-disabled\")||t.getAttribute(\"aria-disabled\")!==\"true\")}import{isHtmlElement as Fe}from\"@basmilius/utils\";import{unref as ke}from\"vue\";function p(e){let t=ke(e);if(Fe(t))return t;return t?.$el}function W(...e){console.warn(\"[Flux]\",...e)}function g(e,t,o=!1){let n=He(e),s=t.compareDocumentPosition(e),r;if(s&&Node.DOCUMENT_POSITION_PRECEDING||o)r=n.firstChild();else r=n.lastChild();(r!==null?r:e).focus()}function He(e){return document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:(t)=>t.tabIndex>=0&&!t.disabled?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP})}class G{get active(){return this.current?.isEnabled??!1}get current(){return this.#e[this.#e.length-1]??null}#t=[];#e=[];add(e,t,o=!0){let n={id:e,setEnabled:t,isEnabled:!0};if(this.current&&this.toggle(this.current,!1),this.#e.push(n),o)this.toggle(n,!0),this.emit()}remove(e){let t=this.#e.find((s)=>s.id===e);t&&this.toggle(t,!1);let n=this.current?.id===e;this.#e=this.#e.filter((s)=>s.id!==e),n&&this.current&&this.toggle(this.current,!0),this.emit()}emit(){this.#t.forEach((e)=>e(this.active,this.#e))}subscribe(e){return this.#t.push(e),e(this.active,this.#e),()=>this.#t=this.#t.filter((t)=>t!==e)}toggle(e,t){e.setEnabled(t),e.isEnabled=t}}var w=new G;var X=!globalThis.document;function j(e,t,o){let n=Se([]);De(()=>{document.addEventListener(\"pointerdown\",s)}),Ae(()=>{document.removeEventListener(\"pointerdown\",s)});function s(r){if(!Y(t))return;!Y(n).some((a)=>a.contains(r.target))&&o(r)}Ie(()=>{let r=[];(Array.isArray(e)?e:[e]).forEach((i)=>{let a=p(i);a&&r.push(a)}),n.value=r})}import{computed as Oe,getCurrentInstance as Ce}from\"vue\";function Z(){let e=Ce();return Oe(()=>e?.uid??(e?.proxy)._uid??0)}import{customRef as _e,isRef as $,ref as Ne,watch as Ue}from\"vue\";function J(e,t,o=!1){let n=Ne($(e)?e.value:e),s=_e((r,i)=>({get(){return r(),n.value},set:Pe((a)=>{n.value=a,i()},t,o)}));if($(e))Ue(e,(r)=>s.value=r);return s}function Pe(e,t,o=!1){let n;return(...s)=>{if(o&&!n)e(...s);clearTimeout(n),n=setTimeout(()=>requestAnimationFrame(()=>e(...s)),t)}}import{watch as Ke}from\"vue\";function k(e,t,o,n={passive:!0}){Ke(e,(s,r,i)=>{if(!s)return;s.addEventListener(t,o,n),i(()=>s.removeEventListener(t,o))},{immediate:!0})}import{onMounted as ze,onUnmounted as Be,ref as Ve,unref as qe}from\"vue\";function Q(e,t){let o=Ve();ze(()=>{s()}),Be(()=>{clearTimeout(o.value)});function n(){o.value=setTimeout(()=>requestAnimationFrame(s),qe(e))}function s(){n(),t()}}import{ref as We,watch as Ge}from\"vue\";function ee(e,t={}){let o=We(t.initial??!1);return Ge(e,(n,s,r)=>{let i=p(e);if(!i)return;let a=new IntersectionObserver((f)=>o.value=f[0]?.isIntersecting??!1,t);a.observe(i),r(()=>a.disconnect())},{immediate:!0}),o}import{onScopeDispose as Xe,watch as Ye}from\"vue\";function H(e,t,o){o??={attributes:!0};let n,s=Ye(()=>p(e),(a)=>{if(r(),!a)return;n=new MutationObserver(t),n.observe(a,o)},{immediate:!0});function r(){if(!n)return;n.disconnect(),n=void 0}function i(){r(),s()}Xe(i)}import{DateTime as te}from\"luxon\";import{ref as je,watch as Ze}from\"vue\";function oe(e,t){let o=`flux/${e}`,n=je(s()??t);function s(){if(o in localStorage){let r=JSON.parse(localStorage.getItem(o));if(Array.isArray(r)&&r[0]===\"DateTime\")r=te.fromISO(r[1]);return r}return null}return Ze(n,(r)=>{let i=r;if(te.isDateTime(r))i=[\"DateTime\",r.toISO({includeOffset:!0,extendedZone:!0})];localStorage.setItem(o,JSON.stringify(i))}),n}import{ref as I,unref as $e}from\"vue\";function ne(e){let t=I(0),o=I(0);if(!e)e=I(document);return k(e,\"scroll\",()=>{let n=$e(e);if(n instanceof Document)n=n.scrollingElement;t.value=n?.scrollLeft??0,o.value=n?.scrollTop??0}),{x:t,y:o}}import{ref as ie,watch as ce}from\"vue\";import{onMounted as Je,onUnmounted as Qe,ref as re,unref as se}from\"vue\";var et=0;function D(e=!1){let t=re(`focus-trap-${++et}`),o=re(!1);return Je(()=>w.add(se(t),(n)=>o.value=n,e)),Qe(()=>w.remove(se(t))),o}import{onUnmounted as tt,ref as ot,unref as ae}from\"vue\";function A(e){let t=ot(document.activeElement);tt(()=>{if(ae(e))return;requestAnimationFrame(()=>ae(t)?.focus())})}function le(e,t={}){if(X)return;let{disable:o=ie(!1),disableReturn:n=ie(!1),attachTo:s=null}=t,r=D(!o);A(n),ce(e,(i,a,f)=>{let l=p(e),u=s||document;if(r.value&&l&&document.activeElement&&!l.contains(document.activeElement)&&!l.querySelector(\"[autofocus]\"))g(l,document.activeElement,!0);function v(c){if(!r.value||!l)return;let m=c.target||document.body;if(l.contains(m))return;c.preventDefault(),c.stopImmediatePropagation(),g(l,m)}function L(c){if(!r.value||!l)return;if(!c.relatedTarget||c.relatedTarget===document.body)c.preventDefault(),l.focus();let m=c.target||document.body;if(l.contains(m))return;g(l,m)}if(u.addEventListener(\"focusin\",v,{capture:!0}),u.addEventListener(\"focusout\",L,{capture:!0}),l){let c=d(l),m=c.findIndex((T)=>T.classList.contains(\"is-active\")),h=c.findIndex((T)=>!T.hasAttribute(\"aria-disabled\")),y=c[0];if(m>-1)y=c[m];if(h>-1)y=c[h];if(y)y.focus()}f(()=>{u.removeEventListener(\"focusin\",v),u.removeEventListener(\"focusout\",L)})},{immediate:!0}),ce(()=>o,()=>{let i=p(e);if(r.value=!o,o||!i)return;let a=d(i);if(a.includes(document.activeElement))return;a[0]?.focus()},{immediate:!0})}import{onMounted as nt,onUnmounted as rt,ref as st}from\"vue\";function fe(e){let t=st(null);nt(()=>t.value=w.subscribe(e)),rt(()=>t.value?.())}import{watch as at}from\"vue\";function pe(e,{cycle:t=!0,direction:o=\"bidirectional\"}={}){H(e,()=>s(n(),!1));function n(){let i=p(e),a=d(i),f=a.findIndex((u)=>u.classList.contains(\"is-active\")),l=a.findIndex((u)=>!u.hasAttribute(\"aria-disabled\"));if(f>-1)return f;if(l>-1)return l;return 0}function s(i,a=!0){let f=p(e),l=d(f);l.forEach((u,v)=>u.tabIndex=v===i?0:-1),a&&l[i]?.focus()}function r(i){let a=p(e),f=d(a);if([\"Enter\",\" \"].includes(i.key))return;switch(o){case\"bidirectional\":it(i,a,f,s);break;case\"horizontal\":case\"vertical\":ct(i,a,t,o,f,s);break}}at(e,(i,a,f)=>{let l=p(e);if(!l)return;l.addEventListener(\"keydown\",r),s(n(),!1),f(()=>l.removeEventListener(\"keydown\",r))},{immediate:!0})}function it(e,t,o,n){let s;switch(e.key){case\"ArrowUp\":s=\"up\";break;case\"ArrowDown\":s=\"down\";break;case\"ArrowLeft\":s=\"left\";break;case\"ArrowRight\":s=\"right\";break;default:return}let r=M(t,document.activeElement,s);if(r)n(o.indexOf(r));e.preventDefault()}function ct(e,t,o,n,s,r){let i;if(e.key===(n===\"horizontal\"?\"ArrowLeft\":\"ArrowUp\"))i=-1;else if(e.key===(n===\"horizontal\"?\"ArrowRight\":\"ArrowDown\"))i=1;else return;let a=R(t,i);if(a)r(s.indexOf(a));else if(o)r(i===1?0:s.length-1);e.preventDefault()}var nn=\"#f8fafc\",rn=\"#f1f5f9\",sn=\"#e2e8f0\",an=\"#cbd5e1\",cn=\"#94a3b8\",ln=\"#64748b\",fn=\"#475569\",pn=\"#334155\",un=\"#1e293b\",dn=\"#0f172a\",mn=\"#020617\",xn=\"#f9fafb\",bn=\"#f3f4f6\",hn=\"#e5e7eb\",yn=\"#d1d5db\",Tn=\"#9ca3af\",vn=\"#6b7280\",En=\"#4b5563\",gn=\"#374151\",wn=\"#1f2937\",Ln=\"#111827\",Mn=\"#030712\",Rn=\"#fafafa\",Fn=\"#f4f4f5\",kn=\"#e4e4e7\",Hn=\"#d4d4d8\",Dn=\"#a1a1aa\",An=\"#71717a\",Sn=\"#52525b\",In=\"#3f3f46\",On=\"#27272a\",Cn=\"#18181b\",_n=\"#09090b\",Nn=\"#fafafa\",Un=\"#f5f5f5\",Pn=\"#e5e5e5\",Kn=\"#d4d4d4\",zn=\"#a3a3a3\",Bn=\"#737373\",Vn=\"#525252\",qn=\"#404040\",Wn=\"#262626\",Gn=\"#171717\",Xn=\"#0a0a0a\",Yn=\"#fafaf9\",jn=\"#f5f5f4\",Zn=\"#e7e5e4\",$n=\"#d6d3d1\",Jn=\"#a8a29e\",Qn=\"#78716c\",er=\"#57534e\",tr=\"#44403c\",or=\"#292524\",nr=\"#1c1917\",rr=\"#0c0a09\",sr=\"#fef2f2\",ar=\"#fee2e2\",ir=\"#fecaca\",cr=\"#fca5a5\",lr=\"#f87171\",fr=\"#ef4444\",pr=\"#dc2626\",ur=\"#b91c1c\",dr=\"#991b1b\",mr=\"#7f1d1d\",xr=\"#450a0a\",br=\"#fff7ed\",hr=\"#ffedd5\",yr=\"#fed7aa\",Tr=\"#fdba74\",vr=\"#fb923c\",Er=\"#f97316\",gr=\"#ea580c\",wr=\"#c2410c\",Lr=\"#9a3412\",Mr=\"#7c2d12\",Rr=\"#431407\",Fr=\"#fffbeb\",kr=\"#fef3c7\",Hr=\"#fde68a\",Dr=\"#fcd34d\",Ar=\"#fbbf24\",Sr=\"#f59e0b\",Ir=\"#d97706\",Or=\"#b45309\",Cr=\"#92400e\",_r=\"#78350f\",Nr=\"#451a03\",Ur=\"#fefce8\",Pr=\"#fef9c3\",Kr=\"#fef08a\",zr=\"#fde047\",Br=\"#facc15\",Vr=\"#eab308\",qr=\"#ca8a04\",Wr=\"#a16207\",Gr=\"#854d0e\",Xr=\"#713f12\",Yr=\"#422006\",jr=\"#f7fee7\",Zr=\"#ecfccb\",$r=\"#d9f99d\",Jr=\"#bef264\",Qr=\"#a3e635\",es=\"#84cc16\",ts=\"#65a30d\",os=\"#4d7c0f\",ns=\"#3f6212\",rs=\"#365314\",ss=\"#1a2e05\",as=\"#f0fdf4\",is=\"#dcfce7\",cs=\"#bbf7d0\",ls=\"#86efac\",fs=\"#4ade80\",ps=\"#22c55e\",us=\"#16a34a\",ds=\"#15803d\",ms=\"#166534\",xs=\"#14532d\",bs=\"#052e16\",hs=\"#ecfdf5\",ys=\"#d1fae5\",Ts=\"#a7f3d0\",vs=\"#6ee7b7\",Es=\"#34d399\",gs=\"#10b981\",ws=\"#059669\",Ls=\"#047857\",Ms=\"#065f46\",Rs=\"#064e3b\",Fs=\"#022c22\",ks=\"#f0fdfa\",Hs=\"#ccfbf1\",Ds=\"#99f6e4\",As=\"#5eead4\",Ss=\"#2dd4bf\",Is=\"#14b8a6\",Os=\"#0d9488\",Cs=\"#0f766e\",_s=\"#115e59\",Ns=\"#134e4a\",Us=\"#042f2e\",Ps=\"#ecfeff\",Ks=\"#cffafe\",zs=\"#a5f3fc\",Bs=\"#67e8f9\",Vs=\"#22d3ee\",qs=\"#06b6d4\",Ws=\"#0891b2\",Gs=\"#0e7490\",Xs=\"#155e75\",Ys=\"#164e63\",js=\"#083344\",Zs=\"#f0f9ff\",$s=\"#e0f2fe\",Js=\"#bae6fd\",Qs=\"#7dd3fc\",ea=\"#38bdf8\",ta=\"#0ea5e9\",oa=\"#0284c7\",na=\"#0369a1\",ra=\"#075985\",sa=\"#0c4a6e\",aa=\"#082f49\",ia=\"#eff6ff\",ca=\"#dbeafe\",la=\"#bfdbfe\",fa=\"#93c5fd\",pa=\"#60a5fa\",ua=\"#3b82f6\",da=\"#2563eb\",ma=\"#1d4ed8\",xa=\"#1e40af\",ba=\"#1e3a8a\",ha=\"#172554\",ya=\"#eef2ff\",Ta=\"#e0e7ff\",va=\"#c7d2fe\",Ea=\"#a5b4fc\",ga=\"#818cf8\",wa=\"#6366f1\",La=\"#4f46e5\",Ma=\"#4338ca\",Ra=\"#3730a3\",Fa=\"#312e81\",ka=\"#1e1b4b\",Ha=\"#f5f3ff\",Da=\"#ede9fe\",Aa=\"#ddd6fe\",Sa=\"#c4b5fd\",Ia=\"#a78bfa\",Oa=\"#8b5cf6\",Ca=\"#7c3aed\",_a=\"#6d28d9\",Na=\"#5b21b6\",Ua=\"#4c1d95\",Pa=\"#2e1065\",Ka=\"#faf5ff\",za=\"#f3e8ff\",Ba=\"#e9d5ff\",Va=\"#d8b4fe\",qa=\"#c084fc\",Wa=\"#a855f7\",Ga=\"#9333ea\",Xa=\"#7e22ce\",Ya=\"#6b21a8\",ja=\"#581c87\",Za=\"#3b0764\",$a=\"#fdf4ff\",Ja=\"#fae8ff\",Qa=\"#f5d0fe\",ei=\"#f0abfc\",ti=\"#e879f9\",oi=\"#d946ef\",ni=\"#c026d3\",ri=\"#a21caf\",si=\"#86198f\",ai=\"#701a75\",ii=\"#4a044e\",ci=\"#fdf2f8\",li=\"#fce7f3\",fi=\"#fbcfe8\",pi=\"#f9a8d4\",ui=\"#f472b6\",di=\"#ec4899\",mi=\"#db2777\",xi=\"#be185d\",bi=\"#9d174d\",hi=\"#831843\",yi=\"#500724\",Ti=\"#fff1f2\",vi=\"#ffe4e6\",Ei=\"#fecdd3\",gi=\"#fda4af\",wi=\"#fb7185\",Li=\"#f43f5e\",Mi=\"#e11d48\",Ri=\"#be123c\",Fi=\"#9f1239\",ki=\"#881337\",Hi=\"#4c0519\";class ue{#t;#e;constructor(e){this.#e=[],this.#t=e,this.onKeyDown=this.onKeyDown.bind(this)}focusElement(e,t=!0){if(!this.#e[e])return;for(let o=0;o<this.#e.length;++o)this.#e[o].tabIndex=o===e?0:-1;if(t)this.#e[e]?.focus()}register(){this.#e=F(this.#t),this.#t.addEventListener(\"keydown\",this.onKeyDown),this.focusElement(0,!1)}unregister(){this.#t.removeEventListener(\"keydown\",this.onKeyDown)}onKeyDown(e){let t=this.#t.querySelector('[tabindex=\"0\"]'),o=this.#e.findIndex((n)=>n===t)??0;switch(e.key){case\"ArrowUp\":case\"ArrowLeft\":this.focusElement(o-1);break;case\"ArrowDown\":case\"ArrowRight\":this.focusElement(o+1);break;default:return}e.preventDefault(),e.stopPropagation()}}var lt={beforeUnmount(e){O.get(e)?.unregister(),O.delete(e)},mounted(e){let t=new ue(e);t.register(),O.set(e,t)}},O=new WeakMap;class de{#t;#e;constructor(e){this.#t=e,this.#e=new MutationObserver(this.onMutation.bind(this))}register(){this.#e.observe(this.#t,{childList:!0,subtree:!0}),requestAnimationFrame(this.onMutation.bind(this))}unregister(){this.#e.disconnect()}onMutation(){let{height:e}=getComputedStyle(this.#t);this.#t.style.height=\"auto\";let{height:t}=getComputedStyle(this.#t);if(this.#t.style.height=e,t===e)return;getComputedStyle(this.#t),requestAnimationFrame(()=>requestAnimationFrame(()=>this.#t.style.height=t))}}var ft={beforeUnmount(e){C.get(e)?.unregister(),C.delete(e)},mounted(e){let t=new de(e);t.register(),C.set(e,t)}},C=new WeakMap;export{_n as zinc950,Cn as zinc900,On as zinc800,In as zinc700,Sn as zinc600,An as zinc500,Rn as zinc50,Dn as zinc400,Hn as zinc300,kn as zinc200,Fn as zinc100,Yr as yellow950,Xr as yellow900,Gr as yellow800,Wr as yellow700,qr as yellow600,Vr as yellow500,Ur as yellow50,Br as yellow400,zr as yellow300,Kr as yellow200,Pr as yellow100,g as wrapFocus,W as warn,Pa as violet950,Ua as violet900,Na as violet800,_a as violet700,Ca as violet600,Oa as violet500,Ha as violet50,Ia as violet400,Sa as violet300,Aa as violet200,Da as violet100,ft as vHeightTransition,lt as vFocusTrap,ne as useScrollPosition,oe as useRemembered,H as useMutationObserver,Q as useInterval,ee as useInView,pe as useFocusZone,fe as useFocusTrapSubscription,A as useFocusTrapReturn,D as useFocusTrapLock,le as useFocusTrap,k as useEventListener,J as useDebouncedRef,Z as useComponentId,j as useClickOutside,K as useCalendarYearSwitcher,U as useCalendarMonthSwitcher,N as useCalendar,p as unrefTemplateElement,Us as teal950,Ns as teal900,_s as teal800,Cs as teal700,Os as teal600,Is as teal500,ks as teal50,Ss as teal400,As as teal300,Ds as teal200,Hs as teal100,rr as stone950,nr as stone900,or as stone800,tr as stone700,er as stone600,Qn as stone500,Yn as stone50,Jn as stone400,$n as stone300,Zn as stone200,jn as stone100,mn as slate950,dn as slate900,un as slate800,pn as slate700,fn as slate600,ln as slate500,nn as slate50,cn as slate400,an as slate300,sn as slate200,rn as slate100,aa as sky950,sa as sky900,ra as sky800,na as sky700,oa as sky600,ta as sky500,Zs as sky50,ea as sky400,Qs as sky300,Js as sky200,$s as sky100,Hi as rose950,ki as rose900,Fi as rose800,Ri as rose700,Mi as rose600,Li as rose500,Ti as rose50,wi as rose400,gi as rose300,Ei as rose200,vi as rose100,xr as red950,mr as red900,dr as red800,ur as red700,pr as red600,fr as red500,sr as red50,lr as red400,cr as red300,ir as red200,ar as red100,Za as purple950,ja as purple900,Ya as purple800,Xa as purple700,Ga as purple600,Wa as purple500,Ka as purple50,qa as purple400,Va as purple300,Ba as purple200,za as purple100,yi as pink950,hi as pink900,bi as pink800,xi as pink700,mi as pink600,di as pink500,ci as pink50,ui as pink400,pi as pink300,fi as pink200,li as pink100,Rr as orange950,Mr as orange900,Lr as orange800,wr as orange700,gr as orange600,Er as orange500,br as orange50,vr as orange400,Tr as orange300,yr as orange200,hr as orange100,Xn as neutral950,Gn as neutral900,Wn as neutral800,qn as neutral700,Vn as neutral600,Bn as neutral500,Nn as neutral50,zn as neutral400,Kn as neutral300,Pn as neutral200,Un as neutral100,ss as lime950,rs as lime900,ns as lime800,os as lime700,ts as lime600,es as lime500,jr as lime50,Qr as lime400,Jr as lime300,$r as lime200,Zr as lime100,X as isSSR,ka as indigo950,Fa as indigo900,Ra as indigo800,Ma as indigo700,La as indigo600,wa as indigo500,ya as indigo50,ga as indigo400,Ea as indigo300,va as indigo200,Ta as indigo100,bs as green950,xs as green900,ms as green800,ds as green700,us as green600,ps as green500,as as green50,fs as green400,ls as green300,cs as green200,is as green100,Mn as gray950,Ln as gray900,wn as gray800,gn as gray700,En as gray600,vn as gray500,xn as gray50,Tn as gray400,yn as gray300,hn as gray200,bn as gray100,F as getKeyboardFocusableElements,d as getFocusableElements,R as getFocusableElement,q as getExposedRef,V as getComponentProps,B as getComponentName,M as getBidirectionalFocusElement,ii as fuchsia950,ai as fuchsia900,si as fuchsia800,ri as fuchsia700,ni as fuchsia600,oi as fuchsia500,$a as fuchsia50,ti as fuchsia400,ei as fuchsia300,Qa as fuchsia200,Ja as fuchsia100,z as flattenVNodeTree,Fs as emerald950,Rs as emerald900,Ms as emerald800,Ls as emerald700,ws as emerald600,gs as emerald500,hs as emerald50,Es as emerald400,vs as emerald300,Ts as emerald200,ys as emerald100,js as cyan950,Ys as cyan900,Xs as cyan800,Gs as cyan700,Ws as cyan600,qs as cyan500,Ps as cyan50,Vs as cyan400,Bs as cyan300,zs as cyan200,Ks as cyan100,ha as blue950,ba as blue900,xa as blue800,ma as blue700,da as blue600,ua as blue500,ia as blue50,pa as blue400,fa as blue300,la as blue200,ca as blue100,Nr as amber950,_r as amber900,Cr as amber800,Or as amber700,Ir as amber600,Sr as amber500,Fr as amber50,Ar as amber400,Dr as amber300,Hr as amber200,kr as amber100,w as FOCUS_TRAP_LOCKS};\n\n//# debugId=07CE9B4444A7CBFE64756E2164756E21\n//# sourceMappingURL=flux-internals.js.map\n","<template>\n <svg\n v-if=\"definition\"\n :viewBox=\"`0 0 ${definition.width} ${definition.height}`\"\n :class=\"$style.fontAwesomeIcon\"\n :style=\"{\n fontSize: size && `${size}px`,\n scale: definition.scale > 1 ? definition.scale : undefined\n }\"\n focusable=\"false\"\n role=\"img\"\n aria-hidden=\"true\"\n @click=\"onClick\">\n <path\n v-for=\"path in definition.paths\"\n :d=\"path\"\n fill=\"currentColor\"/>\n </svg>\n\n <i\n v-else-if=\"name\"\n :class=\"$style.materialSymbolIcon\"\n :style=\"{\n fontSize: size && `${size}px`\n }\"\n role=\"img\"\n aria-hidden=\"true\"\n @click=\"onClick\">\n {{ name }}\n </i>\n\n <i\n v-else\n :class=\"$style.icon\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { warn } from '@flux-ui/internals';\n import type { FluxIconName } from '@flux-ui/types';\n import { computed } from 'vue';\n import { iconRegistry } from '$flux/data';\n import $style from '$flux/css/component/Icon.module.scss';\n\n const emit = defineEmits<{\n click: [MouseEvent];\n }>();\n\n const {\n name\n } = defineProps<{\n readonly size?: number | string;\n readonly name?: FluxIconName;\n }>();\n\n const definition = computed(() => {\n if (!name) {\n return null;\n }\n\n const icon = iconRegistry[name];\n\n if (!icon) {\n warn(`Unknown icon: ${name}`);\n\n return null;\n }\n\n return {\n width: icon[0],\n height: icon[1],\n paths: (Array.isArray(icon[4]) ? icon[4] : [icon[4]]) as string[],\n scale: Math.max(1, icon[0] / 512)\n };\n });\n\n const onClick = (evt: MouseEvent) => emit('click', evt);\n</script>\n","<template>\n <router-link\n v-if=\"componentType === 'route'\"\n v-bind=\"$attrs\"\n :rel=\"rel\"\n :target=\"target\"\n :to=\"to\"\n @click=\"onClick($event)\"\n @mouseenter=\"$emit('mouseenter', $event)\"\n @mouseleave=\"$emit('mouseleave', $event)\">\n <slot/>\n </router-link>\n\n <a\n v-else-if=\"componentType === 'link'\"\n v-bind=\"$attrs\"\n :href=\"href\"\n :rel=\"rel\"\n :target=\"target\"\n @click=\"onClick($event)\"\n @mouseenter=\"$emit('mouseenter', $event)\"\n @mouseleave=\"$emit('mouseleave', $event)\">\n <slot/>\n </a>\n\n <button\n v-else-if=\"componentType === 'button'\"\n v-bind=\"$attrs\"\n @click=\"onClick($event)\"\n @mouseenter=\"$emit('mouseenter', $event)\"\n @mouseleave=\"$emit('mouseleave', $event)\">\n <slot/>\n </button>\n\n <div\n v-else\n v-bind=\"$attrs\"\n @click=\"onClick\"\n @mouseenter=\"$emit('mouseenter', $event)\"\n @mouseleave=\"$emit('mouseleave', $event)\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxPressableType, FluxTo } from '@flux-ui/types';\n\n const emit = defineEmits<{\n click: [MouseEvent];\n mouseenter: [MouseEvent];\n mouseleave: [MouseEvent];\n }>();\n\n defineProps<{\n readonly componentType?: FluxPressableType;\n readonly href?: string;\n readonly rel?: string;\n readonly target?: string;\n readonly to?: FluxTo;\n }>();\n\n defineSlots<{\n default(): any;\n }>();\n\n function onClick(evt: MouseEvent, navigate?: (evt: MouseEvent) => void): void {\n emit('click', evt);\n\n if (evt.defaultPrevented) {\n return;\n }\n\n navigate?.(evt);\n }\n</script>\n","<template>\n <FluxPressable\n :component-type=\"type\"\n :class=\"clsx(\n cssClass,\n isFilled && $style.isFilled,\n size === 'small' && $style.isSmall,\n size === 'medium' && $style.isMedium,\n size === 'large' && $style.isLarge,\n size === 'xl' && $style.isXl\n )\"\n :type=\"isSubmit ? 'submit' : 'button'\"\n :aria-disabled=\"disabled ? true : undefined\"\n :disabled=\"disabled ? true : undefined\"\n :tabindex=\"disabled ? -1 : tabindex\"\n :href=\"href\"\n :rel=\"rel\"\n :target=\"target\"\n :to=\"to\"\n @click=\"onClick\"\n @mouseenter=\"onMouseEnter\"\n @mouseleave=\"onMouseLeave\">\n <slot name=\"before\"/>\n\n <slot name=\"iconLeading\">\n <FluxSpinner\n v-if=\"isLoading && (iconLeading || !iconTrailing)\"\n :size=\"20\"/>\n\n <FluxIcon\n v-else-if=\"iconLeading\"\n :class=\"cssClassIcon\"\n :name=\"iconLeading\"/>\n </slot>\n\n <slot name=\"label\">\n <span\n v-if=\"label\"\n :class=\"cssClassLabel\">\n {{ label }}\n </span>\n </slot>\n\n <slot name=\"iconTrailing\">\n <FluxSpinner\n v-if=\"isLoading && (!iconLeading && iconTrailing)\"\n :size=\"20\"/>\n\n <FluxIcon\n v-else-if=\"iconTrailing\"\n :class=\"cssClassIcon\"\n :name=\"iconTrailing\"/>\n </slot>\n\n <slot name=\"after\"/>\n </FluxPressable>\n</template>\n\n<script lang=\"ts\">\n export const SLOTS = ['default', 'after', 'before', 'iconLeading', 'iconTrailing', 'label'] as const;\n</script>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxButtonEmits, FluxButtonProps, FluxButtonSlots } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { toRef, unref } from 'vue';\n import { useDisabled } from '$flux/composable';\n import FluxIcon from './FluxIcon.vue';\n import FluxPressable from './FluxPressable.vue';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/base/Button.module.scss';\n\n const emit = defineEmits<FluxButtonEmits>();\n\n const {\n disabled: componentDisabled,\n isLoading,\n size = 'medium',\n tabindex = 0,\n type = 'button'\n } = defineProps<FluxButtonProps & {\n readonly cssClass: string;\n readonly cssClassIcon: string;\n readonly cssClassLabel: string;\n }>();\n\n defineSlots<FluxButtonSlots>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n\n function onClick(evt: MouseEvent): void {\n if (unref(disabled) || isLoading) {\n evt.preventDefault();\n evt.stopPropagation();\n return;\n }\n\n emit('click', evt);\n }\n\n function onMouseEnter(evt: MouseEvent): void {\n emit('mouseenter', evt);\n }\n\n function onMouseLeave(evt: MouseEvent): void {\n emit('mouseleave', evt);\n }\n</script>\n","import type { FluxFormSelectEntry, FluxFormSelectOption, FluxFormSelectOptions, FluxFormSelectValue } from '@flux-ui/types';\nimport type { MaybeRef, Ref } from 'vue';\nimport { computed, unref } from 'vue';\nimport { isFluxFormSelectGroup, isFluxFormSelectOption } from '$flux/data';\n\nexport default function (modelValue: Ref<FluxFormSelectValue>, isMultiple: boolean, options: MaybeRef<FluxFormSelectEntry[]>, searchQuery?: Ref<string>) {\n const values = computed(() => {\n const model = unref(modelValue);\n return Array.isArray(model) ? model : [model];\n });\n\n const groups = computed(() => {\n const groups: FluxFormSelectOptions[] = [];\n const search = unref(searchQuery)?.trim().toLowerCase();\n\n const available = unref(options)\n .filter(o => !('value' in o) || (!search || o.label.toLowerCase().includes(search)))\n .filter(o => !('value' in o) || !isMultiple || !unref(selected).find(s => s.value === o.value));\n\n if (available.length === 0) {\n return [];\n }\n\n if (!available.find(isFluxFormSelectGroup)) {\n return [[null, available]] as FluxFormSelectOptions[];\n }\n\n for (let i = 0; i < available.length;) {\n const item = available[i];\n\n if (isFluxFormSelectOption(item)) {\n ++i;\n groups.push([null, [item]]);\n continue;\n }\n\n const subItems: FluxFormSelectOption[] = [];\n\n for (++i; i <= available.length; ++i) {\n const subItem = available[i];\n\n if (isFluxFormSelectGroup(subItem) || i === available.length) {\n if (subItems.length > 0) {\n groups.push([item, subItems]);\n }\n\n break;\n }\n\n subItems.push(subItem);\n }\n }\n\n return groups;\n });\n\n const selected = computed(() => unref(values)\n .map(v => unref(options).find(o => isFluxFormSelectOption(o) && o.value === v))\n .filter(isFluxFormSelectOption));\n\n return {\n groups,\n selected,\n values\n };\n}\n","import { computed, shallowRef, unref } from 'vue';\n\nexport default function () {\n const tasks = shallowRef(0);\n\n const isLoading = computed(() => unref(tasks) > 0);\n\n function loaded<T extends Function>(fn: T): T {\n return (async (...args: any[]) => {\n tasks.value++;\n\n return await fn(...args)\n .finally(() => tasks.value--);\n }) as unknown as T;\n }\n\n return {\n isLoading,\n loaded\n };\n}\n","import { getCurrentInstance } from 'vue';\nimport type { FluxTranslate, FluxTranslation } from '$flux/data';\nimport { english } from '$flux/data';\n\nconst fallback: FluxTranslate = (key, params) => {\n if (!(key in english)) {\n return key;\n }\n\n let translation: string = english[key as FluxTranslation];\n\n for (let paramName in params) {\n translation = translation.replaceAll(`{${paramName}}`, params[paramName].toString());\n }\n\n return translation;\n};\n\nexport default () => {\n const instance = getCurrentInstance()?.proxy;\n\n if (!instance || !isVueI18n(instance)) {\n return fallback;\n }\n\n return instance.$t;\n};\n\ntype VueI18n = {\n $t: FluxTranslate;\n}\n\nfunction isVueI18n(obj: object | null): obj is VueI18n {\n return !!obj && '$t' in obj;\n}\n","<template>\n <div :class=\"CLASS_MAP[variant]\">\n <slot/>\n\n <slot\n v-if=\"isLoading\"\n name=\"loader\">\n <div :class=\"$style.paneLoader\">\n <FluxSpinner/>\n </div>\n </slot>\n\n <div\n v-if=\"tag\"\n :class=\"$style.paneTag\">\n {{ tag }}\n </div>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/Pane.module.scss';\n\n const CLASS_MAP = {\n default: $style.paneDefault,\n flat: $style.paneFlat,\n well: $style.paneWell\n } as const;\n\n const {\n variant = 'default'\n } = defineProps<{\n readonly isLoading?: boolean;\n readonly tag?: string;\n readonly variant?: 'default' | 'flat' | 'well';\n }>();\n\n defineSlots<{\n default(): any;\n loader(): any;\n }>();\n</script>\n","<template>\n <div\n ref=\"mount\"\n :class=\"$style.flyout\"\n :style=\"{\n '--opener-width': `${openerWidth}px`,\n '--pane-mx': `${paneMarginX}px`,\n '--pane-my': `${paneMarginY}px`,\n '--pane-x': `${paneX - 12}px`,\n '--pane-y': `${paneY - 12}px`\n }\">\n <slot\n name=\"opener\"\n v-bind=\"{close, open, toggle}\"/>\n\n <dialog\n ref=\"dialog\"\n :class=\"$style.flyoutDialog\"\n @click=\"onDialogBackdropClick\"\n @keydown.prevent.esc=\"close\">\n <FluxPane\n v-if=\"isOpen\"\n ref=\"pane\"\n :class=\"clsx(\n $style.flyoutPane,\n isAutoWidth && $style.isAutoWidth,\n isClosing && $style.isClosing,\n isOpening && $style.isOpening\n )\"\n :style=\"{\n width: `${width}px`\n }\">\n <slot v-bind=\"{close, paneX, paneY, openerWidth, openerHeight}\"/>\n </FluxPane>\n </dialog>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { unrefTemplateElement, useFocusTrap } from '@flux-ui/internals';\n import type { FluxDirection } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { provide, ref, unref, useTemplateRef, watch } from 'vue';\n import { FluxFlyoutInjectionKey } from '$flux/data';\n import FluxPane from './FluxPane.vue';\n import $style from '$flux/css/component/Flyout.module.scss';\n\n const {\n direction = 'vertical',\n margin = 9\n } = defineProps<{\n readonly direction?: FluxDirection;\n readonly isAutoWidth?: boolean;\n readonly margin?: number;\n readonly width?: number | string;\n }>();\n\n defineSlots<{\n default(props: {\n close(): void;\n\n readonly paneX: number;\n readonly paneY: number;\n readonly openerWidth: number;\n readonly openerHeight: number;\n }): any;\n\n opener(props: {\n close(): void;\n open(): void;\n toggle(): void;\n }): any;\n }>();\n\n const dialogRef = useTemplateRef('dialog');\n const mountRef = useTemplateRef('mount');\n const paneRef = useTemplateRef('pane');\n\n const isClosing = ref(false);\n const isOpening = ref(false);\n const isOpen = ref(false);\n const openerWidth = ref(0);\n const openerHeight = ref(0);\n const paneX = ref(0);\n const paneY = ref(0);\n const paneMarginX = ref(0);\n const paneMarginY = ref(0);\n\n useFocusTrap(paneRef);\n\n function close(): void {\n const pane = unrefTemplateElement(paneRef);\n\n if (!pane) {\n return;\n }\n\n pane.addEventListener('animationend', () => {\n isClosing.value = false;\n isOpen.value = false;\n }, {once: true});\n\n isClosing.value = true;\n }\n\n function open(): void {\n const mount = unref(mountRef)!;\n const {width, height} = mount.children[0].getBoundingClientRect();\n\n isOpen.value = true;\n openerWidth.value = width;\n openerHeight.value = height;\n\n requestAnimationFrame(() => {\n const pane = unrefTemplateElement(paneRef)!;\n\n pane.addEventListener('animationend', () => {\n isOpening.value = false;\n }, {once: true});\n\n isOpening.value = true;\n });\n\n requestAnimationFrame(reposition);\n }\n\n function reposition(): void {\n const mount = unref(mountRef)!;\n const pane = unrefTemplateElement(paneRef)!;\n const {top, left, width, height} = mount.children[0].getBoundingClientRect();\n const {width: paneWidth, height: paneHeight} = pane.getBoundingClientRect();\n\n let x, y, mx = 0, my = 0;\n\n if (direction === 'horizontal') {\n x = left + width;\n y = top + height / 2 - paneHeight / 2;\n mx = margin;\n\n if (x + paneWidth > innerWidth - 30) {\n x = left - paneWidth;\n mx = -mx;\n }\n } else {\n x = left + width / 2 - paneWidth / 2;\n y = top + height;\n my = margin;\n\n if (y + paneHeight > innerHeight - 30) {\n y = top - paneHeight;\n my = -my;\n }\n }\n\n paneX.value = Math.max(30, Math.min(innerWidth - paneWidth - 30, x));\n paneY.value = Math.max(30, Math.min(innerHeight - paneHeight - 30, y));\n paneMarginX.value = mx;\n paneMarginY.value = my;\n }\n\n function toggle(): void {\n if (isOpen.value) {\n close();\n } else {\n open();\n }\n }\n\n function onDialogBackdropClick(evt: Event): void {\n const target = evt.target as HTMLElement;\n\n if (target.tagName !== 'DIALOG') {\n return;\n }\n\n close();\n }\n\n watch(isOpen, (isOpen, _, onCleanup) => {\n const dialog = unref(dialogRef)!;\n\n if (isOpen && !dialog.open) {\n dialog.showModal();\n\n window.addEventListener('scroll', reposition, {passive: true});\n onCleanup(() => window.removeEventListener('scroll', reposition));\n } else if (!isOpen && dialog.open) {\n dialog.close();\n }\n });\n\n provide(FluxFlyoutInjectionKey, {\n isClosing,\n isOpen,\n isOpening\n });\n\n defineExpose({\n close,\n open,\n toggle\n });\n</script>\n","<script lang=\"ts\">\n import { defineComponent, getCurrentInstance, onMounted, onUnmounted, PropType, ref, SlotsType, VNode } from 'vue';\n import { addTooltip, removeTooltip } from '$flux/data';\n\n export default defineComponent({\n props: {\n content: String as PropType<string | undefined>,\n direction: String as PropType<'horizontal' | 'vertical'>\n },\n slots: Object as SlotsType<{\n content: () => VNode[],\n default: () => VNode[],\n }>,\n setup(props, {slots}) {\n const instance = getCurrentInstance()!;\n\n const tooltipId = ref<number | null>(null);\n\n onMounted(() => {\n const elm = instance.proxy!.$el;\n elm.addEventListener('mouseenter', onHover, {passive: true});\n elm.addEventListener('mouseleave', onLeave, {passive: true});\n });\n\n onUnmounted(() => {\n const elm = instance.proxy!.$el;\n elm.removeEventListener('mouseenter', onHover);\n elm.removeEventListener('mouseleave', onLeave);\n onLeave();\n });\n\n function onHover(): void {\n onLeave();\n\n if ((props.content?.trim().length ?? 0) === 0 && !slots.content) {\n return;\n }\n\n tooltipId.value = addTooltip({\n content: props.content,\n contentSlot: slots.content,\n direction: props.direction || 'vertical',\n origin: instance.proxy?.$el\n });\n }\n\n function onLeave(): void {\n if (tooltipId.value) {\n removeTooltip(tooltipId.value);\n }\n }\n\n return () => (slots.default?.() ?? [])[0] ?? null;\n }\n });\n</script>\n","<template>\n <FluxStack\n :class=\"$style.actionBar\"\n direction=\"horizontal\"\n :gap=\"9\">\n <slot name=\"primary\"/>\n <slot name=\"actionsStart\"/>\n\n <FluxSpacer/>\n\n <slot name=\"actionsBeforeSearch\"/>\n <slot name=\"search\"/>\n <slot name=\"actionsAfterSearch\"/>\n\n <FluxFlyout v-if=\"slots.filter\">\n <template #opener=\"{close, open, toggle}\">\n <slot\n v-bind=\"{close, open, toggle}\"\n name=\"filterOpener\">\n <FluxButtonGroup>\n <FluxSecondaryButton\n icon-leading=\"filter\"\n :label=\"translate('flux.filter')\"\n @click=\"open\"/>\n\n <FluxTooltip\n v-if=\"isResettable\"\n :content=\"translate('flux.filterReset')\">\n <FluxDestructiveButton\n icon-leading=\"xmark\"\n @click=\"$emit('reset')\"/>\n </FluxTooltip>\n </FluxButtonGroup>\n </slot>\n </template>\n\n <template #default=\"{close, paneX, paneY, openerWidth, openerHeight}\">\n <slot\n name=\"filter\"\n v-bind=\"{close, paneX, paneY, openerWidth, openerHeight}\"/>\n </template>\n </FluxFlyout>\n\n <slot name=\"actionsEnd\"/>\n </FluxStack>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useTranslate } from '$flux/composable/private';\n import FluxButtonGroup from './FluxButtonGroup.vue';\n import FluxDestructiveButton from './FluxDestructiveButton.vue';\n import FluxFlyout from './FluxFlyout.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import FluxSpacer from './FluxSpacer.vue';\n import FluxStack from './FluxStack.vue';\n import FluxTooltip from './FluxTooltip.vue';\n import $style from '$flux/css/component/Action.module.scss';\n\n defineEmits<{\n reset: [];\n }>();\n\n defineProps<{\n readonly isResettable?: boolean;\n }>();\n\n const slots = defineSlots<{\n primary?(): any;\n actionsEnd?(): any;\n actionsStart?(): any;\n actionsAfterSearch?(): any;\n actionsBeforeSearch?(): any;\n search?(): any;\n\n filter?(props: {\n close(): void;\n\n readonly paneX: number;\n readonly paneY: number;\n readonly openerWidth: number;\n readonly openerHeight: number;\n }): any;\n\n filterOpener?(props: {\n close(): void;\n open(): void;\n toggle(): void;\n }): any;\n }>();\n\n const translate = useTranslate();\n</script>\n","<template>\n <FluxPane\n :class=\"$style.actionPane\"\n :variant=\"paneVariant\">\n <slot name=\"base\"/>\n\n <div :class=\"$style.actionPaneGrid\">\n <FluxPaneBody :class=\"$style.actionPaneBody\">\n <slot/>\n </FluxPaneBody>\n\n <FluxPaneBody\n v-if=\"slots.buttons\"\n :class=\"$style.actionPaneBody\">\n <FluxButtonStack direction=\"vertical\">\n <slot name=\"buttons\"/>\n </FluxButtonStack>\n </FluxPaneBody>\n </div>\n </FluxPane>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import FluxButtonStack from './FluxButtonStack.vue';\n import FluxPane from './FluxPane.vue';\n import FluxPaneBody from './FluxPaneBody.vue';\n import $style from '$flux/css/component/Action.module.scss';\n\n defineProps<{\n readonly paneVariant?: 'default' | 'flat' | 'well';\n }>();\n\n const slots = defineSlots<{\n default?(): any;\n buttons?(): any;\n base?(): any;\n }>();\n</script>\n","<template>\n <FluxStack\n ref=\"element\"\n direction=\"horizontal\"\n :gap=\"1\"\n tag=\"nav\">\n <slot/>\n </FluxStack>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useFocusZone } from '@flux-ui/internals';\n import { useTemplateRef } from 'vue';\n import FluxStack from './FluxStack.vue';\n\n defineSlots<{\n default(): any;\n }>();\n\n const elementRef = useTemplateRef('element');\n\n useFocusZone(elementRef, {\n direction: 'horizontal'\n });\n</script>\n","<template>\n <canvas\n ref=\"canvas\"\n :class=\"$style.animatedColors\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { mulberry32 } from '@basmilius/utils';\n import { useComponentId } from '@flux-ui/internals';\n import { computed, onBeforeUnmount, onMounted, ref, unref, useTemplateRef, watch } from 'vue';\n import $style from '$flux/css/component/Visual.module.scss';\n\n type Polygon = [number, number, string, PolygonPoint[]];\n type PolygonPoint = [number, number, number];\n\n const {\n colors,\n incrementor = 1,\n opacity = .5,\n seed\n } = defineProps<{\n readonly colors?: string[];\n readonly incrementor?: number;\n readonly opacity?: number;\n readonly seed?: number;\n }>();\n\n const canvasRef = useTemplateRef('canvas');\n const componentId = useComponentId();\n\n const contextRef = ref<CanvasRenderingContext2D>();\n const animationFrame = ref(0);\n const tick = ref(0);\n\n const polygons = computed(() => {\n if (!colors || colors.length === 0) {\n return [];\n }\n\n const mulberry = mulberry32(seed ?? unref(componentId));\n const polygons: Polygon[] = [];\n\n for (const color of colors) {\n const localMulberry = mulberry.fork();\n\n const x = colors.length === 1 ? .5 : localMulberry.next();\n const y = colors.length === 1 ? .5 : localMulberry.next();\n const count = Math.round(localMulberry.nextBetween(6, 9));\n const points: PolygonPoint[] = [];\n\n for (let p = 0; p < count; ++p) {\n points.push([\n localMulberry.next(),\n localMulberry.next(),\n localMulberry.next()\n ]);\n }\n\n polygons.push([x, y, color, points]);\n }\n\n return polygons;\n });\n\n onMounted(() => schedule());\n onBeforeUnmount(() => cancel());\n\n function cancel(): void {\n cancelAnimationFrame(animationFrame.value);\n }\n\n function schedule(): void {\n animationFrame.value = requestAnimationFrame(update);\n tick.value += incrementor;\n }\n\n function update(): void {\n const context = unref(contextRef);\n const shapes = unref(polygons);\n\n if (!context || shapes.length === 0) {\n return;\n }\n\n const width = context.canvas.offsetWidth;\n const height = context.canvas.offsetHeight;\n context.canvas.width = width;\n context.canvas.height = height;\n\n const widthBasedOpacity = Math.min(1, Math.max(.15, 360 / width));\n\n context.globalAlpha = opacity * widthBasedOpacity;\n context.globalCompositeOperation = 'screen';\n context.clearRect(0, 0, width, height);\n\n for (const [tx, ty, color, shape] of shapes) {\n context.save();\n context.translate(tx * width, ty * height);\n context.beginPath();\n context.fillStyle = color;\n\n for (let i = 0; i < shape.length; ++i) {\n let [x, y, m] = shape[i];\n\n x = Math.cos(x * Math.PI * 2 + tick.value / (m * 200 + 300)) * (width * .8);\n y = Math.sin(y * Math.PI * 2 + tick.value / (m * 100 + 300)) * (height * .8);\n\n if (i === 0) {\n context.moveTo(x, y);\n } else {\n context.lineTo(x, y);\n }\n }\n\n context.closePath();\n context.fill();\n context.restore();\n }\n\n schedule();\n }\n\n watch(canvasRef, canvas => {\n if (!canvas) {\n contextRef.value = undefined;\n return;\n }\n\n contextRef.value = canvas.getContext('2d', {\n alpha: true,\n colorSpace: 'display-p3'\n })!;\n }, {immediate: true});\n\n watch(polygons, () => {\n cancel();\n schedule();\n });\n</script>\n","<template>\n <Transition\n @after-enter=\"afterEnter\"\n @enter=\"enter\"\n @leave=\"leave\">\n <slot/>\n </Transition>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { isHtmlElement } from '@basmilius/utils';\n\n function afterEnter(elm: Element): void {\n if (!isHtmlElement(elm)) {\n return;\n }\n\n elm.style.height = 'auto';\n }\n\n function enter(elm: Element): void {\n if (!isHtmlElement(elm)) {\n return;\n }\n\n const {width} = getComputedStyle(elm);\n elm.style.position = 'absolute';\n elm.style.width = width;\n elm.style.height = 'auto';\n elm.style.visibility = 'hidden';\n\n const {height} = getComputedStyle(elm);\n elm.style.removeProperty('position');\n elm.style.removeProperty('width');\n elm.style.removeProperty('visibility');\n elm.style.height = '0';\n\n // note: force repaint.\n getComputedStyle(elm);\n\n requestAnimationFrame(() => requestAnimationFrame(() => elm.style.height = height));\n }\n\n function leave(elm: Element): void {\n if (!isHtmlElement(elm)) {\n return;\n }\n\n const {height} = getComputedStyle(elm);\n elm.style.height = height;\n\n // note: force repaint.\n getComputedStyle(elm);\n\n requestAnimationFrame(() => requestAnimationFrame(() => elm.style.height = '0'));\n }\n</script>\n","<template>\n <Transition\n @after-enter=\"afterEnter\"\n @enter=\"enter\"\n @leave=\"leave\">\n <slot/>\n </Transition>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { isHtmlElement } from '@basmilius/utils';\n\n function afterEnter(elm: Element): void {\n if (!isHtmlElement(elm)) {\n return;\n }\n\n elm.style.width = 'auto';\n }\n\n function enter(elm: Element): void {\n if (!isHtmlElement(elm)) {\n return;\n }\n\n const {height} = getComputedStyle(elm);\n elm.style.position = 'absolute';\n elm.style.height = height;\n elm.style.width = 'auto';\n elm.style.visibility = 'hidden';\n\n const {width} = getComputedStyle(elm);\n elm.style.removeProperty('position');\n elm.style.removeProperty('height');\n elm.style.removeProperty('visibility');\n elm.style.width = '0';\n\n // note: force repaint.\n getComputedStyle(elm);\n\n requestAnimationFrame(() => requestAnimationFrame(() => elm.style.width = width));\n }\n\n function leave(elm: Element): void {\n if (!isHtmlElement(elm)) {\n return;\n }\n\n const {width} = getComputedStyle(elm);\n elm.style.width = width;\n\n // note: force repaint.\n getComputedStyle(elm);\n\n requestAnimationFrame(() => requestAnimationFrame(() => elm.style.width = '0'));\n }\n</script>\n","<template>\n <FluxPressable\n :class=\"clsx(\n !status && $style.avatar,\n !!status && $style.statusAvatar,\n type !== 'none' && $style.avatarClickable\n )\"\n :style=\"{\n '--color': color,\n fontSize: size && `${size}px`\n }\"\n :component-type=\"type\"\n role=\"img\"\n :aria-label=\"alt\"\n :tabindex=\"tabindex\"\n :href=\"href\"\n :rel=\"rel\"\n :target=\"target\"\n :to=\"to\"\n @click=\"$emit('click', $event)\"\n @mouseenter=\"$emit('mouseenter', $event)\"\n @mouseleave=\"$emit('mouseleave', $event)\">\n <img\n v-if=\"src\"\n :class=\"$style.avatarImage\"\n :alt=\"alt\"\n :src=\"src\"/>\n\n <div\n v-else\n :class=\"fallback === 'colorized' ? $style.avatarFallbackColorized : $style.avatarFallbackNeutral\">\n <span v-if=\"fallbackInitials\">\n {{ fallbackInitials }}\n </span>\n\n <FluxIcon\n v-else-if=\"fallbackIcon\"\n :name=\"fallbackIcon\"/>\n </div>\n\n <FluxFadeTransition>\n <div\n v-if=\"isLoading\"\n :class=\"$style.avatarLoading\">\n <FluxSpinner/>\n </div>\n </FluxFadeTransition>\n\n <div\n v-if=\"status\"\n :class=\"STATUS_CLASS_MAP[status]\"/>\n </FluxPressable>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { amber600, blue600, cyan600, emerald600, fuchsia600, green600, indigo600, lime600, orange600, pink600, purple600, red600, rose600, sky600, teal600, violet600, yellow600 } from '@flux-ui/internals';\n import type { FluxButtonEmits, FluxColor, FluxIconName, FluxPressableType, FluxTo } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { computed, unref } from 'vue';\n import { FluxFadeTransition } from '$flux/transition';\n import FluxIcon from './FluxIcon.vue';\n import FluxPressable from './FluxPressable.vue';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/Avatar.module.scss';\n\n const STATUS_CLASS_MAP = {\n gray: $style.avatarStatusGray,\n primary: $style.avatarStatusPrimary,\n danger: $style.avatarStatusDanger,\n info: $style.avatarStatusInfo,\n success: $style.avatarStatusSuccess,\n warning: $style.avatarStatusWarning\n } as const;\n\n defineEmits<FluxButtonEmits>();\n\n const {\n fallback = 'colorized',\n fallbackColors = [lime600, green600, emerald600, teal600, cyan600, sky600, blue600, indigo600, violet600, purple600, fuchsia600, pink600, rose600, red600, orange600, amber600, yellow600],\n fallbackIcon = 'user',\n fallbackInitials,\n type = 'none'\n } = defineProps<{\n readonly alt?: string;\n readonly fallback?: 'colorized' | 'neutral';\n readonly fallbackColors?: string[];\n readonly fallbackIcon?: FluxIconName;\n readonly fallbackInitials?: string;\n readonly isLoading?: boolean;\n readonly size?: number;\n readonly src?: string;\n readonly status?: FluxColor;\n readonly type?: FluxPressableType;\n readonly tabindex?: string | number;\n readonly href?: string;\n readonly rel?: string;\n readonly target?: string;\n readonly to?: FluxTo;\n }>();\n\n const color = computed(() => fallbackColors[unref(colorSeed) % fallbackColors.length]);\n const colorSeed = computed(() => {\n let seed = 6;\n\n if (fallbackInitials) {\n for (let i = 0; i < fallbackInitials.length; ++i) {\n seed ^= fallbackInitials.charCodeAt(i);\n }\n } else if (fallbackIcon) {\n for (let i = 0; i < fallbackIcon.length; ++i) {\n seed ^= fallbackIcon.charCodeAt(i);\n }\n }\n\n return seed;\n });\n</script>\n","<template>\n <FluxPressable\n :class=\"clsx(\n color === 'gray' && $style.badgeGray,\n color === 'primary' && $style.badgePrimary,\n color === 'danger' && $style.badgeDanger,\n color === 'info' && $style.badgeInfo,\n color === 'success' && $style.badgeSuccess,\n color === 'warning' && $style.badgeWarning\n )\"\n :component-type=\"type\"\n :tabindex=\"tabindex\"\n :href=\"href\"\n :rel=\"rel\"\n :target=\"target\"\n :to=\"to\"\n @click=\"$emit('click', $event)\"\n @mouseenter=\"$emit('mouseenter', $event)\"\n @mouseleave=\"$emit('mouseleave', $event)\">\n <FluxSpinner\n v-if=\"isLoading\"\n :class=\"$style.badgeIcon\"\n :size=\"16\"/>\n\n <span\n v-else-if=\"dot\"\n :class=\"$style.badgeDot\"/>\n\n <FluxIcon\n v-else-if=\"icon\"\n :class=\"$style.badgeIcon\"\n :size=\"16\"\n :name=\"icon\"/>\n\n <span :class=\"$style.badgeLabel\">\n {{ label }}\n </span>\n\n <button\n v-if=\"type === 'none' && isDeletable\"\n :class=\"$style.badgeClose\"\n type=\"button\"\n @click=\"onDeleteClick()\">\n <FluxIcon name=\"xmark\"/>\n </button>\n </FluxPressable>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxButtonEmits, FluxColor, FluxIconName, FluxPressableType, FluxTo } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import FluxIcon from './FluxIcon.vue';\n import FluxPressable from './FluxPressable.vue';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/Badge.module.scss';\n\n const emit = defineEmits<FluxButtonEmits & {\n delete: [];\n }>();\n\n const {\n color = 'gray',\n type = 'none'\n } = defineProps<{\n readonly color?: FluxColor;\n readonly dot?: boolean;\n readonly icon?: FluxIconName;\n readonly isDeletable?: boolean;\n readonly isLoading?: boolean;\n readonly label: string;\n readonly type?: FluxPressableType;\n readonly tabindex?: string | number;\n readonly href?: string;\n readonly rel?: string;\n readonly target?: string;\n readonly to?: FluxTo;\n }>();\n\n function onDeleteClick(): void {\n emit('delete');\n }\n</script>\n","<script lang=\"ts\">\n import { flattenVNodeTree, orange600, pink600, purple600 } from '@flux-ui/internals';\n import { clsx } from 'clsx';\n import { cloneVNode, defineComponent, Fragment, h, PropType } from 'vue';\n import $style from '$flux/css/component/Visual.module.scss';\n\n export default defineComponent({\n inheritAttrs: false,\n props: {\n colors: {default: [purple600, 'transparent', orange600, 'transparent', pink600, 'transparent', purple600], type: Array as PropType<string[]>},\n duration: {default: 9, type: Number},\n offset: {default: 1, type: Number},\n radius: {default: undefined, type: [String, Number] as PropType<string | number>},\n width: {default: 2, type: Number}\n },\n setup(props, {attrs, slots}) {\n return () => h(\n Fragment,\n flattenVNodeTree(slots.default?.() ?? []).map(vnode => cloneVNode(vnode, {\n ...attrs,\n class: clsx(\n attrs.class as string,\n $style.borderShine\n ),\n style: {\n '--shine-colors': props.colors.join(', '),\n '--shine-duration': props.duration,\n '--shine-offset': props.offset,\n '--shine-radius': props.radius,\n '--shine-width': props.width\n }\n }))\n );\n }\n });\n</script>\n","<template>\n <div\n ref=\"popup\"\n :style=\"{\n '--x': `${state.x}px`,\n '--y': `${state.y}px`,\n '--width': state.width ? `${state.width}px` : undefined\n }\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { isHtmlElement } from '@basmilius/utils';\n import { useMutationObserver } from '@flux-ui/internals';\n import type { FluxDirection } from '@flux-ui/types';\n import { ComponentPublicInstance, onMounted, onUnmounted, reactive, ref, unref, useTemplateRef, watchEffect } from 'vue';\n\n const {\n anchor,\n direction = 'vertical',\n margin = 12,\n position,\n useAnchorWidth\n } = defineProps<{\n readonly anchor?: ComponentPublicInstance | HTMLElement | null;\n readonly direction?: FluxDirection;\n readonly margin?: number;\n readonly position?:\n | 'top' | 'top-left' | 'top-right'\n | 'left' | 'left-top' | 'left-bottom'\n | 'right' | 'right-top' | 'right-bottom'\n | 'bottom' | 'bottom-left' | 'bottom-right';\n readonly useAnchorWidth?: boolean;\n }>();\n\n defineSlots<{\n default(): any;\n }>();\n\n const anchorRef = ref<HTMLElement>();\n const popupRef = useTemplateRef('popup');\n\n const state = reactive({\n x: 0,\n y: 0,\n width: null as number | null\n });\n\n onMounted(() => {\n window.addEventListener('resize', onResize, {passive: true});\n window.addEventListener('scroll', onScroll, {capture: true, passive: true});\n });\n\n onUnmounted(() => {\n window.removeEventListener('resize', onResize);\n window.removeEventListener('scroll', onScroll);\n });\n\n useMutationObserver(popupRef, () => {\n reposition();\n }, {childList: true, subtree: true});\n\n function reposition(): void {\n const anchor = unref(anchorRef);\n const popup = unref(popupRef);\n\n if (!anchor || !popup) {\n return;\n }\n\n const {x, y, height, width} = anchor.getBoundingClientRect();\n const {height: popupHeight, width: popupWidth} = popup.getBoundingClientRect();\n\n let px: number,\n py: number;\n\n switch (position) {\n case 'top':\n px = x + width / 2 - popupWidth / 2;\n py = y - popupHeight - margin;\n break;\n\n case 'top-left':\n px = x;\n py = y - popupHeight - margin;\n break;\n\n case 'top-right':\n px = x - popupWidth + width;\n py = y - popupHeight - margin;\n break;\n\n case 'left':\n px = x - popupWidth - margin;\n py = y + height / 2 - popupHeight / 2;\n break;\n\n case 'left-top':\n px = x - popupWidth - margin;\n py = y;\n break;\n\n case 'left-bottom':\n px = x - popupWidth - margin;\n py = y + height - popupHeight;\n break;\n\n case 'right':\n px = x + width + margin;\n py = y + height / 2 - popupHeight / 2;\n break;\n\n case 'right-top':\n px = x + width + margin;\n py = y;\n break;\n\n case 'right-bottom':\n px = x + width + margin;\n py = y + height - popupHeight;\n break;\n\n case 'bottom':\n px = x + width / 2 - popupWidth / 2;\n py = y + height + margin;\n break;\n\n case 'bottom-left':\n px = x;\n py = y + height + margin;\n break;\n\n case 'bottom-right':\n px = x - popupWidth + width;\n py = y + height + margin;\n break;\n\n default:\n if (direction === 'horizontal') {\n px = x + width + margin;\n py = y + height / 2 - popupHeight / 2;\n\n if (px + popupWidth > innerWidth) {\n px = x - popupWidth - margin;\n }\n } else {\n px = x + width / 2 - popupWidth / 2;\n py = y + height + margin;\n\n if (py + popupHeight > innerHeight) {\n py = y - popupHeight - margin;\n }\n }\n break;\n }\n\n state.x = px;\n state.y = py;\n }\n\n function resize(): void {\n const anchor = unref(anchorRef);\n\n if (!anchor) {\n return;\n }\n\n const {width} = anchor.getBoundingClientRect();\n state.width = useAnchorWidth ? width : null;\n }\n\n function onResize(): void {\n resize();\n reposition();\n }\n\n function onScroll(): void {\n reposition();\n }\n\n watchEffect(() => {\n if (!anchor || (!isHtmlElement(anchor) && !anchor.$el)) {\n return;\n }\n\n anchorRef.value = isHtmlElement(anchor) ? anchor : anchor.$el;\n\n requestAnimationFrame(resize);\n requestAnimationFrame(reposition);\n });\n</script>\n","<template>\n <div\n :class=\"clsx(\n disabled ? $style.formInputDisabled : $style.formInputEnabled,\n isSecondary && $style.isSecondary\n )\"\n :aria-disabled=\"disabled ? true : undefined\">\n <input\n ref=\"input\"\n :class=\"clsx(\n $style.formInputNative,\n (!!iconTrailing || type === 'password') && $style.formInputNativeHasIconTrailing,\n !!iconLeading && $style.formInputNativeHasIconLeading\n )\"\n :id=\"id\"\n :autocomplete=\"autoComplete\"\n :autofocus=\"autoFocus\"\n :aria-disabled=\"disabled ? true : undefined\"\n :disabled=\"disabled\"\n :max=\"max\"\n :maxlength=\"maxLength\"\n :min=\"min\"\n :placeholder=\"placeholder\"\n :readonly=\"isReadonly\"\n :step=\"step\"\n :type=\"nativeType\"\n :value=\"localValue\"\n @blur=\"onBlur()\"\n @focus=\"onFocus()\"\n @input=\"onInput\"\n @keydown=\"onKeyDown\">\n\n <FluxIcon\n v-if=\"iconLeading\"\n :class=\"$style.formInputIconLeading\"\n :name=\"iconLeading\"\n :size=\"18\"/>\n\n <FluxIcon\n v-if=\"type === 'password'\"\n :class=\"$style.formInputIconPasswordToggle\"\n :name=\"nativeType === 'password' ? 'eye' : 'eye-slash'\"\n :size=\"18\"\n @click=\"passwordTypeToggle()\"/>\n\n <FluxIcon\n v-else-if=\"iconTrailing\"\n :class=\"$style.formInputIconTrailing\"\n :name=\"iconTrailing\"\n :size=\"18\"/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { unrefTemplateElement } from '@flux-ui/internals';\n import type { FluxAutoCompleteType, FluxIconName, FluxInputMask, FluxInputType } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { DateTime } from 'luxon';\n import { ref, toRef, unref, useTemplateRef, watch } from 'vue';\n import { useDisabled, useFormFieldInjection } from '$flux/composable';\n import { inputMask } from '$flux/data';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n const emit = defineEmits<{\n blur: [];\n focus: [];\n showPicker: [];\n }>();\n\n const modelValue = defineModel<object | string | number | null>({\n default: ''\n });\n\n const {\n autoFocus = false,\n disabled: componentDisabled,\n pattern,\n type = 'text'\n } = defineProps<{\n readonly autoComplete?: FluxAutoCompleteType;\n readonly autoFocus?: boolean;\n readonly iconLeading?: FluxIconName;\n readonly iconTrailing?: FluxIconName;\n readonly disabled?: boolean;\n readonly isReadonly?: boolean;\n readonly isSecondary?: boolean;\n readonly max?: string | number;\n readonly maxLength?: number;\n readonly min?: string | number;\n readonly pattern?: FluxInputMask;\n readonly placeholder?: string;\n readonly step?: number;\n readonly type?: FluxInputType;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const inputRef = useTemplateRef<HTMLInputElement>('input');\n const {id} = useFormFieldInjection();\n\n const localValue = ref<string | null>(null);\n const nativeType = ref(type);\n\n function blur(): void {\n unrefTemplateElement(inputRef)?.blur();\n }\n\n function focus(): void {\n unrefTemplateElement(inputRef)?.focus();\n }\n\n function passwordTypeToggle(): void {\n if (type !== 'password') {\n return;\n }\n\n nativeType.value = unref(nativeType) === 'password' ? 'text' : 'password';\n }\n\n function onBlur(): void {\n emit('blur');\n }\n\n function onFocus(): void {\n emit('focus');\n }\n\n function onInput(evt: Event): void {\n const value = (evt.target as HTMLInputElement).value;\n\n switch (type) {\n case 'date':\n case 'datetime-local':\n case 'month':\n case 'time':\n case 'week':\n const dateTime = DateTime.fromISO(value);\n\n if (!dateTime.isValid) {\n return;\n }\n\n modelValue.value = dateTime;\n break;\n\n case 'number':\n modelValue.value = Number(value);\n break;\n\n default:\n modelValue.value = value;\n break;\n }\n }\n\n function onKeyDown(evt: KeyboardEvent): void {\n if (!['date', 'datetime-local', 'month', 'week'].includes(type)) {\n return;\n }\n\n if (evt.key === ' ') {\n emit('showPicker');\n evt.preventDefault();\n }\n }\n\n watch([modelValue, () => type], ([modelValue, type]) => {\n if (!modelValue && modelValue !== 0) {\n localValue.value = null;\n return;\n }\n\n if (DateTime.isDateTime(modelValue)) {\n const iso = modelValue.toISO()!;\n\n switch (type) {\n case 'date':\n localValue.value = iso.substring(0, 10);\n break;\n\n case 'datetime-local':\n localValue.value = iso.substring(0, 16);\n break;\n\n case 'time':\n localValue.value = iso.substring(11, 16);\n break;\n\n default:\n localValue.value = iso;\n break;\n }\n\n return;\n }\n\n localValue.value = modelValue.toString();\n }, {immediate: true});\n\n watch([inputRef, () => pattern, localValue], ([input, pattern, value], __, onCleanup) => {\n if (!input || !pattern) {\n return;\n }\n\n const mask = inputMask[pattern](input);\n\n if (value) {\n mask.value = value;\n localValue.value = mask.value;\n }\n\n onCleanup(() => mask.destroy());\n }, {immediate: true});\n\n watch(() => type, type => nativeType.value = type);\n\n defineExpose({\n blur,\n focus\n });\n</script>\n","<template>\n <FluxMenuGroup>\n <div\n v-if=\"isSearchable\"\n :class=\"$style.filterSearch\">\n <FluxFormInput\n v-model=\"modelSearch\"\n auto-complete=\"off\"\n is-secondary\n icon-leading=\"magnifying-glass\"\n :placeholder=\"searchPlaceholder\"\n type=\"search\"/>\n </div>\n\n <FluxMenuItem\n v-if=\"isLoading && options.length === 0\"\n disabled\n is-loading/>\n\n <template\n v-else\n v-for=\"option of options\">\n <FluxMenuSubHeader\n v-if=\"isFluxFilterOptionHeader(option)\"\n :label=\"option.title\"/>\n\n <FluxMenuItem\n v-else-if=\"isFluxFilterOptionItem(option)\"\n is-selectable\n :is-selected=\"selected.includes(option.value)\"\n :label=\"option.label\"\n @click=\"select(option)\"/>\n </template>\n </FluxMenuGroup>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFilterOptionItem, FluxFilterOptionRow, FluxFilterValueSingle } from '@flux-ui/types';\n import { isFluxFilterOptionHeader, isFluxFilterOptionItem } from '$flux/data';\n import FluxMenuItem from '$flux/component/FluxMenuItem.vue';\n import FluxFormInput from '$flux/component/FluxFormInput.vue';\n import FluxMenuGroup from '$flux/component/FluxMenuGroup.vue';\n import FluxMenuSubHeader from '$flux/component/FluxMenuSubHeader.vue';\n import $style from '$flux/css/component/Filter.module.scss';\n\n const emit = defineEmits<{\n select: [FluxFilterValueSingle];\n }>();\n\n const modelSearch = defineModel<string>('searchQuery', {\n default: ''\n });\n\n defineProps<{\n readonly isLoading?: boolean;\n readonly isSearchable?: boolean;\n readonly options: FluxFilterOptionRow[];\n readonly selected: FluxFilterValueSingle[];\n readonly searchPlaceholder?: string;\n }>();\n\n function select(option: FluxFilterOptionItem): void {\n emit('select', option.value);\n }\n</script>\n","<template>\n <nav\n ref=\"element\"\n :class=\"isLarge ? $style.menuLarge : $style.menuNormal\"\n role=\"menu\"\n aria-orientation=\"vertical\">\n <slot/>\n </nav>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useFocusZone } from '@flux-ui/internals';\n import { useTemplateRef } from 'vue';\n import $style from '$flux/css/component/Menu.module.scss';\n\n defineProps<{\n readonly isLarge?: boolean;\n }>();\n\n defineSlots<{\n default(): any;\n }>();\n\n const elementRef = useTemplateRef('element');\n\n useFocusZone(elementRef, {\n direction: 'vertical'\n });\n</script>\n","<template>\n <FluxPressable\n :class=\"clsx(\n color === 'gray' && $style.tagGray,\n color === 'primary' && $style.tagPrimary,\n color === 'danger' && $style.tagDanger,\n color === 'info' && $style.tagInfo,\n color === 'success' && $style.tagSuccess,\n color === 'warning' && $style.tagWarning\n )\"\n :component-type=\"type\"\n :tabindex=\"tabindex\"\n :href=\"href\"\n :rel=\"rel\"\n :target=\"target\"\n :to=\"to\"\n @click=\"$emit('click', $event)\"\n @mouseenter=\"$emit('mouseenter', $event)\"\n @mouseleave=\"$emit('mouseleave', $event)\">\n <FluxSpinner\n v-if=\"isLoading\"\n :class=\"$style.tagIcon\"\n :size=\"16\"/>\n\n <span\n v-else-if=\"dot\"\n :class=\"$style.tagDot\"/>\n\n <FluxIcon\n v-else-if=\"icon\"\n :class=\"$style.tagIcon\"\n :name=\"icon\"\n :size=\"16\"/>\n\n <span :class=\"$style.tagLabel\">\n {{ label }}\n </span>\n\n <button\n v-if=\"!isClickable && isDeletable\"\n :class=\"$style.tagClose\"\n type=\"button\"\n @click=\"onDeleteClick()\">\n <FluxIcon name=\"xmark\"/>\n </button>\n </FluxPressable>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxButtonEmits, FluxColor, FluxIconName, FluxPressableType, FluxTo } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import FluxIcon from './FluxIcon.vue';\n import FluxPressable from './FluxPressable.vue';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/Badge.module.scss';\n\n const emit = defineEmits<FluxButtonEmits & {\n delete: [];\n }>();\n\n const {\n color = 'gray',\n isClickable\n } = defineProps<{\n readonly color?: FluxColor;\n readonly dot?: boolean;\n readonly icon?: FluxIconName;\n readonly isClickable?: boolean;\n readonly isDeletable?: boolean;\n readonly isLoading?: boolean;\n readonly label: string;\n readonly type?: FluxPressableType;\n readonly tabindex?: string | number;\n readonly href?: string;\n readonly rel?: string;\n readonly target?: string;\n readonly to?: FluxTo;\n }>();\n\n function onDeleteClick(): void {\n emit('delete');\n }\n</script>\n","<template>\n <Anchor\n ref=\"anchor\"\n :=\"$attrs\"\n :class=\"clsx(\n $style.formSelect,\n disabled && $style.isDisabled,\n isPopupOpen && $style.isFocused,\n isSearchable && $style.isSearchable\n )\"\n :id=\"id\"\n :aria-disabled=\"disabled ? true : undefined\"\n tabindex=\"0\"\n tag-name=\"div\"\n @click=\"toggle()\"\n @keydown=\"onKeyDown\"\n @keyup=\"onKeyUp\">\n <template v-if=\"!isMultiple && selected[0]\">\n <FluxMenuItem\n :class=\"$style.formSelectSelected\"\n :command=\"selected[0].command\"\n :command-icon=\"selected[0].commandIcon\"\n :icon-leading=\"selected[0].icon\"\n :label=\"selected[0].label\"\n tabindex=\"-1\"/>\n </template>\n\n <template v-else-if=\"isMultiple && selected[0]\">\n <FluxTag\n v-for=\"option of selected\"\n :key=\"option.value ?? 'null option'\"\n :label=\"option.label\"\n is-deletable\n @delete=\"deselect(option.value)\"/>\n </template>\n\n <template v-else-if=\"placeholder\">\n <span :class=\"$style.formSelectPlaceholder\">\n {{ placeholder }}\n </span>\n </template>\n\n <FluxSpinner\n v-if=\"isLoading\"\n :class=\"$style.formSelectIcon\"\n :size=\"16\"/>\n\n <FluxIcon\n v-else\n :class=\"$style.formSelectIcon\"\n name=\"angle-down\"/>\n </Anchor>\n\n <Teleport to=\"body\">\n <FluxFadeTransition>\n <AnchorPopup\n v-if=\"isPopupOpen && !disabled\"\n ref=\"anchorPopup\"\n :class=\"clsx(\n $style.formSelectPopup,\n isKeyboardAction && $style.isKeyboardAction,\n isSearchable && $style.isSearchable\n )\"\n :anchor=\"anchorRef\"\n direction=\"vertical\"\n use-anchor-width>\n <FluxFormInput\n v-if=\"isSearchable\"\n v-model=\"modelSearch\"\n ref=\"searchInputElement\"\n auto-complete=\"off\"\n :class=\"$style.formSelectInput\"\n type=\"search\"\n icon-trailing=\"magnifying-glass\"\n :placeholder=\"translate('flux.search')\"\n @keydown=\"onKeyDown\"/>\n\n <FluxMenu v-if=\"!isLoading && options.length === 0\">\n <FluxMenuSubHeader :label=\"translate('flux.noItems')\"/>\n </FluxMenu>\n\n <FluxMenu v-else>\n <template\n v-for=\"([item, subItems], index) of options\"\n :key=\"`group-${index}`\">\n <FluxMenuGroup>\n <FluxMenuSubHeader\n v-if=\"isFluxFormSelectGroup(item)\"\n :icon-leading=\"item.icon\"\n :label=\"item.label\"/>\n\n <template v-for=\"(subItem, index) of subItems\">\n <FluxMenuItem\n v-if=\"isFluxFormSelectOption(subItem)\"\n ref=\"optionElements\"\n :key=\"index\"\n :command=\"subItem.command\"\n :command-icon=\"subItem.commandIcon\"\n :icon-leading=\"subItem.icon\"\n :is-active=\"!!selected.find(so => so.value === subItem.value)\"\n :is-highlighted=\"highlightedId === subItem.value\"\n :label=\"subItem.label\"\n type=\"button\"\n @click=\"select(subItem.value)\"/>\n </template>\n </FluxMenuGroup>\n\n <FluxMenuItem\n v-if=\"isFluxFormSelectOption(item)\"\n ref=\"optionElements\"\n :key=\"`item-${index}`\"\n :command=\"item.command\"\n :command-icon=\"item.commandIcon\"\n :icon-leading=\"item.icon\"\n :is-active=\"!!selected.find(so => so.value === item.value)\"\n :is-highlighted=\"highlightedId === item.value\"\n :label=\"item.label\"\n type=\"button\"\n @click=\"select(item.value)\"/>\n </template>\n </FluxMenu>\n </AnchorPopup>\n </FluxFadeTransition>\n </Teleport>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { unrefTemplateElement, useClickOutside } from '@flux-ui/internals';\n import type { FluxFormSelectOption, FluxFormSelectOptions } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { ComponentPublicInstance, computed, nextTick, ref, toRef, unref, useTemplateRef, watch } from 'vue';\n import { useDisabled, useFormFieldInjection } from '$flux/composable';\n import { useTranslate } from '$flux/composable/private';\n import { isFluxFormSelectGroup, isFluxFormSelectOption } from '$flux/data';\n import { FluxFadeTransition } from '$flux/transition';\n import FluxFormInput from '$flux/component/FluxFormInput.vue';\n import FluxIcon from '$flux/component/FluxIcon.vue';\n import FluxMenu from '$flux/component/FluxMenu.vue';\n import FluxMenuGroup from '$flux/component/FluxMenuGroup.vue';\n import FluxMenuItem from '$flux/component/FluxMenuItem.vue';\n import FluxMenuSubHeader from '$flux/component/FluxMenuSubHeader.vue';\n import FluxSpinner from '$flux/component/FluxSpinner.vue';\n import FluxTag from '$flux/component/FluxTag.vue';\n import Anchor from './Anchor.vue';\n import AnchorPopup from './AnchorPopup.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n const INITIAL_HIGHLIGHTED_INDEX = -1;\n\n const emit = defineEmits<{\n keyDown: [KeyboardEvent];\n deselect: [string | number | null];\n select: [string | number | null];\n search: [string];\n close: [];\n open: [];\n }>();\n\n const modelSearch = defineModel<string>('searchQuery', {\n default: ''\n });\n\n defineOptions({\n inheritAttrs: false\n });\n\n const {\n disabled: componentDisabled,\n isMultiple,\n options,\n selected\n } = defineProps<{\n readonly disabled?: boolean;\n readonly isLoading?: boolean;\n readonly isMultiple?: boolean;\n readonly isSearchable?: boolean;\n readonly options: FluxFormSelectOptions[];\n readonly placeholder?: string;\n readonly selected: FluxFormSelectOption[];\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const {id} = useFormFieldInjection();\n const translate = useTranslate();\n\n const anchorRef = useTemplateRef<ComponentPublicInstance>('anchor');\n const anchorPopupRef = useTemplateRef('anchorPopup');\n const optionElementRefs = useTemplateRef<typeof FluxMenuItem[]>('optionElements');\n const searchInputElementRef = useTemplateRef<ComponentPublicInstance<typeof FluxFormInput>>('searchInputElement');\n\n const highlightedIndex = ref(INITIAL_HIGHLIGHTED_INDEX);\n const isKeyboardAction = ref(false);\n const isPopupOpen = ref(false);\n\n const focusElement = computed(() => unrefTemplateElement(searchInputElementRef) ?? unrefTemplateElement(anchorRef));\n const highlightedId = computed(() => unref(rawOptions)[unref(highlightedIndex)]?.value);\n const rawOptions = computed(() => options.map(group => group[1]).flat());\n\n useClickOutside([anchorRef, anchorPopupRef], isPopupOpen, () => isPopupOpen.value = false);\n useClickOutside(anchorRef, isPopupOpen, () => unref(focusElement)?.focus());\n\n function deselect(id: string | number | null): void {\n emit('deselect', id);\n\n nextTick(() => unref(focusElement)?.focus());\n }\n\n function select(id: string | number | null): void {\n emit('select', id);\n\n !isMultiple && (isPopupOpen.value = false);\n\n highlightedIndex.value = INITIAL_HIGHLIGHTED_INDEX;\n modelSearch.value = '';\n\n nextTick(() => unref(focusElement)?.focus());\n }\n\n function toggle(): void {\n if (unref(disabled)) {\n return;\n }\n\n isPopupOpen.value = !unref(isPopupOpen);\n }\n\n function onKeyDown(evt: KeyboardEvent): void {\n emit('keyDown', evt);\n\n if (!unref(isPopupOpen)) {\n if (evt.key === 'Enter') {\n isPopupOpen.value = true;\n }\n\n return;\n }\n\n isKeyboardAction.value = true;\n\n if (unref(highlightedIndex) === INITIAL_HIGHLIGHTED_INDEX && ['ArrowDown', 'ArrowUp'].includes(evt.key)) {\n const options = unref(optionElementRefs);\n const selectedIndex = options?.findIndex(o => 'isActive' in o.$props && o.$props.isActive);\n\n highlightedIndex.value = selectedIndex ?? INITIAL_HIGHLIGHTED_INDEX;\n }\n\n switch (evt.key) {\n case 'ArrowUp':\n highlightedIndex.value = Math.max(0, unref(highlightedIndex) - 1);\n break;\n\n case 'ArrowDown':\n highlightedIndex.value = Math.min(unref(rawOptions).length - 1, unref(highlightedIndex) + 1);\n break;\n\n case 'Backspace':\n const search = unref(modelSearch);\n\n if (search.length > 0 || selected.length === 0) {\n return;\n }\n\n deselect(selected[selected.length - 1].value);\n break;\n\n case 'Enter':\n const id = unref(highlightedId);\n id && select(id);\n break;\n\n case 'Escape':\n isPopupOpen.value = false;\n break;\n\n case 'Tab':\n isPopupOpen.value = false;\n return;\n\n default:\n if (evt.key.match(/[a-z]/)) {\n highlightedIndex.value = unref(rawOptions).findIndex(o => o.label.toLowerCase().startsWith(evt.key));\n } else {\n highlightedIndex.value = -1;\n }\n return;\n }\n\n evt.preventDefault();\n }\n\n function onKeyUp(): void {\n isKeyboardAction.value = false;\n }\n\n watch(highlightedIndex, highlightedIndex => {\n const options = unref(optionElementRefs)!;\n options[highlightedIndex]?.$el.scrollIntoView({\n block: 'center'\n });\n });\n\n watch(isPopupOpen, isPopupOpen => {\n if (!isPopupOpen) {\n emit('close');\n return;\n }\n\n nextTick(() => {\n const searchInput = unref(searchInputElementRef);\n searchInput?.focus();\n });\n\n nextTick(() => {\n const options = unref(optionElementRefs);\n\n if (!options || isMultiple) {\n return;\n }\n\n const selectedIndex = options.findIndex(o => 'isActive' in o.$props && o.$props.isActive);\n const option = options[selectedIndex];\n\n if (!option) {\n return;\n }\n\n option.$el.scrollIntoView({\n block: 'center'\n });\n });\n\n emit('open');\n });\n\n watch(modelSearch, searchQuery => emit('search', searchQuery));\n\n watch([() => options, isPopupOpen], () => highlightedIndex.value = INITIAL_HIGHLIGHTED_INDEX);\n</script>\n","<template>\n <div :class=\"$style.ticks\">\n <template\n v-for=\"tick of ticks\"\n :key=\"tick\">\n <div\n :class=\"$style.tickLarge\"\n :style=\"{\n '--position': (tick - lower) / (upper - lower)\n }\">\n <span>{{ tick }}</span>\n </div>\n </template>\n\n <template\n v-for=\"tick of smallTicks\"\n :key=\"tick\">\n <div\n :class=\"$style.tickSmall\"\n :style=\"{\n '--position': (tick - lower) / (upper - lower)\n }\"/>\n </template>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { generateStepTicks } from '@basmilius/utils';\n import { computed } from 'vue';\n import $style from '$flux/css/component/primitive/Slider.module.scss';\n\n const {\n lower,\n upper\n } = defineProps<{\n readonly lower: number;\n readonly upper: number;\n }>();\n\n const smallTicks = computed(() => generateStepTicks(lower, upper, 50, true).filter(s => !ticks.value.includes(s)));\n const ticks = computed(() => generateStepTicks(lower, upper, 5));\n</script>\n","<template>\n <div\n ref=\"root\"\n :class=\"clsx(\n $style.slider,\n disabled && $style.isDisabled,\n isDragging && $style.isDragging\n )\"\n role=\"slider\"\n :aria-disabled=\"disabled ? true : undefined\"\n @pointerdown=\"onPointerDown\">\n <FluxTicks\n v-if=\"isTicksVisible\"\n :lower=\"min\"\n :upper=\"max\"/>\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { unrefTemplateElement } from '@flux-ui/internals';\n import { clsx } from 'clsx';\n import { onMounted, onUnmounted, toRef, unref, useTemplateRef, watch } from 'vue';\n import { useDisabled } from '$flux/composable';\n import FluxTicks from '$flux/component/FluxTicks.vue';\n import $style from '$flux/css/component/primitive/Slider.module.scss';\n\n const emit = defineEmits<{\n dragging: [boolean];\n update: [number];\n }>();\n\n const {\n disabled: componentDisabled,\n isDragging\n } = defineProps<{\n readonly disabled?: boolean;\n readonly isDragging?: boolean;\n readonly isTicksVisible?: boolean;\n readonly max: number;\n readonly min: number;\n readonly step: number;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const rootRef = useTemplateRef('root');\n\n onMounted(() => {\n document.addEventListener('pointermove', onPointerMove);\n document.addEventListener('pointerup', onPointerUp, {passive: true});\n });\n\n onUnmounted(() => {\n document.removeEventListener('pointermove', onPointerMove);\n document.removeEventListener('pointerup', onPointerUp);\n });\n\n function onPointerDown(evt: PointerEvent): void {\n if (unref(disabled)) {\n return;\n }\n\n emit('dragging', true);\n requestAnimationFrame(() => onPointerMove(evt));\n }\n\n function onPointerMove(evt: PointerEvent): void {\n const root = unrefTemplateElement(rootRef);\n\n if (!isDragging || !root) {\n return;\n }\n\n let {left, width} = root.getBoundingClientRect();\n left += 6; // margin.\n width -= 12; // margin times two.\n\n emit('update', Math.max(0, Math.min(1, (evt.pageX - left) / width)));\n evt.preventDefault();\n }\n\n function onPointerUp(): void {\n emit('dragging', false);\n }\n\n watch(() => isDragging, () => emit('dragging', isDragging));\n</script>\n","<template>\n <button\n :class=\"clsx(\n $style.sliderThumb,\n disabled && $style.isDisabled,\n isDragging && $style.isDragging\n )\"\n :style=\"{\n left: `${position * 100}%`\n }\"\n :aria-disabled=\"disabled ? true : undefined\"\n :tabindex=\"disabled ? -1 : 0\"\n type=\"button\"\n @keydown=\"onKeyDown\"\n @pointerdown=\"$emit('grab', $event)\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { clsx } from 'clsx';\n import { toRef, unref } from 'vue';\n import { useDisabled } from '$flux/composable';\n import $style from '$flux/css/component/primitive/Slider.module.scss';\n\n const emit = defineEmits<{\n decrement: [];\n grab: [PointerEvent];\n increment: [];\n }>();\n\n const {\n disabled: componentDisabled\n } = defineProps<{\n readonly disabled?: boolean;\n readonly isDragging?: boolean;\n readonly position: number;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n\n function onKeyDown(evt: KeyboardEvent): void {\n if (unref(disabled)) {\n return;\n }\n\n switch (evt.key) {\n case 'ArrowDown':\n case 'ArrowLeft':\n emit('decrement');\n break;\n\n case 'ArrowUp':\n case 'ArrowRight':\n emit('increment');\n break;\n\n default:\n return;\n }\n\n evt.preventDefault();\n }\n</script>\n","import { flattenVNodeTree } from '@flux-ui/internals';\nimport { Component, getCurrentInstance, RenderFunction, Slots } from 'vue';\nimport { Comment, h, onMounted, onUnmounted, SetupContext, Teleport, VNode } from 'vue';\nimport { registerDialog, useFluxStore } from '$flux/data';\n\ntype Emit = SetupContext<['close']>['emit'];\ntype Props = {\n readonly isCloseable?: boolean;\n readonly viewKey?: string;\n};\n\nexport default function (attrs: object, props: Props, emit: Emit, slots: Slots, className: string, transition: Component): RenderFunction {\n const instance = getCurrentInstance();\n let unregister: Function | null = null;\n let zIndex = 0;\n\n onMounted(() => {\n window.addEventListener('keydown', onKeyDown);\n });\n\n onUnmounted(() => {\n window.removeEventListener('keydown', onKeyDown);\n unregister?.();\n });\n\n function onKeyDown(evt: KeyboardEvent): void {\n if (evt.key !== 'Escape' || !unregister || !props.isCloseable) {\n return;\n }\n\n evt.preventDefault();\n evt.stopPropagation();\n emit('close');\n }\n\n return () => {\n const {dialogCount} = useFluxStore();\n\n const children = flattenVNodeTree(slots.default?.() ?? []);\n const isVisible = children.length > 0 && children.some(child => child.type !== Comment);\n const content: VNode[] = [];\n\n if (isVisible) {\n if (!unregister) {\n unregister = registerDialog();\n zIndex = dialogCount + 1000;\n }\n\n content.push(h('div', {\n key: props.viewKey,\n class: className,\n style: {zIndex}\n }, children));\n } else {\n unregister?.();\n unregister = null;\n }\n\n return h(Teleport, {disabled: content.length === 0, to: instance?.appContext.app._container}, [\n h(transition, attrs, {\n default: () => content\n })\n ]);\n };\n}\n","import type { DateTime } from 'luxon';\nimport { useTranslate } from '$flux/composable/private';\n\nexport default function (start: DateTime, end: DateTime, preventCustom: boolean = false): string {\n const translate = useTranslate();\n\n if (start.day === end.day && start.month === end.month && start.year === end.year) {\n return start.toLocaleString({\n day: 'numeric',\n month: 'short',\n year: 'numeric'\n });\n }\n\n if (start.month === end.month && start.year === end.year) {\n const startStr = start.toLocaleString({\n day: 'numeric'\n });\n\n const endStr = end.toLocaleString({\n day: 'numeric',\n month: 'short',\n year: 'numeric'\n });\n\n return `${startStr} – ${endStr}`;\n }\n\n if (start.year === end.year) {\n const startStr = start.toLocaleString({\n day: 'numeric',\n month: 'short'\n });\n\n const endStr = end.toLocaleString({\n day: 'numeric',\n month: 'short',\n year: 'numeric'\n });\n\n return `${startStr} – ${endStr}`;\n }\n\n if (preventCustom) {\n const startStr = start.toLocaleString({\n day: 'numeric',\n month: 'short',\n year: 'numeric'\n });\n\n const endStr = end.toLocaleString({\n day: 'numeric',\n month: 'short',\n year: 'numeric'\n });\n\n return `${startStr} – ${endStr}`;\n }\n\n return translate('flux.customPeriod');\n}\n","<template>\n <FluxMenuItem\n :command=\"valueLabel\"\n command-icon=\"angle-right\"\n :command-loading=\"isLoading\"\n :icon-leading=\"item.icon\"\n :label=\"item.label\"\n type=\"button\"\n @click=\"onClick\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFilterItem, FluxFilterValue } from '@flux-ui/types';\n import { computed, ref, unref, watch } from 'vue';\n import { useLoaded } from '$flux/composable/private';\n import FluxMenuItem from '$flux/component/FluxMenuItem.vue';\n\n const emit = defineEmits<{\n click: [MouseEvent];\n }>();\n\n const {\n item,\n value\n } = defineProps<{\n readonly item: FluxFilterItem;\n readonly value: FluxFilterValue;\n }>();\n\n const {isLoading, loaded} = useLoaded();\n const getValueLabel = computed(() => loaded(item.getValueLabel));\n\n const valueLabel = ref<string>();\n\n function onClick(evt: MouseEvent): void {\n emit('click', evt);\n }\n\n watch(() => item, async () => {\n valueLabel.value = await unref(getValueLabel)(value) ?? undefined;\n }, {deep: true, immediate: true});\n</script>\n","import { formatNumber } from '@basmilius/utils';\nimport { flattenVNodeTree, getComponentName, getComponentProps } from '@flux-ui/internals';\nimport type { FluxFilterBase, FluxFilterDateEntry, FluxFilterDateRangeEntry, FluxFilterItem, FluxFilterOptionEntry, FluxFilterOptionItem, FluxFilterOptionRow, FluxFilterOptionsEntry, FluxFilterRangeEntry, FluxFilterValue, FluxFilterValueSingle } from '@flux-ui/types';\nimport { camelCase } from 'lodash-es';\nimport { DateTime } from 'luxon';\nimport { computed, defineComponent, h, isVNode, unref, VNode } from 'vue';\nimport { useTranslate } from '$flux/composable/private';\nimport { FluxTranslate, isFluxFilterOptionItem } from '$flux/data';\nimport { createLabelForDateRange } from '$flux/util';\nimport FluxMenu from '$flux/component/FluxMenu.vue';\nimport FluxMenuGroup from '$flux/component/FluxMenuGroup.vue';\nimport FluxSeparator from '$flux/component/FluxSeparator.vue';\nimport FilterItem from './FilterItem.vue';\n\nexport const FilterMenuRenderer = defineComponent({\n props: {\n navigate: Function,\n state: Object\n },\n\n setup(props, {slots}) {\n const content = computed<(FluxFilterItem | VNode)[][]>(() => {\n const children = flattenVNodeTree(slots.default?.() ?? []);\n const content: (FluxFilterItem | VNode)[][] = [[]];\n\n for (const child of children) {\n const name = getComponentName(child);\n\n if (name === 'FluxSeparator') {\n content.push([]);\n continue;\n }\n\n if (name.startsWith('FluxFilter')) {\n const props = getComponentProps<Omit<FluxFilterItem, 'type'>>(child);\n const type = camelCase(name.substring(10)) as FluxFilterItem['type'];\n\n content[content.length - 1].push(parsers[type](props));\n continue;\n }\n\n content[content.length - 1].push(child);\n }\n\n return content;\n });\n\n return () => h(FluxMenu, {}, {\n default: () => unref(content).map((group, index) => renderFilterGroup(group, index, props.navigate!, props.state!))\n });\n }\n});\n\nfunction parseDate(base: FluxFilterBase): FluxFilterDateEntry {\n return {\n ...base,\n type: 'date',\n\n async getValueLabel(value): Promise<string | null> {\n if (!DateTime.isDateTime(value)) {\n return null;\n }\n\n return value.toLocaleString({\n day: 'numeric',\n month: 'short',\n year: 'numeric'\n });\n }\n };\n}\n\nfunction parseDateRange(base: FluxFilterBase): FluxFilterDateRangeEntry {\n return {\n ...base,\n type: 'dateRange',\n\n async getValueLabel(value): Promise<string | null> {\n if (!Array.isArray(value) || value.length !== 2) {\n return null;\n }\n\n const [start, end] = value;\n\n if (!DateTime.isDateTime(start) || !DateTime.isDateTime(end)) {\n return null;\n }\n\n return createLabelForDateRange(start, end);\n }\n };\n}\n\nfunction parseOption(base: FluxFilterBase): FluxFilterOptionEntry {\n const options = (base as any).options as FluxFilterOptionItem[];\n\n return {\n ...base,\n type: 'option',\n\n async getValueLabel(value): Promise<string | null> {\n return options.find(o => o.value === value)?.label ?? null;\n }\n };\n}\n\nfunction parseOptionAsync(base: FluxFilterBase): FluxFilterOptionEntry {\n const fetchOptions = (base as any).fetchOptions as (ids: FluxFilterValue[]) => Promise<FluxFilterOptionRow[]>;\n\n return {\n ...base,\n type: 'option',\n\n async getValueLabel(value): Promise<string | null> {\n const options = (await fetchOptions([value])).filter(isFluxFilterOptionItem);\n\n return options.find(o => o.value === value)?.label ?? null;\n }\n };\n}\n\nfunction parseOptions(base: FluxFilterBase): FluxFilterOptionsEntry {\n const options = (base as any).options as FluxFilterOptionItem[];\n const translate = useTranslate();\n\n return {\n ...base,\n type: 'options',\n\n async getValueLabel(value): Promise<string | null> {\n if (!Array.isArray(value)) {\n return null;\n }\n\n return generateMultiOptionsLabel(translate, options, value);\n }\n };\n}\n\nfunction parseOptionsAsync(base: FluxFilterBase): FluxFilterOptionsEntry {\n const fetchOptions = (base as any).fetchOptions as (ids: FluxFilterValue[]) => Promise<FluxFilterOptionRow[]>;\n const translate = useTranslate();\n\n return {\n ...base,\n type: 'options',\n\n async getValueLabel(value): Promise<string | null> {\n if (!Array.isArray(value)) {\n return null;\n }\n\n const options = (await fetchOptions(value)).filter(isFluxFilterOptionItem);\n\n return generateMultiOptionsLabel(translate, options, value);\n }\n };\n}\n\nfunction parseRange(base: FluxFilterBase): FluxFilterRangeEntry {\n return {\n ...base,\n type: 'range',\n\n async getValueLabel(value): Promise<string | null> {\n if (!value || !Array.isArray(value) || value.length !== 2) {\n return null;\n }\n\n const [lower, upper] = value as number[];\n\n if ('formatter' in base) {\n const formatter = base.formatter as (value: number) => string;\n\n return `${formatter(lower)} – ${formatter(upper)}`;\n }\n\n return `${formatNumber(lower)} – ${formatNumber(upper)}`;\n }\n };\n}\n\nfunction renderFilterGroup(group: (FluxFilterItem | VNode)[], index: number, navigate: Function, state: Record<string, FluxFilterValue>): VNode[] {\n const slot: VNode[] = [];\n\n if (index > 0) {\n slot.push(h(FluxSeparator));\n }\n\n slot.push(h(FluxMenuGroup, {}, {\n default: () => group.map(item => renderFilterItem(item, navigate, state))\n }));\n\n return slot;\n}\n\nfunction renderFilterItem(item: FluxFilterItem | VNode, navigate: Function, state: Record<string, FluxFilterValue>): VNode {\n if (isVNode(item)) {\n return item;\n }\n\n return h(FilterItem, {\n item,\n value: state[item.name] ?? null,\n onClick: () => navigate(item.name)\n });\n}\n\nfunction generateMultiOptionsLabel(translate: FluxTranslate, options: FluxFilterOptionItem[], values: FluxFilterValueSingle[]): string | null {\n const selected = options.filter(o => values.includes(o.value)).length;\n\n if (selected <= 0) {\n return null;\n }\n\n if (selected === 1) {\n return options.find(o => values.includes(o.value))!.label;\n }\n\n return translate('flux.nSelected', {\n n: selected\n });\n}\n\nconst parsers = {\n date: parseDate,\n dateRange: parseDateRange,\n option: parseOption,\n optionAsync: parseOptionAsync,\n options: parseOptions,\n optionsAsync: parseOptionsAsync,\n range: parseRange\n} as const;\n","import type { PropType, VNode } from 'vue';\nimport { defineComponent } from 'vue';\n\nexport const VNodeRenderer = defineComponent({\n props: {\n vnode: Object as PropType<VNode>\n },\n setup(props) {\n return () => props.vnode;\n }\n});\n","<template>\n <div :class=\"$style.calendar\">\n <FluxActionBar :class=\"$style.calendarActions\">\n <template #primary>\n <div\n :class=\"$style.calendarCurrent\"\n role=\"presentation\">\n <FluxFlyout :width=\"300\">\n <template #opener=\"{open}\">\n <button\n :class=\"$style.calendarCurrentMonth\"\n type=\"button\"\n @click=\"open\">\n {{ viewMonth }}\n </button>\n </template>\n\n <template #default=\"{close}\">\n <div :class=\"$styleDatePicker.datePickerMonths\">\n <template\n v-for=\"month of months\"\n :key=\"month\">\n <FluxSecondaryButton\n :label=\"month.label\"\n tabindex=\"-1\"\n @click=\"setViewMonth(month.date, close)\"/>\n </template>\n </div>\n </template>\n </FluxFlyout>\n\n <FluxFlyout :width=\"300\">\n <template #opener=\"{open}\">\n <button\n :class=\"$style.calendarCurrentYear\"\n type=\"button\"\n @click=\"open\">\n {{ viewYear }}\n </button>\n </template>\n\n <template #default=\"{close}\">\n <div :class=\"$styleDatePicker.datePickerYears\">\n <FluxSecondaryButton\n icon-leading=\"angle-left\"\n tabindex=\"-1\"\n @click=\"previousYears\"/>\n\n <template\n v-for=\"year of years\"\n :key=\"year\">\n <FluxSecondaryButton\n :label=\"year.toString()\"\n tabindex=\"-1\"\n @click=\"setViewYear(year, close)\"/>\n </template>\n\n <FluxSecondaryButton\n icon-leading=\"angle-right\"\n tabindex=\"-1\"\n @click=\"nextYears\"/>\n </div>\n </template>\n </FluxFlyout>\n </div>\n </template>\n\n <template #actionsEnd>\n <FluxSecondaryButton\n :label=\"translate('flux.today')\"\n @click=\"setToday\"/>\n\n <FluxButtonGroup>\n <FluxSecondaryButton\n icon-leading=\"angle-left\"\n @click=\"previousMonth\"/>\n\n <FluxSecondaryButton\n icon-leading=\"angle-right\"\n @click=\"nextMonth\"/>\n </FluxButtonGroup>\n </template>\n </FluxActionBar>\n\n <FluxWindowTransition :is-back=\"isTransitioningToPast\">\n <div\n :key=\"viewDate.month\"\n :class=\"$style.calendarCells\"\n role=\"grid\">\n <template v-for=\"day of days\">\n <div :class=\"$style.calendarDay\">\n {{ day }}\n </div>\n </template>\n\n <template v-for=\"date of dates\">\n <div\n :class=\"clsx(\n $style.calendarEntry,\n viewDate.month !== date.month && $style.isDisabled\n )\"\n role=\"gridcell\">\n <div :class=\"$style.calendarEvents\">\n <VNodeRenderer\n v-for=\"event of getEventsForDate(date)\"\n :class=\"clsx(\n event.type === 'single' && $style.isSingle,\n event.type === 'start' && $style.isStart,\n event.type === 'end' && $style.isEnd,\n event.type === 'middle' && $style.isMiddle\n )\"\n :style=\"{\n gridRow: event.index\n }\"\n :vnode=\"event.vnode\"/>\n </div>\n\n <span :class=\"$style.calendarEntryDate\">\n {{ date.toLocaleString({day: 'numeric'}) }}\n </span>\n </div>\n </template>\n </div>\n </FluxWindowTransition>\n\n <div\n v-if=\"isLoading\"\n :class=\"$style.calendarLoader\">\n <FluxSpinner/>\n </div>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { flattenVNodeTree, getComponentName, getComponentProps, useCalendar, useCalendarMonthSwitcher, useCalendarYearSwitcher } from '@flux-ui/internals';\n import { clsx } from 'clsx';\n import { DateTime } from 'luxon';\n import { computed, unref, VNode, watch } from 'vue';\n import { useTranslate } from '$flux/composable/private';\n import { FluxWindowTransition } from '$flux/transition';\n import { VNodeRenderer } from './primitive';\n import FluxActionBar from './FluxActionBar.vue';\n import FluxButtonGroup from './FluxButtonGroup.vue';\n import FluxFlyout from './FluxFlyout.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import FluxSpinner from '$flux/component/FluxSpinner.vue';\n import $style from '$flux/css/component/Calendar.module.scss';\n import $styleDatePicker from '$flux/css/component/DatePicker.module.scss';\n\n type Event = {\n readonly index: number;\n readonly type: 'start' | 'end' | 'middle' | 'single';\n readonly vnode: VNode;\n };\n\n const emit = defineEmits<{\n navigate: [DateTime, DateTime, DateTime];\n }>();\n\n const {\n initialDate = DateTime.now()\n } = defineProps<{\n readonly initialDate?: DateTime;\n readonly isLoading?: boolean;\n }>();\n\n const slots = defineSlots<{\n default?(): any;\n }>();\n\n const {\n isTransitioningToPast,\n viewDate,\n viewMonth,\n viewYear,\n dates,\n days,\n nextMonth,\n previousMonth,\n setViewDate\n } = useCalendar(initialDate, {\n weekDayLength: 'long'\n });\n\n const {\n months\n } = useCalendarMonthSwitcher(viewDate, 'short');\n\n const {\n years,\n next: nextYears,\n previous: previousYears\n } = useCalendarYearSwitcher(viewDate);\n\n const translate = useTranslate();\n\n const eventNodes = computed(() => flattenVNodeTree(slots.default?.() ?? []));\n const events = computed(() => unref(eventNodes)\n .filter(en => getComponentName(en) === 'FluxCalendarEvent'));\n\n function getEventsForDate(forDate: DateTime): Event[] {\n const forDateStr = forDate.toSQLDate();\n\n return unref(events)\n .map<Event | null>((vnode, index) => {\n const {date} = getComponentProps<{ date: DateTime | [DateTime, DateTime]; }>(vnode);\n\n if (Array.isArray(date)) {\n if (forDate < date[0] || forDate > date[1]) {\n return null;\n }\n\n return {\n type: forDateStr === date[0].toSQLDate() ? 'start' : (forDateStr === date[1].toSQLDate() ? 'end' : 'middle'),\n index,\n vnode\n };\n }\n\n if (forDateStr !== date.toSQLDate()) {\n return null;\n }\n\n return {\n type: 'single',\n index,\n vnode\n };\n })\n .filter(e => e !== null);\n }\n\n function setToday(): void {\n setViewDate(DateTime.now());\n }\n\n function setViewMonth(month: DateTime, close: () => void): void {\n close();\n setViewDate(month);\n }\n\n function setViewYear(year: number, close: () => void): void {\n close();\n setViewDate(unref(viewDate).set({year}));\n }\n\n watch([viewDate, dates], ([viewDate, dates]) => {\n emit('navigate', viewDate, dates[0], dates[dates.length - 1]);\n }, {immediate: true});\n\n watch(() => initialDate, setViewDate);\n</script>\n","<template>\n <FluxTooltip>\n <template #content>\n <slot name=\"tooltip\">\n {{ label }}\n </slot>\n </template>\n\n <button\n :class=\"$style.calendarEvent\"\n type=\"button\"\n @click=\"onClick\">\n <span>{{ label }}</span>\n </button>\n </FluxTooltip>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { DateTime } from 'luxon';\n import FluxTooltip from './FluxTooltip.vue';\n import $style from '$flux/css/component/Calendar.module.scss';\n\n const emit = defineEmits<{\n click: [MouseEvent];\n }>();\n\n defineProps<{\n readonly date: DateTime | [DateTime, DateTime];\n readonly label: string;\n }>();\n\n defineSlots<{\n tooltip(): any;\n }>();\n\n function onClick(evt: MouseEvent): void {\n emit('click', evt);\n }\n</script>\n","<template>\n <label\n :class=\"$style.checkbox\"\n :for=\"id\">\n <input\n v-model=\"modelValue\"\n ref=\"input\"\n type=\"checkbox\"\n :class=\"$style.checkboxNative\"\n :id=\"id\"/>\n\n <button\n :class=\"$style.checkboxElement\"\n role=\"checkbox\"\n :aria-checked=\"modelValue ?? false\">\n <FluxIcon\n v-if=\"isIndeterminate\"\n name=\"minus\"\n :size=\"16\"/>\n\n <FluxIcon\n v-else\n name=\"check\"\n :size=\"16\"/>\n </button>\n\n <span\n v-if=\"label\"\n :class=\"$style.checkboxLabel\">\n {{ label }}\n </span>\n </label>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { computed, unref, useTemplateRef, watchEffect } from 'vue';\n import { useFormFieldInjection } from '$flux/composable';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n const modelValue = defineModel<boolean | null>({\n default: false\n });\n\n defineProps<{\n readonly label?: string;\n }>();\n\n const inputRef = useTemplateRef('input');\n const {id} = useFormFieldInjection();\n\n const isIndeterminate = computed(() => unref(modelValue) === null);\n\n watchEffect(() => {\n const input = unref(inputRef);\n input && (input.indeterminate = unref(isIndeterminate));\n });\n</script>\n","<template>\n <Component\n :is=\"isSelectable ? 'button' : 'div'\"\n :class=\"clsx(\n $style.chip,\n isSelectable && $style.isSelectable,\n isSelected && $style.isSelected\n )\"\n @click=\"$emit('click', $event)\">\n <FluxFadeTransition v-if=\"isSelectable\">\n <FluxIcon\n :key=\"selectableIcon\"\n :name=\"selectableIcon\"\n :size=\"16\"/>\n </FluxFadeTransition>\n\n <FluxIcon\n v-else-if=\"iconLeading\"\n :name=\"iconLeading\"\n :size=\"16\"/>\n\n <span>{{ label }}</span>\n\n <FluxIcon\n v-if=\"iconTrailing\"\n :name=\"iconTrailing\"\n :size=\"16\"/>\n </component>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { computed } from 'vue';\n import { FluxFadeTransition } from '$flux/transition';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Chip.module.scss';\n\n defineEmits<{\n click: [MouseEvent];\n }>();\n\n const {\n iconLeading,\n isSelected\n } = defineProps<{\n readonly iconLeading?: FluxIconName;\n readonly iconTrailing?: FluxIconName;\n readonly isSelectable?: boolean;\n readonly isSelected?: boolean;\n readonly label: string;\n }>();\n\n const selectableIcon = computed<FluxIconName>(() => isSelected ? 'check' : (iconLeading ?? 'plus'));\n</script>\n","<template>\n <FluxPressable\n :component-type=\"type\"\n :class=\"CLASS_MAP[variant]\"\n type=\"button\"\n :tabindex=\"tabindex\"\n :href=\"href\"\n :rel=\"rel\"\n :target=\"target\"\n :to=\"to\">\n <slot/>\n\n <slot\n v-if=\"isLoading\"\n name=\"loader\">\n <div :class=\"$style.paneLoader\">\n <FluxSpinner/>\n </div>\n </slot>\n\n <div\n v-if=\"tag\"\n :class=\"$style.paneTag\">\n {{ tag }}\n </div>\n </FluxPressable>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxPressableType, FluxTo } from '@flux-ui/types';\n import FluxPressable from './FluxPressable.vue';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/Pane.module.scss';\n\n const CLASS_MAP = {\n default: $style.paneDefault,\n flat: $style.paneFlat,\n well: $style.paneWell\n } as const;\n\n const {\n variant = 'default'\n } = defineProps<{\n readonly isLoading?: boolean;\n readonly tag?: string;\n readonly variant?: 'default' | 'flat' | 'well';\n readonly type?: FluxPressableType;\n readonly tabindex?: string | number;\n readonly href?: string;\n readonly rel?: string;\n readonly target?: string;\n readonly to?: FluxTo;\n }>();\n\n defineSlots<{\n default(): any;\n loader(): any;\n }>();\n</script>\n","<template>\n <div\n :class=\"clsx(\n $style.comment,\n isTyping && $style.isTyping,\n isReceived && $style.isReceived\n )\"\n role=\"article\">\n <FluxAvatar\n :alt=\"avatarAlt\"\n :fallback=\"avatarFallback\"\n :fallback-icon=\"avatarFallbackIcon\"\n :fallback-initials=\"avatarFallbackInitials\"\n :size=\"42\"\n :src=\"avatarSrc\"/>\n\n <div :class=\"$style.commentContent\">\n <div\n v-if=\"isTyping\"\n :class=\"$style.commentTyping\"/>\n <slot v-else/>\n </div>\n\n <div :class=\"$style.commentFooter\">\n <span v-if=\"isReceived && postedBy\">{{ postedBy }}</span>\n <time\n v-if=\"iso && relative && !isTyping\"\n :datetime=\"iso\">\n {{ isJustNowVisible ? translate('flux.justNow') : relative }}\n </time>\n </div>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import type { DateTime } from 'luxon';\n import { computed } from 'vue';\n import { useTranslate } from '$flux/composable/private';\n import FluxAvatar from './FluxAvatar.vue';\n import $style from '$flux/css/component/Comment.module.scss';\n\n const {\n avatarFallback = 'colorized',\n avatarFallbackIcon = 'user',\n postedOn\n } = defineProps<{\n readonly avatarAlt?: string;\n readonly avatarFallback?: 'colorized' | 'neutral';\n readonly avatarFallbackIcon?: FluxIconName;\n readonly avatarFallbackInitials?: string;\n readonly avatarSrc?: string;\n readonly isReceived?: boolean;\n readonly isTyping?: boolean;\n readonly postedBy?: string;\n readonly postedOn?: DateTime;\n }>();\n\n defineSlots<{\n default(): any;\n }>();\n\n const translate = useTranslate();\n\n const isJustNowVisible = computed(() => postedOn && Math.abs(postedOn.diffNow().as('seconds')) < 15);\n const iso = computed(() => postedOn?.toISO() ?? null);\n const relative = computed(() => postedOn?.toRelative() ?? null);\n</script>\n","<template>\n <button\n :class=\"clsx(\n $style.coordinatePickerThumb,\n disabled && $style.isDisabled,\n isDragging && $style.isDragging\n )\"\n :style=\"{\n top: `${position[1] * 100}%`,\n left: `${position[0] * 100}%`\n }\"\n :aria-disabled=\"disabled ? true : undefined\"\n :tabindex=\"disabled ? -1 : 0\"\n type=\"button\"\n @keydown=\"onKeyDown\"\n @pointerdown=\"$emit('grab', $event)\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { clsx } from 'clsx';\n import { toRef, unref } from 'vue';\n import { useDisabled } from '$flux/composable';\n import $style from '$flux/css/component/primitive/CoordinatePicker.module.scss';\n\n const emit = defineEmits<{\n decrement: [boolean, boolean];\n grab: [PointerEvent];\n increment: [boolean, boolean];\n }>();\n\n const {\n disabled: componentDisabled\n } = defineProps<{\n readonly disabled?: boolean;\n readonly isDragging?: boolean;\n readonly position: [number, number];\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n\n function onKeyDown(evt: KeyboardEvent): void {\n if (unref(disabled)) {\n return;\n }\n\n switch (evt.key) {\n case 'ArrowUp':\n emit('decrement', false, true);\n break;\n\n case 'ArrowDown':\n emit('increment', false, true);\n break;\n\n case 'ArrowLeft':\n emit('decrement', true, false);\n break;\n\n case 'ArrowRight':\n emit('increment', true, false);\n break;\n\n default:\n return;\n }\n\n evt.preventDefault();\n }\n</script>\n","<template>\n <div\n ref=\"root\"\n :class=\"$style.coordinatePicker\"\n role=\"slider\"\n :aria-disabled=\"disabled ? true : undefined\"\n @pointerdown=\"onPointerDown\">\n <CoordinatePickerThumb\n :disabled=\"disabled\"\n :is-dragging=\"isDragging\"\n :position=\"thumbPosition\"\n @decrement=\"onDecrement\"\n @increment=\"onIncrement\"/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { roundStep } from '@basmilius/utils';\n import { unrefTemplateElement } from '@flux-ui/internals';\n import { computed, onMounted, onUnmounted, ref, toRef, unref, useTemplateRef, watch } from 'vue';\n import { useDisabled } from '$flux/composable';\n import CoordinatePickerThumb from './CoordinatePickerThumb.vue';\n import $style from '$flux/css/component/primitive/CoordinatePicker.module.scss';\n\n const emit = defineEmits<{\n dragging: [boolean];\n }>();\n\n const modelValue = defineModel<[number, number]>({\n default: [0, 0]\n });\n\n const {\n disabled: componentDisabled,\n max: maxProp = 100,\n min: minProp = 0,\n step: stepProp = 1\n } = defineProps<{\n readonly disabled?: boolean;\n readonly max?: number | [number, number];\n readonly min?: number | [number, number];\n readonly step?: number | [number, number];\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const rootRef = useTemplateRef('root');\n\n const isDragging = ref(false);\n\n const max = computed(() => Array.isArray(maxProp) ? maxProp : [maxProp, maxProp]);\n const min = computed(() => Array.isArray(minProp) ? minProp : [minProp, minProp]);\n const step = computed(() => Array.isArray(stepProp) ? stepProp : [stepProp, stepProp]);\n\n const thumbPosition = computed<[number, number]>(() => [\n (unref(modelValue)[0] - unref(min)[0]) / (unref(max)[0] - unref(min)[0]),\n (unref(modelValue)[1] - unref(min)[1]) / (unref(max)[1] - unref(min)[1])\n ]);\n\n onMounted(() => {\n document.addEventListener('pointermove', onPointerMove);\n document.addEventListener('pointerup', onPointerUp, {passive: true});\n });\n\n onUnmounted(() => {\n document.removeEventListener('pointermove', onPointerMove);\n document.removeEventListener('pointerup', onPointerUp);\n });\n\n function onDecrement(x: boolean, y: boolean): void {\n if (unref(disabled)) {\n return;\n }\n\n let [valueX, valueY] = unref(modelValue);\n const [maxX, maxY] = unref(max);\n const [minX, minY] = unref(min);\n const [stepX, stepY] = unref(step);\n\n if (x) {\n valueX = +roundStep(Math.max(minX, Math.min(maxX, valueX - stepX)), stepX).toPrecision(4);\n }\n\n if (y) {\n valueY = +roundStep(Math.max(minY, Math.min(maxY, valueY - stepY)), stepY).toPrecision(4);\n }\n\n modelValue.value = [valueX, valueY];\n }\n\n function onIncrement(x: boolean, y: boolean): void {\n if (unref(disabled)) {\n return;\n }\n\n let [valueX, valueY] = unref(modelValue);\n const [maxX, maxY] = unref(max);\n const [minX, minY] = unref(min);\n const [stepX, stepY] = unref(step);\n\n if (x) {\n valueX = +roundStep(Math.max(minX, Math.min(maxX, valueX + stepX)), stepX).toPrecision(4);\n }\n\n if (y) {\n valueY = +roundStep(Math.max(minY, Math.min(maxY, valueY + stepY)), stepY).toPrecision(4);\n }\n\n modelValue.value = [valueX, valueY];\n }\n\n function onPointerDown(evt: PointerEvent): void {\n if (unref(disabled)) {\n return;\n }\n\n isDragging.value = true;\n requestAnimationFrame(() => onPointerMove(evt));\n }\n\n function onPointerMove(evt: PointerEvent): void {\n const root = unrefTemplateElement(rootRef);\n\n if (!unref(isDragging) || !root) {\n return;\n }\n\n const [maxX, maxY] = unref(max);\n const [minX, minY] = unref(min);\n const [stepX, stepY] = unref(step);\n\n let {top, left, width, height} = root.getBoundingClientRect();\n top += 6;\n left += 6;\n width -= 12;\n height -= 12;\n\n const x = Math.max(0, Math.min(1, (evt.clientX - left) / width));\n const y = Math.max(0, Math.min(1, (evt.clientY - top) / height));\n\n modelValue.value = [\n +roundStep(x * (maxX - minX) + minX, stepX).toPrecision(4),\n +roundStep(y * (maxY - minY) + minY, stepY).toPrecision(4)\n ];\n\n evt.preventDefault();\n }\n\n function onPointerUp(): void {\n isDragging.value = false;\n }\n\n watch(isDragging, isDragging => emit('dragging', isDragging));\n</script>\n","<template>\n <div :class=\"$style.formField\">\n <label\n :for=\"id\"\n :class=\"$style.formFieldHeader\">\n <span :class=\"$style.formFieldLabel\">\n {{ label }}\n </span>\n\n <span\n v-if=\"isOptional\"\n :class=\"$style.formFieldOptional\">\n ({{ translate('flux.optional') }})\n </span>\n\n <span\n v-if=\"'value' in slots\"\n :class=\"$style.formFieldValue\">\n <slot\n name=\"value\"\n v-bind=\"{currentLength, error, hint, id, isOptional, label, maxLength}\"/>\n </span>\n </label>\n\n <slot v-bind=\"{id}\"/>\n\n <span\n v-if=\"currentLength && maxLength && maxLength > 0\"\n :class=\"$style.formFieldCounter\">\n {{ currentLength }} / {{ maxLength }}\n </span>\n\n <FluxFormFieldAddition\n v-if=\"error\"\n icon=\"circle-exclamation\"\n mode=\"error\"\n :message=\"error\"/>\n\n <FluxFormFieldAddition\n v-if=\"hint\"\n icon=\"circle-info\"\n :message=\"hint\"/>\n\n <slot\n name=\"addition\"\n v-bind=\"{currentLength, error, hint, id, isOptional, label, maxLength}\"/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { provide, useId } from 'vue';\n import { useTranslate } from '$flux/composable/private';\n import { FluxFormFieldInjectionKey } from '$flux/data';\n import FluxFormFieldAddition from './FluxFormFieldAddition.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n defineProps<{\n readonly currentLength?: number;\n readonly error?: string;\n readonly hint?: string;\n readonly isOptional?: boolean;\n readonly label: string;\n readonly maxLength?: number;\n }>();\n\n const slots = defineSlots<{\n default(props: {\n readonly id?: string;\n }): any;\n\n addition(props: {\n readonly currentLength?: number;\n readonly error?: string;\n readonly hint?: string;\n readonly isOptional?: boolean;\n readonly label: string;\n readonly maxLength?: number;\n }): any;\n\n value(props: {\n readonly currentLength?: number;\n readonly error?: string;\n readonly hint?: string;\n readonly isOptional?: boolean;\n readonly label: string;\n readonly maxLength?: number;\n }): any;\n }>();\n\n const id = useId();\n const translate = useTranslate();\n\n provide(FluxFormFieldInjectionKey, {\n id\n });\n</script>\n","<template>\n <SliderBase\n :disabled=\"disabled\"\n :is-dragging=\"isDragging\"\n :is-ticks-visible=\"isTicksVisible\"\n :max=\"max\"\n :min=\"min\"\n :step=\"step\"\n @dragging=\"onDragging\"\n @update=\"onUpdate\">\n <SliderTrack\n :percentage-lower=\"0\"\n :percentage-upper=\"percentage\">\n <SliderThumb\n ref=\"thumb\"\n :disabled=\"disabled\"\n :is-dragging=\"isDragging\"\n :position=\"percentage\"\n @decrement=\"onDecrement\"\n @increment=\"onIncrement\"/>\n </SliderTrack>\n </SliderBase>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { clampWithStepPrecision, countDecimals, formatNumber } from '@basmilius/utils';\n import { computed, ref, toRef, unref, useTemplateRef, watch, watchEffect } from 'vue';\n import { useDisabled } from '$flux/composable';\n import { addTooltip, removeTooltip, updateTooltip } from '$flux/data';\n import { SliderBase, SliderThumb, SliderTrack } from './primitive';\n\n const modelValue = defineModel<number>({\n required: true\n });\n\n const {\n formatter = formatNumber,\n disabled: componentDisabled = false,\n isTooltipDisabled,\n max = 100,\n min = 0,\n step = 1\n } = defineProps<{\n formatter?(value: number, decimals?: number): string;\n\n readonly disabled?: boolean;\n readonly isTicksVisible?: boolean;\n readonly isTooltipDisabled?: boolean;\n readonly max?: number;\n readonly min?: number;\n readonly step?: number;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const thumbRef = useTemplateRef('thumb');\n\n const isDragging = ref(false);\n const localValue = ref(0);\n const percentage = ref(0);\n const tooltipId = ref<number | null>(null);\n\n const tooltipContent = computed(() => formatter(modelValue.value, countDecimals(step)));\n\n function onDragging(is: boolean): void {\n isDragging.value = is;\n\n if (is && !tooltipId.value && !isTooltipDisabled) {\n tooltipId.value = addTooltip({\n content: unref(tooltipContent),\n direction: 'vertical',\n origin: unref(thumbRef)?.$el\n });\n } else if (!is && tooltipId.value) {\n removeTooltip(tooltipId.value);\n tooltipId.value = null;\n }\n }\n\n function onUpdate(value: number): void {\n localValue.value = value;\n\n requestAnimationFrame(() => {\n if (!tooltipId.value) {\n return;\n }\n\n updateTooltip(tooltipId.value, {\n content: formatter(modelValue.value, countDecimals(step)),\n origin: unref(thumbRef)?.$el\n });\n });\n }\n\n function onDecrement(): void {\n if (unref(disabled)) {\n return;\n }\n\n const value = clampWithStepPrecision(localValue.value, min, max, step);\n modelValue.value = Math.max(min, value - step);\n }\n\n function onIncrement(): void {\n if (unref(disabled)) {\n return;\n }\n\n const value = clampWithStepPrecision(localValue.value, min, max, step);\n modelValue.value = Math.min(max, value + step);\n }\n\n watchEffect(() => {\n localValue.value = (unref(modelValue) - min) / (max - min);\n });\n\n watch(([() => max, () => min, localValue, () => step]), () => {\n const value = clampWithStepPrecision(unref(localValue), min, max, step);\n modelValue.value = value;\n percentage.value = (value - min) / (max - min);\n }, {immediate: true});\n</script>\n","<template>\n <div\n :class=\"$style.colorPicker\"\n :style=\"{\n '--pickerBackground': saturationPickerColor\n }\">\n <CoordinatePicker\n v-model=\"saturationValue\"\n :class=\"$style.colorPickerSaturation\"\n :max=\"1\"\n :min=\"0\"\n :step=\"0.0005\"\n @dragging=\"onDragging\"/>\n\n <FluxFormSlider\n v-model=\"hue\"\n :class=\"$style.colorPickerHueSlider\"\n is-tooltip-disabled\n :max=\"360\"\n :min=\"0\"\n :step=\"0.1\"/>\n\n <FluxFormSlider\n v-if=\"isAlphaEnabled\"\n v-model=\"alpha\"\n :class=\"$style.colorPickerAlphaSlider\"\n is-tooltip-disabled\n :max=\"1\"\n :min=\"0\"\n :step=\"0.001\"/>\n\n <div :class=\"$style.colorPickerValue\">\n <div\n :class=\"$style.colorPickerPreview\"\n :style=\"{\n '--color': rgb\n }\"/>\n\n <FluxFormField\n v-if=\"type === 'hex'\"\n label=\"Hex\">\n <FluxFormInput v-model.lazy=\"modelValue\"/>\n </FluxFormField>\n\n <template v-else-if=\"type === 'rgb'\">\n <FluxFormField label=\"R\">\n <FluxFormInput\n v-model.lazy=\"rgbInputR\"\n :max=\"255\"\n :min=\"0\"\n type=\"number\"/>\n </FluxFormField>\n\n <FluxFormField label=\"G\">\n <FluxFormInput\n v-model.lazy=\"rgbInputG\"\n :max=\"255\"\n :min=\"0\"\n type=\"number\"/>\n </FluxFormField>\n\n <FluxFormField label=\"B\">\n <FluxFormInput\n v-model.lazy=\"rgbInputB\"\n :max=\"255\"\n :min=\"0\"\n type=\"number\"/>\n </FluxFormField>\n </template>\n\n <template v-else-if=\"type === 'hsv'\">\n <FluxFormField label=\"H\">\n <FluxFormInput\n v-model.lazy=\"hsvInputH\"\n :max=\"1\"\n :min=\"0\"\n type=\"number\"/>\n </FluxFormField>\n\n <FluxFormField label=\"S\">\n <FluxFormInput\n v-model.lazy=\"hsvInputS\"\n :max=\"1\"\n :min=\"0\"\n type=\"number\"/>\n </FluxFormField>\n\n <FluxFormField label=\"V\">\n <FluxFormInput\n v-model.lazy=\"hsvInputV\"\n :max=\"1\"\n :min=\"0\"\n type=\"number\"/>\n </FluxFormField>\n </template>\n\n <template v-else-if=\"type === 'hsl'\">\n <FluxFormField label=\"H\">\n <FluxFormInput\n v-model.lazy=\"hslInputH\"\n :max=\"360\"\n :min=\"0\"\n type=\"number\"/>\n </FluxFormField>\n\n <FluxFormField label=\"S\">\n <FluxFormInput\n v-model.lazy=\"hslInputS\"\n :max=\"100\"\n :min=\"0\"\n type=\"number\"/>\n </FluxFormField>\n\n <FluxFormField label=\"L\">\n <FluxFormInput\n v-model.lazy=\"hslInputL\"\n :max=\"100\"\n :min=\"0\"\n type=\"number\"/>\n </FluxFormField>\n </template>\n </div>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { hexToRGB, hslToHSV, hslToRGB, hsvToHSL, hsvToRGB, rgbToHEX, rgbToHSL, rgbToHSV } from '@basmilius/utils';\n import { blue500 } from '@flux-ui/internals';\n import { computed, ComputedRef, ref, unref, watch } from 'vue';\n import CoordinatePicker from './primitive/CoordinatePicker.vue';\n import FluxFormField from './FluxFormField.vue';\n import FluxFormInput from './FluxFormInput.vue';\n import FluxFormSlider from './FluxFormSlider.vue';\n import $style from '$flux/css/component/Color.module.scss';\n\n const modelValue = defineModel<string | [number, number, number]>({\n default: blue500\n });\n\n const {\n type = 'hex'\n } = defineProps<{\n readonly isAlphaEnabled?: boolean;\n readonly type?: 'hex' | 'rgb' | 'hsl' | 'hsv';\n }>();\n\n const alpha = ref(1);\n const hsv = ref<[number, number, number]>([0, 0, 0]);\n const isDragging = ref(false);\n\n const rgb = computed(() => {\n const [r, g, b] = hsvToRGB(...unref(hsv));\n\n return `rgb(${r} ${g} ${b} / ${unref(alpha)})`;\n });\n\n const hue = computed({\n get: () => unref(hsv)[0] * 360,\n set: value => hsv.value = [value / 360, hsv.value[1], hsv.value[2]]\n });\n\n const saturation = computed({\n get: () => unref(hsv)[1],\n set: value => hsv.value = [hsv.value[0], value, hsv.value[2]]\n });\n\n const value = computed({\n get: () => 1 - unref(hsv)[2],\n set: value => hsv.value = [hsv.value[0], hsv.value[1], 1 - value]\n });\n\n const saturationValue = computed({\n get: (): [number, number] => [unref(saturation), unref(value)],\n set: ([s, v]: [number, number]) => {\n saturation.value = s;\n value.value = v;\n }\n });\n\n const saturationPickerColor = computed(() => {\n const [r, g, b] = hsvToRGB(unref(hsv)[0], 1, 1);\n\n return `rgb(${r} ${g} ${b})`;\n });\n\n const hslInputH = generateComputedInput(0, hsvToHSL, hslToHSV);\n const hslInputS = generateComputedInput(1, hsvToHSL, hslToHSV);\n const hslInputL = generateComputedInput(2, hsvToHSL, hslToHSV);\n\n const hsvInputH = generateComputedInput(0);\n const hsvInputS = generateComputedInput(1);\n const hsvInputV = generateComputedInput(2);\n\n const rgbInputR = generateComputedInput(0, hsvToRGB, rgbToHSV);\n const rgbInputG = generateComputedInput(1, hsvToRGB, rgbToHSV);\n const rgbInputB = generateComputedInput(2, hsvToRGB, rgbToHSV);\n\n function onDragging(is: boolean): void {\n isDragging.value = is;\n }\n\n function generateComputedInput(index: number, fromHSV?: (a: number, b: number, c: number) => [number, number, number], toHSV?: (a: number, b: number, c: number) => [number, number, number]): ComputedRef<number> {\n return computed({\n get: () => fromHSV?.(...unref(hsv))[index] ?? unref(hsv)[index],\n set: value => {\n const values = fromHSV?.(...unref(hsv)) ?? unref(hsv);\n values[index] = value;\n hsv.value = toHSV?.(...values) ?? values;\n }\n });\n }\n\n watch(modelValue, (modelValue, oldModelValue) => {\n if (unref(isDragging)) {\n return;\n }\n\n if (JSON.stringify(modelValue) === JSON.stringify(oldModelValue)) {\n return;\n }\n\n const hex = type === 'hex' ? modelValue.toString() : '';\n const values: [number, number, number] = type !== 'hex' ? modelValue as [number, number, number] : [0, 0, 0];\n\n switch (type) {\n case 'hex':\n hsv.value = rgbToHSV(...hexToRGB(hex));\n break;\n\n case 'rgb':\n hsv.value = rgbToHSV(...values);\n break;\n\n case 'hsl':\n hsv.value = rgbToHSV(...hslToRGB(...values));\n break;\n\n case 'hsv':\n hsv.value = [...values];\n break;\n }\n }, {immediate: true});\n\n watch(hsv, hsv => {\n switch (type) {\n case 'hex':\n modelValue.value = rgbToHEX(...hsvToRGB(...hsv));\n break;\n\n case 'rgb':\n modelValue.value = hsvToRGB(...hsv);\n break;\n\n case 'hsl':\n modelValue.value = rgbToHSL(...hsvToRGB(...hsv));\n break;\n\n case 'hsv':\n modelValue.value = [...hsv];\n break;\n }\n });\n</script>\n","<template>\n <div :class=\"$style.colorSelect\">\n <button\n v-for=\"color of colors\"\n :class=\"modelValue === color ? $style.colorSelectColorSelected : $style.colorSelectColorDeselected\"\n :style=\"{\n '--color': color\n }\"\n @click=\"select(color)\">\n <FluxIcon\n :class=\"$style.colorSelectCheck\"\n name=\"check\"\n :size=\"16\"/>\n </button>\n\n <FluxFlyout v-if=\"isCustomAllowed\">\n <template #opener=\"{open}\">\n <button\n :class=\"$style.colorSelectCustom\"\n @click=\"open()\">\n <FluxIcon\n name=\"ellipsis-h\"\n :size=\"16\"/>\n </button>\n </template>\n\n <template #default=\"{close}\">\n <FluxColorPicker\n v-model=\"customColor\"\n :class=\"$style.colorSelectCustomPicker\"/>\n\n <FluxPaneBody :class=\"$style.colorSelectButtons\">\n <FluxSecondaryButton\n :label=\"t('flux.cancel')\"\n @click=\"close()\"/>\n\n <FluxPrimaryButton\n :label=\"t('flux.ok')\"\n @click=\"select(customColor, close)\"/>\n </FluxPaneBody>\n </template>\n </FluxFlyout>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { amber500, blue500, cyan500, emerald500, fuchsia500, green500, indigo500, lime500, orange500, pink500, purple500, red500, rose500, sky500, teal500, violet500, yellow500 } from '@flux-ui/internals';\n import { ref, watch } from 'vue';\n import { useTranslate } from '$flux/composable/private';\n import FluxColorPicker from './FluxColorPicker.vue';\n import FluxFlyout from './FluxFlyout.vue';\n import FluxIcon from './FluxIcon.vue';\n import FluxPaneBody from './FluxPaneBody.vue';\n import FluxPrimaryButton from './FluxPrimaryButton.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import $style from '$flux/css/component/Color.module.scss';\n\n const modelValue = defineModel<string>({\n default: '#000000'\n });\n\n const {\n colors = [red500, orange500, amber500, yellow500, lime500, green500, emerald500, teal500, cyan500, sky500, blue500, indigo500, violet500, purple500, fuchsia500, pink500, rose500]\n } = defineProps<{\n readonly colors?: string[];\n readonly isCustomAllowed?: boolean;\n }>();\n\n const t = useTranslate();\n\n const customColor = ref('#000000');\n\n function select(color: string, close?: () => void): void {\n modelValue.value = color;\n close?.();\n }\n\n watch(modelValue, value => customColor.value = value, {immediate: true});\n</script>\n","<template>\n <div :class=\"$style.table\">\n <table :class=\"$style.tableBase\">\n <thead v-if=\"slots.header\">\n <slot name=\"header\"/>\n </thead>\n\n <tbody v-if=\"slots.default\">\n <slot/>\n </tbody>\n\n <tfoot v-if=\"slots.footer\">\n <slot name=\"footer\"/>\n </tfoot>\n\n <caption\n v-if=\"slots.caption\"\n :style=\"{captionSide}\">\n <slot name=\"caption\"/>\n </caption>\n </table>\n\n <div\n v-if=\"isLoading\"\n :class=\"$style.tableLoader\">\n <FluxSpinner/>\n </div>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { provide } from 'vue';\n import { FluxTableInjectionKey } from '$flux/data';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/Table.module.scss';\n\n const {\n captionSide = 'bottom',\n isBordered = true,\n isHoverable = false,\n isLoading = false,\n isSeparated = true,\n isStriped = false\n } = defineProps<{\n readonly captionSide?: 'top' | 'bottom';\n readonly isBordered?: boolean;\n readonly isHoverable?: boolean;\n readonly isLoading?: boolean;\n readonly isSeparated?: boolean;\n readonly isStriped?: boolean;\n }>();\n\n const slots = defineSlots<{\n default?(): any;\n caption?(): any;\n footer?(): any;\n header?(): any;\n }>();\n\n provide(FluxTableInjectionKey, {\n isBordered,\n isHoverable,\n isSeparated,\n isStriped\n });\n</script>\n","<template>\n <FluxTable\n :is-bordered=\"isBordered\"\n :is-hoverable=\"isHoverable\"\n :is-loading=\"isLoading\"\n :is-separated=\"isSeparated\"\n :is-striped=\"isStriped\">\n <template\n v-if=\"'header' in slots\"\n #header>\n <FluxTableRow>\n <slot\n name=\"header\"\n v-bind=\"{page, perPage, rows, total}\"/>\n </FluxTableRow>\n </template>\n\n <template\n v-if=\"'footer' in slots\"\n #footer>\n <FluxTableRow>\n <slot\n name=\"footer\"\n v-bind=\"{page, perPage, rows, total}\"/>\n </FluxTableRow>\n </template>\n\n <FluxTableRow\n v-for=\"(row, index) of rows\"\n :key=\"uniqueKey ? row[uniqueKey] : index\">\n <template v-for=\"(_, name) of slots\">\n <slot\n v-if=\"name !== 'footer' && name !== 'header'\"\n v-bind=\"{index, page, perPage, row, rows, total}\"\n :name=\"name\"/>\n </template>\n </FluxTableRow>\n </FluxTable>\n</template>\n\n<script\n lang=\"ts\"\n setup\n generic=\"T extends Record<string, any>\">\n import { computed } from 'vue';\n import FluxTable from './FluxTable.vue';\n import FluxTableRow from './FluxTableRow.vue';\n\n const {\n isBordered = true,\n isHoverable = false,\n isLoading = false,\n isSeparated = true,\n isStriped = false,\n dataSet,\n perPage\n } = defineProps<{\n readonly dataSet: T[];\n readonly isBordered?: boolean;\n readonly isHoverable?: boolean;\n readonly isLoading?: boolean;\n readonly isSeparated?: boolean;\n readonly isStriped?: boolean;\n readonly page: number;\n readonly perPage: number;\n readonly total: number;\n readonly uniqueKey?: string;\n }>();\n\n const slots = defineSlots<{\n [key: string]: (props: {\n readonly index: number;\n readonly page: number;\n readonly perPage: number;\n readonly row: T;\n readonly rows: T[];\n readonly total: number;\n }) => any;\n\n footer(props: {\n readonly page: number;\n readonly perPage: number;\n readonly rows: T[];\n readonly total: number;\n }): any;\n\n header(props: {\n readonly page: number;\n readonly perPage: number;\n readonly rows: T[];\n readonly total: number;\n }): any;\n }>();\n\n const rows = computed(() => dataSet.slice(0, perPage));\n</script>\n","<template>\n <div :class=\"$style.datePicker\">\n <div :class=\"$style.datePickerHeader\">\n <FluxFadeTransition>\n <FluxSecondaryButton\n v-if=\"viewMode === 'date'\"\n :disabled=\"!isWithinBoundary(viewDatePrevious, 'month')\"\n icon-leading=\"angle-left\"\n :aria-label=\"translate('flux.previous')\"\n @click=\"previousMonth\"/>\n </FluxFadeTransition>\n\n <div\n :class=\"$style.datePickerHeaderView\"\n :id=\"id\"\n aria-live=\"polite\"\n role=\"presentation\">\n <button\n :class=\"$style.datePickerHeaderViewButton\"\n type=\"button\"\n @click=\"setView('month')\">\n {{ viewMonth }}\n </button>\n\n <button\n :class=\"$style.datePickerHeaderViewButton\"\n type=\"button\"\n @click=\"setView('year')\">\n {{ viewYear }}\n </button>\n </div>\n\n <FluxFadeTransition>\n <FluxSecondaryButton\n v-if=\"viewMode === 'date'\"\n :disabled=\"!isWithinBoundary(viewDateNext, 'month')\"\n icon-leading=\"angle-right\"\n :aria-label=\"translate('flux.next')\"\n @click=\"nextMonth\"/>\n </FluxFadeTransition>\n </div>\n\n <FluxVerticalWindowTransition :is-back=\"viewMode === 'date'\">\n <div\n v-if=\"viewMode === 'date'\"\n key=\"date\"\n :class=\"$style.datePickerDates\"\n :aria-labelledby=\"id\">\n <FluxWindowTransition :is-back=\"isTransitioningToPast\">\n <div\n :key=\"viewDate.month\"\n :class=\"$style.datePickerDatesGrid\">\n <template\n v-for=\"day of days\"\n :key=\"day\">\n <span :class=\"$style.datePickerDay\">{{ day }}</span>\n </template>\n\n <template\n v-for=\"date of dates\"\n :key=\"date\">\n <button\n :class=\"clsx(\n $style.datePickerDate,\n isDisabled(date) && $style.isDisabled,\n isWithinRange(date, 'end') && $style.isRangeEnd,\n isWithinRange(date) && $style.isRangeEntry,\n isWithinRange(date, 'start') && $style.isRangeStart,\n isWithinSelection(date, 'end') && $style.isSelectionEnd,\n isWithinSelection(date) && $style.isSelectionEntry,\n isWithinSelection(date, 'start') && $style.isSelectionStart,\n isSelected(date) && $style.isSelected\n )\"\n tabindex=\"-1\"\n type=\"button\"\n @click=\"setDate(date)\"\n @mouseover=\"onDateMouseOver(date)\"\n @mouseout=\"onDateMouseOut\">\n {{ date.toLocaleString({day: 'numeric'}) }}\n </button>\n </template>\n </div>\n </FluxWindowTransition>\n </div>\n\n <div\n v-else-if=\"viewMode === 'month'\"\n key=\"month\"\n :class=\"$style.datePickerMonths\">\n <template\n v-for=\"month of months\"\n :key=\"month\">\n <FluxSecondaryButton\n :disabled=\"!isWithinBoundary(month.date, 'month')\"\n :label=\"month.label\"\n tabindex=\"-1\"\n @click=\"setViewMonth(month.date)\"/>\n </template>\n </div>\n\n <div\n v-else-if=\"viewMode === 'year'\"\n key=\"year\"\n :class=\"$style.datePickerYears\">\n <FluxSecondaryButton\n icon-leading=\"angle-left\"\n tabindex=\"-1\"\n @click=\"previousYears\"/>\n\n <template\n v-for=\"year of years\"\n :key=\"year\">\n <FluxSecondaryButton\n :label=\"year.toString()\"\n tabindex=\"-1\"\n @click=\"setViewYear(year)\"/>\n </template>\n\n <FluxSecondaryButton\n icon-leading=\"angle-right\"\n tabindex=\"-1\"\n @click=\"nextYears\"/>\n </div>\n </FluxVerticalWindowTransition>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useCalendar, useCalendarMonthSwitcher, useCalendarYearSwitcher } from '@flux-ui/internals';\n import { clsx } from 'clsx';\n import { DateTime } from 'luxon';\n import { computed, ref, unref, useId } from 'vue';\n import { useTranslate } from '$flux/composable/private';\n import { FluxFadeTransition, FluxVerticalWindowTransition, FluxWindowTransition } from '$flux/transition';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import $style from '$flux/css/component/DatePicker.module.scss';\n\n const modelValue = defineModel<DateTime | DateTime[] | null>({\n default: null,\n required: true\n });\n\n const {\n max,\n min,\n rangeMode\n } = defineProps<{\n readonly max?: DateTime;\n readonly min?: DateTime;\n readonly rangeMode?: 'range' | 'week' | 'month';\n }>();\n\n const id = useId();\n const translate = useTranslate();\n\n const {\n isTransitioningToPast,\n viewDate,\n viewDateNext,\n viewDatePrevious,\n viewMonth,\n viewYear,\n dates,\n days,\n setViewDate,\n nextMonth,\n previousMonth\n } = useCalendar(getInitialDate());\n\n const {\n months\n } = useCalendarMonthSwitcher(viewDate, 'short');\n\n const {\n years,\n next: nextYears,\n previous: previousYears\n } = useCalendarYearSwitcher(viewDate);\n\n const selection = ref<[DateTime | null, DateTime | null]>([null, null]);\n const viewMode = ref<'date' | 'month' | 'year'>('date');\n\n const maxDate = computed(() => (max ?? DateTime.now().endOf('year').plus({year: 100})).startOf('day'));\n const minDate = computed(() => (min ?? DateTime.now().startOf('year').minus({year: 100})).startOf('day'));\n const normalizedSelection = computed(() => {\n const [start, end] = unref(selection);\n\n if (!start || !end) {\n return [start, end];\n }\n\n if (start > end) {\n return [end, start];\n } else {\n return [start, end];\n }\n });\n\n function getInitialDate(): DateTime {\n const value = unref(modelValue);\n let date: DateTime;\n\n if (!value) {\n date = DateTime.now();\n } else if (Array.isArray(value)) {\n date = value[1];\n } else {\n date = value as DateTime;\n }\n\n return date.startOf('day');\n }\n\n function isDisabled(date: DateTime): boolean {\n if (unref(viewDate).month !== date.month) {\n return true;\n }\n\n return !isWithinBoundary(date);\n }\n\n function isSelected(date: DateTime): boolean {\n if (rangeMode) {\n return false;\n }\n\n const value = unref(modelValue) as (DateTime | DateTime[]);\n\n if (!value || Array.isArray(value)) {\n return false;\n }\n\n return value.hasSame(date, 'day');\n }\n\n function isWithinBoundary(date: DateTime, unit?: 'month'): boolean {\n if (unit === 'month') {\n return unref(maxDate).endOf('month') >= date && unref(minDate).startOf('month') <= date;\n }\n\n return unref(maxDate) >= date && unref(minDate) <= date;\n }\n\n function isWithinRange(date: DateTime, edge?: 'start' | 'end'): boolean {\n if (!rangeMode) {\n return false;\n }\n\n const value = unref(modelValue);\n\n if (!value || !Array.isArray(value)) {\n return false;\n }\n\n if (edge) {\n const index = edge === 'start' ? 0 : 1;\n\n return value[index].hasSame(date, 'day');\n }\n\n return date >= value[0].startOf('day') && date <= value[1].startOf('day');\n }\n\n function isWithinSelection(date: DateTime, edge?: 'start' | 'end'): boolean {\n const [selectionStart, selectionEnd] = unref(normalizedSelection);\n\n if (!selectionStart || !selectionEnd) {\n return false;\n }\n\n if (edge) {\n return (edge === 'start' ? selectionStart : selectionEnd)?.hasSame(date, 'day');\n }\n\n return date >= selectionStart && date <= selectionEnd;\n }\n\n function setDate(date: DateTime): void {\n switch (rangeMode) {\n case 'range':\n const [start] = unref(selection);\n\n if (!start) {\n selection.value = [date, date];\n } else {\n if (date >= start) {\n modelValue.value = [start, date];\n } else {\n modelValue.value = [date, start];\n }\n\n selection.value = [null, null];\n }\n break;\n\n case 'month':\n modelValue.value = [date.startOf('month'), date.endOf('month')];\n break;\n\n case 'week':\n modelValue.value = [date.startOf('week'), date.endOf('week')];\n break;\n\n default:\n modelValue.value = date;\n break;\n }\n }\n\n function setView(view: 'date' | 'month' | 'year'): void {\n viewMode.value = unref(viewMode) === view ? 'date' : view;\n }\n\n function setViewMonth(month: DateTime): void {\n setView('date');\n setViewDate(month);\n }\n\n function setViewYear(year: number): void {\n setView('date');\n setViewDate(unref(viewDate).set({year}));\n }\n\n function onDateMouseOver(date: DateTime): void {\n if (!rangeMode) {\n return;\n }\n\n switch (rangeMode) {\n case 'range':\n selection.value = [selection.value[0], date];\n break;\n\n case 'month':\n selection.value = [date.startOf('month'), date.endOf('month')];\n break;\n\n case 'week':\n selection.value = [date.startOf('week'), date.endOf('week')];\n break;\n }\n }\n\n function onDateMouseOut(): void {\n if (!rangeMode || rangeMode === 'range') {\n return;\n }\n\n selection.value = [null, null];\n }\n</script>\n","<template>\n <slot/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { provide, toRef } from 'vue';\n import { FluxDisabledInjectionKey } from '$flux/data';\n\n defineOptions({\n inheritAttrs: false\n });\n\n const {\n disabled = true\n } = defineProps<{\n readonly disabled?: boolean;\n }>();\n\n provide(FluxDisabledInjectionKey, toRef(() => disabled));\n</script>\n","<template>\n <div\n :class=\"clsx(\n contentPlacement === 'start' && $style.dividerContentStart,\n contentPlacement === 'center' && $style.dividerContentCenter,\n contentPlacement === 'end' && $style.dividerContentEnd\n )\"\n role=\"separator\"\n aria-orientation=\"horizontal\">\n <div\n v-if=\"slots.default\"\n :class=\"$style.dividerContent\">\n <slot/>\n </div>\n\n <hr\n v-else\n :class=\"$style.dividerLine\">\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { clsx } from 'clsx';\n import $style from '$flux/css/component/Divider.module.scss';\n\n const {\n contentPlacement = 'center'\n } = defineProps<{\n readonly contentPlacement?: 'start' | 'center' | 'end';\n }>();\n\n const slots = defineSlots<{\n default?(): any;\n }>();\n</script>\n","<template>\n <svg\n ref=\"svg\"\n :class=\"$style.dotPattern\">\n <defs>\n <pattern\n :id=\"id\"\n :width=\"width\"\n :height=\"height\"\n patternContentUnits=\"userSpaceOnUse\"\n patternUnits=\"userSpaceOnUse\"\n :x=\"-1\"\n :y=\"-1\">\n <circle\n :r=\"cr\"\n :cx=\"width / 2 - cx\"\n :cy=\"height / 2 - cy\"/>\n </pattern>\n </defs>\n\n <rect\n width=\"100%\"\n height=\"100%\"\n stroke-width=\"0\"\n :fill=\"`url(#${id})`\"/>\n </svg>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { ref, useId, useTemplateRef, watch } from 'vue';\n import $style from '$flux/css/component/Visual.module.scss';\n\n const {\n width = 16,\n height = 16,\n cr = 1,\n cx = 1,\n cy = 1\n } = defineProps<{\n readonly width?: number;\n readonly height?: number;\n readonly cr?: number;\n readonly cx?: number;\n readonly cy?: number;\n }>();\n\n const svgRef = useTemplateRef<HTMLElement>('svg');\n const id = useId();\n\n const svgWidth = ref(0);\n const svgHeight = ref(0);\n\n watch(svgRef, (svg, _, onCleanup) => {\n if (!svg) {\n return;\n }\n\n const onResize = () => {\n svgWidth.value = svg.clientWidth;\n svgHeight.value = svg.clientHeight;\n };\n\n window.addEventListener('resize', onResize, {passive: true});\n onResize();\n\n onCleanup(() => {\n window.removeEventListener('resize', onResize);\n });\n }, {immediate: true});\n</script>\n","<template>\n <div\n :class=\"[\n $style.dropZone,\n isDragging && $style.isDragging,\n isDraggingOver && $style.isDraggingOver\n ]\"\n :aria-disabled=\"disabled ? true : undefined\">\n <div\n :class=\"$style.dropZoneContent\"\n @dragleave.capture=\"onDragLeave\"\n @dragover.capture=\"onDragEnter\"\n @drop=\"onDrop\">\n <svg\n ref=\"content\"\n :class=\"$style.dropZoneBorder\"\n role=\"presentation\">\n <rect\n height=\"100%\"\n width=\"100%\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n :pathLength=\"pathLength\"/>\n </svg>\n\n <slot v-bind=\"{isDragging, isDraggingOver, showPicker}\"/>\n\n <FluxFadeTransition>\n <div\n v-if=\"isLoading\"\n :class=\"$style.dropZoneLoader\">\n <FluxSpinner/>\n </div>\n </FluxFadeTransition>\n </div>\n\n <div\n v-if=\"slots.actions\"\n :class=\"$style.dropZoneActions\">\n <slot\n name=\"actions\"\n v-bind=\"{isDragging, isDraggingOver, showPicker}\"/>\n </div>\n\n <slot\n name=\"extra\"\n v-bind=\"{isDragging, isDraggingOver, showPicker}\"/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { roundStep } from '@basmilius/utils';\n import { onMounted, onUnmounted, ref, toRef, unref, useTemplateRef, watch } from 'vue';\n import { useDisabled } from '$flux/composable';\n import { FluxFadeTransition } from '$flux/transition';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/DropZone.module.scss';\n\n const emit = defineEmits<{\n select: [File];\n selectMultiple: [FileList];\n }>();\n\n const {\n accept,\n disabled: componentDisabled,\n isMultiple\n } = defineProps<{\n readonly accept?: string;\n readonly disabled?: boolean;\n readonly isLoading?: boolean;\n readonly isMultiple?: boolean;\n }>();\n\n const slots = defineSlots<{\n default?(props: {\n readonly isDragging: boolean;\n readonly isDraggingOver: boolean;\n\n showPicker(): void;\n }): any;\n\n actions?(props: {\n readonly isDragging: boolean;\n readonly isDraggingOver: boolean;\n\n showPicker(): void;\n }): any;\n\n extra?(props: {\n readonly isDragging: boolean;\n readonly isDraggingOver: boolean;\n\n showPicker(): void;\n }): any;\n }>();\n\n const contentRef = useTemplateRef('content');\n const disabled = useDisabled(toRef(() => componentDisabled));\n\n const isDragging = ref(false);\n const isDraggingOver = ref(false);\n const pathLength = ref(0);\n\n onMounted(() => {\n window.addEventListener('dragleave', onWindowDragEnd, {capture: true});\n window.addEventListener('dragover', onWindowDragStart, {capture: true});\n window.addEventListener('drop', onWindowDrop, {capture: true});\n });\n\n onUnmounted(() => {\n window.removeEventListener('dragleave', onWindowDragEnd);\n window.removeEventListener('dragover', onWindowDragStart);\n window.removeEventListener('drop', onWindowDrop);\n });\n\n function onDragEnter(evt: DragEvent): void {\n isDraggingOver.value = true;\n evt.preventDefault();\n }\n\n function onDragLeave(): void {\n isDraggingOver.value = false;\n }\n\n function onDrop(evt: DragEvent): void {\n isDragging.value = false;\n isDraggingOver.value = false;\n\n if (!evt.dataTransfer) {\n return;\n }\n\n const files = evt.dataTransfer.files;\n\n if (files.length === 0) {\n return;\n }\n\n if (isMultiple) {\n emit('selectMultiple', files);\n } else {\n emit('select', files[0]);\n }\n\n evt.preventDefault();\n evt.stopPropagation();\n }\n\n function onWindowDragEnd(): void {\n isDragging.value = false;\n }\n\n function onWindowDragStart(): void {\n isDragging.value = true;\n }\n\n function onWindowDrop(): void {\n isDragging.value = false;\n isDraggingOver.value = false;\n }\n\n function onFileSelected(evt: Event): void {\n const files = (evt.target as HTMLInputElement).files;\n\n if (!files || files.length === 0) {\n return;\n }\n\n if (isMultiple) {\n emit('selectMultiple', files);\n } else {\n emit('select', files[0]);\n }\n }\n\n function showPicker(): void {\n if (unref(disabled)) {\n return;\n }\n\n let input: HTMLInputElement | undefined = document.createElement('input');\n input.accept = accept ?? '*';\n input.multiple = isMultiple ?? false;\n input.type = 'file';\n\n input.addEventListener('change', onFileSelected, {once: true});\n input.showPicker();\n }\n\n watch(contentRef, content => {\n if (!content) {\n return;\n }\n\n const {width, height} = content.getBoundingClientRect();\n pathLength.value = roundStep(width * 2 + height * 2, 6);\n }, {immediate: true});\n</script>\n\n","<template>\n <div\n :class=\"isOpen ? $style.expandableOpened : $style.expandable\"\n :id=\"headerId\"\n :aria-controls=\"contentId\"\n :aria-expanded=\"isOpen\">\n <slot\n v-bind=\"{label, isOpen, close, open, toggle}\"\n name=\"header\">\n <button\n :class=\"$style.expandableHeader\"\n type=\"button\"\n @click=\"toggle\">\n <FluxFadeTransition>\n <FluxIcon\n v-if=\"icon\"\n :key=\"icon\"\n :name=\"icon\"/>\n </FluxFadeTransition>\n\n <span>{{ label }}</span>\n\n <FluxFadeTransition>\n <FluxIcon\n :key=\"expandIcon\"\n :name=\"expandIcon\"\n :size=\"16\"/>\n </FluxFadeTransition>\n </button>\n </slot>\n\n <FluxAutoHeightTransition>\n <div\n v-if=\"isOpen\"\n :class=\"$style.expandableBody\"\n :id=\"contentId\"\n :aria-labelledby=\"headerId\">\n <slot\n v-bind=\"{label, close}\"\n name=\"body\">\n <div :class=\"$style.expandableContent\">\n <slot v-bind=\"{label, close}\"/>\n </div>\n </slot>\n </div>\n </FluxAutoHeightTransition>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useComponentId } from '@flux-ui/internals';\n import type { FluxIconName } from '@flux-ui/types';\n import { computed, getCurrentInstance, onBeforeMount, onUnmounted, ref, unref, useId, watch } from 'vue';\n import { useExpandableGroupInjection } from '$flux/composable';\n import { FluxAutoHeightTransition, FluxFadeTransition } from '$flux/transition';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Expandable.module.scss';\n\n const emit = defineEmits<{\n toggle: [boolean];\n }>();\n\n const {\n isOpened\n } = defineProps<{\n readonly icon?: FluxIconName;\n readonly isOpened?: boolean;\n readonly label?: string;\n }>();\n\n const componentId = useComponentId();\n const contentId = useId();\n const headerId = useId();\n const instance = getCurrentInstance()!;\n const isOpen = ref(false);\n\n const {closeAll, register, unregister} = useExpandableGroupInjection();\n\n const expandIcon = computed<FluxIconName>(() => unref(isOpen) ? 'minus' : 'plus');\n\n onBeforeMount(() => register?.(unref(componentId), instance));\n onUnmounted(() => unregister?.(unref(componentId)));\n\n function close(): void {\n isOpen.value = false;\n emit('toggle', isOpen.value);\n }\n\n function open(): void {\n closeAll?.();\n isOpen.value = true;\n emit('toggle', isOpen.value);\n }\n\n function toggle(): void {\n if (isOpen.value) {\n close();\n } else {\n open();\n }\n }\n\n watch(() => isOpened, () => {\n if (isOpened) {\n open();\n } else {\n close();\n }\n }, {immediate: true});\n\n defineExpose({\n isOpen,\n close,\n open,\n toggle\n });\n</script>\n","<template>\n <div :class=\"$style.expandableGroup\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { getExposedRef } from '@flux-ui/internals';\n import { ComponentInternalInstance, provide } from 'vue';\n import { FluxExpandableGroupInjectionKey } from '$flux/data';\n import $style from '$flux/css/component/Expandable.module.scss';\n\n const {\n isControlled\n } = defineProps<{\n readonly isControlled?: boolean;\n }>();\n\n\n defineSlots<{\n default(): any;\n }>();\n\n const expandables: { [key: number]: ComponentInternalInstance; } = {};\n\n function closeAll(): void {\n Object.values(expandables).forEach(expandable => {\n const isOpenRef = getExposedRef<boolean>(expandable, 'isOpen');\n isOpenRef.value = false;\n });\n }\n\n function register(uid: number, expandable: ComponentInternalInstance): void {\n expandables[uid] = expandable;\n\n if (!isControlled && Object.values(expandables).length === 1) {\n const isOpenRef = getExposedRef<boolean>(expandable, 'isOpen');\n isOpenRef.value = true;\n }\n }\n\n function unregister(uid: number): void {\n delete expandables[uid];\n }\n\n provide(FluxExpandableGroupInjectionKey, {\n closeAll,\n register,\n unregister\n });\n</script>\n","<template>\n <div\n ref=\"fader\"\n :class=\"$style.fader\">\n <slot v-bind=\"{current, next, previous}\"/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { unrefTemplateElement, useInterval } from '@flux-ui/internals';\n import { computed, ref, unref, useTemplateRef, watch } from 'vue';\n import $style from '$flux/css/component/Fader.module.scss';\n\n const emit = defineEmits<{\n update: [number];\n }>();\n\n const {\n interval = 9000\n } = defineProps<{\n readonly interval?: number;\n }>();\n\n defineSlots<{\n default(props: {\n next(): void;\n previous(): void;\n\n readonly current: number;\n }): any;\n }>();\n\n const faderRef = useTemplateRef('fader');\n useInterval(interval, () => next());\n\n const current = ref(-1);\n\n const count = computed(() => {\n const fader = unrefTemplateElement(faderRef);\n return fader?.children.length ?? 0;\n });\n\n function next(): void {\n current.value = unref(current) + 1 >= unref(count) ? 0 : unref(current) + 1;\n }\n\n function previous(): void {\n current.value = unref(current) - 1 <= -1 ? unref(count) - 1 : unref(current) + 1;\n }\n\n watch(current, current => {\n const fader = unrefTemplateElement(faderRef);\n\n if (!fader || fader.children.length === 0) {\n return;\n }\n\n Array.from(fader.children).forEach(item => item.classList.remove($style.isCurrent));\n fader.children[current].classList.add($style.isCurrent);\n emit('update', current);\n }, {immediate: true});\n</script>\n","<template>\n <FluxWindowTransition :is-back=\"isBack\">\n <template v-for=\"(_, slot) of slots\">\n <slot\n v-if=\"slot === view\"\n v-bind=\"{back, navigate}\"\n :name=\"slot\"/>\n </template>\n </FluxWindowTransition>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { ref } from 'vue';\n import { FluxWindowTransition } from '$flux/transition';\n\n const slots = defineSlots<{\n default(props: {\n back(to?: string): void;\n navigate(to: string): void;\n }): any;\n\n [key: string]: (props: {\n back(to?: string): void;\n navigate(to: string): void;\n }) => any;\n }>();\n\n const isBack = ref(false);\n const view = ref<string>('default');\n\n function back(to: string = 'default'): void {\n isBack.value = true;\n view.value = to;\n }\n\n function navigate(to: string): void {\n isBack.value = false;\n view.value = to;\n }\n\n defineExpose({\n back,\n navigate\n });\n</script>\n","<template>\n <div\n v-height-transition\n :class=\"$style.filter\">\n <FluxWindow ref=\"window\">\n <template #default=\"{navigate}\">\n <FilterMenuRenderer\n :navigate=\"navigate\"\n :state=\"modelValue\">\n <slot/>\n </FilterMenuRenderer>\n </template>\n\n <template\n v-for=\"(filter, name) of filters\"\n #[name]>\n <FluxMenu>\n <FluxMenuGroup\n :class=\"$style.filterHeader\"\n is-horizontal>\n <FluxMenuItem\n :class=\"$style.filterBack\"\n :label=\"translate('flux.back')\"\n icon-leading=\"angle-left\"\n @click=\"back()\"/>\n\n <FluxMenuItem\n v-if=\"resettable?.includes(name)\"\n :class=\"$style.filterReset\"\n icon-leading=\"trash\"\n is-destructive\n @click=\"reset(name)\"/>\n </FluxMenuGroup>\n\n <VNodeRenderer :vnode=\"filter\"/>\n </FluxMenu>\n </template>\n </FluxWindow>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { flattenVNodeTree, getComponentName, getComponentProps, vHeightTransition } from '@flux-ui/internals';\n import type { FluxFilterOptionItem, FluxFilterState } from '@flux-ui/types';\n import { computed, provide, unref, useTemplateRef, VNode } from 'vue';\n import { useTranslate } from '$flux/composable/private';\n import { FluxFilterInjectionKey } from '$flux/data';\n import { FilterMenuRenderer, VNodeRenderer } from './primitive';\n import FluxMenu from './FluxMenu.vue';\n import FluxMenuGroup from './FluxMenuGroup.vue';\n import FluxMenuItem from './FluxMenuItem.vue';\n import FluxWindow from './FluxWindow.vue';\n import $style from '$flux/css/component/Filter.module.scss';\n\n const emit = defineEmits<{\n reset: [string]\n }>();\n\n const modelValue = defineModel<FluxFilterState>({\n required: true\n });\n\n defineProps<{\n readonly resettable?: string[];\n }>();\n\n const slots = defineSlots<{\n default(): any;\n }>();\n\n const translate = useTranslate();\n\n const windowRef = useTemplateRef<{ back(to: string): void; }>('window');\n\n const filters = computed<Record<string, VNode>>(() => {\n const filters: { [key: string]: VNode; } = {};\n const items = flattenVNodeTree(slots.default?.() ?? []);\n\n for (const item of items) {\n const name = getComponentName(item);\n\n if (!name.startsWith('FluxFilter')) {\n continue;\n }\n\n const props = getComponentProps<{ name: string; }>(item);\n\n if (!props.name) {\n continue;\n }\n\n filters[props.name] = item;\n }\n\n return filters;\n });\n\n function back(): void {\n unref(windowRef)?.back('default');\n }\n\n function reset(name: string): void {\n back();\n emit('reset', name);\n }\n\n function getValue(name: string): FluxFilterOptionItem['value'] | undefined {\n if (!hasValue(name)) {\n return undefined;\n }\n\n return unref(modelValue)[name] as FluxFilterOptionItem['value'];\n }\n\n function hasValue(name: string): boolean {\n return name in unref(modelValue);\n }\n\n function setValue(name: string, value: FluxFilterOptionItem['value']): void {\n modelValue.value[name] = value;\n }\n\n provide(FluxFilterInjectionKey, {\n state: modelValue,\n back,\n reset,\n getValue,\n hasValue,\n setValue\n });\n</script>\n","<template>\n <FluxDatePicker\n :class=\"$style.filterDatePicker\"\n :max=\"max\"\n :min=\"min\"\n :model-value=\"currentValue\"\n @update:model-value=\"onDatePicked\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName } from '@flux-ui/types';\n import { DateTime } from 'luxon';\n import { computed, unref } from 'vue';\n import { useFilterInjection } from '$flux/composable';\n import FluxDatePicker from './FluxDatePicker.vue';\n import $style from '$flux/css/component/Filter.module.scss';\n\n const {\n name\n } = defineProps<{\n readonly icon?: FluxIconName;\n readonly label: string;\n readonly max?: DateTime;\n readonly min?: DateTime;\n readonly name: string;\n }>();\n\n const {back, state, setValue} = useFilterInjection();\n\n const currentValue = computed(() => {\n const value = unref(state)[name];\n\n if (!value) {\n return null;\n }\n\n if (!DateTime.isDateTime(value)) {\n if (typeof value === 'string') {\n return DateTime.fromISO(value);\n }\n\n return null;\n }\n\n return value;\n });\n\n function onDatePicked(date: DateTime | DateTime[] | null): void {\n if (!DateTime.isDateTime(date)) {\n return;\n }\n\n setValue(name, date);\n back();\n }\n</script>\n","<template>\n <FluxDatePicker\n :class=\"$style.filterDatePicker\"\n :max=\"max\"\n :min=\"min\"\n :model-value=\"currentValue\"\n :range-mode=\"rangeMode\"\n @update:model-value=\"onDatePicked\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName } from '@flux-ui/types';\n import { DateTime } from 'luxon';\n import { computed, unref } from 'vue';\n import { useFilterInjection } from '$flux/composable';\n import FluxDatePicker from './FluxDatePicker.vue';\n import $style from '$flux/css/component/Filter.module.scss';\n\n const {\n name,\n rangeMode = 'range'\n } = defineProps<{\n readonly icon?: FluxIconName;\n readonly label: string;\n readonly max?: DateTime;\n readonly min?: DateTime;\n readonly name: string;\n readonly rangeMode?: 'range' | 'week' | 'month';\n }>();\n\n const {back, state, setValue} = useFilterInjection();\n\n const currentValue = computed(() => {\n const value = unref(state)[name];\n\n if (!value || !Array.isArray(value)) {\n return null;\n }\n\n const [start, end] = value;\n\n if (!DateTime.isDateTime(start) || !DateTime.isDateTime(end)) {\n return null;\n }\n\n return [start, end];\n });\n\n function onDatePicked(date: DateTime | DateTime[] | null): void {\n if (date === null || !Array.isArray(date)) {\n return;\n }\n\n setValue(name, date);\n back();\n }\n</script>\n","<template>\n <FilterOptionBase\n v-model:search-query=\"modelSearch\"\n :is-searchable=\"isSearchable\"\n :options=\"filteredOptions\"\n :selected=\"[currentValue]\"\n :search-placeholder=\"searchPlaceholder\"\n @select=\"onSelect\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFilterOptionRow, FluxFilterValue, FluxFilterValueSingle, FluxIconName } from '@flux-ui/types';\n import { computed, unref } from 'vue';\n import { useFilterInjection } from '$flux/composable';\n import { isFluxFilterOptionHeader } from '$flux/data';\n import { FilterOptionBase } from './primitive';\n\n const modelSearch = defineModel<string>('searchQuery', {default: ''});\n\n const {\n name,\n options\n } = defineProps<{\n readonly icon?: FluxIconName;\n readonly isSearchable?: boolean;\n readonly label: string;\n readonly name: string;\n readonly options: FluxFilterOptionRow[];\n readonly searchPlaceholder?: string;\n }>();\n\n const {back, state, setValue} = useFilterInjection();\n\n const currentValue = computed(() => unref(state)[name] as FluxFilterValueSingle);\n const filteredOptions = computed(() => options\n .filter(o => isFluxFilterOptionHeader(o) || unref(modelSearch).length === 0 || o.label.toLowerCase().includes(unref(modelSearch).toLowerCase())));\n\n function onSelect(value: FluxFilterValue): void {\n if (unref(currentValue) === value) {\n setValue(name, null);\n } else {\n setValue(name, value);\n }\n\n back();\n }\n</script>\n","<template>\n <FilterOptionBase\n v-model:search-query=\"modelSearch\"\n :is-loading=\"isLoading\"\n is-searchable\n :options=\"options\"\n :selected=\"[currentValue]\"\n :search-placeholder=\"searchPlaceholder\"\n @select=\"onSelect\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useDebouncedRef } from '@flux-ui/internals';\n import type { FluxFilterOptionRow, FluxFilterValue, FluxFilterValueSingle, FluxIconName } from '@flux-ui/types';\n import { computed, ref, unref, watch } from 'vue';\n import { useFilterInjection } from '$flux/composable';\n import { useLoaded } from '$flux/composable/private';\n import { isFluxFilterOptionItem } from '$flux/data';\n import { FilterOptionBase } from './primitive';\n\n const modelSearch = defineModel<string>('searchQuery', {\n default: ''\n });\n\n const {\n fetchOptions: fetchOptionsProp,\n fetchRelevant: fetchRelevantProp,\n fetchSearch: fetchSearchProp,\n name\n } = defineProps<{\n fetchOptions(ids: FluxFilterValue[]): Promise<FluxFilterOptionRow[]>;\n fetchRelevant(): Promise<FluxFilterOptionRow[]>;\n fetchSearch(searchQuery: string): Promise<FluxFilterOptionRow[]>;\n\n readonly icon?: FluxIconName;\n readonly label: string;\n readonly name: string;\n readonly searchPlaceholder?: string;\n }>();\n\n const {back, state, setValue} = useFilterInjection();\n const {isLoading, loaded} = useLoaded();\n const debouncedModelSearch = useDebouncedRef(modelSearch, 150);\n const fetchOptions = computed(() => loaded(fetchOptionsProp));\n const fetchRelevant = computed(() => loaded(fetchRelevantProp));\n const fetchSearch = computed(() => loaded(fetchSearchProp));\n\n const selectedOptions = ref<FluxFilterOptionRow[]>([]);\n const visibleOptions = ref<FluxFilterOptionRow[]>([]);\n\n const currentValue = computed(() => unref(state)[name] as FluxFilterValueSingle);\n\n const options = computed(() => {\n const options: FluxFilterOptionRow[] = [];\n const search = unref(modelSearch);\n const selected = unref(selectedOptions);\n const visible = unref(visibleOptions);\n\n visible.forEach(vo => options.push(vo));\n\n selected.forEach(so => {\n if (isFluxFilterOptionItem(so) && visible.find(vo => isFluxFilterOptionItem(vo) && vo.value === so.value)) {\n return;\n }\n\n if (isFluxFilterOptionItem(so) && !so.label.toLowerCase().includes(search.toLowerCase())) {\n return;\n }\n\n options.push(so);\n });\n\n return options;\n });\n\n function onSelect(value: FluxFilterValue): void {\n if (unref(currentValue) === value) {\n setValue(name, null);\n } else {\n setValue(name, value);\n }\n\n back();\n }\n\n watch(currentValue, async value => {\n if (!value && value !== 0) {\n return;\n }\n\n selectedOptions.value = await unref(fetchOptions)([value]);\n }, {immediate: true});\n\n watch(debouncedModelSearch, async searchQuery => {\n if (searchQuery.length > 0) {\n visibleOptions.value = await unref(fetchSearch)(searchQuery);\n } else {\n visibleOptions.value = await unref(fetchRelevant)();\n }\n }, {immediate: true});\n</script>\n","<template>\n <FilterOptionBase\n v-model:search-query=\"modelSearch\"\n :is-searchable=\"isSearchable\"\n :options=\"filteredOptions\"\n :selected=\"currentValue\"\n :search-placeholder=\"searchPlaceholder\"\n @select=\"onSelect\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFilterOptionRow, FluxFilterValueSingle, FluxIconName } from '@flux-ui/types';\n import { computed, unref } from 'vue';\n import { useFilterInjection } from '$flux/composable';\n import { isFluxFilterOptionHeader } from '$flux/data';\n import { FilterOptionBase } from './primitive';\n\n const modelSearch = defineModel<string>('searchQuery', {\n default: ''\n });\n\n const {\n name,\n options\n } = defineProps<{\n readonly icon?: FluxIconName;\n readonly isSearchable?: boolean;\n readonly label: string;\n readonly name: string;\n readonly options: FluxFilterOptionRow[];\n readonly searchPlaceholder?: string;\n }>();\n\n const {state, setValue} = useFilterInjection();\n\n const currentValue = computed(() => {\n const value = unref(state)[name];\n\n if (Array.isArray(value)) {\n return value;\n }\n\n return [];\n });\n\n const filteredOptions = computed(() => options\n .filter(o => isFluxFilterOptionHeader(o) || unref(modelSearch).length === 0 || o.label.toLowerCase().includes(unref(modelSearch).toLowerCase())));\n\n function onSelect(value: FluxFilterValueSingle): void {\n let values = Array.from(unref(currentValue));\n\n if (values.includes(value)) {\n values = values.filter(v => v !== value);\n } else {\n values.push(value);\n }\n\n setValue(name, values);\n }\n</script>\n","<template>\n <FilterOptionBase\n v-model:search-query=\"modelSearch\"\n :is-loading=\"isLoading\"\n is-searchable\n :options=\"options\"\n :selected=\"currentValue\"\n :search-placeholder=\"searchPlaceholder\"\n @select=\"onSelect\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useDebouncedRef } from '@flux-ui/internals';\n import type { FluxFilterOptionRow, FluxFilterValue, FluxFilterValueSingle, FluxIconName } from '@flux-ui/types';\n import { computed, ref, unref, watch } from 'vue';\n import { useFilterInjection } from '$flux/composable';\n import { useLoaded } from '$flux/composable/private';\n import { isFluxFilterOptionItem } from '$flux/data';\n import { FilterOptionBase } from './primitive';\n\n const modelSearch = defineModel<string>('searchQuery', {\n default: ''\n });\n\n const {\n fetchOptions: fetchOptionsProp,\n fetchRelevant: fetchRelevantProp,\n fetchSearch: fetchSearchProp,\n name\n } = defineProps<{\n fetchOptions(ids: FluxFilterValue[]): Promise<FluxFilterOptionRow[]>;\n fetchRelevant(): Promise<FluxFilterOptionRow[]>;\n fetchSearch(searchQuery: string): Promise<FluxFilterOptionRow[]>;\n\n readonly icon?: FluxIconName;\n readonly label: string;\n readonly name: string;\n readonly searchPlaceholder?: string;\n }>();\n\n const {state, setValue} = useFilterInjection();\n const {isLoading, loaded} = useLoaded();\n const debouncedModelSearch = useDebouncedRef(modelSearch, 150);\n const fetchOptions = computed(() => loaded(fetchOptionsProp));\n const fetchRelevant = computed(() => loaded(fetchRelevantProp));\n const fetchSearch = computed(() => loaded(fetchSearchProp));\n\n const selectedOptions = ref<FluxFilterOptionRow[]>([]);\n const visibleOptions = ref<FluxFilterOptionRow[]>([]);\n\n const currentValue = computed(() => {\n const value = unref(state)[name];\n\n if (Array.isArray(value)) {\n return value;\n }\n\n return [];\n });\n\n const options = computed(() => {\n const options: FluxFilterOptionRow[] = [];\n const search = unref(modelSearch);\n const selected = unref(selectedOptions);\n const visible = unref(visibleOptions);\n\n visible.forEach(vo => options.push(vo));\n\n selected.forEach(so => {\n if (isFluxFilterOptionItem(so) && visible.find(vo => isFluxFilterOptionItem(vo) && vo.value === so.value)) {\n return;\n }\n\n if (isFluxFilterOptionItem(so) && !so.label.toLowerCase().includes(search.toLowerCase())) {\n return;\n }\n\n options.push(so);\n });\n\n return options;\n });\n\n function onSelect(value: FluxFilterValueSingle): void {\n let values = Array.from(unref(currentValue));\n\n if (values.includes(value)) {\n values = values.filter(v => v !== value);\n } else {\n values.push(value);\n }\n\n setValue(name, values);\n }\n\n watch(currentValue, async value => {\n if (value.length === 0) {\n return;\n }\n\n selectedOptions.value = await unref(fetchOptions)(value);\n }, {immediate: true});\n\n watch(debouncedModelSearch, async searchQuery => {\n if (searchQuery.length > 0) {\n visibleOptions.value = await unref(fetchSearch)(searchQuery);\n } else {\n visibleOptions.value = await unref(fetchRelevant)();\n }\n }, {immediate: true});\n</script>\n","<template>\n <FluxPaneBody>\n <FluxFormColumn>\n <FluxFormField :label=\"translate('flux.min')\">\n <FluxFormSlider\n :formatter=\"formatter\"\n :is-ticks-visible=\"isTicksVisible\"\n :model-value=\"currentValue[0]\"\n :max=\"max\"\n :min=\"min\"\n :step=\"step\"\n @update:model-value=\"update({lower: $event})\"/>\n\n <template #value>\n {{ formatter ? formatter(currentValue[0]) : currentValue[0] }}\n </template>\n </FluxFormField>\n\n <FluxFormField :label=\"translate('flux.max')\">\n <FluxFormSlider\n :formatter=\"formatter\"\n :is-ticks-visible=\"isTicksVisible\"\n :model-value=\"currentValue[1]\"\n :max=\"max\"\n :min=\"min\"\n :step=\"step\"\n @update:model-value=\"update({upper: $event})\"/>\n\n <template #value>\n {{ formatter ? formatter(currentValue[1]) : currentValue[1] }}\n </template>\n </FluxFormField>\n </FluxFormColumn>\n </FluxPaneBody>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { formatNumber } from '@basmilius/utils';\n import type { FluxIconName } from '@flux-ui/types';\n import { computed, unref } from 'vue';\n import { useFilterInjection } from '$flux/composable';\n import { useTranslate } from '$flux/composable/private';\n import FluxFormColumn from './FluxFormColumn.vue';\n import FluxFormField from './FluxFormField.vue';\n import FluxFormSlider from './FluxFormSlider.vue';\n import FluxPaneBody from './FluxPaneBody.vue';\n\n const {\n formatter = formatNumber,\n max,\n min,\n name,\n step = 1\n } = defineProps<{\n readonly icon?: FluxIconName;\n readonly isTicksVisible?: boolean;\n readonly label: string;\n readonly name: string;\n readonly max: number;\n readonly min: number;\n readonly step?: number;\n readonly formatter?: (value: number) => string;\n }>();\n\n const {state, setValue} = useFilterInjection();\n const translate = useTranslate();\n\n const currentValue = computed(() => (unref(state)[name] ?? [min, max]) as number[]);\n\n function update({lower, upper}: { lower?: number, upper?: number }): void {\n if (lower || lower === 0) {\n upper ??= unref(currentValue)[1];\n\n if (lower > upper) {\n upper = lower;\n }\n }\n\n if (upper || upper === 0) {\n lower ??= unref(currentValue)[0];\n\n if (lower > upper) {\n lower = upper;\n }\n }\n\n setValue(name, [lower!, upper!]);\n }\n</script>\n","<template>\n <canvas\n ref=\"canvas\"\n :class=\"$style.flickeringGrid\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { mulberry32 } from '@basmilius/utils';\n import { useInView } from '@flux-ui/internals';\n import { computed, unref, useTemplateRef, watch } from 'vue';\n import $style from '$flux/css/component/Visual.module.scss';\n\n const {\n color = '#1d4ed8',\n flickerChance = 0.15,\n gap = 6,\n maxOpacity = 0.3,\n size = 3\n } = defineProps<{\n readonly color?: string;\n readonly flickerChance?: number;\n readonly gap?: number;\n readonly maxOpacity?: number;\n readonly size?: number;\n }>();\n\n const canvasRef = useTemplateRef('canvas');\n\n const inView = useInView(canvasRef);\n\n const mulberry = mulberry32(13);\n\n const rgb = computed(() => {\n const canvas = document.createElement('canvas');\n canvas.width = canvas.height = 1;\n\n const context = canvas.getContext('2d');\n\n if (!context) {\n return [0, 0, 0];\n }\n\n context.fillStyle = color;\n context.fillRect(0, 0, 1, 1);\n\n return context.getImageData(0, 0, 1, 1).data;\n });\n\n function draw(context: CanvasRenderingContext2D, width: number, height: number, columns: number, rows: number, squares: Float32Array, dpr: number): void {\n context.clearRect(0, 0, width * dpr, height * dpr);\n\n const [r, g, b] = unref(rgb);\n\n for (let i = 0; i < columns; ++i) {\n for (let j = 0; j < rows; ++j) {\n const opacity = squares[i * rows + j];\n context.fillStyle = `rgb(${r} ${g} ${b} / ${opacity})`;\n context.fillRect(\n (i * (size + gap) + width / 2 - (columns / 2 * (size + gap) - gap / 2)) * dpr,\n (j * (size + gap) + height / 2 - (rows / 2 * (size + gap) - gap / 2)) * dpr,\n size * dpr,\n size * dpr\n );\n }\n }\n }\n\n function setup(canvas: HTMLCanvasElement) {\n const width = canvas.clientWidth;\n const height = canvas.clientHeight;\n const dpr = window.devicePixelRatio || 1;\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n\n const columns = Math.ceil(width / (size + gap));\n const rows = Math.ceil(height / (size + gap));\n const squares = new Float32Array(columns * rows);\n\n for (let i = 0; i < squares.length; ++i) {\n squares[i] = mulberry.next() * maxOpacity;\n }\n\n return {\n width,\n height,\n columns,\n rows,\n squares,\n dpr\n };\n }\n\n function tick(squares: Float32Array, delta: number): void {\n for (let i = 0; i < squares.length; ++i) {\n if (mulberry.next() < flickerChance * delta) {\n squares[i] = mulberry.next() * maxOpacity;\n }\n }\n }\n\n watch([canvasRef, inView], ([canvas, inView], _, onCleanup) => {\n if (!canvas || !inView) {\n return;\n }\n\n const context = canvas.getContext('2d');\n\n if (!context) {\n return;\n }\n\n let frame = 0;\n let lastTime = 0;\n let {width, height, columns, rows, squares, dpr} = setup(canvas);\n\n const animate = (time: number): void => {\n const delta = (time - lastTime) / 1000;\n lastTime = time;\n\n tick(squares, delta);\n draw(context, width, height, columns, rows, squares, dpr);\n frame = requestAnimationFrame(animate);\n };\n\n const onResize = () => {\n ({width, height, columns, rows, squares, dpr} = setup(canvas));\n };\n\n window.addEventListener('resize', onResize, {passive: true});\n requestAnimationFrame(animate);\n\n onCleanup(() => {\n window.removeEventListener('resize', onResize);\n cancelAnimationFrame(frame);\n });\n }, {immediate: true});\n</script>\n","<template>\n <FluxPane :style=\"{'--aspect-ratio': aspectRatio}\">\n <FluxFadeTransition mode=\"out-in\">\n <FluxPaneBody\n v-if=\"isPreviewing\"\n key=\"preview\">\n <div :class=\"$style.focalPointPreview\">\n <div\n :class=\"$style.focalPointPreviewImage\"\n :style=\"{\n backgroundImage: `url(${src})`,\n backgroundPosition: `${focalPointX}% ${focalPointY}%`\n }\"/>\n </div>\n </FluxPaneBody>\n\n <FluxPaneBody\n v-else\n key=\"editor\">\n <div\n :class=\"$style.focalPointEditor\"\n @pointerdown=\"onPointerDown\"\n @pointermove=\"onPointerMove\">\n <img\n ref=\"image\"\n :class=\"$style.focalPointEditorImage\"\n :src=\"src\"\n alt=\"\"\n @load=\"onImageLoaded\"/>\n\n <div\n :class=\"$style.focalPointEditorArea\"\n :style=\"{\n top: `${focalPointY}%`,\n left: `${focalPointX}%`\n }\"/>\n </div>\n </FluxPaneBody>\n </FluxFadeTransition>\n\n <FluxPaneFooter>\n <slot name=\"footer-before\"/>\n\n <FluxSecondaryButton\n :label=\"translate(isPreviewing ? 'flux.previewClose' : 'flux.preview')\"\n @click=\"onShowPreviewClicked\"/>\n\n <FluxSpacer/>\n\n <slot name=\"footer\"/>\n </FluxPaneFooter>\n </FluxPane>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { computed, onMounted, onUnmounted, ref, unref, useTemplateRef, watch } from 'vue';\n import { useTranslate } from '$flux/composable/private';\n import { FluxFadeTransition } from '$flux/transition';\n import FluxPane from './FluxPane.vue';\n import FluxPaneBody from './FluxPaneBody.vue';\n import FluxPaneFooter from './FluxPaneFooter.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import FluxSpacer from './FluxSpacer.vue';\n import $style from '$flux/css/component/FocalPoint.module.scss';\n\n const modelValue = defineModel<[number, number]>({\n required: true\n });\n\n const {\n src\n } = defineProps<{\n readonly src: string;\n }>();\n\n const imageRef = useTemplateRef('image');\n const translate = useTranslate();\n\n const aspectRatio = ref(1);\n const dragging = ref<[number, number] | null>(null);\n const isPreviewing = ref(false);\n\n const focalPointX = computed(() => unref(dragging) ? unref(dragging)![0] : unref(modelValue)[0]);\n const focalPointY = computed(() => unref(dragging) ? unref(dragging)![1] : unref(modelValue)[1]);\n\n onMounted(() => window.addEventListener('pointerup', onPointerUp, {passive: true}));\n\n onUnmounted(() => window.removeEventListener('pointerup', onPointerUp));\n\n function onImageLoaded(): void {\n const image = unref(imageRef);\n\n if (!image) {\n return;\n }\n\n aspectRatio.value = image.width / image.height;\n }\n\n function onPointerDown(evt: PointerEvent): void {\n dragging.value = [0, 0];\n onPointerMove(evt);\n }\n\n function onPointerMove(evt: PointerEvent): void {\n const image = unref(imageRef);\n\n if (!image || !dragging.value) {\n return;\n }\n\n const {top, left, width, height} = image.getBoundingClientRect();\n const {pageX, pageY} = evt;\n\n dragging.value = [\n Math.max(0, Math.min(1, (pageX - left) / width)) * 100,\n Math.max(0, Math.min(1, (pageY - top) / height)) * 100\n ];\n }\n\n function onPointerUp(): void {\n if (!dragging.value) {\n return;\n }\n\n modelValue.value = dragging.value!;\n dragging.value = null;\n }\n\n function onShowPreviewClicked(): void {\n isPreviewing.value = !isPreviewing.value;\n }\n\n watch(() => src, () => isPreviewing.value = false);\n</script>\n","<template>\n <img\n :class=\"$style.focalPointImage\"\n :style=\"{\n objectPosition: `${x}% ${y}%`\n }\"\n :src=\"src\"\n :alt=\"alt\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFocalPointObject } from '@flux-ui/types';\n import { computed } from 'vue';\n import $style from '$flux/css/component/FocalPoint.module.scss';\n\n const {\n alt = '',\n focalPoint\n } = defineProps<{\n readonly focalPoint?: FluxFocalPointObject;\n readonly alt?: string;\n readonly src: string;\n }>();\n\n const x = computed(() => focalPoint?.x ?? 50);\n const y = computed(() => focalPoint?.y ?? 50);\n</script>\n","<template>\n <FluxDisabled :disabled=\"disabled\">\n <form\n :class=\"$style.form\"\n :aria-disabled=\"disabled ? true : undefined\"\n @submit.prevent=\"onSubmit()\">\n <slot/>\n </form>\n </FluxDisabled>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import FluxDisabled from './FluxDisabled.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n const emit = defineEmits<{\n submit: [];\n }>();\n\n const {\n disabled = false\n } = defineProps<{\n readonly disabled?: boolean;\n }>();\n\n defineSlots<{\n default(): any;\n }>();\n\n function onSubmit(): void {\n emit('submit');\n }\n</script>\n","<template>\n <FluxFlyout\n ref=\"flyout\"\n :width=\"300\">\n <template #opener=\"{open}\">\n <FluxFormInputGroup>\n <FluxFormInput\n :=\"{autoComplete, autoFocus, disabled, isReadonly, modelValue, placeholder}\"\n v-model=\"localValue\"\n :class=\"$style.formDateInput\"\n :disabled=\"disabled\"\n :max=\"max?.toISO()?.substring(0, 10)\"\n :min=\"min?.toISO()?.substring(0, 10)\"\n type=\"date\"\n @blur=\"onBlur()\"\n @focus=\"onFocus()\"\n @show-picker=\"open\"/>\n\n <FluxSecondaryButton\n :disabled=\"disabled\"\n icon-leading=\"calendar\"\n @click.prevent=\"open\"/>\n </FluxFormInputGroup>\n </template>\n\n <FluxDatePicker\n v-model=\"localValue\"\n :max=\"max\"\n :min=\"min\"/>\n </FluxFlyout>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxAutoCompleteType } from '@flux-ui/types';\n import type { DateTime } from 'luxon';\n import { ref, toRef, unref, useTemplateRef, watch } from 'vue';\n import { useDisabled } from '$flux/composable';\n import FluxDatePicker from './FluxDatePicker.vue';\n import FluxFlyout from './FluxFlyout.vue';\n import FluxFormInput from './FluxFormInput.vue';\n import FluxFormInputGroup from './FluxFormInputGroup.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n const emit = defineEmits<{\n blur: [];\n focus: [];\n }>();\n\n const modelValue = defineModel<DateTime | null>({\n default: null\n });\n\n const {\n disabled: componentDisabled\n } = defineProps<{\n readonly autoComplete?: FluxAutoCompleteType;\n readonly autoFocus?: boolean;\n readonly disabled?: boolean;\n readonly isReadonly?: boolean;\n readonly max?: DateTime;\n readonly min?: DateTime;\n readonly placeholder?: string;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const flyoutRef = useTemplateRef('flyout');\n\n const localValue = ref<DateTime | null>(null);\n\n function onBlur(): void {\n emit('blur');\n }\n\n function onFocus(): void {\n emit('focus');\n }\n\n watch(modelValue, modelValue => localValue.value = modelValue, {immediate: true});\n\n watch(localValue, localValue => {\n unref(flyoutRef)?.close();\n\n if (modelValue.value?.toISODate() === localValue?.toISODate()) {\n return;\n }\n\n modelValue.value = localValue;\n });\n</script>\n","<template>\n <FluxFlyout\n ref=\"flyout\"\n :width=\"300\">\n <template #opener=\"{open}\">\n <FluxFormInputGroup :aria-disabled=\"disabled ? true : undefined\">\n <div\n :class=\"clsx(\n $style.formDateRangeInput,\n disabled && $style.isDisabled\n )\"\n role=\"presentation\">\n <span>{{ label }}</span>\n </div>\n\n <FluxSecondaryButton\n :disabled=\"disabled\"\n icon-leading=\"calendar\"\n @click.prevent=\"open\"/>\n </FluxFormInputGroup>\n </template>\n\n <FluxDatePicker\n v-model=\"localValue\"\n :max=\"max\"\n :min=\"min\"\n :range-mode=\"rangeMode\"/>\n </FluxFlyout>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxAutoCompleteType } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import type { DateTime } from 'luxon';\n import { computed, ref, toRef, unref, useTemplateRef, watch } from 'vue';\n import { useDisabled } from '$flux/composable';\n import { createLabelForDateRange } from '$flux/util';\n import FluxDatePicker from './FluxDatePicker.vue';\n import FluxFlyout from './FluxFlyout.vue';\n import FluxFormInputGroup from './FluxFormInputGroup.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n const modelValue = defineModel<[DateTime, DateTime] | null>({\n required: true\n });\n\n const {\n disabled: componentDisabled,\n rangeMode = 'range'\n } = defineProps<{\n readonly autoComplete?: FluxAutoCompleteType;\n readonly autoFocus?: boolean;\n readonly disabled?: boolean;\n readonly isReadonly?: boolean;\n readonly max?: DateTime;\n readonly min?: DateTime;\n readonly placeholder?: string;\n readonly rangeMode?: 'range' | 'week' | 'month';\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const flyoutRef = useTemplateRef('flyout');\n\n const localValue = ref<[DateTime, DateTime] | null>(null);\n\n const label = computed(() => {\n const value = unref(localValue);\n\n if (!value) {\n return '';\n }\n\n const [start, end] = value;\n\n return createLabelForDateRange(start, end, true);\n });\n\n watch(localValue, localValue => {\n unref(flyoutRef)?.close();\n modelValue.value = localValue;\n });\n\n watch(modelValue, modelValue => localValue.value = modelValue, {immediate: true});\n</script>\n","<template>\n <FluxStack\n :class=\"$style.formDateTimeInput\"\n direction=\"horizontal\"\n :gap=\"15\"\n :aria-disabled=\"disabled ? true : undefined\">\n <FluxFlyout\n ref=\"flyout\"\n :width=\"300\">\n <template #opener=\"{open}\">\n <FluxFormInputGroup>\n <FluxFormInput\n :=\"{autoFocus, disabled, isReadonly, modelValue, placeholder}\"\n :class=\"$style.formDateInput\"\n :disabled=\"disabled\"\n :model-value=\"localValue\"\n type=\"date\"\n @update:model-value=\"setDate\"\n @show-picker=\"open\"/>\n\n <FluxSecondaryButton\n :disabled=\"disabled\"\n icon-leading=\"calendar\"\n @click.prevent=\"open\"/>\n </FluxFormInputGroup>\n </template>\n\n <FluxDatePicker\n :max=\"max\"\n :min=\"min\"\n :model-value=\"localValue\"\n @update:model-value=\"setDate\"/>\n </FluxFlyout>\n\n <FluxFormInput\n :=\"{disabled, isReadonly, modelValue, placeholder}\"\n :class=\"$style.formTimeInput\"\n type=\"time\"\n :model-value=\"localValue\"\n @update:model-value=\"setTime\"/>\n </FluxStack>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxAutoCompleteType } from '@flux-ui/types';\n import { DateTime } from 'luxon';\n import { ref, toRef, unref, useTemplateRef, watch } from 'vue';\n import { useDisabled } from '$flux/composable';\n import FluxDatePicker from './FluxDatePicker.vue';\n import FluxFlyout from './FluxFlyout.vue';\n import FluxFormInput from './FluxFormInput.vue';\n import FluxFormInputGroup from './FluxFormInputGroup.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import FluxStack from './FluxStack.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n const modelValue = defineModel<DateTime | null>({\n required: true\n });\n\n const {\n disabled: componentDisabled,\n isHourOnly\n } = defineProps<{\n readonly autoComplete?: FluxAutoCompleteType;\n readonly autoFocus?: boolean;\n readonly disabled?: boolean;\n readonly isHourOnly?: boolean;\n readonly isReadonly?: boolean;\n readonly max?: DateTime;\n readonly min?: DateTime;\n readonly placeholder?: string;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const flyoutRef = useTemplateRef<{ close(): void; }>('flyout');\n\n const localValue = ref<DateTime | null>(null);\n\n function setDate(dateTime: DateTime | object | string | number | null): void {\n if (!DateTime.isDateTime(dateTime)) {\n return;\n }\n\n const value: DateTime = (localValue.value ?? DateTime.now());\n localValue.value = value.set({\n day: dateTime.day,\n month: dateTime.month,\n year: dateTime.year\n });\n }\n\n function setTime(dateTime: DateTime | string | number | object | null): void {\n if (!DateTime.isDateTime(dateTime)) {\n return;\n }\n\n const value: DateTime = (localValue.value ?? DateTime.now());\n localValue.value = value.set({\n hour: dateTime.hour,\n minute: unref(isHourOnly) ? 0 : dateTime.minute,\n second: unref(isHourOnly) ? 0 : dateTime.second\n });\n }\n\n watch(() => isHourOnly, () => isHourOnly && (localValue.value = unref(localValue)?.startOf('hour') ?? null), {immediate: true});\n watch(modelValue, modelValue => localValue.value = isHourOnly ? modelValue?.startOf('hour') ?? null : modelValue, {immediate: true});\n\n watch(localValue, localValue => {\n unref(flyoutRef)?.close();\n\n if (modelValue.value?.toISO() === localValue?.toISO()) {\n return;\n }\n\n modelValue.value = localValue;\n });\n</script>\n","<template>\n <fieldset\n :class=\"disabled ? $style.pinInputDisabled : $style.pinInputEnabled\"\n :id=\"id\"\n :style=\"{\n '--max-length': maxLength\n }\"\n :autofocus=\"autoFocus\"\n :aria-disabled=\"disabled ? true : undefined\">\n <input\n v-for=\"field of maxLength\"\n :key=\"field\"\n ref=\"fields\"\n :class=\"$style.pinInputField\"\n maxlength=\"1\"\n :autocomplete=\"field === 1 ? autoComplete : undefined\"\n :autofocus=\"field === 1 && autoFocus\"\n :disabled=\"disabled\"\n :tabindex=\"(field - 1) === modelValue?.length ? 0 : -1\"\n :type=\"isPrivate ? 'password' : 'text'\"\n :value=\"modelValue[field - 1]\"\n @focus=\"onFocus\"\n @input=\"onInput\"\n @keydown=\"onKeyDown\"\n @paste=\"onPaste\"/>\n </fieldset>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxAutoCompleteType } from '@flux-ui/types';\n import { toRef, unref, useTemplateRef } from 'vue';\n import { useDisabled, useFormFieldInjection } from '$flux/composable';\n import $style from '$flux/css/component/Form.module.scss';\n\n const modelValue = defineModel<string>({\n default: ''\n });\n\n const {\n autoComplete = 'one-time-code',\n autoFocus = false,\n disabled: componentDisabled,\n maxLength = 6\n } = defineProps<{\n readonly autoComplete?: FluxAutoCompleteType;\n readonly autoFocus?: boolean;\n readonly disabled?: boolean;\n readonly isPrivate?: boolean;\n readonly maxLength?: number;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const {id} = useFormFieldInjection();\n\n const fieldRefs = useTemplateRef<HTMLInputElement[]>('fields');\n\n function onFocus(evt: FocusEvent): void {\n const input = evt.target as HTMLInputElement;\n requestAnimationFrame(() => input.select());\n }\n\n function onInput(): void {\n const fields = unref(fieldRefs) ?? [];\n const values = fields\n .map(f => f.value.trim() === '' ? NaN : Number(f.value))\n .filter(v => !isNaN(v));\n\n modelValue.value = values.join('');\n }\n\n function onKeyDown(evt: KeyboardEvent): void {\n const input = evt.target as HTMLInputElement;\n const value = input.value.trim();\n\n const next = input.nextElementSibling as HTMLInputElement | null;\n const previous = input.previousElementSibling as HTMLInputElement | null;\n\n switch (evt.key) {\n case 'Backspace':\n value === '' && previous?.focus();\n break;\n\n case 'ArrowLeft':\n case 'ArrowUp':\n input.selectionStart === 0 && previous?.select();\n break;\n\n case 'ArrowDown':\n case 'ArrowRight':\n (input.selectionStart === 1 || value === '') && next?.select();\n break;\n\n case 'Tab':\n break;\n\n case 'v':\n if (evt.ctrlKey || evt.metaKey) {\n break;\n }\n\n evt.preventDefault();\n break;\n\n default:\n if (isNaN(Number(evt.key))) {\n evt.preventDefault();\n break;\n }\n\n requestAnimationFrame(() => next?.focus());\n break;\n }\n }\n\n function onPaste(evt: ClipboardEvent): void {\n if (!evt.clipboardData) {\n return;\n }\n\n const value = evt.clipboardData.getData('text').replace(/\\D/g, '');\n\n if (value.length !== maxLength) {\n return;\n }\n\n modelValue.value = value;\n\n requestAnimationFrame(() => {\n const fields = unref(fieldRefs) ?? [];\n fields[maxLength - 1].focus();\n });\n }\n</script>\n","<template>\n <SliderBase\n :disabled=\"disabled\"\n :is-dragging=\"isDraggingLower || isDraggingUpper\"\n :is-ticks-visible=\"isTicksVisible\"\n :max=\"max\"\n :min=\"min\"\n :step=\"step\"\n @dragging=\"onDragging\"\n @update=\"onUpdate\">\n <SliderTrack\n :percentage-lower=\"percentageLower\"\n :percentage-upper=\"percentageUpper\">\n <SliderThumb\n ref=\"lowerThumb\"\n :disabled=\"disabled\"\n :is-dragging=\"isDraggingLower\"\n :position=\"percentageLower\"\n @grab=\"!disabled && (isDraggingLower = true)\"\n @decrement=\"onDecrement('lower')\"\n @increment=\"onIncrement('lower')\"/>\n\n <SliderThumb\n ref=\"upperThumb\"\n :disabled=\"disabled\"\n :is-dragging=\"isDraggingUpper\"\n :position=\"percentageUpper\"\n @grab=\"!disabled && (isDraggingUpper = true)\"\n @decrement=\"onDecrement('upper')\"\n @increment=\"onIncrement('upper')\"/>\n </SliderTrack>\n </SliderBase>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { clampWithStepPrecision, countDecimals, formatNumber } from '@basmilius/utils';\n import { computed, ref, toRef, unref, useTemplateRef, watch } from 'vue';\n import { useDisabled } from '$flux/composable';\n import { addTooltip, removeTooltip, updateTooltip } from '$flux/data';\n import { SliderBase, SliderThumb, SliderTrack } from './primitive';\n\n const modelValue = defineModel<[number, number]>({\n required: true\n });\n\n const {\n formatter = formatNumber,\n disabled: componentDisabled,\n isTooltipDisabled,\n max = 100,\n min = 0,\n step = 1\n } = defineProps<{\n formatter?(value: number, decimals?: number): string;\n\n readonly disabled?: boolean;\n readonly isTicksVisible?: boolean;\n readonly isTooltipDisabled?: boolean;\n readonly max?: number;\n readonly min?: number;\n readonly step?: number;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const lowerThumbRef = useTemplateRef('lowerThumb');\n const upperThumbRef = useTemplateRef('upperThumb');\n\n const isDraggingLower = ref(false);\n const isDraggingUpper = ref(false);\n const percentageLower = ref(0);\n const percentageUpper = ref(0);\n const lowerValue = ref(0);\n const upperValue = ref(0);\n const tooltipId = ref<number | null>(null);\n\n const tooltipContent = computed(() => formatter(modelValue.value[isDraggingLower.value ? 0 : 1], countDecimals(step)));\n\n function onDragging(is: boolean): void {\n if (is) {\n return;\n }\n\n isDraggingLower.value = is;\n isDraggingUpper.value = is;\n }\n\n function onUpdate(value: number): void {\n let lower = clampWithStepPrecision(lowerValue.value, min, max, step);\n let upper = clampWithStepPrecision(upperValue.value, min, max, step);\n\n if (isDraggingLower.value) {\n lower = clampWithStepPrecision(value, min, max, step);\n }\n\n if (isDraggingUpper.value) {\n upper = clampWithStepPrecision(value, min, max, step);\n }\n\n if (lower >= upper) {\n return;\n }\n\n if (tooltipId.value) {\n updateTooltip(tooltipId.value, {\n content: unref(tooltipContent),\n origin: unref(isDraggingLower.value ? lowerThumbRef : upperThumbRef)?.$el\n });\n }\n\n lowerValue.value = (lower - min) / (max - min);\n upperValue.value = (upper - min) / (max - min);\n }\n\n function onDecrement(which: 'lower' | 'upper'): void {\n let lower = clampWithStepPrecision(lowerValue.value, min, max, step);\n let upper = clampWithStepPrecision(upperValue.value, min, max, step);\n\n if (which === 'lower') {\n lower = Math.max(min, lower - step);\n } else {\n upper = Math.max(min, upper - step);\n }\n\n if (lower >= upper) {\n return;\n }\n\n modelValue.value = [lower, upper];\n }\n\n function onIncrement(which: 'lower' | 'upper'): void {\n let lower = clampWithStepPrecision(lowerValue.value, min, max, step);\n let upper = clampWithStepPrecision(upperValue.value, min, max, step);\n\n if (which === 'lower') {\n lower = Math.min(max, lower + step);\n } else {\n upper = Math.min(max, upper + step);\n }\n\n if (lower >= upper) {\n return;\n }\n\n modelValue.value = [lower, upper];\n }\n\n watch(modelValue, modelValue => {\n lowerValue.value = (modelValue[0] - min) / (max - min);\n upperValue.value = (modelValue[1] - min) / (max - min);\n }, {immediate: true});\n\n watch(([() => max, () => min, () => step, lowerValue, upperValue]), () => {\n const lower = clampWithStepPrecision(unref(lowerValue), min, max, step);\n const upper = clampWithStepPrecision(unref(upperValue), min, max, step);\n\n percentageLower.value = (lower - min) / (max - min);\n percentageUpper.value = (upper - min) / (max - min);\n\n modelValue.value = [lower, upper];\n }, {immediate: true});\n\n watch(([isDraggingLower, isDraggingUpper]), ([isDraggingLower, isDraggingUpper]) => {\n const is = isDraggingLower || isDraggingUpper;\n\n if (is && !tooltipId.value && !isTooltipDisabled) {\n tooltipId.value = addTooltip({\n content: unref(tooltipContent),\n direction: 'vertical',\n origin: unref(isDraggingLower ? lowerThumbRef : upperThumbRef)?.$el\n });\n } else if (!is && tooltipId.value) {\n removeTooltip(tooltipId.value);\n tooltipId.value = null;\n }\n });\n</script>\n","<template>\n <SelectBase\n v-model:searchQuery=\"modelSearch\"\n :disabled=\"disabled\"\n :is-multiple=\"isMultiple\"\n :is-searchable=\"isSearchable\"\n :options=\"groups\"\n :placeholder=\"placeholder\"\n :selected=\"selected\"\n @deselect=\"onDeselect\"\n @select=\"onSelect\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFormSelectEntry, FluxFormSelectValue } from '@flux-ui/types';\n import { toRef, unref } from 'vue';\n import { SelectBase } from '$flux/component/primitive';\n import { useDisabled } from '$flux/composable';\n import { useFormSelect } from '$flux/composable/private';\n\n const modelSearch = defineModel<string>('searchQuery', {\n default: ''\n });\n\n const modelValue = defineModel<FluxFormSelectValue>({\n required: true\n });\n\n const {\n disabled: componentDisabled,\n isMultiple,\n options\n } = defineProps<{\n readonly disabled?: boolean;\n readonly isMultiple?: boolean;\n readonly placeholder?: string;\n readonly isSearchable?: boolean;\n readonly options: FluxFormSelectEntry[];\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const {groups, selected, values} = useFormSelect(modelValue, isMultiple, options, modelSearch);\n\n function onDeselect(id: string | number | null): void {\n if (unref(isMultiple)) {\n modelValue.value = unref(values).filter(v => v !== id);\n }\n }\n\n function onSelect(id: string | number | null): void {\n if (unref(isMultiple)) {\n modelValue.value = [...unref(values), id];\n } else {\n modelValue.value = id;\n }\n }\n</script>\n","<template>\n <SelectBase\n v-model:search-query=\"modelSearch\"\n :disabled=\"disabled\"\n :is-loading=\"isLoading\"\n :is-multiple=\"isMultiple\"\n is-searchable\n :options=\"groups\"\n :placeholder=\"placeholder\"\n :selected=\"selected\"\n @deselect=\"onDeselect\"\n @open=\"onOpen()\"\n @select=\"onSelect\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useDebouncedRef } from '@flux-ui/internals';\n import type { FluxFormSelectEntry, FluxFormSelectValue, FluxFormSelectValueSingle } from '@flux-ui/types';\n import { computed, ref, toRef, unref, watch } from 'vue';\n import { SelectBase } from '$flux/component/primitive';\n import { useDisabled } from '$flux/composable';\n import { useFormSelect, useLoaded } from '$flux/composable/private';\n import { isFluxFormSelectOption } from '$flux/data';\n\n const modelSearch = defineModel<string>('searchQuery', {\n default: ''\n });\n\n const modelValue = defineModel<FluxFormSelectValue>({\n required: true\n });\n\n const {\n fetchOptions: fetchOptionsProp,\n fetchRelevant: fetchRelevantProp,\n fetchSearch: fetchSearchProp,\n disabled: componentDisabled,\n isMultiple\n } = defineProps<{\n fetchOptions(ids: FluxFormSelectValueSingle[]): Promise<FluxFormSelectEntry[]>;\n fetchRelevant(): Promise<FluxFormSelectEntry[]>;\n fetchSearch(searchQuery: string): Promise<FluxFormSelectEntry[]>;\n\n readonly disabled?: boolean;\n readonly isMultiple?: boolean;\n readonly placeholder?: string;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const selectedOptions = ref<FluxFormSelectEntry[]>([]);\n const visibleOptions = ref<FluxFormSelectEntry[]>([]);\n\n const options = computed(() => {\n const options: FluxFormSelectEntry[] = [];\n const search = unref(modelSearch);\n const selected = unref(selectedOptions);\n const visible = unref(visibleOptions);\n\n visible.forEach(vo => options.push(vo));\n\n selected.forEach(so => {\n if (isFluxFormSelectOption(so) && visible.find(vo => isFluxFormSelectOption(vo) && vo.value === so.value)) {\n return;\n }\n\n if (isFluxFormSelectOption(so) && !so.label.toLowerCase().includes(search.toLowerCase())) {\n return;\n }\n\n options.push(so);\n });\n\n return options;\n });\n\n const {groups, selected, values} = useFormSelect(modelValue, isMultiple, options);\n const {isLoading, loaded} = useLoaded();\n const debouncedModelSearch = useDebouncedRef(modelSearch, 300);\n const fetchOptions = computed(() => loaded(fetchOptionsProp));\n const fetchRelevant = computed(() => loaded(fetchRelevantProp));\n const fetchSearch = computed(() => loaded(fetchSearchProp));\n\n function onDeselect(id: string | number | null): void {\n if (isMultiple) {\n modelValue.value = unref(values).filter(v => v !== id);\n }\n }\n\n async function onOpen(): Promise<void> {\n visibleOptions.value = await unref(fetchRelevant)();\n }\n\n function onSelect(id: string | number | null): void {\n if (isMultiple) {\n modelValue.value = [...unref(values), id];\n } else {\n modelValue.value = id;\n }\n }\n\n watch(values, async values => {\n if (values.length === 0) {\n return;\n }\n\n selectedOptions.value = await unref(fetchOptions)(values);\n }, {immediate: true});\n\n watch(debouncedModelSearch, async searchQuery => {\n if (searchQuery.length > 0) {\n visibleOptions.value = await unref(fetchSearch)(searchQuery);\n } else {\n visibleOptions.value = await unref(fetchRelevant)();\n }\n });\n</script>\n","<template>\n <textarea\n v-model=\"modelValue\"\n ref=\"input\"\n :class=\"disabled ? $style.formTextAreaDisabled : $style.formTextAreaEnabled\"\n :id=\"id\"\n :autocomplete=\"autoComplete\"\n :autofocus=\"autoFocus\"\n :disabled=\"disabled\"\n :maxlength=\"maxLength\"\n :placeholder=\"placeholder\"\n :style=\"{\n '--rows': rows\n }\"\n :aria-disabled=\"disabled ? true : undefined\"\n @blur=\"emit('blur')\"\n @focus=\"emit('focus')\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxAutoCompleteType } from '@flux-ui/types';\n import { toRef } from 'vue';\n import { useDisabled, useFormFieldInjection } from '$flux/composable';\n import $style from '$flux/css/component/Form.module.scss';\n\n const emit = defineEmits<{\n blur: [];\n focus: [];\n }>();\n\n const modelValue = defineModel<string>({\n default: ''\n });\n\n const {\n autoFocus = false,\n disabled: componentDisabled,\n rows = 3\n } = defineProps<{\n readonly autoComplete?: FluxAutoCompleteType;\n readonly autoFocus?: boolean;\n readonly disabled?: boolean;\n readonly isReadonly?: boolean;\n readonly maxLength?: number;\n readonly placeholder?: string;\n readonly rows?: number;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const {id} = useFormFieldInjection();\n</script>\n","<template>\n <FluxFormSelect\n v-model=\"modelValue\"\n :disabled=\"disabled\"\n is-searchable\n :options=\"options\"\n :placeholder=\"placeholder\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFormSelectEntry } from '@flux-ui/types';\n import { upperFirst } from 'lodash-es';\n import { computed, toRef } from 'vue';\n import { useDisabled } from '$flux/composable';\n import { useTranslate } from '$flux/composable/private';\n import type { FluxTranslation } from '$flux/data';\n import FluxFormSelect from './FluxFormSelect.vue';\n\n const timeZones = [\n 'Africa/Abidjan',\n 'Africa/Accra',\n 'Africa/Addis_Ababa',\n 'Africa/Algiers',\n 'Africa/Asmara',\n 'Africa/Asmera',\n 'Africa/Bamako',\n 'Africa/Bangui',\n 'Africa/Banjul',\n 'Africa/Bissau',\n 'Africa/Blantyre',\n 'Africa/Brazzaville',\n 'Africa/Bujumbura',\n 'Africa/Cairo',\n 'Africa/Casablanca',\n 'Africa/Ceuta',\n 'Africa/Conakry',\n 'Africa/Dakar',\n 'Africa/Dar_es_Salaam',\n 'Africa/Djibouti',\n 'Africa/Douala',\n 'Africa/El_Aaiun',\n 'Africa/Freetown',\n 'Africa/Gaborone',\n 'Africa/Harare',\n 'Africa/Johannesburg',\n 'Africa/Juba',\n 'Africa/Kampala',\n 'Africa/Khartoum',\n 'Africa/Kigali',\n 'Africa/Kinshasa',\n 'Africa/Lagos',\n 'Africa/Libreville',\n 'Africa/Lome',\n 'Africa/Luanda',\n 'Africa/Lubumbashi',\n 'Africa/Lusaka',\n 'Africa/Malabo',\n 'Africa/Maputo',\n 'Africa/Maseru',\n 'Africa/Mbabane',\n 'Africa/Mogadishu',\n 'Africa/Monrovia',\n 'Africa/Nairobi',\n 'Africa/Ndjamena',\n 'Africa/Niamey',\n 'Africa/Nouakchott',\n 'Africa/Ouagadougou',\n 'Africa/Porto-Novo',\n 'Africa/Sao_Tome',\n 'Africa/Timbuktu',\n 'Africa/Tripoli',\n 'Africa/Tunis',\n 'Africa/Windhoek',\n 'America/Adak',\n 'America/Anchorage',\n 'America/Anguilla',\n 'America/Antigua',\n 'America/Araguaina',\n 'America/Argentina/Buenos_Aires',\n 'America/Argentina/Catamarca',\n 'America/Argentina/ComodRivadavia',\n 'America/Argentina/Cordoba',\n 'America/Argentina/Jujuy',\n 'America/Argentina/La_Rioja',\n 'America/Argentina/Mendoza',\n 'America/Argentina/Rio_Gallegos',\n 'America/Argentina/Salta',\n 'America/Argentina/San_Juan',\n 'America/Argentina/San_Luis',\n 'America/Argentina/Tucuman',\n 'America/Argentina/Ushuaia',\n 'America/Aruba',\n 'America/Asuncion',\n 'America/Atikokan',\n 'America/Atka',\n 'America/Bahia',\n 'America/Bahia_Banderas',\n 'America/Barbados',\n 'America/Belem',\n 'America/Belize',\n 'America/Blanc-Sablon',\n 'America/Boa_Vista',\n 'America/Bogota',\n 'America/Boise',\n 'America/Buenos_Aires',\n 'America/Cambridge_Bay',\n 'America/Campo_Grande',\n 'America/Cancun',\n 'America/Caracas',\n 'America/Catamarca',\n 'America/Cayenne',\n 'America/Cayman',\n 'America/Chicago',\n 'America/Chihuahua',\n 'America/Ciudad_Juarez',\n 'America/Coral_Harbour',\n 'America/Cordoba',\n 'America/Costa_Rica',\n 'America/Creston',\n 'America/Cuiaba',\n 'America/Curacao',\n 'America/Danmarkshavn',\n 'America/Dawson',\n 'America/Dawson_Creek',\n 'America/Denver',\n 'America/Detroit',\n 'America/Dominica',\n 'America/Edmonton',\n 'America/Eirunepe',\n 'America/El_Salvador',\n 'America/Ensenada',\n 'America/Fort_Nelson',\n 'America/Fort_Wayne',\n 'America/Fortaleza',\n 'America/Glace_Bay',\n 'America/Godthab',\n 'America/Goose_Bay',\n 'America/Grand_Turk',\n 'America/Grenada',\n 'America/Guadeloupe',\n 'America/Guatemala',\n 'America/Guayaquil',\n 'America/Guyana',\n 'America/Halifax',\n 'America/Havana',\n 'America/Hermosillo',\n 'America/Indiana/Indianapolis',\n 'America/Indiana/Knox',\n 'America/Indiana/Marengo',\n 'America/Indiana/Petersburg',\n 'America/Indiana/Tell_City',\n 'America/Indiana/Vevay',\n 'America/Indiana/Vincennes',\n 'America/Indiana/Winamac',\n 'America/Indianapolis',\n 'America/Inuvik',\n 'America/Iqaluit',\n 'America/Jamaica',\n 'America/Jujuy',\n 'America/Juneau',\n 'America/Kentucky/Louisville',\n 'America/Kentucky/Monticello',\n 'America/Knox_IN',\n 'America/Kralendijk',\n 'America/La_Paz',\n 'America/Lima',\n 'America/Los_Angeles',\n 'America/Louisville',\n 'America/Lower_Princes',\n 'America/Maceio',\n 'America/Managua',\n 'America/Manaus',\n 'America/Marigot',\n 'America/Martinique',\n 'America/Matamoros',\n 'America/Mazatlan',\n 'America/Mendoza',\n 'America/Menominee',\n 'America/Merida',\n 'America/Metlakatla',\n 'America/Mexico_City',\n 'America/Miquelon',\n 'America/Moncton',\n 'America/Monterrey',\n 'America/Montevideo',\n 'America/Montreal',\n 'America/Montserrat',\n 'America/Nassau',\n 'America/New_York',\n 'America/Nipigon',\n 'America/Nome',\n 'America/Noronha',\n 'America/North_Dakota/Beulah',\n 'America/North_Dakota/Center',\n 'America/North_Dakota/New_Salem',\n 'America/Nuuk',\n 'America/Ojinaga',\n 'America/Panama',\n 'America/Pangnirtung',\n 'America/Paramaribo',\n 'America/Phoenix',\n 'America/Port-au-Prince',\n 'America/Port_of_Spain',\n 'America/Porto_Acre',\n 'America/Porto_Velho',\n 'America/Puerto_Rico',\n 'America/Punta_Arenas',\n 'America/Rainy_River',\n 'America/Rankin_Inlet',\n 'America/Recife',\n 'America/Regina',\n 'America/Resolute',\n 'America/Rio_Branco',\n 'America/Rosario',\n 'America/Santa_Isabel',\n 'America/Santarem',\n 'America/Santiago',\n 'America/Santo_Domingo',\n 'America/Sao_Paulo',\n 'America/Scoresbysund',\n 'America/Shiprock',\n 'America/Sitka',\n 'America/St_Barthelemy',\n 'America/St_Johns',\n 'America/St_Kitts',\n 'America/St_Lucia',\n 'America/St_Thomas',\n 'America/St_Vincent',\n 'America/Swift_Current',\n 'America/Tegucigalpa',\n 'America/Thule',\n 'America/Thunder_Bay',\n 'America/Tijuana',\n 'America/Toronto',\n 'America/Tortola',\n 'America/Vancouver',\n 'America/Virgin',\n 'America/Whitehorse',\n 'America/Winnipeg',\n 'America/Yakutat',\n 'America/Yellowknife',\n 'Antarctica/Casey',\n 'Antarctica/Davis',\n 'Antarctica/DumontDUrville',\n 'Antarctica/Macquarie',\n 'Antarctica/Mawson',\n 'Antarctica/McMurdo',\n 'Antarctica/Palmer',\n 'Antarctica/Rothera',\n 'Antarctica/South_Pole',\n 'Antarctica/Syowa',\n 'Antarctica/Troll',\n 'Antarctica/Vostok',\n 'Arctic/Longyearbyen',\n 'Asia/Aden',\n 'Asia/Almaty',\n 'Asia/Amman',\n 'Asia/Anadyr',\n 'Asia/Aqtau',\n 'Asia/Aqtobe',\n 'Asia/Ashgabat',\n 'Asia/Ashkhabad',\n 'Asia/Atyrau',\n 'Asia/Baghdad',\n 'Asia/Bahrain',\n 'Asia/Baku',\n 'Asia/Bangkok',\n 'Asia/Barnaul',\n 'Asia/Beirut',\n 'Asia/Bishkek',\n 'Asia/Brunei',\n 'Asia/Calcutta',\n 'Asia/Chita',\n 'Asia/Choibalsan',\n 'Asia/Chongqing',\n 'Asia/Chungking',\n 'Asia/Colombo',\n 'Asia/Dacca',\n 'Asia/Damascus',\n 'Asia/Dhaka',\n 'Asia/Dili',\n 'Asia/Dubai',\n 'Asia/Dushanbe',\n 'Asia/Famagusta',\n 'Asia/Gaza',\n 'Asia/Harbin',\n 'Asia/Hebron',\n 'Asia/Ho_Chi_Minh',\n 'Asia/Hong_Kong',\n 'Asia/Hovd',\n 'Asia/Irkutsk',\n 'Asia/Istanbul',\n 'Asia/Jakarta',\n 'Asia/Jayapura',\n 'Asia/Jerusalem',\n 'Asia/Kabul',\n 'Asia/Kamchatka',\n 'Asia/Karachi',\n 'Asia/Kashgar',\n 'Asia/Kathmandu',\n 'Asia/Katmandu',\n 'Asia/Khandyga',\n 'Asia/Kolkata',\n 'Asia/Krasnoyarsk',\n 'Asia/Kuala_Lumpur',\n 'Asia/Kuching',\n 'Asia/Kuwait',\n 'Asia/Macao',\n 'Asia/Macau',\n 'Asia/Magadan',\n 'Asia/Makassar',\n 'Asia/Manila',\n 'Asia/Muscat',\n 'Asia/Nicosia',\n 'Asia/Novokuznetsk',\n 'Asia/Novosibirsk',\n 'Asia/Omsk',\n 'Asia/Oral',\n 'Asia/Phnom_Penh',\n 'Asia/Pontianak',\n 'Asia/Pyongyang',\n 'Asia/Qatar',\n 'Asia/Qostanay',\n 'Asia/Qyzylorda',\n 'Asia/Rangoon',\n 'Asia/Riyadh',\n 'Asia/Saigon',\n 'Asia/Sakhalin',\n 'Asia/Samarkand',\n 'Asia/Seoul',\n 'Asia/Shanghai',\n 'Asia/Singapore',\n 'Asia/Srednekolymsk',\n 'Asia/Taipei',\n 'Asia/Tashkent',\n 'Asia/Tbilisi',\n 'Asia/Tehran',\n 'Asia/Tel_Aviv',\n 'Asia/Thimbu',\n 'Asia/Thimphu',\n 'Asia/Tokyo',\n 'Asia/Tomsk',\n 'Asia/Ujung_Pandang',\n 'Asia/Ulaanbaatar',\n 'Asia/Ulan_Bator',\n 'Asia/Urumqi',\n 'Asia/Ust-Nera',\n 'Asia/Vientiane',\n 'Asia/Vladivostok',\n 'Asia/Yakutsk',\n 'Asia/Yangon',\n 'Asia/Yekaterinburg',\n 'Asia/Yerevan',\n 'Atlantic/Azores',\n 'Atlantic/Bermuda',\n 'Atlantic/Canary',\n 'Atlantic/Cape_Verde',\n 'Atlantic/Faeroe',\n 'Atlantic/Faroe',\n 'Atlantic/Jan_Mayen',\n 'Atlantic/Madeira',\n 'Atlantic/Reykjavik',\n 'Atlantic/South_Georgia',\n 'Atlantic/St_Helena',\n 'Atlantic/Stanley',\n 'Australia/ACT',\n 'Australia/Adelaide',\n 'Australia/Brisbane',\n 'Australia/Broken_Hill',\n 'Australia/Canberra',\n 'Australia/Currie',\n 'Australia/Darwin',\n 'Australia/Eucla',\n 'Australia/Hobart',\n 'Australia/LHI',\n 'Australia/Lindeman',\n 'Australia/Lord_Howe',\n 'Australia/Melbourne',\n 'Australia/North',\n 'Australia/NSW',\n 'Australia/Perth',\n 'Australia/Queensland',\n 'Australia/South',\n 'Australia/Sydney',\n 'Australia/Tasmania',\n 'Australia/Victoria',\n 'Australia/West',\n 'Australia/Yancowinna',\n 'Brazil/Acre',\n 'Brazil/DeNoronha',\n 'Brazil/East',\n 'Brazil/West',\n 'Canada/Atlantic',\n 'Canada/Central',\n 'Canada/Eastern',\n 'Canada/Mountain',\n 'Canada/Newfoundland',\n 'Canada/Pacific',\n 'Canada/Saskatchewan',\n 'Canada/Yukon',\n 'CET',\n 'Chile/Continental',\n 'Chile/EasterIsland',\n 'CST6CDT',\n 'Cuba',\n 'EET',\n 'Egypt',\n 'Eire',\n 'EST',\n 'EST5EDT',\n 'Etc/GMT',\n 'Etc/GMT+0',\n 'Etc/GMT+1',\n 'Etc/GMT+10',\n 'Etc/GMT+11',\n 'Etc/GMT+12',\n 'Etc/GMT+2',\n 'Etc/GMT+3',\n 'Etc/GMT+4',\n 'Etc/GMT+5',\n 'Etc/GMT+6',\n 'Etc/GMT+7',\n 'Etc/GMT+8',\n 'Etc/GMT+9',\n 'Etc/GMT-0',\n 'Etc/GMT-1',\n 'Etc/GMT-10',\n 'Etc/GMT-11',\n 'Etc/GMT-12',\n 'Etc/GMT-13',\n 'Etc/GMT-14',\n 'Etc/GMT-2',\n 'Etc/GMT-3',\n 'Etc/GMT-4',\n 'Etc/GMT-5',\n 'Etc/GMT-6',\n 'Etc/GMT-7',\n 'Etc/GMT-8',\n 'Etc/GMT-9',\n 'Etc/GMT0',\n 'Etc/Greenwich',\n 'Etc/UCT',\n 'Etc/Universal',\n 'Etc/UTC',\n 'Etc/Zulu',\n 'Europe/Amsterdam',\n 'Europe/Andorra',\n 'Europe/Astrakhan',\n 'Europe/Athens',\n 'Europe/Belfast',\n 'Europe/Belgrade',\n 'Europe/Berlin',\n 'Europe/Bratislava',\n 'Europe/Brussels',\n 'Europe/Bucharest',\n 'Europe/Budapest',\n 'Europe/Busingen',\n 'Europe/Chisinau',\n 'Europe/Copenhagen',\n 'Europe/Dublin',\n 'Europe/Gibraltar',\n 'Europe/Guernsey',\n 'Europe/Helsinki',\n 'Europe/Isle_of_Man',\n 'Europe/Istanbul',\n 'Europe/Jersey',\n 'Europe/Kaliningrad',\n 'Europe/Kiev',\n 'Europe/Kirov',\n 'Europe/Lisbon',\n 'Europe/Ljubljana',\n 'Europe/London',\n 'Europe/Luxembourg',\n 'Europe/Madrid',\n 'Europe/Malta',\n 'Europe/Mariehamn',\n 'Europe/Minsk',\n 'Europe/Monaco',\n 'Europe/Moscow',\n 'Europe/Nicosia',\n 'Europe/Oslo',\n 'Europe/Paris',\n 'Europe/Podgorica',\n 'Europe/Prague',\n 'Europe/Riga',\n 'Europe/Rome',\n 'Europe/Samara',\n 'Europe/San_Marino',\n 'Europe/Sarajevo',\n 'Europe/Saratov',\n 'Europe/Simferopol',\n 'Europe/Skopje',\n 'Europe/Sofia',\n 'Europe/Stockholm',\n 'Europe/Tallinn',\n 'Europe/Tirane',\n 'Europe/Tiraspol',\n 'Europe/Ulyanovsk',\n 'Europe/Uzhgorod',\n 'Europe/Vaduz',\n 'Europe/Vatican',\n 'Europe/Vienna',\n 'Europe/Vilnius',\n 'Europe/Volgograd',\n 'Europe/Warsaw',\n 'Europe/Zagreb',\n 'Europe/Zaporozhye',\n 'Europe/Zurich',\n 'Factory',\n 'GB',\n 'GB-Eire',\n 'GMT',\n 'GMT+0',\n 'GMT-0',\n 'GMT0',\n 'Greenwich',\n 'Hongkong',\n 'HST',\n 'Iceland',\n 'Indian/Antananarivo',\n 'Indian/Chagos',\n 'Indian/Christmas',\n 'Indian/Cocos',\n 'Indian/Comoro',\n 'Indian/Kerguelen',\n 'Indian/Mahe',\n 'Indian/Maldives',\n 'Indian/Mauritius',\n 'Indian/Mayotte',\n 'Indian/Reunion',\n 'Iran',\n 'Israel',\n 'Jamaica',\n 'Japan',\n 'Kwajalein',\n 'Libya',\n 'MET',\n 'Mexico/BajaNorte',\n 'Mexico/BajaSur',\n 'Mexico/General',\n 'MST',\n 'MST7MDT',\n 'Navajo',\n 'NZ',\n 'NZ-CHAT',\n 'Pacific/Apia',\n 'Pacific/Auckland',\n 'Pacific/Bougainville',\n 'Pacific/Chatham',\n 'Pacific/Chuuk',\n 'Pacific/Easter',\n 'Pacific/Efate',\n 'Pacific/Enderbury',\n 'Pacific/Fakaofo',\n 'Pacific/Fiji',\n 'Pacific/Funafuti',\n 'Pacific/Galapagos',\n 'Pacific/Gambier',\n 'Pacific/Guadalcanal',\n 'Pacific/Guam',\n 'Pacific/Honolulu',\n 'Pacific/Johnston',\n 'Pacific/Kiritimati',\n 'Pacific/Kosrae',\n 'Pacific/Kwajalein',\n 'Pacific/Majuro',\n 'Pacific/Marquesas',\n 'Pacific/Midway',\n 'Pacific/Nauru',\n 'Pacific/Niue',\n 'Pacific/Norfolk',\n 'Pacific/Noumea',\n 'Pacific/Pago_Pago',\n 'Pacific/Palau',\n 'Pacific/Pitcairn',\n 'Pacific/Pohnpei',\n 'Pacific/Ponape',\n 'Pacific/Port_Moresby',\n 'Pacific/Rarotonga',\n 'Pacific/Saipan',\n 'Pacific/Samoa',\n 'Pacific/Tahiti',\n 'Pacific/Tarawa',\n 'Pacific/Tongatapu',\n 'Pacific/Truk',\n 'Pacific/Wake',\n 'Pacific/Wallis',\n 'Pacific/Yap',\n 'Poland',\n 'Portugal',\n 'PRC',\n 'PST8PDT',\n 'ROC',\n 'ROK',\n 'Singapore',\n 'Turkey',\n 'UCT',\n 'Universal',\n 'US/Alaska',\n 'US/Aleutian',\n 'US/Arizona',\n 'US/Central',\n 'US/East-Indiana',\n 'US/Eastern',\n 'US/Hawaii',\n 'US/Indiana-Starke',\n 'US/Michigan',\n 'US/Mountain',\n 'US/Pacific',\n 'US/Samoa',\n 'UTC',\n 'W-SU',\n 'WET',\n 'Zulu'\n ];\n\n const timeZoneGroupOrder: FluxTranslation[] = [\n 'flux.timezoneEurope',\n 'flux.timezoneAmerica',\n 'flux.timezoneUs',\n 'flux.timezoneAustralia',\n 'flux.timezoneCanada',\n 'flux.timezoneMexico',\n 'flux.timezoneAfrica',\n 'flux.timezoneAntarctica',\n 'flux.timezoneArctic',\n 'flux.timezoneAsia',\n 'flux.timezoneAtlantic',\n 'flux.timezoneBrazil',\n 'flux.timezoneChile',\n 'flux.timezoneEtc',\n 'flux.timezoneOther',\n 'flux.timezoneIndian',\n 'flux.timezonePacific'\n ];\n\n const modelValue = defineModel<string | null>({\n default: null\n });\n\n const {\n disabled: componentDisabled\n } = defineProps<{\n readonly disabled?: boolean;\n readonly placeholder?: string;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const translate = useTranslate();\n\n const options = computed<FluxFormSelectEntry[]>(() => {\n const groups: Record<string, FluxFormSelectEntry[]> = {};\n const options: FluxFormSelectEntry[] = [];\n\n for (const timeZone of timeZones) {\n const timeZoneOptions = Intl.DateTimeFormat(navigator.language, {timeZone}).resolvedOptions();\n const timeZoneOffset = new Intl.DateTimeFormat(navigator.language, {timeZone, timeZoneName: 'longOffset'}).formatToParts().find(p => p.type === 'timeZoneName')!.value.substring(3);\n const label = timeZoneOptions.timeZone\n .replaceAll('_', ' ')\n .replaceAll('/', ' / ');\n\n let group = 'flux.timezoneOther';\n\n if (label.includes('/')) {\n group = `flux.timezone${upperFirst(label.split('/')[0].trim().toLowerCase())}`;\n }\n\n groups[group] ??= [];\n\n if (groups[group].find(go => go.label === label)) {\n continue;\n }\n\n groups[group].push({\n command: timeZoneOffset,\n label: label,\n value: timeZone\n });\n }\n\n const sortedGroups = Object.fromEntries(\n Object.entries(groups)\n .sort(([a], [b]) => {\n const ai = timeZoneGroupOrder.indexOf(a as FluxTranslation);\n const bi = timeZoneGroupOrder.indexOf(b as FluxTranslation);\n\n if (ai > bi) {\n return 1;\n }\n\n if (bi > ai) {\n return -1;\n }\n\n return 0;\n })\n );\n\n for (const group in sortedGroups) {\n const groupOptions = sortedGroups[group].sort(({label: labelA}, {label: labelB}) => labelA.localeCompare(labelB));\n\n options.push({\n label: translate(group as FluxTranslation)\n });\n\n groupOptions.forEach(go => options.push(go));\n }\n\n return options;\n });\n</script>\n","<template>\n <button\n :class=\"clsx(\n $style.remove,\n isHidden && $style.isHidden\n )\"\n type=\"button\"\n @click=\"emit('click', $event)\">\n <FluxIcon\n v-if=\"icon\"\n :name=\"icon\"\n :size=\"16\"/>\n </button>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Remove.module.scss';\n\n const emit = defineEmits<{\n click: [MouseEvent];\n }>();\n\n const {\n icon = 'xmark'\n } = defineProps<{\n readonly icon?: FluxIconName;\n readonly isHidden?: boolean;\n }>();\n</script>\n","<template>\n <div\n :class=\"$style.galleryItem\"\n @mouseenter.capture=\"isDeleteVisible = true\"\n @mouseout.capture=\"isDeleteVisible = false\">\n <FluxFocalPointImage\n :class=\"$style.galleryItemImage\"\n :focal-point=\"focalPoint\"\n :src=\"url\"/>\n\n <FluxRemove\n v-if=\"isDeletable\"\n :is-hidden=\"!isDeleteVisible\"\n tabindex=\"-1\"\n @click=\"emit('delete')\"/>\n\n <div\n v-if=\"isPending\"\n :class=\"$style.galleryItemLoader\">\n <FluxSpinner :size=\"24\"/>\n </div>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFocalPointObject } from '@flux-ui/types';\n import { ref } from 'vue';\n import FluxFocalPointImage from './FluxFocalPointImage.vue';\n import FluxRemove from './FluxRemove.vue';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/Gallery.module.scss';\n\n const emit = defineEmits<{\n delete: [];\n }>();\n\n const {\n focalPoint\n } = defineProps<{\n readonly focalPoint?: FluxFocalPointObject;\n readonly isDeletable?: boolean;\n readonly isPending?: boolean;\n readonly url: string;\n }>();\n\n const isDeleteVisible = ref(false);\n</script>\n","<template>\n <FluxDropZone\n accept=\"image/*\"\n :disabled=\"!isEditable\"\n :is-empty=\"items && items.length === 0\"\n is-multiple\n placeholder-icon=\"image\"\n :placeholder-button=\"translate('flux.galleryPlaceholderButton')\"\n :placeholder-message=\"translate('flux.galleryPlaceholderMessage')\"\n :placeholder-title=\"translate('flux.galleryPlaceholderTitle')\"\n @select-multiple=\"onFilesSelected\">\n <template #default=\"{showPicker}\">\n <TransitionGroup\n :class=\"$style.gallery\"\n :move-class=\"$style.galleryMove\"\n tag=\"div\">\n <template\n v-if=\"items\"\n v-for=\"(item, index) of items\">\n <FluxGalleryItem\n v-if=\"typeof item === 'string'\"\n :is-deletable=\"isEditable\"\n :key=\"item\"\n :url=\"item\"\n @delete=\"$emit('delete', index)\"/>\n\n <FluxGalleryItem\n v-else\n :is-deletable=\"isEditable\"\n :key=\"item.url\"\n :focal-point=\"item\"\n :url=\"item.url\"\n @delete=\"$emit('delete', index)\"/>\n </template>\n\n <slot/>\n\n <FluxGalleryItem\n v-for=\"item of pendingItems\"\n is-pending\n :key=\"item\"\n :url=\"item\"/>\n\n <button\n v-if=\"isEditable\"\n key=\"gallery-add\"\n :class=\"$style.galleryAdd\"\n type=\"button\"\n @click=\"showPicker()\">\n <FluxIcon name=\"plus\"/>\n </button>\n </TransitionGroup>\n </template>\n </FluxDropZone>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFocalPointObject } from '@flux-ui/types';\n import { useTranslate } from '$flux/composable/private';\n import FluxDropZone from './FluxDropZone.vue';\n import FluxGalleryItem from './FluxGalleryItem.vue';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Gallery.module.scss';\n\n const emit = defineEmits<{\n delete: [number];\n upload: [File[]];\n }>();\n\n defineProps<{\n readonly isEditable?: boolean;\n readonly items?: (string | (FluxFocalPointObject & { readonly url: string; }))[];\n readonly pendingItems?: string[];\n }>();\n\n defineSlots<{\n default(): any;\n }>();\n\n const translate = useTranslate();\n\n function onFilesSelected(files: FileList): void {\n const images: File[] = [];\n\n for (let i = 0; i < files.length; ++i) {\n const file = files.item(i);\n\n if (!file || !file.type.startsWith('image/')) {\n continue;\n }\n\n images.push(file);\n }\n\n emit('upload', images);\n }\n</script>\n","<template>\n <svg\n ref=\"svg\"\n :class=\"$style.gridPattern\">\n <defs>\n <pattern\n :id=\"id\"\n :width=\"width\"\n :height=\"height\"\n patternUnits=\"userSpaceOnUse\"\n :x=\"-1\"\n :y=\"-1\">\n <path\n :d=\"`M.5 ${height}V.5H${width}`\"\n fill=\"none\"\n :stroke-dasharray=\"strokeDasharray\"/>\n </pattern>\n </defs>\n\n <rect\n width=\"100%\"\n height=\"100%\"\n stroke-width=\"0\"\n :fill=\"`url(#${id})`\"/>\n\n <svg\n v-if=\"squares\"\n style=\"overflow: visible;\">\n <rect\n v-for=\"[x, y] of squares\"\n :key=\"`${x}-${y}`\"\n :width=\"width - 1\"\n :height=\"height - 1\"\n :x=\"x * width\"\n :y=\"y * height\"\n stroke-width=\"0\"/>\n </svg>\n </svg>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useId } from 'vue';\n import $style from '$flux/css/component/Visual.module.scss';\n\n const {\n width = 42,\n height = 42,\n strokeDasharray = 0,\n squares\n } = defineProps<{\n readonly width?: number;\n readonly height?: number;\n readonly strokeDasharray?: number | string;\n readonly squares?: Array<[x: number, y: number]>;\n }>();\n\n const id = useId();\n</script>\n","<template>\n <FluxButton\n :=\"{type, disabled, iconLeading: icon, iconTrailing: 'arrow-right-long', isFilled, label, href, rel, target, to}\"\n :css-class=\"$style.linkButton\"\n :css-class-icon=\"$style.linkButtonIcon\"\n :css-class-label=\"$style.linkButtonLabel\"\n @click=\"emit('click', $event)\"\n @mouseenter=\"emit('mouseenter', $event)\"\n @mouseleave=\"emit('mouseleave', $event)\">\n <template\n v-for=\"slot of SLOTS\"\n #[slot]>\n <slot :name=\"slot\"/>\n </template>\n </FluxButton>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxButtonEmits, FluxButtonProps, FluxButtonSlots, FluxIconName } from '@flux-ui/types';\n import FluxButton, { SLOTS } from './FluxButton.vue';\n import $style from '$flux/css/component/Button.module.scss';\n\n const emit = defineEmits<FluxButtonEmits>();\n\n const {\n type = 'button'\n } = defineProps<FluxButtonProps & {\n readonly icon?: FluxIconName;\n readonly label?: string;\n }>();\n\n defineSlots<FluxButtonSlots>();\n</script>\n","<template>\n <FluxMenuGroup :is-horizontal=\"isHorizontal\">\n <template v-for=\"item in items\">\n <component :is=\"item\"/>\n </template>\n </FluxMenuGroup>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { flattenVNodeTree } from '@flux-ui/internals';\n import { cloneVNode, computed, unref, VNode } from 'vue';\n import FluxMenuGroup from './FluxMenuGroup.vue';\n\n const modelValue = defineModel<number>({\n required: true\n });\n\n const {\n mode = 'highlight'\n } = defineProps<{\n readonly isHorizontal?: boolean;\n readonly mode?: 'highlight' | 'select';\n }>();\n\n const slots = defineSlots<{\n default(): any;\n }>();\n\n const items = computed(() => flattenVNodeTree(slots.default())\n .map((item: VNode, index: number) => cloneVNode(item, {\n isHighlighted: mode === 'highlight' && unref(modelValue) === index,\n isSelectable: mode === 'select',\n isSelected: mode === 'select' && unref(modelValue) === index,\n onClick: () => modelValue.value = index\n })));\n</script>\n","<template>\n <div\n :class=\"clsx(\n color === 'gray' && $style.noticeGray,\n color === 'primary' && $style.noticePrimary,\n color === 'danger' && $style.noticeDanger,\n color === 'info' && $style.noticeInfo,\n color === 'success' && $style.noticeSuccess,\n color === 'warning' && $style.noticeWarning,\n isCenter && $style.isCenter,\n isFluid && $style.isFluid\n )\"\n role=\"alert\">\n <FluxSpinner\n v-if=\"isLoading\"\n :class=\"$style.noticePrefix\"/>\n\n <FluxIcon\n v-if=\"icon && !isLoading\"\n :class=\"$style.noticePrefix\"\n :name=\"icon\"/>\n\n <div :class=\"$style.noticeBody\">\n <p\n v-if=\"title\"\n :class=\"$style.noticeTitle\">\n {{ title }}\n </p>\n <p\n v-if=\"message\"\n :class=\"$style.noticeMessage\">\n {{ message }}\n </p>\n <slot/>\n </div>\n\n <slot name=\"end\"/>\n\n <button\n v-if=\"isCloseable\"\n :class=\"$style.noticeClose\"\n type=\"button\"\n @click=\"emit('close')\">\n <FluxIcon name=\"xmark\"/>\n </button>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxColor, FluxIconName } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import FluxIcon from './FluxIcon.vue';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/Notice.module.scss';\n\n const emit = defineEmits<{\n close: [];\n }>();\n\n const {\n color = 'gray'\n } = defineProps<{\n readonly color?: FluxColor;\n readonly icon?: FluxIconName;\n readonly isCenter?: boolean;\n readonly isCloseable?: boolean;\n readonly isFluid?: boolean;\n readonly isLoading?: boolean;\n readonly message?: string;\n readonly title?: string;\n }>();\n\n defineSlots<{\n default(): any;\n end(): any;\n }>();\n</script>\n","<script lang=\"ts\">\n import type { FluxSize } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { defineComponent, PropType } from 'vue';\n import { FluxOverlayTransition } from '$flux/transition';\n import { createDialogRenderer } from '$flux/util';\n import $style from '$flux/css/component/Overlay.module.scss';\n\n export default defineComponent({\n emits: ['close'],\n inheritAttrs: false,\n props: {\n isCloseable: {default: false, type: Boolean},\n size: {default: 'small', type: String as PropType<FluxSize>}\n },\n setup(props, {attrs, emit, slots}) {\n return createDialogRenderer(\n attrs,\n props,\n emit,\n slots,\n clsx(\n props.size === 'small' && $style.overlaySmall,\n props.size === 'medium' && $style.overlayMedium,\n props.size === 'large' && $style.overlayLarge\n ),\n FluxOverlayTransition\n );\n }\n });\n</script>\n","<template>\n <FluxButtonGroup\n :class=\"$style.pagination\"\n role=\"navigation\"\n :aria-label=\"translate('flux.pagination')\">\n <FluxSecondaryButton\n v-if=\"arrows || isCompact\"\n :disabled=\"isPreviousDisabled\"\n icon-leading=\"angle-left\"\n :aria-label=\"translate('flux.previous')\"\n @click=\"previous\"/>\n\n <template\n v-if=\"!isCompact\"\n v-for=\"p of visiblePages\">\n <FluxSecondaryButton\n v-if=\"p === 'dots'\"\n disabled\n icon-leading=\"ellipsis-h\"/>\n\n <FluxPrimaryButton\n v-else-if=\"p === page\"\n :label=\"`${p}`\"\n aria-current=\"page\"/>\n\n <FluxSecondaryButton\n v-else\n :label=\"`${p}`\"\n @click=\"navigate(p)\"/>\n </template>\n\n <template v-else>\n <FluxSecondaryButton\n :class=\"$style.paginationCurrentZZ\"\n @click=\"prompt\"\n #before>\n <strong>{{ page }}</strong>\n <span>/</span>\n <span>{{ pages }}</span>\n </FluxSecondaryButton>\n </template>\n\n <FluxSecondaryButton\n v-if=\"arrows || isCompact\"\n :disabled=\"isNextDisabled\"\n icon-leading=\"angle-right\"\n :aria-label=\"translate('flux.next')\"\n @click=\"next\"/>\n </FluxButtonGroup>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { computed, unref } from 'vue';\n import { useTranslate } from '$flux/composable/private';\n import { showPrompt } from '$flux/data';\n import FluxButtonGroup from './FluxButtonGroup.vue';\n import FluxPrimaryButton from './FluxPrimaryButton.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import $style from '$flux/css/component/Pagination.module.scss';\n\n const emit = defineEmits<{\n navigate: [number];\n }>();\n\n const {\n page,\n perPage,\n total\n } = defineProps<{\n readonly arrows?: boolean;\n readonly isCompact?: boolean;\n readonly page: number;\n readonly perPage: number;\n readonly total: number;\n }>();\n\n const translate = useTranslate();\n\n const pages = computed(() => Math.ceil(total / perPage));\n const isNextDisabled = computed(() => page >= unref(pages));\n const isPreviousDisabled = computed(() => page <= 1);\n\n const visiblePages = computed(() => {\n if (unref(pages) === 0) {\n return [];\n }\n\n const sizes = {\n end: 1,\n middle: 1\n } as const;\n\n let dots = false;\n let visible: (number | 'dots')[] = [];\n\n if (unref(pages) === (sizes.end + sizes.middle + 2)) {\n for (let n = 1; n <= unref(pages); ++n) {\n visible.push(n);\n }\n } else {\n for (let n = 1; n <= unref(pages); ++n) {\n if (page === n) {\n dots = true;\n visible.push(n);\n } else if (n <= sizes.end || (n >= page - sizes.middle && n <= page + sizes.middle) || n > unref(pages) - sizes.end) {\n dots = true;\n visible.push(n);\n } else if (dots) {\n dots = false;\n visible.push('dots');\n }\n }\n }\n\n return visible;\n });\n\n function navigate(page: number): void {\n emit('navigate', page);\n }\n\n function next(): void {\n navigate(page + 1);\n }\n\n function previous(): void {\n navigate(page - 1);\n }\n\n async function prompt(): Promise<void> {\n const pageStr = await showPrompt({\n icon: 'ellipsis',\n title: translate('flux.paginationNavigateTitle'),\n message: translate('flux.paginationNavigateMessage'),\n fieldLabel: translate('flux.paginationNavigatePage')\n });\n\n const page = Number(pageStr);\n\n if (isNaN(page) || page > unref(pages) || page <= 0) {\n return;\n }\n\n navigate(page);\n }\n</script>\n","<template>\n <FluxStack :class=\"$style.paginationBar\">\n <FluxFormInputGroup>\n <FluxFormInputAddition>\n <span>{{ translate('flux.rowsPerPage') }}</span>\n </FluxFormInputAddition>\n\n <FluxFormSelect\n v-model=\"limit\"\n :options=\"limitOptions\"/>\n </FluxFormInputGroup>\n\n <FluxSpacer :class=\"$style.paginationBarSpacer\"/>\n\n <FluxFormInputGroup>\n <FluxFormInputAddition>\n <span>\n {{\n translate('flux.displayingOf', {\n from: (page - 1) * perPage + 1,\n to: Math.min(total, page * perPage),\n total: total\n })\n }}\n </span>\n </FluxFormInputAddition>\n\n <FluxPagination\n v-if=\"total > perPage\"\n arrows\n is-compact\n :page=\"page\"\n :per-page=\"perPage\"\n :total=\"total\"\n @navigate=\"$emit('navigate', $event)\"/>\n </FluxFormInputGroup>\n </FluxStack>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFormSelectOption } from '@flux-ui/types';\n import { computed, ref, watch } from 'vue';\n import { useTranslate } from '$flux/composable/private';\n import FluxFormInputAddition from './FluxFormInputAddition.vue';\n import FluxFormInputGroup from './FluxFormInputGroup.vue';\n import FluxFormSelect from './FluxFormSelect.vue';\n import FluxPagination from './FluxPagination.vue';\n import FluxSpacer from './FluxSpacer.vue';\n import FluxStack from './FluxStack.vue';\n import $style from '$flux/css/component/Pagination.module.scss';\n\n const emit = defineEmits<{\n limit: [number];\n navigate: [number];\n }>();\n\n const {\n limits = [5, 10, 25, 50, 100],\n perPage\n } = defineProps<{\n readonly limits?: number[];\n readonly page: number;\n readonly perPage: number;\n readonly total: number;\n }>();\n\n const translate = useTranslate();\n\n const limit = ref(perPage);\n\n const limitOptions = computed(() => limits.map<FluxFormSelectOption>(limit => ({\n label: limit.toString(),\n value: limit\n })));\n\n watch(limit, limit => emit('limit', limit));\n\n watch(() => perPage, perPage => limit.value = perPage, {immediate: true});\n</script>\n","<template>\n <div\n :class=\"isMasked ? $style.paneIllustrationMasked : $style.paneIllustration\"\n :style=\"{\n aspectRatio\n }\">\n <div\n :class=\"$style.paneIllustrationMagic\"\n :style=\"{\n border: `1px solid ${borderColor}`\n }\">\n <FluxGridPattern :stroke-dasharray=\"3\"/>\n\n <FluxAnimatedColors\n :colors=\"animatedColors\"\n :opacity=\"animatedOpacity\"\n :seed=\"animatedSeed\"/>\n </div>\n\n <div\n v-if=\"slots.controlled\"\n :class=\"$style.paneIllustrationContentControlled\">\n <slot name=\"controlled\"/>\n </div>\n\n <div\n v-if=\"slots.default\"\n :class=\"$style.paneIllustrationContent\">\n <slot/>\n </div>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { hexToRGB } from '@basmilius/utils';\n import { computed } from 'vue';\n import FluxAnimatedColors from './FluxAnimatedColors.vue';\n import FluxGridPattern from './FluxGridPattern.vue';\n import $style from '$flux/css/component/Pane.module.scss';\n\n const {\n animatedColors,\n aspectRatio = 16 / 9\n } = defineProps<{\n readonly animatedColors: string[];\n readonly animatedOpacity?: number;\n readonly animatedSeed?: number;\n readonly aspectRatio?: number;\n readonly isMasked?: boolean;\n }>();\n\n const slots = defineSlots<{\n default?(): any;\n controlled?(): any;\n }>();\n\n const borderColor = computed(() => {\n if (!animatedColors || animatedColors.length === 0) {\n return 'transparent';\n }\n\n const [r, g, b] = hexToRGB(animatedColors[0]);\n\n return `rgb(${r} ${g} ${b} / .15)`;\n });\n</script>\n","<template>\n <div :class=\"isInset ? $style.paneMediaInset : $style.paneMedia\">\n <img\n v-if=\"imageUrl\"\n :class=\"$style.paneMediaImage\"\n :style=\"{\n objectPosition: `${focalPointX}% ${focalPointY}%`\n }\"\n :src=\"imageUrl\"\n :alt=\"imageAlt\">\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { computed } from 'vue';\n import $style from '$flux/css/component/Pane.module.scss';\n\n const {\n imageFocalPoint\n } = defineProps<{\n readonly imageAlt?: string;\n readonly imageFocalPoint?: [number, number];\n readonly imageUrl?: string;\n readonly isInset?: boolean;\n }>();\n\n const focalPointX = computed(() => imageFocalPoint?.[0] ?? 50);\n const focalPointY = computed(() => imageFocalPoint?.[1] ?? 50);\n</script>\n","<template>\n <div\n :class=\"clsx(\n $style.placeholder,\n isButton && $style.isButton,\n variant === 'extended' && $style.isExtended,\n variant === 'simple' && $style.isSimple,\n variant === 'small' && $style.isSmall\n )\"\n role=\"presentation\"\n @click=\"onClick\">\n <FluxIcon\n v-if=\"icon\"\n :class=\"$style.placeholderIcon\"\n :name=\"icon\"/>\n\n <div :class=\"$style.placeholderCaption\">\n <strong v-if=\"title\">\n {{ title }}\n </strong>\n\n <p v-if=\"message\">\n {{ message }}\n </p>\n </div>\n\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Placeholder.module.scss';\n\n const emit = defineEmits<{\n click: [MouseEvent];\n }>();\n\n const {\n variant = 'extended'\n } = defineProps<{\n readonly icon?: FluxIconName;\n readonly isButton?: boolean;\n readonly message?: string;\n readonly title?: string;\n readonly variant?: 'extended' | 'simple' | 'small';\n }>();\n\n function onClick(evt: MouseEvent): void {\n emit('click', evt);\n }\n</script>\n","<template>\n <FluxStack\n :class=\"$style.progressBar\"\n :gap=\"6\"\n role=\"progressbar\"\n :aria-valuenow=\"value\"\n :aria-valuemax=\"max\"\n :aria-valuemin=\"min\">\n <div :class=\"isIndeterminate ? $style.progressBarTrackIndeterminate : $style.progressBarTrack\">\n <div\n :class=\"$style.progressBarValue\"\n :style=\"{\n width: `${isIndeterminate ? 100 : position * 100}%`\n }\"/>\n </div>\n\n <div\n v-if=\"status\"\n :class=\"$style.progressBarInfo\">\n <FluxFadeTransition>\n <span\n :key=\"status\"\n :class=\"$style.progressBarStatus\">\n {{ status }}\n </span>\n </FluxFadeTransition>\n\n <FluxFadeTransition>\n <span\n v-if=\"!isIndeterminate\"\n :class=\"$style.progressBarProgress\">\n {{ progress }}\n </span>\n </FluxFadeTransition>\n </div>\n </FluxStack>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { computed, unref } from 'vue';\n import { FluxFadeTransition } from '$flux/transition';\n import FluxStack from './FluxStack.vue';\n import $style from '$flux/css/component/Progress.module.scss';\n\n const {\n isIndeterminate,\n max = 1,\n min = 0,\n value\n } = defineProps<{\n readonly isIndeterminate?: boolean;\n readonly max?: number;\n readonly min?: number;\n readonly status?: string;\n readonly value?: number;\n }>();\n\n const position = computed(() => {\n if (isIndeterminate) {\n return 0;\n }\n\n return ((value ?? min) - min) / (max - min);\n });\n\n const progress = computed(() => new Intl\n .NumberFormat(navigator.language, {\n style: 'percent',\n minimumFractionDigits: 0,\n maximumFractionDigits: 0\n })\n .format(unref(position) ?? 0));\n</script>\n","<template>\n <FluxButtonGroup\n :class=\"$style.quantitySelector\"\n :aria-disabled=\"disabled ? true : undefined\">\n <FluxSecondaryButton\n :class=\"$style.quantitySelectorButton\"\n :disabled=\"disabled || modelValue <= min\"\n icon-leading=\"minus\"\n tabindex=\"-1\"\n @click=\"decrement\"/>\n\n <input\n ref=\"input\"\n v-model=\"modelValue\"\n :class=\"$style.quantitySelectorInput\"\n :style=\"{\n width: `${width}px`\n }\"\n :disabled=\"disabled\"\n tabindex=\"0\"\n type=\"number\"\n :max=\"max\"\n :min=\"min\"\n :step=\"step\"/>\n\n <FluxSecondaryButton\n :class=\"$style.quantitySelectorButton\"\n :disabled=\"disabled || modelValue >= max\"\n icon-leading=\"plus\"\n tabindex=\"-1\"\n @click=\"increment\"/>\n </FluxButtonGroup>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { unrefTemplateElement } from '@flux-ui/internals';\n import { ref, toRef, unref, useTemplateRef, watchEffect } from 'vue';\n import { useDisabled } from '$flux/composable';\n import FluxButtonGroup from './FluxButtonGroup.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n const modelValue = defineModel<number>({\n default: 0\n });\n\n const {\n disabled: componentDisabled,\n max = 100,\n min = 0,\n step = 1\n } = defineProps<{\n readonly disabled?: boolean;\n readonly max?: number;\n readonly min?: number;\n readonly step?: number;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const inputRef = useTemplateRef('input');\n\n const width = ref(0);\n\n function decrement(): void {\n if (unref(disabled)) {\n return;\n }\n\n modelValue.value = Math.max(min, unref(modelValue) - step);\n }\n\n function increment(): void {\n if (unref(disabled)) {\n return;\n }\n\n modelValue.value = Math.min(max, unref(modelValue) + step);\n }\n\n function sizeToContent(): void {\n const input = unrefTemplateElement<HTMLInputElement>(inputRef);\n\n if (!input || isNaN(input.valueAsNumber)) {\n return;\n }\n\n width.value = 0;\n\n requestAnimationFrame(() => {\n width.value = Math.max(51, input.scrollWidth + 30);\n });\n }\n\n watchEffect(() => {\n if (unref(modelValue) > max) {\n increment();\n return;\n }\n\n if (unref(modelValue) < min) {\n decrement();\n return;\n }\n\n sizeToContent();\n });\n</script>\n","<template>\n <FluxPane>\n <FluxPaneHeader\n :icon=\"alert.icon\"\n :title=\"alert.title\"/>\n\n <FluxPaneBody v-html=\"alert.message\"/>\n\n <FluxPaneFooter>\n <FluxSpacer/>\n\n <FluxPrimaryButton\n icon-leading=\"circle-check\"\n :label=\"translate('flux.ok')\"\n @click=\"alert.onClose()\"/>\n </FluxPaneFooter>\n </FluxPane>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxAlertObject } from '@flux-ui/types';\n import { useTranslate } from '$flux/composable/private';\n import FluxPane from './FluxPane.vue';\n import FluxPaneBody from './FluxPaneBody.vue';\n import FluxPaneFooter from './FluxPaneFooter.vue';\n import FluxPaneHeader from './FluxPaneHeader.vue';\n import FluxPrimaryButton from './FluxPrimaryButton.vue';\n import FluxSpacer from './FluxSpacer.vue';\n\n defineProps<{\n readonly alert: FluxAlertObject;\n }>();\n\n const translate = useTranslate();\n</script>\n","<template>\n <FluxPane>\n <FluxPaneHeader\n :icon=\"confirm.icon\"\n :title=\"confirm.title\"/>\n\n <FluxPaneBody v-html=\"confirm.message\"/>\n\n <FluxPaneFooter>\n <FluxSpacer/>\n\n <FluxSecondaryButton\n :label=\"translate('flux.cancel')\"\n @click=\"confirm.onCancel()\"/>\n\n <FluxPrimaryButton\n icon-leading=\"circle-check\"\n :label=\"translate('flux.ok')\"\n @click=\"confirm.onConfirm()\"/>\n </FluxPaneFooter>\n </FluxPane>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxConfirmObject } from '@flux-ui/types';\n import { useTranslate } from '$flux/composable/private';\n import FluxPane from './FluxPane.vue';\n import FluxPaneBody from './FluxPaneBody.vue';\n import FluxPaneFooter from './FluxPaneFooter.vue';\n import FluxPaneHeader from './FluxPaneHeader.vue';\n import FluxPrimaryButton from './FluxPrimaryButton.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import FluxSpacer from './FluxSpacer.vue';\n\n defineProps<{\n readonly confirm: FluxConfirmObject;\n }>();\n\n const translate = useTranslate();\n</script>\n","<template>\n <FluxPane>\n <FluxPaneHeader\n :icon=\"prompt.icon\"\n :title=\"prompt.title\"/>\n\n <FluxPaneBody v-html=\"prompt.message\"/>\n\n <FluxPaneBody>\n <FluxFormField :label=\"prompt.fieldLabel\">\n <FluxFormInput\n ref=\"input\"\n v-model=\"value\"\n :placeholder=\"prompt.fieldPlaceholder\"\n :type=\"prompt.fieldType ?? 'text'\"\n @keydown=\"onKeyDown\"/>\n </FluxFormField>\n </FluxPaneBody>\n\n <FluxPaneFooter>\n <FluxSpacer/>\n\n <FluxSecondaryButton\n :label=\"translate('flux.cancel')\"\n @click=\"prompt.onCancel()\"/>\n\n <FluxPrimaryButton\n :disabled=\"!hasValue\"\n icon-leading=\"circle-check\"\n :label=\"translate('flux.ok')\"\n @click=\"prompt.onConfirm(value)\"/>\n </FluxPaneFooter>\n </FluxPane>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxPromptObject } from '@flux-ui/types';\n import { computed, onMounted, ref, unref, useTemplateRef } from 'vue';\n import { useTranslate } from '$flux/composable/private';\n import FluxFormField from './FluxFormField.vue';\n import FluxFormInput from './FluxFormInput.vue';\n import FluxPane from './FluxPane.vue';\n import FluxPaneBody from './FluxPaneBody.vue';\n import FluxPaneFooter from './FluxPaneFooter.vue';\n import FluxPaneHeader from './FluxPaneHeader.vue';\n import FluxPrimaryButton from './FluxPrimaryButton.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import FluxSpacer from './FluxSpacer.vue';\n\n const {\n prompt\n } = defineProps<{\n readonly prompt: FluxPromptObject;\n }>();\n\n const inputRef = useTemplateRef('input');\n const translate = useTranslate();\n\n const value = ref('');\n\n const hasValue = computed(() => unref(value).trim().length > 0);\n\n onMounted(() => {\n const input = unref(inputRef);\n requestAnimationFrame(() => input?.$el.querySelector('input')?.focus());\n });\n\n function onKeyDown(evt: KeyboardEvent): void {\n if (!unref(hasValue) || evt.key !== 'Enter') {\n return;\n }\n\n prompt.onConfirm(unref(value));\n }\n</script>\n","<template>\n <div\n v-if=\"isRendered\"\n :class=\"clsx(\n color === 'gray' && $style.snackbarGray,\n color === 'primary' && $style.snackbarPrimary,\n color === 'danger' && $style.snackbarDanger,\n color === 'info' && $style.snackbarInfo,\n color === 'success' && $style.snackbarSuccess,\n color === 'warning' && $style.snackbarWarning\n )\">\n <div :class=\"$style.snackbarContent\">\n <FluxSpinner\n v-if=\"isLoading\"\n :size=\"18\"/>\n\n <FluxIcon\n v-else-if=\"icon\"\n :size=\"18\"\n :name=\"icon\"/>\n\n <div :class=\"$style.snackbarBody\">\n <div\n v-if=\"title\"\n :class=\"$style.snackbarTitle\">\n {{ title }}\n </div>\n\n <div\n v-if=\"message\"\n :class=\"$style.snackbarMessage\">\n {{ message }}\n </div>\n\n <FluxProgressBar\n v-if=\"progressIndeterminate || progressValue\"\n :is-indeterminate=\"progressIndeterminate\"\n :max=\"progressMax\"\n :min=\"progressMin\"\n :status=\"progressStatus\"\n :value=\"progressValue\"/>\n\n <div\n v-if=\"subMessage\"\n :class=\"$style.snackbarSubMessage\">\n {{ subMessage }}\n </div>\n </div>\n </div>\n\n <div\n v-if=\"hasActions\"\n :class=\"$style.snackbarActions\">\n <button\n v-for=\"(actionLabel, actionKey) of actions\"\n :key=\"actionKey\"\n :class=\"$style.snackbarAction\"\n tabindex=\"-1\"\n type=\"button\"\n @click=\"onAction(actionKey)\">\n <span>{{ actionLabel }}</span>\n </button>\n </div>\n\n <FluxAction\n v-if=\"isCloseable\"\n icon=\"xmark\"\n @click=\"onClose()\"/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxColor, FluxIconName, FluxSnackbarObject } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { computed, getCurrentInstance, onBeforeUnmount, ref, watch, watchEffect } from 'vue';\n import { addSnackbar, removeSnackbar, updateSnackbar } from '$flux/data';\n import FluxAction from './FluxAction.vue';\n import FluxIcon from './FluxIcon.vue';\n import FluxProgressBar from './FluxProgressBar.vue';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/Snackbar.module.scss';\n\n const emit = defineEmits<{\n action: [string];\n close: [];\n }>();\n\n const {\n actions,\n color = 'gray',\n isRendered\n } = defineProps<{\n readonly actions?: Record<string, string>;\n readonly color?: FluxColor;\n readonly icon?: FluxIconName;\n readonly isCloseable?: boolean;\n readonly isLoading?: boolean;\n readonly isRendered?: boolean;\n readonly message?: string;\n readonly progressIndeterminate?: boolean;\n readonly progressMax?: number;\n readonly progressMin?: number;\n readonly progressStatus?: string;\n readonly progressValue?: number;\n readonly subMessage?: string;\n readonly title?: string;\n }>();\n\n const instance = getCurrentInstance()!;\n\n const id = ref<number | null>(null);\n\n const hasActions = computed(() => actions && Object.entries(actions).length > 0);\n\n onBeforeUnmount(() => {\n if (id.value) {\n removeSnackbar(id.value);\n }\n });\n\n function onAction(actionKey: string): void {\n emit('action', actionKey);\n }\n\n function onClose(): void {\n emit('close');\n }\n\n watchEffect(() => {\n if (!id.value) {\n return;\n }\n\n updateSnackbar(id.value, instance.props);\n });\n\n watch(() => isRendered, () => {\n if (isRendered) {\n if (id.value) {\n removeSnackbar(id.value);\n }\n\n return;\n }\n\n let spec: Omit<FluxSnackbarObject, 'id'> = instance.props;\n spec.onAction = onAction;\n spec.onClose = onClose;\n\n id.value = addSnackbar(spec);\n }, {immediate: true});\n</script>\n","<template>\n <TransitionGroup\n name=\"flux-snackbars\"\n tag=\"div\"\n :class=\"$style.snackbars\"\n :enter-active-class=\"$style.snackbarsEnterActive\"\n :enter-from-class=\"$style.snackbarsEnterFrom\"\n :leave-active-class=\"$style.snackbarsLeaveActive\"\n :leave-to-class=\"$style.snackbarsLeaveTo\"\n :move-class=\"$style.snackbarsMove\">\n <FluxSnackbar\n v-for=\"snackbar of snackbars.toReversed()\"\n :key=\"snackbar.id\"\n :=\"snackbar\"\n is-rendered\n @action=\"onAction(snackbar)\"\n @close=\"() => snackbar.onClose?.()\"/>\n </TransitionGroup>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxSnackbarObject } from '@flux-ui/types';\n import { useFluxStore } from '$flux/data';\n import FluxSnackbar from './FluxSnackbar.vue';\n import $style from '$flux/css/component/Snackbar.module.scss';\n\n const {snackbars} = useFluxStore();\n\n function onAction(snackbar: FluxSnackbarObject): (actionKey: string) => void {\n return actionKey => snackbar.onAction?.(actionKey);\n }\n</script>\n","<script lang=\"ts\">\n import { unrefTemplateElement } from '@flux-ui/internals';\n import { clsx } from 'clsx';\n import { computed, defineComponent, h, ref, unref, watch } from 'vue';\n import { useFluxStore } from '$flux/data';\n import { FluxTooltipTransition } from '$flux/transition';\n import $style from '$flux/css/component/Tooltip.module.scss';\n\n type Transition = 'above' | 'below' | 'end' | 'start';\n\n type PositionData = {\n readonly x: number;\n readonly y: number;\n readonly arrowAngle: string;\n readonly arrowX: string;\n readonly arrowY: string;\n readonly transition: Transition;\n };\n\n export default defineComponent(() => {\n const {tooltip} = useFluxStore();\n\n const elementRef = ref<HTMLElement | null>(null);\n const position = ref<PositionData | null>(null);\n\n const content = computed(() => unref(tooltip) ? unref(tooltip)!.contentSlot?.() ?? [unref(tooltip)!.content] : null);\n const has = computed(() => !!unref(tooltip));\n\n function calculate(): void {\n const element = unrefTemplateElement(elementRef);\n const spec = unref(tooltip);\n\n if (!spec || !element || !unref(content)) {\n position.value = null;\n return;\n }\n\n const {direction, origin} = spec;\n const margin = 9;\n const safeZone = 15;\n\n if (!origin) {\n position.value = null;\n return;\n }\n\n let {width, height} = element.getBoundingClientRect();\n const {scale} = getComputedStyle(element);\n const {top, left, width: originWidth, height: originHeight} = origin.getBoundingClientRect();\n\n let s = Number(scale ?? 1);\n s = isNaN(s) ? 1 : s;\n height /= s;\n width /= s;\n\n if (direction === 'horizontal') {\n position.value = calculateHorizontalPosition(top, left, width, height, originWidth, originHeight, margin, safeZone);\n } else {\n position.value = calculateVerticalPosition(top, left, width, height, originWidth, originHeight, margin, safeZone);\n }\n }\n\n watch(content, () => requestAnimationFrame(() => calculate()));\n\n return () => h(FluxTooltipTransition, {}, {\n default: () => {\n if (!unref(has)) {\n return;\n }\n\n const pos = unref(position);\n\n return h('div', {\n ref: elementRef,\n class: pos\n ? clsx(\n pos.transition === 'above' && $style.tooltipAbove,\n pos.transition === 'below' && $style.tooltipBelow,\n pos.transition === 'end' && $style.tooltipEnd,\n pos.transition === 'start' && $style.tooltipStart\n )\n : $style.tooltip,\n style: {\n '--x': pos?.x ?? undefined,\n '--y': pos?.y ?? undefined,\n '--arrowAngle': pos?.arrowAngle ?? undefined,\n '--arrowX': pos?.arrowX ?? undefined,\n '--arrowY': pos?.arrowY ?? undefined\n }\n }, unref(content));\n }\n });\n });\n\n function calculateHorizontalPosition(top: number, left: number, width: number, height: number, originWidth: number, originHeight: number, margin: number, safeZone: number): PositionData {\n let x, y, arrowAngle, arrowX, arrowY, transition: Transition;\n\n if (left > innerWidth / 2) {\n x = left - width - margin;\n y = top + originHeight / 2 - height / 2;\n arrowAngle = '315deg';\n arrowX = '100%';\n arrowY = '50%';\n transition = 'start';\n } else {\n x = left + originWidth + margin;\n y = top + originHeight / 2 - height / 2;\n arrowAngle = '135deg';\n arrowX = '0';\n arrowY = '50%';\n transition = 'end';\n }\n\n if (y + height > innerHeight - safeZone) {\n const diff = Math.min(y, innerHeight - height - safeZone) - y;\n arrowY = `calc(50% - ${diff}px)`;\n y += diff;\n }\n\n if (y < safeZone) {\n const diff = Math.max(y, safeZone) - y;\n arrowY = `calc(50% - ${diff}px)`;\n y += diff;\n }\n\n return {\n x: Math.round(x),\n y: Math.round(y),\n arrowAngle,\n arrowX,\n arrowY,\n transition\n };\n }\n\n function calculateVerticalPosition(top: number, left: number, width: number, height: number, originWidth: number, originHeight: number, margin: number, safeZone: number): PositionData {\n let x, y, arrowAngle, arrowX, arrowY, transition: Transition;\n\n if (top > 300) {\n x = left + originWidth / 2 - width / 2;\n y = top - height - margin;\n arrowAngle = '45deg';\n arrowX = '50%';\n arrowY = '100%';\n transition = 'above';\n } else {\n x = left + originWidth / 2 - width / 2;\n y = top + originHeight + margin;\n arrowAngle = '225deg';\n arrowX = '50%';\n arrowY = '0';\n transition = 'below';\n }\n\n if (x + width > innerWidth - safeZone) {\n const diff = Math.min(x, innerWidth - width - safeZone) - x;\n arrowX = `calc(50% - ${diff}px)`;\n x += diff;\n }\n\n if (x < safeZone) {\n const diff = Math.max(x, safeZone) - x;\n arrowX = `calc(50% - ${diff}px)`;\n x += diff;\n }\n\n return {\n x: Math.round(x),\n y: Math.round(y),\n arrowAngle,\n arrowX,\n arrowY,\n transition\n };\n }\n</script>\n","<template>\n <div\n v-bind=\"$attrs\"\n :class=\"$style.root\"\n :inert=\"inertMain\">\n <slot/>\n </div>\n\n <FluxOverlay size=\"medium\">\n <FluxAlert\n v-for=\"alert of alerts\"\n :key=\"alert.id\"\n :alert=\"alert\"/>\n </FluxOverlay>\n\n <FluxOverlay size=\"medium\">\n <FluxConfirm\n v-for=\"confirm of confirms\"\n :key=\"confirm.id\"\n :confirm=\"confirm\"/>\n </FluxOverlay>\n\n <FluxOverlay size=\"medium\">\n <FluxPrompt\n v-for=\"prompt of prompts\"\n :key=\"prompt.id\"\n :prompt=\"prompt\"/>\n </FluxOverlay>\n\n <FluxSnackbarProvider/>\n <FluxTooltipProvider/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { watch } from 'vue';\n import { useFluxStore } from '$flux/data';\n import FluxAlert from './FluxAlert.vue';\n import FluxConfirm from './FluxConfirm.vue';\n import FluxPrompt from './FluxPrompt.vue';\n import FluxOverlay from './FluxOverlay.vue';\n import FluxSnackbarProvider from './FluxSnackbarProvider.vue';\n import FluxTooltipProvider from './FluxTooltipProvider.vue';\n import $style from '$flux/css/component/Root.module.scss';\n\n defineOptions({\n inheritAttrs: false\n });\n\n defineSlots<{\n default(): any;\n }>();\n\n const {alerts, confirms, inertMain, prompts} = useFluxStore();\n\n watch(inertMain, (inert, _, onCleanup): void => {\n if (!inert) {\n return;\n }\n\n document.body.classList.add($style.isLocked);\n onCleanup(() => document.body.classList.remove($style.isLocked));\n }, {immediate: true});\n</script>\n","<template>\n <nav\n ref=\"control\"\n :class=\"isFill ? $style.segmentedControlFill : $style.segmentedControlInline\">\n <div\n v-if=\"activeItemWidth > 0\"\n :class=\"$style.segmentedControlHighlight\"\n :style=\"{\n left: `${activeItemX}px`,\n width: `${activeItemWidth}px`\n }\"/>\n\n <template v-for=\"(item, index) of items\">\n <div\n v-if=\"index > 0\"\n :class=\"clsx(\n $style.segmentedControlSeparator,\n (index === modelValue || index === modelValue + 1) && $style.isActive\n )\"\n role=\"separator\"/>\n\n <button\n ref=\"items\"\n :class=\"clsx(\n $style.segmentedControlItem,\n index === modelValue && $style.isActive\n )\"\n type=\"button\"\n @click=\"activate(index)\">\n <FluxIcon\n v-if=\"item.icon\"\n :name=\"item.icon\"\n :size=\"15\"/>\n\n <span>{{ item.label }}</span>\n </button>\n </template>\n </nav>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxSegmentedControlItemObject } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { onMounted, onUpdated, ref, unref, useTemplateRef } from 'vue';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/SegmentedControl.module.scss';\n\n const modelValue = defineModel<number>({\n default: 0\n });\n\n defineProps<{\n readonly isFill?: boolean;\n readonly items: FluxSegmentedControlItemObject[];\n }>();\n\n const controlRef = useTemplateRef<HTMLElement>('control');\n const itemRefs = useTemplateRef<HTMLButtonElement[]>('items');\n\n const activeItemX = ref(0);\n const activeItemWidth = ref(0);\n\n onMounted(() => activate(unref(modelValue)));\n onUpdated(() => activate(unref(modelValue)));\n\n function activate(index: number): void {\n const itemRef = itemRefs.value![index];\n const {left: controlX} = controlRef.value!.getBoundingClientRect();\n const {width, left: x} = itemRef.getBoundingClientRect();\n\n activeItemX.value = x - controlX - 1;\n activeItemWidth.value = width;\n modelValue.value = index;\n }\n</script>\n","<script lang=\"ts\">\n import { defineComponent } from 'vue';\n\n export default defineComponent({\n props: {\n index: Number\n },\n setup(props, {slots}) {\n return () => {\n const items = slots.default!();\n return items[props.index!];\n };\n }\n });\n</script>\n","<script lang=\"ts\">\n import { defineComponent } from 'vue';\n import { FluxSlideOverTransition } from '$flux/transition';\n import { createDialogRenderer } from '$flux/util';\n import $style from '$flux/css/component/Overlay.module.scss';\n\n export default defineComponent({\n emits: ['close'],\n inheritAttrs: false,\n props: {\n isCloseable: {default: false, type: Boolean},\n viewKey: {default: null, type: String}\n },\n setup(props, {attrs, emit, slots}) {\n return createDialogRenderer(\n attrs,\n props,\n emit,\n slots,\n $style.slideOver,\n FluxSlideOverTransition\n );\n }\n });\n</script>\n","<template>\n <div :style=\"{flex: `0 0 ${spacings[size]}px`}\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n const spacings = [\n 0,\n 3,\n 6,\n 9,\n 12,\n 15,\n 18,\n 24,\n 30,\n 36,\n 42,\n 48,\n 54,\n 60,\n 72,\n 84,\n 90,\n 120\n ] as const;\n\n defineProps<{\n readonly size: keyof typeof spacings;\n }>();\n</script>\n","<template>\n <div\n :class=\"$style.stepperSteps\"\n :style=\"{\n '--progress': progress\n }\">\n <template\n v-for=\"step of amount\"\n :key=\"step\">\n <button\n :class=\"clsx(\n $style.stepperStepsItem,\n current > step && $style.stepperStepsItemComplete,\n current === step && $style.stepperStepsItemCurrent,\n current < step && $style.stepperStepsItemIdle\n )\"\n tabindex=\"-1\"\n type=\"button\"\n @click=\"activate(step - 1)\">\n <span :class=\"$style.stepperStepsItemParticles\"/>\n\n <FluxFadeTransition>\n <FluxIcon\n v-if=\"current > step\"\n name=\"check\"/>\n\n <span v-else>\n {{ step }}\n </span>\n </FluxFadeTransition>\n </button>\n </template>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { clsx } from 'clsx';\n import { computed } from 'vue';\n import { FluxFadeTransition } from '$flux/transition';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Stepper.module.scss';\n\n const emit = defineEmits<{\n activate: [number];\n }>();\n\n const {\n amount,\n current\n } = defineProps<{\n readonly amount: number;\n readonly current: number;\n }>();\n\n const progress = computed(() => (current - 1) / (amount - 1));\n\n function activate(index: number): void {\n emit('activate', index);\n }\n</script>\n","<template>\n <slot\n v-bind=\"{activate, modelValue, steps}\"\n name=\"steps\">\n <FluxStepperSteps\n :amount=\"steps\"\n :current=\"modelValue + 1\"\n @activate=\"activate\"/>\n </slot>\n\n <slot\n v-bind=\"{activate, modelValue, children, isTransitioningBack, steps, view}\"\n name=\"content\">\n <FluxWindowTransition :is-back=\"isTransitioningBack\">\n <FluxDynamicView\n :key=\"modelValue\"\n :vnode=\"view\"/>\n </FluxWindowTransition>\n </slot>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { flattenVNodeTree } from '@flux-ui/internals';\n import { computed, ref, unref, VNode, watch } from 'vue';\n import { FluxWindowTransition } from '$flux/transition';\n import FluxDynamicView from './FluxDynamicView.vue';\n import FluxStepperSteps from './FluxStepperSteps.vue';\n\n const modelValue = defineModel<number>({\n default: 0\n });\n\n const slots = defineSlots<{\n default(): any;\n\n content(props: {\n activate(index: number): void;\n\n readonly children: VNode[];\n readonly isTransitioningBack: boolean;\n readonly modelValue: number;\n readonly steps: number;\n readonly view: VNode;\n }): any;\n\n steps(props: {\n activate(index: number): void;\n\n readonly modelValue: number;\n readonly steps: number;\n }): any;\n }>();\n\n const isTransitioningBack = ref(false);\n\n const children = computed(() => flattenVNodeTree(slots.default?.() ?? []));\n const steps = computed(() => unref(children).length);\n const view = computed(() => unref(children)[unref(modelValue)] ?? null);\n\n function activate(index: number): void {\n modelValue.value = index;\n }\n\n watch(modelValue, (newIndex, oldIndex) => {\n isTransitioningBack.value = newIndex < oldIndex;\n });\n</script>\n","<template>\n <nav\n :class=\"$style.tabBar\"\n role=\"tablist\"\n aria-orientation=\"horizontal\">\n <button\n v-if=\"isStartArrowVisible\"\n :class=\"$style.tabBarArrowStart\"\n tabindex=\"-1\"\n type=\"button\"\n @click=\"scrollToStart\">\n <FluxIcon name=\"angle-left\"/>\n </button>\n\n <div\n ref=\"tabBar\"\n :class=\"clsx(\n $style.tabBarTabs,\n isEndArrowVisible && $style.isEndMasked,\n isStartArrowVisible && $style.isStartMasked\n )\">\n <slot/>\n </div>\n\n <button\n v-if=\"isEndArrowVisible\"\n :class=\"$style.tabBarArrowEnd\"\n tabindex=\"-1\"\n type=\"button\"\n @click=\"scrollToEnd\">\n <FluxIcon name=\"angle-right\"/>\n </button>\n </nav>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { unrefTemplateElement, useEventListener, useMutationObserver } from '@flux-ui/internals';\n import { clsx } from 'clsx';\n import { onMounted, ref, useTemplateRef } from 'vue';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Tab.module.scss';\n\n defineSlots<{\n default(): any;\n }>();\n\n const tabBarRef = useTemplateRef('tabBar');\n\n useEventListener(tabBarRef, 'scroll', () => checkScroll());\n useMutationObserver(tabBarRef, () => checkScroll(), {childList: true});\n\n const isEndArrowVisible = ref(false);\n const isStartArrowVisible = ref(false);\n\n onMounted(() => checkScroll());\n\n function checkScroll(): void {\n const tabBar = unrefTemplateElement(tabBarRef)!;\n\n if (tabBar.scrollWidth <= tabBar.offsetWidth) {\n isEndArrowVisible.value = false;\n isStartArrowVisible.value = false;\n return;\n }\n\n isEndArrowVisible.value = tabBar.scrollLeft < tabBar.scrollWidth - tabBar.offsetWidth;\n isStartArrowVisible.value = tabBar.scrollLeft > 0;\n }\n\n function scrollToEnd(): void {\n const tabBar = unrefTemplateElement(tabBarRef)!;\n tabBar.scrollBy({\n behavior: 'smooth',\n left: tabBar.offsetWidth / 1.5\n });\n }\n\n function scrollToStart(): void {\n const tabBar = unrefTemplateElement(tabBarRef)!;\n tabBar.scrollBy({\n behavior: 'smooth',\n left: tabBar.offsetWidth / -1.5\n });\n }\n</script>\n","<template>\n <FluxPressable\n ref=\"tab\"\n :component-type=\"type\"\n :class=\"isActive ? $style.tabBarItemActive : $style.tabBarItem\"\n type=\"button\"\n role=\"tab\"\n :aria-disabled=\"disabled ? true : undefined\"\n :aria-selected=\"isActive\"\n :disabled=\"disabled ? true : undefined\"\n :tabindex=\"disabled ? -1 : tabindex\"\n :href=\"href\"\n :rel=\"rel\"\n :target=\"target\"\n :to=\"to\"\n @click=\"onClick\"\n @mouseenter=\"onMouseEnter\"\n @mouseleave=\"onMouseLeave\">\n <FluxIcon\n v-if=\"icon\"\n :name=\"icon\"\n :size=\"16\"/>\n\n <span v-if=\"label\">{{ label }}</span>\n </FluxPressable>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName, FluxPressableType, FluxTo } from '@flux-ui/types';\n import { ComponentPublicInstance, toRef, unref, useTemplateRef, watch } from 'vue';\n import { useDisabled } from '$flux/composable';\n import FluxIcon from './FluxIcon.vue';\n import FluxPressable from './FluxPressable.vue';\n import $style from '$flux/css/component/Tab.module.scss';\n\n const emit = defineEmits<{\n click: [MouseEvent];\n mouseenter: [MouseEvent];\n mouseleave: [MouseEvent];\n }>();\n\n const {\n disabled: componentDisabled,\n isActive\n } = defineProps<{\n readonly type?: FluxPressableType;\n readonly disabled?: boolean;\n readonly icon?: FluxIconName;\n readonly isActive?: boolean;\n readonly label?: string;\n readonly tabindex?: string | number;\n readonly href?: string;\n readonly rel?: string;\n readonly target?: string;\n readonly to?: FluxTo;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const tabRef = useTemplateRef<ComponentPublicInstance>('tab');\n\n function onClick(evt: MouseEvent): void {\n if (unref(disabled)) {\n evt.preventDefault();\n evt.stopPropagation();\n return;\n }\n\n emit('click', evt);\n }\n\n function onMouseEnter(evt: MouseEvent): void {\n emit('mouseenter', evt);\n }\n\n function onMouseLeave(evt: MouseEvent): void {\n emit('mouseleave', evt);\n }\n\n watch(() => isActive, () => {\n if (!isActive) {\n return;\n }\n\n const tab = unref(tabRef);\n\n if (!tab) {\n return;\n }\n\n const el = tab.$el;\n\n if (el.parentElement?.offsetWidth === el.parentElement?.scrollWidth) {\n return;\n }\n\n el.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'center'\n });\n }, {immediate: true});\n</script>\n","<template>\n <div :class=\"$style.tabs\">\n <slot\n v-bind=\"{children, modelValue, tabs, activate}\"\n name=\"tabs\">\n <FluxTabBar :class=\"$style.tabsBar\">\n <template\n v-for=\"(tab, index) of tabs\"\n :key=\"index\">\n <FluxTabBarItem\n :icon=\"tab.icon\"\n :is-active=\"modelValue === index\"\n :label=\"tab.label\"\n @click=\"activate(index)\"/>\n </template>\n </FluxTabBar>\n </slot>\n\n <slot\n v-bind=\"{children, modelValue, tabs, activate}\"\n name=\"content\">\n <FluxWindowTransition :is-back=\"isTransitioningBack\">\n <VNodeRenderer\n :key=\"modelValue\"\n :vnode=\"children[modelValue]\"/>\n </FluxWindowTransition>\n </slot>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { flattenVNodeTree, getComponentProps } from '@flux-ui/internals';\n import type { FluxIconName } from '@flux-ui/types';\n import { computed, ref, unref, VNode, watch } from 'vue';\n import { FluxWindowTransition } from '$flux/transition';\n import { VNodeRenderer } from './primitive';\n import FluxTabBar from './FluxTabBar.vue';\n import FluxTabBarItem from './FluxTabBarItem.vue';\n import $style from '$flux/css/component/Tab.module.scss';\n\n const modelValue = defineModel<number>({\n default: 0\n });\n\n const slots = defineSlots<{\n default(): any;\n\n content(props: {\n activate(index: number): void;\n\n readonly children: VNode[];\n readonly modelValue: number;\n readonly tabs: {\n readonly icon?: FluxIconName;\n readonly label?: string;\n }[];\n }): any;\n\n tabs(props: {\n activate(index: number): void;\n\n readonly children: VNode[];\n readonly modelValue: number;\n readonly tabs: {\n readonly icon?: FluxIconName;\n readonly label?: string;\n }[];\n }): any;\n }>();\n\n const isTransitioningBack = ref(false);\n\n const children = computed(() => flattenVNodeTree(slots.default?.() ?? []));\n const tabs = computed<{ icon?: FluxIconName; label?: string; }[]>(() => unref(children)\n .filter((child: VNode) => getComponentProps<any>(child).icon || getComponentProps<any>(child).label)\n .map((child: VNode) => ({\n icon: getComponentProps<any>(child).icon,\n label: getComponentProps<any>(child).label\n }))\n );\n\n function activate(index: number): void {\n modelValue.value = index;\n }\n\n watch(modelValue, (newIndex, oldIndex) => {\n isTransitioningBack.value = newIndex < oldIndex;\n });\n</script>\n","<template>\n <td\n :class=\"clsx(\n $style.tableCell,\n isBordered && $style.isBordered,\n isHoverable && $style.isHoverable,\n isSeparated && $style.isSeparated,\n isStriped && $style.isStriped\n )\"\n role=\"cell\">\n <slot name=\"content\">\n <div\n :class=\"$style.tableCellContent\"\n :style=\"{\n flexFlow: contentDirection\n }\">\n <slot/>\n </div>\n </slot>\n </td>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { clsx } from 'clsx';\n import { useTableInjection } from '$flux/composable';\n import $style from '$flux/css/component/Table.module.scss';\n\n const {\n contentDirection = 'row'\n } = defineProps<{\n readonly contentDirection?: 'column' | 'row';\n }>();\n\n defineSlots<{\n default(): any;\n content(): any;\n }>();\n\n const {\n isBordered,\n isHoverable,\n isSeparated,\n isStriped\n } = useTableInjection();\n</script>\n","<template>\n <th\n :class=\"clsx(\n $style.tableHeader,\n isBordered && $style.isBordered,\n isShrinking && $style.isShrinking,\n isSticky && $style.isSticky\n )\"\n :style=\"{\n minWidth: `${minWidth}px`\n }\">\n <div :class=\"$style.tableHeaderContent\">\n <slot/>\n\n <FluxFlyout v-if=\"isSortable\">\n <template #opener=\"{open}\">\n <button\n :class=\"$style.tableSort\"\n :aria-label=\"translate('flux.sort')\"\n tabindex=\"-1\"\n type=\"button\"\n @click=\"open\">\n <FluxIcon\n :size=\"16\"\n :name=\"sortingIcon\"/>\n </button>\n </template>\n\n <FluxMenu>\n <FluxMenuGroup>\n <FluxMenuItem\n :is-highlighted=\"sort === 'ascending'\"\n icon-leading=\"arrow-down-a-z\"\n :label=\"translate('flux.sortAscending')\"\n @click=\"$emit('sort', 'ascending')\"/>\n\n <FluxMenuItem\n :is-highlighted=\"sort === 'descending'\"\n icon-leading=\"arrow-up-a-z\"\n :label=\"translate('flux.sortDescending')\"\n @click=\"$emit('sort', 'descending')\"/>\n </FluxMenuGroup>\n\n <template v-if=\"sort\">\n <FluxSeparator/>\n\n <FluxMenuGroup>\n <FluxMenuItem\n icon-leading=\"circle-xmark\"\n is-destructive\n :label=\"translate('flux.sortRemove')\"\n @click=\"$emit('sort', null)\"/>\n </FluxMenuGroup>\n </template>\n </FluxMenu>\n </FluxFlyout>\n </div>\n </th>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { computed } from 'vue';\n import { useTableInjection } from '$flux/composable';\n import { useTranslate } from '$flux/composable/private';\n import FluxFlyout from './FluxFlyout.vue';\n import FluxIcon from './FluxIcon.vue';\n import FluxMenu from './FluxMenu.vue';\n import FluxMenuGroup from './FluxMenuGroup.vue';\n import FluxMenuItem from './FluxMenuItem.vue';\n import FluxSeparator from './FluxSeparator.vue';\n import $style from '$flux/css/component/Table.module.scss';\n\n defineEmits<{\n sort: ['ascending' | 'descending' | null];\n }>();\n\n const {\n minWidth = 0,\n sort\n } = defineProps<{\n readonly isShrinking?: boolean;\n readonly isSortable?: boolean;\n readonly isSticky?: boolean;\n readonly minWidth?: number;\n readonly sort?: 'ascending' | 'descending';\n }>();\n\n defineSlots<{\n default(): any;\n }>();\n\n const {isBordered} = useTableInjection();\n const translate = useTranslate();\n\n const sortingIcon = computed((): FluxIconName => {\n switch (sort) {\n case 'ascending':\n return 'arrow-down-a-z';\n\n case 'descending':\n return 'arrow-up-a-z';\n\n default:\n return 'arrow-up-arrow-down';\n }\n });\n</script>\n","<template>\n <label\n :class=\"clsx(\n $style.toggle,\n modelValue && $style.isChecked,\n disabled && $style.isDisabled,\n isSwitch && $style.isSwitch\n )\"\n :for=\"id\"\n :aria-disabled=\"disabled ? true : undefined\">\n <FluxIcon\n v-if=\"iconOff\"\n :class=\"$style.toggleIconOff\"\n :name=\"iconOff\"\n :size=\"14\"/>\n\n <FluxIcon\n v-if=\"iconOn\"\n :class=\"$style.toggleIconOn\"\n :name=\"iconOn\"\n :size=\"14\"/>\n\n <input\n :class=\"$style.toggleInput\"\n :id=\"id\"\n :disabled=\"disabled\"\n type=\"checkbox\"\n :checked=\"modelValue\"\n role=\"switch\"\n :aria-checked=\"modelValue\"\n @input=\"toggle\"/>\n </label>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { toRef } from 'vue';\n import { useDisabled, useFormFieldInjection } from '$flux/composable';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n const modelValue = defineModel<boolean>({\n default: false\n });\n\n const {\n disabled: componentDisabled\n } = defineProps<{\n readonly iconOff?: FluxIconName;\n readonly iconOn?: FluxIconName;\n readonly disabled?: boolean;\n readonly isSwitch?: boolean;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const {id} = useFormFieldInjection();\n\n function toggle(evt: Event): void {\n modelValue.value = (evt.target as HTMLInputElement).checked;\n }\n</script>\n"],"names":["r","e","t","f","n","o","clsx","BREAKPOINTS","useBreakpoints","currentBreakpoint","ref","breakpointRefs","key","updateBreakpoints","width","activeBreakpoint","value","onMounted","onUnmounted","FluxDisabledInjectionKey","FluxExpandableGroupInjectionKey","FluxFlyoutInjectionKey","FluxFilterInjectionKey","FluxFormFieldInjectionKey","FluxTableInjectionKey","isFluxFilterOptionHeader","obj","isFluxFilterOptionItem","isFluxFormSelectGroup","item","isFluxFormSelectOption","english","iconRegistry","fluxRegisterIcons","icons","acc","icon","iconName","DEFAULT_SNACKBAR_DURATION","state","reactive","alertId","tooltipId","addAlert","spec","id","addConfirm","addPrompt","addSnackbar","addTooltip","registerDialog","removeAlert","index","removeConfirm","c","removePrompt","removeSnackbar","s","removeTooltip","updateSnackbar","updateTooltip","showAlert","resolve","showConfirm","showPrompt","text","showSnackbar","duration","useFluxStore","inertMain","computed","tooltip","promiseToVoidFunction","fn","args","isString","str","isObject","_obj$constructor","pick","keys","_","k","_ref","v","DIRECTION","forceDirection","direction","objectIncludes","b","a","arrA","arrB","i","dateA","dateB","regexpA","regexpB","ActionDetails","opts","IMask","el","maskedClass","mask","normalizeOpts","instanceOpts","_mask","createMask","nOpts","MaskedClass","MaskElement","start","end","KEY_Z","KEY_Y","HTMLMaskElement","input","_this$input$getRootNo","_this$input$getRootNo2","_this$input","handlers","HTMLInputMaskElement","HTMLContenteditableMaskElement","root","selection","anchorOffset","focusOffset","range","InputHistory","steps","InputMask","_this$masked","masked","val","ev","listeners","l","pos","cursorPos","newUnmaskedValue","newValue","newRawInputValue","newDisplayValue","isChanged","restOpts","updateMask","updateOpts","handler","hIndex","details","oldRawValue","offset","removeDirection","ChangeDetails","prep","ContinuousTailDetails","from","stop","tail","beforePos","shiftChar","Masked","flags","fromPos","toPos","ch","checkTail","consistentState","noFixState","fixDetails","chDetails","consistentTail","appended","beforeTailState","tailDetails","ci","d","rawInput","ret","deleteCount","inserted","tailPos","eagerRemove","startChangePos","valLength","tval","ChunksTailDetails","chunks","tailChunk","lastChunk","extendLast","firstTailChunk","chunk","lastBlockIter","chunkBlock","remainChars","props","cstate","chunkShiftPos","PatternCursor","_this$block","PatternFixedDefinition","minPos","maxPos","appendEager","isResolved","PatternInputDefinition","parent","isOptional","placeholderChar","displayChar","lazy","eager","maskOpts","boundPos","_flags$_beforeTailSta","MaskedRegExp","MaskedPattern","defs","pattern","unmaskingBlock","optionalBlock","p","bNames","bName","expose","repeat","bOpts","blockOpts","maskedBlock","char","isInput","def","_blocks","maskedState","bi","unmaskedValue","_this$_mapPosToBlock","startBlockIndex","blockIter","block","blockDetails","chunkTail","bFromPos","bToPos","blockChunk","blockIndex","stopBefore","si","toBlockIndex","startBlockIter","endBlockIndex","_blocks2","accVal","blockStartPos","fromBlockIter","toBlockIter","isSameBlock","fromBlockStartPos","fromBlockEndPos","removeDetails","cursor","total","name","indices","gi","bic","element","imask","iban","vat","useDisabledInjection","inject","useDisabled","componentDisabled","treeDisabled","unref","useExpandableGroupInjection","useFilterInjection","useFlyoutInjection","useFormFieldInjection","useId","useTableInjection","roundStep_default","step","clampWithStepPrecision_default","min","max","countDecimals_default","_a","formatNumber_default","decimals","formatPercentage_default","generateStepTicks_default","lower","upper","target","isSmall","STEP_TICK_SIZES","STEP_TICK_SMALL_SIZES","delta","sizes","size","count","steps2","digits","power","hexToRGB_default","hex","color","hueToRGB_default","q","hslToRGB_default","h","g","rgbToHSV_default","cmin","cmax","hslToHSV_default","hsvToRGB_default","rgbToHSL_default","hsvToHSL_default","isHtmlElement_default","elm","mulberry32","seed","next","innerState","nextBetween","to","fork","mulberry32_default","rgbToHEX_default","sr","sg","sb","freeGlobal","freeSelf","Symbol","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","getRawTag","isOwn","tag","unmasked","result","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","arrayMap","array","iteratee","length","isArray","symbolProto","symbolToString","baseToString","toString","baseSlice","castSlice","rsAstralRange","rsComboMarksRange","reComboHalfMarksRange","rsComboSymbolsRange","rsComboRange","rsVarRange","rsZWJ","reHasUnicode","hasUnicode","string","asciiToArray","rsAstral","rsCombo","rsFitz","rsModifier","rsNonAstral","rsRegional","rsSurrPair","reOptMod","rsOptVar","rsOptJoin","rsSeq","rsSymbol","reUnicode","unicodeToArray","stringToArray","createCaseFirst","methodName","strSymbols","chr","trailing","upperFirst","capitalize","arrayReduce","accumulator","initAccum","basePropertyOf","object","deburredLetters","deburrLetter","reLatin","reComboMark","deburr","reAsciiWord","asciiWords","reHasUnicodeWord","hasUnicodeWord","rsDingbatRange","rsLowerRange","rsMathOpRange","rsNonCharRange","rsPunctuationRange","rsSpaceRange","rsUpperRange","rsBreakRange","rsApos","rsBreak","rsDigits","rsDingbat","rsLower","rsMisc","rsUpper","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","rsOrdLower","rsOrdUpper","rsEmoji","reUnicodeWord","unicodeWords","words","guard","reApos","createCompounder","callback","camelCase","word","N","E","m","y","T","x","S","u","L","U","me","xe","K","he","be","P","ye","z","Te","Ee","ve","M","Le","ge","we","B","V","Me","R","Re","ke","Fe","W","He","G","__privateAdd","_t","_e","__privateGet","__privateSet","w","X","j","Se","De","Ae","Y","Ie","Z","Ce","Oe","J","Ne","$","Pe","Ue","Ke","Q","Ve","ze","Be","qe","ee","We","Ge","H","Ye","Xe","et","D","re","Je","se","Qe","A","ot","tt","ae","le","ie","ce","pe","it","ct","at","fr","pr","Er","gr","Sr","Ir","Vr","qr","es","ts","ps","us","gs","ws","Is","Os","qs","Ws","ta","oa","ua","da","wa","La","Oa","Ca","Wa","Ga","oi","ni","di","mi","Li","Mi","de","ft","C","emit","__emit","definition","__props","warn","onClick","evt","navigate","SLOTS","disabled","toRef","onMouseEnter","onMouseLeave","useFormSelect","modelValue","isMultiple","options","searchQuery","values","model","groups","search","available","selected","subItems","subItem","useLoaded","tasks","shallowRef","isLoading","loaded","fallback","params","translation","paramName","useTranslate","instance","getCurrentInstance","isVueI18n","CLASS_MAP","$style","dialogRef","useTemplateRef","mountRef","paneRef","isClosing","isOpening","isOpen","openerWidth","openerHeight","paneX","paneY","paneMarginX","paneMarginY","useFocusTrap","close","pane","unrefTemplateElement","open","mount","height","reposition","top","left","paneWidth","paneHeight","mx","my","toggle","onDialogBackdropClick","watch","onCleanup","dialog","provide","__expose","_sfc_main$2o","defineComponent","slots","onHover","onLeave","_b","_useSlots","translate","elementRef","useFocusZone","canvasRef","componentId","useComponentId","contextRef","animationFrame","tick","polygons","mulberry","localMulberry","points","schedule","onBeforeUnmount","cancel","update","context","shapes","widthBasedOpacity","tx","ty","shape","canvas","afterEnter","isHtmlElement","enter","leave","STATUS_CLASS_MAP","colorSeed","onDeleteClick","_sfc_main$22","purple600","orange600","pink600","attrs","Fragment","flattenVNodeTree","vnode","cloneVNode","anchorRef","popupRef","onResize","onScroll","useMutationObserver","anchor","popup","popupHeight","popupWidth","px","py","resize","watchEffect","_useModel","inputRef","localValue","nativeType","blur","focus","passwordTypeToggle","onBlur","onFocus","onInput","dateTime","DateTime","onKeyDown","type","iso","__","inputMask","modelSearch","select","option","INITIAL_HIGHLIGHTED_INDEX","anchorPopupRef","optionElementRefs","searchInputElementRef","highlightedIndex","isKeyboardAction","isPopupOpen","focusElement","highlightedId","rawOptions","group","useClickOutside","deselect","nextTick","selectedIndex","onKeyUp","searchInput","smallTicks","generateStepTicks","ticks","rootRef","onPointerMove","onPointerUp","onPointerDown","createDialogRenderer","className","transition","unregister","zIndex","dialogCount","children","isVisible","child","Comment","content","Teleport","createLabelForDateRange","preventCustom","startStr","endStr","getValueLabel","valueLabel","FilterMenuRenderer","getComponentName","getComponentProps","parsers","FluxMenu","renderFilterGroup","parseDate","base","parseDateRange","parseOption","parseOptionAsync","fetchOptions","parseOptions","generateMultiOptionsLabel","parseOptionsAsync","parseRange","formatter","formatNumber","slot","FluxSeparator","FluxMenuGroup","renderFilterItem","isVNode","FilterItem","VNodeRenderer","isTransitioningToPast","viewDate","viewMonth","viewYear","dates","days","nextMonth","previousMonth","setViewDate","useCalendar","months","useCalendarMonthSwitcher","years","nextYears","previousYears","useCalendarYearSwitcher","eventNodes","events","en","getEventsForDate","forDate","forDateStr","date","setToday","setViewMonth","month","setViewYear","year","isIndeterminate","selectableIcon","isJustNowVisible","relative","isDragging","thumbPosition","onDecrement","valueX","valueY","maxX","maxY","minX","minY","stepX","stepY","roundStep","onIncrement","thumbRef","percentage","tooltipContent","countDecimals","onDragging","is","onUpdate","clampWithStepPrecision","alpha","hsv","rgb","hsvToRGB","hue","saturation","saturationValue","saturationPickerColor","hslInputH","generateComputedInput","hsvToHSL","hslToHSV","hslInputS","hslInputL","hsvInputH","hsvInputS","hsvInputV","rgbInputR","rgbToHSV","rgbInputG","rgbInputB","fromHSV","toHSV","oldModelValue","hexToRGB","hslToRGB","rgbToHEX","rgbToHSL","customColor","rows","viewDateNext","viewDatePrevious","getInitialDate","viewMode","maxDate","minDate","normalizedSelection","isDisabled","isWithinBoundary","isSelected","unit","isWithinRange","edge","isWithinSelection","selectionStart","selectionEnd","setDate","setView","view","onDateMouseOver","onDateMouseOut","svgRef","svgWidth","svgHeight","svg","contentRef","isDraggingOver","pathLength","onWindowDragEnd","onWindowDragStart","onWindowDrop","onDragEnter","onDragLeave","onDrop","files","onFileSelected","showPicker","contentId","headerId","closeAll","register","expandIcon","onBeforeMount","expandables","expandable","isOpenRef","getExposedRef","uid","faderRef","useInterval","current","fader","previous","isBack","back","windowRef","filters","items","reset","getValue","hasValue","setValue","currentValue","onDatePicked","filteredOptions","onSelect","debouncedModelSearch","useDebouncedRef","fetchRelevant","fetchSearch","selectedOptions","visibleOptions","visible","vo","so","inView","useInView","draw","columns","squares","dpr","opacity","setup","frame","lastTime","animate","time","imageRef","aspectRatio","dragging","isPreviewing","focalPointX","focalPointY","onImageLoaded","image","pageX","pageY","onShowPreviewClicked","onSubmit","flyoutRef","label","setTime","fieldRefs","onPaste","lowerThumbRef","upperThumbRef","isDraggingLower","isDraggingUpper","percentageLower","percentageUpper","lowerValue","upperValue","which","onDeselect","onOpen","timeZones","timeZoneGroupOrder","timeZone","timeZoneOptions","timeZoneOffset","go","sortedGroups","ai","groupOptions","labelA","labelB","isDeleteVisible","onFilesSelected","images","file","_sfc_main$G","FluxOverlayTransition","pages","isNextDisabled","isPreviousDisabled","visiblePages","dots","page","prompt","pageStr","limit","limitOptions","perPage","borderColor","position","progress","decrement","increment","sizeToContent","hasActions","onAction","actionKey","onClose","snackbars","snackbar","_sfc_main$n","has","calculate","origin","margin","safeZone","scale","originWidth","originHeight","calculateHorizontalPosition","calculateVerticalPosition","FluxTooltipTransition","arrowAngle","arrowX","arrowY","diff","alerts","confirms","prompts","inert","controlRef","itemRefs","activeItemX","activeItemWidth","activate","onUpdated","itemRef","controlX","_sfc_main$k","_sfc_main$j","FluxSlideOverTransition","spacings","isTransitioningBack","newIndex","oldIndex","tabBarRef","useEventListener","checkScroll","isEndArrowVisible","isStartArrowVisible","tabBar","scrollToEnd","scrollToStart","tabRef","tab","tabs","isBordered","isHoverable","isSeparated","isStriped","sortingIcon"],"mappings":"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A,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,GAEMC,IAAwC;AAAA,MAC1C;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;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","x_google_ignoreList":[0,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66]}