@xleddyl/443-components-vue 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (323) hide show
  1. package/README.md +25 -6
  2. package/dist/chart/BarChart.vue +11 -4
  3. package/dist/chart/BarChart.vue.d.ts +2 -0
  4. package/dist/chart/ChartLegend.vue +43 -4
  5. package/dist/chart/ChartLegend.vue.d.ts +4 -2
  6. package/dist/chart/ChartPanel.vue +10 -10
  7. package/dist/chart/ChartPanel.vue.d.ts +11 -8
  8. package/dist/chart/ChartSummary.vue +8 -3
  9. package/dist/chart/ChartSummary.vue.d.ts +3 -1
  10. package/dist/chart/DoughnutChart.vue +11 -4
  11. package/dist/chart/LineChart.vue +8 -2
  12. package/dist/chart/LineChart.vue.d.ts +2 -0
  13. package/dist/chart/chart.css +19 -0
  14. package/dist/chart/patterns.d.ts +6 -0
  15. package/dist/chart/patterns.mjs +79 -0
  16. package/dist/chart/types.d.ts +5 -0
  17. package/dist/chart/useChartColors.mjs +1 -1
  18. package/dist/components/core/Button.vue +11 -1
  19. package/dist/components/core/Button.vue.d.ts +1 -1
  20. package/dist/components/core/FieldMessage.vue +6 -0
  21. package/dist/components/core/FieldMessage.vue.d.ts +1 -1
  22. package/dist/components/core/Form.vue +18 -1
  23. package/dist/components/core/FormAlerts.vue +41 -3
  24. package/dist/components/core/FormField.vue +43 -24
  25. package/dist/components/core/Input.vue.d.ts +6 -6
  26. package/dist/components/core/Root.vue +6 -1
  27. package/dist/components/core/Root.vue.d.ts +2 -2
  28. package/dist/components/core/Spinner.vue +6 -11
  29. package/dist/components/core/Spinner.vue.d.ts +2 -2
  30. package/dist/components/core/Textarea.vue.d.ts +2 -2
  31. package/dist/components/core/VisuallyHidden.vue.d.ts +2 -2
  32. package/dist/components/data/Avatar.vue +8 -5
  33. package/dist/components/data/AvatarGroup.vue +6 -3
  34. package/dist/components/data/Badge.vue.d.ts +1 -1
  35. package/dist/components/data/FilterPills.vue +18 -2
  36. package/dist/components/data/Pagination.vue +24 -18
  37. package/dist/components/data/Pagination.vue.d.ts +2 -2
  38. package/dist/components/data/SelectionBar.vue +32 -3
  39. package/dist/components/data/Stat.vue +7 -1
  40. package/dist/components/data/Stat.vue.d.ts +2 -2
  41. package/dist/components/data/Table.vue +62 -14
  42. package/dist/components/data/Tag.vue +24 -4
  43. package/dist/components/data/Tag.vue.d.ts +3 -3
  44. package/dist/components/data/Timeline.vue +12 -1
  45. package/dist/components/data/Tree.vue +137 -36
  46. package/dist/components/data/Tree.vue.d.ts +13 -14
  47. package/dist/components/data/types.d.ts +2 -1
  48. package/dist/components/feedback/Alert.vue +18 -9
  49. package/dist/components/feedback/Alert.vue.d.ts +2 -2
  50. package/dist/components/feedback/LoadingOverlay.vue +35 -3
  51. package/dist/components/feedback/Meter.vue +28 -3
  52. package/dist/components/feedback/Progress.vue +2 -7
  53. package/dist/components/feedback/Progress.vue.d.ts +1 -1
  54. package/dist/components/feedback/ProgressRing.vue +2 -6
  55. package/dist/components/feedback/ProgressRing.vue.d.ts +1 -1
  56. package/dist/components/forms/Calendar.vue +49 -26
  57. package/dist/components/forms/Calendar.vue.d.ts +9 -5
  58. package/dist/components/forms/CheckboxGroup.vue +14 -4
  59. package/dist/components/forms/CheckboxGroup.vue.d.ts +1 -0
  60. package/dist/components/forms/ColorInput.vue +68 -15
  61. package/dist/components/forms/ColorInput.vue.d.ts +16 -13
  62. package/dist/components/forms/Combobox.vue +18 -4
  63. package/dist/components/forms/DateInput.vue.d.ts +6 -6
  64. package/dist/components/forms/DatePicker.vue +23 -7
  65. package/dist/components/forms/DatePicker.vue.d.ts +4 -2
  66. package/dist/components/forms/FileInput.vue +31 -13
  67. package/dist/components/forms/FileInput.vue.d.ts +2 -2
  68. package/dist/components/forms/InputAddon.vue +18 -2
  69. package/dist/components/forms/InputGroup.vue +27 -0
  70. package/dist/components/forms/InputGroup.vue.d.ts +2 -0
  71. package/dist/components/forms/NumberInput.vue +6 -7
  72. package/dist/components/forms/NumberInput.vue.d.ts +6 -6
  73. package/dist/components/forms/PasswordInput.vue +12 -6
  74. package/dist/components/forms/PasswordInput.vue.d.ts +6 -7
  75. package/dist/components/forms/PinInput.vue +11 -1
  76. package/dist/components/forms/PinInput.vue.d.ts +8 -6
  77. package/dist/components/forms/RadioGroup.vue +15 -5
  78. package/dist/components/forms/RadioGroup.vue.d.ts +1 -0
  79. package/dist/components/forms/SegmentedControl.vue +15 -10
  80. package/dist/components/forms/SegmentedControl.vue.d.ts +1 -0
  81. package/dist/components/forms/Slider.vue +9 -0
  82. package/dist/components/forms/Slider.vue.d.ts +8 -6
  83. package/dist/components/forms/Switch.vue +7 -0
  84. package/dist/components/forms/Switch.vue.d.ts +2 -2
  85. package/dist/components/forms/TimeInput.vue.d.ts +6 -6
  86. package/dist/components/forms/types.d.ts +4 -0
  87. package/dist/components/layout/Accordion.vue.d.ts +2 -2
  88. package/dist/components/layout/AppShell.vue +40 -18
  89. package/dist/components/layout/AppShell.vue.d.ts +11 -9
  90. package/dist/components/layout/Card.vue +50 -16
  91. package/dist/components/layout/Card.vue.d.ts +13 -11
  92. package/dist/components/layout/CopyButton.vue +13 -5
  93. package/dist/components/layout/CopyButton.vue.d.ts +3 -3
  94. package/dist/components/layout/NavLink.vue +10 -1
  95. package/dist/components/layout/NavLink.vue.d.ts +2 -2
  96. package/dist/components/layout/PageHeader.vue +2 -2
  97. package/dist/components/layout/Separator.vue +6 -3
  98. package/dist/components/layout/Sidebar.vue +14 -7
  99. package/dist/components/layout/Sidebar.vue.d.ts +0 -2
  100. package/dist/components/layout/SidebarNav.vue +16 -44
  101. package/dist/components/layout/Stack.vue.d.ts +2 -2
  102. package/dist/components/layout/Tabs.vue +10 -18
  103. package/dist/components/layout/Tabs.vue.d.ts +2 -2
  104. package/dist/components/layout/Toolbar.vue +10 -4
  105. package/dist/components/layout/Toolbar.vue.d.ts +1 -0
  106. package/dist/components/layout/types.d.ts +1 -0
  107. package/dist/components/overlays/CommandPalette.vue +8 -4
  108. package/dist/components/overlays/CommandPalette.vue.d.ts +3 -8
  109. package/dist/components/overlays/ConfirmDialog.vue +7 -5
  110. package/dist/components/overlays/ConfirmDialog.vue.d.ts +12 -8
  111. package/dist/components/overlays/ConfirmHost.vue +22 -19
  112. package/dist/components/overlays/ConfirmHost.vue.d.ts +8 -6
  113. package/dist/components/overlays/ContextMenu.vue +9 -11
  114. package/dist/components/overlays/ContextMenu.vue.d.ts +2 -2
  115. package/dist/components/overlays/Drawer.vue +2 -0
  116. package/dist/components/overlays/Drawer.vue.d.ts +4 -2
  117. package/dist/components/overlays/DropdownMenu.vue +13 -21
  118. package/dist/components/overlays/DropdownMenu.vue.d.ts +2 -2
  119. package/dist/components/overlays/HoverCard.vue +8 -2
  120. package/dist/components/overlays/HoverCard.vue.d.ts +2 -2
  121. package/dist/components/overlays/Modal.vue +2 -0
  122. package/dist/components/overlays/Modal.vue.d.ts +4 -2
  123. package/dist/components/overlays/Popover.vue +19 -4
  124. package/dist/components/overlays/Popover.vue.d.ts +2 -2
  125. package/dist/components/overlays/Toaster.vue +71 -8
  126. package/dist/components/overlays/Toaster.vue.d.ts +3 -0
  127. package/dist/components/overlays/Tooltip.vue +39 -14
  128. package/dist/components/overlays/types.d.ts +7 -0
  129. package/dist/components/templates/AccountMenu.vue.d.ts +2 -2
  130. package/dist/components/templates/AppearanceSettings.vue +83 -77
  131. package/dist/components/templates/AppearanceSettings.vue.d.ts +2 -2
  132. package/dist/components/templates/AuthLayout.vue +2 -2
  133. package/dist/components/templates/Brand.vue.d.ts +2 -2
  134. package/dist/components/templates/DashboardLayout.vue +3 -7
  135. package/dist/components/templates/DashboardLayout.vue.d.ts +8 -18
  136. package/dist/components/templates/DetailPage.vue +3 -1
  137. package/dist/components/templates/DetailPage.vue.d.ts +2 -2
  138. package/dist/components/templates/ErrorPage.vue +11 -5
  139. package/dist/components/templates/ErrorPage.vue.d.ts +10 -6
  140. package/dist/components/templates/FormPage.vue +16 -3
  141. package/dist/components/templates/ListPage.vue +19 -6
  142. package/dist/components/templates/ListPage.vue.d.ts +1 -0
  143. package/dist/components/templates/NotFoundPage.vue +2 -0
  144. package/dist/components/templates/NotFoundPage.vue.d.ts +4 -0
  145. package/dist/components/templates/SaveBar.vue +18 -3
  146. package/dist/components/templates/SaveBar.vue.d.ts +5 -5
  147. package/dist/components/templates/SettingsGroup.vue +1 -1
  148. package/dist/components/templates/SettingsGroup.vue.d.ts +3 -1
  149. package/dist/components/templates/SettingsModal.vue +73 -46
  150. package/dist/components/templates/SettingsModal.vue.d.ts +9 -11
  151. package/dist/components/templates/SettingsPage.vue.d.ts +2 -2
  152. package/dist/components/templates/SettingsSection.vue.d.ts +4 -2
  153. package/dist/components/templates/types.d.ts +4 -0
  154. package/dist/composables/useAlert.mjs +5 -10
  155. package/dist/composables/useConfirm.mjs +5 -5
  156. package/dist/composables/useField.d.ts +4 -0
  157. package/dist/composables/useField.mjs +16 -5
  158. package/dist/composables/useFileDrop.mjs +2 -1
  159. package/dist/composables/useOverlay.mjs +2 -1
  160. package/dist/composables/usePreset.mjs +4 -10
  161. package/dist/composables/usePrompt.mjs +6 -13
  162. package/dist/composables/useScrollLock.mjs +4 -3
  163. package/dist/composables/useTheme.mjs +3 -11
  164. package/dist/composables/useToast.mjs +2 -1
  165. package/dist/editor/RichTextEditor.vue +31 -6
  166. package/dist/editor/RichTextEditor.vue.d.ts +2 -2
  167. package/dist/editor/rich-text-editor.css +9 -4
  168. package/dist/grid/DataGrid.vue +72 -12
  169. package/dist/grid/GridToolbar.vue +1 -1
  170. package/dist/grid/GridToolbar.vue.d.ts +2 -2
  171. package/dist/grid/cells/BadgeCell.vue +3 -1
  172. package/dist/grid/cells/BadgeCell.vue.d.ts +17 -3
  173. package/dist/grid/cells/DateCell.vue +3 -1
  174. package/dist/grid/cells/DateCell.vue.d.ts +17 -3
  175. package/dist/grid/cells/EmptyCell.vue +15 -0
  176. package/dist/grid/cells/EmptyCell.vue.d.ts +392 -0
  177. package/dist/grid/cells/LinkCell.vue +9 -2
  178. package/dist/grid/cells/LinkCell.vue.d.ts +17 -3
  179. package/dist/grid/data-grid.css +5 -5
  180. package/dist/grid/types.d.ts +2 -0
  181. package/dist/internal/core/ButtonContent.vue +3 -0
  182. package/dist/internal/core/LiveRegion.vue +26 -0
  183. package/dist/internal/core/LiveRegion.vue.d.ts +393 -0
  184. package/dist/internal/core/copy.d.ts +6 -0
  185. package/dist/internal/core/copy.mjs +14 -0
  186. package/dist/internal/core/focus.d.ts +6 -0
  187. package/dist/internal/core/focus.mjs +46 -0
  188. package/dist/internal/core/intl.d.ts +4 -2
  189. package/dist/internal/core/intl.mjs +23 -22
  190. package/dist/internal/core/live.d.ts +6 -0
  191. package/dist/internal/core/live.mjs +22 -0
  192. package/dist/internal/core/preset.d.ts +0 -1
  193. package/dist/internal/core/preset.mjs +4 -14
  194. package/dist/internal/core/resize.d.ts +1 -0
  195. package/dist/internal/core/resize.mjs +11 -0
  196. package/dist/internal/core/roving.d.ts +7 -0
  197. package/dist/internal/core/roving.mjs +19 -1
  198. package/dist/internal/core/scroll-edges.d.ts +5 -0
  199. package/dist/internal/core/scroll-edges.mjs +63 -0
  200. package/dist/internal/core/storage.d.ts +2 -0
  201. package/dist/internal/core/storage.mjs +8 -0
  202. package/dist/internal/core/theme.d.ts +0 -1
  203. package/dist/internal/core/theme.mjs +4 -13
  204. package/dist/internal/core/tone.d.ts +1 -0
  205. package/dist/internal/core/tone.mjs +4 -0
  206. package/dist/internal/core/transition.d.ts +1 -0
  207. package/dist/internal/core/transition.mjs +20 -0
  208. package/dist/internal/data/rows.mjs +6 -5
  209. package/dist/internal/data/tree.d.ts +2 -3
  210. package/dist/internal/feedback/LoadingHost.vue +16 -6
  211. package/dist/internal/feedback/loading.mjs +2 -1
  212. package/dist/internal/feedback/progress.d.ts +12 -0
  213. package/dist/internal/feedback/progress.mjs +13 -0
  214. package/dist/internal/floating/layer.d.ts +1 -1
  215. package/dist/internal/floating/layer.mjs +17 -10
  216. package/dist/internal/forms/keys.d.ts +4 -0
  217. package/dist/internal/forms/keys.mjs +1 -0
  218. package/dist/internal/forms/name.d.ts +2 -0
  219. package/dist/internal/forms/name.mjs +12 -0
  220. package/dist/internal/forms/standard-schema.d.ts +0 -2
  221. package/dist/internal/forms/standard-schema.mjs +0 -18
  222. package/dist/internal/layout/NavGroup.vue +104 -0
  223. package/dist/internal/layout/NavGroup.vue.d.ts +412 -0
  224. package/dist/internal/layout/route.mjs +1 -1
  225. package/dist/internal/overlays/DialogFrame.vue +53 -6
  226. package/dist/internal/overlays/DialogFrame.vue.d.ts +5 -2
  227. package/dist/internal/overlays/MenuList.vue +4 -11
  228. package/dist/internal/overlays/MenuList.vue.d.ts +6 -6
  229. package/dist/internal/overlays/OverlayView.vue +2 -0
  230. package/dist/internal/overlays/OverlayView.vue.d.ts +8 -6
  231. package/dist/internal/overlays/confirm.d.ts +6 -1
  232. package/dist/internal/overlays/confirm.mjs +5 -2
  233. package/dist/internal/overlays/dialog.d.ts +1 -0
  234. package/dist/internal/overlays/dialog.mjs +9 -9
  235. package/dist/internal/overlays/hover.d.ts +1 -0
  236. package/dist/internal/overlays/hover.mjs +20 -3
  237. package/dist/internal/overlays/menu.d.ts +9 -0
  238. package/dist/internal/overlays/menu.mjs +15 -0
  239. package/dist/internal/overlays/stack.d.ts +1 -0
  240. package/dist/locale/en.mjs +72 -19
  241. package/dist/locale/index.d.ts +1 -1
  242. package/dist/locale/index.mjs +5 -11
  243. package/dist/locale/it.mjs +72 -19
  244. package/dist/locale/types.d.ts +55 -2
  245. package/dist/nuxt/module.mjs +1 -1
  246. package/dist/nuxt/runtime/RouteAnnouncer.vue +21 -0
  247. package/dist/nuxt/runtime/RouteAnnouncer.vue.d.ts +3 -0
  248. package/dist/nuxt/runtime/layout-head.d.ts +2 -0
  249. package/dist/nuxt/runtime/layout-head.mjs +13 -0
  250. package/dist/nuxt/runtime/layouts/auth.vue +4 -0
  251. package/dist/nuxt/runtime/layouts/auth.vue.d.ts +2 -2
  252. package/dist/nuxt/runtime/layouts/dashboard.vue +4 -0
  253. package/dist/nuxt/runtime/layouts/dashboard.vue.d.ts +2 -2
  254. package/dist/nuxt/runtime/locale.mjs +8 -1
  255. package/dist/nuxt/runtime/theme.mjs +17 -12
  256. package/dist/styles/base.css +0 -13
  257. package/dist/styles/core/button.css +8 -8
  258. package/dist/styles/core/field-message.css +2 -2
  259. package/dist/styles/core/form-field.css +13 -4
  260. package/dist/styles/core/input.css +4 -7
  261. package/dist/styles/core/kbd.css +0 -1
  262. package/dist/styles/data/badge.css +8 -4
  263. package/dist/styles/data/description-list.css +7 -5
  264. package/dist/styles/data/filter-pills.css +5 -8
  265. package/dist/styles/data/pagination.css +2 -2
  266. package/dist/styles/data/stat.css +3 -3
  267. package/dist/styles/data/table.css +3 -2
  268. package/dist/styles/data/tag.css +1 -2
  269. package/dist/styles/data/timeline.css +2 -1
  270. package/dist/styles/data/tree.css +31 -10
  271. package/dist/styles/feedback/alert.css +1 -3
  272. package/dist/styles/feedback/empty-state.css +6 -4
  273. package/dist/styles/feedback/loading-host.css +4 -0
  274. package/dist/styles/feedback/loading-overlay.css +4 -0
  275. package/dist/styles/forced-colors.css +215 -0
  276. package/dist/styles/forms/calendar.css +2 -2
  277. package/dist/styles/forms/choice.css +2 -2
  278. package/dist/styles/forms/color-input.css +1 -1
  279. package/dist/styles/forms/combobox.css +2 -24
  280. package/dist/styles/forms/date-input.css +2 -2
  281. package/dist/styles/forms/date-picker.css +3 -7
  282. package/dist/styles/forms/file-input.css +4 -3
  283. package/dist/styles/forms/input-group.css +6 -0
  284. package/dist/styles/forms/number-input.css +2 -2
  285. package/dist/styles/forms/password-input.css +5 -2
  286. package/dist/styles/forms/pin-input.css +4 -2
  287. package/dist/styles/forms/segmented.css +2 -2
  288. package/dist/styles/forms/select.css +6 -6
  289. package/dist/styles/forms/slider.css +5 -4
  290. package/dist/styles/forms/switch.css +5 -1
  291. package/dist/styles/index.css +1 -0
  292. package/dist/styles/layout/accordion.css +1 -1
  293. package/dist/styles/layout/app-shell.css +15 -3
  294. package/dist/styles/layout/card.css +12 -2
  295. package/dist/styles/layout/copy-button.css +1 -1
  296. package/dist/styles/layout/nav-link.css +1 -33
  297. package/dist/styles/layout/page-header.css +2 -1
  298. package/dist/styles/layout/separator.css +1 -1
  299. package/dist/styles/layout/sidebar-nav.css +15 -4
  300. package/dist/styles/layout/sidebar.css +20 -6
  301. package/dist/styles/layout/tabs.css +9 -4
  302. package/dist/styles/layout/theme-switch.css +0 -6
  303. package/dist/styles/overlays/command.css +9 -15
  304. package/dist/styles/overlays/confirm.css +1 -1
  305. package/dist/styles/overlays/drawer.css +23 -3
  306. package/dist/styles/overlays/menu.css +2 -17
  307. package/dist/styles/overlays/modal.css +33 -9
  308. package/dist/styles/overlays/toast.css +1 -2
  309. package/dist/styles/presets.css +4 -4
  310. package/dist/styles/shared.css +96 -3
  311. package/dist/styles/templates/account-menu.css +3 -3
  312. package/dist/styles/templates/auth-layout.css +5 -1
  313. package/dist/styles/templates/brand.css +3 -3
  314. package/dist/styles/templates/empty-page.css +5 -1
  315. package/dist/styles/templates/error-page.css +4 -0
  316. package/dist/styles/templates/form-page.css +10 -0
  317. package/dist/styles/templates/save-bar.css +10 -0
  318. package/dist/styles/templates/settings-modal.css +46 -45
  319. package/dist/styles/templates/settings-page.css +3 -3
  320. package/dist/styles/tokens.css +12 -2
  321. package/package.json +1 -1
  322. package/dist/internal/overlays/focus.d.ts +0 -1
  323. package/dist/internal/overlays/focus.mjs +0 -24
