@preply/ds-docs 3.5.1 → 3.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/00.LayoutFlex.stories-CeV_wdIC.js +85 -0
- package/dist/assets/{00.applications-CtD17Uvc.js → 00.applications-CAvTZLs_.js} +2 -2
- package/dist/assets/{00.favicons.guide-rDY-MoXZ.js → 00.favicons.guide-BhlxRh9a.js} +2 -2
- package/dist/assets/{00.token-explorer-CedppzBQ.js → 00.token-explorer-20FX7CcY.js} +2 -2
- package/dist/assets/00.using-responsive-props-BnlhCBRt.js +18 -0
- package/dist/assets/01.semantic-tokens-DcnkWzh7.js +2 -0
- package/dist/assets/{01.using-shorthand-props-eZLJFDHj.js → 01.using-shorthand-props-Of1iGh33.js} +2 -2
- package/dist/assets/10.Combinations.stories-uNix06Cx.js +144 -0
- package/dist/assets/{10.fonts.guide-DW9ufzTF.js → 10.fonts.guide-DrwXu-qM.js} +2 -2
- package/dist/assets/{10.ssr-DwlffmrT.js → 10.ssr-BLRvX7tP.js} +2 -2
- package/dist/assets/{11.languageFont.explorer.stories-Crh2l5Jm.js → 11.languageFont.explorer.stories-8bRkypgA.js} +3 -3
- package/dist/assets/{11.ssr.app-router-BZ07Enlf.js → 11.ssr.app-router-Bdj_5bEM.js} +2 -2
- package/dist/assets/{20.libraries-lbSLR9_7.js → 20.libraries-BAk4bn7T.js} +2 -2
- package/dist/assets/30.icons.explorer-Cw48haes.js +73 -0
- package/dist/assets/{30.storybook-C4NNn5Fv.js → 30.storybook-Cl1dKshZ.js} +2 -2
- package/dist/assets/40.illustrations.explorer-QST9S1uM.js +21 -0
- package/dist/assets/{90.advanced-bdiRxPCx.js → 90.advanced-D0gL86iZ.js} +2 -2
- package/dist/assets/{Accordion-BMkC4Xny.js → Accordion-DQdO67t-.js} +1 -1
- package/dist/assets/{Accordion.stories-SU6sgvYh.js → Accordion.stories-CIkFS1aB.js} +2 -2
- package/dist/assets/{Accordion.tests.stories-CxVZnGoY.js → Accordion.tests.stories-B-CsSb4t.js} +3 -3
- package/dist/assets/{AlertDialog.stories-Z5ooiuoO.js → AlertDialog.stories-Cl8Xpqxw.js} +3 -3
- package/dist/assets/{Avatar-B2H0W8KL.js → Avatar-BPQkrrdS.js} +1 -1
- package/dist/assets/{Avatar-BoLH36O5.js → Avatar-DU9LOGxE.js} +1 -1
- package/dist/assets/Avatar.stories-CqMa-0IY.js +42 -0
- package/dist/assets/AvatarWithStatus.stories-Bhftrj9g.js +41 -0
- package/dist/assets/{Badge-j_a0acGK.css → Badge-DXnHyVME.css} +1 -1
- package/dist/assets/{Badge.stories-B2OoKd78.js → Badge.stories-ub7MEo4B.js} +3 -3
- package/dist/assets/Box.stories-B-s13PQh.js +44 -0
- package/dist/assets/BubbleCounter.stories-CpaMP6xY.js +242 -0
- package/dist/assets/{Button-BSyqsKC5.js → Button-C5gzVt4K.js} +1 -1
- package/dist/assets/{Button-Bo0EuTg4.js → Button-vy3cIlv9.js} +1 -1
- package/dist/assets/{Button.stories-Dc9V2OdS.js → Button.stories-Df_g55it.js} +2 -2
- package/dist/assets/{ButtonBase-Bdtn25V2.js → ButtonBase-D5O3MkG2.js} +1 -1
- package/dist/assets/{Checkbox-Bq_sNuXJ.js → Checkbox-Bknyi3M6.js} +2 -2
- package/dist/assets/{Checkbox.stories-BI-3q1SR.js → Checkbox.stories-DF4d48B_.js} +2 -2
- package/dist/assets/Checkbox.tests.stories-CPrt0IT-.js +64 -0
- package/dist/assets/Chips-C-y9rHQ4.css +1 -0
- package/dist/assets/Chips.stories-DkNJ_zVw.js +146 -0
- package/dist/assets/Color-YHDXOIA2-pga7xyrn.js +1 -0
- package/dist/assets/{Combination-CCYtWL8C.js → Combination-Cz1uIyPJ.js} +1 -1
- package/dist/assets/{CountryFlag-ClC7kEHn.js → CountryFlag-DNvfZC7z.js} +7 -7
- package/dist/assets/CountryFlag.stories-xg8q2tp6.js +331 -0
- package/dist/assets/CountryFlag.test.stories-CkUCxnsL.js +27 -0
- package/dist/assets/{Dialog.stories-ColOPVoz.js → Dialog.stories-C9-6y9u3.js} +3 -3
- package/dist/assets/DismissibleChips-D0spWwKB.js +1 -0
- package/dist/assets/DismissibleChips-Jfhj9R2Y.css +1 -0
- package/dist/assets/DismissibleChips.stories-DAd1oRPH.js +635 -0
- package/dist/assets/Divider-DECo0bYW.css +1 -0
- package/dist/assets/Divider.stories-Dt8b4I0I.js +9 -0
- package/dist/assets/DocsRenderer-CFRXHY34-bxqIrlIk.js +2 -0
- package/dist/assets/{FieldButton-Bsa9_rJB.js → FieldButton-DkkntNzT.js} +1 -1
- package/dist/assets/FieldButton.stories-CXR_cH-r.js +1 -0
- package/dist/assets/{FormControl-CeIJk4_Z.js → FormControl-BBd1k1n3.js} +1 -1
- package/dist/assets/{FormControl-BxxTFPCS.css → FormControl-BBqp99uJ.css} +1 -1
- package/dist/assets/{FormControl.stories-DekxQG9a.js → FormControl.stories-DukIAZCw.js} +2 -2
- package/dist/assets/{Heading-ese4_5Hg.js → Heading-BLxyLk9f.js} +2 -2
- package/dist/assets/Heading.stories-DcyjKmJn.js +82 -0
- package/dist/assets/{Icon-ZIxauYsE.js → Icon-CsnSNslb.js} +2 -2
- package/dist/assets/{Icon-Dlm-jGvW.js → Icon-CytpCOfq.js} +1 -1
- package/dist/assets/Icon-RSC-jWx530Uy.js +6 -0
- package/dist/assets/{Icon.stories-Cv6aq9BI.js → Icon.stories-CdJp2Kjy.js} +2 -2
- package/dist/assets/IconButton-DnBk_U_S.css +1 -0
- package/dist/assets/IconButton-NYwQQfnV.js +8 -0
- package/dist/assets/{Input-C1hZX5_o.js → Input-MEZGWQfc.js} +5 -5
- package/dist/assets/{InputContainer-Bk0tgFnW.js → InputContainer-BZsD6GIE.js} +1 -1
- package/dist/assets/IntegrationWithReactHookForm.stories-DbXGbM6L.js +439 -0
- package/dist/assets/LayoutFlex-C3k4b85b.js +1 -0
- package/dist/assets/{LayoutFlex-Bhu4q65J.js → LayoutFlex-C6z0wWVE.js} +1 -1
- package/dist/assets/{LayoutFlexItem-C2t_4vHD.js → LayoutFlexItem-Cwg58STc.js} +1 -1
- package/dist/assets/{LayoutGrid-DwWkjrQU.js → LayoutGrid-WPajd7ZP.js} +1 -1
- package/dist/assets/LayoutGrid.stories-B-DYu7we.js +88 -0
- package/dist/assets/{LayoutGridItem-CZ6SKl8g.js → LayoutGridItem-CPteN7Xi.js} +1 -1
- package/dist/assets/{LayoutGridItem-CmZxAA0w.js → LayoutGridItem-sDswLjZs.js} +1 -1
- package/dist/assets/{LibraryExplore-C8GqDRwc.js → LibraryExplore-oBYfEgnm.js} +1 -1
- package/dist/assets/Link-ppzJSCTf.js +7 -0
- package/dist/assets/Link.stories-ClHFTcTp.js +265 -0
- package/dist/assets/Loader.stories-ltpe_Net.js +37 -0
- package/dist/assets/Messages-VCFIwUal.js +1 -0
- package/dist/assets/MultiSelectChips-CwiPSabU.js +2 -0
- package/dist/assets/MultiSelectChips.stories-DmtbSk6N.js +618 -0
- package/dist/assets/{NumberField-D6cbX2hK.js → NumberField-RsSQ3jKy.js} +5 -5
- package/dist/assets/{NumberField.stories-BHt2ErAX.js → NumberField.stories-D7ZfStPF.js} +2 -2
- package/dist/assets/{ObserveIntersection-DsqqXq5n.js → ObserveIntersection-B-K9BpyT.js} +2 -2
- package/dist/assets/ObserveIntersection.stories-CsECVFcG.js +27 -0
- package/dist/assets/{OnboardingTooltip-DVNAQjDc.js → OnboardingTooltip-S86JAVp1.js} +1 -1
- package/dist/assets/OnboardingTooltip.stories-yysftpQx.js +66 -0
- package/dist/assets/OnboardingTooltip.tests.stories-BGYD6ZgF.js +79 -0
- package/dist/assets/{OnboardingTour-DdV7TN6M.js → OnboardingTour-DdoL-ALr.js} +1 -1
- package/dist/assets/{OnboardingTour.stories-D0ScuFD6.js → OnboardingTour.stories-CFHFqnUP.js} +3 -3
- package/dist/assets/{OnboardingTour.tests.stories-DAxdPYEp.js → OnboardingTour.tests.stories-Zth6eLU9.js} +3 -3
- package/dist/assets/{PasswordField-C_KRyf9k.js → PasswordField-Dxf_bax6.js} +5 -5
- package/dist/assets/{PasswordField.stories-3X4JtcLm.js → PasswordField.stories-cbjkS8Y4.js} +5 -5
- package/dist/assets/{PortalElementProvider-D4ltrA8j.js → PortalElementProvider-CgL8vj5o.js} +1 -1
- package/dist/assets/PreplyLogo.stories-uls4oHdg.js +97 -0
- package/dist/assets/{ProgressBar.stories-Dpro8fzG.js → ProgressBar.stories-CDcfCVq4.js} +3 -3
- package/dist/assets/{ProgressSteps-BBrWCYks.js → ProgressSteps--PLRO2gB.js} +1 -1
- package/dist/assets/ProgressSteps.stories-Ds4cZ7wu.js +31 -0
- package/dist/assets/{RangeSlider-dSZs_gtw.js → RangeSlider-BYDrLADZ.js} +1 -1
- package/dist/assets/{RangeSlider.stories-DVb8mcs1.js → RangeSlider.stories-Cyr-Pro6.js} +2 -2
- package/dist/assets/RootProvider-jpy520VQ.js +1 -0
- package/dist/assets/{SelectField-CuzFFPz0.js → SelectField-JmD-rzDd.js} +7 -7
- package/dist/assets/{SelectField.stories-wb_cAtCV.js → SelectField.stories-BaUnnRxC.js} +2 -2
- package/dist/assets/ShowOnIntersection.stories-1-PEYzrA.js +17 -0
- package/dist/assets/SingleSelectChips-DLCTUr2z.js +2 -0
- package/dist/assets/SingleSelectChips.stories-Dqmrydst.js +637 -0
- package/dist/assets/{Slider-6E9fmd7P.js → Slider-CIF6srIP.js} +1 -1
- package/dist/assets/{Slider.stories-B5LCqqgS.js → Slider.stories-DPwe4ZY9.js} +2 -2
- package/dist/assets/{Spinner-BCTJunNM.js → Spinner-T-vTyHiv.js} +1 -1
- package/dist/assets/{Steps-CCm9vCgl.js → Steps-ffbOMhEJ.js} +1 -1
- package/dist/assets/{Steps.stories-BLFM3WRM.js → Steps.stories-CPOi2Oi8.js} +2 -2
- package/dist/assets/{StorybookGlobalStyle-B1zhYl96.js → StorybookGlobalStyle-CQSpwvw3.js} +1 -1
- package/dist/assets/Switch-Dw6ODsdd.js +12 -0
- package/dist/assets/Switch-DxL-NADD.css +1 -0
- package/dist/assets/Switch.stories-C1Mk3jSk.js +138 -0
- package/dist/assets/{Text-BmdJVr9v.js → Text-CykvSLVe.js} +1 -1
- package/dist/assets/Text.stories-BM7oD1Ya.js +69 -0
- package/dist/assets/{TextField-D2GlsmWF.css → TextField-C5AoK3Cj.css} +1 -1
- package/dist/assets/{TextField-Co0wSa5c.js → TextField-DakE_vDk.js} +1 -1
- package/dist/assets/{TextField-CMgzC3bX.js → TextField-lnCw6vFm.js} +5 -5
- package/dist/assets/{TextField.stories-CAcPkm_s.js → TextField.stories-C8nNbyIm.js} +5 -5
- package/dist/assets/{TextHighlighted-B6rrwk3x.js → TextHighlighted-B2n23sPW.js} +1 -1
- package/dist/assets/TextHighlighted.stories-Dunl9OsM.js +32 -0
- package/dist/assets/TextInline.stories-Cz98O8bG.js +37 -0
- package/dist/assets/{TextareaField-CCM1C6lK.js → TextareaField-BDRAFgn6.js} +9 -9
- package/dist/assets/{TextareaField.stories-DKNFN3f4.js → TextareaField.stories-CC3YstiD.js} +6 -6
- package/dist/assets/{Toast.stories-BzEpckjh.js → Toast.stories-CUVZTvJT.js} +3 -3
- package/dist/assets/{TokyoUIAttach-BvBvQVx_.js → TokyoUIAttach-BWl7Jkq1.js} +1 -1
- package/dist/assets/{TokyoUIClose-DFIfVIfy.js → TokyoUIClose-thK8sk63.js} +1 -1
- package/dist/assets/TokyoUIEmojiFrowning-DTIcabpJ.js +1 -0
- package/dist/assets/{TokyoUIExpand-DThzqohx.js → TokyoUIExpand-oMdXmNcg.js} +1 -1
- package/dist/assets/{TokyoUIEye-BsOt8ZdC.js → TokyoUIEye-CteyS9_g.js} +1 -1
- package/dist/assets/{TokyoUIFav-DGbkVriC.js → TokyoUIFav-DOVerCtW.js} +1 -1
- package/dist/assets/{TokyoUIInfo-nHX2jpp7.js → TokyoUIInfo-DbkQBubr.js} +1 -1
- package/dist/assets/{TokyoUILanguage-BNq9ng3F.js → TokyoUILanguage-CLpo5Vdq.js} +1 -1
- package/dist/assets/{TokyoUILock-C_glX9Ec.js → TokyoUILock-CENLMUf4.js} +1 -1
- package/dist/assets/{TokyoUIMinus-B9ja89W6.js → TokyoUIMinus-RacYe9uc.js} +1 -1
- package/dist/assets/{TokyoUINotebook-DNjno-oI.js → TokyoUINotebook-kt8pWj_a.js} +1 -1
- package/dist/assets/{TokyoUINotesWithPad-Bqcca_-M.js → TokyoUINotesWithPad-B-o4vu0Y.js} +1 -1
- package/dist/assets/{TokyoUIPhone-BHLDT6dz.js → TokyoUIPhone-CvuBM6jb.js} +1 -1
- package/dist/assets/{TokyoUITag-CulX0-gf.js → TokyoUITag-CS4uarg6.js} +1 -1
- package/dist/assets/{TokyoUIUpload-Bi3CuQzX.js → TokyoUIUpload-Bf0gWv4M.js} +1 -1
- package/dist/assets/{TokyoUIUser-DG6LLnJu.js → TokyoUIUser-Cvenl_VS.js} +1 -1
- package/dist/assets/{Tooltip-IxKOQjjo.js → Tooltip-UjXQy5k6.js} +1 -1
- package/dist/assets/{Tooltip.stories-DHYG0ggY.js → Tooltip.stories-DUECVMBB.js} +2 -2
- package/dist/assets/Tooltip.tests.stories-DV5HEaze.js +65 -0
- package/dist/assets/{align-self-BM6l9H5Z.js → align-self-r3vx00J0.js} +1 -1
- package/dist/assets/{breakpoints-DxEeOfvq.js → breakpoints-5Upxf6Y1.js} +2 -2
- package/dist/assets/{breakpoints-3Mi8ztBx.js → breakpoints-839jWvyb.js} +2 -2
- package/dist/assets/{breakpoints-BPZAI3l-.js → breakpoints-CUqKVgVc.js} +2 -2
- package/dist/assets/{changelog-BvX8uMXW.js → changelog-D_f5Tbwt.js} +234 -216
- package/dist/assets/{chunk-XP5HYGXS-D5tuasO7.js → chunk-XP5HYGXS-BpfKkqn7.js} +1 -1
- package/dist/assets/{client-DXF5tT0h.js → client-C1fTPCwG.js} +1 -1
- package/dist/assets/componentNames-NXEPEzbR.js +1 -0
- package/dist/assets/createRequiredContext-BW3-EdwI.js +241 -0
- package/dist/assets/createRequiredContext-Bv1cwElm.css +1 -0
- package/dist/assets/{defaults-B1rzzf6M.js → defaults-Clr6nbGc.js} +1 -1
- package/dist/assets/entry-preview-BvEBPG6v.js +2 -0
- package/dist/assets/{entry-preview-docs-FEPuDDnY.js → entry-preview-docs-Cyz3fU9E.js} +2 -2
- package/dist/assets/getCountryFlagUrl-CP-PpZV_.js +1 -0
- package/dist/assets/{getTokenVar-CXvtPVqa.js → getTokenVar-CV6_zRnp.js} +2 -2
- package/dist/assets/{hover-sR2377QI.js → hover-Bs7YcuQH.js} +2 -2
- package/dist/assets/hover-DniV5Ub7.js +13 -0
- package/dist/assets/hover-uZhMPRXi.js +14 -0
- package/dist/assets/{iframe-BE13K_u-.js → iframe-DI6VGJCr.js} +2 -2
- package/dist/assets/{index-BYp7dUfi.js → index-7S8Dj0J-.js} +1 -1
- package/dist/assets/{index-DUJ9kiQB.js → index-BArSnScv.js} +2 -2
- package/dist/assets/index-BN6VMYqa.js +1 -0
- package/dist/assets/{index-jEDObK_5.js → index-BPrLDK9Y.js} +1 -1
- package/dist/assets/{index-v0utLE_k.js → index-BrBqb5Q4.js} +1 -1
- package/dist/assets/{index--DZ0VX4g.js → index-Bt5ip-xO.js} +1 -1
- package/dist/assets/{index-DRKYGVyc.js → index-C6wF8VM1.js} +1 -1
- package/dist/assets/{index-C66nt8TK.js → index-C7hTFOIV.js} +1 -1
- package/dist/assets/{index-wFyje0se.js → index-C9SxdfPC.js} +1 -1
- package/dist/assets/index-Cb9e4tly.js +1 -0
- package/dist/assets/index-ChsGqxH_.js +9 -0
- package/dist/assets/{index-DDyIDR-R.js → index-Ctq3gFTp.js} +1 -1
- package/dist/assets/{index-CjMmneJr.js → index-CxzwkAAS.js} +3 -3
- package/dist/assets/{index-jPlWeKki.js → index-DHRyQyAr.js} +1 -1
- package/dist/assets/{index-BfBdt3zW.js → index-DSVnVYmz.js} +1 -1
- package/dist/assets/{index-DbgDZDus.js → index-QwIMrChO.js} +1 -1
- package/dist/assets/{intro-BQxazeZ4.js → intro-D15hwrBp.js} +2 -2
- package/dist/assets/{jsx-runtime-BYouaCF_.js → jsx-runtime-BTJTZTIL.js} +2 -2
- package/dist/assets/layout-relative-BNsRKWaJ.css +1 -0
- package/dist/assets/layout-relative-iaxAShjd.css +1 -0
- package/dist/assets/layout-relative.module-1z75aSwo-BeT2Gxbq.js +1 -0
- package/dist/assets/layout-relative.module-ChaXrVQQ.js +1 -0
- package/dist/assets/{message-BraTJ16C.js → message-BqoANQez.js} +1 -1
- package/dist/assets/{migrating-from-less-_WbBpNno.js → migrating-from-less-ChwDKr-0.js} +2 -2
- package/dist/assets/{options-Dn0Ts6qK.js → options-DiZKU5qS.js} +1 -1
- package/dist/assets/playground-6Qa0tALi.css +1 -0
- package/dist/assets/{playground.stories-DNP6DMoh.js → playground.stories-DBacBF4k.js} +212 -212
- package/dist/assets/preview-B7ZgNHfI.js +22 -0
- package/dist/assets/{preview-ChKXYagv.js → preview-BTjEYo28.js} +1 -1
- package/dist/assets/preview-BtcSDksg.js +2 -0
- package/dist/assets/{preview-DqZVArh_.js → preview-Dr3Vhf1y.js} +1 -1
- package/dist/assets/react-18-DfUnyR7e.js +1 -0
- package/dist/assets/react.esm-BJ_b8t-Z.js +65 -0
- package/dist/assets/{render-icon-CVTdrNe-.js → render-icon-BT0Aq7PA.js} +1 -1
- package/dist/assets/{render-icon-CwRdpin3.js → render-icon-Du0nasoi.js} +1 -1
- package/dist/assets/{shared-strings-CcWGHelY.js → shared-strings-BzaHC9x5.js} +1 -1
- package/dist/assets/{styled-components.browser.esm-CwsnEFnS.js → styled-components.browser.esm-BgpGX317.js} +1 -1
- package/dist/assets/test-utils-DCJN9LZk.js +9 -0
- package/dist/assets/{tokens-Do5DDIVZ.js → tokens-0xptGJP0.js} +2 -2
- package/dist/assets/{tokens-rA5iljxB.js → tokens-CGqhbkO_.js} +2 -2
- package/dist/assets/tokens-CJh_FSIl.js +1 -0
- package/dist/assets/{tokens-BpVbkeg9.js → tokens-pXBi-h95.js} +2 -2
- package/dist/assets/useHostname-Y3PlXofY.js +1 -0
- package/dist/assets/{useMergeRefs-BKVZOB6R.js → useMergeRefs-D_RfOOSs.js} +1 -1
- package/dist/assets/{useMergeRefs-CeyIhNgY.js → useMergeRefs-SFH7Mw4x.js} +1 -1
- package/dist/assets/{usePortalElement-D-MBkGYE.js → usePortalElement-M09Zq-L8.js} +2 -2
- package/dist/assets/{useTheme-DiEoTTOi.js → useTheme-DFSR9KPZ.js} +1 -1
- package/dist/assets/{useToken-BEsvy84L.js → useToken-DI8WZBSr.js} +1 -1
- package/dist/assets/{welcome-CjdlfIE9.js → welcome-DyZwhj5C.js} +2 -2
- package/dist/assets/{zeroheight-COTIl-YQ.js → zeroheight-B9itFpkD.js} +2 -2
- package/dist/iframe.html +1 -1
- package/dist/index.json +1 -1
- package/dist/preview-stats.json +2217 -1449
- package/dist/project.json +1 -1
- package/package.json +3 -3
- package/dist/assets/00.LayoutFlex.stories-DsoQ41ru.js +0 -85
- package/dist/assets/00.using-responsive-props-CXXBchqR.js +0 -18
- package/dist/assets/01.semantic-tokens-DA4N50sn.js +0 -2
- package/dist/assets/10.Combinations.stories-D5C6zeLo.js +0 -144
- package/dist/assets/30.icons.explorer-gDqz6aGC.js +0 -73
- package/dist/assets/40.illustrations.explorer-Cw6qUJFV.js +0 -21
- package/dist/assets/Avatar.stories-QILX30d4.js +0 -42
- package/dist/assets/AvatarWithStatus.stories-CiIZ7860.js +0 -41
- package/dist/assets/Box.stories-Bj6O093l.js +0 -44
- package/dist/assets/Checkbox.tests.stories-Bn3p5No-.js +0 -64
- package/dist/assets/Chips-DAK2so_G.css +0 -1
- package/dist/assets/Chips.stories-FqjAsoAI.js +0 -150
- package/dist/assets/Color-YHDXOIA2-Brn_ueLX.js +0 -1
- package/dist/assets/DocsRenderer-CFRXHY34-Drp94F88.js +0 -2
- package/dist/assets/FieldButton.stories-DN08cc4N.js +0 -1
- package/dist/assets/Flag.stories-hPDFXFLs.js +0 -114
- package/dist/assets/Flag.test.stories-Dn7xe9kp.js +0 -27
- package/dist/assets/Heading.stories-Pcuq78-p.js +0 -82
- package/dist/assets/Icon-RSC-DHJisRIw.js +0 -6
- package/dist/assets/IconButton-BqwVuKH2.js +0 -8
- package/dist/assets/IntegrationWithReactHookForm.stories-DjhZzsb9.js +0 -274
- package/dist/assets/LayoutFlex-BBGvSVMb.js +0 -1
- package/dist/assets/LayoutGrid.stories-CNvZbuzu.js +0 -88
- package/dist/assets/Link.stories-DQx9wq8H.js +0 -271
- package/dist/assets/Loader.stories-DWRd5a4n.js +0 -37
- package/dist/assets/ObserveIntersection.stories-BabE9srq.js +0 -27
- package/dist/assets/OnboardingTooltip.stories-BGQM-hLj.js +0 -66
- package/dist/assets/OnboardingTooltip.tests.stories-4LRVGnuI.js +0 -79
- package/dist/assets/PreplyLogo.stories-CrTgCgF0.js +0 -97
- package/dist/assets/ProgressSteps.stories-DDhuAaz0.js +0 -31
- package/dist/assets/RootProvider-DLsVkcFn.js +0 -1
- package/dist/assets/ShowOnIntersection.stories-ipu84fct.js +0 -17
- package/dist/assets/Text.stories-CkC6dvyE.js +0 -69
- package/dist/assets/TextHighlighted.stories-BJsM40kL.js +0 -32
- package/dist/assets/TextInline.stories-CL1L2t2-.js +0 -37
- package/dist/assets/Tooltip.tests.stories-DWwqRNUM.js +0 -65
- package/dist/assets/componentNames-CpCJzpB9.js +0 -1
- package/dist/assets/entry-preview-Cgr68VmN.js +0 -10
- package/dist/assets/hover-BJ9rZrzg.js +0 -13
- package/dist/assets/hover-CeDdAnNA.js +0 -14
- package/dist/assets/index-B3evPFBL.js +0 -9
- package/dist/assets/index-uOP2uDdf.js +0 -1
- package/dist/assets/layout-relative-BGyAoF2N.css +0 -1
- package/dist/assets/layout-relative-DuJENdo5.css +0 -1
- package/dist/assets/layout-relative.module-1z75aSwo-DNAR_Nv2.js +0 -1
- package/dist/assets/layout-relative.module-ed9bC4H4.js +0 -1
- package/dist/assets/playground-DJaUjyzx.css +0 -1
- package/dist/assets/preview-DFIaQ6pR.js +0 -2
- package/dist/assets/preview-Dlcr0l4_.js +0 -22
- package/dist/assets/react-18-CYoSI7Qu.js +0 -1
- package/dist/assets/tokens-ZvFzTwDp.js +0 -1
- package/dist/assets/useHostname-CH18gHFj.js +0 -1
|
@@ -0,0 +1,618 @@
|
|
|
1
|
+
import{j as a}from"./jsx-runtime-BTJTZTIL.js";import{r as Ye}from"./index-Cb9e4tly.js";import{M as p,a as h}from"./MultiSelectChips-CwiPSabU.js";import{F as ta,a as V,b as Je,c as Qe,d as na}from"./TokyoUIEmojiFrowning-DTIcabpJ.js";import{F as ia}from"./index-DSVnVYmz.js";import{L as g}from"./LayoutFlex-C3k4b85b.js";import{T}from"./Text-CykvSLVe.js";import{L as sa}from"./Link-ppzJSCTf.js";import{d as oa}from"./styled-components.browser.esm-BgpGX317.js";import{H as la}from"./Heading-BLxyLk9f.js";import{f as ra,r as Xe,w as u,e,u as r,a as E}from"./index-Ctq3gFTp.js";import{a as ca}from"./react.esm-BJ_b8t-Z.js";import{T as B}from"./Tooltip-UjXQy5k6.js";import{B as ua}from"./Button-C5gzVt4K.js";import"./index-ChsGqxH_.js";import"./_commonjsHelpers-Cpj98o6Y.js";import"./createRequiredContext-BW3-EdwI.js";import"./Icon-CsnSNslb.js";import"./text-accent-DZDDtpIt.js";import"./classNames-BUL1Zq7e.js";import"./filterAttributesPassedByRadixUIAtRuntime-B7QTVwVw.js";import"./render-icon-BT0Aq7PA.js";import"./componentNames-NXEPEzbR.js";import"./index-DdzHuZ-Y.js";import"./defaults-Clr6nbGc.js";import"./CountryFlag-DNvfZC7z.js";import"./getCountryFlagUrl-CP-PpZV_.js";import"./useMergeRefs-D_RfOOSs.js";import"./tslib.es6-BntfKcQG.js";import"./hoist-non-react-statics.cjs-C-Qo8PK8.js";import"./layout-relative.module-ChaXrVQQ.js";import"./text-centered-CznToR0o.js";import"./useHostname-Y3PlXofY.js";import"./test-utils-DCJN9LZk.js";import"./index-C7hTFOIV.js";import"./index-BPrLDK9Y.js";import"./client-C1fTPCwG.js";import"./index-BrBqb5Q4.js";import"./PortalElementProvider-CgL8vj5o.js";import"./index-C6wF8VM1.js";import"./index-QwIMrChO.js";import"./ButtonBase-D5O3MkG2.js";import"./Spinner-T-vTyHiv.js";import"./useMergeRefs-SFH7Mw4x.js";import"./index-CC6DAVyL.js";const st={title:"components/Chips/MultiSelectChips",component:h,subcomponents:{MultiSelectChipsItem:p},parameters:{layout:"padded"},args:{"aria-label":"Select skills",defaultValue:["vocabulary"],onValueChange:ra(),items:[{value:"vocabulary",label:"Vocabulary"},{value:"speaking",label:"Speaking"},{value:"listening",label:"Listening"},{value:"reading",label:"Reading"}]},beforeEach:()=>{Xe()}},y={play:async({canvasElement:i,step:t,args:n})=>{const s=u(i),o=s.getByRole("option",{name:"Vocabulary"}),l=s.getByRole("option",{name:"Speaking"}),c=s.getByRole("option",{name:"Listening"}),d=s.getByRole("option",{name:"Reading"});await t("Render chips with default value",async()=>{e(o).toHaveAttribute("aria-selected","true"),e(l).toHaveAttribute("aria-selected","false"),e(c).toHaveAttribute("aria-selected","false"),e(d).toHaveAttribute("aria-selected","false")}),await t("Click on the chip to select it",async()=>{await r.click(l),e(n.onValueChange).toHaveBeenCalledWith(["vocabulary","speaking"]),e(o).toHaveAttribute("aria-selected","true"),e(l).toHaveAttribute("aria-selected","true"),e(c).toHaveAttribute("aria-selected","false"),e(d).toHaveAttribute("aria-selected","false")}),await t("Click on the chip to deselect it",async()=>{await r.click(o),e(n.onValueChange).toHaveBeenCalledWith(["speaking"]),e(o).toHaveAttribute("aria-selected","false"),e(l).toHaveAttribute("aria-selected","true"),e(c).toHaveAttribute("aria-selected","false"),e(d).toHaveAttribute("aria-selected","false")})}};let L;const v={render:function({defaultValue:t,...n}){const[s,o]=Ye.useState(t);L=o;const l=c=>{var d;o(c),(d=n.onValueChange)==null||d.call(n,c)};return a.jsx(h,{...n,value:s,onValueChange:l})},play:async({canvasElement:i,step:t,args:n})=>{const s=u(i),o=s.getByRole("option",{name:"Vocabulary"}),l=s.getByRole("option",{name:"Speaking"}),c=s.getByRole("option",{name:"Listening"}),d=s.getByRole("option",{name:"Reading"});await t("Render chips with default value",async()=>{e(o).toHaveAttribute("aria-selected","true"),e(l).toHaveAttribute("aria-selected","false"),e(c).toHaveAttribute("aria-selected","false"),e(d).toHaveAttribute("aria-selected","false")}),await t("Click on the chip to select it",async()=>{await r.click(l),e(n.onValueChange).toHaveBeenCalledWith(["vocabulary","speaking"]),e(o).toHaveAttribute("aria-selected","true"),e(l).toHaveAttribute("aria-selected","true"),e(c).toHaveAttribute("aria-selected","false"),e(d).toHaveAttribute("aria-selected","false")}),await t("Click on the chip to deselect it",async()=>{await r.click(o),e(n.onValueChange).toHaveBeenCalledWith(["speaking"]),e(o).toHaveAttribute("aria-selected","false"),e(l).toHaveAttribute("aria-selected","true"),e(c).toHaveAttribute("aria-selected","false"),e(d).toHaveAttribute("aria-selected","false")}),await t("Change the value externally",async()=>{Xe(),await ca(async()=>{L(["vocabulary","reading"])}),e(n.onValueChange).not.toHaveBeenCalled(),e(o).toHaveAttribute("aria-selected","true"),e(l).toHaveAttribute("aria-selected","false"),e(c).toHaveAttribute("aria-selected","false"),e(d).toHaveAttribute("aria-selected","true")})}},m={args:{items:[{value:"vocabulary",label:"Vocabulary"},{value:"speaking",label:"Speaking",disabled:!0},{value:"listening",label:"Listening",disabled:!0},{value:"reading",label:"Reading"}]},play:async({canvasElement:i,step:t,args:n})=>{const s=u(i),o=s.getByRole("option",{name:"Speaking"}),l=s.getByRole("option",{name:"Vocabulary"});await t("Disabled chip must have disabled attribute",async()=>{e(o).toBeDisabled()}),await t("Disabled chip must not be selectable",async()=>{await r.click(o),e(n.onValueChange).not.toHaveBeenCalled(),e(l).toHaveAttribute("aria-selected","true")})}},b={args:{"aria-label":"Select availabilities",defaultValue:["morning"],items:[{value:"morning",label:"Morning",icon:a.jsx(V,{})},{value:"afternoon",label:"Afternoon",icon:a.jsx(Je,{})},{value:"evening",label:"Evening",icon:a.jsx(Qe,{})}]},play:async({canvasElement:i,step:t})=>{const s=u(i).getByRole("option",{name:"Morning"}),o=u(s).getByTestId("chip-icon");await t("Chip should render an icon when `icon` prop is passed",async()=>{e(o).toBeVisible()})}},w={args:{"aria-label":"Select languages to learn",defaultValue:["english"],items:[{value:"english",label:"English",counter:1247},{value:"spanish",label:"Spanish",counter:892},{value:"french",label:"French",counter:534},{value:"german",label:"German",counter:421},{value:"italian",label:"Italian",counter:287},{value:"portuguese",label:"Portuguese",counter:156}]},play:async({canvasElement:i,step:t})=>{const s=u(i).getByRole("option",{name:/^English/}),o=u(s).getByTestId("chip-counter");await t("Chip should render a counter when `counter` prop is passed",async()=>{e(o).toBeVisible(),e(o).toHaveTextContent("1247")})}},f={args:{"aria-label":"Select countries",defaultValue:["ua"],items:[{value:"ua",label:"Ukraine",countryFlagCode:"ua"},{value:"gb",label:"United Kingdom",countryFlagCode:"gb"},{value:"it",label:"Italy",countryFlagCode:"it"},{value:"es",label:"Spain",countryFlagCode:"es"},{value:"au",label:"Australia",countryFlagCode:"au"},{value:"br",label:"Brazil",countryFlagCode:"br"},{value:"eg",label:"Egypt",countryFlagCode:"eg"}]},play:async({canvasElement:i,step:t})=>{const s=u(i).getByRole("option",{name:"Ukraine"}),o=u(s).getByTestId("chip-country-flag");await t("Chip should render a flag when `flagCountryCode` prop is passed",async()=>{e(o).toBeVisible()})}},k={args:{"aria-label":"Fancy chips",items:[{value:"counter+icon",label:"Icon + Counter",icon:a.jsx(V,{}),counter:1247},{value:"counter+flag",label:"Flag + Counter",countryFlagCode:"ua",counter:1247},{value:"icon+flag",label:"Icon + Flag",icon:a.jsx(V,{}),countryFlagCode:"ua"}]},play:async({canvasElement:i})=>{const t=u(i),n=u(t.getByRole("option",{name:"Icon + Flag"}));e(n.getByTestId("chip-icon")).toBeVisible(),e(n.queryByTestId("chip-country-flag")).not.toBeInTheDocument()}},x=["2025-08-15T10:00Z","2025-08-16T12:00Z","2025-08-17T14:00Z"],C={args:{orientation:"vertical","aria-label":"Select time slots",defaultValue:x,items:x.map(i=>({value:i,label:a.jsx(ia,{weekday:"short",day:"numeric",month:"short",hour:"2-digit",minute:"2-digit",value:i}),dataset:{testid:i}}))},decorators:[i=>a.jsx("div",{style:{width:300,margin:"0 auto"},children:a.jsx(i,{})})],play:async({canvasElement:i,step:t})=>{const n=u(i),s=n.getByRole("listbox",{name:"Select time slots"}),o=n.getByTestId(x[0]),l=n.getByTestId(x[1]),c=n.getByTestId(x[2]);await t('Vertical chips should have `aria-orientation="vertical"`',async()=>{e(s).toHaveAttribute("aria-orientation","vertical")}),await t("Focus first chip",async()=>{o.focus()}),await t("Arrow down should focus second chip",async()=>{await r.keyboard("{ArrowDown}"),e(l).toHaveFocus()}),await t("Arrow down should focus third chip",async()=>{await r.keyboard("{ArrowDown}"),e(c).toHaveFocus()}),await t("Arrow down should focus first chip",async()=>{await r.keyboard("{ArrowDown}"),e(o).toHaveFocus()}),await t("Arrow up should focus third chip",async()=>{await r.keyboard("{ArrowUp}"),e(c).toHaveFocus()})}},S={render:i=>a.jsxs(g,{gap:"12",children:[a.jsx(h,{...i}),a.jsx(ua,{variant:"tertiary",size:"small",onClick:()=>alert("Show all"),children:"Show all"})]})},ea=[{value:"vocabulary",label:"Vocabulary"},{value:"speaking",label:"Speaking"},{value:"listening",label:"Listening"},{value:"reading",label:"Reading"},{value:"writing",label:"Writing"},{value:"grammar",label:"Grammar"}],da=[{value:"monday",label:"Monday"},{value:"tuesday",label:"Tuesday"},{value:"wednesday",label:"Wednesday"},{value:"thursday",label:"Thursday"},{value:"friday",label:"Friday"},{value:"saturday",label:"Saturday"},{value:"sunday",label:"Sunday"}],pa=[{value:"morning",label:"Morning (6-12)",icon:a.jsx(V,{})},{value:"afternoon",label:"Afternoon (12-18)",icon:a.jsx(Je,{})},{value:"evening",label:"Evening (18-0)",icon:a.jsx(Qe,{})},{value:"night",label:"Night (0-6)",icon:a.jsx(na,{})}],I={render:function(t){return a.jsxs(g,{direction:"column",alignItems:"stretch",gap:"64",children:[a.jsxs(g,{direction:"column",alignItems:"stretch",gap:"16",children:[a.jsx(T,{variant:"large-semibold",children:"What skills do you want to focus on?"}),a.jsx(h,{"aria-label":"Selected skills",items:ea})]}),a.jsxs(g,{direction:"column",alignItems:"stretch",gap:"16",children:[a.jsx(T,{variant:"large-semibold",children:"Which days work best for you?"}),a.jsx(h,{"aria-label":"Selected days of the week",items:da})]}),a.jsxs(g,{direction:"column",alignItems:"stretch",gap:"16",children:[a.jsx(T,{variant:"large-semibold",children:"What times of day work for you?"}),a.jsx(h,{"aria-label":"Selected times of day",items:pa})]})]})},play:async({canvasElement:i,step:t})=>{const n=u(i),s=u(n.getByRole("listbox",{name:"Selected skills"})),o=u(n.getByRole("listbox",{name:"Selected days of the week"})),l=s.getByRole("option",{name:"Vocabulary"}),c=s.getByRole("option",{name:"Speaking"}),d=s.getByRole("option",{name:"Grammar"}),aa=o.getByRole("option",{name:"Monday"});await t("Tab once to enter the component",async()=>{await r.tab(),e(l).toHaveFocus()}),await t("Next tab should focus second chip",async()=>{await r.tab(),e(aa).toHaveFocus()}),await t("Shift+Tab should focus first chips group again",async()=>{await r.tab({shift:!0}),e(l).toHaveFocus()}),await t("Right arrow should focus next chip in the group",async()=>{await r.keyboard("{ArrowRight}"),e(c).toHaveFocus()}),await t("Left arrow should focus previous chip in the group",async()=>{await r.keyboard("{ArrowLeft}"),e(l).toHaveFocus()}),await t("Left arrow should focus last chip if first chip is focused",async()=>{await r.keyboard("{ArrowLeft}"),e(d).toHaveFocus()}),await t("Right arrow should focus first chip if last chip is focused",async()=>{await r.keyboard("{ArrowRight}"),e(l).toHaveFocus()}),await t("Focus last chip",async()=>{await r.keyboard("{ArrowLeft}")}),await t("Tab to the next group",async()=>{await r.tab()}),await t("Shift+Tab to return to the first group, the last focused chip should be focused",async()=>{await r.tab({shift:!0}),e(d).toHaveFocus()})}},ga=oa.ul`
|
|
2
|
+
all: unset;
|
|
3
|
+
list-style: none;
|
|
4
|
+
display: flex;
|
|
5
|
+
flex-direction: column;
|
|
6
|
+
align-items: start;
|
|
7
|
+
gap: 8px;
|
|
8
|
+
|
|
9
|
+
> li {
|
|
10
|
+
display: contents;
|
|
11
|
+
}
|
|
12
|
+
`,j=[{id:1,title:"Building Your First Vocabulary List",skills:["vocabulary"]},{id:2,title:"Effective Speaking Practice Techniques",skills:["speaking"]},{id:3,title:"Active Listening Strategies",skills:["listening"]},{id:4,title:"Speed Reading Methods",skills:["reading"]},{id:5,title:"Grammar Rules Made Simple",skills:["grammar"]},{id:6,title:"Combining Speaking and Vocabulary",skills:["speaking","vocabulary"]},{id:7,title:"Reading Comprehension and Vocabulary Building",skills:["reading","vocabulary"]},{id:8,title:"Listening and Speaking Integration",skills:["listening","speaking"]}],A={render:function(t){const[n,s]=Ye.useState([]),o=n.length>0?j.filter(l=>n.some(c=>l.skills.includes(c))):j;return a.jsxs(g,{direction:"column",gap:"24",children:[a.jsxs(g,{direction:"column",gap:"8",children:[a.jsx(la,{tag:"h2",variant:"large",children:"Articles"}),a.jsx(h,{"aria-label":"Filter by skills","aria-controls":"results",value:n,onValueChange:s,items:ea})]}),a.jsx("section",{id:"results","aria-label":"Filtered articles",children:a.jsx(ga,{children:o.map(l=>a.jsx("li",{children:a.jsx(sa,{href:"#",children:l.title})},l.id))})})]})},play:async({canvasElement:i,step:t})=>{const s=u(i).getByRole("listbox",{name:"Filter by skills"});await t("Chips element should have aria attributes forwarded",async()=>{e(s).toHaveAttribute("aria-label","Filter by skills"),e(s).toHaveAttribute("aria-controls","results")})}},F={parameters:{a11y:{config:{rules:[{id:"color-contrast",enabled:!1}]}}},args:{"aria-label":"Select skills",items:void 0,children:a.jsxs(a.Fragment,{children:[a.jsx(B,{content:"I want to learn vocabulary",dataset:{testid:"vocabulary-tooltip"},children:a.jsx(p,{value:"vocabulary",children:"Vocabulary"})}),a.jsx(B,{content:"I want to improve my speaking skills",dataset:{testid:"speaking-tooltip"},children:a.jsx(p,{value:"speaking",children:"Speaking"})}),a.jsx(B,{content:"I want to improve my listening skills",dataset:{testid:"listening-tooltip"},children:a.jsx(p,{value:"listening",children:"Listening"})}),a.jsx(B,{content:"I want to improve my reading skills",dataset:{testid:"reading-tooltip"},children:a.jsx(p,{value:"reading",children:"Reading"})})]})},play:async({canvasElement:i,step:t})=>{const n=u(i);await t("Tab to the first chip",async()=>{await r.tab(),await E(()=>{e(n.getByTestId("vocabulary-tooltip")).toBeVisible()})}),await t("Arrow right to focus next chip",async()=>{await r.keyboard("{ArrowRight}"),await E(()=>{e(n.getByTestId("speaking-tooltip")).toBeVisible()})}),await t("Hover third chip",async()=>{await r.hover(n.getByRole("option",{name:"Listening"})),await E(()=>{e(n.getByTestId("listening-tooltip")).toBeVisible()})})}},R={tags:["!autodocs"],args:{"aria-label":"Chips states",value:["selected","selected-hover","selected-active","selected-focus"],items:void 0,children:a.jsxs(a.Fragment,{children:[a.jsx(p,{value:"rest",children:"Rest"}),a.jsx(p,{value:"focus",dsInternalSimulation:"focus",children:"Focus"}),a.jsx(p,{value:"hover",dsInternalSimulation:"hover",children:"Hover"}),a.jsx(p,{value:"active",dsInternalSimulation:"active",children:"Active"}),a.jsx(p,{value:"disabled",disabled:!0,children:"Disabled"}),a.jsx(p,{value:"selected",children:"Selected"}),a.jsx(p,{value:"selected-focus",dsInternalSimulation:"focus",children:"Selected focus"}),a.jsx(p,{value:"selected-hover",dsInternalSimulation:"hover",children:"Selected hover"}),a.jsx(p,{value:"selected-active",dsInternalSimulation:"active",children:"Selected active"})]})}},H={decorators:[i=>a.jsx("div",{style:{maxWidth:150,margin:"0 auto"},children:a.jsx(i,{})})],args:{"aria-label":"Long label",items:[{value:"long",icon:ta,label:"I'm way too long to be a chip label, I don't know what to do with myself"}]}};var M,W,D,U,G;y.parameters={...y.parameters,docs:{...(M=y.parameters)==null?void 0:M.docs,source:{originalSource:`{
|
|
13
|
+
play: async ({
|
|
14
|
+
canvasElement,
|
|
15
|
+
step,
|
|
16
|
+
args
|
|
17
|
+
}) => {
|
|
18
|
+
const canvas = within(canvasElement);
|
|
19
|
+
const vocabulary = canvas.getByRole('option', {
|
|
20
|
+
name: 'Vocabulary'
|
|
21
|
+
});
|
|
22
|
+
const speaking = canvas.getByRole('option', {
|
|
23
|
+
name: 'Speaking'
|
|
24
|
+
});
|
|
25
|
+
const listening = canvas.getByRole('option', {
|
|
26
|
+
name: 'Listening'
|
|
27
|
+
});
|
|
28
|
+
const reading = canvas.getByRole('option', {
|
|
29
|
+
name: 'Reading'
|
|
30
|
+
});
|
|
31
|
+
await step('Render chips with default value', async () => {
|
|
32
|
+
expect(vocabulary).toHaveAttribute('aria-selected', 'true');
|
|
33
|
+
expect(speaking).toHaveAttribute('aria-selected', 'false');
|
|
34
|
+
expect(listening).toHaveAttribute('aria-selected', 'false');
|
|
35
|
+
expect(reading).toHaveAttribute('aria-selected', 'false');
|
|
36
|
+
});
|
|
37
|
+
await step('Click on the chip to select it', async () => {
|
|
38
|
+
await userEvent.click(speaking);
|
|
39
|
+
expect(args.onValueChange).toHaveBeenCalledWith(['vocabulary', 'speaking']);
|
|
40
|
+
expect(vocabulary).toHaveAttribute('aria-selected', 'true');
|
|
41
|
+
expect(speaking).toHaveAttribute('aria-selected', 'true');
|
|
42
|
+
expect(listening).toHaveAttribute('aria-selected', 'false');
|
|
43
|
+
expect(reading).toHaveAttribute('aria-selected', 'false');
|
|
44
|
+
});
|
|
45
|
+
await step('Click on the chip to deselect it', async () => {
|
|
46
|
+
await userEvent.click(vocabulary);
|
|
47
|
+
expect(args.onValueChange).toHaveBeenCalledWith(['speaking']);
|
|
48
|
+
expect(vocabulary).toHaveAttribute('aria-selected', 'false');
|
|
49
|
+
expect(speaking).toHaveAttribute('aria-selected', 'true');
|
|
50
|
+
expect(listening).toHaveAttribute('aria-selected', 'false');
|
|
51
|
+
expect(reading).toHaveAttribute('aria-selected', 'false');
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}`,...(D=(W=y.parameters)==null?void 0:W.docs)==null?void 0:D.source},description:{story:"Basic usage with default values. The component manages its own state internally.",...(G=(U=y.parameters)==null?void 0:U.docs)==null?void 0:G.description}}};var q,O,_,P,z;v.parameters={...v.parameters,docs:{...(q=v.parameters)==null?void 0:q.docs,source:{originalSource:`{
|
|
55
|
+
render: function StoryRender({
|
|
56
|
+
defaultValue,
|
|
57
|
+
...args
|
|
58
|
+
}) {
|
|
59
|
+
const [value, setValue] = useState(defaultValue);
|
|
60
|
+
setValueFromPlayFunction = setValue;
|
|
61
|
+
const handleValueChange = (value: string[]) => {
|
|
62
|
+
setValue(value);
|
|
63
|
+
args.onValueChange?.(value);
|
|
64
|
+
};
|
|
65
|
+
return <MultiSelectChips {...args} value={value} onValueChange={handleValueChange} />;
|
|
66
|
+
},
|
|
67
|
+
play: async ({
|
|
68
|
+
canvasElement,
|
|
69
|
+
step,
|
|
70
|
+
args
|
|
71
|
+
}) => {
|
|
72
|
+
const canvas = within(canvasElement);
|
|
73
|
+
const vocabulary = canvas.getByRole('option', {
|
|
74
|
+
name: 'Vocabulary'
|
|
75
|
+
});
|
|
76
|
+
const speaking = canvas.getByRole('option', {
|
|
77
|
+
name: 'Speaking'
|
|
78
|
+
});
|
|
79
|
+
const listening = canvas.getByRole('option', {
|
|
80
|
+
name: 'Listening'
|
|
81
|
+
});
|
|
82
|
+
const reading = canvas.getByRole('option', {
|
|
83
|
+
name: 'Reading'
|
|
84
|
+
});
|
|
85
|
+
await step('Render chips with default value', async () => {
|
|
86
|
+
expect(vocabulary).toHaveAttribute('aria-selected', 'true');
|
|
87
|
+
expect(speaking).toHaveAttribute('aria-selected', 'false');
|
|
88
|
+
expect(listening).toHaveAttribute('aria-selected', 'false');
|
|
89
|
+
expect(reading).toHaveAttribute('aria-selected', 'false');
|
|
90
|
+
});
|
|
91
|
+
await step('Click on the chip to select it', async () => {
|
|
92
|
+
await userEvent.click(speaking);
|
|
93
|
+
expect(args.onValueChange).toHaveBeenCalledWith(['vocabulary', 'speaking']);
|
|
94
|
+
expect(vocabulary).toHaveAttribute('aria-selected', 'true');
|
|
95
|
+
expect(speaking).toHaveAttribute('aria-selected', 'true');
|
|
96
|
+
expect(listening).toHaveAttribute('aria-selected', 'false');
|
|
97
|
+
expect(reading).toHaveAttribute('aria-selected', 'false');
|
|
98
|
+
});
|
|
99
|
+
await step('Click on the chip to deselect it', async () => {
|
|
100
|
+
await userEvent.click(vocabulary);
|
|
101
|
+
expect(args.onValueChange).toHaveBeenCalledWith(['speaking']);
|
|
102
|
+
expect(vocabulary).toHaveAttribute('aria-selected', 'false');
|
|
103
|
+
expect(speaking).toHaveAttribute('aria-selected', 'true');
|
|
104
|
+
expect(listening).toHaveAttribute('aria-selected', 'false');
|
|
105
|
+
expect(reading).toHaveAttribute('aria-selected', 'false');
|
|
106
|
+
});
|
|
107
|
+
await step('Change the value externally', async () => {
|
|
108
|
+
resetAllMocks();
|
|
109
|
+
await act(async () => {
|
|
110
|
+
setValueFromPlayFunction(['vocabulary', 'reading']);
|
|
111
|
+
});
|
|
112
|
+
expect(args.onValueChange).not.toHaveBeenCalled();
|
|
113
|
+
expect(vocabulary).toHaveAttribute('aria-selected', 'true');
|
|
114
|
+
expect(speaking).toHaveAttribute('aria-selected', 'false');
|
|
115
|
+
expect(listening).toHaveAttribute('aria-selected', 'false');
|
|
116
|
+
expect(reading).toHaveAttribute('aria-selected', 'true');
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}`,...(_=(O=v.parameters)==null?void 0:O.docs)==null?void 0:_.source},description:{story:"Controlled usage where you manage the state externally.",...(z=(P=v.parameters)==null?void 0:P.docs)==null?void 0:z.description}}};var $,N,Z,K,Y;m.parameters={...m.parameters,docs:{...($=m.parameters)==null?void 0:$.docs,source:{originalSource:`{
|
|
120
|
+
args: {
|
|
121
|
+
items: [{
|
|
122
|
+
value: 'vocabulary',
|
|
123
|
+
label: 'Vocabulary'
|
|
124
|
+
}, {
|
|
125
|
+
value: 'speaking',
|
|
126
|
+
label: 'Speaking',
|
|
127
|
+
disabled: true
|
|
128
|
+
}, {
|
|
129
|
+
value: 'listening',
|
|
130
|
+
label: 'Listening',
|
|
131
|
+
disabled: true
|
|
132
|
+
}, {
|
|
133
|
+
value: 'reading',
|
|
134
|
+
label: 'Reading'
|
|
135
|
+
}]
|
|
136
|
+
},
|
|
137
|
+
play: async ({
|
|
138
|
+
canvasElement,
|
|
139
|
+
step,
|
|
140
|
+
args
|
|
141
|
+
}) => {
|
|
142
|
+
const canvas = within(canvasElement);
|
|
143
|
+
const speaking = canvas.getByRole('option', {
|
|
144
|
+
name: 'Speaking'
|
|
145
|
+
});
|
|
146
|
+
const vocabulary = canvas.getByRole('option', {
|
|
147
|
+
name: 'Vocabulary'
|
|
148
|
+
});
|
|
149
|
+
await step('Disabled chip must have disabled attribute', async () => {
|
|
150
|
+
expect(speaking).toBeDisabled();
|
|
151
|
+
});
|
|
152
|
+
await step('Disabled chip must not be selectable', async () => {
|
|
153
|
+
await userEvent.click(speaking);
|
|
154
|
+
expect(args.onValueChange).not.toHaveBeenCalled();
|
|
155
|
+
expect(vocabulary).toHaveAttribute('aria-selected', 'true');
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
}`,...(Z=(N=m.parameters)==null?void 0:N.docs)==null?void 0:Z.source},description:{story:"Some chips can be disabled to prevent user interaction.",...(Y=(K=m.parameters)==null?void 0:K.docs)==null?void 0:Y.description}}};var J,Q,X,ee,ae;b.parameters={...b.parameters,docs:{...(J=b.parameters)==null?void 0:J.docs,source:{originalSource:`{
|
|
159
|
+
args: {
|
|
160
|
+
'aria-label': 'Select availabilities',
|
|
161
|
+
defaultValue: ['morning'],
|
|
162
|
+
items: [{
|
|
163
|
+
value: 'morning',
|
|
164
|
+
label: 'Morning',
|
|
165
|
+
icon: <TokyoUIAvailability1EarlyMorning />
|
|
166
|
+
}, {
|
|
167
|
+
value: 'afternoon',
|
|
168
|
+
label: 'Afternoon',
|
|
169
|
+
icon: <TokyoUIAvailability3Day />
|
|
170
|
+
}, {
|
|
171
|
+
value: 'evening',
|
|
172
|
+
label: 'Evening',
|
|
173
|
+
icon: <TokyoUIAvailability6LateEvening />
|
|
174
|
+
}]
|
|
175
|
+
},
|
|
176
|
+
play: async ({
|
|
177
|
+
canvasElement,
|
|
178
|
+
step
|
|
179
|
+
}) => {
|
|
180
|
+
const canvas = within(canvasElement);
|
|
181
|
+
const morning = canvas.getByRole('option', {
|
|
182
|
+
name: 'Morning'
|
|
183
|
+
});
|
|
184
|
+
const morningIcon = within(morning).getByTestId('chip-icon');
|
|
185
|
+
await step('Chip should render an icon when \`icon\` prop is passed', async () => {
|
|
186
|
+
expect(morningIcon).toBeVisible();
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
}`,...(X=(Q=b.parameters)==null?void 0:Q.docs)==null?void 0:X.source},description:{story:`Chips can include icons to provide visual context and improve scannability.
|
|
190
|
+
Icons appear on the left side of the chip label and help users quickly identify options.`,...(ae=(ee=b.parameters)==null?void 0:ee.docs)==null?void 0:ae.description}}};var te,ne,ie,se,oe;w.parameters={...w.parameters,docs:{...(te=w.parameters)==null?void 0:te.docs,source:{originalSource:`{
|
|
191
|
+
args: {
|
|
192
|
+
'aria-label': 'Select languages to learn',
|
|
193
|
+
defaultValue: ['english'],
|
|
194
|
+
items: [{
|
|
195
|
+
value: 'english',
|
|
196
|
+
label: 'English',
|
|
197
|
+
counter: 1247
|
|
198
|
+
}, {
|
|
199
|
+
value: 'spanish',
|
|
200
|
+
label: 'Spanish',
|
|
201
|
+
counter: 892
|
|
202
|
+
}, {
|
|
203
|
+
value: 'french',
|
|
204
|
+
label: 'French',
|
|
205
|
+
counter: 534
|
|
206
|
+
}, {
|
|
207
|
+
value: 'german',
|
|
208
|
+
label: 'German',
|
|
209
|
+
counter: 421
|
|
210
|
+
}, {
|
|
211
|
+
value: 'italian',
|
|
212
|
+
label: 'Italian',
|
|
213
|
+
counter: 287
|
|
214
|
+
}, {
|
|
215
|
+
value: 'portuguese',
|
|
216
|
+
label: 'Portuguese',
|
|
217
|
+
counter: 156
|
|
218
|
+
}]
|
|
219
|
+
},
|
|
220
|
+
play: async ({
|
|
221
|
+
canvasElement,
|
|
222
|
+
step
|
|
223
|
+
}) => {
|
|
224
|
+
const canvas = within(canvasElement);
|
|
225
|
+
const english = canvas.getByRole('option', {
|
|
226
|
+
name: /^English/
|
|
227
|
+
});
|
|
228
|
+
const englishCounter = within(english).getByTestId('chip-counter');
|
|
229
|
+
await step('Chip should render a counter when \`counter\` prop is passed', async () => {
|
|
230
|
+
expect(englishCounter).toBeVisible();
|
|
231
|
+
expect(englishCounter).toHaveTextContent('1247');
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
}`,...(ie=(ne=w.parameters)==null?void 0:ne.docs)==null?void 0:ie.source},description:{story:`Chips can display numeric counters to show quantities, popularity, or other metrics.
|
|
235
|
+
Counters appear on the right side of the chip label and are useful for
|
|
236
|
+
showing search results count, available tutors, or similar quantitative data.`,...(oe=(se=w.parameters)==null?void 0:se.docs)==null?void 0:oe.description}}};var le,re,ce,ue,de;f.parameters={...f.parameters,docs:{...(le=f.parameters)==null?void 0:le.docs,source:{originalSource:`{
|
|
237
|
+
args: {
|
|
238
|
+
'aria-label': 'Select countries',
|
|
239
|
+
defaultValue: ['ua'],
|
|
240
|
+
items: [{
|
|
241
|
+
value: 'ua',
|
|
242
|
+
label: 'Ukraine',
|
|
243
|
+
countryFlagCode: 'ua'
|
|
244
|
+
}, {
|
|
245
|
+
value: 'gb',
|
|
246
|
+
label: 'United Kingdom',
|
|
247
|
+
countryFlagCode: 'gb'
|
|
248
|
+
}, {
|
|
249
|
+
value: 'it',
|
|
250
|
+
label: 'Italy',
|
|
251
|
+
countryFlagCode: 'it'
|
|
252
|
+
}, {
|
|
253
|
+
value: 'es',
|
|
254
|
+
label: 'Spain',
|
|
255
|
+
countryFlagCode: 'es'
|
|
256
|
+
}, {
|
|
257
|
+
value: 'au',
|
|
258
|
+
label: 'Australia',
|
|
259
|
+
countryFlagCode: 'au'
|
|
260
|
+
}, {
|
|
261
|
+
value: 'br',
|
|
262
|
+
label: 'Brazil',
|
|
263
|
+
countryFlagCode: 'br'
|
|
264
|
+
}, {
|
|
265
|
+
value: 'eg',
|
|
266
|
+
label: 'Egypt',
|
|
267
|
+
countryFlagCode: 'eg'
|
|
268
|
+
}]
|
|
269
|
+
},
|
|
270
|
+
play: async ({
|
|
271
|
+
canvasElement,
|
|
272
|
+
step
|
|
273
|
+
}) => {
|
|
274
|
+
const canvas = within(canvasElement);
|
|
275
|
+
const ua = canvas.getByRole('option', {
|
|
276
|
+
name: 'Ukraine'
|
|
277
|
+
});
|
|
278
|
+
const uaFlag = within(ua).getByTestId('chip-country-flag');
|
|
279
|
+
await step('Chip should render a flag when \`flagCountryCode\` prop is passed', async () => {
|
|
280
|
+
expect(uaFlag).toBeVisible();
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
}`,...(ce=(re=f.parameters)==null?void 0:re.docs)==null?void 0:ce.source},description:{story:`Chips can display country flags using ISO country codes.
|
|
284
|
+
Flags appear on the left side and provide instant visual recognition
|
|
285
|
+
for country or language selection interfaces.`,...(de=(ue=f.parameters)==null?void 0:ue.docs)==null?void 0:de.description}}};var pe,ge,he,ye,ve;k.parameters={...k.parameters,docs:{...(pe=k.parameters)==null?void 0:pe.docs,source:{originalSource:`{
|
|
286
|
+
args: {
|
|
287
|
+
'aria-label': 'Fancy chips',
|
|
288
|
+
items: [{
|
|
289
|
+
value: 'counter+icon',
|
|
290
|
+
label: 'Icon + Counter',
|
|
291
|
+
icon: <TokyoUIAvailability1EarlyMorning />,
|
|
292
|
+
counter: 1247
|
|
293
|
+
}, {
|
|
294
|
+
value: 'counter+flag',
|
|
295
|
+
label: 'Flag + Counter',
|
|
296
|
+
countryFlagCode: 'ua',
|
|
297
|
+
counter: 1247
|
|
298
|
+
}, {
|
|
299
|
+
value: 'icon+flag',
|
|
300
|
+
label: 'Icon + Flag',
|
|
301
|
+
icon: <TokyoUIAvailability1EarlyMorning />,
|
|
302
|
+
countryFlagCode: 'ua'
|
|
303
|
+
}]
|
|
304
|
+
},
|
|
305
|
+
play: async ({
|
|
306
|
+
canvasElement
|
|
307
|
+
}) => {
|
|
308
|
+
const canvas = within(canvasElement);
|
|
309
|
+
const chip = within(canvas.getByRole('option', {
|
|
310
|
+
name: 'Icon + Flag'
|
|
311
|
+
}));
|
|
312
|
+
expect(chip.getByTestId('chip-icon')).toBeVisible();
|
|
313
|
+
expect(chip.queryByTestId('chip-country-flag')).not.toBeInTheDocument();
|
|
314
|
+
}
|
|
315
|
+
}`,...(he=(ge=k.parameters)==null?void 0:ge.docs)==null?void 0:he.source},description:{story:`Counter can be combined with icon or flag.
|
|
316
|
+
However, if you pass icon and flag together, only icon will be displayed.`,...(ve=(ye=k.parameters)==null?void 0:ye.docs)==null?void 0:ve.description}}};var me,be,we,fe,ke;C.parameters={...C.parameters,docs:{...(me=C.parameters)==null?void 0:me.docs,source:{originalSource:`{
|
|
317
|
+
args: {
|
|
318
|
+
orientation: 'vertical',
|
|
319
|
+
'aria-label': 'Select time slots',
|
|
320
|
+
defaultValue: dates,
|
|
321
|
+
items: dates.map(date => ({
|
|
322
|
+
value: date,
|
|
323
|
+
label: <FormattedDate weekday="short" day="numeric" month="short" hour="2-digit" minute="2-digit" value={date} />,
|
|
324
|
+
dataset: {
|
|
325
|
+
testid: date
|
|
326
|
+
}
|
|
327
|
+
}))
|
|
328
|
+
},
|
|
329
|
+
decorators: [Story => <div style={{
|
|
330
|
+
width: 300,
|
|
331
|
+
margin: '0 auto'
|
|
332
|
+
}}>
|
|
333
|
+
<Story />
|
|
334
|
+
</div>],
|
|
335
|
+
play: async ({
|
|
336
|
+
canvasElement,
|
|
337
|
+
step
|
|
338
|
+
}) => {
|
|
339
|
+
const canvas = within(canvasElement);
|
|
340
|
+
const chipsList = canvas.getByRole('listbox', {
|
|
341
|
+
name: 'Select time slots'
|
|
342
|
+
});
|
|
343
|
+
const firstChip = canvas.getByTestId(dates[0]);
|
|
344
|
+
const secondChip = canvas.getByTestId(dates[1]);
|
|
345
|
+
const thirdChip = canvas.getByTestId(dates[2]);
|
|
346
|
+
await step('Vertical chips should have \`aria-orientation="vertical"\`', async () => {
|
|
347
|
+
expect(chipsList).toHaveAttribute('aria-orientation', 'vertical');
|
|
348
|
+
});
|
|
349
|
+
await step('Focus first chip', async () => {
|
|
350
|
+
firstChip.focus();
|
|
351
|
+
});
|
|
352
|
+
await step('Arrow down should focus second chip', async () => {
|
|
353
|
+
await userEvent.keyboard('{ArrowDown}');
|
|
354
|
+
expect(secondChip).toHaveFocus();
|
|
355
|
+
});
|
|
356
|
+
await step('Arrow down should focus third chip', async () => {
|
|
357
|
+
await userEvent.keyboard('{ArrowDown}');
|
|
358
|
+
expect(thirdChip).toHaveFocus();
|
|
359
|
+
});
|
|
360
|
+
await step('Arrow down should focus first chip', async () => {
|
|
361
|
+
await userEvent.keyboard('{ArrowDown}');
|
|
362
|
+
expect(firstChip).toHaveFocus();
|
|
363
|
+
});
|
|
364
|
+
await step('Arrow up should focus third chip', async () => {
|
|
365
|
+
await userEvent.keyboard('{ArrowUp}');
|
|
366
|
+
expect(thirdChip).toHaveFocus();
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
}`,...(we=(be=C.parameters)==null?void 0:be.docs)==null?void 0:we.source},description:{story:`Chips can be arranged vertically instead of horizontally.
|
|
370
|
+
This layout works well in narrow containers or when you want
|
|
371
|
+
to emphasize a vertical flow in your design.`,...(ke=(fe=C.parameters)==null?void 0:fe.docs)==null?void 0:ke.description}}};var xe,Ce,Se,Ie,Ae;S.parameters={...S.parameters,docs:{...(xe=S.parameters)==null?void 0:xe.docs,source:{originalSource:`{
|
|
372
|
+
render: args => <LayoutFlex gap="12">
|
|
373
|
+
<MultiSelectChips {...args} />
|
|
374
|
+
<Button variant="tertiary" size="small" onClick={() => alert('Show all')}>
|
|
375
|
+
Show all
|
|
376
|
+
</Button>
|
|
377
|
+
</LayoutFlex>
|
|
378
|
+
}`,...(Se=(Ce=S.parameters)==null?void 0:Ce.docs)==null?void 0:Se.source},description:{story:"Chips are intended only for selection. To assign secondary actions, combine chips with a button.",...(Ae=(Ie=S.parameters)==null?void 0:Ie.docs)==null?void 0:Ae.description}}};var Fe,He,Be,Re,Ve;I.parameters={...I.parameters,docs:{...(Fe=I.parameters)==null?void 0:Fe.docs,source:{originalSource:`{
|
|
379
|
+
// unused \`args\` makes story source code readable 🤷♂️
|
|
380
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
381
|
+
render: function StoryRender(_args) {
|
|
382
|
+
return <LayoutFlex direction="column" alignItems="stretch" gap="64">
|
|
383
|
+
<LayoutFlex direction="column" alignItems="stretch" gap="16">
|
|
384
|
+
<Text variant="large-semibold">What skills do you want to focus on?</Text>
|
|
385
|
+
<MultiSelectChips aria-label="Selected skills" items={skillsItems} />
|
|
386
|
+
</LayoutFlex>
|
|
387
|
+
|
|
388
|
+
<LayoutFlex direction="column" alignItems="stretch" gap="16">
|
|
389
|
+
<Text variant="large-semibold">Which days work best for you?</Text>
|
|
390
|
+
<MultiSelectChips aria-label="Selected days of the week" items={daysOfWeekItems} />
|
|
391
|
+
</LayoutFlex>
|
|
392
|
+
|
|
393
|
+
<LayoutFlex direction="column" alignItems="stretch" gap="16">
|
|
394
|
+
<Text variant="large-semibold">What times of day work for you?</Text>
|
|
395
|
+
<MultiSelectChips aria-label="Selected times of day" items={timeOfDayItems} />
|
|
396
|
+
</LayoutFlex>
|
|
397
|
+
</LayoutFlex>;
|
|
398
|
+
},
|
|
399
|
+
play: async ({
|
|
400
|
+
canvasElement,
|
|
401
|
+
step
|
|
402
|
+
}) => {
|
|
403
|
+
const canvas = within(canvasElement);
|
|
404
|
+
const skillsChips = within(canvas.getByRole('listbox', {
|
|
405
|
+
name: 'Selected skills'
|
|
406
|
+
}));
|
|
407
|
+
const daysChips = within(canvas.getByRole('listbox', {
|
|
408
|
+
name: 'Selected days of the week'
|
|
409
|
+
}));
|
|
410
|
+
const skillVocabulary = skillsChips.getByRole('option', {
|
|
411
|
+
name: 'Vocabulary'
|
|
412
|
+
});
|
|
413
|
+
const skillSpeaking = skillsChips.getByRole('option', {
|
|
414
|
+
name: 'Speaking'
|
|
415
|
+
});
|
|
416
|
+
const skillGrammar = skillsChips.getByRole('option', {
|
|
417
|
+
name: 'Grammar'
|
|
418
|
+
});
|
|
419
|
+
const dayMonday = daysChips.getByRole('option', {
|
|
420
|
+
name: 'Monday'
|
|
421
|
+
});
|
|
422
|
+
await step('Tab once to enter the component', async () => {
|
|
423
|
+
await userEvent.tab();
|
|
424
|
+
expect(skillVocabulary).toHaveFocus();
|
|
425
|
+
});
|
|
426
|
+
await step('Next tab should focus second chip', async () => {
|
|
427
|
+
await userEvent.tab();
|
|
428
|
+
expect(dayMonday).toHaveFocus();
|
|
429
|
+
});
|
|
430
|
+
await step('Shift+Tab should focus first chips group again', async () => {
|
|
431
|
+
await userEvent.tab({
|
|
432
|
+
shift: true
|
|
433
|
+
});
|
|
434
|
+
expect(skillVocabulary).toHaveFocus();
|
|
435
|
+
});
|
|
436
|
+
await step('Right arrow should focus next chip in the group', async () => {
|
|
437
|
+
await userEvent.keyboard('{ArrowRight}');
|
|
438
|
+
expect(skillSpeaking).toHaveFocus();
|
|
439
|
+
});
|
|
440
|
+
await step('Left arrow should focus previous chip in the group', async () => {
|
|
441
|
+
await userEvent.keyboard('{ArrowLeft}');
|
|
442
|
+
expect(skillVocabulary).toHaveFocus();
|
|
443
|
+
});
|
|
444
|
+
await step('Left arrow should focus last chip if first chip is focused', async () => {
|
|
445
|
+
await userEvent.keyboard('{ArrowLeft}');
|
|
446
|
+
expect(skillGrammar).toHaveFocus();
|
|
447
|
+
});
|
|
448
|
+
await step('Right arrow should focus first chip if last chip is focused', async () => {
|
|
449
|
+
await userEvent.keyboard('{ArrowRight}');
|
|
450
|
+
expect(skillVocabulary).toHaveFocus();
|
|
451
|
+
});
|
|
452
|
+
await step('Focus last chip', async () => {
|
|
453
|
+
await userEvent.keyboard('{ArrowLeft}');
|
|
454
|
+
});
|
|
455
|
+
await step('Tab to the next group', async () => {
|
|
456
|
+
await userEvent.tab();
|
|
457
|
+
});
|
|
458
|
+
await step('Shift+Tab to return to the first group, the last focused chip should be focused', async () => {
|
|
459
|
+
await userEvent.tab({
|
|
460
|
+
shift: true
|
|
461
|
+
});
|
|
462
|
+
expect(skillGrammar).toHaveFocus();
|
|
463
|
+
});
|
|
464
|
+
}
|
|
465
|
+
}`,...(Be=(He=I.parameters)==null?void 0:He.docs)==null?void 0:Be.source},description:{story:`The **roving tabindex pattern** is a keyboard navigation technique for grouped interactive elements. Instead of tabbing through each item individually, users:
|
|
466
|
+
|
|
467
|
+
- **Tab once** to enter the component
|
|
468
|
+
- **Use arrow keys** to navigate between items within the group
|
|
469
|
+
- **Tab again** to exit to the next component
|
|
470
|
+
|
|
471
|
+
This creates a smooth, efficient navigation experience - especially useful for components like chip groups where you want to browse options quickly without getting stuck in a "tab trap."
|
|
472
|
+
|
|
473
|
+
{@link https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/#kbd_roving_tabindex Learn more about roving tabindex pattern}`,...(Ve=(Re=I.parameters)==null?void 0:Re.docs)==null?void 0:Ve.description}}};var Te,Ee,Le,je,Me;A.parameters={...A.parameters,docs:{...(Te=A.parameters)==null?void 0:Te.docs,source:{originalSource:`{
|
|
474
|
+
// unused \`args\` makes story source code readable 🤷♂️
|
|
475
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
476
|
+
render: function StoryRender(_args) {
|
|
477
|
+
const [selectedSkills, setSelectedSkills] = useState<string[]>([]);
|
|
478
|
+
const filteredArticles = selectedSkills.length > 0 ? tutorialArticles.filter(article => selectedSkills.some(skill => article.skills.includes(skill))) : tutorialArticles;
|
|
479
|
+
return <LayoutFlex direction="column" gap="24">
|
|
480
|
+
<LayoutFlex direction="column" gap="8">
|
|
481
|
+
<Heading tag="h2" variant="large">
|
|
482
|
+
Articles
|
|
483
|
+
</Heading>
|
|
484
|
+
<MultiSelectChips aria-label="Filter by skills" aria-controls="results" value={selectedSkills} onValueChange={setSelectedSkills} items={skillsItems} />
|
|
485
|
+
</LayoutFlex>
|
|
486
|
+
<section id="results" aria-label="Filtered articles">
|
|
487
|
+
<List>
|
|
488
|
+
{filteredArticles.map(article => <li key={article.id}>
|
|
489
|
+
<Link href="#">{article.title}</Link>
|
|
490
|
+
</li>)}
|
|
491
|
+
</List>
|
|
492
|
+
</section>
|
|
493
|
+
</LayoutFlex>;
|
|
494
|
+
},
|
|
495
|
+
play: async ({
|
|
496
|
+
canvasElement,
|
|
497
|
+
step
|
|
498
|
+
}) => {
|
|
499
|
+
const canvas = within(canvasElement);
|
|
500
|
+
const chipsList = canvas.getByRole('listbox', {
|
|
501
|
+
name: 'Filter by skills'
|
|
502
|
+
});
|
|
503
|
+
await step('Chips element should have aria attributes forwarded', async () => {
|
|
504
|
+
expect(chipsList).toHaveAttribute('aria-label', 'Filter by skills');
|
|
505
|
+
expect(chipsList).toHaveAttribute('aria-controls', 'results');
|
|
506
|
+
});
|
|
507
|
+
}
|
|
508
|
+
}`,...(Le=(Ee=A.parameters)==null?void 0:Ee.docs)==null?void 0:Le.source},description:{story:"For accessibility, always provide an `aria-label` to describe the chip group's purpose.\nIf the chips control other elements on the page, use `aria-controls` with the target element's ID.",...(Me=(je=A.parameters)==null?void 0:je.docs)==null?void 0:Me.description}}};var We,De,Ue,Ge,qe;F.parameters={...F.parameters,docs:{...(We=F.parameters)==null?void 0:We.docs,source:{originalSource:`{
|
|
509
|
+
parameters: {
|
|
510
|
+
a11y: {
|
|
511
|
+
config: {
|
|
512
|
+
rules: [{
|
|
513
|
+
id: 'color-contrast',
|
|
514
|
+
enabled: false
|
|
515
|
+
}]
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
},
|
|
519
|
+
args: {
|
|
520
|
+
'aria-label': 'Select skills',
|
|
521
|
+
items: undefined,
|
|
522
|
+
children: <>
|
|
523
|
+
<Tooltip content="I want to learn vocabulary" dataset={{
|
|
524
|
+
testid: 'vocabulary-tooltip'
|
|
525
|
+
}}>
|
|
526
|
+
<MultiSelectChipsItem value="vocabulary">Vocabulary</MultiSelectChipsItem>
|
|
527
|
+
</Tooltip>
|
|
528
|
+
<Tooltip content="I want to improve my speaking skills" dataset={{
|
|
529
|
+
testid: 'speaking-tooltip'
|
|
530
|
+
}}>
|
|
531
|
+
<MultiSelectChipsItem value="speaking">Speaking</MultiSelectChipsItem>
|
|
532
|
+
</Tooltip>
|
|
533
|
+
<Tooltip content="I want to improve my listening skills" dataset={{
|
|
534
|
+
testid: 'listening-tooltip'
|
|
535
|
+
}}>
|
|
536
|
+
<MultiSelectChipsItem value="listening">Listening</MultiSelectChipsItem>
|
|
537
|
+
</Tooltip>
|
|
538
|
+
<Tooltip content="I want to improve my reading skills" dataset={{
|
|
539
|
+
testid: 'reading-tooltip'
|
|
540
|
+
}}>
|
|
541
|
+
<MultiSelectChipsItem value="reading">Reading</MultiSelectChipsItem>
|
|
542
|
+
</Tooltip>
|
|
543
|
+
</>
|
|
544
|
+
},
|
|
545
|
+
play: async ({
|
|
546
|
+
canvasElement,
|
|
547
|
+
step
|
|
548
|
+
}) => {
|
|
549
|
+
const canvas = within(canvasElement);
|
|
550
|
+
await step('Tab to the first chip', async () => {
|
|
551
|
+
await userEvent.tab();
|
|
552
|
+
await waitFor(() => {
|
|
553
|
+
expect(canvas.getByTestId('vocabulary-tooltip')).toBeVisible();
|
|
554
|
+
});
|
|
555
|
+
});
|
|
556
|
+
await step('Arrow right to focus next chip', async () => {
|
|
557
|
+
await userEvent.keyboard('{ArrowRight}');
|
|
558
|
+
await waitFor(() => {
|
|
559
|
+
expect(canvas.getByTestId('speaking-tooltip')).toBeVisible();
|
|
560
|
+
});
|
|
561
|
+
});
|
|
562
|
+
await step('Hover third chip', async () => {
|
|
563
|
+
await userEvent.hover(canvas.getByRole('option', {
|
|
564
|
+
name: 'Listening'
|
|
565
|
+
}));
|
|
566
|
+
await waitFor(() => {
|
|
567
|
+
expect(canvas.getByTestId('listening-tooltip')).toBeVisible();
|
|
568
|
+
});
|
|
569
|
+
});
|
|
570
|
+
}
|
|
571
|
+
}`,...(Ue=(De=F.parameters)==null?void 0:De.docs)==null?void 0:Ue.source},description:{story:"If you need to wrap individual chips in a component like [\\<Tooltip/>](/docs/components-tooltip--docs),\nyou can use render `<MultiSelectChipsItem/>` as children.",...(qe=(Ge=F.parameters)==null?void 0:Ge.docs)==null?void 0:qe.description}}};var Oe,_e,Pe;R.parameters={...R.parameters,docs:{...(Oe=R.parameters)==null?void 0:Oe.docs,source:{originalSource:`{
|
|
572
|
+
tags: ['!autodocs'],
|
|
573
|
+
args: {
|
|
574
|
+
'aria-label': 'Chips states',
|
|
575
|
+
value: ['selected', 'selected-hover', 'selected-active', 'selected-focus'],
|
|
576
|
+
items: undefined,
|
|
577
|
+
children: <>
|
|
578
|
+
<MultiSelectChipsItem value="rest">Rest</MultiSelectChipsItem>
|
|
579
|
+
<MultiSelectChipsItem value="focus" dsInternalSimulation="focus">
|
|
580
|
+
Focus
|
|
581
|
+
</MultiSelectChipsItem>
|
|
582
|
+
<MultiSelectChipsItem value="hover" dsInternalSimulation="hover">
|
|
583
|
+
Hover
|
|
584
|
+
</MultiSelectChipsItem>
|
|
585
|
+
<MultiSelectChipsItem value="active" dsInternalSimulation="active">
|
|
586
|
+
Active
|
|
587
|
+
</MultiSelectChipsItem>
|
|
588
|
+
<MultiSelectChipsItem value="disabled" disabled>
|
|
589
|
+
Disabled
|
|
590
|
+
</MultiSelectChipsItem>
|
|
591
|
+
<MultiSelectChipsItem value="selected">Selected</MultiSelectChipsItem>
|
|
592
|
+
<MultiSelectChipsItem value="selected-focus" dsInternalSimulation="focus">
|
|
593
|
+
Selected focus
|
|
594
|
+
</MultiSelectChipsItem>
|
|
595
|
+
<MultiSelectChipsItem value="selected-hover" dsInternalSimulation="hover">
|
|
596
|
+
Selected hover
|
|
597
|
+
</MultiSelectChipsItem>
|
|
598
|
+
<MultiSelectChipsItem value="selected-active" dsInternalSimulation="active">
|
|
599
|
+
Selected active
|
|
600
|
+
</MultiSelectChipsItem>
|
|
601
|
+
</>
|
|
602
|
+
}
|
|
603
|
+
}`,...(Pe=(_e=R.parameters)==null?void 0:_e.docs)==null?void 0:Pe.source}}};var ze,$e,Ne,Ze,Ke;H.parameters={...H.parameters,docs:{...(ze=H.parameters)==null?void 0:ze.docs,source:{originalSource:`{
|
|
604
|
+
decorators: [Story => <div style={{
|
|
605
|
+
maxWidth: 150,
|
|
606
|
+
margin: '0 auto'
|
|
607
|
+
}}>
|
|
608
|
+
<Story />
|
|
609
|
+
</div>],
|
|
610
|
+
args: {
|
|
611
|
+
'aria-label': 'Long label',
|
|
612
|
+
items: [{
|
|
613
|
+
value: 'long',
|
|
614
|
+
icon: TokyoUIEmojiFrowning,
|
|
615
|
+
label: "I'm way too long to be a chip label, I don't know what to do with myself"
|
|
616
|
+
}]
|
|
617
|
+
}
|
|
618
|
+
}`,...(Ne=($e=H.parameters)==null?void 0:$e.docs)==null?void 0:Ne.source},description:{story:"Please, don't use long labels for chips.",...(Ke=(Ze=H.parameters)==null?void 0:Ze.docs)==null?void 0:Ke.description}}};const ot=["Uncontrolled","Controlled","Disabled","WithIcons","WithCounter","WithFlags","CombiningCounterWithIconOrFlag","Vertical","CombinationWithButton","RovingTabindex","Accessibility","WithTooltips","States","LongLabel"];export{A as Accessibility,S as CombinationWithButton,k as CombiningCounterWithIconOrFlag,v as Controlled,m as Disabled,H as LongLabel,I as RovingTabindex,R as States,y as Uncontrolled,C as Vertical,w as WithCounter,f as WithFlags,b as WithIcons,F as WithTooltips,ot as __namedExportsOrder,st as default};
|