@quidgest/ui 0.20.1 → 0.21.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +10 -0
  3. package/dist/json/api.json +219 -3
  4. package/dist/manifest/components.json +1 -0
  5. package/dist/ui.css +239 -248
  6. package/dist/ui.esm.js +1306 -1139
  7. package/dist/ui.js +788 -621
  8. package/dist/ui.min.css +1 -1
  9. package/dist/ui.min.js +788 -621
  10. package/dist/ui.scss +291 -34
  11. package/esm/components/QAccordion/QAccordionItem.vue.js +1 -1
  12. package/esm/components/QBadge/QBadge.d.ts.map +1 -1
  13. package/esm/components/QBadge/QBadge.vue.js +20 -24
  14. package/esm/components/QButton/QButton.d.ts.map +1 -1
  15. package/esm/components/QButton/QButton.vue.js +32 -29
  16. package/esm/components/QCheckbox/QCheckbox.vue.js +1 -1
  17. package/esm/components/QDialog/QDialog.d.ts +4 -2
  18. package/esm/components/QDialog/QDialog.d.ts.map +1 -1
  19. package/esm/components/QDialog/QDialog.vue.js +84 -74
  20. package/esm/components/QDialog/QDialogProvider.d.ts.map +1 -1
  21. package/esm/components/QDialog/QDialogProvider.vue.js +21 -12
  22. package/esm/components/QDialog/index.d.ts +72 -3
  23. package/esm/components/QDialog/index.d.ts.map +1 -1
  24. package/esm/components/QDialog/types.d.ts +10 -1
  25. package/esm/components/QDialog/types.d.ts.map +1 -1
  26. package/esm/components/QDismissibleLayer/QDismissibleLayer.d.ts.map +1 -1
  27. package/esm/components/QDismissibleLayer/QDismissibleLayer.vue.js +9 -8
  28. package/esm/components/QDivider/QDivider.d.ts.map +1 -1
  29. package/esm/components/QDivider/QDivider.vue.js +3 -3
  30. package/esm/components/QFileUpload/QFileUpload.vue.js +1 -1
  31. package/esm/components/QGauge/QGauge.vue.js +1 -1
  32. package/esm/components/QList/QListItem.d.ts.map +1 -1
  33. package/esm/components/QList/QListItem.vue.js +5 -2
  34. package/esm/components/QList/QListItemGroup.vue.js +1 -1
  35. package/esm/components/QObfuscation/QObfuscation.d.ts +1 -1
  36. package/esm/components/QObfuscation/QObfuscation.d.ts.map +1 -1
  37. package/esm/components/QObfuscation/QObfuscation.vue.js +53 -56
  38. package/esm/components/QObfuscation/index.d.ts +6 -6
  39. package/esm/components/QObfuscation/types.d.ts +1 -1
  40. package/esm/components/QObfuscation/types.d.ts.map +1 -1
  41. package/esm/components/QOverflow/QOverflow.d.ts +43 -0
  42. package/esm/components/QOverflow/QOverflow.d.ts.map +1 -0
  43. package/esm/components/QOverflow/QOverflow.vue.js +281 -0
  44. package/esm/components/QOverflow/QOverflow2.vue.js +5 -0
  45. package/esm/components/QOverflow/constants.d.ts +30 -0
  46. package/esm/components/QOverflow/constants.d.ts.map +1 -0
  47. package/esm/components/QOverflow/constants.js +12 -0
  48. package/esm/components/QOverflow/index.d.ts +58 -0
  49. package/esm/components/QOverflow/index.d.ts.map +1 -0
  50. package/esm/components/QOverflow/index.js +6 -0
  51. package/esm/components/QOverflow/types.d.ts +119 -0
  52. package/esm/components/QOverflow/types.d.ts.map +1 -0
  53. package/esm/components/QPhoneField/QPhoneField.d.ts.map +1 -1
  54. package/esm/components/QPhoneField/QPhoneField.vue.js +1 -1
  55. package/esm/components/QPropertyList/QPropertyListGroup.vue.js +1 -1
  56. package/esm/components/QPropertyList/QPropertyListRow.vue.js +1 -1
  57. package/esm/components/QPropertyList/index.d.ts.map +1 -1
  58. package/esm/components/QRadioGroup/QRadioButton.vue.js +1 -1
  59. package/esm/components/QRadioGroup/QRadioGroup.vue.js +2 -2
  60. package/esm/components/QSelect/QSelect.d.ts.map +1 -1
  61. package/esm/components/QSelect/QSelect.vue.js +1 -1
  62. package/esm/components/QSidebar/QSidebar.d.ts.map +1 -1
  63. package/esm/components/QSidebar/QSidebar.vue.js +19 -10
  64. package/esm/components/QSidebar/QSidebarItem.d.ts.map +1 -1
  65. package/esm/components/QSidebar/QSidebarItem.vue.js +51 -49
  66. package/esm/components/QSidebar/context.d.ts +7 -0
  67. package/esm/components/QSidebar/context.d.ts.map +1 -1
  68. package/esm/components/QSwitch/QSwitch.vue.js +1 -1
  69. package/esm/components/QTabs/QTab.d.ts.map +1 -1
  70. package/esm/components/QTabs/QTab.vue.js +52 -50
  71. package/esm/components/QTabs/QTabs.d.ts.map +1 -1
  72. package/esm/components/QTabs/QTabs.vue.js +37 -12
  73. package/esm/components/QTabs/context.d.ts +7 -0
  74. package/esm/components/QTabs/context.d.ts.map +1 -1
  75. package/esm/components/QTextArea/QTextArea.vue.js +1 -1
  76. package/esm/components/QTextField/QTextField.d.ts.map +1 -1
  77. package/esm/components/QTextField/QTextField.vue.js +1 -1
  78. package/esm/components/QThemeProvider/QThemeProvider.vue.js +1 -1
  79. package/esm/components/QToast/QToast.d.ts +4 -2
  80. package/esm/components/QToast/QToast.d.ts.map +1 -1
  81. package/esm/components/QToast/QToast.vue.js +80 -67
  82. package/esm/components/QToast/QToaster.d.ts.map +1 -1
  83. package/esm/components/QToast/QToaster.vue.js +21 -16
  84. package/esm/components/QToast/index.d.ts +39 -3
  85. package/esm/components/QToast/index.d.ts.map +1 -1
  86. package/esm/components/QToast/types.d.ts +6 -2
  87. package/esm/components/QToast/types.d.ts.map +1 -1
  88. package/esm/components/QToggleGroup/QToggleGroupItem.vue.js +1 -1
  89. package/esm/components/QTooltip/QTooltip.vue.js +1 -1
  90. package/esm/components/index.d.ts +1 -0
  91. package/esm/components/index.d.ts.map +1 -1
  92. package/esm/components/index.js +58 -56
  93. package/esm/composables/index.d.ts +2 -2
  94. package/esm/composables/index.d.ts.map +1 -1
  95. package/esm/composables/useColor/index.d.ts +46 -17
  96. package/esm/composables/useColor/index.d.ts.map +1 -1
  97. package/esm/composables/useColor/index.js +57 -29
  98. package/esm/composables/useColor/types.d.ts +4 -1
  99. package/esm/composables/useColor/types.d.ts.map +1 -1
  100. package/esm/composables/useDialog/_internal.d.ts +2 -0
  101. package/esm/composables/useDialog/_internal.d.ts.map +1 -0
  102. package/esm/composables/useDialog/_internal.js +65 -0
  103. package/esm/composables/useDialog/index.d.ts +11 -3
  104. package/esm/composables/useDialog/index.d.ts.map +1 -1
  105. package/esm/composables/useDialog/index.js +38 -22
  106. package/esm/composables/useDialog/types.d.ts +25 -11
  107. package/esm/composables/useDialog/types.d.ts.map +1 -1
  108. package/esm/composables/useDismissibleLayerStack/index.d.ts +17 -2
  109. package/esm/composables/useDismissibleLayerStack/index.d.ts.map +1 -1
  110. package/esm/composables/useDismissibleLayerStack/index.js +28 -11
  111. package/esm/composables/useGroup/index.d.ts.map +1 -1
  112. package/esm/composables/useGroup/index.js +12 -1
  113. package/esm/composables/useId/index.d.ts +18 -0
  114. package/esm/composables/useId/index.d.ts.map +1 -0
  115. package/esm/composables/useId/index.js +10 -0
  116. package/esm/composables/useToast/_internal.d.ts +2 -0
  117. package/esm/composables/useToast/_internal.d.ts.map +1 -0
  118. package/esm/composables/useToast/_internal.js +142 -0
  119. package/esm/composables/useToast/index.d.ts +8 -25
  120. package/esm/composables/useToast/index.d.ts.map +1 -1
  121. package/esm/composables/useToast/index.js +29 -26
  122. package/esm/composables/useToast/types.d.ts +31 -17
  123. package/esm/composables/useToast/types.d.ts.map +1 -1
  124. package/esm/framework.d.ts.map +1 -1
  125. package/esm/framework.js +16 -12
  126. package/esm/index.d.ts +1 -0
  127. package/esm/templates/theme.js +39 -39
  128. package/esm/utils/color/contrast.d.ts +11 -4
  129. package/esm/utils/color/contrast.d.ts.map +1 -1
  130. package/esm/utils/color/contrast.js +16 -3
  131. package/esm/utils/color/index.d.ts +1 -0
  132. package/esm/utils/color/index.d.ts.map +1 -1
  133. package/esm/utils/color/merge.d.ts +9 -0
  134. package/esm/utils/color/merge.d.ts.map +1 -1
  135. package/esm/utils/color/merge.js +21 -22
  136. package/esm/utils/color/parse.d.ts +21 -5
  137. package/esm/utils/color/parse.d.ts.map +1 -1
  138. package/esm/utils/color/parse.js +88 -20
  139. package/esm/utils/color/theme-colors.d.ts +35 -0
  140. package/esm/utils/color/theme-colors.d.ts.map +1 -0
  141. package/esm/utils/color/theme-colors.js +25 -0
  142. package/esm/utils/index.js +50 -42
  143. package/package.json +3 -5
  144. package/esm/composables/uid.d.ts +0 -9
  145. package/esm/composables/uid.d.ts.map +0 -1
  146. package/esm/composables/uid.js +0 -8
  147. package/esm/composables/useToast/types.js +0 -4
  148. package/esm/vendors/uuid/dist/native.js +0 -3
  149. package/esm/vendors/uuid/dist/rng.js +0 -11
  150. package/esm/vendors/uuid/dist/stringify.js +0 -8
  151. package/esm/vendors/uuid/dist/v4.js +0 -20