@@ -12,14 +12,14 @@
12
12
 
13
13
  <slot name="before" />
14
14
 
15
- <Card v-if="error" class="k-list-state" padding="lg">
15
+ <Card v-if="error" class="k-list-state" padding="lg" role="alert">
16
16
  <slot name="error" :retry="() => emit('retry')">
17
17
  <EmptyState
18
18
  variant="plain"
19
19
  icon="exclamation-triangle"
20
20
  :title="errorText"
21
21
  :description="typeof error === 'string' ? error : void 0"
22
- :level="2"
22
+ :level="childLevel"
23
23
  >
24
24
  <template #actions>
25
25
  <Button
@@ -41,7 +41,7 @@
41
41
  :icon="emptyIcon"
42
42
  :title="emptyTitleText"
43
43
  :description="emptyDescription"
44
- :level="2"
44
+ :level="childLevel"
45
45
  >
46
46
  <template v-if="$slots['empty-actions']" #actions>
47
47
  <slot name="empty-actions" />
@@ -123,7 +123,7 @@
123
123
  icon="magnifying-glass"
124
124
  :title="noResultsTitleText"
125
125
  :description="isFiltered ? noResultsDescriptionText : void 0"
126
- :level="2"
126
+ :level="childLevel"
127
127
  >
128
128
  <template v-if="isFiltered" #actions>
