@vuetify/v0 0.1.5 → 0.1.6

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 (86) hide show
  1. package/dist/{adapter-Cmeg49W9.mjs → adapter-Bjs_Nx_J.mjs} +8 -10
  2. package/dist/{adapter-D2JoR-4d.d.mts → adapter-CLs-OrSN.d.mts} +4 -4
  3. package/dist/browser/index.js +1645 -273
  4. package/dist/components/index.d.mts +8 -8
  5. package/dist/components/index.mjs +28 -28
  6. package/dist/{components-BbbGkTcN.mjs → components-GiQh_RfQ.mjs} +1101 -110
  7. package/dist/composables/index.d.mts +7 -7
  8. package/dist/composables/index.mjs +27 -27
  9. package/dist/constants/index.mjs +1 -1
  10. package/dist/{createDataTable-cNf6DdHz.mjs → createDataTable-lSofI5rU.mjs} +5 -5
  11. package/dist/{createGroup-BrZPZudL.mjs → createGroup-CCb7Zfyw.mjs} +6 -5
  12. package/dist/{createPagination-Wc_vRGNQ.mjs → createPagination-lagznd8i.mjs} +2 -2
  13. package/dist/{createSelection-BURpoE3p.mjs → createSelection-Zo4RQpYe.mjs} +217 -61
  14. package/dist/{createSingle-BE1vHaZy.mjs → createSingle-BH9wNDrS.mjs} +2 -2
  15. package/dist/{createTokens-jwf8-iGn.mjs → createTokens-Cu1efg9Z.mjs} +21 -3
  16. package/dist/{createTrinity-DkwPrPRS.mjs → createTrinity-Cii8-B2r.mjs} +1 -1
  17. package/dist/data-table/adapters/client/index.d.mts +2 -2
  18. package/dist/data-table/adapters/client/index.mjs +7 -7
  19. package/dist/data-table/adapters/index.d.mts +4 -4
  20. package/dist/data-table/adapters/index.mjs +9 -9
  21. package/dist/data-table/adapters/server/index.d.mts +2 -2
  22. package/dist/data-table/adapters/server/index.mjs +5 -5
  23. package/dist/data-table/adapters/virtual/index.d.mts +2 -2
  24. package/dist/data-table/adapters/virtual/index.mjs +7 -7
  25. package/dist/data-table/index.d.mts +5 -5
  26. package/dist/data-table/index.mjs +19 -19
  27. package/dist/date/index.mjs +2 -2
  28. package/dist/features/adapters/posthog/index.mjs +2 -2
  29. package/dist/features/index.d.mts +6 -6
  30. package/dist/features/index.mjs +12 -12
  31. package/dist/{globals-vN-O052q.mjs → globals-D6FBsWDI.mjs} +1 -1
  32. package/dist/{index-DdWxDPX3.d.mts → index-DIK84tM4.d.mts} +1 -1
  33. package/dist/{index-BTMzRHep.d.mts → index-De0SQt1w.d.mts} +801 -50
  34. package/dist/{index-DRax9EgT.d.mts → index-DlUIZN-F.d.mts} +1125 -373
  35. package/dist/index.d.mts +8 -8
  36. package/dist/index.mjs +28 -28
  37. package/dist/json/attributes.json +196 -12
  38. package/dist/json/importMap.json +40 -0
  39. package/dist/json/tags.json +86 -0
  40. package/dist/json/web-types.json +605 -13
  41. package/dist/locale/adapters/index.mjs +3 -3
  42. package/dist/locale/adapters/v0/index.mjs +3 -3
  43. package/dist/locale/index.d.mts +6 -6
  44. package/dist/locale/index.mjs +12 -12
  45. package/dist/logger/adapters/index.mjs +4 -4
  46. package/dist/logger/adapters/pino/index.mjs +3 -3
  47. package/dist/logger/adapters/v0/index.mjs +3 -3
  48. package/dist/logger/index.d.mts +6 -6
  49. package/dist/logger/index.mjs +6 -6
  50. package/dist/permissions/adapters/index.d.mts +7 -7
  51. package/dist/permissions/adapters/index.mjs +3 -3
  52. package/dist/permissions/adapters/v0/index.d.mts +7 -7
  53. package/dist/permissions/adapters/v0/index.mjs +3 -3
  54. package/dist/permissions/index.d.mts +6 -6
  55. package/dist/permissions/index.mjs +10 -10
  56. package/dist/{pino-DFxkZLiu.mjs → pino-BD5PCzAF.mjs} +1 -1
  57. package/dist/{posthog-BOUoZTTf.mjs → posthog-BxaG8sYi.mjs} +1 -1
  58. package/dist/{server-B-HWxaTQ.d.mts → server-CGAeOGPC.d.mts} +1 -1
  59. package/dist/{server-C2R2POGE.mjs → server-DgOdFYMU.mjs} +1 -1
  60. package/dist/storage/index.d.mts +6 -6
  61. package/dist/storage/index.mjs +26 -26
  62. package/dist/theme/adapters/index.d.mts +6 -6
  63. package/dist/theme/adapters/index.mjs +3 -3
  64. package/dist/theme/adapters/v0/index.d.mts +6 -6
  65. package/dist/theme/adapters/v0/index.mjs +3 -3
  66. package/dist/theme/index.d.mts +6 -6
  67. package/dist/theme/index.mjs +11 -11
  68. package/dist/{toArray-VIn8vYt3.mjs → toArray-BBZH-G2X.mjs} +1 -1
  69. package/dist/{useClickOutside-DIi0kjN5.mjs → useClickOutside-Bm_3mbcT.mjs} +306 -98
  70. package/dist/{useFeatures-6O7EPJUS.mjs → useFeatures-BS4mit8z.mjs} +4 -4
  71. package/dist/{useLocale-DHjbekzS.mjs → useLocale-DJJmg-wv.mjs} +6 -6
  72. package/dist/{useLogger-BXqiUvt2.mjs → useLogger-C8G5jgNk.mjs} +4 -4
  73. package/dist/{usePermissions-DFacFVqO.mjs → usePermissions-C5Mkotol.mjs} +4 -4
  74. package/dist/{useTheme-D0_1mjTw.mjs → useTheme-BBnASLr3.mjs} +4 -4
  75. package/dist/utilities/index.mjs +2 -2
  76. package/dist/{utilities-Dx8wzGa5.mjs → utilities-CcJtp9Gx.mjs} +1 -1
  77. package/dist/{v0-CfSj99gF.mjs → v0-BWBSVkew.mjs} +2 -2
  78. package/dist/{v0-BNXo1ecc.d.mts → v0-Bh8d1j_p.d.mts} +1 -1
  79. package/dist/{v0-BPzPP8C5.d.mts → v0-CVr15VcY.d.mts} +1 -1
  80. package/dist/{v0-Dc5mcpQs.mjs → v0-CWUF_HqP.mjs} +2 -2
  81. package/dist/{v0-BYqmw3qM.mjs → v0-DtO_ICXr.mjs} +1 -1
  82. package/dist/{v0-Dwufx8ae.mjs → v0-DzvhDU1W.mjs} +2 -2
  83. package/dist/{v0-C8DBv9mh.mjs → v0-lua6ffdk.mjs} +2 -2
  84. package/dist/{virtual-BoTGK6HT.mjs → virtual-BEOqkQvm.mjs} +2 -2
  85. package/dist/{virtual-A4e1yrdn.d.mts → virtual-CVb9hRUU.d.mts} +1 -1
  86. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  import { i as Extensible, o as ID, s as MaybeArray } from "./index-BFBN5Zl3.mjs";
2
- import { E as ContextTrinity } from "./adapter-D2JoR-4d.mjs";
2
+ import { E as ContextTrinity } from "./adapter-CLs-OrSN.mjs";
3
3
  import { t as DateAdapter } from "./adapter-DcwxFryd.mjs";
4
4
  import { n as FeaturesAdapterFlags, r as FeaturesAdapterInterface } from "./index-BuOz3Rgm.mjs";
5
5
  import { n as LocaleAdapter } from "./v0-DHMoZ7dS.mjs";
@@ -352,6 +352,36 @@ interface RegistryContext<Z extends RegistryTicketInput = RegistryTicketInput, E
352
352
  * const cherry = registry.seek('first', 1, ticket => (ticket.value as string).startsWith('c'))