package/CHANGELOG.md CHANGED
@@ -9,6 +9,34 @@ On `0.x`, breaking changes typically ship as a **minor** bump. The `/release` wo
9
9
 
10
10
  Entries below start at **0.16.0**. Earlier history is in git / GitLab MRs. Patch releases within a minor line may be summarized under that minor unless a break shipped in between.
11
11
 
12
+ ## [0.21.1] - 2026-09-11
13
+
14
+ ### Added
15
+
16
+ - `QOverflow` — overflow scroll container
17
+
18
+ ### Fixed
19
+
20
+ - `QObfuscation` — drop partial texts merge
21
+ - `QButton` — tighten padding for append icons
22
+
23
+ ## [0.21.0] - 2026-09-10
24
+
25
+ ### Changed
26
+
27
+ - **Breaking:** `useId` — no longer returns a UUID-based `Ref` (`uid-…`); wraps Vue `useId` as a `ComputedRef` with `q-…` ids (custom `app.config.idPrefix` becomes `q-<prefix>-…`) and must run during setup. Drop any reliance on the removed `uuid` dependency from `@quidgest/ui`.
28
+ - **Breaking:** `useDialog` / `useToast` — require `createFramework` plus a mounted `QDialogProvider` / `QToaster`. `addDialog` / `addToast` no longer take a separate `id` argument and return `Promise<string>`; prefer `await addDialog(props)` / `await addToast(props)`, pass overrides via `props.id`, and use `cancelDialog` / `cancelToast` before registration. `removeDialog` / `removeToast` throw if the id is missing; do not mutate the public `dialogs` / `toasts` lists to update the store.
29
+ - **Breaking:** Package exports — the `./*` catch-all export was removed; import only via documented entry points.
30
+ - **Breaking:** Color utilities — public `isCssColor` removed; use `isThemeColor` for utility/BEM classification, or `tryParseColor` / `parseColor` to test parseability. Unsupported / unparsed CSS colors no longer silently fall back to primary-like CSS vars (expect `undefined` style and a non-production warning). Contrasting/`on*` text for custom colors may change where WCAG luminance disagrees with the old HSL-lightness heuristic.
31
+ - **Breaking:** `QButton` / `QBadge` / `QToast` — utility color BEM modifiers (`q-button--primary`, `q-badge--…`, `q-toast--…`, etc.) are no longer emitted; style via bound `--q-*-main-color` / hover CSS variables (`.q-button--background` remains for that special case). Do not target those color modifier classes in consumer CSS.
32
+ - Theme / `useColor` — Light/Dark schemes and default `on*` tokens aligned with WCAG; pure `on*` surface tokens; utility colors always bind style (including Dark-scheme hover).
33
+
34
+ ### Fixed
35
+
36
+ - `QInputGroup` — restore radius for solo addons; equalize sibling control heights
37
+ - `QIcon` — size uncropped SVGs correctly in controls
38
+ - Storybook — set per-story Vue `idPrefix` to avoid id collisions across stories
39
+
12
40
  ## [0.20.1] - 2026-09-04