129
129
  <Button size="sm" variant="soft" tone="neutral" @click="clearFilters">{{
@@ -153,12 +153,14 @@
153
153
  </template>
154
154
  </Card>
155
155
 
156
+ <LiveRegion :message="resultsMessage" />
157
+
156
158
  <slot />
157
159
  </div>
158
160
  </template>
159
161
 
160
162
  <script setup>
161
- import { computed, useSlots, watch } from "vue";
163
+ import { computed, ref, useSlots, watch } from "vue";
162
164
  import { useLocale } from "../../composables/useLocale";
163
165
  import Button from "../core/Button.vue";
164
166
  import { createCollator, readCell, sortRows } from "../../internal/data/rows";
@@ -171,6 +173,7 @@ import Table from "../data/Table.vue";
171
173
  import EmptyState from "../feedback/EmptyState.vue";
172
174
  import Card from "../layout/Card.vue";
173
175
  import PageHeader from "../layout/PageHeader.vue";
176
+ import LiveRegion from "../../internal/core/LiveRegion.vue";
174
177
  const props = defineProps({
175
178
  title: { type: String, required: false },
176
179
  description: { type: String, required: false },
@@ -208,7 +211,8 @@ const props = defineProps({
208
211
  clearLabel: { type: String, required: false },
209
212
  errorTitle: { type: String, required: false },
210
213
  retryLabel: { type: String, required: false },
211
- selectedText: { type: Function, required: false }
214
+ selectedText: { type: Function, required: false },
215
+ resultsText: { type: Function, required: false }
212
216
  });
213
217
  const { locale, t } = useLocale();
214
218
  const searchPlaceholderText = computed(() => props.searchPlaceholder ?? t("common.search"));
@@ -222,6 +226,7 @@ const noResultsDescriptionText = computed(
222
226
  const clearText = computed(() => props.clearLabel ?? t("listPage.clearFilters"));
223
227
  const errorText = computed(() => props.errorTitle ?? t("common.somethingWentWrong"));
224
228
  const retryText = computed(() => props.retryLabel ?? t("common.retry"));
229
+ const childLevel = computed(() => Math.min(props.level + 1, 6));
225
230
  function selectedLabel(count) {
226
231
  return props.selectedText ? props.selectedText(count) : t("common.selected", { count });
227
232
  }
@@ -294,9 +299,17 @@ function clearFilters() {
294
299
  filter.value = Array.isArray(filter.value) ? [] : null;
295
300
  emit("clear");
296
301
  }
302
+ const interacted = ref(false);
297
303
  watch([search, filterValues], () => {
304
+ interacted.value = true;
298
305
  if (page.value !== 1) page.value = 1;
299
306
  });
307
+ const resultsMessage = computed(() => {
308
+ if (props.loading || props.error || isFirstRun.value) return "";
309
+ const total = resultTotal.value;
310
+ if (!interacted.value && total > 0) return "";
311
+ return props.resultsText ? props.resultsText(total) : t("listPage.results", { count: total });
312
+ });
300
313
  watch(resultTotal, (total) => {
301
314
  if (props.loading) return;
302
315
  const last = Math.max(1, Math.ceil(total / pageSize.value));
@@ -41,6 +41,7 @@ declare const __VLS_export: <T extends object>(__VLS_props: NonNullable<Awaited<
41
41
  errorTitle?: string;
42
42
  retryLabel?: string;
43
43
  selectedText?: (count: number) => string;
44
+ resultsText?: (count: number) => string;
44
45
  } & {
45
46
  page?: number;
46
47
  pageSize?: number;
@@ -11,6 +11,7 @@
11
11
  :brand-icon="brandIcon"
12
12
  :brand-logo="brandLogo"
13
13
  :fill="fill"
14
+ :level="level"
14
15
  :on-home="onHome"
15
16
  >
16
17
  <template v-if="$slots.actions" #actions><slot name="actions" /></template>
@@ -31,6 +32,7 @@ defineProps({
31
32
  brandIcon: { type: null, required: false },
32
33
  brandLogo: { type: String, required: false },
33
34
  fill: { type: Boolean, required: false, default: true },
35
+ level: { type: Number, required: false, default: 1 },
34
36
  onHome: { type: Function, required: false }
35
37
  });
36
38
  </script>
@@ -1,5 +1,6 @@
1
1
  import type { IconName } from '../../composables/useIcons';
2
2
  import type { LinkTarget } from '../core/types';
3
+ import type { HeadingLevel } from '../layout/types';
3
4
  declare var __VLS_8: {}, __VLS_11: {}, __VLS_13: {};
4
5
  type __VLS_Slots = {} & {
5
6
  actions?: (props: typeof __VLS_8) => any;
@@ -18,6 +19,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
18
19
  brandIcon?: IconName;
19
20
  brandLogo?: string;
20
21
  fill?: boolean;
22
+ level?: HeadingLevel;
21
23
  onHome?: () => void;
22
24
  error?: import("./types.ts").ErrorLike | null;
23
25
  statusCode?: number;
@@ -230,6 +232,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
230
232
  brandIcon?: IconName;
231
233
  brandLogo?: string;
232
234
  fill?: boolean;
235
+ level?: HeadingLevel;
233
236
  onHome?: () => void;
234
237
  error?: import("./types.ts").ErrorLike | null;
235
238
  statusCode?: number;
@@ -436,6 +439,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
436
439
  fill: boolean;
437
440
  message: string;
438
441
  title: string;
442
+ level: HeadingLevel;
439
443
  backLabel: string | false;
440
444
  homeTo: LinkTarget;
441
445
  homeLabel: string | false;
@@ -1,8 +1,9 @@
1
1
  <template>
2
- <div class="k-savebar-slot" :class="{ 'is-visible': visible }">
3
- <p class="k-visually-hidden" role="status">{{ visible ? messageText : "" }}</p>
2
+ <div ref="slotRef" class="k-savebar-slot" :class="{ 'is-visible': visible }" tabindex="-1">
3
+ <LiveRegion :message="visible ? messageText : ''" />
4
4
  <div
5
5
  v-if="visible"
6
+ ref="barRef"
6
7
  class="k-savebar"
7
8
  role="region"
8
9
  :aria-label="labelText"
@@ -38,8 +39,10 @@
38
39
  </template>
39
40
 
40
41
  <script setup>
41
- import { computed } from "vue";
42
+ import { computed, useTemplateRef, watch } from "vue";
42
43
  import { useLocale } from "../../composables/useLocale";
44
+ import { focusStable, hasFocusWithin } from "../../internal/core/focus";
45
+ import LiveRegion from "../../internal/core/LiveRegion.vue";
43
46
  import Button from "../core/Button.vue";
44
47
  const props = defineProps({
45
48
  visible: { type: Boolean, required: false, default: true },
@@ -58,4 +61,16 @@ const discardText = computed(
58
61
  () => props.discardLabel === void 0 ? t("common.discard") : props.discardLabel
59
62
  );
60
63
  const emit = defineEmits(["save", "discard"]);
64
+ const slotRef = useTemplateRef("slotRef");
65
+ const barRef = useTemplateRef("barRef");
66
+ watch(
67
+ () => props.visible,
68
+ (visible) => {
69
+ if (visible || !hasFocusWithin(barRef.value)) return;
70
+ const form = props.form ? document.getElementById(props.form) : null;
71
+ const target = form ?? slotRef.value;
72
+ if (target) focusStable(target);
73
+ },
74
+ { flush: "pre" }
75
+ );
61
76
  </script>
@@ -1,8 +1,8 @@
1
- declare var __VLS_1: {}, __VLS_3: {};
1
+ declare var __VLS_6: {}, __VLS_8: {};
2
2
  type __VLS_Slots = {} & {
3
- default?: (props: typeof __VLS_1) => any;
3
+ default?: (props: typeof __VLS_6) => any;
4
4
  } & {
5
- actions?: (props: typeof __VLS_3) => any;
5
+ actions?: (props: typeof __VLS_8) => any;
6
6
  };
7
7
  declare const __VLS_base: import("vue").DefineComponent<{
8
8
  visible?: boolean;
@@ -18,6 +18,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
18
18
  style?: import("vue").StyleValue;
19
19
  results?: (string | number) | undefined;
20
20
  placeholder?: string | undefined | undefined;
21
+ dir?: string | undefined | undefined;
21
22
  class?: import("vue").ClassValue;
22
23
  role?: string | undefined | undefined;
23
24
  'aria-label'?: string | undefined | undefined;
@@ -173,7 +174,6 @@ declare const __VLS_base: import("vue").DefineComponent<{
173
174
  accesskey?: string | undefined | undefined;
174
175
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
175
176
  contextmenu?: string | undefined | undefined;
176
- dir?: string | undefined | undefined;
177
177
  draggable?: (boolean | "true" | "false") | undefined;
178
178
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
179
179
  enterKeyHint?: "search" | "done" | "previous" | "next" | "enter" | "go" | "send" | undefined;
@@ -221,6 +221,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
221
221
  style?: import("vue").StyleValue;
222
222
  results?: (string | number) | undefined;
223
223
  placeholder?: string | undefined | undefined;
224
+ dir?: string | undefined | undefined;
224
225
  class?: import("vue").ClassValue;
225
226
  role?: string | undefined | undefined;
226
227
  'aria-label'?: string | undefined | undefined;
@@ -376,7 +377,6 @@ declare const __VLS_base: import("vue").DefineComponent<{
376
377
  accesskey?: string | undefined | undefined;
377
378
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
378
379
  contextmenu?: string | undefined | undefined;
379
- dir?: string | undefined | undefined;
380
380
  draggable?: (boolean | "true" | "false") | undefined;
381
381
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
382
382
  enterKeyHint?: "search" | "done" | "previous" | "next" | "enter" | "go" | "send" | undefined;
@@ -14,7 +14,7 @@
14
14
  </div>
15
15
  </div>
16
16
  <div v-if="$slots.default" class="k-settings-group-body">
17
- <slot />
17
+ <slot :heading-id="headingId" />
18
18
  </div>
19
19
  </section>
20
20
  </template>
@@ -1,4 +1,6 @@
1
- declare var __VLS_7: {}, __VLS_9: {}, __VLS_11: {}, __VLS_13: {};
1
+ declare var __VLS_7: {}, __VLS_9: {}, __VLS_11: {}, __VLS_13: {
2
+ headingId: string;
3
+ };
2
4
  type __VLS_Slots = {} & {
3
5
  label?: (props: typeof __VLS_7) => any;
4
6
  } & {
@@ -6,7 +6,7 @@
6
6
  flush
7
7
  hide-close
8
8
  :sheet="false"
9
- :aria-label="titleText"
9
+ :label="titleText"
10
10
  :before-close="beforeClose"
11
11
  @open="emit('open')"
12
12
  @close="emit('close')"
@@ -14,7 +14,7 @@
14
14
  >
15
15
  <template #default="{ close }">
16
16
  <div class="k-settings-modal-frame">
17
- <nav class="k-settings-modal-nav" :aria-label="navText">
17
+ <div class="k-settings-modal-nav">
18
18
  <Button
19
19
  class="k-settings-modal-close"
20
20
  icon="x-mark"
@@ -24,7 +24,15 @@
24
24
  :aria-label="closeText"
25
25
  @click="close"
26
26
  />
27
- <div class="k-settings-modal-nav-list">
27
+ <nav
28
+ ref="navList"
29
+ class="k-settings-modal-nav-list"
30
+ :aria-label="navText"
31
+ :class="{
32
+ 'is-overflow-top': navEdges.overflowTop.value,
33
+ 'is-overflow-bottom': navEdges.overflowBottom.value
34
+ }"
35
+ >
28
36
  <div
29
37
  v-for="group in navGroups"
30
38
  :key="group.key"
@@ -71,7 +79,7 @@
71
79
  </button>
72
80
  </template>
73
81
  </div>
74
- </div>
82
+ </nav>
75
83
  <template v-if="onSignOut">
76
84
  <hr class="k-settings-modal-divider" />
77
85
  <button type="button" class="k-settings-modal-tab is-danger" @click="signOut">
@@ -79,7 +87,7 @@
79
87
  <span class="k-settings-modal-tab-label">{{ signOutText }}</span>
80
88
  </button>
81
89
  </template>
82
- </nav>
90
+ </div>
83
91
 
84
92
  <section
85
93
  v-if="active"
@@ -101,47 +109,61 @@
101
109
  <slot :name="`actions-${active.id}`" :section="active" :close="close" />
102
110
  </div>
103
111
  </header>
104
- <slot :name="`section-${active.id}`" :section="active" :close="close">
105
- <template v-if="active.id === 'account' && account">
106
- <div class="k-settings-modal-account">
107
- <Avatar :name="account.name" :src="account.avatar" size="lg" decorative />
108
- <div class="k-settings-modal-account-text">
109
- <span class="k-settings-modal-account-name">{{ account.name }}</span>
110
- <span v-if="account.email" class="k-settings-modal-account-email">
111
- {{ account.email }}
112
- </span>
112
+ <div
113
+ ref="contentBody"
114
+ class="k-settings-modal-body"
115
+ :class="{
116
+ 'is-overflow-top': contentEdges.overflowTop.value,
117
+ 'is-overflow-bottom': contentEdges.overflowBottom.value
118
+ }"
119
+ >
120
+ <slot :name="`section-${active.id}`" :section="active" :close="close">
121
+ <template v-if="active.id === 'account' && account">
122
+ <div class="k-settings-modal-account">
123
+ <Avatar
124
+ :name="account.name"
125
+ :src="account.avatar"
126
+ size="lg"
127
+ decorative
128
+ />
129
+ <div class="k-settings-modal-account-text">
130
+ <span class="k-settings-modal-account-name">{{ account.name }}</span>
131
+ <span v-if="account.email" class="k-settings-modal-account-email">
132
+ {{ account.email }}
133
+ </span>
134
+ </div>
135
+ <Badge v-if="account.role" :label="account.role" />
113
136
  </div>
114
- <Badge v-if="account.role" :label="account.role" />
115
- </div>
116
- <slot name="account-fields" :account="account" :close="close" />
117
- <SettingsGroup
118
- v-if="onSignOut && !hideSession"
119
- :label="sessionLabelText"
120
- :description="sessionDescriptionText"
121
- row
122
- >
123
- <template #actions>
124
- <Button
125
- variant="soft"
126
- tone="danger"
127
- size="sm"
128
- icon="arrow-left-start-on-rectangle"
129
- @click="signOut"
130
- >
131
- {{ signOutText }}
132
- </Button>
133
- </template>
134
- </SettingsGroup>
135
- </template>
136
- <AppearanceSettings
137
- v-else-if="active.id === 'appearance'"
138
- :presets="presets"
139
- :theme-label="themeLabel"
140
- :theme-text="themeText"
141
- :preset-label="presetLabel"
142
- :preset-text="presetText"
143
- />
144
- </slot>
137
+ <slot name="account-fields" :account="account" :close="close" />
138
+ <SettingsGroup
139
+ v-if="onSignOut && !hideSession"
140
+ :label="sessionLabelText"
141
+ :description="sessionDescriptionText"
142
+ row
143
+ >
144
+ <template #actions>
145
+ <Button
146
+ variant="soft"
147
+ tone="danger"
148
+ size="sm"
149
+ icon="arrow-left-start-on-rectangle"
150
+ @click="signOut"
151
+ >
152
+ {{ signOutText }}
153
+ </Button>
154
+ </template>
155
+ </SettingsGroup>
156
+ </template>
157
+ <AppearanceSettings
158
+ v-else-if="active.id === 'appearance'"
159
+ :presets="presets"
160
+ :theme-label="themeLabel"
161
+ :theme-text="themeText"
162
+ :preset-label="presetLabel"
163
+ :preset-text="presetText"
164
+ />
165
+ </slot>
166
+ </div>
145
167
  </section>
146
168
  </div>
147
169
  </template>
@@ -149,10 +171,11 @@
149
171
  </template>
150
172
 
151
173
  <script setup>
152
- import { computed, useId } from "vue";
174
+ import { computed, useId, useTemplateRef } from "vue";
153
175
  import { THEME_PRESETS } from "../../composables/usePreset";
154
176
  import { useLocale } from "../../composables/useLocale";
155
177
  import { useLinkResolver } from "../../internal/core/link";
178
+ import { useScrollEdges } from "../../internal/core/scroll-edges";
156
179
  import Button from "../core/Button.vue";
157
180
  import Icon from "../core/Icon.vue";
158
181
  import Avatar from "../data/Avatar.vue";
@@ -194,6 +217,10 @@ const signOutText = computed(() => props.signOutLabel ?? t("settings.signOut"));
194
217
  const sessionLabelText = computed(() => props.sessionLabel ?? t("settings.session"));
195
218
  const sessionDescriptionText = computed(() => props.sessionText ?? t("settings.sessionDescription"));
196
219
  const baseId = useId();
220
+ const navList = useTemplateRef("navList");
221
+ const contentBody = useTemplateRef("contentBody");
222
+ const navEdges = useScrollEdges(() => navList.value);
223
+ const contentEdges = useScrollEdges(() => contentBody.value);
197
224
  const panelId = `${baseId}-panel`;
198
225
  const { resolveLink } = useLinkResolver();
199
226
  const sectionList = computed(() => {
@@ -1,18 +1,14 @@
1
1
  import type { ThemePreset } from '../../composables/usePreset';
2
2
  import type { DialogBeforeClose } from '../overlays/types';
3
- import type { SettingsModalAccount, SettingsModalSection } from './types';
4
- type SectionScope = {
5
- section: SettingsModalSection;
6
- close: () => void;
7
- };
3
+ import type { SettingsModalAccount, SettingsModalSection, SettingsSectionSlotProps } from './types';
8
4
  type __VLS_Slots = {
9
5
  'account-fields'?: (props: {
10
6
  account: SettingsModalAccount;
11
7
  close: () => void;
12
8
  }) => unknown;
13
9
  } & {
14
- [key: `section-${string}`]: ((props: SectionScope) => unknown) | undefined;
15
- [key: `actions-${string}`]: ((props: SectionScope) => unknown) | undefined;
10
+ [key: `section-${string}`]: ((props: SettingsSectionSlotProps) => unknown) | undefined;
11
+ [key: `actions-${string}`]: ((props: SettingsSectionSlotProps) => unknown) | undefined;
16
12
  };
17
13
  declare const __VLS_base: import("vue").DefineComponent<{
18
14
  sections?: SettingsModalSection[];
@@ -40,11 +36,13 @@ declare const __VLS_base: import("vue").DefineComponent<{
40
36
  key?: PropertyKey | undefined;
41
37
  loading?: boolean;
42
38
  prefix?: "k-modal" | "k-drawer" | undefined;
39
+ label?: string;
43
40
  style?: import("vue").StyleValue;
44
41
  results?: (string | number) | undefined;
45
42
  placeholder?: string | undefined;
46
43
  description?: string;
47
44
  size?: import("../overlays/types").ModalSize;
45
+ dir?: string | undefined;
48
46
  class?: import("vue").ClassValue;
49
47
  role?: string | undefined;
50
48
  'aria-label'?: string | undefined;
@@ -200,7 +198,6 @@ declare const __VLS_base: import("vue").DefineComponent<{
200
198
  accesskey?: string | undefined;
201
199
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
202
200
  contextmenu?: string | undefined;
203
- dir?: string | undefined;
204
201
  draggable?: (boolean | "true" | "false") | undefined;
205
202
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined;
206
203
  enterKeyHint?: import("vue").HTMLAttributes["enterkeyhint"];
@@ -238,8 +235,8 @@ declare const __VLS_base: import("vue").DefineComponent<{
238
235
  onVnodeUpdated?: (((vnode: import("vue").VNode, oldVNode: import("vue").VNode) => void) | ((vnode: import("vue").VNode, oldVNode: import("vue").VNode) => void)[]) | undefined;
239
236
  onVnodeBeforeUnmount?: (((vnode: import("vue").VNode) => void) | ((vnode: import("vue").VNode) => void)[]) | undefined;
240
237
  onVnodeUnmounted?: (((vnode: import("vue").VNode) => void) | ((vnode: import("vue").VNode) => void)[]) | undefined;
241
- onCancel?: ((payload: Event) => void) | undefined;
242
238
  flush?: boolean;
239
+ onCancel?: ((payload: Event) => void) | undefined;
243
240
  sheet?: boolean;
244
241
  rootClass?: unknown;
245
242
  hideClose?: boolean;
@@ -276,11 +273,13 @@ declare const __VLS_base: import("vue").DefineComponent<{
276
273
  key?: PropertyKey | undefined;
277
274
  loading?: boolean;
278
275
  prefix?: "k-modal" | "k-drawer" | undefined;
276
+ label?: string;
279
277
  style?: import("vue").StyleValue;
280
278
  results?: (string | number) | undefined;
281
279
  placeholder?: string | undefined;
282
280
  description?: string;
283
281
  size?: import("../overlays/types").ModalSize;
282
+ dir?: string | undefined;
284
283
  class?: import("vue").ClassValue;
285
284
  role?: string | undefined;
286
285
  'aria-label'?: string | undefined;
@@ -436,7 +435,6 @@ declare const __VLS_base: import("vue").DefineComponent<{
436
435
  accesskey?: string | undefined;
437
436
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
438
437
  contextmenu?: string | undefined;
439
- dir?: string | undefined;
440
438
  draggable?: (boolean | "true" | "false") | undefined;
441
439
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined;
442
440
  enterKeyHint?: import("vue").HTMLAttributes["enterkeyhint"];
@@ -474,8 +472,8 @@ declare const __VLS_base: import("vue").DefineComponent<{
474
472
  onVnodeUpdated?: (((vnode: import("vue").VNode, oldVNode: import("vue").VNode) => void) | ((vnode: import("vue").VNode, oldVNode: import("vue").VNode) => void)[]) | undefined;
475
473
  onVnodeBeforeUnmount?: (((vnode: import("vue").VNode) => void) | ((vnode: import("vue").VNode) => void)[]) | undefined;
476
474
  onVnodeUnmounted?: (((vnode: import("vue").VNode) => void) | ((vnode: import("vue").VNode) => void)[]) | undefined;
477
- onCancel?: ((payload: Event) => void) | undefined;
478
475
  flush?: boolean;
476
+ onCancel?: ((payload: Event) => void) | undefined;
479
477
  sheet?: boolean;
480
478
  rootClass?: unknown;
481
479
  hideClose?: boolean;
@@ -34,6 +34,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
34
34
  style?: import("vue").StyleValue;
35
35
  results?: (string | number) | undefined;
36
36
  placeholder?: string | undefined | undefined;
37
+ dir?: string | undefined | undefined;
37
38
  class?: import("vue").ClassValue;
38
39
  role?: string | undefined | undefined;
39
40
  'aria-label'?: string | undefined | undefined;
@@ -189,7 +190,6 @@ declare const __VLS_base: import("vue").DefineComponent<{
189
190
  accesskey?: string | undefined | undefined;
190
191
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
191
192
  contextmenu?: string | undefined | undefined;
192
- dir?: string | undefined | undefined;
193
193
  draggable?: (boolean | "true" | "false") | undefined;
194
194
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
195
195
  enterKeyHint?: "search" | "done" | "previous" | "next" | "enter" | "go" | "send" | undefined;
@@ -246,6 +246,7 @@ declare const __VLS_base: import("vue").DefineComponent<{
246
246
  style?: import("vue").StyleValue;
247
247
  results?: (string | number) | undefined;
248
248
  placeholder?: string | undefined | undefined;
249
+ dir?: string | undefined | undefined;
249
250
  class?: import("vue").ClassValue;
250
251
  role?: string | undefined | undefined;
251
252
  'aria-label'?: string | undefined | undefined;
@@ -401,7 +402,6 @@ declare const __VLS_base: import("vue").DefineComponent<{
401
402
  accesskey?: string | undefined | undefined;
402
403
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
403
404
  contextmenu?: string | undefined | undefined;
404
- dir?: string | undefined | undefined;
405
405
  draggable?: (boolean | "true" | "false") | undefined;
406
406
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
407
407
  enterKeyHint?: "search" | "done" | "previous" | "next" | "enter" | "go" | "send" | undefined;
@@ -24,10 +24,12 @@ declare const __VLS_base: import("vue").DefineComponent<{
24
24
  key?: PropertyKey | undefined;
25
25
  prefix?: string | undefined;
26
26
  selected?: boolean;
27
+ label?: string;
27
28
  style?: import("vue").StyleValue;
28
29
  results?: (string | number) | undefined;
29
30
  placeholder?: string | undefined;
30
31
  bind?: Record<string, unknown>;
32
+ dir?: string | undefined;
31
33
  class?: import("vue").ClassValue;
32
34
  role?: string | undefined;
33
35
  'aria-label'?: string | undefined;
@@ -188,7 +190,6 @@ declare const __VLS_base: import("vue").DefineComponent<{
188
190
  accesskey?: string | undefined;
189
191
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
190
192
  contextmenu?: string | undefined;
191
- dir?: string | undefined;
192
193
  draggable?: (boolean | "true" | "false") | undefined;
193
194
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined;
194
195
  enterKeyHint?: import("vue").HTMLAttributes["enterkeyhint"];
@@ -251,10 +252,12 @@ declare const __VLS_base: import("vue").DefineComponent<{
251
252
  key?: PropertyKey | undefined;
252
253
  prefix?: string | undefined;
253
254
  selected?: boolean;
255
+ label?: string;
254
256
  style?: import("vue").StyleValue;
255
257
  results?: (string | number) | undefined;
256
258
  placeholder?: string | undefined;
257
259
  bind?: Record<string, unknown>;
260
+ dir?: string | undefined;
258
261
  class?: import("vue").ClassValue;
259
262
  role?: string | undefined;
260
263
  'aria-label'?: string | undefined;
@@ -415,7 +418,6 @@ declare const __VLS_base: import("vue").DefineComponent<{
415
418
  accesskey?: string | undefined;
416
419
  contenteditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
417
420
  contextmenu?: string | undefined;
418
- dir?: string | undefined;
419
421
  draggable?: (boolean | "true" | "false") | undefined;
420
422
  enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined;
421
423
  enterKeyHint?: import("vue").HTMLAttributes["enterkeyhint"];
@@ -30,6 +30,10 @@ export interface SettingsModalSection {
30
30
  badge?: string | number;
31
31
  disabled?: boolean;
32
32
  }
33
+ export interface SettingsSectionSlotProps {
34
+ section: SettingsModalSection;
35
+ close: () => void;
36
+ }
33
37
  export interface SettingsModalAccount {
34
38
  name: string;
35
39
  email?: string;
@@ -1,22 +1,17 @@
1
1
  import { useLocale } from "./useLocale.mjs";
2
- import { confirmQueue, hasConfirmHost, nextConfirmId } from "../internal/overlays/confirm.mjs";
2
+ import { isClient } from "../internal/core/env.mjs";
3
+ import { enqueueDialog, hasConfirmHost, nativeDialogMessage } from "../internal/overlays/confirm.mjs";
3
4
  export function useAlert() {
4
5
  const { t } = useLocale();
5
6
  return function alert(input = {}) {
6
7
  const options = typeof input === "string" ? { description: input } : input;
7
- if (typeof window === "undefined") return Promise.resolve();
8
+ if (!isClient()) return Promise.resolve();
8
9
  if (!hasConfirmHost()) {
9
- window.alert([options.title, options.description].filter(Boolean).join("\n\n"));
10
+ window.alert(nativeDialogMessage(options));
10
11
  return Promise.resolve();
11
12
  }
12
13
  return new Promise((resolve) => {
13
- confirmQueue.push({
14
- title: t("alert.title"),
15
- ...options,
16
- kind: "alert",
17
- id: nextConfirmId(),
18
- resolve
19
- });
14
+ enqueueDialog({ title: t("alert.title"), ...options, kind: "alert", resolve });
20
15
  });
21
16
  };
22
17
  }