353
353
  * ```
354
354
  */
355
+ /**
356
+ * Move a ticket to a new index position
357
+ *
358
+ * @param id The ID of the ticket to move.
359
+ * @param toIndex The target index position. Clamped to valid range.
360
+ * @returns The moved ticket, or undefined if the ticket was not found.
361
+ *
362
+ * @remarks Rebuilds the internal collection order by removing and reinserting the entry at the target position. Triggers a full reindex after the move. This operation invalidates cached results from `keys()`, `values()`, and `entries()`.
363
+ *
364
+ * @see https://0.vuetifyjs.com/composables/registration/create-registry#move
365
+ *
366
+ * @example
367
+ * ```ts
368
+ * import { createRegistry } from '@vuetify/v0'
369
+ *
370
+ * const registry = createRegistry()
371
+ *
372
+ * registry.onboard([
373
+ * { id: 'a', value: 'alpha' },
374
+ * { id: 'b', value: 'beta' },
375
+ * { id: 'c', value: 'gamma' },
376
+ * ])
377
+ *
378
+ * // Move 'a' from index 0 to index 2
379
+ * registry.move('a', 2)
380
+ *
381
+ * console.log(registry.keys()) // ['b', 'c', 'a']
382
+ * ```
383
+ */
384
+ move: (id: ID, toIndex: number) => E | undefined;
355
385
  seek: (direction?: 'first' | 'last', from?: number, predicate?: (ticket: E) => boolean) => E | undefined;
356
386
  /**
357
387
  * Listen for registry events
@@ -672,6 +702,323 @@ declare function createRegistryContext<Z extends RegistryTicketInput = RegistryT
672
702
  */
673
703
  declare function useRegistry<Z extends RegistryTicketInput = RegistryTicketInput, E extends RegistryTicket & Z = RegistryTicket & Z>(namespace?: string): RegistryContext<Z, E>;
674
704
  //#endregion
705
+ //#region src/composables/createModel/index.d.ts
706
+ /**
707
+ * Input type for model tickets - what users provide to register().
708
+ *
709
+ * @template V The type of the ticket value.
710
+ */
711
+ interface ModelTicketInput<V = unknown> extends RegistryTicketInput<V> {
712
+ /** Disabled state of the ticket (optional on input, defaults to false) */
713
+ disabled?: MaybeRefOrGetter<boolean>;
714
+ }
715
+ /**
716
+ * Output type for model tickets - what users receive from get().
717
+ *
718
+ * @template Z The input ticket type that extends ModelTicketInput.
719
+ */
720
+ type ModelTicket<Z extends ModelTicketInput = ModelTicketInput> = RegistryTicket & Z & {
721
+ /** Disabled state of the ticket (guaranteed to exist on output) */
722
+ disabled: MaybeRefOrGetter<boolean>;
723
+ /** Whether the ticket is currently selected */
724
+ isSelected: Readonly<Ref<boolean, boolean>>;
725
+ };
726
+ /**
727
+ * Context returned by createModel.
728
+ *
729
+ * @template Z The input ticket type (what users provide to register).
730
+ * @template E The output ticket type (what users receive from get). Defaults to ModelTicket<Z>.
731
+ */
732
+ interface ModelContext<Z extends ModelTicketInput = ModelTicketInput, E extends ModelTicket<Z> = ModelTicket<Z>> extends Omit<RegistryContext<Z, E>, 'register'> {
733
+ /**
734
+ * Set of currently selected ticket IDs
735
+ *
736
+ * @remarks Reactive via `shallowReactive(new Set())`. Mutating this Set directly is supported —
737
+ * `selectedItems` and `selectedValues` will update accordingly. Ghost IDs (IDs not in the registry)
738
+ * are silently filtered out by the computed properties.
739
+ *
740
+ * @example
741
+ * ```ts
742
+ * const model = createModel()
743
+ * model.register({ id: 'a', value: 'Apple' })
744
+ * console.log(model.selectedIds.has('a')) // true (enrolled on register)
745
+ * ```
746
+ */
747
+ selectedIds: Reactive<Set<ID>>;
748
+ /**
749
+ * Computed Set of selected ticket instances
750
+ *
751
+ * @remarks Derived from `selectedIds`. Maps each ID to its ticket via `registry.get()` and
752
+ * filters out any IDs that no longer exist in the registry.
753
+ *
754
+ * @example
755
+ * ```ts
756
+ * const model = createModel()
757
+ * model.register({ id: 'a', value: 'Apple' })
758
+ * model.select('a')
759
+ * const items = Array.from(model.selectedItems.value)
760
+ * console.log(items[0].id) // 'a'
761
+ * ```
762
+ */
763
+ selectedItems: ComputedRef<Set<E>>;
764
+ /**
765
+ * Computed Set of selected ticket values
766
+ *
767
+ * @remarks Derived from `selectedItems`. Unwraps ref values via `toValue()` — if a ticket's
768
+ * value is `ref('Apple')`, the Set contains `'Apple'`, not the Ref wrapper.
769
+ *
770
+ * @example
771
+ * ```ts
772
+ * import { shallowRef } from 'vue'
773
+ * import { createModel } from '@vuetify/v0'
774
+ *
775
+ * const model = createModel()
776
+ * model.register({ id: 'a', value: shallowRef('Apple') })
777
+ * model.select('a')
778
+ * console.log([...model.selectedValues.value]) // ['Apple']
779
+ * ```
780
+ */
781
+ selectedValues: ComputedRef<Set<E['value'] extends Ref<infer U> ? U : E['value']>>;
782
+ /**
783
+ * Disabled state for the entire model instance
784
+ *
785
+ * @remarks When truthy, all selection operations (`select`, `unselect`, `toggle`) are silently
786
+ * skipped. Accepts a static boolean, a ref, or a getter for reactive disabled state.
787
+ *
788
+ * @see https://0.vuetifyjs.com/composables/selection/create-model
789
+ */
790
+ disabled: MaybeRefOrGetter<boolean>;
791
+ /**
792
+ * Reset selection state without destroying the registry
793
+ *
794
+ * @remarks Clears `selectedIds` only — registered tickets are preserved.
795
+ * Use `clear()` to destroy both selection state and the registry.
796
+ *
797
+ * @example
798
+ * ```ts
799
+ * const model = createModel()
800
+ * model.register({ id: 'a', value: 'Apple' })
801
+ * model.select('a')
802
+ * model.reset()
803
+ * console.log(model.size) // 1 (tickets preserved)
804
+ * console.log(model.selectedIds.size) // 0
805
+ * ```
806
+ */
807
+ reset: () => void;
808
+ /**
809
+ * Select a ticket by ID
810
+ *
811
+ * @param id The ID of the ticket to select.
812
+ * @remarks When `multiple` is `false` (default), clears `selectedIds` before adding the new ID.
813
+ * When `multiple` is `true`, accumulates without clearing.
814
+ * No-op if the model instance is disabled, the ticket doesn't exist, or the ticket is disabled.
815
+ *
816
+ * @see https://0.vuetifyjs.com/composables/selection/create-model
817
+ *
818
+ * @example
819
+ * ```ts
820
+ * const model = createModel()
821
+ * model.register({ id: 'a', value: 'Apple' })
822
+ * model.register({ id: 'b', value: 'Banana' })
823
+ * model.select('a')
824
+ * model.select('b') // clears 'a', selects 'b'
825
+ * console.log(model.selectedIds.size) // 1
826
+ * ```
827
+ */
828
+ select: (id: ID) => void;
829
+ /**
830
+ * Unselect a ticket by ID
831
+ *
832
+ * @param id The ID of the ticket to unselect.
833
+ * @remarks Removes the ID from `selectedIds`. No-op if the model instance is disabled.
834
+ *
835
+ * @example
836
+ * ```ts
837
+ * model.select('a')
838
+ * model.unselect('a')
839
+ * console.log(model.selectedIds.size) // 0
840
+ * ```
841
+ */
842
+ unselect: (id: ID) => void;
843
+ /**
844
+ * Toggle a ticket's selection state
845
+ *
846
+ * @param id The ID of the ticket to toggle.
847
+ * @remarks Calls `select(id)` if not selected, `unselect(id)` if already selected.
848
+ * No-op if the model instance is disabled.
849
+ *
850
+ * @example
851
+ * ```ts
852
+ * model.toggle('a') // selects
853
+ * model.toggle('a') // unselects
854
+ * ```
855
+ */
856
+ toggle: (id: ID) => void;
857
+ /**
858
+ * Check if a ticket is currently selected
859
+ *
860
+ * @param id The ID of the ticket to check.
861
+ * @returns `true` if the ID is in `selectedIds`.
862
+ *
863
+ * @example
864
+ * ```ts
865
+ * model.select('a')
866
+ * console.log(model.selected('a')) // true
867
+ * console.log(model.selected('b')) // false
868
+ * ```
869
+ */
870
+ selected: (id: ID) => boolean;
871
+ /**
872
+ * Apply external values to the model
873
+ *
874
+ * @param values Array of values to apply. Only `values[0]` is used (single-value store).
875
+ * @param options Options for API compatibility with createSelection. The `multiple` field is accepted but ignored.
876
+ * @remarks Used internally by `useProxyModel` to sync a ref with the model. Executes two steps sequentially:
877
+ * 1. **Ref write**: Writes `values[0]` to any selected ticket whose value is a ref.
878
+ * 2. **Browse resolution**: Clears `selectedIds`, resolves `values[0]` via `registry.browse()`, and selects the match.
879
+ *
880
+ * For ref-valued tickets, browse typically finds no match (the catalog indexes by the ref object,
881
+ * not the unwrapped value), so `selectedIds` will be empty after apply.
882
+ *
883
+ * @see https://0.vuetifyjs.com/composables/selection/create-model
884
+ *
885
+ * @example
886
+ * ```ts
887
+ * import { shallowRef } from 'vue'
888
+ * import { createModel } from '@vuetify/v0'
889
+ *
890
+ * const value = shallowRef('Apple')
891
+ * const model = createModel()
892
+ * model.register({ id: 'fruit', value }) // enrolled automatically
893
+ *
894
+ * model.apply(['Banana']) // value.value is now 'Banana'
895
+ * ```
896
+ */
897
+ apply: (values: unknown[], options?: {
898
+ multiple?: boolean;
899
+ }) => void;
900
+ /**
901
+ * Register a new ticket
902
+ *
903
+ * @param ticket Partial ticket data. ID is auto-generated if not provided. Disabled defaults to `false`.
904
+ * @returns The registered ticket with `isSelected` computed ref attached.
905
+ * @remarks Delegates to `registry.register()` after adding model-specific fields (`disabled`, `isSelected`).
906
+ *
907
+ * @see https://0.vuetifyjs.com/composables/selection/create-model
908
+ *
909
+ * @example
910
+ * ```ts
911
+ * import { shallowRef } from 'vue'
912
+ * import { createModel } from '@vuetify/v0'
913
+ *
914
+ * const model = createModel()
915
+ * const ticket = model.register({ id: 'fruit', value: shallowRef('Apple') })
916
+ *
917
+ * console.log(ticket.id) // 'fruit'
918
+ * console.log(ticket.isSelected.value) // true (enrolled by default)
919
+ * console.log(ticket.disabled) // false
920
+ * ```
921
+ */
922
+ register: (registration?: Partial<Z>) => E;
923
+ /**
924
+ * Onboard multiple tickets at once
925
+ *
926
+ * @param registrations An array of partial ticket data to register.
927
+ * @returns The registered tickets with model-specific fields attached.
928
+ * @remarks Delegates to the model's `register` (not the registry's) so each ticket
929
+ * receives `disabled` and `isSelected`. Runs inside `registry.batch()` for performance.
930
+ */
931
+ onboard: (registrations: Partial<Z>[]) => E[];
932
+ }
933
+ interface ModelOptions extends RegistryOptions {
934
+ /**
935
+ * Disabled state for the entire model instance
936
+ *
937
+ * @default false
938
+ * @remarks When truthy, all selection operations are silently skipped. Accepts a static
939
+ * boolean, a ref, or a getter for reactive disabled state.
940
+ *
941
+ * @example
942
+ * ```ts
943
+ * import { createModel } from '@vuetify/v0'
944
+ *
945
+ * // Static
946
+ * const model = createModel({ disabled: true })
947
+ *
948
+ * // Reactive
949
+ * const disabled = ref(false)
950
+ * const model = createModel({ disabled })
951
+ * ```
952
+ */
953
+ disabled?: MaybeRefOrGetter<boolean>;
954
+ /**
955
+ * Auto-select tickets on registration
956
+ *
957
+ * @default true
958
+ * @remarks When truthy, newly registered tickets are automatically selected via `select()`,
959
+ * subject to disabled guards (both instance-level and ticket-level). With single-value
960
+ * semantics, only the most recently registered ticket remains active.
961
+ *
962
+ * `createSelection` overrides this to `false` and handles enrollment with its own
963
+ * `multiple`-aware logic.
964
+ */
965
+ enroll?: MaybeRefOrGetter<boolean>;
966
+ /**
967
+ * Allow multiple tickets to be selected simultaneously
968
+ *
969
+ * @default false
970
+ * @remarks When `true`, `select()` accumulates IDs instead of clearing before adding.
971
+ * Used by createSlider where all thumbs must stay selected.
972
+ */
973
+ multiple?: MaybeRefOrGetter<boolean>;
974
+ }
975
+ /**
976
+ * Creates a new model instance for storing a single value.
977
+ *
978
+ * @param options The options for the model instance.
979
+ * @template Z The input ticket type. Extend {@link ModelTicketInput} to add custom properties.
980
+ * @template E The output ticket type. Automatically includes `disabled` and `isSelected`.
981
+ * @template R The context type. Defaults to {@link ModelContext}<Z, E>.
982
+ * @returns A new model instance with selection tracking and disabled guards.
983
+ *
984
+ * @remarks
985
+ * Extends createRegistry with value tracking via a reactive Set of selected IDs.
986
+ * Provides the shared model-value concept used by both Selection and Slider.
987
+ *
988
+ * **Enrollment**: Tickets are auto-selected on registration by default (`enroll: true`).
989
+ * With single-value semantics, only the most recently registered ticket is active.
990
+ * Pass `enroll: false` to opt out. `createSelection` overrides this to `false`.
991
+ *
992
+ * **Apply bridge**: `useProxyModel` calls `apply()` to sync a ref with the model.
993
+ * When the active ticket's value is a ref, `apply` writes to it directly. Otherwise,
994
+ * it resolves via `registry.browse()`.
995
+ *
996
+ * @see https://0.vuetifyjs.com/composables/selection/create-model
997
+ *
998
+ * @example
999
+ * ```ts
1000
+ * import { shallowRef } from 'vue'
1001
+ * import { createModel, useProxyModel } from '@vuetify/v0'
1002
+ *
1003
+ * const value = shallowRef('Apple')
1004
+ * const model = createModel({ events: true })
1005
+ *
1006
+ * model.register({ id: 'fruit', value })
1007
+ * useProxyModel(model, value)
1008
+ *
1009
+ * // value and model stay in sync bidirectionally
1010
+ * ```
1011
+ *
1012
+ * @example
1013
+ * ```ts
1014
+ * // Disabled model — all selection operations are no-ops
1015
+ * const model = createModel({ disabled: true })
1016
+ * model.register({ id: 'a', value: shallowRef('Apple') })
1017
+ * model.select('a') // no-op
1018
+ * ```
1019
+ */
1020
+ declare function createModel<Z extends ModelTicketInput = ModelTicketInput, E extends ModelTicket<Z> = ModelTicket<Z>, R extends ModelContext<Z, E> = ModelContext<Z, E>>(_options?: ModelOptions): R;
1021
+ //#endregion
675
1022
  //#region src/composables/createSelection/index.d.ts
676
1023
  /**
677
1024
  * Input type for selection tickets - what users provide to register().
@@ -691,10 +1038,7 @@ declare function useRegistry<Z extends RegistryTicketInput = RegistryTicketInput
691
1038
  * selection.register({ label: 'Item 1' })
692
1039
  * ```