13
41
 
14
42
  ### Added
package/README.md CHANGED
@@ -42,6 +42,16 @@ import framework from './plugins/quidgest-ui'
42
42
  createApp(App).use(framework).mount('#app')
43
43
  ```
44
44
 
45
+ Mount **one** `QDialogProvider` and **one** `QToaster` in the app root (for example `App.vue`). `useDialog` / `useToast` share a single list per app; mounting a second provider or toaster for the same app throws.
46
+
47
+ ```vue
48
+ <template>
49
+ <q-dialog-provider />
50
+ <q-toaster />
51
+ <router-view />
52
+ </template>
53
+ ```
54
+
45
55
  Once installed, components can be used like so:
46
56
 
47
57
  ```vue
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.20.1",
2
+ "version": "0.21.1",
3
3
  "components": [
4
4
  {
5
5
  "name": "QAccordion",
@@ -712,6 +712,11 @@
712
712
  "description": "Displays an icon alongside the button label.",
713
713
  "code": "<div style=\"display: flex; align-items: center; gap: 0.25rem; flex-direction: column; width: fit-content\">\n\t\t\t <div style=\"display: flex; gap: 0.25rem\">\n\t\t\t \t<q-button icon-pos=\"start\">\n\t\t\t <q-icon icon=\"check-circle\" />\n\t\t\t </q-button>\n\t\t\t <q-button v-bind=\"args\" icon-pos=\"start\">\n\t\t\t <q-icon icon=\"check-circle\" />\n\t\t\t </q-button>\n\t\t\t <q-button v-bind=\"args\" icon-pos=\"end\">\n\t\t\t <q-icon icon=\"check-circle\" />\n\t\t\t </q-button>\n\t\t\t </div>\n\t\t\t <div style=\"display: flex; gap: 0.25rem\">\n\t\t\t <q-button v-bind=\"args\" icon-pos=\"top\">\n\t\t\t <q-icon icon=\"check-circle\" />\n\t\t\t </q-button>\n\t\t\t <q-button v-bind=\"args\" icon-pos=\"bottom\">\n\t\t\t <q-icon icon=\"check-circle\" />\n\t\t\t </q-button>\n\t\t\t </div>\n\t\t\t</div>"
714
714
  },
715
+ {
716
+ "title": "Append",
717
+ "description": "Trailing content via the `append` slot — for example a chevron beside a leading icon. Labeled buttons tighten end padding when `#append` contains a `.q-icon`.",
718
+ "code": "<div style=\"display: flex; align-items: center; gap: 0.25rem; flex-wrap: wrap\">\n\t\t\t\t<q-button v-bind=\"args\">\n\t\t\t\t\t<template #append>\n\t\t\t\t\t\t<q-icon icon=\"expand\" />\n\t\t\t\t\t</template>\n\t\t\t\t</q-button>\n\t\t\t\t<q-button v-bind=\"args\">\n\t\t\t\t\t<q-icon icon=\"more-items\" />\n\t\t\t\t\t<template #append>\n\t\t\t\t\t\t<q-icon icon=\"expand\" />\n\t\t\t\t\t</template>\n\t\t\t\t</q-button>\n\t\t\t\t<q-button>\n\t\t\t\t\t<q-icon icon=\"more-items\" />\n\t\t\t\t\t<template #append>\n\t\t\t\t\t\t<q-icon icon=\"expand\" />\n\t\t\t\t\t</template>\n\t\t\t\t</q-button>\n\t\t\t</div>"
719
+ },
715
720
  {
716
721
  "title": "Loading",
717
722
  "description": "Displays a loading animation and cannot be clicked.",
@@ -2871,6 +2876,16 @@
2871
2876
  "default": "DEFAULT_ICONS",
2872
2877
  "required": false,
2873
2878
  "category": "Configuration"
2879
+ },
2880
+ {
2881
+ "name": "entryKey",
2882
+ "type": {
2883
+ "kind": "primitive",
2884
+ "name": "string"
2885
+ },
2886
+ "description": "",
2887
+ "default": "undefined",
2888
+ "required": false
2874
2889
  }
2875
2890
  ],
