@astryx-vue/core 0.2.5 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/THIRD_PARTY_NOTICES.md +9 -0
- package/dist/AlertDialog/index.js +1 -1
- package/dist/{AlertDialog-B6UeBCE7.js → AlertDialog-RAVA_cT1.js} +13 -7
- package/dist/AppShell/index.d.ts +1 -1
- package/dist/AppShell/index.js +1 -1
- package/dist/{AppShell-CeBmB0Q9.js → AppShell-0wTvOo3H.js} +3 -3
- package/dist/Avatar/index.d.ts +2 -2
- package/dist/Avatar/index.js +1 -1
- package/dist/{Avatar-BB4Z4LF1.js → Avatar-pPZ4dI_s.js} +161 -16
- package/dist/AvatarGroup/index.d.ts +2 -2
- package/dist/AvatarGroup/index.js +1 -1
- package/dist/AvatarGroup-B--NQSB3.js +98 -0
- package/dist/Banner/index.d.ts +1 -1
- package/dist/Banner/index.js +1 -1
- package/dist/{Banner-CJe9Im5a.js → Banner-GbGxrqQO.js} +1 -1
- package/dist/BottomSheet/index.d.ts +1 -1
- package/dist/BottomSheet/index.js +2 -2
- package/dist/{BottomSheet-o7xw-TOi.js → BottomSheet-JYMB_Ofl.js} +12 -9
- package/dist/{BottomSheet-BV6vfgGu.js → BottomSheet-pt7m4CvC.js} +3 -1
- package/dist/Breadcrumbs/index.d.ts +1 -1
- package/dist/Breadcrumbs/index.js +2 -2
- package/dist/{Breadcrumbs-D6G7f5WL.js → Breadcrumbs-DIm4figq.js} +22 -11
- package/dist/Button/index.d.ts +1 -1
- package/dist/Button/index.js +1 -1
- package/dist/{Button-DrqeomlE.js → Button-B6Hj_O_s.js} +3 -1
- package/dist/ButtonGroup/index.d.ts +1 -1
- package/dist/Calendar/index.d.ts +1 -1
- package/dist/Calendar/index.js +1 -1
- package/dist/{Calendar-DmTeM7PO.js → Calendar-B7vIowKq.js} +2 -2
- package/dist/Card/index.d.ts +1 -1
- package/dist/Card/index.js +1 -1
- package/dist/{Card-HAjZQg2s.js → Card-B-I24X9S.js} +2 -0
- package/dist/Carousel/index.d.ts +1 -1
- package/dist/Carousel/index.js +1 -1
- package/dist/{Carousel-CIKrcA2r.js → Carousel-CA8zpD9v.js} +48 -31
- package/dist/Center/index.d.ts +1 -1
- package/dist/Chat/index.d.ts +2 -2
- package/dist/Chat/index.js +1 -1
- package/dist/{Chat-BFox3u9D.js → Chat-Bmna9EOA.js} +98 -61
- package/dist/CheckboxInput/index.d.ts +1 -1
- package/dist/CheckboxInput/index.js +1 -1
- package/dist/{CheckboxInput-25Q8ItH-.js → CheckboxInput-BS9J6edf.js} +2 -2
- package/dist/CheckboxList/index.d.ts +1 -1
- package/dist/CheckboxList/index.js +1 -1
- package/dist/{CheckboxList-BlPf7vPe.js → CheckboxList-CX1i_jVP.js} +8 -7
- package/dist/Citation/index.js +1 -1
- package/dist/{Citation-BG-vg9ia.js → Citation-Djgwa0ko.js} +1 -1
- package/dist/ClickableCard/index.d.ts +1 -1
- package/dist/ClickableCard/index.js +1 -1
- package/dist/{ClickableCard-Bhds4RRe.js → ClickableCard-DUsC-j03.js} +1 -1
- package/dist/Code/index.d.ts +1 -1
- package/dist/Code/index.js +1 -1
- package/dist/{CodeBlock-B2pnEOJY.js → CodeBlock-D0BFubut.js} +5 -1
- package/dist/Collapsible/index.d.ts +2 -2
- package/dist/Collapsible/index.js +2 -2
- package/dist/{Collapsible-3YerR-FO.js → Collapsible-Cov3Pyq5.js} +67 -22
- package/dist/CommandPalette/index.d.ts +2 -2
- package/dist/CommandPalette/index.js +1 -1
- package/dist/{CommandPalette-DKgHzmJk.js → CommandPalette-YHsUNg3V.js} +60 -20
- package/dist/ComplexSelector/index.d.ts +1 -1
- package/dist/ComplexSelector/index.js +1 -1
- package/dist/{ComplexSelector-Dv44FFhN.js → ComplexSelector-DWLdKPGI.js} +41 -9
- package/dist/ContextMenu/index.d.ts +1 -1
- package/dist/ContextMenu/index.js +2 -2
- package/dist/{ContextMenu-BeJO5HYx.js → ContextMenu-Bq9b3Ti5.js} +15 -8
- package/dist/DateInput/index.d.ts +1 -1
- package/dist/DateInput/index.js +1 -1
- package/dist/DateInput-DT518j5E.js +841 -0
- package/dist/DateRangeInput/index.d.ts +1 -1
- package/dist/DateRangeInput/index.js +1 -1
- package/dist/{DateRangeInput-Cp6AZfew.js → DateRangeInput-Bqi5tlIA.js} +188 -140
- package/dist/DateTimeInput/index.d.ts +1 -1
- package/dist/DateTimeInput/index.js +1 -1
- package/dist/{DateTimeInput-B6MPPp76.js → DateTimeInput-A7m2O3bg.js} +43 -12
- package/dist/Dialog/index.d.ts +1 -1
- package/dist/Dialog/index.js +2 -2
- package/dist/{Dialog-CvRplBo-.js → Dialog-BiOSKQso.js} +9 -5
- package/dist/{Dialog-rfUt3y8P.js → Dialog-FGHfDu5M.js} +1 -1
- package/dist/Divider/index.d.ts +1 -1
- package/dist/DropdownMenu/index.js +3 -3
- package/dist/{DropdownMenu-6E9jFdFe.js → DropdownMenu-CoOQVlRp.js} +9 -10
- package/dist/{DropdownMenu--lnUeJEG.js → DropdownMenu-DEb2dSSP.js} +44 -33
- package/dist/EmptyState/index.js +1 -1
- package/dist/{EmptyState-0RWymQUS.js → EmptyState-C_GH7IV5.js} +2 -2
- package/dist/Field/index.d.ts +2 -2
- package/dist/Field/index.js +2 -2
- package/dist/{Field-8zRxzDHE.js → Field-D5gUEGw4.js} +1 -1
- package/dist/FieldInfoTip-Ds-sW_jY.js +98 -0
- package/dist/FieldLabel-BNeXRuGH.js +95 -0
- package/dist/FieldStatus/index.d.ts +1 -1
- package/dist/FileInput/index.d.ts +1 -1
- package/dist/FileInput/index.js +1 -1
- package/dist/FileInput-BpdiO1V8.js +285 -0
- package/dist/Grid/index.d.ts +1 -1
- package/dist/Heading/index.d.ts +1 -1
- package/dist/Heading/index.js +1 -1
- package/dist/{Heading-B9C3LZlS.js → Heading-BnwWEWkp.js} +7 -2
- package/dist/HoverCard/index.d.ts +2 -2
- package/dist/HoverCard/index.js +2 -2
- package/dist/HoverCard-ycY50pRN.js +492 -0
- package/dist/IconButton/index.js +1 -1
- package/dist/{IconButton-BNQuz9W_.js → IconButton-DDNgNl7B.js} +1 -1
- package/dist/InputGroup/index.d.ts +1 -1
- package/dist/InputGroup/index.js +1 -1
- package/dist/{InputGroup-BzR6JRZb.js → InputGroup-CA03Smrs.js} +1 -1
- package/dist/InternationalizationProvider/index.d.ts +2 -0
- package/dist/InternationalizationProvider/index.js +2 -0
- package/dist/InternationalizationProvider-DJay_w3B.js +170 -0
- package/dist/{Item-DrYJL1TG.js → Item-KhFKX9St.js} +15 -6
- package/dist/LayerProvider/index.d.ts +2 -0
- package/dist/LayerProvider/index.js +3 -0
- package/dist/LayerProvider-D9NsQFzL.js +73 -0
- package/dist/Layout/index.d.ts +1 -1
- package/dist/Layout/index.js +2 -2
- package/dist/{Layout-Bed3kP0M.js → Layout-C6RHllr-.js} +2 -2
- package/dist/{LayoutPanel-C34uOq3e.js → LayoutPanel-DXOsaeQb.js} +4 -1
- package/dist/Lightbox/index.js +1 -1
- package/dist/{Lightbox-Br3o0SyQ.js → Lightbox-DTF9EdTG.js} +2 -2
- package/dist/Link/index.d.ts +2 -2
- package/dist/Link/index.js +1 -1
- package/dist/{Link-DCZ6922-.js → Link-BqHCtiyt.js} +26 -7
- package/dist/LinkProvider/index.d.ts +2 -0
- package/dist/LinkProvider/index.js +3 -0
- package/dist/LinkProvider-Qsps9_mL.js +17 -0
- package/dist/List/index.d.ts +1 -1
- package/dist/List/index.js +2 -2
- package/dist/{ListItem-CcRHWuEm.js → ListItem-8RWT8XAG.js} +1 -1
- package/dist/Markdown/index.d.ts +1 -1
- package/dist/Markdown/index.js +1 -1
- package/dist/{Markdown-Bz0R3kNj.js → Markdown-CvtN7HnF.js} +4 -4
- package/dist/MetadataList/index.js +1 -1
- package/dist/{MetadataList-CFaocx6j.js → MetadataList-B-OelQlt.js} +1 -1
- package/dist/MobileNav/index.js +1 -1
- package/dist/{MobileNavToggle-Dh3uLivq.js → MobileNavToggle-DxGz0xKA.js} +11 -5
- package/dist/MoreMenu/index.d.ts +1 -1
- package/dist/MoreMenu/index.js +1 -1
- package/dist/{MoreMenu-B95nRSe8.js → MoreMenu-Dlb7MLlW.js} +33 -20
- package/dist/MultiSelector/index.d.ts +1 -1
- package/dist/MultiSelector/index.js +1 -1
- package/dist/{MultiSelector-DuF5TECE.js → MultiSelector-BtAUfQ3t.js} +122 -54
- package/dist/{NavDisclosure-C6sPZ89n.js → NavDisclosure-C_fugrQ3.js} +1 -2
- package/dist/{NavHeadingSurface-Cb3x9iDx.js → NavHeadingSurface-B3yJspSN.js} +18 -11
- package/dist/NavItem/index.d.ts +1 -1
- package/dist/NavItem/index.js +2 -2
- package/dist/{NavItem-FFOisITc.js → NavItem-BBIGSvDj.js} +7 -3
- package/dist/NavMenu/index.d.ts +1 -1
- package/dist/NavMenu/index.js +3 -3
- package/dist/{NavMenu-ClIgMaxE.js → NavMenu-ThXguZAz.js} +7 -3
- package/dist/{NavMenuItem-E7S8gBh-.js → NavMenuItem-BvJNsDFC.js} +8 -4
- package/dist/NumberInput/index.d.ts +1 -1
- package/dist/NumberInput/index.js +1 -1
- package/dist/NumberInput-AZ9x3oja.js +473 -0
- package/dist/Outline/index.js +1 -1
- package/dist/{Outline-DBUuchi9.js → Outline-755h-lMP.js} +1 -1
- package/dist/OverflowList/index.d.ts +1 -1
- package/dist/OverflowList/index.js +1 -1
- package/dist/{OverflowList-aDd_oem0.js → OverflowList-NmrSMbxb.js} +10 -6
- package/dist/Pagination/index.d.ts +1 -1
- package/dist/Pagination/index.js +1 -1
- package/dist/{Pagination-CNe9F6Fl.js → Pagination-DqwNQFRp.js} +29 -14
- package/dist/Popover/index.d.ts +3 -3
- package/dist/Popover/index.js +2 -2
- package/dist/Popover-DJf8POzL.js +308 -0
- package/dist/PowerSearch/index.d.ts +1 -1
- package/dist/PowerSearch/index.js +1 -1
- package/dist/{PowerSearch-C6U8Sq1Y.js → PowerSearch-DvjiPqMZ.js} +44 -31
- package/dist/ProgressBar/index.d.ts +1 -1
- package/dist/ProgressBar/index.js +1 -1
- package/dist/{ProgressBar-DF6WZNCI.js → ProgressBar-CVLzdoBK.js} +9 -3
- package/dist/Radio/index.d.ts +1 -1
- package/dist/Radio/index.js +1 -1
- package/dist/{RadioGroup-CBqUPq_L.js → RadioGroup-Bfu6JSNV.js} +60 -24
- package/dist/RadioList/index.d.ts +1 -1
- package/dist/RadioList/index.js +1 -1
- package/dist/{RadioList-CPOJn9Th.js → RadioList-xY1cwLdZ.js} +4 -1
- package/dist/Resizable/index.d.ts +1 -1
- package/dist/Resizable/index.js +1 -1
- package/dist/{ResizeHandle-DYy0e3v9.js → ResizeHandle-q4nD_586.js} +1 -1
- package/dist/ScrollableArea/index.d.ts +1 -1
- package/dist/ScrollableArea/index.js +1 -1
- package/dist/{ScrollableArea-DQDYjnxO.js → ScrollableArea-D4dCJv9I.js} +14 -3
- package/dist/Scrollbars/index.d.ts +2 -0
- package/dist/Scrollbars/index.js +3 -0
- package/dist/Scrollbars-D_93hJYK.js +75 -0
- package/dist/Section/index.d.ts +2 -1
- package/dist/Section/index.js +1 -1
- package/dist/{Section-C48Wqfc7.js → Section-v2QuWBBJ.js} +1 -1
- package/dist/SegmentedControl/index.d.ts +1 -1
- package/dist/SelectableCard/index.d.ts +1 -1
- package/dist/SelectableCard/index.js +1 -1
- package/dist/{SelectableCard-Bj5s_tIN.js → SelectableCard-Cku4dRzc.js} +1 -1
- package/dist/Selector/index.d.ts +1 -1
- package/dist/Selector/index.js +1 -1
- package/dist/{Selector-5N-hq2nF.js → Selector-DJ2BhUTV.js} +90 -31
- package/dist/SideNav/index.d.ts +2 -2
- package/dist/SideNav/index.js +1 -1
- package/dist/{SideNav-CT9lfspi.js → SideNav-BF8mYDxl.js} +76 -44
- package/dist/Slider/index.d.ts +1 -1
- package/dist/Slider/index.js +1 -1
- package/dist/{Slider-D8h_RKcF.js → Slider-DWobsPgm.js} +2 -2
- package/dist/Stack/index.d.ts +2 -2
- package/dist/Stack/index.js +2 -2
- package/dist/{Stack-iv52y_Jv.js → Stack-CTsTFfar.js} +18 -3
- package/dist/{Stack-gGcYdOAh.js → Stack-kQlYbbL4.js} +22 -7
- package/dist/StatusDot/index.d.ts +1 -1
- package/dist/StatusDot/index.js +1 -1
- package/dist/StatusDot-BPUhMOff.js +45 -0
- package/dist/Stepper/index.d.ts +1 -1
- package/dist/Stepper/index.js +1 -1
- package/dist/{Stepper-BqhVCgC-.js → Stepper-CE8dHysu.js} +1 -1
- package/dist/Switch/index.d.ts +1 -1
- package/dist/Switch/index.js +1 -1
- package/dist/{Switch-SesQzPGZ.js → Switch-DaVPRxvN.js} +2 -2
- package/dist/TabList/index.d.ts +2 -2
- package/dist/TabList/index.js +1 -1
- package/dist/{TabList-BlzkrObv.js → TabList-DIkK9sgK.js} +100 -23
- package/dist/Table/index.d.ts +3 -3
- package/dist/Table/index.js +2 -2
- package/dist/{Table-CsdH8fCB.js → Table-fecqnm7P.js} +870 -241
- package/dist/Text/index.d.ts +2 -2
- package/dist/Text/index.js +1 -1
- package/dist/{Text-DIzZw6FA.js → Text-CV3LmscH.js} +7 -2
- package/dist/TextArea/index.d.ts +1 -1
- package/dist/TextArea/index.js +1 -1
- package/dist/{TextArea-CPwSytdO.js → TextArea-Ab5Sw60T.js} +24 -14
- package/dist/TextInput/index.d.ts +1 -1
- package/dist/TextInput/index.js +1 -1
- package/dist/{TextInput-BasnjVvy.js → TextInput-zFT1_qgI.js} +21 -24
- package/dist/Thumbnail/index.js +1 -1
- package/dist/{Thumbnail-BnQwX1cQ.js → Thumbnail-C3NnJUFG.js} +5 -5
- package/dist/TimeField-CoHDGmsP.js +435 -0
- package/dist/TimeInput/index.d.ts +1 -1
- package/dist/TimeInput/index.js +1 -1
- package/dist/{TimeInput-C9gptCOK.js → TimeInput-D2k3Ux3p.js} +14 -2
- package/dist/Timer/index.d.ts +1 -1
- package/dist/Timer/index.js +1 -1
- package/dist/{Timer-kxzQx3tp.js → Timer-avMQk5DN.js} +1 -1
- package/dist/Timestamp/index.d.ts +1 -1
- package/dist/Timestamp/index.js +1 -1
- package/dist/{Timestamp-D7bd_nF3.js → Timestamp-xpQKCk0d.js} +7 -7
- package/dist/Toast/index.d.ts +3 -2
- package/dist/Toast/index.js +1 -1
- package/dist/{Toast-C2ML-bmi.js → Toast-BuqIZV5z.js} +136 -38
- package/dist/ToggleButton/index.d.ts +1 -1
- package/dist/ToggleButton/index.js +1 -1
- package/dist/{ToggleButton-BB_I8EdM.js → ToggleButton-B-C-Q7XP.js} +1 -1
- package/dist/Token/index.d.ts +1 -1
- package/dist/Token/index.js +1 -1
- package/dist/{Token-D2GsI_Ei.js → Token-DsntTYhQ.js} +33 -17
- package/dist/Tokenizer/index.d.ts +1 -1
- package/dist/Tokenizer/index.js +1 -1
- package/dist/Tokenizer-B5C_qY7t.js +585 -0
- package/dist/Toolbar/index.d.ts +2 -1
- package/dist/Tooltip/index.d.ts +2 -2
- package/dist/Tooltip/index.js +2 -2
- package/dist/Tooltip-C4Vaqd3G.js +320 -0
- package/dist/TopNav/index.d.ts +1 -1
- package/dist/TopNav/index.js +1 -1
- package/dist/{TopNav-arWFLTBM.js → TopNav-Ciq0l1w7.js} +122 -84
- package/dist/TreeList/index.d.ts +1 -1
- package/dist/TreeList/index.js +1 -1
- package/dist/{TreeList-C9xvMpJZ.js → TreeList-BUz-KZJd.js} +90 -40
- package/dist/Typeahead/index.d.ts +1 -1
- package/dist/Typeahead/index.js +2 -2
- package/dist/Typeahead-JP9RT87x.js +656 -0
- package/dist/{TypeaheadMenu-BEObzonz.js → TypeaheadMenu-DBW6rHeO.js} +133 -44
- package/dist/composables/index.d.ts +3 -3
- package/dist/composables/index.js +12 -7
- package/dist/{composables-CWw6t-RJ.js → composables-CbKx9C1Y.js} +424 -4
- package/dist/context-C_peZbXf.js +16 -0
- package/dist/context-M-er0-Rk.js +99 -0
- package/dist/{context-CPh7kE-a.js → context-iABt_ueM.js} +30 -4
- package/dist/{index-CLmKfnqf.d.ts → index-0QGtSf3r.d.ts} +2 -0
- package/dist/{index-z3uLM1O6.d.ts → index-B1WJxt-n.d.ts} +1 -1
- package/dist/{index-BPwD6aBv.d.ts → index-B3Fomy15.d.ts} +2 -2
- package/dist/{index-CPwzSbQQ.d.ts → index-B42oE_F-.d.ts} +17 -1
- package/dist/{index-EFqQF2Bx.d.ts → index-B4OOtNP8.d.ts} +2 -2
- package/dist/index-B7yhzGUT.d.ts +171 -0
- package/dist/{index-DFbvnBlf.d.ts → index-B9e52paP.d.ts} +15 -2
- package/dist/{index-CEB7Ywvw.d.ts → index-BKnyTWPM.d.ts} +1 -1
- package/dist/{index-CsVS37na.d.ts → index-BNbAJV9C.d.ts} +1 -1
- package/dist/index-BTK7aStw.d.ts +88 -0
- package/dist/{index-BBtJt5_A.d.ts → index-BULhhnGf.d.ts} +1 -1
- package/dist/{index-D7-WTV6I.d.ts → index-BVKivP59.d.ts} +2 -2
- package/dist/{index-BpH4wvsg.d.ts → index-BgT6mH3U.d.ts} +2 -2
- package/dist/{index-Be1czg3M.d.ts → index-BhpAUzUr.d.ts} +47 -7
- package/dist/{index-BcJBLWJ0.d.ts → index-BkjSF265.d.ts} +67 -4
- package/dist/{index-DxR1FChm.d.ts → index-Bu8NA2SD.d.ts} +49 -6
- package/dist/{index-HV6W3xCx.d.ts → index-Byar3h1e.d.ts} +1 -1
- package/dist/{index-C-QpeUlQ.d.ts → index-C2nbK2AA.d.ts} +52 -7
- package/dist/{index-iBLzInje.d.ts → index-C5e-7Obr.d.ts} +1 -1
- package/dist/index-CEv_AvOg.d.ts +17 -0
- package/dist/{index-Dgg0bHVM.d.ts → index-CICeEoZV.d.ts} +2 -1
- package/dist/{index-CB9Srua5.d.ts → index-CL1T2j4y.d.ts} +7 -4
- package/dist/{index-DjMwF8ET.d.ts → index-COgrQZIL.d.ts} +7 -1
- package/dist/{index-Ca8VIE4l.d.ts → index-CVn0GBdB.d.ts} +1 -1
- package/dist/{index-ChWlKHjc.d.ts → index-Cde5JvtX.d.ts} +15 -3
- package/dist/index-CitZGSn0.d.ts +39 -0
- package/dist/index-CkKPMIeX.d.ts +55 -0
- package/dist/{index-FEy8qFSD.d.ts → index-ClNU2Th8.d.ts} +30 -3
- package/dist/{index-kaKBOZSU.d.ts → index-Cq31D3fJ.d.ts} +99 -7
- package/dist/{index-xfkEuGLY.d.ts → index-CqE4Bf3Q.d.ts} +8 -2
- package/dist/{index-DtePJ_w_.d.ts → index-Crp3NFLW.d.ts} +2 -2
- package/dist/{index-BlOIC_AM.d.ts → index-CsNi1I8j.d.ts} +6 -0
- package/dist/index-Cyb9Du5Z.d.ts +76 -0
- package/dist/{index-4TRnFGxv.d.ts → index-D41_xqjs.d.ts} +50 -10
- package/dist/{index-eshFLli0.d.ts → index-D97pQbua.d.ts} +7 -0
- package/dist/{index-c67ca7eJ.d.ts → index-DEQ5cnUV.d.ts} +1 -1
- package/dist/{index-BmAxqw1G.d.ts → index-DG52Bg0W.d.ts} +15 -1
- package/dist/{index-Da7Jm8Ht.d.ts → index-DIXAzTKL.d.ts} +1 -1
- package/dist/{index-BmmdzwT9.d.ts → index-DNA2l1RN.d.ts} +35 -11
- package/dist/{index-B9rqmYxh.d.ts → index-DUaLJO7l.d.ts} +978 -313
- package/dist/index-DVmgNb78.d.ts +143 -0
- package/dist/{index-CDdRQQF3.d.ts → index-DWh2WC8W.d.ts} +18 -6
- package/dist/index-DXpSFlPG.d.ts +78 -0
- package/dist/{index-C_2Z65Rp.d.ts → index-DeQwYJbg.d.ts} +39 -2
- package/dist/{index-JL4auphT.d.ts → index-GI9xIV9l.d.ts} +2 -2
- package/dist/{index-Ctu32CLv.d.ts → index-IBAInumL.d.ts} +93 -56
- package/dist/{index-vizlhXVs.d.ts → index-T2FOcOuI.d.ts} +492 -16
- package/dist/{index-CA6RbRWx.d.ts → index-TXcNH86P.d.ts} +2 -2
- package/dist/{index-BIPc1v82.d.ts → index-TntQsADQ.d.ts} +1 -1
- package/dist/index-fAZaRruV.d.ts +125 -0
- package/dist/{index-COxy6LEW.d.ts → index-gW0HW02U.d.ts} +1 -1
- package/dist/{index-D5N9ikrS.d.ts → index-hCpxKePE.d.ts} +1 -1
- package/dist/{index-CpiWVbRZ.d.ts → index-i0tNFWfz.d.ts} +3 -1
- package/dist/{index-YmSe1ujk.d.ts → index-lgvUFSCO.d.ts} +1 -1
- package/dist/{index-bvr3WHvs.d.ts → index-xrzJC4wm.d.ts} +1 -1
- package/dist/{index-BK9T1TPZ.d.ts → index-yT1yiiww.d.ts} +28 -9
- package/dist/index.d.ts +80 -76
- package/dist/index.js +127 -113
- package/dist/link-C4_WogdF.js +18 -0
- package/dist/{index-C3GaPqvJ.d.ts → loadCatalog-BGHKG_9N.d.ts} +16 -37
- package/dist/{locale-sLw5Caia.js → loadCatalog-CXKqEB9s.js} +25 -65
- package/dist/locale/index.d.ts +3 -2
- package/dist/locale/index.js +4 -3
- package/dist/locale-DgkZEMTn.js +105 -0
- package/dist/{searchResultMessage-CCnq-_ce.js → searchResultMessage-hXXNOFJP.js} +2 -2
- package/dist/{size-xcIqExkS.js → size-Cpn_wzXi.js} +1 -1
- package/dist/{types-3eXh_5os.d.ts → types-0Q_SJv_F.d.ts} +3 -1
- package/dist/types-BRfVvZTH.d.ts +108 -0
- package/dist/{types-D7QNSqoN.d.ts → types-BTk0WZ0b.d.ts} +8 -0
- package/dist/{types-D_J66aPN.d.ts → types-BnNTzEnd.d.ts} +5 -1
- package/dist/{types-D9nP_X-c.d.ts → types-Ckih2YJi.d.ts} +9 -2
- package/dist/{types-Db3Owy8Q.d.ts → types-OGMYGejX.d.ts} +5 -0
- package/dist/{index-nKlTsNfV.d.ts → types-uFMH9NaM.d.ts} +14 -17
- package/dist/{useAnchoredListbox-BN9LQnon.js → useAnchoredListbox-DwztMNjP.js} +9 -4
- package/dist/useDevWarning-DznOpOHT.js +36 -0
- package/dist/useInputContainer-CpgDe2-4.js +51 -0
- package/dist/useInputStatusIcon-DBOwxV4x.js +41 -0
- package/dist/useInteractiveRole-Cn0Nd5GX.js +25 -0
- package/dist/{useMenuDrillIn-BgjJcY3K.js → useMenuDrillIn-DzKGkTho.js} +1 -1
- package/dist/{useMenuPress-DUmEy4TB.js → useMenuPress-D-FRNrBW.js} +162 -14
- package/dist/useMergedRefs-CfHHlCsn.js +109 -0
- package/dist/useNumberField-4-dIGVed.js +128 -0
- package/dist/{usePositionedLayer-C1NBOsVT.js → usePositionedLayer-Cru9_00b.js} +70 -7
- package/dist/useResizable-DDwPpPe6.d.ts +409 -0
- package/dist/useRestoreFocus-Djw9RUIf.js +153 -0
- package/dist/useScrollbars-C2NJ6Qwq.js +43 -0
- package/dist/{useTimeValue-DWk6oTAZ.js → useTimeValue-6ufHM15W.js} +1 -1
- package/dist/utils-D33VQDnk.js +58 -0
- package/locales/SOURCE.json +1 -1
- package/locales/en.json +445 -1
- package/package.json +19 -2
- package/styles/avatar-group.css +19 -1
- package/styles/avatar.css +34 -13
- package/styles/chat.css +17 -1
- package/styles/dialog-header.css +5 -1
- package/styles/field.css +11 -0
- package/styles/heading.css +9 -0
- package/styles/indicator-focus-ring.css +18 -0
- package/styles/number-input.css +33 -0
- package/styles/pressable.css +44 -0
- package/styles/progress-bar.css +18 -0
- package/styles/scrollbars.css +28 -0
- package/styles/side-nav.css +20 -6
- package/styles/stack.css +4 -2
- package/styles/status-dot.css +18 -0
- package/styles/tab-list.css +38 -2
- package/styles/table.css +66 -6
- package/styles/text.css +9 -0
- package/styles/time-input.css +41 -0
- package/styles/top-nav.css +46 -19
- package/styles/typeahead.css +31 -0
- package/styles.css +2 -0
- package/dist/AvatarGroup-QyzSrpYA.js +0 -60
- package/dist/DateInput-D4XFAEMp.js +0 -743
- package/dist/FieldLabel-DmmJyX7w.js +0 -184
- package/dist/FileInput-DuNwdbAo.js +0 -238
- package/dist/HoverCard-EhbWaGOW.js +0 -443
- package/dist/NumberInput-B4IL3s_8.js +0 -210
- package/dist/Popover-D7zqpFwU.js +0 -215
- package/dist/StatusDot-CaoIapp4.js +0 -27
- package/dist/TimeField-Biiuv0hB.js +0 -214
- package/dist/Tokenizer-rwzamZg4.js +0 -473
- package/dist/Tooltip-C2fh9anJ.js +0 -271
- package/dist/Typeahead-_V11btpv.js +0 -499
- package/dist/index-Blm197N_.d.ts +0 -82
- package/dist/index-Bt7ewoz2.d.ts +0 -119
- package/dist/index-C1HIqW_H.d.ts +0 -38
- package/dist/index-CngORuiq.d.ts +0 -387
- package/dist/index-D4I_obqR.d.ts +0 -58
- package/dist/link-CdcUSxAj.js +0 -12
- package/dist/size-BuTzpgnR.d.ts +0 -14
- package/dist/types-Cp4liug-.d.ts +0 -170
- package/dist/useDismiss-Cj8x_51F.js +0 -62
- package/dist/useNumberField-DL-Radsp.js +0 -49
- package/dist/useResizable-CUoNPmUw.d.ts +0 -72
- package/dist/useRestoreFocus-BvMdXVX9.js +0 -96
- package/dist/utils-C9r3UD_y.js +0 -16
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { t as useMediaQuery } from "./useMediaQuery-GMmgp28-.js";
|
|
2
2
|
import { t as _sfc_main$1 } from "./Kbd-BB-Dw6zE.js";
|
|
3
|
-
import { o as useAstryxMessages } from "./context-
|
|
4
|
-
import { Fragment, computed, createBlock, createElementBlock, createElementVNode, defineComponent, h, normalizeStyle, onBeforeUnmount, onMounted, onScopeDispose, openBlock, ref, renderList, toDisplayString, toValue, unref, vShow, watch, withDirectives } from "vue";
|
|
3
|
+
import { o as useAstryxMessages } from "./context-iABt_ueM.js";
|
|
4
|
+
import { Fragment, computed, createBlock, createElementBlock, createElementVNode, defineComponent, getCurrentScope, h, normalizeStyle, onBeforeUnmount, onMounted, onScopeDispose, openBlock, ref, renderList, toDisplayString, toValue, unref, vShow, watch, withDirectives } from "vue";
|
|
5
|
+
import "../styles/indicator-focus-ring.css";
|
|
5
6
|
import "../styles/keyboard-hint.css";
|
|
7
|
+
import "../styles/pressable.css";
|
|
6
8
|
//#region src/composables/useContainerReveal.ts
|
|
7
9
|
function useContainerReveal(options = {}) {
|
|
8
10
|
function containerProps(reveal = {}) {
|
|
@@ -62,6 +64,226 @@ function useControllableState(options) {
|
|
|
62
64
|
};
|
|
63
65
|
}
|
|
64
66
|
//#endregion
|
|
67
|
+
//#region src/composables/internal/entryAnimation.ts
|
|
68
|
+
/**
|
|
69
|
+
* 预设对应的共享动画类。时长、缓动和「减少动态效果」的处理都在 `styles/motion.css` 里。
|
|
70
|
+
* 类名里的 above 指元素从下方升上去,below 指从上方落下来。
|
|
71
|
+
*/
|
|
72
|
+
const ENTRY_ANIMATION_CLASSES = {
|
|
73
|
+
slideDown: "astryx-motion-slide-in-below",
|
|
74
|
+
slideUp: "astryx-motion-slide-in-above",
|
|
75
|
+
fadeIn: "astryx-motion-fade-in",
|
|
76
|
+
scaleIn: "astryx-motion-scale-in"
|
|
77
|
+
};
|
|
78
|
+
let hasPaintedPage = false;
|
|
79
|
+
let isTrackingPaint = false;
|
|
80
|
+
function trackFirstPaint() {
|
|
81
|
+
if (isTrackingPaint || typeof window === "undefined" || typeof requestAnimationFrame !== "function") return;
|
|
82
|
+
isTrackingPaint = true;
|
|
83
|
+
requestAnimationFrame(() => {
|
|
84
|
+
requestAnimationFrame(() => {
|
|
85
|
+
hasPaintedPage = true;
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
/** 首屏是否已经画过。服务端没有 window,永远返回 false。 */
|
|
90
|
+
function isAfterFirstPaint() {
|
|
91
|
+
trackFirstPaint();
|
|
92
|
+
return hasPaintedPage;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* 对应原版 Astryx 的 `hooks/useEntryAnimation`。
|
|
96
|
+
*
|
|
97
|
+
* 元素挂载时播一次入场动画,但只对首屏画完之后才插进来的元素生效:
|
|
98
|
+
* 首屏就渲染出来的元素不播放,免得整页一起动。
|
|
99
|
+
*
|
|
100
|
+
* 用法是把返回的 `entryClass` 绑到 `class` 上。动画时长和缓动取自主题的
|
|
101
|
+
* motion token,「减少动态效果」打开时动画会直接落到结束状态。
|
|
102
|
+
*/
|
|
103
|
+
function useEntryAnimation(options = {}) {
|
|
104
|
+
const preset = options.preset ?? "slideDown";
|
|
105
|
+
return { entryClass: isAfterFirstPaint() ? ENTRY_ANIMATION_CLASSES[preset] : null };
|
|
106
|
+
}
|
|
107
|
+
trackFirstPaint();
|
|
108
|
+
//#endregion
|
|
109
|
+
//#region src/composables/useGridFocus.ts
|
|
110
|
+
/** 网格里一格可以接受的元素:按钮,或者显式可聚焦的元素。 */
|
|
111
|
+
const DEFAULT_CELL_SELECTOR = "button:not([disabled]), [tabindex]:not([tabindex=\"-1\"])";
|
|
112
|
+
/**
|
|
113
|
+
* 对应原版 Astryx 的 `hooks/useGridFocus`。
|
|
114
|
+
*
|
|
115
|
+
* 按 WAI-ARIA 的 grid 模式管二维网格的键盘导航:方向键一格一格走,
|
|
116
|
+
* Home/End 走到行首行尾,Ctrl+Home/Ctrl+End 走到整张网格的开头和结尾,
|
|
117
|
+
* Page Up/Down 交给调用方(日历里就是翻月)。走到边界时可以把事件交出去,
|
|
118
|
+
* 让别的网格接住焦点,例如翻到上个月继续用方向键。
|
|
119
|
+
*
|
|
120
|
+
* 它靠读 DOM 里格子的顺序算行列,所以格子要不要能聚焦、要不要聚焦格子里的某个按钮,
|
|
121
|
+
* 都是通过 `isCellFocusable` 和 `getFocusTarget` 两个回调交给调用方决定。
|
|
122
|
+
*/
|
|
123
|
+
function useGridFocus(options) {
|
|
124
|
+
const gridRef = ref(null);
|
|
125
|
+
const cellSelector = options.cellSelector ?? DEFAULT_CELL_SELECTOR;
|
|
126
|
+
function isRoving() {
|
|
127
|
+
return toValue(options.hasRovingTabIndex ?? false);
|
|
128
|
+
}
|
|
129
|
+
function getCells() {
|
|
130
|
+
const grid = gridRef.value;
|
|
131
|
+
if (grid == null) return [];
|
|
132
|
+
return [...grid.querySelectorAll(cellSelector)];
|
|
133
|
+
}
|
|
134
|
+
/** 能接焦点的格子,按 DOM 顺序。 */
|
|
135
|
+
function getFocusableCells() {
|
|
136
|
+
return getCells().filter((cell) => options.isCellFocusable?.(cell) ?? true);
|
|
137
|
+
}
|
|
138
|
+
function resolveTarget(cell) {
|
|
139
|
+
return options.getFocusTarget?.(cell) ?? cell;
|
|
140
|
+
}
|
|
141
|
+
function indexOfTarget(target) {
|
|
142
|
+
if (target == null) return -1;
|
|
143
|
+
return getCells().findIndex((cell) => cell === target || cell.contains(target));
|
|
144
|
+
}
|
|
145
|
+
function activeIndex() {
|
|
146
|
+
const grid = gridRef.value;
|
|
147
|
+
if (grid == null) return -1;
|
|
148
|
+
const focused = grid.ownerDocument.activeElement;
|
|
149
|
+
if (focused == null || !grid.contains(focused)) return -1;
|
|
150
|
+
return indexOfTarget(focused);
|
|
151
|
+
}
|
|
152
|
+
/** 让当前格子成为唯一的 Tab 落脚点,其余格子退出 Tab 顺序。 */
|
|
153
|
+
function syncRovingTabIndex(index) {
|
|
154
|
+
if (!isRoving()) return;
|
|
155
|
+
getCells().forEach((cell, cellIndex) => {
|
|
156
|
+
const target = resolveTarget(cell);
|
|
157
|
+
if (target != null) target.tabIndex = cellIndex === index ? 0 : -1;
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
function focusTargetOf(cell) {
|
|
161
|
+
if (cell == null) return false;
|
|
162
|
+
if (!(options.isCellFocusable?.(cell) ?? true)) return false;
|
|
163
|
+
const target = resolveTarget(cell);
|
|
164
|
+
if (target == null) return false;
|
|
165
|
+
target.focus({ preventScroll: true });
|
|
166
|
+
syncRovingTabIndex(getCells().indexOf(cell));
|
|
167
|
+
return true;
|
|
168
|
+
}
|
|
169
|
+
function columns() {
|
|
170
|
+
return Math.max(1, toValue(options.columns));
|
|
171
|
+
}
|
|
172
|
+
function columnOf(index) {
|
|
173
|
+
return index < 0 ? 0 : index % columns();
|
|
174
|
+
}
|
|
175
|
+
/** 走到边界外面时,把当前列和步长交给调用方,让另一张网格接住焦点。 */
|
|
176
|
+
function navigateOut(current, offset, isAfter) {
|
|
177
|
+
if (current < 0) return;
|
|
178
|
+
const column = columnOf(current);
|
|
179
|
+
if (isAfter) options.onNavigateAfter?.(column, offset);
|
|
180
|
+
else options.onNavigateBefore?.(column, offset);
|
|
181
|
+
}
|
|
182
|
+
function moveTo(index, offset) {
|
|
183
|
+
const cells = getCells();
|
|
184
|
+
const target = cells[index];
|
|
185
|
+
if (target == null) {
|
|
186
|
+
navigateOut(activeIndex(), offset, index >= cells.length);
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
if (!(options.isCellFocusable?.(target) ?? true)) return;
|
|
190
|
+
focusTargetOf(target);
|
|
191
|
+
}
|
|
192
|
+
function handleKeyDown(event) {
|
|
193
|
+
if (event.defaultPrevented) return;
|
|
194
|
+
if (gridRef.value == null) return;
|
|
195
|
+
const index = activeIndex();
|
|
196
|
+
if (index < 0) return;
|
|
197
|
+
const cols = columns();
|
|
198
|
+
const last = getCells().length - 1;
|
|
199
|
+
const rowStart = index - columnOf(index);
|
|
200
|
+
switch (event.key) {
|
|
201
|
+
case "ArrowRight":
|
|
202
|
+
event.preventDefault();
|
|
203
|
+
moveTo(index + 1, 1);
|
|
204
|
+
break;
|
|
205
|
+
case "ArrowLeft":
|
|
206
|
+
event.preventDefault();
|
|
207
|
+
moveTo(index - 1, 1);
|
|
208
|
+
break;
|
|
209
|
+
case "ArrowDown":
|
|
210
|
+
event.preventDefault();
|
|
211
|
+
moveTo(index + cols, cols);
|
|
212
|
+
break;
|
|
213
|
+
case "ArrowUp":
|
|
214
|
+
event.preventDefault();
|
|
215
|
+
moveTo(index - cols, cols);
|
|
216
|
+
break;
|
|
217
|
+
case "Home":
|
|
218
|
+
event.preventDefault();
|
|
219
|
+
moveTo(event.ctrlKey || event.metaKey ? 0 : rowStart, 1);
|
|
220
|
+
break;
|
|
221
|
+
case "End":
|
|
222
|
+
event.preventDefault();
|
|
223
|
+
moveTo(event.ctrlKey || event.metaKey ? last : rowStart + cols - 1, 1);
|
|
224
|
+
break;
|
|
225
|
+
case "PageUp":
|
|
226
|
+
if (options.onPageUp == null) break;
|
|
227
|
+
event.preventDefault();
|
|
228
|
+
options.onPageUp();
|
|
229
|
+
break;
|
|
230
|
+
case "PageDown":
|
|
231
|
+
if (options.onPageDown == null) break;
|
|
232
|
+
event.preventDefault();
|
|
233
|
+
options.onPageDown();
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
function handleFocus(event) {
|
|
237
|
+
if (!isRoving()) return;
|
|
238
|
+
const target = event.target;
|
|
239
|
+
if (!(target instanceof Element)) return;
|
|
240
|
+
const index = indexOfTarget(target);
|
|
241
|
+
if (index < 0) return;
|
|
242
|
+
syncRovingTabIndex(index);
|
|
243
|
+
}
|
|
244
|
+
function focusCell(index) {
|
|
245
|
+
const cells = getCells();
|
|
246
|
+
if (cells.length === 0) return;
|
|
247
|
+
focusTargetOf(cells[Math.min(Math.max(index, 0), cells.length - 1)]);
|
|
248
|
+
}
|
|
249
|
+
function focusFirst() {
|
|
250
|
+
focusTargetOf(getFocusableCells()[0]);
|
|
251
|
+
}
|
|
252
|
+
function focusLast() {
|
|
253
|
+
const cells = getFocusableCells();
|
|
254
|
+
focusTargetOf(cells[cells.length - 1]);
|
|
255
|
+
}
|
|
256
|
+
/** 首次渲染后补上 Tab 落脚点;已经有一个 `tabindex="0"` 的格子就尊重它。 */
|
|
257
|
+
function seedRovingTabIndex() {
|
|
258
|
+
if (!isRoving()) return;
|
|
259
|
+
const cells = getCells();
|
|
260
|
+
const seeded = cells.findIndex((cell) => {
|
|
261
|
+
const target = resolveTarget(cell);
|
|
262
|
+
return target != null && target.tabIndex === 0 && (options.isCellFocusable?.(cell) ?? true);
|
|
263
|
+
});
|
|
264
|
+
if (seeded >= 0) {
|
|
265
|
+
syncRovingTabIndex(seeded);
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
const first = cells.findIndex((cell) => options.isCellFocusable?.(cell) ?? true);
|
|
269
|
+
if (first >= 0) syncRovingTabIndex(first);
|
|
270
|
+
}
|
|
271
|
+
onMounted(seedRovingTabIndex);
|
|
272
|
+
watch(gridRef, seedRovingTabIndex);
|
|
273
|
+
watch([() => toValue(options.columns), () => toValue(options.hasRovingTabIndex ?? false)], seedRovingTabIndex);
|
|
274
|
+
onScopeDispose(() => {
|
|
275
|
+
gridRef.value = null;
|
|
276
|
+
});
|
|
277
|
+
return {
|
|
278
|
+
gridRef,
|
|
279
|
+
handleKeyDown,
|
|
280
|
+
handleFocus,
|
|
281
|
+
focusCell,
|
|
282
|
+
focusFirst,
|
|
283
|
+
focusLast
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
//#endregion
|
|
65
287
|
//#region src/composables/useGridRovingFocus.ts
|
|
66
288
|
/**
|
|
67
289
|
* 网格式导航(roving tabindex):用方向键在二维网格中移动焦点。
|
|
@@ -231,6 +453,57 @@ function useImageMode(src, options = {}) {
|
|
|
231
453
|
return mode;
|
|
232
454
|
}
|
|
233
455
|
//#endregion
|
|
456
|
+
//#region src/composables/useIndicatorFocusRing.ts
|
|
457
|
+
/** 读不到 `:focus-visible` 时宁可按可见处理,不能把焦点环弄丢(WCAG 2.4.7)。 */
|
|
458
|
+
function isFocusVisible(target) {
|
|
459
|
+
try {
|
|
460
|
+
return target.matches(":focus-visible");
|
|
461
|
+
} catch {
|
|
462
|
+
return true;
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
/**
|
|
466
|
+
* 对应原版 Astryx 的 `hooks/useIndicatorFocusRing`。
|
|
467
|
+
*
|
|
468
|
+
* 给「真输入框藏起来、画面上的图形代替它」的控件画标准焦点环:复选框、
|
|
469
|
+
* 单选框都把真正的 input 设成透明,焦点环只能画在旁边那个图形上。
|
|
470
|
+
*
|
|
471
|
+
* 环画在指示器自己的元素上,只有这个元素自己的圆角能决定环的形状;
|
|
472
|
+
* 而且只在 `:focus-visible` 时画,鼠标点一下不会亮。统一放在这里管,
|
|
473
|
+
* 主题换掉指示器也照样有可见焦点,不会因为漏了一个属性就整块没法用键盘。
|
|
474
|
+
*/
|
|
475
|
+
function useIndicatorFocusRing(options) {
|
|
476
|
+
function indicator() {
|
|
477
|
+
const child = options.containerRef.value?.firstElementChild;
|
|
478
|
+
return child instanceof HTMLElement ? child : null;
|
|
479
|
+
}
|
|
480
|
+
/** 标记属性 `data-astryx-focus-ring` 的画法是 `styles/indicator-focus-ring.css`。 */
|
|
481
|
+
function clear() {
|
|
482
|
+
const element = indicator();
|
|
483
|
+
if (element != null) delete element.dataset.astryxFocusRing;
|
|
484
|
+
}
|
|
485
|
+
function onFocus(event) {
|
|
486
|
+
if (toValue(options.isDisabled ?? false)) {
|
|
487
|
+
clear();
|
|
488
|
+
return;
|
|
489
|
+
}
|
|
490
|
+
const target = event.target;
|
|
491
|
+
if (!(target instanceof Element) || !isFocusVisible(target)) {
|
|
492
|
+
clear();
|
|
493
|
+
return;
|
|
494
|
+
}
|
|
495
|
+
const element = indicator();
|
|
496
|
+
if (element != null) element.dataset.astryxFocusRing = "";
|
|
497
|
+
}
|
|
498
|
+
function onBlur() {
|
|
499
|
+
clear();
|
|
500
|
+
}
|
|
501
|
+
return { focusProps: {
|
|
502
|
+
onFocus,
|
|
503
|
+
onBlur
|
|
504
|
+
} };
|
|
505
|
+
}
|
|
506
|
+
//#endregion
|
|
234
507
|
//#region src/composables/KeyboardHint.vue
|
|
235
508
|
const _hoisted_1 = { class: "astryx-keyboard-hint__keys" };
|
|
236
509
|
const _hoisted_2 = { class: "astryx-keyboard-hint__label" };
|
|
@@ -358,6 +631,7 @@ function useKeyboardHint(options = {}) {
|
|
|
358
631
|
const current = event.currentTarget;
|
|
359
632
|
if (!(current instanceof HTMLElement)) return;
|
|
360
633
|
if (event.relatedTarget instanceof Node && current.contains(event.relatedTarget)) return;
|
|
634
|
+
dismissed = true;
|
|
361
635
|
hide();
|
|
362
636
|
}
|
|
363
637
|
function onKeyDown(event) {
|
|
@@ -388,6 +662,151 @@ function useKeyboardHint(options = {}) {
|
|
|
388
662
|
};
|
|
389
663
|
}
|
|
390
664
|
//#endregion
|
|
665
|
+
//#region src/composables/internal/pressFeedback.ts
|
|
666
|
+
/** 标出要走上报按压模型的元素。样式在 `styles/pressable.css`。 */
|
|
667
|
+
const PRESSABLE_ATTRIBUTE = "data-astryx-pressable";
|
|
668
|
+
/** 按压成立时由控制器写在元素上,抬手时移除。 */
|
|
669
|
+
const PRESSED_ATTRIBUTE = "data-astryx-pressed";
|
|
670
|
+
/** 手指按下多久才算真按了。 */
|
|
671
|
+
const HOLD_MS = 150;
|
|
672
|
+
/** 手指移动超过这个距离就当是滑动,不是按压。 */
|
|
673
|
+
const MOVE_TOLERANCE_PX = 10;
|
|
674
|
+
const PRESSABLE_PROPS = Object.freeze({ [PRESSABLE_ATTRIBUTE]: "" });
|
|
675
|
+
/**
|
|
676
|
+
* 一个文档级的控制器,给所有带标记的元素统一做按压反馈。
|
|
677
|
+
* 第一个用到的组件装上它,最后一个卸载时拆掉,所以每个元素自己不加监听、不加状态。
|
|
678
|
+
*/
|
|
679
|
+
let press = null;
|
|
680
|
+
let users = 0;
|
|
681
|
+
let installed = false;
|
|
682
|
+
let releaseTimer = null;
|
|
683
|
+
function clearPressTimer() {
|
|
684
|
+
if (press?.timer != null) {
|
|
685
|
+
clearTimeout(press.timer);
|
|
686
|
+
press.timer = null;
|
|
687
|
+
}
|
|
688
|
+
}
|
|
689
|
+
function clearReleaseTimer() {
|
|
690
|
+
if (releaseTimer != null) {
|
|
691
|
+
clearTimeout(releaseTimer);
|
|
692
|
+
releaseTimer = null;
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
function paint(element) {
|
|
696
|
+
element.setAttribute(PRESSED_ATTRIBUTE, "");
|
|
697
|
+
}
|
|
698
|
+
function unpaint(element) {
|
|
699
|
+
element.removeAttribute(PRESSED_ATTRIBUTE);
|
|
700
|
+
}
|
|
701
|
+
function reset() {
|
|
702
|
+
clearPressTimer();
|
|
703
|
+
if (press != null) unpaint(press.element);
|
|
704
|
+
press = null;
|
|
705
|
+
}
|
|
706
|
+
/** 抬手后让样式先画到 1,再撤掉属性,这样淡出的是 CSS 过渡。 */
|
|
707
|
+
function releaseAfterTap(element) {
|
|
708
|
+
paint(element);
|
|
709
|
+
clearReleaseTimer();
|
|
710
|
+
releaseTimer = setTimeout(() => {
|
|
711
|
+
releaseTimer = null;
|
|
712
|
+
unpaint(element);
|
|
713
|
+
}, 0);
|
|
714
|
+
}
|
|
715
|
+
function onPointerDown(event) {
|
|
716
|
+
if (event.pointerType === "mouse") return;
|
|
717
|
+
const target = event.target;
|
|
718
|
+
if (!(target instanceof Element)) return;
|
|
719
|
+
const element = target.closest(`[${PRESSABLE_ATTRIBUTE}]`);
|
|
720
|
+
if (element == null) return;
|
|
721
|
+
reset();
|
|
722
|
+
press = {
|
|
723
|
+
pointerId: event.pointerId,
|
|
724
|
+
element,
|
|
725
|
+
startX: event.clientX,
|
|
726
|
+
startY: event.clientY,
|
|
727
|
+
believed: false,
|
|
728
|
+
cancelled: false,
|
|
729
|
+
timer: setTimeout(() => {
|
|
730
|
+
if (press == null || press.cancelled) return;
|
|
731
|
+
press.believed = true;
|
|
732
|
+
press.timer = null;
|
|
733
|
+
paint(press.element);
|
|
734
|
+
}, HOLD_MS)
|
|
735
|
+
};
|
|
736
|
+
}
|
|
737
|
+
function onPointerMove(event) {
|
|
738
|
+
if (press == null || press.cancelled || event.pointerId !== press.pointerId) return;
|
|
739
|
+
if (Math.hypot(event.clientX - press.startX, event.clientY - press.startY) < MOVE_TOLERANCE_PX) return;
|
|
740
|
+
press.cancelled = true;
|
|
741
|
+
clearPressTimer();
|
|
742
|
+
unpaint(press.element);
|
|
743
|
+
}
|
|
744
|
+
function onPointerUp(event) {
|
|
745
|
+
if (press == null || event.pointerId !== press.pointerId) return;
|
|
746
|
+
const current = press;
|
|
747
|
+
clearPressTimer();
|
|
748
|
+
press = null;
|
|
749
|
+
if (current.cancelled || current.believed) unpaint(current.element);
|
|
750
|
+
else releaseAfterTap(current.element);
|
|
751
|
+
}
|
|
752
|
+
/** 浏览器收回这次手势(来电、系统手势),直接作废,不要补那一下。 */
|
|
753
|
+
function onPointerCancel(event) {
|
|
754
|
+
if (press == null || event.pointerId !== press.pointerId) return;
|
|
755
|
+
clearPressTimer();
|
|
756
|
+
press.cancelled = true;
|
|
757
|
+
unpaint(press.element);
|
|
758
|
+
press = null;
|
|
759
|
+
}
|
|
760
|
+
function onScroll() {
|
|
761
|
+
if (press == null) return;
|
|
762
|
+
press.cancelled = true;
|
|
763
|
+
clearPressTimer();
|
|
764
|
+
unpaint(press.element);
|
|
765
|
+
}
|
|
766
|
+
function install() {
|
|
767
|
+
if (installed || typeof document === "undefined") return;
|
|
768
|
+
installed = true;
|
|
769
|
+
document.addEventListener("pointerdown", onPointerDown, true);
|
|
770
|
+
document.addEventListener("pointermove", onPointerMove, true);
|
|
771
|
+
document.addEventListener("pointerup", onPointerUp, true);
|
|
772
|
+
document.addEventListener("pointercancel", onPointerCancel, true);
|
|
773
|
+
document.addEventListener("scroll", onScroll, true);
|
|
774
|
+
}
|
|
775
|
+
function uninstall() {
|
|
776
|
+
if (!installed || typeof document === "undefined") return;
|
|
777
|
+
installed = false;
|
|
778
|
+
document.removeEventListener("pointerdown", onPointerDown, true);
|
|
779
|
+
document.removeEventListener("pointermove", onPointerMove, true);
|
|
780
|
+
document.removeEventListener("pointerup", onPointerUp, true);
|
|
781
|
+
document.removeEventListener("pointercancel", onPointerCancel, true);
|
|
782
|
+
document.removeEventListener("scroll", onScroll, true);
|
|
783
|
+
clearReleaseTimer();
|
|
784
|
+
reset();
|
|
785
|
+
}
|
|
786
|
+
/**
|
|
787
|
+
* 对应原版 Astryx 的 `hooks/usePressFeedback`。
|
|
788
|
+
*
|
|
789
|
+
* 手指按下去时,CSS 的 `:active` 会在手指落下的瞬间就亮,而且滚动已经开始了它可能还亮着。
|
|
790
|
+
* 这里的按压模型反过来:先等 150 毫秒,确认这真是按压;手指一动超过 10 像素、
|
|
791
|
+
* 或者页面滚走了,马上作废,本次按压里不再亮回来;快速点一下则在抬手时补上;
|
|
792
|
+
* 松手后 200 毫秒淡出。这几个时间和系统列表的手感一致。
|
|
793
|
+
*
|
|
794
|
+
* 一个文档级控制器给所有带标记的元素做这件事(第一个用到的组件装上,最后一个卸载时拆掉),
|
|
795
|
+
* 所以调用这个组合式函数不会给你的元素加监听,也不加状态。
|
|
796
|
+
*
|
|
797
|
+
* 鼠标上的表现不变:`styles/pressable.css` 里给鼠标留了 `:active`,
|
|
798
|
+
* 在 `@media (pointer: coarse)` 之外才生效。
|
|
799
|
+
*/
|
|
800
|
+
function usePressFeedback() {
|
|
801
|
+
users += 1;
|
|
802
|
+
install();
|
|
803
|
+
if (getCurrentScope() != null) onScopeDispose(() => {
|
|
804
|
+
users -= 1;
|
|
805
|
+
if (users <= 0) uninstall();
|
|
806
|
+
});
|
|
807
|
+
return { pressableProps: PRESSABLE_PROPS };
|
|
808
|
+
}
|
|
809
|
+
//#endregion
|
|
391
810
|
//#region src/composables/useScrollOverflow.ts
|
|
392
811
|
/**
|
|
393
812
|
* 观察一个横向滚动容器,报告起始边和结束边有没有被挡住。
|
|
@@ -486,7 +905,8 @@ function useStreamingText(targetText, isStreaming = false, options) {
|
|
|
486
905
|
const speed = computed(() => toValue(options)?.speed ?? "natural");
|
|
487
906
|
const instant = computed(() => !streaming.value || speed.value === "instant" || prefersReducedMotion.value);
|
|
488
907
|
watch(target, (next, previous) => {
|
|
489
|
-
|
|
908
|
+
const revealed = (previous ?? "").slice(0, displayedLen.value);
|
|
909
|
+
if (next.length === 0 || revealed.length > 0 && !next.startsWith(revealed)) displayedLen.value = 0;
|
|
490
910
|
});
|
|
491
911
|
watch(streaming, (next) => {
|
|
492
912
|
if (!next) displayedLen.value = target.value.length;
|
|
@@ -517,4 +937,4 @@ function useStreamingText(targetText, isStreaming = false, options) {
|
|
|
517
937
|
});
|
|
518
938
|
}
|
|
519
939
|
//#endregion
|
|
520
|
-
export {
|
|
940
|
+
export { useKeyboardHint as a, perceptualLightness as c, useGridFocus as d, useEntryAnimation as f, usePressFeedback as i, useImageMode as l, useContainerReveal as m, useStreamingText as n, useIndicatorFocusRing as o, useControllableState as p, useScrollOverflow as r, imageModeFromPixels as s, snapToGraphemeBoundary as t, useGridRovingFocus as u };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { computed, inject } from "vue";
|
|
2
|
+
//#region src/LinkProvider/context.ts
|
|
3
|
+
/** 最近的 `LinkProvider` 给的链接组件。 */
|
|
4
|
+
const linkComponentKey = Symbol("astryx-link-component");
|
|
5
|
+
/**
|
|
6
|
+
* 子树默认使用的链接组件。没有 provider 时是 `undefined`,
|
|
7
|
+
* 各处退回自己原来的 `<a>`。
|
|
8
|
+
*
|
|
9
|
+
* 组件自己的 `as` 属性优先,所以用的时候写 `props.as ?? linkComponent.value`。
|
|
10
|
+
*/
|
|
11
|
+
function useLinkComponent() {
|
|
12
|
+
const provided = inject(linkComponentKey, null);
|
|
13
|
+
return computed(() => provided ?? void 0);
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
export { useLinkComponent as n, linkComponentKey as t };
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { computed, inject } from "vue";
|
|
2
|
+
const ZERO_GUTTER = {
|
|
3
|
+
blockStart: 0,
|
|
4
|
+
blockEnd: 0,
|
|
5
|
+
inlineStart: 0,
|
|
6
|
+
inlineEnd: 0
|
|
7
|
+
};
|
|
8
|
+
let safeAreaCache;
|
|
9
|
+
/**
|
|
10
|
+
* 算出每条边的空隙:基础空隙和安全区取大,再加上调用方给的额外偏移。
|
|
11
|
+
* `inset` 的每一项会被加到对应那条边上。
|
|
12
|
+
*/
|
|
13
|
+
function resolveLayerGutter(inset) {
|
|
14
|
+
const safeArea = measureSafeArea();
|
|
15
|
+
return {
|
|
16
|
+
blockStart: Math.max(16, safeArea.blockStart) + (inset?.blockStart ?? 0),
|
|
17
|
+
blockEnd: Math.max(16, safeArea.blockEnd) + (inset?.blockEnd ?? 0),
|
|
18
|
+
inlineStart: Math.max(16, safeArea.inlineStart) + (inset?.inlineStart ?? 0),
|
|
19
|
+
inlineEnd: Math.max(16, safeArea.inlineEnd) + (inset?.inlineEnd ?? 0)
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* 把 CSS 长度写成 px。浏览器直接返回计算后的值;测试环境这类拿不到计算值的地方
|
|
24
|
+
* 按单位粗略换算。
|
|
25
|
+
*/
|
|
26
|
+
function measureLength(value) {
|
|
27
|
+
const trimmed = value.trim();
|
|
28
|
+
if (trimmed === "") return 0;
|
|
29
|
+
if (typeof document !== "undefined") {
|
|
30
|
+
const probe = document.createElement("div");
|
|
31
|
+
probe.style.cssText = `position:absolute;top:0;left:0;width:0;height:0;visibility:hidden;pointer-events:none;padding-top:${trimmed}`;
|
|
32
|
+
document.body.appendChild(probe);
|
|
33
|
+
const computed = getComputedStyle(probe).paddingTop;
|
|
34
|
+
probe.remove();
|
|
35
|
+
const measured = toPx(computed);
|
|
36
|
+
if (measured !== 0) return measured;
|
|
37
|
+
}
|
|
38
|
+
return toPx(trimmed);
|
|
39
|
+
}
|
|
40
|
+
function toPx(raw) {
|
|
41
|
+
const value = Number.parseFloat(raw);
|
|
42
|
+
if (!Number.isFinite(value)) return 0;
|
|
43
|
+
const unit = raw.trim().replace(/^[-+0-9.]+/, "");
|
|
44
|
+
if (unit === "rem") return value * rootFontSize();
|
|
45
|
+
if (unit === "em") return value * 16;
|
|
46
|
+
return value;
|
|
47
|
+
}
|
|
48
|
+
function rootFontSize() {
|
|
49
|
+
if (typeof document === "undefined") return 16;
|
|
50
|
+
const size = Number.parseFloat(getComputedStyle(document.documentElement).fontSize);
|
|
51
|
+
return Number.isFinite(size) && size > 0 ? size : 16;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* 读设备安全区。给一个探针元素带上 `env(safe-area-inset-*)`,读回计算后的内边距。
|
|
55
|
+
* 读不到(例如没有安全区的桌面浏览器)时全为 0。
|
|
56
|
+
*/
|
|
57
|
+
function measureSafeArea() {
|
|
58
|
+
if (safeAreaCache != null) return safeAreaCache;
|
|
59
|
+
if (typeof document === "undefined") return ZERO_GUTTER;
|
|
60
|
+
const probe = document.createElement("div");
|
|
61
|
+
probe.style.cssText = "position:absolute;top:0;left:0;width:0;height:0;visibility:hidden;pointer-events:none";
|
|
62
|
+
probe.style.paddingTop = "env(safe-area-inset-top, 0px)";
|
|
63
|
+
probe.style.paddingBottom = "env(safe-area-inset-bottom, 0px)";
|
|
64
|
+
probe.style.paddingLeft = "env(safe-area-inset-left, 0px)";
|
|
65
|
+
probe.style.paddingRight = "env(safe-area-inset-right, 0px)";
|
|
66
|
+
document.body.appendChild(probe);
|
|
67
|
+
const style = getComputedStyle(probe);
|
|
68
|
+
const measured = {
|
|
69
|
+
blockStart: toPx(style.paddingTop),
|
|
70
|
+
blockEnd: toPx(style.paddingBottom),
|
|
71
|
+
inlineStart: toPx(style.paddingLeft),
|
|
72
|
+
inlineEnd: toPx(style.paddingRight)
|
|
73
|
+
};
|
|
74
|
+
probe.remove();
|
|
75
|
+
safeAreaCache = measured;
|
|
76
|
+
return measured;
|
|
77
|
+
}
|
|
78
|
+
/** 清掉安全区缓存。屏幕旋转后调用一次。 */
|
|
79
|
+
function resetLayerSafeArea() {
|
|
80
|
+
safeAreaCache = void 0;
|
|
81
|
+
}
|
|
82
|
+
//#endregion
|
|
83
|
+
//#region src/LayerProvider/context.ts
|
|
84
|
+
const layerContextKey = Symbol("astryx-layer");
|
|
85
|
+
/** 已经在一个 LayerProvider 里。内层的 provider 会被忽略。 */
|
|
86
|
+
const layerNestingKey = Symbol("astryx-layer-nesting");
|
|
87
|
+
/** 最近的 `LayerProvider` 配置。没有 provider 时是 `null`。 */
|
|
88
|
+
function useLayerConfig() {
|
|
89
|
+
return inject(layerContextKey, null);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* 锚定浮层离视口四条边的距离。基础空隙和设备安全区取大,再加 provider 给的偏移。
|
|
93
|
+
*/
|
|
94
|
+
function useLayerGutter() {
|
|
95
|
+
const config = useLayerConfig();
|
|
96
|
+
return computed(() => resolveLayerGutter(config?.value.inset));
|
|
97
|
+
}
|
|
98
|
+
//#endregion
|
|
99
|
+
export { measureLength as a, useLayerGutter as i, layerNestingKey as n, resetLayerSafeArea as o, useLayerConfig as r, resolveLayerGutter as s, layerContextKey as t };
|