693
1040
  */
694
- interface SelectionTicketInput<V = unknown> extends RegistryTicketInput<V> {
695
- /** Disabled state of the ticket (optional on input, defaults to false) */
696
- disabled?: MaybeRef<boolean>;
697
- }
1041
+ interface SelectionTicketInput<V = unknown> extends ModelTicketInput<V> {}
698
1042
  /**
699
1043
  * Output type for selection tickets - what users receive from get().
700
1044
  * Includes registry-added methods for self-selection.
@@ -709,11 +1053,7 @@ interface SelectionTicketInput<V = unknown> extends RegistryTicketInput<V> {
709
1053
  * - `unselect()` - Method to unselect this ticket
710
1054
  * - `toggle()` - Method to toggle selection state
711
1055
  */
712
- type SelectionTicket<Z extends SelectionTicketInput = SelectionTicketInput> = RegistryTicket & Z & {
713
- /** Disabled state of the ticket (guaranteed to exist on output) */
714
- disabled: MaybeRef<boolean>;
715
- /** Whether the ticket is currently selected */
716
- isSelected: Readonly<Ref<boolean, boolean>>;
1056
+ type SelectionTicket<Z extends SelectionTicketInput = SelectionTicketInput> = ModelTicket<Z> & {
717
1057
  /** Select self */
718
1058
  select: () => void;
719
1059
  /** Unselect self */
@@ -727,49 +1067,36 @@ type SelectionTicket<Z extends SelectionTicketInput = SelectionTicketInput> = Re
727
1067
  * @template Z The input ticket type (what users provide to register).
728
1068
  * @template E The output ticket type (what users receive from get). Defaults to SelectionTicket<Z>.
729
1069
  */
730
- interface SelectionContext<Z extends SelectionTicketInput = SelectionTicketInput, E extends SelectionTicket<Z> = SelectionTicket<Z>> extends Omit<RegistryContext<E>, 'register' | 'onboard'> {
731
- /** Set of selected ticket IDs */
732
- selectedIds: Reactive<Set<ID>>;
733
- /** Set of selected ticket instances */
734
- selectedItems: ComputedRef<Set<E>>;
735
- /** Set of selected ticket values */
736
- selectedValues: ComputedRef<Set<unknown>>;
737
- /** Disable state for the entire selection instance */
738
- disabled: MaybeRef<boolean>;
739
- /** Clear all selected IDs and reindexes */
740
- reset: () => void;
741
- /** Select a ticket by ID (Toggle ON) */
742
- select: (id: ID) => void;
743
- /** Unselect a ticket by ID (Toggle OFF) */
744
- unselect: (id: ID) => void;
745
- /** Toggles a ticket ON and OFF by ID */
746
- toggle: (id: ID) => void;
747
- /** Check if a ticket is selected by ID */
748
- selected: (id: ID) => boolean;
749
- /** Mandates selected ID based on "mandatory" Option */
750
- mandate: () => void;
1070
+ interface SelectionContext<Z extends SelectionTicketInput = SelectionTicketInput, E extends SelectionTicket<Z> = SelectionTicket<Z>> extends Omit<ModelContext<Z, E>, 'register'> {
1071
+ /** Whether the selection allows multiple selections */
1072
+ multiple: MaybeRefOrGetter<boolean>;
751
1073
  /** Register a new ticket (accepts input type, returns output type) */
752
1074
  register: (ticket?: Partial<Z>) => E;
753
1075
  /** Onboard multiple tickets at once */
754
1076
  onboard: (registrations: Partial<Z>[]) => E[];
1077
+ /** Mandate selected ID based on "mandatory" option */
1078
+ mandate: () => void;
1079
+ /** Seek for the first/last non-disabled ticket */
1080
+ seek: (direction?: 'first' | 'last', from?: number) => E | undefined;
755
1081
  }
756
- interface SelectionOptions extends RegistryOptions {
757
- /** When true, the entire selection instance is disabled. */
758
- disabled?: MaybeRefOrGetter<boolean>;
759
- /**
760
- * When true, newly registered items are automatically selected if not disabled.
761
- * Useful for pre-selecting items in multi-select scenarios.
762
- */
763
- enroll?: MaybeRefOrGetter<boolean>;
1082
+ interface SelectionOptions extends ModelOptions {
764
1083
  /**
765
1084
  * Controls mandatory selection behavior:
766
1085
  * - `false` (default): No mandatory selection enforcement
767
- * - `true`: Prevents deselecting the last selected item (user must always have one selected)
1086
+ * - `true`: Prevents deselecting the last selected item
768
1087
  * - `'force'`: Automatically selects the first non-disabled item on registration
769
1088
  */
770
1089
  mandatory?: MaybeRefOrGetter<boolean | 'force'>;
771
1090
  /** When true, treats the selection as an array */
772
1091
  multiple?: MaybeRefOrGetter<boolean>;
1092
+ /**
1093
+ * Auto-select tickets on registration
1094
+ *
1095
+ * @default false
1096
+ * @remarks Overrides createModel's default of `true`. When truthy, newly registered
1097
+ * items are automatically selected if not disabled. Respects `multiple` mode.
1098
+ */
1099
+ enroll?: MaybeRefOrGetter<boolean>;
773
1100
  }
774
1101
  interface SelectionContextOptions extends SelectionOptions {
775
1102
  namespace?: string;
@@ -777,7 +1104,8 @@ interface SelectionContextOptions extends SelectionOptions {
777
1104
  /**
778
1105
  * Creates a new selection instance for managing multiple selected items.
779
1106
  *
780
- * Extends `useRegistry` with selection tracking via a reactive `Set` of selected IDs.
1107
+ * Extends `createModel` with multi-select, mandatory enforcement,
1108
+ * auto-enrollment, and ticket self-methods.
781
1109
  * Supports disabled items, mandatory selection enforcement, and auto-enrollment.
782
1110
  *
783
1111
  * @param options The options for the selection instance.
@@ -798,7 +1126,7 @@ interface SelectionContextOptions extends SelectionOptions {
798
1126
  * - Enroll option auto-selects all non-disabled items on registration
799
1127
  *
800
1128
  * **Inheritance Chain:**
801
- * `useRegistry` → `createSelection` → `createSingle`/`createGroup` → `createStep`
1129
+ * `createRegistry` → `createModel` → `createSelection` → `createSingle`/`createGroup` → `createStep`
802
1130
  *
803
1131
  * @see https://0.vuetifyjs.com/composables/selection/use-selection
804
1132
  *
@@ -1165,7 +1493,7 @@ declare function useBreadcrumbs<Z extends BreadcrumbTicketInput = BreadcrumbTick
1165
1493
  */
1166
1494
  interface GroupTicketInput<V = unknown> extends SelectionTicketInput<V> {
1167
1495
  /** Whether the ticket should start in mixed/indeterminate state */
1168
- indeterminate?: MaybeRef<boolean>;
1496
+ indeterminate?: MaybeRefOrGetter<boolean>;
1169
1497
  }
1170
1498
  /**
1171
1499
  * Output type for group tickets.
@@ -1782,12 +2110,17 @@ interface BreakpointsContext {
1782
2110
  lgAndDown: Readonly<ShallowRef<boolean>>;
1783
2111
  xlAndDown: Readonly<ShallowRef<boolean>>;
1784
2112
  xxlAndDown: Readonly<ShallowRef<boolean>>;
2113
+ ssr: boolean;
1785
2114
  update: () => void;
1786
2115
  }
1787
2116
  interface BreakpointsOptions {
1788
2117
  namespace?: string;
1789
2118
  mobileBreakpoint?: BreakpointName | number;
1790
2119
  breakpoints?: Partial<Record<BreakpointName, number>>;
2120
+ ssr?: {
2121
+ clientWidth: number;
2122
+ clientHeight?: number;
2123
+ };
1791
2124
  }
1792
2125
  interface BreakpointsPluginOptions extends BreakpointsOptions {}
1793
2126
  interface BreakpointsContextOptions extends BreakpointsOptions {}
@@ -3607,12 +3940,27 @@ interface ProxyModelOptions {
3607
3940
  transformOut?: (val: unknown) => unknown;
3608
3941
  }
3609
3942
  /**
3610
- * Syncs a ref with a selection registry bidirectionally.
3943
+ * Minimal interface for useProxyModel's context parameter.
3944
+ * Both ModelContext (Set-based) and SliderContext (Array-based) satisfy this.
3945
+ */
3946
+ interface ProxyModelTarget {
3947
+ selectedValues: {
3948
+ readonly value: Iterable<unknown>;
3949
+ };
3950
+ apply: (values: unknown[], options?: {
3951
+ multiple?: boolean;
3952
+ }) => void;
3953
+ select?: (id: string | number) => void;
3954
+ multiple?: MaybeRefOrGetter<boolean>;
3955
+ on?: (event: string, cb: (data: unknown) => void) => void;
3956
+ off?: (event: string, cb: (data: unknown) => void) => void;
3957
+ }
3958
+ /**
3959
+ * Syncs a ref with a model context bidirectionally.
3611
3960
  *
3612
- * @param registry The selection registry to bind to.
3961
+ * @param context The model context to bind to.
3613
3962
  * @param model The ref to sync.
3614
3963
  * @param options The options for the proxy model.
3615
- * @template Z The type of the selection ticket.
3616
3964
  * @returns A function to stop the sync.
3617
3965
  *
3618
3966
  * @see https://0.vuetifyjs.com/composables/forms/use-proxy-model
@@ -3631,7 +3979,7 @@ interface ProxyModelOptions {
3631
3979
  * const stop = useProxyModel(registry, model)
3632
3980
  * ```
3633
3981
  */
3634
- declare function useProxyModel<Z extends SelectionTicket = SelectionTicket>(registry: SelectionContext<Z>, model: Ref<unknown>, options?: ProxyModelOptions): () => void;
3982
+ declare function useProxyModel(context: ProxyModelTarget, model: Ref<unknown>, options?: ProxyModelOptions): () => void;
3635
3983
  //#endregion
3636
3984
  //#region src/composables/useProxyRegistry/index.d.ts
3637
3985
  interface ProxyRegistryOptions {
@@ -3648,7 +3996,8 @@ interface ProxyRegistryContext<Z extends RegistryTicket = RegistryTicket> {
3648
3996
  *
3649
3997
  * @param registry The registry instance to proxy.
3650
3998
  * @param options The options for the proxy registry.
3651
- * @template Z The type of the registry ticket.
3999
+ * @template Z The input ticket type (what users provide to register).
4000
+ * @template E The output ticket type (what users receive from get/values).
3652
4001
  * @returns A proxy registry with reactive objects.
3653
4002
  *
3654
4003
  * @see https://0.vuetifyjs.com/composables/registration/use-proxy-registry
@@ -3664,7 +4013,7 @@ interface ProxyRegistryContext<Z extends RegistryTicket = RegistryTicket> {
3664
4013
  * console.log(proxy.size) // 1
3665
4014
  * ```
3666
4015
  */
3667
- declare function useProxyRegistry<Z extends RegistryTicket = RegistryTicket>(registry: RegistryContext<Z>, options?: ProxyRegistryOptions): ProxyRegistryContext<Z>;
4016
+ declare function useProxyRegistry<Z extends RegistryTicketInput = RegistryTicketInput, E extends RegistryTicket & Z = RegistryTicket & Z>(registry: RegistryContext<Z, E>, options?: ProxyRegistryOptions): ProxyRegistryContext<E>;
3668
4017
  //#endregion
3669
4018
  //#region src/composables/createQueue/index.d.ts
3670
4019
  /**
@@ -4065,6 +4414,406 @@ interface UseElementSizeReturn extends UseResizeObserverReturn {
4065
4414
  */
4066
4415
  declare function useElementSize(target: MaybeElementRef): UseElementSizeReturn;
4067
4416
  //#endregion
4417
+ //#region src/composables/createSlider/index.d.ts
4418
+ interface SliderTicketInput extends ModelTicketInput<ShallowRef<number>> {
4419
+ value: ShallowRef<number>;
4420
+ }
4421
+ /**
4422
+ * Configuration options for createSlider.
4423
+ *
4424
+ * @see https://0.vuetifyjs.com/composables/forms/create-slider
4425
+ */
4426
+ interface SliderOptions {
4427
+ /**
4428
+ * Minimum value.
4429
+ * @default 0
4430
+ */
4431
+ min?: number;
4432
+ /**
4433
+ * Maximum value.
4434
+ * @default 100
4435
+ */
4436
+ max?: number;
4437
+ /**
4438
+ * Step increment. Values are snapped to the nearest multiple of `step` above `min`.
4439
+ *
4440
+ * @remarks Use decimal steps for fine-grained control (e.g., `0.1` for a media scrubber).
4441
+ * A step of `0` disables snapping — values are only clamped to min/max.
4442
+ *
4443
+ * @default 1
4444
+ */
4445
+ step?: number;
4446
+ /**
4447
+ * Whether the slider is disabled.
4448
+ *
4449
+ * @remarks Accepts a reactive getter or ref. When disabled, all thumb operations (`set`, `up`, `down`) are no-ops.
4450
+ */
4451
+ disabled?: MaybeRefOrGetter<boolean>;
4452
+ /**
4453
+ * Whether the slider is readonly (focusable but not editable).
4454
+ *
4455
+ * @remarks Thumbs can receive focus for accessibility, but `set`, `up`, `down`, `floor`, and `ceil` are no-ops.
4456
+ */
4457
+ readonly?: MaybeRefOrGetter<boolean>;
4458
+ /**
4459
+ * Slider orientation.
4460
+ *
4461
+ * @remarks Affects `fromValue` and `fromPercent` axis mapping in Slider components.
4462
+ * When using createSlider standalone, orientation is informational only.
4463
+ */
4464
+ orientation?: MaybeRefOrGetter<'horizontal' | 'vertical'>;
4465
+ /**
4466
+ * Flip the percent axis.
4467
+ *
4468
+ * @remarks When `true`, `fromValue(min)` returns `100` and `fromValue(max)` returns `0`.
4469
+ * Useful for vertical sliders where the visual bottom is the minimum.
4470
+ */
4471
+ inverted?: MaybeRefOrGetter<boolean>;
4472
+ /**
4473
+ * Minimum steps required between adjacent thumbs.
4474
+ *
4475
+ * @remarks Enforced by `set` and `apply`. The gap in value units is `minStepsBetweenThumbs * step`.
4476
+ *
4477
+ * @default 0
4478
+ *
4479
+ * @example
4480
+ * ```ts
4481
+ * const slider = createSlider({ step: 5, minStepsBetweenThumbs: 2 })
4482
+ * // Thumbs must be at least 10 units apart (2 × 5)
4483
+ * ```
4484
+ */
4485
+ minStepsBetweenThumbs?: number;
4486
+ /**
4487
+ * Allow thumbs to pass through each other.
4488
+ *
4489
+ * @remarks When `false` (default), `set` constrains values so thumbs maintain their order.
4490
+ * When `true`, thumbs can freely overlap and swap positions.
4491
+ *
4492
+ * @default false
4493
+ */
4494
+ crossover?: boolean;
4495
+ /**
4496
+ * Range mode — expects two thumbs.
4497
+ *
4498
+ * @remarks Informational flag used by Slider components to adjust track/range rendering.
4499
+ * Does not enforce the number of registered thumbs.
4500
+ *
4501
+ * @default false
4502
+ */
4503
+ range?: boolean;
4504
+ }
4505
+ /**
4506
+ * Context returned by {@link createSlider}.
4507
+ *
4508
+ * @remarks
4509
+ * Extends `createModel` with slider-specific math and thumb operations.
4510
+ *
4511
+ * **Inheritance chain:**
4512
+ * `createRegistry` → `createModel` → `createSlider`
4513
+ *
4514
+ * **Ticket-per-thumb model:**
4515
+ * Each thumb is a model ticket whose value is a `shallowRef<number>`.
4516
+ * `values` is derived from the ordered tickets, not a standalone ref.
4517
+ * Register/unregister thumbs to add/remove values dynamically.
4518
+ *
4519
+ * @see https://0.vuetifyjs.com/composables/forms/create-slider
4520
+ * @see {@link createModel} for the base model API (collection, selectedIds, etc.)
4521
+ */
4522
+ interface SliderContext extends Omit<ModelContext<SliderTicketInput, ModelTicket<SliderTicketInput>>, 'values' | 'selectedValues' | 'apply' | 'disabled' | 'register'> {
4523
+ /**
4524
+ * Ordered thumb values derived from model tickets.
4525
+ *
4526
+ * @remarks Reactive — updates when any thumb's `shallowRef<number>` changes.
4527
+ * Order matches ticket registration order (sorted by index).
4528
+ *
4529
+ * @example
4530
+ * ```ts
4531
+ * const slider = createSlider()
4532
+ * slider.register({ value: 25 })
4533
+ * slider.register({ value: 75 })
4534
+ * console.log(slider.values.value) // [25, 75]
4535
+ * ```
4536
+ */
4537
+ values: ComputedRef<number[]>;
4538
+ /**
4539
+ * Alias for `values` — provides useProxyModel compatibility.
4540
+ *
4541
+ * @remarks Returns an array (not a Set) to preserve duplicate values across thumbs.
4542
+ *
4543
+ * @see {@link values}
4544
+ */
4545
+ selectedValues: ComputedRef<number[]>;
4546
+ /**
4547
+ * Apply external values — snaps, constrains, and writes to ticket refs.
4548
+ *
4549
+ * @param values Array of raw values (coerced to numbers).
4550
+ * @param options Options object (reserved for useProxyModel compatibility).
4551
+ *
4552
+ * @remarks
4553
+ * If no thumbs are registered yet, values are stored as pending and
4554
+ * consumed as thumbs register. Each value is snapped to step and
4555
+ * constrained by `minStepsBetweenThumbs`.
4556
+ *
4557
+ * @example
4558
+ * ```ts
4559
+ * const slider = createSlider({ step: 10 })
4560
+ * slider.register({ value: 0 })
4561
+ * slider.register({ value: 0 })
4562
+ * slider.apply([33, 67]) // values: [30, 70]
4563
+ * ```
4564
+ */
4565
+ apply: (values: unknown[], options?: {
4566
+ multiple?: boolean;
4567
+ }) => void;
4568
+ /** Whether disabled. Reactive ref derived from the `disabled` option. */
4569
+ disabled: Readonly<Ref<boolean>>;
4570
+ /** Whether readonly. Reactive ref derived from the `readonly` option. */
4571
+ readonly: Readonly<Ref<boolean>>;
4572
+ /** Slider orientation. Reactive ref derived from the `orientation` option. */
4573
+ orientation: Readonly<Ref<'horizontal' | 'vertical'>>;
4574
+ /** Whether inverted. Reactive ref derived from the `inverted` option. */
4575
+ inverted: Readonly<Ref<boolean>>;
4576
+ /** Minimum value. */
4577
+ readonly min: number;
4578
+ /** Maximum value. */
4579
+ readonly max: number;
4580
+ /** Step increment. */
4581
+ readonly step: number;
4582
+ /** Minimum steps required between adjacent thumbs. */
4583
+ readonly minStepsBetweenThumbs: number;
4584
+ /** Whether thumbs can cross each other. */
4585
+ readonly crossover: boolean;
4586
+ /** Whether this is a range slider. */
4587
+ readonly range: boolean;
4588
+ /**
4589
+ * Register a new thumb and return its ticket.
4590
+ *
4591
+ * @param input Starting value as a number or `{ value }` object. Defaults to `min`.
4592
+ *
4593
+ * @remarks
4594
+ * The thumb is automatically selected in the model (all thumbs stay selected).
4595
+ * If `apply` was called before any thumbs registered, the pending value at this
4596
+ * thumb's index is used instead of the provided value.
4597
+ *
4598
+ * @see {@link unregister}
4599
+ *
4600
+ * @example
4601
+ * ```ts
4602
+ * const slider = createSlider({ min: 0, max: 100 })
4603
+ * const thumb = slider.register({ value: 50 })
4604
+ * console.log(thumb.index) // 0
4605
+ * console.log(slider.values.value) // [50]
4606
+ * ```
4607
+ */
4608
+ register: (input?: number | {
4609
+ value: number;
4610
+ }) => ModelTicket<SliderTicketInput>;
4611
+ /**
4612
+ * Unregister a thumb by ticket ID.
4613
+ *
4614
+ * @param id The ticket ID returned from `register()`.
4615
+ *
4616
+ * @see {@link register}
4617
+ *
4618
+ * @example
4619
+ * ```ts
4620
+ * const slider = createSlider()
4621
+ * const thumb = slider.register({ value: 50 })
4622
+ * slider.unregister(thumb.id) // values: []
4623
+ * ```
4624
+ */
4625
+ unregister: (id: ID) => void;
4626
+ /**
4627
+ * Round a value to the nearest step, clamped to min/max.
4628
+ *
4629
+ * @param value Raw value to snap.
4630
+ * @returns Snapped value.
4631
+ *
4632
+ * @remarks Pure function — does not modify slider state.
4633
+ * When `step` is `0`, only clamps without snapping.
4634
+ *
4635
+ * @example
4636
+ * ```ts
4637
+ * const slider = createSlider({ min: 0, max: 100, step: 5 })
4638
+ * slider.snap(47) // 45
4639
+ * slider.snap(48) // 50
4640
+ * slider.snap(-5) // 0 (clamped)
4641
+ * ```
4642
+ */
4643
+ snap: (value: number) => number;
4644
+ /**
4645
+ * Convert a value to a 0–100 percentage.
4646
+ *
4647
+ * @param value The slider value to convert.
4648
+ * @returns Percentage between 0 and 100.
4649
+ *
4650
+ * @remarks Pure function. Respects `inverted` — when inverted,
4651
+ * `fromValue(min)` returns `100` and `fromValue(max)` returns `0`.
4652
+ *
4653
+ * @see {@link fromPercent} for the inverse operation.
4654
+ *
4655
+ * @example
4656
+ * ```ts
4657
+ * const slider = createSlider({ min: 0, max: 200 })
4658
+ * slider.fromValue(100) // 50
4659
+ * slider.fromValue(0) // 0
4660
+ * slider.fromValue(200) // 100
4661
+ * ```
4662
+ */
4663
+ fromValue: (value: number) => number;
4664
+ /**
4665
+ * Convert a 0–100 percentage to a snapped value.
4666
+ *
4667
+ * @param percent Percentage between 0 and 100.
4668
+ * @returns Snapped slider value.
4669
+ *
4670
+ * @remarks Pure function. Respects `inverted`. The returned value
4671
+ * is snapped to the nearest step and clamped to min/max.
4672
+ *
4673
+ * @see {@link fromValue} for the inverse operation.
4674
+ *
4675
+ * @example
4676
+ * ```ts
4677
+ * const slider = createSlider({ min: 0, max: 100, step: 10 })
4678
+ * slider.fromPercent(33) // 30
4679
+ * slider.fromPercent(50) // 50
4680
+ * ```
4681
+ */
4682
+ fromPercent: (percent: number) => number;
4683
+ /**
4684
+ * Set the value at a thumb index with step snapping and neighbor constraints.
4685
+ *
4686
+ * @param index Zero-based thumb index.
4687
+ * @param value Raw value to set.
4688
+ *
4689
+ * @remarks
4690
+ * No-op when `readonly` is `true`. The value is snapped to step, clamped to min/max,
4691
+ * and constrained by adjacent thumbs when `crossover` is `false`.
4692
+ *
4693
+ * @see {@link up} and {@link down} for relative adjustments.
4694
+ *
4695
+ * @example
4696
+ * ```ts
4697
+ * const slider = createSlider({ min: 0, max: 100, step: 5 })
4698
+ * slider.register({ value: 50 })
4699
+ * slider.set(0, 73) // values: [75] (snapped)
4700
+ * ```
4701
+ */
4702
+ set: (index: number, value: number) => void;
4703
+ /**
4704
+ * Increment a thumb's value by `step × multiplier`.
4705
+ *
4706
+ * @param index Zero-based thumb index.
4707
+ * @param multiplier Number of steps to increment. Defaults to `1`.
4708
+ *
4709
+ * @see {@link down} for the inverse. {@link set} for absolute positioning.
4710
+ *
4711
+ * @example
4712
+ * ```ts
4713
+ * const slider = createSlider({ min: 0, max: 100, step: 5 })
4714
+ * slider.register({ value: 50 })
4715
+ * slider.up(0) // values: [55]
4716
+ * slider.up(0, 3) // values: [70]
4717
+ * ```
4718
+ */
4719
+ up: (index: number, multiplier?: number) => void;
4720
+ /**
4721
+ * Decrement a thumb's value by `step × multiplier`.
4722
+ *
4723
+ * @param index Zero-based thumb index.
4724
+ * @param multiplier Number of steps to decrement. Defaults to `1`.
4725
+ *
4726
+ * @see {@link up} for the inverse. {@link set} for absolute positioning.
4727
+ *
4728
+ * @example
4729
+ * ```ts
4730
+ * const slider = createSlider({ min: 0, max: 100, step: 5 })
4731
+ * slider.register({ value: 50 })
4732
+ * slider.down(0) // values: [45]
4733
+ * slider.down(0, 3) // values: [30]
4734
+ * ```
4735
+ */
4736
+ down: (index: number, multiplier?: number) => void;
4737
+ /**
4738
+ * Set a thumb to the minimum value.
4739
+ *
4740
+ * @param index Zero-based thumb index.
4741
+ *
4742
+ * @see {@link ceil} for the inverse.
4743
+ *
4744
+ * @example
4745
+ * ```ts
4746
+ * const slider = createSlider({ min: 10, max: 90 })
4747
+ * slider.register({ value: 50 })
4748
+ * slider.floor(0) // values: [10]
4749
+ * ```
4750
+ */
4751
+ floor: (index: number) => void;
4752
+ /**
4753
+ * Set a thumb to the maximum value.
4754
+ *
4755
+ * @param index Zero-based thumb index.
4756
+ *
4757
+ * @see {@link floor} for the inverse.
4758
+ *
4759
+ * @example
4760
+ * ```ts
4761
+ * const slider = createSlider({ min: 10, max: 90 })
4762
+ * slider.register({ value: 50 })
4763
+ * slider.ceil(0) // values: [90]
4764
+ * ```
4765
+ */
4766
+ ceil: (index: number) => void;
4767
+ }
4768
+ /**
4769
+ * Creates slider state with value math, step snapping, and multi-thumb support.
4770
+ *
4771
+ * Extends createModel for useProxyModel compatibility. Each thumb is a model
4772
+ * ticket with a shallowRef<number> value. Values are derived from the ordered
4773
+ * tickets, enabling proper registration/unregistration lifecycle.
4774
+ *
4775
+ * @param options Slider configuration.
4776
+ * @returns Slider context with values, math functions, and thumb operations.
4777
+ *
4778
+ * @see https://0.vuetifyjs.com/composables/forms/create-slider
4779
+ * @see {@link createModel} for the base model composable.
4780
+ *
4781
+ * @example Single thumb
4782
+ * ```ts
4783
+ * import { createSlider } from '@vuetify/v0'
4784
+ *
4785
+ * const slider = createSlider({ min: 0, max: 100, step: 5 })
4786
+ * const ticket = slider.register({ value: 50 })
4787
+ * slider.up(0) // values: [55]
4788
+ * slider.fromValue(50) // 50
4789
+ * ```
4790
+ *
4791
+ * @example Range slider
4792
+ * ```ts
4793
+ * import { createSlider } from '@vuetify/v0'
4794
+ *
4795
+ * const slider = createSlider({ min: 0, max: 100, step: 1, range: true })
4796
+ * slider.register({ value: 25 })
4797
+ * slider.register({ value: 75 })
4798
+ * slider.set(0, 30) // values: [30, 75]
4799
+ * slider.set(1, 60) // values: [30, 60]
4800
+ * ```
4801
+ *
4802
+ * @example Custom pointer interaction (media scrubber)
4803
+ * ```ts
4804
+ * import { createSlider } from '@vuetify/v0'
4805
+ *
4806
+ * const slider = createSlider({ min: 0, max: 217, step: 0.1 })
4807
+ * slider.register({ value: 0 })
4808
+ *
4809
+ * // pointer → fromPercent → set → fromValue → UI
4810
+ * const percent = (clientX - rect.left) / rect.width * 100
4811
+ * slider.set(0, slider.fromPercent(percent))
4812
+ * const position = slider.fromValue(slider.values.value[0])
4813
+ * ```
4814
+ */
4815
+ declare function createSlider(options?: SliderOptions): SliderContext;
4816
+ //#endregion
4068
4817
  //#region src/composables/useStack/index.d.ts
4069
4818
  /**
4070
4819
  * Input type for stack tickets - what users provide to register().
@@ -4493,6 +5242,8 @@ interface StorageOptions {
4493
5242
  read: (value: string) => unknown;
4494
5243
  write: (value: unknown) => string;
4495
5244
  };
5245
+ /** Time-to-live in milliseconds. When set, expired entries return the default value on `get()` and `set()` automatically timestamps entries. */
5246
+ ttl?: number;
4496
5247
  }
4497
5248
  interface StorageContextOptions extends StorageOptions {
4498
5249
  /** The namespace for the storage context. Defaults to `v0:storage` */
@@ -5320,4 +6071,4 @@ declare function createVirtualContext<T = unknown>(items: Ref<readonly T[]>, _op
5320
6071
  */
5321
6072
  declare function useVirtual<T = unknown>(namespace?: string): VirtualContext<T>;
5322
6073
  //#endregion
5323
- export { useStep as $, SelectionContextOptions as $i, UseHotkeyReturn as $n, BreakpointName as $r, NestedTicketInput as $t, createTheme as A, GroupOptions as Ai, createLocaleFallback as An, TokenValue as Ar, PermissionContextOptions as At, StorageOptions as B, BreadcrumbsOptions as Bi, useElementIntersection as Bn, DateContextOptions as Br, createNested as Bt, ThemeContext as C, OverflowContextOptions as Ci, LocaleOptions as Cn, TokenAlias as Cr, useQueue as Ct, ThemeRecord as D, useOverflow as Di, LocaleTicketInput as Dn, TokenOptions as Dr, ProxyModelOptions as Dt, ThemePluginOptions as E, createOverflowContext as Ei, LocaleTicket as En, TokenContextOptions as Er, useProxyRegistry as Et, Vuetify0ThemeOptions as F, useGroup as Fi, useLazy as Fn, EventHandler as Fr, createPermissionsContext as Ft, useStorage as G, SingleContextOptions as Gi, HydrationPluginOptions as Gn, createDatePlugin as Gr, NestedActiveMode as Gt, createStorage as H, createBreadcrumbsContext as Hi, HydrationContext as Hn, DatePluginOptions as Hr, useNested as Ht, ThemeAdapter as I, BreadcrumbTicket as Ii, IntersectionObserverEntry as In, useDocumentEventListener as Ir, createPermissionsPlugin as It, StepOptions as J, SingleTicketInput as Ji, createHydrationContext as Jn, ClickOutsideIgnoreTarget as Jr, NestedOpenMode as Jt, StepContext as K, SingleOptions as Ki, createFallbackHydration as Kn, useDate as Kr, NestedContext as Kt, ThemeAdapterInterface as L, BreadcrumbTicketInput as Li, IntersectionObserverOptions as Ln, useEventListener as Lr, usePermissions as Lt, createThemePlugin as M, GroupTicketInput as Mi, useLocale as Mn, createTokensContext as Mr, PermissionPluginOptions as Mt, useTheme as N, createGroup as Ni, LazyContext as Nn, useTokens as Nr, PermissionTicket as Nt, ThemeTicket as O, GroupContext as Oi, createLocale as On, TokenPrimitive as Or, useProxyModel as Ot, Vuetify0ThemeAdapter as P, createGroupContext as Pi, LazyOptions as Pn, CleanupFunction as Pr, createPermissions as Pt, createStepContext as Q, SelectionContext as Qi, UseHotkeyOptions as Qn, useClickOutside as Qr, NestedTicket as Qt, StorageContext as R, BreadcrumbsContext as Ri, UseElementIntersectionReturn as Rn, useWindowEventListener as Rr, PermissionAdapter as Rt, ThemeColors as S, OverflowContext as Si, LocaleContextOptions as Sn, FlatTokenCollection as Sr, createQueueContext as St, ThemeOptions as T, createOverflow as Ti, LocaleRecord as Tn, TokenContext as Tr, ProxyRegistryOptions as Tt, createStorageContext as U, useBreadcrumbs as Ui, HydrationContextOptions as Un, createDate as Ur, multipleOpenStrategy as Ut, StoragePluginOptions as V, createBreadcrumbs as Vi, useIntersectionObserver as Vn, DateOptions as Vr, createNestedContext as Vt, createStoragePlugin as W, SingleContext as Wi, HydrationOptions as Wn, createDateContext as Wr, singleOpenStrategy as Wt, StepTicketInput as X, createSingleContext as Xi, useHydration as Xn, UseClickOutsideOptions as Xr, NestedRegistration as Xt, StepTicket as Y, createSingle as Yi, createHydrationPlugin as Yn, ClickOutsideTarget as Yr, NestedOptions as Yt, createStep as Z, useSingle as Zi, PlatformContext as Zn, UseClickOutsideReturn as Zr, NestedSelectionMode as Zt, TimelineTicket as _, ContextKey as _i, createLoggerContext as _n, FeatureTicketInput as _r, QueueContextOptions as _t, VirtualDirection as a, useSelection as aa, createBreakpointsContext as ai, UseMutationObserverReturn as an, FormTicketInput as ar, StackTicketInput as at, useTimeline as b, provideContext as bi, LogLevel as bn, createFeaturesPlugin as br, QueueTicketInput as bt, VirtualState as c, RegistryEventCallback as ca, toReactive as ci, useMediaQuery as cn, FormValue as cr, createStackPlugin as ct, useVirtual as d, RegistryOptions as da, toArray as di, usePrefersReducedMotion as dn, useForm as dr, ResizeObserverOptions as dt, SelectionOptions as ea, BreakpointsContext as ei, OpenStrategy as en, useHotkey as er, StackContext as et, ToggleScopeControls as f, RegistryTicket as fa, Plugin as fi, LoggerContext as fn, FeatureContext as fr, UseElementSizeReturn as ft, TimelineOptions as g, useRegistry as ga, createPluginContext as gi, createLogger as gn, FeatureTicket as gr, QueueContext as gt, TimelineContextOptions as h, createRegistryContext as ha, createPlugin as hi, LoggerPluginOptions as hn, FeaturePluginOptions as hr, useResizeObserver as ht, VirtualContextOptions as i, createSelectionContext as ia, createBreakpoints as ii, UseMutationObserverOptions as in, FormTicket as ir, StackTicket as it, createThemeContext as j, GroupTicket as ji, createLocalePlugin as jn, createTokens as jr, PermissionOptions as jt, ThemeTicketInput as k, GroupContextOptions as ki, createLocaleContext as kn, TokenTicket as kr, PermissionContext as kt, createVirtual as l, RegistryEventMap as la, MaybeElementRef as li, usePrefersContrast as ln, createForm as lr, useStack as lt, TimelineContext as m, createRegistry as ma, PluginOptions as mi, LoggerOptions as mn, FeatureOptions as mr, useElementSize as mt, VirtualAnchor as n, SelectionTicketInput as na, BreakpointsOptions as ni, MutationObserverRecord as nn, FormContextOptions as nr, StackOptions as nt, VirtualItem as o, RegistryContext as oa, createBreakpointsPlugin as oi, useMutationObserver as on, FormValidationResult as or, createStack as ot, useToggleScope as p, RegistryTicketInput as pa, PluginContextConfig as pi, LoggerContextOptions as pn, FeatureContextOptions as pr, UseResizeObserverReturn as pt, StepContextOptions as q, SingleTicket as qi, createHydration as qn, ClickOutsideElement as qr, NestedContextOptions as qt, VirtualContext as r, createSelection as ra, BreakpointsPluginOptions as ri, ObservableNodeList as rn, FormOptions as rr, StackPluginOptions as rt, VirtualOptions as s, RegistryContextOptions as sa, useBreakpoints as si, MediaQueryContext as sn, FormValidationRule as sr, createStackContext as st, ScrollToOptions as t, SelectionTicket as ta, BreakpointsContextOptions as ti, OpenStrategyContext as tn, FormContext as tr, StackContextOptions as tt, createVirtualContext as u, RegistryEventName as ua, toElement as ui, usePrefersDark as un, createFormContext as ur, ResizeObserverEntry as ut, createTimeline as v, CreateContextOptions as vi, createLoggerPlugin as vn, createFeatures as vr, QueueOptions as vt, ThemeContextOptions as w, OverflowOptions as wi, LocalePluginOptions as wn, TokenCollection as wr, ProxyRegistryContext as wt, Colors as x, useContext as xi, LocaleContext as xn, useFeatures as xr, createQueue as xt, createTimelineContext as y, createContext as yi, useLogger as yn, createFeaturesContext as yr, QueueTicket as yt, StorageContextOptions as z, BreadcrumbsContextOptions as zi, UseIntersectionObserverReturn as zn, DateContext as zr, PermissionAdapterInterface as zt };
6074
+ export { useStep as $, SingleTicketInput as $i, createHydrationContext as $n, ClickOutsideIgnoreTarget as $r, NestedOpenMode as $t, createTheme as A, createOverflow as Ai, LocaleRecord as An, TokenContext as Ar, useProxyRegistry as At, StorageOptions as B, useGroup as Bi, useLazy as Bn, EventHandler as Br, createPermissionsContext as Bt, ThemeContext as C, RegistryTicketInput as Ca, CreateContextOptions as Ci, createLoggerPlugin as Cn, createFeatures as Cr, QueueTicket as Ct, ThemeRecord as D, OverflowContext as Di, LocaleContextOptions as Dn, FlatTokenCollection as Dr, useQueue as Dt, ThemePluginOptions as E, useRegistry as Ea, useContext as Ei, LocaleContext as En, useFeatures as Er, createQueueContext as Et, Vuetify0ThemeOptions as F, GroupOptions as Fi, createLocaleFallback as Fn, TokenValue as Fr, PermissionContextOptions as Ft, useStorage as G, BreadcrumbsOptions as Gi, useElementIntersection as Gn, DateContextOptions as Gr, createNested as Gt, createStorage as H, BreadcrumbTicketInput as Hi, IntersectionObserverOptions as Hn, useEventListener as Hr, usePermissions as Ht, ThemeAdapter as I, GroupTicket as Ii, createLocalePlugin as In, createTokens as Ir, PermissionOptions as It, StepOptions as J, useBreadcrumbs as Ji, HydrationContextOptions as Jn, createDate as Jr, multipleOpenStrategy as Jt, StepContext as K, createBreadcrumbs as Ki, useIntersectionObserver as Kn, DateOptions as Kr, createNestedContext as Kt, ThemeAdapterInterface as L, GroupTicketInput as Li, useLocale as Ln, createTokensContext as Lr, PermissionPluginOptions as Lt, createThemePlugin as M, useOverflow as Mi, LocaleTicketInput as Mn, TokenOptions as Mr, ProxyModelTarget as Mt, useTheme as N, GroupContext as Ni, createLocale as Nn, TokenPrimitive as Nr, useProxyModel as Nt, ThemeTicket as O, OverflowContextOptions as Oi, LocaleOptions as On, TokenAlias as Or, ProxyRegistryContext as Ot, Vuetify0ThemeAdapter as P, GroupContextOptions as Pi, createLocaleContext as Pn, TokenTicket as Pr, PermissionContext as Pt, createStepContext as Q, SingleTicket as Qi, createHydration as Qn, ClickOutsideElement as Qr, NestedContextOptions as Qt, StorageContext as R, createGroup as Ri, LazyContext as Rn, useTokens as Rr, PermissionTicket as Rt, ThemeColors as S, RegistryTicket as Sa, ContextKey as Si, createLoggerContext as Sn, FeatureTicketInput as Sr, QueueOptions as St, ThemeOptions as T, createRegistryContext as Ta, provideContext as Ti, LogLevel as Tn, createFeaturesPlugin as Tr, createQueue as Tt, createStorageContext as U, BreadcrumbsContext as Ui, UseElementIntersectionReturn as Un, useWindowEventListener as Ur, PermissionAdapter as Ut, StoragePluginOptions as V, BreadcrumbTicket as Vi, IntersectionObserverEntry as Vn, useDocumentEventListener as Vr, createPermissionsPlugin as Vt, createStoragePlugin as W, BreadcrumbsContextOptions as Wi, UseIntersectionObserverReturn as Wn, DateContext as Wr, PermissionAdapterInterface as Wt, StepTicketInput as X, SingleContextOptions as Xi, HydrationPluginOptions as Xn, createDatePlugin as Xr, NestedActiveMode as Xt, StepTicket as Y, SingleContext as Yi, HydrationOptions as Yn, createDateContext as Yr, singleOpenStrategy as Yt, createStep as Z, SingleOptions as Zi, createFallbackHydration as Zn, useDate as Zr, NestedContext as Zt, TimelineTicket as _, RegistryContextOptions as _a, Plugin as _i, LoggerContext as _n, FeatureContext as _r, UseResizeObserverReturn as _t, VirtualDirection as a, SelectionOptions as aa, BreakpointsContext as ai, OpenStrategy as an, useHotkey as ar, StackTicketInput as at, useTimeline as b, RegistryEventName as ba, createPlugin as bi, LoggerPluginOptions as bn, FeaturePluginOptions as br, QueueContext as bt, VirtualState as c, createSelection as ca, BreakpointsPluginOptions as ci, ObservableNodeList as cn, FormOptions as cr, createStackPlugin as ct, useVirtual as d, ModelContext as da, createBreakpointsPlugin as di, useMutationObserver as dn, FormValidationResult as dr, SliderOptions as dt, createSingle as ea, ClickOutsideTarget as ei, NestedOptions as en, createHydrationPlugin as er, StackContext as et, ToggleScopeControls as f, ModelOptions as fa, useBreakpoints as fi, MediaQueryContext as fn, FormValidationRule as fr, SliderTicketInput as ft, TimelineOptions as g, RegistryContext as ga, toArray as gi, usePrefersReducedMotion as gn, useForm as gr, UseElementSizeReturn as gt, TimelineContextOptions as h, createModel as ha, toElement as hi, usePrefersDark as hn, createFormContext as hr, ResizeObserverOptions as ht, VirtualContextOptions as i, SelectionContextOptions as ia, BreakpointName as ii, NestedTicketInput as in, UseHotkeyReturn as ir, StackTicket as it, createThemeContext as j, createOverflowContext as ji, LocaleTicket as jn, TokenContextOptions as jr, ProxyModelOptions as jt, ThemeTicketInput as k, OverflowOptions as ki, LocalePluginOptions as kn, TokenCollection as kr, ProxyRegistryOptions as kt, createVirtual as l, createSelectionContext as la, createBreakpoints as li, UseMutationObserverOptions as ln, FormTicket as lr, useStack as lt, TimelineContext as m, ModelTicketInput as ma, MaybeElementRef as mi, usePrefersContrast as mn, createForm as mr, ResizeObserverEntry as mt, VirtualAnchor as n, useSingle as na, UseClickOutsideReturn as ni, NestedSelectionMode as nn, PlatformContext as nr, StackOptions as nt, VirtualItem as o, SelectionTicket as oa, BreakpointsContextOptions as oi, OpenStrategyContext as on, FormContext as or, createStack as ot, useToggleScope as p, ModelTicket as pa, toReactive as pi, useMediaQuery as pn, FormValue as pr, createSlider as pt, StepContextOptions as q, createBreadcrumbsContext as qi, HydrationContext as qn, DatePluginOptions as qr, useNested as qt, VirtualContext as r, SelectionContext as ra, useClickOutside as ri, NestedTicket as rn, UseHotkeyOptions as rr, StackPluginOptions as rt, VirtualOptions as s, SelectionTicketInput as sa, BreakpointsOptions as si, MutationObserverRecord as sn, FormContextOptions as sr, createStackContext as st, ScrollToOptions as t, createSingleContext as ta, UseClickOutsideOptions as ti, NestedRegistration as tn, useHydration as tr, StackContextOptions as tt, createVirtualContext as u, useSelection as ua, createBreakpointsContext as ui, UseMutationObserverReturn as un, FormTicketInput as ur, SliderContext as ut, createTimeline as v, RegistryEventCallback as va, PluginContextConfig as vi, LoggerContextOptions as vn, FeatureContextOptions as vr, useElementSize as vt, ThemeContextOptions as w, createRegistry as wa, createContext as wi, useLogger as wn, createFeaturesContext as wr, QueueTicketInput as wt, Colors as x, RegistryOptions as xa, createPluginContext as xi, createLogger as xn, FeatureTicket as xr, QueueContextOptions as xt, createTimelineContext as y, RegistryEventMap as ya, PluginOptions as yi, LoggerOptions as yn, FeatureOptions as yr, useResizeObserver as yt, StorageContextOptions as z, createGroupContext as zi, LazyOptions as zn, CleanupFunction as zr, createPermissions as zt };