2876
2891
  "events": [
@@ -4397,6 +4412,16 @@
4397
4412
  "description": "Groups buttons with fields.",
4398
4413
  "code": "<q-input-group v-bind=\"args\">\n\t\t\t\t<q-text-field placeholder=\"Search\" />\n\t\t\t\t<template #append>\n\t\t\t\t\t<q-button>\n\t\t\t\t\t\t<q-icon icon=\"magnify\" />\n\t\t\t\t\t</q-button>\n\t\t\t\t</template>\n\t\t\t</q-input-group>"
4399
4414
  },
4415
+ {
4416
+ "title": "Append Only",
4417
+ "description": "Append-only group — all four corners of the control should be rounded.",
4418
+ "code": "<q-input-group v-bind=\"args\">\n\t\t\t\t<template #append>\n\t\t\t\t\t<q-button>\n\t\t\t\t\t\t<q-icon icon=\"cog\" />\n\t\t\t\t\t</q-button>\n\t\t\t\t</template>\n\t\t\t</q-input-group>"
4419
+ },
4420
+ {
4421
+ "title": "Prepend Only",
4422
+ "description": "Prepend-only group — all four corners of the control should be rounded.",
4423
+ "code": "<q-input-group v-bind=\"args\">\n\t\t\t\t<template #prepend>\n\t\t\t\t\t<q-button>\n\t\t\t\t\t\t<q-icon icon=\"cog\" />\n\t\t\t\t\t</q-button>\n\t\t\t\t</template>\n\t\t\t</q-input-group>"
4424
+ },
4400
4425
  {
4401
4426
  "title": "Button Group Addon",
4402
4427
  "description": "Further extends button addons with multiple buttons.",
@@ -4407,6 +4432,11 @@
4407
4432
  "description": "Provides a textual description for the group.",
4408
4433
  "code": "<QInputGroup :label=\"Full name\" :required=\"true\" />"
4409
4434
  },
