@wow-two-beta/ui-vue 0.0.5 → 0.0.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.
- package/README.md +201 -65
- package/dist/analytics/Analytics.d.ts +5 -5
- package/dist/analytics/AnalyticsProvider.d.ts +1 -1
- package/dist/analytics/MemoryAnalyticsProvider.d.ts +4 -4
- package/dist/analytics/index.js +9 -1
- package/dist/analytics/index.js.map +1 -1
- package/dist/auth/AuthBridge.d.ts +4 -4
- package/dist/auth/AuthSession.d.ts +14 -7
- package/dist/auth/BearerStrategy.d.ts +12 -8
- package/dist/auth/CookieStrategy.d.ts +11 -8
- package/dist/auth/RedirectStrategy.d.ts +2 -2
- package/dist/auth/TokenStorage.d.ts +2 -2
- package/dist/auth/index.d.ts +4 -4
- package/dist/auth/index.js +138 -64
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/providers/AuthContext.d.ts +43 -0
- package/dist/auth/providers/AuthProvider.vue.d.ts +39 -0
- package/dist/chunks/Align-DqFtCY3a.js.map +1 -1
- package/dist/chunks/AnchoredPositioner.vue_vue_type_script_setup_true_lang-BpBVI2Cu.js.map +1 -1
- package/dist/chunks/Announce.vue_vue_type_script_setup_true_lang-QM4vCs2n.js +46 -0
- package/dist/chunks/Announce.vue_vue_type_script_setup_true_lang-QM4vCs2n.js.map +1 -0
- package/dist/chunks/ApiError-_AOua_XE.js +41 -0
- package/dist/chunks/ApiError-_AOua_XE.js.map +1 -0
- package/dist/chunks/AppErrorFactory-DCdNbVfv.js +54 -0
- package/dist/chunks/AppErrorFactory-DCdNbVfv.js.map +1 -0
- package/dist/chunks/AriaAttribute-CmUjjXjp.js +42 -0
- package/dist/chunks/AriaAttribute-CmUjjXjp.js.map +1 -0
- package/dist/chunks/BackToTopButton.vue_vue_type_script_setup_true_lang-CSRUFdcY.js +936 -0
- package/dist/chunks/BackToTopButton.vue_vue_type_script_setup_true_lang-CSRUFdcY.js.map +1 -0
- package/dist/chunks/BackdropOverlay.vue_vue_type_script_setup_true_lang-DM8CjnY2.js +76 -0
- package/dist/chunks/BackdropOverlay.vue_vue_type_script_setup_true_lang-DM8CjnY2.js.map +1 -0
- package/dist/chunks/Button.vue_vue_type_script_setup_true_lang-CLqRVtAu.js +632 -0
- package/dist/chunks/Button.vue_vue_type_script_setup_true_lang-CLqRVtAu.js.map +1 -0
- package/dist/chunks/Bytes-CzQrdbN4.js +21 -0
- package/dist/chunks/Bytes-CzQrdbN4.js.map +1 -0
- package/dist/chunks/CharacterCountCallout.vue_vue_type_script_setup_true_lang-CJaPwXly.js +2076 -0
- package/dist/chunks/CharacterCountCallout.vue_vue_type_script_setup_true_lang-CJaPwXly.js.map +1 -0
- package/dist/chunks/Chord-C3OKRsgk.js +139 -0
- package/dist/chunks/Chord-C3OKRsgk.js.map +1 -0
- package/dist/chunks/Cn-CzDCF-Ah.js +9 -0
- package/dist/chunks/Cn-CzDCF-Ah.js.map +1 -0
- package/dist/chunks/ColorExtensions-DiCSaVbJ.js +53 -0
- package/dist/chunks/ColorExtensions-DiCSaVbJ.js.map +1 -0
- package/dist/chunks/ColorModeContext-DC77vyvQ.js +19 -0
- package/dist/chunks/ColorModeContext-DC77vyvQ.js.map +1 -0
- package/dist/chunks/CommandPaletteModalSeparator.vue_vue_type_script_setup_true_lang-B6FGFSfj.js +2080 -0
- package/dist/chunks/CommandPaletteModalSeparator.vue_vue_type_script_setup_true_lang-B6FGFSfj.js.map +1 -0
- package/dist/chunks/Compare-C5NGppdh.js +35 -0
- package/dist/chunks/Compare-C5NGppdh.js.map +1 -0
- package/dist/chunks/ComposeEventHandlers-rgxao5aD.js +12 -0
- package/dist/chunks/ComposeEventHandlers-rgxao5aD.js.map +1 -0
- package/dist/chunks/CornerPosition-FneGck5D.js.map +1 -1
- package/dist/chunks/CssExtensions-ctGVlfYU.js +161 -0
- package/dist/chunks/CssExtensions-ctGVlfYU.js.map +1 -0
- package/dist/chunks/DataAttr-7BR67dTj.js +7 -0
- package/dist/chunks/DataAttr-7BR67dTj.js.map +1 -0
- package/dist/chunks/DeepEqual-xCcUOAA8.js +131 -0
- package/dist/chunks/DeepEqual-xCcUOAA8.js.map +1 -0
- package/dist/chunks/DismissableLayer.vue_vue_type_script_setup_true_lang-DElE4ZeQ.js +322 -0
- package/dist/chunks/DismissableLayer.vue_vue_type_script_setup_true_lang-DElE4ZeQ.js.map +1 -0
- package/dist/chunks/DomOrderExtensions-Czsyvn6e.js +16 -0
- package/dist/chunks/DomOrderExtensions-Czsyvn6e.js.map +1 -0
- package/dist/chunks/DrawerContent.vue_vue_type_script_setup_true_lang-dLwafPAj.js +212 -0
- package/dist/chunks/DrawerContent.vue_vue_type_script_setup_true_lang-dLwafPAj.js.map +1 -0
- package/dist/chunks/EmojiCatalog-CR4Lcm43.js.map +1 -1
- package/dist/chunks/Environment-BLuXHzzF.js +16 -0
- package/dist/chunks/Environment-BLuXHzzF.js.map +1 -0
- package/dist/chunks/Equality-BabbLMBX.js +27 -0
- package/dist/chunks/Equality-BabbLMBX.js.map +1 -0
- package/dist/chunks/ErrorLike-CRnbeEM0.js +27 -0
- package/dist/chunks/ErrorLike-CRnbeEM0.js.map +1 -0
- package/dist/chunks/ErrorRecognizers-DO2SHD6N.js +17 -0
- package/dist/chunks/ErrorRecognizers-DO2SHD6N.js.map +1 -0
- package/dist/chunks/ExactNumber-CboRl3_0.js +224 -0
- package/dist/chunks/ExactNumber-CboRl3_0.js.map +1 -0
- package/dist/chunks/FeedbackBus-CTj18X4n.js.map +1 -1
- package/dist/chunks/FieldErrorCallout.vue_vue_type_script_setup_true_lang-C185v77U.js +55 -0
- package/dist/chunks/FieldErrorCallout.vue_vue_type_script_setup_true_lang-C185v77U.js.map +1 -0
- package/dist/chunks/FieldErrors-DIHjOm5W.js +57 -0
- package/dist/chunks/FieldErrors-DIHjOm5W.js.map +1 -0
- package/dist/chunks/FieldHelperText.vue_vue_type_script_setup_true_lang-YYE7Zysp.js +497 -0
- package/dist/chunks/FieldHelperText.vue_vue_type_script_setup_true_lang-YYE7Zysp.js.map +1 -0
- package/dist/chunks/FileName-DUtj4I5A.js +33 -0
- package/dist/chunks/FileName-DUtj4I5A.js.map +1 -0
- package/dist/chunks/FormControlContext-B71MFW26.js.map +1 -1
- package/dist/chunks/FormControlProvider.vue_vue_type_script_setup_true_lang-D_yikT2o.js +70 -0
- package/dist/chunks/FormControlProvider.vue_vue_type_script_setup_true_lang-D_yikT2o.js.map +1 -0
- package/dist/chunks/GoogleIdentity-D12Kr334.js +123 -0
- package/dist/chunks/GoogleIdentity-D12Kr334.js.map +1 -0
- package/dist/chunks/Guid-CflnxKPZ.js +68 -0
- package/dist/chunks/Guid-CflnxKPZ.js.map +1 -0
- package/dist/chunks/HtmlValues-jlKY5f9C.js +23 -0
- package/dist/chunks/HtmlValues-jlKY5f9C.js.map +1 -0
- package/dist/chunks/Icon.vue_vue_type_script_setup_true_lang-BVWSqaoe.js +28 -0
- package/dist/chunks/Icon.vue_vue_type_script_setup_true_lang-BVWSqaoe.js.map +1 -0
- package/dist/chunks/InlineLayout.vue_vue_type_script_setup_true_lang-CdG8lfst.js +68 -0
- package/dist/chunks/InlineLayout.vue_vue_type_script_setup_true_lang-CdG8lfst.js.map +1 -0
- package/dist/chunks/Key-CQlkK53D.js +34 -0
- package/dist/chunks/Key-CQlkK53D.js.map +1 -0
- package/dist/chunks/LinkItem.vue_vue_type_script_setup_true_lang-BjPIqvPc.js +1809 -0
- package/dist/chunks/LinkItem.vue_vue_type_script_setup_true_lang-BjPIqvPc.js.map +1 -0
- package/dist/chunks/LocaleContext-B7vUZmX-.js +41 -0
- package/dist/chunks/LocaleContext-B7vUZmX-.js.map +1 -0
- package/dist/chunks/Messages-CSW3nyTs.js +201 -0
- package/dist/chunks/Messages-CSW3nyTs.js.map +1 -0
- package/dist/chunks/NavItem.vue_vue_type_script_setup_true_lang-ed_LzXDI.js +86 -0
- package/dist/chunks/NavItem.vue_vue_type_script_setup_true_lang-ed_LzXDI.js.map +1 -0
- package/dist/chunks/OnboardingChecklistCardTask.vue_vue_type_script_setup_true_lang-vqTtyR9L.js +9796 -0
- package/dist/chunks/OnboardingChecklistCardTask.vue_vue_type_script_setup_true_lang-vqTtyR9L.js.map +1 -0
- package/dist/chunks/OptionalExtensions-NiO6gV0W.js +10 -0
- package/dist/chunks/OptionalExtensions-NiO6gV0W.js.map +1 -0
- package/dist/chunks/Orientation-u-sYunuG.js.map +1 -1
- package/dist/chunks/OverlayArrow.vue_vue_type_script_setup_true_lang-CLYhnI8i.js.map +1 -1
- package/dist/chunks/OverlayPosition-BNybkMGG.js.map +1 -1
- package/dist/chunks/PopoverContent.vue_vue_type_script_setup_true_lang-DPJZHdv2.js +268 -0
- package/dist/chunks/PopoverContent.vue_vue_type_script_setup_true_lang-DPJZHdv2.js.map +1 -0
- package/dist/chunks/Portal.vue_vue_type_script_setup_true_lang-C2_xSIMy.js +32 -0
- package/dist/chunks/Portal.vue_vue_type_script_setup_true_lang-C2_xSIMy.js.map +1 -0
- package/dist/chunks/Presence-BwBquQOQ.js +138 -0
- package/dist/chunks/Presence-BwBquQOQ.js.map +1 -0
- package/dist/chunks/PressExtensions-DXqhjlR2.js.map +1 -1
- package/dist/chunks/Primitive-Bt_MgDir.js +20 -0
- package/dist/chunks/Primitive-Bt_MgDir.js.map +1 -0
- package/dist/chunks/ProgressTone-BpLPUptx.js.map +1 -1
- package/dist/chunks/QueryPermission-BsLR2WRk.js +94 -0
- package/dist/chunks/QueryPermission-BsLR2WRk.js.map +1 -0
- package/dist/chunks/QueryPlugin-CfotNm6j.js.map +1 -1
- package/dist/chunks/ResultExtensions-B7dWH0FZ.js +58 -0
- package/dist/chunks/ResultExtensions-B7dWH0FZ.js.map +1 -0
- package/dist/chunks/RovingFocusGroup.vue_vue_type_script_setup_true_lang-BGZe5AX4.js +244 -0
- package/dist/chunks/RovingFocusGroup.vue_vue_type_script_setup_true_lang-BGZe5AX4.js.map +1 -0
- package/dist/chunks/ScrollLockProvider.vue_vue_type_script_setup_true_lang-DAYt3wgP.js +20 -0
- package/dist/chunks/ScrollLockProvider.vue_vue_type_script_setup_true_lang-DAYt3wgP.js.map +1 -0
- package/dist/chunks/SerializeError-BzTdy-3I.js +61 -0
- package/dist/chunks/SerializeError-BzTdy-3I.js.map +1 -0
- package/dist/chunks/Severity-D0C5oAt-.js.map +1 -1
- package/dist/chunks/Side-Kw61CDou.js +14 -0
- package/dist/chunks/Side-Kw61CDou.js.map +1 -0
- package/dist/chunks/Slot-CLT4PkWl.js +99 -0
- package/dist/chunks/Slot-CLT4PkWl.js.map +1 -0
- package/dist/chunks/SortableGroupMoveButton.vue_vue_type_script_setup_true_lang-TLzaptOC.js +14429 -0
- package/dist/chunks/SortableGroupMoveButton.vue_vue_type_script_setup_true_lang-TLzaptOC.js.map +1 -0
- package/dist/chunks/Spinner.vue_vue_type_script_setup_true_lang-CU7oxE3n.js +23 -0
- package/dist/chunks/Spinner.vue_vue_type_script_setup_true_lang-CU7oxE3n.js.map +1 -0
- package/dist/chunks/Spinner.vue_vue_type_script_setup_true_lang-jgKrZLIK.js +76 -0
- package/dist/chunks/Spinner.vue_vue_type_script_setup_true_lang-jgKrZLIK.js.map +1 -0
- package/dist/chunks/StackLayout.vue_vue_type_script_setup_true_lang-BTht83c-.js +172 -0
- package/dist/chunks/StackLayout.vue_vue_type_script_setup_true_lang-BTht83c-.js.map +1 -0
- package/dist/chunks/StatusTone-BoPK1s09.js.map +1 -1
- package/dist/chunks/StorageBroker-COC81ZGB.js.map +1 -1
- package/dist/chunks/StyleTokens-Bkz7Dm5L.js.map +1 -1
- package/dist/chunks/SubmitErrors-1_5oKOb1.js +402 -0
- package/dist/chunks/SubmitErrors-1_5oKOb1.js.map +1 -0
- package/dist/chunks/SurfaceStyles-BYLzCbuJ.js +144 -0
- package/dist/chunks/SurfaceStyles-BYLzCbuJ.js.map +1 -0
- package/dist/chunks/SwipeActionsLayout.vue_vue_type_script_setup_true_lang-Dc0UJfs9.js +2388 -0
- package/dist/chunks/SwipeActionsLayout.vue_vue_type_script_setup_true_lang-Dc0UJfs9.js.map +1 -0
- package/dist/chunks/ToError-vXncXe19.js +52 -0
- package/dist/chunks/ToError-vXncXe19.js.map +1 -0
- package/dist/chunks/Tones-DSlTgkaB.js +108 -0
- package/dist/chunks/Tones-DSlTgkaB.js.map +1 -0
- package/dist/chunks/TransitionExtensions-HyBfcJnn.js +19 -0
- package/dist/chunks/TransitionExtensions-HyBfcJnn.js.map +1 -0
- package/dist/chunks/UrlExtensions-DqgLm0KY.js +46 -0
- package/dist/chunks/UrlExtensions-DqgLm0KY.js.map +1 -0
- package/dist/chunks/UseClipboard-x6nEdQ9f.js +230 -0
- package/dist/chunks/UseClipboard-x6nEdQ9f.js.map +1 -0
- package/dist/chunks/UseControlled-BQneb7BW.js +29 -0
- package/dist/chunks/UseControlled-BQneb7BW.js.map +1 -0
- package/dist/chunks/UseDebounceHandler-BIZgvvGp.js +20 -0
- package/dist/chunks/UseDebounceHandler-BIZgvvGp.js.map +1 -0
- package/dist/chunks/UseEscape-CYPdpm_l.js +15 -0
- package/dist/chunks/UseEscape-CYPdpm_l.js.map +1 -0
- package/dist/chunks/UseEventListener-C1WgWGoT.js +17 -0
- package/dist/chunks/UseEventListener-C1WgWGoT.js.map +1 -0
- package/dist/chunks/UseHotkeys-dSOwoutT.js +82 -0
- package/dist/chunks/UseHotkeys-dSOwoutT.js.map +1 -0
- package/dist/chunks/UseId-CtgAhGrn.js +9 -0
- package/dist/chunks/UseId-CtgAhGrn.js.map +1 -0
- package/dist/chunks/UseNavigationProgress-Bx_MWd39.js +51 -0
- package/dist/chunks/UseNavigationProgress-Bx_MWd39.js.map +1 -0
- package/dist/chunks/UseOutsideClick-8TTSb9x6.js +57 -0
- package/dist/chunks/UseOutsideClick-8TTSb9x6.js.map +1 -0
- package/dist/chunks/UseRecentItems-Bgj28t5Y.js +63 -0
- package/dist/chunks/UseRecentItems-Bgj28t5Y.js.map +1 -0
- package/dist/chunks/UseReducedMotion-NZ5fg-Xb.js +36 -0
- package/dist/chunks/UseReducedMotion-NZ5fg-Xb.js.map +1 -0
- package/dist/chunks/UseResizeObserver-BUU7lC-n.js +17 -0
- package/dist/chunks/UseResizeObserver-BUU7lC-n.js.map +1 -0
- package/dist/chunks/UseScrollLock-DSk4L9xF.js +38 -0
- package/dist/chunks/UseScrollLock-DSk4L9xF.js.map +1 -0
- package/dist/chunks/UseTypeahead-C-y7nBo2.js +82 -0
- package/dist/chunks/UseTypeahead-C-y7nBo2.js.map +1 -0
- package/dist/chunks/index-BNxprnsV.js +81 -0
- package/dist/chunks/index-BNxprnsV.js.map +1 -0
- package/dist/chunks/index-BvFTmSpn.js +251 -0
- package/dist/chunks/index-BvFTmSpn.js.map +1 -0
- package/dist/chunks/index-BzMmo8Zb.js +245 -0
- package/dist/chunks/index-BzMmo8Zb.js.map +1 -0
- package/dist/chunks/index-Ck71aqGg.js +11 -0
- package/dist/chunks/index-Ck71aqGg.js.map +1 -0
- package/dist/chunks/index-ClXOmDLK.js +9 -0
- package/dist/chunks/index-ClXOmDLK.js.map +1 -0
- package/dist/chunks/index-DAbvXWP_.js +118 -0
- package/dist/chunks/index-DAbvXWP_.js.map +1 -0
- package/dist/chunks/index-DOC7DwST.js +12 -0
- package/dist/chunks/index-DOC7DwST.js.map +1 -0
- package/dist/chunks/index-DQ01kvk7.js +28 -0
- package/dist/chunks/index-DQ01kvk7.js.map +1 -0
- package/dist/chunks/index-DqGUKtAH.js +1783 -0
- package/dist/chunks/index-DqGUKtAH.js.map +1 -0
- package/dist/chunks/index-KL15HQew.js.map +1 -1
- package/dist/domain/color/Gradient.d.ts +2 -2
- package/dist/domain/color/index.d.ts +1 -1
- package/dist/domain/emoji/EmojiCatalog.d.ts +4 -4
- package/dist/domain/emoji/EmojiCatalogData.d.ts +1 -1
- package/dist/feedback/FeedbackBus.d.ts +10 -10
- package/dist/feedback/FeedbackQueryErrors.d.ts +5 -20
- package/dist/feedback/index.js +4 -5
- package/dist/feedback/index.js.map +1 -1
- package/dist/flags/FlagClient.d.ts +3 -3
- package/dist/flags/FlagProvider.d.ts +3 -3
- package/dist/flags/FlagTypes.d.ts +6 -6
- package/dist/flags/StaticFlagProvider.d.ts +4 -10
- package/dist/flags/index.d.ts +2 -2
- package/dist/flags/index.js +106 -26
- package/dist/flags/index.js.map +1 -1
- package/dist/flags/providers/FlagsContext.d.ts +31 -0
- package/dist/flags/providers/FlagsProvider.vue.d.ts +24 -0
- package/dist/formsEngine/AppForm.d.ts +259 -0
- package/dist/formsEngine/DeepEqual.d.ts +8 -0
- package/dist/formsEngine/FocusFirstInvalid.d.ts +9 -0
- package/dist/formsEngine/FormGlue.d.ts +54 -0
- package/dist/formsEngine/FormOperations.d.ts +11 -0
- package/dist/formsEngine/FormSnapshot.d.ts +7 -0
- package/dist/formsEngine/Paths.d.ts +47 -0
- package/dist/formsEngine/SchemaValidation.d.ts +39 -0
- package/dist/formsEngine/SubmitErrors.d.ts +28 -0
- package/dist/formsEngine/UseFieldArray.d.ts +87 -0
- package/dist/formsEngine/adapters/house/HouseFormCore.d.ts +34 -0
- package/dist/formsEngine/adapters/house/UseAppForm.d.ts +16 -0
- package/dist/formsEngine/adapters/house/index.js +436 -0
- package/dist/formsEngine/adapters/house/index.js.map +1 -0
- package/dist/formsEngine/adapters/tanstack/TanstackFormOverlay.d.ts +56 -0
- package/dist/formsEngine/adapters/tanstack/UseAppForm.d.ts +26 -0
- package/dist/formsEngine/adapters/tanstack/index.js +516 -0
- package/dist/formsEngine/adapters/tanstack/index.js.map +1 -0
- package/dist/formsEngine/index.d.ts +10 -0
- package/dist/formsEngine/index.js +130 -0
- package/dist/formsEngine/index.js.map +1 -0
- package/dist/foundation/animation/Animate.d.ts +1 -1
- package/dist/foundation/animation/Flip.d.ts +1 -1
- package/dist/foundation/animation/UseFlip.d.ts +1 -1
- package/dist/foundation/animation/animatedLayout/AnimatedLayout.d.ts +72 -0
- package/dist/foundation/animation/animatedLayout/index.d.ts +1 -0
- package/dist/foundation/animation/index.d.ts +5 -3
- package/dist/foundation/animation/index.js +17 -18
- package/dist/foundation/animation/index.js.map +1 -1
- package/dist/foundation/async/Retry.d.ts +1 -1
- package/dist/foundation/async/index.d.ts +1 -0
- package/dist/foundation/async/index.js +12 -6
- package/dist/foundation/async/index.js.map +1 -1
- package/dist/foundation/channels/LeaderElection.d.ts +97 -0
- package/dist/foundation/channels/SyncChannel.d.ts +76 -0
- package/dist/foundation/channels/hooks/UseBroadcastState.d.ts +31 -0
- package/dist/foundation/channels/hooks/UseLeaderElection.d.ts +25 -0
- package/dist/foundation/channels/hooks/UseSyncChannel.d.ts +16 -0
- package/dist/foundation/channels/index.d.ts +7 -0
- package/dist/foundation/channels/index.js +493 -0
- package/dist/foundation/channels/index.js.map +1 -0
- package/dist/foundation/clipboard/ClipboardFailureCode.d.ts +7 -0
- package/dist/foundation/clipboard/ClipboardPermission.d.ts +10 -4
- package/dist/foundation/clipboard/ClipboardResult.d.ts +9 -43
- package/dist/foundation/clipboard/ClipboardSupport.d.ts +14 -3
- package/dist/foundation/clipboard/PasteItems.d.ts +2 -2
- package/dist/foundation/clipboard/ReadClipboard.d.ts +1 -2
- package/dist/foundation/clipboard/hooks/UseClipboard.d.ts +25 -0
- package/dist/foundation/clipboard/hooks/UseClipboardCopy.d.ts +40 -0
- package/dist/foundation/clipboard/hooks/UsePasteHandler.d.ts +35 -0
- package/dist/foundation/clipboard/index.d.ts +5 -3
- package/dist/foundation/clipboard/index.js +52 -186
- package/dist/foundation/clipboard/index.js.map +1 -1
- package/dist/foundation/clipboard/models/ClipboardFailure.d.ts +11 -0
- package/dist/foundation/clipboard/models/ClipboardReadItemsResult.d.ts +5 -0
- package/dist/foundation/clipboard/models/ClipboardReadTextResult.d.ts +4 -0
- package/dist/foundation/clipboard/models/ClipboardWriteResult.d.ts +4 -0
- package/dist/foundation/collections/Arrays.d.ts +12 -12
- package/dist/foundation/collections/Comparison.d.ts +1 -1
- package/dist/foundation/collections/Records.d.ts +3 -3
- package/dist/foundation/collections/SetOps.d.ts +4 -4
- package/dist/foundation/collections/Tree.d.ts +5 -4
- package/dist/foundation/collections/index.d.ts +3 -2
- package/dist/foundation/collections/index.js +98 -94
- package/dist/foundation/collections/index.js.map +1 -1
- package/dist/foundation/commands/Command.d.ts +14 -22
- package/dist/foundation/commands/CommandRegistry.d.ts +11 -10
- package/dist/foundation/commands/CommandRunFailureCode.d.ts +7 -0
- package/dist/foundation/commands/SearchCommands.d.ts +3 -3
- package/dist/foundation/commands/hooks/UseCommandRegistry.d.ts +19 -0
- package/dist/foundation/commands/hooks/UseCommandShortcuts.d.ts +18 -0
- package/dist/foundation/commands/index.d.ts +9 -6
- package/dist/foundation/commands/index.js +16 -22
- package/dist/foundation/commands/index.js.map +1 -1
- package/dist/foundation/commands/models/CommandRunFailure.d.ts +11 -0
- package/dist/foundation/commands/models/CommandRunResult.d.ts +4 -0
- package/dist/foundation/commands/providers/CommandsContext.d.ts +30 -0
- package/dist/foundation/commands/providers/CommandsProvider.vue.d.ts +18 -0
- package/dist/foundation/config/ConfigField.d.ts +2 -2
- package/dist/foundation/config/ConfigSource.d.ts +3 -3
- package/dist/foundation/config/DefineConfig.d.ts +3 -3
- package/dist/foundation/config/Environment.d.ts +12 -0
- package/dist/foundation/config/index.d.ts +2 -1
- package/dist/foundation/config/index.js +11 -7
- package/dist/foundation/config/index.js.map +1 -1
- package/dist/foundation/crypto/Digest.d.ts +18 -4
- package/dist/foundation/crypto/Encoding.d.ts +4 -1
- package/dist/foundation/crypto/Random.d.ts +3 -3
- package/dist/foundation/crypto/WebCrypto.d.ts +2 -2
- package/dist/foundation/crypto/index.d.ts +2 -2
- package/dist/foundation/crypto/index.js +36 -26
- package/dist/foundation/crypto/index.js.map +1 -1
- package/dist/foundation/datetime/Comparison.d.ts +2 -2
- package/dist/foundation/datetime/Internals.d.ts +4 -4
- package/dist/foundation/datetime/TemporalCodecs.d.ts +26 -0
- package/dist/foundation/datetime/index.d.ts +2 -1
- package/dist/foundation/datetime/index.js +147 -20
- package/dist/foundation/datetime/index.js.map +1 -1
- package/dist/foundation/device/Breakpoints.d.ts +4 -10
- package/dist/foundation/device/hooks/UseBreakpoint.d.ts +4 -0
- package/dist/foundation/device/hooks/UseDisplayMode.d.ts +23 -0
- package/dist/foundation/device/hooks/UseMediaQuery.d.ts +14 -0
- package/dist/foundation/device/hooks/UsePointer.d.ts +25 -0
- package/dist/foundation/device/index.d.ts +9 -7
- package/dist/foundation/device/index.js +51 -45
- package/dist/foundation/device/index.js.map +1 -1
- package/dist/foundation/dom/DomOrderExtensions.d.ts +4 -0
- package/dist/foundation/dom/Polymorphic.d.ts +29 -0
- package/dist/foundation/dom/UrlExtensions.d.ts +5 -0
- package/dist/foundation/dom/enums/AriaAttribute.d.ts +48 -0
- package/dist/foundation/dom/enums/AttributeValue.d.ts +9 -0
- package/dist/foundation/dom/enums/DomEvent.d.ts +25 -0
- package/dist/foundation/dom/index.d.ts +16 -0
- package/dist/foundation/dom/index.js +31 -0
- package/dist/foundation/dom/index.js.map +1 -0
- package/dist/foundation/errors/ErrorLike.d.ts +1 -1
- package/dist/foundation/errors/ErrorMessage.d.ts +1 -1
- package/dist/foundation/errors/SerializeError.d.ts +13 -4
- package/dist/foundation/errors/ToError.d.ts +4 -1
- package/dist/foundation/errors/index.js +32 -12
- package/dist/foundation/errors/index.js.map +1 -1
- package/dist/foundation/files/index.d.ts +1 -1
- package/dist/foundation/files/index.js +2 -2
- package/dist/foundation/files/index.js.map +1 -1
- package/dist/foundation/formatters/Text.d.ts +52 -0
- package/dist/foundation/formatters/index.js +102 -0
- package/dist/foundation/formatters/index.js.map +1 -0
- package/dist/foundation/geolocation/DistanceBetween.d.ts +1 -1
- package/dist/foundation/geolocation/GetCurrentPosition.d.ts +3 -3
- package/dist/foundation/geolocation/PositionFailureCode.d.ts +9 -0
- package/dist/foundation/geolocation/PositionMapping.d.ts +50 -0
- package/dist/foundation/geolocation/WatchPosition.d.ts +3 -3
- package/dist/foundation/geolocation/hooks/UseGeolocation.d.ts +38 -0
- package/dist/foundation/geolocation/hooks/UseWatchPosition.d.ts +16 -0
- package/dist/foundation/geolocation/index.d.ts +6 -5
- package/dist/foundation/geolocation/index.js +39 -23
- package/dist/foundation/geolocation/index.js.map +1 -1
- package/dist/foundation/geolocation/models/GeolocationReading.d.ts +37 -0
- package/dist/foundation/geolocation/models/PositionFailure.d.ts +14 -0
- package/dist/foundation/geolocation/models/PositionReadResult.d.ts +5 -0
- package/dist/foundation/gestures/GestureMath.d.ts +4 -4
- package/dist/foundation/gestures/hooks/UseDrag.d.ts +75 -0
- package/dist/foundation/gestures/hooks/UseLongPress.d.ts +42 -0
- package/dist/foundation/gestures/hooks/UsePinch.d.ts +47 -0
- package/dist/foundation/gestures/hooks/UseSwipe.d.ts +46 -0
- package/dist/foundation/gestures/index.d.ts +6 -6
- package/dist/foundation/gestures/index.js +15 -14
- package/dist/foundation/gestures/index.js.map +1 -1
- package/dist/foundation/history/HistoryCore.d.ts +92 -0
- package/dist/foundation/history/hooks/UseUndoHistory.d.ts +66 -0
- package/dist/foundation/history/hooks/UseUndoShortcuts.d.ts +20 -0
- package/dist/foundation/history/index.d.ts +5 -0
- package/dist/foundation/history/index.js +363 -0
- package/dist/foundation/history/index.js.map +1 -0
- package/dist/foundation/http/ApiError.d.ts +7 -4
- package/dist/foundation/http/ApiFailure.d.ts +21 -0
- package/dist/foundation/http/ApiJsonCodec.d.ts +8 -0
- package/dist/foundation/http/CreateApiClient.d.ts +27 -42
- package/dist/foundation/http/Envelope.d.ts +7 -29
- package/dist/foundation/http/FieldErrors.d.ts +1 -1
- package/dist/foundation/http/index.d.ts +6 -5
- package/dist/foundation/http/index.js +123 -124
- package/dist/foundation/http/index.js.map +1 -1
- package/dist/foundation/http/models/Page.d.ts +47 -0
- package/dist/foundation/i18n/IntlCache.d.ts +4 -0
- package/dist/foundation/i18n/formattedRelative/FormattedRelative.vue.d.ts +9 -0
- package/dist/foundation/i18n/formattedRelative/index.d.ts +1 -0
- package/dist/foundation/i18n/index.d.ts +4 -3
- package/dist/foundation/i18n/index.js +13 -22
- package/dist/foundation/i18n/index.js.map +1 -1
- package/dist/foundation/i18n/providers/LocaleContext.d.ts +35 -0
- package/dist/foundation/i18n/providers/LocaleProvider.vue.d.ts +18 -0
- package/dist/foundation/icons/icon/Icon.vue.d.ts +44 -0
- package/dist/foundation/icons/icon/index.d.ts +1 -0
- package/dist/foundation/icons/index.d.ts +2 -2
- package/dist/foundation/icons/index.js +2 -2
- package/dist/foundation/icons/spinner/Spinner.vue.d.ts +6 -0
- package/dist/foundation/icons/spinner/index.d.ts +1 -0
- package/dist/foundation/idb/KeyValueStore.d.ts +3 -3
- package/dist/foundation/idb/Transactions.d.ts +1 -1
- package/dist/foundation/idb/index.d.ts +2 -2
- package/dist/foundation/idb/index.js +21 -4
- package/dist/foundation/idb/index.js.map +1 -1
- package/dist/foundation/identifiers/Guid.d.ts +6 -3
- package/dist/foundation/identifiers/index.d.ts +1 -0
- package/dist/foundation/identifiers/index.js +4 -65
- package/dist/foundation/identifiers/index.js.map +1 -1
- package/dist/foundation/json/JsonFailureCode.d.ts +9 -0
- package/dist/foundation/json/JsonLimits.d.ts +6 -0
- package/dist/foundation/json/JsonText.d.ts +12 -0
- package/dist/foundation/json/LosslessJson.d.ts +8 -0
- package/dist/foundation/json/adapters/losslessJson/JsonAdapter.d.ts +5 -0
- package/dist/foundation/json/index.d.ts +5 -0
- package/dist/foundation/json/index.js +7 -0
- package/dist/foundation/json/index.js.map +1 -0
- package/dist/foundation/json/models/JsonFailure.d.ts +6 -0
- package/dist/foundation/json/models/LosslessJsonValue.d.ts +5 -0
- package/dist/foundation/logger/ConsoleLogSink.d.ts +4 -1
- package/dist/foundation/logger/LogLevel.d.ts +8 -2
- package/dist/foundation/logger/LogRecord.d.ts +2 -2
- package/dist/foundation/logger/LogSink.d.ts +5 -2
- package/dist/foundation/logger/Logger.d.ts +15 -6
- package/dist/foundation/logger/MemoryLogSink.d.ts +1 -1
- package/dist/foundation/logger/Redaction.d.ts +4 -4
- package/dist/foundation/logger/index.js +8 -3
- package/dist/foundation/logger/index.js.map +1 -1
- package/dist/foundation/media/CanCaptureMedia.d.ts +10 -1
- package/dist/foundation/media/FacingMode.d.ts +11 -4
- package/dist/foundation/media/ListMediaDevices.d.ts +8 -5
- package/dist/foundation/media/MediaStreamFailureCode.d.ts +10 -0
- package/dist/foundation/media/MediaStreamMapping.d.ts +15 -0
- package/dist/foundation/media/RequestMediaStream.d.ts +4 -4
- package/dist/foundation/media/UseMediaStream.d.ts +18 -5
- package/dist/foundation/media/index.d.ts +2 -1
- package/dist/foundation/media/index.js +51 -23
- package/dist/foundation/media/index.js.map +1 -1
- package/dist/foundation/media/models/MediaStreamFailure.d.ts +16 -0
- package/dist/foundation/media/models/MediaStreamRequestResult.d.ts +4 -0
- package/dist/foundation/net/ConnectionState.d.ts +6 -3
- package/dist/foundation/net/CreateEventStream.d.ts +10 -4
- package/dist/foundation/net/CreatePoller.d.ts +9 -3
- package/dist/foundation/net/CreateSocketClient.d.ts +5 -5
- package/dist/foundation/net/Liveness.d.ts +1 -1
- package/dist/foundation/net/Reconnect.d.ts +1 -1
- package/dist/foundation/net/hooks/UseEventStream.d.ts +25 -0
- package/dist/foundation/net/hooks/UsePolling.d.ts +26 -0
- package/dist/foundation/net/hooks/UseSocket.d.ts +32 -0
- package/dist/foundation/net/index.d.ts +3 -3
- package/dist/foundation/net/index.js +7 -5
- package/dist/foundation/net/index.js.map +1 -1
- package/dist/foundation/notifications/NotificationFailureCode.d.ts +7 -0
- package/dist/foundation/notifications/NotificationPermission.d.ts +12 -1
- package/dist/foundation/notifications/Notify.d.ts +7 -24
- package/dist/foundation/notifications/QueryPermission.d.ts +12 -1
- package/dist/foundation/notifications/hooks/UseNotificationPermission.d.ts +27 -0
- package/dist/foundation/notifications/hooks/UsePermissionState.d.ts +14 -0
- package/dist/foundation/notifications/index.d.ts +4 -3
- package/dist/foundation/notifications/index.js +41 -19
- package/dist/foundation/notifications/index.js.map +1 -1
- package/dist/foundation/notifications/models/NotificationFailure.d.ts +10 -0
- package/dist/foundation/notifications/models/NotificationShowResult.d.ts +4 -0
- package/dist/foundation/numbers/ExactNumber.d.ts +13 -0
- package/dist/foundation/numbers/NumberLimits.d.ts +7 -0
- package/dist/foundation/numbers/adapters/bignumber/DecimalArithmetic.d.ts +4 -0
- package/dist/foundation/numbers/enums/NumberFailureCode.d.ts +10 -0
- package/dist/foundation/numbers/enums/NumberRounding.d.ts +13 -0
- package/dist/foundation/numbers/index.d.ts +6 -0
- package/dist/foundation/numbers/index.js +8 -0
- package/dist/foundation/numbers/index.js.map +1 -0
- package/dist/foundation/numbers/models/ExactNumber.d.ts +47 -0
- package/dist/foundation/numbers/models/NumberFailure.d.ts +6 -0
- package/dist/foundation/numbers/models/NumberRoundingOptions.d.ts +6 -0
- package/dist/foundation/oauth/GoogleIdentity.d.ts +98 -0
- package/dist/foundation/oauth/index.d.ts +1 -0
- package/dist/foundation/oauth/index.js +7 -0
- package/dist/foundation/oauth/index.js.map +1 -0
- package/dist/foundation/observers/ObserveIntersection.d.ts +1 -1
- package/dist/foundation/observers/ObserveMutation.d.ts +2 -2
- package/dist/foundation/observers/VisibilitySteps.d.ts +1 -1
- package/dist/foundation/observers/hooks/UseInView.d.ts +41 -0
- package/dist/foundation/observers/hooks/UseIntersectionObserver.d.ts +18 -0
- package/dist/foundation/observers/hooks/UseMutationObserver.d.ts +21 -0
- package/dist/foundation/observers/index.d.ts +5 -4
- package/dist/foundation/observers/index.js +15 -13
- package/dist/foundation/observers/index.js.map +1 -1
- package/dist/foundation/optionals/index.d.ts +1 -0
- package/dist/foundation/optionals/index.js +5 -0
- package/dist/foundation/optionals/index.js.map +1 -0
- package/dist/foundation/primitives/accessibleIcon/AccessibleIcon.d.ts +5 -6
- package/dist/foundation/primitives/anchoredPositioner/AnchoredPositioner.vue.d.ts +11 -10
- package/dist/foundation/primitives/anchoredPositioner/index.d.ts +1 -1
- package/dist/foundation/primitives/announce/Announce.vue.d.ts +7 -6
- package/dist/foundation/primitives/colorModeProvider/ColorModeProvider.vue.d.ts +8 -8
- package/dist/foundation/primitives/colorModeProvider/index.d.ts +2 -2
- package/dist/foundation/primitives/directionProvider/DirectionProvider.vue.d.ts +4 -4
- package/dist/foundation/primitives/dismissableLayer/DismissableLayer.vue.d.ts +12 -12
- package/dist/foundation/primitives/focusScope/FocusScope.vue.d.ts +18 -16
- package/dist/foundation/primitives/focusScope/FocusScopeRegistry.d.ts +27 -0
- package/dist/foundation/primitives/formControlContext/FormControlContext.d.ts +12 -3
- package/dist/foundation/primitives/formControlContext/FormControlProvider.vue.d.ts +14 -14
- package/dist/foundation/primitives/formControlContext/index.d.ts +1 -1
- package/dist/foundation/primitives/index.js +11 -11
- package/dist/foundation/primitives/overlayArrow/OverlayArrow.vue.d.ts +6 -6
- package/dist/foundation/primitives/portal/Portal.vue.d.ts +5 -5
- package/dist/foundation/primitives/presence/Presence.d.ts +5 -5
- package/dist/foundation/primitives/rovingFocusGroup/RovingFocusContext.d.ts +1 -1
- package/dist/foundation/primitives/rovingFocusGroup/RovingFocusGroup.vue.d.ts +11 -10
- package/dist/foundation/primitives/scrollLockProvider/ScrollLockProvider.vue.d.ts +6 -6
- package/dist/foundation/primitives/scrollLockProvider/index.d.ts +1 -1
- package/dist/foundation/primitives/scrollViewport/ScrollViewport.vue.d.ts +10 -9
- package/dist/foundation/primitives/slot/ComponentElement.d.ts +7 -0
- package/dist/foundation/primitives/slot/Primitive.d.ts +8 -8
- package/dist/foundation/primitives/slot/Slot.d.ts +3 -3
- package/dist/foundation/primitives/slot/index.d.ts +2 -1
- package/dist/foundation/primitives/visuallyHidden/VisuallyHidden.vue.d.ts +4 -3
- package/dist/foundation/resilience/RetryDelay.d.ts +4 -1
- package/dist/foundation/resilience/RetryPolicy.d.ts +6 -6
- package/dist/foundation/resilience/index.d.ts +2 -2
- package/dist/foundation/resilience/index.js.map +1 -1
- package/dist/foundation/results/AppErrorFactory.d.ts +22 -0
- package/dist/foundation/results/AppErrorType.d.ts +13 -0
- package/dist/foundation/results/ResultExtensions.d.ts +33 -0
- package/dist/foundation/results/index.d.ts +5 -0
- package/dist/foundation/results/index.js +8 -0
- package/dist/foundation/results/index.js.map +1 -0
- package/dist/foundation/results/models/AppError.d.ts +10 -0
- package/dist/foundation/results/models/Result.d.ts +9 -0
- package/dist/foundation/screen/Fullscreen.d.ts +6 -6
- package/dist/foundation/screen/ScreenOrientation.d.ts +7 -14
- package/dist/foundation/screen/ScreenOutcome.d.ts +5 -0
- package/dist/foundation/screen/WakeLock.d.ts +2 -2
- package/dist/foundation/screen/enums/OrientationLockFailureCode.d.ts +9 -0
- package/dist/foundation/screen/enums/ScreenFailureCode.d.ts +8 -0
- package/dist/foundation/screen/hooks/UseFullscreen.d.ts +28 -0
- package/dist/foundation/screen/hooks/UseOrientation.d.ts +28 -0
- package/dist/foundation/screen/hooks/UseWakeLock.d.ts +18 -0
- package/dist/foundation/screen/index.d.ts +7 -5
- package/dist/foundation/screen/index.js +37 -26
- package/dist/foundation/screen/index.js.map +1 -1
- package/dist/foundation/screen/models/OrientationLockFailure.d.ts +7 -0
- package/dist/foundation/screen/models/OrientationLockResult.d.ts +3 -0
- package/dist/foundation/screen/models/ScreenFailure.d.ts +14 -0
- package/dist/foundation/screen/models/ScreenRequestResult.d.ts +4 -0
- package/dist/foundation/selection/hooks/UseFilters.d.ts +34 -0
- package/dist/foundation/selection/hooks/UseSelection.d.ts +54 -0
- package/dist/foundation/selection/hooks/UseSort.d.ts +36 -0
- package/dist/foundation/selection/hooks/UseTypeahead.d.ts +42 -0
- package/dist/foundation/selection/index.d.ts +8 -7
- package/dist/foundation/selection/index.js +28 -30
- package/dist/foundation/selection/index.js.map +1 -1
- package/dist/foundation/selection/models/Filter.d.ts +71 -0
- package/dist/foundation/selection/models/Selection.d.ts +116 -0
- package/dist/foundation/selection/models/Sort.d.ts +69 -0
- package/dist/foundation/share/Share.d.ts +7 -23
- package/dist/foundation/share/ShareData.d.ts +1 -1
- package/dist/foundation/share/ShareFailureCode.d.ts +7 -0
- package/dist/foundation/share/ShareOrCopy.d.ts +6 -8
- package/dist/foundation/share/UseShare.d.ts +14 -7
- package/dist/foundation/share/index.d.ts +3 -2
- package/dist/foundation/share/index.js +43 -18
- package/dist/foundation/share/index.js.map +1 -1
- package/dist/foundation/share/models/ShareFailure.d.ts +10 -0
- package/dist/foundation/share/models/ShareSendOrCopyResult.d.ts +4 -0
- package/dist/foundation/share/models/ShareSendResult.d.ts +4 -0
- package/dist/foundation/shortcuts/Chord.d.ts +1 -1
- package/dist/foundation/shortcuts/hooks/UseHotkeys.d.ts +34 -0
- package/dist/foundation/shortcuts/index.d.ts +3 -2
- package/dist/foundation/shortcuts/index.js +5 -3
- package/dist/foundation/shortcuts/index.js.map +1 -1
- package/dist/foundation/speech/CreateSpeechRecognizer.d.ts +5 -20
- package/dist/foundation/speech/ListVoices.d.ts +3 -3
- package/dist/foundation/speech/Speak.d.ts +6 -7
- package/dist/foundation/speech/SpeechControls.d.ts +2 -0
- package/dist/foundation/speech/SpeechResult.d.ts +7 -23
- package/dist/foundation/speech/enums/RecognizerStartFailureCode.d.ts +6 -0
- package/dist/foundation/speech/enums/SpeechFailureCode.d.ts +7 -0
- package/dist/foundation/speech/hooks/UseSpeechRecognition.d.ts +45 -0
- package/dist/foundation/speech/hooks/UseSpeechSynthesis.d.ts +37 -0
- package/dist/foundation/speech/index.d.ts +6 -4
- package/dist/foundation/speech/index.js +62 -31
- package/dist/foundation/speech/index.js.map +1 -1
- package/dist/foundation/speech/models/RecognizerStartFailure.d.ts +8 -0
- package/dist/foundation/speech/models/RecognizerStartResult.d.ts +4 -0
- package/dist/foundation/speech/models/SpeechFailure.d.ts +10 -0
- package/dist/foundation/speech/models/SpeechSpeakResult.d.ts +4 -0
- package/dist/foundation/state/hooks/UseControlled.d.ts +35 -0
- package/dist/foundation/state/index.d.ts +2 -0
- package/dist/foundation/state/index.js +7 -0
- package/dist/foundation/state/index.js.map +1 -0
- package/dist/foundation/storage/StorageBroker.d.ts +1 -1
- package/dist/foundation/storage/adapters/zustand/ZustandPersist.d.ts +36 -0
- package/dist/foundation/storage/adapters/zustand/index.d.ts +1 -0
- package/dist/foundation/storage/adapters/zustand/index.js.map +1 -0
- package/dist/foundation/storage/hooks/UseAutosave.d.ts +44 -0
- package/dist/foundation/storage/hooks/UsePersistentState.d.ts +31 -0
- package/dist/foundation/storage/hooks/UseRecentItems.d.ts +34 -0
- package/dist/foundation/storage/index.d.ts +4 -1
- package/dist/foundation/storage/index.js +118 -3
- package/dist/foundation/storage/index.js.map +1 -1
- package/dist/foundation/styles/SurfaceStyles.d.ts +191 -0
- package/dist/foundation/styles/constants/Layers.d.ts +35 -0
- package/dist/foundation/styles/constants/Tones.d.ts +21 -0
- package/dist/foundation/styles/extensions/ColorExtensions.d.ts +51 -0
- package/dist/foundation/styles/extensions/CssExtensions.d.ts +124 -0
- package/dist/foundation/styles/index.d.ts +20 -0
- package/dist/foundation/styles/index.js +45 -0
- package/dist/foundation/styles/index.js.map +1 -0
- package/dist/foundation/themes/ForegroundContrast.d.ts +3 -0
- package/dist/foundation/themes/Oklch.d.ts +2 -0
- package/dist/foundation/themes/Registry.d.ts +18 -0
- package/dist/foundation/themes/Tokens.d.ts +5 -5
- package/dist/foundation/themes/Validate.d.ts +30 -0
- package/dist/foundation/themes/constants/Authored.d.ts +3 -0
- package/dist/foundation/themes/constants/Pool.d.ts +3 -0
- package/dist/foundation/themes/index.d.ts +6 -6
- package/dist/foundation/themes/index.js +30 -29
- package/dist/foundation/uploads/UploadItem.d.ts +3 -3
- package/dist/foundation/uploads/UploadQueue.d.ts +3 -3
- package/dist/foundation/uploads/UseUploadQueue.d.ts +4 -4
- package/dist/foundation/uploads/XhrUploadTransport.d.ts +1 -1
- package/dist/foundation/uploads/index.d.ts +2 -2
- package/dist/foundation/uploads/index.js +11 -11
- package/dist/foundation/uploads/index.js.map +1 -1
- package/dist/foundation/validators/Composites.d.ts +71 -0
- package/dist/foundation/validators/Messages.d.ts +69 -0
- package/dist/foundation/validators/ValidationError.d.ts +14 -0
- package/dist/foundation/validators/ValidationOutcome.d.ts +40 -0
- package/dist/foundation/validators/Validator.d.ts +76 -0
- package/dist/foundation/validators/index.d.ts +8 -0
- package/dist/foundation/validators/index.js +484 -0
- package/dist/foundation/validators/index.js.map +1 -0
- package/dist/foundation/validators/models/ValidationFailure.d.ts +6 -0
- package/dist/foundation/validators/models/ValidatorParseResult.d.ts +3 -0
- package/dist/foundation/virtualization/Measurements.d.ts +2 -2
- package/dist/foundation/virtualization/UseVirtualList.d.ts +6 -3
- package/dist/foundation/virtualization/Windowing.d.ts +7 -4
- package/dist/foundation/virtualization/index.d.ts +3 -3
- package/dist/foundation/virtualization/index.js +15 -19
- package/dist/foundation/virtualization/index.js.map +1 -1
- package/dist/foundation/workers/RunInWorker.d.ts +8 -20
- package/dist/foundation/workers/UseWorker.d.ts +2 -7
- package/dist/foundation/workers/WorkerClient.d.ts +6 -9
- package/dist/foundation/workers/WorkerHost.d.ts +3 -3
- package/dist/foundation/workers/WorkerProtocol.d.ts +2 -2
- package/dist/foundation/workers/WorkerRunFailureCode.d.ts +6 -0
- package/dist/foundation/workers/index.d.ts +3 -2
- package/dist/foundation/workers/index.js +16 -6
- package/dist/foundation/workers/index.js.map +1 -1
- package/dist/foundation/workers/models/WorkerRunFailure.d.ts +8 -0
- package/dist/foundation/workers/models/WorkerRunResult.d.ts +3 -0
- package/dist/index.css +170 -44
- package/dist/index.d.ts +7 -2
- package/dist/index.js +559 -550
- package/dist/index.js.map +1 -1
- package/dist/presentation/actions/backToTopButton/BackToTopButton.vue.d.ts +20 -18
- package/dist/presentation/actions/backToTopButton/index.d.ts +1 -1
- package/dist/presentation/actions/button/Button.variants.d.ts +83 -241
- package/dist/presentation/actions/button/Button.vue.d.ts +67 -72
- package/dist/presentation/actions/button/index.d.ts +1 -1
- package/dist/presentation/actions/buttonGroup/ButtonGroup.vue.d.ts +12 -11
- package/dist/presentation/actions/copyButton/CopyButton.vue.d.ts +22 -16
- package/dist/presentation/actions/disclosureButton/DisclosureButton.vue.d.ts +20 -18
- package/dist/presentation/actions/disclosureButton/index.d.ts +1 -1
- package/dist/presentation/actions/fabButton/FabButton.variants.d.ts +80 -0
- package/dist/presentation/actions/fabButton/FabButton.vue.d.ts +32 -0
- package/dist/presentation/actions/fabButton/index.d.ts +2 -0
- package/dist/presentation/actions/googleSignInButton/GoogleSignInButton.vue.d.ts +37 -0
- package/dist/presentation/actions/googleSignInButton/index.d.ts +1 -0
- package/dist/presentation/actions/index.d.ts +3 -8
- package/dist/presentation/actions/index.js +18 -35
- package/dist/presentation/actions/speedDialGroup/SpeedDialGroup.vue.d.ts +27 -0
- package/dist/presentation/actions/speedDialGroup/SpeedDialGroupAction.vue.d.ts +41 -0
- package/dist/presentation/actions/speedDialGroup/SpeedDialGroupContext.d.ts +36 -0
- package/dist/presentation/actions/speedDialGroup/SpeedDialGroupList.vue.d.ts +12 -0
- package/dist/presentation/actions/speedDialGroup/SpeedDialGroupTrigger.vue.d.ts +31 -0
- package/dist/presentation/actions/speedDialGroup/index.d.ts +18 -0
- package/dist/presentation/actions/toolbar/Toolbar.vue.d.ts +10 -9
- package/dist/presentation/actions/toolbar/ToolbarButton.vue.d.ts +8 -7
- package/dist/presentation/actions/toolbar/ToolbarContext.d.ts +1 -1
- package/dist/presentation/actions/toolbar/ToolbarLink.vue.d.ts +4 -3
- package/dist/presentation/actions/toolbar/ToolbarSeparator.vue.d.ts +1 -2
- package/dist/presentation/actions/toolbar/index.d.ts +6 -74
- package/dist/presentation/display/accordionGroup/AccordionGroup.vue.d.ts +44 -0
- package/dist/presentation/display/accordionGroup/AccordionGroupContent.vue.d.ts +13 -0
- package/dist/presentation/display/accordionGroup/AccordionGroupContext.d.ts +29 -0
- package/dist/presentation/display/accordionGroup/AccordionGroupItem.vue.d.ts +19 -0
- package/dist/presentation/display/accordionGroup/AccordionGroupTrigger.vue.d.ts +13 -0
- package/dist/presentation/display/accordionGroup/index.d.ts +5 -0
- package/dist/presentation/display/activityTimeline/ActivityItem.vue.d.ts +28 -0
- package/dist/presentation/display/activityTimeline/ActivityTimeline.vue.d.ts +17 -0
- package/dist/presentation/display/activityTimeline/index.d.ts +2 -0
- package/dist/presentation/display/animatedNumberText/AnimatedNumberText.vue.d.ts +33 -0
- package/dist/presentation/display/animatedNumberText/index.d.ts +1 -0
- package/dist/presentation/display/annotationBadge/AnnotationBadge.vue.d.ts +42 -0
- package/dist/presentation/display/annotationBadge/index.d.ts +1 -0
- package/dist/presentation/display/audioPlayer/AudioPlayer.vue.d.ts +19 -20
- package/dist/presentation/display/audioWaveformPreview/AudioWaveformPreview.vue.d.ts +57 -0
- package/dist/presentation/display/audioWaveformPreview/index.d.ts +1 -0
- package/dist/presentation/display/avatar/Avatar.variants.d.ts +77 -227
- package/dist/presentation/display/avatar/Avatar.vue.d.ts +24 -22
- package/dist/presentation/display/avatarGroup/AvatarGroup.vue.d.ts +10 -11
- package/dist/presentation/display/badge/Badge.variants.d.ts +35 -97
- package/dist/presentation/display/badge/Badge.vue.d.ts +6 -7
- package/dist/presentation/display/badgeOverlay/BadgeOverlay.vue.d.ts +8 -9
- package/dist/presentation/display/card/Card.vue.d.ts +10 -11
- package/dist/presentation/display/card/CardBody.vue.d.ts +3 -4
- package/dist/presentation/display/card/CardDescription.vue.d.ts +3 -4
- package/dist/presentation/display/card/CardFooter.vue.d.ts +3 -4
- package/dist/presentation/display/card/CardHeader.vue.d.ts +3 -4
- package/dist/presentation/display/card/CardTitle.vue.d.ts +3 -4
- package/dist/presentation/display/carousel/Carousel.vue.d.ts +23 -18
- package/dist/presentation/display/carousel/CarouselDot.vue.d.ts +4 -5
- package/dist/presentation/display/carousel/CarouselDots.vue.d.ts +3 -4
- package/dist/presentation/display/carousel/CarouselNext.vue.d.ts +3 -4
- package/dist/presentation/display/carousel/CarouselPrev.vue.d.ts +3 -4
- package/dist/presentation/display/carousel/CarouselSlide.vue.d.ts +3 -4
- package/dist/presentation/display/carousel/CarouselSlides.vue.d.ts +3 -4
- package/dist/presentation/display/carousel/CarouselViewport.vue.d.ts +3 -4
- package/dist/presentation/display/carousel/index.d.ts +1 -1
- package/dist/presentation/display/chatBubbleCard/ChatBubbleCard.vue.d.ts +78 -0
- package/dist/presentation/display/chatBubbleCard/index.d.ts +1 -0
- package/dist/presentation/display/codeText/CodeText.variants.d.ts +26 -0
- package/dist/presentation/display/codeText/CodeText.vue.d.ts +16 -0
- package/dist/presentation/display/codeText/index.d.ts +2 -0
- package/dist/presentation/display/collapsibleGroup/CollapsibleGroup.vue.d.ts +28 -0
- package/dist/presentation/display/collapsibleGroup/CollapsibleGroupContent.vue.d.ts +17 -0
- package/dist/presentation/display/collapsibleGroup/CollapsibleGroupContentInner.vue.d.ts +22 -0
- package/dist/presentation/display/collapsibleGroup/CollapsibleGroupContext.d.ts +17 -0
- package/dist/presentation/display/collapsibleGroup/CollapsibleGroupTrigger.vue.d.ts +17 -0
- package/dist/presentation/display/collapsibleGroup/index.d.ts +4 -0
- package/dist/presentation/display/colorSwatchPreview/ColorSwatchPreview.variants.d.ts +92 -0
- package/dist/presentation/display/colorSwatchPreview/ColorSwatchPreview.vue.d.ts +32 -0
- package/dist/presentation/display/colorSwatchPreview/index.d.ts +2 -0
- package/dist/presentation/display/commentThreadGroup/Comment.vue.d.ts +38 -0
- package/dist/presentation/display/commentThreadGroup/CommentThreadGroup.vue.d.ts +13 -0
- package/dist/presentation/display/commentThreadGroup/index.d.ts +2 -0
- package/dist/presentation/display/confettiOverlay/ConfettiOverlay.vue.d.ts +39 -0
- package/dist/presentation/display/confettiOverlay/index.d.ts +1 -0
- package/dist/presentation/display/countBadge/CountBadge.vue.d.ts +11 -12
- package/dist/presentation/display/countUpText/CountUpText.vue.d.ts +39 -0
- package/dist/presentation/display/countUpText/index.d.ts +1 -0
- package/dist/presentation/display/dataTable/DataTable.vue.d.ts +25 -26
- package/dist/presentation/display/descriptionGroup/DescriptionGroup.vue.d.ts +53 -0
- package/dist/presentation/display/descriptionGroup/index.d.ts +1 -0
- package/dist/presentation/display/diffViewer/DiffViewer.vue.d.ts +16 -17
- package/dist/presentation/display/emptyState/EmptyState.vue.d.ts +9 -10
- package/dist/presentation/display/eventCalendarViewer/AgendaView.vue.d.ts +12 -0
- package/dist/presentation/display/eventCalendarViewer/EventCalendarViewer.vue.d.ts +37 -0
- package/dist/presentation/display/eventCalendarViewer/EventCalendarViewerTypes.d.ts +28 -0
- package/dist/presentation/display/eventCalendarViewer/MonthView.vue.d.ts +16 -0
- package/dist/presentation/display/eventCalendarViewer/TimeGridView.vue.d.ts +17 -0
- package/dist/presentation/display/eventCalendarViewer/index.d.ts +2 -0
- package/dist/presentation/display/eyebrowText/EyebrowText.vue.d.ts +31 -0
- package/dist/presentation/display/eyebrowText/index.d.ts +1 -0
- package/dist/presentation/display/featureCard/FeatureCard.vue.d.ts +7 -61
- package/dist/presentation/display/fieldHelperText/FieldHelperText.vue.d.ts +19 -0
- package/dist/presentation/display/fieldHelperText/index.d.ts +1 -0
- package/dist/presentation/display/frameGlyph/FrameGlyph.vue.d.ts +4 -5
- package/dist/presentation/display/ganttTimeline/GanttTimeline.vue.d.ts +58 -0
- package/dist/presentation/display/ganttTimeline/index.d.ts +1 -0
- package/dist/presentation/display/gradientText/GradientText.vue.d.ts +23 -18
- package/dist/presentation/display/gradientText/index.d.ts +1 -1
- package/dist/presentation/display/heading/Heading.variants.d.ts +50 -140
- package/dist/presentation/display/heading/Heading.vue.d.ts +9 -10
- package/dist/presentation/display/heading/index.d.ts +1 -1
- package/dist/presentation/display/heatmapCalendarGrid/HeatmapCalendarGrid.vue.d.ts +64 -0
- package/dist/presentation/display/heatmapCalendarGrid/index.d.ts +1 -0
- package/dist/presentation/display/highlightText/HighlightText.vue.d.ts +19 -0
- package/dist/presentation/display/highlightText/index.d.ts +1 -0
- package/dist/presentation/display/imagePreview/ImagePreview.vue.d.ts +15 -0
- package/dist/presentation/display/imagePreview/index.d.ts +1 -0
- package/dist/presentation/display/index.d.ts +42 -42
- package/dist/presentation/display/index.js +143 -138
- package/dist/presentation/display/infoRow/InfoRow.vue.d.ts +8 -9
- package/dist/presentation/display/kbdText/KbdText.vue.d.ts +13 -0
- package/dist/presentation/display/kbdText/index.d.ts +1 -0
- package/dist/presentation/display/keyboardShortcutText/KeyboardShortcutText.vue.d.ts +12 -0
- package/dist/presentation/display/keyboardShortcutText/index.d.ts +1 -0
- package/dist/presentation/display/labelText/LabelText.vue.d.ts +34 -0
- package/dist/presentation/display/labelText/index.d.ts +1 -0
- package/dist/presentation/display/legendText/LegendText.vue.d.ts +21 -0
- package/dist/presentation/display/legendText/index.d.ts +1 -0
- package/dist/presentation/display/listGroup/ListGroup.variants.d.ts +62 -0
- package/dist/presentation/display/listGroup/ListGroup.vue.d.ts +22 -0
- package/dist/presentation/display/listGroup/ListGroupContext.d.ts +16 -0
- package/dist/presentation/display/listGroup/ListGroupItem.vue.d.ts +28 -0
- package/dist/presentation/display/listGroup/index.d.ts +4 -0
- package/dist/presentation/display/markText/MarkText.vue.d.ts +13 -0
- package/dist/presentation/display/markText/index.d.ts +1 -0
- package/dist/presentation/display/marqueeGroup/MarqueeGroup.vue.d.ts +44 -0
- package/dist/presentation/display/marqueeGroup/index.d.ts +1 -0
- package/dist/presentation/display/messageGroup/DaySeparator.vue.d.ts +16 -0
- package/dist/presentation/display/messageGroup/MessageGroup.vue.d.ts +38 -0
- package/dist/presentation/display/messageGroup/index.d.ts +2 -0
- package/dist/presentation/display/metaInlineText/MetaInlineText.vue.d.ts +20 -0
- package/dist/presentation/display/metaInlineText/index.d.ts +1 -0
- package/dist/presentation/display/metricBadge/MetricBadge.vue.d.ts +53 -0
- package/dist/presentation/display/metricBadge/index.d.ts +1 -0
- package/dist/presentation/display/moduleGlyphs/CellsGlyph.vue.d.ts +4 -5
- package/dist/presentation/display/moduleGlyphs/DotsGlyph.vue.d.ts +4 -5
- package/dist/presentation/display/moduleGlyphs/HorizontalBarsGlyph.vue.d.ts +4 -5
- package/dist/presentation/display/moduleGlyphs/ModuleGlyphs.d.ts +3 -3
- package/dist/presentation/display/moduleGlyphs/VerticalBarsGlyph.vue.d.ts +4 -5
- package/dist/presentation/display/notificationCenterGroup/NotificationCenterGroup.vue.d.ts +30 -0
- package/dist/presentation/display/notificationCenterGroup/NotificationItem.vue.d.ts +40 -0
- package/dist/presentation/display/notificationCenterGroup/index.d.ts +2 -0
- package/dist/presentation/display/notificationIndicator/NotificationIndicator.vue.d.ts +46 -0
- package/dist/presentation/display/notificationIndicator/index.d.ts +1 -0
- package/dist/presentation/display/onboardingChecklistCard/OnboardingChecklistCard.vue.d.ts +57 -0
- package/dist/presentation/display/onboardingChecklistCard/OnboardingChecklistCardTask.vue.d.ts +27 -0
- package/dist/presentation/display/onboardingChecklistCard/index.d.ts +3 -0
- package/dist/presentation/display/pdfViewer/PdfViewer.vue.d.ts +39 -0
- package/dist/presentation/display/pdfViewer/index.d.ts +1 -1
- package/dist/presentation/display/pricingCard/PricingCard.vue.d.ts +16 -70
- package/dist/presentation/display/quoteText/QuoteText.vue.d.ts +13 -0
- package/dist/presentation/display/quoteText/index.d.ts +1 -0
- package/dist/presentation/display/radiusGlyph/RadiusGlyph.vue.d.ts +6 -7
- package/dist/presentation/display/reactionBar/ReactionBar.vue.d.ts +18 -19
- package/dist/presentation/display/reactionBar/index.d.ts +1 -1
- package/dist/presentation/display/scheduleView/ScheduleView.vue.d.ts +22 -23
- package/dist/presentation/display/scrollRevealGroup/ScrollRevealGroup.vue.d.ts +49 -0
- package/dist/presentation/display/scrollRevealGroup/index.d.ts +1 -0
- package/dist/presentation/display/sectionHeading/SectionHeading.vue.d.ts +48 -0
- package/dist/presentation/display/sectionHeading/index.d.ts +1 -0
- package/dist/presentation/display/snippetText/SnippetText.vue.d.ts +20 -0
- package/dist/presentation/display/snippetText/index.d.ts +1 -0
- package/dist/presentation/display/sparkline/Sparkline.vue.d.ts +21 -22
- package/dist/presentation/display/sparkline/index.d.ts +1 -1
- package/dist/presentation/display/statCard/StatCard.vue.d.ts +47 -0
- package/dist/presentation/display/statCard/index.d.ts +1 -0
- package/dist/presentation/display/status/Status.vue.d.ts +11 -12
- package/dist/presentation/display/stepCard/StepCard.vue.d.ts +8 -62
- package/dist/presentation/display/stepperGroup/StepperGroup.vue.d.ts +28 -0
- package/dist/presentation/display/stepperGroup/StepperGroupContext.d.ts +44 -0
- package/dist/presentation/display/stepperGroup/StepperGroupList.vue.d.ts +13 -0
- package/dist/presentation/display/stepperGroup/StepperGroupPanel.vue.d.ts +15 -0
- package/dist/presentation/display/stepperGroup/StepperGroupStep.vue.d.ts +22 -0
- package/dist/presentation/display/stepperGroup/index.d.ts +5 -0
- package/dist/presentation/display/table/Table.vue.d.ts +17 -18
- package/dist/presentation/display/table/TableBody.vue.d.ts +3 -4
- package/dist/presentation/display/table/TableCaption.vue.d.ts +3 -4
- package/dist/presentation/display/table/TableCell.vue.d.ts +3 -4
- package/dist/presentation/display/table/TableContext.d.ts +3 -3
- package/dist/presentation/display/table/TableFooter.vue.d.ts +3 -4
- package/dist/presentation/display/table/TableHead.vue.d.ts +6 -7
- package/dist/presentation/display/table/TableHeaderCell.vue.d.ts +3 -4
- package/dist/presentation/display/table/TableRow.vue.d.ts +3 -4
- package/dist/presentation/display/table/index.d.ts +1 -1
- package/dist/presentation/display/tabsGroup/TabsGroup.vue.d.ts +32 -0
- package/dist/presentation/display/tabsGroup/TabsGroupContext.d.ts +34 -0
- package/dist/presentation/display/tabsGroup/TabsGroupList.vue.d.ts +13 -0
- package/dist/presentation/display/tabsGroup/TabsGroupPanel.vue.d.ts +15 -0
- package/dist/presentation/display/tabsGroup/TabsGroupTab.vue.d.ts +19 -0
- package/dist/presentation/display/tabsGroup/index.d.ts +5 -0
- package/dist/presentation/display/tag/Tag.variants.d.ts +23 -61
- package/dist/presentation/display/tag/Tag.vue.d.ts +8 -9
- package/dist/presentation/display/text/Text.variants.d.ts +74 -220
- package/dist/presentation/display/text/Text.vue.d.ts +16 -16
- package/dist/presentation/display/text/index.d.ts +1 -1
- package/dist/presentation/display/threadView/ThreadView.vue.d.ts +15 -16
- package/dist/presentation/display/timeline/Timeline.vue.d.ts +6 -7
- package/dist/presentation/display/timeline/TimelineContext.d.ts +1 -1
- package/dist/presentation/display/timeline/TimelineDescription.vue.d.ts +3 -4
- package/dist/presentation/display/timeline/TimelineItem.vue.d.ts +6 -7
- package/dist/presentation/display/timeline/TimelineTitle.vue.d.ts +3 -4
- package/dist/presentation/display/timeline/index.d.ts +1 -1
- package/dist/presentation/display/treeViewer/TreeViewer.vue.d.ts +32 -0
- package/dist/presentation/display/treeViewer/TreeViewerContext.d.ts +29 -0
- package/dist/presentation/display/treeViewer/TreeViewerGroup.vue.d.ts +27 -0
- package/dist/presentation/display/treeViewer/TreeViewerGroupContent.vue.d.ts +16 -0
- package/dist/presentation/display/treeViewer/TreeViewerItem.vue.d.ts +19 -0
- package/dist/presentation/display/treeViewer/TreeViewerNodeRow.vue.d.ts +26 -0
- package/dist/presentation/display/treeViewer/index.d.ts +4 -0
- package/dist/presentation/display/typewriterText/TypewriterText.vue.d.ts +37 -0
- package/dist/presentation/display/typewriterText/index.d.ts +1 -0
- package/dist/presentation/display/videoPlayer/VideoPlayer.vue.d.ts +26 -27
- package/dist/presentation/display/videoPlayer/index.d.ts +1 -1
- package/dist/presentation/feedback/alert/Alert.vue.d.ts +23 -23
- package/dist/presentation/feedback/alertSimple/AlertSimple.variants.d.ts +20 -54
- package/dist/presentation/feedback/alertSimple/AlertSimple.vue.d.ts +7 -7
- package/dist/presentation/feedback/banner/Banner.vue.d.ts +23 -23
- package/dist/presentation/feedback/bannerSimple/BannerSimple.variants.d.ts +20 -54
- package/dist/presentation/feedback/bannerSimple/BannerSimple.vue.d.ts +7 -7
- package/dist/presentation/feedback/callout/Callout.vue.d.ts +15 -15
- package/dist/presentation/feedback/characterCountCallout/CharacterCountCallout.vue.d.ts +14 -0
- package/dist/presentation/feedback/characterCountCallout/index.d.ts +1 -0
- package/dist/presentation/feedback/feedbackToastHost/FeedbackToastHost.vue.d.ts +17 -0
- package/dist/presentation/feedback/feedbackToastHost/index.d.ts +1 -0
- package/dist/presentation/feedback/fieldErrorCallout/FieldErrorCallout.vue.d.ts +24 -0
- package/dist/presentation/feedback/fieldErrorCallout/index.d.ts +1 -0
- package/dist/presentation/feedback/index.d.ts +9 -9
- package/dist/presentation/feedback/index.js +35 -38
- package/dist/presentation/feedback/index.js.map +1 -1
- package/dist/presentation/feedback/inlineSpinner/InlineSpinner.vue.d.ts +10 -12
- package/dist/presentation/feedback/liveCursorIndicator/LiveCursorIndicator.vue.d.ts +33 -0
- package/dist/presentation/feedback/liveCursorIndicator/index.d.ts +1 -0
- package/dist/presentation/feedback/loadingOverlay/LoadingOverlay.vue.d.ts +18 -19
- package/dist/presentation/feedback/loadingOverlay/index.d.ts +1 -1
- package/dist/presentation/feedback/loadingState/LoadingState.vue.d.ts +14 -14
- package/dist/presentation/feedback/meterBar/MeterBar.vue.d.ts +12 -13
- package/dist/presentation/feedback/passwordStrengthCallout/PasswordStrengthCallout.vue.d.ts +15 -0
- package/dist/presentation/feedback/passwordStrengthCallout/index.d.ts +1 -0
- package/dist/presentation/feedback/presenceIndicator/PresenceIndicator.vue.d.ts +12 -13
- package/dist/presentation/feedback/presenceIndicator/index.d.ts +1 -1
- package/dist/presentation/feedback/progressBar/ProgressBar.variants.d.ts +33 -91
- package/dist/presentation/feedback/progressBar/ProgressBar.vue.d.ts +11 -12
- package/dist/presentation/feedback/progressBar/index.d.ts +1 -1
- package/dist/presentation/feedback/progressCircleIndicator/ProgressCircleIndicator.vue.d.ts +20 -0
- package/dist/presentation/feedback/progressCircleIndicator/index.d.ts +1 -0
- package/dist/presentation/feedback/progressStepsIndicator/ProgressStepsIndicator.vue.d.ts +15 -0
- package/dist/presentation/feedback/progressStepsIndicator/index.d.ts +1 -0
- package/dist/presentation/feedback/skeletonState/SkeletonState.variants.d.ts +31 -0
- package/dist/presentation/feedback/skeletonState/SkeletonState.vue.d.ts +17 -0
- package/dist/presentation/feedback/skeletonState/index.d.ts +2 -0
- package/dist/presentation/feedback/spinner/Spinner.variants.d.ts +32 -90
- package/dist/presentation/feedback/spinner/Spinner.vue.d.ts +9 -10
- package/dist/presentation/feedback/statusIndicator/StatusIndicator.vue.d.ts +14 -14
- package/dist/presentation/feedback/toast/Toast.vue.d.ts +23 -23
- package/dist/presentation/feedback/toastHost/ToastHost.vue.d.ts +95 -0
- package/dist/presentation/feedback/toastHost/index.d.ts +1 -0
- package/dist/presentation/feedback/toastSimple/ToastSimple.variants.d.ts +20 -54
- package/dist/presentation/feedback/toastSimple/ToastSimple.vue.d.ts +9 -9
- package/dist/presentation/feedback/trendIndicator/TrendIndicator.vue.d.ts +16 -16
- package/dist/presentation/feedback/typingIndicator/TypingIndicator.vue.d.ts +13 -13
- package/dist/presentation/feedback/typingIndicator/index.d.ts +1 -1
- package/dist/presentation/feedback/undoBar/UndoBar.vue.d.ts +21 -21
- package/dist/presentation/forms/DateExtensions.d.ts +4 -4
- package/dist/presentation/forms/InputStyles.d.ts +53 -155
- package/dist/presentation/forms/MonthGrid.vue.d.ts +22 -24
- package/dist/presentation/forms/TimeColumns.vue.d.ts +12 -17
- package/dist/presentation/forms/UseNativeFormReset.d.ts +3 -0
- package/dist/presentation/forms/addressEditor/AddressEditor.vue.d.ts +48 -0
- package/dist/presentation/forms/addressEditor/index.d.ts +1 -0
- package/dist/presentation/forms/calendarPicker/CalendarPicker.vue.d.ts +28 -0
- package/dist/presentation/forms/calendarPicker/index.d.ts +1 -0
- package/dist/presentation/forms/chatComposerInput/ChatComposerInput.vue.d.ts +68 -0
- package/dist/presentation/forms/chatComposerInput/index.d.ts +1 -0
- package/dist/presentation/forms/checkboxField/CheckboxField.vue.d.ts +15 -11
- package/dist/presentation/forms/checkboxGroup/CheckboxGroup.vue.d.ts +14 -19
- package/dist/presentation/forms/checkboxInput/CheckboxInput.variants.d.ts +67 -0
- package/dist/presentation/forms/checkboxInput/CheckboxInput.vue.d.ts +45 -0
- package/dist/presentation/forms/checkboxInput/index.d.ts +2 -0
- package/dist/presentation/forms/choiceCard/ChoiceCard.vue.d.ts +17 -14
- package/dist/presentation/forms/codeEditor/CodeEditor.vue.d.ts +33 -33
- package/dist/presentation/forms/colorArea/ColorArea.vue.d.ts +18 -26
- package/dist/presentation/forms/colorArea/index.d.ts +1 -1
- package/dist/presentation/forms/colorInput/ColorInput.vue.d.ts +39 -0
- package/dist/presentation/forms/colorInput/index.d.ts +1 -0
- package/dist/presentation/forms/colorPicker/ColorPicker.vue.d.ts +21 -26
- package/dist/presentation/forms/colorPicker/index.d.ts +1 -1
- package/dist/presentation/forms/colorSliderInput/ColorSliderInput.vue.d.ts +42 -0
- package/dist/presentation/forms/colorSliderInput/index.d.ts +1 -0
- package/dist/presentation/forms/colorSwatchPicker/ColorSwatchItem.vue.d.ts +12 -13
- package/dist/presentation/forms/colorSwatchPicker/ColorSwatchPicker.vue.d.ts +17 -22
- package/dist/presentation/forms/colorSwatchPicker/index.d.ts +1 -1
- package/dist/presentation/forms/colorWheelInput/ColorWheelInput.vue.d.ts +29 -0
- package/dist/presentation/forms/colorWheelInput/index.d.ts +1 -0
- package/dist/presentation/forms/comboboxPicker/ComboboxPicker.vue.d.ts +47 -0
- package/dist/presentation/forms/comboboxPicker/ComboboxPickerContent.vue.d.ts +38 -0
- package/dist/presentation/forms/comboboxPicker/ComboboxPickerContext.d.ts +53 -0
- package/dist/presentation/forms/comboboxPicker/ComboboxPickerEmpty.vue.d.ts +10 -0
- package/dist/presentation/forms/comboboxPicker/ComboboxPickerGroup.vue.d.ts +19 -0
- package/dist/presentation/forms/comboboxPicker/ComboboxPickerInput.vue.d.ts +11 -0
- package/dist/presentation/forms/comboboxPicker/ComboboxPickerItem.vue.d.ts +27 -0
- package/dist/presentation/forms/comboboxPicker/ComboboxPickerSeparator.vue.d.ts +2 -0
- package/dist/presentation/forms/comboboxPicker/index.d.ts +8 -0
- package/dist/presentation/forms/controlGroupField/ControlGroupField.variants.d.ts +70 -0
- package/dist/presentation/forms/controlGroupField/ControlGroupField.vue.d.ts +34 -0
- package/dist/presentation/forms/controlGroupField/index.d.ts +2 -0
- package/dist/presentation/forms/cronInput/CronInput.vue.d.ts +27 -33
- package/dist/presentation/forms/currencyInput/CurrencyInput.vue.d.ts +6 -7
- package/dist/presentation/forms/dataGridEditor/CellEditor.vue.d.ts +28 -0
- package/dist/presentation/forms/dataGridEditor/DataGridEditor.vue.d.ts +46 -0
- package/dist/presentation/forms/dataGridEditor/DataGridEditorTypes.d.ts +65 -0
- package/dist/presentation/forms/dataGridEditor/index.d.ts +2 -0
- package/dist/presentation/forms/dateInput/DateInput.vue.d.ts +49 -0
- package/dist/presentation/forms/dateInput/index.d.ts +1 -0
- package/dist/presentation/forms/datePicker/DatePicker.vue.d.ts +23 -28
- package/dist/presentation/forms/dateRangePicker/DateRangePicker.vue.d.ts +24 -29
- package/dist/presentation/forms/dateTimeInput/DateTimeInput.vue.d.ts +54 -0
- package/dist/presentation/forms/dateTimeInput/index.d.ts +1 -0
- package/dist/presentation/forms/editableInput/EditableInput.vue.d.ts +49 -0
- package/dist/presentation/forms/editableInput/EditableInputCancel.vue.d.ts +11 -0
- package/dist/presentation/forms/editableInput/EditableInputContext.d.ts +37 -0
- package/dist/presentation/forms/editableInput/EditableInputInput.vue.d.ts +11 -0
- package/dist/presentation/forms/editableInput/EditableInputPreview.vue.d.ts +6 -0
- package/dist/presentation/forms/editableInput/EditableInputSubmit.vue.d.ts +13 -0
- package/dist/presentation/forms/editableInput/index.d.ts +7 -0
- package/dist/presentation/forms/emailInput/EmailInput.vue.d.ts +21 -26
- package/dist/presentation/forms/emojiPicker/CategoryNav.vue.d.ts +3 -4
- package/dist/presentation/forms/emojiPicker/EmojiGrid.vue.d.ts +4 -5
- package/dist/presentation/forms/emojiPicker/EmojiPicker.variants.d.ts +10 -4
- package/dist/presentation/forms/emojiPicker/EmojiPicker.vue.d.ts +4 -9
- package/dist/presentation/forms/emojiPicker/EmojiPickerPopover.vue.d.ts +3 -13
- package/dist/presentation/forms/emojiPicker/EmojiTile.vue.d.ts +3 -4
- package/dist/presentation/forms/emojiPicker/UseEmojiPicker.d.ts +48 -0
- package/dist/presentation/forms/emojiPicker/index.d.ts +2 -2
- package/dist/presentation/forms/emojiSizePicker/EmojiSizePicker.variants.d.ts +23 -0
- package/dist/presentation/forms/emojiSizePicker/EmojiSizePicker.vue.d.ts +30 -0
- package/dist/presentation/forms/emojiSizePicker/index.d.ts +2 -0
- package/dist/presentation/forms/field/Field.vue.d.ts +13 -14
- package/dist/presentation/forms/filePicker/FilePicker.vue.d.ts +14 -15
- package/dist/presentation/forms/fileUploadPicker/FileUploadPicker.vue.d.ts +59 -0
- package/dist/presentation/forms/fileUploadPicker/index.d.ts +1 -0
- package/dist/presentation/forms/fontPicker/FontPicker.vue.d.ts +21 -27
- package/dist/presentation/forms/fontPicker/index.d.ts +1 -1
- package/dist/presentation/forms/gradientPicker/GradientPicker.vue.d.ts +18 -24
- package/dist/presentation/forms/iconPicker/IconPicker.vue.d.ts +22 -28
- package/dist/presentation/forms/index.d.ts +33 -35
- package/dist/presentation/forms/index.js +163 -157
- package/dist/presentation/forms/index.js.map +1 -1
- package/dist/presentation/forms/jsonEditor/JsonEditor.vue.d.ts +41 -0
- package/dist/presentation/forms/jsonEditor/JsonEditorContext.d.ts +28 -0
- package/dist/presentation/forms/jsonEditor/JsonEditorExtensions.d.ts +13 -0
- package/dist/presentation/forms/jsonEditor/JsonEditorTextView.vue.d.ts +13 -0
- package/dist/presentation/forms/jsonEditor/JsonEditorTreeNode.vue.d.ts +14 -0
- package/dist/presentation/forms/jsonEditor/JsonEditorTreeView.vue.d.ts +7 -0
- package/dist/presentation/forms/jsonEditor/index.d.ts +2 -2
- package/dist/presentation/forms/keyboardShortcutPicker/KeyboardShortcutPicker.vue.d.ts +16 -22
- package/dist/presentation/forms/keyboardShortcutPicker/index.d.ts +1 -1
- package/dist/presentation/forms/knobInput/KnobInput.vue.d.ts +69 -0
- package/dist/presentation/forms/knobInput/index.d.ts +1 -0
- package/dist/presentation/forms/labeledField/LabeledField.vue.d.ts +22 -0
- package/dist/presentation/forms/labeledField/index.d.ts +2 -0
- package/dist/presentation/forms/listboxPicker/ListboxPicker.variants.d.ts +41 -0
- package/dist/presentation/forms/listboxPicker/ListboxPicker.vue.d.ts +66 -0
- package/dist/presentation/forms/listboxPicker/ListboxPickerContext.d.ts +47 -0
- package/dist/presentation/forms/listboxPicker/ListboxPickerEmpty.vue.d.ts +10 -0
- package/dist/presentation/forms/listboxPicker/ListboxPickerGroup.vue.d.ts +20 -0
- package/dist/presentation/forms/listboxPicker/ListboxPickerItem.vue.d.ts +24 -0
- package/dist/presentation/forms/listboxPicker/ListboxPickerSeparator.vue.d.ts +2 -0
- package/dist/presentation/forms/listboxPicker/index.d.ts +7 -0
- package/dist/presentation/forms/markdownEditor/MarkdownEditor.vue.d.ts +28 -36
- package/dist/presentation/forms/markdownEditor/index.d.ts +1 -1
- package/dist/presentation/forms/maskedInput/MaskedInput.vue.d.ts +20 -25
- package/dist/presentation/forms/multiSelectPicker/MultiSelectPicker.vue.d.ts +49 -0
- package/dist/presentation/forms/multiSelectPicker/MultiSelectPickerContent.vue.d.ts +30 -0
- package/dist/presentation/forms/multiSelectPicker/MultiSelectPickerContext.d.ts +47 -0
- package/dist/presentation/forms/multiSelectPicker/MultiSelectPickerItem.vue.d.ts +24 -0
- package/dist/presentation/forms/multiSelectPicker/MultiSelectPickerTags.vue.d.ts +23 -0
- package/dist/presentation/forms/multiSelectPicker/MultiSelectPickerTrigger.vue.d.ts +24 -0
- package/dist/presentation/forms/multiSelectPicker/index.d.ts +6 -0
- package/dist/presentation/forms/nodeEditor/NodeEditor.vue.d.ts +58 -0
- package/dist/presentation/forms/numberInput/NumberInput.vue.d.ts +32 -32
- package/dist/presentation/forms/optionTileGroupField/OptionTileGroupField.variants.d.ts +34 -0
- package/dist/presentation/forms/optionTileGroupField/OptionTileGroupField.vue.d.ts +27 -0
- package/dist/presentation/forms/optionTileGroupField/index.d.ts +2 -0
- package/dist/presentation/forms/optionTilePicker/OptionTilePicker.variants.d.ts +8 -0
- package/dist/presentation/forms/optionTilePicker/OptionTilePicker.vue.d.ts +35 -0
- package/dist/presentation/forms/optionTilePicker/index.d.ts +2 -0
- package/dist/presentation/forms/passwordInput/PasswordInput.vue.d.ts +28 -33
- package/dist/presentation/forms/percentInput/PercentInput.vue.d.ts +3 -4
- package/dist/presentation/forms/phoneInput/PhoneInput.vue.d.ts +18 -24
- package/dist/presentation/forms/phoneInput/index.d.ts +1 -1
- package/dist/presentation/forms/pinInput/PinInput.vue.d.ts +20 -25
- package/dist/presentation/forms/radioField/RadioField.vue.d.ts +15 -11
- package/dist/presentation/forms/radioGroup/RadioGroup.vue.d.ts +15 -20
- package/dist/presentation/forms/radioInput/RadioInput.vue.d.ts +29 -0
- package/dist/presentation/forms/radioInput/index.d.ts +1 -0
- package/dist/presentation/forms/rangeCalendarPicker/RangeCalendarPicker.vue.d.ts +32 -0
- package/dist/presentation/forms/rangeCalendarPicker/index.d.ts +1 -0
- package/dist/presentation/forms/reactionPicker/ReactionPicker.vue.d.ts +14 -15
- package/dist/presentation/forms/recurrenceEditor/RecurrenceEditor.vue.d.ts +25 -31
- package/dist/presentation/forms/searchInput/SearchInput.vue.d.ts +23 -28
- package/dist/presentation/forms/segmentedPicker/SegmentedPicker.vue.d.ts +20 -0
- package/dist/presentation/forms/segmentedPicker/index.d.ts +1 -0
- package/dist/presentation/forms/selectPicker/SelectPicker.variants.d.ts +129 -0
- package/dist/presentation/forms/selectPicker/SelectPicker.vue.d.ts +62 -0
- package/dist/presentation/forms/selectPicker/SelectPickerContent.vue.d.ts +43 -0
- package/dist/presentation/forms/selectPicker/SelectPickerContext.d.ts +76 -0
- package/dist/presentation/forms/selectPicker/SelectPickerItem.vue.d.ts +33 -0
- package/dist/presentation/forms/selectPicker/SelectPickerTrigger.vue.d.ts +20 -0
- package/dist/presentation/forms/selectPicker/SelectPickerValue.vue.d.ts +22 -0
- package/dist/presentation/forms/selectPicker/index.d.ts +7 -0
- package/dist/presentation/forms/sliderInput/SliderInput.vue.d.ts +33 -0
- package/dist/presentation/forms/sliderInput/index.d.ts +1 -0
- package/dist/presentation/forms/sortableGroup/SortableGroup.vue.d.ts +17 -0
- package/dist/presentation/forms/sortableGroup/SortableGroupContext.d.ts +23 -0
- package/dist/presentation/forms/sortableGroup/SortableGroupHandle.vue.d.ts +13 -0
- package/dist/presentation/forms/sortableGroup/SortableGroupItem.vue.d.ts +15 -0
- package/dist/presentation/forms/sortableGroup/SortableGroupMoveButton.vue.d.ts +15 -0
- package/dist/presentation/forms/sortableGroup/index.d.ts +5 -0
- package/dist/presentation/forms/switchField/SwitchField.vue.d.ts +13 -14
- package/dist/presentation/forms/switchInput/SwitchInput.vue.d.ts +29 -0
- package/dist/presentation/forms/switchInput/index.d.ts +1 -0
- package/dist/presentation/forms/tagsInput/TagsInput.vue.d.ts +36 -43
- package/dist/presentation/forms/telInput/TelInput.vue.d.ts +21 -26
- package/dist/presentation/forms/textAreaInput/TextAreaInput.vue.d.ts +23 -28
- package/dist/presentation/forms/textInput/TextInput.vue.d.ts +21 -26
- package/dist/presentation/forms/timeInput/TimeInput.vue.d.ts +48 -0
- package/dist/presentation/forms/timeInput/index.d.ts +1 -0
- package/dist/presentation/forms/timePicker/TimePicker.vue.d.ts +22 -27
- package/dist/presentation/forms/toggleGroup/ToggleGroup.variants.d.ts +33 -0
- package/dist/presentation/forms/toggleGroup/ToggleGroup.vue.d.ts +73 -0
- package/dist/presentation/forms/toggleGroup/ToggleGroupContext.d.ts +24 -0
- package/dist/presentation/forms/toggleGroup/index.d.ts +3 -0
- package/dist/presentation/forms/toggleInput/ToggleInput.variants.d.ts +75 -0
- package/dist/presentation/forms/toggleInput/ToggleInput.vue.d.ts +57 -0
- package/dist/presentation/forms/toggleInput/index.d.ts +2 -0
- package/dist/presentation/forms/urlInput/UrlInput.vue.d.ts +21 -26
- package/dist/presentation/forms/wizardForm/WizardForm.vue.d.ts +35 -0
- package/dist/presentation/forms/wizardForm/WizardFormContext.d.ts +38 -0
- package/dist/presentation/forms/wizardForm/WizardFormFooter.vue.d.ts +28 -0
- package/dist/presentation/forms/wizardForm/WizardFormStep.vue.d.ts +28 -0
- package/dist/presentation/forms/wizardForm/WizardFormSteps.vue.d.ts +6 -0
- package/dist/presentation/forms/wizardForm/index.d.ts +6 -0
- package/dist/presentation/layout/anchorLayout/AnchorLayout.variants.d.ts +117 -0
- package/dist/presentation/layout/anchorLayout/AnchorLayout.vue.d.ts +63 -0
- package/dist/presentation/layout/anchorLayout/index.d.ts +2 -0
- package/dist/presentation/layout/appShell/AppShell.vue.d.ts +19 -34
- package/dist/presentation/layout/appShell/AppShellAside.vue.d.ts +3 -4
- package/dist/presentation/layout/appShell/AppShellContent.vue.d.ts +3 -4
- package/dist/presentation/layout/appShell/AppShellFooter.vue.d.ts +3 -4
- package/dist/presentation/layout/appShell/AppShellHeader.vue.d.ts +3 -4
- package/dist/presentation/layout/appShell/AppShellMain.vue.d.ts +3 -4
- package/dist/presentation/layout/appShell/AppShellSidebar.vue.d.ts +3 -4
- package/dist/presentation/layout/aspectRatioLayout/AspectRatioLayout.vue.d.ts +18 -0
- package/dist/presentation/layout/aspectRatioLayout/index.d.ts +1 -0
- package/dist/presentation/layout/boxLayout/BoxLayout.vue.d.ts +19 -0
- package/dist/presentation/layout/boxLayout/index.d.ts +1 -0
- package/dist/presentation/layout/centerLayout/CenterLayout.vue.d.ts +14 -0
- package/dist/presentation/layout/centerLayout/index.d.ts +1 -0
- package/dist/presentation/layout/clusterLayout/ClusterLayout.vue.d.ts +22 -0
- package/dist/presentation/layout/clusterLayout/index.d.ts +1 -0
- package/dist/presentation/layout/containerLayout/ContainerLayout.variants.d.ts +46 -0
- package/dist/presentation/layout/containerLayout/ContainerLayout.vue.d.ts +21 -0
- package/dist/presentation/layout/containerLayout/index.d.ts +2 -0
- package/dist/presentation/layout/dividerLayout/DividerLayout.variants.d.ts +25 -0
- package/dist/presentation/layout/dividerLayout/DividerLayout.vue.d.ts +37 -0
- package/dist/presentation/layout/dividerLayout/index.d.ts +2 -0
- package/dist/presentation/layout/fieldsetLayout/FieldsetLayout.vue.d.ts +22 -0
- package/dist/presentation/layout/fieldsetLayout/index.d.ts +1 -0
- package/dist/presentation/layout/flexLayout/FlexLayout.vue.d.ts +18 -0
- package/dist/presentation/layout/flexLayout/index.d.ts +1 -0
- package/dist/presentation/layout/frameLayout/FrameLayout.vue.d.ts +38 -0
- package/dist/presentation/layout/frameLayout/index.d.ts +1 -0
- package/dist/presentation/layout/grid/Grid.variants.d.ts +59 -153
- package/dist/presentation/layout/grid/Grid.vue.d.ts +13 -13
- package/dist/presentation/layout/hStackLayout/HStackLayout.vue.d.ts +14 -0
- package/dist/presentation/layout/hStackLayout/index.d.ts +1 -0
- package/dist/presentation/layout/index.d.ts +24 -19
- package/dist/presentation/layout/index.js +60 -56
- package/dist/presentation/layout/inlineLayout/InlineLayout.vue.d.ts +42 -0
- package/dist/presentation/layout/inlineLayout/index.d.ts +1 -0
- package/dist/presentation/layout/inputAddonLayout/InputAddonLayout.vue.d.ts +19 -0
- package/dist/presentation/layout/inputAddonLayout/index.d.ts +1 -0
- package/dist/presentation/layout/inputGroup/InputGroup.vue.d.ts +18 -0
- package/dist/presentation/layout/navbar/Navbar.variants.d.ts +20 -62
- package/dist/presentation/layout/navbar/Navbar.vue.d.ts +14 -15
- package/dist/presentation/layout/navbar/index.d.ts +1 -1
- package/dist/presentation/layout/pullToRefreshLayout/PullToRefreshLayout.vue.d.ts +21 -0
- package/dist/presentation/layout/pullToRefreshLayout/index.d.ts +1 -0
- package/dist/presentation/layout/resizablePanelsLayout/ResizablePanel.vue.d.ts +21 -0
- package/dist/presentation/layout/resizablePanelsLayout/ResizablePanelsLayout.vue.d.ts +61 -0
- package/dist/presentation/layout/resizablePanelsLayout/ResizableSeparator.vue.d.ts +9 -0
- package/dist/presentation/layout/resizablePanelsLayout/index.d.ts +4 -0
- package/dist/presentation/layout/scrollArea/ScrollArea.vue.d.ts +8 -8
- package/dist/presentation/layout/section/Section.variants.d.ts +20 -54
- package/dist/presentation/layout/section/Section.vue.d.ts +15 -17
- package/dist/presentation/layout/section/index.d.ts +1 -1
- package/dist/presentation/layout/separatorLayout/SeparatorLayout.vue.d.ts +13 -0
- package/dist/presentation/layout/separatorLayout/index.d.ts +1 -0
- package/dist/presentation/layout/spacerLayout/SpacerLayout.vue.d.ts +14 -0
- package/dist/presentation/layout/spacerLayout/index.d.ts +1 -0
- package/dist/presentation/layout/stackLayout/StackLayout.variants.d.ts +172 -0
- package/dist/presentation/layout/stackLayout/StackLayout.vue.d.ts +37 -0
- package/dist/presentation/layout/stackLayout/index.d.ts +2 -0
- package/dist/presentation/layout/surfaceLayout/SurfaceLayout.vue.d.ts +40 -0
- package/dist/presentation/layout/surfaceLayout/index.d.ts +1 -0
- package/dist/presentation/layout/swipeActionsLayout/SwipeActionsLayout.vue.d.ts +27 -0
- package/dist/presentation/layout/swipeActionsLayout/index.d.ts +1 -0
- package/dist/presentation/layout/tiltLayout/TiltLayout.vue.d.ts +30 -0
- package/dist/presentation/layout/tiltLayout/index.d.ts +1 -0
- package/dist/presentation/layout/twoColumnLayout/TwoColumnLayout.vue.d.ts +27 -0
- package/dist/presentation/layout/twoColumnLayout/index.d.ts +1 -0
- package/dist/presentation/layout/vStackLayout/VStackLayout.vue.d.ts +14 -0
- package/dist/presentation/layout/vStackLayout/index.d.ts +1 -0
- package/dist/presentation/nav/NavExtensions.d.ts +14 -0
- package/dist/presentation/nav/breadcrumb/Breadcrumb.vue.d.ts +7 -8
- package/dist/presentation/nav/breadcrumb/index.d.ts +1 -1
- package/dist/presentation/nav/contextMenu/ContextMenu.vue.d.ts +1 -2
- package/dist/presentation/nav/contextMenu/ContextMenuContent.vue.d.ts +6 -7
- package/dist/presentation/nav/contextMenu/ContextMenuTrigger.vue.d.ts +8 -9
- package/dist/presentation/nav/contextMenu/index.d.ts +3 -3
- package/dist/presentation/nav/dropdownMenu/DropdownMenu.vue.d.ts +12 -26
- package/dist/presentation/nav/dropdownMenu/DropdownMenuContent.vue.d.ts +1 -2
- package/dist/presentation/nav/dropdownMenu/DropdownMenuTrigger.vue.d.ts +6 -7
- package/dist/presentation/nav/dropdownMenu/index.d.ts +3 -3
- package/dist/presentation/nav/index.d.ts +1 -1
- package/dist/presentation/nav/index.js +49 -56
- package/dist/presentation/nav/linkItem/LinkItem.variants.d.ts +61 -0
- package/dist/presentation/nav/linkItem/LinkItem.vue.d.ts +25 -0
- package/dist/presentation/nav/linkItem/index.d.ts +2 -0
- package/dist/presentation/nav/menu/Menu.variants.d.ts +17 -43
- package/dist/presentation/nav/menu/Menu.vue.d.ts +26 -30
- package/dist/presentation/nav/menu/MenuGroup.vue.d.ts +4 -5
- package/dist/presentation/nav/menu/MenuItem.vue.d.ts +9 -10
- package/dist/presentation/nav/menu/MenuLabel.vue.d.ts +3 -4
- package/dist/presentation/nav/menu/MenuSeparator.vue.d.ts +3 -4
- package/dist/presentation/nav/menubar/Menubar.variants.d.ts +3 -5
- package/dist/presentation/nav/menubar/Menubar.vue.d.ts +12 -255
- package/dist/presentation/nav/menubar/MenubarContent.vue.d.ts +6 -7
- package/dist/presentation/nav/menubar/MenubarMenu.vue.d.ts +2 -3
- package/dist/presentation/nav/menubar/MenubarTrigger.vue.d.ts +3 -4
- package/dist/presentation/nav/navItem/NavItem.vue.d.ts +15 -16
- package/dist/presentation/nav/navigationMenu/NavigationMenu.vue.d.ts +11 -12
- package/dist/presentation/nav/navigationMenu/NavigationMenuContent.vue.d.ts +3 -4
- package/dist/presentation/nav/navigationMenu/NavigationMenuItem.vue.d.ts +4 -5
- package/dist/presentation/nav/navigationMenu/NavigationMenuLink.vue.d.ts +3 -4
- package/dist/presentation/nav/navigationMenu/NavigationMenuList.vue.d.ts +3 -246
- package/dist/presentation/nav/navigationMenu/NavigationMenuTrigger.vue.d.ts +3 -4
- package/dist/presentation/nav/navigationMenu/index.d.ts +5 -5
- package/dist/presentation/nav/pagination/Pagination.vue.d.ts +11 -14
- package/dist/presentation/nav/scrollSpy/ScrollSpy.vue.d.ts +7 -8
- package/dist/presentation/nav/scrollSpy/UseScrollSpy.d.ts +1 -1
- package/dist/presentation/nav/tableOfContents/TableOfContents.vue.d.ts +15 -16
- package/dist/presentation/nav/tableOfContents/index.d.ts +1 -1
- package/dist/presentation/overlays/OverlayBody.vue.d.ts +3 -4
- package/dist/presentation/overlays/OverlayCloseButton.vue.d.ts +6 -7
- package/dist/presentation/overlays/OverlayDescription.vue.d.ts +3 -4
- package/dist/presentation/overlays/OverlayExtensions.d.ts +14 -0
- package/dist/presentation/overlays/OverlayFooter.vue.d.ts +3 -4
- package/dist/presentation/overlays/OverlayHeader.vue.d.ts +3 -4
- package/dist/presentation/overlays/OverlayTitle.vue.d.ts +3 -4
- package/dist/presentation/overlays/actionSheet/ActionSheet.vue.d.ts +12 -17
- package/dist/presentation/overlays/actionSheet/ActionSheetAction.vue.d.ts +7 -8
- package/dist/presentation/overlays/actionSheet/ActionSheetCancel.vue.d.ts +3 -4
- package/dist/presentation/overlays/actionSheet/index.d.ts +2 -2
- package/dist/presentation/overlays/alertModal/AlertModal.vue.d.ts +6 -10
- package/dist/presentation/overlays/alertModal/AlertModalAction.vue.d.ts +5 -6
- package/dist/presentation/overlays/alertModal/AlertModalCancel.vue.d.ts +3 -4
- package/dist/presentation/overlays/alertModal/AlertModalContent.vue.d.ts +3 -4
- package/dist/presentation/overlays/alertModal/index.d.ts +3 -3
- package/dist/presentation/overlays/backdropOverlay/BackdropOverlay.vue.d.ts +39 -0
- package/dist/presentation/overlays/backdropOverlay/index.d.ts +1 -0
- package/dist/presentation/overlays/bottomSheet/BottomSheet.vue.d.ts +27 -32
- package/dist/presentation/overlays/commandPaletteModal/CommandPaletteModal.vue.d.ts +37 -0
- package/dist/presentation/overlays/commandPaletteModal/CommandPaletteModalContent.vue.d.ts +16 -0
- package/dist/presentation/overlays/commandPaletteModal/CommandPaletteModalContext.d.ts +42 -0
- package/dist/presentation/overlays/commandPaletteModal/CommandPaletteModalEmpty.vue.d.ts +18 -0
- package/dist/presentation/overlays/commandPaletteModal/CommandPaletteModalGroup.vue.d.ts +18 -0
- package/dist/presentation/overlays/commandPaletteModal/CommandPaletteModalInput.vue.d.ts +13 -0
- package/dist/presentation/overlays/commandPaletteModal/CommandPaletteModalItem.vue.d.ts +35 -0
- package/dist/presentation/overlays/commandPaletteModal/CommandPaletteModalList.vue.d.ts +18 -0
- package/dist/presentation/overlays/commandPaletteModal/CommandPaletteModalSeparator.vue.d.ts +11 -0
- package/dist/presentation/overlays/commandPaletteModal/index.d.ts +9 -0
- package/dist/presentation/overlays/drawer/Drawer.vue.d.ts +16 -29
- package/dist/presentation/overlays/drawer/DrawerContent.vue.d.ts +14 -15
- package/dist/presentation/overlays/drawer/DrawerTrigger.vue.d.ts +6 -7
- package/dist/presentation/overlays/drawer/index.d.ts +1 -1
- package/dist/presentation/overlays/hoverCard/HoverCard.vue.d.ts +17 -30
- package/dist/presentation/overlays/hoverCard/HoverCardArrow.vue.d.ts +3 -4
- package/dist/presentation/overlays/hoverCard/HoverCardContent.vue.d.ts +5 -7
- package/dist/presentation/overlays/hoverCard/HoverCardTrigger.vue.d.ts +6 -7
- package/dist/presentation/overlays/hoverCard/index.d.ts +2 -2
- package/dist/presentation/overlays/index.d.ts +4 -1
- package/dist/presentation/overlays/index.js +50 -37
- package/dist/presentation/overlays/index.js.map +1 -1
- package/dist/presentation/overlays/modal/Modal.vue.d.ts +16 -30
- package/dist/presentation/overlays/modal/ModalContent.vue.d.ts +13 -14
- package/dist/presentation/overlays/modal/ModalTrigger.vue.d.ts +6 -7
- package/dist/presentation/overlays/modal/index.d.ts +2 -2
- package/dist/presentation/overlays/popover/Popover.vue.d.ts +21 -30
- package/dist/presentation/overlays/popover/PopoverArrow.vue.d.ts +3 -4
- package/dist/presentation/overlays/popover/PopoverContent.vue.d.ts +10 -11
- package/dist/presentation/overlays/popover/PopoverTrigger.vue.d.ts +6 -7
- package/dist/presentation/overlays/tooltip/Tooltip.vue.d.ts +41 -0
- package/dist/presentation/overlays/tourPopover/TourPopover.vue.d.ts +46 -0
- package/dist/presentation/overlays/tourPopover/index.d.ts +1 -0
- package/dist/query/PageExtensions.d.ts +16 -0
- package/dist/query/Testing.d.ts +1 -0
- package/dist/query/Testing.js +48 -0
- package/dist/query/Testing.js.map +1 -0
- package/dist/query/adapters/tanstack/CreateQueryClient.d.ts +33 -0
- package/dist/query/adapters/tanstack/Endpoints.d.ts +19 -0
- package/dist/query/adapters/tanstack/OptimisticTransactions.d.ts +3 -0
- package/dist/query/adapters/tanstack/Persistence.d.ts +41 -0
- package/dist/query/adapters/tanstack/QueryOutcome.d.ts +8 -0
- package/dist/query/adapters/tanstack/QueryProgressBridge.d.ts +15 -0
- package/dist/query/adapters/tanstack/QueryProvider.vue.d.ts +16 -0
- package/dist/query/adapters/tanstack/QueryTestUtils.d.ts +54 -0
- package/dist/query/adapters/tanstack/hooks/UseAppInfiniteQuery.d.ts +49 -0
- package/dist/query/adapters/tanstack/hooks/UseAppLazyQuery.d.ts +44 -0
- package/dist/query/adapters/tanstack/hooks/UseAppMutation.d.ts +36 -0
- package/dist/query/adapters/tanstack/hooks/UseAppPaginatedQuery.d.ts +49 -0
- package/dist/query/adapters/tanstack/hooks/UseAppQueries.d.ts +50 -0
- package/dist/query/adapters/tanstack/hooks/UseAppQuery.d.ts +42 -0
- package/dist/query/adapters/tanstack/hooks/UseAppSuspenseQuery.d.ts +50 -0
- package/dist/query/adapters/tanstack/hooks/UseOptimisticMutation.d.ts +38 -0
- package/dist/query/adapters/tanstack/hooks/UsePrefetchQuery.d.ts +28 -0
- package/dist/query/adapters/tanstack/hooks/UseQueryCache.d.ts +33 -0
- package/dist/query/adapters/tanstack/index.d.ts +19 -0
- package/dist/query/adapters/tanstack/queryDevtools/QueryDevtools.vue.d.ts +9 -0
- package/dist/query/adapters/tanstack/queryDevtools/index.d.ts +1 -0
- package/dist/query/index.d.ts +1 -19
- package/dist/query/index.js +155 -93
- package/dist/query/index.js.map +1 -1
- package/dist/router/Paths.d.ts +4 -6
- package/dist/router/ProgressProvider.vue.d.ts +5 -6
- package/dist/router/adapters/vueRouter/CreateAppRouter.d.ts +65 -0
- package/dist/router/adapters/vueRouter/DocumentMeta.d.ts +13 -0
- package/dist/router/adapters/vueRouter/Guards.d.ts +32 -0
- package/dist/router/adapters/vueRouter/LazyRoute.d.ts +19 -0
- package/dist/router/adapters/vueRouter/RouteConfig.d.ts +97 -0
- package/dist/router/adapters/vueRouter/RouteHandles.d.ts +30 -0
- package/dist/router/adapters/vueRouter/RoutePersistence.d.ts +20 -0
- package/dist/router/adapters/vueRouter/appErrorBoundary/AppErrorBoundary.vue.d.ts +25 -0
- package/dist/router/adapters/vueRouter/appErrorBoundary/index.d.ts +1 -0
- package/dist/router/adapters/vueRouter/appNavLink/AppNavLink.vue.d.ts +39 -0
- package/dist/router/adapters/vueRouter/appNavLink/index.d.ts +1 -0
- package/dist/router/adapters/vueRouter/hooks/UseBreadcrumbs.d.ts +17 -0
- package/dist/router/adapters/vueRouter/hooks/UsePrefetch.d.ts +19 -0
- package/dist/router/adapters/vueRouter/index.d.ts +23 -0
- package/dist/router/adapters/vueRouter/navigationProgress/NavigationProgress.vue.d.ts +18 -0
- package/dist/router/adapters/vueRouter/navigationProgress/index.d.ts +1 -0
- package/dist/router/adapters/vueRouter/notFound/NotFound.vue.d.ts +9 -0
- package/dist/router/adapters/vueRouter/notFound/index.d.ts +1 -0
- package/dist/router/adapters/vueRouter/routeAnnouncer/RouteAnnouncer.vue.d.ts +9 -0
- package/dist/router/adapters/vueRouter/routeAnnouncer/index.d.ts +1 -0
- package/dist/router/index.d.ts +1 -23
- package/dist/router/index.js +63 -29
- package/dist/router/index.js.map +1 -1
- package/dist/themes.css +1115 -1115
- package/dist/themes.json +5 -4
- package/package.json +93 -48
- package/dist/auth/AuthContext.d.ts +0 -41
- package/dist/auth/AuthProvider.vue.d.ts +0 -33
- package/dist/chunks/Announce.vue_vue_type_script_setup_true_lang-CDTltiIl.js +0 -46
- package/dist/chunks/Announce.vue_vue_type_script_setup_true_lang-CDTltiIl.js.map +0 -1
- package/dist/chunks/ApiError-l0YdcqqV.js +0 -15
- package/dist/chunks/ApiError-l0YdcqqV.js.map +0 -1
- package/dist/chunks/BackToTopButton.vue_vue_type_script_setup_true_lang-iLYlhK05.js +0 -1002
- package/dist/chunks/BackToTopButton.vue_vue_type_script_setup_true_lang-iLYlhK05.js.map +0 -1
- package/dist/chunks/Backdrop.vue_vue_type_script_setup_true_lang-CKG--_g8.js +0 -78
- package/dist/chunks/Backdrop.vue_vue_type_script_setup_true_lang-CKG--_g8.js.map +0 -1
- package/dist/chunks/BottomSheet.vue_vue_type_script_setup_true_lang-CmNaGird.js +0 -1094
- package/dist/chunks/BottomSheet.vue_vue_type_script_setup_true_lang-CmNaGird.js.map +0 -1
- package/dist/chunks/Bytes-7Jxs6Bq6.js +0 -21
- package/dist/chunks/Bytes-7Jxs6Bq6.js.map +0 -1
- package/dist/chunks/ChatComposer.vue_vue_type_script_setup_true_lang-DfeVsj9h.js +0 -13193
- package/dist/chunks/ChatComposer.vue_vue_type_script_setup_true_lang-DfeVsj9h.js.map +0 -1
- package/dist/chunks/Chord-D9Z-j3O0.js +0 -139
- package/dist/chunks/Chord-D9Z-j3O0.js.map +0 -1
- package/dist/chunks/ColorModeContext-Bz6CBL0V.js +0 -21
- package/dist/chunks/ColorModeContext-Bz6CBL0V.js.map +0 -1
- package/dist/chunks/Compare-Du6p-OX1.js +0 -18
- package/dist/chunks/Compare-Du6p-OX1.js.map +0 -1
- package/dist/chunks/ControlGroup.vue_vue_type_script_setup_true_lang-CV8Xstes.js +0 -229
- package/dist/chunks/ControlGroup.vue_vue_type_script_setup_true_lang-CV8Xstes.js.map +0 -1
- package/dist/chunks/CssExtensions-BzLJG57F.js +0 -161
- package/dist/chunks/CssExtensions-BzLJG57F.js.map +0 -1
- package/dist/chunks/DateExtensions-C6a-h8ji.js +0 -272
- package/dist/chunks/DateExtensions-C6a-h8ji.js.map +0 -1
- package/dist/chunks/DeepEqual-7lBKnkNS.js +0 -29
- package/dist/chunks/DeepEqual-7lBKnkNS.js.map +0 -1
- package/dist/chunks/DismissableLayer.vue_vue_type_script_setup_true_lang-ptH1ttBL.js +0 -214
- package/dist/chunks/DismissableLayer.vue_vue_type_script_setup_true_lang-ptH1ttBL.js.map +0 -1
- package/dist/chunks/DrawerContent.vue_vue_type_script_setup_true_lang-4n5w3lg2.js +0 -207
- package/dist/chunks/DrawerContent.vue_vue_type_script_setup_true_lang-4n5w3lg2.js.map +0 -1
- package/dist/chunks/Environment-CuQav_mw.js +0 -68
- package/dist/chunks/Environment-CuQav_mw.js.map +0 -1
- package/dist/chunks/Equality-DIQYQysz.js +0 -21
- package/dist/chunks/Equality-DIQYQysz.js.map +0 -1
- package/dist/chunks/ErrorLike-Cfj0lZW3.js +0 -27
- package/dist/chunks/ErrorLike-Cfj0lZW3.js.map +0 -1
- package/dist/chunks/ErrorMessage-Cqt7WaFn.js +0 -26
- package/dist/chunks/ErrorMessage-Cqt7WaFn.js.map +0 -1
- package/dist/chunks/ErrorRecognizers-oTklha6D.js +0 -17
- package/dist/chunks/ErrorRecognizers-oTklha6D.js.map +0 -1
- package/dist/chunks/FieldErrors-2zjhia4U.js +0 -56
- package/dist/chunks/FieldErrors-2zjhia4U.js.map +0 -1
- package/dist/chunks/FileName-CmNjFV7t.js +0 -30
- package/dist/chunks/FileName-CmNjFV7t.js.map +0 -1
- package/dist/chunks/FormControlProvider.vue_vue_type_script_setup_true_lang-Fak7Jv46.js +0 -73
- package/dist/chunks/FormControlProvider.vue_vue_type_script_setup_true_lang-Fak7Jv46.js.map +0 -1
- package/dist/chunks/HtmlExtensions-jlKY5f9C.js +0 -23
- package/dist/chunks/HtmlExtensions-jlKY5f9C.js.map +0 -1
- package/dist/chunks/Icon.vue_vue_type_script_setup_true_lang-DgwdLCRR.js +0 -27
- package/dist/chunks/Icon.vue_vue_type_script_setup_true_lang-DgwdLCRR.js.map +0 -1
- package/dist/chunks/Inline.vue_vue_type_script_setup_true_lang-BvWbQpJD.js +0 -68
- package/dist/chunks/Inline.vue_vue_type_script_setup_true_lang-BvWbQpJD.js.map +0 -1
- package/dist/chunks/KeyboardExtensions-CQlkK53D.js +0 -34
- package/dist/chunks/KeyboardExtensions-CQlkK53D.js.map +0 -1
- package/dist/chunks/Listbox.variants-CqAkYsmK.js +0 -44
- package/dist/chunks/Listbox.variants-CqAkYsmK.js.map +0 -1
- package/dist/chunks/LocaleContext-B3UXrI6p.js +0 -39
- package/dist/chunks/LocaleContext-B3UXrI6p.js.map +0 -1
- package/dist/chunks/Messages-BGfQHMmW.js +0 -201
- package/dist/chunks/Messages-BGfQHMmW.js.map +0 -1
- package/dist/chunks/ModalContent.vue_vue_type_script_setup_true_lang-Co5jaeXk.js +0 -191
- package/dist/chunks/ModalContent.vue_vue_type_script_setup_true_lang-Co5jaeXk.js.map +0 -1
- package/dist/chunks/NavItem.vue_vue_type_script_setup_true_lang-CGBo2TiV.js +0 -86
- package/dist/chunks/NavItem.vue_vue_type_script_setup_true_lang-CGBo2TiV.js.map +0 -1
- package/dist/chunks/Navbar.vue_vue_type_script_setup_true_lang-Cy0zvm5d.js +0 -2073
- package/dist/chunks/Navbar.vue_vue_type_script_setup_true_lang-Cy0zvm5d.js.map +0 -1
- package/dist/chunks/NotificationItem.vue_vue_type_script_setup_true_lang-DySfo3fD.js +0 -2727
- package/dist/chunks/NotificationItem.vue_vue_type_script_setup_true_lang-DySfo3fD.js.map +0 -1
- package/dist/chunks/OptionTileGroup.vue_vue_type_script_setup_true_lang-CKSVGCby.js +0 -964
- package/dist/chunks/OptionTileGroup.vue_vue_type_script_setup_true_lang-CKSVGCby.js.map +0 -1
- package/dist/chunks/OverlayChrome-e4MNr8Yl.js +0 -17
- package/dist/chunks/OverlayChrome-e4MNr8Yl.js.map +0 -1
- package/dist/chunks/PopoverContent.vue_vue_type_script_setup_true_lang-DYd617X5.js +0 -212
- package/dist/chunks/PopoverContent.vue_vue_type_script_setup_true_lang-DYd617X5.js.map +0 -1
- package/dist/chunks/Portal.vue_vue_type_script_setup_true_lang-CF3R0VCZ.js +0 -34
- package/dist/chunks/Portal.vue_vue_type_script_setup_true_lang-CF3R0VCZ.js.map +0 -1
- package/dist/chunks/Presence-DE4MlrJz.js +0 -138
- package/dist/chunks/Presence-DE4MlrJz.js.map +0 -1
- package/dist/chunks/Primitive-Cm3ECaVw.js +0 -20
- package/dist/chunks/Primitive-Cm3ECaVw.js.map +0 -1
- package/dist/chunks/QueryPermission--OKfvS9c.js +0 -82
- package/dist/chunks/QueryPermission--OKfvS9c.js.map +0 -1
- package/dist/chunks/RovingFocusGroup.vue_vue_type_script_setup_true_lang-DCpYSP2V.js +0 -235
- package/dist/chunks/RovingFocusGroup.vue_vue_type_script_setup_true_lang-DCpYSP2V.js.map +0 -1
- package/dist/chunks/ScrollLockProvider.vue_vue_type_script_setup_true_lang-_ihHJ7jI.js +0 -20
- package/dist/chunks/ScrollLockProvider.vue_vue_type_script_setup_true_lang-_ihHJ7jI.js.map +0 -1
- package/dist/chunks/SerializeError-CclP2jCW.js +0 -61
- package/dist/chunks/SerializeError-CclP2jCW.js.map +0 -1
- package/dist/chunks/Side-CSys3p-F.js +0 -23
- package/dist/chunks/Side-CSys3p-F.js.map +0 -1
- package/dist/chunks/Slot-D2lIitvV.js +0 -103
- package/dist/chunks/Slot-D2lIitvV.js.map +0 -1
- package/dist/chunks/SortableHandle.vue_vue_type_script_setup_true_lang-8WPwGZ5e.js +0 -10375
- package/dist/chunks/SortableHandle.vue_vue_type_script_setup_true_lang-8WPwGZ5e.js.map +0 -1
- package/dist/chunks/Spinner.vue_vue_type_script_setup_true_lang-BAepBy2n.js +0 -23
- package/dist/chunks/Spinner.vue_vue_type_script_setup_true_lang-BAepBy2n.js.map +0 -1
- package/dist/chunks/Spinner.vue_vue_type_script_setup_true_lang-C4lNiUOm.js +0 -76
- package/dist/chunks/Spinner.vue_vue_type_script_setup_true_lang-C4lNiUOm.js.map +0 -1
- package/dist/chunks/SubmitErrors-K8nmmj0P.js +0 -374
- package/dist/chunks/SubmitErrors-K8nmmj0P.js.map +0 -1
- package/dist/chunks/SurfaceStyles-B6W7zdMi.js +0 -143
- package/dist/chunks/SurfaceStyles-B6W7zdMi.js.map +0 -1
- package/dist/chunks/TableOfContents.vue_vue_type_script_setup_true_lang-C9eM0AoG.js +0 -2157
- package/dist/chunks/TableOfContents.vue_vue_type_script_setup_true_lang-C9eM0AoG.js.map +0 -1
- package/dist/chunks/ToError-CyTBsmLO.js +0 -52
- package/dist/chunks/ToError-CyTBsmLO.js.map +0 -1
- package/dist/chunks/Tones-WKBNZ_u2.js +0 -112
- package/dist/chunks/Tones-WKBNZ_u2.js.map +0 -1
- package/dist/chunks/TransitionExtensions-hFi80JX2.js +0 -19
- package/dist/chunks/TransitionExtensions-hFi80JX2.js.map +0 -1
- package/dist/chunks/UseHotkeys-CKIYK5Mq.js +0 -82
- package/dist/chunks/UseHotkeys-CKIYK5Mq.js.map +0 -1
- package/dist/chunks/UseNavigationProgress-TQIkkXyU.js +0 -51
- package/dist/chunks/UseNavigationProgress-TQIkkXyU.js.map +0 -1
- package/dist/chunks/cn-CzDCF-Ah.js +0 -9
- package/dist/chunks/cn-CzDCF-Ah.js.map +0 -1
- package/dist/chunks/dataAttr-7BR67dTj.js +0 -7
- package/dist/chunks/dataAttr-7BR67dTj.js.map +0 -1
- package/dist/chunks/index-BGzbbN9T.js +0 -1707
- package/dist/chunks/index-BGzbbN9T.js.map +0 -1
- package/dist/chunks/index-C034dEhy.js +0 -205
- package/dist/chunks/index-C034dEhy.js.map +0 -1
- package/dist/chunks/index-CEoYQiWL.js +0 -130
- package/dist/chunks/index-CEoYQiWL.js.map +0 -1
- package/dist/chunks/index-CzKEU1kI.js +0 -11
- package/dist/chunks/index-CzKEU1kI.js.map +0 -1
- package/dist/chunks/index-op-kbVUk.js +0 -234
- package/dist/chunks/index-op-kbVUk.js.map +0 -1
- package/dist/chunks/useClipboard-BVRwXC--.js +0 -37
- package/dist/chunks/useClipboard-BVRwXC--.js.map +0 -1
- package/dist/chunks/useControlled-B6M4kTLn.js +0 -24
- package/dist/chunks/useControlled-B6M4kTLn.js.map +0 -1
- package/dist/chunks/useDebounceHandler-BIZgvvGp.js +0 -20
- package/dist/chunks/useDebounceHandler-BIZgvvGp.js.map +0 -1
- package/dist/chunks/useEscape-CYPdpm_l.js +0 -15
- package/dist/chunks/useEscape-CYPdpm_l.js.map +0 -1
- package/dist/chunks/useEventListener-gohT6zGs.js +0 -16
- package/dist/chunks/useEventListener-gohT6zGs.js.map +0 -1
- package/dist/chunks/useId-CtgAhGrn.js +0 -9
- package/dist/chunks/useId-CtgAhGrn.js.map +0 -1
- package/dist/chunks/useMediaQuery-DwVcSgGk.js +0 -27
- package/dist/chunks/useMediaQuery-DwVcSgGk.js.map +0 -1
- package/dist/chunks/useOutsideClick-CW80BJfE.js +0 -22
- package/dist/chunks/useOutsideClick-CW80BJfE.js.map +0 -1
- package/dist/chunks/useRecentItems-DFnt5CBy.js +0 -137
- package/dist/chunks/useRecentItems-DFnt5CBy.js.map +0 -1
- package/dist/chunks/useReducedMotion-B9LqQ3UT.js +0 -8
- package/dist/chunks/useReducedMotion-B9LqQ3UT.js.map +0 -1
- package/dist/chunks/useResizeObserver-BUU7lC-n.js +0 -17
- package/dist/chunks/useResizeObserver-BUU7lC-n.js.map +0 -1
- package/dist/chunks/useScrollLock-d6YIGUcs.js +0 -37
- package/dist/chunks/useScrollLock-d6YIGUcs.js.map +0 -1
- package/dist/flags/FlagsContext.d.ts +0 -32
- package/dist/flags/FlagsProvider.vue.d.ts +0 -24
- package/dist/forms-engine/AppForm.d.ts +0 -258
- package/dist/forms-engine/DeepEqual.d.ts +0 -8
- package/dist/forms-engine/FocusFirstInvalid.d.ts +0 -15
- package/dist/forms-engine/FormGlue.d.ts +0 -55
- package/dist/forms-engine/Paths.d.ts +0 -47
- package/dist/forms-engine/SchemaValidation.d.ts +0 -29
- package/dist/forms-engine/SubmitErrors.d.ts +0 -33
- package/dist/forms-engine/UseFieldArray.d.ts +0 -87
- package/dist/forms-engine/house/HouseFormCore.d.ts +0 -33
- package/dist/forms-engine/house/UseAppForm.d.ts +0 -16
- package/dist/forms-engine/house/index.js +0 -315
- package/dist/forms-engine/house/index.js.map +0 -1
- package/dist/forms-engine/index.d.ts +0 -10
- package/dist/forms-engine/index.js +0 -127
- package/dist/forms-engine/index.js.map +0 -1
- package/dist/forms-engine/tanstack/TanstackFormOverlay.d.ts +0 -49
- package/dist/forms-engine/tanstack/UseAppForm.d.ts +0 -26
- package/dist/forms-engine/tanstack/index.js +0 -407
- package/dist/forms-engine/tanstack/index.js.map +0 -1
- package/dist/foundation/animation/AnimatedLayout.d.ts +0 -72
- package/dist/foundation/clipboard/UseClipboardCopy.d.ts +0 -40
- package/dist/foundation/clipboard/UsePasteHandler.d.ts +0 -35
- package/dist/foundation/commands/CommandsContext.d.ts +0 -30
- package/dist/foundation/commands/CommandsProvider.vue.d.ts +0 -18
- package/dist/foundation/commands/UseCommandRegistry.d.ts +0 -19
- package/dist/foundation/commands/UseCommandShortcuts.d.ts +0 -18
- package/dist/foundation/device/UseBreakpoint.d.ts +0 -20
- package/dist/foundation/device/UseDisplayMode.d.ts +0 -23
- package/dist/foundation/device/UsePointer.d.ts +0 -25
- package/dist/foundation/format/Text.d.ts +0 -51
- package/dist/foundation/format/index.js +0 -100
- package/dist/foundation/format/index.js.map +0 -1
- package/dist/foundation/geolocation/GeolocationReading.d.ts +0 -30
- package/dist/foundation/geolocation/PositionResult.d.ts +0 -74
- package/dist/foundation/geolocation/UseGeolocation.d.ts +0 -38
- package/dist/foundation/geolocation/UseWatchPosition.d.ts +0 -16
- package/dist/foundation/gestures/UseDrag.d.ts +0 -75
- package/dist/foundation/gestures/UseLongPress.d.ts +0 -42
- package/dist/foundation/gestures/UsePinch.d.ts +0 -47
- package/dist/foundation/gestures/UseSwipe.d.ts +0 -46
- package/dist/foundation/hooks/index.d.ts +0 -17
- package/dist/foundation/hooks/index.js +0 -34
- package/dist/foundation/hooks/index.js.map +0 -1
- package/dist/foundation/hooks/useAutosave/index.d.ts +0 -1
- package/dist/foundation/hooks/useAutosave/useAutosave.d.ts +0 -46
- package/dist/foundation/hooks/useClipboard/index.d.ts +0 -1
- package/dist/foundation/hooks/useClipboard/useClipboard.d.ts +0 -24
- package/dist/foundation/hooks/useControlled/index.d.ts +0 -1
- package/dist/foundation/hooks/useControlled/useControlled.d.ts +0 -31
- package/dist/foundation/hooks/useDebounceHandler/index.d.ts +0 -1
- package/dist/foundation/hooks/useDisclosure/index.d.ts +0 -1
- package/dist/foundation/hooks/useEscape/index.d.ts +0 -1
- package/dist/foundation/hooks/useEventListener/index.d.ts +0 -1
- package/dist/foundation/hooks/useFocusTrap/index.d.ts +0 -1
- package/dist/foundation/hooks/useId/index.d.ts +0 -1
- package/dist/foundation/hooks/useMediaQuery/index.d.ts +0 -1
- package/dist/foundation/hooks/useMediaQuery/useMediaQuery.d.ts +0 -12
- package/dist/foundation/hooks/useOutsideClick/index.d.ts +0 -1
- package/dist/foundation/hooks/usePersistentState/index.d.ts +0 -1
- package/dist/foundation/hooks/usePersistentState/usePersistentState.d.ts +0 -31
- package/dist/foundation/hooks/useRecentItems/index.d.ts +0 -1
- package/dist/foundation/hooks/useRecentItems/useRecentItems.d.ts +0 -34
- package/dist/foundation/hooks/useReducedMotion/index.d.ts +0 -1
- package/dist/foundation/hooks/useResizeObserver/index.d.ts +0 -1
- package/dist/foundation/hooks/useScrollLock/index.d.ts +0 -1
- package/dist/foundation/hooks/useTypeahead/index.d.ts +0 -1
- package/dist/foundation/hooks/useTypeahead/useTypeahead.d.ts +0 -42
- package/dist/foundation/http/Page.d.ts +0 -47
- package/dist/foundation/http/temporalReviver.d.ts +0 -9
- package/dist/foundation/i18n/FormattedRelative.vue.d.ts +0 -10
- package/dist/foundation/i18n/LocaleContext.d.ts +0 -35
- package/dist/foundation/i18n/LocaleProvider.vue.d.ts +0 -18
- package/dist/foundation/icons/Icon.vue.d.ts +0 -40
- package/dist/foundation/icons/Spinner.vue.d.ts +0 -7
- package/dist/foundation/media/MediaStreamResult.d.ts +0 -45
- package/dist/foundation/net/UseEventStream.d.ts +0 -25
- package/dist/foundation/net/UsePolling.d.ts +0 -26
- package/dist/foundation/net/UseSocket.d.ts +0 -32
- package/dist/foundation/notifications/UseNotificationPermission.d.ts +0 -27
- package/dist/foundation/notifications/UsePermissionState.d.ts +0 -14
- package/dist/foundation/observers/UseInView.d.ts +0 -41
- package/dist/foundation/observers/UseIntersectionObserver.d.ts +0 -18
- package/dist/foundation/observers/UseMutationObserver.d.ts +0 -21
- package/dist/foundation/screen/ScreenResult.d.ts +0 -38
- package/dist/foundation/screen/UseFullscreen.d.ts +0 -28
- package/dist/foundation/screen/UseOrientation.d.ts +0 -28
- package/dist/foundation/screen/UseWakeLock.d.ts +0 -18
- package/dist/foundation/selection/Filter.d.ts +0 -71
- package/dist/foundation/selection/Selection.d.ts +0 -116
- package/dist/foundation/selection/Sort.d.ts +0 -69
- package/dist/foundation/selection/UseFilters.d.ts +0 -34
- package/dist/foundation/selection/UseSelection.d.ts +0 -54
- package/dist/foundation/selection/UseSort.d.ts +0 -36
- package/dist/foundation/shortcuts/UseHotkeys.d.ts +0 -34
- package/dist/foundation/speech/UseSpeechRecognition.d.ts +0 -45
- package/dist/foundation/speech/UseSpeechSynthesis.d.ts +0 -37
- package/dist/foundation/storage/zustand/ZustandPersist.d.ts +0 -36
- package/dist/foundation/storage/zustand/index.d.ts +0 -1
- package/dist/foundation/storage/zustand/index.js.map +0 -1
- package/dist/foundation/sync/LeaderElection.d.ts +0 -88
- package/dist/foundation/sync/SyncChannel.d.ts +0 -65
- package/dist/foundation/sync/UseBroadcastState.d.ts +0 -31
- package/dist/foundation/sync/UseLeaderElection.d.ts +0 -25
- package/dist/foundation/sync/UseSyncChannel.d.ts +0 -16
- package/dist/foundation/sync/index.d.ts +0 -7
- package/dist/foundation/sync/index.js +0 -484
- package/dist/foundation/sync/index.js.map +0 -1
- package/dist/foundation/themes/pool.d.ts +0 -3
- package/dist/foundation/themes/registry.d.ts +0 -16
- package/dist/foundation/themes/validate.d.ts +0 -25
- package/dist/foundation/themes/validated.d.ts +0 -3
- package/dist/foundation/undo/HistoryCore.d.ts +0 -92
- package/dist/foundation/undo/UseUndoHistory.d.ts +0 -66
- package/dist/foundation/undo/UseUndoShortcuts.d.ts +0 -20
- package/dist/foundation/undo/index.d.ts +0 -5
- package/dist/foundation/undo/index.js +0 -361
- package/dist/foundation/undo/index.js.map +0 -1
- package/dist/foundation/utils/Align/index.d.ts +0 -1
- package/dist/foundation/utils/ColorExtensions/ColorExtensions.d.ts +0 -51
- package/dist/foundation/utils/ColorExtensions/index.d.ts +0 -1
- package/dist/foundation/utils/Compare/index.d.ts +0 -1
- package/dist/foundation/utils/CornerPosition/index.d.ts +0 -1
- package/dist/foundation/utils/CssExtensions/CssExtensions.d.ts +0 -115
- package/dist/foundation/utils/CssExtensions/index.d.ts +0 -1
- package/dist/foundation/utils/ElementTag/index.d.ts +0 -1
- package/dist/foundation/utils/Environment/Environment.d.ts +0 -12
- package/dist/foundation/utils/Environment/index.d.ts +0 -1
- package/dist/foundation/utils/Equality/index.d.ts +0 -1
- package/dist/foundation/utils/HtmlExtensions/index.d.ts +0 -1
- package/dist/foundation/utils/KeyboardExtensions/index.d.ts +0 -1
- package/dist/foundation/utils/Layers/Layers.d.ts +0 -35
- package/dist/foundation/utils/Layers/index.d.ts +0 -1
- package/dist/foundation/utils/OptionalExtensions/index.d.ts +0 -1
- package/dist/foundation/utils/Orientation/index.d.ts +0 -1
- package/dist/foundation/utils/OverlayPosition/index.d.ts +0 -1
- package/dist/foundation/utils/PressExtensions/index.d.ts +0 -1
- package/dist/foundation/utils/ProgressTone/index.d.ts +0 -1
- package/dist/foundation/utils/Severity/index.d.ts +0 -1
- package/dist/foundation/utils/Side/index.d.ts +0 -1
- package/dist/foundation/utils/StatusTone/index.d.ts +0 -1
- package/dist/foundation/utils/StyleTokens/index.d.ts +0 -1
- package/dist/foundation/utils/SurfaceStyles/SurfaceStyles.d.ts +0 -397
- package/dist/foundation/utils/SurfaceStyles/index.d.ts +0 -1
- package/dist/foundation/utils/Tones/Tones.d.ts +0 -21
- package/dist/foundation/utils/Tones/index.d.ts +0 -1
- package/dist/foundation/utils/TransitionExtensions/index.d.ts +0 -1
- package/dist/foundation/utils/cn/index.d.ts +0 -1
- package/dist/foundation/utils/composeEventHandlers/index.d.ts +0 -1
- package/dist/foundation/utils/dataAttr/index.d.ts +0 -1
- package/dist/foundation/utils/index.d.ts +0 -33
- package/dist/foundation/utils/index.js +0 -67
- package/dist/foundation/utils/index.js.map +0 -1
- package/dist/foundation/utils/polymorphic/index.d.ts +0 -1
- package/dist/foundation/utils/polymorphic/polymorphic.d.ts +0 -29
- package/dist/foundation/utils/tv/index.d.ts +0 -1
- package/dist/foundation/validation/Composites.d.ts +0 -62
- package/dist/foundation/validation/Messages.d.ts +0 -69
- package/dist/foundation/validation/ValidationError.d.ts +0 -14
- package/dist/foundation/validation/ValidationResult.d.ts +0 -49
- package/dist/foundation/validation/Validator.d.ts +0 -69
- package/dist/foundation/validation/index.d.ts +0 -8
- package/dist/foundation/validation/index.js +0 -512
- package/dist/foundation/validation/index.js.map +0 -1
- package/dist/presentation/actions/fab/FAB.variants.d.ts +0 -158
- package/dist/presentation/actions/fab/FAB.vue.d.ts +0 -29
- package/dist/presentation/actions/fab/index.d.ts +0 -2
- package/dist/presentation/actions/link/Link.variants.d.ts +0 -111
- package/dist/presentation/actions/link/Link.vue.d.ts +0 -24
- package/dist/presentation/actions/link/index.d.ts +0 -2
- package/dist/presentation/actions/optionTile/OptionTile.variants.d.ts +0 -10
- package/dist/presentation/actions/optionTile/OptionTile.vue.d.ts +0 -31
- package/dist/presentation/actions/optionTile/index.d.ts +0 -2
- package/dist/presentation/actions/optionTileGroup/OptionTileGroup.variants.d.ts +0 -76
- package/dist/presentation/actions/optionTileGroup/OptionTileGroup.vue.d.ts +0 -27
- package/dist/presentation/actions/optionTileGroup/index.d.ts +0 -2
- package/dist/presentation/actions/segmentedControl/SegmentedControl.vue.d.ts +0 -20
- package/dist/presentation/actions/segmentedControl/index.d.ts +0 -1
- package/dist/presentation/actions/speedDial/SpeedDial.vue.d.ts +0 -28
- package/dist/presentation/actions/speedDial/SpeedDialAction.vue.d.ts +0 -41
- package/dist/presentation/actions/speedDial/SpeedDialContext.d.ts +0 -36
- package/dist/presentation/actions/speedDial/SpeedDialList.vue.d.ts +0 -13
- package/dist/presentation/actions/speedDial/SpeedDialTrigger.vue.d.ts +0 -30
- package/dist/presentation/actions/speedDial/index.d.ts +0 -164
- package/dist/presentation/actions/toggleButton/ToggleButton.variants.d.ts +0 -141
- package/dist/presentation/actions/toggleButton/ToggleButton.vue.d.ts +0 -59
- package/dist/presentation/actions/toggleButton/index.d.ts +0 -2
- package/dist/presentation/actions/toggleButtonGroup/ToggleButtonGroup.variants.d.ts +0 -33
- package/dist/presentation/actions/toggleButtonGroup/ToggleButtonGroup.vue.d.ts +0 -72
- package/dist/presentation/actions/toggleButtonGroup/ToggleButtonGroupContext.d.ts +0 -24
- package/dist/presentation/actions/toggleButtonGroup/index.d.ts +0 -3
- package/dist/presentation/display/accordion/Accordion.vue.d.ts +0 -45
- package/dist/presentation/display/accordion/AccordionContent.vue.d.ts +0 -14
- package/dist/presentation/display/accordion/AccordionContext.d.ts +0 -29
- package/dist/presentation/display/accordion/AccordionItem.vue.d.ts +0 -20
- package/dist/presentation/display/accordion/AccordionTrigger.vue.d.ts +0 -14
- package/dist/presentation/display/accordion/index.d.ts +0 -5
- package/dist/presentation/display/activityFeed/ActivityFeed.vue.d.ts +0 -18
- package/dist/presentation/display/activityFeed/ActivityItem.vue.d.ts +0 -29
- package/dist/presentation/display/activityFeed/index.d.ts +0 -2
- package/dist/presentation/display/animatedNumber/AnimatedNumber.vue.d.ts +0 -34
- package/dist/presentation/display/animatedNumber/index.d.ts +0 -1
- package/dist/presentation/display/annotationMarker/AnnotationMarker.vue.d.ts +0 -43
- package/dist/presentation/display/annotationMarker/index.d.ts +0 -1
- package/dist/presentation/display/audioWaveform/AudioWaveform.vue.d.ts +0 -58
- package/dist/presentation/display/audioWaveform/index.d.ts +0 -1
- package/dist/presentation/display/chatBubble/ChatBubble.vue.d.ts +0 -79
- package/dist/presentation/display/chatBubble/index.d.ts +0 -1
- package/dist/presentation/display/code/Code.variants.d.ts +0 -48
- package/dist/presentation/display/code/Code.vue.d.ts +0 -17
- package/dist/presentation/display/code/index.d.ts +0 -2
- package/dist/presentation/display/collapsible/Collapsible.vue.d.ts +0 -40
- package/dist/presentation/display/collapsible/CollapsibleContent.vue.d.ts +0 -18
- package/dist/presentation/display/collapsible/CollapsibleContentInner.vue.d.ts +0 -23
- package/dist/presentation/display/collapsible/CollapsibleContext.d.ts +0 -17
- package/dist/presentation/display/collapsible/CollapsibleTrigger.vue.d.ts +0 -18
- package/dist/presentation/display/collapsible/index.d.ts +0 -4
- package/dist/presentation/display/commentThread/Comment.vue.d.ts +0 -39
- package/dist/presentation/display/commentThread/CommentThread.vue.d.ts +0 -14
- package/dist/presentation/display/commentThread/index.d.ts +0 -2
- package/dist/presentation/display/confetti/Confetti.vue.d.ts +0 -40
- package/dist/presentation/display/confetti/index.d.ts +0 -1
- package/dist/presentation/display/countUp/CountUp.vue.d.ts +0 -40
- package/dist/presentation/display/countUp/index.d.ts +0 -1
- package/dist/presentation/display/dataGrid/CellEditor.vue.d.ts +0 -29
- package/dist/presentation/display/dataGrid/DataGrid.vue.d.ts +0 -47
- package/dist/presentation/display/dataGrid/DataGridTypes.d.ts +0 -65
- package/dist/presentation/display/dataGrid/index.d.ts +0 -2
- package/dist/presentation/display/descriptionList/DescriptionList.vue.d.ts +0 -54
- package/dist/presentation/display/descriptionList/index.d.ts +0 -1
- package/dist/presentation/display/eventCalendar/AgendaView.vue.d.ts +0 -13
- package/dist/presentation/display/eventCalendar/EventCalendar.vue.d.ts +0 -42
- package/dist/presentation/display/eventCalendar/EventCalendarTypes.d.ts +0 -28
- package/dist/presentation/display/eventCalendar/MonthView.vue.d.ts +0 -17
- package/dist/presentation/display/eventCalendar/TimeGridView.vue.d.ts +0 -18
- package/dist/presentation/display/eventCalendar/index.d.ts +0 -2
- package/dist/presentation/display/eyebrow/Eyebrow.vue.d.ts +0 -32
- package/dist/presentation/display/eyebrow/index.d.ts +0 -1
- package/dist/presentation/display/gantt/Gantt.vue.d.ts +0 -59
- package/dist/presentation/display/gantt/index.d.ts +0 -1
- package/dist/presentation/display/heatmapCalendar/HeatmapCalendar.vue.d.ts +0 -62
- package/dist/presentation/display/heatmapCalendar/index.d.ts +0 -1
- package/dist/presentation/display/highlight/Highlight.vue.d.ts +0 -20
- package/dist/presentation/display/highlight/index.d.ts +0 -1
- package/dist/presentation/display/image/Image.vue.d.ts +0 -15
- package/dist/presentation/display/image/index.d.ts +0 -1
- package/dist/presentation/display/kbd/Kbd.vue.d.ts +0 -13
- package/dist/presentation/display/kbd/index.d.ts +0 -1
- package/dist/presentation/display/keyboardShortcut/KeyboardShortcut.vue.d.ts +0 -13
- package/dist/presentation/display/keyboardShortcut/index.d.ts +0 -1
- package/dist/presentation/display/list/List.variants.d.ts +0 -112
- package/dist/presentation/display/list/List.vue.d.ts +0 -23
- package/dist/presentation/display/list/ListContext.d.ts +0 -16
- package/dist/presentation/display/list/ListItem.vue.d.ts +0 -29
- package/dist/presentation/display/list/index.d.ts +0 -4
- package/dist/presentation/display/mark/Mark.vue.d.ts +0 -13
- package/dist/presentation/display/mark/index.d.ts +0 -1
- package/dist/presentation/display/marquee/Marquee.vue.d.ts +0 -39
- package/dist/presentation/display/marquee/index.d.ts +0 -1
- package/dist/presentation/display/messageList/DaySeparator.vue.d.ts +0 -17
- package/dist/presentation/display/messageList/MessageList.vue.d.ts +0 -39
- package/dist/presentation/display/messageList/index.d.ts +0 -2
- package/dist/presentation/display/metaInline/MetaInline.vue.d.ts +0 -21
- package/dist/presentation/display/metaInline/index.d.ts +0 -1
- package/dist/presentation/display/metricChip/MetricChip.vue.d.ts +0 -54
- package/dist/presentation/display/metricChip/index.d.ts +0 -1
- package/dist/presentation/display/nodeEditor/NodeEditor.vue.d.ts +0 -58
- package/dist/presentation/display/notificationDot/NotificationDot.vue.d.ts +0 -47
- package/dist/presentation/display/notificationDot/index.d.ts +0 -1
- package/dist/presentation/display/pdfViewer/PDFViewer.vue.d.ts +0 -40
- package/dist/presentation/display/quote/Quote.vue.d.ts +0 -13
- package/dist/presentation/display/quote/index.d.ts +0 -1
- package/dist/presentation/display/scrollReveal/ScrollReveal.vue.d.ts +0 -50
- package/dist/presentation/display/scrollReveal/index.d.ts +0 -1
- package/dist/presentation/display/sectionHeader/SectionHeader.vue.d.ts +0 -49
- package/dist/presentation/display/sectionHeader/index.d.ts +0 -1
- package/dist/presentation/display/separator/Separator.vue.d.ts +0 -14
- package/dist/presentation/display/separator/index.d.ts +0 -1
- package/dist/presentation/display/snippet/Snippet.vue.d.ts +0 -21
- package/dist/presentation/display/snippet/index.d.ts +0 -1
- package/dist/presentation/display/sortable/Sortable.vue.d.ts +0 -18
- package/dist/presentation/display/sortable/SortableContext.d.ts +0 -22
- package/dist/presentation/display/sortable/SortableHandle.vue.d.ts +0 -14
- package/dist/presentation/display/sortable/SortableItem.vue.d.ts +0 -16
- package/dist/presentation/display/sortable/index.d.ts +0 -4
- package/dist/presentation/display/stat/Stat.vue.d.ts +0 -48
- package/dist/presentation/display/stat/index.d.ts +0 -1
- package/dist/presentation/display/swipeActions/SwipeActions.vue.d.ts +0 -28
- package/dist/presentation/display/swipeActions/index.d.ts +0 -1
- package/dist/presentation/display/tabs/Tabs.vue.d.ts +0 -33
- package/dist/presentation/display/tabs/TabsContext.d.ts +0 -34
- package/dist/presentation/display/tabs/TabsList.vue.d.ts +0 -256
- package/dist/presentation/display/tabs/TabsPanel.vue.d.ts +0 -16
- package/dist/presentation/display/tabs/TabsTab.vue.d.ts +0 -20
- package/dist/presentation/display/tabs/index.d.ts +0 -5
- package/dist/presentation/display/tilt/Tilt.vue.d.ts +0 -31
- package/dist/presentation/display/tilt/index.d.ts +0 -1
- package/dist/presentation/display/tooltip/Tooltip.vue.d.ts +0 -53
- package/dist/presentation/display/tree/Tree.vue.d.ts +0 -275
- package/dist/presentation/display/tree/TreeContext.d.ts +0 -29
- package/dist/presentation/display/tree/TreeGroup.vue.d.ts +0 -28
- package/dist/presentation/display/tree/TreeGroupContent.vue.d.ts +0 -17
- package/dist/presentation/display/tree/TreeItem.vue.d.ts +0 -20
- package/dist/presentation/display/tree/TreeNodeRow.vue.d.ts +0 -27
- package/dist/presentation/display/tree/index.d.ts +0 -4
- package/dist/presentation/display/typewriter/Typewriter.vue.d.ts +0 -32
- package/dist/presentation/display/typewriter/index.d.ts +0 -1
- package/dist/presentation/feedback/feedbackToasts/FeedbackToasts.vue.d.ts +0 -18
- package/dist/presentation/feedback/feedbackToasts/index.d.ts +0 -1
- package/dist/presentation/feedback/liveCursor/LiveCursor.vue.d.ts +0 -33
- package/dist/presentation/feedback/liveCursor/index.d.ts +0 -1
- package/dist/presentation/feedback/notificationCenter/NotificationCenter.vue.d.ts +0 -30
- package/dist/presentation/feedback/notificationCenter/NotificationItem.vue.d.ts +0 -40
- package/dist/presentation/feedback/notificationCenter/index.d.ts +0 -2
- package/dist/presentation/feedback/onboardingChecklist/OnboardingChecklist.vue.d.ts +0 -56
- package/dist/presentation/feedback/onboardingChecklist/OnboardingChecklistTask.vue.d.ts +0 -27
- package/dist/presentation/feedback/onboardingChecklist/index.d.ts +0 -3
- package/dist/presentation/feedback/progressCircle/ProgressCircle.vue.d.ts +0 -21
- package/dist/presentation/feedback/progressCircle/index.d.ts +0 -1
- package/dist/presentation/feedback/progressSteps/ProgressSteps.vue.d.ts +0 -16
- package/dist/presentation/feedback/progressSteps/index.d.ts +0 -1
- package/dist/presentation/feedback/skeleton/Skeleton.variants.d.ts +0 -57
- package/dist/presentation/feedback/skeleton/Skeleton.vue.d.ts +0 -17
- package/dist/presentation/feedback/skeleton/index.d.ts +0 -2
- package/dist/presentation/feedback/toaster/Toaster.vue.d.ts +0 -84
- package/dist/presentation/feedback/toaster/index.d.ts +0 -1
- package/dist/presentation/feedback/tour/Tour.vue.d.ts +0 -46
- package/dist/presentation/feedback/tour/index.d.ts +0 -1
- package/dist/presentation/forms/addressForm/AddressForm.vue.d.ts +0 -54
- package/dist/presentation/forms/addressForm/index.d.ts +0 -1
- package/dist/presentation/forms/calendar/Calendar.vue.d.ts +0 -33
- package/dist/presentation/forms/calendar/index.d.ts +0 -1
- package/dist/presentation/forms/characterCount/CharacterCount.vue.d.ts +0 -15
- package/dist/presentation/forms/characterCount/index.d.ts +0 -1
- package/dist/presentation/forms/chatComposer/ChatComposer.vue.d.ts +0 -74
- package/dist/presentation/forms/chatComposer/index.d.ts +0 -1
- package/dist/presentation/forms/checkbox/Checkbox.variants.d.ts +0 -133
- package/dist/presentation/forms/checkbox/Checkbox.vue.d.ts +0 -48
- package/dist/presentation/forms/checkbox/index.d.ts +0 -2
- package/dist/presentation/forms/colorField/ColorField.vue.d.ts +0 -44
- package/dist/presentation/forms/colorField/index.d.ts +0 -1
- package/dist/presentation/forms/colorSlider/ColorSlider.vue.d.ts +0 -47
- package/dist/presentation/forms/colorSlider/index.d.ts +0 -1
- package/dist/presentation/forms/colorSwatch/ColorSwatch.variants.d.ts +0 -186
- package/dist/presentation/forms/colorSwatch/ColorSwatch.vue.d.ts +0 -33
- package/dist/presentation/forms/colorSwatch/index.d.ts +0 -2
- package/dist/presentation/forms/colorWheel/ColorWheel.vue.d.ts +0 -34
- package/dist/presentation/forms/colorWheel/index.d.ts +0 -1
- package/dist/presentation/forms/combobox/Combobox.vue.d.ts +0 -60
- package/dist/presentation/forms/combobox/ComboboxContent.vue.d.ts +0 -39
- package/dist/presentation/forms/combobox/ComboboxContext.d.ts +0 -53
- package/dist/presentation/forms/combobox/ComboboxEmpty.vue.d.ts +0 -10
- package/dist/presentation/forms/combobox/ComboboxGroup.vue.d.ts +0 -19
- package/dist/presentation/forms/combobox/ComboboxInput.vue.d.ts +0 -12
- package/dist/presentation/forms/combobox/ComboboxItem.vue.d.ts +0 -28
- package/dist/presentation/forms/combobox/ComboboxSeparator.vue.d.ts +0 -3
- package/dist/presentation/forms/combobox/index.d.ts +0 -8
- package/dist/presentation/forms/dateField/DateField.vue.d.ts +0 -54
- package/dist/presentation/forms/dateField/index.d.ts +0 -1
- package/dist/presentation/forms/dateTimeField/DateTimeField.vue.d.ts +0 -59
- package/dist/presentation/forms/dateTimeField/index.d.ts +0 -1
- package/dist/presentation/forms/editable/Editable.vue.d.ts +0 -60
- package/dist/presentation/forms/editable/EditableCancel.vue.d.ts +0 -12
- package/dist/presentation/forms/editable/EditableContext.d.ts +0 -37
- package/dist/presentation/forms/editable/EditableInput.vue.d.ts +0 -12
- package/dist/presentation/forms/editable/EditablePreview.vue.d.ts +0 -7
- package/dist/presentation/forms/editable/EditableSubmit.vue.d.ts +0 -14
- package/dist/presentation/forms/editable/index.d.ts +0 -7
- package/dist/presentation/forms/emojiPicker/useEmojiPicker.d.ts +0 -45
- package/dist/presentation/forms/emojiSizeControl/EmojiSizeControl.variants.d.ts +0 -23
- package/dist/presentation/forms/emojiSizeControl/EmojiSizeControl.vue.d.ts +0 -32
- package/dist/presentation/forms/emojiSizeControl/index.d.ts +0 -2
- package/dist/presentation/forms/fieldset/Fieldset.vue.d.ts +0 -22
- package/dist/presentation/forms/fieldset/index.d.ts +0 -1
- package/dist/presentation/forms/fileUpload/FileUpload.vue.d.ts +0 -60
- package/dist/presentation/forms/fileUpload/index.d.ts +0 -1
- package/dist/presentation/forms/formErrorMessage/FormErrorMessage.vue.d.ts +0 -24
- package/dist/presentation/forms/formErrorMessage/index.d.ts +0 -1
- package/dist/presentation/forms/formHelperText/FormHelperText.vue.d.ts +0 -19
- package/dist/presentation/forms/formHelperText/index.d.ts +0 -1
- package/dist/presentation/forms/inputAddon/InputAddon.vue.d.ts +0 -20
- package/dist/presentation/forms/inputAddon/index.d.ts +0 -1
- package/dist/presentation/forms/inputGroup/InputGroup.vue.d.ts +0 -19
- package/dist/presentation/forms/jsonEditor/JSONEditor.vue.d.ts +0 -49
- package/dist/presentation/forms/jsonEditor/JSONEditorContext.d.ts +0 -28
- package/dist/presentation/forms/jsonEditor/JSONEditorHelpers.d.ts +0 -6
- package/dist/presentation/forms/jsonEditor/JSONEditorTextView.vue.d.ts +0 -14
- package/dist/presentation/forms/jsonEditor/JSONEditorTreeNode.vue.d.ts +0 -15
- package/dist/presentation/forms/jsonEditor/JSONEditorTreeView.vue.d.ts +0 -8
- package/dist/presentation/forms/knob/Knob.vue.d.ts +0 -75
- package/dist/presentation/forms/knob/index.d.ts +0 -1
- package/dist/presentation/forms/label/Label.vue.d.ts +0 -34
- package/dist/presentation/forms/label/index.d.ts +0 -1
- package/dist/presentation/forms/labeledInput/LabeledInput.vue.d.ts +0 -23
- package/dist/presentation/forms/labeledInput/index.d.ts +0 -2
- package/dist/presentation/forms/legend/Legend.vue.d.ts +0 -21
- package/dist/presentation/forms/legend/index.d.ts +0 -1
- package/dist/presentation/forms/listbox/Listbox.variants.d.ts +0 -71
- package/dist/presentation/forms/listbox/Listbox.vue.d.ts +0 -70
- package/dist/presentation/forms/listbox/ListboxContext.d.ts +0 -47
- package/dist/presentation/forms/listbox/ListboxEmpty.vue.d.ts +0 -10
- package/dist/presentation/forms/listbox/ListboxGroup.vue.d.ts +0 -20
- package/dist/presentation/forms/listbox/ListboxItem.vue.d.ts +0 -24
- package/dist/presentation/forms/listbox/ListboxSeparator.vue.d.ts +0 -3
- package/dist/presentation/forms/listbox/index.d.ts +0 -7
- package/dist/presentation/forms/multiSelect/MultiSelect.vue.d.ts +0 -60
- package/dist/presentation/forms/multiSelect/MultiSelectContent.vue.d.ts +0 -31
- package/dist/presentation/forms/multiSelect/MultiSelectContext.d.ts +0 -47
- package/dist/presentation/forms/multiSelect/MultiSelectItem.vue.d.ts +0 -25
- package/dist/presentation/forms/multiSelect/MultiSelectTags.vue.d.ts +0 -24
- package/dist/presentation/forms/multiSelect/MultiSelectTrigger.vue.d.ts +0 -25
- package/dist/presentation/forms/multiSelect/index.d.ts +0 -6
- package/dist/presentation/forms/passwordStrength/PasswordStrength.vue.d.ts +0 -16
- package/dist/presentation/forms/passwordStrength/index.d.ts +0 -1
- package/dist/presentation/forms/radio/Radio.vue.d.ts +0 -35
- package/dist/presentation/forms/radio/index.d.ts +0 -1
- package/dist/presentation/forms/rangeCalendar/RangeCalendar.vue.d.ts +0 -37
- package/dist/presentation/forms/rangeCalendar/index.d.ts +0 -1
- package/dist/presentation/forms/select/Select.variants.d.ts +0 -263
- package/dist/presentation/forms/select/Select.vue.d.ts +0 -69
- package/dist/presentation/forms/select/SelectContent.vue.d.ts +0 -44
- package/dist/presentation/forms/select/SelectContext.d.ts +0 -76
- package/dist/presentation/forms/select/SelectItem.vue.d.ts +0 -33
- package/dist/presentation/forms/select/SelectTrigger.vue.d.ts +0 -21
- package/dist/presentation/forms/select/SelectValue.vue.d.ts +0 -22
- package/dist/presentation/forms/select/index.d.ts +0 -7
- package/dist/presentation/forms/slider/Slider.vue.d.ts +0 -38
- package/dist/presentation/forms/slider/index.d.ts +0 -1
- package/dist/presentation/forms/stepper/Stepper.vue.d.ts +0 -34
- package/dist/presentation/forms/stepper/StepperContext.d.ts +0 -44
- package/dist/presentation/forms/stepper/StepperList.vue.d.ts +0 -256
- package/dist/presentation/forms/stepper/StepperPanel.vue.d.ts +0 -16
- package/dist/presentation/forms/stepper/StepperStep.vue.d.ts +0 -23
- package/dist/presentation/forms/stepper/index.d.ts +0 -5
- package/dist/presentation/forms/switch/Switch.vue.d.ts +0 -35
- package/dist/presentation/forms/switch/index.d.ts +0 -1
- package/dist/presentation/forms/timeField/TimeField.vue.d.ts +0 -53
- package/dist/presentation/forms/timeField/index.d.ts +0 -1
- package/dist/presentation/forms/wizard/Wizard.vue.d.ts +0 -38
- package/dist/presentation/forms/wizard/WizardContext.d.ts +0 -38
- package/dist/presentation/forms/wizard/WizardFooter.vue.d.ts +0 -29
- package/dist/presentation/forms/wizard/WizardStep.vue.d.ts +0 -29
- package/dist/presentation/forms/wizard/WizardSteps.vue.d.ts +0 -7
- package/dist/presentation/forms/wizard/index.d.ts +0 -6
- package/dist/presentation/layout/aspectRatio/AspectRatio.vue.d.ts +0 -18
- package/dist/presentation/layout/aspectRatio/index.d.ts +0 -1
- package/dist/presentation/layout/box/Box.vue.d.ts +0 -19
- package/dist/presentation/layout/box/index.d.ts +0 -1
- package/dist/presentation/layout/center/Center.vue.d.ts +0 -13
- package/dist/presentation/layout/center/index.d.ts +0 -1
- package/dist/presentation/layout/cluster/Cluster.vue.d.ts +0 -22
- package/dist/presentation/layout/cluster/index.d.ts +0 -1
- package/dist/presentation/layout/container/Container.variants.d.ts +0 -84
- package/dist/presentation/layout/container/Container.vue.d.ts +0 -21
- package/dist/presentation/layout/container/index.d.ts +0 -2
- package/dist/presentation/layout/controlGroup/ControlGroup.variants.d.ts +0 -136
- package/dist/presentation/layout/controlGroup/ControlGroup.vue.d.ts +0 -35
- package/dist/presentation/layout/controlGroup/index.d.ts +0 -2
- package/dist/presentation/layout/divider/Divider.variants.d.ts +0 -47
- package/dist/presentation/layout/divider/Divider.vue.d.ts +0 -38
- package/dist/presentation/layout/divider/index.d.ts +0 -2
- package/dist/presentation/layout/flex/Flex.vue.d.ts +0 -18
- package/dist/presentation/layout/flex/index.d.ts +0 -1
- package/dist/presentation/layout/frame/Frame.vue.d.ts +0 -38
- package/dist/presentation/layout/frame/index.d.ts +0 -1
- package/dist/presentation/layout/hStack/HStack.vue.d.ts +0 -14
- package/dist/presentation/layout/hStack/index.d.ts +0 -1
- package/dist/presentation/layout/inline/Inline.vue.d.ts +0 -42
- package/dist/presentation/layout/inline/index.d.ts +0 -1
- package/dist/presentation/layout/overlay/Overlay.variants.d.ts +0 -231
- package/dist/presentation/layout/overlay/Overlay.vue.d.ts +0 -64
- package/dist/presentation/layout/overlay/index.d.ts +0 -2
- package/dist/presentation/layout/pullToRefresh/PullToRefresh.vue.d.ts +0 -22
- package/dist/presentation/layout/pullToRefresh/index.d.ts +0 -1
- package/dist/presentation/layout/resizablePanels/ResizablePanel.vue.d.ts +0 -21
- package/dist/presentation/layout/resizablePanels/ResizablePanels.vue.d.ts +0 -59
- package/dist/presentation/layout/resizablePanels/ResizableSeparator.vue.d.ts +0 -10
- package/dist/presentation/layout/resizablePanels/index.d.ts +0 -4
- package/dist/presentation/layout/spacer/Spacer.vue.d.ts +0 -15
- package/dist/presentation/layout/spacer/index.d.ts +0 -1
- package/dist/presentation/layout/stack/Stack.variants.d.ts +0 -330
- package/dist/presentation/layout/stack/Stack.vue.d.ts +0 -37
- package/dist/presentation/layout/stack/index.d.ts +0 -2
- package/dist/presentation/layout/surface/Surface.vue.d.ts +0 -39
- package/dist/presentation/layout/surface/index.d.ts +0 -1
- package/dist/presentation/layout/twoColumn/TwoColumn.vue.d.ts +0 -28
- package/dist/presentation/layout/twoColumn/index.d.ts +0 -1
- package/dist/presentation/layout/vStack/VStack.vue.d.ts +0 -14
- package/dist/presentation/layout/vStack/index.d.ts +0 -1
- package/dist/presentation/nav/NavHelpers.d.ts +0 -11
- package/dist/presentation/nav/commandPalette/CommandPalette.vue.d.ts +0 -53
- package/dist/presentation/nav/commandPalette/CommandPaletteContent.vue.d.ts +0 -17
- package/dist/presentation/nav/commandPalette/CommandPaletteContext.d.ts +0 -42
- package/dist/presentation/nav/commandPalette/CommandPaletteEmpty.vue.d.ts +0 -19
- package/dist/presentation/nav/commandPalette/CommandPaletteGroup.vue.d.ts +0 -19
- package/dist/presentation/nav/commandPalette/CommandPaletteInput.vue.d.ts +0 -14
- package/dist/presentation/nav/commandPalette/CommandPaletteItem.vue.d.ts +0 -36
- package/dist/presentation/nav/commandPalette/CommandPaletteList.vue.d.ts +0 -19
- package/dist/presentation/nav/commandPalette/CommandPaletteSeparator.vue.d.ts +0 -12
- package/dist/presentation/nav/commandPalette/index.d.ts +0 -9
- package/dist/presentation/overlays/OverlayHelpers.d.ts +0 -11
- package/dist/presentation/overlays/backdrop/Backdrop.vue.d.ts +0 -40
- package/dist/presentation/overlays/backdrop/index.d.ts +0 -1
- package/dist/query/CreateQueryClient.d.ts +0 -19
- package/dist/query/Devtools.vue.d.ts +0 -10
- package/dist/query/Endpoints.d.ts +0 -14
- package/dist/query/PageHelpers.d.ts +0 -10
- package/dist/query/Persistence.d.ts +0 -40
- package/dist/query/QueryProgressBridge.d.ts +0 -16
- package/dist/query/QueryProvider.vue.d.ts +0 -17
- package/dist/query/QueryTestUtils.d.ts +0 -54
- package/dist/query/ToApiError.d.ts +0 -7
- package/dist/query/UseAppInfiniteQuery.d.ts +0 -45
- package/dist/query/UseAppLazyQuery.d.ts +0 -40
- package/dist/query/UseAppMutation.d.ts +0 -32
- package/dist/query/UseAppPaginatedQuery.d.ts +0 -39
- package/dist/query/UseAppQueries.d.ts +0 -43
- package/dist/query/UseAppQuery.d.ts +0 -38
- package/dist/query/UseAppSuspenseQuery.d.ts +0 -42
- package/dist/query/UseOptimisticMutation.d.ts +0 -25
- package/dist/query/UsePrefetchQuery.d.ts +0 -26
- package/dist/query/UseQueryCache.d.ts +0 -31
- package/dist/query/testing.d.ts +0 -1
- package/dist/query/testing.js +0 -48
- package/dist/query/testing.js.map +0 -1
- package/dist/router/AppErrorBoundary.vue.d.ts +0 -26
- package/dist/router/AppNavLink.vue.d.ts +0 -40
- package/dist/router/CreateAppRouter.d.ts +0 -65
- package/dist/router/DocumentMeta.d.ts +0 -9
- package/dist/router/Guards.d.ts +0 -29
- package/dist/router/LazyRoute.d.ts +0 -16
- package/dist/router/NavigationProgress.vue.d.ts +0 -19
- package/dist/router/NotFound.vue.d.ts +0 -10
- package/dist/router/RouteAnnouncer.vue.d.ts +0 -10
- package/dist/router/RouteConfig.d.ts +0 -82
- package/dist/router/RouteHandles.d.ts +0 -24
- package/dist/router/RoutePersistence.d.ts +0 -21
- package/dist/router/UseBreadcrumbs.d.ts +0 -17
- package/dist/router/UsePrefetch.d.ts +0 -19
- /package/dist/{forms-engine → formsEngine}/StandardSchema.d.ts +0 -0
- /package/dist/{forms-engine → formsEngine/adapters}/house/index.d.ts +0 -0
- /package/dist/{forms-engine → formsEngine/adapters}/tanstack/index.d.ts +0 -0
- /package/dist/foundation/{utils/TransitionExtensions → animation}/TransitionExtensions.d.ts +0 -0
- /package/dist/foundation/{hooks/useDebounceHandler/useDebounceHandler.d.ts → async/UseDebounceHandler.d.ts} +0 -0
- /package/dist/foundation/{sync → channels}/CreateSyncChannel.d.ts +0 -0
- /package/dist/foundation/{sync → channels}/MemorySyncHub.d.ts +0 -0
- /package/dist/foundation/{utils/Equality → collections}/Equality.d.ts +0 -0
- /package/dist/foundation/device/{DisplayMode.d.ts → enums/DisplayMode.d.ts} +0 -0
- /package/dist/foundation/device/{PointerType.d.ts → enums/PointerType.d.ts} +0 -0
- /package/dist/foundation/device/{UseOnlineStatus.d.ts → hooks/UseOnlineStatus.d.ts} +0 -0
- /package/dist/foundation/{hooks/useReducedMotion/useReducedMotion.d.ts → device/hooks/UseReducedMotion.d.ts} +0 -0
- /package/dist/foundation/{utils/composeEventHandlers/composeEventHandlers.d.ts → dom/ComposeEventHandlers.d.ts} +0 -0
- /package/dist/foundation/{utils/dataAttr/dataAttr.d.ts → dom/DataAttr.d.ts} +0 -0
- /package/dist/foundation/{utils/PressExtensions → dom}/PressExtensions.d.ts +0 -0
- /package/dist/foundation/{utils/ElementTag → dom/enums}/ElementTag.d.ts +0 -0
- /package/dist/foundation/{utils/HtmlExtensions/HtmlExtensions.d.ts → dom/enums/HtmlValues.d.ts} +0 -0
- /package/dist/foundation/{utils/KeyboardExtensions/KeyboardExtensions.d.ts → dom/enums/Key.d.ts} +0 -0
- /package/dist/foundation/{hooks/useEventListener/useEventListener.d.ts → dom/hooks/UseEventListener.d.ts} +0 -0
- /package/dist/foundation/{hooks/useFocusTrap/useFocusTrap.d.ts → dom/hooks/UseFocusTrap.d.ts} +0 -0
- /package/dist/foundation/{hooks/useOutsideClick/useOutsideClick.d.ts → dom/hooks/UseOutsideClick.d.ts} +0 -0
- /package/dist/foundation/{hooks/useScrollLock/useScrollLock.d.ts → dom/hooks/UseScrollLock.d.ts} +0 -0
- /package/dist/foundation/{format → formatters}/Bytes.d.ts +0 -0
- /package/dist/foundation/{format → formatters}/Count.d.ts +0 -0
- /package/dist/foundation/{format → formatters}/Duration.d.ts +0 -0
- /package/dist/foundation/{format → formatters}/index.d.ts +0 -0
- /package/dist/foundation/geolocation/{Coordinates.d.ts → models/Coordinates.d.ts} +0 -0
- /package/dist/foundation/gestures/{GestureAxis.d.ts → enums/GestureAxis.d.ts} +0 -0
- /package/dist/foundation/gestures/{SwipeDirection.d.ts → enums/SwipeDirection.d.ts} +0 -0
- /package/dist/foundation/{undo → history}/SnapshotHistory.d.ts +0 -0
- /package/dist/foundation/{undo → history}/UndoHistory.d.ts +0 -0
- /package/dist/foundation/http/{ApiResponse.d.ts → models/ApiResponse.d.ts} +0 -0
- /package/dist/foundation/http/{DateBrands.d.ts → models/DateBrands.d.ts} +0 -0
- /package/dist/foundation/http/{ProblemDetails.d.ts → models/ProblemDetails.d.ts} +0 -0
- /package/dist/foundation/{utils/Compare → i18n}/Compare.d.ts +0 -0
- /package/dist/foundation/{hooks/useId/useId.d.ts → identifiers/UseId.d.ts} +0 -0
- /package/dist/foundation/{hooks/useResizeObserver/useResizeObserver.d.ts → observers/hooks/UseResizeObserver.d.ts} +0 -0
- /package/dist/foundation/observers/{UseVisibility.d.ts → hooks/UseVisibility.d.ts} +0 -0
- /package/dist/foundation/{utils/OptionalExtensions → optionals}/OptionalExtensions.d.ts +0 -0
- /package/dist/foundation/resilience/{BackoffStrategy.d.ts → enums/BackoffStrategy.d.ts} +0 -0
- /package/dist/foundation/resilience/{JitterStrategy.d.ts → enums/JitterStrategy.d.ts} +0 -0
- /package/dist/foundation/selection/{Field.d.ts → models/Field.d.ts} +0 -0
- /package/dist/foundation/{hooks/useEscape/useEscape.d.ts → shortcuts/hooks/UseEscape.d.ts} +0 -0
- /package/dist/foundation/{hooks/useDisclosure/useDisclosure.d.ts → state/hooks/UseDisclosure.d.ts} +0 -0
- /package/dist/foundation/storage/{zustand → adapters/zustand}/index.js +0 -0
- /package/dist/foundation/{utils/cn/cn.d.ts → styles/Cn.d.ts} +0 -0
- /package/dist/foundation/{utils/tv/tv.d.ts → styles/Tv.d.ts} +0 -0
- /package/dist/foundation/{utils/Align → styles/enums}/Align.d.ts +0 -0
- /package/dist/foundation/{utils/CornerPosition → styles/enums}/CornerPosition.d.ts +0 -0
- /package/dist/foundation/{utils/Orientation → styles/enums}/Orientation.d.ts +0 -0
- /package/dist/foundation/{utils/OverlayPosition → styles/enums}/OverlayPosition.d.ts +0 -0
- /package/dist/foundation/{utils/ProgressTone → styles/enums}/ProgressTone.d.ts +0 -0
- /package/dist/foundation/{utils/Severity → styles/enums}/Severity.d.ts +0 -0
- /package/dist/foundation/{utils/Side → styles/enums}/Side.d.ts +0 -0
- /package/dist/foundation/{utils/StatusTone → styles/enums}/StatusTone.d.ts +0 -0
- /package/dist/foundation/{utils/StyleTokens → styles/enums}/StyleTokens.d.ts +0 -0
- /package/dist/foundation/themes/{css.d.ts → Css.d.ts} +0 -0
- /package/dist/foundation/themes/{generate.d.ts → Generate.d.ts} +0 -0
- /package/dist/foundation/{validation → validators}/Formats.d.ts +0 -0
- /package/dist/foundation/{validation → validators}/Primitives.d.ts +0 -0
- /package/dist/foundation/{validation → validators}/StandardSchema.d.ts +0 -0
- /package/dist/presentation/{display → forms}/nodeEditor/index.d.ts +0 -0
- /package/dist/presentation/{forms → layout}/inputGroup/index.d.ts +0 -0
- /package/dist/presentation/{display → overlays}/tooltip/index.d.ts +0 -0
- /package/dist/query/{QueryPlugin.d.ts → adapters/tanstack/QueryPlugin.d.ts} +0 -0
- /package/dist/router/{DocumentTitle.d.ts → adapters/vueRouter/DocumentTitle.d.ts} +0 -0
- /package/dist/router/{PageViewTracker.d.ts → adapters/vueRouter/PageViewTracker.d.ts} +0 -0
- /package/dist/router/{UseNavigationBlocker.d.ts → adapters/vueRouter/hooks/UseNavigationBlocker.d.ts} +0 -0
- /package/dist/router/{UseRouteNavigating.d.ts → adapters/vueRouter/hooks/UseRouteNavigating.d.ts} +0 -0
- /package/dist/router/{UseTypedSearchParams.d.ts → adapters/vueRouter/hooks/UseTypedSearchParams.d.ts} +0 -0
- /package/dist/router/{UseNavigationProgress.d.ts → hooks/UseNavigationProgress.d.ts} +0 -0
package/dist/chunks/SortableGroupMoveButton.vue_vue_type_script_setup_true_lang-TLzaptOC.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SortableGroupMoveButton.vue_vue_type_script_setup_true_lang-TLzaptOC.js","sources":["../../src/presentation/forms/UseNativeFormReset.ts","../../src/presentation/forms/InputStyles.ts","../../src/presentation/forms/textInput/TextInput.vue","../../src/presentation/forms/emailInput/EmailInput.vue","../../src/presentation/forms/telInput/TelInput.vue","../../src/presentation/forms/urlInput/UrlInput.vue","../../src/presentation/forms/numberInput/NumberInput.vue","../../src/presentation/forms/passwordInput/PasswordInput.vue","../../src/presentation/forms/searchInput/SearchInput.vue","../../src/presentation/forms/textAreaInput/TextAreaInput.vue","../../src/presentation/forms/checkboxInput/CheckboxInput.variants.ts","../../src/presentation/forms/checkboxInput/CheckboxInput.vue","../../src/presentation/forms/radioInput/RadioInput.vue","../../src/presentation/forms/switchInput/SwitchInput.vue","../../src/presentation/forms/sliderInput/SliderInput.vue","../../src/presentation/forms/field/Field.vue","../../src/presentation/forms/checkboxGroup/CheckboxGroupContext.ts","../../src/presentation/forms/checkboxField/CheckboxField.vue","../../src/presentation/forms/radioGroup/RadioGroupContext.ts","../../src/presentation/forms/radioField/RadioField.vue","../../src/presentation/forms/switchField/SwitchField.vue","../../src/presentation/forms/checkboxGroup/CheckboxGroup.vue","../../src/presentation/forms/radioGroup/RadioGroup.vue","../../src/presentation/forms/pinInput/PinInput.vue","../../src/presentation/forms/maskedInput/MaskedInput.vue","../../src/presentation/forms/currencyInput/CurrencyInput.vue","../../src/presentation/forms/percentInput/PercentInput.vue","../../src/presentation/forms/labeledField/LabeledField.vue","../../src/presentation/forms/choiceCard/ChoiceCard.vue","../../src/presentation/forms/filePicker/FilePicker.vue","../../src/presentation/forms/listboxPicker/ListboxPickerContext.ts","../../src/presentation/forms/listboxPicker/ListboxPicker.vue","../../src/presentation/forms/listboxPicker/ListboxPickerItem.vue","../../src/presentation/forms/listboxPicker/ListboxPickerGroup.vue","../../src/presentation/forms/listboxPicker/ListboxPickerSeparator.vue","../../src/presentation/forms/listboxPicker/ListboxPickerEmpty.vue","../../src/presentation/forms/selectPicker/SelectPickerContext.ts","../../src/presentation/forms/selectPicker/SelectPicker.vue","../../src/presentation/forms/selectPicker/SelectPicker.variants.ts","../../src/presentation/forms/selectPicker/SelectPickerValue.vue","../../src/presentation/forms/selectPicker/SelectPickerTrigger.vue","../../src/presentation/forms/selectPicker/SelectPickerContent.vue","../../src/presentation/forms/selectPicker/SelectPickerItem.vue","../../src/presentation/forms/multiSelectPicker/MultiSelectPickerContext.ts","../../src/presentation/forms/multiSelectPicker/MultiSelectPicker.vue","../../src/presentation/forms/multiSelectPicker/MultiSelectPickerTags.vue","../../src/presentation/forms/multiSelectPicker/MultiSelectPickerTrigger.vue","../../src/presentation/forms/multiSelectPicker/MultiSelectPickerContent.vue","../../src/presentation/forms/multiSelectPicker/MultiSelectPickerItem.vue","../../src/presentation/forms/comboboxPicker/ComboboxPickerContext.ts","../../src/presentation/forms/comboboxPicker/ComboboxPicker.vue","../../src/presentation/forms/comboboxPicker/ComboboxPickerInput.vue","../../src/presentation/forms/comboboxPicker/ComboboxPickerContent.vue","../../src/presentation/forms/comboboxPicker/ComboboxPickerItem.vue","../../src/presentation/forms/comboboxPicker/ComboboxPickerGroup.vue","../../src/presentation/forms/comboboxPicker/ComboboxPickerSeparator.vue","../../src/presentation/forms/comboboxPicker/ComboboxPickerEmpty.vue","../../src/presentation/forms/MonthGrid.vue","../../src/presentation/forms/calendarPicker/CalendarPicker.vue","../../src/presentation/forms/dateInput/DateInput.vue","../../src/presentation/forms/TimeColumns.vue","../../src/presentation/forms/dateTimeInput/DateTimeInput.vue","../../src/presentation/forms/timeInput/TimeInput.vue","../../src/presentation/forms/rangeCalendarPicker/RangeCalendarPicker.vue","../../src/presentation/forms/datePicker/DatePicker.vue","../../src/presentation/forms/timePicker/TimePicker.vue","../../src/presentation/forms/dateRangePicker/DateRangePicker.vue","../../src/presentation/forms/ColorExtensions.ts","../../src/presentation/forms/colorInput/ColorInput.vue","../../src/presentation/forms/colorSliderInput/ColorSliderInput.vue","../../src/presentation/forms/colorArea/ColorArea.vue","../../src/presentation/forms/colorWheelInput/ColorWheelInput.vue","../../src/presentation/forms/colorSwatchPicker/ColorSwatchItem.vue","../../src/presentation/forms/colorSwatchPicker/ColorSwatchPicker.vue","../../src/presentation/forms/colorPicker/ColorPicker.vue","../../src/presentation/forms/tagsInput/TagsInput.vue","../../src/presentation/forms/fileUploadPicker/FileUploadPicker.vue","../../src/presentation/forms/editableInput/EditableInputContext.ts","../../src/presentation/forms/editableInput/EditableInput.vue","../../src/presentation/forms/editableInput/EditableInputCancel.vue","../../src/presentation/forms/editableInput/EditableInputInput.vue","../../src/presentation/forms/editableInput/EditableInputPreview.vue","../../src/presentation/forms/editableInput/EditableInputSubmit.vue","../../src/presentation/forms/wizardForm/WizardFormContext.ts","../../src/presentation/forms/wizardForm/WizardForm.vue","../../src/presentation/forms/wizardForm/WizardFormFooter.vue","../../src/presentation/forms/wizardForm/WizardFormStep.vue","../../src/presentation/forms/wizardForm/WizardFormSteps.vue","../../src/presentation/forms/codeEditor/CodeEditor.vue","../../src/presentation/forms/markdownEditor/MarkdownEditor.vue","../../src/presentation/forms/jsonEditor/JsonEditorContext.ts","../../src/presentation/forms/jsonEditor/JsonEditorExtensions.ts","../../src/presentation/forms/jsonEditor/JsonEditorTreeNode.vue","../../src/presentation/forms/jsonEditor/JsonEditorTreeView.vue","../../src/presentation/forms/jsonEditor/JsonEditorTextView.vue","../../src/presentation/forms/jsonEditor/JsonEditor.vue","../../src/presentation/forms/recurrenceEditor/RecurrenceEditor.vue","../../src/presentation/forms/knobInput/KnobInput.vue","../../src/presentation/forms/keyboardShortcutPicker/KeyboardShortcutPicker.vue","../../src/presentation/forms/iconPicker/IconPicker.vue","../../src/presentation/forms/fontPicker/FontPicker.vue","../../src/presentation/forms/cronInput/CronInput.vue","../../src/presentation/forms/gradientPicker/GradientPicker.vue","../../src/presentation/forms/addressEditor/AddressEditor.vue","../../src/presentation/forms/phoneInput/PhoneInput.vue","../../src/presentation/forms/emojiPicker/EmojiPicker.variants.ts","../../src/presentation/forms/emojiPicker/CategoryNav.vue","../../src/presentation/forms/emojiPicker/EmojiTile.vue","../../src/presentation/forms/emojiPicker/EmojiGrid.vue","../../src/presentation/forms/emojiPicker/UseEmojiPicker.ts","../../src/presentation/forms/emojiPicker/EmojiPicker.vue","../../src/presentation/forms/emojiPicker/EmojiPickerPopover.vue","../../src/presentation/forms/emojiSizePicker/EmojiSizePicker.variants.ts","../../src/presentation/forms/emojiSizePicker/EmojiSizePicker.vue","../../src/presentation/forms/reactionPicker/ReactionPicker.vue","../../src/presentation/forms/chatComposerInput/ChatComposerInput.vue","../../src/presentation/forms/controlGroupField/ControlGroupField.variants.ts","../../src/presentation/forms/controlGroupField/ControlGroupField.vue","../../src/presentation/forms/toggleGroup/ToggleGroupContext.ts","../../src/presentation/forms/toggleGroup/ToggleGroup.variants.ts","../../src/presentation/forms/toggleGroup/ToggleGroup.vue","../../src/presentation/forms/optionTileGroupField/OptionTileGroupField.variants.ts","../../src/presentation/forms/optionTileGroupField/OptionTileGroupField.vue","../../src/presentation/forms/toggleInput/ToggleInput.variants.ts","../../src/presentation/forms/toggleInput/ToggleInput.vue","../../src/presentation/forms/optionTilePicker/OptionTilePicker.variants.ts","../../src/presentation/forms/optionTilePicker/OptionTilePicker.vue","../../src/presentation/forms/segmentedPicker/SegmentedPicker.vue","../../src/presentation/forms/dataGridEditor/DataGridEditorTypes.ts","../../src/presentation/forms/dataGridEditor/CellEditor.vue","../../src/presentation/forms/dataGridEditor/DataGridEditor.vue","../../src/presentation/forms/nodeEditor/NodeEditor.vue","../../src/presentation/forms/sortableGroup/SortableGroupContext.ts","../../src/presentation/forms/sortableGroup/SortableGroup.vue","../../src/presentation/forms/sortableGroup/SortableGroupItem.vue","../../src/presentation/forms/sortableGroup/SortableGroupHandle.vue","../../src/presentation/forms/sortableGroup/SortableGroupMoveButton.vue"],"sourcesContent":["import { inject, nextTick, onBeforeUnmount, onMounted, provide, shallowRef, type InjectionKey, type Ref } from 'vue';\n\ninterface FormResetScope {\n form(): HTMLFormElement | null;\n}\nconst FormResetKey: InjectionKey<FormResetScope> = Symbol('presentation.formReset');\n\n/** Routes one reset through the outer value owner; nested controls only reconcile their DOM. */\nexport function useNativeFormReset(\n element: Readonly<Ref<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement | null>>,\n reset: () => void,\n restore: () => void = () => {},\n): Readonly<Ref<number>> {\n const parent = inject(FormResetKey, null);\n const revision = shallowRef(0);\n const scope: FormResetScope = {\n form: () => {\n return element.value?.form ?? null;\n },\n };\n provide(FormResetKey, scope);\n let document: Document | undefined;\n function onReset(event: Event): void {\n const form = scope.form();\n if (!form || event.target !== form) return;\n const active = document?.activeElement as HTMLElement | null;\n const root = element.value?.parentElement;\n const hadFocus = Boolean(root && active && root.contains(active));\n const focusAttributes = ['type', 'name', 'role', 'aria-label'] as const;\n const matchingControls = (container: Element): Element[] =>\n active\n ? [container, ...container.querySelectorAll(active.tagName)].filter(\n (node) =>\n node.tagName === active.tagName &&\n focusAttributes.every((key) => node.getAttribute(key) === active.getAttribute(key)),\n )\n : [];\n const ordinal = root && active ? matchingControls(root).indexOf(active) : -1;\n queueMicrotask(() => {\n if (event.defaultPrevented || !element.value || scope.form() !== form) return;\n if (parent?.form() !== form) {\n reset();\n revision.value += 1;\n }\n void nextTick(() => {\n if (!element.value || scope.form() !== form) return;\n restore();\n if (!active || active.isConnected || !hadFocus) return;\n const currentRoot = element.value.parentElement;\n const candidates = currentRoot ? matchingControls(currentRoot) : [];\n const target =\n (active.id ? candidates.find((node) => node.id === active.id) : undefined) ?? candidates[ordinal];\n const elementType = target?.ownerDocument.defaultView?.HTMLElement;\n if (elementType && target instanceof elementType) {\n target.focus({ preventScroll: true });\n }\n });\n });\n }\n onMounted(() => {\n document = element.value?.ownerDocument;\n document?.addEventListener('reset', onReset, true);\n });\n onBeforeUnmount(() => document?.removeEventListener('reset', onReset, true));\n return revision;\n}\n","// Shared visual primitives for form atoms. Co-located in `forms/` so imports\n// stay within-domain (ESLint boundaries allow same-domain imports).\n\nimport { tv, type VariantProps } from '../../foundation/styles';\n\nexport const inputBaseVariants = tv({\n base: 'flex w-full rounded-md bg-popover text-foreground placeholder:text-subtle-foreground transition-colors focus-visible:outline-hidden focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-60 read-only:bg-muted',\n variants: {\n size: {\n xs: 'h-7 px-2 text-xs',\n sm: 'h-8 px-2.5 text-sm',\n md: 'h-10 px-3 text-sm',\n lg: 'h-12 px-4 text-base',\n },\n state: {\n default: 'border-input hover:border-border-strong',\n invalid: 'border-destructive-soft-foreground focus-visible:ring-destructive-soft-foreground',\n },\n /* Border weight — scale like `size`/`radius`; default `sm` (1px). */\n border: {\n none: 'border-0',\n xs: 'border-[0.5px]',\n sm: 'border',\n md: 'border-2',\n lg: 'border-4',\n xl: 'border-8',\n },\n /* Focus-ring weight — default `md` (2px); `sm` for a hairline focus. */\n ring: {\n none: 'focus-visible:ring-0',\n sm: 'focus-visible:ring-1',\n md: 'focus-visible:ring-2',\n lg: 'focus-visible:ring-4',\n },\n },\n defaultVariants: {\n size: 'md',\n state: 'default',\n border: 'sm',\n ring: 'md',\n },\n});\n\nexport type InputBaseVariants = VariantProps<typeof inputBaseVariants>;\n\n/** Defines the size step of a form input control. */\nexport const InputSize = {\n /** Refers to the extra-small step (h-7). */\n Xs: 'xs',\n /** Refers to the small step (h-8). */\n Sm: 'sm',\n /** Refers to the medium (default) step (h-10). */\n Md: 'md',\n /** Refers to the large step (h-12). */\n Lg: 'lg',\n} as const;\n\nexport type InputSize = (typeof InputSize)[keyof typeof InputSize];\n\n/** Defines the validity surface of a form input control. */\nexport const InputState = {\n /** Refers to the default (valid / untouched) surface. */\n Default: 'default',\n /** Refers to the invalid surface (destructive border + ring). */\n Invalid: 'invalid',\n} as const;\n\nexport type InputState = (typeof InputState)[keyof typeof InputState];\n\n/** Defines the border-weight step of a form input control. */\nexport const InputBorder = {\n /** Refers to no border. */\n None: 'none',\n /** Refers to a 0.5px hairline border. */\n Xs: 'xs',\n /** Refers to a 1px border (default). */\n Sm: 'sm',\n /** Refers to a 2px border. */\n Md: 'md',\n /** Refers to a 4px border. */\n Lg: 'lg',\n /** Refers to an 8px border. */\n Xl: 'xl',\n} as const;\n\nexport type InputBorder = (typeof InputBorder)[keyof typeof InputBorder];\n\n/** Defines the focus-ring-weight step of a form input control. */\nexport const InputRing = {\n /** Refers to no focus ring. */\n None: 'none',\n /** Refers to a 1px focus ring. */\n Sm: 'sm',\n /** Refers to a 2px focus ring (default). */\n Md: 'md',\n /** Refers to a 4px focus ring. */\n Lg: 'lg',\n} as const;\n\nexport type InputRing = (typeof InputRing)[keyof typeof InputRing];\n\n/* Compile-time lock: enum values ≡ tv axis keys (drift = type error). */\ntype AssertExact<A, B> = [A] extends [B] ? ([B] extends [A] ? true : never) : never;\nconst _assertInputSize: AssertExact<InputSize, NonNullable<VariantProps<typeof inputBaseVariants>['size']>> = true;\nconst _assertInputState: AssertExact<InputState, NonNullable<VariantProps<typeof inputBaseVariants>['state']>> = true;\nconst _assertInputBorder: AssertExact<\n InputBorder,\n NonNullable<VariantProps<typeof inputBaseVariants>['border']>\n> = true;\nconst _assertInputRing: AssertExact<InputRing, NonNullable<VariantProps<typeof inputBaseVariants>['ring']>> = true;\nvoid _assertInputSize;\nvoid _assertInputState;\nvoid _assertInputBorder;\nvoid _assertInputRing;\n","<script lang=\"ts\">\nimport type { InputSize, InputState, InputBorder, InputRing } from '../InputStyles';\n\nexport interface TextInputProps {\n /** The control size. */\n readonly size?: InputSize;\n /** The validity surface. */\n readonly state?: InputState;\n /** The border weight. */\n readonly border?: InputBorder;\n /** The focus-ring weight. */\n readonly ring?: InputRing;\n\n /** The value, controlled. The `v-model` binding target. */\n readonly modelValue?: string | number;\n\n /** The initial value when uncontrolled. */\n readonly defaultValue?: string | number;\n\n /** The control's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly disabled?: boolean;\n\n /** The required state. Falls back to the surrounding form control's `isRequired`. */\n readonly required?: boolean;\n\n /** The read-only state — React's spelling. Falls back to the form control's `isReadOnly`. */\n readonly readOnly?: boolean;\n\n /** Controlled axes use their canonical Vue model names; each update event requests caller state. */\n readonly readonly?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { inputBaseVariants, InputState as InputStateValue } from '../InputStyles';\n\n/** Renders a single-line text input; email, tel, url, number, password and search have dedicated components. */\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'TextInput', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<TextInputProps>(), {\n /* Explicit `undefined` defaults are load-bearing: each flag falls back to the form\n control context, and Vue casts an absent `boolean` prop to `false` — which would\n shadow the context with a hard \"not disabled / not required / not read-only\". */\n disabled: undefined,\n required: undefined,\n readOnly: undefined,\n readonly: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the typed text changes — the `v-model` half. */\n 'update:modelValue': [value: string];\n}>();\n\nconst attrs = useAttrs();\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useFormControl();\n\nconst controlled = useControlled<string | number>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? '',\n onChange: (next) => {\n emit('update:modelValue', String(next));\n },\n});\n\nconst currentValue = controlled.value;\n\nfunction onInput(event: Event): void {\n if ((event as InputEvent).isComposing) return;\n controlled.setValue((event.target as HTMLInputElement).value);\n}\n\nconst finalState = computed(() => props.state ?? (ctx?.isInvalid ? InputStateValue.Invalid : InputStateValue.Default));\n\nconst inputId = computed(() => props.id ?? ctx?.id);\nconst isDisabled = computed(() => props.disabled ?? ctx?.isDisabled);\nconst isRequired = computed(() => props.required ?? ctx?.isRequired);\nconst isReadOnly = computed(() => props.readonly ?? props.readOnly ?? ctx?.isReadOnly);\nconst isInvalid = computed(() => ctx?.isInvalid || undefined);\nconst describedBy = computed(() => ctx?.describedBy);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', 'value']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootClass = computed(() =>\n cn(\n inputBaseVariants({\n size: props.size,\n state: finalState.value,\n border: props.border,\n ring: props.ring,\n }),\n attrs.class as ClassValue,\n ),\n);\n\nconst root = useTemplateRef<HTMLInputElement>('root');\n\n/** The rendered element — the Vue stand-in for the React original's forwarded ref. */\nuseNativeFormReset(root, controlled.reset, () => {\n if (root.value) root.value.value = String(currentValue.value ?? '');\n});\n\ndefineExpose({ el: root });\n</script>\n\n<template>\n <input\n ref=\"root\"\n type=\"text\"\n :id=\"inputId\"\n :value=\"currentValue\"\n :disabled=\"isDisabled\"\n :required=\"isRequired\"\n :readonly=\"isReadOnly\"\n :aria-invalid=\"isInvalid\"\n :aria-describedby=\"describedBy\"\n :class=\"rootClass\"\n v-bind=\"passthroughAttrs\"\n @input=\"onInput\"\n @compositionend=\"onInput\"\n />\n</template>\n","<script lang=\"ts\">\nimport type { InputSize, InputState, InputBorder, InputRing } from '../InputStyles';\n\nexport interface EmailInputProps {\n /** The control size. */\n readonly size?: InputSize;\n /** The validity surface. */\n readonly state?: InputState;\n /** The border weight. */\n readonly border?: InputBorder;\n /** The focus-ring weight. */\n readonly ring?: InputRing;\n\n /** The value, controlled. The `v-model` binding target. */\n readonly modelValue?: string | number;\n\n /** The initial value when uncontrolled. */\n readonly defaultValue?: string | number;\n\n /** The control's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly disabled?: boolean;\n\n /** The required state. Falls back to the surrounding form control's `isRequired`. */\n readonly required?: boolean;\n\n /** The read-only state — React's spelling. Falls back to the form control's `isReadOnly`. */\n readonly readOnly?: boolean;\n\n /** Controlled axes use their canonical Vue model names; each update event requests caller state. */\n readonly readonly?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { inputBaseVariants, InputState as InputStateValue } from '../InputStyles';\n\n/** Renders an `<input type=\"email\">` carrying the email `autocomplete` and `inputmode` defaults. */\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'EmailInput', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<EmailInputProps>(), {\n /* Explicit `undefined` defaults are load-bearing: each flag falls back to the form\n control context, and Vue casts an absent `boolean` prop to `false` — which would\n shadow the context with a hard \"not disabled / not required / not read-only\". */\n disabled: undefined,\n required: undefined,\n readOnly: undefined,\n readonly: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader edits the address — the `v-model` half. */\n 'update:modelValue': [value: string];\n}>();\n\nconst attrs = useAttrs();\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useFormControl();\n\nconst controlled = useControlled<string | number>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? '',\n onChange: (next) => {\n emit('update:modelValue', String(next));\n },\n});\n\nconst currentValue = controlled.value;\n\nfunction onInput(event: Event): void {\n if ((event as InputEvent).isComposing) return;\n controlled.setValue((event.target as HTMLInputElement).value);\n}\n\nconst finalState = computed(() => props.state ?? (ctx?.isInvalid ? InputStateValue.Invalid : InputStateValue.Default));\n\nconst inputId = computed(() => props.id ?? ctx?.id);\nconst isDisabled = computed(() => props.disabled ?? ctx?.isDisabled);\nconst isRequired = computed(() => props.required ?? ctx?.isRequired);\nconst isReadOnly = computed(() => props.readonly ?? props.readOnly ?? ctx?.isReadOnly);\nconst isInvalid = computed(() => ctx?.isInvalid || undefined);\nconst describedBy = computed(() => ctx?.describedBy);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', 'value']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootClass = computed(() =>\n cn(\n inputBaseVariants({\n size: props.size,\n state: finalState.value,\n border: props.border,\n ring: props.ring,\n }),\n attrs.class as ClassValue,\n ),\n);\n\nconst root = useTemplateRef<HTMLInputElement>('root');\n\n/** The rendered element — the Vue stand-in for the React original's forwarded ref. */\nuseNativeFormReset(root, controlled.reset, () => {\n if (root.value) root.value.value = String(currentValue.value ?? '');\n});\n\ndefineExpose({ el: root });\n</script>\n\n<template>\n <input\n ref=\"root\"\n type=\"email\"\n autocomplete=\"email\"\n inputmode=\"email\"\n :spellcheck=\"false\"\n :id=\"inputId\"\n :value=\"currentValue\"\n :disabled=\"isDisabled\"\n :required=\"isRequired\"\n :readonly=\"isReadOnly\"\n :aria-invalid=\"isInvalid\"\n :aria-describedby=\"describedBy\"\n :class=\"rootClass\"\n v-bind=\"passthroughAttrs\"\n @input=\"onInput\"\n @compositionend=\"onInput\"\n />\n</template>\n","<script lang=\"ts\">\nimport type { InputSize, InputState, InputBorder, InputRing } from '../InputStyles';\n\nexport interface TelInputProps {\n /** The control size. */\n readonly size?: InputSize;\n /** The validity surface. */\n readonly state?: InputState;\n /** The border weight. */\n readonly border?: InputBorder;\n /** The focus-ring weight. */\n readonly ring?: InputRing;\n\n /** The value, controlled. The `v-model` binding target. */\n readonly modelValue?: string | number;\n\n /** The initial value when uncontrolled. */\n readonly defaultValue?: string | number;\n\n /** The control's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly disabled?: boolean;\n\n /** The required state. Falls back to the surrounding form control's `isRequired`. */\n readonly required?: boolean;\n\n /** The read-only state — React's spelling. Falls back to the form control's `isReadOnly`. */\n readonly readOnly?: boolean;\n\n /** Controlled axes use their canonical Vue model names; each update event requests caller state. */\n readonly readonly?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { inputBaseVariants, InputState as InputStateValue } from '../InputStyles';\n\n/** Renders an `<input type=\"tel\">` with `inputmode=\"tel\"` and `autocomplete=\"tel\"` for phone entry. */\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'TelInput', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<TelInputProps>(), {\n /* Explicit `undefined` defaults are load-bearing: each flag falls back to the form\n control context, and Vue casts an absent `boolean` prop to `false` — which would\n shadow the context with a hard \"not disabled / not required / not read-only\". */\n disabled: undefined,\n required: undefined,\n readOnly: undefined,\n readonly: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader edits the number — the `v-model` half. */\n 'update:modelValue': [value: string];\n}>();\n\nconst attrs = useAttrs();\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useFormControl();\n\nconst controlled = useControlled<string | number>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? '',\n onChange: (next) => {\n emit('update:modelValue', String(next));\n },\n});\n\nconst currentValue = controlled.value;\n\nfunction onInput(event: Event): void {\n if ((event as InputEvent).isComposing) return;\n controlled.setValue((event.target as HTMLInputElement).value);\n}\n\nconst finalState = computed(() => props.state ?? (ctx?.isInvalid ? InputStateValue.Invalid : InputStateValue.Default));\n\nconst inputId = computed(() => props.id ?? ctx?.id);\nconst isDisabled = computed(() => props.disabled ?? ctx?.isDisabled);\nconst isRequired = computed(() => props.required ?? ctx?.isRequired);\nconst isReadOnly = computed(() => props.readonly ?? props.readOnly ?? ctx?.isReadOnly);\nconst isInvalid = computed(() => ctx?.isInvalid || undefined);\nconst describedBy = computed(() => ctx?.describedBy);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', 'value']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootClass = computed(() =>\n cn(\n inputBaseVariants({\n size: props.size,\n state: finalState.value,\n border: props.border,\n ring: props.ring,\n }),\n attrs.class as ClassValue,\n ),\n);\n\nconst root = useTemplateRef<HTMLInputElement>('root');\n\n/** The rendered element — the Vue stand-in for the React original's forwarded ref. */\nuseNativeFormReset(root, controlled.reset, () => {\n if (root.value) root.value.value = String(currentValue.value ?? '');\n});\n\ndefineExpose({ el: root });\n</script>\n\n<template>\n <input\n ref=\"root\"\n type=\"tel\"\n autocomplete=\"tel\"\n inputmode=\"tel\"\n :id=\"inputId\"\n :value=\"currentValue\"\n :disabled=\"isDisabled\"\n :required=\"isRequired\"\n :readonly=\"isReadOnly\"\n :aria-invalid=\"isInvalid\"\n :aria-describedby=\"describedBy\"\n :class=\"rootClass\"\n v-bind=\"passthroughAttrs\"\n @input=\"onInput\"\n @compositionend=\"onInput\"\n />\n</template>\n","<script lang=\"ts\">\nimport type { InputSize, InputState, InputBorder, InputRing } from '../InputStyles';\n\nexport interface UrlInputProps {\n /** The control size. */\n readonly size?: InputSize;\n /** The validity surface. */\n readonly state?: InputState;\n /** The border weight. */\n readonly border?: InputBorder;\n /** The focus-ring weight. */\n readonly ring?: InputRing;\n\n /** The value, controlled. The `v-model` binding target. */\n readonly modelValue?: string | number;\n\n /** The initial value when uncontrolled. */\n readonly defaultValue?: string | number;\n\n /** The control's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly disabled?: boolean;\n\n /** The required state. Falls back to the surrounding form control's `isRequired`. */\n readonly required?: boolean;\n\n /** The read-only state — React's spelling. Falls back to the form control's `isReadOnly`. */\n readonly readOnly?: boolean;\n\n /** Controlled axes use their canonical Vue model names; each update event requests caller state. */\n readonly readonly?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { inputBaseVariants, InputState as InputStateValue } from '../InputStyles';\n\n/** Renders an `<input type=\"url\">` with `inputmode=\"url\"` and `autocomplete=\"url\"` for address entry. */\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'UrlInput', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<UrlInputProps>(), {\n /* Explicit `undefined` defaults are load-bearing: each flag falls back to the form\n control context, and Vue casts an absent `boolean` prop to `false` — which would\n shadow the context with a hard \"not disabled / not required / not read-only\". */\n disabled: undefined,\n required: undefined,\n readOnly: undefined,\n readonly: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader edits the address — the `v-model` half. */\n 'update:modelValue': [value: string];\n}>();\n\nconst attrs = useAttrs();\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useFormControl();\n\nconst controlled = useControlled<string | number>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? '',\n onChange: (next) => {\n emit('update:modelValue', String(next));\n },\n});\n\nconst currentValue = controlled.value;\n\nfunction onInput(event: Event): void {\n if ((event as InputEvent).isComposing) return;\n controlled.setValue((event.target as HTMLInputElement).value);\n}\n\nconst finalState = computed(() => props.state ?? (ctx?.isInvalid ? InputStateValue.Invalid : InputStateValue.Default));\n\nconst inputId = computed(() => props.id ?? ctx?.id);\nconst isDisabled = computed(() => props.disabled ?? ctx?.isDisabled);\nconst isRequired = computed(() => props.required ?? ctx?.isRequired);\nconst isReadOnly = computed(() => props.readonly ?? props.readOnly ?? ctx?.isReadOnly);\nconst isInvalid = computed(() => ctx?.isInvalid || undefined);\nconst describedBy = computed(() => ctx?.describedBy);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', 'value']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootClass = computed(() =>\n cn(\n inputBaseVariants({\n size: props.size,\n state: finalState.value,\n border: props.border,\n ring: props.ring,\n }),\n attrs.class as ClassValue,\n ),\n);\n\nconst root = useTemplateRef<HTMLInputElement>('root');\n\n/** The rendered element — the Vue stand-in for the React original's forwarded ref. */\nuseNativeFormReset(root, controlled.reset, () => {\n if (root.value) root.value.value = String(currentValue.value ?? '');\n});\n\ndefineExpose({ el: root });\n</script>\n\n<template>\n <input\n ref=\"root\"\n type=\"url\"\n autocomplete=\"url\"\n inputmode=\"url\"\n :spellcheck=\"false\"\n :id=\"inputId\"\n :value=\"currentValue\"\n :disabled=\"isDisabled\"\n :required=\"isRequired\"\n :readonly=\"isReadOnly\"\n :aria-invalid=\"isInvalid\"\n :aria-describedby=\"describedBy\"\n :class=\"rootClass\"\n v-bind=\"passthroughAttrs\"\n @input=\"onInput\"\n @compositionend=\"onInput\"\n />\n</template>\n","<script lang=\"ts\">\nimport type { InputSize, InputState, InputBorder, InputRing } from '../InputStyles';\n\nexport interface NumberInputProps {\n /** The control size. */\n readonly size?: InputSize;\n /** The validity surface. */\n readonly state?: InputState;\n /** The border weight. */\n readonly border?: InputBorder;\n /** The focus-ring weight. */\n readonly ring?: InputRing;\n\n /** The increment granularity of the stepper buttons and arrow keys. Default 1. */\n readonly step?: number;\n /** Accessible text for the increment action. */\n readonly incrementLabel?: string;\n /** Accessible text for the decrement action. */\n readonly decrementLabel?: string;\n\n /**\n * The value, controlled. The `v-model` binding target.\n *\n * Emits a finite number, or null when cleared. Invalid drafts do not commit.\n */\n readonly modelValue?: number | null;\n\n /** The initial value when uncontrolled. */\n readonly defaultValue?: number | null;\n\n /** The control's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly disabled?: boolean;\n\n /** The required state. Falls back to the surrounding form control's `isRequired`. */\n readonly required?: boolean;\n\n /** The read-only state — React's spelling. Falls back to the form control's `isReadOnly`. */\n readonly readOnly?: boolean;\n\n /** Controlled axes use their canonical Vue model names; each update event requests caller state. */\n readonly readonly?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { Minus, Plus } from 'lucide-vue-next';\nimport { cn } from '../../../foundation/styles';\nimport { Icon } from '../../../foundation/icons';\nimport { useControlled } from '../../../foundation/state';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { inputBaseVariants, InputState as InputStateValue } from '../InputStyles';\n\nconst MinusIcon = Minus;\nconst PlusIcon = Plus;\n\n/** Renders a numeric input flanked by minus and plus buttons that step the value by `step`. */\n/* `inheritAttrs: false` so `class` folds into the wrapper's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. Everything else is forwarded\n onto the inner `<input>` by hand, matching React's `{...props}` placement. */\ndefineOptions({ name: 'NumberInput', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<NumberInputProps>(), {\n step: 1,\n incrementLabel: 'Increment',\n decrementLabel: 'Decrement',\n /* Explicit `undefined` defaults are load-bearing: each flag falls back to the form\n control context, and Vue casts an absent `boolean` prop to `false` — which would\n shadow the context with a hard \"not disabled / not required / not read-only\". */\n disabled: undefined,\n required: undefined,\n readOnly: undefined,\n readonly: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader types or steps the number — the `v-model` half. */\n 'update:modelValue': [value: number | null];\n}>();\n\nconst attrs = useAttrs();\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useFormControl();\n\nconst controlled = useControlled<number | null>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? null,\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst currentValue = controlled.value;\n\nconst root = useTemplateRef<HTMLInputElement>('root');\n\nfunction onInput(event: Event): void {\n if ((event as InputEvent).isComposing) return;\n const input = event.target as HTMLInputElement;\n if (input.validity.badInput) return;\n const value = input.value === '' ? null : input.valueAsNumber;\n if (value !== null && !Number.isFinite(value)) return;\n controlled.setValue(value);\n}\n\nfunction adjust(direction: 1 | -1): void {\n if (isDisabled.value || isReadOnly.value) return;\n const el = root.value;\n if (!el || typeof el.stepUp !== 'function') return;\n /* No argument — stepUp(n) steps n × the `step` attribute (already set on the input), not by n. */\n if (direction === 1) el.stepUp();\n else el.stepDown();\n /* The dispatched events drive this component's own `@input` (which re-reads `el.value`\n and fires the emits) and any fallthrough `input` / `change` listener the consumer bound. */\n el.dispatchEvent(new Event('input', { bubbles: true }));\n el.dispatchEvent(new Event('change', { bubbles: true }));\n}\n\nconst finalState = computed(() => props.state ?? (ctx?.isInvalid ? InputStateValue.Invalid : InputStateValue.Default));\n\nconst inputId = computed(() => props.id ?? ctx?.id);\nconst isDisabled = computed(() => props.disabled ?? ctx?.isDisabled ?? false);\nconst isRequired = computed(() => props.required ?? ctx?.isRequired);\nconst isReadOnly = computed(() => props.readonly ?? props.readOnly ?? ctx?.isReadOnly);\nconst isInvalid = computed(() => ctx?.isInvalid || undefined);\nconst describedBy = computed(() => ctx?.describedBy);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', 'value']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst wrapperClass = computed(() => cn('relative', attrs.class as ClassValue));\n\nconst inputClass = computed(() =>\n cn(\n inputBaseVariants({\n size: props.size,\n state: finalState.value,\n border: props.border,\n ring: props.ring,\n }),\n 'pr-12 [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none',\n ),\n);\n\n/** The rendered `<input>` — the Vue stand-in for the React original's forwarded ref. */\nuseNativeFormReset(root, controlled.reset, () => {\n if (root.value) root.value.value = String(currentValue.value ?? '');\n});\n\ndefineExpose({ el: root });\n</script>\n\n<template>\n <div :class=\"wrapperClass\">\n <input\n ref=\"root\"\n type=\"number\"\n inputmode=\"decimal\"\n :step=\"step\"\n :id=\"inputId\"\n :value=\"currentValue\"\n :disabled=\"isDisabled\"\n :required=\"isRequired\"\n :readonly=\"isReadOnly\"\n :aria-invalid=\"isInvalid\"\n :aria-describedby=\"describedBy\"\n :class=\"inputClass\"\n v-bind=\"passthroughAttrs\"\n @input=\"onInput\"\n @compositionend=\"onInput\"\n />\n <div class=\"absolute right-1 top-1/2 flex -translate-y-1/2 items-center\">\n <button\n type=\"button\"\n :disabled=\"isDisabled || isReadOnly\"\n :aria-label=\"decrementLabel\"\n class=\"grid h-7 w-6 place-items-center rounded text-muted-foreground hover:bg-muted disabled:opacity-50\"\n @click=\"adjust(-1)\"\n >\n <Icon :icon=\"MinusIcon\" :size=\"14\" />\n </button>\n <button\n type=\"button\"\n :disabled=\"isDisabled || isReadOnly\"\n :aria-label=\"incrementLabel\"\n class=\"grid h-7 w-6 place-items-center rounded text-muted-foreground hover:bg-muted disabled:opacity-50\"\n @click=\"adjust(1)\"\n >\n <Icon :icon=\"PlusIcon\" :size=\"14\" />\n </button>\n </div>\n </div>\n</template>\n","<script lang=\"ts\">\nimport type { InputSize, InputState } from '../InputStyles';\n\nexport interface PasswordInputProps {\n /** The control size. */\n readonly size?: InputSize;\n /** The validity surface. */\n readonly state?: InputState;\n /** The visibility-toggle button's presence. Default true. */\n readonly hasToggle?: boolean;\n\n /** The value, controlled. The `v-model` binding target. */\n readonly modelValue?: string | number;\n\n /** The initial value when uncontrolled. */\n readonly defaultValue?: string | number;\n\n /** The autofill hint. Defaults to `current-password`. */\n readonly autocomplete?: string;\n\n /** camelCase alias of {@link PasswordInputProps.autocomplete}; the DOM spelling wins. */\n readonly autoComplete?: string;\n\n /** The control's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly disabled?: boolean;\n\n /** The required state. Falls back to the surrounding form control's `isRequired`. */\n readonly required?: boolean;\n\n /** The read-only state. Falls back to the form control's `isReadOnly`. */\n readonly readOnly?: boolean;\n\n /** Controlled axes use their canonical Vue model names; each update event requests caller state. */\n readonly readonly?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, ref, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { Eye, EyeOff } from 'lucide-vue-next';\nimport { cn } from '../../../foundation/styles';\nimport { Icon } from '../../../foundation/icons';\nimport { useControlled } from '../../../foundation/state';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { inputBaseVariants, InputState as InputStateValue } from '../InputStyles';\n\n/** Renders a password field with an optional eye button that reveals the typed characters. */\n/* `inheritAttrs: false` so `class` folds into the wrapper's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'PasswordInput', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<PasswordInputProps>(), {\n hasToggle: true,\n autocomplete: undefined,\n autoComplete: undefined,\n /* Explicit `undefined` defaults are load-bearing: each flag falls back to the form control\n context, and Vue casts an absent `boolean` prop to `false` — which would shadow it. */\n disabled: undefined,\n required: undefined,\n readOnly: undefined,\n readonly: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader edits the password — the `v-model` half. */\n 'update:modelValue': [value: string];\n}>();\n\nconst attrs = useAttrs();\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useFormControl();\n\nconst controlled = useControlled<string | number>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? '',\n onChange: (next) => {\n emit('update:modelValue', String(next));\n },\n});\n\nconst currentValue = controlled.value;\n\nfunction onInput(event: Event): void {\n if ((event as InputEvent).isComposing) return;\n controlled.setValue((event.target as HTMLInputElement).value);\n}\n\nconst visible = ref(false);\n\nfunction toggle(): void {\n visible.value = !visible.value;\n}\n\nconst inputType = computed(() => (visible.value ? 'text' : 'password'));\nconst toggleLabel = computed(() => (visible.value ? 'Hide password' : 'Show password'));\nconst toggleIcon = computed(() => (visible.value ? EyeOff : Eye));\n\nconst autocompleteValue = computed(() => props.autocomplete ?? props.autoComplete ?? 'current-password');\n\nconst inputId = computed(() => props.id ?? ctx?.id);\nconst isDisabled = computed(() => props.disabled ?? ctx?.isDisabled ?? false);\nconst isRequired = computed(() => props.required ?? ctx?.isRequired);\nconst isReadOnly = computed(() => props.readonly ?? props.readOnly ?? ctx?.isReadOnly);\nconst isInvalid = computed(() => ctx?.isInvalid || undefined);\nconst describedBy = computed(() => ctx?.describedBy);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', 'value']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst wrapperClass = computed(() => cn('relative', attrs.class as ClassValue));\n\nconst inputClass = computed(() =>\n cn(\n inputBaseVariants({\n size: props.size,\n state: props.state ?? (ctx?.isInvalid ? InputStateValue.Invalid : InputStateValue.Default),\n }),\n props.hasToggle && 'pr-10',\n ),\n);\n\nconst input = useTemplateRef<HTMLInputElement>('input');\n\n/** The rendered `<input>`. */\nuseNativeFormReset(input, controlled.reset, () => {\n if (input.value) input.value.value = String(currentValue.value ?? '');\n});\n\ndefineExpose({ el: input });\n</script>\n\n<template>\n <div :class=\"wrapperClass\">\n <input\n ref=\"input\"\n :type=\"inputType\"\n :autocomplete=\"autocompleteValue\"\n :spellcheck=\"false\"\n :id=\"inputId\"\n :disabled=\"isDisabled\"\n :required=\"isRequired\"\n :readonly=\"isReadOnly\"\n :value=\"currentValue\"\n :aria-invalid=\"isInvalid\"\n :aria-describedby=\"describedBy\"\n :class=\"inputClass\"\n v-bind=\"passthroughAttrs\"\n @input=\"onInput\"\n @compositionend=\"onInput\"\n />\n <button\n v-if=\"hasToggle\"\n type=\"button\"\n :disabled=\"isDisabled\"\n :aria-label=\"toggleLabel\"\n :aria-pressed=\"visible\"\n class=\"absolute right-1 top-1/2 grid h-8 w-8 -translate-y-1/2 place-items-center rounded text-muted-foreground hover:bg-muted disabled:opacity-50\"\n @click=\"toggle\"\n >\n <Icon :icon=\"toggleIcon\" :size=\"16\" />\n </button>\n </div>\n</template>\n","<script lang=\"ts\">\nimport type { InputSize, InputState, InputBorder, InputRing } from '../InputStyles';\n\nexport interface SearchInputProps {\n /** The control size. */\n readonly size?: InputSize;\n /** The validity surface. */\n readonly state?: InputState;\n /** The border weight. */\n readonly border?: InputBorder;\n /** The focus-ring weight. */\n readonly ring?: InputRing;\n\n /** The clearable state, showing a clear (×) button when the input has a value. Default true. */\n readonly isClearable?: boolean;\n\n /** The value, controlled. The `v-model` binding target. */\n readonly modelValue?: string | number;\n\n /** The initial value when uncontrolled. */\n readonly defaultValue?: string | number;\n\n /** The control's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly disabled?: boolean;\n\n /** The required state. Falls back to the surrounding form control's `isRequired`. */\n readonly required?: boolean;\n\n /** The read-only state — React's spelling. Falls back to the form control's `isReadOnly`. */\n readonly readOnly?: boolean;\n\n /** Controlled axes use their canonical Vue model names; each update event requests caller state. */\n readonly readonly?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { Search, X } from 'lucide-vue-next';\nimport { cn } from '../../../foundation/styles';\nimport { Icon } from '../../../foundation/icons';\nimport { useControlled } from '../../../foundation/state';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { inputBaseVariants, InputState as InputStateValue } from '../InputStyles';\n\nconst SearchIcon = Search;\nconst ClearIcon = X;\n\n/** Renders a search field with a leading magnifier and an optional clear button inside the border. */\n/* `inheritAttrs: false` so `class` folds into the wrapper's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. Everything else is forwarded\n onto the inner `<input>` by hand, matching React's `{...props}` placement. */\ndefineOptions({ name: 'SearchInput', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<SearchInputProps>(), {\n isClearable: true,\n /* Explicit `undefined` defaults are load-bearing: each flag falls back to the form\n control context, and Vue casts an absent `boolean` prop to `false` — which would\n shadow the context with a hard \"not disabled / not required / not read-only\". */\n disabled: undefined,\n required: undefined,\n readOnly: undefined,\n readonly: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader edits the query — the `v-model` half. */\n 'update:modelValue': [value: string];\n /** Fires when the reader empties the field with the clear button, after the value is reset. */\n clear: [];\n}>();\n\nconst attrs = useAttrs();\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useFormControl();\n\nconst controlled = useControlled<string | number>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? '',\n onChange: (next) => {\n emit('update:modelValue', String(next));\n },\n});\n\nconst currentValue = controlled.value;\n\nconst root = useTemplateRef<HTMLInputElement>('root');\n\nfunction onInput(event: Event): void {\n if ((event as InputEvent).isComposing) return;\n controlled.setValue((event.target as HTMLInputElement).value);\n}\n\nconst showClear = computed(() => props.isClearable && String(currentValue.value ?? '').length > 0);\n\nfunction handleClear(): void {\n const el = root.value;\n if (el) {\n /* React needed the native value-setter to defeat its own value tracker; Vue reads the\n value straight off the element, so a plain assignment plus a bubbling `input` drives\n both this component's handler and any fallthrough `input` listener. */\n el.value = '';\n el.dispatchEvent(new Event('input', { bubbles: true }));\n el.focus();\n } else {\n controlled.setValue('');\n }\n emit('clear');\n}\n\nconst finalState = computed(() => props.state ?? (ctx?.isInvalid ? InputStateValue.Invalid : InputStateValue.Default));\n\nconst inputId = computed(() => props.id ?? ctx?.id);\nconst isDisabled = computed(() => props.disabled ?? ctx?.isDisabled ?? false);\nconst isRequired = computed(() => props.required ?? ctx?.isRequired);\nconst isReadOnly = computed(() => props.readonly ?? props.readOnly ?? ctx?.isReadOnly);\nconst isInvalid = computed(() => ctx?.isInvalid || undefined);\nconst describedBy = computed(() => ctx?.describedBy);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', 'value']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst wrapperClass = computed(() => cn('relative', attrs.class as ClassValue));\n\nconst inputClass = computed(() =>\n cn(\n inputBaseVariants({\n size: props.size,\n state: finalState.value,\n border: props.border,\n ring: props.ring,\n }),\n 'pl-9',\n showClear.value && 'pr-9',\n '[&::-webkit-search-cancel-button]:appearance-none',\n ),\n);\n\n/** The rendered `<input>` — the Vue stand-in for the React original's forwarded ref. */\nuseNativeFormReset(root, controlled.reset, () => {\n if (root.value) root.value.value = String(currentValue.value ?? '');\n});\n\ndefineExpose({ el: root });\n</script>\n\n<template>\n <div :class=\"wrapperClass\">\n <Icon :icon=\"SearchIcon\" :size=\"16\" class=\"absolute left-3 top-1/2 -translate-y-1/2 text-subtle-foreground\" />\n <input\n ref=\"root\"\n type=\"search\"\n :id=\"inputId\"\n :value=\"currentValue\"\n :disabled=\"isDisabled\"\n :required=\"isRequired\"\n :readonly=\"isReadOnly\"\n :aria-invalid=\"isInvalid\"\n :aria-describedby=\"describedBy\"\n :class=\"inputClass\"\n v-bind=\"passthroughAttrs\"\n @input=\"onInput\"\n @compositionend=\"onInput\"\n />\n <button\n v-if=\"showClear\"\n type=\"button\"\n :disabled=\"isDisabled\"\n aria-label=\"Clear search\"\n class=\"absolute right-1 top-1/2 grid h-8 w-8 -translate-y-1/2 place-items-center rounded text-subtle-foreground hover:bg-muted hover:text-muted-foreground\"\n @click=\"handleClear\"\n >\n <Icon :icon=\"ClearIcon\" :size=\"14\" />\n </button>\n </div>\n</template>\n","<script lang=\"ts\">\nimport type { InputSize, InputState, InputBorder, InputRing } from '../InputStyles';\n\nexport interface TextAreaInputProps {\n /** The control size. */\n readonly size?: InputSize;\n /** The validity surface. */\n readonly state?: InputState;\n /** The border weight. */\n readonly border?: InputBorder;\n /** The focus-ring weight. */\n readonly ring?: InputRing;\n\n /** The visible row count. Default 3. */\n readonly rows?: number;\n\n /** The value, controlled. The `v-model` binding target. */\n readonly modelValue?: string | number;\n\n /** The initial value when uncontrolled. */\n readonly defaultValue?: string | number;\n\n /** The control's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly disabled?: boolean;\n\n /** The required state. Falls back to the surrounding form control's `isRequired`. */\n readonly required?: boolean;\n\n /** The read-only state — React's spelling. Falls back to the form control's `isReadOnly`. */\n readonly readOnly?: boolean;\n\n /** Controlled axes use their canonical Vue model names; each update event requests caller state. */\n readonly readonly?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { inputBaseVariants, InputState as InputStateValue } from '../InputStyles';\n\n/** Renders a fixed-height multi-line textarea on the shared input visual base, sized by `rows`. */\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'TextAreaInput', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<TextAreaInputProps>(), {\n rows: 3,\n /* Explicit `undefined` defaults are load-bearing: each flag falls back to the form\n control context, and Vue casts an absent `boolean` prop to `false` — which would\n shadow the context with a hard \"not disabled / not required / not read-only\". */\n disabled: undefined,\n required: undefined,\n readOnly: undefined,\n readonly: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader edits the text — the `v-model` half. */\n 'update:modelValue': [value: string];\n}>();\n\nconst attrs = useAttrs();\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useFormControl();\n\nconst controlled = useControlled<string | number>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? '',\n onChange: (next) => {\n emit('update:modelValue', String(next));\n },\n});\n\nconst currentValue = controlled.value;\n\nfunction onInput(event: Event): void {\n if ((event as InputEvent).isComposing) return;\n controlled.setValue((event.target as HTMLTextAreaElement).value);\n}\n\nconst finalState = computed(() => props.state ?? (ctx?.isInvalid ? InputStateValue.Invalid : InputStateValue.Default));\n\nconst inputId = computed(() => props.id ?? ctx?.id);\nconst isDisabled = computed(() => props.disabled ?? ctx?.isDisabled);\nconst isRequired = computed(() => props.required ?? ctx?.isRequired);\nconst isReadOnly = computed(() => props.readonly ?? props.readOnly ?? ctx?.isReadOnly);\nconst isInvalid = computed(() => ctx?.isInvalid || undefined);\nconst describedBy = computed(() => ctx?.describedBy);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', 'value']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootClass = computed(() =>\n cn(\n inputBaseVariants({\n size: props.size,\n state: finalState.value,\n border: props.border,\n ring: props.ring,\n }),\n 'h-auto resize-y py-2',\n attrs.class as ClassValue,\n ),\n);\n\nconst root = useTemplateRef<HTMLTextAreaElement>('root');\n\n/** The rendered element — the Vue stand-in for the React original's forwarded ref. */\nuseNativeFormReset(root, controlled.reset, () => {\n if (root.value) root.value.value = String(currentValue.value ?? '');\n});\n\ndefineExpose({ el: root });\n</script>\n\n<template>\n <textarea\n ref=\"root\"\n :rows=\"rows\"\n :id=\"inputId\"\n :value=\"currentValue\"\n :disabled=\"isDisabled\"\n :required=\"isRequired\"\n :readonly=\"isReadOnly\"\n :aria-invalid=\"isInvalid\"\n :aria-describedby=\"describedBy\"\n :class=\"rootClass\"\n v-bind=\"passthroughAttrs\"\n @input=\"onInput\"\n @compositionend=\"onInput\"\n />\n</template>\n","import { tv, type VariantProps, ColorTone } from '../../../foundation/styles';\n\n/** Defines the checkbox visual surface style. */\nexport const CheckboxInputVariant = {\n /** Refers to an opaque, filled surface. */\n Solid: 'solid',\n /** Refers to a soft tinted surface. */\n Soft: 'soft',\n /** Refers to a bordered, transparent surface. */\n Outline: 'outline',\n /** Refers to a borderless, transparent surface. */\n Ghost: 'ghost',\n /** Refers to a glass surface. */\n Glass: 'glass',\n /** Refers to a glass surface with a hairline border. */\n GlassSurface: 'glass-surface',\n} as const;\n\nexport type CheckboxInputVariant = (typeof CheckboxInputVariant)[keyof typeof CheckboxInputVariant];\n\nexport const checkboxVariants = tv({\n base: 'pointer-events-none grid h-full w-full place-items-center rounded-sm border transition-colors peer-focus-visible:ring-2 peer-focus-visible:ring-ring peer-focus-visible:ring-offset-1 peer-disabled:opacity-50',\n variants: {\n variant: {\n solid: 'border-input bg-background',\n soft: 'border-transparent',\n outline: 'bg-transparent',\n ghost: 'border-transparent bg-transparent',\n glass: 'border-white/40 bg-black/40 backdrop-blur-sm',\n 'glass-surface': 'border-white/60 bg-black/40 backdrop-blur-sm',\n },\n tone: {\n primary: '',\n neutral: '',\n danger: '',\n success: '',\n warning: '',\n },\n },\n compoundVariants: [\n // === SOLID × tone — bg-background unchecked → tone fill checked ===\n {\n variant: 'solid',\n tone: 'primary',\n class: 'text-primary-foreground peer-checked:border-primary peer-checked:bg-primary',\n },\n {\n variant: 'solid',\n tone: 'neutral',\n class: 'text-background peer-checked:border-foreground peer-checked:bg-foreground',\n },\n {\n variant: 'solid',\n tone: 'danger',\n class: 'text-destructive-foreground peer-checked:border-destructive peer-checked:bg-destructive',\n },\n {\n variant: 'solid',\n tone: 'success',\n class: 'text-success-foreground peer-checked:border-success peer-checked:bg-success',\n },\n {\n variant: 'solid',\n tone: 'warning',\n class: 'text-warning-foreground peer-checked:border-warning peer-checked:bg-warning',\n },\n\n // === SOFT × tone — soft bg unchecked → strong tone fill checked ===\n {\n variant: 'soft',\n tone: 'primary',\n class:\n 'bg-primary-soft text-primary-soft-foreground peer-checked:bg-primary peer-checked:text-primary-foreground',\n },\n {\n variant: 'soft',\n tone: 'neutral',\n class: 'bg-muted text-foreground peer-checked:bg-foreground peer-checked:text-background',\n },\n {\n variant: 'soft',\n tone: 'danger',\n class:\n 'bg-destructive-soft text-destructive-soft-foreground peer-checked:bg-destructive peer-checked:text-destructive-foreground',\n },\n {\n variant: 'soft',\n tone: 'success',\n class:\n 'bg-success-soft text-success-soft-foreground peer-checked:bg-success peer-checked:text-success-foreground',\n },\n {\n variant: 'soft',\n tone: 'warning',\n class:\n 'bg-warning-soft text-warning-soft-foreground peer-checked:bg-warning peer-checked:text-warning-foreground',\n },\n\n // === OUTLINE × tone — tone border unchecked → tone fill checked ===\n {\n variant: 'outline',\n tone: 'primary',\n class: 'border-primary text-primary peer-checked:bg-primary peer-checked:text-primary-foreground',\n },\n {\n variant: 'outline',\n tone: 'neutral',\n class: 'border-border-strong text-foreground peer-checked:bg-foreground peer-checked:text-background',\n },\n {\n variant: 'outline',\n tone: 'danger',\n class: 'border-destructive text-destructive peer-checked:bg-destructive peer-checked:text-destructive-foreground',\n },\n {\n variant: 'outline',\n tone: 'success',\n class: 'border-success text-success peer-checked:bg-success peer-checked:text-success-foreground',\n },\n {\n variant: 'outline',\n tone: 'warning',\n class: 'border-warning text-warning peer-checked:bg-warning peer-checked:text-warning-foreground',\n },\n\n // === GHOST × tone — no border/bg unchecked → tone-tinted bg + tone check checked ===\n { variant: 'ghost', tone: 'primary', class: 'text-primary peer-checked:bg-primary/10' },\n { variant: 'ghost', tone: 'neutral', class: 'text-foreground peer-checked:bg-muted' },\n { variant: 'ghost', tone: 'danger', class: 'text-destructive peer-checked:bg-destructive/10' },\n { variant: 'ghost', tone: 'success', class: 'text-success peer-checked:bg-success/10' },\n { variant: 'ghost', tone: 'warning', class: 'text-warning peer-checked:bg-warning/10' },\n\n // === GLASS × tone — dark glass stays on check; only the white check icon appears\n // (peer-checked:opacity-100 on Check). Tone stays text-white, bg never swaps — photo-overlay look. ===\n { variant: 'glass', tone: 'primary', class: 'text-white' },\n { variant: 'glass', tone: 'neutral', class: 'text-white' },\n { variant: 'glass', tone: 'danger', class: 'text-white' },\n { variant: 'glass', tone: 'success', class: 'text-white' },\n { variant: 'glass', tone: 'warning', class: 'text-white' },\n\n // === GLASS-SURFACE × tone — same as glass, plus white/80 border emphasis on check. ===\n { variant: 'glass-surface', tone: 'primary', class: 'text-white peer-checked:border-white/80' },\n { variant: 'glass-surface', tone: 'neutral', class: 'text-white peer-checked:border-white/80' },\n { variant: 'glass-surface', tone: 'danger', class: 'text-white peer-checked:border-white/80' },\n { variant: 'glass-surface', tone: 'success', class: 'text-white peer-checked:border-white/80' },\n { variant: 'glass-surface', tone: 'warning', class: 'text-white peer-checked:border-white/80' },\n ],\n defaultVariants: {\n variant: 'solid',\n tone: 'primary',\n },\n});\n\nexport type CheckboxInputVariants = VariantProps<typeof checkboxVariants>;\n\n/* Compile-time lock: enum values ≡ tv axis keys (drift = type error). */\ntype AssertExact<A, B> = [A] extends [B] ? ([B] extends [A] ? true : never) : never;\nconst _assertCheckboxVariant: AssertExact<\n CheckboxInputVariant,\n NonNullable<VariantProps<typeof checkboxVariants>['variant']>\n> = true;\nconst _assertCheckboxTone: AssertExact<ColorTone, NonNullable<VariantProps<typeof checkboxVariants>['tone']>> = true;\nvoid _assertCheckboxVariant;\nvoid _assertCheckboxTone;\n","<script lang=\"ts\">\nimport type { ColorProp, ColorTone, SizePreset, SizeUnion } from '../../../foundation/styles';\nimport type { CheckboxInputVariant, CheckboxInputVariants } from './CheckboxInput.variants';\n\n/* CheckboxInput supports the 5-preset core (skips `2xl` — outsized for a form control). */\nexport type CheckboxInputSizePreset = Extract<SizePreset, 'xs' | 'sm' | 'md' | 'lg' | 'xl'>;\n\nexport interface CheckboxInputProps {\n /**\n * The size — preset (`xs|sm|md|lg|xl`) → box + icon scale · number/string → square inline ·\n * object → explicit dims.\n */\n readonly size?: SizeUnion<CheckboxInputSizePreset>;\n\n /** The visual surface style. */\n readonly variant?: CheckboxInputVariant;\n\n /** The semantic tone palette. */\n readonly tone?: ColorTone;\n\n /** The tristate visual state — input stays unchecked but renders as a dash with the same checked-state styling. */\n readonly isIndeterminate?: boolean;\n\n /** The color override (string seed or slot object) — replaces the active `tone`'s theme tokens locally. */\n readonly color?: ColorProp;\n\n /** The checked state, controlled. The `v-model` binding target. */\n readonly modelValue?: boolean;\n\n /** The initial checked state when uncontrolled. */\n readonly defaultValue?: boolean;\n\n /** The control's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly disabled?: boolean;\n\n /** The required state. Falls back to the surrounding form control's `isRequired`. */\n readonly required?: boolean;\n}\n\nconst ComponentName = 'CheckboxInput';\n\n/* Outer wrapper box dim per preset. */\nconst BoxSizeClass: Record<CheckboxInputSizePreset, string> = {\n xs: 'h-3.5 w-3.5', // 14px — dense / mobile-tight (consumer must ensure ≥24px hit target via wrapping label)\n sm: 'h-4 w-4', // 16px\n md: 'h-5 w-5', // 20px (default)\n lg: 'h-6 w-6', // 24px (WCAG-compliant standalone)\n xl: 'h-7 w-7', // 28px (emphasis / a11y-first)\n};\n\n/* Inner icon dim per preset — scales proportionally to box. */\nconst IconSizeClass: Record<CheckboxInputSizePreset, string> = {\n xs: 'h-2.5 w-2.5',\n sm: 'h-3 w-3',\n md: 'h-3.5 w-3.5',\n lg: 'h-4 w-4',\n xl: 'h-5 w-5',\n};\n\n/* Fallback icon dim when raw/object size used — middle of scale. */\nconst DefaultIconClass = 'h-3 w-3';\n\n/* When indeterminate=true, apply the compound's checked classes regardless of peer-checked state. */\nconst IndeterminateCheckedClass: Record<\n NonNullable<CheckboxInputVariants['variant']>,\n Record<NonNullable<CheckboxInputVariants['tone']>, string>\n> = {\n solid: {\n primary: 'bg-primary border-primary text-primary-foreground',\n neutral: 'bg-foreground border-foreground text-background',\n danger: 'bg-destructive border-destructive text-destructive-foreground',\n success: 'bg-success border-success text-success-foreground',\n warning: 'bg-warning border-warning text-warning-foreground',\n },\n soft: {\n primary: 'bg-primary text-primary-foreground',\n neutral: 'bg-foreground text-background',\n danger: 'bg-destructive text-destructive-foreground',\n success: 'bg-success text-success-foreground',\n warning: 'bg-warning text-warning-foreground',\n },\n outline: {\n primary: 'bg-primary text-primary-foreground',\n neutral: 'bg-foreground text-background',\n danger: 'bg-destructive text-destructive-foreground',\n success: 'bg-success text-success-foreground',\n warning: 'bg-warning text-warning-foreground',\n },\n ghost: {\n primary: 'bg-primary/10 text-primary',\n neutral: 'bg-muted text-foreground',\n danger: 'bg-destructive/10 text-destructive',\n success: 'bg-success/10 text-success',\n warning: 'bg-warning/10 text-warning',\n },\n /* Glass family keeps the dark glass bg in the indeterminate state, matching checked. The Minus\n icon renders unconditionally; text-white from the variant base is what makes it visible. */\n glass: {\n primary: 'text-white',\n neutral: 'text-white',\n danger: 'text-white',\n success: 'text-white',\n warning: 'text-white',\n },\n 'glass-surface': {\n primary: 'text-white border-white/80',\n neutral: 'text-white border-white/80',\n danger: 'text-white border-white/80',\n success: 'text-white border-white/80',\n warning: 'text-white border-white/80',\n },\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, useAttrs, useTemplateRef, watch, type StyleValue } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { Check, Minus } from 'lucide-vue-next';\nimport { cn, ColorExtensions, CssExtensions, ColorTone as ColorToneValue } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { checkboxVariants, CheckboxInputVariant as CheckboxInputVariantValue } from './CheckboxInput.variants';\n\n/** Renders a native checkbox behind a custom visual — 6 variants × 5 tones, plus an indeterminate dash. */\n/* `inheritAttrs: false` so `class` folds into the wrapper's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: ComponentName, inheritAttrs: false });\n\nconst props = withDefaults(defineProps<CheckboxInputProps>(), {\n size: 'md',\n variant: CheckboxInputVariantValue.Solid,\n tone: ColorToneValue.Primary,\n /* Explicit `undefined` defaults are load-bearing: each flag falls back to the form control\n context or to a meaningful tri-state, and Vue casts an absent `boolean` prop to `false`. */\n isIndeterminate: undefined,\n modelValue: undefined,\n defaultValue: undefined,\n disabled: undefined,\n required: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the user ticks or unticks the box — the `v-model` half. */\n 'update:modelValue': [checked: boolean];\n}>();\n\nconst attrs = useAttrs();\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useFormControl();\n\nconst controlled = useControlled<boolean>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? false,\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst isChecked = controlled.value;\n\nfunction onChange(event: Event): void {\n controlled.setValue((event.target as HTMLInputElement).checked);\n}\n\nconst input = useTemplateRef<HTMLInputElement>('input');\n\n/*\n * Syncs the native `indeterminate` property — it has no attribute, so it is only reachable\n * imperatively. `flush: 'post'` runs after the DOM patch; `immediate` is safe here ONLY\n * because the body touches the template ref rather than a browser global, and the ref is\n * `null` on the server, where the guard below short-circuits.\n */\nwatch(\n [input, () => props.isIndeterminate],\n ([node, indeterminate]) => {\n if (node) node.indeterminate = Boolean(indeterminate);\n },\n { immediate: true, flush: 'post' },\n);\n\n/* Parse union-typed `size` — preset routes to box+icon class lookup, raw/object routes to inline dims. */\nconst CheckboxInputSizePresets: ReadonlySet<string> = new Set<CheckboxInputSizePreset>(['xs', 'sm', 'md', 'lg', 'xl']);\n\nconst parsedSize = computed(() =>\n CssExtensions.parseSizeUnion<CheckboxInputSizePreset>(props.size, CheckboxInputSizePresets),\n);\n\nconst boxClass = computed(() => (parsedSize.value.preset ? BoxSizeClass[parsedSize.value.preset] : undefined));\nconst iconClass = computed(() => (parsedSize.value.preset ? IconSizeClass[parsedSize.value.preset] : DefaultIconClass));\n\n/* Per-instance color override → sets CSS vars on wrapper; the visual span inherits via cascade. */\nconst composedStyle = computed<StyleValue | undefined>(() => {\n const boxStyle = parsedSize.value.box ? CssExtensions.resolveBoxSize(parsedSize.value.box) : undefined;\n const colorStyle = ColorExtensions.toneColorOverride(props.color, props.tone);\n return colorStyle || boxStyle ? { ...colorStyle, ...boxStyle } : undefined;\n});\n\nconst inputId = computed(() => props.id ?? ctx?.id);\nconst isDisabled = computed(() => props.disabled ?? ctx?.isDisabled);\nconst isRequired = computed(() => props.required ?? ctx?.isRequired);\nconst ariaChecked = computed(() => (props.isIndeterminate ? 'mixed' : undefined));\nconst isInvalid = computed(() => ctx?.isInvalid || undefined);\nconst describedBy = computed(() => ctx?.describedBy);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', 'checked']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst wrapperClass = computed(() => cn('relative inline-flex shrink-0', boxClass.value, attrs.class as ClassValue));\n\nconst visualClass = computed(() =>\n cn(\n checkboxVariants({ variant: props.variant, tone: props.tone }),\n props.isIndeterminate\n ? IndeterminateCheckedClass[props.variant][props.tone]\n : /* Opacity gate lives on this span (a peer sibling of the input) — the child selector\n targets the SVG, since `peer-checked:` cannot reach descendants. */\n '[&>svg]:opacity-0 peer-checked:[&>svg]:opacity-100',\n ),\n);\n\n/** The rendered `<input>` — the Vue stand-in for the React original's forwarded ref. */\nuseNativeFormReset(input, controlled.reset, () => {\n if (input.value) input.value.checked = Boolean(isChecked.value);\n});\n\ndefineExpose({ el: input });\n</script>\n\n<template>\n <span :class=\"wrapperClass\" :style=\"composedStyle\">\n <input\n ref=\"input\"\n type=\"checkbox\"\n :id=\"inputId\"\n :disabled=\"isDisabled\"\n :required=\"isRequired\"\n :checked=\"isChecked\"\n :aria-checked=\"ariaChecked\"\n :aria-invalid=\"isInvalid\"\n :aria-describedby=\"describedBy\"\n class=\"peer absolute inset-0 m-0 h-full w-full cursor-pointer opacity-0 disabled:cursor-not-allowed\"\n v-bind=\"passthroughAttrs\"\n @change=\"onChange\"\n />\n <span aria-hidden=\"true\" :class=\"visualClass\">\n <Minus v-if=\"isIndeterminate\" :class=\"iconClass\" />\n <Check v-else :class=\"iconClass\" />\n </span>\n </span>\n</template>\n","<script lang=\"ts\">\nimport type { Size } from '../../../foundation/styles';\n\nexport interface RadioInputProps {\n /** The control size. */\n readonly size?: Size;\n\n /** The checked state, controlled. The `v-model` binding target. */\n readonly modelValue?: boolean;\n\n /** The initial checked state when uncontrolled. */\n readonly defaultValue?: boolean;\n\n /** The control's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly disabled?: boolean;\n\n /** The required state. Falls back to the surrounding form control's `isRequired`. */\n readonly required?: boolean;\n}\n\n/* Sizes not listed fall back to the `md` row at the call site. */\nconst SizeClass: Partial<Record<Size, string>> = {\n sm: 'h-4 w-4',\n md: 'h-5 w-5',\n lg: 'h-6 w-6',\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn, Size as SizeValue } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useFormControl } from '../../../foundation/primitives';\n\n/** Renders a native radio behind a custom visual; same-`name` siblings form one mutually exclusive group. */\n/* `inheritAttrs: false` so `class` folds into the wrapper's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'RadioInput', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<RadioInputProps>(), {\n size: SizeValue.Md,\n /* Explicit `undefined` defaults are load-bearing: each flag falls back to the form control\n context, and Vue casts an absent `boolean` prop to `false` — which would shadow it. */\n modelValue: undefined,\n defaultValue: undefined,\n disabled: undefined,\n required: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the user picks this radio — the `v-model` half. */\n 'update:modelValue': [checked: boolean];\n}>();\n\nconst attrs = useAttrs();\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useFormControl();\n\nconst controlled = useControlled<boolean>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? false,\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst isChecked = controlled.value;\n\nfunction onChange(event: Event): void {\n controlled.setValue((event.target as HTMLInputElement).checked);\n}\n\nconst inputId = computed(() => props.id ?? ctx?.id);\nconst isDisabled = computed(() => props.disabled ?? ctx?.isDisabled);\nconst isRequired = computed(() => props.required ?? ctx?.isRequired);\nconst isInvalid = computed(() => ctx?.isInvalid || undefined);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', 'checked']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst wrapperClass = computed(() =>\n cn('relative inline-flex shrink-0', SizeClass[props.size] ?? SizeClass.md, attrs.class as ClassValue),\n);\n\nconst visualClass = cn(\n 'pointer-events-none grid h-full w-full place-items-center rounded-full border border-input bg-background transition-colors',\n 'peer-checked:border-primary-soft-foreground',\n /* `peer-checked:` cannot reach descendants — the dot's opacity is gated by a child selector on this peer span. */\n '[&>span]:opacity-0 peer-checked:[&>span]:opacity-100',\n 'peer-focus-visible:ring-2 peer-focus-visible:ring-ring peer-focus-visible:ring-offset-1',\n 'peer-disabled:opacity-50',\n);\n\nconst input = useTemplateRef<HTMLInputElement>('input');\n\n/** The rendered `<input>` — the Vue stand-in for the React original's forwarded ref. */\nuseNativeFormReset(input, controlled.reset, () => {\n if (input.value) input.value.checked = Boolean(isChecked.value);\n});\n\ndefineExpose({ el: input });\n</script>\n\n<template>\n <span :class=\"wrapperClass\">\n <input\n ref=\"input\"\n type=\"radio\"\n :id=\"inputId\"\n :disabled=\"isDisabled\"\n :required=\"isRequired\"\n :checked=\"isChecked\"\n :aria-invalid=\"isInvalid\"\n class=\"peer absolute inset-0 m-0 h-full w-full cursor-pointer opacity-0 disabled:cursor-not-allowed\"\n v-bind=\"passthroughAttrs\"\n @change=\"onChange\"\n />\n <span aria-hidden=\"true\" :class=\"visualClass\">\n <span class=\"h-2 w-2 rounded-full bg-primary-soft-foreground\" />\n </span>\n </span>\n</template>\n","<script lang=\"ts\">\nimport type { Size } from '../../../foundation/styles';\n\nexport interface SwitchInputProps {\n /** The control size. */\n readonly size?: Size;\n\n /** The checked state, controlled. The `v-model` binding target. */\n readonly modelValue?: boolean;\n\n /** The initial checked state when uncontrolled. */\n readonly defaultValue?: boolean;\n\n /** The control's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly disabled?: boolean;\n\n /** The required state. Falls back to the surrounding form control's `isRequired`. */\n readonly required?: boolean;\n}\n\n/* Sizes not listed fall back to the `md` row at the call site. */\nconst TrackClass: Partial<Record<Size, string>> = {\n sm: 'h-4 w-7',\n md: 'h-5 w-9',\n lg: 'h-6 w-11',\n};\nconst ThumbClass: Partial<Record<Size, string>> = {\n sm: 'h-3 w-3',\n md: 'h-4 w-4',\n lg: 'h-5 w-5',\n};\n/* `peer-checked:` cannot reach descendants — the track, a peer of the input, slides the thumb via a child selector. */\nconst TrackCheckedClass: Partial<Record<Size, string>> = {\n sm: 'peer-checked:[&>span]:translate-x-3',\n md: 'peer-checked:[&>span]:translate-x-4',\n lg: 'peer-checked:[&>span]:translate-x-5',\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn, Size as SizeValue } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useFormControl } from '../../../foundation/primitives';\n\n/** Renders a native checkbox as an iOS-style track and thumb toggle, carrying no label of its own. */\n/* `inheritAttrs: false` so `class` folds into the wrapper's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'SwitchInput', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<SwitchInputProps>(), {\n size: SizeValue.Md,\n /* Explicit `undefined` defaults are load-bearing: each flag falls back to the form control\n context, and Vue casts an absent `boolean` prop to `false` — which would shadow it. */\n modelValue: undefined,\n defaultValue: undefined,\n disabled: undefined,\n required: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the user flips the switch — the `v-model` half. */\n 'update:modelValue': [checked: boolean];\n}>();\n\nconst attrs = useAttrs();\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useFormControl();\n\nconst controlled = useControlled<boolean>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? false,\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst isChecked = controlled.value;\n\nfunction onChange(event: Event): void {\n controlled.setValue((event.target as HTMLInputElement).checked);\n}\n\nconst inputId = computed(() => props.id ?? ctx?.id);\nconst isDisabled = computed(() => props.disabled ?? ctx?.isDisabled);\nconst isRequired = computed(() => props.required ?? ctx?.isRequired);\nconst isInvalid = computed(() => ctx?.isInvalid || undefined);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', 'checked']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst wrapperClass = computed(() =>\n cn('relative inline-flex shrink-0', TrackClass[props.size] ?? TrackClass.md, attrs.class as ClassValue),\n);\n\nconst trackClass = computed(() =>\n cn(\n 'pointer-events-none flex h-full w-full items-center rounded-full bg-input px-0.5 transition-colors',\n 'peer-checked:bg-primary',\n TrackCheckedClass[props.size] ?? TrackCheckedClass.md,\n 'peer-focus-visible:ring-2 peer-focus-visible:ring-ring peer-focus-visible:ring-offset-1',\n 'peer-disabled:opacity-50',\n ),\n);\n\nconst thumbClass = computed(() =>\n cn('rounded-full bg-background shadow-sm transition-transform duration-150', ThumbClass[props.size] ?? ThumbClass.md),\n);\n\nconst input = useTemplateRef<HTMLInputElement>('input');\n\n/** The rendered `<input>` — the Vue stand-in for the React original's forwarded ref. */\nuseNativeFormReset(input, controlled.reset, () => {\n if (input.value) input.value.checked = Boolean(isChecked.value);\n});\n\ndefineExpose({ el: input });\n</script>\n\n<template>\n <span :class=\"wrapperClass\">\n <input\n ref=\"input\"\n type=\"checkbox\"\n role=\"switch\"\n :id=\"inputId\"\n :disabled=\"isDisabled\"\n :required=\"isRequired\"\n :checked=\"isChecked\"\n :aria-invalid=\"isInvalid\"\n class=\"peer absolute inset-0 m-0 h-full w-full cursor-pointer opacity-0 disabled:cursor-not-allowed\"\n v-bind=\"passthroughAttrs\"\n @change=\"onChange\"\n />\n <span aria-hidden=\"true\" :class=\"trackClass\">\n <span :class=\"thumbClass\" />\n </span>\n </span>\n</template>\n","<script lang=\"ts\">\nimport type { Size } from '../../../foundation/styles';\n\nexport interface SliderInputProps {\n /** The control size. */\n readonly size?: Size;\n\n /** The value, controlled. The `v-model` binding target. */\n readonly modelValue?: string | number;\n\n /** The initial value when uncontrolled. */\n readonly defaultValue?: string | number;\n\n /** The lower bound. Default 0. */\n readonly min?: string | number;\n\n /** The upper bound. Default 100. */\n readonly max?: string | number;\n\n /** The control's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly disabled?: boolean;\n\n /** The required state. Falls back to the surrounding form control's `isRequired`. */\n readonly required?: boolean;\n}\n\n/* Complete literal class strings — interpolating into the arbitrary variant would hide them from Tailwind's scanner.\n Sizes not listed fall back to the `md` row at the call site. */\nconst TrackClass: Partial<Record<Size, string>> = {\n sm: '[&::-webkit-slider-runnable-track]:h-1 [&::-moz-range-track]:h-1',\n md: '[&::-webkit-slider-runnable-track]:h-1.5 [&::-moz-range-track]:h-1.5',\n lg: '[&::-webkit-slider-runnable-track]:h-2 [&::-moz-range-track]:h-2',\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn, Size as SizeValue } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useFormControl } from '../../../foundation/primitives';\n\n/** Renders one draggable thumb on a horizontal track, as a cross-browser-styled native range input. */\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'SliderInput', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<SliderInputProps>(), {\n size: SizeValue.Md,\n min: 0,\n max: 100,\n /* Explicit `undefined` defaults are load-bearing: each flag falls back to the form control\n context, and Vue casts an absent `boolean` prop to `false` — which would shadow it. */\n disabled: undefined,\n required: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader drags the thumb or arrows it along the track — the `v-model` half. */\n 'update:modelValue': [value: string];\n}>();\n\nconst attrs = useAttrs();\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useFormControl();\n\nconst controlled = useControlled<string | number>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? props.min,\n onChange: (next) => {\n emit('update:modelValue', String(next));\n },\n});\n\nconst currentValue = controlled.value;\n\nfunction onInput(event: Event): void {\n if ((event as InputEvent).isComposing) return;\n controlled.setValue((event.target as HTMLInputElement).value);\n}\n\nconst inputId = computed(() => props.id ?? ctx?.id);\nconst isDisabled = computed(() => props.disabled ?? ctx?.isDisabled);\nconst isRequired = computed(() => props.required ?? ctx?.isRequired);\nconst isInvalid = computed(() => ctx?.isInvalid || undefined);\nconst describedBy = computed(() => ctx?.describedBy);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', 'value']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootClass = computed(() =>\n cn(\n 'w-full appearance-none bg-transparent disabled:cursor-not-allowed disabled:opacity-50',\n TrackClass[props.size] ?? TrackClass.md,\n // WebKit\n '[&::-webkit-slider-runnable-track]:rounded-full [&::-webkit-slider-runnable-track]:bg-muted',\n '[&::-webkit-slider-thumb]:mt-[-6px] [&::-webkit-slider-thumb]:h-4 [&::-webkit-slider-thumb]:w-4 [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:border-2 [&::-webkit-slider-thumb]:border-primary [&::-webkit-slider-thumb]:bg-background',\n // Firefox\n '[&::-moz-range-track]:rounded-full [&::-moz-range-track]:bg-muted',\n '[&::-moz-range-thumb]:h-4 [&::-moz-range-thumb]:w-4 [&::-moz-range-thumb]:rounded-full [&::-moz-range-thumb]:border-2 [&::-moz-range-thumb]:border-primary [&::-moz-range-thumb]:bg-background',\n 'focus-visible:outline-hidden focus-visible:[&::-webkit-slider-thumb]:ring-2 focus-visible:[&::-webkit-slider-thumb]:ring-ring',\n attrs.class as ClassValue,\n ),\n);\n\nconst root = useTemplateRef<HTMLInputElement>('root');\n\n/** The rendered element — the Vue stand-in for the React original's forwarded ref. */\nuseNativeFormReset(root, controlled.reset, () => {\n if (root.value) root.value.value = String(currentValue.value ?? '');\n});\n\ndefineExpose({ el: root });\n</script>\n\n<template>\n <input\n ref=\"root\"\n type=\"range\"\n :id=\"inputId\"\n :disabled=\"isDisabled\"\n :required=\"isRequired\"\n :min=\"min\"\n :max=\"max\"\n :value=\"currentValue\"\n :aria-invalid=\"isInvalid\"\n :aria-describedby=\"describedBy\"\n :class=\"rootClass\"\n v-bind=\"passthroughAttrs\"\n @input=\"onInput\"\n @compositionend=\"onInput\"\n />\n</template>\n","<script lang=\"ts\">\nexport interface FieldProps {\n /** The label text. Fill the `label` slot instead for richer content (e.g. label + tooltip). */\n readonly label?: string | number;\n\n /** The helper / hint shown beneath the control. Hidden while errors show. */\n readonly helper?: string | number;\n\n /**\n * The error text — renders only when truthy. Sets `isInvalid` on the form context.\n * Inside a forms-engine `Field` this is an OVERRIDE: leave it unset and the\n * field's own errors (client + server, all of them) render automatically.\n */\n readonly error?: string | number;\n\n /** The required state (also exposes `isRequired` to the control via context). */\n readonly isRequired?: boolean;\n\n /** The disabled state (also exposes `isDisabled` to the control). */\n readonly isDisabled?: boolean;\n\n /** The read-only state (also exposes `isReadOnly` to the control). */\n readonly isReadOnly?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn } from '../../../foundation/styles';\nimport { FormControlProvider, useFormControl } from '../../../foundation/primitives';\nimport LabelText from '../../display/labelText/LabelText.vue';\nimport FieldHelperText from '../../display/fieldHelperText/FieldHelperText.vue';\nimport FieldErrorCallout from '../../feedback/fieldErrorCallout/FieldErrorCallout.vue';\n\n/**\n * Renders label, control, helper and error as one block, wiring the control through form-control context.\n *\n * Wraps the default slot in a `FormControlProvider` so the inner control auto-wires `id`,\n * `aria-describedby`, `aria-invalid`, `disabled`, `required`, `readOnly`.\n *\n * Form-aware: composed inside a forms-engine `Field` it ADOPTS the glue's context\n * instead of shadowing it — same ids, inherited `isInvalid`/flags, and the field's\n * errors render without hand-wiring (`error` stays as an override). Standalone (no\n * surrounding provider) it behaves exactly as before.\n *\n * Each of React's three `ReactNode` props keeps its scalar form and gains a\n * same-named slot for richer content; the prop stays the discriminator.\n */\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'Field', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<FieldProps>(), {\n /* Explicit `undefined` defaults are load-bearing: each flag falls back to the PARENT\n context's value, and Vue's Boolean casting would turn an absent prop into an explicit\n `false` that shadows the parent instead of deferring to it. */\n isRequired: undefined,\n isDisabled: undefined,\n isReadOnly: undefined,\n});\n\n/** The single form control (TextInput, SelectPicker, …) — receives wired id/aria via context. */\ndefineSlots<{\n default(): unknown;\n label?(): unknown;\n helper?(): unknown;\n error?(): unknown;\n}>();\n\nconst attrs = useAttrs();\nconst slots = useSlots();\n\n/* `parent` is a live-getter object — read fields off it, never destructure. */\nconst parent = useFormControl();\n\nconst hasLabel = computed(() => Boolean(props.label) || Boolean(slots.label));\nconst hasHelper = computed(() => Boolean(props.helper) || Boolean(slots.helper));\nconst hasOwnError = computed(() => Boolean(props.error) || Boolean(slots.error));\n\n/* Mirrors FieldErrorCallout's visibility so the helper never hides behind an error\n that won't render. */\nconst showError = computed(\n () => hasOwnError.value || ((parent?.errors?.length ?? 0) > 0 && (parent?.isInvalid ?? false)),\n);\n\nconst parentId = computed(() => parent?.id);\nconst parentErrors = computed(() => parent?.errors);\nconst isInvalid = computed(() => hasOwnError.value || (parent?.isInvalid ?? false));\nconst isRequired = computed(() => props.isRequired ?? parent?.isRequired);\nconst isDisabled = computed(() => props.isDisabled ?? parent?.isDisabled);\nconst isReadOnly = computed(() => props.isReadOnly ?? parent?.isReadOnly);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootClass = computed(() => cn('flex flex-col gap-1.5', attrs.class as ClassValue));\n\nconst root = useTemplateRef<HTMLDivElement>('root');\n\n/** The rendered element — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: root });\n</script>\n\n<template>\n <FormControlProvider\n :id=\"parentId\"\n :errors=\"parentErrors\"\n :is-invalid=\"isInvalid\"\n :is-required=\"isRequired\"\n :is-disabled=\"isDisabled\"\n :is-read-only=\"isReadOnly\"\n >\n <div ref=\"root\" :class=\"rootClass\" v-bind=\"passthroughAttrs\">\n <LabelText v-if=\"hasLabel\">\n <slot name=\"label\">{{ label }}</slot>\n </LabelText>\n\n <slot />\n\n <FieldErrorCallout v-if=\"showError\" :message=\"hasOwnError ? error : undefined\">\n <!-- Passed only when this Field owns the error: an always-present default slot\n would read as an override and suppress the context's own `errors`. -->\n <template v-if=\"hasOwnError && $slots.error\" #default>\n <slot name=\"error\" />\n </template>\n </FieldErrorCallout>\n <FieldHelperText v-else-if=\"hasHelper\">\n <slot name=\"helper\">{{ helper }}</slot>\n </FieldHelperText>\n </div>\n </FormControlProvider>\n</template>\n","/**\n * The group ↔ item channel for `CheckboxGroup`.\n *\n * React injected `checked` / `onChange` into each child with `Children.map` +\n * `cloneElement`. Vue cannot rewrite a slot child's props, so the group PROVIDES this\n * context and `CheckboxField` INJECTS it — the item reads its own selected state and\n * reports toggles back. The item's `value` prop is what keys it, exactly as React's\n * `ChildLike.value` did.\n *\n * `isDisabled` / `isInvalid` ride along so the flags still cascade, and `severFormControl`\n * reproduces React's fresh per-item `FormControlProvider`: without it every item would\n * adopt the surrounding `Field`'s id (duplicate DOM ids) and its `describedBy`.\n */\nimport { inject, type InjectionKey } from 'vue';\n\nexport interface CheckboxGroupContextValue {\n /** Whether `value` is currently selected. */\n readonly isSelected: (value: string | undefined) => boolean;\n /** Toggles `value` in or out of the selection. */\n readonly toggle: (value: string | undefined) => void;\n /** The group-level disabled flag, cascaded to every item. */\n readonly isDisabled: () => boolean | undefined;\n /** The group-level invalid flag, cascaded to every item. */\n readonly isInvalid: () => boolean;\n}\n\nexport const CheckboxGroupKey: InjectionKey<CheckboxGroupContextValue> = Symbol('wow-two.checkboxGroup');\n\n/** Reads the surrounding `CheckboxGroup`, or `null` when the item stands alone. */\nexport function useCheckboxGroup(): CheckboxGroupContextValue | null {\n return inject(CheckboxGroupKey, null);\n}\n","<script lang=\"ts\">\nimport type { CheckboxInputProps } from '../checkboxInput';\n\nexport interface CheckboxFieldProps extends CheckboxInputProps {\n /** The right-side label. Fill the `label` slot instead for richer content. */\n readonly label?: string | number;\n\n /** The smaller helper / description below. Fill the `description` slot for richer content. */\n readonly description?: string | number;\n\n /**\n * The wrap-element class (the `<label>`).\n *\n * React put `className` on the inner `CheckboxInput` and `wrapperClassName` on the `<label>`;\n * that split is preserved, so Vue's `class` fallthrough attr reaches the CHECKBOX, not\n * the root. Style the wrapper through this prop.\n */\n readonly wrapperClassName?: string;\n\n /**\n * The key this item contributes to a surrounding `CheckboxGroup`'s selection.\n *\n * React read it off the cloned child (`ChildLike.value`); here the group provides a\n * context and this prop is what the item registers under. Ignored outside a group.\n */\n readonly value?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn } from '../../../foundation/styles';\nimport { useId } from '../../../foundation/identifiers';\nimport { FormControlProvider, useFormControl } from '../../../foundation/primitives';\nimport { useCheckboxGroup } from '../checkboxGroup/CheckboxGroupContext';\nimport CheckboxInput from '../checkboxInput/CheckboxInput.vue';\n\n/** Renders a checkbox, its right-side label and an optional description in one clickable `<label>`. */\n/* `inheritAttrs: false` so `class` reaches the inner CheckboxInput (React's `className`) rather\n than landing on the `<label>`. */\ndefineOptions({ name: 'CheckboxField', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<CheckboxFieldProps>(), {\n modelValue: undefined,\n defaultValue: undefined,\n disabled: undefined,\n required: undefined,\n});\n\ndefineSlots<{\n label?(): unknown;\n description?(): unknown;\n}>();\n\nconst attrs = useAttrs();\nconst slots = useSlots();\n\nconst generated = useId();\n/* Context id wins over the generated fallback — inside a `Field`/`form.Field` the\n surrounding LabelText's `htmlFor` targets `ctx.id`, so the box must carry it. Inside a\n `CheckboxGroup` the group already claimed that id, so siblings fall back to their own. */\nconst ctx = useFormControl();\nconst group = useCheckboxGroup();\nconst inputId = computed(() => props.id ?? (group ? generated : (ctx?.id ?? generated)));\n\nconst isInGroup = computed(() => group !== null);\nconst groupChecked = computed(() => group?.isSelected(props.value) ?? false);\nconst groupDisabled = computed(() => props.disabled ?? group?.isDisabled());\nconst groupInvalid = computed(() => group?.isInvalid() ?? false);\n\nfunction onGroupChange(): void {\n group?.toggle(props.value);\n}\n\nconst hasDescription = computed(() => Boolean(props.description) || Boolean(slots.description));\n\n/*\n * No `defineEmits` on purpose: `update:modelValue` are NOT re-declared, so a\n * consumer's listeners stay in `useAttrs()` and reach `CheckboxInput` through the passthrough —\n * declaring them here would strip the listeners and silently break `v-model`.\n */\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\n/** This component's own props must not reach the inner `CheckboxInput`. */\nconst checkboxProps = computed(() => {\n const {\n label: _label,\n description: _description,\n wrapperClassName: _wrapperClassName,\n value: _value,\n ...rest\n } = props;\n return rest;\n});\n\nconst wrapperClass = computed(() => cn('flex items-start gap-2.5 cursor-pointer', props.wrapperClassName));\n\nconst checkboxClass = computed(() => attrs.class as ClassValue);\n\nconst inner = useTemplateRef<{ el: HTMLInputElement | null }>('inner');\n\n/** The rendered `<input>` — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: computed(() => inner.value?.el ?? null) });\n</script>\n\n<template>\n <label :for=\"inputId\" :class=\"wrapperClass\">\n <!-- Inside a group the item gets a FRESH provider — React wrapped each cloned child in\n one so siblings never adopt the surrounding Field's id or `describedBy`, while the\n group's disabled/invalid flags still cascade. -->\n <FormControlProvider v-if=\"isInGroup\" :is-disabled=\"groupDisabled\" :is-invalid=\"groupInvalid\">\n <CheckboxInput\n ref=\"inner\"\n v-bind=\"{ ...checkboxProps, ...passthroughAttrs }\"\n :id=\"inputId\"\n :model-value=\"groupChecked\"\n :class=\"checkboxClass\"\n @change=\"onGroupChange\"\n />\n </FormControlProvider>\n <CheckboxInput\n v-else\n ref=\"inner\"\n v-bind=\"{ ...checkboxProps, ...passthroughAttrs }\"\n :id=\"inputId\"\n :class=\"checkboxClass\"\n />\n <span class=\"flex flex-col gap-0.5 text-sm\">\n <span class=\"font-medium text-foreground\">\n <slot name=\"label\">{{ label }}</slot>\n </span>\n <span v-if=\"hasDescription\" class=\"text-muted-foreground\">\n <slot name=\"description\">{{ description }}</slot>\n </span>\n </span>\n </label>\n</template>\n","/**\n * The group ↔ item channel for `RadioGroup`.\n *\n * React injected `name` / `checked` / `onChange` into each child with `Children.map` +\n * `cloneElement`. Vue cannot rewrite a slot child's props, so the group PROVIDES this\n * context and `RadioField` / `ChoiceCard` INJECT it — the item reads its own selected\n * state and reports selection back. The item's `value` prop is what keys it, exactly as\n * React's `ChildLike.value` did.\n *\n * `name` is the shared radio name that powers native arrow-key roving; `isDisabled` /\n * `isInvalid` cascade the group flags, and the item severs the surrounding `Field`'s id\n * and `describedBy` the way React's fresh per-item `FormControlProvider` did.\n */\nimport { inject, type InjectionKey } from 'vue';\n\nexport interface RadioGroupContextValue {\n /** The shared `name` every item's radio carries. */\n readonly name: () => string;\n /** Whether `value` is the current selection. */\n readonly isSelected: (value: string | undefined) => boolean;\n /** Makes `value` the selection. */\n readonly select: (value: string | undefined) => void;\n /** The group-level disabled flag, cascaded to every item. */\n readonly isDisabled: () => boolean | undefined;\n /** The group-level invalid flag, cascaded to every item. */\n readonly isInvalid: () => boolean;\n}\n\nexport const RadioGroupKey: InjectionKey<RadioGroupContextValue> = Symbol('wow-two.radioGroup');\n\n/** Reads the surrounding `RadioGroup`, or `null` when the item stands alone. */\nexport function useRadioGroup(): RadioGroupContextValue | null {\n return inject(RadioGroupKey, null);\n}\n","<script lang=\"ts\">\nimport type { RadioInputProps } from '../radioInput';\n\nexport interface RadioFieldProps extends RadioInputProps {\n /** The right-side label. Fill the `label` slot instead for richer content. */\n readonly label?: string | number;\n\n /** The smaller helper / description below. Fill the `description` slot for richer content. */\n readonly description?: string | number;\n\n /**\n * The wrap-element class (the `<label>`).\n *\n * React put `className` on the inner `RadioInput` and `wrapperClassName` on the `<label>`;\n * that split is preserved, so Vue's `class` fallthrough attr reaches the RADIO, not the\n * root. Style the wrapper through this prop.\n */\n readonly wrapperClassName?: string;\n\n /**\n * The key this item contributes to a surrounding `RadioGroup`'s selection.\n *\n * React read it off the cloned child (`ChildLike.value`); here the group provides a\n * context and this prop is what the item registers under. Ignored outside a group.\n */\n readonly value?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn } from '../../../foundation/styles';\nimport { useId } from '../../../foundation/identifiers';\nimport { FormControlProvider, useFormControl } from '../../../foundation/primitives';\nimport { useRadioGroup } from '../radioGroup/RadioGroupContext';\nimport RadioInput from '../radioInput/RadioInput.vue';\n\n/** Renders a radio, its right-side label and an optional description in one clickable `<label>`. */\n/* `inheritAttrs: false` so `class` reaches the inner RadioInput (React's `className`) rather\n than landing on the `<label>`. */\ndefineOptions({ name: 'RadioField', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<RadioFieldProps>(), {\n modelValue: undefined,\n defaultValue: undefined,\n disabled: undefined,\n required: undefined,\n});\n\ndefineSlots<{\n label?(): unknown;\n description?(): unknown;\n}>();\n\nconst attrs = useAttrs();\nconst slots = useSlots();\n\nconst generated = useId();\n/* Context id wins over the generated fallback (see CheckboxField). */\nconst ctx = useFormControl();\nconst group = useRadioGroup();\n/* Inside a `RadioGroup` the group already claimed the Field's id, so siblings fall back\n to their own generated one — React's fresh per-item provider did the same. */\nconst inputId = computed(() => props.id ?? (group ? generated : (ctx?.id ?? generated)));\n\nconst isInGroup = computed(() => group !== null);\nconst groupName = computed(() => group?.name());\nconst groupChecked = computed(() => group?.isSelected(props.value) ?? false);\nconst groupDisabled = computed(() => props.disabled ?? group?.isDisabled());\nconst groupInvalid = computed(() => group?.isInvalid() ?? false);\n\nfunction onGroupChange(): void {\n group?.select(props.value);\n}\n\nconst hasDescription = computed(() => Boolean(props.description) || Boolean(slots.description));\n\n/* No `defineEmits`: the consumer's `v-model` listeners must stay in `useAttrs()` to reach\n the inner `RadioInput` — see the CheckboxField note. */\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\n/** This component's own props must not reach the inner `RadioInput`. */\nconst radioProps = computed(() => {\n const {\n label: _label,\n description: _description,\n wrapperClassName: _wrapperClassName,\n value: _value,\n ...rest\n } = props;\n return rest;\n});\n\nconst wrapperClass = computed(() => cn('flex items-start gap-2.5 cursor-pointer', props.wrapperClassName));\n\nconst radioClass = computed(() => attrs.class as ClassValue);\n\nconst inner = useTemplateRef<{ el: HTMLInputElement | null }>('inner');\n\n/** The rendered `<input>` — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: computed(() => inner.value?.el ?? null) });\n</script>\n\n<template>\n <label :for=\"inputId\" :class=\"wrapperClass\">\n <!-- Inside a group the item gets a FRESH provider — React wrapped each cloned child in\n one so siblings never adopt the surrounding Field's id or `describedBy`, while the\n group's disabled/invalid flags still cascade. -->\n <FormControlProvider v-if=\"isInGroup\" :is-disabled=\"groupDisabled\" :is-invalid=\"groupInvalid\">\n <RadioInput\n ref=\"inner\"\n v-bind=\"{ ...radioProps, ...passthroughAttrs }\"\n :id=\"inputId\"\n :name=\"groupName\"\n :model-value=\"groupChecked\"\n :class=\"radioClass\"\n @change=\"onGroupChange\"\n />\n </FormControlProvider>\n <RadioInput v-else ref=\"inner\" v-bind=\"{ ...radioProps, ...passthroughAttrs }\" :id=\"inputId\" :class=\"radioClass\" />\n <span class=\"flex flex-col gap-0.5 text-sm\">\n <span class=\"font-medium text-foreground\">\n <slot name=\"label\">{{ label }}</slot>\n </span>\n <span v-if=\"hasDescription\" class=\"text-muted-foreground\">\n <slot name=\"description\">{{ description }}</slot>\n </span>\n </span>\n </label>\n</template>\n","<script lang=\"ts\">\nimport type { Side } from '../../../foundation/styles';\nimport type { SwitchInputProps } from '../switchInput';\n\nexport interface SwitchFieldProps extends SwitchInputProps {\n /** The label. Fill the `label` slot instead for richer content. */\n readonly label?: string | number;\n\n /** The smaller helper / description below. Fill the `description` slot for richer content. */\n readonly description?: string | number;\n\n /** The switch placement — on the left (default) or right of the label. */\n readonly side?: Side;\n\n /**\n * The wrap-element class (the `<label>`).\n *\n * React put `className` on the inner `SwitchInput` and `wrapperClassName` on the `<label>`;\n * that split is preserved, so Vue's `class` fallthrough attr reaches the SWITCH, not the\n * root. Style the wrapper through this prop.\n */\n readonly wrapperClassName?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn, Side as SideValue } from '../../../foundation/styles';\nimport { useId } from '../../../foundation/identifiers';\nimport { useFormControl } from '../../../foundation/primitives';\nimport SwitchInput from '../switchInput/SwitchInput.vue';\n\n/** Renders a switch, its label and an optional description in one clickable `<label>`; `side` picks the order. */\n/* `inheritAttrs: false` so `class` reaches the inner SwitchInput (React's `className`) rather\n than landing on the `<label>`. */\ndefineOptions({ name: 'SwitchField', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<SwitchFieldProps>(), { side: SideValue.Left });\n\ndefineSlots<{\n label?(): unknown;\n description?(): unknown;\n}>();\n\nconst attrs = useAttrs();\nconst slots = useSlots();\n\nconst generated = useId();\n/* Context id wins over the generated fallback (see CheckboxField). */\nconst ctx = useFormControl();\nconst inputId = computed(() => props.id ?? ctx?.id ?? generated);\n\nconst hasDescription = computed(() => Boolean(props.description) || Boolean(slots.description));\n\n/* No `defineEmits`: the consumer's `v-model` listeners must stay in `useAttrs()` to reach\n the inner `SwitchInput` — see the CheckboxField note. */\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\n/** This component's own props must not reach the inner `SwitchInput`. */\nconst switchProps = computed(() => {\n const { label: _label, description: _description, side: _side, wrapperClassName: _wrapperClassName, ...rest } = props;\n return rest;\n});\n\nconst wrapperClass = computed(() =>\n cn(\n 'flex cursor-pointer items-start gap-3',\n props.side === SideValue.Right && 'flex-row-reverse justify-between',\n props.wrapperClassName,\n ),\n);\n\nconst switchClass = computed(() => attrs.class as ClassValue);\n\nconst inner = useTemplateRef<{ el: HTMLInputElement | null }>('inner');\n\n/** The rendered `<input>` — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: computed(() => inner.value?.el ?? null) });\n</script>\n\n<template>\n <label :for=\"inputId\" :class=\"wrapperClass\">\n <SwitchInput ref=\"inner\" v-bind=\"{ ...switchProps, ...passthroughAttrs }\" :id=\"inputId\" :class=\"switchClass\" />\n <span class=\"flex flex-col gap-0.5 text-sm\">\n <span class=\"font-medium text-foreground\">\n <slot name=\"label\">{{ label }}</slot>\n </span>\n <span v-if=\"hasDescription\" class=\"text-muted-foreground\">\n <slot name=\"description\">{{ description }}</slot>\n </span>\n </span>\n </label>\n</template>\n","<script lang=\"ts\">\nimport type { Orientation } from '../../../foundation/styles';\n\nexport interface CheckboxGroupProps {\n /** The group legend (label-equivalent for fieldset). Fill the `legend` slot for richer content. */\n readonly legend?: string | number;\n\n /** The selected values, controlled. The `v-model` binding target. */\n readonly modelValue?: ReadonlyArray<string>;\n\n /** The initial values (uncontrolled). */\n readonly defaultValue?: ReadonlyArray<string>;\n\n /** The disabled state for the whole group. */\n readonly isDisabled?: boolean;\n\n /** The layout direction. Default `vertical`. */\n readonly orientation?: Orientation;\n\n /** The group's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, provide, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn, Orientation as OrientationValue } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useFormControl } from '../../../foundation/primitives';\nimport FieldsetLayout from '../../layout/fieldsetLayout/FieldsetLayout.vue';\nimport LegendText from '../../display/legendText/LegendText.vue';\nimport { CheckboxGroupKey, type CheckboxGroupContextValue } from './CheckboxGroupContext';\n\n/**\n * Renders a fieldset of `CheckboxField` children as one multi-select group, keyed by each child's `modelValue`.\n *\n * Form-aware at GROUP level: inside a `Field`/`form.Field` the fieldset takes the\n * context id (so the `Field` label's `htmlFor` resolves) plus `aria-labelledby`/\n * `aria-describedby`/`aria-invalid`, and the flags cascade to every item — the\n * items themselves sever the group context's id so they keep unique ids.\n */\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'CheckboxGroup', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<CheckboxGroupProps>(), {\n orientation: OrientationValue.Vertical,\n /* Explicit `undefined` default: the flag falls back to the form control context, and Vue\n casts an absent `boolean` prop to `false` — which would shadow it. */\n isDisabled: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader ticks or unticks an item — the `v-model` half. */\n 'update:modelValue': [value: ReadonlyArray<string>];\n}>();\n\n/** The `<CheckboxField>` children with `value=\"…\"` attached — React's `children`. */\ndefineSlots<{\n default(): unknown;\n legend?(): unknown;\n}>();\n\nconst attrs = useAttrs();\nconst slots = useSlots();\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useFormControl();\n\nconst isGroupDisabled = computed(() => props.isDisabled ?? ctx?.isDisabled);\nconst isGroupInvalid = computed(() => ctx?.isInvalid ?? false);\n\nconst controlled = useControlled<ReadonlyArray<string>>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? [],\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst selected = controlled.value;\n\nconst context: CheckboxGroupContextValue = {\n isSelected: (value) => value !== undefined && selected.value.includes(value),\n toggle: (value) => {\n if (value === undefined) return;\n controlled.setValue(\n selected.value.includes(value) ? selected.value.filter((x) => x !== value) : [...selected.value, value],\n );\n },\n isDisabled: () => isGroupDisabled.value,\n isInvalid: () => isGroupInvalid.value,\n};\n\nprovide(CheckboxGroupKey, context);\n\nconst hasLegend = computed(() => Boolean(props.legend) || Boolean(slots.legend));\n\nconst groupId = computed(() => props.id ?? ctx?.id);\nconst labelledBy = computed(() => ctx?.labelledBy);\nconst describedBy = computed(() => ctx?.describedBy);\nconst ariaInvalid = computed(() => isGroupInvalid.value || undefined);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootClass = computed(() => cn(attrs.class as ClassValue));\n\nconst listClass = computed(() =>\n cn('flex gap-3', props.orientation === OrientationValue.Vertical ? 'flex-col' : 'flex-row flex-wrap'),\n);\n\nconst root = useTemplateRef<{ el: HTMLFieldSetElement | null }>('root');\n\n/** The rendered `<fieldset>` — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: computed(() => root.value?.el ?? null) });\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n controlled.reset();\n});\n</script>\n\n<template>\n <FieldsetLayout\n :key=\"formResetRevision\"\n ref=\"root\"\n :id=\"groupId\"\n :disabled=\"isGroupDisabled\"\n :aria-labelledby=\"labelledBy\"\n :aria-describedby=\"describedBy\"\n :aria-invalid=\"ariaInvalid\"\n :class=\"rootClass\"\n v-bind=\"passthroughAttrs\"\n >\n <LegendText v-if=\"hasLegend\">\n <slot name=\"legend\">{{ legend }}</slot>\n </LegendText>\n <div :class=\"listClass\">\n <slot />\n </div>\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </FieldsetLayout>\n</template>\n","<script lang=\"ts\">\nimport type { Orientation } from '../../../foundation/styles';\n\nexport interface RadioGroupProps {\n /** The group legend (label-equivalent for fieldset). Fill the `legend` slot for richer content. */\n readonly legend?: string | number;\n\n /** The shared `name` (required for native radio behavior). Auto-generated if omitted. */\n readonly name?: string;\n\n /** The selected value, controlled. The `v-model` binding target. */\n readonly modelValue?: string | null;\n\n /** The initial value (uncontrolled). */\n readonly defaultValue?: string | null;\n\n /** The disabled state for the whole group. */\n readonly isDisabled?: boolean;\n\n /** The layout direction. Default `vertical`. */\n readonly orientation?: Orientation;\n\n /** The group's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, provide, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn, Orientation as OrientationValue } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useId } from '../../../foundation/identifiers';\nimport { useFormControl } from '../../../foundation/primitives';\nimport FieldsetLayout from '../../layout/fieldsetLayout/FieldsetLayout.vue';\nimport LegendText from '../../display/legendText/LegendText.vue';\nimport { RadioGroupKey, type RadioGroupContextValue } from './RadioGroupContext';\n\n/**\n * Renders a fieldset of `RadioField` children as one exclusive group under a shared `name`.\n *\n * The `name` is auto-generated when not supplied — it is what powers native arrow-key roving\n * between the radios, so it is always preserved.\n *\n * Form-aware at GROUP level: inside a `Field`/`form.Field` the fieldset (explicit\n * `radiogroup` role) takes the context id (so the `Field` label's `htmlFor`\n * resolves) plus `aria-labelledby`/`aria-describedby`/`aria-invalid`, and the\n * flags cascade to every item — the items themselves sever the group context's id\n * so they keep unique ids.\n */\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'RadioGroup', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<RadioGroupProps>(), {\n orientation: OrientationValue.Vertical,\n /* Explicit `undefined` default: the flag falls back to the form control context, and Vue\n casts an absent `boolean` prop to `false` — which would shadow it. */\n isDisabled: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader picks a different option — the `v-model` half. */\n 'update:modelValue': [value: string | null];\n}>();\n\n/** The `<RadioField>` / `<ChoiceCard>` children with `value=\"…\"` attached — React's `children`. */\ndefineSlots<{\n default(): unknown;\n legend?(): unknown;\n}>();\n\nconst attrs = useAttrs();\nconst slots = useSlots();\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useFormControl();\n\nconst isGroupDisabled = computed(() => props.isDisabled ?? ctx?.isDisabled);\nconst isGroupInvalid = computed(() => ctx?.isInvalid ?? false);\n\nconst generatedName = useId();\nconst groupName = computed(() => props.name ?? generatedName);\n\nconst controlled = useControlled<string | null>({\n /* `??` is wrong here — `null` is a MEANINGFUL selection (\"nothing selected\"), and `??`\n would fall through it to `modelValue`. Only `undefined` means \"not controlled\". */\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? null,\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst selected = controlled.value;\n\nconst context: RadioGroupContextValue = {\n name: () => groupName.value,\n isSelected: (value) => value !== undefined && selected.value === value,\n select: (value) => controlled.setValue(value ?? null),\n isDisabled: () => isGroupDisabled.value,\n isInvalid: () => isGroupInvalid.value,\n};\n\nprovide(RadioGroupKey, context);\n\nconst hasLegend = computed(() => Boolean(props.legend) || Boolean(slots.legend));\n\nconst groupId = computed(() => props.id ?? ctx?.id);\nconst labelledBy = computed(() => ctx?.labelledBy);\nconst describedBy = computed(() => ctx?.describedBy);\nconst ariaInvalid = computed(() => isGroupInvalid.value || undefined);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootClass = computed(() => cn(attrs.class as ClassValue));\n\nconst listClass = computed(() =>\n cn('flex gap-3', props.orientation === OrientationValue.Vertical ? 'flex-col' : 'flex-row flex-wrap'),\n);\n\nconst root = useTemplateRef<{ el: HTMLFieldSetElement | null }>('root');\n\n/** The rendered `<fieldset>` — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: computed(() => root.value?.el ?? null) });\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n controlled.reset();\n});\n</script>\n\n<template>\n <FieldsetLayout\n :key=\"formResetRevision\"\n ref=\"root\"\n role=\"radiogroup\"\n :id=\"groupId\"\n :disabled=\"isGroupDisabled\"\n :aria-labelledby=\"labelledBy\"\n :aria-describedby=\"describedBy\"\n :aria-invalid=\"ariaInvalid\"\n :class=\"rootClass\"\n v-bind=\"passthroughAttrs\"\n >\n <LegendText v-if=\"hasLegend\">\n <slot name=\"legend\">{{ legend }}</slot>\n </LegendText>\n <div :class=\"listClass\">\n <slot />\n </div>\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </FieldsetLayout>\n</template>\n","<script lang=\"ts\">\nimport type { Size } from '../../../foundation/styles';\n\n/** Defines the character set a pin-input cell accepts. */\nexport const PinInputType = {\n /** Refers to digits only (`0-9`). */\n Numeric: 'numeric',\n /** Refers to any single alphanumeric character. */\n Alphanumeric: 'alphanumeric',\n} as const;\n\nexport type PinInputType = (typeof PinInputType)[keyof typeof PinInputType];\n\nexport interface PinInputProps {\n /** The number of digit cells. Default 6. */\n readonly length?: number;\n\n /** The value, controlled (full string). The `v-model` binding target. */\n readonly modelValue?: string;\n\n /** The uncontrolled initial value. */\n readonly defaultValue?: string;\n\n /** The allowed characters — digits (`numeric`) or any single char (`alphanumeric`). Default `numeric`. */\n readonly type?: PinInputType;\n\n /** The cell visual size. Default `md`. */\n readonly size?: Size;\n\n /** The masked mode — renders each cell as `*` (good for verification codes). */\n readonly isMasked?: boolean;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly isDisabled?: boolean;\n}\n\n/* Sizes not listed fall back to the `md` row at the call site. */\nconst SizeClass: Partial<Record<Size, string>> = {\n sm: 'h-9 w-9 text-base',\n md: 'h-11 w-11 text-lg',\n lg: 'h-14 w-14 text-xl',\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn, Size as SizeValue } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { inputBaseVariants, InputState } from '../InputStyles';\n\n/** Renders a row of single-character PIN cells with auto-advance, paste-spread and backspace-to-previous. */\n/* `inheritAttrs: false` so `class` folds into the wrapper's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'PinInput', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<PinInputProps>(), {\n length: 6,\n type: PinInputType.Numeric,\n size: SizeValue.Md,\n /* Explicit `undefined` defaults are load-bearing: `isDisabled` falls back to the form\n control context, and Vue casts an absent `boolean` prop to `false`. */\n isMasked: undefined,\n isDisabled: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader types, pastes or deletes a character — the `v-model` half. */\n 'update:modelValue': [value: string];\n /** Fires when the reader fills the final cell, carrying the complete code. */\n complete: [value: string];\n}>();\n\nconst attrs = useAttrs();\n\n/* Per-cell array state — a joined string compacts empties, remapping cell i to char 0. */\nfunction toCells(s: string): ReadonlyArray<string> {\n return Array.from({ length: props.length }, (_, i) => s[i] ?? '');\n}\n\nconst controlled = useControlled<ReadonlyArray<string>>({\n controlled: () => {\n const external = props.modelValue;\n return external === undefined ? undefined : toCells(external);\n },\n default: () => toCells(props.defaultValue ?? ''),\n onChange: (next) => {\n emit('update:modelValue', next.join(''));\n },\n});\n\nconst cells = controlled.value;\n\n/* Plain array of element refs, filled by the function ref below — the Vue counterpart of\n React's `useRef<Array<HTMLInputElement | null>>`. */\nconst inputs: Array<HTMLInputElement | null> = [];\n\nfunction setCellRef(el: unknown, index: number): void {\n inputs[index] = el instanceof HTMLInputElement ? el : null;\n}\n\n/* FormControlContext adoption — flags cascade onto every cell; the id/describedby\n land on the FIRST cell (the composite's primary input), so `Field`-rendered\n labels/helper reach the control. A user `id` prop stays on the wrapper div. */\nconst ctx = useFormControl();\nconst isDisabled = computed(() => props.isDisabled ?? ctx?.isDisabled);\nconst isInvalid = computed(() => ctx?.isInvalid ?? false);\nconst isReadOnly = computed(() => ctx?.isReadOnly || undefined);\n\nfunction isAllowed(ch: string): boolean {\n return props.type === PinInputType.Numeric ? /^[0-9]$/.test(ch) : /^[A-Za-z0-9]$/.test(ch);\n}\n\nfunction update(next: ReadonlyArray<string>): void {\n controlled.setValue(next);\n if (next.every(Boolean)) emit('complete', next.join(''));\n}\n\nfunction onCellInput(index: number, event: Event): void {\n const ch = (event.target as HTMLInputElement).value.slice(-1);\n if (ch && !isAllowed(ch)) return;\n const arr = cells.value.slice();\n arr[index] = ch;\n update(arr);\n if (ch && index < props.length - 1) inputs[index + 1]?.focus();\n}\n\nfunction onCellKeydown(index: number, event: KeyboardEvent): void {\n if (event.defaultPrevented) return;\n if (event.key === 'Backspace' && !cells.value[index] && index > 0) {\n inputs[index - 1]?.focus();\n } else if (event.key === 'ArrowLeft' && index > 0) {\n event.preventDefault();\n inputs[index - 1]?.focus();\n } else if (event.key === 'ArrowRight' && index < props.length - 1) {\n event.preventDefault();\n inputs[index + 1]?.focus();\n }\n}\n\nfunction onPaste(event: ClipboardEvent): void {\n const pasted = event.clipboardData?.getData('text').replace(/\\s+/g, '') ?? '';\n const filtered = pasted.split('').filter(isAllowed).join('');\n if (filtered) {\n event.preventDefault();\n update(toCells(filtered));\n const focusIdx = Math.min(filtered.length, props.length - 1);\n inputs[focusIdx]?.focus();\n }\n}\n\nconst cellType = computed(() => (props.isMasked ? 'password' : 'text'));\nconst inputMode = computed(() => (props.type === PinInputType.Numeric ? 'numeric' : 'text'));\n\n/* Cells are internal — consumers can't label them individually, so each carries a built-in\n name (the aria-label wins over a `Field` label's htmlFor, keeping per-digit announcements). */\nfunction cellLabel(index: number): string {\n const noun = props.type === PinInputType.Numeric ? 'Digit' : 'Character';\n return `${noun} ${index + 1} of ${props.length}`;\n}\n\nconst firstCellId = computed(() => ctx?.id);\nconst firstCellDescribedBy = computed(() => ctx?.describedBy);\nconst firstCellRequired = computed(() => ctx?.isRequired || undefined);\n\nconst cellClass = computed(() =>\n cn(\n inputBaseVariants({ state: isInvalid.value ? InputState.Invalid : InputState.Default }),\n 'text-center font-medium',\n SizeClass[props.size] ?? SizeClass.md,\n ),\n);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootClass = computed(() => cn('inline-flex gap-2', attrs.class as ClassValue));\n\nconst root = useTemplateRef<HTMLDivElement>('root');\n\n/** The rendered wrapper — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: root });\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n controlled.reset();\n});\n</script>\n\n<template>\n <div :key=\"formResetRevision\" ref=\"root\" :class=\"rootClass\" v-bind=\"passthroughAttrs\">\n <!-- Keyed on the position: the cells never reorder, and a PIN repeats characters freely. -->\n <input\n v-for=\"(ch, i) in cells\"\n :key=\"i\"\n :ref=\"(el) => setCellRef(el, i)\"\n :type=\"cellType\"\n :inputmode=\"inputMode\"\n :aria-label=\"cellLabel(i)\"\n :id=\"i === 0 ? firstCellId : undefined\"\n :aria-describedby=\"i === 0 ? firstCellDescribedBy : undefined\"\n :aria-required=\"i === 0 ? firstCellRequired : undefined\"\n :aria-invalid=\"isInvalid || undefined\"\n autocomplete=\"one-time-code\"\n :maxlength=\"1\"\n :disabled=\"isDisabled\"\n :readonly=\"isReadOnly\"\n :value=\"ch\"\n :class=\"cellClass\"\n @input=\"onCellInput(i, $event)\"\n @keydown=\"onCellKeydown(i, $event)\"\n @paste=\"onPaste\"\n />\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </div>\n</template>\n","<script lang=\"ts\">\nimport type { InputSize, InputState } from '../InputStyles';\n\nexport interface MaskedInputProps {\n /** The control size. */\n readonly size?: InputSize;\n /** The validity surface. */\n readonly state?: InputState;\n /** The mask pattern. `#` = digit, `A` = alpha, `*` = alphanumeric, anything else = literal. */\n readonly mask: string;\n\n /** The value, controlled. The `v-model` binding target. */\n readonly modelValue?: string;\n\n /** The initial value when uncontrolled. */\n readonly defaultValue?: string;\n\n /** The control's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly disabled?: boolean;\n\n /** The required state. Falls back to the surrounding form control's `isRequired`. */\n readonly required?: boolean;\n\n /** The read-only state — React's spelling. Falls back to the form control's `isReadOnly`. */\n readonly readOnly?: boolean;\n\n /** Controlled axes use their canonical Vue model names; each update event requests caller state. */\n readonly readonly?: boolean;\n}\n\nexport function applyMask(raw: string, mask: string): string {\n /* Hardening past the React original, which read `mask.length` unguarded: `mask` is a\n required prop, but Vue only WARNS on a missing required prop and then renders, so an\n omitted mask turned every keystroke into a TypeError instead of a console warning.\n Passing the raw value through keeps the control usable while the warning still fires. */\n if (!mask) return raw;\n let out = '';\n let r = 0;\n for (let m = 0; m < mask.length && r < raw.length; m++) {\n const tok = mask[m];\n const ch = raw[r];\n if (!tok || !ch) break;\n if (tok === '#') {\n if (/[0-9]/.test(ch)) {\n out += ch;\n r++;\n } else {\n r++;\n m--;\n }\n } else if (tok === 'A') {\n if (/[A-Za-z]/.test(ch)) {\n out += ch;\n r++;\n } else {\n r++;\n m--;\n }\n } else if (tok === '*') {\n if (/[A-Za-z0-9]/.test(ch)) {\n out += ch;\n r++;\n } else {\n r++;\n m--;\n }\n } else {\n // literal\n out += tok;\n if (ch === tok) r++;\n }\n }\n return out;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { inputBaseVariants, InputState as InputStateValue } from '../InputStyles';\n\n/**\n * Renders a text input that reformats typing against a mask — `#` digit, `A` letter, `*` alphanumeric.\n *\n * Anything else in the mask is a literal that gets auto-inserted as the reader types.\n *\n * Examples: `\"###-###-####\"` (US phone), `\"##/##/####\"` (date), `\"AAA-####\"`.\n */\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'MaskedInput', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<MaskedInputProps>(), {\n /* Explicit `undefined` defaults are load-bearing: each flag falls back to the form control\n context, and Vue casts an absent `boolean` prop to `false` — which would shadow it. */\n disabled: undefined,\n required: undefined,\n readOnly: undefined,\n readonly: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader types and the masked text changes — the `v-model` half. */\n 'update:modelValue': [value: string];\n}>();\n\nconst attrs = useAttrs();\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useFormControl();\n\nconst controlled = useControlled<string>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? '',\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst currentValue = controlled.value;\n\nfunction onInput(event: Event): void {\n if ((event as InputEvent).isComposing) return;\n controlled.setValue(applyMask((event.target as HTMLInputElement).value, props.mask));\n}\n\nconst inputId = computed(() => props.id ?? ctx?.id);\nconst isDisabled = computed(() => props.disabled ?? ctx?.isDisabled);\nconst isRequired = computed(() => props.required ?? ctx?.isRequired);\nconst isReadOnly = computed(() => props.readonly ?? props.readOnly ?? ctx?.isReadOnly);\nconst isInvalid = computed(() => ctx?.isInvalid || undefined);\nconst describedBy = computed(() => ctx?.describedBy);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', 'value']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootClass = computed(() =>\n cn(\n inputBaseVariants({\n size: props.size,\n state: props.state ?? (ctx?.isInvalid ? InputStateValue.Invalid : InputStateValue.Default),\n }),\n attrs.class as ClassValue,\n ),\n);\n\nconst root = useTemplateRef<HTMLInputElement>('root');\n\n/** The rendered element — the Vue stand-in for the React original's forwarded ref. */\nuseNativeFormReset(root, controlled.reset, () => {\n if (root.value) root.value.value = String(currentValue.value ?? '');\n});\n\ndefineExpose({ el: root });\n</script>\n\n<template>\n <input\n ref=\"root\"\n type=\"text\"\n :value=\"currentValue\"\n :id=\"inputId\"\n :disabled=\"isDisabled\"\n :required=\"isRequired\"\n :readonly=\"isReadOnly\"\n :aria-invalid=\"isInvalid\"\n :aria-describedby=\"describedBy\"\n :class=\"rootClass\"\n v-bind=\"passthroughAttrs\"\n @input=\"onInput\"\n @compositionend=\"onInput\"\n />\n</template>\n","<script lang=\"ts\">\nimport type { NumberInputProps } from '../numberInput';\n\n/* React spelled this `Omit<NumberInputProps, 'children'>`; `children` is a slot here, so the\n whole `NumberInput` surface carries over unchanged. */\nexport interface CurrencyInputProps extends NumberInputProps {\n /** The currency symbol or 3-letter code displayed as a prefix. Default `\"$\"`. */\n readonly symbol?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn } from '../../../foundation/styles';\nimport NumberInput from '../numberInput/NumberInput.vue';\n\n/** Renders a `NumberInput` behind a leading currency symbol; the typed value stays the bare number. */\n/* `inheritAttrs: false` so `class` folds into the wrapper's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'CurrencyInput', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<CurrencyInputProps>(), { symbol: '$' });\n\nconst attrs = useAttrs();\n\n/*\n * No `defineEmits` on purpose: `update:modelValue` are NOT re-declared, so a\n * consumer's listeners stay in `useAttrs()` and reach `NumberInput` through the passthrough\n * below — declaring them here would strip the listeners and silently break `v-model`.\n */\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\n/** `symbol` is this component's own — it must not reach the inner `NumberInput`. */\nconst numberProps = computed(() => {\n const { symbol: _symbol, ...rest } = props;\n return rest;\n});\n\nconst wrapperClass = computed(() => cn('relative', attrs.class as ClassValue));\n\nconst inner = useTemplateRef<{ el: HTMLInputElement | null }>('inner');\n\n/** The rendered `<input>` — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: computed(() => inner.value?.el ?? null) });\n</script>\n\n<template>\n <div :class=\"wrapperClass\">\n <span class=\"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-sm text-muted-foreground\">\n {{ symbol }}\n </span>\n <NumberInput ref=\"inner\" v-bind=\"{ ...numberProps, ...passthroughAttrs }\" class=\"pl-7\" />\n </div>\n</template>\n","<script lang=\"ts\">\nimport type { NumberInputProps } from '../numberInput';\n\n/* React spelled this `Omit<NumberInputProps, 'children'>`; `children` is a slot here, so the\n whole `NumberInput` surface carries over unchanged. Kept an interface, not a type alias:\n the SFC prop resolver reads a declared interface, and the name has to stay importable. */\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface PercentInputProps extends NumberInputProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn } from '../../../foundation/styles';\nimport NumberInput from '../numberInput/NumberInput.vue';\n\n/** Renders a `NumberInput` with a trailing `%` decoration; the typed value stays the bare 0–100 number. */\n/* `inheritAttrs: false` so `class` folds into the wrapper's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'PercentInput', inheritAttrs: false });\n\nconst props = defineProps<PercentInputProps>();\n\nconst attrs = useAttrs();\n\n/*\n * No `defineEmits` on purpose: `update:modelValue` are NOT re-declared, so a\n * consumer's listeners stay in `useAttrs()` and reach `NumberInput` through the passthrough\n * below — declaring them here would strip the listeners and silently break `v-model`.\n */\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst wrapperClass = computed(() => cn('relative', attrs.class as ClassValue));\n\nconst inner = useTemplateRef<{ el: HTMLInputElement | null }>('inner');\n\n/** The rendered `<input>` — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: computed(() => inner.value?.el ?? null) });\n</script>\n\n<template>\n <div :class=\"wrapperClass\">\n <NumberInput ref=\"inner\" v-bind=\"{ ...props, ...passthroughAttrs }\" class=\"pr-16\" />\n <span class=\"pointer-events-none absolute right-12 top-1/2 -translate-y-1/2 text-sm text-muted-foreground\">\n %\n </span>\n </div>\n</template>\n","<script lang=\"ts\">\n/** @deprecated Prefer `Field` (was `FormField`) or compose `LabelText` + a control directly. */\nexport interface LabeledFieldProps {\n /** The label text. Fill the `label` slot instead for richer content. */\n readonly label?: string | number;\n\n /** The optional inline-end label (e.g. \"Optional\"). Fill the `trailing` slot for richer content. */\n readonly trailing?: string | number;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn } from '../../../foundation/styles';\nimport { useId } from '../../../foundation/identifiers';\nimport LabelText from '../../display/labelText/LabelText.vue';\n\n/**\n * Renders a `LabelText` above its control with no helper, error or context wiring — for compact inline forms.\n *\n * @deprecated Prefer `Field` (was `FormField`) for label + control + helper/error,\n * or compose `LabelText` + a control directly. Kept for one release.\n */\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'LabeledField', inheritAttrs: false });\n\nconst props = defineProps<LabeledFieldProps>();\n\n/*\n * React reached into `children.props.id` and re-cloned the element with a generated id.\n * Vue has no vnode-prop read at that point, so the default slot is SCOPED instead: the\n * generated id is handed to the consumer, who binds it on their control.\n */\ndefineSlots<{\n default(props: { id: string }): unknown;\n label?(): unknown;\n trailing?(): unknown;\n}>();\n\nconst attrs = useAttrs();\nconst slots = useSlots();\n\nconst generatedId = useId();\n\nconst hasTrailing = computed(() => Boolean(props.trailing) || Boolean(slots.trailing));\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootClass = computed(() => cn('flex flex-col gap-1.5', attrs.class as ClassValue));\n\nconst root = useTemplateRef<HTMLDivElement>('root');\n\n/** The rendered element — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: root });\n</script>\n\n<template>\n <div ref=\"root\" :class=\"rootClass\" v-bind=\"passthroughAttrs\">\n <div class=\"flex items-center justify-between\">\n <LabelText :for=\"generatedId\">\n <slot name=\"label\">{{ label }}</slot>\n </LabelText>\n <span v-if=\"hasTrailing\" class=\"text-xs text-muted-foreground\">\n <slot name=\"trailing\">{{ trailing }}</slot>\n </span>\n </div>\n <slot :id=\"generatedId\" />\n </div>\n</template>\n","<script lang=\"ts\">\nimport type { Size } from '../../../foundation/styles';\nimport type { RadioInputProps } from '../radioInput';\n\nexport interface ChoiceCardProps extends Omit<RadioInputProps, 'size'> {\n /** The card title. Fill the `label` slot instead for richer content. */\n readonly label?: string | number;\n\n /** The description under the title. Fill the `description` slot for richer content. */\n readonly description?: string | number;\n\n /** The optional icon rendered beside the label. Fill the `icon` slot with the icon element. */\n readonly icon?: string | number;\n\n /** The card size. Default `md`. */\n readonly size?: Size;\n\n /**\n * The key this item contributes to a surrounding `RadioGroup`'s selection.\n *\n * React read it off the cloned child (`ChildLike.value`); here the group provides a\n * context and this prop is what the item registers under. Ignored outside a group.\n */\n readonly value?: string;\n}\n\n/* Sizes not listed fall back to the `md` row at the call site. */\nconst SizeClass: Partial<Record<Size, string>> = {\n sm: 'p-3 text-xs',\n md: 'p-4 text-sm',\n lg: 'p-5 text-base',\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn, Size as SizeValue } from '../../../foundation/styles';\nimport { useId } from '../../../foundation/identifiers';\nimport { FormControlProvider, useFormControl } from '../../../foundation/primitives';\nimport { useRadioGroup } from '../radioGroup/RadioGroupContext';\nimport RadioInput from '../radioInput/RadioInput.vue';\n\n/** Renders a radio as a whole clickable card carrying a title, description and optional icon. */\n/* `inheritAttrs: false` so `class` folds into the card's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'ChoiceCard', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ChoiceCardProps>(), {\n size: SizeValue.Md,\n modelValue: undefined,\n defaultValue: undefined,\n disabled: undefined,\n required: undefined,\n});\n\ndefineSlots<{\n label?(): unknown;\n description?(): unknown;\n icon?(): unknown;\n}>();\n\nconst attrs = useAttrs();\nconst slots = useSlots();\n\nconst generated = useId();\n/* Context id wins over the generated fallback (see CheckboxField) — inside a\n `Field`/`form.Field` the surrounding LabelText's `htmlFor` targets `ctx.id`, so the card's\n radio must carry it. Inside a `RadioGroup` the per-item context supplies a unique id. */\nconst ctx = useFormControl();\nconst group = useRadioGroup();\n/* Inside a `RadioGroup` the group already claimed the Field's id, so siblings fall back\n to their own generated one — React's fresh per-item provider did the same. */\nconst inputId = computed(() => props.id ?? (group ? generated : (ctx?.id ?? generated)));\n\nconst isInGroup = computed(() => group !== null);\nconst groupName = computed(() => group?.name());\nconst groupChecked = computed(() => group?.isSelected(props.value) ?? false);\nconst groupDisabled = computed(() => props.disabled ?? group?.isDisabled());\nconst groupInvalid = computed(() => group?.isInvalid() ?? false);\n\nfunction onGroupChange(): void {\n group?.select(props.value);\n}\n\nconst hasIcon = computed(() => Boolean(props.icon) || Boolean(slots.icon));\nconst hasDescription = computed(() => Boolean(props.description) || Boolean(slots.description));\n\n/* No `defineEmits`: the consumer's `v-model` listeners must stay in `useAttrs()` to reach\n the inner `RadioInput` — see the CheckboxField note. */\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\n/** This component's own props must not reach the inner `RadioInput`. */\nconst radioProps = computed(() => {\n const { label: _label, description: _description, icon: _icon, size: _size, value: _value, ...rest } = props;\n return rest;\n});\n\nconst rootClass = computed(() =>\n cn(\n 'group relative block cursor-pointer rounded-lg border border-input bg-card text-card-foreground transition-colors',\n 'hover:border-border-strong has-[:checked]:border-primary has-[:checked]:bg-primary-soft/30',\n 'has-[:focus-visible]:ring-2 has-[:focus-visible]:ring-ring',\n SizeClass[props.size] ?? SizeClass.md,\n attrs.class as ClassValue,\n ),\n);\n\nconst inner = useTemplateRef<{ el: HTMLInputElement | null }>('inner');\n\n/** The rendered `<input>` — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: computed(() => inner.value?.el ?? null) });\n</script>\n\n<template>\n <label :for=\"inputId\" :class=\"rootClass\">\n <!-- Inside a group the item gets a FRESH provider — React wrapped each cloned child in\n one so siblings never adopt the surrounding Field's id or `describedBy`, while the\n group's disabled/invalid flags still cascade. -->\n <FormControlProvider v-if=\"isInGroup\" :is-disabled=\"groupDisabled\" :is-invalid=\"groupInvalid\">\n <RadioInput\n ref=\"inner\"\n v-bind=\"{ ...radioProps, ...passthroughAttrs }\"\n :id=\"inputId\"\n :name=\"groupName\"\n :model-value=\"groupChecked\"\n class=\"absolute right-3 top-3\"\n @change=\"onGroupChange\"\n />\n </FormControlProvider>\n <RadioInput\n v-else\n ref=\"inner\"\n v-bind=\"{ ...radioProps, ...passthroughAttrs }\"\n :id=\"inputId\"\n class=\"absolute right-3 top-3\"\n />\n <div class=\"flex items-start gap-3 pr-7\">\n <span v-if=\"hasIcon\" class=\"text-muted-foreground\">\n <slot name=\"icon\">{{ icon }}</slot>\n </span>\n <div class=\"min-w-0 flex-1\">\n <div class=\"font-medium text-foreground\">\n <slot name=\"label\">{{ label }}</slot>\n </div>\n <div v-if=\"hasDescription\" class=\"mt-0.5 text-muted-foreground\">\n <slot name=\"description\">{{ description }}</slot>\n </div>\n </div>\n </div>\n </label>\n</template>\n","<script lang=\"ts\">\nimport type { Size } from '../../../foundation/styles';\n\nexport interface FilePickerProps {\n /** The button label. Default `\"Choose file\"`. Fill the `label` slot for richer content. */\n readonly label?: string | number;\n\n /** The filename(s) preview rendered next to the button. Fill the `preview` slot for richer content. */\n readonly preview?: string | number;\n\n /** The visual size of the button. Default `md`. */\n readonly size?: Size;\n\n /** The control's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly disabled?: boolean;\n}\n\n/* Sizes not listed fall back to the `md` row at the call site. */\nconst SizeClass: Partial<Record<Size, string>> = {\n sm: 'h-8 px-3 text-sm',\n md: 'h-10 px-4 text-sm',\n lg: 'h-12 px-6 text-base',\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { Upload } from 'lucide-vue-next';\nimport { cn, Size as SizeValue } from '../../../foundation/styles';\nimport { Icon } from '../../../foundation/icons';\nimport { useFormControl } from '../../../foundation/primitives';\n\n/** Renders a styled trigger button over a visually-hidden native `<input type=\"file\">`. */\n/* `inheritAttrs: false` so `class` folds into the wrapper's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'FilePicker', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<FilePickerProps>(), {\n label: 'Choose file',\n size: SizeValue.Md,\n /* Explicit `undefined` default: the flag falls back to the form control context, and Vue\n casts an absent `boolean` prop to `false` — which would shadow it. */\n disabled: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader picks files in the system dialog, carrying the chosen `FileList`. */\n 'files-change': [files: FileList | null];\n}>();\n\ndefineSlots<{\n label?(): unknown;\n preview?(): unknown;\n}>();\n\nconst attrs = useAttrs();\nconst slots = useSlots();\n\n/* FormControlContext adoption — the HIDDEN native input carries the context id, so\n `Field`-rendered labels/describedby reference it (label click opens the picker).\n The trigger button mirrors describedby for keyboard users. */\nconst ctx = useFormControl();\n\nconst isDisabled = computed(() => props.disabled ?? ctx?.isDisabled);\nconst inputId = computed(() => props.id ?? ctx?.id);\nconst describedBy = computed(() => ctx?.describedBy);\nconst isInvalid = computed(() => ctx?.isInvalid || undefined);\n/* aria- (not native) required — the change handler resets `value` after handing the files\n out, so a native `required` would block every submit. */\nconst isRequired = computed(() => ctx?.isRequired || undefined);\n\nconst hasPreview = computed(() => Boolean(props.preview) || Boolean(slots.preview));\n\nconst input = useTemplateRef<HTMLInputElement>('input');\n\nfunction openPicker(): void {\n input.value?.click();\n}\n\nfunction onChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n emit('files-change', target.files);\n // Reset so re-picking the same file fires change again.\n target.value = '';\n}\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst wrapperClass = computed(() => cn('inline-flex items-center gap-3', attrs.class as ClassValue));\n\nconst buttonClass = computed(() =>\n cn(\n 'inline-flex items-center gap-2 rounded-md border border-input bg-background font-medium text-foreground transition-colors hover:bg-muted focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50',\n SizeClass[props.size] ?? SizeClass.md,\n ),\n);\n\nconst UploadIcon = Upload;\n\n/** The rendered `<input type=\"file\">` — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: input });\n</script>\n\n<template>\n <div :class=\"wrapperClass\">\n <button\n type=\"button\"\n :disabled=\"isDisabled\"\n :aria-describedby=\"describedBy\"\n :class=\"buttonClass\"\n @click=\"openPicker\"\n >\n <Icon :icon=\"UploadIcon\" :size=\"16\" />\n <slot name=\"label\">{{ label }}</slot>\n </button>\n <input\n ref=\"input\"\n type=\"file\"\n :id=\"inputId\"\n :disabled=\"isDisabled\"\n :aria-invalid=\"isInvalid\"\n :aria-describedby=\"describedBy\"\n :aria-required=\"isRequired\"\n class=\"sr-only\"\n v-bind=\"passthroughAttrs\"\n @change=\"onChange\"\n />\n <span v-if=\"hasPreview\" class=\"truncate text-sm text-muted-foreground\">\n <slot name=\"preview\">{{ preview }}</slot>\n </span>\n </div>\n</template>\n","import { inject, type InjectionKey } from 'vue';\n\n/** Represents a function that matches items against the current selection. */\nexport type EqualityFn<T> = (a: T, b: T) => boolean;\n\n/** Provides the default equality (Object.is) — primitives + reference equality. */\nexport const defaultEquals: EqualityFn<unknown> = (a, b) => Object.is(a, b);\n\n/** Defines the selection-indicator style applied to every item under this listbox. */\nexport const ListboxPickerIndicator = {\n /** Refers to a trailing check icon on the selected item. */\n Check: 'check',\n /** Refers to a leading checkbox box per item. */\n Checkbox: 'checkbox',\n /** Refers to a leading radio dot per item. */\n Radio: 'radio',\n /** Refers to a leading filled dot per item. */\n Dot: 'dot',\n /** Refers to no indicator. */\n None: 'none',\n} as const;\n\nexport type ListboxPickerIndicator = (typeof ListboxPickerIndicator)[keyof typeof ListboxPickerIndicator];\n\n/** Represents the per-item registry entry maintained by the listbox. */\nexport interface ItemEntry {\n id: string;\n value: unknown;\n isDisabled: boolean;\n}\n\n/**\n * Represents the shape of the listbox context shared with descendants.\n *\n * Every reactive field is a live getter, so `ctx.activeId` re-reads on each\n * access — the Vue counterpart of React's context object being rebuilt each\n * render. Destructuring takes a one-time snapshot; bind to the object instead.\n */\nexport interface ListboxPickerContextValue {\n readonly isMultiple: boolean;\n readonly values: ReadonlyArray<unknown>;\n readonly isEqual: EqualityFn<unknown>;\n readonly activeId: string | null;\n readonly indicator: ListboxPickerIndicator;\n readonly isDisabled: boolean;\n onItemSelect: (value: unknown) => void;\n registerItem: (entry: ItemEntry) => void;\n unregisterItem: (id: string) => void;\n setActiveId: (id: string | null) => void;\n}\n\nexport const listboxContextKey: InjectionKey<ListboxPickerContextValue> = Symbol('wow-two.listbox');\n\n/** Reads the surrounding listbox context; throws when used outside a `<ListboxPicker>`. */\nexport function useListboxContext(): ListboxPickerContextValue {\n const ctx = inject(listboxContextKey, null);\n if (!ctx) throw new Error('ListboxPicker.Item / Group / SeparatorLayout must be used inside <ListboxPicker>');\n return ctx;\n}\n","<script lang=\"ts\">\nimport type {\n SurfaceElevation,\n SurfacePadding,\n SurfaceRadius,\n SurfaceTone,\n SurfaceVariant,\n} from '../../../foundation/styles';\nimport type { EqualityFn, ListboxPickerIndicator } from './ListboxPickerContext';\n\n/**\n * Represents the prop surface of the `ListboxPicker` root.\n *\n * React modelled single- vs multi-select as a discriminated union\n * (`SingleProps<T> | MultiProps<T>`) over a generic `T`. Vue's `defineProps`\n * resolves one flat runtime shape, and a `generic=\"T\"` SFC cannot host the\n * exported interface in the plain `<script>` block — so the union is flattened\n * and `T` is fixed to `unknown`. `isMultiple` still discriminates at runtime:\n * the value is an array in multi mode and a scalar in single mode.\n *\n * The five surface axes are spelled out rather than inherited from\n * `SurfaceLayoutVariants`: that alias is `VariantProps<typeof surfaceVariants>`, which\n * the SFC compiler cannot follow as a heritage clause — it throws `Failed to\n * resolve extends base type` at build time while `vue-tsc` stays green. Named\n * types resolve fine, and the props have to be generated (not treated as\n * fallthrough attrs) because `rootClass` reads them.\n */\nexport interface ListboxPickerProps {\n /** The surface style. */\n readonly variant?: SurfaceVariant;\n\n /** The surface tone. */\n readonly tone?: SurfaceTone;\n\n /** The corner radius. */\n readonly radius?: SurfaceRadius;\n\n /** The inner padding. Default `xs` (p-1), for items breathing room. */\n readonly padding?: SurfacePadding;\n\n /** The elevation / shadow step. */\n readonly elevation?: SurfaceElevation;\n\n /** The multi-select state — the value becomes an array and items toggle. */\n readonly isMultiple?: boolean;\n\n /** The selection, controlled. The `v-model` binding target. Array in multi mode. */\n readonly modelValue?: unknown;\n\n /** The initial selection when uncontrolled. Defaults to `[]` in multi mode. */\n readonly defaultValue?: unknown;\n\n /** Disables all items when true. */\n readonly isDisabled?: boolean;\n\n /** Compares item values for equality; defaults to `Object.is`. */\n readonly isEqual?: EqualityFn<unknown>;\n\n /** Sets the selection-indicator style; default `check` (single) or `checkbox` (multi). */\n readonly indicator?: ListboxPickerIndicator;\n\n /** The tab index of the list container. Defaults to `0`, or `-1` while disabled. */\n readonly tabindex?: number;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { DomOrderExtensions } from '../../../foundation/dom';\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, onMounted, provide, ref, useAttrs, useTemplateRef, watch } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn, surfaceVariants } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useTypeahead } from '../../../foundation/selection';\nimport { listboxVariants } from './ListboxPicker.variants';\nimport {\n defaultEquals,\n listboxContextKey,\n ListboxPickerIndicator as ListboxPickerIndicatorValue,\n type ItemEntry,\n type ListboxPickerContextValue,\n} from './ListboxPickerContext';\n\n/** Renders a keyboard-navigable option list with type-to-select, single or multi selection, and per-item indicators. */\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'ListboxPicker', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ListboxPickerProps>(), {\n /* Explicit `undefined` defaults: Vue casts an absent `boolean` prop to `false`, which would\n make `isDisabled` read as an explicit \"enabled\" and, for `isMultiple`, is simply the real\n default — but `isDisabled` must stay tri-state for the `aria-disabled` / tabindex branches. */\n isMultiple: false,\n isDisabled: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader picks an option, or toggles one in multi mode — the `v-model` half. */\n 'update:modelValue': [value: unknown];\n /** Fires when the highlighted option changes by key, pointer or the auto-highlight on mount. */\n 'active-change': [id: string | null];\n}>();\n\ndefineSlots<{\n /** The options, as `ListboxPickerItem` / `ListboxPickerGroup` children. */\n default(): unknown;\n}>();\n\nconst attrs = useAttrs();\n\n/* `EqualityFn` is already imported by the plain `<script>` block above — both blocks share one\n module scope, so re-importing it here would be a duplicate declaration. */\nconst equals = computed<EqualityFn<unknown>>(() => props.isEqual ?? defaultEquals);\n\nconst resolvedIndicator = computed(\n () =>\n props.indicator ?? (props.isMultiple ? ListboxPickerIndicatorValue.Checkbox : ListboxPickerIndicatorValue.Check),\n);\n\nconst controlled = useControlled<unknown>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? (props.isMultiple ? [] : undefined),\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst values = computed<ReadonlyArray<unknown>>(() => {\n const current = controlled.value.value;\n if (Array.isArray(current)) return current as unknown[];\n return current === undefined ? [] : [current];\n});\n\n/* A plain array, not a ref: React held this in a `useRef` precisely so registration churn\n never drove a render, and the reads below all happen inside event handlers. `activeId` is\n the reactive half, and it is what descendants actually re-render on. */\nconst items: ItemEntry[] = [];\nconst activeId = ref<string | null>(null);\n\nfunction registerItem(entry: ItemEntry): void {\n const idx = items.findIndex((i) => i.id === entry.id);\n if (idx >= 0) items[idx] = entry;\n else items.push(entry);\n}\n\nfunction unregisterItem(id: string): void {\n const idx = items.findIndex((i) => i.id === id);\n if (idx >= 0) items.splice(idx, 1);\n}\n\nfunction setActiveId(id: string | null): void {\n activeId.value = id;\n}\n\nfunction onItemSelect(next: unknown): void {\n if (props.isMultiple) {\n const current = controlled.value.value;\n const list = (Array.isArray(current) ? current : []) as unknown[];\n const has = list.some((v) => equals.value(v, next));\n controlled.setValue(has ? list.filter((v) => !equals.value(v, next)) : [...list, next]);\n } else {\n controlled.setValue(next);\n }\n}\n\n/* The initial auto-active: first selected enabled option, else the first enabled one.\n `onMounted` is the Vue equivalent of React's mount-only effect — children have registered\n by then, and it never runs on the server. */\nonMounted(() => {\n if (activeId.value) return;\n const firstSelected = items.find((i) => !i.isDisabled && values.value.some((v) => equals.value(v, i.value)));\n const firstEnabled = items.find((i) => !i.isDisabled);\n activeId.value = (firstSelected ?? firstEnabled)?.id ?? null;\n});\n\n/* Mirrors the active id to a hosting combobox after commit, including the initial auto-active. */\nwatch(activeId, (id) => emit('active-change', id), { flush: 'post' });\n\nconst root = useTemplateRef<HTMLDivElement>('root');\n\n/** Activates an option by id and keeps it visible (lists are `max-h-72 overflow-y-auto`). */\nfunction activateById(id: string): void {\n activeId.value = id;\n /* Event-driven only, so `document` is always defined here — but the guard keeps the\n function safe if it is ever reached from a render-time path under SSR. */\n if (typeof document === 'undefined') return;\n root.value?.ownerDocument.getElementById(id)?.scrollIntoView({ block: 'nearest' });\n}\n\nfunction orderedItems(): ItemEntry[] {\n return DomOrderExtensions.inDocumentOrder(items, (item) => root.value?.ownerDocument.getElementById(item.id));\n}\n\nfunction moveActive(direction: 1 | -1, jump = 1): void {\n const list = orderedItems().filter((i) => !i.isDisabled);\n if (list.length === 0) return;\n const currentIdx = list.findIndex((i) => i.id === activeId.value);\n let nextIdx = currentIdx + direction * jump;\n if (currentIdx === -1) nextIdx = direction === 1 ? 0 : list.length - 1;\n if (nextIdx < 0) nextIdx = 0;\n if (nextIdx >= list.length) nextIdx = list.length - 1;\n const nextEntry = list[nextIdx];\n if (nextEntry) activateById(nextEntry.id);\n}\n\n/* Type-to-select over the registered options. Labels are read from the live DOM text of each\n option (`document.getElementById` inside the user-event path → SSR-safe), so arbitrary\n children work without threading a label prop. Disabled options are skipped by the matcher. */\nconst typeahead = useTypeahead<ItemEntry>({\n items: orderedItems,\n getLabel: (entry) => (typeof document === 'undefined' ? '' : (document.getElementById(entry.id)?.textContent ?? '')),\n isDisabled: (entry) => entry.isDisabled,\n getActiveIndex: () => orderedItems().findIndex((i) => i.id === activeId.value),\n onMatch: (entry) => activateById(entry.id),\n});\n\nfunction handleKeyDown(event: KeyboardEvent): void {\n /* React called the consumer's `onKeyDown` first and then honoured `defaultPrevented`.\n A fallthrough listener would be merged AFTER this handler and lose that ordering, so the\n consumer's handler is pulled off `attrs` and invoked by hand (and excluded from the\n passthrough below so it cannot fire twice). */\n (attrs.onKeydown as ((e: KeyboardEvent) => void) | undefined)?.(event);\n if (event.defaultPrevented || props.isDisabled) return;\n /* Type-to-select first: a printable char (incl. Space while a buffer is active) is consumed\n here and must not fall through to Enter/Space selection or anything else. */\n if (typeahead.onKeyDown(event)) {\n event.preventDefault();\n return;\n }\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n moveActive(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n moveActive(-1);\n break;\n case 'Home':\n event.preventDefault();\n moveActive(-1, items.length);\n break;\n case 'End':\n event.preventDefault();\n moveActive(1, items.length);\n break;\n case 'PageDown':\n event.preventDefault();\n moveActive(1, 10);\n break;\n case 'PageUp':\n event.preventDefault();\n moveActive(-1, 10);\n break;\n case 'Enter':\n case ' ': {\n if (!activeId.value) return;\n const entry = items.find((i) => i.id === activeId.value);\n if (!entry || entry.isDisabled) return;\n event.preventDefault();\n onItemSelect(entry.value);\n break;\n }\n }\n}\n\nconst context: ListboxPickerContextValue = {\n get isMultiple() {\n return props.isMultiple;\n },\n get values() {\n return values.value;\n },\n get isEqual() {\n return equals.value;\n },\n get activeId() {\n return activeId.value;\n },\n get indicator() {\n return resolvedIndicator.value;\n },\n get isDisabled() {\n return props.isDisabled ?? false;\n },\n onItemSelect,\n registerItem,\n unregisterItem,\n setActiveId,\n};\n\nprovide(listboxContextKey, context);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', 'onKeydown']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst listTabIndex = computed(() => (props.isDisabled ? -1 : (props.tabindex ?? 0)));\n\nconst rootClass = computed(() =>\n cn(\n surfaceVariants({\n variant: props.variant,\n tone: props.tone,\n radius: props.radius,\n /* Default padding is `xs` (p-1) for items breathing room — overridable. */\n padding: props.padding ?? 'xs',\n elevation: props.elevation,\n }),\n listboxVariants(),\n attrs.class as ClassValue,\n ),\n);\n\n/** The rendered element — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: root });\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n controlled.reset();\n});\n</script>\n\n<template>\n <div\n :key=\"formResetRevision\"\n ref=\"root\"\n role=\"listbox\"\n :tabindex=\"listTabIndex\"\n :aria-multiselectable=\"isMultiple || undefined\"\n :aria-activedescendant=\"activeId ?? undefined\"\n :aria-disabled=\"isDisabled || undefined\"\n :class=\"rootClass\"\n v-bind=\"passthroughAttrs\"\n @keydown=\"handleKeyDown\"\n >\n <slot />\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </div>\n</template>\n","<script lang=\"ts\">\nimport type { ListboxPickerIndicator } from './ListboxPickerContext';\n\n/** Represents the prop surface of `ListboxPicker.Item`. */\nexport interface ListboxPickerItemProps {\n /** The item value; compared via the parent listbox's `isEqual`. */\n readonly value: unknown;\n\n /** The disabled state for this item. */\n readonly isDisabled?: boolean;\n\n /** The per-item indicator, overriding the listbox-level indicator. */\n readonly indicator?: ListboxPickerIndicator;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, useAttrs, useTemplateRef, watch } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { Check } from 'lucide-vue-next';\nimport { cn } from '../../../foundation/styles';\nimport { useId } from '../../../foundation/identifiers';\nimport { listboxItemVariants, ListboxPickerItemState } from './ListboxPicker.variants';\nimport { useListboxContext, ListboxPickerIndicator as ListboxPickerIndicatorValue } from './ListboxPickerContext';\n\nconst CheckIcon = Check;\n\n/** Renders one selectable option row with its check, checkbox, radio or dot indicator. */\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'ListboxPickerItem', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ListboxPickerItemProps>(), {\n isDisabled: false,\n});\n\ndefineSlots<{\n /** The option's content, rendered between the leading and trailing indicators. */\n default(): unknown;\n}>();\n\nconst attrs = useAttrs();\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useListboxContext();\n\nconst id = useId();\n\n/* React registered in an effect keyed on `[id, value, isDisabled]`; the Vue counterpart is a\n watcher with `immediate` so the entry exists before the parent's mount-time auto-active runs. */\nwatch(\n () => ({ value: props.value, isDisabled: props.isDisabled }),\n ({ value, isDisabled }) => ctx.registerItem({ id, value, isDisabled }),\n { immediate: true },\n);\nonBeforeUnmount(() => ctx.unregisterItem(id));\n\nconst indicator = computed(() => props.indicator ?? ctx.indicator);\nconst isSelected = computed(() => ctx.values.some((v) => ctx.isEqual(v, props.value)));\nconst isActive = computed(() => ctx.activeId === id);\n\nconst state = computed<ListboxPickerItemState>(() => {\n if (props.isDisabled) return ListboxPickerItemState.Disabled;\n if (isSelected.value) return ListboxPickerItemState.Selected;\n if (isActive.value) return ListboxPickerItemState.Active;\n return ListboxPickerItemState.Default;\n});\n\nfunction onClick(event: MouseEvent): void {\n /* `ctx.isDisabled` = listbox-level disabled — keyboard is blocked in the root's key handler;\n mirror it for mouse. */\n if (event.defaultPrevented || props.isDisabled || ctx.isDisabled) return;\n ctx.onItemSelect(props.value);\n}\n\nfunction onPointerEnter(): void {\n if (!props.isDisabled) ctx.setActiveId(id);\n}\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootClass = computed(() => cn(listboxItemVariants({ state: state.value }), attrs.class as ClassValue));\n\nconst root = useTemplateRef<HTMLDivElement>('root');\n\n/** The rendered element — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: root });\n</script>\n\n<template>\n <div\n ref=\"root\"\n :id=\"id\"\n role=\"option\"\n :aria-selected=\"isSelected\"\n :aria-disabled=\"isDisabled || undefined\"\n :data-active=\"isActive ? '' : undefined\"\n :data-selected=\"isSelected ? '' : undefined\"\n :data-disabled=\"isDisabled ? '' : undefined\"\n :class=\"rootClass\"\n v-bind=\"passthroughAttrs\"\n @click=\"onClick\"\n @pointerenter=\"onPointerEnter\"\n >\n <!-- Leading indicator: checkbox · radio · dot. -->\n <span\n v-if=\"indicator === ListboxPickerIndicatorValue.Checkbox\"\n aria-hidden=\"true\"\n :class=\"\n cn(\n 'flex h-4 w-4 shrink-0 items-center justify-center rounded-sm border',\n isSelected ? 'border-primary bg-primary text-primary-foreground' : 'border-border',\n )\n \"\n >\n <CheckIcon v-if=\"isSelected\" class=\"h-3 w-3\" />\n </span>\n <span\n v-else-if=\"indicator === ListboxPickerIndicatorValue.Radio\"\n aria-hidden=\"true\"\n :class=\"\n cn(\n 'flex h-4 w-4 shrink-0 items-center justify-center rounded-full border',\n isSelected ? 'border-primary' : 'border-border',\n )\n \"\n >\n <span v-if=\"isSelected\" class=\"h-2 w-2 rounded-full bg-primary\" />\n </span>\n <span\n v-else-if=\"indicator === ListboxPickerIndicatorValue.Dot\"\n aria-hidden=\"true\"\n :class=\"cn('h-1.5 w-1.5 shrink-0 rounded-full', isSelected ? 'bg-primary' : 'bg-transparent')\"\n />\n\n <!--\n `data-listbox-item-content` is a stable hook for hosts that need to target the option's\n content wrapper (e.g. SelectPicker's `matchWidth` truncation) without a brittle structural selector.\n -->\n <span data-listbox-item-content class=\"flex min-w-0 flex-1 items-center gap-2\">\n <slot />\n </span>\n\n <!-- Trailing indicator: check icon. -->\n <CheckIcon\n v-if=\"indicator === ListboxPickerIndicatorValue.Check && isSelected\"\n :class=\"cn('h-4 w-4 shrink-0', !ctx.isMultiple && 'opacity-80')\"\n />\n </div>\n</template>\n","<script lang=\"ts\">\n/** Represents the prop surface of `ListboxPicker.Group`. */\nexport interface ListboxPickerGroupProps {\n /**\n * The optional group heading rendered above the contained items. Fill the\n * `label` slot instead for richer content; the prop stays the discriminator.\n */\n readonly label?: string | number;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useSlots } from 'vue';\nimport { useId } from '../../../foundation/identifiers';\nimport { listboxGroupLabelVariants } from './ListboxPicker.variants';\n\n/** Renders a heading above a subset of items and wires it as that group's accessible name. */\n/* `inheritAttrs` stays ON: React put `className` straight onto the group div with no `cn()`\n merge of its own, so plain fallthrough reproduces it exactly. */\ndefineOptions({ name: 'ListboxPickerGroup' });\n\nconst props = defineProps<ListboxPickerGroupProps>();\n\ndefineSlots<{\n /** The items this group heads. */\n default(): unknown;\n /** The heading content, richer than the `label` prop can carry. */\n label?(): unknown;\n}>();\n\nconst slots = useSlots();\nconst labelId = useId();\n\nconst hasLabel = computed(() => Boolean(props.label) || Boolean(slots.label));\n</script>\n\n<template>\n <div role=\"group\" :aria-labelledby=\"hasLabel ? labelId : undefined\">\n <div v-if=\"hasLabel\" :id=\"labelId\" :class=\"listboxGroupLabelVariants()\">\n <slot name=\"label\">{{ label }}</slot>\n </div>\n <slot />\n </div>\n</template>\n","<script lang=\"ts\">\n/* No props: React typed this as bare `HTMLAttributes<HTMLDivElement>`, every member of which is\n a Vue fallthrough attr. The block exists because a `<script setup>`-only SFC loses\n `ignoreRestSiblings` in `vue-eslint-parser` and trips `no-unused-vars` on the house\n `const { class: _class, ...others }` idiom. */\n</script>\n\n<script setup lang=\"ts\">\nimport { listboxSeparatorVariants } from './ListboxPicker.variants';\n\n/** Renders a decorative rule between groups of items, hidden from the accessibility tree. */\n/* `inheritAttrs` stays ON: React put `className` straight onto the div with no `cn()` merge\n of its own, so plain fallthrough reproduces it exactly. */\ndefineOptions({ name: 'ListboxPickerSeparator' });\n</script>\n\n<template>\n <div aria-hidden=\"true\" :class=\"listboxSeparatorVariants()\" />\n</template>\n","<script lang=\"ts\">\n/* No props: React typed this as bare `HTMLAttributes<HTMLDivElement>`, every member of which is\n a Vue fallthrough attr, and the message itself is the default slot. The block exists because\n a `<script setup>`-only SFC loses `ignoreRestSiblings` in `vue-eslint-parser` and trips\n `no-unused-vars` on the house `const { class: _class, ...others }` idiom. */\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn } from '../../../foundation/styles';\nimport { listboxEmptyVariants } from './ListboxPicker.variants';\n\n/** Renders the no-items message as a disabled option row, perceivable to AT but skipped by keyboard nav. */\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'ListboxPickerEmpty', inheritAttrs: false });\n\ndefineSlots<{\n /** The no-items copy — React's `children`. */\n default(): unknown;\n}>();\n\nconst attrs = useAttrs();\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootClass = computed(() => cn(listboxEmptyVariants(), attrs.class as ClassValue));\n</script>\n\n<template>\n <div role=\"option\" aria-disabled=\"true\" :aria-selected=\"false\" :class=\"rootClass\" v-bind=\"passthroughAttrs\">\n <slot />\n </div>\n</template>\n","import { inject, type InjectionKey, type ShallowRef } from 'vue';\nimport type { EqualityComparer } from '../../../foundation/collections';\n\n/**\n * Represents a single dropdown option as `{ itemKey, value, label }` — V defaults to K.\n *\n * React typed `label` as `ReactNode`. It is `string | number` here: `options` is\n * plain data, and the label doubles as the substring-search text, which a slot\n * cannot supply. Rich per-row rendering stays available through `<SelectPickerItem>`'s\n * default slot.\n */\nexport interface SelectPickerOption<K, V = K> {\n readonly itemKey: K;\n readonly value: V;\n readonly label: string | number;\n readonly isDisabled?: boolean;\n}\n\n/** Represents an internal item-registry entry — option + plain-text for substring search. */\nexport interface ItemRegistryEntry {\n itemKey: unknown;\n value: unknown;\n label: string | number;\n text: string;\n /** Mirrors the item's disabled state so closed-trigger typeahead can skip it (the list skips via ListboxPicker). */\n isDisabled: boolean;\n}\n\n/** Provides a plain-text representation of a label for substring search. */\nexport function extractText(label: string | number | null | undefined): string {\n return label == null ? '' : String(label);\n}\n\n/**\n * Represents the shape of the select context shared with descendants.\n *\n * Every reactive field is a live getter, so `ctx.open` re-reads on each access —\n * the Vue counterpart of React's context object being rebuilt each render.\n * Destructuring takes a one-time snapshot; bind to the object instead.\n */\nexport interface SelectPickerContextValue {\n readonly open: boolean;\n setOpen: (open: boolean) => void;\n readonly selectedKey: unknown;\n readonly hasSelection: boolean;\n /** Holds the label captured at selection time — keeps the trigger labelled while the popover is closed. */\n readonly selectedLabel: string | number | null;\n onSelect: (entry: ItemRegistryEntry) => void;\n onClear: () => void;\n readonly keyEquals: EqualityComparer<unknown>;\n readonly items: ReadonlyArray<ItemRegistryEntry>;\n registerItem: (entry: ItemRegistryEntry) => void;\n unregisterItem: (itemKey: unknown) => void;\n /** Resolves a label last seen for a key from the persistent cache (survives unmount). */\n getCachedLabel: (key: unknown) => string | number | undefined;\n readonly query: string;\n setQuery: (query: string) => void;\n readonly isDisabled: boolean;\n readonly isLoading: boolean;\n readonly loadingLabel: string;\n readonly isClearable: boolean;\n readonly clearLabel: string;\n serializeKey: (key: unknown) => string;\n getOptionLabel: (key: unknown) => string | number | null;\n readonly name?: string;\n readonly isInvalid: boolean;\n /** Stable id of the inner ListboxPicker — wired to the trigger's `aria-controls`. */\n readonly listboxId: string;\n\n /** Reflects the listbox's active option id for `aria-activedescendant`. */\n readonly activeDescendant: string | null;\n setActiveDescendant: (id: string | null) => void;\n /** Holds the DOM node of the inner ListboxPicker — the keyboard bridge re-dispatches onto it. */\n listboxEl: ShallowRef<HTMLElement | null>;\n\n /** Form-control wiring inherited from a surrounding `<Field>` (undefined when standalone).\n * `labelId`/`describedBy` carry only ids of chrome that is actually rendered. */\n readonly fieldId?: string;\n readonly labelId?: string;\n readonly describedBy?: string;\n}\n\nexport const selectContextKey: InjectionKey<SelectPickerContextValue> = Symbol('wow-two.select');\n\n/** Reads the surrounding select context; throws when used outside a `<SelectPicker>`. */\nexport function useSelectContext(): SelectPickerContextValue {\n const ctx = inject(selectContextKey, null);\n if (!ctx) throw new Error('SelectPicker.* must be used inside <SelectPicker>');\n return ctx;\n}\n","<script lang=\"ts\">\nimport type { Placement } from '@floating-ui/vue';\nimport type { EqualityComparer } from '../../../foundation/collections';\nimport type { SelectPickerOption } from './SelectPickerContext';\n\n/** Represents the prop surface of the `SelectPicker` root. */\nexport interface SelectPickerProps<K, V = K> {\n /** The selected key, controlled — the `v-model` target. `null` = explicit clear, `undefined` = uncontrolled. */\n readonly modelValue?: K | null;\n\n /** The initial selected key for uncontrolled use. */\n readonly defaultValue?: K | null;\n\n /** The equality comparer for keys; defaults to `Equality.strictEquals`. */\n readonly keyEquals?: EqualityComparer<K>;\n\n /** The disabled state, blocking interaction when true. */\n readonly isDisabled?: boolean;\n\n /** The loading state, showing a spinner in the trigger and blocking interaction. */\n readonly isLoading?: boolean;\n\n /** The label for the loading state on the polite live region + in-list row; defaults to `'Loading options…'`. */\n readonly loadingLabel?: string;\n\n /** The clearable state, rendering a clear (×) button in the trigger when a value is set. */\n readonly isClearable?: boolean;\n\n /** The label for the clear (×) button for assistive tech; defaults to `'Clear selection'`. */\n readonly clearLabel?: string;\n\n /** The name of the hidden form input that ships the serialized key. */\n readonly name?: string;\n\n /** The key serializer for the hidden form input; defaults to `String(key)`. */\n readonly serializeKey?: (key: K) => string;\n\n /** The label resolver for a `modelValue`/`defaultValue` before items register\n * (the trigger otherwise shows the raw serialized key until the first open). */\n readonly getOptionLabel?: (key: K) => string | number | null;\n\n /** The option set seeded eagerly into the item registry + label cache on mount — before the\n * popover ever opens. Lets `SelectPickerValue` resolve the selected label and closed-trigger\n * typeahead work without a first open, so `getOptionLabel` is unnecessary. Compound\n * `<SelectPickerItem>` children still render the list and remain fully supported; `options` is an\n * alternative/supplement. When both supply the same key, the mounted child wins (deduped via\n * `keyEquals`). Each entry mirrors what a `SelectPickerItem` registers. */\n readonly options?: ReadonlyArray<SelectPickerOption<K, V>>;\n\n /** The invalid state, styling the trigger as invalid (red border, error ring). */\n readonly isInvalid?: boolean;\n\n /** The initial open state of the dropdown when uncontrolled. */\n readonly defaultOpen?: boolean;\n\n /** The dropdown open state, controlled. The `v-model:open` binding target. */\n readonly open?: boolean;\n\n /** The floating placement of the dropdown. */\n readonly placement?: Placement;\n}\n</script>\n\n<script setup lang=\"ts\" generic=\"K, V = K\">\nimport { useTemplateRef } from 'vue';\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, provide, ref, shallowRef, watch } from 'vue';\nimport { Equality } from '../../../foundation/collections';\nimport { useControlled } from '../../../foundation/state';\nimport { useId } from '../../../foundation/identifiers';\nimport { Popover } from '../../overlays';\nimport {\n extractText,\n selectContextKey,\n type ItemRegistryEntry,\n type SelectPickerContextValue,\n} from './SelectPickerContext';\nimport { useFormControl } from '../../../foundation/primitives';\n\n/** Renders a single-choice dropdown — the popover hosting trigger and panel, plus the hidden key input. */\ndefineOptions({ name: 'SelectPicker', inheritAttrs: false });\n\n/** The SelectPicker tree — `SelectPickerTrigger` and `SelectPickerContent`. React's `children`. */\ndefineSlots<{ default(): unknown }>();\n\nconst props = withDefaults(defineProps<SelectPickerProps<K, V>>(), {\n isLoading: false,\n loadingLabel: 'Loading options…',\n isClearable: false,\n clearLabel: 'Clear selection',\n defaultOpen: false,\n placement: 'bottom',\n /* Explicit `undefined` defaults are load-bearing: `useControlled` keys on `=== undefined`,\n and Vue casts an absent `boolean` prop to `false`. Without these, `open` would\n read as \"controlled, and closed\" — pinning the dropdown shut and making `defaultOpen`\n dead — and `isDisabled`/`isInvalid` would shadow the surrounding `<Field>` context. */\n open: undefined,\n isDisabled: undefined,\n isInvalid: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader picks an option or clears it — the `v-model` half, carrying the key. */\n 'update:modelValue': [key: K | null];\n /** Fires when the reader opens or dismisses the dropdown — the `v-model:open` half. */\n 'update:open': [open: boolean];\n}>();\n\n/* `field` is a live-getter object — read fields off it, never destructure. */\nconst field = useFormControl();\n\nconst finalDisabled = computed(() => props.isDisabled ?? field?.isDisabled ?? false);\nconst finalInvalid = computed(() => props.isInvalid ?? field?.isInvalid ?? false);\n\nconst openCtl = useControlled<boolean>({\n controlled: () => props.open,\n default: () => props.defaultOpen,\n onChange: (value) => {\n emit('update:open', value);\n },\n});\n\nconst keyCtl = useControlled<K | null>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? null,\n onChange: (value) => emit('update:modelValue', value),\n});\n\n/* Reactive, unlike ListboxPicker's plain array: `SelectPickerValue` resolves its label from this set and\n `SelectPickerContent` counts visible rows off it, both at render time. */\nconst items = ref<ItemRegistryEntry[]>([]);\n\n/* Persistent key→label cache (keyed by serialized key), never evicted on unmount: backstops\n label resolution for a closed trigger after items unmount, separate from the live `items` set.\n Deliberately a plain Map, matching React's ref — every read of it is reached through a chain\n that already depends on `items`, which is what changes when an option unmounts. */\nconst labelCache = new Map<string, string | number>();\n\nconst query = ref('');\nconst activeDescendant = ref<string | null>(null);\nconst listboxId = useId('select-listbox');\nconst listboxEl = shallowRef<HTMLElement | null>(null);\n\n/* Captures `{ itemKey, label }` at selection time — items unmount on popover close, so the\n registry alone can't label the trigger before the first open. */\nconst selectedEntry = shallowRef<{ itemKey: unknown; label: string | number } | null>(null);\n\nconst keyEqualsFn = computed<EqualityComparer<unknown>>(\n () => (props.keyEquals as EqualityComparer<unknown> | undefined) ?? Equality.strictEquals,\n);\n\nconst serializeKeyFn = computed<(key: unknown) => string>(\n () => (props.serializeKey as ((key: unknown) => string) | undefined) ?? ((key) => String(key)),\n);\n\nfunction getOptionLabelFn(key: unknown): string | number | null {\n const fn = props.getOptionLabel as ((key: unknown) => string | number | null) | undefined;\n return fn ? fn(key) : null;\n}\n\nfunction registerItem(entry: ItemRegistryEntry): void {\n /* Persist the label so a closed trigger can still resolve it after this item unmounts. */\n labelCache.set(serializeKeyFn.value(entry.itemKey), entry.label);\n const list = items.value;\n const idx = list.findIndex((i) => Object.is(i.itemKey, entry.itemKey));\n if (idx >= 0) {\n const existing = list[idx];\n if (\n existing &&\n existing.label === entry.label &&\n existing.text === entry.text &&\n existing.isDisabled === entry.isDisabled &&\n Object.is(existing.value, entry.value)\n ) {\n return;\n }\n const next = list.slice();\n next[idx] = entry;\n items.value = next;\n return;\n }\n items.value = [...list, entry];\n}\n\n/* Drops the item from the live mounted set on unmount so a removed option (popover close OR\n option-set change) no longer satisfies search / typeahead / value resolution. The label\n stays in `labelCache`, so the trigger keeps its label after close. */\nfunction unregisterItem(itemKey: unknown): void {\n const idx = items.value.findIndex((i) => Object.is(i.itemKey, itemKey));\n if (idx === -1) return;\n const next = items.value.slice();\n next.splice(idx, 1);\n items.value = next;\n}\n\nfunction getCachedLabel(key: unknown): string | number | undefined {\n return labelCache.get(serializeKeyFn.value(key));\n}\n\n/* Maps the eager `options` prop to registry entries, mirroring what a `SelectPickerItem` registers.\n Seeding these lets `SelectPickerValue` + closed-trigger typeahead resolve before the popover's\n first open, so `getOptionLabel` is unnecessary when `options` is supplied. */\nconst seedItems = computed<ReadonlyArray<ItemRegistryEntry>>(() => {\n if (!props.options) return [];\n return props.options.map((option) => ({\n itemKey: option.itemKey,\n value: (option.value ?? option.itemKey) as unknown,\n label: option.label,\n text: extractText(option.label),\n isDisabled: option.isDisabled ?? false,\n }));\n});\n\n/* Merges seeded options with the live (compound-child) registrations, deduped by `keyEquals`.\n A mounted `<SelectPickerItem>` wins on key collision — its value/label/text supersede the seed —\n while compound-only items append. Seed order is preserved so closed-trigger typeahead follows\n `options`. When no options are given this is exactly the live `items` set (no behavior change). */\nconst mergedItems = computed<ReadonlyArray<ItemRegistryEntry>>(() => {\n const seeds = seedItems.value;\n const live = items.value;\n if (seeds.length === 0) return live;\n if (live.length === 0) return seeds;\n const equals = keyEqualsFn.value;\n const merged = seeds.map((s) => live.find((i) => equals(i.itemKey, s.itemKey)) ?? s);\n const extras = live.filter((i) => !seeds.some((s) => equals(s.itemKey, i.itemKey)));\n return extras.length > 0 ? [...merged, ...extras] : merged;\n});\n\n/* Seeds the persistent label cache from `options` so a controlled value resolves its label\n before any item mounts. Only fills gaps — a mounted `SelectPickerItem` (via `registerItem`) writes\n the cache unconditionally and therefore always wins. */\nwatch(\n seedItems,\n (seeds) => {\n if (seeds.length === 0) return;\n for (const seed of seeds) {\n const serialized = serializeKeyFn.value(seed.itemKey);\n if (!labelCache.has(serialized)) labelCache.set(serialized, seed.label);\n }\n },\n { immediate: true },\n);\n\nconst hasSelection = computed(() => keyCtl.value.value !== null && keyCtl.value.value !== undefined);\n\n/* Drops the captured label when the key changed externally (controlled updates). */\nconst selectedLabel = computed<string | number | null>(() => {\n const captured = selectedEntry.value;\n if (!captured || !hasSelection.value) return null;\n return keyEqualsFn.value(captured.itemKey, keyCtl.value.value) ? captured.label : null;\n});\n\nfunction onSelect(entry: ItemRegistryEntry): void {\n keyCtl.setValue(entry.itemKey as K | null);\n selectedEntry.value = { itemKey: entry.itemKey, label: entry.label };\n openCtl.setValue(false);\n query.value = '';\n}\n\nfunction onClear(): void {\n keyCtl.setValue(null);\n selectedEntry.value = null;\n}\n\nfunction onPopoverOpenChange(next: boolean): void {\n openCtl.setValue(next);\n if (!next) {\n query.value = '';\n activeDescendant.value = null;\n }\n}\n\nconst context: SelectPickerContextValue = {\n get open() {\n return openCtl.value.value;\n },\n setOpen: (next) => openCtl.setValue(next),\n get selectedKey() {\n return keyCtl.value.value;\n },\n get hasSelection() {\n return hasSelection.value;\n },\n get selectedLabel() {\n return selectedLabel.value;\n },\n onSelect,\n onClear,\n get keyEquals() {\n return keyEqualsFn.value;\n },\n get items() {\n return mergedItems.value;\n },\n registerItem,\n unregisterItem,\n getCachedLabel,\n get query() {\n return query.value;\n },\n setQuery: (next) => {\n query.value = next;\n },\n get isDisabled() {\n return finalDisabled.value;\n },\n get isLoading() {\n return props.isLoading;\n },\n get loadingLabel() {\n return props.loadingLabel;\n },\n get isClearable() {\n return props.isClearable;\n },\n get clearLabel() {\n return props.clearLabel;\n },\n get serializeKey() {\n return serializeKeyFn.value;\n },\n getOptionLabel: getOptionLabelFn,\n get name() {\n return props.name;\n },\n get isInvalid() {\n return finalInvalid.value;\n },\n get listboxId() {\n return listboxId;\n },\n get activeDescendant() {\n return activeDescendant.value;\n },\n setActiveDescendant: (id) => {\n activeDescendant.value = id;\n },\n listboxEl,\n get fieldId() {\n return field?.id;\n },\n get labelId() {\n return field?.labelledBy;\n },\n get describedBy() {\n return field?.describedBy;\n },\n};\n\nprovide(selectContextKey, context);\n\nconst isOpenNow = computed(() => openCtl.value.value);\nconst serializedKey = computed(() => serializeKeyFn.value(keyCtl.value.value));\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n openCtl.reset();\n keyCtl.reset();\n\n query.value = '';\n activeDescendant.value = null;\n});\n</script>\n\n<template>\n <Popover\n :key=\"formResetRevision\"\n :open=\"isOpenNow\"\n :placement=\"placement\"\n :offset=\"4\"\n @update:open=\"onPopoverOpenChange\"\n >\n <slot />\n <!-- Always-rendered — inside PopoverContent it would vanish from form submission when closed. -->\n <input v-if=\"name && hasSelection\" type=\"hidden\" :name=\"name\" :value=\"serializedKey\" />\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </Popover>\n</template>\n","import { tv, type VariantProps } from '../../../foundation/styles';\nimport { inputBaseVariants } from '../InputStyles';\n\n/** Defines the size step of a select trigger. */\nexport const SelectPickerSize = {\n /** Refers to the extra-small step. */\n Xs: 'xs',\n /** Refers to the small step. */\n Sm: 'sm',\n /** Refers to the medium (default) step. */\n Md: 'md',\n /** Refers to the large step. */\n Lg: 'lg',\n} as const;\n\nexport type SelectPickerSize = (typeof SelectPickerSize)[keyof typeof SelectPickerSize];\n\n/**\n * Extends the shared `inputBaseVariants` so the trigger's height, border,\n * focus-ring, disabled, and per-size paddings stay in lockstep with `TextInput`.\n * Only trigger-specific extras are added here:\n * - `justify-between` + `gap-2` to push the chevron/clear cluster to the end,\n * - `data-[state=open]:border-border-strong` to mirror the hover border while open.\n */\nexport const selectTriggerVariants = tv({\n extend: inputBaseVariants,\n base: 'items-center justify-between gap-2 data-[state=open]:border-border-strong',\n variants: {\n size: {\n xs: 'gap-1.5',\n sm: '',\n md: '',\n lg: '',\n },\n },\n});\n\nexport type SelectPickerTriggerVariants = VariantProps<typeof selectTriggerVariants>;\n\n/* Compile-time lock: enum values ≡ tv axis keys (drift = type error). */\ntype AssertExact<A, B> = [A] extends [B] ? ([B] extends [A] ? true : never) : never;\nconst _assertSelectSize: AssertExact<\n SelectPickerSize,\n NonNullable<VariantProps<typeof selectTriggerVariants>['size']>\n> = true;\nvoid _assertSelectSize;\n","<script lang=\"ts\">\n/** Represents the prop surface of the `SelectPickerValue`. */\nexport interface SelectPickerValueProps {\n /** The content shown when no item is selected. Fill the `placeholder` slot for richer content. */\n readonly placeholder?: string | number;\n\n /**\n * The override for the auto-resolved label, rendered as-is with no item lookup —\n * React's `children`. The default slot does the same for richer content.\n */\n readonly label?: string | number;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useSlots } from 'vue';\nimport { cn } from '../../../foundation/styles';\nimport { useSelectContext } from './SelectPickerContext';\n\n/** Renders the selected item's label inside the trigger, or the placeholder while nothing is selected. */\ndefineOptions({ name: 'SelectPickerValue' });\n\nconst props = defineProps<SelectPickerValueProps>();\n\ndefineSlots<{\n /** The label override, rendered with no item lookup. Falls back to the `label` prop. */\n default?(): unknown;\n /** The empty-selection content, richer than the `placeholder` prop can carry. */\n placeholder?(): unknown;\n}>();\n\nconst slots = useSlots();\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useSelectContext();\n\nconst hasOverride = computed(() => Boolean(props.label) || Boolean(slots.default));\n\n/* Resolution order: live registry → label captured at selection → persistent cache (labels a\n closed trigger post-unmount) → `getOptionLabel` (human label before first open) → serialized key. */\nconst resolvedLabel = computed<string | number | null>(() => {\n if (!ctx.hasSelection) return null;\n const match = ctx.items.find((i) => ctx.keyEquals(i.itemKey, ctx.selectedKey));\n return (\n match?.label ??\n ctx.selectedLabel ??\n ctx.getCachedLabel(ctx.selectedKey) ??\n ctx.getOptionLabel(ctx.selectedKey) ??\n ctx.serializeKey(ctx.selectedKey)\n );\n});\n\n/* `muted-foreground` (not `subtle-foreground`): the trigger surface is muted, where subtle is\n only 4.2:1 (see index.css). */\nconst valueClass = computed(() => cn('truncate text-left', !resolvedLabel.value && 'text-muted-foreground'));\n</script>\n\n<template>\n <span v-if=\"hasOverride\" class=\"truncate\">\n <slot>{{ label }}</slot>\n </span>\n <span v-else :class=\"valueClass\">\n <template v-if=\"resolvedLabel !== null\">{{ resolvedLabel }}</template>\n <slot v-else name=\"placeholder\">{{ placeholder }}</slot>\n </span>\n</template>\n","<script lang=\"ts\">\nimport type { InputState } from '../InputStyles';\nimport type { SelectPickerSize } from './SelectPicker.variants';\n\n/** Represents the prop surface of the `SelectPickerTrigger`. */\nexport interface SelectPickerTriggerProps {\n /** The trigger size. */\n readonly size?: SelectPickerSize;\n\n /** The validity surface. */\n readonly state?: InputState;\n}\n\n/** Contains the icon Tailwind classes per trigger size. */\nconst TriggerIconClasses = {\n xs: 'h-3 w-3',\n sm: 'h-3.5 w-3.5',\n md: 'h-4 w-4',\n lg: 'h-5 w-5',\n} as const;\n\n/** Contains the clear-button hit-box Tailwind classes per trigger size.\n * The visual glyph stays small; the hit target is floored at 24×24 (WCAG 2.2 SC 2.5.8). */\nconst TriggerClearBoxClasses = {\n xs: 'h-4 w-4',\n sm: 'h-5 w-5',\n md: 'h-5 w-5',\n lg: 'h-6 w-6',\n} as const;\n\n/** Contains the vertical-divider height Tailwind classes per trigger size. */\nconst TriggerDividerClasses = {\n xs: 'h-3',\n sm: 'h-3.5',\n md: 'h-4',\n lg: 'h-5',\n} as const;\n\n/** Contains the right-offset classes aligning the overlaid clear button with its reserved slot\n * (trigger `px` + chevron width + `gap-1.5` + 1px divider + `gap-1.5`). */\nconst TriggerClearOffsetClasses = {\n xs: 'right-[35px]',\n sm: 'right-[37px]',\n md: 'right-[41px]',\n lg: 'right-[49px]',\n} as const;\n\n/** Resolves the trigger's `data-state` — open wins, then loading/disabled/invalid. */\nfunction triggerDataState(\n open: boolean,\n isLoading: boolean,\n isDisabled: boolean,\n isInvalid: boolean,\n): string | undefined {\n if (open) return 'open';\n if (isLoading) return 'loading';\n if (isDisabled) return 'disabled';\n if (isInvalid) return 'invalid';\n return undefined;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { ChevronDown, Loader2, X } from 'lucide-vue-next';\nimport { AriaAttribute } from '../../../foundation/dom';\nimport { cn } from '../../../foundation/styles';\nimport { useTypeahead } from '../../../foundation/selection';\nimport { Announce } from '../../../foundation/primitives';\nimport { PopoverTrigger } from '../../overlays';\nimport { InputState as InputStateValue } from '../InputStyles';\nimport { selectTriggerVariants } from './SelectPicker.variants';\nimport { useSelectContext, type ItemRegistryEntry } from './SelectPickerContext';\nimport SelectPickerValue from './SelectPickerValue.vue';\n\nconst ChevronDownIcon = ChevronDown;\nconst LoaderIcon = Loader2;\nconst ClearIcon = X;\n\n/** Renders the button that opens the dropdown, showing the selection, a chevron, and an optional clear control. */\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call, and so the rest\n of the attrs land on the inner `<button>` rather than the positioning wrapper. */\ndefineOptions({ name: 'SelectPickerTrigger', inheritAttrs: false });\n\n/** The trigger content — defaults to `<SelectPickerValue />`. React's `children`. */\ndefineSlots<{ default?(): unknown }>();\n\nconst props = defineProps<SelectPickerTriggerProps>();\n\nconst attrs = useAttrs();\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useSelectContext();\n\n/* `aria-label` is read off `attrs`, never declared: a declared `'aria-label'` prop arrives as\n `props.ariaLabel`, so `props['aria-label']` is always undefined and no accessible name\n renders. Left in the fallthrough set, it also still lands on the button. */\nconst ariaLabel = computed(() => attrs[AriaAttribute.Label] as string | undefined);\n\nconst triggerState = computed(() => props.state ?? (ctx.isInvalid ? InputStateValue.Invalid : InputStateValue.Default));\n\n/* Closed-only type-to-select (native `<select>`): typing picks the matching option without\n opening; while OPEN the inner ListboxPicker owns typeahead. Matches each item's `entry.text`,\n anchored at the current selection so repeats cycle from there. */\nconst triggerTypeahead = useTypeahead<ItemRegistryEntry>({\n items: () => ctx.items,\n getLabel: (entry) => entry.text,\n isDisabled: (entry) => entry.isDisabled,\n getActiveIndex: () => (ctx.hasSelection ? ctx.items.findIndex((i) => ctx.keyEquals(i.itemKey, ctx.selectedKey)) : -1),\n onMatch: (entry) => ctx.onSelect(entry),\n enabled: () => !ctx.open && !ctx.isDisabled && !ctx.isLoading,\n});\n\nfunction handleTriggerKeyDown(event: KeyboardEvent): void {\n /* React called the consumer's `onKeyDown` first and then honoured `defaultPrevented`; a\n fallthrough listener would merge AFTER this handler and lose that ordering, so it is pulled\n off `attrs` and invoked by hand (and excluded from the passthrough so it cannot fire twice). */\n (attrs.onKeydown as ((e: KeyboardEvent) => void) | undefined)?.(event);\n if (event.defaultPrevented) return;\n /* Only intercept when closed — open delegates to the ListboxPicker. A consumed char (incl. Space\n while a buffer is active) must not also toggle the popover open via the button. */\n if (!ctx.open && triggerTypeahead.onKeyDown(event)) {\n event.preventDefault();\n }\n}\n\nconst showClear = computed(() => ctx.isClearable && ctx.hasSelection && !ctx.isLoading && !ctx.isDisabled);\n\nconst sizeKey = computed<SelectPickerSize>(() => props.size ?? 'md');\nconst iconClass = computed(() => TriggerIconClasses[sizeKey.value]);\nconst clearBoxClass = computed(() => TriggerClearBoxClasses[sizeKey.value]);\nconst dividerClass = computed(() => TriggerDividerClasses[sizeKey.value]);\nconst clearOffsetClass = computed(() => TriggerClearOffsetClasses[sizeKey.value]);\n\n/* Names the trigger from the Field label when present; an explicit aria-label always wins. */\nconst labelledBy = computed(() => (!ariaLabel.value ? ctx.labelId : undefined));\n\nconst dataState = computed(() => triggerDataState(ctx.open, ctx.isLoading, ctx.isDisabled, ctx.isInvalid));\n\nconst chevronClass = computed(() =>\n cn(iconClass.value, 'text-muted-foreground transition-transform', ctx.open && 'rotate-180'),\n);\n\nconst spinnerClass = computed(() => cn(iconClass.value, 'animate-spin text-subtle-foreground'));\n\nconst clearButtonClass = computed(() =>\n cn(\n /* `min-h/min-w` floor the hit target at 24px (WCAG 2.2 SC 2.5.8) while the glyph box\n (`clearBoxClass`) stays visually small. */\n 'absolute top-1/2 grid min-h-6 min-w-6 -translate-y-1/2 place-items-center rounded-full text-subtle-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring',\n clearBoxClass.value,\n clearOffsetClass.value,\n ),\n);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', 'onKeydown']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst buttonClass = computed(() =>\n cn(selectTriggerVariants({ size: props.size, state: triggerState.value }), attrs.class as ClassValue),\n);\n\nconst root = useTemplateRef<HTMLButtonElement>('root');\n\n/** The rendered `<button>` — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: root });\n</script>\n\n<template>\n <span class=\"relative inline-flex w-full\">\n <!--\n Always-mounted polite live region — swapping content (empty ↔ label) makes SRs announce\n the loading transition. `aria-busy` on the button alone isn't announced.\n -->\n <Announce>{{ ctx.isLoading ? ctx.loadingLabel : '' }}</Announce>\n <PopoverTrigger as-child>\n <button\n ref=\"root\"\n type=\"button\"\n :id=\"ctx.fieldId\"\n :disabled=\"ctx.isDisabled || ctx.isLoading\"\n :aria-busy=\"ctx.isLoading || undefined\"\n aria-haspopup=\"listbox\"\n :aria-controls=\"ctx.listboxId\"\n :aria-activedescendant=\"ctx.open ? (ctx.activeDescendant ?? undefined) : undefined\"\n :aria-invalid=\"triggerState === 'invalid' || undefined\"\n :aria-labelledby=\"labelledBy\"\n :aria-describedby=\"ctx.describedBy\"\n :data-state=\"dataState\"\n :class=\"buttonClass\"\n v-bind=\"passthroughAttrs\"\n @keydown=\"handleTriggerKeyDown\"\n >\n <slot><SelectPickerValue /></slot>\n <span class=\"ml-auto flex shrink-0 items-center gap-1.5\">\n <template v-if=\"showClear\">\n <!-- Reserves the slot the overlaid clear button sits on. -->\n <span aria-hidden=\"true\" :class=\"clearBoxClass\" />\n <!-- Separates the clear button from the chevron — `foreground/20` always contrasts. -->\n <span aria-hidden=\"true\" :class=\"cn('w-px bg-foreground/20', dividerClass)\" />\n </template>\n <LoaderIcon v-if=\"ctx.isLoading\" :class=\"spinnerClass\" />\n <ChevronDownIcon v-else :class=\"chevronClass\" />\n </span>\n </button>\n </PopoverTrigger>\n <button\n v-if=\"showClear\"\n type=\"button\"\n :aria-label=\"ctx.clearLabel\"\n :class=\"clearButtonClass\"\n @click=\"ctx.onClear()\"\n >\n <ClearIcon :class=\"iconClass\" />\n </button>\n </span>\n</template>\n","<script lang=\"ts\">\nimport type {\n SurfaceElevation,\n SurfacePadding,\n SurfaceRadius,\n SurfaceTone,\n SurfaceVariant,\n} from '../../../foundation/styles';\n\n/**\n * Represents the prop surface of the `SelectPickerContent`.\n *\n * React declared the surface axes by `extends SurfaceLayoutVariants`; they are spelled\n * out here because the SFC compiler's type resolver cannot follow a\n * `VariantProps<typeof …>` base and fails the build on it while `vue-tsc` stays\n * green. The aliases below are the canonical ones from `foundation/styles`.\n */\nexport interface SelectPickerContentProps {\n /** The visual recipe. */\n readonly variant?: SurfaceVariant;\n\n /** The color tone the recipe is tinted with. */\n readonly tone?: SurfaceTone;\n\n /** The corner rounding. */\n readonly radius?: SurfaceRadius;\n\n /** The inner spacing step. Defaults to `none`. */\n readonly padding?: SurfacePadding;\n\n /** The shadow depth. */\n readonly elevation?: SurfaceElevation;\n\n /** The searchable state, rendering a search input above the items and filtering by label substring. */\n readonly isSearchable?: boolean;\n\n /** The placeholder of the search input. */\n readonly searchPlaceholder?: string;\n\n /** The label rendered when the search yields no matches. */\n readonly noResultsLabel?: string | number;\n\n /** The match-width behavior, locking the surface width to the trigger's and truncating long items. */\n readonly matchWidth?: boolean;\n}\n\n/** The navigation keys the search input forwards to the ListboxPicker keyboard handler. */\nconst ForwardedNavKeys = new Set(['ArrowDown', 'ArrowUp', 'Home', 'End', 'PageDown', 'PageUp', 'Enter']);\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useTemplateRef, watch, type ComponentPublicInstance } from 'vue';\nimport { Loader2 } from 'lucide-vue-next';\nimport { cn } from '../../../foundation/styles';\nimport { PopoverContent } from '../../overlays';\nimport ListboxPicker from '../listboxPicker/ListboxPicker.vue';\nimport ListboxPickerEmpty from '../listboxPicker/ListboxPickerEmpty.vue';\nimport SearchInput from '../searchInput/SearchInput.vue';\nimport { useSelectContext } from './SelectPickerContext';\n\nconst LoaderIcon = Loader2;\n\n/** Renders the floating panel below the trigger — an optional search box over the listbox of options. */\ndefineOptions({ name: 'SelectPickerContent', inheritAttrs: false });\n\n/** The item list — `SelectPickerItem`, `ListboxPickerGroup`, `ListboxPickerSeparator`. React's `children`. */\ndefineSlots<{ default(): unknown }>();\n\nconst props = withDefaults(defineProps<SelectPickerContentProps>(), {\n isSearchable: false,\n searchPlaceholder: 'Search…',\n noResultsLabel: 'No results',\n matchWidth: false,\n});\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useSelectContext();\n\nconst hasItems = computed(() => ctx.items.length > 0);\n\nconst visibleCount = computed(() =>\n ctx.query ? ctx.items.filter((i) => i.text.toLowerCase().includes(ctx.query.toLowerCase())).length : ctx.items.length,\n);\n\nconst showEmpty = computed(() => hasItems.value && visibleCount.value === 0);\n\nconst listbox = useTemplateRef<ComponentPublicInstance & { el?: HTMLElement | null }>('listbox');\n\n/* Publishes the ListboxPicker's DOM node onto the context so the search input's keyboard bridge can\n re-dispatch nav keys onto it. React passed `ctx.listboxRef` straight in as a ref. */\nwatch(\n listbox,\n (instance) => {\n const node = (instance?.el ?? instance?.$el ?? null) as HTMLElement | null;\n ctx.listboxEl.value = node;\n },\n { immediate: true, flush: 'post' },\n);\n\n/* Bridges nav keys from the search input to the ListboxPicker by re-dispatching a bubbling\n KeyboardEvent onto the listbox node; printable chars stay in the input for filtering. The\n active-id change is mirrored back via the ListboxPicker's `active-change` after commit. */\nfunction handleSearchKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n /* Let the popover's DismissableLayer close + restore focus to the trigger. */\n return;\n }\n if (!ForwardedNavKeys.has(event.key)) return;\n const node = ctx.listboxEl.value;\n if (!node) return;\n event.preventDefault();\n node.dispatchEvent(new KeyboardEvent('keydown', { key: event.key, bubbles: true, cancelable: true }));\n}\n\nfunction onListboxValueChange(next: unknown): void {\n if (next === null || next === undefined) return;\n const entry = ctx.items.find((i) => ctx.keyEquals(i.itemKey, next));\n if (entry) ctx.onSelect(entry);\n}\n\nconst contentClass = computed(() =>\n cn(\n 'overflow-hidden',\n /* Truncate the option's first content child (the label) so trailing meta stays visible.\n Targets ListboxPickerItem's stable `data-listbox-item-content` wrapper rather than a deep\n `[role=option]>span.flex-1>:first-child` chain that breaks if the markup shifts. */\n props.matchWidth\n ? 'w-(--anchor-width) [&_[data-listbox-item-content]>:first-child]:truncate'\n : 'w-auto min-w-(--anchor-width)',\n ),\n);\n\nconst selectedForListbox = computed(() => ctx.selectedKey ?? undefined);\n</script>\n\n<template>\n <PopoverContent\n :variant=\"variant\"\n :tone=\"tone\"\n :radius=\"radius\"\n :padding=\"padding ?? 'none'\"\n :elevation=\"elevation\"\n :class=\"contentClass\"\n >\n <div v-if=\"isSearchable\" class=\"border-b border-border p-1\">\n <SearchInput\n size=\"sm\"\n autofocus\n role=\"combobox\"\n aria-expanded=\"true\"\n :aria-controls=\"ctx.listboxId\"\n :aria-activedescendant=\"ctx.activeDescendant ?? undefined\"\n aria-autocomplete=\"list\"\n :model-value=\"ctx.query\"\n :placeholder=\"searchPlaceholder\"\n is-clearable\n class=\"rounded-sm\"\n @update:model-value=\"ctx.setQuery($event)\"\n @keydown=\"handleSearchKeyDown\"\n @clear=\"ctx.setQuery('')\"\n />\n </div>\n <ListboxPicker\n ref=\"listbox\"\n :id=\"ctx.listboxId\"\n :model-value=\"selectedForListbox\"\n :is-equal=\"ctx.keyEquals\"\n variant=\"flat\"\n radius=\"none\"\n :tabindex=\"isSearchable ? -1 : 0\"\n @update:modelValue=\"onListboxValueChange\"\n @active-change=\"ctx.setActiveDescendant($event)\"\n >\n <!--\n In-list loading affordance — visible when options resolve asynchronously while the panel\n is open (e.g. a dependent re-fetch). Suppresses the no-results message so a mid-load\n empty set doesn't read as \"no results\".\n -->\n <div v-if=\"ctx.isLoading\" role=\"status\" class=\"flex items-center gap-2 px-2 py-2 text-sm text-subtle-foreground\">\n <LoaderIcon class=\"h-4 w-4 animate-spin\" />\n <span>{{ ctx.loadingLabel }}</span>\n </div>\n <slot />\n <ListboxPickerEmpty v-if=\"!ctx.isLoading && showEmpty\">{{ noResultsLabel }}</ListboxPickerEmpty>\n </ListboxPicker>\n </PopoverContent>\n</template>\n","<script lang=\"ts\">\n/**\n * Represents the prop surface of the `SelectPickerItem`.\n *\n * React's `<K, V = K>` generics are dropped: the exported interface has to live\n * in this plain `<script>` block (a `<script setup>`-only SFC trips\n * `no-unused-vars` on the house attrs idiom), and a block-level interface cannot\n * see a `generic=\"…\"` parameter. The root `SelectPicker` stays generic, so the\n * consumer-facing `modelValue` / `@update:modelValue` types are unaffected.\n */\nexport interface SelectPickerItemProps {\n /** The item key; drives equality, ARIA, and search. */\n readonly itemKey: unknown;\n\n /** Optional associated option data; selection updates emit only `itemKey`. */\n readonly value?: unknown;\n\n /** The label shown in the trigger when this item is selected, and the default search text. */\n readonly label: string | number;\n\n /** The searchable-text override; defaults to `label`. */\n readonly text?: string;\n\n /** The disabled state for this item. */\n readonly isDisabled?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, watch } from 'vue';\nimport ListboxPickerItem from '../listboxPicker/ListboxPickerItem.vue';\nimport { extractText, useSelectContext } from './SelectPickerContext';\n\n/** Renders one selectable option row, hidden while it misses the panel's search query. */\ndefineOptions({ name: 'SelectPickerItem', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<SelectPickerItemProps>(), {\n isDisabled: false,\n});\n\ndefineSlots<{\n /** The option's content, richer than the `label` prop it falls back to. */\n default?(): unknown;\n}>();\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useSelectContext();\n\nconst resolvedValue = computed(() => (props.value === undefined ? props.itemKey : props.value));\n\n/* Explicit `text` wins; otherwise the label's plain text. */\nconst itemText = computed(() => (props.text !== undefined ? props.text : extractText(props.label)));\n\nwatch(\n () => ({\n itemKey: props.itemKey,\n value: resolvedValue.value,\n label: props.label,\n text: itemText.value,\n isDisabled: props.isDisabled,\n }),\n (entry, previous) => {\n if (previous && !Object.is(previous.itemKey, entry.itemKey)) ctx.unregisterItem(previous.itemKey);\n ctx.registerItem(entry);\n },\n { immediate: true },\n);\nonBeforeUnmount(() => ctx.unregisterItem(props.itemKey));\n\nconst matchesQuery = computed(() => !ctx.query || itemText.value.toLowerCase().includes(ctx.query.toLowerCase()));\n</script>\n\n<template>\n <!-- ListboxPickerItem compares via the wired keyEquals — same equality math as SelectPicker. -->\n <ListboxPickerItem v-if=\"matchesQuery\" :value=\"itemKey\" :is-disabled=\"isDisabled\">\n <slot>{{ label }}</slot>\n </ListboxPickerItem>\n</template>\n","import { inject, type InjectionKey } from 'vue';\n\n/**\n * The seam between `MultiSelectPicker` and its `Trigger` / `Tags` / `Content` / `Item` children.\n *\n * React attached those as `MultiSelectPicker.Trigger` / `.Tags` / … statics over a `createContext`.\n * An SFC's generated default export cannot carry statics cleanly, so they ship as sibling\n * components and share state through provide/inject instead.\n *\n * Every field but the setters is a live getter — read them off the object, don't destructure.\n */\nexport interface MultiSelectPickerContextValue {\n readonly open: boolean;\n setOpen: (open: boolean) => void;\n readonly values: ReadonlyArray<string>;\n setValues: (values: ReadonlyArray<string>) => void;\n\n /**\n * The chip text per selected value.\n *\n * React registered each item's `children` (a `ReactNode`) here. It is `string | number`\n * in this port for the same reason `SelectPickerOption.label` is: a slot cannot be captured into\n * a plain registry, and the tag also feeds the remove button's accessible name. Rich rows\n * stay available through `<MultiSelectPickerItem>`'s default slot.\n */\n readonly labels: Record<string, string | number>;\n registerLabel: (value: string, label: string | number) => void;\n unregisterLabel: (value: string) => void;\n\n /**\n * Resolves a chip label for a value the registry has never seen — `null` when it cannot.\n *\n * Rows only register while the panel is mounted, so a preselected value has no registered\n * label until the dropdown has been opened once and the trigger shows the raw key. Same\n * gap `SelectPicker` closes with `getOptionLabel`; this is that escape hatch, and the registry\n * still wins where it has an entry.\n */\n getOptionLabel: (value: string) => string | number | null;\n\n readonly isDisabled: boolean;\n readonly name?: string;\n readonly isInvalid?: boolean;\n\n /** Form-control wiring inherited from a surrounding `<Field>` (undefined when standalone).\n * `labelId`/`describedBy` carry only ids of chrome that is actually rendered. */\n readonly fieldId?: string;\n readonly labelId?: string;\n readonly describedBy?: string;\n}\n\nexport const multiSelectContextKey: InjectionKey<MultiSelectPickerContextValue> = Symbol('wow-two.multiSelect');\n\n/** Reads the surrounding multi-select context; throws when used outside a `<MultiSelectPicker>`. */\nexport function useMultiSelectContext(): MultiSelectPickerContextValue {\n const ctx = inject(multiSelectContextKey, null);\n if (!ctx) throw new Error('MultiSelectPicker.* must be used inside <MultiSelectPicker>');\n return ctx;\n}\n","<script lang=\"ts\">\nimport type { Placement } from '@floating-ui/vue';\n\nexport interface MultiSelectPickerProps {\n /** The selected values, controlled. The `v-model` binding target. */\n readonly modelValue?: ReadonlyArray<string>;\n\n /** The initial selected values when uncontrolled. */\n readonly defaultValue?: ReadonlyArray<string>;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly isDisabled?: boolean;\n\n /** The hidden-input name; one hidden input is rendered per selected value. */\n readonly name?: string;\n\n /** The invalid surface override. Falls back to the surrounding form control's `isInvalid`. */\n readonly isInvalid?: boolean;\n\n /** The initial open state of the dropdown when uncontrolled. */\n readonly defaultOpen?: boolean;\n\n /** The dropdown open state, controlled. The `v-model:open` binding target. */\n readonly open?: boolean;\n\n /** The floating placement of the dropdown. */\n readonly placement?: Placement;\n\n /**\n * Resolves a chip label for a value whose row has not mounted yet — `null` when unknown.\n *\n * `MultiSelectPickerItem` registers its label only while the panel is open, so a preselected\n * value renders as its raw key until the first open. Supply this (or open the panel) to\n * label a closed trigger. The mirror of `SelectPicker`'s prop of the same name.\n */\n readonly getOptionLabel?: (value: string) => string | number | null;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useTemplateRef } from 'vue';\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, provide, ref } from 'vue';\nimport { useControlled } from '../../../foundation/state';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { Popover } from '../../overlays';\nimport { multiSelectContextKey, type MultiSelectPickerContextValue } from './MultiSelectPickerContext';\n\n/** Renders a many-choice dropdown — the popover hosting trigger and panel, plus one hidden input per value. */\ndefineOptions({ name: 'MultiSelectPicker', inheritAttrs: false });\n\n/** The MultiSelectPicker tree — trigger and content. React's `children`. */\ndefineSlots<{ default(): unknown }>();\n\nconst props = withDefaults(defineProps<MultiSelectPickerProps>(), {\n defaultOpen: false,\n placement: 'bottom',\n /* Explicit `undefined` defaults are load-bearing: `useControlled` keys on `=== undefined`,\n and Vue casts an absent `boolean` prop to `false`. Without these, `open` would\n read as \"controlled, and closed\" — pinning the dropdown shut and making `defaultOpen`\n dead — and `isDisabled`/`isInvalid` would shadow the surrounding `<Field>` context. */\n modelValue: undefined,\n open: undefined,\n isDisabled: undefined,\n isInvalid: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader adds or removes a selection — the `v-model` half, carrying the whole set. */\n 'update:modelValue': [values: ReadonlyArray<string>];\n /** Fires when the reader opens or dismisses the dropdown — the `v-model:open` half. */\n 'update:open': [open: boolean];\n}>();\n\n/* `field` is a live-getter object — read fields off it, never destructure. */\nconst field = useFormControl();\n\nconst finalDisabled = computed(() => props.isDisabled ?? field?.isDisabled ?? false);\nconst finalInvalid = computed(() => props.isInvalid ?? field?.isInvalid);\n\nconst openCtl = useControlled<boolean>({\n controlled: () => props.open,\n default: () => props.defaultOpen,\n onChange: (next) => {\n emit('update:open', next);\n },\n});\n\nconst valuesCtl = useControlled<ReadonlyArray<string>>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? [],\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst labels = ref<Record<string, string | number>>({});\n\nfunction registerLabel(value: string, label: string | number): void {\n if (labels.value[value] === label) return;\n labels.value = { ...labels.value, [value]: label };\n}\n\nfunction unregisterLabel(value: string): void {\n if (!(value in labels.value)) return;\n const next = { ...labels.value };\n delete next[value];\n labels.value = next;\n}\n\n/* Wrapped rather than passed through: the context field is non-optional, so consumers read\n one shape whether or not the prop was supplied. The `Fn` suffix is not cosmetic — a local\n named exactly like a declared prop trips `vue/no-dupe-keys`, which is why `SelectPicker` spells\n its own the same way. */\nfunction getOptionLabelFn(value: string): string | number | null {\n return props.getOptionLabel?.(value) ?? null;\n}\n\nprovide<MultiSelectPickerContextValue>(multiSelectContextKey, {\n get open() {\n return openCtl.value.value;\n },\n setOpen: openCtl.setValue,\n get values() {\n return valuesCtl.value.value;\n },\n setValues: valuesCtl.setValue,\n get labels() {\n return labels.value;\n },\n registerLabel,\n unregisterLabel,\n getOptionLabel: getOptionLabelFn,\n get isDisabled() {\n return finalDisabled.value;\n },\n get name() {\n return props.name;\n },\n get isInvalid() {\n return finalInvalid.value;\n },\n get fieldId() {\n return field?.id;\n },\n get labelId() {\n return field?.labelledBy;\n },\n get describedBy() {\n return field?.describedBy;\n },\n});\n\nconst isOpenNow = computed(() => openCtl.value.value);\nconst selected = computed(() => valuesCtl.value.value);\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n openCtl.reset();\n valuesCtl.reset();\n});\n</script>\n\n<template>\n <Popover\n :key=\"formResetRevision\"\n :open=\"isOpenNow\"\n :placement=\"placement\"\n :offset=\"6\"\n @update:open=\"openCtl.setValue\"\n >\n <slot />\n <!-- Always-rendered — inside PopoverContent they would vanish from form submission when closed. -->\n <template v-if=\"name\">\n <input v-for=\"v in selected\" :key=\"v\" type=\"hidden\" :name=\"name\" :value=\"v\" />\n </template>\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </Popover>\n</template>\n","<script lang=\"ts\">\nexport interface MultiSelectPickerTagsProps {\n /** The content shown when no values are selected. Fill the `placeholder` slot for richer content. */\n readonly placeholder?: string | number;\n\n /**\n * The number of chips rendered before the rest collapse into a `+N` block. Omit to render\n * every selection (the React original's only behaviour).\n *\n * A declarative budget rather than a measured fit: the trigger wraps by default, so a\n * measured overflow would never trigger, and measuring would put the chip strip behind a\n * `ResizeObserver` frame — invisible until the browser paints. Capping is deterministic,\n * renders identically on the server, and is the axis a caller actually wants to control.\n */\n readonly maxVisible?: number;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { X } from 'lucide-vue-next';\nimport { cn } from '../../../foundation/styles';\nimport { useMultiSelectContext } from './MultiSelectPickerContext';\n\n/** Renders the selections as removable chips inside the trigger, collapsing the tail past `maxVisible` into `+N`. */\ndefineOptions({ name: 'MultiSelectPickerTags' });\n\nconst props = defineProps<MultiSelectPickerTagsProps>();\n\ndefineSlots<{ placeholder?(): unknown }>();\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useMultiSelectContext();\n\nconst isCapped = computed(() => props.maxVisible !== undefined && ctx.values.length > props.maxVisible);\n\nconst visibleValues = computed(() => (isCapped.value ? ctx.values.slice(0, props.maxVisible) : ctx.values));\n\nconst overflowCount = computed(() => ctx.values.length - visibleValues.value.length);\n\n/* Capped: one line that clips, so the `+N` stays pinned at the end. Uncapped: the historical\n wrap, which grows the trigger (`h-auto min-h-10` there) instead of hiding anything. */\nconst stripClass = computed(() =>\n cn('flex min-w-0 flex-1 items-center gap-1', isCapped.value ? 'flex-nowrap overflow-hidden' : 'flex-wrap'),\n);\n\n/* Registry (rows currently mounted) → `getOptionLabel` (a value whose row has never mounted,\n which is every preselected one before the first open) → the raw value. */\nfunction tagLabel(value: string): string | number {\n return ctx.labels[value] ?? ctx.getOptionLabel(value) ?? value;\n}\n\n/* Matches React exactly: a non-string label (a numeric one) falls back to the raw value\n rather than being interpolated into the accessible name. */\nfunction removeLabel(value: string): string {\n const label = tagLabel(value);\n return `Remove ${typeof label === 'string' ? label : value}`;\n}\n\nfunction remove(value: string, event: MouseEvent): void {\n event.stopPropagation();\n ctx.setValues(ctx.values.filter((x) => x !== value));\n}\n\nconst CloseIcon = X;\n</script>\n\n<template>\n <!-- `muted-foreground` (not `subtle-foreground`): the trigger surface is muted, where\n subtle is only 4.2:1 (see index.css). -->\n <span v-if=\"ctx.values.length === 0\" class=\"text-muted-foreground\">\n <slot name=\"placeholder\">{{ placeholder }}</slot>\n </span>\n <span v-else :class=\"stripClass\">\n <!-- `border-border` is load-bearing, not decoration: `bg-muted` resolves to the same\n color as the trigger's `bg-popover` in several shipped themes (smart-qr among\n them), and a chip with no edge reads as a bare trigger. -->\n <span\n v-for=\"v in visibleValues\"\n :key=\"v\"\n class=\"inline-flex max-w-full shrink-0 items-center gap-1 truncate rounded-sm border border-border bg-muted px-1.5 py-0.5 text-xs\"\n >\n {{ tagLabel(v) }}\n <span\n v-if=\"!ctx.isDisabled\"\n role=\"button\"\n :tabindex=\"-1\"\n :aria-label=\"removeLabel(v)\"\n class=\"cursor-pointer rounded-sm p-0.5 hover:bg-border\"\n @click=\"remove(v, $event)\"\n @pointerdown.stop\n >\n <CloseIcon class=\"h-3 w-3\" />\n </span>\n </span>\n\n <!-- Deliberately NOT chip-shaped: no radius, no fill, no remove control. A `+N` that\n borrows the chip's surface reads as one more removable selection; the rule and the\n bare count read as the summary it is. -->\n <span v-if=\"overflowCount > 0\" class=\"ml-0.5 flex shrink-0 items-center gap-1.5\">\n <span aria-hidden=\"true\" class=\"h-4 w-px shrink-0 bg-border\" />\n <span class=\"text-xs font-medium tabular-nums text-muted-foreground\"> +{{ overflowCount }} </span>\n </span>\n </span>\n</template>\n","<script lang=\"ts\">\nimport type { InputState } from '../InputStyles';\nimport type { SelectPickerSize } from '../selectPicker/SelectPicker.variants';\n\nexport interface MultiSelectPickerTriggerProps {\n /** The trigger size. */\n readonly size?: SelectPickerSize;\n\n /** The validity surface. */\n readonly state?: InputState;\n\n /**\n * The chip budget handed to the default `<MultiSelectPickerTags />` — past it the rest collapse\n * into a `+N` block. Ignored when the trigger's default slot is filled.\n */\n readonly maxVisibleTags?: number;\n}\n/* React also inherited `Omit<SelectPickerTriggerVariants, 'size' | 'state'>` — the `border` / `ring`\n axes — but never forwarded them to `selectTriggerVariants`, so they were dead props that\n landed on the DOM as unknown attributes. Only the two axes the original consumed are here. */\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { ChevronDown } from 'lucide-vue-next';\nimport { AriaAttribute } from '../../../foundation/dom';\nimport { cn } from '../../../foundation/styles';\nimport { PopoverTrigger } from '../../overlays';\nimport { InputState as InputStateValue } from '../InputStyles';\nimport { selectTriggerVariants } from '../selectPicker/SelectPicker.variants';\nimport { useMultiSelectContext } from './MultiSelectPickerContext';\nimport MultiSelectPickerTags from './MultiSelectPickerTags.vue';\n\n/** Renders the button that opens the dropdown, showing the selected chips and a chevron; Backspace drops the last. */\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call, and so the rest\n of the attrs land on the inner `<button>`. */\ndefineOptions({ name: 'MultiSelectPickerTrigger', inheritAttrs: false });\n\n/** The trigger content — defaults to `<MultiSelectPickerTags />`. React's `children`. */\ndefineSlots<{ default?(): unknown }>();\n\nconst props = defineProps<MultiSelectPickerTriggerProps>();\n\nconst attrs = useAttrs();\nconst slots = useSlots();\nconst root = useTemplateRef<HTMLButtonElement>('root');\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useMultiSelectContext();\n\n/* `aria-label` is read off `attrs`, never declared: a declared `'aria-label'` prop arrives as\n `props.ariaLabel`, so `props['aria-label']` is always undefined and no accessible name\n renders. Left in the fallthrough set, it also still lands on the button. */\nconst ariaLabel = computed(() => attrs[AriaAttribute.Label] as string | undefined);\n\nconst triggerState = computed(() => props.state ?? (ctx.isInvalid ? InputStateValue.Invalid : InputStateValue.Default));\n\n/* Names the trigger from the Field label when present; an explicit aria-label always wins. */\nconst labelledBy = computed(() => (!ariaLabel.value ? ctx.labelId : undefined));\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.isComposing) return;\n /* Runs after any caller-supplied `@keydown` (declared after `v-bind`), exactly as React's\n `onKeyDown?.(e)` ran before this body. */\n if (event.defaultPrevented) return;\n if (event.key === 'Backspace' && ctx.values.length > 0) {\n ctx.setValues(ctx.values.slice(0, -1));\n }\n}\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst buttonClass = computed(() =>\n cn(\n selectTriggerVariants({ size: props.size, state: triggerState.value }),\n 'h-auto min-h-10 flex-wrap py-1.5',\n attrs.class as ClassValue,\n ),\n);\n\n/* Chevron rotate kept; gated motion-safe so reduced-motion users get an instant flip, not a\n tween. Panel pop-in/out is owned by PopoverContent (Presence + --animate-pop-*). */\nconst chevronClass = computed(() =>\n cn('h-4 w-4 shrink-0 self-center text-muted-foreground motion-safe:transition-transform', ctx.open && 'rotate-180'),\n);\n\nconst hasContent = computed(() => Boolean(slots.default));\n\nconst ChevronDownIcon = ChevronDown;\n\n/** The rendered `<button>` — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: root });\n</script>\n\n<template>\n <PopoverTrigger as-child>\n <button\n ref=\"root\"\n type=\"button\"\n :id=\"ctx.fieldId\"\n :disabled=\"ctx.isDisabled\"\n :aria-invalid=\"triggerState === 'invalid' || undefined\"\n :aria-labelledby=\"labelledBy\"\n :aria-describedby=\"ctx.describedBy\"\n :class=\"buttonClass\"\n v-bind=\"passthroughAttrs\"\n @keydown=\"onKeydown\"\n >\n <slot v-if=\"hasContent\" />\n <MultiSelectPickerTags v-else :max-visible=\"maxVisibleTags\" />\n <ChevronDownIcon :class=\"chevronClass\" />\n </button>\n </PopoverTrigger>\n</template>\n","<script lang=\"ts\">\nimport type {\n SurfaceElevation,\n SurfacePadding,\n SurfaceRadius,\n SurfaceTone,\n SurfaceVariant,\n} from '../../../foundation/styles';\n\n/**\n * Represents the prop surface of `MultiSelectPickerContent`.\n *\n * React declared the surface axes by `extends SurfaceLayoutVariants`; they are spelled out here\n * because the SFC compiler's type resolver cannot follow a `VariantProps<typeof …>` base and\n * fails the build on it. The aliases below are the canonical ones from `foundation/styles`,\n * already locked against the `surfaceVariants` config there, so the two cannot drift.\n */\nexport interface MultiSelectPickerContentProps {\n /** The visual recipe. */\n readonly variant?: SurfaceVariant;\n\n /** The color tone the recipe is tinted with. */\n readonly tone?: SurfaceTone;\n\n /** The corner rounding. */\n readonly radius?: SurfaceRadius;\n\n /** The inner spacing step. Defaults to `none`. */\n readonly padding?: SurfacePadding;\n\n /** The shadow depth. */\n readonly elevation?: SurfaceElevation;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn } from '../../../foundation/styles';\nimport { PopoverContent } from '../../overlays';\nimport { ListboxPicker } from '../listboxPicker';\nimport { useMultiSelectContext } from './MultiSelectPickerContext';\n\n/** Renders the floating panel below the trigger, hosting the rows as a multi-selection listbox. */\ndefineOptions({ name: 'MultiSelectPickerContent', inheritAttrs: false });\n\n/** The `MultiSelectPickerItem` rows — React's required `children`. */\ndefineSlots<{ default(): unknown }>();\n\nconst props = defineProps<MultiSelectPickerContentProps>();\n\nconst attrs = useAttrs();\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useMultiSelectContext();\n\nconst resolvedPadding = computed(() => props.padding ?? 'none');\n\nconst panelClass = computed(() => cn('w-auto min-w-[var(--anchor-width)] overflow-hidden', attrs.class as ClassValue));\n\nconst selected = computed(() => ctx.values);\n\nfunction onValueChange(next: unknown): void {\n ctx.setValues(next as ReadonlyArray<string>);\n}\n</script>\n\n<template>\n <PopoverContent\n :variant=\"variant\"\n :tone=\"tone\"\n :radius=\"radius\"\n :padding=\"resolvedPadding\"\n :elevation=\"elevation\"\n :class=\"panelClass\"\n >\n <ListboxPicker is-multiple :model-value=\"selected\" variant=\"flat\" radius=\"none\" @update:modelValue=\"onValueChange\">\n <slot />\n </ListboxPicker>\n </PopoverContent>\n</template>\n","<script lang=\"ts\">\nexport interface MultiSelectPickerItemProps {\n /** The value this row contributes to the selection. */\n readonly value: string;\n\n /** The disabled state for this row. */\n readonly isDisabled?: boolean;\n\n /**\n * The chip text registered for the trigger. Defaults to `value`.\n *\n * React registered the row's `children` (a `ReactNode`); a slot cannot be captured into\n * the label registry, so the scalar lives here and the default slot renders the row.\n */\n readonly label?: string | number;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useTemplateRef, watch } from 'vue';\nimport { ListboxPickerItem } from '../listboxPicker';\nimport { useMultiSelectContext } from './MultiSelectPickerContext';\n\n/** Renders one togglable row of the panel, and registers the chip text the trigger shows for it. */\ndefineOptions({ name: 'MultiSelectPickerItem', inheritAttrs: false });\n\n/** The row content — React's required `children`. */\ndefineSlots<{ default(): unknown }>();\n\nconst props = withDefaults(defineProps<MultiSelectPickerItemProps>(), { isDisabled: false });\n\nconst el = useTemplateRef<InstanceType<typeof ListboxPickerItem>>('el');\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useMultiSelectContext();\n\nconst registeredLabel = computed<string | number>(() => props.label ?? props.value);\n\n/* Registers only — never unregisters; items unmount on popover close and the tags still\n need the labels. `immediate` because the first registration has to happen on mount, and\n nothing in this watcher touches the DOM. */\nwatch([() => props.value, registeredLabel], ([value, label]) => ctx.registerLabel(value, label), { immediate: true });\n</script>\n\n<template>\n <ListboxPickerItem ref=\"el\" :value=\"value\" :is-disabled=\"isDisabled\">\n <slot />\n </ListboxPickerItem>\n</template>\n","import { inject, type InjectionKey, type ShallowRef } from 'vue';\n\n/** Represents one registered option in the combobox list. */\nexport interface ComboboxPickerItemEntry {\n id: string;\n value: string;\n isDisabled: boolean;\n /**\n * The plain-text label.\n *\n * React registered the item's `children` (a `ReactNode`) and narrowed it with a\n * `typeof === 'string'` check before filling the input. A slot cannot be captured into a\n * registry, so this is `string | number` — the same call `SelectPickerOption.label` makes. Rich\n * rows stay available through `<ComboboxPickerItem>`'s default slot.\n */\n label: string | number;\n}\n\n/**\n * The seam between `ComboboxPicker` and its `Input` / `Content` / `Item` children.\n *\n * React attached those as `ComboboxPicker.Input` / `.Content` / … statics over a `createContext`.\n * An SFC's generated default export cannot carry statics cleanly, so they ship as sibling\n * components and share state through provide/inject instead.\n *\n * Every field but the functions and the element refs is a live getter — read them off the\n * object, don't destructure.\n */\nexport interface ComboboxPickerContextValue {\n readonly open: boolean;\n setOpen: (open: boolean) => void;\n readonly value: string;\n setValue: (value: string) => void;\n readonly inputValue: string;\n setInputValue: (input: string) => void;\n readonly activeId: string | null;\n setActiveId: (id: string | null) => void;\n registerItem: (entry: ComboboxPickerItemEntry) => void;\n unregisterItem: (id: string) => void;\n /** The registered options in mount order. Reactive, unlike React's `useRef` array. */\n readonly items: ReadonlyArray<ComboboxPickerItemEntry>;\n /** Holds the DOM node of the text input — the panel anchors and sizes off it. */\n inputEl: ShallowRef<HTMLInputElement | null>;\n /** Holds the DOM node of the panel — the input's blur check tests containment against it. */\n contentEl: ShallowRef<HTMLElement | null>;\n readonly listboxId: string;\n readonly isDisabled: boolean;\n readonly isInvalid?: boolean;\n selectItem: (entry: ComboboxPickerItemEntry, options?: { close?: boolean }) => void;\n}\n\nexport const comboboxContextKey: InjectionKey<ComboboxPickerContextValue> = Symbol('wow-two.combobox');\n\n/** Reads the surrounding combobox context; throws when used outside a `<ComboboxPicker>`. */\nexport function useComboboxContext(): ComboboxPickerContextValue {\n const ctx = inject(comboboxContextKey, null);\n if (!ctx) throw new Error('ComboboxPicker.* must be used inside <ComboboxPicker>');\n return ctx;\n}\n","<script lang=\"ts\">\nexport interface ComboboxPickerProps {\n /** The selected value, controlled. The `v-model` binding target. */\n readonly modelValue?: string;\n\n /** The initial selected value when uncontrolled. */\n readonly defaultValue?: string;\n\n /** The typed text, controlled. The `v-model:input-value` binding target. */\n readonly inputValue?: string;\n\n /** The initial typed text when uncontrolled. */\n readonly defaultInputValue?: string;\n\n /** The disabled state. Default `false`. */\n readonly isDisabled?: boolean;\n\n /** The invalid surface flag handed to `ComboboxPickerInput`. */\n readonly isInvalid?: boolean;\n\n /** The hidden input name; the hidden input emits the selected value. */\n readonly name?: string;\n\n /** The initial open state of the panel when uncontrolled. */\n readonly defaultOpen?: boolean;\n\n /** The panel open state, controlled. The `v-model:open` binding target. */\n readonly open?: boolean;\n\n /** The fill-on-select behavior — when the user picks an item, set the input value to its label. Default true. */\n readonly fillInputOnSelect?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useTemplateRef } from 'vue';\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, provide, ref, shallowRef } from 'vue';\nimport { useControlled } from '../../../foundation/state';\nimport { useId } from '../../../foundation/identifiers';\nimport {\n comboboxContextKey,\n type ComboboxPickerContextValue,\n type ComboboxPickerItemEntry,\n} from './ComboboxPickerContext';\n\n/** Renders a type-to-filter picker — the input and panel children, plus the hidden input carrying the value. */\ndefineOptions({ name: 'ComboboxPicker', inheritAttrs: false });\n\n/** The ComboboxPicker tree — `ComboboxPickerInput` and `ComboboxPickerContent`. React's `children`. */\ndefineSlots<{ default(): unknown }>();\n\nconst props = withDefaults(defineProps<ComboboxPickerProps>(), {\n isDisabled: false,\n defaultOpen: false,\n fillInputOnSelect: true,\n /* Explicit `undefined` defaults are load-bearing: `useControlled` keys on `=== undefined`,\n and Vue casts an absent `boolean` prop to `false` — without these, `open` would\n read as \"controlled, and closed\", pinning the panel shut and making `defaultOpen` dead. */\n modelValue: undefined,\n inputValue: undefined,\n open: undefined,\n isInvalid: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader commits an option by click or Enter — the `v-model` half. */\n 'update:modelValue': [value: string];\n /** Fires when the reader types in the box, or a pick refills it — the `v-model:input-value` half. */\n 'update:inputValue': [input: string];\n /** Fires when the reader opens or dismisses the option panel — the `v-model:open` half. */\n 'update:open': [open: boolean];\n}>();\n\nconst openCtl = useControlled<boolean>({\n controlled: () => props.open,\n default: () => props.defaultOpen,\n onChange: (next) => {\n emit('update:open', next);\n },\n});\n\nconst valueCtl = useControlled<string>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? '',\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst inputCtl = useControlled<string>({\n controlled: () => props.inputValue,\n default: () => props.defaultInputValue ?? '',\n onChange: (next) => {\n emit('update:inputValue', next);\n },\n});\n\n/* Reactive, unlike React's `useRef` array: `ComboboxPickerContent` re-clamps the active id off this\n set whenever an item registers or unregisters (filtering), which a plain ref never triggered. */\nconst items = ref<Array<ComboboxPickerItemEntry>>([]);\nconst activeId = ref<string | null>(null);\nconst inputEl = shallowRef<HTMLInputElement | null>(null);\nconst contentEl = shallowRef<HTMLElement | null>(null);\nconst listboxId = useId('combobox-listbox');\n\nfunction registerItem(entry: ComboboxPickerItemEntry): void {\n const idx = items.value.findIndex((i) => i.id === entry.id);\n if (idx >= 0) {\n const existing = items.value[idx];\n if (\n existing &&\n existing.value === entry.value &&\n existing.label === entry.label &&\n existing.isDisabled === entry.isDisabled\n ) {\n return;\n }\n const next = items.value.slice();\n next[idx] = entry;\n items.value = next;\n return;\n }\n items.value = [...items.value, entry];\n}\n\nfunction unregisterItem(id: string): void {\n const idx = items.value.findIndex((i) => i.id === id);\n if (idx === -1) return;\n const next = items.value.slice();\n next.splice(idx, 1);\n items.value = next;\n}\n\nfunction selectItem(entry: ComboboxPickerItemEntry, options?: { close?: boolean }): void {\n valueCtl.setValue(entry.value);\n if (props.fillInputOnSelect) {\n const text = typeof entry.label === 'string' ? entry.label : entry.value;\n inputCtl.setValue(text);\n }\n if (options?.close ?? true) openCtl.setValue(false);\n}\n\nprovide<ComboboxPickerContextValue>(comboboxContextKey, {\n get open() {\n return openCtl.value.value;\n },\n setOpen: openCtl.setValue,\n get value() {\n return valueCtl.value.value;\n },\n setValue: valueCtl.setValue,\n get inputValue() {\n return inputCtl.value.value;\n },\n setInputValue: inputCtl.setValue,\n get activeId() {\n return activeId.value;\n },\n setActiveId: (id) => {\n activeId.value = id;\n },\n registerItem,\n unregisterItem,\n get items() {\n return items.value;\n },\n inputEl,\n contentEl,\n get listboxId() {\n return listboxId;\n },\n get isDisabled() {\n return props.isDisabled;\n },\n get isInvalid() {\n return props.isInvalid;\n },\n selectItem,\n});\n\nconst selected = computed(() => valueCtl.value.value);\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n openCtl.reset();\n valueCtl.reset();\n inputCtl.reset();\n});\n</script>\n\n<template>\n <slot :key=\"formResetRevision\" />\n <input v-if=\"name\" type=\"hidden\" :name=\"name\" :value=\"selected\" />\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n</template>\n","<script lang=\"ts\">\nimport type { InputSize, InputState } from '../InputStyles';\n\nexport interface ComboboxPickerInputProps {\n /** The control size. */\n readonly size?: InputSize;\n\n /** The validity surface. */\n readonly state?: InputState;\n}\n/* React also inherited `Omit<InputBaseVariants, 'size' | 'state'>` — the `border` / `ring`\n axes — but never forwarded them to `inputBaseVariants`, so they were dead props that landed\n on the DOM as unknown attributes. Only the two axes the original consumed are declared here. */\n</script>\n\n<script setup lang=\"ts\">\nimport { DomOrderExtensions } from '../../../foundation/dom';\nimport { computed, useAttrs } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn } from '../../../foundation/styles';\nimport { inputBaseVariants, InputState as InputStateValue } from '../InputStyles';\nimport { useComboboxContext } from './ComboboxPickerContext';\n\n/** Renders the text box driving the combobox — it opens the panel, filters rows, and owns arrow-key nav. */\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call. */\ndefineOptions({ name: 'ComboboxPickerInput', inheritAttrs: false });\n\nconst props = defineProps<ComboboxPickerInputProps>();\n\nconst attrs = useAttrs();\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useComboboxContext();\n\nconst inputState = computed(() => props.state ?? (ctx.isInvalid ? InputStateValue.Invalid : InputStateValue.Default));\n\nfunction setRef(node: unknown): void {\n ctx.inputEl.value = (node ?? null) as HTMLInputElement | null;\n}\n\n/* `document` is reached only from a keydown handler, which cannot fire during SSR. */\nfunction setActiveAndScroll(id: string): void {\n ctx.setActiveId(id);\n ctx.inputEl.value?.ownerDocument.getElementById(id)?.scrollIntoView({ block: 'nearest' });\n}\n\nfunction enabledItems() {\n return DomOrderExtensions.inDocumentOrder(\n ctx.items.filter((item) => !item.isDisabled),\n (item) => ctx.inputEl.value?.ownerDocument.getElementById(item.id),\n );\n}\n\nfunction moveActive(direction: 1 | -1): void {\n const list = enabledItems();\n if (list.length === 0) return;\n const idx = list.findIndex((i) => i.id === ctx.activeId);\n let nextIdx = idx + direction;\n if (idx === -1) nextIdx = direction === 1 ? 0 : list.length - 1;\n if (nextIdx < 0) nextIdx = list.length - 1;\n if (nextIdx >= list.length) nextIdx = 0;\n const next = list[nextIdx];\n if (next) setActiveAndScroll(next.id);\n}\n\n/* Runs after any caller-supplied `@keydown` (declared after `v-bind`), exactly as React's\n `onKeyDown?.(e)` ran before this body. */\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.isComposing) return;\n if (event.defaultPrevented || ctx.isDisabled) return;\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n if (!ctx.open) ctx.setOpen(true);\n else moveActive(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (!ctx.open) ctx.setOpen(true);\n else moveActive(-1);\n break;\n case 'Home':\n if (ctx.open) {\n event.preventDefault();\n const first = enabledItems()[0];\n if (first) setActiveAndScroll(first.id);\n }\n break;\n case 'End':\n if (ctx.open) {\n event.preventDefault();\n const list = enabledItems();\n const last = list[list.length - 1];\n if (last) setActiveAndScroll(last.id);\n }\n break;\n case 'Tab':\n /* Lets focus move on — DismissableLayer only closes on pointer/Escape. */\n if (ctx.open) ctx.setOpen(false);\n break;\n case 'Enter': {\n if (!ctx.open || !ctx.activeId) return;\n const entry = ctx.items.find((i) => i.id === ctx.activeId);\n if (!entry || entry.isDisabled) return;\n event.preventDefault();\n ctx.selectItem(entry);\n break;\n }\n case 'Escape':\n if (ctx.open) {\n event.preventDefault();\n ctx.setOpen(false);\n } else if (ctx.inputValue) {\n event.preventDefault();\n ctx.setInputValue('');\n ctx.setValue('');\n }\n break;\n }\n}\n\nfunction onInput(event: Event): void {\n if ((event as InputEvent).isComposing) return;\n ctx.setInputValue((event.target as HTMLInputElement).value);\n if (!ctx.open) ctx.setOpen(true);\n // Clear active when input changes — re-seeded by ComboboxPickerContent's clamp.\n ctx.setActiveId(null);\n}\n\nfunction onFocus(): void {\n if (!ctx.open) ctx.setOpen(true);\n}\n\nfunction onBlur(event: FocusEvent): void {\n /* `relatedTarget === null` = pointer interaction — DismissableLayer owns that path. */\n const next = event.relatedTarget as Node | null;\n if (!next || !ctx.open) return;\n if (ctx.inputEl.value?.contains(next)) return;\n if (ctx.contentEl.value?.contains(next)) return;\n ctx.setOpen(false);\n}\n\n/* Only while open — options unmount on close but `activeId` state survives, and a dangling id\n is an axe aria-valid-attr-value hit. */\nconst activeDescendant = computed(() => (ctx.open ? (ctx.activeId ?? undefined) : undefined));\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst inputClass = computed(() =>\n cn(inputBaseVariants({ size: props.size, state: inputState.value }), attrs.class as ClassValue),\n);\n\n/** The rendered `<input>` — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: ctx.inputEl });\n</script>\n\n<template>\n <input\n :ref=\"setRef\"\n type=\"text\"\n role=\"combobox\"\n :aria-expanded=\"ctx.open\"\n :aria-controls=\"ctx.listboxId\"\n :aria-activedescendant=\"activeDescendant\"\n aria-autocomplete=\"list\"\n :aria-disabled=\"ctx.isDisabled || undefined\"\n :disabled=\"ctx.isDisabled\"\n :value=\"ctx.inputValue\"\n :class=\"inputClass\"\n v-bind=\"passthroughAttrs\"\n @input=\"onInput\"\n @compositionend=\"onInput\"\n @focus=\"onFocus\"\n @blur=\"onBlur\"\n @keydown=\"onKeydown\"\n />\n</template>\n","<script lang=\"ts\">\nimport type { Placement } from '@floating-ui/vue';\nimport type {\n SurfaceElevation,\n SurfacePadding,\n SurfaceRadius,\n SurfaceTone,\n SurfaceVariant,\n} from '../../../foundation/styles';\n\n/**\n * Represents the prop surface of `ComboboxPickerContent`.\n *\n * React declared the surface axes by `extends SurfaceLayoutVariants`; they are spelled out here\n * because the SFC compiler's type resolver cannot follow a `VariantProps<typeof …>` base and\n * fails the build on it. The aliases below are the canonical ones from `foundation/styles`,\n * already locked against the `surfaceVariants` config there, so the two cannot drift.\n */\nexport interface ComboboxPickerContentProps {\n /** The floating placement of the panel. */\n readonly placement?: Placement;\n\n /** The gap between the input and the panel, in px. */\n readonly offset?: number;\n\n /** The visual recipe. */\n readonly variant?: SurfaceVariant;\n\n /** The color tone the recipe is tinted with. */\n readonly tone?: SurfaceTone;\n\n /** The corner rounding. */\n readonly radius?: SurfaceRadius;\n\n /** The inner spacing step. Defaults to `xs` (p-1), so items breathe — same as ListboxPicker. */\n readonly padding?: SurfacePadding;\n\n /** The shadow depth. */\n readonly elevation?: SurfaceElevation;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref, useAttrs, watch } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn, surfaceVariants } from '../../../foundation/styles';\nimport { AnchoredPositioner, DismissableLayer, Portal, Presence } from '../../../foundation/primitives';\nimport { listboxVariants } from '../listboxPicker/ListboxPicker.variants';\nimport { useComboboxContext } from './ComboboxPickerContext';\n\n/** Renders the option rows in a portalled panel anchored under the input, dismissed on Escape or outside click. */\ndefineOptions({ name: 'ComboboxPickerContent', inheritAttrs: false });\n\n/** The `ComboboxPickerItem` rows — React's required `children`. */\ndefineSlots<{ default(): unknown }>();\n\nconst props = withDefaults(defineProps<ComboboxPickerContentProps>(), {\n placement: 'bottom',\n offset: 6,\n});\n\nconst attrs = useAttrs();\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useComboboxContext();\n\n/**\n * Keeps `activeId` pointing at a visible, enabled option.\n *\n * React split this across two effects — this one clamped a stale id after filtering, and every\n * `ComboboxPickerItem` seeded the first option when the id was null. Both collapse here: the item\n * registry is reactive, so one watcher on it covers register, unregister and the null case,\n * instead of N duplicate per-item watchers.\n */\nwatch(\n [() => ctx.open, () => ctx.items, () => ctx.activeId],\n ([open, items, activeId]) => {\n if (!open) return;\n const list = items.filter((i) => !i.isDisabled);\n if (!activeId) {\n if (list[0]) ctx.setActiveId(list[0].id);\n return;\n }\n if (!list.some((i) => i.id === activeId)) ctx.setActiveId(list[0]?.id ?? null);\n },\n { flush: 'post' },\n);\n\nfunction setRef(node: unknown): void {\n ctx.contentEl.value = ((node as { $el?: HTMLElement } | null)?.$el ?? node ?? null) as HTMLElement | null;\n}\n\n/**\n * The panel's min-width, matched to the input.\n *\n * React read `offsetWidth` inline during render. It is captured in a NON-immediate post-flush\n * watcher here: an immediate one would run during SSR, where there is no element to measure.\n */\nconst minWidth = ref<number | undefined>(undefined);\nwatch(\n () => ctx.open,\n (open) => {\n minWidth.value = open ? ctx.inputEl.value?.offsetWidth : undefined;\n },\n { flush: 'post' },\n);\n\nconst isOpen = computed(() => ctx.open);\nconst anchor = computed(() => ctx.inputEl.value);\nconst panelStyle = computed(() => (minWidth.value != null ? { minWidth: `${minWidth.value}px` } : undefined));\n\n/* Default to `xs` (p-1) so items breathe — same as ListboxPicker. */\nconst resolvedPadding = computed(() => props.padding ?? 'xs');\n\nfunction onEscape(): void {\n ctx.setOpen(false);\n}\n\nfunction onOutsidePointerDown(event: PointerEvent): void {\n if (ctx.inputEl.value?.contains(event.target as Node)) return;\n ctx.setOpen(false);\n}\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst panelClass = computed(() =>\n cn(\n /* pop (fade+scale) gated on the portal-root data-state + motion-safe\n so reduced-motion users get no movement. */\n 'motion-safe:group-data-[state=open]:animate-(--animate-pop-in)',\n 'motion-safe:group-data-[state=closed]:animate-(--animate-pop-out) motion-reduce:animate-none',\n surfaceVariants({\n variant: props.variant,\n tone: props.tone,\n radius: props.radius,\n padding: resolvedPadding.value,\n elevation: props.elevation,\n }),\n listboxVariants(),\n attrs.class as ClassValue,\n ),\n);\n</script>\n\n<template>\n <!--\n React portalled from *inside* the Presence-cloned root; Vue resolves a cloned `ref` through\n `$el` and a Teleport has no element, so `Portal` is hoisted and the `contents` root stays\n the Presence node — which is what carries `data-state` for the panel's `group-data-[state=*]`\n pop. Same shape as `PopoverContent`.\n -->\n <Portal>\n <Presence :is-present=\"isOpen\">\n <div class=\"group contents\">\n <AnchoredPositioner :anchor=\"anchor\" :placement=\"placement\" :offset=\"offset\" class=\"z-dropdown\">\n <DismissableLayer\n :ref=\"setRef\"\n :on-escape=\"onEscape\"\n :on-outside-pointer-down=\"onOutsidePointerDown\"\n :id=\"ctx.listboxId\"\n role=\"listbox\"\n :style=\"panelStyle\"\n v-bind=\"passthroughAttrs\"\n :class=\"panelClass\"\n >\n <slot />\n </DismissableLayer>\n </AnchoredPositioner>\n </div>\n </Presence>\n </Portal>\n</template>\n","<script lang=\"ts\">\nexport interface ComboboxPickerItemProps {\n /** The value this option selects. */\n readonly value: string;\n\n /** The disabled state for this option. Default `false`. */\n readonly isDisabled?: boolean;\n\n /**\n * The plain-text label registered for the input's fill-on-select. Defaults to `value`.\n *\n * React registered the row's `children` (a `ReactNode`) and narrowed it with a\n * `typeof === 'string'` check; a slot cannot be captured into the registry, so the scalar\n * lives here and the default slot renders the row.\n */\n readonly label?: string | number;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, useAttrs, useTemplateRef, watch } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { Check } from 'lucide-vue-next';\nimport { cn } from '../../../foundation/styles';\nimport { useId } from '../../../foundation/identifiers';\nimport { listboxItemVariants, ListboxPickerItemState } from '../listboxPicker/ListboxPicker.variants';\nimport { useComboboxContext, type ComboboxPickerItemEntry } from './ComboboxPickerContext';\n\n/** Renders one selectable option row with a tick when selected, registering itself for keyboard nav. */\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call. */\ndefineOptions({ name: 'ComboboxPickerItem', inheritAttrs: false });\n\n/** The row content — React's required `children`. */\ndefineSlots<{ default(): unknown }>();\n\nconst props = withDefaults(defineProps<ComboboxPickerItemProps>(), { isDisabled: false });\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useComboboxContext();\n\nconst id = useId('combobox-item');\n\nconst entry = computed<ComboboxPickerItemEntry>(() => ({\n id,\n value: props.value,\n isDisabled: props.isDisabled,\n label: props.label ?? props.value,\n}));\n\n/* `immediate` so the option is in the registry from mount — nothing here touches the DOM, so\n it is safe during SSR. Seeding the first active id lives in `ComboboxPickerContent`, which watches\n the registry once instead of every item doing it. */\nwatch(entry, (next) => ctx.registerItem(next), { immediate: true });\nonBeforeUnmount(() => ctx.unregisterItem(id));\n\nconst isSelected = computed(() => ctx.value === props.value);\nconst isActive = computed(() => ctx.activeId === id);\n\nconst state = computed(() => {\n if (props.isDisabled) return ListboxPickerItemState.Disabled;\n if (isSelected.value) return ListboxPickerItemState.Selected;\n return isActive.value ? ListboxPickerItemState.Active : ListboxPickerItemState.Default;\n});\n\n/* Runs after any caller-supplied `@click` (declared after `v-bind`), exactly as React's\n `onClick?.(e)` ran before this body. */\nfunction onClick(event: MouseEvent): void {\n if (event.defaultPrevented || props.isDisabled) return;\n ctx.selectItem(entry.value);\n}\n\nfunction onPointerenter(): void {\n if (!props.isDisabled) ctx.setActiveId(id);\n}\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rowClass = computed(() => cn(listboxItemVariants({ state: state.value }), attrs.class as ClassValue));\n\nconst CheckIcon = Check;\n\n/** The rendered row `<div>` — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el });\n</script>\n\n<template>\n <div\n ref=\"el\"\n :id=\"id\"\n role=\"option\"\n :aria-selected=\"isSelected\"\n :aria-disabled=\"isDisabled || undefined\"\n :data-active=\"isActive ? '' : undefined\"\n :data-selected=\"isSelected ? '' : undefined\"\n :class=\"rowClass\"\n v-bind=\"passthroughAttrs\"\n @click=\"onClick\"\n @pointerenter=\"onPointerenter\"\n >\n <span class=\"flex-1\"><slot /></span>\n <CheckIcon v-if=\"isSelected\" class=\"h-4 w-4 opacity-80\" />\n </div>\n</template>\n","<script lang=\"ts\">\nexport interface ComboboxPickerGroupProps {\n /**\n * The optional group heading rendered above the contained items. Fill the\n * `label` slot instead for richer content; the prop stays the discriminator.\n */\n readonly label?: string | number;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useSlots } from 'vue';\nimport { useId } from '../../../foundation/identifiers';\nimport { listboxGroupLabelVariants } from '../listboxPicker/ListboxPicker.variants';\n\n/** Renders a heading above a subset of options and wires it as that group's accessible name. */\n/* `inheritAttrs` stays ON: React put `className` straight onto the group div with no `cn()`\n merge of its own, so plain fallthrough reproduces it exactly. */\ndefineOptions({ name: 'ComboboxPickerGroup' });\n\nconst props = defineProps<ComboboxPickerGroupProps>();\n\ndefineSlots<{\n /** The options this group heads. */\n default(): unknown;\n /** The heading content, richer than the `label` prop can carry. */\n label?(): unknown;\n}>();\n\nconst slots = useSlots();\nconst labelId = useId();\n\nconst hasLabel = computed(() => Boolean(props.label) || Boolean(slots.label));\n</script>\n\n<template>\n <div role=\"group\" :aria-labelledby=\"hasLabel ? labelId : undefined\">\n <div v-if=\"hasLabel\" :id=\"labelId\" :class=\"listboxGroupLabelVariants()\">\n <slot name=\"label\">{{ label }}</slot>\n </div>\n <slot />\n </div>\n</template>\n","<script lang=\"ts\">\n/* No props: React typed this as bare `HTMLAttributes<HTMLDivElement>`, every member of which is\n a Vue fallthrough attr. The block exists because a `<script setup>`-only SFC loses\n `ignoreRestSiblings` in `vue-eslint-parser` and trips `no-unused-vars` on the house\n `const { class: _class, ...others }` idiom. */\n</script>\n\n<script setup lang=\"ts\">\nimport { listboxSeparatorVariants } from '../listboxPicker/ListboxPicker.variants';\n\n/** Renders a decorative rule between groups of options, hidden from the accessibility tree. */\n/* `inheritAttrs` stays ON: React put `className` straight onto the div with no `cn()` merge\n of its own, so plain fallthrough reproduces it exactly. */\ndefineOptions({ name: 'ComboboxPickerSeparator' });\n</script>\n\n<template>\n <div aria-hidden=\"true\" :class=\"listboxSeparatorVariants()\" />\n</template>\n","<script lang=\"ts\">\n/* No props: React typed this as bare `HTMLAttributes<HTMLDivElement>`, every member of which is\n a Vue fallthrough attr, and the message itself is the default slot. The block exists because\n a `<script setup>`-only SFC loses `ignoreRestSiblings` in `vue-eslint-parser` and trips\n `no-unused-vars` on the house `const { class: _class, ...others }` idiom. */\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn } from '../../../foundation/styles';\nimport { listboxEmptyVariants } from '../listboxPicker/ListboxPicker.variants';\n\n/** Renders the no-matches message as a disabled option row, perceivable to AT but skipped by keyboard nav. */\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'ComboboxPickerEmpty', inheritAttrs: false });\n\ndefineSlots<{\n /** The no-matches copy — React's `children`. */\n default(): unknown;\n}>();\n\nconst attrs = useAttrs();\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootClass = computed(() => cn(listboxEmptyVariants(), attrs.class as ClassValue));\n</script>\n\n<template>\n <div role=\"option\" aria-disabled=\"true\" :aria-selected=\"false\" :class=\"rootClass\" v-bind=\"passthroughAttrs\">\n <slot />\n </div>\n</template>\n","<script lang=\"ts\">\n// Shared month-grid renderer for CalendarPicker and RangeCalendarPicker. Co-located in\n// `forms/` as a domain-internal helper. Owns:\n// - the 42-cell visual layout (header + weekday row + 6×7 grid)\n// - keyboard navigation (arrows / Home/End / PgUp/PgDn / Shift+PgUp/PgDn)\n// - focused-cell management (autofocus on focusedDate change)\n// - month nav buttons\n//\n// Consumers (CalendarPicker, RangeCalendarPicker) provide:\n// - their own selection state via `dayProps(date)` returning extra attrs\n// - `onDayActivate(date)` callback for click/Enter/Space\n//\n// Not exported from `forms/index.ts` — internal only.\n\nimport type { Temporal } from 'temporal-polyfill';\nimport { AriaAttribute } from '../../foundation/dom';\n\n/** @internal An attribute name this component derives or requires. */\ntype DayAttribute = typeof AriaAttribute.Selected;\n\nexport interface MonthGridDayProps extends Readonly<Partial<Record<DayAttribute, boolean>>> {\n readonly class?: string;\n readonly onPointerenter?: (event: PointerEvent) => void;\n readonly onPointerleave?: (event: PointerEvent) => void;\n /** The extra `data-*` attributes (data-selected, data-range-start, etc.). */\n [key: `data-${string}`]: string | boolean | undefined;\n}\n\n/** Query callbacks return values; state updates emit canonical named model requests. */\nexport interface MonthGridProps {\n /** The first day of the visible month (use `startOfMonth(date)`). */\n readonly viewMonth: Temporal.PlainDate;\n\n /** The currently focused day (cell tabindex=0). */\n readonly focusedDate: Temporal.PlainDate;\n\n /** The predicate marking a day as disabled. */\n readonly isDayDisabled?: (date: Temporal.PlainDate) => boolean;\n\n /** Emits the activated day on click / Enter / Space. */\n readonly onDayActivate?: (date: Temporal.PlainDate, meta: { outOfMonth: boolean }) => void;\n\n /** The extra per-day attributes for selection styling and hover handlers. */\n readonly dayProps?: (date: Temporal.PlainDate, meta: { outOfMonth: boolean }) => MonthGridDayProps | undefined;\n}\n\n// Upper bound when scanning past disabled days — covers a Shift+PageUp/PageDown\n// year jump (≤366 days) with margin.\nconst MaxDisabledSkip = 400;\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted, useAttrs, useTemplateRef, watch } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { ChevronLeft, ChevronRight } from 'lucide-vue-next';\nimport { cn } from '../../foundation/styles';\nimport {\n MonthLabelsLong,\n WeekdayLabelsShort,\n addDays,\n addMonths,\n buildMonthGrid,\n isSameDay,\n isToday,\n startOfMonth,\n sundayIndex,\n} from './DateExtensions';\n\n/** Renders the shared 42-cell month grid — month nav, weekday row, keyboard-navigable day cells. */\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'MonthGrid', inheritAttrs: false });\n\nconst props = defineProps<MonthGridProps>();\n\nconst emit = defineEmits<{\n 'update:viewMonth': [date: Temporal.PlainDate];\n 'update:focusedDate': [date: Temporal.PlainDate];\n}>();\n\nconst attrs = useAttrs();\n\nconst root = useTemplateRef<HTMLDivElement>('root');\nconst grid = useTemplateRef<HTMLDivElement>('grid');\n\n/* Tracks keyboard/click interaction so the focus watcher below never steals page focus\n when a standalone CalendarPicker mounts. */\nlet interacted = false;\n\n/*\n * Re-focus the active day cell when `focusedDate` changes (keyboard nav).\n *\n * NOT `immediate` — an immediate watcher runs during setup, which happens on the SERVER\n * too, and `querySelector` on a null ref would be the least of it. A mount run would be\n * a no-op behind the `interacted` guard anyway.\n */\nwatch(\n () => props.focusedDate,\n (next) => {\n if (!interacted) return;\n const cell = grid.value?.querySelector<HTMLButtonElement>(`[data-date=\"${next.toString()}\"]`);\n cell?.focus();\n },\n { flush: 'post' },\n);\n\n/*\n * When the grid mounts inside an open popover (DatePicker), the focus trap lands on the\n * first tabbable (prev-month button); adopt it onto the active day cell. Standalone mounts\n * (activeElement outside the root) are left alone.\n *\n * `onMounted` — never runs on the server, so `document` / `requestAnimationFrame` are safe\n * here without a `typeof` guard.\n */\nlet raf = 0;\nonMounted(() => {\n raf = requestAnimationFrame(() => {\n if (!root.value?.contains(document.activeElement)) return;\n grid.value?.querySelector<HTMLButtonElement>('button[tabindex=\"0\"]')?.focus();\n });\n});\nonBeforeUnmount(() => {\n if (raf) cancelAnimationFrame(raf);\n});\n\nfunction moveFocus(next: Temporal.PlainDate, dir: 1 | -1): void {\n let target = next;\n if (props.isDayDisabled) {\n // Skip disabled days in the movement direction…\n let steps = 0;\n while (props.isDayDisabled(target) && steps < MaxDisabledSkip) {\n target = addDays(target, dir);\n steps += 1;\n }\n // …and clamp back toward the origin when none exist (min/max edges).\n if (props.isDayDisabled(target)) {\n target = next;\n steps = 0;\n while (props.isDayDisabled(target) && steps < MaxDisabledSkip) {\n target = addDays(target, -dir);\n steps += 1;\n }\n }\n if (props.isDayDisabled(target)) return; // nothing focusable in reach — stay put\n }\n interacted = true;\n if (target.month !== props.viewMonth.month || target.year !== props.viewMonth.year) {\n emit('update:viewMonth', startOfMonth(target));\n }\n emit('update:focusedDate', target);\n}\n\nfunction onCellKeydown(event: KeyboardEvent, date: Temporal.PlainDate, outOfMonth: boolean): void {\n switch (event.key) {\n case 'ArrowRight':\n event.preventDefault();\n moveFocus(addDays(date, 1), 1);\n break;\n case 'ArrowLeft':\n event.preventDefault();\n moveFocus(addDays(date, -1), -1);\n break;\n case 'ArrowDown':\n event.preventDefault();\n moveFocus(addDays(date, 7), 1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n moveFocus(addDays(date, -7), -1);\n break;\n case 'Home':\n // Scan toward the origin so a disabled week start clamps to the\n // first enabled day of the week instead of leaving it.\n event.preventDefault();\n moveFocus(addDays(date, -sundayIndex(date)), 1);\n break;\n case 'End':\n event.preventDefault();\n moveFocus(addDays(date, 6 - sundayIndex(date)), -1);\n break;\n case 'PageDown':\n event.preventDefault();\n moveFocus(addMonths(date, event.shiftKey ? 12 : 1), 1);\n break;\n case 'PageUp':\n event.preventDefault();\n moveFocus(addMonths(date, event.shiftKey ? -12 : -1), -1);\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (!props.isDayDisabled?.(date)) props.onDayActivate?.(date, { outOfMonth });\n break;\n }\n}\n\nfunction dayDisabled(date: Temporal.PlainDate): boolean {\n return props.isDayDisabled?.(date) ?? false;\n}\n\nconst cells = computed(() => buildMonthGrid(props.viewMonth.year, props.viewMonth.month));\n\n/* Each row carries the date it starts on: a positional index would reuse the wrong row on a month change. */\nconst weeks = computed(() =>\n Array.from({ length: 6 }, (_, w) => cells.value.slice(w * 7, w * 7 + 7)).map((week) => ({\n key: week[0]?.date.toString() ?? '',\n cells: week,\n })),\n);\n\n/* Roving tab stop — the focused date unless it's disabled (e.g. today before `min`); then\n the first enabled cell so the grid stays Tab-reachable. */\nconst tabStopDate = computed(() => {\n if (!dayDisabled(props.focusedDate)) return props.focusedDate;\n const fallback =\n cells.value.find((c) => !c.outOfMonth && !dayDisabled(c.date)) ?? cells.value.find((c) => !dayDisabled(c.date));\n return fallback ? fallback.date : props.focusedDate;\n});\n\nfunction onCellClick(date: Temporal.PlainDate, outOfMonth: boolean): void {\n if (dayDisabled(date)) return;\n interacted = true;\n props.onDayActivate?.(date, { outOfMonth });\n emit('update:focusedDate', date);\n if (outOfMonth) emit('update:viewMonth', startOfMonth(date));\n}\n\n/** The consumer's per-day attrs minus `class`, which is folded into the cell's own `cn()`. */\nfunction cellAttrs(date: Temporal.PlainDate, outOfMonth: boolean): Record<string, unknown> {\n const consumer = props.dayProps?.(date, { outOfMonth }) ?? {};\n const { class: _class, ...rest } = consumer as Record<string, unknown>;\n return rest;\n}\n\n/*\n * `bg-primary/10` — the ghost/outline hover the rest of the package uses (see\n * `Button.variants`) — NOT `bg-muted`: the grid paints on `bg-popover`, and in most themes\n * `muted` and `popover` are within a point of each other, so a muted hover is invisible.\n * A tint of the selection colour reads on every surface, light and dark.\n *\n * Both halves are also what a consumer's `dayProps` OVERRIDES for its selected cells, and\n * tailwind-merge can only drop a class it recognises as conflicting — same utility group AND\n * same variant. So a consumer that wants a different selected-hover has to spell both\n * `hover:bg-*` and `hover:text-*`; a bare `text-primary-foreground` does not displace\n * `hover:text-foreground` here and the day number flips to near-black on hover.\n */\nfunction cellClass(date: Temporal.PlainDate, outOfMonth: boolean): string {\n const consumer = props.dayProps?.(date, { outOfMonth });\n return cn(\n 'grid h-9 w-9 place-items-center text-sm transition-colors',\n 'hover:bg-primary/10 hover:text-foreground',\n 'focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring',\n outOfMonth && 'text-muted-foreground/60',\n dayDisabled(date) && 'pointer-events-none opacity-40',\n consumer?.class,\n );\n}\n\n/* Never a declared prop — a declared `'aria-label'` would arrive as `props.ariaLabel` and\n stop reaching the DOM. It is read off the attrs so it can be relocated onto the grid. */\nconst ariaLabel = computed(() => (attrs[AriaAttribute.Label] as string | undefined) ?? 'Calendar');\n\nconst monthLabel = computed(() => `${MonthLabelsLong[props.viewMonth.month - 1]} ${props.viewMonth.year}`);\n\nconst rootClass = computed(() =>\n cn(\n 'inline-flex flex-col gap-2 rounded-md border border-border bg-popover p-3 text-popover-foreground',\n attrs.class as ClassValue,\n ),\n);\n\nconst WeekdayLabels = WeekdayLabelsShort;\nconst ChevronLeftIcon = ChevronLeft;\nconst ChevronRightIcon = ChevronRight;\n\ndefineExpose({ el: root });\n</script>\n\n<template>\n <div ref=\"root\" :class=\"rootClass\">\n <!-- Header -->\n <div class=\"flex items-center justify-between gap-2 px-1\">\n <button\n type=\"button\"\n aria-label=\"Previous month\"\n class=\"grid h-7 w-7 place-items-center rounded-sm text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring\"\n @click=\"emit('update:viewMonth', addMonths(viewMonth, -1))\"\n >\n <ChevronLeftIcon class=\"h-4 w-4\" />\n </button>\n <div class=\"text-sm font-medium\" aria-live=\"polite\">{{ monthLabel }}</div>\n <button\n type=\"button\"\n aria-label=\"Next month\"\n class=\"grid h-7 w-7 place-items-center rounded-sm text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring\"\n @click=\"emit('update:viewMonth', addMonths(viewMonth, 1))\"\n >\n <ChevronRightIcon class=\"h-4 w-4\" />\n </button>\n </div>\n\n <!-- Weekday row -->\n <div class=\"grid grid-cols-7 gap-0 px-1\">\n <div\n v-for=\"w in WeekdayLabels\"\n :key=\"w\"\n class=\"grid h-7 w-9 place-items-center text-xs font-medium text-muted-foreground\"\n >\n {{ w }}\n </div>\n </div>\n\n <!-- Day grid -->\n <div ref=\"grid\" role=\"grid\" :aria-label=\"ariaLabel\" class=\"px-1\">\n <div v-for=\"week in weeks\" :key=\"week.key\" role=\"row\" class=\"grid grid-cols-7 gap-0\">\n <button\n v-for=\"cell in week.cells\"\n :key=\"cell.date.toString()\"\n type=\"button\"\n role=\"gridcell\"\n :data-date=\"cell.date.toString()\"\n :aria-disabled=\"dayDisabled(cell.date) || undefined\"\n :data-today=\"isToday(cell.date) ? '' : undefined\"\n :data-out-of-month=\"cell.outOfMonth ? '' : undefined\"\n :data-disabled=\"dayDisabled(cell.date) ? '' : undefined\"\n :tabindex=\"isSameDay(tabStopDate, cell.date) ? 0 : -1\"\n v-bind=\"cellAttrs(cell.date, cell.outOfMonth)\"\n :class=\"cellClass(cell.date, cell.outOfMonth)\"\n @click=\"onCellClick(cell.date, cell.outOfMonth)\"\n @keydown=\"onCellKeydown($event, cell.date, cell.outOfMonth)\"\n >\n {{ cell.date.day }}\n </button>\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\">\nimport type { Temporal } from 'temporal-polyfill';\n\nexport interface CalendarPickerProps {\n /** The selected date, controlled. The `v-model` binding target. */\n readonly modelValue?: Temporal.PlainDate | null;\n\n /** The uncontrolled initial selection. */\n readonly defaultValue?: Temporal.PlainDate | null;\n\n /** The initial visible month (uncontrolled). */\n readonly defaultMonth?: Temporal.PlainDate;\n\n /** The minimum selectable date. */\n readonly min?: Temporal.PlainDate | null;\n\n /** The maximum selectable date. */\n readonly max?: Temporal.PlainDate | null;\n\n /**\n * The custom disable predicate.\n *\n * Kept a PROP, not an emit: it RETURNS a value the grid reads on every cell, which is\n * not what an emit models.\n */\n readonly isDisabled?: (date: Temporal.PlainDate) => boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, ref, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { AriaAttribute } from '../../../foundation/dom';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { isDateDisabled, isSameDay, isToday, startOfMonth, today } from '../DateExtensions';\nimport MonthGrid from '../MonthGrid.vue';\nimport type { MonthGridDayProps } from '../MonthGrid.vue';\n\n/** Renders a month grid where one day is picked, navigated by keyboard and bounded by min/max. */\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'CalendarPicker', inheritAttrs: false });\n\nconst props = defineProps<CalendarPickerProps>();\n\nconst emit = defineEmits<{\n /** Fires when the reader picks a day in the grid. The `v-model` half. */\n 'update:modelValue': [date: Temporal.PlainDate | null];\n}>();\n\nconst attrs = useAttrs();\n\nconst controlled = useControlled<Temporal.PlainDate | null>({\n /* `??` is wrong here — `null` is a MEANINGFUL selection (\"nothing selected\"), and `??`\n would fall through it to `modelValue`. Only `undefined` means \"not controlled\". */\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? null,\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst selected = controlled.value;\n\n/* `today()` reads the host time zone through `Temporal.Now` — universal, not a browser\n global, so both seeds are safe on the server. */\nconst viewMonth = ref<Temporal.PlainDate>(startOfMonth(props.defaultMonth ?? selected.value ?? today()));\nconst focusedDate = ref<Temporal.PlainDate>(selected.value ?? today());\n\nfunction setViewMonth(next: Temporal.PlainDate): void {\n viewMonth.value = next;\n}\n\nfunction setFocusedDate(next: Temporal.PlainDate): void {\n focusedDate.value = next;\n}\n\nfunction isDayDisabled(d: Temporal.PlainDate): boolean {\n return isDateDisabled(d, { min: props.min, max: props.max, isDisabled: props.isDisabled });\n}\n\nfunction onDayActivate(d: Temporal.PlainDate): void {\n controlled.setValue(d);\n}\n\n/*\n * `hover:text-primary-foreground` is load-bearing, not decoration: `MonthGrid`'s base carries\n * `hover:text-foreground`, and tailwind-merge only drops a class from the same utility group\n * AND the same variant — a plain `text-primary-foreground` does not displace a `hover:text-*`.\n * Without it the selected day's number flipped to near-black on `bg-primary` while hovered.\n *\n * `hover:bg-primary/90` (the package's solid-surface hover, see `Button.variants`) rather than\n * a flat `hover:bg-primary`, so hovering the selected day still reads as a hover.\n */\nfunction dayProps(date: Temporal.PlainDate): MonthGridDayProps {\n const isSelectedCell = isSameDay(selected.value, date);\n return {\n [AriaAttribute.Selected]: isSelectedCell,\n 'data-selected': isSelectedCell ? '' : undefined,\n class: cn(\n 'rounded-sm',\n isToday(date) && !isSelectedCell && 'border border-border',\n isSelectedCell && 'bg-primary text-primary-foreground hover:bg-primary/90 hover:text-primary-foreground',\n ),\n };\n}\n\n/* Never a declared prop — a declared `'aria-label'` would arrive as `props.ariaLabel`. It is\n read off the attrs so it can be relocated onto the inner grid. */\nconst ariaLabel = computed(() => (attrs[AriaAttribute.Label] as string | undefined) ?? 'Calendar');\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', AriaAttribute.Label]);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootClass = computed(() => cn(attrs.class as ClassValue));\n\nconst root = useTemplateRef<HTMLDivElement>('root');\n\n/** The rendered element. */\ndefineExpose({ el: root });\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n controlled.reset();\n});\n</script>\n\n<template>\n <div :key=\"formResetRevision\" ref=\"root\" :class=\"rootClass\" v-bind=\"passthroughAttrs\">\n <MonthGrid\n :view-month=\"viewMonth\"\n @update:viewMonth=\"setViewMonth\"\n :focused-date=\"focusedDate\"\n @update:focusedDate=\"setFocusedDate\"\n :is-day-disabled=\"isDayDisabled\"\n :on-day-activate=\"onDayActivate\"\n :day-props=\"dayProps\"\n :aria-label=\"ariaLabel\"\n />\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </div>\n</template>\n","<script lang=\"ts\">\nimport type { Temporal } from 'temporal-polyfill';\nimport type { InputSize, InputState, InputBorder, InputRing } from '../InputStyles';\n\nexport interface DateInputProps {\n /** The control size. */\n readonly size?: InputSize;\n /** The validity surface. */\n readonly state?: InputState;\n /** The border weight. */\n readonly border?: InputBorder;\n /** The focus-ring weight. */\n readonly ring?: InputRing;\n\n /** The value, controlled. The `v-model` binding target. `null` is the cleared state. */\n readonly modelValue?: Temporal.PlainDate | null;\n\n /** The initial value when uncontrolled. */\n readonly defaultValue?: Temporal.PlainDate | null;\n\n /** The earliest selectable date. */\n readonly min?: Temporal.PlainDate | null;\n\n /** The latest selectable date. */\n readonly max?: Temporal.PlainDate | null;\n\n /**\n * Renders a bare `<input type=\"date\">` and drops the popover.\n *\n * Opt-in only. The browser owns that control's picker panel — it cannot be themed, so it\n * lands a system-chrome popup in the middle of a design-system form. Reach for it when the\n * platform picker is the point (a mobile-first form wanting the OS wheels, for instance).\n */\n readonly native?: boolean;\n\n /** The empty-state text. Ignored when `native` — that control renders its own mask. */\n readonly placeholder?: string;\n\n /** The control's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly disabled?: boolean;\n\n /** The required state. Falls back to the surrounding form control's `isRequired`. */\n readonly required?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, ref, useAttrs, useTemplateRef, watch } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { Calendar as CalendarIcon } from 'lucide-vue-next';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../overlays';\nimport { inputBaseVariants, InputState as InputStateValue } from '../InputStyles';\nimport { formatISODate, parseISODate, today } from '../DateExtensions';\nimport CalendarPicker from '../calendarPicker/CalendarPicker.vue';\n\n/**\n * Renders a typed `YYYY-MM-DD` field with a design-system `CalendarPicker` popover on the trailing button.\n * Accepts and emits `Temporal.PlainDate`.\n *\n * The popover is ours, not the browser's: an `<input type=\"date\">` opens an unstylable system\n * panel, which is what `native` is for. `DatePicker` is the trigger-shaped peer — reach for\n * this one when the form wants a text field the user can type into.\n */\n/* `inheritAttrs: false` so `class` folds into the wrapper's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'DateInput', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<DateInputProps>(), {\n native: false,\n placeholder: 'YYYY-MM-DD',\n /* Explicit `undefined` defaults are load-bearing: each flag falls back to the form\n control context, and Vue casts an absent `boolean` prop to `false` — which would\n shadow the context with a hard \"not disabled / not required\". */\n disabled: undefined,\n required: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader types a date or picks one in the calendar — the `v-model` half. */\n 'update:modelValue': [value: Temporal.PlainDate | null];\n}>();\n\nconst attrs = useAttrs();\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useFormControl();\n\nconst controlled = useControlled<Temporal.PlainDate | null>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? null,\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst committed = controlled.value;\n\nconst open = ref(false);\n\n/** The ISO form the native control, the typed field and form submission all speak. */\nconst displayValue = computed(() => formatISODate(committed.value));\n\n/** The in-flight text — free-form while typing, reconciled with `committed` on commit. */\nconst draft = ref<string>(displayValue.value);\n\n/* Syncs the draft when the committed value changes from the outside (or from the popover). */\nwatch(displayValue, (next) => {\n draft.value = next;\n});\n\n/** Commits the draft; an unparseable draft reverts to the committed value (ColorInput parity). */\nfunction commit(): void {\n if (!draft.value.trim()) {\n controlled.setValue(null);\n draft.value = '';\n return;\n }\n const next = parseISODate(draft.value.trim());\n if (next) {\n controlled.setValue(next);\n draft.value = formatISODate(next);\n } else {\n draft.value = displayValue.value;\n }\n}\n\nfunction onDraftInput(event: Event): void {\n draft.value = (event.target as HTMLInputElement).value;\n}\n\n/* Runs after any caller-supplied `@blur` — declared after `v-bind`, so Vue chains theirs first. */\nfunction onBlur(): void {\n commit();\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.isComposing) return;\n if (event.defaultPrevented) return;\n if (event.key === 'Enter') {\n event.preventDefault();\n commit();\n }\n}\n\n/** The `native` path keeps the original ISO-string round trip. */\nfunction onNativeInput(event: Event): void {\n controlled.setValue(parseISODate((event.target as HTMLInputElement).value));\n}\n\n/* A day is the whole value here, so the pick closes the panel — `DatePicker` parity, and\n unlike `DateTimeInput`, where the time half still has to be chosen. */\nfunction onCalendarChange(next: Temporal.PlainDate | null): void {\n controlled.setValue(next);\n open.value = false;\n}\n\nconst calendarMonth = computed(() => committed.value ?? today());\nconst minValue = computed(() => formatISODate(props.min));\nconst maxValue = computed(() => formatISODate(props.max));\n\nconst finalState = computed(() => props.state ?? (ctx?.isInvalid ? InputStateValue.Invalid : InputStateValue.Default));\n\nconst inputId = computed(() => props.id ?? ctx?.id);\nconst isDisabled = computed(() => props.disabled ?? ctx?.isDisabled);\nconst isRequired = computed(() => props.required ?? ctx?.isRequired);\nconst isInvalid = computed(() => ctx?.isInvalid || undefined);\nconst describedBy = computed(() => ctx?.describedBy);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', 'value']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\n/* The caller's `class` sizes the field and the input keeps `w-full` from the variants —\n the adorned-input idiom already used by `PasswordInput` / `SearchInput`. */\nconst wrapperClass = computed(() => cn('relative', attrs.class as ClassValue));\n\nconst inputClass = computed(() =>\n cn(\n inputBaseVariants({\n size: props.size,\n state: finalState.value,\n border: props.border,\n ring: props.ring,\n }),\n !props.native && 'pr-10',\n ),\n);\n\nconst root = useTemplateRef<HTMLInputElement>('root');\n\n/** The rendered `<input>` — the Vue stand-in for the React original's forwarded ref. */\nuseNativeFormReset(root, controlled.reset, () => {\n if (root.value) root.value.value = String(displayValue.value ?? '');\n});\n\ndefineExpose({ el: root });\n</script>\n\n<template>\n <div :class=\"wrapperClass\">\n <!-- The unstylable-system-panel path, kept for callers that want the platform picker. -->\n <input\n v-if=\"native\"\n ref=\"root\"\n type=\"date\"\n :id=\"inputId\"\n :value=\"displayValue\"\n :min=\"minValue\"\n :max=\"maxValue\"\n :disabled=\"isDisabled\"\n :required=\"isRequired\"\n :aria-invalid=\"isInvalid\"\n :aria-describedby=\"describedBy\"\n :class=\"inputClass\"\n v-bind=\"passthroughAttrs\"\n @input=\"onNativeInput\"\n />\n\n <Popover v-else v-model:open=\"open\" placement=\"bottom-start\" :offset=\"6\">\n <input\n ref=\"root\"\n type=\"text\"\n autocomplete=\"off\"\n :spellcheck=\"false\"\n :id=\"inputId\"\n :value=\"draft\"\n :placeholder=\"placeholder\"\n :disabled=\"isDisabled\"\n :required=\"isRequired\"\n :aria-invalid=\"isInvalid\"\n :aria-describedby=\"describedBy\"\n :class=\"inputClass\"\n v-bind=\"passthroughAttrs\"\n @input=\"onDraftInput\"\n @blur=\"onBlur\"\n @keydown=\"onKeydown\"\n />\n <PopoverTrigger\n aria-label=\"Choose date\"\n :disabled=\"isDisabled\"\n class=\"absolute right-1 top-1/2 grid h-8 w-8 -translate-y-1/2 place-items-center rounded text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50\"\n >\n <CalendarIcon class=\"h-4 w-4\" />\n </PopoverTrigger>\n <PopoverContent is-bare>\n <CalendarPicker\n :model-value=\"committed\"\n :default-month=\"calendarMonth\"\n :min=\"min\"\n :max=\"max\"\n @update:modelValue=\"onCalendarChange\"\n />\n </PopoverContent>\n </Popover>\n </div>\n</template>\n","<script lang=\"ts\">\n// Shared hour/minute column pair for TimePicker, TimeInput and DateTimeInput.\n// Co-located in `forms/` as a domain-internal helper, exactly like `MonthGrid.vue`.\n// Owns:\n// - the two scrollable listboxes (24 hours × `minuteStep` minutes)\n// - the selected-cell styling and its hover ladder\n// - scrolling the selected cells into view on mount (i.e. each time a popover opens)\n//\n// Consumers provide the current `modelValue` and an `update:modelValue` listener; the merge of the\n// untouched column with the picked one happens here, so every consumer gets it identically.\n//\n// Not exported from `forms/index.ts` — internal only.\n\nimport type { Temporal } from 'temporal-polyfill';\n\nexport interface TimeColumnsProps {\n /** The selected time. `null` renders both columns with nothing selected. */\n readonly modelValue: Temporal.PlainTime | null;\n\n /** The minute interval between rows. Default 5. */\n readonly minuteStep?: number;\n}\n\nconst HoursOfDay = Array.from({ length: 24 }, (_, i) => i);\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { Temporal as TemporalValue } from 'temporal-polyfill';\nimport { cn } from '../../foundation/styles';\n\n/** Renders the paired hour and minute listboxes, scrolling the selected rows into view when opened. */\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'TimeColumns', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<TimeColumnsProps>(), { minuteStep: 5 });\n\nconst emit = defineEmits<{ 'update:modelValue': [value: Temporal.PlainTime] }>();\n\nconst attrs = useAttrs();\n\nconst hoursEl = useTemplateRef<HTMLDivElement>('hoursEl');\nconst minutesEl = useTemplateRef<HTMLDivElement>('minutesEl');\n\nconst minuteList = computed(() => {\n const list: Array<number> = [];\n for (let m = 0; m < 60; m += props.minuteStep) list.push(m);\n return list;\n});\n\n/*\n * Scroll the selected hour/minute into view. `onMounted` — never runs on the server, so\n * `requestAnimationFrame` is safe here without a `typeof` guard. Mount is the right hook\n * because an overlay unmounts its panel on close, so this runs on every open.\n */\nlet raf = 0;\nonMounted(() => {\n raf = requestAnimationFrame(() => {\n hoursEl.value?.querySelector<HTMLButtonElement>('[data-selected]')?.scrollIntoView({\n block: 'center',\n });\n minutesEl.value?.querySelector<HTMLButtonElement>('[data-selected]')?.scrollIntoView({\n block: 'center',\n });\n });\n});\nonBeforeUnmount(() => {\n if (raf) cancelAnimationFrame(raf);\n});\n\nfunction update(next: { hour?: number; minute?: number }): void {\n emit(\n 'update:modelValue',\n TemporalValue.PlainTime.from({\n hour: next.hour ?? props.modelValue?.hour ?? 0,\n minute: next.minute ?? props.modelValue?.minute ?? 0,\n }),\n );\n}\n\n/*\n * Hover ladder, shared with `MonthGrid`:\n * unselected → `bg-primary/10`, the package's ghost/outline hover (see `Button.variants`)\n * selected → `bg-primary/90`, the package's solid-surface hover\n * A flat `hover:bg-primary` left the selected cell with no hover feedback at all, and\n * `hover:bg-muted` is indistinguishable from the popover surface in most themes.\n */\nfunction cellClass(isSelected: boolean): string {\n return cn(\n 'grid h-8 w-12 place-items-center rounded-sm text-sm transition-colors hover:bg-primary/10',\n isSelected && 'bg-primary text-primary-foreground hover:bg-primary/90',\n );\n}\n\nfunction pad(n: number): string {\n return String(n).padStart(2, '0');\n}\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootClass = computed(() =>\n cn(\n 'flex gap-1 rounded-md border border-border bg-popover p-2 text-popover-foreground shadow-md',\n attrs.class as ClassValue,\n ),\n);\n\nconst HourList = HoursOfDay;\n\nconst root = useTemplateRef<HTMLDivElement>('root');\n\ndefineExpose({ el: root });\n</script>\n\n<template>\n <div ref=\"root\" :class=\"rootClass\" v-bind=\"passthroughAttrs\">\n <div ref=\"hoursEl\" role=\"listbox\" aria-label=\"Hours\" class=\"flex max-h-56 flex-col gap-0.5 overflow-y-auto pr-1\">\n <button\n v-for=\"h in HourList\"\n :key=\"h\"\n type=\"button\"\n role=\"option\"\n :aria-selected=\"props.modelValue?.hour === h\"\n :data-selected=\"props.modelValue?.hour === h ? '' : undefined\"\n :class=\"cellClass(props.modelValue?.hour === h)\"\n @click=\"update({ hour: h })\"\n >\n {{ pad(h) }}\n </button>\n </div>\n <div class=\"w-px self-stretch bg-border\" />\n <div\n ref=\"minutesEl\"\n role=\"listbox\"\n aria-label=\"Minutes\"\n class=\"flex max-h-56 flex-col gap-0.5 overflow-y-auto pl-1\"\n >\n <button\n v-for=\"m in minuteList\"\n :key=\"m\"\n type=\"button\"\n role=\"option\"\n :aria-selected=\"props.modelValue?.minute === m\"\n :data-selected=\"props.modelValue?.minute === m ? '' : undefined\"\n :class=\"cellClass(props.modelValue?.minute === m)\"\n @click=\"update({ minute: m })\"\n >\n {{ pad(m) }}\n </button>\n </div>\n </div>\n</template>\n","<script lang=\"ts\">\nimport type { Temporal } from 'temporal-polyfill';\nimport type { InputSize, InputState, InputBorder, InputRing } from '../InputStyles';\n\nexport interface DateTimeInputProps {\n /** The control size. */\n readonly size?: InputSize;\n /** The validity surface. */\n readonly state?: InputState;\n /** The border weight. */\n readonly border?: InputBorder;\n /** The focus-ring weight. */\n readonly ring?: InputRing;\n\n /** The value, controlled. The `v-model` binding target. `null` is the cleared state. */\n readonly modelValue?: Temporal.PlainDateTime | null;\n\n /** The initial value when uncontrolled. */\n readonly defaultValue?: Temporal.PlainDateTime | null;\n\n /** The earliest selectable wall-clock instant. */\n readonly min?: Temporal.PlainDateTime | null;\n\n /** The latest selectable wall-clock instant. */\n readonly max?: Temporal.PlainDateTime | null;\n\n /**\n * Renders a bare `<input type=\"datetime-local\">` and drops the popover.\n *\n * Opt-in only. The browser owns that control's picker panel — it cannot be themed, so it\n * lands a system-chrome popup in the middle of a design-system form. Reach for it when the\n * platform picker is the point (a mobile-first form wanting the OS wheels, for instance).\n */\n readonly native?: boolean;\n\n /** The minute interval offered in the popover. Default 5. Ignored when `native`. */\n readonly minuteStep?: number;\n\n /** The empty-state text. Ignored when `native` — that control renders its own mask. */\n readonly placeholder?: string;\n\n /** The hidden input name; when set, a hidden input ships the ISO value with form submission. */\n readonly name?: string;\n\n /** The control's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly disabled?: boolean;\n\n /** The required state. Falls back to the surrounding form control's `isRequired`. */\n readonly required?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, ref, useAttrs, useTemplateRef, watch } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { CalendarClock } from 'lucide-vue-next';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../overlays';\nimport { inputBaseVariants, InputState as InputStateValue } from '../InputStyles';\nimport { formatISODateTime, parseISODate, parseISODateTime, today } from '../DateExtensions';\nimport CalendarPicker from '../calendarPicker/CalendarPicker.vue';\nimport TimeColumns from '../TimeColumns.vue';\n\n/**\n * Renders a typed `YYYY-MM-DD HH:MM` field with a `CalendarPicker` plus hour/minute popover on its button.\n * Accepts and emits `Temporal.PlainDateTime` (calendar wall-clock, no zone).\n *\n * The popover is ours, not the browser's: an `<input type=\"datetime-local\">` opens an\n * unstylable system panel, which is what `native` is for.\n */\n/* `inheritAttrs: false` so `class` folds into the wrapper's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'DateTimeInput', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<DateTimeInputProps>(), {\n native: false,\n minuteStep: 5,\n placeholder: 'YYYY-MM-DD HH:MM',\n /* Explicit `undefined` defaults are load-bearing: each flag falls back to the form\n control context, and Vue casts an absent `boolean` prop to `false` — which would\n shadow the context with a hard \"not disabled / not required\". */\n disabled: undefined,\n required: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader types or picks a date and time — the `v-model` half. */\n 'update:modelValue': [value: Temporal.PlainDateTime | null];\n}>();\n\nconst attrs = useAttrs();\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useFormControl();\n\nconst controlled = useControlled<Temporal.PlainDateTime | null>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? null,\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst committed = controlled.value;\n\nconst open = ref(false);\n\n/** The ISO form the native control and form submission both speak. */\nconst isoValue = computed(() => formatISODateTime(committed.value));\n\n/** The typed form — the same ISO with the `T` softened to a space. */\nconst displayText = computed(() => isoValue.value.replace('T', ' '));\n\n/** The in-flight text — free-form while typing, reconciled with `committed` on commit. */\nconst draft = ref<string>(displayText.value);\n\n/* Syncs the draft when the committed value changes from the outside (or from the popover). */\nwatch(displayText, (next) => {\n draft.value = next;\n});\n\n/** Accepts `YYYY-MM-DD HH:MM`, its `T` spelling, and a bare `YYYY-MM-DD` (→ midnight). */\nfunction parseDateTimeText(text: string): Temporal.PlainDateTime | null {\n const normalised = text.trim().replace(/\\s+/, 'T');\n const full = parseISODateTime(normalised);\n if (full) return full;\n const dateOnly = parseISODate(normalised);\n return dateOnly ? dateOnly.toPlainDateTime() : null;\n}\n\n/** Commits the draft; an unparseable draft reverts to the committed value (ColorInput parity). */\nfunction commit(): void {\n if (!draft.value.trim()) {\n controlled.setValue(null);\n draft.value = '';\n return;\n }\n const next = parseDateTimeText(draft.value);\n if (next) {\n controlled.setValue(next);\n draft.value = formatISODateTime(next).replace('T', ' ');\n } else {\n draft.value = displayText.value;\n }\n}\n\nfunction onDraftInput(event: Event): void {\n draft.value = (event.target as HTMLInputElement).value;\n}\n\n/* Runs after any caller-supplied `@blur` — declared after `v-bind`, so Vue chains theirs first. */\nfunction onBlur(): void {\n commit();\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.isComposing) return;\n if (event.defaultPrevented) return;\n if (event.key === 'Enter') {\n event.preventDefault();\n commit();\n }\n}\n\n/** The `native` path keeps the original ISO-string round trip. */\nfunction onNativeInput(event: Event): void {\n controlled.setValue(parseISODateTime((event.target as HTMLInputElement).value));\n}\n\n/* A date pick keeps the time that was already set; a time pick keeps the date. Neither\n closes the popover — the other half still has to be chosen. */\nfunction onCalendarChange(date: Temporal.PlainDate | null): void {\n if (!date) {\n controlled.setValue(null);\n return;\n }\n controlled.setValue(date.toPlainDateTime(committed.value?.toPlainTime()));\n}\n\nfunction onColumnsChange(time: Temporal.PlainTime): void {\n const date = committed.value?.toPlainDate() ?? today();\n controlled.setValue(date.toPlainDateTime(time));\n}\n\nconst calendarValue = computed(() => committed.value?.toPlainDate() ?? null);\nconst calendarMonth = computed(() => calendarValue.value ?? today());\nconst timeValue = computed(() => committed.value?.toPlainTime() ?? null);\n\n/* The day bounds the calendar can express — the hour half of `min`/`max` stays the typed\n field's business, exactly as it was under the native control. */\nconst minDate = computed(() => props.min?.toPlainDate() ?? null);\nconst maxDate = computed(() => props.max?.toPlainDate() ?? null);\nconst minValue = computed(() => formatISODateTime(props.min));\nconst maxValue = computed(() => formatISODateTime(props.max));\n\nconst finalState = computed(() => props.state ?? (ctx?.isInvalid ? InputStateValue.Invalid : InputStateValue.Default));\n\nconst inputId = computed(() => props.id ?? ctx?.id);\nconst isDisabled = computed(() => props.disabled ?? ctx?.isDisabled);\nconst isRequired = computed(() => props.required ?? ctx?.isRequired);\nconst isInvalid = computed(() => ctx?.isInvalid || undefined);\nconst describedBy = computed(() => ctx?.describedBy);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', 'value']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\n/* The caller's `class` sizes the field and the input keeps `w-full` from the variants —\n the adorned-input idiom already used by `PasswordInput` / `SearchInput`. */\nconst wrapperClass = computed(() => cn('relative', attrs.class as ClassValue));\n\nconst inputClass = computed(() =>\n cn(\n inputBaseVariants({\n size: props.size,\n state: finalState.value,\n border: props.border,\n ring: props.ring,\n }),\n !props.native && 'pr-10',\n ),\n);\n\nconst root = useTemplateRef<HTMLInputElement>('root');\n\n/** The rendered `<input>` — the Vue stand-in for the React original's forwarded ref. */\nuseNativeFormReset(root, controlled.reset, () => {\n if (root.value) root.value.value = String(isoValue.value ?? '');\n});\n\ndefineExpose({ el: root });\n</script>\n\n<template>\n <div :class=\"wrapperClass\">\n <!-- The unstylable-system-panel path, kept for callers that want the platform picker. -->\n <input\n v-if=\"native\"\n ref=\"root\"\n type=\"datetime-local\"\n :id=\"inputId\"\n :value=\"isoValue\"\n :min=\"minValue\"\n :max=\"maxValue\"\n :disabled=\"isDisabled\"\n :required=\"isRequired\"\n :aria-invalid=\"isInvalid\"\n :aria-describedby=\"describedBy\"\n :class=\"inputClass\"\n v-bind=\"passthroughAttrs\"\n @input=\"onNativeInput\"\n />\n\n <Popover v-else v-model:open=\"open\" placement=\"bottom-start\" :offset=\"6\">\n <input\n ref=\"root\"\n type=\"text\"\n autocomplete=\"off\"\n :spellcheck=\"false\"\n :id=\"inputId\"\n :value=\"draft\"\n :placeholder=\"placeholder\"\n :disabled=\"isDisabled\"\n :required=\"isRequired\"\n :aria-invalid=\"isInvalid\"\n :aria-describedby=\"describedBy\"\n :class=\"inputClass\"\n v-bind=\"passthroughAttrs\"\n @input=\"onDraftInput\"\n @blur=\"onBlur\"\n @keydown=\"onKeydown\"\n />\n <PopoverTrigger\n aria-label=\"Choose date and time\"\n :disabled=\"isDisabled\"\n class=\"absolute right-1 top-1/2 grid h-8 w-8 -translate-y-1/2 place-items-center rounded text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50\"\n >\n <CalendarClock class=\"h-4 w-4\" />\n </PopoverTrigger>\n <PopoverContent is-bare>\n <div class=\"flex items-start gap-2\">\n <CalendarPicker\n :model-value=\"calendarValue\"\n :default-month=\"calendarMonth\"\n :min=\"minDate\"\n :max=\"maxDate\"\n @update:modelValue=\"onCalendarChange\"\n />\n <TimeColumns :model-value=\"timeValue\" :minute-step=\"minuteStep\" @update:modelValue=\"onColumnsChange\" />\n </div>\n </PopoverContent>\n </Popover>\n\n <input v-if=\"name\" type=\"hidden\" :name=\"name\" :value=\"isoValue\" />\n </div>\n</template>\n","<script lang=\"ts\">\nimport type { Temporal } from 'temporal-polyfill';\nimport type { InputSize, InputState, InputBorder, InputRing } from '../InputStyles';\n\nexport interface TimeInputProps {\n /** The control size. */\n readonly size?: InputSize;\n /** The validity surface. */\n readonly state?: InputState;\n /** The border weight. */\n readonly border?: InputBorder;\n /** The focus-ring weight. */\n readonly ring?: InputRing;\n\n /** The value, controlled. The `v-model` binding target. `null` is the cleared state. */\n readonly modelValue?: Temporal.PlainTime | null;\n\n /** The initial value when uncontrolled. */\n readonly defaultValue?: Temporal.PlainTime | null;\n\n /**\n * Renders a bare `<input type=\"time\">` and drops the popover.\n *\n * Opt-in only. The browser owns that control's picker panel — it cannot be themed, so it\n * lands a system-chrome popup in the middle of a design-system form. Reach for it when the\n * platform picker is the point (a mobile-first form wanting the OS wheel, for instance).\n */\n readonly native?: boolean;\n\n /** The minute interval offered in the popover. Default 5. Ignored when `native`. */\n readonly minuteStep?: number;\n\n /** The empty-state text. Ignored when `native` — that control renders its own mask. */\n readonly placeholder?: string;\n\n /** The control's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly disabled?: boolean;\n\n /** The required state. Falls back to the surrounding form control's `isRequired`. */\n readonly required?: boolean;\n}\n\n/** Accepts `9`, `09`, `930`, `9:30`, `09:30` — hour alone, or hour + 2-digit minute. */\nconst TimeText = /^(\\d{1,2})(?::?(\\d{2}))?$/;\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, ref, useAttrs, useTemplateRef, watch } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { Temporal as TemporalValue } from 'temporal-polyfill';\nimport { Clock } from 'lucide-vue-next';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../overlays';\nimport { inputBaseVariants, InputState as InputStateValue } from '../InputStyles';\nimport { formatISOTime } from '../DateExtensions';\nimport TimeColumns from '../TimeColumns.vue';\n\n/**\n * Renders a typed `HH:MM` field with a design-system popover on the trailing clock button.\n * Accepts and emits `Temporal.PlainTime`.\n *\n * The popover is ours (`TimeColumns` inside `overlays/popover`), not the browser's: an\n * `<input type=\"time\">` opens an unstylable system panel, which is what `native` is for.\n */\n/* `inheritAttrs: false` so `class` folds into the wrapper's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'TimeInput', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<TimeInputProps>(), {\n native: false,\n minuteStep: 5,\n placeholder: '--:--',\n /* Explicit `undefined` defaults are load-bearing: each flag falls back to the form\n control context, and Vue casts an absent `boolean` prop to `false` — which would\n shadow the context with a hard \"not disabled / not required\". */\n disabled: undefined,\n required: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader types a time or picks one in the popover — the `v-model` half. */\n 'update:modelValue': [value: Temporal.PlainTime | null];\n}>();\n\nconst attrs = useAttrs();\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useFormControl();\n\nconst controlled = useControlled<Temporal.PlainTime | null>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? null,\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst committed = controlled.value;\n\nconst open = ref(false);\n\n/** The in-flight text — free-form while typing, reconciled with `committed` on commit. */\nconst draft = ref<string>(formatISOTime(committed.value));\n\n/* Syncs the draft when the committed value changes from the outside (or from the popover). */\nwatch(committed, (next) => {\n draft.value = formatISOTime(next);\n});\n\nfunction parseTimeText(text: string): Temporal.PlainTime | null {\n const match = TimeText.exec(text.trim());\n if (!match) return null;\n const hour = Number(match[1]);\n const minute = match[2] === undefined ? 0 : Number(match[2]);\n if (hour > 23 || minute > 59) return null;\n return new TemporalValue.PlainTime(hour, minute);\n}\n\n/** Commits the draft; an unparseable draft reverts to the committed value (ColorInput parity). */\nfunction commit(): void {\n if (!draft.value.trim()) {\n controlled.setValue(null);\n draft.value = '';\n return;\n }\n const next = parseTimeText(draft.value);\n if (next) {\n controlled.setValue(next);\n draft.value = formatISOTime(next);\n } else {\n draft.value = formatISOTime(committed.value);\n }\n}\n\nfunction onDraftInput(event: Event): void {\n draft.value = (event.target as HTMLInputElement).value;\n}\n\n/* Runs after any caller-supplied `@blur` — declared after `v-bind`, so Vue chains theirs first. */\nfunction onBlur(): void {\n commit();\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.isComposing) return;\n if (event.defaultPrevented) return;\n if (event.key === 'Enter') {\n event.preventDefault();\n commit();\n }\n}\n\n/** The `native` path keeps the original `HH:MM`-string round trip. */\nfunction onNativeInput(event: Event): void {\n const raw = (event.target as HTMLInputElement).value;\n controlled.setValue(raw ? parseTimeText(raw) : null);\n}\n\nfunction onColumnsChange(next: Temporal.PlainTime): void {\n controlled.setValue(next);\n}\n\nconst displayValue = computed(() => formatISOTime(committed.value));\n\nconst finalState = computed(() => props.state ?? (ctx?.isInvalid ? InputStateValue.Invalid : InputStateValue.Default));\n\nconst inputId = computed(() => props.id ?? ctx?.id);\nconst isDisabled = computed(() => props.disabled ?? ctx?.isDisabled);\nconst isRequired = computed(() => props.required ?? ctx?.isRequired);\nconst isInvalid = computed(() => ctx?.isInvalid || undefined);\nconst describedBy = computed(() => ctx?.describedBy);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', 'value']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\n/* The caller's `class` sizes the field and the input keeps `w-full` from the variants —\n the adorned-input idiom already used by `PasswordInput` / `SearchInput`. */\nconst wrapperClass = computed(() => cn('relative', attrs.class as ClassValue));\n\nconst inputClass = computed(() =>\n cn(\n inputBaseVariants({\n size: props.size,\n state: finalState.value,\n border: props.border,\n ring: props.ring,\n }),\n !props.native && 'pr-10',\n ),\n);\n\nconst root = useTemplateRef<HTMLInputElement>('root');\n\n/** The rendered `<input>` — the Vue stand-in for the React original's forwarded ref. */\nuseNativeFormReset(root, controlled.reset, () => {\n if (root.value) root.value.value = String(displayValue.value ?? '');\n});\n\ndefineExpose({ el: root });\n</script>\n\n<template>\n <div :class=\"wrapperClass\">\n <!-- The unstylable-system-panel path, kept for callers that want the platform picker. -->\n <input\n v-if=\"native\"\n ref=\"root\"\n type=\"time\"\n :id=\"inputId\"\n :value=\"displayValue\"\n :disabled=\"isDisabled\"\n :required=\"isRequired\"\n :aria-invalid=\"isInvalid\"\n :aria-describedby=\"describedBy\"\n :class=\"inputClass\"\n v-bind=\"passthroughAttrs\"\n @input=\"onNativeInput\"\n />\n\n <Popover v-else v-model:open=\"open\" placement=\"bottom-start\" :offset=\"6\">\n <input\n ref=\"root\"\n type=\"text\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n :spellcheck=\"false\"\n :id=\"inputId\"\n :value=\"draft\"\n :placeholder=\"placeholder\"\n :disabled=\"isDisabled\"\n :required=\"isRequired\"\n :aria-invalid=\"isInvalid\"\n :aria-describedby=\"describedBy\"\n :class=\"inputClass\"\n v-bind=\"passthroughAttrs\"\n @input=\"onDraftInput\"\n @blur=\"onBlur\"\n @keydown=\"onKeydown\"\n />\n <PopoverTrigger\n aria-label=\"Choose time\"\n :disabled=\"isDisabled\"\n class=\"absolute right-1 top-1/2 grid h-8 w-8 -translate-y-1/2 place-items-center rounded text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50\"\n >\n <Clock class=\"h-4 w-4\" />\n </PopoverTrigger>\n <PopoverContent is-bare>\n <TimeColumns :model-value=\"committed\" :minute-step=\"minuteStep\" @update:modelValue=\"onColumnsChange\" />\n </PopoverContent>\n </Popover>\n </div>\n</template>\n","<script lang=\"ts\">\nimport type { Temporal } from 'temporal-polyfill';\n\n/** A completed date range. Both ends are set; the in-progress state is internal. */\nexport interface DateRange {\n readonly start: Temporal.PlainDate;\n readonly end: Temporal.PlainDate;\n}\n\nexport interface RangeCalendarPickerProps {\n /** The selected range, controlled. The `v-model` binding target. */\n readonly modelValue?: DateRange | null;\n\n /** The uncontrolled initial selection. */\n readonly defaultValue?: DateRange | null;\n\n /** The initial visible month (uncontrolled). */\n readonly defaultMonth?: Temporal.PlainDate;\n\n /** The minimum selectable date. */\n readonly min?: Temporal.PlainDate | null;\n\n /** The maximum selectable date. */\n readonly max?: Temporal.PlainDate | null;\n\n /**\n * The custom disable predicate.\n *\n * Kept a PROP, not an emit: it RETURNS a value the grid reads on every cell.\n */\n readonly isDisabled?: (date: Temporal.PlainDate) => boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, ref, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { Temporal as TemporalValue } from 'temporal-polyfill';\nimport { AriaAttribute } from '../../../foundation/dom';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { isDateDisabled, isInRange, isSameDay, isToday, startOfMonth, today } from '../DateExtensions';\nimport MonthGrid from '../MonthGrid.vue';\nimport type { MonthGridDayProps } from '../MonthGrid.vue';\n\n/** Renders a month grid where two clicks set a range, previewing the span under the pointer. */\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'RangeCalendarPicker', inheritAttrs: false });\n\nconst props = defineProps<RangeCalendarPickerProps>();\n\nconst emit = defineEmits<{\n /** Fires when the second click completes the range, or the first clears it. The `v-model` half. */\n 'update:modelValue': [range: DateRange | null];\n}>();\n\nconst attrs = useAttrs();\n\nconst controlled = useControlled<DateRange | null>({\n /* `??` is wrong here — `null` is a MEANINGFUL selection (\"nothing selected\"), and `??`\n would fall through it to `modelValue`. Only `undefined` means \"not controlled\". */\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? null,\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst range = controlled.value;\n\n/* `today()` reads the host time zone through `Temporal.Now` — universal, not a browser\n global, so both seeds are safe on the server. */\nconst viewMonth = ref<Temporal.PlainDate>(startOfMonth(props.defaultMonth ?? range.value?.start ?? today()));\nconst focusedDate = ref<Temporal.PlainDate>(range.value?.start ?? today());\nconst hoveredDate = ref<Temporal.PlainDate | null>(null);\nconst pendingStart = ref<Temporal.PlainDate | null>(null);\n\nfunction setViewMonth(next: Temporal.PlainDate): void {\n viewMonth.value = next;\n}\n\nfunction setFocusedDate(next: Temporal.PlainDate): void {\n focusedDate.value = next;\n}\n\nfunction isDayDisabled(d: Temporal.PlainDate): boolean {\n return isDateDisabled(d, { min: props.min, max: props.max, isDisabled: props.isDisabled });\n}\n\nfunction onDayActivate(date: Temporal.PlainDate): void {\n if (!pendingStart.value) {\n /* First click opens a pending range; the public value clears until both ends are set\n (a `DateRange` always carries a real start and end). */\n pendingStart.value = date;\n controlled.setValue(null);\n return;\n }\n const forward = TemporalValue.PlainDate.compare(pendingStart.value, date) <= 0;\n const finalStart = forward ? pendingStart.value : date;\n const finalEnd = forward ? date : pendingStart.value;\n controlled.setValue({ start: finalStart, end: finalEnd });\n pendingStart.value = null;\n}\n\nconst previewEnd = computed(() => (pendingStart.value ? hoveredDate.value : (range.value?.end ?? null)));\n\nfunction isStart(d: Temporal.PlainDate): boolean {\n return isSameDay(d, range.value?.start ?? null) || isSameDay(d, pendingStart.value);\n}\n\nfunction isEnd(d: Temporal.PlainDate): boolean {\n return isSameDay(d, range.value?.end ?? null);\n}\n\nfunction inRange(d: Temporal.PlainDate): boolean {\n return isInRange(d, pendingStart.value ?? range.value?.start, previewEnd.value);\n}\n\nfunction dayProps(date: Temporal.PlainDate): MonthGridDayProps {\n const startCell = isStart(date);\n const endCell = isEnd(date);\n const rangeCell = inRange(date) && !startCell && !endCell;\n const selected = startCell || endCell;\n return {\n [AriaAttribute.Selected]: selected,\n 'data-range-start': startCell ? '' : undefined,\n 'data-range-end': endCell ? '' : undefined,\n 'data-in-range': rangeCell ? '' : undefined,\n onPointerenter: () => {\n hoveredDate.value = date;\n },\n onPointerleave: () => {\n if (isSameDay(hoveredDate.value, date)) hoveredDate.value = null;\n },\n /*\n * Every painted cell has to restate BOTH `hover:bg-*` and `hover:text-*`. `MonthGrid`'s\n * base hover is `hover:bg-primary/10 hover:text-foreground`, and a `:hover` rule outranks\n * the unqualified `bg-primary` / `bg-primary-soft` here on specificity — so without an\n * explicit hover the selected ends and the in-range run lost their fill the moment the\n * pointer touched them. tailwind-merge only resolves same-group + same-variant pairs.\n *\n * The ladder: `/90` on the solid ends (the package's solid-surface hover), `/25` on the\n * in-range run — a step deeper than its `primary-soft` fill, so the hover reads against\n * the range without competing with the ends.\n */\n class: cn(\n isToday(date) && !startCell && !endCell && 'border border-border rounded-sm',\n rangeCell &&\n 'bg-primary-soft text-primary-soft-foreground hover:bg-primary/25 hover:text-primary-soft-foreground',\n startCell && 'bg-primary text-primary-foreground rounded-l-sm hover:bg-primary/90 hover:text-primary-foreground',\n endCell && 'bg-primary text-primary-foreground rounded-r-sm hover:bg-primary/90 hover:text-primary-foreground',\n !startCell && !endCell && !rangeCell && 'rounded-sm',\n ),\n };\n}\n\n/* Never a declared prop — a declared `'aria-label'` would arrive as `props.ariaLabel`. It is\n read off the attrs so it can be relocated onto the inner grid. */\nconst ariaLabel = computed(() => (attrs[AriaAttribute.Label] as string | undefined) ?? 'Date range');\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', AriaAttribute.Label]);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootClass = computed(() => cn(attrs.class as ClassValue));\n\nconst root = useTemplateRef<HTMLDivElement>('root');\n\n/** The rendered element. */\ndefineExpose({ el: root });\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n controlled.reset();\n});\n</script>\n\n<template>\n <div :key=\"formResetRevision\" ref=\"root\" :class=\"rootClass\" v-bind=\"passthroughAttrs\">\n <MonthGrid\n :view-month=\"viewMonth\"\n @update:viewMonth=\"setViewMonth\"\n :focused-date=\"focusedDate\"\n @update:focusedDate=\"setFocusedDate\"\n :is-day-disabled=\"isDayDisabled\"\n :on-day-activate=\"onDayActivate\"\n :day-props=\"dayProps\"\n :aria-label=\"ariaLabel\"\n />\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </div>\n</template>\n","<script lang=\"ts\">\nimport type { Temporal } from 'temporal-polyfill';\nimport type { SelectPickerSize } from '../selectPicker';\nimport type { InputState } from '../InputStyles';\n\nexport interface DatePickerProps {\n /** The selected date, controlled. The `v-model` binding target. */\n readonly modelValue?: Temporal.PlainDate | null;\n\n /** The uncontrolled initial selection. */\n readonly defaultValue?: Temporal.PlainDate | null;\n\n /** The empty-state text on the trigger. */\n readonly placeholder?: string;\n\n /**\n * The trigger's date formatter.\n *\n * Kept a PROP, not an emit: it RETURNS the rendered string, which an emit cannot do.\n */\n readonly format?: (date: Temporal.PlainDate) => string;\n\n /** The minimum selectable date. */\n readonly min?: Temporal.PlainDate | null;\n\n /** The maximum selectable date. */\n readonly max?: Temporal.PlainDate | null;\n\n /** The custom per-day disable predicate. Also a returning prop. */\n readonly isDisabled?: (date: Temporal.PlainDate) => boolean;\n\n /** The invalid surface override. Falls back to the surrounding form control's `isInvalid`. */\n readonly isInvalid?: boolean;\n\n /** The hidden input name; when set, a hidden input ships the ISO value with form submission. */\n readonly name?: string;\n\n /** The trigger size. */\n readonly size?: SelectPickerSize;\n\n /** The validity surface. */\n readonly state?: InputState;\n\n /** The trigger's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly disabled?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, ref, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { Calendar as CalendarIcon } from 'lucide-vue-next';\nimport { AriaAttribute } from '../../../foundation/dom';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../overlays';\nimport { selectTriggerVariants } from '../selectPicker/SelectPicker.variants';\nimport { InputState as InputStateValue } from '../InputStyles';\nimport { formatISODate, today } from '../DateExtensions';\nimport CalendarPicker from '../calendarPicker/CalendarPicker.vue';\n\n/** Renders a trigger button that opens a popover `CalendarPicker` and shows the picked date. */\n/* `inheritAttrs: false` so `class` folds into the trigger's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'DatePicker', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<DatePickerProps>(), {\n placeholder: 'Pick a date',\n format: (d: Temporal.PlainDate) => d.toLocaleString(undefined, { year: 'numeric', month: 'short', day: 'numeric' }),\n /* Explicit `undefined` defaults are load-bearing: each flag falls back to the form control\n context, and Vue casts an absent `boolean` prop to `false` — which would shadow it. */\n isInvalid: undefined,\n disabled: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader picks a day in the popover. The `v-model` half. */\n 'update:modelValue': [date: Temporal.PlainDate | null];\n}>();\n\nconst attrs = useAttrs();\n\n/* Inherits id/disabled/invalid/labelledby/describedby from a surrounding <Field>;\n standalone props win when provided, context fills the gaps (SelectPicker parity). */\nconst field = useFormControl();\n\nconst finalDisabled = computed(() => props.disabled ?? field?.isDisabled);\nconst finalInvalid = computed(() => props.isInvalid ?? field?.isInvalid);\n\nconst controlled = useControlled<Temporal.PlainDate | null>({\n /* `??` is wrong here — `null` is a MEANINGFUL selection, and `??` would fall through it\n to `modelValue`. Only `undefined` means \"not controlled\". */\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? null,\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst date = controlled.value;\n\nconst open = ref(false);\n\nfunction onCalendarChange(next: Temporal.PlainDate | null): void {\n controlled.setValue(next);\n open.value = false;\n}\n\nconst triggerState = computed(\n () => props.state ?? (finalInvalid.value ? InputStateValue.Invalid : InputStateValue.Default),\n);\n\nconst displayText = computed(() => (date.value ? props.format(date.value) : props.placeholder));\n\n/* Never a declared prop — a declared `'aria-label'` would arrive as `props.ariaLabel`. */\nconst ariaLabel = computed(() => attrs[AriaAttribute.Label] as string | undefined);\n\nconst triggerId = computed(() => props.id ?? field?.id);\n/* Names the trigger from the Field label when present; an explicit aria-label always wins. */\nconst labelledBy = computed(() => (ariaLabel.value ? undefined : field?.labelledBy));\nconst describedBy = computed(() => field?.describedBy);\nconst ariaInvalid = computed(() => triggerState.value === InputStateValue.Invalid || undefined);\n\nconst defaultMonth = computed(() => date.value ?? today());\nconst hiddenValue = computed(() => formatISODate(date.value));\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', AriaAttribute.Label]);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst triggerClass = computed(() =>\n cn(selectTriggerVariants({ size: props.size, state: triggerState.value }), attrs.class as ClassValue),\n);\n\nconst labelClass = computed(() => cn('truncate', !date.value && 'text-muted-foreground'));\n\nconst trigger = useTemplateRef<{ el: HTMLElement | null }>('trigger');\n\n/** The rendered trigger — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: computed(() => trigger.value?.el ?? null) });\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n controlled.reset();\n});\n</script>\n\n<template>\n <Popover :key=\"formResetRevision\" v-model:open=\"open\" placement=\"bottom-start\" :offset=\"6\">\n <PopoverTrigger\n ref=\"trigger\"\n :id=\"triggerId\"\n :disabled=\"finalDisabled\"\n :aria-invalid=\"ariaInvalid\"\n :aria-label=\"ariaLabel\"\n :aria-labelledby=\"labelledBy\"\n :aria-describedby=\"describedBy\"\n :class=\"triggerClass\"\n v-bind=\"passthroughAttrs\"\n >\n <!-- `muted-foreground` (not `subtle-foreground`): the trigger surface is muted, where\n subtle is only 4.2:1 (see index.css). -->\n <span :class=\"labelClass\">{{ displayText }}</span>\n <CalendarIcon class=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n </PopoverTrigger>\n <PopoverContent is-bare>\n <CalendarPicker\n :model-value=\"date\"\n :default-month=\"defaultMonth\"\n :min=\"min\"\n :max=\"max\"\n :is-disabled=\"isDisabled\"\n @update:modelValue=\"onCalendarChange\"\n />\n </PopoverContent>\n <input v-if=\"name\" type=\"hidden\" :name=\"name\" :value=\"hiddenValue\" />\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </Popover>\n</template>\n","<script lang=\"ts\">\nimport type { Temporal } from 'temporal-polyfill';\nimport type { SelectPickerSize } from '../selectPicker';\nimport type { InputState } from '../InputStyles';\n\nexport interface TimePickerProps {\n /** The selected time, controlled. The `v-model` binding target. */\n readonly modelValue?: Temporal.PlainTime | null;\n\n /** The uncontrolled initial selection. */\n readonly defaultValue?: Temporal.PlainTime | null;\n\n /** The minute interval. Default 5. */\n readonly minuteStep?: number;\n\n /** The empty-state text on the trigger. */\n readonly placeholder?: string;\n\n /**\n * The trigger's time formatter.\n *\n * Kept a PROP, not an emit: it RETURNS the rendered string, which an emit cannot do.\n */\n readonly format?: (time: Temporal.PlainTime) => string;\n\n /** The invalid surface override. Falls back to the surrounding form control's `isInvalid`. */\n readonly isInvalid?: boolean;\n\n /** The hidden input name; when set, a hidden input ships the value with form submission. */\n readonly name?: string;\n\n /** The trigger size. */\n readonly size?: SelectPickerSize;\n\n /** The validity surface. */\n readonly state?: InputState;\n\n /** The trigger's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly disabled?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, ref, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { Clock } from 'lucide-vue-next';\nimport { AriaAttribute } from '../../../foundation/dom';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../overlays';\nimport { selectTriggerVariants } from '../selectPicker/SelectPicker.variants';\nimport { InputState as InputStateValue } from '../InputStyles';\nimport TimeColumns from '../TimeColumns.vue';\n\n/** Renders a trigger button that opens popover hour and minute columns and shows the picked time. */\n/* `inheritAttrs: false` so `class` folds into the trigger's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'TimePicker', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<TimePickerProps>(), {\n minuteStep: 5,\n placeholder: 'Pick a time',\n format: (t: Temporal.PlainTime) => t.toString({ smallestUnit: 'minute' }),\n /* Explicit `undefined` defaults are load-bearing: each flag falls back to the form control\n context, and Vue casts an absent `boolean` prop to `false` — which would shadow it. */\n isInvalid: undefined,\n disabled: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader picks an hour or a minute in the popover. The `v-model` half. */\n 'update:modelValue': [time: Temporal.PlainTime | null];\n}>();\n\nconst attrs = useAttrs();\n\n/* Inherits id/disabled/invalid/labelledby/describedby from a surrounding <Field>;\n standalone props win when provided, context fills the gaps (SelectPicker parity). */\nconst field = useFormControl();\n\nconst finalDisabled = computed(() => props.disabled ?? field?.isDisabled);\nconst finalInvalid = computed(() => props.isInvalid ?? field?.isInvalid);\n\nconst controlled = useControlled<Temporal.PlainTime | null>({\n /* `??` is wrong here — `null` is a MEANINGFUL selection, and `??` would fall through it\n to `modelValue`. Only `undefined` means \"not controlled\". */\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? null,\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst time = controlled.value;\n\nconst open = ref(false);\n\nconst triggerState = computed(\n () => props.state ?? (finalInvalid.value ? InputStateValue.Invalid : InputStateValue.Default),\n);\n\n/* The columns live in the shared `TimeColumns` — the same panel `TimeInput` and\n `DateTimeInput` open, so the three cannot drift. */\nfunction onColumnsChange(next: Temporal.PlainTime): void {\n controlled.setValue(next);\n}\n\nconst displayText = computed(() => (time.value ? props.format(time.value) : props.placeholder));\n\n/* Never a declared prop — a declared `'aria-label'` would arrive as `props.ariaLabel`. */\nconst ariaLabel = computed(() => attrs[AriaAttribute.Label] as string | undefined);\n\nconst triggerId = computed(() => props.id ?? field?.id);\n/* Names the trigger from the Field label when present; an explicit aria-label always wins. */\nconst labelledBy = computed(() => (ariaLabel.value ? undefined : field?.labelledBy));\nconst describedBy = computed(() => field?.describedBy);\nconst ariaInvalid = computed(() => triggerState.value === InputStateValue.Invalid || undefined);\n\nconst hiddenValue = computed(() => time.value?.toString({ smallestUnit: 'minute' }) ?? '');\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', AriaAttribute.Label]);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst triggerClass = computed(() =>\n cn(selectTriggerVariants({ size: props.size, state: triggerState.value }), attrs.class as ClassValue),\n);\n\nconst labelClass = computed(() => cn('truncate', !time.value && 'text-muted-foreground'));\n\nconst trigger = useTemplateRef<{ el: HTMLElement | null }>('trigger');\n\n/** The rendered trigger — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: computed(() => trigger.value?.el ?? null) });\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n controlled.reset();\n});\n</script>\n\n<template>\n <Popover :key=\"formResetRevision\" v-model:open=\"open\" placement=\"bottom-start\" :offset=\"6\">\n <PopoverTrigger\n ref=\"trigger\"\n :id=\"triggerId\"\n :disabled=\"finalDisabled\"\n :aria-invalid=\"ariaInvalid\"\n :aria-label=\"ariaLabel\"\n :aria-labelledby=\"labelledBy\"\n :aria-describedby=\"describedBy\"\n :class=\"triggerClass\"\n v-bind=\"passthroughAttrs\"\n >\n <!-- `muted-foreground` (not `subtle-foreground`): the trigger surface is muted, where\n subtle is only 4.2:1 (see index.css). -->\n <span :class=\"labelClass\">{{ displayText }}</span>\n <Clock class=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n </PopoverTrigger>\n <PopoverContent is-bare>\n <TimeColumns :model-value=\"time\" :minute-step=\"minuteStep\" @update:modelValue=\"onColumnsChange\" />\n </PopoverContent>\n <input v-if=\"name && time\" type=\"hidden\" :name=\"name\" :value=\"hiddenValue\" />\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </Popover>\n</template>\n","<script lang=\"ts\">\nimport type { Temporal } from 'temporal-polyfill';\nimport type { SelectPickerSize } from '../selectPicker';\nimport type { InputState } from '../InputStyles';\nimport type { DateRange } from '../rangeCalendarPicker';\n\nexport interface DateRangePickerProps {\n /** The selected range, controlled. The `v-model` binding target. */\n readonly modelValue?: DateRange | null;\n\n /** The uncontrolled initial selection. */\n readonly defaultValue?: DateRange | null;\n\n /** The empty-state text on the trigger. */\n readonly placeholder?: string;\n\n /**\n * The trigger's date formatter.\n *\n * Kept a PROP, not an emit: it RETURNS the rendered string, which an emit cannot do.\n */\n readonly format?: (date: Temporal.PlainDate) => string;\n\n /** The minimum selectable date. */\n readonly min?: Temporal.PlainDate | null;\n\n /** The maximum selectable date. */\n readonly max?: Temporal.PlainDate | null;\n\n /** The custom per-day disable predicate. Also a returning prop. */\n readonly isDisabled?: (date: Temporal.PlainDate) => boolean;\n\n /** The invalid surface override. Falls back to the surrounding form control's `isInvalid`. */\n readonly isInvalid?: boolean;\n\n /** The hidden input name; when set, two hidden inputs (`{name}_start`, `{name}_end`) ship the ISO values. */\n readonly name?: string;\n\n /** The trigger size. */\n readonly size?: SelectPickerSize;\n\n /** The validity surface. */\n readonly state?: InputState;\n\n /** The trigger's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly disabled?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, ref, useAttrs, useTemplateRef, watch } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { Calendar as CalendarIcon } from 'lucide-vue-next';\nimport { AriaAttribute } from '../../../foundation/dom';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../overlays';\nimport { selectTriggerVariants } from '../selectPicker/SelectPicker.variants';\nimport { InputState as InputStateValue } from '../InputStyles';\nimport { formatISODate, today } from '../DateExtensions';\nimport RangeCalendarPicker from '../rangeCalendarPicker/RangeCalendarPicker.vue';\n\n/** Renders a trigger button that opens a popover `RangeCalendarPicker` and closes once both ends are set. */\n/* `inheritAttrs: false` so `class` folds into the trigger's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'DateRangePicker', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<DateRangePickerProps>(), {\n placeholder: 'Pick a range',\n format: (d: Temporal.PlainDate) => d.toLocaleString(undefined, { year: 'numeric', month: 'short', day: 'numeric' }),\n /* Explicit `undefined` defaults are load-bearing: each flag falls back to the form control\n context, and Vue casts an absent `boolean` prop to `false` — which would shadow it. */\n isInvalid: undefined,\n disabled: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when a click in the popover completes or clears the range. The `v-model` half. */\n 'update:modelValue': [range: DateRange | null];\n}>();\n\nconst attrs = useAttrs();\n\n/* Inherits id/disabled/invalid/labelledby/describedby from a surrounding <Field>;\n standalone props win when provided, context fills the gaps (SelectPicker parity). */\nconst field = useFormControl();\n\nconst finalDisabled = computed(() => props.disabled ?? field?.isDisabled);\nconst finalInvalid = computed(() => props.isInvalid ?? field?.isInvalid);\n\nconst controlled = useControlled<DateRange | null>({\n /* `??` is wrong here — `null` is a MEANINGFUL selection, and `??` would fall through it\n to `modelValue`. Only `undefined` means \"not controlled\". */\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? null,\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst range = controlled.value;\n\nconst open = ref(false);\n\n/*\n * Auto-close when both ends are picked. NOT `immediate` — an immediate watcher runs during\n * setup, on the server too, and the React original's effect only mattered after a change.\n */\nlet wasComplete = false;\nwatch([range, open], ([nextRange, isOpen]) => {\n const complete = Boolean(nextRange?.start && nextRange?.end);\n if (complete && !wasComplete && isOpen) open.value = false;\n wasComplete = complete;\n});\n\nfunction onCalendarChange(next: DateRange | null): void {\n controlled.setValue(next);\n}\n\nconst triggerState = computed(\n () => props.state ?? (finalInvalid.value ? InputStateValue.Invalid : InputStateValue.Default),\n);\n\nconst display = computed(() => {\n const current = range.value;\n if (!current?.start) return null;\n return current.end\n ? `${props.format(current.start)} → ${props.format(current.end)}`\n : `${props.format(current.start)} → …`;\n});\n\nconst displayText = computed(() => display.value ?? props.placeholder);\n\n/* Never a declared prop — a declared `'aria-label'` would arrive as `props.ariaLabel`. */\nconst ariaLabel = computed(() => attrs[AriaAttribute.Label] as string | undefined);\n\nconst triggerId = computed(() => props.id ?? field?.id);\n/* Names the trigger from the Field label when present; an explicit aria-label always wins. */\nconst labelledBy = computed(() => (ariaLabel.value ? undefined : field?.labelledBy));\nconst describedBy = computed(() => field?.describedBy);\nconst ariaInvalid = computed(() => triggerState.value === InputStateValue.Invalid || undefined);\n\nconst defaultMonth = computed(() => range.value?.start ?? today());\nconst hiddenStart = computed(() => formatISODate(range.value?.start));\nconst hiddenEnd = computed(() => formatISODate(range.value?.end));\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', AriaAttribute.Label]);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst triggerClass = computed(() =>\n cn(selectTriggerVariants({ size: props.size, state: triggerState.value }), attrs.class as ClassValue),\n);\n\nconst labelClass = computed(() => cn('truncate', !display.value && 'text-muted-foreground'));\n\nconst trigger = useTemplateRef<{ el: HTMLElement | null }>('trigger');\n\n/** The rendered trigger — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: computed(() => trigger.value?.el ?? null) });\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n controlled.reset();\n});\n</script>\n\n<template>\n <Popover :key=\"formResetRevision\" v-model:open=\"open\" placement=\"bottom-start\" :offset=\"6\">\n <PopoverTrigger\n ref=\"trigger\"\n :id=\"triggerId\"\n :disabled=\"finalDisabled\"\n :aria-invalid=\"ariaInvalid\"\n :aria-label=\"ariaLabel\"\n :aria-labelledby=\"labelledBy\"\n :aria-describedby=\"describedBy\"\n :class=\"triggerClass\"\n v-bind=\"passthroughAttrs\"\n >\n <!-- `muted-foreground` (not `subtle-foreground`): the trigger surface is muted, where\n subtle is only 4.2:1 (see index.css). -->\n <span :class=\"labelClass\">{{ displayText }}</span>\n <CalendarIcon class=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n </PopoverTrigger>\n <PopoverContent is-bare>\n <RangeCalendarPicker\n :model-value=\"range\"\n :default-month=\"defaultMonth\"\n :min=\"min\"\n :max=\"max\"\n :is-disabled=\"isDisabled\"\n @update:modelValue=\"onCalendarChange\"\n />\n </PopoverContent>\n <template v-if=\"name\">\n <input type=\"hidden\" :name=\"`${name}_start`\" :value=\"hiddenStart\" />\n <input type=\"hidden\" :name=\"`${name}_end`\" :value=\"hiddenEnd\" />\n </template>\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </Popover>\n</template>\n","// Color parsing + conversion helpers for ColorPicker, ColorArea, ColorWheelInput,\n// ColorSliderInput, ColorSwatchPreview, ColorInput. Co-located in `forms/` so imports\n// stay within-domain.\n//\n// Canonical representation: HSV (hue 0–360, saturation 0–1, value 0–1) plus\n// alpha 0–1. HSV picks the cleanest geometry for picker UIs (saturation/value\n// square, hue ring). External interface is hex strings (#RRGGBB or #RRGGBBAA).\n\nexport interface RGB {\n r: number; // 0–255\n g: number; // 0–255\n b: number; // 0–255\n a?: number; // 0–1 (default 1)\n}\n\nexport interface HSV {\n h: number; // 0–360\n s: number; // 0–1\n v: number; // 0–1\n a?: number; // 0–1\n}\n\nexport interface HSL {\n h: number; // 0–360\n s: number; // 0–1\n l: number; // 0–1\n a?: number; // 0–1\n}\n\nexport function clamp01(n: number): number {\n return Math.max(0, Math.min(1, n));\n}\n\nexport function clampHue(h: number): number {\n let v = h % 360;\n if (v < 0) v += 360;\n return v;\n}\n\nexport function clampByte(n: number): number {\n return Math.max(0, Math.min(255, Math.round(n)));\n}\n\n// ───────── hex ↔ rgb ─────────\n\n/** Parse \"#RGB\", \"#RGBA\", \"#RRGGBB\", or \"#RRGGBBAA\". Returns null on invalid. */\nexport function parseHex(input: string | null | undefined): RGB | null {\n if (!input) return null;\n const s = input.trim().replace(/^#/, '');\n let m: string | null = null;\n if (/^[0-9a-fA-F]{3}$/.test(s)) {\n m = s\n .split('')\n .map((c) => c + c)\n .join('');\n } else if (/^[0-9a-fA-F]{4}$/.test(s)) {\n m = s\n .split('')\n .map((c) => c + c)\n .join('');\n } else if (/^[0-9a-fA-F]{6}$/.test(s) || /^[0-9a-fA-F]{8}$/.test(s)) {\n m = s;\n }\n if (!m) return null;\n const r = parseInt(m.slice(0, 2), 16);\n const g = parseInt(m.slice(2, 4), 16);\n const b = parseInt(m.slice(4, 6), 16);\n const a = m.length === 8 ? parseInt(m.slice(6, 8), 16) / 255 : 1;\n return { r, g, b, a };\n}\n\n/** Format RGB → \"#RRGGBB\" (or \"#RRGGBBAA\" if alpha < 1). */\nexport function formatHex(rgb: RGB | null | undefined, options?: { withAlpha?: boolean }): string {\n if (!rgb) return '';\n const r = clampByte(rgb.r).toString(16).padStart(2, '0');\n const g = clampByte(rgb.g).toString(16).padStart(2, '0');\n const b = clampByte(rgb.b).toString(16).padStart(2, '0');\n const includeAlpha = options?.withAlpha ?? (rgb.a !== undefined && rgb.a < 1);\n if (includeAlpha) {\n const a = clampByte((rgb.a ?? 1) * 255)\n .toString(16)\n .padStart(2, '0');\n return `#${r}${g}${b}${a}`;\n }\n return `#${r}${g}${b}`;\n}\n\n// ───────── rgb ↔ hsv ─────────\n\nexport function rgbToHsv({ r, g, b, a = 1 }: RGB): HSV {\n const rn = r / 255;\n const gn = g / 255;\n const bn = b / 255;\n const max = Math.max(rn, gn, bn);\n const min = Math.min(rn, gn, bn);\n const d = max - min;\n let h = 0;\n if (d !== 0) {\n if (max === rn) h = ((gn - bn) / d) % 6;\n else if (max === gn) h = (bn - rn) / d + 2;\n else h = (rn - gn) / d + 4;\n h *= 60;\n if (h < 0) h += 360;\n }\n const s = max === 0 ? 0 : d / max;\n const v = max;\n return { h, s, v, a };\n}\n\nexport function hsvToRgb({ h, s, v, a = 1 }: HSV): RGB {\n const c = v * s;\n const hh = clampHue(h) / 60;\n const x = c * (1 - Math.abs((hh % 2) - 1));\n let r1 = 0;\n let g1 = 0;\n let b1 = 0;\n if (hh >= 0 && hh < 1) [r1, g1, b1] = [c, x, 0];\n else if (hh < 2) [r1, g1, b1] = [x, c, 0];\n else if (hh < 3) [r1, g1, b1] = [0, c, x];\n else if (hh < 4) [r1, g1, b1] = [0, x, c];\n else if (hh < 5) [r1, g1, b1] = [x, 0, c];\n else [r1, g1, b1] = [c, 0, x];\n const m = v - c;\n return {\n r: Math.round((r1 + m) * 255),\n g: Math.round((g1 + m) * 255),\n b: Math.round((b1 + m) * 255),\n a,\n };\n}\n\n// ───────── rgb ↔ hsl ─────────\n\nexport function rgbToHsl({ r, g, b, a = 1 }: RGB): HSL {\n const rn = r / 255;\n const gn = g / 255;\n const bn = b / 255;\n const max = Math.max(rn, gn, bn);\n const min = Math.min(rn, gn, bn);\n const d = max - min;\n let h = 0;\n let s = 0;\n const l = (max + min) / 2;\n if (d !== 0) {\n s = d / (1 - Math.abs(2 * l - 1));\n if (max === rn) h = ((gn - bn) / d) % 6;\n else if (max === gn) h = (bn - rn) / d + 2;\n else h = (rn - gn) / d + 4;\n h *= 60;\n if (h < 0) h += 360;\n }\n return { h, s, l, a };\n}\n\nexport function hslToRgb({ h, s, l, a = 1 }: HSL): RGB {\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const hh = clampHue(h) / 60;\n const x = c * (1 - Math.abs((hh % 2) - 1));\n let r1 = 0;\n let g1 = 0;\n let b1 = 0;\n if (hh >= 0 && hh < 1) [r1, g1, b1] = [c, x, 0];\n else if (hh < 2) [r1, g1, b1] = [x, c, 0];\n else if (hh < 3) [r1, g1, b1] = [0, c, x];\n else if (hh < 4) [r1, g1, b1] = [0, x, c];\n else if (hh < 5) [r1, g1, b1] = [x, 0, c];\n else [r1, g1, b1] = [c, 0, x];\n const m = l - c / 2;\n return {\n r: Math.round((r1 + m) * 255),\n g: Math.round((g1 + m) * 255),\n b: Math.round((b1 + m) * 255),\n a,\n };\n}\n\n// ───────── hex ↔ hsv (most-used composite) ─────────\n\nexport function parseColorToHsv(input: string | null | undefined): HSV | null {\n const rgb = parseHex(input);\n if (!rgb) return null;\n return rgbToHsv(rgb);\n}\n\nexport function hsvToHex(hsv: HSV, options?: { withAlpha?: boolean }): string {\n return formatHex(hsvToRgb(hsv), options);\n}\n\n// ───────── format helpers ─────────\n\nexport function formatRgbString({ r, g, b, a = 1 }: RGB): string {\n if (a < 1) return `rgba(${clampByte(r)}, ${clampByte(g)}, ${clampByte(b)}, ${a.toFixed(2)})`;\n return `rgb(${clampByte(r)}, ${clampByte(g)}, ${clampByte(b)})`;\n}\n\nexport function formatHslString({ h, s, l, a = 1 }: HSL): string {\n const hh = Math.round(clampHue(h));\n const ss = Math.round(s * 100);\n const ll = Math.round(l * 100);\n if (a < 1) return `hsla(${hh}, ${ss}%, ${ll}%, ${a.toFixed(2)})`;\n return `hsl(${hh}, ${ss}%, ${ll}%)`;\n}\n","<script lang=\"ts\">\nimport type { InputSize, InputState, InputBorder, InputRing } from '../InputStyles';\nimport type { SwatchShape } from '../../display/colorSwatchPreview';\n\nexport interface ColorInputProps {\n /** The control size. */\n readonly size?: InputSize;\n /** The validity surface. */\n readonly state?: InputState;\n /** The border weight. */\n readonly border?: InputBorder;\n /** The focus-ring weight. */\n readonly ring?: InputRing;\n\n /** The committed hex, controlled. The `v-model` binding target. */\n readonly modelValue?: string | null;\n\n /** The initial hex when uncontrolled. */\n readonly defaultValue?: string | null;\n\n /** The swatch outline shape shown inside the field. */\n readonly swatchShape?: SwatchShape;\n\n /** Whether a committed hex keeps its alpha channel (`#RRGGBBAA`). */\n readonly hasAlpha?: boolean;\n\n /** The control's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly disabled?: boolean;\n\n /** The required state. Falls back to the surrounding form control's `isRequired`. */\n readonly required?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, ref, useAttrs, useTemplateRef, watch } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { inputBaseVariants, InputState as InputStateValue } from '../InputStyles';\nimport { formatHex, parseHex } from '../ColorExtensions';\nimport ColorSwatchPreview from '../../display/colorSwatchPreview/ColorSwatchPreview.vue';\nimport { SwatchShape as SwatchShapeValue } from '../../display/colorSwatchPreview';\n\n/** Renders a hex text field with a live swatch, committing on blur or Enter and reverting an unparseable draft. */\n/* `inheritAttrs: false` so `class` folds into the input's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'ColorInput', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ColorInputProps>(), {\n swatchShape: SwatchShapeValue.Square,\n hasAlpha: false,\n /* Explicit `undefined` defaults are load-bearing: each flag falls back to the form control\n context, and Vue casts an absent `boolean` prop to `false` — which would shadow the\n context with a hard \"not disabled / not required\". */\n disabled: undefined,\n required: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader commits a new hex on blur or Enter — the `v-model` half. */\n 'update:modelValue': [value: string | null];\n}>();\n\nconst attrs = useAttrs();\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useFormControl();\n\nconst controlled = useControlled<string | null>({\n /* `??` is wrong here — `null` is a MEANINGFUL committed value (\"no color\"), and `??` would\n fall through it to `modelValue`. Only `undefined` means \"not controlled\". */\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? null,\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst committed = controlled.value;\n\n/** The in-flight text — free-form while typing, reconciled with `committed` on commit. */\nconst draft = ref<string>(committed.value ?? '');\n\n/* Syncs the draft when the committed value changes from the outside. */\nwatch(committed, (next) => {\n draft.value = next ?? '';\n});\n\nfunction commitHex(text: string, hasAlpha: boolean): string | null {\n const normalised = text.startsWith('#') ? text : `#${text}`;\n const rgb = parseHex(normalised);\n if (!rgb) return null;\n return formatHex(rgb, { withAlpha: hasAlpha });\n}\n\nfunction commit(): void {\n if (!draft.value) {\n controlled.setValue(null);\n return;\n }\n const next = commitHex(draft.value, props.hasAlpha);\n if (next) {\n controlled.setValue(next);\n draft.value = next;\n } else {\n /* Invalid — revert. */\n draft.value = committed.value ?? '';\n }\n}\n\nfunction onInput(event: Event): void {\n if ((event as InputEvent).isComposing) return;\n draft.value = (event.target as HTMLInputElement).value;\n}\n\n/* Runs after any caller-supplied `@blur` (declared after `v-bind`). Not gated on\n `defaultPrevented`, unlike `onKeydown` below. */\nfunction onBlur(): void {\n commit();\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.isComposing) return;\n if (event.defaultPrevented) return;\n if (event.key === 'Enter') {\n event.preventDefault();\n commit();\n }\n}\n\nconst swatchColor = computed(() => committed.value ?? '#00000000');\n\nconst inputId = computed(() => props.id ?? ctx?.id);\nconst isDisabled = computed(() => props.disabled ?? ctx?.isDisabled);\nconst isRequired = computed(() => props.required ?? ctx?.isRequired);\nconst isInvalid = computed(() => ctx?.isInvalid || undefined);\nconst describedBy = computed(() => ctx?.describedBy);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', 'value']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst inputClass = computed(() =>\n cn(\n inputBaseVariants({\n size: props.size,\n state: props.state ?? (ctx?.isInvalid ? InputStateValue.Invalid : InputStateValue.Default),\n border: props.border,\n ring: props.ring,\n }),\n 'pl-9 font-mono uppercase',\n attrs.class as ClassValue,\n ),\n);\n\nconst root = useTemplateRef<HTMLInputElement>('root');\n\n/** The rendered `<input>`. */\nuseNativeFormReset(root, controlled.reset, () => {\n if (root.value) root.value.value = String(draft.value ?? '');\n});\n\ndefineExpose({ el: root });\n</script>\n\n<template>\n <div class=\"relative inline-flex w-full items-stretch\">\n <span class=\"pointer-events-none absolute inset-y-0 left-2 flex items-center\">\n <ColorSwatchPreview :color=\"swatchColor\" size=\"sm\" :shape=\"swatchShape\" />\n </span>\n <input\n ref=\"root\"\n type=\"text\"\n :id=\"inputId\"\n :disabled=\"isDisabled\"\n :required=\"isRequired\"\n :aria-invalid=\"isInvalid\"\n :aria-describedby=\"describedBy\"\n :spellcheck=\"false\"\n autocapitalize=\"none\"\n autocorrect=\"off\"\n :value=\"draft\"\n :class=\"inputClass\"\n v-bind=\"passthroughAttrs\"\n @input=\"onInput\"\n @compositionend=\"onInput\"\n @blur=\"onBlur\"\n @keydown=\"onKeydown\"\n />\n </div>\n</template>\n","<script lang=\"ts\">\nimport type { CSSProperties } from 'vue';\nimport type { HSV } from '../ColorExtensions';\n\n/** Defines which HSV/alpha channel a color slider drives. */\nexport const ColorChannel = {\n /** Refers to the hue channel (0–360°). */\n Hue: 'hue',\n /** Refers to the saturation channel (0–1). */\n Saturation: 'saturation',\n /** Refers to the value/brightness channel (0–1). */\n Value: 'value',\n /** Refers to the alpha/opacity channel (0–1). */\n Alpha: 'alpha',\n} as const;\n\nexport type ColorChannel = (typeof ColorChannel)[keyof typeof ColorChannel];\n\nexport interface ColorSliderInputProps {\n /** The channel the track drives. */\n readonly channel?: ColorChannel;\n\n /** The channel value, controlled. The `v-model` binding target. */\n readonly modelValue?: number;\n\n /** The initial value when uncontrolled. */\n readonly defaultValue?: number;\n\n /** The surrounding color the non-hue gradients are built from. */\n readonly color?: HSV;\n\n /** The arrow-key increment. Defaults to `1` for hue, `0.01` otherwise. */\n readonly step?: number;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly isDisabled?: boolean;\n\n /** The control's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n}\n\nexport function channelMax(channel: ColorChannel): number {\n return channel === ColorChannel.Hue ? 360 : 1;\n}\n\nexport function defaultStep(channel: ColorChannel): number {\n return channel === ColorChannel.Hue ? 1 : 0.01;\n}\n\nconst CheckerboardBackground: CSSProperties = {\n backgroundImage:\n 'linear-gradient(45deg, #ddd 25%, transparent 25%), linear-gradient(-45deg, #ddd 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #ddd 75%), linear-gradient(-45deg, transparent 75%, #ddd 75%)',\n backgroundSize: '8px 8px',\n backgroundPosition: '0 0, 0 4px, 4px -4px, -4px 0px',\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, useAttrs, useTemplateRef, type StyleValue } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { AriaAttribute } from '../../../foundation/dom';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { clamp01, clampHue, hsvToHex } from '../ColorExtensions';\n\n/** Renders a single-channel hue/saturation/value/alpha track, pointer-draggable and keyboard-operable as a slider. */\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'ColorSliderInput', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ColorSliderInputProps>(), {\n channel: ColorChannel.Hue,\n /* Explicit `undefined` default: the flag falls back to the form control context, and Vue\n casts an absent `boolean` prop to `false` — which would shadow the context. */\n isDisabled: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when a drag or arrow key lands the thumb on a new channel value — the `v-model` half. */\n 'update:modelValue': [value: number];\n}>();\n\nconst attrs = useAttrs();\n\nconst max = computed(() => channelMax(props.channel));\nconst stepValue = computed(() => props.step ?? defaultStep(props.channel));\n\nconst controlled = useControlled<number>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? 0,\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst val = controlled.value;\n\n/* Inherits id/disabled/invalid/labelling from a surrounding <Field>; explicit props win. */\nconst ctx = useFormControl();\nconst disabled = computed(() => props.isDisabled ?? ctx?.isDisabled ?? false);\n\n/* Never a declared prop — a declared `'aria-label'` would arrive as `props.ariaLabel` and\n stop reaching the DOM. It is read off the attrs so it can be relocated onto the track. */\nconst ariaLabel = computed(() => attrs[AriaAttribute.Label] as string | undefined);\n\n/* Names the track from the Field label when present; an explicit aria-label always wins. */\nconst labelledBy = computed(() => (!ariaLabel.value ? ctx?.labelledBy : undefined));\n\nconst track = useTemplateRef<HTMLDivElement>('track');\nconst root = useTemplateRef<HTMLDivElement>('root');\n\n/* `getBoundingClientRect` is safe unguarded — pointer handlers never run on the server. */\nfunction updateFromClientX(clientX: number): void {\n const node = track.value;\n if (!node) return;\n const rect = node.getBoundingClientRect();\n const ratio = clamp01((clientX - rect.left) / rect.width);\n const next = ratio * max.value;\n /* next is already within [0, max] — clampHue would wrap a full-right drag (360) back to 0. */\n controlled.setValue(props.channel === ColorChannel.Hue ? next : clamp01(next));\n}\n\nfunction onPointerdown(event: PointerEvent): void {\n if (event.defaultPrevented) return;\n if (disabled.value) return;\n event.preventDefault();\n (event.target as Element).setPointerCapture?.(event.pointerId);\n updateFromClientX(event.clientX);\n}\n\nfunction onPointermove(event: PointerEvent): void {\n if (event.defaultPrevented) return;\n if (disabled.value) return;\n if (event.buttons !== 1) return;\n updateFromClientX(event.clientX);\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.isComposing) return;\n if (event.defaultPrevented) return;\n if (disabled.value) return;\n let next = val.value;\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n next = val.value + stepValue.value;\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n next = val.value - stepValue.value;\n break;\n case 'PageUp':\n next = val.value + stepValue.value * 10;\n break;\n case 'PageDown':\n next = val.value - stepValue.value * 10;\n break;\n case 'Home':\n case 'End':\n /* Commit the extreme directly — clampHue(360) wraps to 0, which would make End act like Home. */\n event.preventDefault();\n controlled.setValue(event.key === 'Home' ? 0 : max.value);\n return;\n default:\n return;\n }\n event.preventDefault();\n controlled.setValue(props.channel === ColorChannel.Hue ? clampHue(next) : clamp01(next));\n}\n\nfunction buildGradient(channel: ColorChannel, color: HSV | undefined): string {\n if (channel === ColorChannel.Hue) {\n return 'linear-gradient(to right, hsl(0,100%,50%), hsl(60,100%,50%), hsl(120,100%,50%), hsl(180,100%,50%), hsl(240,100%,50%), hsl(300,100%,50%), hsl(360,100%,50%))';\n }\n const base: HSV = color ?? { h: 0, s: 1, v: 1 };\n if (channel === ColorChannel.Saturation) {\n const start = hsvToHex({ h: base.h, s: 0, v: base.v });\n const end = hsvToHex({ h: base.h, s: 1, v: base.v });\n return `linear-gradient(to right, ${start}, ${end})`;\n }\n if (channel === ColorChannel.Value) {\n const end = hsvToHex({ h: base.h, s: base.s, v: 1 });\n return `linear-gradient(to right, #000000, ${end})`;\n }\n // alpha\n const opaque = hsvToHex({ h: base.h, s: base.s, v: base.v });\n return `linear-gradient(to right, transparent, ${opaque})`;\n}\n\nconst isAlpha = computed(() => props.channel === ColorChannel.Alpha);\n\n/* val >= 360 pins the thumb to the right edge — clampHue would wrap the committed max back to 0. */\nconst ratio = computed(() =>\n props.channel === ColorChannel.Hue ? (val.value >= 360 ? 1 : clampHue(val.value) / 360) : clamp01(val.value),\n);\n\nconst trackStyle = computed<StyleValue>(() => ({\n backgroundImage: buildGradient(props.channel, props.color),\n ...(isAlpha.value ? { backgroundColor: 'transparent' } : null),\n}));\n\nconst thumbStyle = computed<StyleValue>(() => ({ left: `${ratio.value * 100}%` }));\n\nconst checkerboardStyle = CheckerboardBackground as StyleValue;\n\nconst controlId = computed(() => props.id ?? ctx?.id);\nconst finalAriaLabel = computed(() => ariaLabel.value ?? (labelledBy.value ? undefined : `${props.channel} slider`));\nconst valueNow = computed(() => Math.round(val.value * 100) / 100);\nconst isInvalid = computed(() => ctx?.isInvalid || undefined);\nconst describedBy = computed(() => ctx?.describedBy);\n\n/* `id` and `aria-label` belong on the inner track (the ARIA slider), not the wrapper — the\n React original placed them there too, so both are kept off the passthrough set. */\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', AriaAttribute.Label]);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootClass = computed(() => cn('relative inline-flex w-full select-none items-center', attrs.class as ClassValue));\n\nconst innerClass = computed(() =>\n cn(\n 'relative h-3 w-full rounded-full focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n disabled.value && 'pointer-events-none opacity-50',\n ),\n);\n\n/** The rendered wrapper — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: root });\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n controlled.reset();\n});\n</script>\n\n<template>\n <div :key=\"formResetRevision\" ref=\"root\" :class=\"rootClass\" v-bind=\"passthroughAttrs\">\n <div v-if=\"isAlpha\" aria-hidden=\"true\" class=\"absolute inset-0 rounded-full\" :style=\"checkerboardStyle\" />\n <div\n ref=\"track\"\n role=\"slider\"\n :id=\"controlId\"\n :tabindex=\"disabled ? -1 : 0\"\n :aria-label=\"finalAriaLabel\"\n :aria-labelledby=\"labelledBy\"\n :aria-valuemin=\"0\"\n :aria-valuemax=\"max\"\n :aria-valuenow=\"valueNow\"\n :aria-invalid=\"isInvalid\"\n :aria-describedby=\"describedBy\"\n :aria-disabled=\"disabled || undefined\"\n aria-orientation=\"horizontal\"\n :data-disabled=\"disabled ? '' : undefined\"\n :style=\"trackStyle\"\n :class=\"innerClass\"\n @pointerdown=\"onPointerdown\"\n @pointermove=\"onPointermove\"\n @keydown=\"onKeydown\"\n >\n <div\n aria-hidden=\"true\"\n class=\"absolute top-1/2 h-4 w-4 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-white bg-transparent shadow-md ring-1 ring-black/20\"\n :style=\"thumbStyle\"\n />\n </div>\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </div>\n</template>\n","<script lang=\"ts\">\nexport interface ColorAreaProps {\n /** The hue the square is tinted with (0–360). */\n readonly hue?: number;\n\n /** The saturation, controlled (0–1). The `v-model:saturation` binding target. */\n readonly saturation?: number;\n\n /** The initial saturation when uncontrolled. */\n readonly defaultSaturation?: number;\n\n /** The brightness/value, controlled (0–1). The `v-model:value` binding target. */\n readonly value?: number;\n\n /** The initial value when uncontrolled. */\n readonly defaultValue?: number;\n\n /** The arrow-key increment. `PageUp`/`PageDown` move ten steps. */\n readonly step?: number;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly isDisabled?: boolean;\n\n /** The control's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, useAttrs, useTemplateRef, type StyleValue } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { AriaAttribute } from '../../../foundation/dom';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { clamp01, hsvToHex } from '../ColorExtensions';\n\n/** Renders a two-axis saturation/value square, pointer-draggable and keyboard-operable as an ARIA slider. */\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'ColorArea', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ColorAreaProps>(), {\n hue: 0,\n step: 0.01,\n /* Explicit `undefined` default: the flag falls back to the form control context, and Vue\n casts an absent `boolean` prop to `false` — which would shadow the context. */\n isDisabled: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when a drag or arrow key lands the thumb on a new saturation — the `v-model:saturation` half. */\n 'update:saturation': [value: number];\n /** Fires when a drag or arrow key lands the thumb on a new brightness — the `v-model:value` half. */\n 'update:value': [value: number];\n}>();\n\nconst attrs = useAttrs();\n\nconst saturationControlled = useControlled<number>({\n controlled: () => props.saturation,\n default: () => props.defaultSaturation ?? 1,\n onChange: (next) => emit('update:saturation', next),\n});\nconst valueControlled = useControlled<number>({\n controlled: () => props.value,\n default: () => props.defaultValue ?? 1,\n onChange: (next) => emit('update:value', next),\n});\n\nconst s = saturationControlled.value;\nconst v = valueControlled.value;\n\n/* Inherits id/disabled/invalid/labelling from a surrounding <Field>; explicit props win. */\nconst ctx = useFormControl();\nconst disabled = computed(() => props.isDisabled ?? ctx?.isDisabled ?? false);\n\n/* Never a declared prop — a declared `'aria-label'` would arrive as `props.ariaLabel` and\n stop reaching the DOM. It is read off the attrs so it can be relocated onto the track. */\nconst ariaLabel = computed(() => attrs[AriaAttribute.Label] as string | undefined);\n\n/* Names the area from the Field label when present; an explicit aria-label always wins. */\nconst labelledBy = computed(() => (!ariaLabel.value ? ctx?.labelledBy : undefined));\n\nconst track = useTemplateRef<HTMLDivElement>('track');\n\nfunction commit(nextS: number, nextV: number): void {\n const cs = clamp01(nextS);\n const cv = clamp01(nextV);\n saturationControlled.setValue(cs);\n valueControlled.setValue(cv);\n}\n\n/* `getBoundingClientRect` is safe unguarded — pointer handlers never run on the server. */\nfunction updateFromClient(clientX: number, clientY: number): void {\n const node = track.value;\n if (!node) return;\n const rect = node.getBoundingClientRect();\n const xRatio = clamp01((clientX - rect.left) / rect.width);\n const yRatio = clamp01((clientY - rect.top) / rect.height);\n commit(xRatio, 1 - yRatio);\n}\n\nfunction onPointerdown(event: PointerEvent): void {\n if (event.defaultPrevented) return;\n if (disabled.value) return;\n event.preventDefault();\n (event.target as Element).setPointerCapture?.(event.pointerId);\n updateFromClient(event.clientX, event.clientY);\n}\n\nfunction onPointermove(event: PointerEvent): void {\n if (event.defaultPrevented) return;\n if (disabled.value || event.buttons !== 1) return;\n updateFromClient(event.clientX, event.clientY);\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.isComposing) return;\n if (event.defaultPrevented) return;\n if (disabled.value) return;\n const big = props.step * 10;\n let nextS = s.value;\n let nextV = v.value;\n switch (event.key) {\n case 'ArrowRight':\n nextS = s.value + props.step;\n break;\n case 'ArrowLeft':\n nextS = s.value - props.step;\n break;\n case 'ArrowUp':\n nextV = v.value + props.step;\n break;\n case 'ArrowDown':\n nextV = v.value - props.step;\n break;\n case 'PageUp':\n nextV = v.value + big;\n break;\n case 'PageDown':\n nextV = v.value - big;\n break;\n case 'Home':\n nextS = 0;\n nextV = 1;\n break;\n case 'End':\n nextS = 1;\n nextV = 0;\n break;\n default:\n return;\n }\n event.preventDefault();\n commit(nextS, nextV);\n}\n\nconst trackStyle = computed<StyleValue>(() => [\n attrs.style as StyleValue,\n {\n backgroundImage: 'linear-gradient(to bottom, transparent, #000), linear-gradient(to right, #fff, transparent)',\n backgroundColor: `hsl(${props.hue}, 100%, 50%)`,\n },\n]);\n\nconst thumbStyle = computed<StyleValue>(() => ({\n left: `${s.value * 100}%`,\n top: `${(1 - v.value) * 100}%`,\n backgroundColor: hsvToHex({ h: props.hue, s: s.value, v: v.value }),\n}));\n\nconst controlId = computed(() => props.id ?? ctx?.id);\nconst finalAriaLabel = computed(() => ariaLabel.value ?? (labelledBy.value ? undefined : 'Saturation and value'));\nconst valueText = computed(() => `saturation ${(s.value * 100).toFixed(0)}%, value ${(v.value * 100).toFixed(0)}%`);\nconst isInvalid = computed(() => ctx?.isInvalid || undefined);\nconst describedBy = computed(() => ctx?.describedBy);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', 'style', AriaAttribute.Label]);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootClass = computed(() =>\n cn(\n 'relative aspect-square w-full select-none rounded-md border border-border focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n disabled.value && 'pointer-events-none opacity-50',\n attrs.class as ClassValue,\n ),\n);\n\n/** The rendered element — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: track });\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n saturationControlled.reset();\n valueControlled.reset();\n});\n</script>\n\n<template>\n <div\n :key=\"formResetRevision\"\n ref=\"track\"\n role=\"slider\"\n :id=\"controlId\"\n :tabindex=\"disabled ? -1 : 0\"\n :aria-label=\"finalAriaLabel\"\n :aria-labelledby=\"labelledBy\"\n :aria-valuetext=\"valueText\"\n :aria-invalid=\"isInvalid\"\n :aria-describedby=\"describedBy\"\n :aria-disabled=\"disabled || undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n :style=\"trackStyle\"\n :class=\"rootClass\"\n v-bind=\"passthroughAttrs\"\n @pointerdown=\"onPointerdown\"\n @pointermove=\"onPointermove\"\n @keydown=\"onKeydown\"\n >\n <div\n aria-hidden=\"true\"\n :style=\"thumbStyle\"\n class=\"absolute h-4 w-4 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-white shadow-md ring-1 ring-black/20\"\n />\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </div>\n</template>\n","<script lang=\"ts\">\nexport interface ColorWheelInputProps {\n /** The hue, controlled. The `v-model` binding target. */\n readonly modelValue?: number;\n\n /** The initial hue when uncontrolled. */\n readonly defaultValue?: number;\n\n /** The outer diameter in pixels. Default 200. */\n readonly size?: number;\n\n /** The ring thickness in pixels. Default 30. */\n readonly thickness?: number;\n\n /** The arrow-key increment. */\n readonly step?: number;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly isDisabled?: boolean;\n\n /** The control's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n}\n\nfunction angleFromCenter(clientX: number, clientY: number, rect: DOMRect): number {\n const cx = rect.left + rect.width / 2;\n const cy = rect.top + rect.height / 2;\n const dx = clientX - cx;\n const dy = clientY - cy;\n const angle = (Math.atan2(dx, -dy) * 180) / Math.PI;\n return (angle + 360) % 360;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, useAttrs, useTemplateRef, type StyleValue } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { AriaAttribute } from '../../../foundation/dom';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { clampHue } from '../ColorExtensions';\n\n/** Renders a circular hue ring, pointer-draggable and fully keyboard-operable as an ARIA slider. */\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'ColorWheelInput', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ColorWheelInputProps>(), {\n size: 200,\n thickness: 30,\n step: 1,\n /* Explicit `undefined` default: the flag falls back to the form control context, and Vue\n casts an absent `boolean` prop to `false` — which would shadow it. */\n isDisabled: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when a drag or arrow key lands the thumb on a new hue — the `v-model` half. */\n 'update:modelValue': [hue: number];\n}>();\n\nconst attrs = useAttrs();\n\nconst controlled = useControlled<number>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? 0,\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst hue = controlled.value;\n\n/* Inherits id/disabled/invalid/labelling from a surrounding <Field>; explicit props win. */\nconst ctx = useFormControl();\nconst disabled = computed(() => props.isDisabled ?? ctx?.isDisabled ?? false);\n\n/* Never a declared prop — a declared `'aria-label'` would arrive as `props.ariaLabel` and\n stop reaching the DOM. It is read off the attrs so it can be relocated onto the wheel. */\nconst ariaLabel = computed(() => attrs[AriaAttribute.Label] as string | undefined);\n\n/* Names the wheel from the Field label when present; an explicit aria-label always wins. */\nconst labelledBy = computed(() => (!ariaLabel.value ? ctx?.labelledBy : undefined));\n\nconst track = useTemplateRef<HTMLDivElement>('track');\n\n/* `getBoundingClientRect` is safe unguarded — pointer handlers never run on the server. */\nfunction updateFromClient(clientX: number, clientY: number): void {\n const node = track.value;\n if (!node) return;\n controlled.setValue(clampHue(angleFromCenter(clientX, clientY, node.getBoundingClientRect())));\n}\n\nfunction onPointerdown(event: PointerEvent): void {\n if (event.defaultPrevented) return;\n if (disabled.value) return;\n event.preventDefault();\n (event.target as Element).setPointerCapture?.(event.pointerId);\n updateFromClient(event.clientX, event.clientY);\n}\n\nfunction onPointermove(event: PointerEvent): void {\n if (event.defaultPrevented) return;\n if (disabled.value || event.buttons !== 1) return;\n updateFromClient(event.clientX, event.clientY);\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.isComposing) return;\n if (event.defaultPrevented) return;\n if (disabled.value) return;\n let next = hue.value;\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowDown':\n next = hue.value + props.step;\n break;\n case 'ArrowLeft':\n case 'ArrowUp':\n next = hue.value - props.step;\n break;\n case 'PageUp':\n next = hue.value + props.step * 10;\n break;\n case 'PageDown':\n next = hue.value - props.step * 10;\n break;\n case 'Home':\n next = 0;\n break;\n case 'End':\n next = 359;\n break;\n default:\n return;\n }\n event.preventDefault();\n controlled.setValue(clampHue(next));\n}\n\nconst radius = computed(() => (props.size - props.thickness) / 2);\n\n/* Numeric CSS lengths are spelled with their unit — React's style object auto-appended `px`,\n Vue's does not, so a bare `200` would be dropped as an invalid declaration. */\nconst wheelStyle = computed<StyleValue>(() => {\n const inner = radius.value - props.thickness / 2;\n const outer = radius.value + props.thickness / 2;\n const mask = `radial-gradient(circle, transparent ${inner}px, black ${inner + 1}px, black ${outer}px, transparent ${outer + 1}px)`;\n return {\n width: `${props.size}px`,\n height: `${props.size}px`,\n background:\n 'conic-gradient(from 0deg, hsl(0,100%,50%), hsl(60,100%,50%), hsl(120,100%,50%), hsl(180,100%,50%), hsl(240,100%,50%), hsl(300,100%,50%), hsl(360,100%,50%))',\n WebkitMaskImage: mask,\n maskImage: mask,\n };\n});\n\nconst thumbStyle = computed<StyleValue>(() => {\n const angleRad = (hue.value * Math.PI) / 180;\n return {\n left: `${props.size / 2 + radius.value * Math.sin(angleRad)}px`,\n top: `${props.size / 2 - radius.value * Math.cos(angleRad)}px`,\n backgroundColor: `hsl(${hue.value}, 100%, 50%)`,\n };\n});\n\nconst controlId = computed(() => props.id ?? ctx?.id);\nconst finalAriaLabel = computed(() => ariaLabel.value ?? (labelledBy.value ? undefined : 'Hue'));\nconst valueNow = computed(() => Math.round(hue.value));\nconst isInvalid = computed(() => ctx?.isInvalid || undefined);\nconst describedBy = computed(() => ctx?.describedBy);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', 'style', AriaAttribute.Label]);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootClass = computed(() =>\n cn(\n 'relative inline-block select-none rounded-full focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring',\n disabled.value && 'pointer-events-none opacity-50',\n attrs.class as ClassValue,\n ),\n);\n\n/** The rendered element — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: track });\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n controlled.reset();\n});\n</script>\n\n<template>\n <div\n :key=\"formResetRevision\"\n ref=\"track\"\n role=\"slider\"\n :id=\"controlId\"\n :tabindex=\"disabled ? -1 : 0\"\n :aria-label=\"finalAriaLabel\"\n :aria-labelledby=\"labelledBy\"\n :aria-valuemin=\"0\"\n :aria-valuemax=\"360\"\n :aria-valuenow=\"valueNow\"\n :aria-invalid=\"isInvalid\"\n :aria-describedby=\"describedBy\"\n :aria-disabled=\"disabled || undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n :style=\"wheelStyle\"\n :class=\"rootClass\"\n v-bind=\"passthroughAttrs\"\n @pointerdown=\"onPointerdown\"\n @pointermove=\"onPointermove\"\n @keydown=\"onKeydown\"\n >\n <div\n aria-hidden=\"true\"\n :style=\"thumbStyle\"\n class=\"pointer-events-none absolute h-5 w-5 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-white shadow-md ring-1 ring-black/30\"\n />\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </div>\n</template>\n","<script lang=\"ts\">\nimport type { ColorSwatchPreviewSize, SwatchShape } from '../../display/colorSwatchPreview';\n\n/**\n * Defines props for the internal `ColorSwatchItem`.\n *\n * `size` / `shape` are the NAMED axis types, not `ColorSwatchPreviewVariants['size']` — the SFC\n * prop resolver cannot follow an indexed access into an imported interface, and the build\n * fails on it while `vue-tsc` stays green.\n */\nexport interface ColorSwatchItemProps {\n /** The swatch color. */\n readonly color: string;\n /** The selected state. */\n readonly isSelected: boolean;\n /** The disabled state. */\n readonly isDisabled: boolean;\n /** The swatch size step. */\n readonly size?: ColorSwatchPreviewSize;\n /** The swatch outline shape. */\n readonly shape?: SwatchShape;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useRovingFocusItem } from '../../../foundation/primitives';\nimport ColorSwatchPreview from '../../display/colorSwatchPreview/ColorSwatchPreview.vue';\n\n/** Renders one roving-focus swatch stop inside a `ColorSwatchPicker`. Internal — never exported. */\ndefineOptions({ name: 'ColorSwatchItem' });\n\nconst props = defineProps<ColorSwatchItemProps>();\n\nconst emit = defineEmits<{\n /** Fires when the swatch is clicked or activated with Enter / Space. */\n select: [color: string];\n}>();\n\n/* Reactive object — `tabindex` tracks the group's tab stop, so read through it rather than\n destructuring. The function `ref` registers this item's node with the group. */\nconst roving = useRovingFocusItem();\n\n/* Roving navigation runs first and may `preventDefault()` an arrow key; Enter / Space only\n select when it did not. */\nfunction handleKeydown(event: KeyboardEvent): void {\n if (event.isComposing) return;\n roving.onKeydown(event);\n if (event.defaultPrevented) return;\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n emit('select', props.color);\n }\n}\n</script>\n\n<template>\n <ColorSwatchPreview\n :ref=\"roving.ref\"\n :color=\"color\"\n :size=\"size\"\n :shape=\"shape\"\n :is-selected=\"isSelected\"\n :is-disabled=\"isDisabled\"\n :tabindex=\"roving.tabindex\"\n :data-roving-focus-item=\"roving['data-roving-focus-item']\"\n :aria-label=\"color\"\n @click=\"emit('select', color)\"\n @focus=\"roving.onFocus()\"\n @keydown=\"handleKeydown\"\n />\n</template>\n","<script lang=\"ts\">\nimport type { ColorSwatchPreviewSize, SwatchShape } from '../../display/colorSwatchPreview';\n\n/**\n * Defines props for a `ColorSwatchPicker`.\n *\n * `swatchSize` / `swatchShape` are the NAMED axis types, not `ColorSwatchPreviewVariants['size']`\n * as the React original spelled them — the SFC prop resolver cannot follow an indexed access\n * into an imported interface, and the build fails on it while `vue-tsc` stays green.\n */\nexport interface ColorSwatchPickerProps {\n /** The palette rendered as swatches. */\n readonly colors: ReadonlyArray<string>;\n\n /** The selected hex, controlled. The `v-model` binding target. */\n readonly modelValue?: string | null;\n\n /** The initial selection when uncontrolled. */\n readonly defaultValue?: string | null;\n\n /** The size step every swatch renders at. */\n readonly swatchSize?: ColorSwatchPreviewSize;\n\n /** The outline shape every swatch renders with. */\n readonly swatchShape?: SwatchShape;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly isDisabled?: boolean;\n\n /** The group's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { AriaAttribute } from '../../../foundation/dom';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { Orientation, RovingFocusGroup, useFormControl } from '../../../foundation/primitives';\nimport ColorSwatchItem from './ColorSwatchItem.vue';\n\n/** Renders an inline palette of selectable color swatches, arrow-key navigable in both axes. */\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'ColorSwatchPicker', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ColorSwatchPickerProps>(), {\n swatchSize: 'md',\n swatchShape: 'square',\n /* Explicit `undefined` default: the flag falls back to the form control context, and Vue\n casts an absent `boolean` prop to `false` — which would shadow the context. */\n isDisabled: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader picks a swatch from the palette — the `v-model` half. */\n 'update:modelValue': [value: string | null];\n}>();\n\nconst attrs = useAttrs();\n\n/*\n * InlineLayout swatch group (no popover trigger) — the `role=\"group\"` node is the control:\n * it takes the context id (so a Field label's `htmlFor` resolves), is named via\n * `aria-labelledby`, and described via `aria-describedby`. `aria-invalid` is not valid\n * on `group`; invalid state surfaces through the describedby swap to the error chrome.\n * Disabled flows to every swatch button.\n */\nconst field = useFormControl();\nconst finalDisabled = computed(() => props.isDisabled ?? field?.isDisabled ?? false);\n\nconst controlled = useControlled<string | null>({\n /* `??` is wrong here — `null` is a MEANINGFUL selection (\"nothing selected\"), and `??`\n would fall through it to `modelValue`. Only `undefined` means \"not controlled\". */\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? null,\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst selected = controlled.value;\n\nfunction onSelect(color: string): void {\n controlled.setValue(color);\n}\n\n/* Never a declared prop — a declared `'aria-label'` would arrive as `props.ariaLabel` and\n stop reaching the DOM. It is read off the attrs so `aria-labelledby` can defer to it. */\nconst ariaLabel = computed(() => attrs[AriaAttribute.Label] as string | undefined);\n\nconst groupId = computed(() => props.id ?? field?.id);\n/* Names the group from the Field label when present; an explicit aria-label always wins. */\nconst labelledBy = computed(() => (ariaLabel.value ? undefined : field?.labelledBy));\nconst describedBy = computed(() => field?.describedBy);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootClass = computed(() => cn('flex flex-wrap gap-1.5', attrs.class as ClassValue));\n\nconst root = useTemplateRef<InstanceType<typeof RovingFocusGroup>>('root');\n\n/** The rendered group element. */\ndefineExpose({ el: computed(() => root.value?.el ?? null) });\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n controlled.reset();\n});\n</script>\n\n<template>\n <RovingFocusGroup\n :key=\"formResetRevision\"\n ref=\"root\"\n :orientation=\"Orientation.Both\"\n can-loop\n :id=\"groupId\"\n :aria-labelledby=\"labelledBy\"\n :aria-describedby=\"describedBy\"\n :class=\"rootClass\"\n v-bind=\"passthroughAttrs\"\n >\n <ColorSwatchItem\n v-for=\"c in colors\"\n :key=\"c\"\n :color=\"c\"\n :is-selected=\"selected === c\"\n :is-disabled=\"finalDisabled\"\n :size=\"swatchSize\"\n :shape=\"swatchShape\"\n @select=\"onSelect\"\n />\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </RovingFocusGroup>\n</template>\n","<script lang=\"ts\">\nimport type { HSV } from '../ColorExtensions';\nimport type { ColorSwatchPreviewSize } from '../../display/colorSwatchPreview';\n\n/** Defines which built-in trigger a color picker renders. */\nexport const ColorPickerTriggerVariant = {\n /** Refers to a swatch plus hex-value text in a framed button. */\n Full: 'full',\n /** Refers to a bare interactive swatch, no text. */\n Swatch: 'swatch',\n /** Refers to hex-value text only, no swatch. */\n Value: 'value',\n} as const;\n\nexport type ColorPickerTriggerVariant = (typeof ColorPickerTriggerVariant)[keyof typeof ColorPickerTriggerVariant];\n\nexport interface ColorPickerProps {\n /** The selected hex, controlled. The `v-model` binding target. */\n readonly modelValue?: string | null;\n\n /** The initial hex when uncontrolled. Default `#3b82f6`. */\n readonly defaultValue?: string | null;\n\n /** Whether the committed hex keeps its alpha channel, and the alpha slider renders. */\n readonly hasAlpha?: boolean;\n\n /** The preset palette rendered under the panel; omitted or empty hides the row. */\n readonly presets?: ReadonlyArray<string>;\n\n /** The size step the built-in trigger's swatch renders at. */\n readonly triggerSize?: ColorSwatchPreviewSize;\n\n /**\n * The built-in trigger to render (ignored when the `trigger` slot is filled):\n * - `full` *(default)* — swatch + hex-value text, framed button.\n * - `swatch` — a bare interactive swatch, no text (compact toolbars, tiles).\n * - `modelValue` — hex-value text only, no swatch (dense / code contexts).\n */\n readonly triggerVariant?: ColorPickerTriggerVariant;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly isDisabled?: boolean;\n\n /** The hidden input's name — renders a form-submittable mirror of the hex. */\n readonly name?: string;\n\n /** The trigger id; falls back to a surrounding `<Field>`'s control id. */\n readonly id?: string;\n}\n\n/** The panel's fallback geometry when no parseable color is committed. */\nconst FallbackHsv: HSV = { h: 217, s: 0.91, v: 0.96, a: 1 };\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, shallowRef, useAttrs, useTemplateRef, watch } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { AriaAttribute } from '../../../foundation/dom';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { FormControlProvider, useFormControl } from '../../../foundation/primitives';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../overlays';\nimport { hsvToHex, parseColorToHsv } from '../ColorExtensions';\nimport { ColorSwatchPreviewSize as ColorSwatchSizeValue } from '../../display/colorSwatchPreview';\nimport ColorSwatchPreview from '../../display/colorSwatchPreview/ColorSwatchPreview.vue';\nimport ColorArea from '../colorArea/ColorArea.vue';\nimport ColorSliderInput, { ColorChannel } from '../colorSliderInput/ColorSliderInput.vue';\nimport ColorInput from '../colorInput/ColorInput.vue';\nimport ColorSwatchPicker from '../colorSwatchPicker/ColorSwatchPicker.vue';\n\n/** Renders a trigger opening a panel with a saturation/value area, hue and alpha sliders, a hex field and presets. */\n/* `inheritAttrs: false` so `class` folds into the trigger's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'ColorPicker', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ColorPickerProps>(), {\n defaultValue: '#3b82f6',\n hasAlpha: false,\n triggerSize: ColorSwatchSizeValue.Md,\n triggerVariant: ColorPickerTriggerVariant.Full,\n /* Explicit `undefined` default: the flag falls back to the form control context, and Vue\n casts an absent `boolean` prop to `false` — which would shadow the context. */\n isDisabled: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader commits a color from the panel or the preset row — the `v-model` half. */\n 'update:modelValue': [value: string | null];\n}>();\n\n/**\n * The custom trigger — React's `trigger?: ReactNode`. Structural content, so a slot\n * rather than a scalar prop. Must hold a single focusable element (it becomes the\n * popover trigger via `as-child`). Form-control context wiring (id/aria) is the\n * consumer's responsibility for a custom trigger, exactly as in React.\n */\nconst slots = defineSlots<{ trigger?(): unknown }>();\n\nconst attrs = useAttrs();\n\n/* Inherits id/disabled/invalid/labelledby/describedby from a surrounding <Field>;\n standalone props win when provided, context fills the gaps (SelectPicker parity). */\nconst field = useFormControl();\n\nconst finalDisabled = computed(() => props.isDisabled ?? field?.isDisabled ?? false);\nconst triggerId = computed(() => props.id ?? field?.id);\n\n/* Never a declared prop — a declared `'aria-label'` would arrive as `props.ariaLabel` and\n stop reaching the DOM. It is read off the attrs so it can be relocated onto the trigger. */\nconst ariaLabel = computed(() => attrs[AriaAttribute.Label] as string | undefined);\n\n/* Names the trigger from the Field label when present; an explicit aria-label always\n wins, and the default label only applies when nothing else names the trigger. */\nconst labelledBy = computed(() => (ariaLabel.value ? undefined : field?.labelledBy));\nconst finalAriaLabel = computed(() => ariaLabel.value ?? (labelledBy.value ? undefined : 'Pick a color'));\nconst describedBy = computed(() => field?.describedBy);\nconst isInvalid = computed(() => field?.isInvalid || undefined);\n\nconst controlled = useControlled<string | null>({\n /* `??` is wrong here — `null` is a MEANINGFUL committed value (\"no color\"), and `??` would\n fall through it to `modelValue`. Only `undefined` means \"not controlled\". */\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? null,\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst hex = controlled.value;\n\n/* Internal HSV state (kept in sync with hex). HSV preserves picker geometry when the user\n moves to a fully-desaturated value (otherwise hue collapses). */\nconst hsv = shallowRef<HSV>(parseColorToHsv(hex.value) ?? FallbackHsv);\n\n/* React's `useEffect([hex, hasAlpha])`. No `immediate` — the initial state above already\n seeds from `hex`, and an immediate watcher would re-run it before mount. */\nwatch([hex, () => props.hasAlpha], () => {\n if (!hex.value) return;\n const parsed = parseColorToHsv(hex.value);\n if (!parsed) return;\n /* Only update internal HSV if the *committed* hex differs from what our HSV currently\n produces — avoids hue collapsing when SV passes through 0. */\n const currentHex = hsvToHex(hsv.value, { withAlpha: props.hasAlpha });\n if (currentHex.toLowerCase() !== hex.value.toLowerCase()) {\n hsv.value = { ...parsed, a: hsv.value.a };\n }\n});\n\nfunction updateHsv(next: HSV): void {\n hsv.value = next;\n controlled.setValue(hsvToHex(next, { withAlpha: props.hasAlpha }));\n}\n\nfunction onHueChange(h: number): void {\n updateHsv({ ...hsv.value, h });\n}\n\nfunction onAlphaChange(a: number): void {\n updateHsv({ ...hsv.value, a });\n}\n\nfunction onHexChange(next: string | null): void {\n controlled.setValue(next);\n}\n\nfunction onPresetChange(next: string | null): void {\n controlled.setValue(next);\n}\n\n/*\n * The swatch trigger's real open handler is composed on by `PopoverTrigger`'s `as-child`\n * merge; `ColorSwatchPreview` only needs a truthy click listener to render as a <button>.\n */\nfunction noop(): void {}\n\nconst hasCustomTrigger = computed(() => Boolean(slots.trigger));\nconst isSwatchTrigger = computed(() => props.triggerVariant === ColorPickerTriggerVariant.Swatch);\nconst isFullTrigger = computed(() => props.triggerVariant === ColorPickerTriggerVariant.Full);\n\nconst swatchColor = computed(() => hex.value ?? '#00000000');\nconst hexText = computed(() => hex.value ?? '—');\nconst hiddenValue = computed(() => hex.value ?? '');\nconst alphaValue = computed(() => hsv.value.a ?? 1);\nconst hasPresets = computed(() => Boolean(props.presets && props.presets.length > 0));\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', AriaAttribute.Label]);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst framedTriggerClass = computed(() =>\n cn(\n 'inline-flex items-center gap-2 rounded-md border border-border bg-background px-2 py-1 text-sm transition-colors hover:border-border-strong focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-60',\n attrs.class as ClassValue,\n ),\n);\n\nconst swatchTriggerClass = computed(() => attrs.class as ClassValue);\n\nconst trigger = useTemplateRef<{ el: HTMLElement | null }>('trigger');\n\n/** The rendered trigger element — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: computed(() => trigger.value?.el ?? null) });\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n controlled.reset();\n});\n</script>\n\n<template>\n <Popover :key=\"formResetRevision\">\n <!-- Custom trigger: no id/aria wiring, per the React original's contract. -->\n <PopoverTrigger v-if=\"hasCustomTrigger\" ref=\"trigger\" as-child>\n <slot name=\"trigger\" />\n </PopoverTrigger>\n\n <!-- Bare interactive swatch — ColorSwatchPreview is a real <button> here (given a click\n listener), so it becomes the popover trigger with no wrapper chrome. -->\n <PopoverTrigger\n v-else-if=\"isSwatchTrigger\"\n ref=\"trigger\"\n as-child\n :id=\"triggerId\"\n :aria-label=\"finalAriaLabel\"\n :aria-labelledby=\"labelledBy\"\n :aria-describedby=\"describedBy\"\n :aria-invalid=\"isInvalid\"\n v-bind=\"passthroughAttrs\"\n >\n <ColorSwatchPreview\n :color=\"swatchColor\"\n :size=\"triggerSize\"\n :is-disabled=\"finalDisabled\"\n :class=\"swatchTriggerClass\"\n @click=\"noop\"\n />\n </PopoverTrigger>\n\n <PopoverTrigger\n v-else\n ref=\"trigger\"\n :id=\"triggerId\"\n :aria-label=\"finalAriaLabel\"\n :aria-labelledby=\"labelledBy\"\n :aria-describedby=\"describedBy\"\n :aria-invalid=\"isInvalid\"\n :disabled=\"finalDisabled\"\n :class=\"framedTriggerClass\"\n v-bind=\"passthroughAttrs\"\n >\n <ColorSwatchPreview v-if=\"isFullTrigger\" :color=\"swatchColor\" :size=\"triggerSize\" />\n <span class=\"font-mono uppercase\">{{ hexText }}</span>\n </PopoverTrigger>\n\n <PopoverContent aria-label=\"Color picker\" class=\"flex w-64 flex-col gap-3\">\n <!-- The panel widgets are sub-controls of the picker, not the field's control — each\n gets its OWN bare FormControlProvider so none of them adopts the surrounding\n Field's id (which now names the trigger; adoption would duplicate it) or its\n label/describedby/invalid chrome. One provider per widget: they all read\n `id ?? ctx.id`, so a single shared provider would duplicate ids among them. -->\n <FormControlProvider>\n <ColorArea\n :hue=\"hsv.h\"\n :saturation=\"hsv.s\"\n :value=\"hsv.v\"\n @update:saturation=\"(s) => updateHsv({ ...hsv, s })\"\n @update:value=\"(v) => updateHsv({ ...hsv, v })\"\n />\n </FormControlProvider>\n <FormControlProvider>\n <ColorSliderInput\n :channel=\"ColorChannel.Hue\"\n :model-value=\"hsv.h\"\n aria-label=\"Hue\"\n @update:modelValue=\"onHueChange\"\n />\n </FormControlProvider>\n <FormControlProvider v-if=\"hasAlpha\">\n <ColorSliderInput\n :channel=\"ColorChannel.Alpha\"\n :model-value=\"alphaValue\"\n :color=\"hsv\"\n aria-label=\"Alpha\"\n @update:modelValue=\"onAlphaChange\"\n />\n </FormControlProvider>\n <FormControlProvider>\n <ColorInput aria-label=\"Hex color\" :model-value=\"hex\" :has-alpha=\"hasAlpha\" @update:modelValue=\"onHexChange\" />\n </FormControlProvider>\n <FormControlProvider v-if=\"hasPresets\">\n <ColorSwatchPicker\n :colors=\"presets ?? []\"\n :model-value=\"hex\"\n swatch-size=\"sm\"\n @update:modelValue=\"onPresetChange\"\n />\n </FormControlProvider>\n </PopoverContent>\n\n <input v-if=\"name\" type=\"hidden\" :name=\"name\" :value=\"hiddenValue\" />\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </Popover>\n</template>\n","<script lang=\"ts\">\nimport type { TagVariant } from '../../display/tag';\nimport type { InputSize, InputState } from '../InputStyles';\n\nexport interface TagsInputProps {\n /** The control size. */\n readonly size?: InputSize;\n\n /** The validity surface. */\n readonly state?: InputState;\n\n /** The committed tags, controlled. The `v-model` binding target. */\n readonly modelValue?: ReadonlyArray<string>;\n\n /** The initial tags when uncontrolled. */\n readonly defaultValue?: ReadonlyArray<string>;\n\n /** The in-flight text, controlled. The `v-model:input-value` binding target. */\n readonly inputValue?: string;\n\n /** The empty-state placeholder. */\n readonly placeholder?: string;\n\n /** The characters that commit the current input. Enter and Tab always do. */\n readonly delimiters?: ReadonlyArray<string>;\n\n /**\n * The predicate gating committed tags. Default: non-empty after trim.\n *\n * Kept a PROP, not an emit: it RETURNS a verdict, which an emit cannot do.\n */\n readonly validate?: (tag: string) => boolean;\n\n /** Whether the same tag may be committed twice. */\n readonly allowsDuplicates?: boolean;\n\n /** The cap on committed tags. */\n readonly max?: number;\n\n /** The invalid surface override. Falls back to the surrounding form control's `isInvalid`. */\n readonly isInvalid?: boolean;\n\n /** The hidden input name; the hidden input emits the comma-joined value. */\n readonly name?: string;\n\n /**\n * The chip variant.\n *\n * The NAMED type, not `TagVariants['variant']` — the SFC prop resolver cannot follow\n * an indexed access into an imported interface, and the build fails on it while\n * `vue-tsc` stays green.\n */\n readonly tagVariant?: TagVariant;\n\n /** The control's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly disabled?: boolean;\n\n /** The read-only state. Falls back to the form control's `isReadOnly`. */\n readonly readOnly?: boolean;\n\n /** Controlled axes use their canonical Vue model names; each update event requests caller state. */\n readonly readonly?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, ref, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { AriaAttribute } from '../../../foundation/dom';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useFormControl } from '../../../foundation/primitives';\nimport Tag from '../../display/tag/Tag.vue';\nimport { inputBaseVariants, InputState as InputStateValue } from '../InputStyles';\n\n/** Renders committed tags as chips beside a free-form input — Enter, comma or Tab commits the next one. */\n/* `inheritAttrs: false` so `class` folds into the container's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'TagsInput', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<TagsInputProps>(), {\n placeholder: 'Add tag…',\n delimiters: () => [','],\n validate: (t: string) => t.trim().length > 0,\n allowsDuplicates: false,\n tagVariant: 'neutral',\n /* Explicit `undefined` defaults are load-bearing: each flag falls back to the form control\n context, and Vue casts an absent `boolean` prop to `false` — which would shadow it. */\n isInvalid: undefined,\n disabled: undefined,\n readOnly: undefined,\n readonly: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader commits or removes a tag — the `v-model` half. */\n 'update:modelValue': [tags: ReadonlyArray<string>];\n /** Fires when the reader edits the uncommitted draft text — the `v-model:input-value` half. */\n 'update:inputValue': [input: string];\n}>();\n\nconst attrs = useAttrs();\n\nconst tagsControlled = useControlled<ReadonlyArray<string>>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? [],\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst textControlled = useControlled<string>({\n controlled: () => props.inputValue,\n default: () => '',\n onChange: (next) => {\n emit('update:inputValue', next);\n },\n});\n\nconst tags = tagsControlled.value;\nconst text = textControlled.value;\n\nconst input = useTemplateRef<HTMLInputElement>('input');\nconst pendingDelete = ref(false);\n\n/* FormControlContext adoption — explicit props stay as overrides. */\nconst ctx = useFormControl();\nconst isDisabled = computed(() => props.disabled ?? ctx?.isDisabled);\nconst isReadOnly = computed(() => props.readonly ?? props.readOnly ?? ctx?.isReadOnly);\nconst invalid = computed(() => props.isInvalid ?? ctx?.isInvalid);\nconst finalState = computed(() => props.state ?? (invalid.value ? InputStateValue.Invalid : InputStateValue.Default));\n\nfunction commit(raw: string): void {\n const trimmed = raw.trim();\n if (!trimmed || !props.validate(trimmed)) return;\n if (!props.allowsDuplicates && tags.value.includes(trimmed)) return;\n if (props.max != null && tags.value.length >= props.max) return;\n tagsControlled.setValue([...tags.value, trimmed]);\n textControlled.setValue('');\n}\n\nfunction removeAt(index: number): void {\n tagsControlled.setValue(tags.value.filter((_, i) => i !== index));\n}\n\nfunction onInput(event: Event): void {\n if ((event as InputEvent).isComposing) return;\n textControlled.setValue((event.target as HTMLInputElement).value);\n}\n\n/* Runs after any caller-supplied `@keydown` — declared after `v-bind`. */\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.isComposing) return;\n if (event.defaultPrevented || isDisabled.value || isReadOnly.value) return;\n if (event.key === 'Enter' || (event.key === 'Tab' && text.value)) {\n if (text.value) {\n if (event.key === 'Enter') event.preventDefault();\n commit(text.value);\n pendingDelete.value = false;\n }\n return;\n }\n if (props.delimiters.includes(event.key)) {\n event.preventDefault();\n commit(text.value);\n pendingDelete.value = false;\n return;\n }\n if (event.key === 'Backspace' && !text.value && tags.value.length > 0) {\n if (pendingDelete.value) {\n event.preventDefault();\n removeAt(tags.value.length - 1);\n pendingDelete.value = false;\n } else {\n pendingDelete.value = true;\n }\n return;\n }\n pendingDelete.value = false;\n}\n\n/* Blur is not gated on `defaultPrevented`. */\nfunction onBlur(): void {\n if (text.value) commit(text.value);\n pendingDelete.value = false;\n}\n\nfunction onContainerClick(event: MouseEvent): void {\n if (event.target === event.currentTarget) input.value?.focus();\n}\n\nfunction isPendingDelete(index: number): boolean {\n return pendingDelete.value && index === tags.value.length - 1;\n}\n\n/**\n * `Tag` renders its close button only when the consumer bound `@close`. A listener cannot be\n * conditionally omitted with `@close`, so it is bound through `v-on` with an object that is\n * empty when closing is off.\n */\nfunction tagListeners(index: number): Record<string, () => void> {\n if (isDisabled.value || isReadOnly.value) return {};\n return { close: () => removeAt(index) };\n}\n\nfunction tagClass(index: number): string {\n return cn(isPendingDelete(index) && 'ring-1 ring-ring');\n}\n\n/* Never declared props — a declared `'aria-describedby'` would arrive as\n `props.ariaDescribedby` and stop reaching the DOM. Both are read off the attrs so the\n consumer's value can override the context's. */\nconst ariaDescribedBy = computed(() => attrs[AriaAttribute.DescribedBy] as string | undefined);\nconst ariaRequired = computed(() => attrs[AriaAttribute.Required] as 'true' | 'false' | boolean | undefined);\n\nconst inputId = computed(() => props.id ?? ctx?.id);\nconst describedBy = computed(() => ariaDescribedBy.value ?? ctx?.describedBy);\n/* aria- (not native) required — the tag list is the value; a native `required` on the empty\n inner input would block submits even with tags committed. */\nconst requiredAttr = computed(() => ariaRequired.value ?? (ctx?.isRequired || undefined));\nconst inputPlaceholder = computed(() => (tags.value.length === 0 ? props.placeholder : undefined));\nconst hiddenValue = computed(() => tags.value.join(','));\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', AriaAttribute.DescribedBy, AriaAttribute.Required]);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootClass = computed(() =>\n cn(\n inputBaseVariants({ size: props.size, state: finalState.value }),\n 'h-auto min-h-10 flex-wrap items-center gap-1.5 py-1.5',\n isDisabled.value && 'cursor-not-allowed opacity-60',\n attrs.class as ClassValue,\n ),\n);\n\n/** The rendered `<input>`. */\ndefineExpose({ el: input });\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n tagsControlled.reset();\n textControlled.reset();\n});\n</script>\n\n<template>\n <div\n :key=\"formResetRevision\"\n role=\"group\"\n :data-disabled=\"isDisabled || undefined\"\n :data-readonly=\"isReadOnly || undefined\"\n :data-invalid=\"invalid || undefined\"\n :class=\"rootClass\"\n @click=\"onContainerClick\"\n >\n <Tag\n v-for=\"(t, i) in tags\"\n :key=\"`${t}-${i}`\"\n :variant=\"tagVariant\"\n :data-pending-delete=\"isPendingDelete(i) ? '' : undefined\"\n :class=\"tagClass(i)\"\n v-on=\"tagListeners(i)\"\n >\n {{ t }}\n </Tag>\n <input\n ref=\"input\"\n type=\"text\"\n :id=\"inputId\"\n :value=\"text\"\n :placeholder=\"inputPlaceholder\"\n :disabled=\"isDisabled\"\n :readonly=\"isReadOnly\"\n :aria-invalid=\"invalid || undefined\"\n :aria-describedby=\"describedBy\"\n :aria-required=\"requiredAttr\"\n class=\"min-w-[6rem] flex-1 border-0 bg-transparent p-0 text-sm outline-hidden placeholder:text-subtle-foreground disabled:cursor-not-allowed\"\n v-bind=\"passthroughAttrs\"\n @input=\"onInput\"\n @compositionend=\"onInput\"\n @keydown=\"onKeydown\"\n @blur=\"onBlur\"\n />\n <input v-if=\"name\" type=\"hidden\" :name=\"name\" :value=\"hiddenValue\" />\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </div>\n</template>\n","<script lang=\"ts\">\n/** Defines why a picked file was rejected by the uploader. */\nexport const FileRejectionReason = {\n /** Refers to a file whose MIME type / extension is not accepted. */\n Type: 'type',\n /** Refers to a file exceeding the max size. */\n Size: 'size',\n /** Refers to a file beyond the max file count. */\n Count: 'count',\n} as const;\n\nexport type FileRejectionReason = (typeof FileRejectionReason)[keyof typeof FileRejectionReason];\n\nexport interface FileRejection {\n file: File;\n reason: FileRejectionReason;\n}\n\n/** Reflects the drop zone's live drag state; surfaced as `data-drag-state`. */\ntype DragState = 'idle' | 'over' | 'reject';\n\nexport interface FileUploadPickerProps {\n /** The `accept` token list handed to the native input and used for validation. */\n readonly accept?: string;\n\n /** Whether more than one file may be picked. Default `false`. */\n readonly multiple?: boolean;\n\n /** The per-file byte cap. Files exceeding this drop into `rejected`. */\n readonly maxSize?: number;\n\n /** The cap on total accepted files (multiple mode). Excess go to `rejected`. */\n readonly maxFiles?: number;\n\n /** The invalid surface override. Falls back to the surrounding form control's `isInvalid`. */\n readonly isInvalid?: boolean;\n\n /** The zone's headline. Fill the `label` slot for richer content. */\n readonly label?: string | number;\n\n /** The zone's sub-line. Fill the `hint` slot for richer content. */\n readonly hint?: string | number;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly disabled?: boolean;\n\n /** The native input name. */\n readonly name?: string;\n\n /** The control's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { UploadCloud } from 'lucide-vue-next';\nimport { cn } from '../../../foundation/styles';\nimport { matchesAccept, matchesAcceptType } from '../../../foundation/files';\nimport { Icon } from '../../../foundation/icons';\nimport { useFormControl } from '../../../foundation/primitives';\n\n/**\n * Renders a drag-drop zone that also opens the native picker on click, Enter or Space.\n *\n * Every drop is validated against `accept`, `maxSize` and `maxFiles`, then partitioned into the\n * accepted and rejected lists carried by `files-change`.\n */\n/* `inheritAttrs: false` so `class` folds into the wrapper's own `cn()` call, and so the rest\n of the attrs land on the hidden native `<input>` rather than the wrapper. */\ndefineOptions({ name: 'FileUploadPicker', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<FileUploadPickerProps>(), {\n multiple: false,\n label: 'Drop files here, or click to browse',\n /* Explicit `undefined` defaults: each flag falls back to the form control context, and Vue\n casts an absent `boolean` prop to `false` — which would shadow it. */\n isInvalid: undefined,\n disabled: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader drops or picks files, carrying them split into accepted and rejected. */\n 'files-change': [accepted: ReadonlyArray<File>, rejected: ReadonlyArray<FileRejection>];\n}>();\n\ndefineSlots<{\n /** The content rendered under the drop zone — React's `children`. */\n default?(): unknown;\n label?(): unknown;\n hint?(): unknown;\n}>();\n\nconst attrs = useAttrs();\nconst slots = useSlots();\n\nconst input = useTemplateRef<HTMLInputElement>('input');\nconst dragCounter = ref(0);\nconst dragState = ref<DragState>('idle');\n\n/* FormControlContext adoption — explicit props stay as overrides. The HIDDEN native\n input carries the context id, so `Field`-rendered labels/describedby reference it\n (label click opens the picker). The dropzone mirrors describedby for keyboard users. */\nconst ctx = useFormControl();\nconst isDisabled = computed(() => props.disabled ?? ctx?.isDisabled);\nconst invalid = computed(() => props.isInvalid ?? ctx?.isInvalid);\n\nfunction partition(files: FileList | ReadonlyArray<File>): [ReadonlyArray<File>, ReadonlyArray<FileRejection>] {\n const accepted: Array<File> = [];\n const rejected: Array<FileRejection> = [];\n const arr = Array.from(files);\n for (const f of arr) {\n if (!matchesAccept(f, props.accept)) {\n rejected.push({ file: f, reason: FileRejectionReason.Type });\n continue;\n }\n if (props.maxSize != null && f.size > props.maxSize) {\n rejected.push({ file: f, reason: FileRejectionReason.Size });\n continue;\n }\n accepted.push(f);\n }\n if (props.maxFiles != null && accepted.length > props.maxFiles) {\n const overflow = accepted.splice(props.maxFiles);\n for (const f of overflow) rejected.push({ file: f, reason: FileRejectionReason.Count });\n }\n return [accepted, rejected];\n}\n\nfunction openPicker(): void {\n if (!isDisabled.value) input.value?.click();\n}\n\nfunction onDragEnter(event: DragEvent): void {\n if (isDisabled.value) return;\n event.preventDefault();\n dragCounter.value += 1;\n const items = event.dataTransfer?.items;\n let reject = false;\n /* Only the MIME type is exposed pre-drop — size is unavailable and extension tokens are\n unverifiable, so this check is advisory and stays optimistic (`extensionTokens: 'allow'`).\n `onDrop` re-checks authoritatively with `matchesAccept`. */\n if (items && props.accept) {\n for (let i = 0; i < items.length; i++) {\n const it = items[i];\n if (!it || it.kind !== 'file') continue;\n if (!matchesAcceptType(it.type, props.accept)) {\n reject = true;\n break;\n }\n }\n }\n dragState.value = reject ? 'reject' : 'over';\n}\n\nfunction onDragOver(event: DragEvent): void {\n if (isDisabled.value) return;\n event.preventDefault();\n if (event.dataTransfer) event.dataTransfer.dropEffect = 'copy';\n}\n\nfunction onDragLeave(event: DragEvent): void {\n if (isDisabled.value) return;\n event.preventDefault();\n dragCounter.value -= 1;\n if (dragCounter.value <= 0) {\n dragCounter.value = 0;\n dragState.value = 'idle';\n }\n}\n\nfunction onDrop(event: DragEvent): void {\n if (isDisabled.value) return;\n event.preventDefault();\n dragCounter.value = 0;\n dragState.value = 'idle';\n const files = event.dataTransfer?.files;\n if (!files || files.length === 0) return;\n const [accepted, rejected] = partition(files);\n emit('files-change', accepted, rejected);\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.isComposing) return;\n if (isDisabled.value) return;\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n openPicker();\n }\n}\n\nfunction onChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n const files = target.files;\n if (!files || files.length === 0) return;\n const [accepted, rejected] = partition(files);\n emit('files-change', accepted, rejected);\n // reset so picking the same file again still fires\n target.value = '';\n}\n\nconst showError = computed(() => invalid.value || dragState.value === 'reject');\n\nconst hasHint = computed(() => Boolean(props.hint) || Boolean(slots.hint));\n\nconst inputId = computed(() => props.id ?? ctx?.id);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst wrapperClass = computed(() => cn('flex flex-col gap-3', attrs.class as ClassValue));\n\nconst zoneClass = computed(() =>\n cn(\n 'flex flex-col items-center justify-center gap-2 rounded-md border-2 border-dashed border-input bg-background px-6 py-10 text-center text-sm text-muted-foreground transition-colors',\n 'hover:border-border-strong hover:bg-muted/40',\n 'focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring',\n dragState.value === 'over' && 'border-primary bg-primary-soft/30 text-foreground',\n showError.value && 'border-destructive bg-destructive-soft/30 text-destructive',\n isDisabled.value && 'cursor-not-allowed opacity-60 hover:border-input hover:bg-background',\n ),\n);\n\nconst iconClass = computed(() =>\n cn('text-muted-foreground', dragState.value === 'over' && 'text-primary', showError.value && 'text-destructive'),\n);\n\nconst UploadIcon = UploadCloud;\n\n/** The rendered `<input type=\"file\">` — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: input });\n</script>\n\n<template>\n <div :class=\"wrapperClass\">\n <div\n role=\"button\"\n :tabindex=\"isDisabled ? -1 : 0\"\n :aria-disabled=\"isDisabled || undefined\"\n :aria-describedby=\"ctx?.describedBy\"\n :data-drag-state=\"dragState\"\n :data-invalid=\"showError || undefined\"\n :class=\"zoneClass\"\n @click=\"openPicker\"\n @keydown=\"onKeydown\"\n @dragenter=\"onDragEnter\"\n @dragover=\"onDragOver\"\n @dragleave=\"onDragLeave\"\n @drop=\"onDrop\"\n >\n <Icon :icon=\"UploadIcon\" :size=\"28\" :class=\"iconClass\" />\n <div class=\"font-medium text-foreground\">\n <slot name=\"label\">{{ label }}</slot>\n </div>\n <div v-if=\"hasHint\" class=\"text-xs\">\n <slot name=\"hint\">{{ hint }}</slot>\n </div>\n <input\n ref=\"input\"\n type=\"file\"\n :id=\"inputId\"\n :accept=\"accept\"\n :multiple=\"multiple\"\n :disabled=\"isDisabled\"\n :aria-invalid=\"invalid || undefined\"\n :aria-describedby=\"ctx?.describedBy\"\n :aria-required=\"ctx?.isRequired || undefined\"\n :name=\"name\"\n class=\"sr-only\"\n v-bind=\"passthroughAttrs\"\n @change=\"onChange\"\n />\n </div>\n <slot />\n </div>\n</template>\n","import { inject, type InjectionKey, type ShallowRef } from 'vue';\n\n/**\n * The seam between `EditableInput` and its `EditableInputPreview` / `EditableInputInput` /\n * `EditableInputSubmit` / `EditableInputCancel` children.\n *\n * React attached those as `EditableInput.Preview` / `.Input` / `.Submit` / `.Cancel` statics over a\n * `createContext`. An SFC's generated default export cannot carry statics cleanly, so they ship\n * as sibling components and share state through provide/inject instead.\n *\n * Every field but the setters is a live getter — read them off the object, don't destructure.\n */\nexport interface EditableInputContextValue {\n /** The committed value. */\n readonly value: string;\n /** The in-flight edit buffer. */\n readonly draft: string;\n setDraft: (value: string) => void;\n /** Whether the input is showing instead of the preview. */\n readonly isEditing: boolean;\n setEditing: (editing: boolean) => void;\n /** Commits the draft and leaves edit mode. */\n submit: () => void;\n /** Discards the draft and leaves edit mode. */\n cancel: () => void;\n /** The preview text shown when the value is empty. */\n readonly placeholder: string;\n readonly isDisabled: boolean;\n readonly isReadOnly: boolean;\n readonly canSubmitOnBlur: boolean;\n readonly canSubmitOnEnter: boolean;\n readonly canCancelOnEscape: boolean;\n /** Holds the DOM node of the inner input — the focus/caret effect reads it. */\n inputEl: ShallowRef<HTMLInputElement | null>;\n}\n\nexport const EditableInputKey: InjectionKey<EditableInputContextValue> = Symbol('wow-two.editable');\n\n/** Reads the surrounding editable context; throws when used outside an `<EditableInput>`. */\nexport function useEditableContext(): EditableInputContextValue {\n const context = inject(EditableInputKey, null);\n if (!context) throw new Error('EditableInput.* must be used inside <EditableInput>');\n return context;\n}\n","<script lang=\"ts\">\nexport interface EditableInputProps {\n /** The committed value, controlled. The `v-model` binding target. */\n readonly modelValue?: string;\n\n /** The initial committed value when uncontrolled. */\n readonly defaultValue?: string;\n\n /** The edit-mode state, controlled. The `v-model:editing` binding target. */\n readonly editing?: boolean;\n\n /** The initial edit-mode state when uncontrolled. Default `false`. */\n readonly defaultEditing?: boolean;\n\n /** The preview text shown when the value is empty. */\n readonly placeholder?: string;\n\n /** Whether blurring the input commits the draft. Default `true`. */\n readonly canSubmitOnBlur?: boolean;\n\n /** Whether Enter commits the draft. Default `true`. */\n readonly canSubmitOnEnter?: boolean;\n\n /** Whether Escape discards the draft. Default `true`. */\n readonly canCancelOnEscape?: boolean;\n\n /** The disabled state. Default `false`. */\n readonly isDisabled?: boolean;\n\n /** The read-only state. Default `false`. */\n readonly isReadOnly?: boolean;\n\n /** The hidden input name; the hidden input emits the committed value. */\n readonly name?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useTemplateRef } from 'vue';\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, provide, ref, shallowRef, useAttrs, watch } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { EditableInputKey, type EditableInputContextValue } from './EditableInputContext';\n\n/**\n * Renders the inline-edit root, owning the committed value, the draft text and edit mode.\n *\n * Publishes all three to `EditableInputPreview` / `EditableInputInput` / `EditableInputSubmit` / `EditableInputCancel`\n * through injection — React attached those as `EditableInput.Preview` / `.Input` / … statics, which an\n * SFC's default export cannot carry.\n */\n/* `inheritAttrs: false` so `class` folds into the root's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'EditableInput', inheritAttrs: false });\n\n/** The EditableInput tree — preview, input and the submit/cancel buttons. React's `children`. */\ndefineSlots<{ default(): unknown }>();\n\nconst props = withDefaults(defineProps<EditableInputProps>(), {\n defaultEditing: false,\n placeholder: 'Click to edit',\n canSubmitOnBlur: true,\n canSubmitOnEnter: true,\n canCancelOnEscape: true,\n isDisabled: false,\n isReadOnly: false,\n /* Explicit `undefined` defaults are load-bearing: `useControlled` keys on `=== undefined`,\n and Vue casts an absent `boolean` prop to `false` — without these, `editing`/`editing`\n would read as \"controlled, and closed\", pinning the control out of edit mode and making\n `defaultEditing` dead. */\n modelValue: undefined,\n editing: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader commits the draft — the `v-model` half. */\n 'update:modelValue': [value: string];\n /** Fires when the row enters or leaves edit mode — the `v-model:editing` half. */\n 'update:editing': [editing: boolean];\n}>();\n\nconst attrs = useAttrs();\n\nconst valueCtl = useControlled<string>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? '',\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst editingCtl = useControlled<boolean>({\n controlled: () => props.editing,\n default: () => props.defaultEditing,\n onChange: (next) => {\n emit('update:editing', next);\n },\n});\n\n/* Named `committed` / `editMode`, not `modelValue` / `editing`: a setup const sharing a prop's\n name collides with it in the template scope (`vue/no-dupe-keys`). */\nconst committed = valueCtl.value;\nconst editMode = editingCtl.value;\n\nconst draft = ref(committed.value);\nconst inputEl = shallowRef<HTMLInputElement | null>(null);\n\n/* Syncs the draft when entering edit mode or when the committed value changes externally.\n Not `immediate` — `draft` is already seeded from `modelValue` above, and nothing here touches\n the DOM, so there is no first-run work to do. */\nwatch([editMode, committed], ([isEditing, next]) => {\n if (isEditing) draft.value = next;\n});\n\nfunction submit(): void {\n valueCtl.setValue(draft.value);\n editingCtl.setValue(false);\n}\n\nfunction cancel(): void {\n draft.value = committed.value;\n editingCtl.setValue(false);\n}\n\n/* Live getters, not a snapshot — every flag on the root has to reach already-mounted parts. */\nprovide<EditableInputContextValue>(EditableInputKey, {\n get value() {\n return committed.value;\n },\n get draft() {\n return draft.value;\n },\n setDraft: (next) => {\n draft.value = next;\n },\n get isEditing() {\n return editMode.value;\n },\n setEditing: editingCtl.setValue,\n submit,\n cancel,\n get placeholder() {\n return props.placeholder;\n },\n get isDisabled() {\n return props.isDisabled;\n },\n get isReadOnly() {\n return props.isReadOnly;\n },\n get canSubmitOnBlur() {\n return props.canSubmitOnBlur;\n },\n get canSubmitOnEnter() {\n return props.canSubmitOnEnter;\n },\n get canCancelOnEscape() {\n return props.canCancelOnEscape;\n },\n inputEl,\n});\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootClass = computed(() => cn('inline-flex items-center gap-1.5', attrs.class as ClassValue));\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n valueCtl.reset();\n editingCtl.reset();\n\n draft.value = committed.value;\n});\n</script>\n\n<template>\n <div :key=\"formResetRevision\" :class=\"rootClass\" v-bind=\"passthroughAttrs\">\n <slot />\n <input v-if=\"name\" type=\"hidden\" :name=\"name\" :value=\"committed\" />\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </div>\n</template>\n","<script lang=\"ts\">\n/* No own props: React typed this `EditableInputButtonProps`, an alias of\n `ButtonHTMLAttributes<HTMLButtonElement>`, every member of which is a fallthrough attr here.\n The exported name lives on `EditableInputSubmit.vue`, which the folder's `index.ts` re-exports. */\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { X } from 'lucide-vue-next';\nimport { cn } from '../../../foundation/styles';\nimport { Icon } from '../../../foundation/icons';\nimport { useEditableContext } from './EditableInputContext';\n\n/** Renders the discard button, shown only while editing, that drops the draft and leaves edit mode. */\ndefineOptions({ name: 'EditableInputCancel', inheritAttrs: false });\n\n/** The button content — defaults to a cross icon. React's `children`. */\ndefineSlots<{ default?(): unknown }>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLButtonElement>('el');\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useEditableContext();\n\n/* `mousedown` is prevented so this fires before the input's blur handler closes edit mode. */\nfunction onMousedown(event: MouseEvent): void {\n event.preventDefault();\n}\n\n/* Runs after any caller-supplied `@click` (declared after `v-bind`), exactly as React's\n `onClick?.(e)` ran before this body. */\nfunction onClick(event: MouseEvent): void {\n if (event.defaultPrevented) return;\n ctx.cancel();\n}\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst buttonClass = computed(() =>\n cn(\n 'inline-flex h-8 w-8 items-center justify-center rounded-md text-destructive transition-colors hover:bg-destructive-soft focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring',\n attrs.class as ClassValue,\n ),\n);\n\nconst CloseIcon = X;\n\n/** The rendered `<button>` — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el });\n</script>\n\n<template>\n <button\n v-if=\"ctx.isEditing\"\n ref=\"el\"\n type=\"button\"\n aria-label=\"Cancel\"\n :class=\"buttonClass\"\n v-bind=\"passthroughAttrs\"\n @mousedown=\"onMousedown\"\n @click=\"onClick\"\n >\n <slot><Icon :icon=\"CloseIcon\" :size=\"14\" /></slot>\n </button>\n</template>\n","<script lang=\"ts\">\nimport type { InputSize, InputState } from '../InputStyles';\n\nexport interface EditableInputInputProps {\n /** The control size. */\n readonly size?: InputSize;\n\n /** The validity surface. */\n readonly state?: InputState;\n}\n/* React also inherited `Omit<InputBaseVariants, 'size' | 'state'>` — the `border` / `ring`\n axes — but never forwarded them to `inputBaseVariants`, so they were dead props that landed\n on the DOM as unknown attributes. They are not re-declared here; the two axes the original\n actually consumed are. */\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, useAttrs, watch } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn } from '../../../foundation/styles';\nimport { inputBaseVariants } from '../InputStyles';\nimport { useEditableContext } from './EditableInputContext';\n\n/** Renders the edit-mode input, shown only while editing, focused with the caret at the end on entry. */\ndefineOptions({ name: 'EditableInputInput', inheritAttrs: false });\n\nconst props = defineProps<EditableInputInputProps>();\n\nconst attrs = useAttrs();\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useEditableContext();\n\n/* Focus + caret-to-end on entering edit mode. Reached only from `onMounted` (React's effect\n also ran on mount, which is what focuses an `defaultEditing` control) and from a NON-immediate\n post-flush watcher — an `immediate: true, flush: 'post'` watcher would run during SSR and\n throw on the element access. */\nfunction focusEnd(): void {\n const input = ctx.inputEl.value;\n if (!ctx.isEditing || !input) return;\n input.focus();\n const end = input.value.length;\n input.setSelectionRange(end, end);\n}\n\nonMounted(focusEnd);\nwatch(() => ctx.isEditing, focusEnd, { flush: 'post' });\n\nfunction setRef(node: unknown): void {\n ctx.inputEl.value = (node ?? null) as HTMLInputElement | null;\n}\n\nfunction onInput(event: Event): void {\n if ((event as InputEvent).isComposing) return;\n ctx.setDraft((event.target as HTMLInputElement).value);\n}\n\n/* Runs after any caller-supplied `@keydown` (declared after `v-bind`), exactly as React's\n `onKeyDown?.(e)` ran before this body. */\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.isComposing) return;\n if (event.defaultPrevented) return;\n if (ctx.canSubmitOnEnter && event.key === 'Enter') {\n event.preventDefault();\n ctx.submit();\n } else if (ctx.canCancelOnEscape && event.key === 'Escape') {\n event.preventDefault();\n ctx.cancel();\n }\n}\n\nfunction onBlur(event: FocusEvent): void {\n if (event.defaultPrevented) return;\n if (ctx.canSubmitOnBlur) ctx.submit();\n}\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst inputClass = computed(() =>\n cn(inputBaseVariants({ size: props.size, state: props.state }), attrs.class as ClassValue),\n);\n\n/** The rendered `<input>` — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: ctx.inputEl });\n</script>\n\n<template>\n <input\n v-if=\"ctx.isEditing\"\n :ref=\"setRef\"\n type=\"text\"\n :value=\"ctx.draft\"\n :disabled=\"ctx.isDisabled\"\n :readonly=\"ctx.isReadOnly\"\n :class=\"inputClass\"\n v-bind=\"passthroughAttrs\"\n @input=\"onInput\"\n @compositionend=\"onInput\"\n @keydown=\"onKeydown\"\n @blur=\"onBlur\"\n />\n</template>\n","<script lang=\"ts\">\n/* eslint-disable-next-line @typescript-eslint/no-empty-object-type -- kept as an\n exported name: React declared `EditableInputPreviewProps` (an alias of\n `HTMLAttributes<HTMLSpanElement>`) and consumers import it. Every attribute falls through. */\nexport interface EditableInputPreviewProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn } from '../../../foundation/styles';\nimport { useEditableContext } from './EditableInputContext';\n\n/** Renders the read-mode surface; clicking it, or pressing Enter or Space, enters edit mode. */\ndefineOptions({ name: 'EditableInputPreview', inheritAttrs: false });\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLSpanElement>('el');\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useEditableContext();\n\nconst interactive = computed(() => !ctx.isDisabled && !ctx.isReadOnly);\nconst isEmpty = computed(() => !ctx.value);\n\n/* Runs after any caller-supplied `@click` (declared after `v-bind`), exactly as React's\n `onClick?.(e)` ran before this body. */\nfunction onClick(event: MouseEvent): void {\n if (event.defaultPrevented || !interactive.value) return;\n ctx.setEditing(true);\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.isComposing) return;\n if (event.defaultPrevented || !interactive.value) return;\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n ctx.setEditing(true);\n }\n}\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst previewClass = computed(() =>\n cn(\n 'cursor-text rounded-sm px-1 py-0.5 text-sm text-foreground transition-colors hover:bg-muted focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring',\n isEmpty.value && 'italic text-subtle-foreground',\n !interactive.value && 'cursor-default hover:bg-transparent',\n attrs.class as ClassValue,\n ),\n);\n\n/** The rendered `<span>` — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el });\n</script>\n\n<template>\n <span\n v-if=\"!ctx.isEditing\"\n ref=\"el\"\n :role=\"interactive ? 'button' : undefined\"\n :tabindex=\"interactive ? 0 : -1\"\n :aria-disabled=\"!interactive || undefined\"\n :class=\"previewClass\"\n v-bind=\"passthroughAttrs\"\n @click=\"onClick\"\n @keydown=\"onKeydown\"\n >\n {{ ctx.value || ctx.placeholder }}\n </span>\n</template>\n","<script lang=\"ts\">\n/* eslint-disable-next-line @typescript-eslint/no-empty-object-type -- kept as an\n exported name: React declared `EditableInputButtonProps` (an alias of\n `ButtonHTMLAttributes<HTMLButtonElement>`) and consumers import it, and both\n `EditableInputSubmit` and `EditableInputCancel` are typed by it. Every attribute falls through. */\nexport interface EditableInputButtonProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { Check } from 'lucide-vue-next';\nimport { cn } from '../../../foundation/styles';\nimport { Icon } from '../../../foundation/icons';\nimport { useEditableContext } from './EditableInputContext';\n\n/** Renders the commit button, shown only while editing, that saves the draft and leaves edit mode. */\ndefineOptions({ name: 'EditableInputSubmit', inheritAttrs: false });\n\n/** The button content — defaults to a check icon. React's `children`. */\ndefineSlots<{ default?(): unknown }>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLButtonElement>('el');\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useEditableContext();\n\n/* `mousedown` is prevented so this fires before the input's blur handler closes edit mode. */\nfunction onMousedown(event: MouseEvent): void {\n event.preventDefault();\n}\n\n/* Runs after any caller-supplied `@click` (declared after `v-bind`), exactly as React's\n `onClick?.(e)` ran before this body. */\nfunction onClick(event: MouseEvent): void {\n if (event.defaultPrevented) return;\n ctx.submit();\n}\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst buttonClass = computed(() =>\n cn(\n 'inline-flex h-8 w-8 items-center justify-center rounded-md text-success transition-colors hover:bg-success-soft focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring',\n attrs.class as ClassValue,\n ),\n);\n\nconst CheckIcon = Check;\n\n/** The rendered `<button>` — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el });\n</script>\n\n<template>\n <button\n v-if=\"ctx.isEditing\"\n ref=\"el\"\n type=\"button\"\n aria-label=\"Submit\"\n :class=\"buttonClass\"\n v-bind=\"passthroughAttrs\"\n @mousedown=\"onMousedown\"\n @click=\"onClick\"\n >\n <slot><Icon :icon=\"CheckIcon\" :size=\"14\" /></slot>\n </button>\n</template>\n","import { inject, type InjectionKey } from 'vue';\n\n/** Describes one registered wizard step. */\nexport interface StepInfo {\n id: string;\n /** React typed this `ReactNode`; it is scalar here because `WizardFormSteps` renders it as\n * the tab's text. A rich step tab is not part of the original's contract either. */\n label?: string | number;\n isOptional?: boolean;\n isFinal?: boolean;\n}\n\n/**\n * The seam between `WizardForm` and its `Steps` / `Step` / `Footer` children.\n *\n * React attached those as `WizardForm.Steps` / `.Step` / `.Footer` statics over a `createContext`,\n * and pre-walked `Children.toArray` to discover step ids before mount. An SFC's default export\n * cannot carry statics and Vue has no children-walk, so the parts ship as siblings and register\n * themselves through provide/inject — the same conversion `checkboxGroup` / `radioGroup` made.\n *\n * Every field but the functions is a live getter — read them off the object, don't destructure.\n */\nexport interface WizardFormContextValue {\n readonly steps: ReadonlyArray<StepInfo>;\n readonly currentIndex: number;\n readonly currentStep: StepInfo | undefined;\n goTo: (idOrIndex: string | number) => void;\n next: () => Promise<void>;\n back: () => void;\n readonly canGoBack: boolean;\n readonly visited: ReadonlySet<string>;\n registerStep: (info: StepInfo) => void;\n unregisterStep: (id: string) => void;\n registerValidator: (id: string, validator: () => boolean | Promise<boolean>) => void;\n unregisterValidator: (id: string) => void;\n readonly isPending: boolean;\n}\n\nexport const wizardContextKey: InjectionKey<WizardFormContextValue> = Symbol('wow-two.wizard');\n\n/** Reads the surrounding wizard context; throws when used outside a `<WizardForm>`. */\nexport function useWizard(): WizardFormContextValue {\n const ctx = inject(wizardContextKey, null);\n if (!ctx) throw new Error('useWizard must be used inside <WizardForm>');\n return ctx;\n}\n","<script lang=\"ts\">\nexport interface WizardFormProps {\n /** The active step id, controlled. The `v-model:current-step` binding target. */\n readonly currentStep?: string;\n\n /** The initial active step id when uncontrolled. Defaults to the first registered step. */\n readonly defaultCurrentStep?: string;\n\n /**\n * The completion handler, awaited on the final step's Next.\n *\n * Kept a PROP, not an emit: the root AWAITS its result to hold `isPending`, and an emit\n * returns nothing to await.\n */\n readonly onComplete?: () => void | Promise<void>;\n\n /** Whether the Back control and step back-jumps are available. Default `true`. */\n readonly canGoBack?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, provide, ref, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { wizardContextKey, type StepInfo, type WizardFormContextValue } from './WizardFormContext';\n\n/**\n * Renders the wizard root, owning the step registry, the active step and the pending flag.\n *\n * Publishes all three to `WizardFormSteps` / `WizardFormStep` / `WizardFormFooter` through injection.\n */\n/* `inheritAttrs: false` so `class` folds into the root's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'WizardForm', inheritAttrs: false });\n\n/** The wizard tree — the step strip, the steps, and the footer. React's `children`. */\ndefineSlots<{ default(): unknown }>();\n\nconst props = withDefaults(defineProps<WizardFormProps>(), {\n canGoBack: true,\n /* Explicit `undefined` default: `useControlled` keys on `=== undefined`. */\n currentStep: undefined,\n defaultCurrentStep: undefined,\n onComplete: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the wizard moves to another step — the `v-model:current-step` half. */\n 'update:currentStep': [step: string];\n}>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst steps = ref<Array<StepInfo>>([]);\n/* A plain Map, matching React's: it is only ever read inside `next()`, never rendered. */\nconst validators = new Map<string, () => boolean | Promise<boolean>>();\n\nconst stepCtl = useControlled<string>({\n controlled: () => props.currentStep,\n default: () => props.defaultCurrentStep ?? '',\n onChange: (next) => {\n emit('update:currentStep', next);\n },\n});\n\n/**\n * The active step id.\n *\n * React pre-walked its children to seed the first step id before anything mounted. Vue steps\n * register on mount instead, so the first registered id is the fallback — resolved here rather\n * than written through `setValue`, which would fire a spurious `update:currentStep` on mount.\n */\nconst activeStepId = computed(() => stepCtl.value.value || (steps.value[0]?.id ?? ''));\n\nconst visitedSet = ref<ReadonlySet<string>>(new Set<string>());\n/* The first step counts as visited without an explicit `goTo`, exactly as React seeded it. */\nconst visited = computed<ReadonlySet<string>>(() => {\n const first = steps.value[0]?.id;\n if (!first) return visitedSet.value;\n return new Set([...visitedSet.value, first]);\n});\n\nconst isPending = ref(false);\n\nconst currentIndex = computed(() => steps.value.findIndex((s) => s.id === activeStepId.value));\nconst currentStepInfo = computed<StepInfo | undefined>(() => steps.value[currentIndex.value]);\n\nfunction registerStep(info: StepInfo): void {\n const idx = steps.value.findIndex((s) => s.id === info.id);\n if (idx >= 0) {\n const next = steps.value.slice();\n next[idx] = info;\n steps.value = next;\n return;\n }\n steps.value = [...steps.value, info];\n}\n\nfunction unregisterStep(id: string): void {\n steps.value = steps.value.filter((s) => s.id !== id);\n}\n\nfunction registerValidator(id: string, validator: () => boolean | Promise<boolean>): void {\n validators.set(id, validator);\n}\n\nfunction unregisterValidator(id: string): void {\n validators.delete(id);\n}\n\nfunction goTo(idOrIndex: string | number): void {\n const target = typeof idOrIndex === 'number' ? steps.value[idOrIndex]?.id : idOrIndex;\n if (!target) return;\n stepCtl.setValue(target);\n visitedSet.value = new Set([...visitedSet.value, target]);\n}\n\nasync function next(): Promise<void> {\n const step = currentStepInfo.value;\n if (!step || isPending.value) return;\n const validator = validators.get(step.id);\n if (validator) {\n isPending.value = true;\n try {\n const ok = await validator();\n if (!ok) return;\n } finally {\n isPending.value = false;\n }\n }\n if (step.isFinal) {\n isPending.value = true;\n try {\n await props.onComplete?.();\n } finally {\n isPending.value = false;\n }\n return;\n }\n const nextStep = steps.value[currentIndex.value + 1];\n if (nextStep) goTo(nextStep.id);\n}\n\nfunction back(): void {\n if (!props.canGoBack) return;\n const prev = steps.value[currentIndex.value - 1];\n if (prev) goTo(prev.id);\n}\n\n/* Live getters, not a snapshot — every part re-reads the registry as it changes. */\nprovide<WizardFormContextValue>(wizardContextKey, {\n get steps() {\n return steps.value;\n },\n get currentIndex() {\n return currentIndex.value;\n },\n get currentStep() {\n return currentStepInfo.value;\n },\n goTo,\n next,\n back,\n get canGoBack() {\n return props.canGoBack;\n },\n get visited() {\n return visited.value;\n },\n registerStep,\n unregisterStep,\n registerValidator,\n unregisterValidator,\n get isPending() {\n return isPending.value;\n },\n});\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootClass = computed(() => cn('flex flex-col gap-4', attrs.class as ClassValue));\n\n/** The rendered root `<div>` — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el });\n</script>\n\n<template>\n <div ref=\"el\" :class=\"rootClass\" v-bind=\"passthroughAttrs\"><slot /></div>\n</template>\n","<script lang=\"ts\">\nexport interface WizardFormFooterProps {\n /** The Back button's text. Fill the `prevLabel` slot for richer content. */\n readonly prevLabel?: string | number;\n\n /** The Next button's text. Fill the `nextLabel` slot for richer content. */\n readonly nextLabel?: string | number;\n\n /** The final step's confirm text. Fill the `submitLabel` slot for richer content. */\n readonly submitLabel?: string | number;\n\n /** The visibility of the Prev button when not on first step. Default true. */\n readonly hasPrev?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn } from '../../../foundation/styles';\nimport { useWizard } from './WizardFormContext';\n\n/** Renders the Back and Next control row, where Next turns into Finish on the wizard's last step. */\ndefineOptions({ name: 'WizardFormFooter', inheritAttrs: false });\n\ndefineSlots<{\n prevLabel?(): unknown;\n nextLabel?(): unknown;\n submitLabel?(): unknown;\n}>();\n\nwithDefaults(defineProps<WizardFormFooterProps>(), {\n prevLabel: 'Back',\n nextLabel: 'Next',\n submitLabel: 'Finish',\n hasPrev: true,\n});\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useWizard();\n\nconst isFirst = computed(() => ctx.currentIndex === 0);\nconst isFinal = computed(() => ctx.currentStep?.isFinal ?? false);\nconst showPrevButton = computed(() => ctx.canGoBack && !isFirst.value);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rowClass = computed(() => cn('mt-2 flex items-center justify-between gap-3', attrs.class as ClassValue));\n\nfunction onNext(): void {\n void ctx.next();\n}\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div ref=\"el\" :class=\"rowClass\" v-bind=\"passthroughAttrs\">\n <button\n v-if=\"hasPrev && showPrevButton\"\n type=\"button\"\n :disabled=\"ctx.isPending\"\n class=\"inline-flex h-9 items-center rounded-md border border-border bg-background px-4 text-sm font-medium hover:bg-muted disabled:opacity-50\"\n @click=\"ctx.back()\"\n >\n <slot name=\"prevLabel\">{{ prevLabel }}</slot>\n </button>\n <span v-else />\n <button\n type=\"button\"\n :disabled=\"ctx.isPending\"\n class=\"inline-flex h-9 items-center rounded-md bg-primary px-4 text-sm font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50\"\n @click=\"onNext\"\n >\n <template v-if=\"ctx.isPending\">…</template>\n <slot v-else-if=\"isFinal\" name=\"submitLabel\">{{ submitLabel }}</slot>\n <slot v-else name=\"nextLabel\">{{ nextLabel }}</slot>\n </button>\n </div>\n</template>\n","<script lang=\"ts\">\nexport interface WizardFormStepProps {\n /** The step id — the value `currentStep` takes when this step is active. */\n readonly id: string;\n\n /** The step-strip label. Defaults to the id. */\n readonly label?: string | number;\n\n /**\n * The gate run before advancing off this step. Resolving `false` blocks the move.\n *\n * Kept a PROP, not an emit: it RETURNS a verdict (possibly a promise), which an emit\n * cannot do.\n */\n readonly validate?: () => boolean | Promise<boolean>;\n\n /** Whether the step strip marks this step `(optional)`. */\n readonly isOptional?: boolean;\n\n /** Whether this is the last step — Next becomes the submit action. */\n readonly isFinal?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, useAttrs, useTemplateRef, watch } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn } from '../../../foundation/styles';\nimport { useWizard } from './WizardFormContext';\n\n/** Renders one wizard panel while its step is active, registering the step's metadata and validator. */\ndefineOptions({ name: 'WizardFormStep', inheritAttrs: false });\n\n/** The panel content — React's `children`. */\ndefineSlots<{ default(): unknown }>();\n\nconst props = defineProps<WizardFormStepProps>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useWizard();\n\nconst isCurrent = computed(() => ctx.currentStep?.id === props.id);\n\n/* Register / refresh step metadata. `immediate` so the step is in the registry from mount —\n nothing here touches the DOM, so it is safe during SSR. */\nwatch(\n () => ({\n id: props.id,\n label: props.label,\n isOptional: props.isOptional,\n isFinal: props.isFinal,\n }),\n (info) => ctx.registerStep(info),\n { immediate: true, deep: true },\n);\n\nwatch(\n [() => props.id, () => props.validate],\n ([id, validate]) => {\n if (validate) ctx.registerValidator(id, validate);\n else ctx.unregisterValidator(id);\n },\n { immediate: true },\n);\n\nonBeforeUnmount(() => {\n ctx.unregisterStep(props.id);\n ctx.unregisterValidator(props.id);\n});\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst panelClass = computed(() => cn('flex flex-col gap-3', attrs.class as ClassValue));\n\nconst labelledBy = computed(() => `wizard-step-${props.id}`);\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div\n v-if=\"isCurrent\"\n ref=\"el\"\n role=\"tabpanel\"\n :aria-labelledby=\"labelledBy\"\n :class=\"panelClass\"\n v-bind=\"passthroughAttrs\"\n >\n <slot />\n </div>\n</template>\n","<script lang=\"ts\">\n/* eslint-disable-next-line @typescript-eslint/no-empty-object-type -- kept as an\n exported name: React declared `WizardFormStepsProps` (an alias of `HTMLAttributes<HTMLDivElement>`)\n and consumers import it. Every attribute falls through. */\nexport interface WizardFormStepsProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn } from '../../../foundation/styles';\nimport { useWizard, type StepInfo } from './WizardFormContext';\n\n/** Renders the clickable step strip, where already-visited steps stay re-selectable while `canGoBack`. */\ndefineOptions({ name: 'WizardFormSteps', inheritAttrs: false });\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\n/* `ctx` is a live-getter object — read fields off it, never destructure. */\nconst ctx = useWizard();\n\nfunction canJump(step: StepInfo): boolean {\n return ctx.canGoBack && ctx.visited.has(step.id);\n}\n\nfunction onStepClick(step: StepInfo): void {\n if (canJump(step)) ctx.goTo(step.id);\n}\n\nfunction tabClass(step: StepInfo, index: number): string {\n const isCurrent = ctx.currentIndex === index;\n const wasVisited = ctx.visited.has(step.id);\n return cn(\n 'flex items-center gap-2 rounded-md px-3 py-1.5 text-xs font-medium transition-colors',\n isCurrent\n ? 'bg-primary text-primary-foreground'\n : wasVisited\n ? 'bg-muted text-foreground hover:bg-muted/70'\n : 'text-muted-foreground',\n !canJump(step) && 'cursor-default',\n );\n}\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst stripClass = computed(() => cn('flex items-center gap-2 overflow-x-auto', attrs.class as ClassValue));\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div ref=\"el\" role=\"tablist\" aria-label=\"WizardForm steps\" :class=\"stripClass\" v-bind=\"passthroughAttrs\">\n <button\n v-for=\"(step, i) in ctx.steps\"\n :key=\"step.id\"\n type=\"button\"\n role=\"tab\"\n :aria-selected=\"ctx.currentIndex === i\"\n :aria-disabled=\"!canJump(step) || undefined\"\n :class=\"tabClass(step, i)\"\n @click=\"onStepClick(step)\"\n >\n <span class=\"grid h-5 w-5 place-items-center rounded-full bg-background/20 text-[10px]\">\n {{ i + 1 }}\n </span>\n {{ step.label ?? step.id }}\n <span v-if=\"step.isOptional\" class=\"ml-1 text-[10px] opacity-70\">(optional)</span>\n </button>\n </div>\n</template>\n","<script lang=\"ts\">\nexport interface CodeEditorProps {\n /** The source text, controlled. The `v-model` binding target. */\n readonly modelValue?: string;\n\n /** The initial source text when uncontrolled. */\n readonly defaultValue?: string;\n\n /** The forward-compat hint; unused by this first-gen component. */\n readonly language?: string;\n\n /** The number of spaces one indent step inserts. Default `2`. */\n readonly tabSize?: number;\n\n /** Whether indenting inserts a tab character instead of `tabSize` spaces. Default `false`. */\n readonly isTabIndented?: boolean;\n\n /** Whether Tab indents. Escape then Tab leaves the editor. Default true. */\n readonly canIndentOnTab?: boolean;\n\n /** The localized keyboard-exit instruction shown below the editor. */\n readonly keyboardExitLabel?: string;\n\n /** The invalid surface override. Falls back to the surrounding form control's `isInvalid`. */\n readonly isInvalid?: boolean;\n\n /** The CSS minHeight on the surface (default `12rem`). */\n readonly minHeight?: string;\n\n /** The control's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly disabled?: boolean;\n\n /** The read-only state — React's spelling. Falls back to the form control's `isReadOnly`. */\n readonly readOnly?: boolean;\n\n /** Controlled axes use their canonical Vue model names; each update event requests caller state. */\n readonly readonly?: boolean;\n\n /** The required state. Falls back to the surrounding form control's `isRequired`. */\n readonly required?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, nextTick, ref, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { AriaAttribute } from '../../../foundation/dom';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useId } from '../../../foundation/identifiers';\nimport { useFormControl } from '../../../foundation/primitives';\n\n/** Renders a source-code textarea with a synced line-number gutter and Tab/Shift-Tab indenting, unhighlighted. */\n/* `inheritAttrs: false` so `class` folds into the surface's own `cn()` call, and so the rest\n of the attrs land on the inner `<textarea>` rather than the surface. */\ndefineOptions({ name: 'CodeEditor', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<CodeEditorProps>(), {\n tabSize: 2,\n isTabIndented: false,\n canIndentOnTab: true,\n keyboardExitLabel: 'Press Escape, then Tab to leave the editor.',\n minHeight: '12rem',\n /* Explicit `undefined` defaults: `useControlled` keys on `=== undefined`, and Vue casts an\n absent `boolean` prop to `false` — which would shadow the form control context. */\n modelValue: undefined,\n isInvalid: undefined,\n disabled: undefined,\n readOnly: undefined,\n readonly: undefined,\n required: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader types or re-indents the source — the `v-model` half. */\n 'update:modelValue': [value: string];\n}>();\n\nconst attrs = useAttrs();\n\nconst controlled = useControlled<string>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? '',\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst source = controlled.value;\n\n/* Inherits id/flags/describedby from a surrounding <Field>; explicit props win. */\nconst ctx = useFormControl();\nconst finalDisabled = computed(() => props.disabled ?? ctx?.isDisabled);\nconst finalReadOnly = computed(() => props.readonly ?? props.readOnly ?? ctx?.isReadOnly);\nconst finalInvalid = computed(() => props.isInvalid ?? ctx?.isInvalid);\n\nconst textarea = useTemplateRef<HTMLTextAreaElement>('textarea');\nconst scrollTop = ref(0);\nconst keyboardExitArmed = ref(false);\nconst keyboardHintId = useId();\n\nconst lineCount = computed(() => source.value.split('\\n').length);\nconst indentChar = computed(() => (props.isTabIndented ? '\\t' : ' '.repeat(props.tabSize)));\n\n// Generate line-number string once per line count.\nconst gutterText = computed(() => Array.from({ length: lineCount.value }, (_, i) => String(i + 1)).join('\\n'));\n\nfunction insertAtSelection(insert: string, selStart: number, selEnd: number): number {\n const next = source.value.slice(0, selStart) + insert + source.value.slice(selEnd);\n controlled.setValue(next);\n return selStart + insert.length;\n}\n\n/**\n * Restores the caret after a programmatic edit.\n *\n * React reached for `requestAnimationFrame` to wait out its re-render; `nextTick` is the exact\n * Vue equivalent — it resolves after the reactive update has been flushed to the DOM — and it\n * keeps a browser global out of this file entirely (`requestAnimationFrame` is undefined during\n * SSR, and this handler is only unreachable there by accident of it being a DOM event).\n */\nfunction restoreSelection(start: number, end: number): void {\n void nextTick(() => {\n const ta = textarea.value;\n if (!ta) return;\n ta.selectionStart = start;\n ta.selectionEnd = end;\n });\n}\n\n/* Runs after any caller-supplied `@keydown` (declared after `v-bind`), exactly as React's\n `onKeyDown?.(e)` ran before this body. */\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.isComposing) return;\n if (event.defaultPrevented || finalDisabled.value || finalReadOnly.value) return;\n if (!props.canIndentOnTab) return;\n if (event.key === 'Escape') {\n keyboardExitArmed.value = true;\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n if (event.key !== 'Tab') {\n keyboardExitArmed.value = false;\n return;\n }\n if (keyboardExitArmed.value) {\n keyboardExitArmed.value = false;\n return;\n }\n\n const ta = event.currentTarget as HTMLTextAreaElement;\n const start = ta.selectionStart;\n const end = ta.selectionEnd;\n const text = source.value;\n\n event.preventDefault();\n\n if (start === end) {\n if (event.shiftKey) {\n // Outdent at cursor's line.\n const lineStart = text.lastIndexOf('\\n', start - 1) + 1;\n const lineSlice = text.slice(lineStart, start);\n const match = props.isTabIndented ? /^\\t/ : new RegExp(`^ {1,${props.tabSize}}`);\n const m = match.exec(lineSlice);\n if (m) {\n const next = text.slice(0, lineStart) + lineSlice.slice(m[0].length) + text.slice(start);\n controlled.setValue(next);\n const newPos = start - m[0].length;\n restoreSelection(newPos, newPos);\n }\n } else {\n const newPos = insertAtSelection(indentChar.value, start, end);\n restoreSelection(newPos, newPos);\n }\n return;\n }\n\n // Multi-line indent / outdent.\n const before = text.slice(0, start);\n const between = text.slice(start, end);\n const after = text.slice(end);\n const lineStartOffset = before.lastIndexOf('\\n') + 1;\n const blockStart = before.slice(0, lineStartOffset);\n const block = before.slice(lineStartOffset) + between;\n let newStart: number;\n let newEnd: number;\n if (event.shiftKey) {\n const re = props.isTabIndented ? /^\\t/gm : new RegExp(`^ {1,${props.tabSize}}`, 'gm');\n let removedTotal = 0;\n let removedFirst = 0;\n const outdented = block.replace(re, (m, offset: number) => {\n removedTotal += m.length;\n if (offset === 0) removedFirst = m.length;\n return '';\n });\n controlled.setValue(blockStart + outdented + after);\n newStart = Math.max(lineStartOffset, start - removedFirst);\n newEnd = Math.max(newStart, end - removedTotal);\n } else {\n const relEnd = end - lineStartOffset;\n let inserted = 0;\n const indented = block.replace(/^/gm, (_m, offset: number) => {\n if (offset < relEnd) inserted++;\n return indentChar.value;\n });\n controlled.setValue(blockStart + indented + after);\n newStart = start + indentChar.value.length;\n newEnd = end + indentChar.value.length * inserted;\n }\n restoreSelection(newStart, newEnd);\n}\n\nfunction onInput(event: Event): void {\n if ((event as InputEvent).isComposing) return;\n controlled.setValue((event.target as HTMLTextAreaElement).value);\n}\n\nfunction onScroll(event: Event): void {\n scrollTop.value = (event.currentTarget as HTMLTextAreaElement).scrollTop;\n}\n\nconst state = computed(() => (finalInvalid.value ? 'invalid' : 'default'));\n\n/* Never a declared prop — a declared `'aria-describedby'` would arrive as\n `props.ariaDescribedby` and stop reaching the DOM. */\nconst ariaDescribedBy = computed(() => attrs[AriaAttribute.DescribedBy] as string | undefined);\n\nconst textareaId = computed(() => props.id ?? ctx?.id);\nconst isRequired = computed(() => props.required ?? ctx?.isRequired);\nconst describedBy = computed(\n () =>\n [ariaDescribedBy.value ?? ctx?.describedBy, props.canIndentOnTab ? keyboardHintId : undefined]\n .filter(Boolean)\n .join(' ') || undefined,\n);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', AriaAttribute.DescribedBy]);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst surfaceClass = computed(() =>\n cn(\n 'relative flex overflow-hidden rounded-md border border-input bg-card text-card-foreground font-mono text-sm shadow-sm',\n 'focus-within:border-ring focus-within:ring-2 focus-within:ring-ring/40',\n state.value === 'invalid' && 'border-destructive focus-within:border-destructive focus-within:ring-destructive/40',\n finalDisabled.value && 'cursor-not-allowed opacity-60',\n attrs.class as ClassValue,\n ),\n);\n\nconst gutterStyle = computed(() => ({ transform: `translateY(${-scrollTop.value}px)` }));\n\n/** The rendered `<textarea>` — the Vue stand-in for the React original's forwarded ref. */\nuseNativeFormReset(textarea, controlled.reset, () => {\n if (textarea.value) textarea.value.value = String(source.value ?? '');\n});\n\ndefineExpose({ el: textarea });\n</script>\n\n<template>\n <div\n :data-state=\"state\"\n :data-language=\"language || undefined\"\n :data-disabled=\"finalDisabled || undefined\"\n :data-readonly=\"finalReadOnly || undefined\"\n :class=\"surfaceClass\"\n :style=\"{ minHeight }\"\n >\n <!-- React held a ref on this gutter that it never read; dropped rather than kept dead. -->\n <div\n aria-hidden=\"true\"\n class=\"select-none overflow-hidden border-r border-border bg-muted/40 text-right text-muted-foreground tabular-nums\"\n >\n <div class=\"whitespace-pre px-3 py-2\" :style=\"gutterStyle\">{{ gutterText }}</div>\n </div>\n <textarea\n ref=\"textarea\"\n :value=\"source\"\n :id=\"textareaId\"\n :disabled=\"finalDisabled\"\n :readonly=\"finalReadOnly\"\n :required=\"isRequired\"\n :spellcheck=\"false\"\n :aria-invalid=\"finalInvalid || undefined\"\n :aria-describedby=\"describedBy\"\n class=\"block flex-1 resize-none whitespace-pre overflow-auto bg-transparent px-3 py-2 outline-hidden placeholder:text-subtle-foreground disabled:cursor-not-allowed\"\n v-bind=\"passthroughAttrs\"\n @input=\"onInput\"\n @compositionend=\"onInput\"\n @keydown=\"onKeydown\"\n @scroll=\"onScroll\"\n />\n </div>\n <p v-if=\"props.canIndentOnTab\" :id=\"keyboardHintId\" class=\"mt-1 text-xs text-muted-foreground\">\n {{ props.keyboardExitLabel }}\n </p>\n</template>\n","<script lang=\"ts\">\nimport { Marked } from 'marked';\nimport {\n Bold,\n Code as CodeText,\n Heading1,\n Heading2,\n Italic,\n Link2,\n List as ListGroup,\n Quote as QuoteText,\n} from 'lucide-vue-next';\nimport type { IconAdapter } from '../../../foundation/icons';\n\n/** Defines the pane layout of a markdown editor. */\nexport const MarkdownEditorView = {\n /** Refers to editor + preview shown side by side. */\n Split: 'split',\n /** Refers to the editor pane only. */\n Edit: 'edit',\n /** Refers to the rendered-preview pane only. */\n Preview: 'preview',\n} as const;\n\nexport type MarkdownEditorView = (typeof MarkdownEditorView)[keyof typeof MarkdownEditorView];\n\nexport interface MarkdownEditorProps {\n /** The markdown source, controlled. The `v-model` binding target. */\n readonly modelValue?: string;\n\n /** The initial markdown source when uncontrolled. */\n readonly defaultValue?: string;\n\n /** The pane layout, controlled. The `v-model:view` binding target. */\n readonly view?: MarkdownEditorView;\n\n /** The initial pane layout when uncontrolled. Default `split`. */\n readonly defaultView?: MarkdownEditorView;\n\n /** The invalid surface override. Falls back to the surrounding form control's `isInvalid`. */\n readonly isInvalid?: boolean;\n\n /** The CSS minHeight on the surface (default `18rem`). */\n readonly minHeight?: string;\n\n /** The control's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly disabled?: boolean;\n\n /** The read-only state — React's spelling. Falls back to the form control's `isReadOnly`. */\n readonly readOnly?: boolean;\n\n /** Controlled axes use their canonical Vue model names; each update event requests caller state. */\n readonly readonly?: boolean;\n\n /** The required state. Falls back to the surrounding form control's `isRequired`. */\n readonly required?: boolean;\n}\n\n/** Describes the selection a toolbar action operates on. */\ninterface ToolbarSelection {\n value: string;\n start: number;\n end: number;\n}\n\n/** Describes the edit a toolbar action produces. */\ninterface ToolbarEdit {\n value: string;\n selStart: number;\n selEnd: number;\n}\n\ninterface ToolbarAction {\n key: string;\n label: string;\n /* React held a rendered `ReactNode` here; an SFC's plain script block cannot carry JSX, so\n the icon COMPONENT is stored and `<Icon>` renders it in the template. */\n icon: IconAdapter;\n apply: (sel: ToolbarSelection) => ToolbarEdit;\n}\n\nconst wrap =\n (before: string, after: string) =>\n ({ value, start, end }: ToolbarSelection): ToolbarEdit => {\n const sel = value.slice(start, end);\n const next = value.slice(0, start) + before + sel + after + value.slice(end);\n const selStart = start + before.length;\n return { value: next, selStart, selEnd: selStart + sel.length };\n };\n\nconst linePrefix =\n (prefix: string) =>\n ({ value, start, end }: ToolbarSelection): ToolbarEdit => {\n const lineStart = value.lastIndexOf('\\n', start - 1) + 1;\n const trailing = value.slice(end).indexOf('\\n');\n const lineEnd = trailing === -1 ? value.length : end + trailing;\n const block = value.slice(lineStart, lineEnd);\n const updated = block\n .split('\\n')\n .map((l) => prefix + l)\n .join('\\n');\n const next = value.slice(0, lineStart) + updated + value.slice(lineEnd);\n return { value: next, selStart: lineStart + prefix.length, selEnd: lineStart + updated.length };\n };\n\nconst escapeHtml = (html: string) =>\n html\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n\n// Only protocols a markdown link/image may navigate to from the preview;\n// anything else (javascript:, data:, vbscript:, …) is dropped.\n\n// Local marked instance whose raw-HTML tokens render as escaped text, so\n// embedded HTML (e.g. `<img onerror=…>`) is inert in the default preview,\n// and whose link/image URLs are protocol-filtered (no `javascript:` links).\n// Markdown formatting is unaffected. Consumers needing real HTML fill the\n// `preview` slot and sanitize themselves.\nconst previewMarked = new Marked({\n renderer: {\n html({ text }) {\n return escapeHtml(text);\n },\n link({ href, title, tokens }) {\n const url = UrlExtensions.safeNavigation(href);\n const text = this.parser.parseInline(tokens);\n if (url === undefined) return text;\n const titleAttr = title ? ` title=\"${escapeHtml(title)}\"` : '';\n return `<a href=\"${escapeHtml(url)}\"${titleAttr}>${text}</a>`;\n },\n image({ href, title, text }) {\n const url = UrlExtensions.safeResource(href);\n if (url === undefined) return escapeHtml(text);\n const titleAttr = title ? ` title=\"${escapeHtml(title)}\"` : '';\n return `<img src=\"${escapeHtml(url)}\" alt=\"${escapeHtml(text)}\"${titleAttr}>`;\n },\n },\n});\n\nconst ToolbarActions: ReadonlyArray<ToolbarAction> = [\n { key: 'h1', label: 'Heading 1', icon: Heading1, apply: linePrefix('# ') },\n { key: 'h2', label: 'Heading 2', icon: Heading2, apply: linePrefix('## ') },\n { key: 'bold', label: 'Bold', icon: Bold, apply: wrap('**', '**') },\n { key: 'italic', label: 'Italic', icon: Italic, apply: wrap('*', '*') },\n { key: 'code', label: 'InlineLayout code', icon: CodeText, apply: wrap('`', '`') },\n { key: 'link', label: 'LinkItem', icon: Link2, apply: wrap('[', '](https://)') },\n { key: 'list', label: 'ListGroup', icon: ListGroup, apply: linePrefix('- ') },\n { key: 'quote', label: 'Blockquote', icon: QuoteText, apply: linePrefix('> ') },\n];\n\n/* Hoisted out of the template — the runtime template compiler resolves plain identifiers,\n not array literals built from an imported enum. */\nconst ViewOrder: ReadonlyArray<MarkdownEditorView> = [\n MarkdownEditorView.Edit,\n MarkdownEditorView.Split,\n MarkdownEditorView.Preview,\n];\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { UrlExtensions } from '../../../foundation/dom';\nimport { computed, nextTick, useAttrs, useSlots, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { AriaAttribute } from '../../../foundation/dom';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useId } from '../../../foundation/identifiers';\nimport { Icon } from '../../../foundation/icons';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { InputState } from '../InputStyles';\n\n/** Renders a markdown pane, a formatting toolbar and a sanitized live preview, in split, edit or preview view. */\n/* `inheritAttrs: false` so `class` folds into the surface's own `cn()` call, and so the rest\n of the attrs land on the inner `<textarea>` rather than the surface. */\ndefineOptions({ name: 'MarkdownEditor', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<MarkdownEditorProps>(), {\n minHeight: '18rem',\n /* Explicit `undefined` defaults: `useControlled` keys on `=== undefined`, and Vue casts an\n absent `boolean` prop to `false` — which would shadow the form control context. */\n modelValue: undefined,\n view: undefined,\n defaultView: undefined,\n isInvalid: undefined,\n disabled: undefined,\n readOnly: undefined,\n readonly: undefined,\n required: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader edits the markdown, by typing or via a toolbar action — the `v-model` half. */\n 'update:modelValue': [value: string];\n /** Fires when the reader picks a different pane layout — the `v-model:view` half. */\n 'update:view': [view: MarkdownEditorView];\n}>();\n\ndefineSlots<{\n /** Replaces the rendered preview pane — React's `renderPreview`. Filling it opts out of\n * the built-in `marked` render, and the consumer owns sanitizing. */\n preview?(props: { markdown: string }): unknown;\n}>();\n\nconst attrs = useAttrs();\nconst slots = useSlots();\n\nconst valueCtl = useControlled<string>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? '',\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst viewCtl = useControlled<MarkdownEditorView>({\n controlled: () => props.view,\n default: () => props.defaultView ?? MarkdownEditorView.Split,\n onChange: (next) => {\n emit('update:view', next);\n },\n});\n\n/* Named `markdown` / `mode`, not `modelValue` / `view`: a setup const sharing a prop's name\n collides with it in the template scope (`vue/no-dupe-keys`). */\nconst markdown = valueCtl.value;\nconst mode = viewCtl.value;\n\nconst textarea = useTemplateRef<HTMLTextAreaElement>('textarea');\nconst generatedId = useId('markdown-editor');\n\n/* Inherits id/flags/describedby from a surrounding <Field>; explicit props win.\n The context wires the EDITING surface (textarea) only — the preview pane is\n read-only chrome, not the control. */\nconst ctx = useFormControl();\nconst finalDisabled = computed(() => props.disabled ?? ctx?.isDisabled);\nconst finalReadOnly = computed(() => props.readonly ?? props.readOnly ?? ctx?.isReadOnly);\nconst finalInvalid = computed(() => props.isInvalid ?? ctx?.isInvalid);\n\nconst hasPreviewSlot = computed(() => Boolean(slots.preview));\n\nconst previewHtml = computed(() => {\n if (hasPreviewSlot.value) return null;\n try {\n return previewMarked.parse(markdown.value, { async: false }) as string;\n } catch {\n return '<p>Failed to render preview.</p>';\n }\n});\n\nfunction applyAction(action: ToolbarAction): void {\n const ta = textarea.value;\n if (!ta) return;\n const next = action.apply({\n value: markdown.value,\n start: ta.selectionStart ?? markdown.value.length,\n end: ta.selectionEnd ?? markdown.value.length,\n });\n valueCtl.setValue(next.value);\n /* React reached for `requestAnimationFrame` to wait out its re-render; `nextTick` resolves\n after the reactive update has been flushed to the DOM, and keeps a browser global out of\n this file. */\n void nextTick(() => {\n ta.focus();\n ta.selectionStart = next.selStart;\n ta.selectionEnd = next.selEnd;\n });\n}\n\nfunction onInput(event: Event): void {\n if ((event as InputEvent).isComposing) return;\n valueCtl.setValue((event.target as HTMLTextAreaElement).value);\n}\n\nconst showEdit = computed(() => mode.value === MarkdownEditorView.Split || mode.value === MarkdownEditorView.Edit);\nconst showPreview = computed(\n () => mode.value === MarkdownEditorView.Split || mode.value === MarkdownEditorView.Preview,\n);\n\nconst state = computed(() => (finalInvalid.value ? InputState.Invalid : InputState.Default));\n\n/* Never a declared prop — a declared `'aria-describedby'` would arrive as\n `props.ariaDescribedby` and stop reaching the DOM. */\nconst ariaDescribedBy = computed(() => attrs[AriaAttribute.DescribedBy] as string | undefined);\n\nconst textareaId = computed(() => props.id ?? ctx?.id ?? generatedId);\nconst isRequired = computed(() => props.required ?? ctx?.isRequired);\nconst describedBy = computed(() => ariaDescribedBy.value ?? ctx?.describedBy);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', AriaAttribute.DescribedBy]);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst surfaceClass = computed(() =>\n cn(\n 'flex flex-col overflow-hidden rounded-md border border-input bg-card text-card-foreground shadow-sm',\n state.value === InputState.Invalid && 'border-destructive',\n finalDisabled.value && 'opacity-60',\n attrs.class as ClassValue,\n ),\n);\n\nconst textareaClass = computed(() =>\n cn(\n 'flex-1 resize-none whitespace-pre-wrap break-words bg-transparent p-3 font-mono text-sm outline-hidden placeholder:text-subtle-foreground disabled:cursor-not-allowed',\n showPreview.value && 'border-r-0',\n ),\n);\n\nfunction viewButtonClass(v: MarkdownEditorView): string {\n return cn(\n 'inline-flex h-6 items-center rounded px-2 text-xs font-medium transition-colors',\n mode.value === v ? 'bg-primary text-primary-foreground' : 'text-muted-foreground hover:text-foreground',\n );\n}\n\n/** The rendered `<textarea>` — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: textarea });\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n valueCtl.reset();\n viewCtl.reset();\n});\n</script>\n\n<template>\n <div :key=\"formResetRevision\" :data-state=\"state\" :class=\"surfaceClass\" :style=\"{ minHeight }\">\n <div class=\"flex items-center gap-1 border-b border-border bg-muted/40 px-2 py-1\">\n <div role=\"toolbar\" aria-label=\"Markdown formatting\" class=\"flex items-center gap-0.5\">\n <button\n v-for=\"a in ToolbarActions\"\n :key=\"a.key\"\n type=\"button\"\n :aria-label=\"a.label\"\n :disabled=\"finalDisabled || finalReadOnly\"\n class=\"inline-flex h-7 w-7 items-center justify-center rounded-sm text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50\"\n @click=\"applyAction(a)\"\n >\n <Icon :icon=\"a.icon\" :size=\"14\" />\n </button>\n </div>\n <div\n role=\"radiogroup\"\n aria-label=\"View mode\"\n class=\"ml-auto flex items-center gap-0.5 rounded-md bg-card p-0.5 ring-1 ring-border\"\n >\n <button\n v-for=\"v in ViewOrder\"\n :key=\"v\"\n type=\"button\"\n role=\"radio\"\n :aria-checked=\"mode === v\"\n :class=\"viewButtonClass(v)\"\n @click=\"viewCtl.setValue(v)\"\n >\n {{ v }}\n </button>\n </div>\n </div>\n <div class=\"flex flex-1 divide-x divide-border\" :style=\"{ minHeight: 0 }\">\n <textarea\n v-if=\"showEdit\"\n ref=\"textarea\"\n :id=\"textareaId\"\n :value=\"markdown\"\n :disabled=\"finalDisabled\"\n :readonly=\"finalReadOnly\"\n :required=\"isRequired\"\n :spellcheck=\"false\"\n :aria-invalid=\"finalInvalid || undefined\"\n :aria-describedby=\"describedBy\"\n :class=\"textareaClass\"\n v-bind=\"passthroughAttrs\"\n @input=\"onInput\"\n @compositionend=\"onInput\"\n />\n <!--\n `group` role: aria-label is prohibited on a bare (generic) div —\n axe aria-prohibited-attr. Non-landmark grouping keeps the pane\n named for AT without polluting the page's region list.\n -->\n <div\n v-if=\"showPreview\"\n role=\"group\"\n aria-live=\"polite\"\n aria-label=\"Preview\"\n class=\"prose prose-sm flex-1 overflow-auto bg-background p-3 text-sm text-foreground\"\n >\n <slot v-if=\"hasPreviewSlot\" name=\"preview\" :markdown=\"markdown\" />\n <!-- eslint-disable-next-line vue/no-v-html -- `previewMarked` escapes raw HTML tokens\n and protocol-filters link/image URLs; the consumer opts out via the `preview` slot. -->\n <div v-else v-html=\"previewHtml ?? ''\" />\n </div>\n </div>\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </div>\n</template>\n","import { inject, type InjectionKey } from 'vue';\nimport type { JsonPath } from './JsonEditorExtensions';\n\n/** Defines how a JSON editor renders its document. */\nexport const JsonEditorMode = {\n /** Refers to the collapsible tree/structured view. */\n Tree: 'tree',\n /** Refers to the raw-text view. */\n Text: 'text',\n} as const;\n\nexport type JsonEditorMode = (typeof JsonEditorMode)[keyof typeof JsonEditorMode];\n\n/**\n * The seam between `JsonEditor` and its private tree/text subviews.\n *\n * React drilled `updateAt` + the three flags through every `TreeNode` recursion level.\n * Injection carries them instead — the tree is arbitrarily deep, and re-emitting an\n * `update-at` event at each level would be the only alternative under the emits rule.\n * Every field but `updateAt` is a live getter — read them off the object, don't destructure.\n */\nexport interface JsonEditorContextValue {\n /** Writes `next` at `path` and publishes the new document. */\n updateAt: (path: JsonPath, next: unknown) => void;\n readonly isDisabled: boolean;\n readonly isReadOnly: boolean;\n readonly isInvalid: boolean;\n}\n\nexport const JsonEditorKey: InjectionKey<JsonEditorContextValue> = Symbol('wow-two.jsonEditor');\n\n/** Reads the surrounding JSON-editor context; throws when used outside a `<JsonEditor>`. */\nexport function useJsonEditorContext(): JsonEditorContextValue {\n const context = inject(JsonEditorKey, null);\n if (!context) throw new Error('JsonEditor.* must be used inside <JsonEditor>');\n return context;\n}\n","/* Internal helpers for the JSON editor subviews — not exported from the folder barrel. */\n\n/** Addresses a node inside the edited document. */\nexport type JsonPath = Array<string | number>;\n\n/** Extends the edited JSON document with the path / type / serialization reads its subviews share. */\nexport const JsonEditorExtensions = {\n /** Names the JSON kind of a value — `null`, `array`, or its `typeof`. */\n describeType(v: unknown): string {\n if (v === null) return 'null';\n if (Array.isArray(v)) return 'array';\n return typeof v;\n },\n\n /** Renders a path as its dotted / bracketed source form — `items[0].name`. */\n pathToString(path: JsonPath): string {\n return path.map((p, i) => (typeof p === 'number' ? `[${p}]` : i === 0 ? p : `.${p}`)).join('');\n },\n\n /** Returns a copy of `root` with the node at `path` replaced by `next`. */\n setAtPath(root: unknown, path: JsonPath, next: unknown): unknown {\n if (path.length === 0) return next;\n const [head, ...rest] = path;\n if (Array.isArray(root)) {\n const idx = head as number;\n const copy = root.slice();\n copy[idx] = JsonEditorExtensions.setAtPath(root[idx], rest, next);\n return copy;\n }\n if (root && typeof root === 'object') {\n const key = head as string;\n return {\n ...(root as Record<string, unknown>),\n [key]: JsonEditorExtensions.setAtPath((root as Record<string, unknown>)[key], rest, next),\n };\n }\n return root;\n },\n\n /** `JSON.stringify` at `indent` spaces, falling back to an empty string on a cyclic value. */\n safeStringify(value: unknown, indent: number): string {\n try {\n return JSON.stringify(value, null, indent);\n } catch {\n return '';\n }\n },\n} as const;\n","<script lang=\"ts\">\nimport type { JsonPath } from './JsonEditorExtensions';\n\n/** Internal — one row of `JsonEditor`'s tree pane. Not exported from the folder barrel. */\nexport interface JsonEditorTreeNodeProps {\n /** The key this node sits under; `null` at the document root. */\n readonly keyName: string | number | null;\n\n /** The node's value. */\n readonly value: unknown;\n\n /** The node's address inside the document. */\n readonly path: JsonPath;\n\n /** The nesting depth — drives indentation and the initial open state. */\n readonly depth: number;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { ChevronRight, Copy } from 'lucide-vue-next';\nimport { cn } from '../../../foundation/styles';\nimport { Icon } from '../../../foundation/icons';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { useJsonEditorContext } from './JsonEditorContext';\nimport { JsonEditorExtensions } from './JsonEditorExtensions';\n\n/** Renders one tree row — a collapsible object/array summary or an editable primitive leaf, plus copy-path. */\ndefineOptions({ name: 'JsonEditorTreeNode' });\n\nconst props = defineProps<JsonEditorTreeNodeProps>();\n\n/* The transient leaf editor is a real editing surface — the Field's helper/error\n description follows it (the input keeps its own action name). */\nconst ctx = useFormControl();\nconst editor = useJsonEditorContext();\n\nconst type = computed(() => JsonEditorExtensions.describeType(props.value));\nconst isObject = computed(() => type.value === 'object' || type.value === 'array');\n\nconst open = ref(props.depth < 2);\nconst editing = ref(false);\nconst draft = ref('');\n\nfunction startEdit(): void {\n if (editor.isDisabled || editor.isReadOnly || isObject.value) return;\n editing.value = true;\n draft.value = typeof props.value === 'string' ? props.value : String(props.value);\n}\n\nfunction commitEdit(): void {\n editing.value = false;\n if (typeof props.value === 'number') {\n const n = Number(draft.value);\n if (!Number.isNaN(n)) editor.updateAt(props.path, n);\n } else if (typeof props.value === 'boolean') {\n if (draft.value === 'true' || draft.value === 'false') {\n editor.updateAt(props.path, draft.value === 'true');\n }\n } else if (props.value === null) {\n if (draft.value === 'null') editor.updateAt(props.path, null);\n } else {\n editor.updateAt(props.path, draft.value);\n }\n}\n\nfunction onDraftInput(event: Event): void {\n draft.value = (event.target as HTMLInputElement).value;\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.isComposing) return;\n if (event.key === 'Enter') commitEdit();\n if (event.key === 'Escape') editing.value = false;\n}\n\n/* Guarded on `typeof navigator`; the handler is click-driven, so it is unreachable\n during SSR either way. */\nfunction copyPath(): void {\n const text = JsonEditorExtensions.pathToString(props.path);\n if (typeof navigator !== 'undefined' && navigator.clipboard) {\n navigator.clipboard.writeText(text).catch(() => {});\n }\n}\n\nconst entries = computed<ReadonlyArray<readonly [string | number, unknown]>>(() => {\n if (!isObject.value) return [];\n if (Array.isArray(props.value)) {\n return (props.value as unknown[]).map((v, i) => [i, v] as const);\n }\n return Object.entries(props.value as Record<string, unknown>);\n});\n\nconst keyLabel = computed(() => (typeof props.keyName === 'string' ? `\"${props.keyName}\"` : props.keyName));\n\nconst summary = computed(() =>\n Array.isArray(props.value) ? `Array(${entries.value.length})` : `Object(${entries.value.length})`,\n);\n\nconst leafLabel = computed(() => (type.value === 'string' ? `\"${props.value as string}\"` : String(props.value)));\n\nconst copyLabel = computed(() => `Copy path ${JsonEditorExtensions.pathToString(props.path) || 'root'}`);\n\nconst rowStyle = computed(() => ({ paddingLeft: `${props.depth * 16}px` }));\n\nconst chevronClass = computed(() => cn('transition-transform', open.value && 'rotate-90'));\n\nconst leafClass = computed(() =>\n cn(\n 'cursor-text rounded-sm px-1 text-left transition-colors',\n !editor.isDisabled && !editor.isReadOnly && 'hover:bg-muted',\n type.value === 'string' && 'text-info',\n type.value === 'number' && 'text-warning',\n type.value === 'boolean' && 'text-success',\n type.value === 'null' && 'text-muted-foreground italic',\n ),\n);\n\nconst ChevronIcon = ChevronRight;\nconst CopyIcon = Copy;\n</script>\n\n<template>\n <li role=\"treeitem\" :aria-expanded=\"isObject ? open : undefined\" class=\"px-1\">\n <div class=\"group flex items-start gap-1 py-0.5\" :style=\"rowStyle\">\n <button\n v-if=\"isObject\"\n type=\"button\"\n :aria-label=\"open ? 'Collapse' : 'Expand'\"\n class=\"inline-flex h-5 w-5 items-center justify-center text-muted-foreground hover:text-foreground\"\n @click=\"open = !open\"\n >\n <Icon :icon=\"ChevronIcon\" :size=\"12\" :class=\"chevronClass\" />\n </button>\n <span v-else class=\"inline-block h-5 w-5\" />\n <span v-if=\"keyName !== null\" class=\"text-foreground\">\n {{ keyLabel }}<span class=\"text-muted-foreground\">: </span>\n </span>\n <span v-if=\"isObject\" class=\"text-muted-foreground\">{{ summary }}</span>\n <input\n v-else-if=\"editing\"\n autofocus\n aria-label=\"Edit value\"\n :aria-invalid=\"editor.isInvalid || undefined\"\n :aria-describedby=\"ctx?.describedBy\"\n :value=\"draft\"\n class=\"h-5 rounded-sm bg-background px-1 text-sm font-mono outline-hidden ring-2 ring-ring\"\n @input=\"onDraftInput\"\n @keydown=\"onKeydown\"\n @blur=\"commitEdit\"\n />\n <button v-else type=\"button\" :class=\"leafClass\" @click=\"startEdit\">{{ leafLabel }}</button>\n <button\n type=\"button\"\n :aria-label=\"copyLabel\"\n class=\"ml-auto opacity-0 transition-opacity group-hover:opacity-100 inline-flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground\"\n @click=\"copyPath\"\n >\n <Icon :icon=\"CopyIcon\" :size=\"11\" />\n </button>\n </div>\n <!-- Recursion by implicit self-reference: an SFC may name itself by its filename. -->\n <ul v-if=\"isObject && open\" role=\"group\">\n <JsonEditorTreeNode\n v-for=\"[k, v] in entries\"\n :key=\"String(k)\"\n :key-name=\"k\"\n :value=\"v\"\n :path=\"[...path, k]\"\n :depth=\"depth + 1\"\n />\n </ul>\n </li>\n</template>\n","<script lang=\"ts\">\n/** Internal — the tree pane of `JsonEditor`. Not exported from the folder barrel. */\nexport interface JsonEditorTreeViewProps {\n /** The document rendered as a tree. */\n readonly value: unknown;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useFormControl } from '../../../foundation/primitives';\nimport { useJsonEditorContext } from './JsonEditorContext';\nimport JsonEditorTreeNode from './JsonEditorTreeNode.vue';\n\n/** Renders the document as an ARIA tree of nodes, and carries the surrounding field's labelling. */\ndefineOptions({ name: 'JsonEditorTreeView' });\n\ndefineProps<JsonEditorTreeViewProps>();\n\n/* In tree mode the tree IS the editing surface — it carries the context id\n (label anchor) and is named/described by the Field chrome. */\nconst ctx = useFormControl();\nconst editor = useJsonEditorContext();\n</script>\n\n<template>\n <ul\n role=\"tree\"\n :id=\"ctx?.id\"\n :aria-labelledby=\"ctx?.labelledBy\"\n :aria-describedby=\"ctx?.describedBy\"\n :aria-invalid=\"editor.isInvalid || undefined\"\n class=\"font-mono text-sm\"\n >\n <JsonEditorTreeNode :key-name=\"null\" :value=\"value\" :path=\"[]\" :depth=\"0\" />\n </ul>\n</template>\n","<script lang=\"ts\">\n/** Internal — the raw-text pane of `JsonEditor`. Not exported from the folder barrel. */\nexport interface JsonEditorTextViewProps {\n /** The document rendered as pretty-printed JSON. */\n readonly value: unknown;\n\n /** The `JSON.stringify` indent. */\n readonly indent: number;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport { cn } from '../../../foundation/styles';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { useJsonEditorContext } from './JsonEditorContext';\nimport { JsonEditorExtensions } from './JsonEditorExtensions';\n\n/** Renders the document as a pretty-printed JSON textarea that parses on blur and shows parse errors. */\ndefineOptions({ name: 'JsonEditorTextView' });\n\nconst props = defineProps<JsonEditorTextViewProps>();\n\nconst emit = defineEmits<{\n /** Fires when the reader leaves the textarea and the edited source parses as valid JSON. */\n commit: [value: unknown];\n}>();\n\n/* In text mode the raw textarea is the editing surface — it takes the context id\n (LabelText `for` target) and the Field label overrides the generic fallback name. */\nconst ctx = useFormControl();\nconst editor = useJsonEditorContext();\n\nconst initial = computed(() => JsonEditorExtensions.safeStringify(props.value, props.indent));\n\nconst draft = ref(initial.value);\nconst error = ref<string | null>(null);\nconst dirty = ref(false);\n\n// Re-sync when external value changes (when not actively editing).\nwatch(initial, (next) => {\n if (!dirty.value) draft.value = next;\n});\n\nfunction commit(): void {\n try {\n const parsed: unknown = JSON.parse(draft.value);\n error.value = null;\n emit('commit', parsed);\n dirty.value = false;\n } catch (err) {\n error.value = err instanceof Error ? err.message : 'Invalid JSON';\n }\n}\n\nfunction onInput(event: Event): void {\n if ((event as InputEvent).isComposing) return;\n dirty.value = true;\n draft.value = (event.target as HTMLTextAreaElement).value;\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.isComposing) return;\n if (event.key === 'Escape') {\n draft.value = initial.value;\n error.value = null;\n dirty.value = false;\n }\n}\n\nconst textareaClass = computed(() =>\n cn(\n 'flex-1 resize-none whitespace-pre bg-transparent p-3 font-mono text-sm outline-hidden placeholder:text-subtle-foreground disabled:cursor-not-allowed',\n error.value && 'text-foreground',\n ),\n);\n</script>\n\n<template>\n <div class=\"flex h-full flex-col\">\n <textarea\n :id=\"ctx?.id\"\n aria-label=\"JSON source\"\n :aria-labelledby=\"ctx?.labelledBy\"\n :aria-invalid=\"editor.isInvalid || undefined\"\n :aria-describedby=\"ctx?.describedBy\"\n :value=\"draft\"\n :disabled=\"editor.isDisabled\"\n :readonly=\"editor.isReadOnly\"\n :spellcheck=\"false\"\n :class=\"textareaClass\"\n @input=\"onInput\"\n @compositionend=\"onInput\"\n @blur=\"commit\"\n @keydown=\"onKeydown\"\n />\n <div\n v-if=\"error\"\n role=\"alert\"\n class=\"border-t border-destructive bg-destructive-soft px-3 py-2 text-xs text-destructive\"\n >\n {{ error }}\n </div>\n </div>\n</template>\n","<script lang=\"ts\">\nimport type { JsonEditorMode } from './JsonEditorContext';\n\nexport interface JsonEditorProps {\n /** The document, controlled. The `v-model` binding target. */\n readonly modelValue?: unknown;\n\n /** The initial document when uncontrolled. Defaults to `{}`. */\n readonly defaultValue?: unknown;\n\n /** The render mode, controlled. The `v-model:mode` binding target. */\n readonly mode?: JsonEditorMode;\n\n /** The initial render mode when uncontrolled. Default `tree`. */\n readonly defaultMode?: JsonEditorMode;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly isDisabled?: boolean;\n\n /** The read-only state. Falls back to the surrounding form control's `isReadOnly`. */\n readonly isReadOnly?: boolean;\n\n /** The invalid surface override. Falls back to the surrounding form control's `isInvalid`. */\n readonly isInvalid?: boolean;\n\n /** The `JSON.stringify` indent used by text mode. Default `2`. */\n readonly indent?: number;\n\n /** The CSS minHeight on the surface (default `14rem`). */\n readonly minHeight?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, provide, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { JsonEditorKey, JsonEditorMode as JsonEditorModeValue, type JsonEditorContextValue } from './JsonEditorContext';\nimport { JsonEditorExtensions, type JsonPath } from './JsonEditorExtensions';\nimport JsonEditorTreeView from './JsonEditorTreeView.vue';\nimport JsonEditorTextView from './JsonEditorTextView.vue';\n\n/** Renders a JSON document as an inline-editable tree or as raw text, switched by a mode toggle. */\n/* `inheritAttrs: false` so `class` folds into the surface's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'JsonEditor', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<JsonEditorProps>(), {\n indent: 2,\n minHeight: '14rem',\n /* Explicit `undefined` defaults: `useControlled` keys on `=== undefined`, and Vue casts an\n absent `boolean` prop to `false` — which would shadow the form control context. */\n modelValue: undefined,\n defaultValue: undefined,\n mode: undefined,\n defaultMode: undefined,\n isDisabled: undefined,\n isReadOnly: undefined,\n isInvalid: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader edits the document — the `v-model` half. */\n 'update:modelValue': [value: unknown];\n /** Fires when the reader picks a different mode — the `v-model:mode` half. */\n 'update:mode': [mode: JsonEditorMode];\n}>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst valueCtl = useControlled<unknown>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? {},\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst modeCtl = useControlled<JsonEditorMode>({\n controlled: () => props.mode,\n default: () => props.defaultMode ?? JsonEditorModeValue.Tree,\n onChange: (next) => {\n emit('update:mode', next);\n },\n});\n\n/* Named `document` / `renderMode`, not `modelValue` / `mode`: a setup const sharing a prop's\n name collides with it in the template scope (`vue/no-dupe-keys`). */\nconst document = valueCtl.value;\nconst renderMode = modeCtl.value;\n\n/* Inherits flags from a surrounding <Field>; explicit props win. The context id /\n labelling / describedby land on the active editing surface (text-mode textarea or\n tree-mode tree) — the subviews read the context themselves. */\nconst ctx = useFormControl();\nconst finalDisabled = computed(() => props.isDisabled ?? ctx?.isDisabled ?? false);\nconst finalReadOnly = computed(() => props.isReadOnly ?? ctx?.isReadOnly ?? false);\nconst finalInvalid = computed(() => props.isInvalid ?? ctx?.isInvalid ?? false);\n\nfunction updateAt(path: JsonPath, next: unknown): void {\n valueCtl.setValue(JsonEditorExtensions.setAtPath(document.value, path, next));\n}\n\n/* Live getters, not a snapshot — a flag change on the root has to reach every tree node. */\nprovide<JsonEditorContextValue>(JsonEditorKey, {\n updateAt,\n get isDisabled() {\n return finalDisabled.value;\n },\n get isReadOnly() {\n return finalReadOnly.value;\n },\n get isInvalid() {\n return finalInvalid.value;\n },\n});\n\n/* `Object.values` hoisted out of the template — the runtime template compiler resolves plain\n identifiers, not arbitrary global calls. */\nconst modes = Object.values(JsonEditorModeValue);\n\nfunction modeButtonClass(m: JsonEditorMode): string {\n return cn(\n 'inline-flex h-6 items-center rounded px-2 text-xs font-medium transition-colors',\n renderMode.value === m ? 'bg-primary text-primary-foreground' : 'text-muted-foreground hover:text-foreground',\n );\n}\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst surfaceClass = computed(() =>\n cn(\n 'flex flex-col overflow-hidden rounded-md border border-input bg-card text-card-foreground shadow-sm',\n finalInvalid.value && 'border-destructive',\n finalDisabled.value && 'opacity-60',\n attrs.class as ClassValue,\n ),\n);\n\n/** The rendered root `<div>` — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el });\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n valueCtl.reset();\n modeCtl.reset();\n});\n</script>\n\n<template>\n <div\n :key=\"formResetRevision\"\n ref=\"el\"\n :data-state=\"finalInvalid ? 'invalid' : 'default'\"\n :class=\"surfaceClass\"\n :style=\"{ minHeight }\"\n v-bind=\"passthroughAttrs\"\n >\n <div class=\"flex items-center gap-1 border-b border-border bg-muted/40 px-2 py-1\">\n <div\n role=\"radiogroup\"\n aria-label=\"JSON mode\"\n class=\"flex items-center gap-0.5 rounded-md bg-card p-0.5 ring-1 ring-border\"\n >\n <button\n v-for=\"m in modes\"\n :key=\"m\"\n type=\"button\"\n role=\"radio\"\n :aria-checked=\"renderMode === m\"\n :class=\"modeButtonClass(m)\"\n @click=\"modeCtl.setValue(m)\"\n >\n {{ m }}\n </button>\n </div>\n </div>\n <div class=\"flex-1 overflow-auto\" :style=\"{ minHeight: 0 }\">\n <JsonEditorTreeView v-if=\"renderMode === 'tree'\" :value=\"document\" />\n <JsonEditorTextView v-else :value=\"document\" :indent=\"indent\" @commit=\"valueCtl.setValue\" />\n </div>\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </div>\n</template>\n","<script lang=\"ts\">\nimport { Temporal } from 'temporal-polyfill';\nimport { addDays, addMonths, daysInMonth, formatISODate, sundayIndex } from '../DateExtensions';\n\n/** Defines an RFC-5545 recurrence frequency (the `FREQ=` value). */\nexport const RecurrenceFreq = {\n /** Refers to a daily recurrence. */\n Daily: 'DAILY',\n /** Refers to a weekly recurrence. */\n Weekly: 'WEEKLY',\n /** Refers to a monthly recurrence. */\n Monthly: 'MONTHLY',\n /** Refers to a yearly recurrence. */\n Yearly: 'YEARLY',\n} as const;\n\nexport type RecurrenceFreq = (typeof RecurrenceFreq)[keyof typeof RecurrenceFreq];\n\n/** Defines an RFC-5545 weekday token (the `BYDAY=` value). */\nexport const RecurrenceWeekday = {\n /** Refers to Monday. */\n Monday: 'MO',\n /** Refers to Tuesday. */\n Tuesday: 'TU',\n /** Refers to Wednesday. */\n Wednesday: 'WE',\n /** Refers to Thursday. */\n Thursday: 'TH',\n /** Refers to Friday. */\n Friday: 'FR',\n /** Refers to Saturday. */\n Saturday: 'SA',\n /** Refers to Sunday. */\n Sunday: 'SU',\n} as const;\n\nexport type RecurrenceWeekday = (typeof RecurrenceWeekday)[keyof typeof RecurrenceWeekday];\n\n/** Defines how a recurrence terminates. */\nexport const RecurrenceEndMode = {\n /** Refers to an open-ended recurrence (no end). */\n Never: 'never',\n /** Refers to ending after a fixed occurrence count. */\n Count: 'count',\n /** Refers to ending on a fixed until-date. */\n Until: 'until',\n} as const;\n\nexport type RecurrenceEndMode = (typeof RecurrenceEndMode)[keyof typeof RecurrenceEndMode];\n\nexport interface RecurrenceRule {\n readonly freq: RecurrenceFreq;\n readonly interval: number;\n readonly byDay?: ReadonlyArray<RecurrenceWeekday>;\n readonly byMonthDay?: number;\n readonly count?: number;\n readonly until?: Temporal.PlainDate | null;\n}\n\nexport interface RecurrenceEditorProps {\n /** The rule, controlled. The `v-model` binding target. */\n readonly modelValue?: RecurrenceRule;\n\n /** The initial rule when uncontrolled. */\n readonly defaultValue?: RecurrenceRule;\n\n /** The anchor date the preview counts forward from. Defaults to today. */\n readonly from?: Temporal.PlainDate;\n\n /** How many occurrences the preview lists. Default `5`. */\n readonly previewCount?: number;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly isDisabled?: boolean;\n\n /** The read-only state. Falls back to the surrounding form control's `isReadOnly`. */\n readonly isReadOnly?: boolean;\n\n /** The hidden input name; when set, emits a hidden input with the serialized `RRULE:` string. */\n readonly name?: string;\n\n /** The control's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n}\n\nconst AllWeekdays: ReadonlyArray<RecurrenceWeekday> = [\n RecurrenceWeekday.Sunday,\n RecurrenceWeekday.Monday,\n RecurrenceWeekday.Tuesday,\n RecurrenceWeekday.Wednesday,\n RecurrenceWeekday.Thursday,\n RecurrenceWeekday.Friday,\n RecurrenceWeekday.Saturday,\n];\nconst WeekdayLabel: Record<RecurrenceWeekday, string> = {\n [RecurrenceWeekday.Sunday]: 'Su',\n [RecurrenceWeekday.Monday]: 'Mo',\n [RecurrenceWeekday.Tuesday]: 'Tu',\n [RecurrenceWeekday.Wednesday]: 'We',\n [RecurrenceWeekday.Thursday]: 'Th',\n [RecurrenceWeekday.Friday]: 'Fr',\n [RecurrenceWeekday.Saturday]: 'Sa',\n};\n/* Maps a Sunday-indexed JS weekday (0=Sun … 6=Sat) to its RRULE token. */\nconst JsToRrule: ReadonlyArray<RecurrenceWeekday> = [\n RecurrenceWeekday.Sunday,\n RecurrenceWeekday.Monday,\n RecurrenceWeekday.Tuesday,\n RecurrenceWeekday.Wednesday,\n RecurrenceWeekday.Thursday,\n RecurrenceWeekday.Friday,\n RecurrenceWeekday.Saturday,\n];\n\nfunction serializeRule(r: RecurrenceRule): string {\n const parts: Array<string> = [`FREQ=${r.freq}`];\n if (r.interval > 1) parts.push(`INTERVAL=${r.interval}`);\n if (r.byDay && r.byDay.length > 0) parts.push(`BYDAY=${r.byDay.join(',')}`);\n if (r.byMonthDay) parts.push(`BYMONTHDAY=${r.byMonthDay}`);\n if (r.count) parts.push(`COUNT=${r.count}`);\n if (r.until) parts.push(`UNTIL=${formatISODate(r.until).replace(/-/g, '')}`);\n return `RRULE:${parts.join(';')}`;\n}\n\nfunction nextOccurrence(rule: RecurrenceRule, prev: Temporal.PlainDate): Temporal.PlainDate | null {\n switch (rule.freq) {\n case RecurrenceFreq.Daily:\n return addDays(prev, rule.interval);\n case RecurrenceFreq.Weekly: {\n if (!rule.byDay || rule.byDay.length === 0) return addDays(prev, 7 * rule.interval);\n // Find the next allowed weekday in `prev`'s week (weeks start Sunday);\n // exhausted → jump to the week `interval` weeks later and scan it.\n const allowed = new Set(rule.byDay);\n let cursor = addDays(prev, 1);\n while (sundayIndex(cursor) !== 0) {\n if (allowed.has(JsToRrule[sundayIndex(cursor)]!)) return cursor;\n cursor = addDays(cursor, 1);\n }\n // `cursor` is the Sunday opening the following week; skip interval-1 more weeks.\n cursor = addDays(cursor, 7 * (rule.interval - 1));\n for (let i = 0; i < 7; i++) {\n if (allowed.has(JsToRrule[sundayIndex(cursor)]!)) return cursor;\n cursor = addDays(cursor, 1);\n }\n return null;\n }\n case RecurrenceFreq.Monthly: {\n const next = addMonths(prev, rule.interval);\n if (rule.byMonthDay) {\n // Clamp to the month's length so day 31 in a 30-day month lands on the last day.\n const day = Math.min(rule.byMonthDay, daysInMonth(next.year, next.month));\n return next.with({ day });\n }\n return next;\n }\n case RecurrenceFreq.Yearly:\n return prev.add({ years: rule.interval });\n }\n}\n\nfunction buildPreview(\n rule: RecurrenceRule,\n from: Temporal.PlainDate,\n count: number,\n): ReadonlyArray<Temporal.PlainDate> {\n const out: Array<Temporal.PlainDate> = [];\n let cursor = from;\n // Include `from` if it satisfies the rule (simplification: always include for visual hint).\n out.push(cursor);\n for (let i = 0; i < count - 1; i++) {\n const next = nextOccurrence(rule, cursor);\n if (!next) break;\n if (rule.until && Temporal.PlainDate.compare(next, rule.until) > 0) break;\n if (rule.count && out.length >= rule.count) break;\n out.push(next);\n cursor = next;\n }\n return out;\n}\n\nconst DefaultRule: RecurrenceRule = {\n freq: RecurrenceFreq.Weekly,\n interval: 1,\n byDay: [RecurrenceWeekday.Monday],\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useId } from '../../../foundation/identifiers';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { today } from '../DateExtensions';\nimport { inputBaseVariants, InputSize } from '../InputStyles';\nimport RadioInput from '../radioInput/RadioInput.vue';\nimport DatePicker from '../datePicker/DatePicker.vue';\n\n/**\n * Renders a visual RRULE editor — frequency, interval, weekdays, month day, and end mode, with a\n * preview of the next occurrences. Output is a JS `RecurrenceRule` object via `update:modelValue` /\n * `update:modelValue`; if `name` is set, also emits a hidden `RRULE:FREQ=…` string for forms.\n *\n * Form-aware at GROUP level: inside a `Field`/`form.Field` the root (`role=\"group\"`)\n * takes the context id + `aria-labelledby`/`aria-describedby`/`aria-invalid`, and\n * the disabled/read-only flags cascade to every inner control.\n */\n/* `inheritAttrs: false` so `class` folds into the root's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'RecurrenceEditor', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<RecurrenceEditorProps>(), {\n from: () => today(),\n previewCount: 5,\n /* Explicit `undefined` defaults: `useControlled` keys on `=== undefined`, and Vue casts an\n absent `boolean` prop to `false` — which would shadow the form control context. */\n modelValue: undefined,\n defaultValue: undefined,\n isDisabled: undefined,\n isReadOnly: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader changes the frequency, interval, weekdays, or end mode. The `v-model` half. */\n 'update:modelValue': [rule: RecurrenceRule];\n}>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst ctx = useFormControl();\nconst isDisabled = computed(() => props.isDisabled ?? ctx?.isDisabled);\nconst isReadOnly = computed(() => props.isReadOnly ?? ctx?.isReadOnly);\n\nconst controlled = useControlled<RecurrenceRule>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? DefaultRule,\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst rule = controlled.value;\nconst uid = useId('recurrence');\n\nconst preview = computed(() => buildPreview(rule.value, props.from, props.previewCount));\n\nfunction update(patch: Partial<RecurrenceRule>): void {\n const next = { ...rule.value, ...patch };\n // Reset incompatible fields when freq changes.\n if (patch.freq && patch.freq !== rule.value.freq) {\n if (patch.freq !== RecurrenceFreq.Weekly) next.byDay = undefined;\n if (patch.freq !== RecurrenceFreq.Monthly) next.byMonthDay = undefined;\n }\n controlled.setValue(next);\n}\n\nconst endMode = computed<RecurrenceEndMode>(() =>\n rule.value.count ? RecurrenceEndMode.Count : rule.value.until ? RecurrenceEndMode.Until : RecurrenceEndMode.Never,\n);\n\nfunction onIntervalInput(event: Event): void {\n const raw = Number((event.target as HTMLInputElement).value) || 1;\n update({ interval: Math.max(1, raw) });\n}\n\nfunction onFreqChange(event: Event): void {\n update({ freq: (event.target as HTMLSelectElement).value as RecurrenceFreq });\n}\n\nfunction isWeekdayChecked(wd: RecurrenceWeekday): boolean {\n return rule.value.byDay?.includes(wd) ?? false;\n}\n\nfunction toggleWeekday(wd: RecurrenceWeekday): void {\n const set = new Set(rule.value.byDay ?? []);\n if (set.has(wd)) set.delete(wd);\n else set.add(wd);\n update({ byDay: Array.from(set) });\n}\n\nfunction onMonthDayInput(event: Event): void {\n const raw = Number((event.target as HTMLInputElement).value) || 1;\n update({ byMonthDay: Math.min(31, Math.max(1, raw)) });\n}\n\nfunction onCountInput(event: Event): void {\n const raw = Number((event.target as HTMLInputElement).value) || 1;\n update({ count: Math.max(1, raw), until: null });\n}\n\nfunction onUntilPick(next: Temporal.PlainDate | null): void {\n update({ until: next, count: undefined });\n}\n\nfunction weekdayClass(wd: RecurrenceWeekday): string {\n return cn(\n 'inline-flex h-7 w-9 items-center justify-center rounded-md border text-xs font-medium transition-colors',\n isWeekdayChecked(wd)\n ? 'border-primary bg-primary text-primary-foreground'\n : 'border-input bg-background text-muted-foreground hover:bg-muted',\n );\n}\n\nfunction weekdayLabel(wd: RecurrenceWeekday): string {\n return WeekdayLabel[wd];\n}\n\nconst rootId = computed(() => props.id ?? ctx?.id);\nconst endRadioName = computed(() => `${props.name ?? 'rule'}-end`);\nconst serialized = computed(() => serializeRule(rule.value));\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', 'checked']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootClass = computed(() =>\n cn(\n 'flex flex-col gap-3 rounded-md border border-border bg-card p-4 text-card-foreground shadow-sm',\n isDisabled.value && 'opacity-60',\n attrs.class as ClassValue,\n ),\n);\n\nconst intervalClass = cn(inputBaseVariants({ size: InputSize.Sm }), 'w-16');\nconst freqClass = cn(inputBaseVariants({ size: InputSize.Sm }), 'w-32');\nconst monthDayClass = cn(inputBaseVariants({ size: InputSize.Sm }), 'w-20');\nconst countClass = cn(inputBaseVariants({ size: InputSize.Sm }), 'w-20');\n\n/** The rendered root `<div>` — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el });\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n controlled.reset();\n});\n</script>\n\n<template>\n <div\n :key=\"formResetRevision\"\n ref=\"el\"\n role=\"group\"\n :id=\"rootId\"\n :aria-labelledby=\"ctx?.labelledBy\"\n :aria-describedby=\"ctx?.describedBy\"\n :aria-invalid=\"ctx?.isInvalid || undefined\"\n :class=\"rootClass\"\n v-bind=\"passthroughAttrs\"\n >\n <div class=\"flex flex-wrap items-center gap-2 text-sm\">\n <label :for=\"`${uid}-interval`\" class=\"text-muted-foreground\">Every</label>\n <input\n :id=\"`${uid}-interval`\"\n type=\"number\"\n :min=\"1\"\n :max=\"999\"\n :value=\"rule.interval\"\n :disabled=\"isDisabled\"\n :readonly=\"isReadOnly\"\n :class=\"intervalClass\"\n @input=\"onIntervalInput\"\n />\n <select\n aria-label=\"Frequency\"\n :value=\"rule.freq\"\n :disabled=\"isDisabled\"\n :class=\"freqClass\"\n @change=\"onFreqChange\"\n >\n <option value=\"DAILY\">{{ rule.interval > 1 ? 'days' : 'day' }}</option>\n <option value=\"WEEKLY\">{{ rule.interval > 1 ? 'weeks' : 'week' }}</option>\n <option value=\"MONTHLY\">{{ rule.interval > 1 ? 'months' : 'month' }}</option>\n <option value=\"YEARLY\">{{ rule.interval > 1 ? 'years' : 'year' }}</option>\n </select>\n </div>\n\n <div v-if=\"rule.freq === 'WEEKLY'\" class=\"flex items-center gap-2 text-sm\">\n <span class=\"text-muted-foreground\">On</span>\n <div role=\"group\" aria-label=\"Days of week\" class=\"flex flex-wrap gap-1\">\n <button\n v-for=\"wd in AllWeekdays\"\n :key=\"wd\"\n type=\"button\"\n role=\"checkbox\"\n :aria-checked=\"isWeekdayChecked(wd)\"\n :disabled=\"isDisabled || isReadOnly\"\n :class=\"weekdayClass(wd)\"\n @click=\"toggleWeekday(wd)\"\n >\n {{ weekdayLabel(wd) }}\n </button>\n </div>\n </div>\n\n <div v-if=\"rule.freq === 'MONTHLY'\" class=\"flex items-center gap-2 text-sm\">\n <label :for=\"`${uid}-month-day`\" class=\"text-muted-foreground\">On day</label>\n <input\n :id=\"`${uid}-month-day`\"\n type=\"number\"\n :min=\"1\"\n :max=\"31\"\n :value=\"rule.byMonthDay ?? from.day\"\n :disabled=\"isDisabled\"\n :readonly=\"isReadOnly\"\n :class=\"monthDayClass\"\n @input=\"onMonthDayInput\"\n />\n <span class=\"text-muted-foreground\">of the month</span>\n </div>\n\n <!-- The design-system `RadioInput`, not a bare `<input type=\"radio\">`: the native control\n renders platform chrome that matches nothing else in the package. Each one carries an\n explicit `id` — `RadioInput` otherwise adopts the surrounding `Field`'s id and all three\n would collide on it. -->\n <div role=\"radiogroup\" aria-label=\"End mode\" class=\"flex flex-col gap-2 text-sm\">\n <label :for=\"`${uid}-end-never`\" class=\"flex items-center gap-2\">\n <RadioInput\n :id=\"`${uid}-end-never`\"\n size=\"sm\"\n :name=\"endRadioName\"\n :model-value=\"endMode === 'never'\"\n :disabled=\"isDisabled || isReadOnly\"\n @update:modelValue=\"update({ count: undefined, until: null })\"\n />\n Never\n </label>\n <label :for=\"`${uid}-end-count`\" class=\"flex items-center gap-2\">\n <RadioInput\n :id=\"`${uid}-end-count`\"\n size=\"sm\"\n :name=\"endRadioName\"\n :model-value=\"endMode === 'count'\"\n :disabled=\"isDisabled || isReadOnly\"\n @update:modelValue=\"update({ count: rule.count ?? 10, until: null })\"\n />\n After\n <input\n type=\"number\"\n aria-label=\"Occurrence count\"\n :min=\"1\"\n :value=\"rule.count ?? ''\"\n :disabled=\"isDisabled || isReadOnly || endMode !== 'count'\"\n :class=\"countClass\"\n @input=\"onCountInput\"\n />\n occurrences\n </label>\n <!-- The end date sits BESIDE the label, not inside it: `DatePicker` is a button, and a\n button inside a `<label>` forwards its click to the labelled radio. -->\n <div class=\"flex items-center gap-2\">\n <label :for=\"`${uid}-end-until`\" class=\"flex items-center gap-2\">\n <RadioInput\n :id=\"`${uid}-end-until`\"\n size=\"sm\"\n :name=\"endRadioName\"\n :model-value=\"endMode === 'until'\"\n :disabled=\"isDisabled || isReadOnly\"\n @update:modelValue=\"update({ until: addMonths(from, 6), count: undefined })\"\n />\n On\n </label>\n <DatePicker\n :id=\"`${uid}-end-date`\"\n size=\"sm\"\n aria-label=\"End date\"\n class=\"w-44\"\n placeholder=\"Pick a date\"\n :model-value=\"rule.until ?? null\"\n :disabled=\"isDisabled || isReadOnly || endMode !== 'until'\"\n @update:modelValue=\"onUntilPick\"\n />\n </div>\n </div>\n\n <div class=\"rounded-md bg-muted/40 p-3 text-xs\">\n <div class=\"mb-1 font-medium text-muted-foreground\">Next occurrences</div>\n <ul aria-live=\"polite\" class=\"grid grid-cols-2 gap-x-4 gap-y-0.5 sm:grid-cols-3\">\n <li v-for=\"d in preview\" :key=\"d.toString()\" class=\"text-foreground tabular-nums\">\n {{ formatISODate(d) }}\n </li>\n </ul>\n </div>\n <input v-if=\"name\" type=\"hidden\" :name=\"name\" :value=\"serialized\" />\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </div>\n</template>\n","<script lang=\"ts\">\n/** Defines the accent palette of a knob's value arc. */\nexport const KnobInputTone = {\n /** Refers to the primary brand accent. */\n Brand: 'brand',\n /** Refers to the positive/confirmation accent. */\n Success: 'success',\n /** Refers to the caution accent. */\n Warning: 'warning',\n /** Refers to the destructive/error accent. */\n Danger: 'danger',\n /** Refers to the muted/neutral accent. */\n Muted: 'muted',\n} as const;\n\nexport type KnobInputTone = (typeof KnobInputTone)[keyof typeof KnobInputTone];\n\nconst ToneClass: Record<KnobInputTone, string> = {\n brand: 'text-primary',\n success: 'text-success',\n warning: 'text-warning',\n danger: 'text-destructive',\n muted: 'text-muted-foreground',\n};\n\nexport interface KnobInputProps {\n /** The value, controlled. The `v-model` binding target. */\n readonly modelValue?: number;\n\n /** The initial value when uncontrolled. Defaults to `min`. */\n readonly defaultValue?: number;\n\n /** The lower bound. Default `0`. */\n readonly min?: number;\n\n /** The upper bound. Default `1`. */\n readonly max?: number;\n\n /** The arrow-key / wheel step. Default `0.01`. */\n readonly step?: number;\n\n /** The Shift+arrow step. Default `0.1`. */\n readonly largeStep?: number;\n\n /** The knob's pixel diameter. Default `64`. */\n readonly size?: number;\n\n /** The sweep of the value arc in degrees. Default `270`. */\n readonly arcDegrees?: number;\n\n /** The accent palette. Default `brand`. */\n readonly tone?: KnobInputTone;\n\n /**\n * The readout formatter. Default `(v) => v.toFixed(2)`.\n *\n * Kept a PROP, not an emit: it RETURNS the rendered text, which an emit cannot do.\n */\n readonly format?: (value: number) => string | number;\n\n /** Whether the formatted readout renders in the centre. Default `true`. */\n readonly isValueShown?: boolean;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly isDisabled?: boolean;\n\n /** The hidden input name; the hidden input emits the numeric value. */\n readonly name?: string;\n\n /** The control's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n}\n\nfunction clamp(v: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, v));\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, ref, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { AriaAttribute } from '../../../foundation/dom';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useEventListener } from '../../../foundation/dom';\nimport { useFormControl } from '../../../foundation/primitives';\n\n/** Renders a rotational dial whose arc, pointer and readout track one value, turned by drag, wheel or arrow keys. */\n/* `inheritAttrs: false` so `class` folds into the root's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'KnobInput', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<KnobInputProps>(), {\n min: 0,\n max: 1,\n step: 0.01,\n largeStep: 0.1,\n size: 64,\n arcDegrees: 270,\n tone: 'brand',\n format: (v: number) => v.toFixed(2),\n isValueShown: true,\n /* Explicit `undefined` defaults: `useControlled` keys on `=== undefined`, and Vue casts an\n absent `boolean` prop to `false` — which would shadow the form control context. */\n modelValue: undefined,\n defaultValue: undefined,\n isDisabled: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader turns the dial by drag, wheel or key — the `v-model` half. */\n 'update:modelValue': [value: number];\n}>();\n\nconst attrs = useAttrs();\n\nconst controlled = useControlled<number>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? props.min,\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst current = controlled.value;\n\n/* Inherits id/disabled/invalid/labelling from a surrounding <Field>; explicit props win. */\nconst ctx = useFormControl();\nconst disabled = computed(() => props.isDisabled ?? ctx?.isDisabled ?? false);\n\n/* Never a declared prop — a declared `'aria-label'` would arrive as `props.ariaLabel`, so\n `props['aria-label']` is always undefined and no accessible name renders. */\nconst ariaLabel = computed(() => attrs[AriaAttribute.Label] as string | undefined);\n/* Names the knob from the Field label when present; an explicit aria-label always wins. */\nconst labelledBy = computed(() => (!ariaLabel.value ? ctx?.labelledBy : undefined));\n\nconst container = useTemplateRef<HTMLDivElement>('container');\nconst dragState = ref<{ startY: number; startValue: number } | null>(null);\n\nconst fraction = computed(() => (clamp(current.value, props.min, props.max) - props.min) / (props.max - props.min));\nconst halfArc = computed(() => props.arcDegrees / 2);\nconst startAngle = computed(() => -halfArc.value - 90); // -90 puts 0° at top\nconst endAngle = computed(() => halfArc.value - 90);\nconst angle = computed(() => startAngle.value + fraction.value * props.arcDegrees);\n\nfunction setClamped(v: number): void {\n controlled.setValue(clamp(v, props.min, props.max));\n}\n\nfunction onPointerDown(event: PointerEvent): void {\n if (disabled.value || event.button !== 0) return;\n dragState.value = { startY: event.clientY, startValue: current.value };\n (event.currentTarget as HTMLElement).setPointerCapture(event.pointerId);\n}\n\nfunction onPointerMove(event: PointerEvent): void {\n const drag = dragState.value;\n if (disabled.value || !drag) return;\n const dy = drag.startY - event.clientY; // up = increase\n const range = props.max - props.min;\n const sensitivity = range / 200; // 200px drag = full range\n setClamped(drag.startValue + dy * sensitivity);\n}\n\nfunction onPointerUp(event: PointerEvent): void {\n if (!dragState.value) return;\n dragState.value = null;\n (event.currentTarget as HTMLElement).releasePointerCapture?.(event.pointerId);\n}\n\n/* Wheel through a non-passive listener attached to the element — Vue's `@wheel` lands as a\n passive listener on some engines, and `preventDefault` inside it cannot stop the page scroll.\n `useEventListener` is post-flush and re-attaches when the ref resolves, so nothing here runs\n during SSR; the handler reads state live rather than capturing it. */\nuseEventListener(\n 'wheel',\n (event) => {\n if (disabled.value) return;\n event.preventDefault();\n const delta = (event as WheelEvent).deltaY < 0 ? props.step : -props.step;\n setClamped(current.value + delta);\n },\n container,\n { passive: false },\n);\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.isComposing) return;\n if (disabled.value) return;\n const s = event.shiftKey ? props.largeStep : props.step;\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowRight':\n event.preventDefault();\n setClamped(current.value + s);\n break;\n case 'ArrowDown':\n case 'ArrowLeft':\n event.preventDefault();\n setClamped(current.value - s);\n break;\n case 'Home':\n event.preventDefault();\n setClamped(props.min);\n break;\n case 'End':\n event.preventDefault();\n setClamped(props.max);\n break;\n }\n}\n\n// SVG arc path math.\nconst radius = computed(() => props.size / 2 - 4);\nconst center = computed(() => props.size / 2);\n\nfunction polar(deg: number, r: number): readonly [number, number] {\n const rad = (deg * Math.PI) / 180;\n return [center.value + r * Math.cos(rad), center.value + r * Math.sin(rad)] as const;\n}\n\nconst trackStart = computed(() => polar(startAngle.value, radius.value));\nconst trackEnd = computed(() => polar(endAngle.value, radius.value));\nconst largeArc = computed(() => (props.arcDegrees > 180 ? 1 : 0));\n\nconst trackPath = computed(\n () =>\n `M ${trackStart.value[0]} ${trackStart.value[1]} A ${radius.value} ${radius.value} 0 ${largeArc.value} 1 ${trackEnd.value[0]} ${trackEnd.value[1]}`,\n);\n\nconst valueEnd = computed(() => polar(angle.value, radius.value));\nconst valueLargeArc = computed(() => (fraction.value * props.arcDegrees > 180 ? 1 : 0));\n\nconst valuePath = computed(\n () =>\n `M ${trackStart.value[0]} ${trackStart.value[1]} A ${radius.value} ${radius.value} 0 ${valueLargeArc.value} 1 ${valueEnd.value[0]} ${valueEnd.value[1]}`,\n);\n\nconst pointerInner = computed(() => polar(angle.value, radius.value * 0.45));\nconst pointerOuter = computed(() => polar(angle.value, radius.value * 0.85));\n\nconst knobId = computed(() => props.id ?? ctx?.id);\nconst readout = computed(() => props.format(current.value));\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootStyle = computed(() => ({\n width: `${props.size}px`,\n height: `${props.size}px`,\n touchAction: 'none',\n}));\n\nconst rootClass = computed(() =>\n cn(\n 'relative inline-flex select-none items-center justify-center rounded-full focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring',\n ToneClass[props.tone],\n disabled.value ? 'cursor-not-allowed opacity-50' : 'cursor-grab active:cursor-grabbing',\n attrs.class as ClassValue,\n ),\n);\n\n/** The rendered root `<div>` — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: container });\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n controlled.reset();\n});\n</script>\n\n<template>\n <div\n :key=\"formResetRevision\"\n ref=\"container\"\n role=\"slider\"\n :id=\"knobId\"\n :aria-label=\"ariaLabel ?? (labelledBy ? undefined : 'KnobInput')\"\n :aria-labelledby=\"labelledBy\"\n :aria-valuenow=\"current\"\n :aria-valuemin=\"min\"\n :aria-valuemax=\"max\"\n aria-orientation=\"vertical\"\n :aria-invalid=\"ctx?.isInvalid || undefined\"\n :aria-describedby=\"ctx?.describedBy\"\n :aria-disabled=\"disabled || undefined\"\n :tabindex=\"disabled ? -1 : 0\"\n :style=\"rootStyle\"\n :class=\"rootClass\"\n v-bind=\"passthroughAttrs\"\n @pointerdown=\"onPointerDown\"\n @pointermove=\"onPointerMove\"\n @pointerup=\"onPointerUp\"\n @pointercancel=\"onPointerUp\"\n @keydown=\"onKeydown\"\n >\n <svg :width=\"size\" :height=\"size\" class=\"overflow-visible\">\n <path\n :d=\"trackPath\"\n fill=\"none\"\n stroke=\"currentColor\"\n :stroke-width=\"4\"\n stroke-linecap=\"round\"\n class=\"opacity-20\"\n />\n <path :d=\"valuePath\" fill=\"none\" stroke=\"currentColor\" :stroke-width=\"4\" stroke-linecap=\"round\" />\n <line\n :x1=\"pointerInner[0]\"\n :y1=\"pointerInner[1]\"\n :x2=\"pointerOuter[0]\"\n :y2=\"pointerOuter[1]\"\n stroke=\"currentColor\"\n :stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n />\n </svg>\n <span\n v-if=\"isValueShown\"\n aria-hidden=\"true\"\n class=\"absolute inset-0 grid place-items-center text-[10px] font-medium tabular-nums text-foreground\"\n >\n {{ readout }}\n </span>\n <input v-if=\"name\" type=\"hidden\" :name=\"name\" :value=\"current\" />\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </div>\n</template>\n","<script lang=\"ts\">\nexport interface KeyboardShortcutPickerProps {\n /** The captured chord, controlled. The `v-model` binding target. */\n readonly modelValue?: ReadonlyArray<string>;\n\n /** The initial chord when uncontrolled. */\n readonly defaultValue?: ReadonlyArray<string>;\n\n /** The idle label. Fill the `placeholder` slot for richer content. */\n readonly placeholder?: string | number;\n\n /** The listening label. Fill the `recordLabel` slot for richer content. */\n readonly recordLabel?: string | number;\n\n /** The hidden input name; the hidden input emits the `+`-joined chord. */\n readonly name?: string;\n\n /** The control's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly disabled?: boolean;\n}\n\n// SSR-safe: `navigator` is undefined in Node < 21.\nconst IsMac = typeof navigator !== 'undefined' && navigator.platform?.toLowerCase().includes('mac');\n\nconst ModifierNames: Record<string, string> = {\n Control: 'Ctrl',\n Meta: IsMac ? '⌘' : 'Meta',\n Alt: 'Alt',\n Shift: 'Shift',\n};\n\nfunction isModifier(key: string): boolean {\n return ['Control', 'Meta', 'Alt', 'Shift'].includes(key);\n}\n\nfunction normalizeKey(key: string): string {\n if (key === ' ') return 'Space';\n if (key.length === 1) return key.toUpperCase();\n return key;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, ref, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { AriaAttribute } from '../../../foundation/dom';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useEventListener } from '../../../foundation/dom';\nimport { useFormControl } from '../../../foundation/primitives';\nimport KbdText from '../../display/kbdText/KbdText.vue';\n\n/**\n * Renders a record button that captures the next key chord the reader presses.\n *\n * While listening, Escape cancels the recording and Backspace clears the chord; a captured chord\n * is a normalized name array such as `['Meta', 'Shift', 'K']`.\n */\n/* `inheritAttrs: false` so `class` folds into the button's own `cn()` call, and so the rest of\n the attrs land on the button rather than being dropped by the multi-root template. */\ndefineOptions({ name: 'KeyboardShortcutPicker', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<KeyboardShortcutPickerProps>(), {\n placeholder: 'Click to record',\n recordLabel: 'Press keys…',\n /* Explicit `undefined` defaults: `useControlled` keys on `=== undefined`, and Vue casts an\n absent `boolean` prop to `false` — which would shadow the form control context. */\n modelValue: undefined,\n disabled: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader records or clears a chord — the `v-model` half. */\n 'update:modelValue': [keys: ReadonlyArray<string>];\n}>();\n\ndefineSlots<{\n placeholder?(): unknown;\n recordLabel?(): unknown;\n}>();\n\nconst attrs = useAttrs();\n\n/* Inherits id/disabled/invalid/labelledby/describedby from a surrounding <Field>;\n standalone props win when provided, context fills the gaps (SelectPicker parity). */\nconst field = useFormControl();\nconst finalDisabled = computed(() => props.disabled ?? field?.isDisabled);\n\nconst controlled = useControlled<ReadonlyArray<string>>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? [],\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst keys = controlled.value;\nconst recording = ref(false);\nconst button = useTemplateRef<HTMLButtonElement>('button');\n\n/* Never declared props — a declared `'aria-label'` would arrive as `props.ariaLabel` and stop\n reaching the DOM. Read off the attrs so the consumer's value can override the context's. */\nconst ariaLabel = computed(() => attrs[AriaAttribute.Label] as string | undefined);\nconst ariaLabelledBy = computed(() => attrs[AriaAttribute.LabelledBy] as string | undefined);\nconst ariaDescribedBy = computed(() => attrs[AriaAttribute.DescribedBy] as string | undefined);\n\n/* The document listeners are attached only while recording: the target getter returns `null`\n otherwise, which is what detaches them. `useEventListener` is post-flush and guards\n `typeof document`, so nothing here reaches the DOM during SSR. */\nconst listenerTarget = computed<Document | null>(() => {\n if (!recording.value) return null;\n return typeof document === 'undefined' ? null : document;\n});\n\nuseEventListener(\n 'keydown',\n (event) => {\n const e = event as KeyboardEvent;\n e.preventDefault();\n e.stopPropagation();\n if (e.key === 'Escape') {\n recording.value = false;\n return;\n }\n if (e.key === 'Backspace') {\n controlled.setValue([]);\n recording.value = false;\n return;\n }\n if (isModifier(e.key)) return;\n const captured: Array<string> = [];\n if (e.metaKey) captured.push('Meta');\n if (e.ctrlKey) captured.push('Control');\n if (e.altKey) captured.push('Alt');\n if (e.shiftKey) captured.push('Shift');\n captured.push(normalizeKey(e.key));\n controlled.setValue(captured);\n recording.value = false;\n },\n listenerTarget,\n true,\n);\n\nuseEventListener(\n 'pointerdown',\n (event) => {\n const target = (event as MouseEvent).target as Node | null;\n if (button.value && target && !button.value.contains(target)) recording.value = false;\n },\n listenerTarget,\n);\n\nfunction startRecord(): void {\n if (finalDisabled.value) return;\n recording.value = true;\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.isComposing) return;\n if (event.defaultPrevented) return;\n if (recording.value) return;\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n startRecord();\n }\n}\n\nfunction modifierLabel(key: string): string {\n return ModifierNames[key] ?? key;\n}\n\nconst buttonId = computed(() => props.id ?? field?.id);\n/* Names the trigger from the Field label when present; an explicit aria-label always wins. */\nconst labelledBy = computed(() => ariaLabelledBy.value ?? (ariaLabel.value ? undefined : field?.labelledBy));\nconst describedBy = computed(() => ariaDescribedBy.value ?? field?.describedBy);\nconst hiddenValue = computed(() => keys.value.join('+'));\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', AriaAttribute.LabelledBy, AriaAttribute.DescribedBy]);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst buttonClass = computed(() =>\n cn(\n 'inline-flex h-9 items-center gap-2 rounded-md border border-input bg-background px-3 text-sm transition-colors hover:bg-muted focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-60',\n recording.value && 'border-primary bg-primary-soft text-primary-soft-foreground',\n attrs.class as ClassValue,\n ),\n);\n\n/** The rendered `<button>` — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: button });\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n controlled.reset();\n});\n</script>\n\n<template>\n <button\n :key=\"formResetRevision\"\n ref=\"button\"\n type=\"button\"\n :id=\"buttonId\"\n :aria-pressed=\"recording\"\n :aria-invalid=\"field?.isInvalid || undefined\"\n :aria-labelledby=\"labelledBy\"\n :aria-describedby=\"describedBy\"\n :disabled=\"finalDisabled\"\n :class=\"buttonClass\"\n v-bind=\"passthroughAttrs\"\n @click=\"startRecord\"\n @keydown=\"onKeydown\"\n >\n <span v-if=\"recording\" class=\"text-xs text-muted-foreground\">\n <slot name=\"recordLabel\">{{ recordLabel }}</slot>\n </span>\n <span v-else-if=\"keys.length === 0\" class=\"text-xs text-muted-foreground\">\n <slot name=\"placeholder\">{{ placeholder }}</slot>\n </span>\n <span v-else class=\"inline-flex items-center gap-1 text-muted-foreground\">\n <template v-for=\"(k, i) in keys\" :key=\"k\">\n <span v-if=\"i > 0\" aria-hidden=\"true\">+</span>\n <KbdText>{{ modifierLabel(k) }}</KbdText>\n </template>\n </span>\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </button>\n <input v-if=\"name\" type=\"hidden\" :name=\"name\" :value=\"hiddenValue\" />\n</template>\n","<script lang=\"ts\">\nimport type { IconAdapter } from '../../../foundation/icons';\nimport {\n Bell,\n Bookmark,\n Calendar as CalendarPicker,\n Camera,\n Check,\n ChevronDown,\n Clock,\n Cloud,\n Code as CodeText,\n Coffee,\n Compass,\n Download,\n Edit,\n ExternalLink,\n Eye,\n File,\n Folder,\n Globe,\n Heart,\n Home,\n Image as ImagePreview,\n Inbox,\n Info,\n Layers,\n Lightbulb,\n Link2,\n Lock,\n Mail,\n Map,\n MessageCircle,\n Mic,\n Moon,\n Music,\n Paperclip,\n Pencil,\n Phone,\n Pin,\n Play,\n Plus,\n Search,\n Send,\n Settings,\n Share2,\n ShoppingCart,\n Star,\n Sun,\n Tag,\n Trash,\n Upload,\n User,\n Video,\n Wallet,\n Zap,\n} from 'lucide-vue-next';\n\n/* Module-private in React too — the built-in set is not part of the public surface. */\nconst BuiltInIcons: Record<string, IconAdapter> = {\n bell: Bell,\n bookmark: Bookmark,\n calendar: CalendarPicker,\n camera: Camera,\n check: Check,\n 'chevron-down': ChevronDown,\n clock: Clock,\n cloud: Cloud,\n code: CodeText,\n coffee: Coffee,\n compass: Compass,\n download: Download,\n edit: Edit,\n 'external-link': ExternalLink,\n eye: Eye,\n file: File,\n folder: Folder,\n globe: Globe,\n heart: Heart,\n home: Home,\n image: ImagePreview,\n inbox: Inbox,\n info: Info,\n layers: Layers,\n lightbulb: Lightbulb,\n link: Link2,\n lock: Lock,\n mail: Mail,\n map: Map,\n message: MessageCircle,\n mic: Mic,\n moon: Moon,\n music: Music,\n paperclip: Paperclip,\n pencil: Pencil,\n phone: Phone,\n pin: Pin,\n play: Play,\n plus: Plus,\n search: Search,\n send: Send,\n settings: Settings,\n share: Share2,\n cart: ShoppingCart,\n star: Star,\n sun: Sun,\n tag: Tag,\n trash: Trash,\n upload: Upload,\n user: User,\n video: Video,\n wallet: Wallet,\n zap: Zap,\n};\n\nexport interface IconPickerProps {\n /** The selected icon key, controlled. The `v-model` binding target. */\n readonly modelValue?: string;\n\n /** The initial icon key when uncontrolled. */\n readonly defaultValue?: string;\n\n /** The icon set, keyed by the name the picker emits. Defaults to the built-in lucide subset. */\n readonly icons?: Record<string, IconAdapter>;\n\n /** The number of grid columns. Default `8`. */\n readonly columns?: number;\n\n /** The glyph pixel size. Default `20`. */\n readonly size?: number;\n\n /** The pixel size of each icon button. Default `36`. */\n readonly iconButtonSize?: number;\n\n /** The search-field placeholder. */\n readonly placeholder?: string;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly isDisabled?: boolean;\n\n /** The hidden input name; the hidden input emits the selected icon key. */\n readonly name?: string;\n\n /** The control's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, ref, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { Icon } from '../../../foundation/icons';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { inputBaseVariants, InputSize } from '../InputStyles';\n\n/** Renders a searchable grid of icons — a 50+ `lucide-vue-next` subset, or your own `icons` map. */\n/* `inheritAttrs: false` so `class` folds into the panel's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'IconPicker', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<IconPickerProps>(), {\n icons: () => BuiltInIcons,\n columns: 8,\n size: 20,\n iconButtonSize: 36,\n placeholder: 'Search icons…',\n /* Explicit `undefined` defaults: `useControlled` keys on `=== undefined`, and Vue casts an\n absent `boolean` prop to `false` — which would shadow the form control context. */\n modelValue: undefined,\n isDisabled: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader picks an icon from the grid — the `v-model` half. */\n 'update:modelValue': [name: string];\n}>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\n/* InlineLayout panel (no popover trigger) — the `role=\"group\"` grid is the control:\n it takes the context id (so a Field label's `for` resolves), is named via\n `aria-labelledby`, and described via `aria-describedby`. `aria-invalid` is not\n valid on `group`; invalid state surfaces through the describedby swap to the\n error chrome. Disabled flows to the search input + icon buttons. */\nconst field = useFormControl();\nconst finalDisabled = computed(() => props.isDisabled ?? field?.isDisabled);\nconst labelledBy = computed(() => field?.labelledBy);\n\nconst controlled = useControlled<string>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? '',\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst selected = controlled.value;\nconst query = ref('');\n\nconst filtered = computed(() => {\n const entries = Object.entries(props.icons);\n if (!query.value) return entries;\n const q = query.value.toLowerCase();\n return entries.filter(([key]) => key.toLowerCase().includes(q));\n});\n\nfunction onQueryInput(event: Event): void {\n query.value = (event.target as HTMLInputElement).value;\n}\n\nfunction buttonClass(key: string): string {\n return cn(\n 'inline-flex items-center justify-center rounded-md border text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring',\n selected.value === key\n ? 'border-primary bg-primary text-primary-foreground hover:bg-primary'\n : 'border-transparent',\n );\n}\n\nconst gridStyle = computed(() => ({\n gridTemplateColumns: `repeat(${props.columns}, ${props.iconButtonSize}px)`,\n maxHeight: '240px',\n}));\n\nconst buttonStyle = computed(() => ({\n width: `${props.iconButtonSize}px`,\n height: `${props.iconButtonSize}px`,\n}));\n\nconst gridId = computed(() => props.id ?? field?.id);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst panelClass = computed(() =>\n cn(\n 'flex flex-col gap-2 rounded-md border border-border bg-card p-3 text-card-foreground shadow-sm',\n attrs.class as ClassValue,\n ),\n);\n\nconst searchClass = cn(inputBaseVariants({ size: InputSize.Sm }));\n\n/** The rendered root `<div>` — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el });\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n controlled.reset();\n});\n</script>\n\n<template>\n <div :key=\"formResetRevision\" ref=\"el\" :class=\"panelClass\" v-bind=\"passthroughAttrs\">\n <input\n type=\"search\"\n :value=\"query\"\n :placeholder=\"placeholder\"\n :disabled=\"finalDisabled\"\n :class=\"searchClass\"\n @input=\"onQueryInput\"\n />\n <!--\n Flat button collection, no 2D keyboard nav — ARIA grid (grid > row > gridcell)\n would be a lie; group + labeled buttons is honest.\n -->\n <div\n role=\"group\"\n :id=\"gridId\"\n :aria-label=\"labelledBy ? undefined : 'Icons'\"\n :aria-labelledby=\"labelledBy\"\n :aria-describedby=\"field?.describedBy\"\n class=\"grid gap-1 overflow-y-auto\"\n :style=\"gridStyle\"\n >\n <div v-for=\"[key, iconComp] in filtered\" :key=\"key\">\n <button\n type=\"button\"\n :aria-pressed=\"selected === key\"\n :aria-label=\"key\"\n :disabled=\"finalDisabled\"\n :style=\"buttonStyle\"\n :class=\"buttonClass(key)\"\n @click=\"controlled.setValue(key)\"\n >\n <Icon :icon=\"iconComp\" :size=\"size\" />\n </button>\n </div>\n <div v-if=\"filtered.length === 0\" class=\"col-span-full px-2 py-6 text-center text-xs text-muted-foreground\">\n No icons match.\n </div>\n </div>\n <input v-if=\"name\" type=\"hidden\" :name=\"name\" :value=\"selected\" />\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </div>\n</template>\n","<script lang=\"ts\">\n/** Represents a single selectable font face. */\nexport interface FontOption {\n readonly name: string;\n readonly family: string;\n readonly sample?: string;\n}\n\nexport const BuiltInFonts: ReadonlyArray<FontOption> = [\n { name: 'System Sans', family: 'system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif' },\n { name: 'System Serif', family: 'ui-serif, Cambria, Georgia, \"Times New Roman\", serif' },\n { name: 'System Mono', family: 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace' },\n { name: 'Helvetica', family: 'Helvetica, Arial, sans-serif' },\n { name: 'Times', family: '\"Times New Roman\", Times, serif' },\n { name: 'Courier', family: '\"Courier New\", Courier, monospace' },\n { name: 'Georgia', family: 'Georgia, \"Times New Roman\", serif' },\n { name: 'Verdana', family: 'Verdana, Geneva, Tahoma, sans-serif' },\n { name: 'Tahoma', family: 'Tahoma, Geneva, Verdana, sans-serif' },\n { name: 'Trebuchet', family: '\"Trebuchet MS\", Helvetica, sans-serif' },\n { name: 'Garamond', family: 'Garamond, \"Times New Roman\", serif' },\n { name: 'Comic Sans', family: '\"Comic Sans MS\", \"Comic Sans\", cursive' },\n { name: 'Impact', family: 'Impact, \"Arial Narrow\", sans-serif' },\n];\n\nexport interface FontPickerProps {\n /** The selected font family, controlled. The `v-model` binding target. */\n readonly modelValue?: string;\n\n /** The initial font family when uncontrolled. Defaults to the first entry in `fonts`. */\n readonly defaultValue?: string;\n\n /** The selectable font set. Defaults to {@link BuiltInFonts}. */\n readonly fonts?: ReadonlyArray<FontOption>;\n\n /** The trigger text shown when the value matches no known font. */\n readonly placeholder?: string;\n\n /** The sample string rendered in each row's own face, unless the option carries its own `sample`. */\n readonly previewText?: string;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly isDisabled?: boolean;\n\n /** The hidden form input name; the hidden input emits the selected family. */\n readonly name?: string;\n\n /** The control's id — it lands on the trigger button. Auto-filled from `FormControl` context. */\n readonly id?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useTemplateRef } from 'vue';\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, ref, useAttrs } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { ChevronDown } from 'lucide-vue-next';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { Icon } from '../../../foundation/icons';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../overlays';\n\n/** Renders a font-family picker whose every option row previews itself in its own face. */\n/* `inheritAttrs: false` so `class` folds into the wrapper's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'FontPicker', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<FontPickerProps>(), {\n fonts: () => BuiltInFonts,\n placeholder: 'SelectPicker font…',\n previewText: 'The quick brown fox',\n /* Explicit `undefined` defaults: `useControlled` keys on `=== undefined`, and Vue casts an\n absent `boolean` prop to `false` — which would shadow the form control context. */\n modelValue: undefined,\n isDisabled: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader picks a different font — the `v-model` half. */\n 'update:modelValue': [family: string];\n}>();\n\nconst attrs = useAttrs();\n\n/* Inherits id/disabled/invalid/labelledby/describedby from a surrounding <Field>;\n standalone props win when provided, context fills the gaps (SelectPicker parity).\n The `id` lands on the trigger button (the control), not the wrapper div. */\nconst field = useFormControl();\nconst finalDisabled = computed(() => props.isDisabled ?? field?.isDisabled);\n\nconst controlled = useControlled<string>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? props.fonts[0]?.family ?? '',\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst family = controlled.value;\n\n/* React kept the popover state internal and exposed no `open` prop; so does this port. */\nconst open = ref(false);\nconst query = ref('');\n\nconst filtered = computed(() => {\n if (!query.value) return props.fonts;\n const q = query.value.toLowerCase();\n return props.fonts.filter((f) => f.name.toLowerCase().includes(q));\n});\n\nconst current = computed(() => props.fonts.find((f) => f.family === family.value));\n\nfunction onOpenChange(next: boolean): void {\n open.value = next;\n}\n\nfunction onQueryInput(event: Event): void {\n query.value = (event.target as HTMLInputElement).value;\n}\n\nfunction select(option: FontOption): void {\n controlled.setValue(option.family);\n open.value = false;\n}\n\nfunction optionClass(option: FontOption): string {\n return cn(\n 'flex w-full items-center justify-between rounded-sm px-2 py-1.5 text-left text-sm transition-colors hover:bg-muted',\n option.family === family.value && 'bg-primary-soft text-primary-soft-foreground',\n );\n}\n\nconst triggerId = computed(() => props.id ?? field?.id);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst wrapperClass = computed(() => cn('inline-block', attrs.class as ClassValue));\n\nconst ChevronDownIcon = ChevronDown;\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n controlled.reset();\n});\n</script>\n\n<template>\n <div :key=\"formResetRevision\" :class=\"wrapperClass\" v-bind=\"passthroughAttrs\">\n <Popover :open=\"open\" @update:open=\"onOpenChange\">\n <PopoverTrigger as-child>\n <button\n type=\"button\"\n :id=\"triggerId\"\n :disabled=\"finalDisabled\"\n :aria-invalid=\"field?.isInvalid || undefined\"\n :aria-labelledby=\"field?.labelledBy\"\n :aria-describedby=\"field?.describedBy\"\n aria-haspopup=\"listbox\"\n :aria-expanded=\"open\"\n class=\"inline-flex h-10 min-w-[14rem] items-center justify-between gap-2 rounded-md border border-input bg-background px-3 text-sm transition-colors hover:bg-muted focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-60\"\n >\n <span :style=\"{ fontFamily: family }\" class=\"truncate text-foreground\">\n {{ current?.name ?? placeholder }}\n </span>\n <Icon :icon=\"ChevronDownIcon\" :size=\"14\" class=\"text-muted-foreground\" />\n </button>\n </PopoverTrigger>\n <!-- NOT `is-bare` (which the React original passed): bare strips the whole surface\n recipe — background, border, shadow — leaving a transparent panel with the page\n showing through the font list. The explicit `w-`/`p-` classes already override the\n chrome defaults (`w-72`, `padding: lg`) through `cn`, which is all `is-bare` was\n being used for. -->\n <PopoverContent class=\"w-[20rem] p-2\">\n <input\n type=\"search\"\n autofocus\n :value=\"query\"\n placeholder=\"Search fonts…\"\n class=\"mb-2 h-8 w-full rounded-md border border-input bg-background px-2 text-sm outline-hidden focus-visible:ring-2 focus-visible:ring-ring\"\n @input=\"onQueryInput\"\n />\n <div role=\"listbox\" aria-label=\"Fonts\" class=\"max-h-72 overflow-y-auto\">\n <button\n v-for=\"f in filtered\"\n :key=\"f.name\"\n type=\"button\"\n role=\"option\"\n :aria-selected=\"f.family === family\"\n :class=\"optionClass(f)\"\n @click=\"select(f)\"\n >\n <span class=\"font-medium\">{{ f.name }}</span>\n <span :style=\"{ fontFamily: f.family }\" class=\"ml-3 truncate text-xs text-muted-foreground\">\n {{ f.sample ?? previewText }}\n </span>\n </button>\n <div v-if=\"filtered.length === 0\" class=\"px-2 py-6 text-center text-xs text-muted-foreground\">\n No fonts match.\n </div>\n </div>\n </PopoverContent>\n </Popover>\n <input v-if=\"name\" type=\"hidden\" :name=\"name\" :value=\"family\" />\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </div>\n</template>\n","<script lang=\"ts\">\nimport type { InputSize, InputState } from '../InputStyles';\n\nexport interface CronInputProps {\n /** The control size. */\n readonly size?: InputSize;\n\n /** The validity surface. */\n readonly state?: InputState;\n\n /** The cron string, controlled. The `v-model` binding target. */\n readonly modelValue?: string;\n\n /** The initial cron string when uncontrolled. Defaults to the every-5-minutes expression. */\n readonly defaultValue?: string;\n\n /** The empty-state placeholder. */\n readonly placeholder?: string;\n\n /** The invalid surface override. Falls back to the surrounding form control's `isInvalid`. */\n readonly isInvalid?: boolean;\n\n /** Whether the human-readable readout renders under the input. Default `true`. */\n readonly hasPreview?: boolean;\n\n /** The control's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly disabled?: boolean;\n\n /** The read-only state — React's spelling. Falls back to the form control's `isReadOnly`. */\n readonly readOnly?: boolean;\n\n /** Controlled axes use their canonical Vue model names; each update event requests caller state. */\n readonly readonly?: boolean;\n\n /** The required state. Falls back to the surrounding form control's `isRequired`. */\n readonly required?: boolean;\n\n /** The hidden input name; the hidden input emits the cron string. */\n readonly name?: string;\n}\n/* React also inherited `Omit<InputBaseVariants, 'size' | 'state'>` — the `border` / `ring`\n axes — but never forwarded them to `inputBaseVariants`, so they were dead props that landed\n on the DOM as unknown attributes. Only the two axes the original consumed are declared here. */\n\nconst WeekdayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\nconst MonthNames = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\n\n/** Defines the parsed form of a single cron field (one of the five positions). */\nexport const CronFieldKind = {\n /** Refers to `*` — every value. */\n Every: 'every',\n /** Refers to a single specific value (`N`). */\n Specific: 'specific',\n /** Refers to an inclusive range (`N-M`). */\n Range: 'range',\n /** Refers to a comma list (`N,M,O`). */\n List: 'list',\n /** Refers to a step expression such as `* / N`. */\n Step: 'step',\n /** Refers to an unparseable / out-of-bounds field. */\n Invalid: 'invalid',\n} as const;\n\nexport type CronFieldKind = (typeof CronFieldKind)[keyof typeof CronFieldKind];\n\ninterface CronField {\n raw: string;\n kind: CronFieldKind;\n value?: number | ReadonlyArray<number>;\n step?: number;\n range?: [number, number];\n}\n\nfunction parseField(raw: string, min: number, max: number): CronField {\n if (raw === '*') return { raw, kind: CronFieldKind.Every };\n // Step: \"*/N\" or \"from-to/N\" — only support \"*/N\" first-gen.\n if (/^\\*\\/(\\d+)$/.test(raw)) {\n const step = Number(raw.slice(2));\n if (step < 1 || step > max) return { raw, kind: CronFieldKind.Invalid };\n return { raw, kind: CronFieldKind.Step, step };\n }\n // Range: \"N-M\".\n if (/^(\\d+)-(\\d+)$/.test(raw)) {\n const [a, b] = raw.split('-').map(Number);\n if (a == null || b == null || a < min || b > max || a > b) return { raw, kind: CronFieldKind.Invalid };\n return { raw, kind: CronFieldKind.Range, range: [a, b] };\n }\n // List: \"N,M,O\".\n if (/^\\d+(,\\d+)+$/.test(raw)) {\n const parts = raw.split(',').map(Number);\n if (parts.some((p) => p < min || p > max)) return { raw, kind: CronFieldKind.Invalid };\n return { raw, kind: CronFieldKind.List, value: parts };\n }\n // Specific number.\n if (/^\\d+$/.test(raw)) {\n const n = Number(raw);\n if (n < min || n > max) return { raw, kind: CronFieldKind.Invalid };\n return { raw, kind: CronFieldKind.Specific, value: n };\n }\n return { raw, kind: CronFieldKind.Invalid };\n}\n\nfunction describeField(field: CronField, names?: ReadonlyArray<string>, unit = '', plural = ''): string {\n if (field.kind === CronFieldKind.Every) return '*';\n if (field.kind === CronFieldKind.Invalid) return '?';\n if (field.kind === CronFieldKind.Step && field.step != null) return `every ${field.step} ${plural || unit + 's'}`;\n if (field.kind === CronFieldKind.Range && field.range) {\n const [a, b] = field.range;\n const aLabel = names?.[a] ?? a;\n const bLabel = names?.[b] ?? b;\n return `${aLabel} through ${bLabel}`;\n }\n if (field.kind === CronFieldKind.List && Array.isArray(field.value)) {\n return field.value.map((v: number) => names?.[v] ?? v).join(', ');\n }\n if (field.kind === CronFieldKind.Specific && typeof field.value === 'number') {\n return String(names?.[field.value] ?? field.value);\n }\n return field.raw;\n}\n\nfunction parseCron(value: string): string {\n const parts = value.trim().split(/\\s+/);\n if (parts.length !== 5) return 'Cron expressions must have 5 fields (min hour dom month dow).';\n const [minRaw, hourRaw, domRaw, monRaw, dowRaw] = parts as [string, string, string, string, string];\n const minute = parseField(minRaw, 0, 59);\n const hour = parseField(hourRaw, 0, 23);\n const dom = parseField(domRaw, 1, 31);\n const month = parseField(monRaw, 1, 12);\n const dow = parseField(dowRaw, 0, 6);\n\n if ([minute, hour, dom, month, dow].some((f) => f.kind === CronFieldKind.Invalid)) {\n return 'Invalid cron expression.';\n }\n\n // Common-case readouts.\n if (\n minute.kind === CronFieldKind.Step &&\n hour.kind === CronFieldKind.Every &&\n dom.kind === CronFieldKind.Every &&\n month.kind === CronFieldKind.Every &&\n dow.kind === CronFieldKind.Every\n ) {\n return `Every ${minute.step} minutes`;\n }\n if (\n minute.kind === CronFieldKind.Every &&\n hour.kind === CronFieldKind.Step &&\n dom.kind === CronFieldKind.Every &&\n month.kind === CronFieldKind.Every &&\n dow.kind === CronFieldKind.Every\n ) {\n return `Every ${hour.step} hours`;\n }\n if (\n minute.kind === CronFieldKind.Specific &&\n hour.kind === CronFieldKind.Specific &&\n dom.kind === CronFieldKind.Every &&\n month.kind === CronFieldKind.Every &&\n dow.kind === CronFieldKind.Every\n ) {\n return `Every day at ${String(hour.value).padStart(2, '0')}:${String(minute.value).padStart(2, '0')}`;\n }\n if (\n minute.kind === CronFieldKind.Specific &&\n hour.kind === CronFieldKind.Specific &&\n dom.kind === CronFieldKind.Every &&\n month.kind === CronFieldKind.Every &&\n (dow.kind === CronFieldKind.List || dow.kind === CronFieldKind.Specific)\n ) {\n return `At ${String(hour.value).padStart(2, '0')}:${String(minute.value).padStart(2, '0')} on ${describeField(dow, WeekdayNames)}`;\n }\n if (\n minute.kind === CronFieldKind.Every &&\n hour.kind === CronFieldKind.Every &&\n dom.kind === CronFieldKind.Every &&\n month.kind === CronFieldKind.Every &&\n dow.kind === CronFieldKind.Every\n ) {\n return 'Every minute';\n }\n // Fallback — describe each field.\n const parts2 = [];\n if (minute.kind !== CronFieldKind.Every) parts2.push(`minute: ${describeField(minute, undefined, 'minute')}`);\n if (hour.kind !== CronFieldKind.Every) parts2.push(`hour: ${describeField(hour, undefined, 'hour')}`);\n if (dom.kind !== CronFieldKind.Every) parts2.push(`day: ${describeField(dom)}`);\n if (month.kind !== CronFieldKind.Every) parts2.push(`month: ${describeField(month, ['', ...MonthNames])}`);\n if (dow.kind !== CronFieldKind.Every) parts2.push(`weekday: ${describeField(dow, WeekdayNames)}`);\n return parts2.length === 0 ? 'Every minute' : parts2.join(' · ');\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { AriaAttribute } from '../../../foundation/dom';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { inputBaseVariants, InputState as InputStateValue } from '../InputStyles';\n\n/**\n * Renders a cron-string input with a live plain-English preview of when the expression fires.\n * Supports asterisk, N, step (asterisk-slash-N), N-M, N,M,O per field. Quartz extensions\n * (?, L, W, #) deferred.\n *\n * Form-aware: inside a `Field`/`form.Field` the inner input takes the context\n * id (a label's `for` focuses it directly) + `aria-describedby`, the\n * disabled/read-only/required flags, and `aria-invalid`/invalid surface.\n */\n/* `inheritAttrs: false` so `class` folds into the wrapper's own `cn()` call, and so the rest\n of the attrs land on the inner `<input>` rather than the wrapper. */\ndefineOptions({ name: 'CronInput', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<CronInputProps>(), {\n placeholder: '* * * * *',\n hasPreview: true,\n /* Explicit `undefined` defaults: `useControlled` keys on `=== undefined`, and Vue casts an\n absent `boolean` prop to `false` — which would shadow the form control context. */\n modelValue: undefined,\n isInvalid: undefined,\n disabled: undefined,\n readOnly: undefined,\n readonly: undefined,\n required: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader edits the cron expression. The `v-model` half. */\n 'update:modelValue': [value: string];\n}>();\n\nconst attrs = useAttrs();\nconst input = useTemplateRef<HTMLInputElement>('input');\n\nconst ctx = useFormControl();\n\nconst controlled = useControlled<string>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? '*/5 * * * *',\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst cron = controlled.value;\n\nconst preview = computed(() => parseCron(cron.value));\n\nconst isError = computed(\n () => (props.isInvalid ?? ctx?.isInvalid) || preview.value.startsWith('Invalid') || preview.value.startsWith('Cron'),\n);\n\nconst inputState = computed(() => (isError.value ? InputStateValue.Invalid : (props.state ?? InputStateValue.Default)));\n\nfunction onInput(event: Event): void {\n if ((event as InputEvent).isComposing) return;\n controlled.setValue((event.target as HTMLInputElement).value);\n}\n\n/* Never a declared prop — a declared `'aria-describedby'` would arrive as\n `props.ariaDescribedby` and stop reaching the DOM. */\nconst ariaDescribedBy = computed(() => attrs[AriaAttribute.DescribedBy] as string | undefined);\n\nconst inputId = computed(() => props.id ?? ctx?.id);\nconst isDisabled = computed(() => props.disabled ?? ctx?.isDisabled);\nconst isReadOnly = computed(() => props.readonly ?? props.readOnly ?? ctx?.isReadOnly);\nconst isRequired = computed(() => props.required ?? ctx?.isRequired);\nconst describedBy = computed(() => ariaDescribedBy.value ?? ctx?.describedBy);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', AriaAttribute.DescribedBy]);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst wrapperClass = computed(() => cn('flex flex-col gap-1', attrs.class as ClassValue));\n\nconst inputClass = computed(() => cn(inputBaseVariants({ size: props.size, state: inputState.value }), 'font-mono'));\n\nconst previewClass = computed(() => cn('px-1 text-xs', isError.value ? 'text-destructive' : 'text-muted-foreground'));\n\n/** The rendered `<input>` — the Vue stand-in for the React original's forwarded ref. */\nuseNativeFormReset(input, controlled.reset, () => {\n if (input.value) input.value.value = String(cron.value ?? '');\n});\n\ndefineExpose({ el: input });\n</script>\n\n<template>\n <div :class=\"wrapperClass\">\n <input\n ref=\"input\"\n type=\"text\"\n :id=\"inputId\"\n :value=\"cron\"\n :placeholder=\"placeholder\"\n :disabled=\"isDisabled\"\n :readonly=\"isReadOnly\"\n :required=\"isRequired\"\n :aria-invalid=\"isError || undefined\"\n :aria-describedby=\"describedBy\"\n :spellcheck=\"false\"\n :class=\"inputClass\"\n v-bind=\"passthroughAttrs\"\n @input=\"onInput\"\n @compositionend=\"onInput\"\n />\n <div v-if=\"hasPreview\" aria-live=\"polite\" :class=\"previewClass\">{{ preview }}</div>\n <input v-if=\"name\" type=\"hidden\" :name=\"name\" :value=\"cron\" />\n </div>\n</template>\n","<script lang=\"ts\">\n/** Defines the geometry of a CSS gradient. */\nexport const GradientKind = {\n /** Refers to a linear gradient. */\n Linear: 'linear',\n /** Refers to a radial gradient. */\n Radial: 'radial',\n /** Refers to a conic gradient. */\n Conic: 'conic',\n} as const;\n\nexport type GradientKind = (typeof GradientKind)[keyof typeof GradientKind];\n\nexport interface GradientStop {\n readonly color: string;\n readonly position: number;\n}\n\nexport interface Gradient {\n readonly kind: GradientKind;\n readonly angle: number;\n readonly stops: ReadonlyArray<GradientStop>;\n}\n\nexport interface GradientPickerProps {\n /** The gradient, controlled. The `v-model` binding target. */\n readonly modelValue?: Gradient;\n\n /** The initial gradient when uncontrolled. */\n readonly defaultValue?: Gradient;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly isDisabled?: boolean;\n\n /** The hidden input name; the hidden input emits the CSS string. */\n readonly name?: string;\n\n /** The control's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n}\n\nconst DefaultGradient: Gradient = {\n kind: GradientKind.Linear,\n angle: 90,\n stops: [\n { color: '#3b82f6', position: 0 },\n { color: '#a855f7', position: 100 },\n ],\n};\n\nexport function gradientToCss(g: Gradient): string {\n const stops = [...g.stops].sort((a, b) => a.position - b.position);\n const stopsStr = stops.map((s) => `${s.color} ${s.position}%`).join(', ');\n if (g.kind === GradientKind.Linear) return `linear-gradient(${g.angle}deg, ${stopsStr})`;\n if (g.kind === GradientKind.Radial) return `radial-gradient(circle, ${stopsStr})`;\n return `conic-gradient(from ${g.angle}deg, ${stopsStr})`;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { Plus, Trash } from 'lucide-vue-next';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { Icon } from '../../../foundation/icons';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { inputBaseVariants, InputSize } from '../InputStyles';\n\n/**\n * Renders a live gradient preview over editors for its kind, angle and colour stops.\n *\n * Emits a `Gradient` object; giving it a `name` also writes the CSS string into a hidden input.\n *\n * Form-aware at GROUP level: inside a `Field`/`form.Field` the root (`role=\"group\"`)\n * takes the context id + `aria-labelledby`/`aria-describedby`/`aria-invalid`, and\n * the disabled flag cascades to every inner control.\n */\n/* `inheritAttrs: false` so `class` folds into the root's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'GradientPicker', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<GradientPickerProps>(), {\n /* Explicit `undefined` defaults: `useControlled` keys on `=== undefined`, and Vue casts an\n absent `boolean` prop to `false` — which would shadow the form control context. */\n modelValue: undefined,\n defaultValue: undefined,\n isDisabled: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader edits the kind, angle or any stop — the `v-model` half. */\n 'update:modelValue': [value: Gradient];\n}>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst ctx = useFormControl();\nconst isDisabled = computed(() => props.isDisabled ?? ctx?.isDisabled);\n\nconst controlled = useControlled<Gradient>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? DefaultGradient,\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst gradient = controlled.value;\n\nconst css = computed(() => gradientToCss(gradient.value));\n\n/* `Object.values` hoisted out of the template — the runtime template compiler resolves plain\n identifiers, not arbitrary global calls. */\nconst kinds = Object.values(GradientKind);\n\nfunction update(patch: Partial<Gradient>): void {\n controlled.setValue({ ...gradient.value, ...patch });\n}\n\nfunction updateStop(index: number, patch: Partial<GradientStop>): void {\n controlled.setValue({\n ...gradient.value,\n stops: gradient.value.stops.map((s, i) => (i === index ? { ...s, ...patch } : s)),\n });\n}\n\nfunction addStop(): void {\n const last = gradient.value.stops[gradient.value.stops.length - 1];\n const newPos = last ? Math.min(100, last.position + 25) : 50;\n controlled.setValue({\n ...gradient.value,\n stops: [...gradient.value.stops, { color: '#ffffff', position: newPos }],\n });\n}\n\nfunction removeStop(index: number): void {\n if (gradient.value.stops.length <= 2) return;\n controlled.setValue({\n ...gradient.value,\n stops: gradient.value.stops.filter((_, i) => i !== index),\n });\n}\n\nfunction onAngleInput(event: Event): void {\n const raw = Number((event.target as HTMLInputElement).value) || 0;\n update({ angle: Math.max(0, Math.min(360, raw)) });\n}\n\nfunction onStopColorInput(index: number, event: Event): void {\n updateStop(index, { color: (event.target as HTMLInputElement).value });\n}\n\nfunction onStopPositionInput(index: number, event: Event): void {\n const raw = Number((event.target as HTMLInputElement).value) || 0;\n updateStop(index, { position: Math.max(0, Math.min(100, raw)) });\n}\n\nfunction kindClass(kind: GradientKind): string {\n return cn(\n 'inline-flex h-6 items-center rounded px-2 text-xs font-medium transition-colors',\n gradient.value.kind === kind ? 'bg-primary text-primary-foreground' : 'text-muted-foreground hover:text-foreground',\n );\n}\n\nconst rootId = computed(() => props.id ?? ctx?.id);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootClass = computed(() =>\n cn(\n 'flex flex-col gap-3 rounded-md border border-border bg-card p-3 text-card-foreground shadow-sm',\n isDisabled.value && 'opacity-60',\n attrs.class as ClassValue,\n ),\n);\n\nconst angleInputClass = cn(inputBaseVariants({ size: InputSize.Sm }), 'w-20');\nconst hexInputClass = cn(inputBaseVariants({ size: InputSize.Sm }), 'flex-1 font-mono');\nconst positionInputClass = cn(inputBaseVariants({ size: InputSize.Sm }), 'w-16');\n\nconst PlusIcon = Plus;\nconst TrashIcon = Trash;\n\n/** The rendered root `<div>` — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el });\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n controlled.reset();\n});\n</script>\n\n<template>\n <div\n :key=\"formResetRevision\"\n ref=\"el\"\n role=\"group\"\n :id=\"rootId\"\n :aria-labelledby=\"ctx?.labelledBy\"\n :aria-describedby=\"ctx?.describedBy\"\n :aria-invalid=\"ctx?.isInvalid || undefined\"\n :class=\"rootClass\"\n v-bind=\"passthroughAttrs\"\n >\n <!-- Kind + angle -->\n <div class=\"flex items-center gap-2 text-sm\">\n <div\n role=\"radiogroup\"\n aria-label=\"Gradient kind\"\n class=\"flex items-center gap-0.5 rounded-md bg-muted/40 p-0.5 ring-1 ring-border\"\n >\n <button\n v-for=\"k in kinds\"\n :key=\"k\"\n type=\"button\"\n role=\"radio\"\n :aria-checked=\"gradient.kind === k\"\n :disabled=\"isDisabled\"\n :class=\"kindClass(k)\"\n @click=\"update({ kind: k })\"\n >\n {{ k }}\n </button>\n </div>\n <label v-if=\"gradient.kind !== 'radial'\" class=\"ml-auto flex items-center gap-2 text-xs text-muted-foreground\">\n Angle\n <input\n type=\"number\"\n :min=\"0\"\n :max=\"360\"\n :value=\"gradient.angle\"\n :disabled=\"isDisabled\"\n :class=\"angleInputClass\"\n @input=\"onAngleInput\"\n />\n °\n </label>\n </div>\n\n <!-- Preview bar -->\n <div aria-hidden=\"true\" class=\"h-12 rounded-md border border-border\" :style=\"{ background: css }\" />\n\n <!-- Stops -->\n <ul class=\"flex flex-col gap-2\">\n <!-- Keyed on the index: `GradientStop` has no id, and keying on the edited colour drops focus. -->\n <li v-for=\"(stop, i) in gradient.stops\" :key=\"i\" class=\"flex items-center gap-2\">\n <input\n type=\"color\"\n aria-label=\"Stop color\"\n :value=\"stop.color\"\n :disabled=\"isDisabled\"\n class=\"h-7 w-10 cursor-pointer rounded-sm border border-input bg-background\"\n @input=\"onStopColorInput(i, $event)\"\n />\n <input\n type=\"text\"\n aria-label=\"Stop color hex\"\n :value=\"stop.color\"\n :disabled=\"isDisabled\"\n :class=\"hexInputClass\"\n @input=\"onStopColorInput(i, $event)\"\n />\n <input\n type=\"number\"\n aria-label=\"Stop position\"\n :min=\"0\"\n :max=\"100\"\n :value=\"stop.position\"\n :disabled=\"isDisabled\"\n :class=\"positionInputClass\"\n @input=\"onStopPositionInput(i, $event)\"\n />\n <span class=\"text-xs text-muted-foreground\">%</span>\n <button\n type=\"button\"\n aria-label=\"Remove stop\"\n :disabled=\"isDisabled || gradient.stops.length <= 2\"\n class=\"inline-flex h-7 w-7 items-center justify-center rounded text-destructive hover:bg-destructive-soft disabled:pointer-events-none disabled:opacity-40\"\n @click=\"removeStop(i)\"\n >\n <Icon :icon=\"TrashIcon\" :size=\"12\" />\n </button>\n </li>\n </ul>\n\n <button\n type=\"button\"\n :disabled=\"isDisabled\"\n class=\"inline-flex h-8 w-full items-center justify-center gap-1 rounded-md border border-dashed border-border text-xs text-muted-foreground hover:bg-muted hover:text-foreground\"\n @click=\"addStop\"\n >\n <Icon :icon=\"PlusIcon\" :size=\"12\" /> Add stop\n </button>\n\n <!-- CSS output -->\n <code class=\"block break-all rounded-md bg-muted/40 px-2 py-1.5 text-[10px] text-muted-foreground\">\n {{ css }}\n </code>\n <input v-if=\"name\" type=\"hidden\" :name=\"name\" :value=\"css\" />\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </div>\n</template>\n","<script lang=\"ts\">\nexport interface Address {\n country: string;\n line1: string;\n line2?: string;\n city: string;\n region: string;\n postalCode: string;\n}\n\ninterface CountryConfig {\n iso: string;\n name: string;\n regionLabel: string;\n postalLabel: string;\n regionOptions?: Array<{ value: string; label: string }>;\n}\n\nconst CountryConfigs: ReadonlyArray<CountryConfig> = [\n {\n iso: 'US',\n name: 'United States',\n regionLabel: 'State',\n postalLabel: 'ZIP code',\n regionOptions: [\n 'AL',\n 'AK',\n 'AZ',\n 'AR',\n 'CA',\n 'CO',\n 'CT',\n 'DE',\n 'FL',\n 'GA',\n 'HI',\n 'ID',\n 'IL',\n 'IN',\n 'IA',\n 'KS',\n 'KY',\n 'LA',\n 'ME',\n 'MD',\n 'MA',\n 'MI',\n 'MN',\n 'MS',\n 'MO',\n 'MT',\n 'NE',\n 'NV',\n 'NH',\n 'NJ',\n 'NM',\n 'NY',\n 'NC',\n 'ND',\n 'OH',\n 'OK',\n 'OR',\n 'PA',\n 'RI',\n 'SC',\n 'SD',\n 'TN',\n 'TX',\n 'UT',\n 'VT',\n 'VA',\n 'WA',\n 'WV',\n 'WI',\n 'WY',\n ].map((s) => ({ value: s, label: s })),\n },\n {\n iso: 'CA',\n name: 'Canada',\n regionLabel: 'Province',\n postalLabel: 'Postal code',\n regionOptions: ['AB', 'BC', 'MB', 'NB', 'NL', 'NS', 'NT', 'NU', 'ON', 'PE', 'QC', 'SK', 'YT'].map((s) => ({\n value: s,\n label: s,\n })),\n },\n { iso: 'GB', name: 'United Kingdom', regionLabel: 'County', postalLabel: 'Postcode' },\n { iso: 'DE', name: 'Germany', regionLabel: 'Bundesland', postalLabel: 'PLZ' },\n { iso: 'FR', name: 'France', regionLabel: 'Région', postalLabel: 'CodeText postal' },\n { iso: 'AU', name: 'Australia', regionLabel: 'State', postalLabel: 'Postcode' },\n { iso: 'JP', name: 'Japan', regionLabel: 'Prefecture', postalLabel: '〒' },\n];\n\nconst FallbackCountry: CountryConfig = {\n iso: 'XX',\n name: 'Other',\n regionLabel: 'Region',\n postalLabel: 'Postal code',\n};\n\nfunction configFor(iso: string): CountryConfig {\n return CountryConfigs.find((c) => c.iso === iso) ?? FallbackCountry;\n}\n\nexport interface AddressEditorProps {\n /** The address, controlled. The `v-model` binding target. */\n readonly modelValue?: Address;\n\n /** The initial address when uncontrolled. */\n readonly defaultValue?: Address;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly isDisabled?: boolean;\n\n /** The read-only state. Falls back to the surrounding form control's `isReadOnly`. */\n readonly isReadOnly?: boolean;\n\n /** Whether city / region / postal stack in one column instead of three. */\n readonly isCompact?: boolean;\n\n /** The prefix for hidden inputs (`{name}.line1`, etc.). */\n readonly name?: string;\n\n /** The control's id. Auto-filled from `FormControl` context when omitted. */\n readonly id?: string;\n}\n\n/** The free-text address fields, i.e. every field but `country`. */\ntype AddressTextField = 'line1' | 'line2' | 'city' | 'region' | 'postalCode';\n\nconst EmptyAddress: Address = { country: 'US', line1: '', city: '', region: '', postalCode: '' };\n\nexport const AddressCountries = CountryConfigs;\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useId } from '../../../foundation/identifiers';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { inputBaseVariants, InputSize } from '../InputStyles';\n\n/**\n * Renders a country-aware address block whose country select relabels the region and postal fields.\n *\n * Built-in config for US/CA/GB/DE/FR/AU/JP; a generic fallback covers the rest.\n *\n * Form-aware at GROUP level: inside a `Field`/`form.Field` the root (`role=\"group\"`)\n * takes the context id + `aria-labelledby`/`aria-describedby`/`aria-invalid`, and\n * the disabled/read-only flags cascade to every sub-field (each keeps its own\n * self-contained label/id pair).\n */\n/* `inheritAttrs: false` so `class` folds into the root's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'AddressEditor', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<AddressEditorProps>(), {\n /* Explicit `undefined` defaults: `useControlled` keys on `=== undefined`, and Vue casts an\n absent `boolean` prop to `false` — which would shadow the form control context. */\n modelValue: undefined,\n defaultValue: undefined,\n isDisabled: undefined,\n isReadOnly: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader edits any address field — the `v-model` half. */\n 'update:modelValue': [address: Address];\n}>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst ctx = useFormControl();\nconst isDisabled = computed(() => props.isDisabled ?? ctx?.isDisabled);\nconst isReadOnly = computed(() => props.isReadOnly ?? ctx?.isReadOnly);\n\nconst controlled = useControlled<Address>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? EmptyAddress,\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst address = controlled.value;\n\nconst config = computed(() => configFor(address.value.country));\n\nconst ids = {\n country: useId('country'),\n line1: useId('line1'),\n line2: useId('line2'),\n city: useId('city'),\n region: useId('region'),\n postal: useId('postal'),\n};\n\nfunction update(patch: Partial<Address>): void {\n controlled.setValue({ ...address.value, ...patch });\n}\n\nfunction onCountryChange(event: Event): void {\n update({ country: (event.target as HTMLSelectElement).value, region: '' });\n}\n\n/* Written through a typed local rather than a computed-key object literal: a union-keyed\n `{ [key]: value }` widens to an index signature and stops matching `Partial<Address>`. */\nfunction onFieldInput(key: AddressTextField, event: Event): void {\n const patch: Partial<Address> = {};\n patch[key] = (event.target as HTMLInputElement).value;\n update(patch);\n}\n\nfunction onRegionSelect(event: Event): void {\n update({ region: (event.target as HTMLSelectElement).value });\n}\n\nconst rootId = computed(() => props.id ?? ctx?.id);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootClass = computed(() => cn('flex flex-col gap-3', attrs.class as ClassValue));\n\nconst gridClass = computed(() => cn('grid gap-3', props.isCompact ? 'grid-cols-1' : 'grid-cols-3'));\n\nconst controlClass = cn(inputBaseVariants({ size: InputSize.Md }));\n\n/** The rendered root `<div>` — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el });\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n controlled.reset();\n});\n</script>\n\n<template>\n <div\n :key=\"formResetRevision\"\n ref=\"el\"\n role=\"group\"\n :id=\"rootId\"\n :aria-labelledby=\"ctx?.labelledBy\"\n :aria-describedby=\"ctx?.describedBy\"\n :aria-invalid=\"ctx?.isInvalid || undefined\"\n :class=\"rootClass\"\n v-bind=\"passthroughAttrs\"\n >\n <!-- Country -->\n <div class=\"flex flex-col gap-1\">\n <label :for=\"ids.country\" class=\"text-xs font-medium text-foreground\">Country</label>\n <select\n :id=\"ids.country\"\n :value=\"address.country\"\n :disabled=\"isDisabled || isReadOnly\"\n :class=\"controlClass\"\n @change=\"onCountryChange\"\n >\n <option v-for=\"c in AddressCountries\" :key=\"c.iso\" :value=\"c.iso\">{{ c.name }}</option>\n <option value=\"XX\">Other</option>\n </select>\n </div>\n <!-- Line 1 -->\n <div class=\"flex flex-col gap-1\">\n <label :for=\"ids.line1\" class=\"text-xs font-medium text-foreground\">Address line 1</label>\n <input\n :id=\"ids.line1\"\n type=\"text\"\n autocomplete=\"address-line1\"\n :value=\"address.line1\"\n :disabled=\"isDisabled\"\n :readonly=\"isReadOnly\"\n :class=\"controlClass\"\n @input=\"onFieldInput('line1', $event)\"\n />\n </div>\n <!-- Line 2 -->\n <div class=\"flex flex-col gap-1\">\n <label :for=\"ids.line2\" class=\"text-xs font-medium text-muted-foreground\">\n Address line 2 <span class=\"text-[10px]\">(optional)</span>\n </label>\n <input\n :id=\"ids.line2\"\n type=\"text\"\n autocomplete=\"address-line2\"\n :value=\"address.line2 ?? ''\"\n :disabled=\"isDisabled\"\n :readonly=\"isReadOnly\"\n :class=\"controlClass\"\n @input=\"onFieldInput('line2', $event)\"\n />\n </div>\n <!-- City + Region + Postal -->\n <div :class=\"gridClass\">\n <div class=\"flex flex-col gap-1\">\n <label :for=\"ids.city\" class=\"text-xs font-medium text-foreground\">City</label>\n <input\n :id=\"ids.city\"\n type=\"text\"\n autocomplete=\"address-level2\"\n :value=\"address.city\"\n :disabled=\"isDisabled\"\n :readonly=\"isReadOnly\"\n :class=\"controlClass\"\n @input=\"onFieldInput('city', $event)\"\n />\n </div>\n <div class=\"flex flex-col gap-1\">\n <label :for=\"ids.region\" class=\"text-xs font-medium text-foreground\">\n {{ config.regionLabel }}\n </label>\n <select\n v-if=\"config.regionOptions\"\n :id=\"ids.region\"\n :value=\"address.region\"\n :disabled=\"isDisabled || isReadOnly\"\n :class=\"controlClass\"\n @change=\"onRegionSelect\"\n >\n <option value=\"\">—</option>\n <option v-for=\"o in config.regionOptions\" :key=\"o.value\" :value=\"o.value\">\n {{ o.label }}\n </option>\n </select>\n <input\n v-else\n :id=\"ids.region\"\n type=\"text\"\n autocomplete=\"address-level1\"\n :value=\"address.region\"\n :disabled=\"isDisabled\"\n :readonly=\"isReadOnly\"\n :class=\"controlClass\"\n @input=\"onFieldInput('region', $event)\"\n />\n </div>\n <div class=\"flex flex-col gap-1\">\n <label :for=\"ids.postal\" class=\"text-xs font-medium text-foreground\">\n {{ config.postalLabel }}\n </label>\n <input\n :id=\"ids.postal\"\n type=\"text\"\n autocomplete=\"postal-code\"\n :value=\"address.postalCode\"\n :disabled=\"isDisabled\"\n :readonly=\"isReadOnly\"\n :class=\"controlClass\"\n @input=\"onFieldInput('postalCode', $event)\"\n />\n </div>\n </div>\n <template v-if=\"name\">\n <input type=\"hidden\" :name=\"`${name}.country`\" :value=\"address.country\" />\n <input type=\"hidden\" :name=\"`${name}.line1`\" :value=\"address.line1\" />\n <input type=\"hidden\" :name=\"`${name}.line2`\" :value=\"address.line2 ?? ''\" />\n <input type=\"hidden\" :name=\"`${name}.city`\" :value=\"address.city\" />\n <input type=\"hidden\" :name=\"`${name}.region`\" :value=\"address.region\" />\n <input type=\"hidden\" :name=\"`${name}.postalCode`\" :value=\"address.postalCode\" />\n </template>\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </div>\n</template>\n","<script lang=\"ts\">\n/** Represents one selectable dialling country. */\nexport interface PhoneCountry {\n iso: string;\n name: string;\n dial: string; // includes leading +\n flag: string; // emoji\n}\n\nexport const PhoneCountries: ReadonlyArray<PhoneCountry> = [\n { iso: 'US', name: 'United States', dial: '+1', flag: '🇺🇸' },\n { iso: 'CA', name: 'Canada', dial: '+1', flag: '🇨🇦' },\n { iso: 'GB', name: 'United Kingdom', dial: '+44', flag: '🇬🇧' },\n { iso: 'AU', name: 'Australia', dial: '+61', flag: '🇦🇺' },\n { iso: 'DE', name: 'Germany', dial: '+49', flag: '🇩🇪' },\n { iso: 'FR', name: 'France', dial: '+33', flag: '🇫🇷' },\n { iso: 'ES', name: 'Spain', dial: '+34', flag: '🇪🇸' },\n { iso: 'IT', name: 'Italy', dial: '+39', flag: '🇮🇹' },\n { iso: 'NL', name: 'Netherlands', dial: '+31', flag: '🇳🇱' },\n { iso: 'BE', name: 'Belgium', dial: '+32', flag: '🇧🇪' },\n { iso: 'CH', name: 'Switzerland', dial: '+41', flag: '🇨🇭' },\n { iso: 'AT', name: 'Austria', dial: '+43', flag: '🇦🇹' },\n { iso: 'SE', name: 'Sweden', dial: '+46', flag: '🇸🇪' },\n { iso: 'NO', name: 'Norway', dial: '+47', flag: '🇳🇴' },\n { iso: 'DK', name: 'Denmark', dial: '+45', flag: '🇩🇰' },\n { iso: 'FI', name: 'Finland', dial: '+358', flag: '🇫🇮' },\n { iso: 'IE', name: 'Ireland', dial: '+353', flag: '🇮🇪' },\n { iso: 'PT', name: 'Portugal', dial: '+351', flag: '🇵🇹' },\n { iso: 'PL', name: 'Poland', dial: '+48', flag: '🇵🇱' },\n { iso: 'CZ', name: 'Czechia', dial: '+420', flag: '🇨🇿' },\n { iso: 'GR', name: 'Greece', dial: '+30', flag: '🇬🇷' },\n { iso: 'TR', name: 'Türkiye', dial: '+90', flag: '🇹🇷' },\n { iso: 'RU', name: 'Russia', dial: '+7', flag: '🇷🇺' },\n { iso: 'UA', name: 'Ukraine', dial: '+380', flag: '🇺🇦' },\n { iso: 'IL', name: 'Israel', dial: '+972', flag: '🇮🇱' },\n { iso: 'AE', name: 'UAE', dial: '+971', flag: '🇦🇪' },\n { iso: 'SA', name: 'Saudi Arabia', dial: '+966', flag: '🇸🇦' },\n { iso: 'EG', name: 'Egypt', dial: '+20', flag: '🇪🇬' },\n { iso: 'ZA', name: 'South Africa', dial: '+27', flag: '🇿🇦' },\n { iso: 'NG', name: 'Nigeria', dial: '+234', flag: '🇳🇬' },\n { iso: 'KE', name: 'Kenya', dial: '+254', flag: '🇰🇪' },\n { iso: 'IN', name: 'India', dial: '+91', flag: '🇮🇳' },\n { iso: 'PK', name: 'Pakistan', dial: '+92', flag: '🇵🇰' },\n { iso: 'BD', name: 'Bangladesh', dial: '+880', flag: '🇧🇩' },\n { iso: 'SG', name: 'Singapore', dial: '+65', flag: '🇸🇬' },\n { iso: 'MY', name: 'Malaysia', dial: '+60', flag: '🇲🇾' },\n { iso: 'TH', name: 'Thailand', dial: '+66', flag: '🇹🇭' },\n { iso: 'VN', name: 'Vietnam', dial: '+84', flag: '🇻🇳' },\n { iso: 'PH', name: 'Philippines', dial: '+63', flag: '🇵🇭' },\n { iso: 'ID', name: 'Indonesia', dial: '+62', flag: '🇮🇩' },\n { iso: 'JP', name: 'Japan', dial: '+81', flag: '🇯🇵' },\n { iso: 'KR', name: 'South Korea', dial: '+82', flag: '🇰🇷' },\n { iso: 'CN', name: 'China', dial: '+86', flag: '🇨🇳' },\n { iso: 'HK', name: 'Hong Kong', dial: '+852', flag: '🇭🇰' },\n { iso: 'TW', name: 'Taiwan', dial: '+886', flag: '🇹🇼' },\n { iso: 'NZ', name: 'New Zealand', dial: '+64', flag: '🇳🇿' },\n { iso: 'BR', name: 'Brazil', dial: '+55', flag: '🇧🇷' },\n { iso: 'AR', name: 'Argentina', dial: '+54', flag: '🇦🇷' },\n { iso: 'CL', name: 'Chile', dial: '+56', flag: '🇨🇱' },\n { iso: 'CO', name: 'Colombia', dial: '+57', flag: '🇨🇴' },\n { iso: 'MX', name: 'Mexico', dial: '+52', flag: '🇲🇽' },\n];\n\nexport interface PhoneInputProps {\n /** The E.164 value, controlled. The `v-model` binding target. */\n readonly modelValue?: string;\n\n /** The initial E.164 value when uncontrolled. */\n readonly defaultValue?: string;\n\n /** The ISO code selected before the value carries a recognisable dial prefix. Default `US`. */\n readonly defaultCountry?: string;\n\n /** The disabled state. Falls back to the surrounding form control's `isDisabled`. */\n readonly isDisabled?: boolean;\n\n /** The read-only state. Falls back to the surrounding form control's `isReadOnly`. */\n readonly isReadOnly?: boolean;\n\n /** The invalid surface override. Falls back to the surrounding form control's `isInvalid`. */\n readonly isInvalid?: boolean;\n\n /** The national-number placeholder. */\n readonly placeholder?: string;\n\n /** The hidden input name; the hidden input emits the full E.164 value. */\n readonly name?: string;\n}\n\nfunction splitE164(value: string, defaultIso: string): { iso: string; national: string } {\n if (!value) return { iso: defaultIso, national: '' };\n // Match the longest dial code prefix.\n const sorted = [...PhoneCountries].sort((a, b) => b.dial.length - a.dial.length);\n for (const c of sorted) {\n if (value.startsWith(c.dial)) {\n return { iso: c.iso, national: value.slice(c.dial.length).replace(/\\D/g, '') };\n }\n }\n return { iso: defaultIso, national: value.replace(/\\D/g, '') };\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useTemplateRef } from 'vue';\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, ref, useAttrs } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { useFormControl } from '../../../foundation/primitives';\nimport { inputBaseVariants, InputSize } from '../InputStyles';\n\n/**\n * Renders a country dial-code select beside a national-number field, emitting one E.164 string.\n *\n * First-generation country list; full `libphonenumber` validation and formatting stays deferred.\n */\n/* `inheritAttrs: false` so `class` folds into the root's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'PhoneInput', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<PhoneInputProps>(), {\n defaultCountry: 'US',\n placeholder: '(555) 555-5555',\n /* Explicit `undefined` defaults: `useControlled` keys on `=== undefined`, and Vue casts an\n absent `boolean` prop to `false` — which would shadow the form control context. */\n modelValue: undefined,\n isDisabled: undefined,\n isReadOnly: undefined,\n isInvalid: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader edits the number or switches country — the `v-model` half. */\n 'update:modelValue': [e164: string];\n}>();\n\nconst attrs = useAttrs();\n\nconst controlled = useControlled<string>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? '',\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst e164 = controlled.value;\n\n/* FormControlContext adoption — explicit props stay as overrides. The national-number\n input is the composite's primary control (carries the context id + describedby);\n a user `id` attr stays on the root div. */\nconst ctx = useFormControl();\nconst disabled = computed(() => props.isDisabled ?? ctx?.isDisabled);\nconst readOnly = computed(() => props.isReadOnly ?? ctx?.isReadOnly);\nconst invalid = computed(() => props.isInvalid ?? ctx?.isInvalid);\n\n/* Selected ISO is state — shared dial codes (+1 US/CA) make it unrecoverable from the value\n alone. Re-derive only when the value's dial prefix becomes incompatible with the selection. */\nconst selectedIso = ref(props.defaultCountry);\n\nconst split = computed(() => {\n const selected = PhoneCountries.find((c) => c.iso === selectedIso.value);\n if (selected && (!e164.value || e164.value.startsWith(selected.dial))) {\n return {\n iso: selected.iso,\n national: e164.value.slice(selected.dial.length).replace(/\\D/g, ''),\n };\n }\n return splitE164(e164.value, props.defaultCountry);\n});\n\nconst iso = computed(() => split.value.iso);\nconst national = computed(() => split.value.national);\nconst country = computed(() => PhoneCountries.find((c) => c.iso === iso.value) ?? PhoneCountries[0]!);\n\nfunction setCountry(event: Event): void {\n const nextIso = (event.target as HTMLSelectElement).value;\n const next = PhoneCountries.find((c) => c.iso === nextIso) ?? country.value;\n selectedIso.value = next.iso;\n controlled.setValue(`${next.dial}${national.value}`);\n}\n\nfunction setNational(event: Event): void {\n const digits = (event.target as HTMLInputElement).value.replace(/\\D/g, '');\n controlled.setValue(`${country.value.dial}${digits}`);\n}\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootClass = computed(() =>\n cn(\n 'inline-flex items-stretch overflow-hidden rounded-md border bg-background',\n invalid.value ? 'border-destructive' : 'border-input',\n disabled.value && 'opacity-60',\n attrs.class as ClassValue,\n ),\n);\n\nconst selectClass = cn(\n 'h-10 cursor-pointer border-r border-input bg-card pl-2 pr-1 text-sm outline-hidden focus-visible:ring-2 focus-visible:ring-ring',\n);\n\nconst inputClass = cn(inputBaseVariants({ size: InputSize.Md }), 'rounded-none border-0 focus-visible:ring-0');\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n controlled.reset();\n});\n</script>\n\n<template>\n <div :key=\"formResetRevision\" :class=\"rootClass\" v-bind=\"passthroughAttrs\">\n <select\n aria-label=\"Country\"\n :value=\"iso\"\n :disabled=\"disabled || readOnly\"\n :class=\"selectClass\"\n :style=\"{ minWidth: '90px' }\"\n @change=\"setCountry\"\n >\n <option v-for=\"c in PhoneCountries\" :key=\"c.iso\" :value=\"c.iso\">{{ c.flag }} {{ c.dial }}</option>\n </select>\n <input\n type=\"tel\"\n inputmode=\"tel\"\n autocomplete=\"tel-national\"\n :id=\"ctx?.id\"\n :value=\"national\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :readonly=\"readOnly\"\n :aria-invalid=\"invalid || undefined\"\n :aria-describedby=\"ctx?.describedBy\"\n :aria-required=\"ctx?.isRequired || undefined\"\n :class=\"inputClass\"\n @input=\"setNational\"\n />\n <input v-if=\"name\" type=\"hidden\" :name=\"name\" :value=\"e164\" />\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </div>\n</template>\n","import { Bike, Car, Clock, Flag, Hash, Lightbulb, PawPrint, Smile, Utensils } from 'lucide-vue-next';\n\nimport { SizePreset } from '../../../foundation/styles';\nimport { type IconAdapter } from '../../../foundation/icons';\nimport { EmojiCategory } from '../../../domain/emoji';\n\n/** A uniform t-shirt scale, applied per picker element (search, category nav, tiles). */\nexport type EmojiPickerSize = Extract<SizePreset, 'sm' | 'md' | 'lg'>;\n\n/** The picker's element scale applied wherever no per-element size is given. */\nexport const DefaultPickerSize: EmojiPickerSize = SizePreset.Md;\n\n/** Defines a picker element that can carry its own scale — the search box, the category nav, or the tiles. */\nexport const PickerElement = {\n /** Refers to the search input. */\n Search: 'search',\n /** Refers to the category nav. */\n Nav: 'nav',\n /** Refers to the emoji tiles. */\n Tile: 'tile',\n} as const;\n\nexport type PickerElement = (typeof PickerElement)[keyof typeof PickerElement];\n\n/**\n * A single scale for the whole picker, or a per-element override map — `search`/`nav`/`tile` as\n * t-shirt scales plus `icon` as the strip icon size in px (one dimension, so px not a scale).\n */\nexport type EmojiPickerSizeInput =\n EmojiPickerSize | (Partial<Record<PickerElement, EmojiPickerSize>> & { icon?: number });\n\n/**\n * Resolves the scale for one picker element — a uniform size applies to every element, a map\n * falls back to `fallback` per element.\n */\nexport function resolveElementSize(\n size: EmojiPickerSizeInput | undefined,\n element: PickerElement,\n fallback: EmojiPickerSize,\n): EmojiPickerSize {\n return typeof size === 'string' ? size : (size?.[element] ?? fallback);\n}\n\n/** Defines which category-navigation affordance the picker renders. */\nexport const CategoryNavVariant = {\n /** Refers to the segmented icon-strip layout. */\n Strip: 'strip',\n /** Refers to the labelled pill-row layout. */\n Pills: 'pills',\n} as const;\n\nexport type CategoryNavVariant = (typeof CategoryNavVariant)[keyof typeof CategoryNavVariant];\n\n/** Defines how each emoji tile is framed — a rounded-rect chip or a circle. */\nexport const EmojiTileShape = {\n /** Refers to a rounded-rect chip frame. */\n Rounded: 'rounded',\n /** Refers to a circular frame. */\n Circle: 'circle',\n} as const;\n\nexport type EmojiTileShape = (typeof EmojiTileShape)[keyof typeof EmojiTileShape];\n\n/** The default `StorageBroker` key the picker persists its most-recently-used emoji under. */\nexport const EmojiRecentsKey = 'wow-two-beta.emoji.recents';\n\n/** Defines the pixel geometry an `EmojiPickerSize` maps to for the rolled tile + nav elements. */\nexport interface EmojiPickerSizeTokens {\n /** The emoji tile's min edge, in px; the grid auto-fills columns at this width. */\n readonly tile: number;\n\n /** The emoji glyph's font size, in px. */\n readonly glyph: number;\n\n /** The category-nav control's edge, in px. */\n readonly nav: number;\n\n /** The inter-tile gap, in px. */\n readonly gap: number;\n}\n\n/** Maps each `EmojiPickerSize` to its tile / glyph / nav / gap pixel geometry. */\nexport const EmojiPickerSizes: Record<EmojiPickerSize, EmojiPickerSizeTokens> = {\n sm: { tile: 32, glyph: 18, nav: 26, gap: 4 },\n md: { tile: 40, glyph: 22, nav: 30, gap: 6 },\n lg: { tile: 48, glyph: 26, nav: 34, gap: 8 },\n};\n\n/** The synthetic \"recently used\" bucket — nav index 0, backed by the MRU list rather than the catalog. */\nexport const RecentCategory = 'recent';\n\n/** A navigable picker section: the synthetic recents bucket or one real catalog category. */\nexport type CategoryKey = typeof RecentCategory | EmojiCategory;\n\n/** Defines a category's nav presentation — its accessible label and glyph. */\ninterface CategoryDisplay {\n label: string;\n Icon: IconAdapter;\n}\n\n/** The nav categories in display order — recents first, then the catalog's Telegram-order groups. */\nexport const CategoryOrder: ReadonlyArray<CategoryKey> = [\n RecentCategory,\n EmojiCategory.SmileysPeople,\n EmojiCategory.AnimalsNature,\n EmojiCategory.FoodDrink,\n EmojiCategory.Activity,\n EmojiCategory.TravelPlaces,\n EmojiCategory.Objects,\n EmojiCategory.Symbols,\n EmojiCategory.Flags,\n];\n\n/** Maps each nav category to its label + icon. */\nexport const CategoryDisplays: Record<CategoryKey, CategoryDisplay> = {\n [RecentCategory]: { label: 'Recent', Icon: Clock },\n [EmojiCategory.SmileysPeople]: { label: 'Smileys & people', Icon: Smile },\n [EmojiCategory.AnimalsNature]: { label: 'Animals & nature', Icon: PawPrint },\n [EmojiCategory.FoodDrink]: { label: 'Food & drink', Icon: Utensils },\n [EmojiCategory.Activity]: { label: 'Activity', Icon: Bike },\n [EmojiCategory.TravelPlaces]: { label: 'Travel & places', Icon: Car },\n [EmojiCategory.Objects]: { label: 'Objects', Icon: Lightbulb },\n [EmojiCategory.Symbols]: { label: 'Symbols', Icon: Hash },\n [EmojiCategory.Flags]: { label: 'Flags', Icon: Flag },\n};\n\n/** The muted hints shown when a picker surface has no emoji to render. */\nexport const EmojiEmptyLabels = {\n /** Refers to the empty search-results hint. */\n search: 'No matches.',\n /** Refers to the empty recents hint. */\n recents: 'Your picks show up here.',\n /** Refers to the empty category hint. */\n category: 'No emoji here yet.',\n} as const;\n","<script lang=\"ts\">\nimport type { CategoryKey, CategoryNavVariant, EmojiPickerSize } from './EmojiPicker.variants';\n\n/** Defines props for the horizontal category nav. */\nexport interface CategoryNavProps {\n /** The category-nav layout — segmented icon strip or labelled pills. */\n readonly variant: CategoryNavVariant;\n\n /** The active category. */\n readonly active: CategoryKey;\n\n /** The nav scale. */\n readonly size: EmojiPickerSize;\n\n /** The strip icon size in px. Default `round(nav * 0.8)` derived from the scale. */\n readonly iconSize?: number;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, type CSSProperties } from 'vue';\nimport { ToggleInput, ToggleGroup, ToggleGroupVariant, ToggleInputVariant, ToggleMode } from '..';\nimport {\n CategoryDisplays,\n CategoryNavVariant as CategoryNavVariantValue,\n CategoryOrder,\n EmojiPickerSizes,\n} from './EmojiPicker.variants';\n\n/** Renders the category picker as a single-select `ToggleGroup` — segmented icon strip or labelled pill row. */\ndefineOptions({ name: 'CategoryNav' });\n\nconst props = defineProps<CategoryNavProps>();\n\nconst emit = defineEmits<{\n /** Fires when the reader picks a category from the nav, carrying its key. Replaces React's `onSelect`. */\n select: [category: CategoryKey];\n}>();\n\nconst isPills = computed(() => props.variant === CategoryNavVariantValue.Pills);\nconst navSize = computed(() => EmojiPickerSizes[props.size].nav);\n/* 0.55, not the React original's 0.8. `EmojiPickerSizes` already fixes the house glyph-in-box\n ratio at 0.55 (md: glyph 22 in tile 40); 0.8 left a 24px icon in a 30px segment, filling the\n strip edge-to-edge. Matching the tile ratio puts the nav back in scale with the picker. */\nconst stripIconSize = computed(() => props.iconSize ?? Math.round(navSize.value * 0.55));\nconst stripItemStyle = computed<CSSProperties>(() => ({ height: `${navSize.value}px` }));\n\nconst categories = computed(() =>\n CategoryOrder.map((key) => ({ key, label: CategoryDisplays[key].label, icon: CategoryDisplays[key].Icon })),\n);\n\n/* A category is always selected: the group emits `null` when the active button is re-clicked —\n ignore it. */\nfunction selectCategory(key: CategoryKey | null | ReadonlyArray<string>): void {\n if (typeof key === 'string') emit('select', key as CategoryKey);\n}\n</script>\n\n<template>\n <ToggleGroup\n v-if=\"isPills\"\n :type=\"ToggleMode.Single\"\n :is-attached=\"false\"\n :model-value=\"active\"\n aria-label=\"Emoji categories\"\n class=\"flex-wrap\"\n @update:modelValue=\"selectCategory\"\n >\n <ToggleInput\n v-for=\"category in categories\"\n :key=\"category.key\"\n :value=\"category.key\"\n :variant=\"ToggleInputVariant.Outline\"\n :size=\"size\"\n >\n {{ category.label }}\n </ToggleInput>\n </ToggleGroup>\n\n <ToggleGroup\n v-else\n :type=\"ToggleMode.Single\"\n :variant=\"ToggleGroupVariant.Segmented\"\n :model-value=\"active\"\n aria-label=\"Emoji categories\"\n class=\"w-full\"\n @update:modelValue=\"selectCategory\"\n >\n <ToggleInput\n v-for=\"category in categories\"\n :key=\"category.key\"\n :value=\"category.key\"\n :title=\"category.label\"\n :aria-label=\"category.label\"\n class=\"flex-1\"\n :style=\"stripItemStyle\"\n >\n <component :is=\"category.icon\" :size=\"stripIconSize\" class=\"shrink-0\" aria-hidden=\"true\" />\n </ToggleInput>\n </ToggleGroup>\n</template>\n","<script lang=\"ts\">\nimport type { EmojiCatalogEntry } from '../../../domain/emoji';\nimport { EmojiTileShape, type EmojiPickerSize } from './EmojiPicker.variants';\n\n/** Maps each tile shape to its frame classes (border + corner); the selection + hover wash layers on top. */\nconst TileFrames: Record<EmojiTileShape, string> = {\n [EmojiTileShape.Rounded]: 'rounded-md border',\n [EmojiTileShape.Circle]: 'rounded-full border',\n};\n\n/** Defines props for a single selectable emoji tile. */\nexport interface EmojiTileProps {\n /** The catalog emoji this tile renders. */\n readonly entry: EmojiCatalogEntry;\n\n /** Whether this tile is the active selection. */\n readonly selected: boolean;\n\n /** The tile scale. */\n readonly size: EmojiPickerSize;\n\n /** The tile frame — rounded chip or circle. */\n readonly shape: EmojiTileShape;\n\n /** Whether this tile holds the grid's single roving tab stop. */\n readonly isActive: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, type CSSProperties } from 'vue';\nimport { EmojiPickerSizes, EmojiTileShape as EmojiTileShapeValue } from './EmojiPicker.variants';\n\n/** Renders one emoji tile as a listbox option — glyph sized by the picker scale, framed by the tile shape. */\ndefineOptions({ name: 'EmojiTile' });\n\nconst props = defineProps<EmojiTileProps>();\n\nconst emit = defineEmits<{\n /** Fires when the reader clicks or keys this tile, carrying its catalog entry. Replaces React's `onSelect`. */\n select: [entry: EmojiCatalogEntry];\n}>();\n\nconst tokens = computed(() => EmojiPickerSizes[props.size]);\nconst isCircle = computed(() => props.shape === EmojiTileShapeValue.Circle);\n\nconst stateClass = computed(() =>\n props.selected ? 'border-primary bg-primary/10' : 'border-transparent hover:bg-muted',\n);\n\nconst tileClass = computed(\n () =>\n `flex items-center justify-center leading-none transition-colors ${TileFrames[props.shape]} ${stateClass.value} ${\n isCircle.value ? 'place-self-center' : ''\n }`,\n);\n\n/* A circle must read as round: pin it to a `tile`×`tile` square (so `rounded-full` is a circle,\n not a pill) and center it in its grid cell. A rounded chip stretches to fill the column, so\n only its height is fixed. */\nconst tileStyle = computed<CSSProperties>(() =>\n isCircle.value\n ? {\n height: `${tokens.value.tile}px`,\n width: `${tokens.value.tile}px`,\n fontSize: `${tokens.value.glyph}px`,\n }\n : { height: `${tokens.value.tile}px`, fontSize: `${tokens.value.glyph}px` },\n);\n</script>\n\n<template>\n <button\n type=\"button\"\n role=\"option\"\n :title=\"entry.label\"\n :aria-label=\"entry.label\"\n :aria-selected=\"selected\"\n :tabindex=\"isActive ? 0 : -1\"\n :class=\"tileClass\"\n :style=\"tileStyle\"\n @click=\"emit('select', entry)\"\n >\n {{ entry.glyph }}\n </button>\n</template>\n","<script lang=\"ts\">\nimport type { EmojiCatalogEntry } from '../../../domain/emoji';\nimport type { EmojiPickerSize, EmojiTileShape } from './EmojiPicker.variants';\n\n/** Defines props for the emoji tile grid. */\nexport interface EmojiGridProps {\n /** The emoji to lay out, in order. */\n readonly emojis: ReadonlyArray<EmojiCatalogEntry>;\n\n /** The selected emoji's glyph, or `null`. */\n readonly selectedGlyph: string | null;\n\n /** The tile scale. */\n readonly size: EmojiPickerSize;\n\n /** The tile frame — rounded chip or circle. */\n readonly shape: EmojiTileShape;\n\n /** The muted hint shown when `emojis` is empty. */\n readonly emptyLabel?: string;\n\n /** The fixed viewport height, in tile rows; when set, the grid scrolls inside a constant-height box. */\n readonly viewportRows?: number;\n\n /** The scrollbar thumb color — any CSS color. Default `var(--color-border-strong)`. */\n readonly scrollThumbColor?: string;\n}\n\n/** Reads the grid's column count from the resolved `grid-template-columns` — the step for a vertical arrow move. */\nfunction columnCount(grid: HTMLElement): number {\n const template = getComputedStyle(grid).gridTemplateColumns;\n return template ? template.split(' ').length : 1;\n}\n\n/* WebKit/Blink: slim scrollbar via the shadow-DOM pseudo-elements (not inline-styleable),\n expressed as Tailwind arbitrary variants — ~8px, transparent track, rounded thumb on the\n resolved color. */\nconst ScrollbarClass =\n '[&::-webkit-scrollbar]:w-2 [&::-webkit-scrollbar]:h-2 [&::-webkit-scrollbar-track]:bg-transparent ' +\n '[&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb]:bg-[var(--emoji-scroll-thumb)]';\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref, useTemplateRef, watch, type CSSProperties } from 'vue';\nimport { Key } from '../../../foundation/dom';\nimport { EmojiEmptyLabels, EmojiPickerSizes } from './EmojiPicker.variants';\nimport EmojiTile from './EmojiTile.vue';\n\n/** Renders emoji as an auto-filling `listbox`, or a muted hint when the visible set is empty. */\n/* A single roving `tabindex` keeps the ~1870-tile grid to one tab stop; arrow keys (plus Home / End) move\n focus between options. */\ndefineOptions({ name: 'EmojiGrid' });\n\nconst props = defineProps<EmojiGridProps>();\n\nconst emit = defineEmits<{\n /** Fires when the reader activates a tile in the grid, carrying its entry. Replaces React's `onSelect`. */\n select: [entry: EmojiCatalogEntry];\n}>();\n\nconst grid = useTemplateRef<HTMLDivElement>('grid');\nconst activeIndex = ref(0);\n\nconst tokens = computed(() => EmojiPickerSizes[props.size]);\n\n/* Return the roving stop to the first tile whenever the visible set changes (category switch,\n search) — the tab stop moves back to tile 0 without stealing focus. */\nwatch(\n () => props.emojis,\n () => {\n activeIndex.value = 0;\n },\n);\n\n/* Clamp the roving stop for the transient render before the reset watcher runs, so no\n out-of-range tile is active. */\nconst activeStop = computed(() => Math.min(activeIndex.value, props.emojis.length - 1));\n\nfunction moveFocus(event: KeyboardEvent): void {\n const node = grid.value;\n if (node === null || props.emojis.length === 0) return;\n\n const columns = columnCount(node);\n let next: number;\n switch (event.key) {\n case Key.ArrowRight:\n next = activeIndex.value + 1;\n break;\n case Key.ArrowLeft:\n next = activeIndex.value - 1;\n break;\n case Key.ArrowDown:\n next = activeIndex.value + columns;\n break;\n case Key.ArrowUp:\n next = activeIndex.value - columns;\n break;\n case Key.Home:\n next = 0;\n break;\n case Key.End:\n next = props.emojis.length - 1;\n break;\n default:\n return;\n }\n\n next = Math.max(0, Math.min(next, props.emojis.length - 1));\n event.preventDefault();\n if (next === activeIndex.value) return;\n\n activeIndex.value = next;\n node.querySelectorAll<HTMLElement>('[role=\"option\"]')[next]?.focus();\n}\n\nconst gridStyle = computed<CSSProperties>(() => ({\n display: 'grid',\n gridTemplateColumns: `repeat(auto-fill, minmax(${tokens.value.tile}px, 1fr))`,\n gap: `${tokens.value.gap}px`,\n}));\n\n/* Default to a slightly darker neutral than the hairline border so the bar reads clearly; any\n CSS color plugs in. Falls back to `--color-border` for themes that don't define the stronger\n token — never worse than the old bar. */\nconst thumbColor = computed(() => props.scrollThumbColor ?? 'var(--color-border-strong, var(--color-border))');\n\nconst viewportStyle = computed<CSSProperties>(() => ({\n height: `${(props.viewportRows ?? 0) * (tokens.value.tile + tokens.value.gap)}px`,\n overflowY: 'auto',\n scrollbarGutter: 'stable',\n /* Firefox: a slim bar with the resolved thumb color over a transparent track. */\n scrollbarWidth: 'thin',\n scrollbarColor: `${thumbColor.value} transparent`,\n /* Drives the WebKit thumb below — arbitrary-variant classes can't read a prop, so route it\n through a CSS var. */\n '--emoji-scroll-thumb': thumbColor.value,\n}));\n</script>\n\n<template>\n <p v-if=\"emojis.length === 0\" class=\"py-6 text-center text-xs text-muted-foreground\">\n {{ emptyLabel ?? EmojiEmptyLabels.category }}\n </p>\n\n <!--\n Two branches rather than one always-present wrapper: React returned the bare grid when\n `viewportRows` is undefined, and an unconditional extra block would become a stray flex\n item in the picker's `StackLayout`.\n -->\n <div v-else-if=\"viewportRows !== undefined\" :class=\"ScrollbarClass\" :style=\"viewportStyle\">\n <div ref=\"grid\" role=\"listbox\" aria-label=\"Emoji\" :style=\"gridStyle\" @keydown=\"moveFocus\">\n <EmojiTile\n v-for=\"(entry, index) in emojis\"\n :key=\"entry.glyph\"\n :entry=\"entry\"\n :selected=\"entry.glyph === selectedGlyph\"\n :size=\"size\"\n :shape=\"shape\"\n :is-active=\"index === activeStop\"\n @select=\"emit('select', $event)\"\n />\n </div>\n </div>\n\n <div v-else ref=\"grid\" role=\"listbox\" aria-label=\"Emoji\" :style=\"gridStyle\" @keydown=\"moveFocus\">\n <EmojiTile\n v-for=\"(entry, index) in emojis\"\n :key=\"entry.glyph\"\n :entry=\"entry\"\n :selected=\"entry.glyph === selectedGlyph\"\n :size=\"size\"\n :shape=\"shape\"\n :is-active=\"index === activeStop\"\n @select=\"emit('select', $event)\"\n />\n </div>\n</template>\n","import { computed, ref, toValue, type ComputedRef, type MaybeRefOrGetter, type Ref } from 'vue';\n\nimport { EmojiCatalog, EmojiCategory, type EmojiCatalogEntry } from '../../../domain/emoji';\nimport { useRecentItems } from '../../../foundation/storage';\nimport { type StorageBroker } from '../../../foundation/storage';\n\nimport { type CategoryKey, EmojiRecentsKey, RecentCategory } from './EmojiPicker.variants';\n\n/** Identifies a recent emoji by its glyph. */\nconst emojiGlyphIdentity = (entry: EmojiCatalogEntry): string => entry.glyph;\n\n/** Defines the inputs the picker view-model binds to the live selection value. */\nexport interface UseEmojiPickerOptions {\n /** The current emoji entry, or `null` for none. Pass a getter to keep it reactive. */\n readonly value: MaybeRefOrGetter<EmojiCatalogEntry | null>;\n\n /** Emits the next emoji entry, or `null` to clear it. */\n readonly onChange: (entry: EmojiCatalogEntry | null) => void;\n\n /** The persistence contract backing recents — keeps the picker storage-agnostic (localStorage, Redux, …). */\n readonly storage: StorageBroker;\n\n /**\n * When `true` and recents is empty at mount, the initial category is the first real category,\n * not the recents bucket. Default `false`.\n */\n readonly showFirstCategoryWhenRecentsEmpty?: MaybeRefOrGetter<boolean>;\n}\n\n/**\n * Represents the headless picker state — layout-agnostic, shared by every nav variant.\n *\n * React exposed `setSearchKeyword` / `setActiveCategory` alongside the values; here\n * both are writable refs, which already are their own setters, so the paired setters\n * are gone.\n */\nexport interface EmojiPickerModel {\n /** The current search keyword. Writable. */\n readonly searchKeyword: Ref<string>;\n\n /** The active category (or the synthetic recents bucket). Writable. */\n readonly activeCategory: Ref<CategoryKey>;\n\n /** Whether a non-empty keyword is driving the visible list, bypassing categories. */\n readonly showSearch: ComputedRef<boolean>;\n\n /** The emoji to render right now — search results, recents, or the active category. */\n readonly visibleEmojis: ComputedRef<ReadonlyArray<EmojiCatalogEntry>>;\n\n /** The most-recently-used emoji, most-recent-first. */\n readonly recents: ComputedRef<ReadonlyArray<EmojiCatalogEntry>>;\n\n /** The selected emoji entry, or `null` for none. */\n readonly selected: ComputedRef<EmojiCatalogEntry | null>;\n\n /** Picks an emoji — sets the selection to that entry and records it as recent. */\n readonly selectEmoji: (entry: EmojiCatalogEntry) => void;\n\n /** Clears the selected emoji. */\n readonly clearSelection: () => void;\n}\n\n/**\n * Manages the emoji picker independent of layout: owns the keyword, the active category, the derived\n * visible list, and the recents MRU — and folds a pick back into the selection entry + the recents list.\n */\nexport function useEmojiPicker({\n value,\n onChange,\n storage,\n showFirstCategoryWhenRecentsEmpty = false,\n}: UseEmojiPickerOptions): EmojiPickerModel {\n const { recents, push } = useRecentItems<EmojiCatalogEntry>(EmojiRecentsKey, {\n identify: emojiGlyphIdentity,\n broker: storage,\n });\n\n const searchKeyword = ref('');\n /* Default to the recents bucket; when asked and there are no recents yet, open on the first\n real category instead. Read once, at setup — the React original seeded `useState` the same\n way, so a later arrival of recents must not yank the user's category out from under them. */\n const activeCategory = ref<CategoryKey>(\n toValue(showFirstCategoryWhenRecentsEmpty) && recents.value.length === 0\n ? EmojiCategory.SmileysPeople\n : RecentCategory,\n );\n\n const trimmedKeyword = computed(() => searchKeyword.value.trim());\n const showSearch = computed(() => trimmedKeyword.value.length > 0);\n\n const visibleEmojis = computed<ReadonlyArray<EmojiCatalogEntry>>(() => {\n if (showSearch.value) return EmojiCatalog.search(trimmedKeyword.value);\n if (activeCategory.value === RecentCategory) return recents.value;\n return EmojiCatalog.byCategory(activeCategory.value);\n });\n\n const selected = computed<EmojiCatalogEntry | null>(() => toValue(value));\n\n function selectEmoji(entry: EmojiCatalogEntry): void {\n onChange(entry);\n push(entry);\n }\n\n function clearSelection(): void {\n onChange(null);\n }\n\n return {\n searchKeyword,\n activeCategory,\n showSearch,\n visibleEmojis,\n recents,\n selected,\n selectEmoji,\n clearSelection,\n };\n}\n","<script lang=\"ts\">\nimport type { EmojiCatalogEntry } from '../../../domain/emoji';\nimport type { StorageBroker } from '../../../foundation/storage';\nimport type { CategoryNavVariant, EmojiPickerSizeInput, EmojiTileShape } from './EmojiPicker.variants';\n\n/** Defines props for the emoji picker. */\nexport interface EmojiPickerProps {\n /** The current emoji catalog entry, or `null` for none. The `v-model` binding target. */\n readonly modelValue?: EmojiCatalogEntry | null;\n\n /**\n * The persistence contract backing the \"recently used\" list — required, so the picker stays pure and\n * storage-agnostic. Plug `localStorageStorageBroker` for browser persistence, `memoryStorageBroker()` for a\n * throwaway in-memory store, or a custom `StorageBroker` (Redux, IndexedDB, …).\n */\n readonly storage: StorageBroker;\n\n /** The category-navigation affordance. Default `strip`. */\n readonly categoryNavVariant?: CategoryNavVariant;\n\n /** The element scale — one value for every element, or a per-element `{ search, nav, tile }`. Default `md`. */\n readonly size?: EmojiPickerSizeInput;\n\n /** The emoji-tile frame — rounded chip or circle. Default `rounded`. */\n readonly tileShape?: EmojiTileShape;\n\n /** The scrollable tile viewport's height, in tile rows. Default `6`. */\n readonly rowsCount?: number;\n\n /** The heading rendered above the picker. Default `Emoji`. */\n readonly label?: string;\n\n /** With recents still empty, opens on the first real category instead of the recents bucket. Default `false`. */\n readonly showFirstCategoryWhenRecentsEmpty?: boolean;\n\n /** The scrollbar thumb color for the tile viewport — any CSS color. Default `var(--color-border-strong)`. */\n readonly scrollThumbColor?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useTemplateRef } from 'vue';\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed } from 'vue';\nimport { ColorTone, SizePreset } from '../../../foundation/styles';\nimport { Button, ButtonVariant } from '../../actions';\nimport { StackLayout } from '../../layout';\nimport SearchInput from '../searchInput/SearchInput.vue';\n\nimport CategoryNav from './CategoryNav.vue';\nimport EmojiGrid from './EmojiGrid.vue';\nimport { useEmojiPicker } from './UseEmojiPicker';\nimport {\n CategoryNavVariant as CategoryNavVariantValue,\n DefaultPickerSize,\n EmojiEmptyLabels,\n EmojiTileShape as EmojiTileShapeValue,\n PickerElement,\n RecentCategory,\n resolveElementSize,\n} from './EmojiPicker.variants';\n\n/** Renders a searchable emoji catalog with a recents bucket and a swappable category nav over the bundled set. */\n/* Fully controlled: `value = null` means no emoji, and the picked `EmojiCatalogEntry` (or `null`) leaves via\n `@update:modelValue` / `v-model` — consumers read whatever field they need (`entry.glyph`, `entry.label`, …).\n Recents are read through the injected `storage` broker. Size is a separate concern — compose\n `EmojiSizePicker` (passing `entry.glyph`) when a host needs a per-emoji scale. */\ndefineOptions({ name: 'EmojiPicker' });\n\nconst props = withDefaults(defineProps<EmojiPickerProps>(), {\n categoryNavVariant: CategoryNavVariantValue.Strip,\n tileShape: EmojiTileShapeValue.Rounded,\n rowsCount: 6,\n label: 'Emoji',\n showFirstCategoryWhenRecentsEmpty: false,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader picks an emoji or clears the selection — the `v-model` half. */\n 'update:modelValue': [entry: EmojiCatalogEntry | null];\n}>();\n\nconst currentValue = computed(() => props.modelValue ?? null);\n\nfunction onChange(entry: EmojiCatalogEntry | null): void {\n emit('update:modelValue', entry);\n}\n\nconst picker = useEmojiPicker({\n value: () => currentValue.value,\n onChange,\n storage: props.storage,\n showFirstCategoryWhenRecentsEmpty: () => props.showFirstCategoryWhenRecentsEmpty,\n});\n\nconst searchSize = computed(() => resolveElementSize(props.size, PickerElement.Search, DefaultPickerSize));\nconst navSize = computed(() => resolveElementSize(props.size, PickerElement.Nav, DefaultPickerSize));\nconst tileSize = computed(() => resolveElementSize(props.size, PickerElement.Tile, DefaultPickerSize));\n/* The strip icon is a single dimension → px straight off the size object (undefined for a\n uniform scale → CategoryNav's nav-derived default). */\nconst iconSize = computed(() => (typeof props.size === 'object' ? props.size.icon : undefined));\n\nconst selectedGlyph = computed(() => picker.selected.value?.glyph ?? null);\nconst isNoneSelected = computed(() => currentValue.value === null);\n\nconst emptyLabel = computed(() => {\n if (picker.showSearch.value) return EmojiEmptyLabels.search;\n return picker.activeCategory.value === RecentCategory ? EmojiEmptyLabels.recents : EmojiEmptyLabels.category;\n});\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n if (currentValue.value !== null) onChange(null);\n});\n</script>\n\n<template>\n <StackLayout :key=\"formResetRevision\" gap=\"3\">\n <div class=\"flex items-center justify-between\">\n <span class=\"text-sm font-medium\">{{ label }}</span>\n <Button\n :variant=\"isNoneSelected ? undefined : ButtonVariant.Outline\"\n :tone=\"isNoneSelected ? ColorTone.Primary : ColorTone.Neutral\"\n :size=\"SizePreset.Sm\"\n :aria-pressed=\"isNoneSelected\"\n @click=\"picker.clearSelection()\"\n >\n None\n </Button>\n </div>\n\n <SearchInput\n :size=\"searchSize\"\n placeholder=\"Search emoji…\"\n :model-value=\"picker.searchKeyword.value\"\n @update:model-value=\"picker.searchKeyword.value = $event\"\n @clear=\"picker.searchKeyword.value = ''\"\n />\n\n <StackLayout gap=\"2\">\n <CategoryNav\n v-if=\"!picker.showSearch.value\"\n :variant=\"categoryNavVariant\"\n :active=\"picker.activeCategory.value\"\n :size=\"navSize\"\n :icon-size=\"iconSize\"\n @select=\"picker.activeCategory.value = $event\"\n />\n <EmojiGrid\n :emojis=\"picker.visibleEmojis.value\"\n :selected-glyph=\"selectedGlyph\"\n :size=\"tileSize\"\n :shape=\"tileShape\"\n :viewport-rows=\"rowsCount\"\n :scroll-thumb-color=\"scrollThumbColor\"\n :empty-label=\"emptyLabel\"\n @select=\"picker.selectEmoji($event)\"\n />\n </StackLayout>\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </StackLayout>\n</template>\n","<script lang=\"ts\">\nimport type { Placement } from '@floating-ui/vue';\nimport type { EmojiCatalogEntry } from '../../../domain/emoji';\nimport type { StorageBroker } from '../../../foundation/storage';\nimport type { CategoryNavVariant, EmojiPickerSizeInput, EmojiTileShape } from './EmojiPicker.variants';\n\n/**\n * Defines props for the popover-hosted emoji picker.\n *\n * React wrote this as `extends Omit<EmojiPickerProps, 'value' | 'onChange'>`. The\n * forwarded picker props are spelled out instead: the SFC compiler has to generate\n * them as real props (they are forwarded by hand, not fallthrough attrs), and an\n * `Omit<…>` heritage over an imported interface is exactly what its type resolver\n * cannot follow.\n */\nexport interface EmojiPickerPopoverProps {\n /** The current emoji catalog entry, or `null` for none. The `v-model` binding target. */\n readonly modelValue?: EmojiCatalogEntry | null;\n\n /** The persistence contract backing the \"recently used\" list. */\n readonly storage: StorageBroker;\n\n /** The category-navigation affordance. Default `strip`. */\n readonly categoryNavVariant?: CategoryNavVariant;\n\n /** The element scale — one value for every element, or a per-element `{ search, nav, tile }`. Default `md`. */\n readonly size?: EmojiPickerSizeInput;\n\n /** The emoji-tile frame — rounded chip or circle. Default `rounded`. */\n readonly tileShape?: EmojiTileShape;\n\n /** The scrollable tile viewport's height, in tile rows. Default `6`. */\n readonly rowsCount?: number;\n\n /** The heading rendered above the picker. Default `Emoji`. */\n readonly label?: string;\n\n /** When `true` and no emoji has been used yet, opens on the first real category. Default `false`. */\n readonly showFirstCategoryWhenRecentsEmpty?: boolean;\n\n /** The scrollbar thumb color for the tile viewport — any CSS color. */\n readonly scrollThumbColor?: string;\n\n /** The popover placement relative to the trigger. Default `bottom`. */\n readonly placement?: Placement;\n\n /** The open state, controlled. The `v-model:open` binding target. */\n readonly open?: boolean;\n\n /** The initial open state when uncontrolled. Default `false`. */\n readonly defaultOpen?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useTemplateRef } from 'vue';\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed } from 'vue';\nimport { ColorTone, SizePreset } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { FormControlProvider, useFormControl } from '../../../foundation/primitives';\nimport { Button, ButtonShape, ButtonVariant } from '../../actions';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../overlays';\nimport EmojiPicker from './EmojiPicker.vue';\n\n/** Renders a trigger opening a popover that holds the full `EmojiPicker` — the chat/toolbar-friendly variant. */\n/* Picking an entry emits it via `@update:modelValue` / `v-model` (consumers read `entry.glyph`) and closes the\n popover. Size is out of scope here — compose `EmojiSizePicker` separately for a per-emoji scale. */\ndefineOptions({ name: 'EmojiPickerPopover' });\n\n/** A custom trigger replacing the default emoji-icon `Button`. */\ndefineSlots<{ trigger?(): unknown }>();\n\nconst props = withDefaults(defineProps<EmojiPickerPopoverProps>(), {\n placement: 'bottom',\n defaultOpen: false,\n /* `useControlled` keys on `=== undefined`, and Vue casts an absent `boolean` prop to `false`:\n without these the popover would read as \"controlled, and closed\" and never open. */\n open: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader picks an emoji in the panel — the `v-model` half. */\n 'update:modelValue': [entry: EmojiCatalogEntry | null];\n /** Fires when the popover opens or closes — the `v-model:open` half. */\n 'update:open': [open: boolean];\n}>();\n\nconst openCtl = useControlled<boolean>({\n controlled: () => props.open,\n default: () => props.defaultOpen,\n onChange: (next) => {\n emit('update:open', next);\n },\n});\n\nconst isOpenNow = computed(() => openCtl.value.value);\nconst currentValue = computed(() => props.modelValue ?? null);\n\n/* Inherits id/invalid/labelledby/describedby from a surrounding <Field> for the DEFAULT trigger\n (`Button` already inherits `isDisabled` from the context itself). A custom trigger slot owns\n its own form-control wiring. `aria-labelledby` wins the accessible-name computation, so\n \"Choose emoji\" stays the fallback when there is no Field label. */\nconst field = useFormControl();\n\nconst fieldId = computed(() => field?.id);\nconst fieldLabelledBy = computed(() => field?.labelledBy);\nconst fieldDescribedBy = computed(() => field?.describedBy);\nconst fieldInvalid = computed(() => field?.isInvalid || undefined);\n\nconst triggerGlyph = computed(() => currentValue.value?.glyph ?? '🙂');\n\nfunction onPick(entry: EmojiCatalogEntry | null): void {\n emit('update:modelValue', entry);\n if (entry !== null) openCtl.setValue(false);\n}\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n openCtl.reset();\n if (currentValue.value !== null) onPick(null);\n});\n</script>\n\n<template>\n <Popover :key=\"formResetRevision\" :open=\"isOpenNow\" :placement=\"placement\" @update:open=\"openCtl.setValue($event)\">\n <PopoverTrigger as-child>\n <slot name=\"trigger\">\n <Button\n :variant=\"ButtonVariant.Ghost\"\n :tone=\"ColorTone.Neutral\"\n :size=\"SizePreset.Sm\"\n :shape=\"ButtonShape.Square\"\n :id=\"fieldId\"\n aria-label=\"Choose emoji\"\n :aria-labelledby=\"fieldLabelledBy\"\n :aria-describedby=\"fieldDescribedBy\"\n :aria-invalid=\"fieldInvalid\"\n >\n {{ triggerGlyph }}\n </Button>\n </slot>\n </PopoverTrigger>\n <PopoverContent class=\"w-80\" padding=\"sm\">\n <!--\n The panel's SearchInput is a sub-control of the picker, not the field's control — a bare\n FormControlProvider keeps it from adopting the surrounding Field's id (which now names\n the trigger; adoption would duplicate it) or its chrome.\n -->\n <FormControlProvider>\n <EmojiPicker\n :model-value=\"currentValue\"\n :storage=\"storage\"\n :category-nav-variant=\"categoryNavVariant\"\n :size=\"size\"\n :tile-shape=\"tileShape\"\n :rows-count=\"rowsCount\"\n :label=\"label\"\n :show-first-category-when-recents-empty=\"showFirstCategoryWhenRecentsEmpty\"\n :scroll-thumb-color=\"scrollThumbColor\"\n @update:modelValue=\"onPick\"\n />\n </FormControlProvider>\n </PopoverContent>\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </Popover>\n</template>\n","/** Defines a discrete emoji size preset — the ratio it applies to the host width, plus its preview glyph. */\nexport const CenterEmojiSize = {\n /** Refers to the small emoji size. */\n Small: 'small',\n /** Refers to the medium emoji size. */\n Medium: 'medium',\n /** Refers to the large emoji size. */\n Large: 'large',\n} as const;\n\nexport type CenterEmojiSize = (typeof CenterEmojiSize)[keyof typeof CenterEmojiSize];\n\n/** Defines the display for an emoji size option. */\ninterface CenterEmojiSizeDisplay {\n label: string;\n ratio: number;\n glyph: number;\n}\n\n/** Maps each emoji size to its label, host-width ratio, and preview glyph size (each glyph ≤ the preview cap). */\nexport const CenterEmojiSizeDisplays: Record<CenterEmojiSize, CenterEmojiSizeDisplay> = {\n [CenterEmojiSize.Small]: { label: 'Small', ratio: 0.18, glyph: 16 },\n [CenterEmojiSize.Medium]: { label: 'Medium', ratio: 0.25, glyph: 22 },\n [CenterEmojiSize.Large]: { label: 'Large', ratio: 0.32, glyph: 24 },\n};\n\n/** The emoji size (fraction of the host surface's width) applied as the sensible default when none is set. */\nexport const DefaultEmojiSize = 0.25;\n\n/** The default preview-glyph cap, in px — caps each tile's glyph so it never clips the `OptionTilePicker` frame. */\nexport const DefaultMaxPreviewGlyph = 24;\n","<script lang=\"ts\">\n/* Deep import, not `from '../../actions'`: `ButtonSize` is declared in `Button.vue` and the\n `actions` barrel does not re-export it. The landed `OptionTilePicker.vue` reaches for it the same\n way. Re-exporting it from `actions/button/index.ts` would be the tidier fix, but that file\n belongs to another lane. */\nimport type { ButtonSize } from '../../actions/button/Button.vue';\n\n/** Defines props for the emoji size control. */\nexport interface EmojiSizePickerProps {\n /** The emoji rendered inside each tile, so the choice previews the real glyph at that size. */\n readonly glyph: string;\n\n /** The current size ratio, controlled. The `v-model` binding target. */\n readonly modelValue?: number;\n\n /**\n * The preset-tile scale, forwarded to each `OptionTilePicker`. Default `sm`.\n *\n * An indexed access into an imported interface (`OptionTilePickerProps['size']`) is\n * opaque to the SFC compiler's type resolver — it fails the build while\n * `vue-tsc` stays green — so the named alias the tile itself uses is spelled\n * out instead.\n */\n readonly size?: ButtonSize;\n\n /**\n * Largest preview glyph, in px — caps each tile's glyph so it never clips the `OptionTilePicker` frame. Default\n * `24`.\n */\n readonly maxPreviewGlyph?: number;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useTemplateRef } from 'vue';\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed } from 'vue';\nimport { OptionTilePicker, OptionTileGroupField } from '..';\nimport { ControlGroupField } from '..';\nimport {\n CenterEmojiSize,\n CenterEmojiSizeDisplays,\n DefaultEmojiSize,\n DefaultMaxPreviewGlyph,\n} from './EmojiSizePicker.variants';\n\n/** Renders the emoji size as a tile set — each tile previews the given glyph at that preset size, no numbers. */\ndefineOptions({ name: 'EmojiSizePicker' });\n\nconst props = withDefaults(defineProps<EmojiSizePickerProps>(), {\n maxPreviewGlyph: DefaultMaxPreviewGlyph,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader picks a size tile — the `v-model` half. */\n 'update:modelValue': [ratio: number];\n}>();\n\n/* Controlled-only — the component owns no state, the host does. */\nconst currentRatio = computed(() => props.modelValue ?? DefaultEmojiSize);\n\nconst presets = computed(() =>\n Object.values(CenterEmojiSize).map((preset) => {\n const display = CenterEmojiSizeDisplays[preset];\n return {\n preset,\n label: `Size: ${display.label}`,\n ratio: display.ratio,\n glyphStyle: {\n fontSize: `${Math.min(display.glyph, props.maxPreviewGlyph)}px`,\n lineHeight: 1,\n },\n /* Float compare: the ratios are literals like 0.18/0.25/0.32, so an exact `===` against a\n value that round-tripped through a host would miss. */\n selected: Math.abs(currentRatio.value - display.ratio) < 0.001,\n };\n }),\n);\n\nfunction onSelect(ratio: number): void {\n emit('update:modelValue', ratio);\n}\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n if (currentRatio.value !== DefaultEmojiSize) onSelect(DefaultEmojiSize);\n});\n</script>\n\n<template>\n <ControlGroupField :key=\"formResetRevision\" label=\"Size\" orientation=\"vertical\" :divided=\"false\">\n <OptionTileGroupField label=\"Emoji size\">\n <OptionTilePicker\n v-for=\"entry in presets\"\n :key=\"entry.preset\"\n :size=\"size\"\n :selected=\"entry.selected\"\n :label=\"entry.label\"\n @select=\"() => onSelect(entry.ratio)\"\n >\n <span class=\"flex h-full w-full items-center justify-center\" :style=\"entry.glyphStyle\">\n {{ glyph }}\n </span>\n </OptionTilePicker>\n </OptionTileGroupField>\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </ControlGroupField>\n</template>\n","<script lang=\"ts\">\nimport type { Size } from '../../../foundation/styles';\n\nexport interface ReactionPickerProps {\n /** The list of emoji shortcuts shown as quick-pick buttons. */\n readonly emojis?: ReadonlyArray<string>;\n\n /** The currently active emoji keys (highlighted). */\n readonly selected?: ReadonlyArray<string>;\n\n /**\n * Fires when the trailing \"more\" button is clicked (open full picker).\n *\n * Kept a PROP, not an emit: its presence is what renders the button at all, and Vue\n * strips a declared emit's listener out of `useAttrs()` — an emit could never be\n * detected, so the button would either always or never render.\n */\n readonly onMore?: () => void;\n\n /** The hidden state for the trailing \"more\" button. */\n readonly isMoreHidden?: boolean;\n\n /** The compact button size. */\n readonly size?: Size;\n}\n\nconst DefaultReactions = ['👍', '❤️', '😂', '🎉', '😮', '😢', '🚀'];\n\n/* Sizes not listed fall back to the `md` row at the call site. */\nconst SizeClass: Partial<Record<Size, string>> = {\n sm: 'h-7 w-7 text-base',\n md: 'h-8 w-8 text-lg',\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { Plus } from 'lucide-vue-next';\nimport { cn, Size as SizeValue } from '../../../foundation/styles';\n\n/** Renders a quick-pick row of common emoji reactions, plus a `+` that hands off to a fuller picker. */\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'ReactionPicker', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ReactionPickerProps>(), {\n emojis: () => DefaultReactions,\n size: SizeValue.Md,\n /* Explicit `undefined` default: Vue casts an absent `boolean` prop to `false`, keeping the\n prop a genuine tri-state for consumers reading it. */\n isMoreHidden: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader picks one of the reactions, carrying that emoji. */\n select: [emoji: string];\n}>();\n\nconst attrs = useAttrs();\n\nfunction isActive(emoji: string): boolean {\n return props.selected?.includes(emoji) ?? false;\n}\n\nfunction emojiClass(emoji: string): string {\n return cn(\n 'inline-flex items-center justify-center rounded-full leading-none transition-transform',\n 'hover:scale-125 hover:bg-muted focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring',\n isActive(emoji) && 'bg-primary-soft',\n SizeClass[props.size] ?? SizeClass.md,\n );\n}\n\nconst moreClass = computed(() =>\n cn(\n 'inline-flex items-center justify-center rounded-full text-muted-foreground transition-colors',\n 'hover:bg-muted hover:text-foreground focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring',\n SizeClass[props.size],\n ),\n);\n\nconst isMoreShown = computed(() => !props.isMoreHidden && Boolean(props.onMore));\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootClass = computed(() =>\n cn(\n 'inline-flex items-center gap-1 rounded-full border border-border bg-popover p-1 shadow-sm',\n attrs.class as ClassValue,\n ),\n);\n\nconst root = useTemplateRef<HTMLDivElement>('root');\n\n/** The rendered element — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: root });\n</script>\n\n<template>\n <div ref=\"root\" role=\"toolbar\" aria-label=\"Reaction picker\" :class=\"rootClass\" v-bind=\"passthroughAttrs\">\n <button\n v-for=\"emoji in emojis\"\n :key=\"emoji\"\n type=\"button\"\n :data-active=\"isActive(emoji) ? '' : undefined\"\n :aria-pressed=\"isActive(emoji)\"\n :aria-label=\"`React with ${emoji}`\"\n :class=\"emojiClass(emoji)\"\n @click=\"emit('select', emoji)\"\n >\n <span aria-hidden=\"true\">{{ emoji }}</span>\n </button>\n <button v-if=\"isMoreShown\" type=\"button\" aria-label=\"More reactions\" :class=\"moreClass\" @click=\"props.onMore?.()\">\n <Plus class=\"h-4 w-4\" />\n </button>\n </div>\n</template>\n","<script lang=\"ts\">\n/** Defines which keypress submits a chat composer. */\nexport const SubmitTrigger = {\n /** Refers to plain Enter (Shift+Enter inserts a newline). */\n Enter: 'enter',\n /** Refers to Cmd/Ctrl+Enter (plain Enter inserts a newline). */\n ModEnter: 'mod-enter',\n} as const;\n\nexport type SubmitTrigger = (typeof SubmitTrigger)[keyof typeof SubmitTrigger];\n\nexport interface ChatComposerInputProps {\n /** The text value, controlled. The `v-model` binding target. */\n readonly modelValue?: string;\n\n /** The initial text when uncontrolled. */\n readonly defaultValue?: string;\n\n /** The placeholder text. */\n readonly placeholder?: string;\n\n /** The disabled state for the input + send button. */\n readonly isDisabled?: boolean;\n\n /** The content rendered on the leading edge of the toolbar (e.g. attach button).\n * Fill the `leading` slot for richer content. */\n readonly leading?: string | number;\n\n /** The content rendered between the leading slot and the send button.\n * Fill the `trailing` slot for richer content. */\n readonly trailing?: string | number;\n\n /** The custom send button, replacing the default. Fill the `sendButton` slot for richer content. */\n readonly sendButton?: string | number;\n\n /** The hidden state for the send button (e.g. when consumer renders a custom CTA). */\n readonly isSendButtonHidden?: boolean;\n\n /** The submit trigger for the textarea. `enter` = Enter alone (default).\n * `mod-enter` = Cmd/Ctrl+Enter (Enter inserts a newline). */\n readonly submitOn?: SubmitTrigger;\n\n /** The maximum textarea pixel height before scroll kicks in. Default `200`. */\n readonly maxHeight?: number;\n\n /**\n * The pass-through textarea attributes (`rows` is overridden).\n *\n * React typed this `Omit<TextareaHTMLAttributes, 'value' | 'defaultValue' | 'onChange'>`;\n * it is a loose attribute bag here because the SFC prop resolver has to resolve the\n * declared type at build time and cannot follow Vue's `TextareaHTMLAttributes` through a\n * mapped `Omit`. Listener keys use Vue's spelling — `onKeydown`, not `onKeyDown`.\n */\n readonly textareaProps?: Record<string, unknown>;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, nextTick, onMounted, useAttrs, useSlots, useTemplateRef, watch } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { Send } from 'lucide-vue-next';\nimport { cn } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\n\n/**\n * Renders a chat input row — auto-resizing textarea, send button, and leading / trailing slots.\n *\n * Enter sends by default and Shift+Enter inserts a newline; `submitOn=\"mod-enter\"` flips that.\n */\n/* `inheritAttrs: false` so `class` folds into the form's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\ndefineOptions({ name: 'ChatComposerInput', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ChatComposerInputProps>(), {\n placeholder: 'Write a message…',\n submitOn: 'enter',\n maxHeight: 200,\n isSendButtonHidden: false,\n /* Explicit `undefined` default: `useControlled` keys on `=== undefined`, so an absent\n `modelValue`/`modelValue` must stay undefined rather than be read as a controlled empty string. */\n modelValue: undefined,\n isDisabled: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the writer edits the draft message — the `v-model` half. */\n 'update:modelValue': [value: string];\n /** Fires when the writer sends — Enter, Mod+Enter or the button — carrying the trimmed text. */\n submit: [value: string];\n}>();\n\ndefineSlots<{\n leading?(): unknown;\n trailing?(): unknown;\n sendButton?(): unknown;\n}>();\n\nconst attrs = useAttrs();\nconst slots = useSlots();\n\nconst controlled = useControlled<string>({\n controlled: () => props.modelValue,\n default: () => props.defaultValue ?? '',\n onChange: (next) => {\n emit('update:modelValue', next);\n },\n});\n\nconst text = controlled.value;\n\nconst textarea = useTemplateRef<HTMLTextAreaElement>('textarea');\n\n/* Reads + writes layout, so it must never run during SSR: it is reached only from `onMounted`\n and from a NON-immediate watcher, both client-only. An `immediate: true, flush: 'post'`\n watcher would run on the server and throw on the element access. */\nfunction resize(): void {\n const ta = textarea.value;\n if (!ta) return;\n ta.style.height = 'auto';\n const next = Math.min(ta.scrollHeight, props.maxHeight);\n ta.style.height = `${next}px`;\n ta.style.overflowY = ta.scrollHeight > props.maxHeight ? 'auto' : 'hidden';\n}\n\nonMounted(resize);\n\n/* React re-ran the resize effect on `modelValue` and on `maxHeight` (a `resize` callback dep). */\nwatch([text, () => props.maxHeight], () => void nextTick(resize));\n\nconst isControlled = computed(() => props.modelValue !== undefined);\nconst isEmpty = computed(() => text.value.trim().length === 0);\n\nfunction submit(event?: Event): void {\n event?.preventDefault();\n const trimmed = text.value.trim();\n if (!trimmed || props.isDisabled) return;\n emit('submit', trimmed);\n if (!isControlled.value) controlled.setValue('');\n}\n\nfunction onInput(event: Event): void {\n if ((event as InputEvent).isComposing) return;\n controlled.setValue((event.target as HTMLTextAreaElement).value);\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.isComposing) return;\n /* React invoked `textareaProps.onKeyDown` first and then honoured `defaultPrevented`; the\n handler is pulled off the bag by hand to keep that ordering (and excluded from the bound\n passthrough below so it cannot fire twice). */\n (props.textareaProps?.onKeydown as ((e: KeyboardEvent) => void) | undefined)?.(event);\n if (event.defaultPrevented) return;\n const isEnter = event.key === 'Enter' && !event.shiftKey && !event.isComposing;\n const wantsMod = props.submitOn === 'mod-enter';\n const modPressed = event.metaKey || event.ctrlKey;\n if (isEnter && (wantsMod ? modPressed : !modPressed)) {\n event.preventDefault();\n submit();\n }\n}\n\nconst hasLeading = computed(() => Boolean(props.leading) || Boolean(slots.leading));\nconst hasTrailing = computed(() => Boolean(props.trailing) || Boolean(slots.trailing));\nconst hasSendButton = computed(() => Boolean(props.sendButton) || Boolean(slots.sendButton));\n\n/* `class` + the textarea's own class are owned; `onKeydown` is invoked by hand above. */\nconst TextAreaOwned: ReadonlySet<string> = new Set(['class', 'onKeydown', 'rows']);\nconst textareaPassthrough = computed(() =>\n Object.fromEntries(Object.entries(props.textareaProps ?? {}).filter(([key]) => !TextAreaOwned.has(key))),\n);\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\n/* Fallthrough attrs land on the `<form>`, matching React's trailing `{...props}` spread. */\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst formClass = computed(() =>\n cn(\n 'flex w-full items-end gap-2 rounded-2xl border border-input bg-background px-3 py-2',\n 'focus-within:ring-2 focus-within:ring-ring',\n props.isDisabled && 'cursor-not-allowed opacity-60',\n attrs.class as ClassValue,\n ),\n);\n\nconst textareaClass = computed(() =>\n cn(\n 'flex-1 resize-none bg-transparent py-1 text-sm leading-relaxed text-foreground placeholder:text-muted-foreground focus:outline-hidden',\n props.textareaProps?.class as ClassValue,\n ),\n);\n\nconst sendButtonClass = computed(() =>\n cn(\n 'inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-full self-end',\n isEmpty.value ? 'bg-muted text-muted-foreground' : 'bg-primary text-primary-foreground hover:bg-primary/90',\n 'disabled:cursor-not-allowed',\n 'focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring',\n ),\n);\n\nconst SendIcon = Send;\n\n/** The rendered `<textarea>` — the Vue stand-in for the React original's forwarded ref. */\nuseNativeFormReset(textarea, controlled.reset, () => {\n if (textarea.value) textarea.value.value = String(text.value ?? '');\n});\n\ndefineExpose({ el: textarea });\n</script>\n\n<template>\n <form :class=\"formClass\" v-bind=\"passthroughAttrs\" @submit=\"submit\">\n <div v-if=\"hasLeading\" class=\"flex shrink-0 items-center gap-1 self-end pb-1\">\n <slot name=\"leading\">{{ leading }}</slot>\n </div>\n <textarea\n ref=\"textarea\"\n v-bind=\"textareaPassthrough\"\n :value=\"text\"\n :rows=\"1\"\n :placeholder=\"placeholder\"\n :disabled=\"isDisabled\"\n :class=\"textareaClass\"\n @input=\"onInput\"\n @compositionend=\"onInput\"\n @keydown=\"onKeydown\"\n />\n <div v-if=\"hasTrailing\" class=\"flex shrink-0 items-center gap-1 self-end pb-1\">\n <slot name=\"trailing\">{{ trailing }}</slot>\n </div>\n <template v-if=\"!isSendButtonHidden\">\n <slot v-if=\"hasSendButton\" name=\"sendButton\">{{ sendButton }}</slot>\n <button v-else type=\"submit\" :disabled=\"isDisabled || isEmpty\" aria-label=\"Send message\" :class=\"sendButtonClass\">\n <SendIcon class=\"h-4 w-4\" />\n </button>\n </template>\n </form>\n</template>\n","import { tv, type VariantProps, Orientation } from '../../../foundation/styles';\n\n/**\n * Provides the layout for `ControlGroupField` across three slots — the `root`\n * arrangement, the muted `label`, and the `content` slot holding the control(s) —\n * keyed by `orientation` and whether adjacent groups are `divided`.\n */\nexport const controlGroupVariants = tv({\n slots: {\n root: 'py-2 first:pt-0',\n label: 'text-sm text-muted-foreground',\n content: 'flex items-center gap-2',\n },\n variants: {\n orientation: {\n /* LabelText beside the control(s) — the settings-row look. */\n horizontal: {\n root: 'flex min-h-10 items-center justify-between gap-4',\n },\n /* LabelText stacked above the control(s) — for wide controls. */\n vertical: {\n root: 'flex flex-col gap-1.5',\n content: 'flex-wrap',\n },\n },\n /* Hairline between adjacent groups (semantic `border` token), skipped on the last. */\n divided: {\n true: { root: '[&:not(:last-child)]:border-b [&:not(:last-child)]:border-border' },\n false: {},\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n divided: true,\n },\n});\n\nexport type ControlGroupFieldVariants = VariantProps<typeof controlGroupVariants>;\n\n/* Compile-time lock: shared `Orientation` values ≡ tv `orientation` keys (drift = type error). */\ntype AssertExact<A, B> = [A] extends [B] ? ([B] extends [A] ? true : never) : never;\nconst _assertControlGroupOrientation: AssertExact<\n Orientation,\n NonNullable<VariantProps<typeof controlGroupVariants>['orientation']>\n> = true;\nvoid _assertControlGroupOrientation;\n\n/** Represents the label-to-control arrangement of a `ControlGroupField` — the shared {@link Orientation} vocabulary. */\nexport type ControlGroupFieldOrientation = Orientation;\n","<script lang=\"ts\">\n/* `Orientation` is imported here (not in `<script setup>`) so the one binding\n serves as both the type below and the runtime value used in `withDefaults`. */\nimport { Orientation } from '../../../foundation/styles';\n\n/** Defines props for a labelled group of controls. */\nexport interface ControlGroupFieldProps {\n /**\n * The group's label — muted; sits beside the control(s) when horizontal, above them when vertical.\n * React typed this `ReactNode`; a Vue prop renders text, so richer content goes through the\n * same-named `label` slot, which overrides this value.\n */\n readonly label: string | number;\n\n /** The label-to-control layout — `horizontal` (label beside) or `vertical` (label above). Default `horizontal`. */\n readonly orientation?: Orientation;\n\n /** The hairline between this and the next group (settings-list look). Default `true`. */\n readonly divided?: boolean;\n\n /** The fixed label width in the horizontal layout, e.g. `\"6rem\"` — aligns rows. Omit for content-driven width. */\n readonly labelWidth?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef, type CSSProperties } from 'vue';\nimport { cn } from '../../../foundation/styles';\nimport { controlGroupVariants } from './ControlGroupField.variants';\n\n/**\n * Renders a labelled group of controls — a muted label bound to its control(s),\n * laid out horizontally (label beside) or vertically (label above). Stacked\n * groups auto-divide via a hairline unless `:divided=\"false\"`.\n */\ndefineOptions({ name: 'ControlGroupField', inheritAttrs: false });\n\ndefineSlots<{\n /** Rich-content override for the `label` prop. */\n label?(): unknown;\n /** The control(s) bound to the label — React's required `children`. */\n default(): unknown;\n}>();\n\nconst props = withDefaults(defineProps<ControlGroupFieldProps>(), {\n orientation: Orientation.Horizontal,\n divided: true,\n labelWidth: undefined,\n});\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst styles = computed(() => controlGroupVariants({ orientation: props.orientation, divided: props.divided }));\n\nconst rootClasses = computed(() => cn(styles.value.root(), attrs.class as string | undefined));\n\nconst labelStyle = computed<CSSProperties | undefined>(() =>\n props.labelWidth ? { flex: `0 0 ${props.labelWidth}` } : undefined,\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div ref=\"el\" v-bind=\"rest\" :class=\"rootClasses\">\n <span :class=\"styles.label()\" :style=\"labelStyle\">\n <slot name=\"label\">{{ props.label }}</slot>\n </span>\n <div :class=\"styles.content()\"><slot /></div>\n </div>\n</template>\n","import type { InjectionKey } from 'vue';\nimport type { ToggleItemRole } from './ToggleGroup.variants';\n\n/**\n * The seam between `ToggleGroup` and its `ToggleInput` children.\n *\n * The React original reached into its children with `Children.map` +\n * `cloneElement`, injecting `isPressed` / `onPressedChange` (and the tablist\n * roles) onto each one. Vue has no equivalent — a parent cannot rewrite a\n * child's props — so the same coordination runs through provide/inject: the\n * group publishes the selection, each item reads its own slice off its `value`.\n *\n * Semantics are preserved exactly: an item with no `value` is inert, an item\n * with an explicit `isPressed` prop still wins over the group, and the item's\n * own `pressed-change` fires before the group's toggle.\n */\nexport interface ToggleGroupContextValue {\n /** True while the item carrying `value` is active. Always false for a valueless item. */\n isPressed: (value: string | undefined) => boolean;\n\n /** Flips the item carrying `value` — clears in single mode, adds / removes in multi. */\n toggle: (value: string | undefined) => void;\n\n /** The ARIA role wiring the group applies to each item. Live getter — read it, don't destructure it. */\n readonly itemRole: ToggleItemRole;\n}\n\nexport const ToggleGroupKey: InjectionKey<ToggleGroupContextValue> = Symbol('wow-two.toggleButtonGroup');\n","/**\n * ToggleGroup value-set enums.\n *\n * The group composes appearance with `cn()` (no `tv()`), so these are plain\n * prop-type vocabularies — no `VariantProps` assert. `Orientation` is the\n * shared registry enum (imported at the prop site, not re-minted here).\n */\n\n/** Defines the ToggleGroup visual style. */\nexport const ToggleGroupVariant = {\n /** Refers to a standard button row/column (borders + attached radii). */\n Default: 'default',\n /** Refers to an iOS-style connected pill row on a muted track (active segment lifts). */\n Segmented: 'segmented',\n /** Refers to individually-separated rounded pills (each item its own detached chip). */\n Pill: 'pill',\n} as const;\n\nexport type ToggleGroupVariant = (typeof ToggleGroupVariant)[keyof typeof ToggleGroupVariant];\n\n/** Defines the ToggleGroup selection cardinality (the `type` discriminant). */\nexport const ToggleMode = {\n /** Refers to at-most-one active item; toggling the active one clears it. */\n Single: 'single',\n /** Refers to any number of independently-active items. */\n Multi: 'multi',\n} as const;\n\nexport type ToggleMode = (typeof ToggleMode)[keyof typeof ToggleMode];\n\n/** Defines the ARIA role wiring for the group and its items. */\nexport const ToggleItemRole = {\n /** Refers to the default `role=\"group\"` of independent toggle buttons. */\n Group: 'group',\n /** Refers to `role=\"tablist\"` on the root + `role=\"tab\"` (+ `aria-selected`) on items. */\n Tab: 'tab',\n} as const;\n\nexport type ToggleItemRole = (typeof ToggleItemRole)[keyof typeof ToggleItemRole];\n","<script lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\nimport type { Orientation } from '../../../foundation/styles';\nimport type { ToggleGroupVariant, ToggleItemRole, ToggleMode } from './ToggleGroup.variants';\n\n/**\n * Props for the group, generic over the value type `T`.\n *\n * `T` defaults to `string`, so untyped usage keeps the historical `string | null`\n * shape. Pass a string-literal union or string enum\n * (`<ToggleGroup<GradientType> …>`) to have `modelValue` / `@update:modelValue` emit\n * that narrowed type instead — no cast needed at the call site.\n *\n * Divergence from the React original: there, `type` discriminated a `SingleProps<T>`\n * / `MultiProps` union, so single mode saw `T | null` and multi mode `readonly\n * string[]`. Vue's prop compiler flattens a union type into one merged prop set, so\n * `modelValue` / `defaultValue` carry both shapes and the mode still decides which is\n * live at runtime.\n */\nexport interface ToggleGroupProps<T extends string = string> extends /* @vue-ignore */ Omit<\n HTMLAttributes,\n 'defaultValue' | 'onChange'\n> {\n /** The selection cardinality — `Single` for at-most-one, `Multi` for any number. */\n readonly type?: ToggleMode;\n\n /** The controlled value — `T | null` in single mode, a string array in multi mode. */\n readonly modelValue?: T | null | ReadonlyArray<string>;\n\n /** The uncontrolled initial value. Ignored once `modelValue` is set. */\n readonly defaultValue?: T | null | ReadonlyArray<string>;\n\n /** The layout axis of the button row/column. @default Orientation.Horizontal */\n readonly orientation?: Orientation;\n\n /** The attached state — collapses inner radii into a connected row/column. @default true */\n readonly isAttached?: boolean;\n\n /**\n * The visual style.\n * - `default` — standard button row/column (borders + attached radii).\n * - `segmented` — iOS-style connected pill row on a muted track; the active\n * segment lifts to a `background` surface. Forces `isAttached`.\n * - `pill` — individually-separated rounded pills (each item its own detached\n * chip). Forces detached (never attaches).\n */\n readonly variant?: ToggleGroupVariant;\n\n /**\n * The ARIA role wiring.\n * - `group` (default) — `role=\"group\"` of independent toggle buttons.\n * - `tab` — opt into tablist semantics: root renders `role=\"tablist\"` and each\n * item `role=\"tab\"` + `aria-selected`. Pairs naturally with single-select.\n * @default ToggleItemRole.Group\n */\n readonly itemRole?: ToggleItemRole;\n\n /**\n * The equal-width state — lays items out as equal-width tiles (each `flex-1 basis-0`)\n * for an icon category strip where every cell should share the row width. Additive;\n * the default keeps intrinsic item widths.\n * @default false\n */\n readonly equalWidth?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\" generic=\"T extends string = string\">\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, provide, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn, Orientation as OrientationValue } from '../../../foundation/styles';\nimport { useControlled } from '../../../foundation/state';\nimport { ToggleGroupKey } from './ToggleGroupContext';\nimport {\n ToggleGroupVariant as ToggleGroupVariantValue,\n ToggleItemRole as ToggleItemRoleValue,\n ToggleMode as ToggleModeValue,\n} from './ToggleGroup.variants';\n\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\n/** Renders a row of toggle buttons sharing one selection — at most one active, or any number. */\ndefineOptions({ name: 'ToggleGroup', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ToggleGroupProps<T>>(), {\n orientation: OrientationValue.Horizontal,\n isAttached: true,\n variant: ToggleGroupVariantValue.Default,\n itemRole: ToggleItemRoleValue.Group,\n equalWidth: false,\n type: undefined,\n modelValue: undefined,\n defaultValue: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader changes the selection — `T | null` in single mode, the array in multi mode. */\n 'update:modelValue': [value: T | null | ReadonlyArray<string>];\n}>();\n\ndefineSlots<{\n /** The `ToggleInput` children whose selection this group coordinates. */\n default(): unknown;\n}>();\n\nconst attrs = useAttrs();\n\nconst mode = computed(() => (props.type === ToggleModeValue.Multi ? ToggleModeValue.Multi : ToggleModeValue.Single));\nconst isSegmented = computed(() => props.variant === ToggleGroupVariantValue.Segmented);\nconst isPill = computed(() => props.variant === ToggleGroupVariantValue.Pill);\nconst isTablist = computed(() => props.itemRole === ToggleItemRoleValue.Tab);\nconst isHorizontal = computed(() => props.orientation === OrientationValue.Horizontal);\n// Segmented is inherently an attached pill row — the muted track only reads as one control when its\n// segments touch. Pill is the inverse — always detached chips, never attached.\nconst attached = computed(() => (isPill.value ? false : isSegmented.value || props.isAttached));\n\nconst singleCtl = useControlled<string | null>({\n controlled: () =>\n mode.value === ToggleModeValue.Single ? (props.modelValue as string | null | undefined) : undefined,\n default: props.type !== ToggleModeValue.Multi ? ((props.defaultValue as string | null | undefined) ?? null) : null,\n onChange: (next) => {\n if (mode.value === ToggleModeValue.Single) emit('update:modelValue', next as T | null);\n },\n});\nconst { value: singleValue, setValue: setSingleValue } = singleCtl;\n\nconst multiCtl = useControlled<ReadonlyArray<string>>({\n controlled: () =>\n mode.value === ToggleModeValue.Multi ? (props.modelValue as ReadonlyArray<string> | undefined) : undefined,\n default:\n props.type === ToggleModeValue.Multi ? ((props.defaultValue as ReadonlyArray<string> | undefined) ?? []) : [],\n onChange: (next) => {\n if (mode.value === ToggleModeValue.Multi) emit('update:modelValue', next);\n },\n});\nconst { value: multiValue, setValue: setMultiValue } = multiCtl;\n\nfunction isPressed(childValue: string | undefined): boolean {\n if (childValue === undefined) return false;\n return mode.value === ToggleModeValue.Single\n ? singleValue.value === childValue\n : multiValue.value.includes(childValue);\n}\n\nfunction togglePressed(childValue: string | undefined): void {\n if (childValue === undefined) return;\n if (mode.value === ToggleModeValue.Single) {\n setSingleValue(singleValue.value === childValue ? null : childValue);\n } else {\n setMultiValue(\n multiValue.value.includes(childValue)\n ? multiValue.value.filter((entry) => entry !== childValue)\n : [...multiValue.value, childValue],\n );\n }\n}\n\n/* Each `ToggleInput` child reads its own slice off this — the provide/inject replacement for the\n original's `Children.map` + `cloneElement`. `itemRole` is a live getter, not a snapshot. */\nprovide(ToggleGroupKey, {\n isPressed,\n toggle: togglePressed,\n get itemRole() {\n return props.itemRole;\n },\n});\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootClass = computed(() =>\n cn(\n 'inline-flex',\n isHorizontal.value ? 'flex-row' : 'flex-col',\n attached.value\n ? isHorizontal.value\n ? '[&>*]:rounded-none [&>*:first-child]:rounded-l-md [&>*:last-child]:rounded-r-md [&>*:not(:first-child)]:-ml-px'\n : '[&>*]:rounded-none [&>*:first-child]:rounded-t-md [&>*:last-child]:rounded-b-md [&>*:not(:first-child)]:-mt-px'\n : 'gap-2',\n // Segmented: muted track + reset segment chrome; active segment lifts to a `background` surface.\n isSegmented.value && [\n 'rounded-md bg-muted p-1',\n '[&>*]:rounded-md! [&>*]:!ml-0 [&>*]:border-transparent! [&>*]:bg-transparent!',\n '[&>*[data-pressed=true]]:bg-background! [&>*[data-pressed=true]]:text-foreground! [&>*[data-pressed=true]]:shadow-sm',\n ],\n // Pill: fully-rounded detached chips (gap already applied via the non-attached branch above).\n isPill.value && '[&>*]:rounded-full!',\n // Equal-width tiles: every item shares the row/column extent (icon category strip).\n props.equalWidth && '[&>*]:flex-1 [&>*]:basis-0',\n attrs.class as ClassValue,\n ),\n);\n\nconst root = useTemplateRef<HTMLDivElement>('root');\n\n/** The rendered element — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: root });\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n if (props.type === ToggleModeValue.Multi) multiCtl.reset();\n else singleCtl.reset();\n});\n</script>\n\n<template>\n <!-- Coordinates a row/column of ToggleInput children — `type=\"single\" | \"multi\"`. -->\n <div\n :key=\"formResetRevision\"\n ref=\"root\"\n :role=\"isTablist ? 'tablist' : 'group'\"\n :aria-orientation=\"isTablist ? orientation : undefined\"\n :data-orientation=\"orientation\"\n :class=\"rootClass\"\n v-bind=\"passthroughAttrs\"\n >\n <slot />\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </div>\n</template>\n","import { tv, Align, type VariantProps } from '../../../foundation/styles';\n\n/** Provides the tile-row layout for `OptionTileGroupField` — flex row, gap, optional wrap and alignment. */\nexport const optionTileGroupVariants = tv({\n base: 'flex items-center gap-2',\n variants: {\n wrap: {\n true: 'flex-wrap',\n false: '',\n },\n align: {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n },\n },\n defaultVariants: {\n wrap: false,\n align: 'start',\n },\n});\n\nexport type OptionTileGroupFieldVariants = VariantProps<typeof optionTileGroupVariants>;\n\n/* Compile-time lock: shared `Align` values ≡ tv `align` keys (drift = type error). */\ntype AssertExact<A, B> = [A] extends [B] ? ([B] extends [A] ? true : never) : never;\nconst _assertOptionTileGroupAlign: AssertExact<Align, NonNullable<OptionTileGroupFieldVariants['align']>> = true;\nvoid _assertOptionTileGroupAlign;\n","<script lang=\"ts\">\nimport type { Align } from '../../../foundation/styles';\n\n/** Defines props for a group of option tiles. */\nexport interface OptionTileGroupFieldProps {\n /** The group's accessible name. */\n readonly label: string;\n\n /** The disabled state — greys + blocks every tile via a native `<fieldset disabled>`. */\n readonly disabled?: boolean;\n\n /** The wrap state — tiles flow onto multiple rows. Default `false` (single row). */\n readonly wrap?: boolean;\n\n /** The main-axis alignment of the tiles. Default `start`. */\n readonly align?: Align;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn } from '../../../foundation/styles';\nimport { FieldsetLayout } from '../../layout/fieldsetLayout';\nimport { optionTileGroupVariants } from './OptionTileGroupField.variants';\n\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call — plain fallthrough\n appends outside it and loses tailwind-merge conflict resolution. */\n/** Renders a named `<fieldset>` around a row of option tiles, disabling every tile at once. */\ndefineOptions({ name: 'OptionTileGroupField', inheritAttrs: false });\n\n/* `children` has no prop counterpart — the `OptionTilePicker` children are the default slot — and the\n React `className` prop is Vue's `class` fallthrough attr. */\n/* Explicit `undefined` defaults keep Vue's boolean casting from turning an absent prop into\n `false` — `wrap` must stay undefined so the variants config's own default decides. */\nconst props = withDefaults(defineProps<OptionTileGroupFieldProps>(), {\n disabled: undefined,\n wrap: undefined,\n});\n\ndefineSlots<{\n /** The `OptionTilePicker` children the fieldset groups and disables together. */\n default(): unknown;\n}>();\n\nconst attrs = useAttrs();\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\n/* `FieldsetLayout` owns the `m-0 min-w-0 border-0 p-0` reset, so only the layout variants are\n composed here — the same split the React original had. */\nconst rootClass = computed(() =>\n cn(optionTileGroupVariants({ wrap: props.wrap, align: props.align }), attrs.class as ClassValue),\n);\n\nconst root = useTemplateRef<{ el: HTMLFieldSetElement | null }>('root');\n\n/** The rendered element — the Vue stand-in for the React original's forwarded ref. */\ndefineExpose({ el: computed(() => root.value?.el ?? null) });\n</script>\n\n<template>\n <!--\n Renders a labelled group of `OptionTilePicker`s — a reset `<fieldset>` (native\n `disabled` greys + blocks the whole group) laid out as a tile row, with the\n group's accessible name on `aria-label`.\n -->\n <FieldsetLayout ref=\"root\" :disabled=\"disabled\" :aria-label=\"label\" :class=\"rootClass\" v-bind=\"passthroughAttrs\">\n <slot />\n </FieldsetLayout>\n</template>\n","import { tv, ColorTone, type VariantProps } from '../../../foundation/styles';\n\n/** Defines the ToggleInput's press-state surface style. */\nexport const ToggleInputVariant = {\n /** Refers to a borderless, transparent surface (text-color only). */\n Ghost: 'ghost',\n /** Refers to a muted/tinted fill on press. */\n Soft: 'soft',\n /** Refers to a bordered surface that swaps to a tone border on press. */\n Outline: 'outline',\n /** Refers to a bordered surface that fills with the tone on press. */\n Solid: 'solid',\n /** Refers to a translucent glass wash + blur. */\n Glass: 'glass',\n /** Refers to a glass surface with a hairline border. */\n GlassSurface: 'glass-surface',\n} as const;\n\nexport type ToggleInputVariant = (typeof ToggleInputVariant)[keyof typeof ToggleInputVariant];\n\n/** Defines the element ToggleInput renders as. Local because shared `ElementTag` omits `button`. */\nexport const ToggleInputElement = {\n /** Refers to a native `<button>`. */\n Button: 'button',\n /** Refers to a `<div>` with `role=\"button\"` — interactive children nest without button-in-button. */\n Div: 'div',\n} as const;\n\nexport type ToggleInputElement = (typeof ToggleInputElement)[keyof typeof ToggleInputElement];\n\n/* Variant × tone matrix for the press-state appearance, over Button's ghost / neutral baseline. */\nexport const toggleButtonVariants = tv({\n base: '',\n variants: {\n variant: {\n ghost: '',\n soft: '',\n outline: 'border',\n solid: 'border',\n glass: 'border border-transparent backdrop-blur-md',\n 'glass-surface': 'border backdrop-blur-md',\n },\n tone: {\n primary: '',\n neutral: '',\n danger: '',\n success: '',\n warning: '',\n },\n },\n compoundVariants: [\n /*\n * Pressed text is `-soft-foreground`, not `{tone}`, for `ghost` and `outline`: both keep a\n * transparent fill, so the pressed label lands on the host surface where the full-strength\n * accent is too light — `ghost/warning` measured 1.85:1 pressed. The `soft` rows below\n * already resolved it this way; these two were missed. Same fix as `Button.variants.ts`\n * and `foundation/styles/constants/Tones.ts`. Borders keep full-strength `{tone}`.\n */\n // === GHOST × tone — text color only, transparent bg ===\n { variant: 'ghost', tone: 'primary', class: 'text-foreground/50 data-[pressed=true]:text-primary-soft-foreground' },\n { variant: 'ghost', tone: 'neutral', class: 'text-foreground/50 data-[pressed=true]:text-foreground' },\n {\n variant: 'ghost',\n tone: 'danger',\n class: 'text-foreground/50 data-[pressed=true]:text-destructive-soft-foreground',\n },\n { variant: 'ghost', tone: 'success', class: 'text-foreground/50 data-[pressed=true]:text-success-soft-foreground' },\n { variant: 'ghost', tone: 'warning', class: 'text-foreground/50 data-[pressed=true]:text-warning-soft-foreground' },\n\n // === SOFT × tone — pressed gets tone-soft bg ===\n {\n variant: 'soft',\n tone: 'primary',\n class: 'text-foreground/70 data-[pressed=true]:bg-primary-soft data-[pressed=true]:text-primary-soft-foreground',\n },\n {\n variant: 'soft',\n tone: 'neutral',\n class: 'text-foreground/70 data-[pressed=true]:bg-muted data-[pressed=true]:text-foreground',\n },\n {\n variant: 'soft',\n tone: 'danger',\n class:\n 'text-foreground/70 data-[pressed=true]:bg-destructive-soft data-[pressed=true]:text-destructive-soft-foreground',\n },\n {\n variant: 'soft',\n tone: 'success',\n class: 'text-foreground/70 data-[pressed=true]:bg-success-soft data-[pressed=true]:text-success-soft-foreground',\n },\n {\n variant: 'soft',\n tone: 'warning',\n class: 'text-foreground/70 data-[pressed=true]:bg-warning-soft data-[pressed=true]:text-warning-soft-foreground',\n },\n\n // === OUTLINE × tone — pressed swaps to tone border + tone text ===\n {\n variant: 'outline',\n tone: 'primary',\n class:\n 'border-input text-foreground/70 data-[pressed=true]:border-primary data-[pressed=true]:text-primary-soft-foreground',\n },\n {\n variant: 'outline',\n tone: 'neutral',\n class:\n 'border-input text-foreground/70 data-[pressed=true]:border-foreground data-[pressed=true]:text-foreground',\n },\n {\n variant: 'outline',\n tone: 'danger',\n class:\n 'border-input text-foreground/70 data-[pressed=true]:border-destructive data-[pressed=true]:text-destructive-soft-foreground',\n },\n {\n variant: 'outline',\n tone: 'success',\n class:\n 'border-input text-foreground/70 data-[pressed=true]:border-success data-[pressed=true]:text-success-soft-foreground',\n },\n {\n variant: 'outline',\n tone: 'warning',\n class:\n 'border-input text-foreground/70 data-[pressed=true]:border-warning data-[pressed=true]:text-warning-soft-foreground',\n },\n\n // === SOLID × tone — pressed fills with tone ===\n {\n variant: 'solid',\n tone: 'primary',\n class:\n 'border-input bg-background text-foreground/70 data-[pressed=true]:bg-primary data-[pressed=true]:border-primary data-[pressed=true]:text-primary-foreground',\n },\n {\n variant: 'solid',\n tone: 'neutral',\n class:\n 'border-input bg-background text-foreground/70 data-[pressed=true]:bg-foreground data-[pressed=true]:border-foreground data-[pressed=true]:text-background',\n },\n {\n variant: 'solid',\n tone: 'danger',\n class:\n 'border-input bg-background text-foreground/70 data-[pressed=true]:bg-destructive data-[pressed=true]:border-destructive data-[pressed=true]:text-destructive-foreground',\n },\n {\n variant: 'solid',\n tone: 'success',\n class:\n 'border-input bg-background text-foreground/70 data-[pressed=true]:bg-success data-[pressed=true]:border-success data-[pressed=true]:text-success-foreground',\n },\n {\n variant: 'solid',\n tone: 'warning',\n class:\n 'border-input bg-background text-foreground/70 data-[pressed=true]:bg-warning data-[pressed=true]:border-warning data-[pressed=true]:text-warning-foreground',\n },\n\n // === GLASS × tone — dark glass; pressed darkens slightly + tone-tinted text on tone variants ===\n {\n variant: 'glass',\n tone: 'primary',\n class: 'bg-black/45 text-white/60 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-white',\n },\n {\n variant: 'glass',\n tone: 'neutral',\n class: 'bg-black/45 text-white/60 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-white',\n },\n {\n variant: 'glass',\n tone: 'danger',\n class: 'bg-black/45 text-white/60 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-destructive',\n },\n {\n variant: 'glass',\n tone: 'success',\n class: 'bg-black/45 text-white/60 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-success',\n },\n {\n variant: 'glass',\n tone: 'warning',\n class: 'bg-black/45 text-white/60 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-warning',\n },\n\n // === GLASS-SURFACE × tone — same as glass + visible border emphasis on press ===\n {\n variant: 'glass-surface',\n tone: 'primary',\n class:\n 'bg-black/45 text-white/60 border-white/10 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-white data-[pressed=true]:border-white/40',\n },\n {\n variant: 'glass-surface',\n tone: 'neutral',\n class:\n 'bg-black/45 text-white/60 border-white/10 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-white data-[pressed=true]:border-white/40',\n },\n {\n variant: 'glass-surface',\n tone: 'danger',\n class:\n 'bg-black/45 text-white/60 border-white/10 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-destructive data-[pressed=true]:border-destructive/60',\n },\n {\n variant: 'glass-surface',\n tone: 'success',\n class:\n 'bg-black/45 text-white/60 border-white/10 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-success data-[pressed=true]:border-success/60',\n },\n {\n variant: 'glass-surface',\n tone: 'warning',\n class:\n 'bg-black/45 text-white/60 border-white/10 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-warning data-[pressed=true]:border-warning/60',\n },\n ],\n defaultVariants: {\n variant: 'ghost',\n tone: 'primary',\n },\n});\n\nexport type ToggleInputVariants = VariantProps<typeof toggleButtonVariants>;\n\n/* Compile-time lock: enum values ≡ tv axis keys (drift = type error). */\ntype AssertExact<A, B> = [A] extends [B] ? ([B] extends [A] ? true : never) : never;\nconst _assertToggleButtonVariant: AssertExact<ToggleInputVariant, NonNullable<ToggleInputVariants['variant']>> = true;\nconst _assertToggleButtonTone: AssertExact<ColorTone, NonNullable<ToggleInputVariants['tone']>> = true;\nvoid _assertToggleButtonVariant;\nvoid _assertToggleButtonTone;\n","<script lang=\"ts\">\nimport type { VNodeChild } from 'vue';\nimport { AriaAttribute } from '../../../foundation/dom';\nimport { type ColorProp, type ColorTone } from '../../../foundation/styles';\nimport type { ButtonProps } from '../../actions/button';\nimport type { ToggleInputElement, ToggleInputVariant, ToggleInputVariants } from './ToggleInput.variants';\n\n/* Fn signature for state-aware string props. */\ntype PressedFn<T> = (args: { pressed: boolean }) => T;\ntype StateAware<T> = T | PressedFn<T>;\n\n/* `ButtonProps` and `ToggleInputVariants` are `@vue-ignore`d: everything not declared below\n flows to the underlying `Button` through attribute fallthrough (the counterpart of the\n original's `{...buttonProps}` spread), and `ToggleInputVariants` resolves through\n `typeof toggleButtonVariants`, which the SFC prop compiler cannot walk. */\n/** @internal An attribute name this component derives or requires. */\ntype LabelAttribute = typeof AriaAttribute.Label;\n\n/* The state-aware accessible label rides on the ignored heritage rather than the body — a declared\n `'aria-label'` would be camelized to `props.ariaLabel` and never reach the DOM. */\ntype ToggleInputAttributes = Omit<ButtonProps, 'variant' | 'tone' | 'children' | 'title' | LabelAttribute | 'color'> &\n Partial<Record<LabelAttribute, StateAware<string>>>;\n\nexport interface ToggleInputProps\n extends /* @vue-ignore */ ToggleInputAttributes, /* @vue-ignore */ Omit<ToggleInputVariants, 'variant' | 'tone'> {\n /** The press-state surface style. */\n readonly variant?: ToggleInputVariant;\n\n /** The semantic tone palette. */\n readonly tone?: ColorTone;\n\n /** The controlled pressed state. */\n readonly modelValue?: boolean;\n\n /** The uncontrolled initial state. Ignored if `modelValue` is set. */\n readonly defaultValue?: boolean;\n\n /** The identity inside a `ToggleGroup`, keying its selection. Also the native `value` attr. */\n readonly value?: string;\n\n /** The tooltip text — a string, or a fn receiving `{ pressed }` for a state-aware label. */\n readonly title?: StateAware<string>;\n\n /** The per-instance color override — applies to the active `tone`'s theme tokens. See `ColorProp`. */\n readonly color?: ColorProp;\n\n /** The rich tooltip for icon-only toggles. A string degrades to native `title`; a node is ignored. */\n readonly tooltip?: VNodeChild;\n\n /** The render element. `div` (role=button) lets interactive children nest. Default `button`. */\n readonly as?: ToggleInputElement;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useTemplateRef } from 'vue';\nimport { useNativeFormReset } from '../UseNativeFormReset';\nimport { computed, inject, useAttrs } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn, ColorTone as ColorToneValue } from '../../../foundation/styles';\nimport { Key } from '../../../foundation/dom';\nimport { useControlled } from '../../../foundation/state';\nimport Button from '../../actions/button/Button.vue';\nimport { ButtonVariant } from '../../actions/button';\nimport { ToggleGroupKey } from '../toggleGroup/ToggleGroupContext';\nimport { ToggleItemRole } from '../toggleGroup/ToggleGroup.variants';\nimport {\n toggleButtonVariants,\n ToggleInputElement as ToggleInputElementValue,\n ToggleInputVariant as ToggleInputVariantValue,\n} from './ToggleInput.variants';\n\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call; everything else is\n forwarded onto `Button` by hand, which is where the original's `{...buttonProps}` landed. */\n/** Renders a two-state action button that shows and announces whether it is currently pressed. */\ndefineOptions({ name: 'ToggleInput', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<ToggleInputProps>(), {\n variant: ToggleInputVariantValue.Ghost,\n tone: ColorToneValue.Primary,\n as: ToggleInputElementValue.Button,\n /* Explicit `undefined` keeps Vue's boolean casting from collapsing an absent `modelValue` to\n `false`, which would pin the toggle to the controlled branch permanently. */\n modelValue: undefined,\n defaultValue: undefined,\n /* `VNodeChild` includes `boolean`, so Vue's boolean casting turns an absent node-valued prop\n into `false` rather than `undefined` — which reads as \"supplied\" at every `!== undefined`\n check. An explicit `undefined` default suppresses the cast. */\n tooltip: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader turns the toggle on or off, carrying the new pressed state. */\n 'update:modelValue': [pressed: boolean];\n}>();\n\ndefineSlots<{\n /** The button's label — receives `{ pressed }` so the content can track the toggle state. */\n default(props: { pressed: boolean }): unknown;\n}>();\n\nconst attrs = useAttrs();\n\n/* Present only inside a `ToggleGroup`; standalone toggles own their state. */\nconst group = inject(ToggleGroupKey, null);\n\nconst pressedCtl = useControlled<boolean>({\n /* Inside a group the selection lives on the group, which makes the item controlled — the same\n state the original produced by cloning `modelValue` onto each child. An explicit `modelValue`\n prop still wins over the group. */\n controlled: () => props.modelValue ?? group?.isPressed(props.value),\n default: props.defaultValue ?? false,\n onChange: (pressed) => emit('update:modelValue', pressed),\n});\nconst { value: pressed, setValue: setPressed } = pressedCtl;\n\n/* `aria-label` is read off `attrs`, not `props`: Vue camelizes declared prop keys, so a declared\n `'aria-label'` would arrive as `props.ariaLabel` and never render. It is stripped here and\n re-bound onto `Button` below, so the state-resolved value is the one that lands. */\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class', AriaAttribute.Label]);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst isDiv = computed(() => props.as === ToggleInputElementValue.Div);\n\n/* Resolve state-aware string props to plain strings for the underlying Button. */\nconst resolvedTitle = computed(() => {\n const title = typeof props.title === 'function' ? props.title({ pressed: pressed.value }) : props.title;\n /* `presentation/display` has not ported yet, so a string `tooltip` degrades to the native\n attribute rather than silently vanishing. An explicit `title` always wins. */\n return title ?? (typeof props.tooltip === 'string' ? props.tooltip : undefined);\n});\n\nconst resolvedAriaLabel = computed(() => {\n const label = attrs[AriaAttribute.Label] as StateAware<string> | undefined;\n return typeof label === 'function' ? label({ pressed: pressed.value }) : label;\n});\n\nconst rootClass = computed(() =>\n cn(toggleButtonVariants({ variant: props.variant, tone: props.tone }), attrs.class as ClassValue),\n);\n\n/* Tablist wiring is layered by the group, exactly as the original's `cloneElement` did. */\nconst itemRole = computed(() => (group?.itemRole === ToggleItemRole.Tab ? ('tab' as const) : undefined));\nconst ariaSelected = computed(() => (itemRole.value === 'tab' ? pressed.value : undefined));\n\nfunction toggle(): void {\n setPressed(!pressed.value);\n group?.toggle(props.value);\n}\n\n/* Chained after the consumer's own click (attribute fallthrough puts theirs first) and skipped\n when they called `preventDefault()` — the original's `onClick?.(e); if (!e.defaultPrevented)`. */\nfunction handleClick(event: MouseEvent): void {\n if (event.defaultPrevented) return;\n toggle();\n}\n\nfunction handleDivKeyDown(event: KeyboardEvent): void {\n if (event.key === Key.Space || event.key === Key.Enter) {\n event.preventDefault();\n toggle();\n }\n}\n\nconst formResetAnchor = useTemplateRef<HTMLInputElement>('formResetAnchor');\nconst formResetRevision = useNativeFormReset(formResetAnchor, () => {\n pressedCtl.reset();\n});\n</script>\n\n<template>\n <!-- Two-state action button (on/off) — sets `aria-pressed` + `data-pressed=\"true|false\"`. Wraps\n Button to inherit the size union, shape, asChild, loading, padding/radius. Press appearance\n lives in `toggleButtonVariants` (variant × tone matrix); ToggleInput's own appearance\n overrides Button's neutral-ghost baseline via class order. -->\n <Button\n :key=\"formResetRevision\"\n :variant=\"ButtonVariant.Ghost\"\n :tone=\"tone ?? undefined\"\n :color=\"color\"\n :as-child=\"isDiv\"\n :value=\"value\"\n :aria-pressed=\"pressed\"\n :aria-label=\"resolvedAriaLabel\"\n :data-pressed=\"pressed ? 'true' : 'false'\"\n :title=\"resolvedTitle\"\n :role=\"itemRole\"\n :aria-selected=\"ariaSelected\"\n :class=\"rootClass\"\n v-bind=\"passthroughAttrs\"\n @click=\"handleClick\"\n >\n <!-- `as=\"div\"` → render through the asChild merge onto a real <div> so consumers may nest\n interactive children (button-in-button is invalid markup). Keyboard parity added here. -->\n <div v-if=\"isDiv\" role=\"button\" :tabindex=\"0\" @keydown=\"handleDivKeyDown\">\n <slot :pressed=\"pressed\" />\n </div>\n <slot v-else :pressed=\"pressed\" />\n <input\n ref=\"formResetAnchor\"\n type=\"hidden\"\n :form=\"typeof $attrs.form === 'string' ? $attrs.form : undefined\"\n aria-hidden=\"true\"\n />\n </Button>\n</template>\n","import { tv, type VariantProps } from '../../../foundation/styles';\n\n/**\n * Adds `OptionTilePicker`'s pressed wash on top of the underlying `ToggleInput`\n * outline treatment. The tint is a semantic token (`primary`), not a\n * hard-coded color — it layers after `toggleButtonVariants` via class order.\n */\nexport const optionTileVariants = tv({\n base: 'data-[pressed=true]:bg-primary/10',\n});\n\nexport type OptionTilePickerVariants = VariantProps<typeof optionTileVariants>;\n","<script lang=\"ts\">\nimport { AriaAttribute } from '../../../foundation/dom';\nimport { type ColorTone } from '../../../foundation/styles';\nimport type { ButtonSize } from '../../actions/button/Button.vue';\nimport type { ToggleInputProps } from '../toggleInput';\n\n/** @internal The attributes this component supplies itself — `label` is the accessible name. */\nconst OwnedAttributes = [AriaAttribute.Label] as const;\n\n/** @internal An attribute name from {@link OwnedAttributes}. */\ntype OwnedAttribute = (typeof OwnedAttributes)[number];\n\n/** Defines props for a single-select preset tile. */\nexport interface OptionTilePickerProps extends /* @vue-ignore */ Omit<\n ToggleInputProps,\n 'modelValue' | 'defaultValue' | 'onUpdate:modelValue' | 'children' | OwnedAttribute | 'title' | 'variant' | 'shape'\n> {\n /** The active-selection state of this tile. */\n readonly selected: boolean;\n\n /** The accessible label + native tooltip — the tile is icon-only, so this is its name. */\n readonly label: string;\n\n /* Re-declared from `ToggleInputProps` (identical types) purely so the SFC compiler sees them:\n defaults can only be attached to props it actually generates, and the heritage is ignored. */\n\n /** The semantic tone palette. Default `primary`. */\n readonly tone?: ColorTone;\n\n /** The tile size. Default `sm`. */\n readonly size?: ButtonSize;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue';\nimport type { ClassValue } from 'clsx';\nimport { cn, ColorTone as ColorToneValue } from '../../../foundation/styles';\nimport ToggleInput from '../toggleInput/ToggleInput.vue';\nimport { ToggleInputVariant } from '../toggleInput';\nimport { ButtonShape } from '../../actions/button';\nimport { optionTileVariants } from './OptionTilePicker.variants';\n\n/* `inheritAttrs: false` so `class` folds into the component's own `cn()` call; everything else is\n forwarded onto `ToggleInput` by hand. */\n/** Renders one square, icon-only tile of a single-select preset grid, washed with tone while active. */\ndefineOptions({ name: 'OptionTilePicker', inheritAttrs: false });\n\n/* `onSelect` became the `select` emit; the React prop was required, which an emit cannot express.\n `children` has no prop counterpart — the tile's icon, glyph, or swatch is the default slot. */\nwithDefaults(defineProps<OptionTilePickerProps>(), {\n size: 'sm',\n tone: ColorToneValue.Primary,\n});\n\nconst emit = defineEmits<{\n /** Fires when this tile is selected. Re-selecting the active tile is a no-op. */\n select: [];\n}>();\n\ndefineSlots<{\n /** The tile's glyph — an icon, letter, or swatch. The tile is icon-only, so `label` names it. */\n default(): unknown;\n}>();\n\nconst attrs = useAttrs();\n\nconst OwnedAttributes: ReadonlySet<string> = new Set(['class']);\nconst passthroughAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([key]) => !OwnedAttributes.has(key))),\n);\n\nconst rootClass = computed(() => cn(optionTileVariants(), attrs.class as ClassValue));\n</script>\n\n<template>\n <!--\n Renders a square, single-select tile for preset grids (fill types, module /\n finder shapes, gradient presets) — an icon-only `ToggleInput` (`shape=\"square\"`)\n with a soft pressed wash. Compose several in a grid; the parent owns the active\n value. Disable a whole grid by wrapping it in a native `<fieldset disabled>`.\n -->\n <ToggleInput\n :shape=\"ButtonShape.Square\"\n :variant=\"ToggleInputVariant.Outline\"\n :tone=\"tone\"\n :size=\"size\"\n :model-value=\"selected\"\n :aria-label=\"label\"\n :title=\"label\"\n :class=\"rootClass\"\n v-bind=\"passthroughAttrs\"\n @update:modelValue=\"emit('select')\"\n >\n <slot />\n </ToggleInput>\n</template>\n","<script lang=\"ts\">\nimport type { ToggleGroupProps } from '../toggleGroup';\n\nexport type SegmentedPickerProps<T extends string = string> = Omit<ToggleGroupProps<T>, 'variant'>;\n</script>\n\n<script setup lang=\"ts\" generic=\"T extends string = string\">\nimport ToggleGroup from '../toggleGroup/ToggleGroup.vue';\nimport { ToggleGroupVariant } from '../toggleGroup';\n\n/**\n * Renders an iOS-style connected pill row of mutually exclusive options.\n *\n * @deprecated Use `ToggleGroup variant=\"segmented\"` — this is now a thin alias that\n * forwards to it. Kept for back-compat; will be removed in a future beta.\n */\ndefineOptions({ name: 'SegmentedPicker' });\n\n/* Explicit `undefined` defaults keep Vue's boolean casting from turning these absent props into\n `false` — they are forwarded verbatim, so `false` would override `ToggleGroup`'s own\n defaults instead of deferring to them. */\nconst props = withDefaults(defineProps<SegmentedPickerProps<T>>(), {\n isAttached: undefined,\n equalWidth: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader picks a different segment — forwarded verbatim from `ToggleGroup`. */\n 'update:modelValue': [value: T | null | ReadonlyArray<string>];\n}>();\n\ndefineSlots<{\n /** The `ToggleInput` segments, forwarded verbatim to `ToggleGroup`. */\n default(): unknown;\n}>();\n</script>\n\n<template>\n <ToggleGroup\n v-bind=\"props\"\n :variant=\"ToggleGroupVariant.Segmented\"\n @update:modelValue=\"(value: T | null | ReadonlyArray<string>) => emit('update:modelValue', value)\"\n >\n <slot />\n </ToggleGroup>\n</template>\n","/**\n * Shared vocabulary for the DataGridEditor folder.\n *\n * React kept these next to the component in `DataGridEditor.tsx`, where the private\n * `CellEditor` could close over them. Here `CellEditor` is its own SFC, so the\n * enums live in a sibling module both files import — the same split `table/`\n * uses for `TableContext.ts`. `DataGridEditorMove` stays out of the folder barrel,\n * exactly as it was module-private in React.\n */\n\n/** Defines the editable data type of a DataGridEditor cell. */\nexport const DataGridEditorCellType = {\n /** Refers to a free-text cell. */\n Text: 'text',\n /** Refers to a numeric cell. */\n Number: 'number',\n /** Refers to a single-select cell. */\n Select: 'select',\n /** Refers to a boolean (checkbox) cell. */\n Boolean: 'boolean',\n} as const;\n\nexport type DataGridEditorCellType = (typeof DataGridEditorCellType)[keyof typeof DataGridEditorCellType];\n\n/** Defines the horizontal text alignment of a DataGridEditor column. */\nexport const DataGridEditorColumnAlign = {\n /** Refers to left alignment. */\n Left: 'left',\n /** Refers to right alignment. */\n Right: 'right',\n /** Refers to centered alignment. */\n Center: 'center',\n} as const;\n\nexport type DataGridEditorColumnAlign = (typeof DataGridEditorColumnAlign)[keyof typeof DataGridEditorColumnAlign];\n\n/** Defines the cursor advance after a DataGridEditor cell edit commits. */\nexport const DataGridEditorMove = {\n /** Refers to advancing to the cell on the right. */\n Right: 'right',\n /** Refers to advancing to the cell below. */\n Down: 'down',\n} as const;\n\nexport type DataGridEditorMove = (typeof DataGridEditorMove)[keyof typeof DataGridEditorMove];\n\nexport interface DataGridEditorColumn<T> {\n readonly key: string;\n /**\n * The header label. React took a `ReactNode`; a column is an array entry and\n * cannot become its own slot, so the scalar stays here and the `header`\n * scoped slot is the rich override.\n */\n readonly header: string | number;\n /** Returns the cell's underlying value. */\n readonly accessor: (row: T) => unknown;\n\n /**\n * Optional custom cell renderer for read mode. Returns a value rendered as\n * text; for rich markup use the `cell` scoped slot, which receives\n * `{ row, column, rowIndex, colIndex }`.\n */\n readonly cell?: (row: T) => unknown;\n readonly type?: DataGridEditorCellType;\n /** The choices for a `select` cell. `label` is rendered as `<option>` text. */\n readonly options?: Array<{ value: string | number; label: string | number }>;\n readonly isEditable?: boolean;\n readonly width?: string;\n readonly align?: DataGridEditorColumnAlign;\n}\n","<script lang=\"ts\">\nimport { DataGridEditorCellType, type DataGridEditorMove } from './DataGridEditorTypes';\n\nexport interface CellEditorProps {\n /** The cell's editable data type — decides which editor renders. Default `text`. */\n readonly type?: DataGridEditorCellType;\n /** The choices for a `select` cell. */\n readonly options?: Array<{ value: string | number; label: string | number }>;\n /** The draft text under edit. */\n readonly modelValue: string;\n}\n\nconst BaseClass =\n 'h-7 w-full rounded-sm border border-input bg-background px-2 text-sm outline-hidden focus-visible:ring-2 focus-visible:ring-ring';\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, useTemplateRef } from 'vue';\n\n/**\n * Renders the editor for the active `DataGridEditor` cell, focusing itself on mount.\n *\n * Private to the folder — React kept it in the same file and never exported it, and the folder barrel still does not.\n *\n * React drove focus from the parent through a forwarded ref; here the editor focuses itself on mount, which removes\n * the ref plumbing and is immune to the mount/unmount ordering of two cells swapping in one patch.\n */\ndefineOptions({ name: 'CellEditor' });\n\nconst props = withDefaults(defineProps<CellEditorProps>(), {\n type: undefined,\n options: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when the reader types or picks a value, with the editor's current text. */\n 'update:modelValue': [value: string];\n /** Fires when the edit commits, with the cursor advance and the fresh raw text. */\n commit: [move?: DataGridEditorMove, rawValue?: string];\n /** Fires when the edit is abandoned. */\n cancel: [];\n}>();\n\nconst el = useTemplateRef<HTMLInputElement | HTMLSelectElement>('el');\n\nonMounted(() => {\n const node = el.value;\n if (!node) return;\n node.focus();\n if ('select' in node && typeof node.select === 'function') node.select();\n});\n\nconst isSelect = computed(() => props.type === DataGridEditorCellType.Select && !!props.options);\nconst isBoolean = computed(() => props.type === DataGridEditorCellType.Boolean);\nconst inputType = computed(() => (props.type === DataGridEditorCellType.Number ? 'number' : 'text'));\n\n/** A `<select>` change is both the edit and its commit — React committed with the fresh\n value because the parent's draft state was still stale in the same event. */\nfunction onSelectChange(event: Event): void {\n const next = (event.target as HTMLSelectElement).value;\n emit('update:modelValue', next);\n emit('commit', 'down', next);\n}\n\nfunction onInput(event: Event): void {\n if ((event as InputEvent).isComposing) return;\n emit('update:modelValue', (event.target as HTMLInputElement).value);\n}\n\nfunction onBlur(): void {\n emit('commit');\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.isComposing) return;\n if (event.key === 'Escape') {\n event.preventDefault();\n emit('cancel');\n }\n}\n</script>\n\n<template>\n <select\n v-if=\"isSelect\"\n ref=\"el\"\n :value=\"modelValue\"\n :class=\"BaseClass\"\n @change=\"onSelectChange\"\n @blur=\"onBlur\"\n @keydown=\"onKeydown\"\n >\n <option v-for=\"option in options\" :key=\"String(option.value)\" :value=\"String(option.value)\">\n {{ String(option.label) }}\n </option>\n </select>\n <select\n v-else-if=\"isBoolean\"\n ref=\"el\"\n :value=\"modelValue\"\n :class=\"BaseClass\"\n @change=\"onSelectChange\"\n @blur=\"onBlur\"\n @keydown=\"onKeydown\"\n >\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n <input\n v-else\n ref=\"el\"\n :type=\"inputType\"\n :value=\"modelValue\"\n :class=\"BaseClass\"\n @input=\"onInput\"\n @compositionend=\"onInput\"\n @blur=\"onBlur\"\n @keydown=\"onKeydown\"\n />\n</template>\n","<script lang=\"ts\">\nimport {\n DataGridEditorCellType,\n DataGridEditorColumnAlign,\n DataGridEditorMove,\n type DataGridEditorColumn,\n} from './DataGridEditorTypes';\n\nexport interface DataGridEditorProps<T> {\n readonly columns: ReadonlyArray<DataGridEditorColumn<T>>;\n readonly rows: ReadonlyArray<T>;\n /**\n * Returns the stable key of a row.\n *\n * Kept a prop rather than an emit: it is called as a plain function on every\n * render, which is not what an emit models.\n */\n readonly rowKey: (row: T) => string;\n /** The dense row height. Default `false`. */\n readonly isDense?: boolean;\n}\n\ninterface CellPos {\n row: number;\n col: number;\n}\n\nfunction castValue(raw: string, type: DataGridEditorCellType): unknown {\n if (type === DataGridEditorCellType.Number) {\n const parsed = Number(raw);\n return Number.isFinite(parsed) ? parsed : raw;\n }\n if (type === DataGridEditorCellType.Boolean) return raw === 'true';\n return raw;\n}\n</script>\n\n<script setup lang=\"ts\" generic=\"T\">\nimport { computed, ref, useAttrs, useTemplateRef, watch } from 'vue';\nimport { cn } from '../../../foundation/styles';\nimport { useId } from '../../../foundation/identifiers';\nimport CellEditor from './CellEditor.vue';\n\n/**\n * Renders an editable data grid with keyboard navigation between cells and per-cell edit.\n *\n * Click / Enter / F2 enter edit, Escape reverts. Range select, fill, and paste TSV are deferred — log them in a\n * follow-up batch.\n */\ndefineOptions({ name: 'DataGridEditor', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<DataGridEditorProps<T>>(), {\n /* These three stay declared-required — Vue still warns when one is missing — but\n the defaults keep an absent (or transiently-undefined) value from reaching the\n `.length` reads below, which took the whole page down. An empty grid renders\n its own header-only shell instead. */\n columns: () => [],\n rows: () => [],\n rowKey: (row: unknown) => String(row),\n // Explicit `undefined` so an absent Boolean prop is not cast to `false`.\n isDense: undefined,\n});\n\nconst emit = defineEmits<{\n /** Fires when a cell edit commits, with the row, the column key, and the cast value. */\n 'row-change': [row: T, colKey: string, value: unknown];\n}>();\n\ndefineSlots<{\n /** Overrides a column header. Falls back to the column's own `header`. */\n header(props: { column: DataGridEditorColumn<T> }): unknown;\n /**\n * Overrides a body cell in read mode. Falls back to the column's `cell`\n * renderer, then to its `accessor`.\n */\n cell(props: { row: T; column: DataGridEditorColumn<T>; rowIndex: number; colIndex: number }): unknown;\n}>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\nconst tableEl = useTemplateRef<HTMLTableElement>('tableEl');\n\nconst active = ref<CellPos>({ row: 0, col: 0 });\nconst editing = ref(false);\nconst draft = ref('');\n\nconst gridId = useId();\nfunction cellId(row: number, col: number): string {\n return `${gridId}-cell-${row}-${col}`;\n}\n\nconst colCount = computed(() => props.columns.length);\nconst rowCount = computed(() => props.rows.length);\n\n// The editor just unmounted — without this, focus drops to <body> and the\n// grid's keyboard navigation goes dead. The editor focuses itself, so only the\n// return trip is handled here.\nwatch(\n editing,\n (isEditing, wasEditing) => {\n if (!isEditing && wasEditing) tableEl.value?.focus();\n },\n { flush: 'post' },\n);\n\nfunction beginEdit(): void {\n const column = props.columns[active.value.col];\n const row = props.rows[active.value.row];\n if (!column || row === undefined) return;\n if (column.isEditable === false) return;\n const raw = column.accessor(row);\n draft.value = raw == null ? '' : String(raw);\n editing.value = true;\n}\n\nfunction commitEdit(move?: DataGridEditorMove, rawValue?: string): void {\n const column = props.columns[active.value.col];\n const row = props.rows[active.value.row];\n if (!column || row === undefined) {\n editing.value = false;\n return;\n }\n // rawValue lets editors commit synchronously with the fresh value — the draft\n // is still the previous text when a select's change and its commit fire in the\n // same event (select/boolean editors).\n const value = castValue(rawValue ?? draft.value, column.type ?? DataGridEditorCellType.Text);\n emit('row-change', row, column.key, value);\n editing.value = false;\n if (move === DataGridEditorMove.Right) {\n active.value = {\n row: active.value.row,\n col: Math.min(colCount.value - 1, active.value.col + 1),\n };\n }\n if (move === DataGridEditorMove.Down) {\n active.value = {\n row: Math.min(rowCount.value - 1, active.value.row + 1),\n col: active.value.col,\n };\n }\n}\n\nfunction cancelEdit(): void {\n editing.value = false;\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.isComposing) return;\n if (editing.value) {\n if (event.key === 'Enter') {\n event.preventDefault();\n commitEdit(DataGridEditorMove.Down);\n } else if (event.key === 'Tab') {\n event.preventDefault();\n commitEdit(DataGridEditorMove.Right);\n } else if (event.key === 'Escape') {\n event.preventDefault();\n cancelEdit();\n }\n return;\n }\n switch (event.key) {\n case 'ArrowRight':\n event.preventDefault();\n active.value = {\n row: active.value.row,\n col: Math.min(colCount.value - 1, active.value.col + 1),\n };\n break;\n case 'ArrowLeft':\n event.preventDefault();\n active.value = { row: active.value.row, col: Math.max(0, active.value.col - 1) };\n break;\n case 'ArrowDown':\n event.preventDefault();\n active.value = {\n row: Math.min(rowCount.value - 1, active.value.row + 1),\n col: active.value.col,\n };\n break;\n case 'ArrowUp':\n event.preventDefault();\n active.value = { row: Math.max(0, active.value.row - 1), col: active.value.col };\n break;\n case 'Home':\n event.preventDefault();\n active.value = { row: active.value.row, col: 0 };\n break;\n case 'End':\n event.preventDefault();\n active.value = { row: active.value.row, col: colCount.value - 1 };\n break;\n case 'Enter':\n case 'F2':\n event.preventDefault();\n beginEdit();\n break;\n }\n}\n\nfunction onCellClick(rowIndex: number, colIndex: number): void {\n const column = props.columns[colIndex];\n if (!column) return;\n const isEditingThisCell = editing.value && active.value.row === rowIndex && active.value.col === colIndex;\n active.value = { row: rowIndex, col: colIndex };\n // `active` is already updated on the line above, so the edit starts here with\n // no frame hop.\n if (column.isEditable !== false && !isEditingThisCell) beginEdit();\n}\n\nfunction isActiveCell(rowIndex: number, colIndex: number): boolean {\n return active.value.row === rowIndex && active.value.col === colIndex;\n}\n\nconst cellPad = computed(() => (props.isDense ? 'px-2 py-1' : 'px-3 py-2'));\n\nconst headerClasses = computed(() => cn('border-b border-border font-medium text-muted-foreground', cellPad.value));\n\n/** `width` is consumer-supplied CSS, so no unit is implied — Vue would not add one. */\nfunction headerStyle(column: DataGridEditorColumn<T>): Record<string, string | undefined> {\n return { width: column.width, textAlign: column.align ?? DataGridEditorColumnAlign.Left };\n}\n\nfunction cellStyle(column: DataGridEditorColumn<T>): Record<string, string> {\n return { textAlign: column.align ?? DataGridEditorColumnAlign.Left };\n}\n\nfunction cellClasses(column: DataGridEditorColumn<T>, rowIndex: number, colIndex: number): string {\n return cn(\n 'relative cursor-cell whitespace-nowrap',\n cellPad.value,\n isActiveCell(rowIndex, colIndex) && 'bg-primary-soft/40 ring-2 ring-inset ring-primary',\n column.isEditable === false && 'cursor-default',\n );\n}\n\n/** The read-mode default under the `cell` slot, for columns without their own renderer. */\nfunction displayValue(column: DataGridEditorColumn<T>, row: T): string {\n const value = column.accessor(row);\n if (column.type === DataGridEditorCellType.Boolean) return value ? '✓' : '·';\n return String(value ?? '');\n}\n\nconst classes = computed(() =>\n cn('overflow-auto rounded-md border border-border bg-card text-sm', attrs.class as string | undefined),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <!-- Scroll container only — the grid role lives on the <table> below.\n A `grid` may own nothing but rows/rowgroups, so putting `role=\"grid\"`\n on a wrapper whose child is a (role `table`) <table> is an illegal\n accessibility tree (axe: aria-required-children). -->\n <div ref=\"el\" v-bind=\"rest\" :class=\"classes\">\n <table\n ref=\"tableEl\"\n role=\"grid\"\n :aria-rowcount=\"rowCount + 1\"\n :aria-colcount=\"colCount\"\n :tabindex=\"0\"\n :aria-activedescendant=\"rowCount > 0 ? cellId(active.row, active.col) : undefined\"\n class=\"w-full border-collapse focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring\"\n @keydown=\"onKeydown\"\n >\n <thead role=\"rowgroup\">\n <tr role=\"row\" :aria-rowindex=\"1\" class=\"bg-muted/40\">\n <th\n v-for=\"(column, colIndex) in columns\"\n :key=\"column.key\"\n role=\"columnheader\"\n :aria-colindex=\"colIndex + 1\"\n scope=\"col\"\n :style=\"headerStyle(column)\"\n :class=\"headerClasses\"\n >\n <slot name=\"header\" :column=\"column\">{{ column.header }}</slot>\n </th>\n </tr>\n </thead>\n <tbody role=\"rowgroup\">\n <tr\n v-for=\"(row, rowIndex) in rows\"\n :key=\"rowKey(row)\"\n role=\"row\"\n :aria-rowindex=\"rowIndex + 2\"\n class=\"border-b border-border last:border-b-0\"\n >\n <td\n v-for=\"(column, colIndex) in columns\"\n :id=\"cellId(rowIndex, colIndex)\"\n :key=\"column.key\"\n role=\"gridcell\"\n :aria-colindex=\"colIndex + 1\"\n :aria-readonly=\"column.isEditable === false || undefined\"\n :aria-selected=\"isActiveCell(rowIndex, colIndex) || undefined\"\n :tabindex=\"isActiveCell(rowIndex, colIndex) ? 0 : -1\"\n :style=\"cellStyle(column)\"\n :class=\"cellClasses(column, rowIndex, colIndex)\"\n @click=\"onCellClick(rowIndex, colIndex)\"\n >\n <CellEditor\n v-if=\"editing && isActiveCell(rowIndex, colIndex)\"\n v-model=\"draft\"\n :type=\"column.type\"\n :options=\"column.options\"\n @commit=\"commitEdit\"\n @cancel=\"cancelEdit\"\n />\n <slot v-else name=\"cell\" :row=\"row\" :column=\"column\" :row-index=\"rowIndex\" :col-index=\"colIndex\">\n <template v-if=\"column.cell\">{{ column.cell(row) }}</template>\n <span v-else class=\"tabular-nums\">{{ displayValue(column, row) }}</span>\n </slot>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</template>\n","<script lang=\"ts\">\nexport interface NodeEditorNode {\n readonly id: string;\n readonly x: number;\n readonly y: number;\n readonly data?: Record<string, unknown>;\n /**\n * The node caption. A node is an array entry and cannot become its own slot,\n * so the scalar stays here and the `node` scoped slot is the rich override.\n */\n readonly label?: string | number;\n}\n\nexport interface NodeEditorEdge {\n readonly id: string;\n readonly source: string;\n readonly target: string;\n /** The edge caption, drawn as SVG `<text>` at the curve midpoint. */\n readonly label?: string | number;\n}\n\nexport interface NodeEditorProps {\n /** Localized labels for the built-in movement and viewport actions. */\n readonly labels?: Partial<\n Record<'selectNode' | 'left' | 'right' | 'up' | 'down' | 'zoomIn' | 'zoomOut' | 'fit', string>\n >;\n readonly nodes: ReadonlyArray<NodeEditorNode>;\n readonly edges?: ReadonlyArray<NodeEditorEdge>;\n /** The node box width in px. Default `160`. */\n readonly nodeWidth?: number;\n /** The node box height in px. Default `60`. */\n readonly nodeHeight?: number;\n /** The lower zoom bound. Default `0.25`. */\n readonly minZoom?: number;\n /** The upper zoom bound. Default `2`. */\n readonly maxZoom?: number;\n}\n\ninterface Viewport {\n x: number;\n y: number;\n zoom: number;\n}\n\ntype DragState =\n | { kind: 'pan'; startX: number; startY: number; viewportX: number; viewportY: number }\n | {\n kind: 'node';\n nodeId: string;\n startX: number;\n startY: number;\n nodeStartX: number;\n nodeStartY: number;\n }\n | null;\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted, ref, useAttrs, useTemplateRef } from 'vue';\nimport { Maximize, Minus, Plus } from 'lucide-vue-next';\nimport { cn } from '../../../foundation/styles';\nimport { Icon } from '../../../foundation/icons';\n\n/**\n * Renders a pannable, wheel-zoomable node graph whose nodes drag to reposition.\n *\n * Drag-to-connect ports, a minimap, and auto-layout are deferred.\n */\ndefineOptions({ name: 'NodeEditor', inheritAttrs: false });\n\nconst props = withDefaults(defineProps<NodeEditorProps>(), {\n edges: () => [],\n nodeWidth: 160,\n nodeHeight: 60,\n minZoom: 0.25,\n maxZoom: 2,\n});\n\nconst emit = defineEmits<{\n /** Requests the full node list after a drag, arrow key or movement button. */\n 'update:nodes': [nodes: ReadonlyArray<NodeEditorNode>];\n /** Fires when the reader clicks an edge, with that edge. */\n 'edge-click': [edge: NodeEditorEdge];\n}>();\n\ndefineSlots<{\n /** Replaces a node's box. Falls back to the default card with its `label` / `id`. */\n node(props: { node: NodeEditorNode }): unknown;\n}>();\n\nconst labels = computed(() => ({\n selectNode: 'Node to move',\n left: 'Move node left',\n right: 'Move node right',\n up: 'Move node up',\n down: 'Move node down',\n zoomIn: 'Zoom in',\n zoomOut: 'Zoom out',\n fit: 'Fit view',\n ...props.labels,\n}));\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst viewport = ref<Viewport>({ x: 0, y: 0, zoom: 1 });\nconst selectedNodeId = ref<string | undefined>();\nconst selectedNode = computed(() => props.nodes.find((node) => node.id === selectedNodeId.value) ?? props.nodes[0]);\nfunction moveNode(node: NodeEditorNode | undefined, dx: number, dy: number): void {\n if (!node) return;\n emit(\n 'update:nodes',\n props.nodes.map((item) => (item.id === node.id ? { ...item, x: item.x + dx, y: item.y + dy } : item)),\n );\n}\nfunction onNodeKeydown(event: KeyboardEvent, node: NodeEditorNode): void {\n if (event.defaultPrevented || event.isComposing || event.target !== event.currentTarget) return;\n const moves: Record<string, readonly [number, number]> = {\n ArrowLeft: [-10, 0],\n ArrowRight: [10, 0],\n ArrowUp: [0, -10],\n ArrowDown: [0, 10],\n };\n const delta = moves[event.key];\n if (!delta) return;\n event.preventDefault();\n moveNode(node, delta[0], delta[1]);\n}\n\n/** Plain variable, not a ref — nothing renders off it. */\nlet dragState: DragState = null;\n\nconst nodeIndex = computed(() => new Map(props.nodes.map((node) => [node.id, node])));\n\nfunction onContainerPointerDown(event: PointerEvent): void {\n if (event.button !== 0) return;\n if ((event.target as HTMLElement).closest('[data-node], button, input, select, textarea, a')) return;\n dragState = {\n kind: 'pan',\n startX: event.clientX,\n startY: event.clientY,\n viewportX: viewport.value.x,\n viewportY: viewport.value.y,\n };\n (event.currentTarget as HTMLElement).setPointerCapture(event.pointerId);\n}\n\nfunction onContainerPointerMove(event: PointerEvent): void {\n const drag = dragState;\n if (!drag) return;\n if (drag.kind === 'pan') {\n const dx = event.clientX - drag.startX;\n const dy = event.clientY - drag.startY;\n viewport.value = { ...viewport.value, x: drag.viewportX + dx, y: drag.viewportY + dy };\n } else {\n const dx = (event.clientX - drag.startX) / viewport.value.zoom;\n const dy = (event.clientY - drag.startY) / viewport.value.zoom;\n const next = props.nodes.map((node) =>\n node.id === drag.nodeId ? { ...node, x: drag.nodeStartX + dx, y: drag.nodeStartY + dy } : node,\n );\n emit('update:nodes', next);\n }\n}\n\nfunction onContainerPointerUp(event: PointerEvent): void {\n dragState = null;\n (event.currentTarget as HTMLElement).releasePointerCapture?.(event.pointerId);\n}\n\n// Wheel-zoom must be a non-passive native listener — a template `@wheel` binding\n// is attached passively, so `preventDefault` inside it cannot stop the page from\n// scrolling. Registered once, reading `minZoom` / `maxZoom` live.\nfunction onWheel(event: WheelEvent): void {\n const node = el.value;\n if (!node) return;\n event.preventDefault();\n const rect = node.getBoundingClientRect();\n // Zoom centered on the cursor.\n const cx = event.clientX - rect.left;\n const cy = event.clientY - rect.top;\n const factor = event.deltaY < 0 ? 1.1 : 1 / 1.1;\n const current = viewport.value;\n const nextZoom = Math.max(props.minZoom, Math.min(props.maxZoom, current.zoom * factor));\n const ratio = nextZoom / current.zoom;\n viewport.value = {\n zoom: nextZoom,\n x: cx - (cx - current.x) * ratio,\n y: cy - (cy - current.y) * ratio,\n };\n}\n\nonMounted(() => {\n el.value?.addEventListener('wheel', onWheel, { passive: false });\n});\n\nonBeforeUnmount(() => {\n el.value?.removeEventListener('wheel', onWheel);\n});\n\nfunction beginNodeDrag(event: PointerEvent, node: NodeEditorNode): void {\n if (event.button !== 0 || (event.target as HTMLElement).closest('button, input, select, textarea, a')) return;\n event.stopPropagation();\n dragState = {\n kind: 'node',\n nodeId: node.id,\n startX: event.clientX,\n startY: event.clientY,\n nodeStartX: node.x,\n nodeStartY: node.y,\n };\n (event.currentTarget as HTMLElement).setPointerCapture(event.pointerId);\n}\n\nfunction fitView(): void {\n if (props.nodes.length === 0) {\n viewport.value = { x: 0, y: 0, zoom: 1 };\n return;\n }\n let minX = Number.POSITIVE_INFINITY;\n let minY = Number.POSITIVE_INFINITY;\n let maxX = Number.NEGATIVE_INFINITY;\n let maxY = Number.NEGATIVE_INFINITY;\n for (const node of props.nodes) {\n minX = Math.min(minX, node.x);\n minY = Math.min(minY, node.y);\n maxX = Math.max(maxX, node.x + props.nodeWidth);\n maxY = Math.max(maxY, node.y + props.nodeHeight);\n }\n const width = maxX - minX;\n const height = maxY - minY;\n const rect = el.value?.getBoundingClientRect();\n if (!rect) return;\n const padding = 40;\n const zoomX = (rect.width - padding * 2) / width;\n const zoomY = (rect.height - padding * 2) / height;\n const zoom = Math.max(props.minZoom, Math.min(props.maxZoom, Math.min(zoomX, zoomY, 1)));\n viewport.value = {\n zoom,\n x: padding - minX * zoom + (rect.width - padding * 2 - width * zoom) / 2,\n y: padding - minY * zoom + (rect.height - padding * 2 - height * zoom) / 2,\n };\n}\n\nfunction zoomIn(): void {\n viewport.value = {\n ...viewport.value,\n zoom: Math.min(props.maxZoom, viewport.value.zoom * 1.2),\n };\n}\n\nfunction zoomOut(): void {\n viewport.value = {\n ...viewport.value,\n zoom: Math.max(props.minZoom, viewport.value.zoom / 1.2),\n };\n}\n\n/** Edges resolved to a cubic path; endpoints that name a missing node are dropped. */\nconst renderEdges = computed(() =>\n props.edges.flatMap((edge) => {\n const a = nodeIndex.value.get(edge.source);\n const b = nodeIndex.value.get(edge.target);\n if (!a || !b) return [];\n const x1 = a.x + props.nodeWidth;\n const y1 = a.y + props.nodeHeight / 2;\n const x2 = b.x;\n const y2 = b.y + props.nodeHeight / 2;\n const mid = (x1 + x2) / 2;\n return [\n {\n edge,\n path: `M${x1},${y1} C${mid},${y1} ${mid},${y2} ${x2},${y2}`,\n labelX: mid,\n labelY: (y1 + y2) / 2 - 6,\n },\n ];\n }),\n);\n\nconst strokeWidth = computed(() => 2 / viewport.value.zoom);\n\n/** Vue does not append `px` to a numeric `:style` value — every length is spelled out. */\nconst edgeLabelStyle = computed(() => ({ fontSize: `${10 / viewport.value.zoom}px` }));\n\nconst transformStyle = computed(() => ({\n transform: `translate(${viewport.value.x}px, ${viewport.value.y}px) scale(${viewport.value.zoom})`,\n}));\n\nfunction nodeStyle(node: NodeEditorNode): Record<string, string> {\n return {\n position: 'absolute',\n left: `${node.x}px`,\n top: `${node.y}px`,\n width: `${props.nodeWidth}px`,\n height: `${props.nodeHeight}px`,\n };\n}\n\nconst SvgStyle = { overflow: 'visible', width: '100%', height: '100%' } as const;\n\nconst classes = computed(() =>\n cn(\n 'relative h-96 w-full overflow-hidden rounded-md border border-border bg-muted/30 select-none',\n attrs.class as string | undefined,\n ),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div\n ref=\"el\"\n v-bind=\"rest\"\n :class=\"classes\"\n @pointerdown=\"onContainerPointerDown\"\n @pointermove=\"onContainerPointerMove\"\n @pointerup=\"onContainerPointerUp\"\n @pointercancel=\"onContainerPointerUp\"\n >\n <!-- Pan/zoom transform -->\n <div class=\"absolute inset-0 origin-top-left\" :style=\"transformStyle\">\n <svg class=\"absolute pointer-events-none\" :style=\"SvgStyle\">\n <g\n v-for=\"entry in renderEdges\"\n :key=\"entry.edge.id\"\n class=\"pointer-events-auto cursor-pointer\"\n role=\"button\"\n tabindex=\"0\"\n :aria-label=\"String(entry.edge.label ?? entry.edge.id)\"\n @keydown.enter.prevent=\"emit('edge-click', entry.edge)\"\n @keydown.space.prevent=\"emit('edge-click', entry.edge)\"\n @click=\"emit('edge-click', entry.edge)\"\n >\n <path\n :d=\"entry.path\"\n fill=\"none\"\n stroke=\"currentColor\"\n :stroke-width=\"strokeWidth\"\n class=\"text-border-strong hover:text-primary\"\n />\n <text\n v-if=\"entry.edge.label\"\n :x=\"entry.labelX\"\n :y=\"entry.labelY\"\n text-anchor=\"middle\"\n class=\"fill-muted-foreground text-[10px]\"\n :style=\"edgeLabelStyle\"\n >\n {{ entry.edge.label }}\n </text>\n </g>\n </svg>\n <div\n v-for=\"node in nodes\"\n :key=\"node.id\"\n data-node=\"true\"\n role=\"group\"\n tabindex=\"0\"\n @focus=\"selectedNodeId = node.id\"\n @keydown=\"onNodeKeydown($event, node)\"\n :aria-label=\"typeof node.label === 'string' ? node.label : node.id\"\n :style=\"nodeStyle(node)\"\n class=\"cursor-grab active:cursor-grabbing\"\n @pointerdown=\"beginNodeDrag($event, node)\"\n >\n <slot name=\"node\" :node=\"node\">\n <div\n class=\"flex h-full w-full items-center justify-center rounded-md border border-border bg-card px-3 text-sm font-medium shadow-sm\"\n >\n {{ node.label ?? node.id }}\n </div>\n </slot>\n </div>\n </div>\n <div\n v-if=\"nodes.length\"\n class=\"absolute left-3 top-3 flex flex-wrap items-center gap-1 rounded border bg-card p-2\"\n @pointerdown.stop\n >\n <select\n :aria-label=\"labels.selectNode\"\n :value=\"selectedNode?.id\"\n @change=\"selectedNodeId = ($event.target as HTMLSelectElement).value\"\n >\n <option v-for=\"node in nodes\" :key=\"node.id\" :value=\"node.id\">{{ node.label ?? node.id }}</option>\n </select>\n <button type=\"button\" :aria-label=\"labels.left\" @click=\"moveNode(selectedNode, -10, 0)\">←</button>\n <button type=\"button\" :aria-label=\"labels.right\" @click=\"moveNode(selectedNode, 10, 0)\">→</button>\n <button type=\"button\" :aria-label=\"labels.up\" @click=\"moveNode(selectedNode, 0, -10)\">↑</button>\n <button type=\"button\" :aria-label=\"labels.down\" @click=\"moveNode(selectedNode, 0, 10)\">↓</button>\n </div>\n <!-- Controls -->\n <div class=\"absolute bottom-3 right-3 flex flex-col gap-1 rounded-md border border-border bg-card p-1 shadow-sm\">\n <button\n type=\"button\"\n :aria-label=\"labels.zoomIn\"\n class=\"inline-flex h-7 w-7 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground\"\n @click=\"zoomIn\"\n >\n <Icon :icon=\"Plus\" :size=\"14\" />\n </button>\n <button\n type=\"button\"\n :aria-label=\"labels.zoomOut\"\n class=\"inline-flex h-7 w-7 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground\"\n @click=\"zoomOut\"\n >\n <Icon :icon=\"Minus\" :size=\"14\" />\n </button>\n <button\n type=\"button\"\n :aria-label=\"labels.fit\"\n class=\"inline-flex h-7 w-7 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground\"\n @click=\"fitView\"\n >\n <Icon :icon=\"Maximize\" :size=\"12\" />\n </button>\n </div>\n </div>\n</template>\n","import { inject, type InjectionKey } from 'vue';\n\n/** The drag state a `SortableGroup` root shares with its items and handles. */\nexport interface SortableGroupContextValue {\n readonly count: number;\n dragIndex: number | null;\n overIndex: number | null;\n begin: (index: number) => void;\n hover: (index: number) => void;\n end: () => void;\n move: (from: number, to: number) => void;\n}\n\nexport const SortableGroupKey: InjectionKey<SortableGroupContextValue> = Symbol('wow-two.sortable');\n\n/** The per-row state a `SortableGroupItem` shares with its handle. */\nexport interface SortableGroupItemContextValue {\n index: number;\n arm: () => void;\n disarm: () => void;\n}\n\nexport const SortableGroupItemKey: InjectionKey<SortableGroupItemContextValue> = Symbol('wow-two.sortableItem');\n\n/** Reads the enclosing `SortableGroup` drag state. */\nexport function useSortableRoot(): SortableGroupContextValue {\n const context = inject(SortableGroupKey, null);\n if (!context) throw new Error('SortableGroup.Item must be rendered inside <SortableGroup>.');\n return context;\n}\n\n/** Reads the enclosing `SortableGroupItem` state. */\nexport function useSortableItem(): SortableGroupItemContextValue {\n const context = inject(SortableGroupItemKey, null);\n if (!context) throw new Error('SortableGroup.Handle must be rendered inside <SortableGroup.Item>.');\n return context;\n}\n","<script lang=\"ts\">\n/* eslint-disable-next-line @typescript-eslint/no-empty-object-type -- kept as an\n exported name: React declared `SortableGroupProps` and consumers import it. Its one\n member, `onReorder`, is the `reorder` emit below; every div attribute falls through. */\nexport interface SortableGroupProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, onUpdated, provide, ref, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/styles';\nimport { SortableGroupKey, type SortableGroupContextValue } from './SortableGroupContext';\n\n/**\n * Renders a drag-to-reorder list, headless — consumers render their own rows.\n *\n * Reorder fires the `reorder` emit; the consumer owns the array and re-renders. Drag is handle-initiated (a row\n * becomes draggable only while a `SortableGroupHandle` is pressed), so inputs and selects inside a row stay\n * interactive.\n * Keyboard: focus a handle, Arrow Up/Down to move.\n *\n * React attached the parts as `SortableGroup.Item` / `.Handle` via `Object.assign`. An SFC's generated default export\n * cannot carry statics cleanly, so they ship as siblings: `SortableGroupItem`, `SortableGroupHandle`.\n */\ndefineOptions({ name: 'SortableGroup', inheritAttrs: false });\n\n/** The `SortableGroupItem` rows — React's `children`. */\ndefineSlots<{ default(): unknown }>();\n\n/**\n * React's `onReorder`. Emits the `from`/`to` indices when a drag or keyboard move\n * completes — move the item at `from` to `to`. Indices are raw; clamp in the handler.\n */\nconst emit = defineEmits<{\n /** Fires when a drag or a keyboard move completes, with the `from` and `to` indices. */\n reorder: [from: number, to: number];\n}>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\n\nconst dragIndex = ref<number | null>(null);\nconst overIndex = ref<number | null>(null);\nconst itemCount = ref(0);\nfunction measureItems(): void {\n const root = el.value;\n itemCount.value = root\n ? Array.from(root.querySelectorAll('[data-sortable-item]')).filter(\n (item) => item.closest('[data-sortable-root]') === root,\n ).length\n : 0;\n}\nonMounted(measureItems);\nonUpdated(measureItems);\n/* Plain locals, not refs — React held these in `useRef` because the drop handler\n must read the latest values without waiting for a re-render. */\nlet dragged: number | null = null;\nlet over: number | null = null;\n\nfunction begin(index: number): void {\n dragged = index;\n dragIndex.value = index;\n}\n\nfunction hover(index: number): void {\n over = index;\n overIndex.value = index;\n}\n\nfunction end(): void {\n const from = dragged;\n const to = over;\n if (from !== null && to !== null && from !== to) emit('reorder', from, to);\n dragged = null;\n over = null;\n dragIndex.value = null;\n overIndex.value = null;\n}\n\nfunction move(from: number, to: number): void {\n if (from !== to && to >= 0 && to < itemCount.value) emit('reorder', from, to);\n}\n\n/* Live getters on the two indices — every mounted item reads them each render. */\nprovide<SortableGroupContextValue>(SortableGroupKey, {\n get count() {\n return itemCount.value;\n },\n get dragIndex() {\n return dragIndex.value;\n },\n get overIndex() {\n return overIndex.value;\n },\n begin,\n hover,\n end,\n move,\n});\n\nconst classes = computed(() => cn('flex flex-col', attrs.class as string | undefined));\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div data-sortable-root ref=\"el\" v-bind=\"rest\" :class=\"classes\"><slot /></div>\n</template>\n","<script lang=\"ts\">\nexport interface SortableGroupItemProps {\n /** The zero-based position of this item in the list. */\n readonly index: number;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, provide, ref, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/styles';\nimport { SortableGroupItemKey, useSortableRoot, type SortableGroupItemContextValue } from './SortableGroupContext';\n\n/** Renders one reorderable row, `draggable` only while its `SortableGroupHandle` is pressed. */\ndefineOptions({ name: 'SortableGroupItem', inheritAttrs: false });\n\n/** The row content — React's `children`. */\ndefineSlots<{ default(): unknown }>();\n\nconst props = defineProps<SortableGroupItemProps>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLDivElement>('el');\nconst root = useSortableRoot();\n\nconst armed = ref(false);\n\nconst isDragging = computed(() => root.dragIndex === props.index);\nconst isOver = computed(\n () => root.overIndex === props.index && root.dragIndex !== null && root.dragIndex !== props.index,\n);\n\nprovide<SortableGroupItemContextValue>(SortableGroupItemKey, {\n get index() {\n return props.index;\n },\n arm: () => {\n armed.value = true;\n },\n disarm: () => {\n armed.value = false;\n },\n});\n\nfunction onDragStart(event: DragEvent): void {\n if (event.dataTransfer) event.dataTransfer.effectAllowed = 'move';\n root.begin(props.index);\n}\n\nfunction onDragOver(event: DragEvent): void {\n if (root.dragIndex !== null) event.preventDefault();\n}\n\nfunction onDrop(event: DragEvent): void {\n event.preventDefault();\n root.end();\n armed.value = false;\n}\n\nfunction onDragEnd(): void {\n root.end();\n armed.value = false;\n}\n\nconst classes = computed(() =>\n cn('transition-opacity', isDragging.value && 'opacity-50', attrs.class as string | undefined),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <div\n ref=\"el\"\n data-sortable-item\n :draggable=\"armed\"\n :data-dragging=\"isDragging || undefined\"\n :data-over=\"isOver || undefined\"\n v-bind=\"rest\"\n :class=\"classes\"\n @dragstart=\"onDragStart\"\n @dragenter=\"root.hover(props.index)\"\n @dragover=\"onDragOver\"\n @drop=\"onDrop\"\n @dragend=\"onDragEnd\"\n >\n <slot />\n </div>\n</template>\n","<script lang=\"ts\">\n/* eslint-disable-next-line @typescript-eslint/no-empty-object-type -- kept as an\n exported name: React declared `SortableGroupHandleProps` and consumers import it.\n It was an alias for the native button props, all of which fall through here. */\nexport interface SortableGroupHandleProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, useAttrs, useTemplateRef } from 'vue';\nimport { cn } from '../../../foundation/styles';\nimport { Key } from '../../../foundation/dom';\nimport { useSortableItem, useSortableRoot } from './SortableGroupContext';\n\n/** Renders the grab affordance of a `SortableGroupItem` — pointer arms the drag, Arrow Up/Down moves one. */\ndefineOptions({ name: 'SortableGroupHandle', inheritAttrs: false });\n\n/** The handle glyph — React's `children`. */\ndefineSlots<{ default(): unknown }>();\n\nconst attrs = useAttrs();\nconst el = useTemplateRef<HTMLButtonElement>('el');\nconst item = useSortableItem();\nconst root = useSortableRoot();\n\n/* Own handler runs after any consumer `@keydown` that arrived through `rest`\n (React called `onKeyDown?.(e)` last instead); `defaultPrevented` is the\n consumer's opt-out either way. */\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.isComposing) return;\n if (event.defaultPrevented) return;\n if (event.key === Key.ArrowUp) {\n event.preventDefault();\n root.move(item.index, item.index - 1);\n } else if (event.key === Key.ArrowDown) {\n event.preventDefault();\n root.move(item.index, item.index + 1);\n }\n}\n\nconst classes = computed(() =>\n cn(\n 'inline-flex cursor-grab touch-none items-center justify-center text-subtle-foreground transition-colors hover:text-muted-foreground active:cursor-grabbing',\n attrs.class as string | undefined,\n ),\n);\n\n/** Everything but `class`, which is re-applied through `cn` above. */\nconst rest = computed(() => {\n const { class: _class, ...others } = attrs;\n return others;\n});\n\ndefineExpose({ el });\n</script>\n\n<template>\n <button\n ref=\"el\"\n type=\"button\"\n aria-label=\"Drag to reorder\"\n aria-roledescription=\"sortable item handle\"\n v-bind=\"rest\"\n :class=\"classes\"\n @pointerdown=\"item.arm\"\n @pointerup=\"item.disarm\"\n @blur=\"item.disarm\"\n @keydown=\"onKeydown\"\n >\n <slot />\n </button>\n</template>\n","<script lang=\"ts\">\nexport interface SortableGroupMoveButtonProps {\n /** The adjacent position to move this item into. */\n readonly direction: 'previous' | 'next';\n\n /** The localized action label; the default names the direction. */\n readonly label?: string;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { useSortableItem, useSortableRoot } from './SortableGroupContext';\n\n/** Renders a single-pointer and keyboard alternative to dragging an item. */\ndefineOptions({ name: 'SortableGroupMoveButton' });\nconst props = defineProps<SortableGroupMoveButtonProps>();\ndefineSlots<{ default?(): unknown }>();\nconst item = useSortableItem();\nconst root = useSortableRoot();\nconst target = computed(() => item.index + (props.direction === 'previous' ? -1 : 1));\nconst isDisabled = computed(() => target.value < 0 || target.value >= root.count);\nconst label = computed(() => props.label ?? (props.direction === 'previous' ? 'Move item up' : 'Move item down'));\n</script>\n\n<template>\n <button type=\"button\" :aria-label=\"label\" :disabled=\"isDisabled\" @click=\"root.move(item.index, target)\">\n <slot>{{ label }}</slot>\n </button>\n</template>\n"],"names":["document","InputStateValue","_openBlock","_createElementBlock","_mergeProps","_unref","_createElementVNode","_hoisted_2","_createVNode","Icon","_hoisted_1","_createBlock","SizeClass","TrackClass","FormControlProvider","LabelText","_renderSlot","FieldErrorCallout","$slots","FieldHelperText","CheckboxInput","_hoisted_3","_hoisted_4","RadioInput","SideValue","SwitchInput","OrientationValue","FieldsetLayout","LegendText","$attrs","_Fragment","_renderList","_toDisplayString","NumberInput","_hoisted_5","_hoisted_6","ListboxPickerIndicatorValue","_normalizeClass","Popover","Announce","_createTextVNode","PopoverTrigger","SelectPickerValue","PopoverContent","SearchInput","ListboxPicker","ListboxPickerEmpty","ListboxPickerItem","MultiSelectPickerTags","Portal","AnchoredPositioner","MonthGrid","CalendarIcon","CalendarPicker","TemporalValue","TimeColumns","RangeCalendarPicker","ColorSwatchPreview","ratio","Orientation","ColorSwatchItem","_useSlots","ColorArea","ColorSliderInput","ColorInput","ColorSwatchPicker","Tag","_toHandlers","next","CodeText","ListGroup","QuoteText","_hoisted_7","_hoisted_9","_hoisted_8","JsonEditorTreeNode","JsonEditorModeValue","JsonEditorTreeView","JsonEditorTextView","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_16","_hoisted_20","DatePicker","_hoisted_22","_hoisted_23","KbdText","ImagePreview","Map","_normalizeStyle","_hoisted_15","CategoryNavVariantValue","ToggleGroup","ToggleInput","_resolveDynamicComponent","EmojiTileShapeValue","EmojiTile","StackLayout","Button","CategoryNav","EmojiGrid","EmojiPicker","ControlGroupField","OptionTileGroupField","OptionTilePicker","ToggleModeValue","ToggleGroupVariantValue","ToggleItemRoleValue","pressed","ToggleInputElementValue","OwnedAttributes","CellEditor"],"mappings":"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"}
|