4435
+ {
4436
+ "title": "Mixed Heights",
4437
+ "description": "Keeps sibling controls aligned when one child has a larger intrinsic height.",
4438
+ "code": "<q-input-group v-bind=\"args\">\n\t\t\t\t<q-text-field placeholder=\"Name\" />\n\t\t\t\t<q-text-area placeholder=\"Notes\" :rows=\"3\" />\n\t\t\t</q-input-group>"
4439
+ },
4410
4440
  {
4411
4441
  "title": "Advanced Usage",
4412
4442
  "description": "Supports the creation of custom input groups using selects, text fields, buttons, and more.",
@@ -5091,8 +5121,8 @@
5091
5121
  {
5092
5122
  "name": "texts",
5093
5123
  "type": {
5094
- "kind": "unknown",
5095
- "raw": "Partial<{ restricted: string; showData: string; hideData: string; }> | undefined"
5124
+ "kind": "object",
5125
+ "fields": {}
5096
5126
  },
5097
5127
  "description": "Custom text configurations.",
5098
5128
  "default": "DEFAULT_TEXTS",
@@ -5227,6 +5257,182 @@
5227
5257
  }
5228
5258
  ]
5229
5259
  },
5260
+ {
5261
+ "name": "QOverflow",
5262
+ "description": "Layout container that shows navigation arrows when content overflows. The content track is a plain block — strip layouts are owned by slotted markup. `scrollMode=\"item\"` needs flat direct children (see Scroll Item); wrapped-strip stories disable the `scrollMode` control so Autodocs cannot switch them to `item`. `remapWheel` defaults to `false` (matches the component). Horizontal demos that benefit from trackpad UX set `remapWheel: true` on the story.",
5263
+ "meta": {
5264
+ "props": [
5265
+ {
5266
+ "name": "id",
5267
+ "type": {
5268
+ "kind": "primitive",
5269
+ "name": "string"
5270
+ },
5271
+ "description": "The component unique identifier.",
5272
+ "required": false,
5273
+ "category": "Identification"
5274
+ },
5275
+ {
5276
+ "name": "direction",
5277
+ "type": {
5278
+ "kind": "enum",
5279
+ "values": [
5280
+ "horizontal",
5281
+ "vertical"
5282
+ ]
5283
+ },
5284
+ "description": "Scroll axis of the overflow viewport.\n\nUses physical horizontal/vertical scrolling (`scrollLeft` / `scrollTop`). RTL and\nlogical start/end navigation are out of scope for v1.\n\n`vertical` sets `height: 100%` on the root — the host (or an ancestor) must have a\ndefinite height, or the track grows with content and overflow never appears.",
5285
+ "default": "horizontal",
5286
+ "required": false,
5287
+ "category": "Presentation"
5288
+ },
5289
+ {
5290
+ "name": "arrowPlacement",
5291
+ "type": {
5292
+ "kind": "enum",
5293
+ "values": [
5294
+ "outside",
5295
+ "inside"
5296
+ ]
5297
+ },
5298
+ "description": "Whether arrows sit beside the track (`outside`) or overlay its edges (`inside`).",
5299
+ "default": "outside",
5300
+ "required": false,
5301
+ "category": "Presentation"
5302
+ },
5303
+ {
5304
+ "name": "arrowVisibility",
5305
+ "type": {
5306
+ "kind": "enum",
5307
+ "values": [
5308
+ "hover",
5309
+ "always"
5310
+ ]
5311
+ },
5312
+ "description": "Whether arrows stay visible while overflowing, or only appear on hover / focus-within.\n\n`hover` is gated with `@media (hover: hover) and (pointer: fine)` so coarse-pointer\nand touch devices keep arrows visible (panning alone would otherwise leave them hidden).",
5313
+ "default": "always",
5314
+ "required": false,
5315
+ "category": "Presentation"
5316
+ },
5317
+ {
5318
+ "name": "scrollMode",
5319
+ "type": {
5320
+ "kind": "enum",
5321
+ "values": [
5322
+ "item",
5323
+ "page",
5324
+ "step"
5325
+ ]
5326
+ },
5327
+ "description": "How far each navigation action advances the scroll position.\n\nFor `item`, targets are direct `HTMLElement` children of the content track only\n(see {@link QOverflowScrollMode}).",
5328
+ "default": "page",
5329
+ "required": false,
5330
+ "category": "Behavior"
5331
+ },
5332
+ {
5333
+ "name": "scrollStep",
5334
+ "type": {
5335
+ "kind": "primitive",
5336
+ "name": "number"
5337
+ },
5338
+ "description": "Pixel distance used when `scrollMode` is `step`.",
5339
+ "default": "200",
5340
+ "required": false,
5341
+ "category": "Behavior"
5342
+ },
5343
+ {
5344
+ "name": "remapWheel",
5345
+ "type": {
5346
+ "kind": "primitive",
5347
+ "name": "boolean"
5348
+ },
5349
+ "description": "When `true` and `direction` is `horizontal`, dominant vertical wheel / trackpad\ndeltas are mapped onto `scrollLeft` (and may `preventDefault` page scroll while\nthe strip can still move). Default `false` so long-page hosts (e.g. future tabs)\nare not surprised; enable for standalone strips that want trackpad UX.",
5350
+ "default": "false",
5351
+ "required": false,
5352
+ "category": "Behavior"
5353
+ },
5354
+ {
5355
+ "name": "icons",
5356
+ "type": {
5357
+ "kind": "object",
5358
+ "fields": {}
5359
+ },
5360
+ "description": "Custom icon configurations for navigation controls.\n\nIcons are chosen from physical `direction` (left/right or up/down), not document\n`dir` / writing mode. Logical start/end and RTL-aware chevrons are a follow-up.",
5361
+ "default": "DEFAULT_ICONS",
5362
+ "required": false,
5363
+ "category": "Configuration"
5364
+ },
5365
+ {
5366
+ "name": "texts",
5367
+ "type": {
5368
+ "kind": "object",
5369
+ "fields": {}
5370
+ },
5371
+ "description": "Custom accessible strings for navigation controls.\n\nOptional `regionLabel` opts into a named landmark (`role=\"region\"` + `aria-label`).\nOmit it (the default) for a plain root — avoids N generic landmarks and an invalid\nunnamed `region`.",
5372
+ "default": "DEFAULT_TEXTS",
5373
+ "required": false,
5374
+ "category": "Configuration"
5375
+ }
5376
+ ],
5377
+ "events": [],
5378
+ "slots": [
5379
+ {
5380
+ "name": "prev",
5381
+ "description": ""
5382
+ },
5383
+ {
5384
+ "name": "default",
5385
+ "description": ""
5386
+ },
5387
+ {
5388
+ "name": "next",
5389
+ "description": ""
5390
+ }
5391
+ ]
5392
+ },
5393
+ "examples": [
5394
+ {
5395
+ "title": "Default",
5396
+ "description": "Horizontal overflow with arrows outside the content track.",
5397
+ "code": "<div :style=\"horizontalHostStyle\">\n\t\t\t\t<q-overflow v-bind=\"args\">\n\t\t\t\t\t<div :style=\"horizontalStripStyle\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-for=\"item in demoItems\"\n\t\t\t\t\t\t\t:key=\"item\"\n\t\t\t\t\t\t\t:style=\"horizontalItemStyle\">\n\t\t\t\t\t\t\t{{ item }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</q-overflow>\n\t\t\t</div>"
5398
+ },
5399
+ {
5400
+ "title": "Vertical",
5401
+ "description": "Vertical overflow with arrows beside the track. The host must be height-bounded — `direction=\"vertical\"` sets `height: 100%` on the root.",
5402
+ "code": "<div :style=\"verticalHostStyle\">\n\t\t\t\t<q-overflow v-bind=\"args\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tv-for=\"item in demoItems\"\n\t\t\t\t\t\t:key=\"item\"\n\t\t\t\t\t\t:style=\"verticalItemStyle\">\n\t\t\t\t\t\t{{ item }}\n\t\t\t\t\t</div>\n\t\t\t\t</q-overflow>\n\t\t\t</div>"
5403
+ },
5404
+ {
5405
+ "title": "Arrows Inside",
5406
+ "description": "Arrows overlay the content edges with an edge fade behind them.",
5407
+ "code": "<div :style=\"horizontalHostStyle\">\n\t\t\t\t<q-overflow v-bind=\"args\">\n\t\t\t\t\t<div :style=\"horizontalStripStyle\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-for=\"item in demoItems\"\n\t\t\t\t\t\t\t:key=\"item\"\n\t\t\t\t\t\t\t:style=\"horizontalItemStyle\">\n\t\t\t\t\t\t\t{{ item }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</q-overflow>\n\t\t\t</div>"
5408
+ },
5409
+ {
5410
+ "title": "Arrows On Hover",
5411
+ "description": "Navigation arrows appear only while the overflow is hovered or focused.",
5412
+ "code": "<div :style=\"horizontalHostStyle\">\n\t\t\t\t<q-overflow v-bind=\"args\">\n\t\t\t\t\t<div :style=\"horizontalStripStyle\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-for=\"item in demoItems\"\n\t\t\t\t\t\t\t:key=\"item\"\n\t\t\t\t\t\t\t:style=\"horizontalItemStyle\">\n\t\t\t\t\t\t\t{{ item }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</q-overflow>\n\t\t\t</div>"
5413
+ },
5414
+ {
5415
+ "title": "Scroll Step",
5416
+ "description": "Each navigation action advances by a fixed pixel step.",
5417
+ "code": "<div :style=\"horizontalHostStyle\">\n\t\t\t\t<q-overflow v-bind=\"args\">\n\t\t\t\t\t<div :style=\"horizontalStripStyle\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-for=\"item in demoItems\"\n\t\t\t\t\t\t\t:key=\"item\"\n\t\t\t\t\t\t\t:style=\"horizontalItemStyle\">\n\t\t\t\t\t\t\t{{ item }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</q-overflow>\n\t\t\t</div>"
5418
+ },
5419
+ {
5420
+ "title": "Scroll Item",
5421
+ "description": "Each navigation action centers the next or previous direct child in the viewport. Item mode expects flat `HTMLElement` children in the default slot (no nested wrappers). Horizontal strip layout uses inline-level items + nowrap on the host.",
5422
+ "code": "<div :style=\"horizontalStripHostStyle\">\n\t\t\t\t<q-overflow v-bind=\"args\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tv-for=\"item in demoItems\"\n\t\t\t\t\t\t:key=\"item\"\n\t\t\t\t\t\t:style=\"horizontalItemStyle\">\n\t\t\t\t\t\t{{ item }}\n\t\t\t\t\t</div>\n\t\t\t\t</q-overflow>\n\t\t\t</div>"
5423
+ },
5424
+ {
5425
+ "title": "Custom Arrows",
5426
+ "description": "Custom previous and next controls via slots.",
5427
+ "code": "<div :style=\"horizontalHostStyle\">\n\t\t\t\t<q-overflow v-bind=\"args\">\n\t\t\t\t\t<template #prev=\"{ disabled, onClick }\">\n\t\t\t\t\t\t<q-button\n\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\tlabel=\"Back\"\n\t\t\t\t\t\t\t:disabled=\"disabled\"\n\t\t\t\t\t\t\t@click=\"onClick\" />\n\t\t\t\t\t</template>\n\n\t\t\t\t\t<div :style=\"horizontalStripStyle\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-for=\"item in demoItems\"\n\t\t\t\t\t\t\t:key=\"item\"\n\t\t\t\t\t\t\t:style=\"horizontalItemStyle\">\n\t\t\t\t\t\t\t{{ item }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<template #next=\"{ disabled, onClick }\">\n\t\t\t\t\t\t<q-button\n\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\tlabel=\"Next\"\n\t\t\t\t\t\t\t:disabled=\"disabled\"\n\t\t\t\t\t\t\t@click=\"onClick\" />\n\t\t\t\t\t</template>\n\t\t\t\t</q-overflow>\n\t\t\t</div>"
5428
+ },
5429
+ {
5430
+ "title": "Without Overflow",
5431
+ "description": "When content fits the viewport, navigation arrows are omitted.",
5432
+ "code": "<div :style=\"horizontalHostStyle\">\n\t\t\t\t<q-overflow v-bind=\"args\">\n\t\t\t\t\t<div :style=\"horizontalStripStyle\">\n\t\t\t\t\t\t<div :style=\"horizontalItemStyle\">Fits</div>\n\t\t\t\t\t\t<div :style=\"horizontalItemStyle\">Here</div>\n\t\t\t\t\t</div>\n\t\t\t\t</q-overflow>\n\t\t\t</div>"
5433
+ }
5434
+ ]
5435
+ },
5230
5436
  {
5231
5437
  "name": "QOverlay",
5232
5438
  "description": "A generic overlay for creating floating elements.",
@@ -9485,6 +9691,16 @@
9485
9691
  "default": "DEFAULT_ICONS",
9486
9692
  "required": false,
9487
9693
  "category": "Configuration"
9694
+ },
9695
+ {
9696
+ "name": "entryKey",
9697
+ "type": {
9698
+ "kind": "primitive",
9699
+ "name": "string"
9700
+ },
9701
+ "description": "",
9702
+ "default": "undefined",
9703
+ "required": false
9488
9704
  }
9489
9705
  ],
9490
9706
  "events": [
@@ -40,6 +40,7 @@
40
40
  "QListItemGroup",
41
41
  "QMeter",
42
42
  "QObfuscation",
43
+ "QOverflow",
43
44
  "QOverlay",
44
45
  "QPasswordField",
45
46
  "QPhoneField",