@servicetitan/anvil2 3.4.2 → 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/CHANGELOG.md +46 -0
- package/dist/{AiMark-BLBxE1Oj.js → AiMark-voHPSerQ.js} +27 -12
- package/dist/{AiMark-BLBxE1Oj.js.map → AiMark-voHPSerQ.js.map} +1 -1
- package/dist/AiMark.js +1 -1
- package/dist/{Alert-nwycCmiL.js → Alert-CPe0yh6A.js} +3 -3
- package/dist/{Alert-nwycCmiL.js.map → Alert-CPe0yh6A.js.map} +1 -1
- package/dist/Alert.js +1 -1
- package/dist/{Announcement-4w6XjLcB.js → Announcement-DU0J4111.js} +3 -3
- package/dist/{Announcement-4w6XjLcB.js.map → Announcement-DU0J4111.js.map} +1 -1
- package/dist/Announcement.js +1 -1
- package/dist/{AnvilProvider-BQsp0VPq.js → AnvilProvider-b3gvW6Md.js} +4 -39
- package/dist/AnvilProvider-b3gvW6Md.js.map +1 -0
- package/dist/AnvilProvider.js +1 -1
- package/dist/{Breadcrumbs-DbV4ld8s.js → Breadcrumbs-VzOM2nBU.js} +4 -4
- package/dist/{Breadcrumbs-DbV4ld8s.js.map → Breadcrumbs-VzOM2nBU.js.map} +1 -1
- package/dist/Breadcrumbs.js +1 -1
- package/dist/{Button-CjeF1Agb.js → Button-BNzCI47m.js} +2 -2
- package/dist/{Button-CjeF1Agb.js.map → Button-BNzCI47m.js.map} +1 -1
- package/dist/Button.js +1 -1
- package/dist/{ButtonLink-BSReBbc3.js → ButtonLink-PlW08u41.js} +2 -2
- package/dist/{ButtonLink-BSReBbc3.js.map → ButtonLink-PlW08u41.js.map} +1 -1
- package/dist/ButtonLink.js +1 -1
- package/dist/{ButtonToggle-CnOsM7-u.js → ButtonToggle-DBGc7dIn.js} +2 -2
- package/dist/{ButtonToggle-CnOsM7-u.js.map → ButtonToggle-DBGc7dIn.js.map} +1 -1
- package/dist/ButtonToggle.js +1 -1
- package/dist/{Calendar-DqQczZgw.js → Calendar-CekTYzdT.js} +8 -3
- package/dist/Calendar-CekTYzdT.js.map +1 -0
- package/dist/{Calendar-B6DqiqoX.js → Calendar-MRUB0XU7.js} +2 -2
- package/dist/Calendar-MRUB0XU7.js.map +1 -0
- package/dist/Calendar.js +2 -2
- package/dist/{Checkbox-sgpRzk6a.js → Checkbox-C3rtd-Xe.js} +4 -4
- package/dist/{Checkbox-sgpRzk6a.js.map → Checkbox-C3rtd-Xe.js.map} +1 -1
- package/dist/{Checkbox-BkjA8p3F.js → Checkbox-zz9TyZWn.js} +2 -2
- package/dist/{Checkbox-BkjA8p3F.js.map → Checkbox-zz9TyZWn.js.map} +1 -1
- package/dist/Checkbox.js +1 -1
- package/dist/{Chip-DvmMbb5g.js → Chip-CxgryK86.js} +3 -3
- package/dist/{Chip-DvmMbb5g.js.map → Chip-CxgryK86.js.map} +1 -1
- package/dist/Chip.js +1 -1
- package/dist/Combobox.js +1 -1
- package/dist/{DataTable-DUTfew48.js → DataTable-BpqLvU92.js} +23 -9
- package/dist/{DataTable-DUTfew48.js.map → DataTable-BpqLvU92.js.map} +1 -1
- package/dist/{DateFieldRange-CjjqTRNu.js → DateFieldRange-CP7QgS6P.js} +5 -5
- package/dist/{DateFieldRange-CjjqTRNu.js.map → DateFieldRange-CP7QgS6P.js.map} +1 -1
- package/dist/DateFieldRange.js +1 -1
- package/dist/{DateFieldSingle-dSrWge6Y.js → DateFieldSingle-CgMPTi1v.js} +5 -5
- package/dist/{DateFieldSingle-dSrWge6Y.js.map → DateFieldSingle-CgMPTi1v.js.map} +1 -1
- package/dist/DateFieldSingle.js +1 -1
- package/dist/{DateFieldYearless-CuYYEkOz.js → DateFieldYearless-DYjvqxRb.js} +4 -4
- package/dist/{DateFieldYearless-CuYYEkOz.js.map → DateFieldYearless-DYjvqxRb.js.map} +1 -1
- package/dist/DateFieldYearless.js +1 -1
- package/dist/{DateFieldYearlessRange-CHj9OXZK.js → DateFieldYearlessRange-lQdJGOaS.js} +4 -4
- package/dist/DateFieldYearlessRange-lQdJGOaS.js.map +1 -0
- package/dist/DateFieldYearlessRange.js +1 -1
- package/dist/{DaysOfTheWeek-DXzW04I1.js → DaysOfTheWeek-Ci-SKebP.js} +3 -3
- package/dist/{DaysOfTheWeek-DXzW04I1.js.map → DaysOfTheWeek-Ci-SKebP.js.map} +1 -1
- package/dist/DaysOfTheWeek.js +1 -1
- package/dist/{Details-Xb49PJ-r.js → Details-DkteVZbk.js} +2 -2
- package/dist/{Details-Xb49PJ-r.js.map → Details-DkteVZbk.js.map} +1 -1
- package/dist/Details.js +1 -1
- package/dist/{Dialog-l0UzKEU0.js → Dialog-BxulNN8n.js} +22 -22
- package/dist/{Dialog-l0UzKEU0.js.map → Dialog-BxulNN8n.js.map} +1 -1
- package/dist/Dialog.css +32 -31
- package/dist/Dialog.js +1 -1
- package/dist/{DialogCancelButton-CIGGMaOE.js → DialogCancelButton-DmSUPuCR.js} +2 -2
- package/dist/{DialogCancelButton-CIGGMaOE.js.map → DialogCancelButton-DmSUPuCR.js.map} +1 -1
- package/dist/Dnd.js +2 -2
- package/dist/{DndHandleButton-B_Geiaeb.js → DndHandleButton-Ck5nc8w2.js} +2 -2
- package/dist/{DndHandleButton-B_Geiaeb.js.map → DndHandleButton-Ck5nc8w2.js.map} +1 -1
- package/dist/DndSort.js +2 -2
- package/dist/{Drawer-DaE-1UgB.js → Drawer-_spmOgwH.js} +5 -5
- package/dist/{Drawer-DaE-1UgB.js.map → Drawer-_spmOgwH.js.map} +1 -1
- package/dist/Drawer.js +1 -1
- package/dist/DrillDown.js +1 -1
- package/dist/{EditCard-2Qt5-k2B.js → EditCard-ZpF032WP.js} +4 -4
- package/dist/{EditCard-2Qt5-k2B.js.map → EditCard-ZpF032WP.js.map} +1 -1
- package/dist/EditCard.js +1 -1
- package/dist/{FieldLabel-BgVl8hnF.js → FieldLabel-Cm5A1Jcx.js} +3 -3
- package/dist/{FieldLabel-BgVl8hnF.js.map → FieldLabel-Cm5A1Jcx.js.map} +1 -1
- package/dist/FieldLabel.js +1 -1
- package/dist/{FilterBar-CryC93pB.js → FilterBar-CvyMubuw.js} +29 -8
- package/dist/FilterBar-CvyMubuw.js.map +1 -0
- package/dist/FilterBar.js +1 -1
- package/dist/Icon-B4uCvMU9.js +107 -0
- package/dist/Icon-B4uCvMU9.js.map +1 -0
- package/dist/Icon.js +1 -1
- package/dist/{InputMask-Bc0nDHzb.js → InputMask-CX6XiOOm.js} +3 -3
- package/dist/{InputMask-Bc0nDHzb.js.map → InputMask-CX6XiOOm.js.map} +1 -1
- package/dist/InputMask.js +1 -1
- package/dist/{InteractiveCard-CyUR_VLW.js → InteractiveCard-C0g5PxB6.js} +5 -2
- package/dist/InteractiveCard-C0g5PxB6.js.map +1 -0
- package/dist/InteractiveCard.js +1 -1
- package/dist/{Link-DI4eVVdI.js → Link-C7dtI5K6.js} +2 -2
- package/dist/{Link-DI4eVVdI.js.map → Link-C7dtI5K6.js.map} +1 -1
- package/dist/Link.js +1 -1
- package/dist/LinkButton-C0wps8r1.js.map +1 -1
- package/dist/{ListView-Blmts4nT.js → ListView-DpveXOsN.js} +2 -2
- package/dist/{ListView-Blmts4nT.js.map → ListView-DpveXOsN.js.map} +1 -1
- package/dist/ListView.js +1 -1
- package/dist/{Listbox-DkzL11gb.js → Listbox-Cdwaofd2.js} +21 -21
- package/dist/Listbox-Cdwaofd2.js.map +1 -0
- package/dist/Listbox.js +1 -1
- package/dist/{Menu-BAya9Qnd.js → Menu-DmEXQLXt.js} +3 -3
- package/dist/{Menu-BAya9Qnd.js.map → Menu-DmEXQLXt.js.map} +1 -1
- package/dist/Menu.js +1 -1
- package/dist/{MenuFooter-BZTsAaOz.js → MenuFooter-Ck9L599M.js} +2 -2
- package/dist/{MenuFooter-BZTsAaOz.js.map → MenuFooter-Ck9L599M.js.map} +1 -1
- package/dist/MultiSelectField.js +1 -1
- package/dist/{MultiSelectFieldSync-CSIU43BR.js → MultiSelectFieldSync-BHST0FEe.js} +14 -12
- package/dist/MultiSelectFieldSync-BHST0FEe.js.map +1 -0
- package/dist/MultiSelectMenu.js +1 -1
- package/dist/{MultiSelectMenuSync-CkjXjnXp.js → MultiSelectMenuSync-BaKxbMLu.js} +24 -11
- package/dist/MultiSelectMenuSync-BaKxbMLu.js.map +1 -0
- package/dist/{NumberField-Dp5tJkMC.js → NumberField-CjC6KHKl.js} +5 -5
- package/dist/NumberField-CjC6KHKl.js.map +1 -0
- package/dist/NumberField.js +1 -1
- package/dist/Overflow.js.map +1 -1
- package/dist/{Page-gMaR1lF5.js → Page-BreBQ3pG.js} +12 -12
- package/dist/{Page-gMaR1lF5.js.map → Page-BreBQ3pG.js.map} +1 -1
- package/dist/Page.js +1 -1
- package/dist/{Pagination-CfCUqyzB.js → Pagination-CmqAut6y.js} +5 -5
- package/dist/{Pagination-CfCUqyzB.js.map → Pagination-CmqAut6y.js.map} +1 -1
- package/dist/Pagination.js +1 -1
- package/dist/{Popover-80nFjp83.js → Popover-CdRuNv3C.js} +3 -3
- package/dist/{Popover-80nFjp83.js.map → Popover-CdRuNv3C.js.map} +1 -1
- package/dist/Popover.js +1 -1
- package/dist/{ProgressBar-3TSTcvbU.js → ProgressBar-065vjsQ0.js} +3 -3
- package/dist/{ProgressBar-3TSTcvbU.js.map → ProgressBar-065vjsQ0.js.map} +1 -1
- package/dist/ProgressBar.js +1 -1
- package/dist/{Radio-Dk7dH0oM.js → Radio-D9w_-JYw.js} +2 -2
- package/dist/{Radio-Dk7dH0oM.js.map → Radio-D9w_-JYw.js.map} +1 -1
- package/dist/{Radio-B30z0TdG.js → Radio-dyLcVmUw.js} +4 -4
- package/dist/{Radio-B30z0TdG.js.map → Radio-dyLcVmUw.js.map} +1 -1
- package/dist/Radio.js +1 -1
- package/dist/{RichTextEditor-DLIh_mzJ.js → RichTextEditor-byoMZaJy.js} +14172 -7454
- package/dist/RichTextEditor-byoMZaJy.js.map +1 -0
- package/dist/RichTextEditor.css +42 -40
- package/dist/RichTextEditor.js +1 -1
- package/dist/{SavedFiltersButton-Cd_cOR1F.js → SavedFiltersButton-DlzfvW03.js} +10 -10
- package/dist/{SavedFiltersButton-Cd_cOR1F.js.map → SavedFiltersButton-DlzfvW03.js.map} +1 -1
- package/dist/SavedFiltersButton.js +1 -1
- package/dist/{SearchField-BfOMhmIc.js → SearchField-B7fIOJf-.js} +2 -2
- package/dist/{SearchField-BfOMhmIc.js.map → SearchField-B7fIOJf-.js.map} +1 -1
- package/dist/{SearchField-D9ZMOcbo.js → SearchField-X4B7f23E.js} +3 -3
- package/dist/{SearchField-D9ZMOcbo.js.map → SearchField-X4B7f23E.js.map} +1 -1
- package/dist/SearchField.js +1 -1
- package/dist/{SegmentedControl-fBjqazBR.js → SegmentedControl-Be6jCglV.js} +2 -2
- package/dist/{SegmentedControl-fBjqazBR.js.map → SegmentedControl-Be6jCglV.js.map} +1 -1
- package/dist/SegmentedControl.js +1 -1
- package/dist/{SelectCard-BXXKD4Iy.js → SelectCard-CMSG_ba1.js} +4 -4
- package/dist/{SelectCard-BXXKD4Iy.js.map → SelectCard-CMSG_ba1.js.map} +1 -1
- package/dist/SelectCard.js +1 -1
- package/dist/SelectField.js +1 -1
- package/dist/{SelectFieldLabel-Dfdv0DQp.js → SelectFieldLabel-dKVBaki2.js} +2 -2
- package/dist/{SelectFieldLabel-Dfdv0DQp.js.map → SelectFieldLabel-dKVBaki2.js.map} +1 -1
- package/dist/{SelectFieldSync-BQIbfdka.js → SelectFieldSync-BqL3zlbZ.js} +8 -8
- package/dist/SelectFieldSync-BqL3zlbZ.js.map +1 -0
- package/dist/SelectMenu.js +1 -1
- package/dist/{SelectMenuSync-nFfKdEiV.js → SelectMenuSync-BRvi9YTw.js} +6 -6
- package/dist/{SelectMenuSync-nFfKdEiV.js.map → SelectMenuSync-BRvi9YTw.js.map} +1 -1
- package/dist/{SelectOptions-BjJ0JoQX.js → SelectOptions-LUHWLYgJ.js} +2 -2
- package/dist/{SelectOptions-BjJ0JoQX.js.map → SelectOptions-LUHWLYgJ.js.map} +1 -1
- package/dist/{SelectTrigger-BgzPogSC.js → SelectTrigger-APxYfL3V.js} +3 -3
- package/dist/SelectTrigger-APxYfL3V.js.map +1 -0
- package/dist/SelectTrigger.js +1 -1
- package/dist/{SelectTriggerBase-CnyyaWl-.js → SelectTriggerBase-lYieONTb.js} +4 -4
- package/dist/{SelectTriggerBase-CnyyaWl-.js.map → SelectTriggerBase-lYieONTb.js.map} +1 -1
- package/dist/{SideNav-BFkruKa4.js → SideNav-DoxX8Vi-.js} +6 -3
- package/dist/{SideNav-BFkruKa4.js.map → SideNav-DoxX8Vi-.js.map} +1 -1
- package/dist/SideNav.js +1 -1
- package/dist/{Stepper-Bp5XkY2q.js → Stepper-CvaR7OoT.js} +3 -3
- package/dist/{Stepper-Bp5XkY2q.js.map → Stepper-CvaR7OoT.js.map} +1 -1
- package/dist/Stepper.js +1 -1
- package/dist/{Switch-BlIZayq6.js → Switch-Bm3qqjd6.js} +3 -3
- package/dist/{Switch-BlIZayq6.js.map → Switch-Bm3qqjd6.js.map} +1 -1
- package/dist/Switch.js +1 -1
- package/dist/{Tab-FOIali7o.js → Tab-Cy4G562A.js} +2 -2
- package/dist/{Tab-FOIali7o.js.map → Tab-Cy4G562A.js.map} +1 -1
- package/dist/Tab.js +1 -1
- package/dist/Table.js +1 -1
- package/dist/{Text-LXIB1J3C.js → Text-mDcQHC2U.js} +2 -2
- package/dist/{Text-LXIB1J3C.js.map → Text-mDcQHC2U.js.map} +1 -1
- package/dist/Text.js +1 -1
- package/dist/{TextField-Syedf1LW.js → TextField-CUVsDfWo.js} +3 -3
- package/dist/{TextField-Syedf1LW.js.map → TextField-CUVsDfWo.js.map} +1 -1
- package/dist/{TextField-fE3_0jQJ.js → TextField-WQTlqKso.js} +2 -2
- package/dist/TextField-WQTlqKso.js.map +1 -0
- package/dist/TextField.js +1 -1
- package/dist/{Textarea-CIAHsoWa.js → Textarea-CW3KGuB9.js} +3 -3
- package/dist/{Textarea-CIAHsoWa.js.map → Textarea-CW3KGuB9.js.map} +1 -1
- package/dist/Textarea.js +1 -1
- package/dist/{TimeField-B3yhtYZm.js → TimeField-JA3gXyS7.js} +5 -5
- package/dist/{TimeField-B3yhtYZm.js.map → TimeField-JA3gXyS7.js.map} +1 -1
- package/dist/TimeField.js +1 -1
- package/dist/Toast.js +2 -2
- package/dist/{Toaster-BM998ekj.js → Toaster-DMZng3Im.js} +4 -4
- package/dist/{Toaster-BM998ekj.js.map → Toaster-DMZng3Im.js.map} +1 -1
- package/dist/{Toaster-DDKuhPXX.js → Toaster-fPcgIF7Q.js} +2 -2
- package/dist/{Toaster-DDKuhPXX.js.map → Toaster-fPcgIF7Q.js.map} +1 -1
- package/dist/{Toolbar-DMUTGhNa.js → Toolbar-BfGcDXgC.js} +8 -8
- package/dist/{Toolbar-DMUTGhNa.js.map → Toolbar-BfGcDXgC.js.map} +1 -1
- package/dist/{Toolbar-DD1ieJNQ.js → Toolbar-Dlu39v69.js} +6 -6
- package/dist/{Toolbar-DD1ieJNQ.js.map → Toolbar-Dlu39v69.js.map} +1 -1
- package/dist/Toolbar.js +2 -2
- package/dist/{ToolbarButtonToggle-DsaG1BWZ.js → ToolbarButtonToggle-3xbnm1Qr.js} +7 -4
- package/dist/ToolbarButtonToggle-3xbnm1Qr.js.map +1 -0
- package/dist/TreeSelectField.js +1 -1
- package/dist/{TreeSelectFieldSync-C-mUoPrS.js → TreeSelectFieldSync-CdtC8d3Q.js} +6 -6
- package/dist/{TreeSelectFieldSync-C-mUoPrS.js.map → TreeSelectFieldSync-CdtC8d3Q.js.map} +1 -1
- package/dist/TreeSelectMenu.js +1 -1
- package/dist/{TreeSelectMenuSync-BWVk3vWK.js → TreeSelectMenuSync-CPuQWUNU.js} +5 -5
- package/dist/{TreeSelectMenuSync-BWVk3vWK.js.map → TreeSelectMenuSync-CPuQWUNU.js.map} +1 -1
- package/dist/{TypeaheadTextField-DX3MZTgl.js → TypeaheadTextField-BkLECKZY.js} +3 -3
- package/dist/TypeaheadTextField-BkLECKZY.js.map +1 -0
- package/dist/TypeaheadTextField.js +1 -1
- package/dist/{YearlessDateInputWithPicker-KRKpi1-s.js → YearlessDateInputWithPicker-Bd8JnTaZ.js} +3 -3
- package/dist/{YearlessDateInputWithPicker-KRKpi1-s.js.map → YearlessDateInputWithPicker-Bd8JnTaZ.js.map} +1 -1
- package/dist/beta.js +17 -17
- package/dist/{useToggleSelection-B8OnmX8Q.js → bulkActionTypes-DPC382hi.js} +8 -3
- package/dist/bulkActionTypes-DPC382hi.js.map +1 -0
- package/dist/{filter-state-6m-E0d1i.js → filter-state-BdfBSXYO.js} +346 -68
- package/dist/filter-state-BdfBSXYO.js.map +1 -0
- package/dist/{index-BxdhXRLp.js → index-B7BIlotN.js} +289 -1074
- package/dist/index-B7BIlotN.js.map +1 -0
- package/dist/{index-Bg9IAYMO.js → index-SZMmvI3D.js} +2 -2
- package/dist/{index-Bg9IAYMO.js.map → index-SZMmvI3D.js.map} +1 -1
- package/dist/index.js +55 -55
- package/dist/src/beta/components/Calendar/Calendar.d.ts +19 -0
- package/dist/src/beta/components/Calendar/Calendar.figma.d.ts +1 -0
- package/dist/src/beta/components/FilterBar/FilterSearchField.d.ts +28 -0
- package/dist/src/beta/components/FilterBar/index.d.ts +1 -1
- package/dist/src/beta/components/FilterBar/internal/adapters/search.d.ts +3 -0
- package/dist/src/beta/components/FilterBar/internal/adapters/types.d.ts +2 -1
- package/dist/src/beta/components/FilterBar/internal/types.d.ts +72 -6
- package/dist/src/beta/components/FilterBar/internal/utils/dateConstraints.d.ts +38 -0
- package/dist/src/beta/components/FilterBar/internal/utils/test.d.ts +2 -1
- package/dist/src/beta/components/InteractiveCard/InteractiveCard.figma.d.ts +1 -0
- package/dist/src/beta/components/InteractiveCard/types.d.ts +3 -3
- package/dist/src/beta/components/RichTextEditor/RichTextEditor.d.ts +4 -2
- package/dist/src/beta/components/RichTextEditor/RichTextEditor.figma.d.ts +1 -0
- package/dist/src/beta/components/RichTextEditor/internal/RichTextEditorProvider.d.ts +1 -1
- package/dist/src/beta/components/RichTextEditor/internal/extensions/SafeImageExtension.d.ts +13 -0
- package/dist/src/beta/components/RichTextEditor/internal/useRichTextEditor.d.ts +2 -2
- package/dist/src/beta/components/RichTextEditor/types.d.ts +42 -1
- package/dist/src/beta/components/Table/DataTable/DataTable.figma.d.ts +1 -0
- package/dist/src/beta/components/Toolbar/Toolbar.figma.d.ts +1 -0
- package/dist/src/beta/components/TypeaheadTextField/TypeaheadTextField.d.ts +19 -0
- package/dist/src/components/AiMark/AiMark.figma.d.ts +1 -0
- package/dist/src/components/ButtonLink/ButtonLink.figma.d.ts +1 -0
- package/dist/src/components/ButtonToggle/ButtonToggle.figma.d.ts +1 -0
- package/dist/src/components/Combobox/Combobox.d.ts +8 -4
- package/dist/src/components/Combobox/ComboboxSelect.d.ts +2 -2
- package/dist/src/components/DateFieldRange/DateFieldRange.d.ts +21 -0
- package/dist/src/components/DateFieldRange/DateFieldRange.figma.d.ts +1 -0
- package/dist/src/components/DateFieldSingle/DateFieldSingle.d.ts +20 -0
- package/dist/src/components/DateFieldSingle/DateFieldSingle.figma.d.ts +1 -0
- package/dist/src/components/DateFieldYearless/DateFieldYearless.figma.d.ts +1 -0
- package/dist/src/components/DateFieldYearlessRange/DateFieldYearlessRange.d.ts +19 -0
- package/dist/src/components/DateFieldYearlessRange/DateFieldYearlessRange.figma.d.ts +1 -0
- package/dist/src/components/DaysOfTheWeek/DaysOfTheWeek.figma.d.ts +1 -0
- package/dist/src/components/Details/Details.figma.d.ts +1 -0
- package/dist/src/components/Dialog/Dialog.figma.d.ts +1 -0
- package/dist/src/components/Dnd/Dnd.figma.d.ts +1 -0
- package/dist/src/components/DndSort/DndSort.figma.d.ts +1 -0
- package/dist/src/components/Drawer/Drawer.figma.d.ts +1 -0
- package/dist/src/components/FieldLabel/FieldLabel.d.ts +36 -0
- package/dist/src/components/Layout/Layout.figma.d.ts +1 -0
- package/dist/src/components/LinkButton/LinkButton.d.ts +13 -0
- package/dist/src/components/LinkButton/LinkButton.figma.d.ts +1 -0
- package/dist/src/components/ListView/ListView.figma.d.ts +1 -0
- package/dist/src/components/Listbox/Listbox.d.ts +3 -3
- package/dist/src/components/Listbox/Listbox.figma.d.ts +1 -0
- package/dist/src/components/Menu/Menu.figma.d.ts +1 -0
- package/dist/src/components/MultiSelectField/MultiSelectField.figma.d.ts +1 -0
- package/dist/src/components/MultiSelectField/types.d.ts +3 -0
- package/dist/src/components/MultiSelectMenu/MultiSelectMenu.figma.d.ts +1 -0
- package/dist/src/components/MultiSelectMenu/types.d.ts +5 -0
- package/dist/src/components/NumberField/NumberField.d.ts +21 -0
- package/dist/src/components/NumberField/NumberField.figma.d.ts +1 -0
- package/dist/src/components/Overflow/Overflow.d.ts +22 -0
- package/dist/src/components/Overflow/Overflow.figma.d.ts +1 -0
- package/dist/src/components/Page/Page.figma.d.ts +1 -0
- package/dist/src/components/Pagination/Pagination.figma.d.ts +1 -0
- package/dist/src/components/Popover/Popover.figma.d.ts +1 -0
- package/dist/src/components/SearchField/SearchField.figma.d.ts +1 -0
- package/dist/src/components/SegmentedControl/SegmentedControl.figma.d.ts +1 -0
- package/dist/src/components/SelectCard/SelectCard.figma.d.ts +1 -0
- package/dist/src/components/SelectField/SelectField.figma.d.ts +1 -0
- package/dist/src/components/SelectMenu/SelectMenu.figma.d.ts +1 -0
- package/dist/src/components/SelectTrigger/SelectTrigger.d.ts +19 -0
- package/dist/src/components/SideNav/SideNav.figma.d.ts +1 -0
- package/dist/src/components/Skeleton/Skeleton.figma.d.ts +1 -0
- package/dist/src/components/Stepper/Stepper.figma.d.ts +1 -0
- package/dist/src/components/Tab/Tab.figma.d.ts +1 -0
- package/dist/src/components/Text/Text.figma.d.ts +1 -0
- package/dist/src/components/TextField/TextField.d.ts +14 -0
- package/dist/src/components/TextField/TextField.figma.d.ts +1 -0
- package/dist/src/components/Textarea/Textarea.figma.d.ts +1 -0
- package/dist/src/components/TimeField/TimeField.figma.d.ts +1 -0
- package/dist/src/internal/components/Popover/internal/PopoverContext.d.ts +4 -0
- package/dist/src/internal/types/bulkActionTypes.d.ts +27 -2
- package/dist/src/internal/utils/index.d.ts +1 -0
- package/dist/src/internal/utils/uniquifySvgDomIds.d.ts +12 -0
- package/dist/src/providers/AnvilProvider/AnvilProviderContext.d.ts +12 -0
- package/dist/{stripInlineMarkdown-mQ10Z5JU.js → stripInlineMarkdown-BZzgG-Zm.js} +2 -2
- package/dist/{stripInlineMarkdown-mQ10Z5JU.js.map → stripInlineMarkdown-BZzgG-Zm.js.map} +1 -1
- package/dist/{syncFilterUtils-DqvgB5sn.js → syncFilterUtils-Cec5y3hY.js} +5 -5
- package/dist/{syncFilterUtils-DqvgB5sn.js.map → syncFilterUtils-Cec5y3hY.js.map} +1 -1
- package/dist/{treeSync-BaEYV24N.js → treeSync-oC-VZpP0.js} +4 -4
- package/dist/{treeSync-BaEYV24N.js.map → treeSync-oC-VZpP0.js.map} +1 -1
- package/dist/{useAdaptiveView-BO9xU7Ym.js → useAdaptiveView-AvsDkChF.js} +9 -9
- package/dist/{useAdaptiveView-BO9xU7Ym.js.map → useAdaptiveView-AvsDkChF.js.map} +1 -1
- package/dist/useAdaptiveView.css +6 -4
- package/dist/{useDrilldown-22X8jHs_.js → useDrilldown-PmrZ4BXn.js} +4 -4
- package/dist/{useDrilldown-22X8jHs_.js.map → useDrilldown-PmrZ4BXn.js.map} +1 -1
- package/dist/{useInfiniteCombobox-COnx-GhH.js → useInfiniteCombobox-C78WQZx4.js} +9 -7
- package/dist/useInfiniteCombobox-C78WQZx4.js.map +1 -0
- package/dist/{useInitialFocus-BIvXK1Rp.js → useInitialFocus-BUxEDMEG.js} +2 -2
- package/dist/{useInitialFocus-BIvXK1Rp.js.map → useInitialFocus-BUxEDMEG.js.map} +1 -1
- package/dist/{usePopoverTransitionStates-B1opfxxn.js → usePopoverTransitionStates-CDXCdyKa.js} +2 -1
- package/dist/{usePopoverTransitionStates-B1opfxxn.js.map → usePopoverTransitionStates-CDXCdyKa.js.map} +1 -1
- package/package.json +17 -16
- package/dist/AnvilProvider-BQsp0VPq.js.map +0 -1
- package/dist/Calendar-B6DqiqoX.js.map +0 -1
- package/dist/Calendar-DqQczZgw.js.map +0 -1
- package/dist/DateFieldYearlessRange-CHj9OXZK.js.map +0 -1
- package/dist/FilterBar-CryC93pB.js.map +0 -1
- package/dist/Icon-BEwHECSM.js +0 -56
- package/dist/Icon-BEwHECSM.js.map +0 -1
- package/dist/InteractiveCard-CyUR_VLW.js.map +0 -1
- package/dist/Listbox-DkzL11gb.js.map +0 -1
- package/dist/MultiSelectFieldSync-CSIU43BR.js.map +0 -1
- package/dist/MultiSelectMenuSync-CkjXjnXp.js.map +0 -1
- package/dist/NumberField-Dp5tJkMC.js.map +0 -1
- package/dist/RichTextEditor-DLIh_mzJ.js.map +0 -1
- package/dist/SelectFieldSync-BQIbfdka.js.map +0 -1
- package/dist/SelectTrigger-BgzPogSC.js.map +0 -1
- package/dist/TextField-fE3_0jQJ.js.map +0 -1
- package/dist/ToolbarButtonToggle-DsaG1BWZ.js.map +0 -1
- package/dist/TypeaheadTextField-DX3MZTgl.js.map +0 -1
- package/dist/filter-state-6m-E0d1i.js.map +0 -1
- package/dist/index-BxdhXRLp.js.map +0 -1
- package/dist/useInfiniteCombobox-COnx-GhH.js.map +0 -1
- package/dist/useToggleSelection-B8OnmX8Q.js.map +0 -1
package/dist/InteractiveCard.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { I as InteractiveCard } from './InteractiveCard-
|
|
1
|
+
export { I as InteractiveCard } from './InteractiveCard-C0g5PxB6.js';
|
|
2
2
|
//# sourceMappingURL=InteractiveCard.js.map
|
|
@@ -2,7 +2,7 @@ import { jsxs, jsx } from 'react/jsx-runtime';
|
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { forwardRef } from 'react';
|
|
4
4
|
import { s as styles } from './Link.module-JgOOqNcL.js';
|
|
5
|
-
import { I as Icon } from './Icon-
|
|
5
|
+
import { I as Icon } from './Icon-B4uCvMU9.js';
|
|
6
6
|
import { c as cx } from './index-De1g9FRV.js';
|
|
7
7
|
import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-DjqeAJZ9.js';
|
|
8
8
|
import { c as childrenToString } from './childrenToString-Bz9MqbHb.js';
|
|
@@ -100,4 +100,4 @@ const Link = forwardRef(
|
|
|
100
100
|
Link.displayName = Link$1.displayName;
|
|
101
101
|
|
|
102
102
|
export { Link as L, useLinkStyles as u };
|
|
103
|
-
//# sourceMappingURL=Link-
|
|
103
|
+
//# sourceMappingURL=Link-C7dtI5K6.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Link-DI4eVVdI.js","sources":["../../hammer-icon/mdi/round/open_in_new.svg","../src/components/Link/internal/LinkHeadless.tsx","../src/components/Link/useLinkStyles.ts","../src/components/Link/internal/Link.tsx","../src/components/Link/Link.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgOpenInNew = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"1em\", height: \"1em\", viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M18 19H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h5c.55 0 1-.45 1-1s-.45-1-1-1H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2v-6c0-.55-.45-1-1-1s-1 .45-1 1v5c0 .55-.45 1-1 1zM14 4c0 .55.45 1 1 1h2.59l-9.13 9.13a.996.996 0 1 0 1.41 1.41L19 6.41V9c0 .55.45 1 1 1s1-.45 1-1V4c0-.55-.45-1-1-1h-5c-.55 0-1 .45-1 1z\" }));\nexport default SvgOpenInNew;\n","import { forwardRef, ComponentPropsWithoutRef } from \"react\";\n\nimport styles from \"./Link.module.scss\";\nimport { Icon } from \"../../Icon\";\nimport OpenInNew from \"@servicetitan/hammer-icon/mdi/round/open_in_new.svg\";\n\n/**\n * Props for the LinkHeadless component.\n * @extends ComponentPropsWithoutRef<\"a\">\n */\nexport type LinkHeadlessProps = ComponentPropsWithoutRef<\"a\">;\n\n/**\n * Headless link component for creating accessible hyperlinks.\n *\n * Features:\n * - Security attributes (rel=\"noopener noreferrer\") for external links\n *\n * @example\n * <LinkHeadless href=\"/dashboard\">\n * Go to Dashboard\n * </LinkHeadless>\n *\n * @example\n * <LinkHeadless href=\"https://example.com\" target=\"_blank\">\n * External Documentation\n * </LinkHeadless>\n *\n */\nexport const LinkHeadless = forwardRef<HTMLAnchorElement, LinkHeadlessProps>(\n ({ children, ...props }, ref) => {\n return (\n <a\n rel=\"noopener noreferrer\"\n data-anv=\"link-headless\"\n ref={ref}\n {...props}\n >\n {children}\n {props.target === \"_blank\" && (\n <Icon className={styles[\"open-in-new\"]} inherit svg={OpenInNew} />\n )}\n </a>\n );\n },\n);\n\nLinkHeadless.displayName = \"LinkHeadless\";\n","import cx from \"classnames\";\n\nimport { LayoutUtilProps } from \"../../types\";\nimport { LinkProps } from \"./Link\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\n\nimport styles from \"./internal/Link.module.scss\";\n\n/**\n * Props for the useLinkStyles hook.\n * @extends LayoutUtilProps\n */\nexport type UseLinkStylesProps = LayoutUtilProps &\n Pick<LinkProps, \"className\" | \"appearance\" | \"ghost\" | \"style\">;\n\n/**\n * Hook for generating link styles and class names.\n *\n * @param props - The link style properties\n * @returns Object containing linkClassNames and styleCombined\n */\nexport const useLinkStyles = (props: UseLinkStylesProps) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const { className, appearance = \"primary\", ghost, style } = componentProps;\n\n const linkClassNames = cx([styles[\"link\"]], className, {\n [styles[\"ghost\"]]: ghost,\n [styles[\"secondary\"]]: appearance === \"secondary\",\n });\n\n const styleCombined = Object.assign({}, style, layoutStyles);\n\n return { linkClassNames, styleCombined };\n};\n","import { forwardRef, ComponentPropsWithoutRef } from \"react\";\n\nimport { LayoutUtilProps } from \"../../../types\";\n\nimport { LinkHeadless } from \"./LinkHeadless\";\n\nimport { useLinkStyles } from \"../useLinkStyles\";\n\n/**\n * Props for the Link component.\n * @extends ComponentPropsWithoutRef<\"a\">\n * @extends LayoutUtilProps\n */\nexport type LinkProps = ComponentPropsWithoutRef<\"a\"> &\n LayoutUtilProps &\n (\n | {\n /**\n * The visual appearance of the link.\n * @default \"primary\"\n */\n appearance?: \"primary\";\n /**\n * Whether the link should have a quieter, less prominent appearance\n * @remarks Only available when appearance is \"primary\".\n */\n ghost?: boolean;\n }\n | {\n /**\n * The visual appearance of the LinkButton. Secondary appearance cannot be ghost.\n */\n appearance: \"secondary\";\n /**\n * Whether the LinkButton should have a quieter, less prominent appearance.\n * @remarks Must be false when appearance is \"secondary\".\n */\n ghost?: false;\n }\n );\n\n/**\n * Link component for creating accessible, styled hyperlinks.\n *\n * Features:\n * - Two visual appearances: primary (default) and secondary\n * - Ghost mode for less prominent styling\n * - Automatic external link icon for target=\"_blank\" links\n * - Security attributes (rel=\"noopener noreferrer\") for external links\n * - Full accessibility support with proper focus management\n * - Supports layout utilities for positioning and spacing\n * - Flexible content support for text and other elements\n * - Responsive design with consistent typography\n * - Hover and focus states with proper visual feedback\n * - Screen reader support for external link announcements\n *\n * @example\n * <Link href=\"/dashboard\" appearance=\"primary\">\n * Go to Dashboard\n * </Link>\n *\n * @example\n * <Link href=\"https://example.com\" target=\"_blank\" ghost>\n * External Documentation\n * </Link>\n *\n * @example\n * <Link href=\"/settings\" appearance=\"secondary\">\n * Settings\n * </Link>\n *\n * @example\n * <Link href=\"/profile\" gap=\"2\" alignItems=\"center\">\n * <Avatar name=\"John Doe\" size=\"small\" />\n * View Profile\n * </Link>\n */\nexport const Link = forwardRef<HTMLAnchorElement, LinkProps>((props, ref) => {\n const { appearance, className, ghost, style, children, ...rest } = props;\n const { linkClassNames, styleCombined } = useLinkStyles({\n appearance,\n className,\n ghost,\n style,\n });\n\n return (\n <LinkHeadless\n className={linkClassNames}\n data-anv=\"link\"\n ref={ref}\n style={styleCombined}\n {...rest}\n >\n {children}\n </LinkHeadless>\n );\n});\n\nLink.displayName = \"Link\";\n","import { Ref, forwardRef } from \"react\";\n\nimport { childrenToString } from \"../../internal/functions\";\nimport { DataTrackingId, DistributiveOmit } from \"../../types\";\nimport { useTrackingId } from \"../../hooks\";\n\nimport { LinkProps as BaseLinkProps, Link as BaseLink } from \"./internal/Link\";\n\n/**\n * Props for the Link component.\n * @extends Omit<BaseLinkProps, \"href\">\n * @extends DataTrackingId\n */\nexport type LinkProps = DistributiveOmit<BaseLinkProps, \"href\"> &\n DataTrackingId &\n (\n | {\n pathname?: never;\n search?: never;\n href?: BaseLinkProps[\"href\"];\n }\n | {\n pathname: string;\n search?: string;\n href?: never;\n }\n | {\n pathname?: never;\n search?: never;\n href?: never;\n }\n );\n\n/**\n * Link component for creating accessible, styled hyperlinks with tracking support.\n *\n * Features:\n * - Two visual appearances: primary (default) and secondary\n * - Quiet mode for less prominent styling\n * - Automatic external link icon for target=\"_blank\" links\n * - Security attributes (rel=\"noopener noreferrer\") for external links\n * - Full accessibility support with proper focus management\n * - Supports layout utilities for positioning and spacing\n * - Flexible content support for text and other elements\n * - Responsive design with consistent typography\n * - Hover and focus states with proper visual feedback\n * - Screen reader support for external link announcements\n * - Automatic tracking ID generation for analytics\n * - Client-side navigation support with pathname and search params\n * - History API integration for single-page application navigation\n *\n * @example\n * <Link href=\"/dashboard\" appearance=\"primary\">\n * Go to Dashboard\n * </Link>\n *\n * @example\n * <Link pathname=\"/settings\" search=\"?tab=profile\">\n * Profile Settings\n * </Link>\n *\n * @example\n * <Link href=\"https://example.com\" target=\"_blank\" ghost>\n * External Documentation\n * </Link>\n *\n * @example\n * <Link href=\"/profile\" gap=\"2\" alignItems=\"center\">\n * <Avatar name=\"John Doe\" size=\"small\" />\n * View Profile\n * </Link>\n */\nexport const Link = forwardRef(\n (props: LinkProps, ref: Ref<HTMLAnchorElement>) => {\n const { onClick, pathname, children, search, ...rest } = props;\n const data = {\n appearance: props.appearance,\n ghost: props.ghost,\n children: childrenToString(children),\n };\n\n const handleClick = (\n ...args: Parameters<NonNullable<LinkProps[\"onClick\"]>>\n ) => {\n if (pathname) {\n const to = pathname + (search ?? \"\");\n args[0].preventDefault();\n history.pushState(null, \"\", to);\n onClick?.(...args);\n } else {\n onClick?.(...args);\n }\n };\n\n const trackingId = useTrackingId({\n name: \"Link\",\n data,\n hasOverride: !!rest[\"data-tracking-id\"],\n });\n\n return (\n <BaseLink\n onClick={handleClick}\n ref={ref}\n data-tracking-id={trackingId}\n {...rest}\n >\n {children}\n </BaseLink>\n );\n },\n);\n\nLink.displayName = BaseLink.displayName;\n"],"names":["OpenInNew","Link","BaseLink"],"mappings":";;;;;;;;;;AACA,MAAM,YAAY,GAAG,CAAC,KAAK,qBAAqB,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,KAAK,EAAE,kBAAkB,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,oTAAoT,EAAE,CAAC,CAAC;;AC4BnhB,MAAM,YAAA,GAAe,UAAA;AAAA,EAC1B,CAAC,EAAE,QAAA,EAAU,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC/B,IAAA,uBACE,IAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAI,qBAAA;AAAA,QACJ,UAAA,EAAS,eAAA;AAAA,QACT,GAAA;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,QAAA;AAAA,UACA,KAAA,CAAM,MAAA,KAAW,QAAA,oBAChB,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAW,MAAA,CAAO,aAAa,CAAA,EAAG,OAAA,EAAO,IAAA,EAAC,GAAA,EAAKA,YAAA,EAAW;AAAA;AAAA;AAAA,KAEpE;AAAA,EAEJ;AACF,CAAA;AAEA,YAAA,CAAa,WAAA,GAAc,cAAA;;AC1BpB,MAAM,aAAA,GAAgB,CAAC,KAAA,KAA8B;AAC1D,EAAA,MAAM,EAAE,YAAA,EAAc,cAAA,EAAe,GAAI,mBAAmB,KAAK,CAAA;AACjE,EAAA,MAAM,EAAE,SAAA,EAAW,UAAA,GAAa,SAAA,EAAW,KAAA,EAAO,OAAM,GAAI,cAAA;AAE5D,EAAA,MAAM,iBAAiB,EAAA,CAAG,CAAC,OAAO,MAAM,CAAC,GAAG,SAAA,EAAW;AAAA,IACrD,CAAC,MAAA,CAAO,OAAO,CAAC,GAAG,KAAA;AAAA,IACnB,CAAC,MAAA,CAAO,WAAW,CAAC,GAAG,UAAA,KAAe;AAAA,GACvC,CAAA;AAED,EAAA,MAAM,gBAAgB,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,OAAO,YAAY,CAAA;AAE3D,EAAA,OAAO,EAAE,gBAAgB,aAAA,EAAc;AACzC;;AC4CO,MAAMC,MAAA,GAAO,UAAA,CAAyC,CAAC,KAAA,EAAO,GAAA,KAAQ;AAC3E,EAAA,MAAM,EAAE,YAAY,SAAA,EAAW,KAAA,EAAO,OAAO,QAAA,EAAU,GAAG,MAAK,GAAI,KAAA;AACnE,EAAA,MAAM,EAAE,cAAA,EAAgB,aAAA,EAAc,GAAI,aAAA,CAAc;AAAA,IACtD,UAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,uBACE,GAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,cAAA;AAAA,MACX,UAAA,EAAS,MAAA;AAAA,MACT,GAAA;AAAA,MACA,KAAA,EAAO,aAAA;AAAA,MACN,GAAG,IAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ,CAAC,CAAA;AAEDA,MAAA,CAAK,WAAA,GAAc,MAAA;;AC3BZ,MAAM,IAAA,GAAO,UAAA;AAAA,EAClB,CAAC,OAAkB,GAAA,KAAgC;AACjD,IAAA,MAAM,EAAE,OAAA,EAAS,QAAA,EAAU,UAAU,MAAA,EAAQ,GAAG,MAAK,GAAI,KAAA;AACzD,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,YAAY,KAAA,CAAM,UAAA;AAAA,MAClB,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,QAAA,EAAU,iBAAiB,QAAQ;AAAA,KACrC;AAEA,IAAA,MAAM,WAAA,GAAc,IACf,IAAA,KACA;AACH,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,MAAM,EAAA,GAAK,YAAY,MAAA,IAAU,EAAA,CAAA;AACjC,QAAA,IAAA,CAAK,CAAC,EAAE,cAAA,EAAe;AACvB,QAAA,OAAA,CAAQ,SAAA,CAAU,IAAA,EAAM,EAAA,EAAI,EAAE,CAAA;AAC9B,QAAA,OAAA,GAAU,GAAG,IAAI,CAAA;AAAA,MACnB,CAAA,MAAO;AACL,QAAA,OAAA,GAAU,GAAG,IAAI,CAAA;AAAA,MACnB;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,aAAa,aAAA,CAAc;AAAA,MAC/B,IAAA,EAAM,MAAA;AAAA,MACN,IAAA;AAAA,MACA,WAAA,EAAa,CAAC,CAAC,IAAA,CAAK,kBAAkB;AAAA,KACvC,CAAA;AAED,IAAA,uBACE,GAAA;AAAA,MAACC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,WAAA;AAAA,QACT,GAAA;AAAA,QACA,kBAAA,EAAkB,UAAA;AAAA,QACjB,GAAG,IAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;AAEA,IAAA,CAAK,cAAcA,MAAA,CAAS,WAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"Link-C7dtI5K6.js","sources":["../../hammer-icon/mdi/round/open_in_new.svg","../src/components/Link/internal/LinkHeadless.tsx","../src/components/Link/useLinkStyles.ts","../src/components/Link/internal/Link.tsx","../src/components/Link/Link.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgOpenInNew = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"1em\", height: \"1em\", viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M18 19H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h5c.55 0 1-.45 1-1s-.45-1-1-1H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2v-6c0-.55-.45-1-1-1s-1 .45-1 1v5c0 .55-.45 1-1 1zM14 4c0 .55.45 1 1 1h2.59l-9.13 9.13a.996.996 0 1 0 1.41 1.41L19 6.41V9c0 .55.45 1 1 1s1-.45 1-1V4c0-.55-.45-1-1-1h-5c-.55 0-1 .45-1 1z\" }));\nexport default SvgOpenInNew;\n","import { forwardRef, ComponentPropsWithoutRef } from \"react\";\n\nimport styles from \"./Link.module.scss\";\nimport { Icon } from \"../../Icon\";\nimport OpenInNew from \"@servicetitan/hammer-icon/mdi/round/open_in_new.svg\";\n\n/**\n * Props for the LinkHeadless component.\n * @extends ComponentPropsWithoutRef<\"a\">\n */\nexport type LinkHeadlessProps = ComponentPropsWithoutRef<\"a\">;\n\n/**\n * Headless link component for creating accessible hyperlinks.\n *\n * Features:\n * - Security attributes (rel=\"noopener noreferrer\") for external links\n *\n * @example\n * <LinkHeadless href=\"/dashboard\">\n * Go to Dashboard\n * </LinkHeadless>\n *\n * @example\n * <LinkHeadless href=\"https://example.com\" target=\"_blank\">\n * External Documentation\n * </LinkHeadless>\n *\n */\nexport const LinkHeadless = forwardRef<HTMLAnchorElement, LinkHeadlessProps>(\n ({ children, ...props }, ref) => {\n return (\n <a\n rel=\"noopener noreferrer\"\n data-anv=\"link-headless\"\n ref={ref}\n {...props}\n >\n {children}\n {props.target === \"_blank\" && (\n <Icon className={styles[\"open-in-new\"]} inherit svg={OpenInNew} />\n )}\n </a>\n );\n },\n);\n\nLinkHeadless.displayName = \"LinkHeadless\";\n","import cx from \"classnames\";\n\nimport { LayoutUtilProps } from \"../../types\";\nimport { LinkProps } from \"./Link\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\n\nimport styles from \"./internal/Link.module.scss\";\n\n/**\n * Props for the useLinkStyles hook.\n * @extends LayoutUtilProps\n */\nexport type UseLinkStylesProps = LayoutUtilProps &\n Pick<LinkProps, \"className\" | \"appearance\" | \"ghost\" | \"style\">;\n\n/**\n * Hook for generating link styles and class names.\n *\n * @param props - The link style properties\n * @returns Object containing linkClassNames and styleCombined\n */\nexport const useLinkStyles = (props: UseLinkStylesProps) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const { className, appearance = \"primary\", ghost, style } = componentProps;\n\n const linkClassNames = cx([styles[\"link\"]], className, {\n [styles[\"ghost\"]]: ghost,\n [styles[\"secondary\"]]: appearance === \"secondary\",\n });\n\n const styleCombined = Object.assign({}, style, layoutStyles);\n\n return { linkClassNames, styleCombined };\n};\n","import { forwardRef, ComponentPropsWithoutRef } from \"react\";\n\nimport { LayoutUtilProps } from \"../../../types\";\n\nimport { LinkHeadless } from \"./LinkHeadless\";\n\nimport { useLinkStyles } from \"../useLinkStyles\";\n\n/**\n * Props for the Link component.\n * @extends ComponentPropsWithoutRef<\"a\">\n * @extends LayoutUtilProps\n */\nexport type LinkProps = ComponentPropsWithoutRef<\"a\"> &\n LayoutUtilProps &\n (\n | {\n /**\n * The visual appearance of the link.\n * @default \"primary\"\n */\n appearance?: \"primary\";\n /**\n * Whether the link should have a quieter, less prominent appearance\n * @remarks Only available when appearance is \"primary\".\n */\n ghost?: boolean;\n }\n | {\n /**\n * The visual appearance of the LinkButton. Secondary appearance cannot be ghost.\n */\n appearance: \"secondary\";\n /**\n * Whether the LinkButton should have a quieter, less prominent appearance.\n * @remarks Must be false when appearance is \"secondary\".\n */\n ghost?: false;\n }\n );\n\n/**\n * Link component for creating accessible, styled hyperlinks.\n *\n * Features:\n * - Two visual appearances: primary (default) and secondary\n * - Ghost mode for less prominent styling\n * - Automatic external link icon for target=\"_blank\" links\n * - Security attributes (rel=\"noopener noreferrer\") for external links\n * - Full accessibility support with proper focus management\n * - Supports layout utilities for positioning and spacing\n * - Flexible content support for text and other elements\n * - Responsive design with consistent typography\n * - Hover and focus states with proper visual feedback\n * - Screen reader support for external link announcements\n *\n * @example\n * <Link href=\"/dashboard\" appearance=\"primary\">\n * Go to Dashboard\n * </Link>\n *\n * @example\n * <Link href=\"https://example.com\" target=\"_blank\" ghost>\n * External Documentation\n * </Link>\n *\n * @example\n * <Link href=\"/settings\" appearance=\"secondary\">\n * Settings\n * </Link>\n *\n * @example\n * <Link href=\"/profile\" gap=\"2\" alignItems=\"center\">\n * <Avatar name=\"John Doe\" size=\"small\" />\n * View Profile\n * </Link>\n */\nexport const Link = forwardRef<HTMLAnchorElement, LinkProps>((props, ref) => {\n const { appearance, className, ghost, style, children, ...rest } = props;\n const { linkClassNames, styleCombined } = useLinkStyles({\n appearance,\n className,\n ghost,\n style,\n });\n\n return (\n <LinkHeadless\n className={linkClassNames}\n data-anv=\"link\"\n ref={ref}\n style={styleCombined}\n {...rest}\n >\n {children}\n </LinkHeadless>\n );\n});\n\nLink.displayName = \"Link\";\n","import { Ref, forwardRef } from \"react\";\n\nimport { childrenToString } from \"../../internal/functions\";\nimport { DataTrackingId, DistributiveOmit } from \"../../types\";\nimport { useTrackingId } from \"../../hooks\";\n\nimport { LinkProps as BaseLinkProps, Link as BaseLink } from \"./internal/Link\";\n\n/**\n * Props for the Link component.\n * @extends Omit<BaseLinkProps, \"href\">\n * @extends DataTrackingId\n */\nexport type LinkProps = DistributiveOmit<BaseLinkProps, \"href\"> &\n DataTrackingId &\n (\n | {\n pathname?: never;\n search?: never;\n href?: BaseLinkProps[\"href\"];\n }\n | {\n pathname: string;\n search?: string;\n href?: never;\n }\n | {\n pathname?: never;\n search?: never;\n href?: never;\n }\n );\n\n/**\n * Link component for creating accessible, styled hyperlinks with tracking support.\n *\n * Features:\n * - Two visual appearances: primary (default) and secondary\n * - Quiet mode for less prominent styling\n * - Automatic external link icon for target=\"_blank\" links\n * - Security attributes (rel=\"noopener noreferrer\") for external links\n * - Full accessibility support with proper focus management\n * - Supports layout utilities for positioning and spacing\n * - Flexible content support for text and other elements\n * - Responsive design with consistent typography\n * - Hover and focus states with proper visual feedback\n * - Screen reader support for external link announcements\n * - Automatic tracking ID generation for analytics\n * - Client-side navigation support with pathname and search params\n * - History API integration for single-page application navigation\n *\n * @example\n * <Link href=\"/dashboard\" appearance=\"primary\">\n * Go to Dashboard\n * </Link>\n *\n * @example\n * <Link pathname=\"/settings\" search=\"?tab=profile\">\n * Profile Settings\n * </Link>\n *\n * @example\n * <Link href=\"https://example.com\" target=\"_blank\" ghost>\n * External Documentation\n * </Link>\n *\n * @example\n * <Link href=\"/profile\" gap=\"2\" alignItems=\"center\">\n * <Avatar name=\"John Doe\" size=\"small\" />\n * View Profile\n * </Link>\n */\nexport const Link = forwardRef(\n (props: LinkProps, ref: Ref<HTMLAnchorElement>) => {\n const { onClick, pathname, children, search, ...rest } = props;\n const data = {\n appearance: props.appearance,\n ghost: props.ghost,\n children: childrenToString(children),\n };\n\n const handleClick = (\n ...args: Parameters<NonNullable<LinkProps[\"onClick\"]>>\n ) => {\n if (pathname) {\n const to = pathname + (search ?? \"\");\n args[0].preventDefault();\n history.pushState(null, \"\", to);\n onClick?.(...args);\n } else {\n onClick?.(...args);\n }\n };\n\n const trackingId = useTrackingId({\n name: \"Link\",\n data,\n hasOverride: !!rest[\"data-tracking-id\"],\n });\n\n return (\n <BaseLink\n onClick={handleClick}\n ref={ref}\n data-tracking-id={trackingId}\n {...rest}\n >\n {children}\n </BaseLink>\n );\n },\n);\n\nLink.displayName = BaseLink.displayName;\n"],"names":["OpenInNew","Link","BaseLink"],"mappings":"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"}
|
package/dist/Link.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { L as Link, L as default, u as useLinkStyles } from './Link-
|
|
1
|
+
export { L as Link, L as default, u as useLinkStyles } from './Link-C7dtI5K6.js';
|
|
2
2
|
//# sourceMappingURL=Link.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkButton-C0wps8r1.js","sources":["../src/components/LinkButton/LinkButton.tsx"],"sourcesContent":["import { ComponentPropsWithoutRef, Ref, forwardRef } from \"react\";\nimport { useTrackingId } from \"../../hooks/useTrackingId\";\nimport { DataTrackingId } from \"../../types/DataTrackingId\";\nimport { LayoutUtilProps } from \"../../types\";\nimport { childrenToString } from \"../../internal/functions\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\n\nimport cx from \"classnames\";\nimport styles from \"../Link/internal/Link.module.scss\";\n\n/**\n * Props for the Link component.\n * @extends CoreLinkButtonProps\n * @extends DataTrackingId\n */\nexport type LinkButtonProps = Omit<\n ComponentPropsWithoutRef<\"button\">,\n \"type\" | \"disabled\"\n> &\n LayoutUtilProps &\n (\n | {\n /**\n * The visual appearance of the LinkButton.\n * @default \"primary\"\n */\n appearance?: \"primary\";\n /**\n * Whether the LinkButton should have a quieter, less prominent appearance.\n * @remarks Only available when appearance is \"primary\".\n */\n ghost?: boolean;\n }\n | {\n /**\n * The visual appearance of the LinkButton. Secondary appearance cannot be ghost.\n */\n appearance: \"secondary\";\n /**\n * Whether the LinkButton should have a quieter, less prominent appearance.\n * @remarks Must be false when appearance is \"secondary\".\n */\n ghost?: false;\n }\n ) &\n DataTrackingId;\n\nexport const LinkButton = forwardRef(\n (props: LinkButtonProps, ref: Ref<HTMLButtonElement>) => {\n const data = {\n appearance: props.appearance,\n ghost: props.ghost,\n children: childrenToString(props.children),\n };\n\n const trackingId = useTrackingId({\n name: \"Link\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n children,\n className,\n appearance = \"primary\",\n ghost,\n style,\n ...rest\n } = componentProps;\n\n const linkClassNames = cx([styles[\"link\"]], className, {\n [styles[\"ghost\"]]: ghost,\n [styles[\"secondary\"]]: appearance === \"secondary\",\n });\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n return (\n <button\n className={linkClassNames}\n data-anv=\"link-button\"\n ref={ref}\n style={styleCombined}\n data-tracking-id={trackingId}\n {...rest}\n >\n {children}\n </button>\n );\n },\n);\n\nLinkButton.displayName = \"LinkButton\";\n"],"names":[],"mappings":";;;;;;;;
|
|
1
|
+
{"version":3,"file":"LinkButton-C0wps8r1.js","sources":["../src/components/LinkButton/LinkButton.tsx"],"sourcesContent":["import { ComponentPropsWithoutRef, Ref, forwardRef } from \"react\";\nimport { useTrackingId } from \"../../hooks/useTrackingId\";\nimport { DataTrackingId } from \"../../types/DataTrackingId\";\nimport { LayoutUtilProps } from \"../../types\";\nimport { childrenToString } from \"../../internal/functions\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\n\nimport cx from \"classnames\";\nimport styles from \"../Link/internal/Link.module.scss\";\n\n/**\n * Props for the Link component.\n * @extends CoreLinkButtonProps\n * @extends DataTrackingId\n */\nexport type LinkButtonProps = Omit<\n ComponentPropsWithoutRef<\"button\">,\n \"type\" | \"disabled\"\n> &\n LayoutUtilProps &\n (\n | {\n /**\n * The visual appearance of the LinkButton.\n * @default \"primary\"\n */\n appearance?: \"primary\";\n /**\n * Whether the LinkButton should have a quieter, less prominent appearance.\n * @remarks Only available when appearance is \"primary\".\n */\n ghost?: boolean;\n }\n | {\n /**\n * The visual appearance of the LinkButton. Secondary appearance cannot be ghost.\n */\n appearance: \"secondary\";\n /**\n * Whether the LinkButton should have a quieter, less prominent appearance.\n * @remarks Must be false when appearance is \"secondary\".\n */\n ghost?: false;\n }\n ) &\n DataTrackingId;\n\n/**\n * LinkButton component — a `<button>` styled to look like a text link,\n * for triggering actions (not navigation; use `Link` for navigation).\n *\n * Features:\n * - Primary appearance with an optional quieter `ghost` variant\n * - Secondary appearance (cannot be combined with `ghost`)\n * - Supports layout utility props for positioning and spacing\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <LinkButton onClick={() => console.log('clicked')}>Learn more</LinkButton>\n */\nexport const LinkButton = forwardRef(\n (props: LinkButtonProps, ref: Ref<HTMLButtonElement>) => {\n const data = {\n appearance: props.appearance,\n ghost: props.ghost,\n children: childrenToString(props.children),\n };\n\n const trackingId = useTrackingId({\n name: \"Link\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n children,\n className,\n appearance = \"primary\",\n ghost,\n style,\n ...rest\n } = componentProps;\n\n const linkClassNames = cx([styles[\"link\"]], className, {\n [styles[\"ghost\"]]: ghost,\n [styles[\"secondary\"]]: appearance === \"secondary\",\n });\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n return (\n <button\n className={linkClassNames}\n data-anv=\"link-button\"\n ref={ref}\n style={styleCombined}\n data-tracking-id={trackingId}\n {...rest}\n >\n {children}\n </button>\n );\n },\n);\n\nLinkButton.displayName = \"LinkButton\";\n"],"names":[],"mappings":";;;;;;;;AA4DO,MAAM,UAAA,GAAa,UAAA;AAAA,EACxB,CAAC,OAAwB,GAAA,KAAgC;AACvD,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,YAAY,KAAA,CAAM,UAAA;AAAA,MAClB,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,QAAA,EAAU,gBAAA,CAAiB,KAAA,CAAM,QAAQ;AAAA,KAC3C;AAEA,IAAA,MAAM,aAAa,aAAA,CAAc;AAAA,MAC/B,IAAA,EAAM,MAAA;AAAA,MACN,IAAA;AAAA,MACA,WAAA,EAAa,CAAC,CAAC,KAAA,CAAM,kBAAkB;AAAA,KACxC,CAAA;AAED,IAAA,MAAM,EAAE,YAAA,EAAc,cAAA,EAAe,GAAI,mBAAmB,KAAK,CAAA;AACjE,IAAA,MAAM;AAAA,MACJ,QAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA,GAAa,SAAA;AAAA,MACb,KAAA;AAAA,MACA,KAAA;AAAA,MACA,GAAG;AAAA,KACL,GAAI,cAAA;AAEJ,IAAA,MAAM,iBAAiB,EAAA,CAAG,CAAC,OAAO,MAAM,CAAC,GAAG,SAAA,EAAW;AAAA,MACrD,CAAC,MAAA,CAAO,OAAO,CAAC,GAAG,KAAA;AAAA,MACnB,CAAC,MAAA,CAAO,WAAW,CAAC,GAAG,UAAA,KAAe;AAAA,KACvC,CAAA;AAED,IAAA,MAAM,aAAA,GAAgB;AAAA,MACpB,GAAG,KAAA;AAAA,MACH,GAAG;AAAA,KACL;AAEA,IAAA,uBACE,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,cAAA;AAAA,QACX,UAAA,EAAS,aAAA;AAAA,QACT,GAAA;AAAA,QACA,KAAA,EAAO,aAAA;AAAA,QACP,kBAAA,EAAkB,UAAA;AAAA,QACjB,GAAG,IAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;AAEA,UAAA,CAAW,WAAA,GAAc,YAAA;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { createContext, useContext, forwardRef, useRef, useId, useEffect, useMemo, useState } from 'react';
|
|
3
|
-
import { C as Checkbox } from './Checkbox-
|
|
3
|
+
import { C as Checkbox } from './Checkbox-zz9TyZWn.js';
|
|
4
4
|
import { c as cx } from './index-De1g9FRV.js';
|
|
5
5
|
import { s as styles } from './ListView.module-DfqtCL3Q.js';
|
|
6
6
|
import { u as useMergeRefs } from './useMergeRefs-Dfmtq9cI.js';
|
|
@@ -536,4 +536,4 @@ const ListView = Object.assign(
|
|
|
536
536
|
);
|
|
537
537
|
|
|
538
538
|
export { ListView as L, ListViewOption as a, ListViewOptionCell as b };
|
|
539
|
-
//# sourceMappingURL=ListView-
|
|
539
|
+
//# sourceMappingURL=ListView-DpveXOsN.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListView-Blmts4nT.js","sources":["../src/internal/functions/mapOrder.ts","../src/components/ListView/internal/ListViewContext.ts","../src/components/ListView/ListViewOption.tsx","../src/components/ListView/ListViewOptionCell.tsx","../src/components/ListView/internal/utils.ts","../src/components/ListView/ListView.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function mapOrder(array: any[], order: any[], key: string) {\n // Create a copy to avoid mutating the input array\n const sortedArray = [...array];\n sortedArray.sort(function (a, b) {\n const A = a[key],\n B = b[key];\n\n if (order.indexOf(A) > order.indexOf(B)) {\n return 1;\n } else {\n return -1;\n }\n });\n\n return sortedArray;\n}\n","import { Dispatch, SetStateAction, createContext, useContext } from \"react\";\nimport { Option } from \"./types\";\n\n/**\n * Context properties for the ListView component\n */\nexport type ListViewContextProps = {\n /** Array of option objects for focus management */\n options?: Option[];\n /** Callback when selection changes */\n onSelectionChange?: (value: unknown[]) => void;\n /** Currently selected items */\n selectedItems: unknown[];\n /** Currently indeterminate items */\n indeterminateItems: unknown[];\n /** Array of items if using items prop */\n items?: unknown[];\n /** Function to set the selected items */\n setSelectedItems: Dispatch<\n SetStateAction<ListViewContextProps[\"selectedItems\"]>\n >;\n /** Whether the component is controlled */\n controlled?: boolean;\n};\n\nexport const ListViewContext = createContext<ListViewContextProps | null>(null);\n\n/**\n * Hook to access the listview context\n * @returns The listview context\n * @throws Error if used outside of a ListView component\n */\nexport function useListView() {\n const context = useContext(ListViewContext);\n\n if (context == null) {\n throw new Error(\"useListView must be wrapped in <ListView />\");\n }\n\n return context;\n}\n","import {\n ChangeEvent,\n ComponentPropsWithoutRef,\n forwardRef,\n useEffect,\n useId,\n useMemo,\n useRef,\n} from \"react\";\nimport { Checkbox, CheckboxProps } from \"../Checkbox\";\nimport { useMergeRefs, useTrackingId } from \"../../hooks\";\n\nimport cx from \"classnames\";\nimport styles from \"./ListView.module.scss\";\nimport { CheckboxState } from \"../Checkbox/types\";\nimport { useListView } from \"./internal/ListViewContext\";\nimport { DataTrackingId } from \"../../types\";\n\ntype ItemType = {\n label: string;\n disabled?: boolean;\n [key: string]: unknown;\n};\n\n/**\n * Props for the ListViewOption component\n * @extends ComponentPropsWithoutRef<\"div\">\n */\nexport type ListViewOptionProps = Omit<\n ComponentPropsWithoutRef<\"div\">,\n \"onChange\"\n> & {\n /** Whether the option is disabled */\n disabled?: boolean;\n /** Callback when the option changes */\n onChange?: (e: ChangeEvent<HTMLInputElement>, state?: CheckboxState) => void;\n} & (\n | {\n /** The item object when using items prop */\n item: ItemType;\n }\n | {\n /** The display label for the option */\n label: string;\n }\n ) &\n DataTrackingId;\n\n/**\n * ListViewOption component for individual selectable items within a listview.\n *\n * Features:\n * - Displays selectable options with proper ARIA attributes\n * - Supports disabled state for non-selectable options\n * - Keyboard navigation support\n * - Accessible with screen reader support\n *\n * @example\n * <ListView.Option item={{ label: \"Option 1\" }} />\n */\nexport const ListViewOption = forwardRef<HTMLDivElement, ListViewOptionProps>(\n (props, ref) => {\n const {\n className,\n children,\n onChange,\n style,\n disabled: disabledProp,\n ...remainingProps\n } = props;\n\n const optionRef = useRef<HTMLDivElement>(null);\n const mergedRef = useMergeRefs([ref, optionRef]);\n\n const cellRef = useRef<HTMLDivElement>(null);\n const rowId = useId();\n const {\n selectedItems,\n setSelectedItems,\n indeterminateItems,\n controlled,\n onSelectionChange,\n } = useListView();\n const disabled =\n \"item\" in remainingProps\n ? disabledProp || remainingProps.item.disabled\n : disabledProp;\n\n useEffect(() => {\n const focusables = optionRef.current?.querySelectorAll(\n \"button:not(:disabled):not([aria-disabled='true']), input:not(:disabled):not([aria-disabled='true']), [tabindex='0']:not(:disabled):not([aria-disabled='true'])\",\n );\n focusables?.forEach((item, i) => {\n item.setAttribute(\"tabindex\", \"-1\");\n if (item.hasAttribute(\"id\")) return;\n item.setAttribute(\"id\", `${rowId}-${i}`);\n });\n }, [rowId]);\n\n const label =\n \"item\" in remainingProps\n ? remainingProps.item.label\n : remainingProps.label;\n\n const isSelected = useMemo(\n () => matchInArray(label, selectedItems),\n [selectedItems, label],\n );\n\n const isIndeterminate = useMemo(\n () => matchInArray(label, indeterminateItems),\n [indeterminateItems, label],\n );\n\n const onChangeHandler: CheckboxProps[\"onChange\"] = (e) => {\n onChange?.(e, { checked: isSelected });\n };\n\n const onClickHandler: CheckboxProps[\"onClick\"] = () => {\n updateSelectedItems();\n };\n\n const removeItemFromSelectedItems = (itemLabelToRemove: string) => {\n return (selectedItems as (ItemType | string)[]).filter(\n (potentialRemove) => {\n if (typeof potentialRemove === \"string\") {\n return potentialRemove !== itemLabelToRemove;\n }\n return potentialRemove.label !== itemLabelToRemove;\n },\n );\n };\n\n const addItemFromSelectedItems = (itemToAdd: ItemType | string) => {\n return [...selectedItems, itemToAdd];\n };\n\n function updateSelectedItems() {\n const isPartOfSelectedItems = matchInArray(label, selectedItems);\n const callback = controlled ? onSelectionChange : setSelectedItems;\n if (isPartOfSelectedItems) {\n callback?.(removeItemFromSelectedItems(label));\n } else {\n callback?.(\n addItemFromSelectedItems(\n \"item\" in remainingProps\n ? remainingProps.item\n : remainingProps.label,\n ),\n );\n }\n }\n\n const data = {\n label: \"item\" in props ? props.item?.label : props.label,\n };\n\n const trackingId = useTrackingId({\n name: \"ListViewOption\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const {\n item: _item,\n label: _label,\n ...forwardedProps\n } = remainingProps as {\n // This is to satisfy the type checker and allow us to destructure the item and label props which \"could\" exist.\n // We're destructuring them because we don't want to forward them to the div element.\n item: ItemType;\n label: string;\n };\n\n return (\n <div\n data-tracking-id={trackingId}\n className={cx([styles[\"listview-option\"]], className)}\n data-anv=\"listview-option\"\n style={style}\n ref={mergedRef}\n aria-disabled={disabled}\n aria-selected={isSelected}\n aria-label={label ?? \"Select\"}\n role=\"row\"\n {...forwardedProps}\n >\n <div className={styles[\"cell\"]} ref={cellRef} role=\"gridcell\">\n <Checkbox\n disabled={disabled}\n checked={isIndeterminate ? undefined : isSelected}\n indeterminate={isIndeterminate}\n aria-label={label ?? \"Select\"}\n onChange={onChangeHandler}\n onClick={onClickHandler}\n />\n </div>\n {children}\n </div>\n );\n },\n);\n\nListViewOption.displayName = \"ListViewOption\";\n\n/**\n * Helper function to check if a list view option item is in an array (e.g. selected items or indeterminate items)\n * @param itemLabel - The label of the item to check if it is in the array\n * @param array - The array to check if the item is in\n * @returns True if the item is in the array, false otherwise\n */\nfunction matchInArray(\n itemLabel: string,\n array: (ItemType | unknown)[],\n): boolean {\n return array.some(\n (i) => itemLabel === i || itemLabel === (i as ItemType).label,\n );\n}\n","import { ComponentPropsWithoutRef, forwardRef } from \"react\";\n\n/**\n * ListViewOptionCell component for rendering a cell within a listview option.\n *\n * Features:\n * - Renders a grid cell for option content\n * - Supports custom content and layout\n * - Accessible with proper ARIA attributes\n *\n * @example\n * <ListView.OptionCell>Custom cell content</ListView.OptionCell>\n */\nexport const ListViewOptionCell = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<\"div\">\n>((props, ref) => {\n const { ...rest } = props;\n return (\n <div role=\"gridcell\" data-anv=\"listview-option-cell\" {...rest} ref={ref} />\n );\n});\n\nListViewOptionCell.displayName = \"ListViewOptionCell\";\n","import { Dispatch, KeyboardEvent, SetStateAction } from \"react\";\nimport { FocusedItem, Option } from \"./types\";\nimport { getActiveElement } from \"../../../internal/functions\";\n\nexport const listViewKeyboardNavigation = (\n e: KeyboardEvent<HTMLDivElement>,\n options: Option[],\n focusedItem: FocusedItem,\n setFocusedItem: Dispatch<SetStateAction<FocusedItem>>,\n parent: HTMLDivElement | null,\n currentFocusId: (id: string) => void,\n) => {\n if (!options) return;\n let activeElement: HTMLElement | null;\n switch (e.code) {\n case \"Enter\":\n case \"Space\":\n (\n options[focusedItem.row].focusables[focusedItem.col] as HTMLElement\n ).click();\n activeElement = getActiveElement(document);\n if (!activeElement) break;\n activeElement.click();\n e.preventDefault();\n break;\n case \"ArrowDown\":\n parent?.focus();\n options[focusedItem.row].focusables[focusedItem.col].removeAttribute(\n \"data-interactive\",\n );\n if (focusedItem.row === options.length - 1) {\n options[0].focusables[focusedItem.col].setAttribute(\n \"data-interactive\",\n \"focus-visible\",\n );\n currentFocusId(options[0].focusables[focusedItem.col].id);\n setFocusedItem((prev) => {\n return { ...prev, row: 0 };\n });\n break;\n }\n\n options[focusedItem.row + 1].focusables[focusedItem.col].setAttribute(\n \"data-interactive\",\n \"focus-visible\",\n );\n currentFocusId(\n options[focusedItem.row + 1].focusables[focusedItem.col].id,\n );\n setFocusedItem((prev) => {\n return { ...prev, row: focusedItem.row + 1 };\n });\n break;\n case \"ArrowUp\":\n parent?.focus();\n options[focusedItem.row].focusables[focusedItem.col].removeAttribute(\n \"data-interactive\",\n );\n if (focusedItem.row === 0) {\n options[options.length - 1].focusables[focusedItem.col].setAttribute(\n \"data-interactive\",\n \"focus-visible\",\n );\n currentFocusId(\n options[options.length - 1].focusables[focusedItem.col].id,\n );\n setFocusedItem((prev) => {\n return { ...prev, row: options.length - 1 };\n });\n break;\n }\n\n options[focusedItem.row - 1].focusables[focusedItem.col].setAttribute(\n \"data-interactive\",\n \"focus-visible\",\n );\n currentFocusId(\n options[focusedItem.row - 1].focusables[focusedItem.col].id,\n );\n setFocusedItem((prev) => {\n return { ...prev, row: focusedItem.row - 1 };\n });\n break;\n case \"ArrowRight\":\n parent?.focus();\n options[focusedItem.row].focusables[focusedItem.col].removeAttribute(\n \"data-interactive\",\n );\n if (focusedItem.col === options[focusedItem.row].focusables.length - 1) {\n options[focusedItem.row].focusables[0].setAttribute(\n \"data-interactive\",\n \"focus-visible\",\n );\n currentFocusId(options[focusedItem.row].focusables[0].id);\n setFocusedItem((prev) => {\n return {\n ...prev,\n col: 0,\n };\n });\n break;\n }\n\n options[focusedItem.row].focusables[focusedItem.col + 1].setAttribute(\n \"data-interactive\",\n \"focus-visible\",\n );\n currentFocusId(\n options[focusedItem.row].focusables[focusedItem.col + 1].id,\n );\n setFocusedItem((prev) => {\n return { ...prev, col: focusedItem.col + 1 };\n });\n break;\n case \"ArrowLeft\":\n parent?.focus();\n options[focusedItem.row].focusables[focusedItem.col].removeAttribute(\n \"data-interactive\",\n );\n if (focusedItem.col === 0) {\n options[focusedItem.row].focusables[\n options[focusedItem.row].focusables.length - 1\n ].setAttribute(\"data-interactive\", \"focus-visible\");\n currentFocusId(\n options[focusedItem.row].focusables[\n options[focusedItem.row].focusables.length - 1\n ].id,\n );\n setFocusedItem((prev) => {\n return {\n ...prev,\n col: options[focusedItem.row].focusables.length - 1,\n };\n });\n break;\n }\n\n options[focusedItem.row].focusables[focusedItem.col - 1].setAttribute(\n \"data-interactive\",\n \"focus-visible\",\n );\n currentFocusId(\n options[focusedItem.row].focusables[focusedItem.col - 1].id,\n );\n setFocusedItem((prev) => {\n return { ...prev, col: focusedItem.col - 1 };\n });\n break;\n\n default:\n break;\n }\n};\n\nexport const getFocusables = (el: Element) => {\n return el.querySelectorAll(\n \"button:not(:disabled):not([aria-disabled='true']), input:not(:disabled):not([aria-disabled='true']), [tabindex='0']:not(:disabled):not([aria-disabled='true'])\",\n );\n};\n","import {\n KeyboardEvent,\n MouseEvent,\n ReactNode,\n Ref,\n forwardRef,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { LayoutUtilProps } from \"../../types\";\nimport {\n FocusedItem,\n ItemType,\n ListViewWithItems,\n ListViewWithOutItems,\n Option,\n} from \"./internal/types\";\nimport { ListViewOption } from \"./ListViewOption\";\nimport { ListViewOptionCell } from \"./ListViewOptionCell\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport { useMergeRefs } from \"../../hooks\";\nimport { getFocusables, listViewKeyboardNavigation } from \"./internal/utils\";\nimport { mapOrder } from \"../../internal/functions\";\nimport { ListViewContext } from \"./internal/ListViewContext\";\n\nimport cx from \"classnames\";\nimport styles from \"./ListView.module.scss\";\n\n/**\n * Props for the ListView component\n * @template T - The type of additional properties for items\n * @extends LayoutUtilProps\n */\nexport type ListViewProps<T> = LayoutUtilProps &\n (ListViewWithItems<T> | ListViewWithOutItems);\n\nfunction ListViewInner<T>(props: ListViewProps<T>, ref: Ref<HTMLDivElement>) {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n indeterminate,\n onSelectionChange,\n className,\n selected,\n defaultSelected,\n style,\n onKeyDown,\n ...remainingProps\n } = componentProps;\n\n const ListViewRef = useRef<HTMLDivElement>(null);\n const isFocusVisible = useRef(true);\n const combinedRef = useMergeRefs([ref, ListViewRef]);\n const [options, setOptions] = useState<Option[]>();\n const [currentActive, setCurrentActive] = useState<string>();\n const [selectedItems, setSelectedItems] = useState<unknown[]>(\n selected ?? defaultSelected ?? [],\n );\n const [focusedItem, setFocusedItem] = useState<FocusedItem>({\n row: 0,\n col: 0,\n });\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n const onFocusHandler = () => {\n if (!isFocusVisible.current) return;\n if (!options) return;\n options[focusedItem.row].focusables[focusedItem.col].setAttribute(\n \"data-interactive\",\n \"focus-visible\",\n );\n return;\n };\n const onBlurHandler = () => {\n if (!options) return;\n options[focusedItem.row].focusables[focusedItem.col]?.removeAttribute(\n \"data-interactive\",\n );\n return;\n };\n\n const onKeyDownHandler = (e: KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(e);\n if (!options) return;\n isFocusVisible.current = true;\n listViewKeyboardNavigation(\n e,\n options,\n focusedItem,\n setFocusedItem,\n ListViewRef.current,\n (id) => setCurrentActive(id),\n );\n };\n\n const onMouseDownHandler = (e: MouseEvent<HTMLDivElement>) => {\n isFocusVisible.current = false;\n if (options && ListViewRef.current) {\n options[focusedItem.row].focusables[focusedItem.col]?.removeAttribute(\n \"data-interactive\",\n );\n\n const closestFocusable = (e.target as HTMLElement).closest(\n \"button:not(:disabled):not([aria-disabled='true']), input:not(:disabled):not([aria-disabled='true']), [data-anv='checkbox']\",\n );\n\n const optionRow = (e.target as HTMLElement).closest(\n '[data-anv=\"listview-option\"]',\n );\n if (!optionRow || optionRow.ariaDisabled) return;\n const row = options.findIndex((option) => option.node === optionRow);\n if (!closestFocusable) {\n (options[row].focusables[0] as HTMLElement).click();\n return;\n }\n const col = Array.prototype.indexOf.call(\n options[row].focusables,\n closestFocusable?.getAttribute(\"data-anv\") === \"checkbox\"\n ? closestFocusable.children[0]\n : closestFocusable,\n );\n setFocusedItem({ row, col });\n }\n };\n\n useEffect(() => {\n if (!ListViewRef.current) return;\n const optionArr = ListViewRef.current.querySelectorAll<HTMLDivElement>(\n \"div[data-anv='listview-option']:not([aria-disabled='true'])\",\n );\n const makeTree = Array.from(optionArr).map((option) => {\n const childFocusables = getFocusables(option);\n return {\n node: option,\n focusables: childFocusables,\n };\n });\n setOptions(makeTree);\n }, [props.children]);\n\n const prevCallbackItems = useRef<unknown[]>([]);\n const prevControlledItems = useRef<unknown[]>(\n selected ?? defaultSelected ?? [],\n );\n\n useEffect(() => {\n if (!options) return;\n const compareArr = options.map((option) => option.node.ariaLabel);\n const orderedSelectedItems = mapOrder(selectedItems, compareArr, \"label\");\n if (\n JSON.stringify(prevCallbackItems.current) ===\n JSON.stringify(orderedSelectedItems)\n )\n return;\n\n onSelectionChange?.(orderedSelectedItems);\n prevCallbackItems.current = orderedSelectedItems;\n }, [onSelectionChange, options, selectedItems]);\n\n useEffect(() => {\n if (!selected) return;\n\n // Helper to extract label from either string or ItemType\n const getLabel = (item: unknown): string =>\n typeof item === \"string\" ? item : (item as ItemType<T>).label;\n\n const filterDuplicates = (selected as unknown[]).reduce<unknown[]>(\n (acc, current) => {\n const currentLabel = getLabel(current);\n const isDup = acc.find((item) => getLabel(item) === currentLabel);\n if (!isDup) {\n return [...acc, current];\n } else {\n return acc;\n }\n },\n [],\n );\n\n if (!options) return;\n const compareArr = options.map((option) => option.node.ariaLabel);\n const orderedSelected = mapOrder(filterDuplicates, compareArr, \"label\");\n if (\n JSON.stringify(prevControlledItems.current) ===\n JSON.stringify(orderedSelected)\n )\n return;\n setSelectedItems(orderedSelected);\n prevControlledItems.current = orderedSelected;\n }, [options, selected]);\n\n const ListViewClassNames = cx([styles[\"listview\"]], className);\n\n if (remainingProps.items !== undefined) {\n const { children, items, ...rest } = remainingProps as Omit<\n ListViewWithItems<T>,\n keyof LayoutUtilProps\n >;\n const renderChildren = children as\n | (({ items }: { items: ItemType<T>[] }) => ReactNode)\n | undefined;\n return (\n <ListViewContext.Provider\n value={{\n options,\n onSelectionChange: onSelectionChange as\n | ((value: unknown[]) => void)\n | undefined,\n indeterminateItems: indeterminate ?? [],\n selectedItems,\n setSelectedItems,\n items,\n controlled: !!selected,\n }}\n >\n <div\n ref={combinedRef}\n className={ListViewClassNames}\n style={styleCombined}\n data-anv=\"listview\"\n role=\"grid\"\n aria-multiselectable=\"true\"\n onFocus={onFocusHandler}\n onBlur={onBlurHandler}\n onKeyDown={onKeyDownHandler}\n onMouseDown={onMouseDownHandler}\n aria-activedescendant={currentActive}\n tabIndex={0}\n {...rest}\n >\n {renderChildren?.({\n items: items.map((item: ItemType<T>) => {\n return item;\n }),\n })}\n </div>\n </ListViewContext.Provider>\n );\n }\n\n const { children, ...rest } = remainingProps;\n return (\n <ListViewContext.Provider\n value={{\n options,\n onSelectionChange: onSelectionChange as\n | ((value: unknown[]) => void)\n | undefined,\n selectedItems,\n indeterminateItems: indeterminate ?? [],\n setSelectedItems,\n controlled: !!selected || !!indeterminate,\n }}\n >\n <div\n ref={combinedRef}\n className={ListViewClassNames}\n style={styleCombined}\n data-anv=\"listview\"\n role=\"grid\"\n onFocus={onFocusHandler}\n onBlur={onBlurHandler}\n onKeyDown={onKeyDownHandler}\n onMouseDown={onMouseDownHandler}\n aria-activedescendant={currentActive}\n tabIndex={0}\n {...rest}\n >\n {children}\n </div>\n </ListViewContext.Provider>\n );\n}\n\nListViewInner.displayName = \"ListView\";\n\n/**\n * ListView component for displaying a list of selectable items in a grid layout.\n *\n * Features:\n * - Supports single and multiple selection modes\n * - Keyboard navigation with arrow keys\n * - Customizable item rendering\n * - Controlled and uncontrolled modes\n * - Accessible with proper ARIA attributes\n * - Focus management for interactive elements\n * - Layout utilities for positioning and spacing\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <ListView items={[{ label: \"Item 1\" }, { label: \"Item 2\" }]} onSelectionChange={handleSelection}>\n * {({ items }) => items.map(item => (\n * <ListView.Option key={item.label} item={item} />\n * ))}\n * </ListView>\n */\nexport const ListView = Object.assign(\n forwardRef(ListViewInner) as <T>(\n props: ListViewProps<T> & { ref?: React.ForwardedRef<HTMLUListElement> },\n ) => ReturnType<typeof ListViewInner>,\n {\n /**\n * ListViewOption component for individual selectable items within a listview.\n *\n * Features:\n * - Displays selectable options with proper ARIA attributes\n * - Supports disabled state for non-selectable options\n * - Keyboard navigation support\n * - Accessible with screen reader support\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <ListView.Option item={{ label: \"Option 1\" }} />\n */\n Option: ListViewOption,\n /**\n * ListViewOptionCell component for rendering a cell within a listview option.\n *\n * Features:\n * - Renders a grid cell for option content\n * - Supports custom content and layout\n * - Accessible with proper ARIA attributes\n *\n * @example\n * <ListView.OptionCell>Custom cell content</ListView.OptionCell>\n */\n OptionCell: ListViewOptionCell,\n },\n);\n"],"names":["children","rest"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ListView-DpveXOsN.js","sources":["../src/internal/functions/mapOrder.ts","../src/components/ListView/internal/ListViewContext.ts","../src/components/ListView/ListViewOption.tsx","../src/components/ListView/ListViewOptionCell.tsx","../src/components/ListView/internal/utils.ts","../src/components/ListView/ListView.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function mapOrder(array: any[], order: any[], key: string) {\n // Create a copy to avoid mutating the input array\n const sortedArray = [...array];\n sortedArray.sort(function (a, b) {\n const A = a[key],\n B = b[key];\n\n if (order.indexOf(A) > order.indexOf(B)) {\n return 1;\n } else {\n return -1;\n }\n });\n\n return sortedArray;\n}\n","import { Dispatch, SetStateAction, createContext, useContext } from \"react\";\nimport { Option } from \"./types\";\n\n/**\n * Context properties for the ListView component\n */\nexport type ListViewContextProps = {\n /** Array of option objects for focus management */\n options?: Option[];\n /** Callback when selection changes */\n onSelectionChange?: (value: unknown[]) => void;\n /** Currently selected items */\n selectedItems: unknown[];\n /** Currently indeterminate items */\n indeterminateItems: unknown[];\n /** Array of items if using items prop */\n items?: unknown[];\n /** Function to set the selected items */\n setSelectedItems: Dispatch<\n SetStateAction<ListViewContextProps[\"selectedItems\"]>\n >;\n /** Whether the component is controlled */\n controlled?: boolean;\n};\n\nexport const ListViewContext = createContext<ListViewContextProps | null>(null);\n\n/**\n * Hook to access the listview context\n * @returns The listview context\n * @throws Error if used outside of a ListView component\n */\nexport function useListView() {\n const context = useContext(ListViewContext);\n\n if (context == null) {\n throw new Error(\"useListView must be wrapped in <ListView />\");\n }\n\n return context;\n}\n","import {\n ChangeEvent,\n ComponentPropsWithoutRef,\n forwardRef,\n useEffect,\n useId,\n useMemo,\n useRef,\n} from \"react\";\nimport { Checkbox, CheckboxProps } from \"../Checkbox\";\nimport { useMergeRefs, useTrackingId } from \"../../hooks\";\n\nimport cx from \"classnames\";\nimport styles from \"./ListView.module.scss\";\nimport { CheckboxState } from \"../Checkbox/types\";\nimport { useListView } from \"./internal/ListViewContext\";\nimport { DataTrackingId } from \"../../types\";\n\ntype ItemType = {\n label: string;\n disabled?: boolean;\n [key: string]: unknown;\n};\n\n/**\n * Props for the ListViewOption component\n * @extends ComponentPropsWithoutRef<\"div\">\n */\nexport type ListViewOptionProps = Omit<\n ComponentPropsWithoutRef<\"div\">,\n \"onChange\"\n> & {\n /** Whether the option is disabled */\n disabled?: boolean;\n /** Callback when the option changes */\n onChange?: (e: ChangeEvent<HTMLInputElement>, state?: CheckboxState) => void;\n} & (\n | {\n /** The item object when using items prop */\n item: ItemType;\n }\n | {\n /** The display label for the option */\n label: string;\n }\n ) &\n DataTrackingId;\n\n/**\n * ListViewOption component for individual selectable items within a listview.\n *\n * Features:\n * - Displays selectable options with proper ARIA attributes\n * - Supports disabled state for non-selectable options\n * - Keyboard navigation support\n * - Accessible with screen reader support\n *\n * @example\n * <ListView.Option item={{ label: \"Option 1\" }} />\n */\nexport const ListViewOption = forwardRef<HTMLDivElement, ListViewOptionProps>(\n (props, ref) => {\n const {\n className,\n children,\n onChange,\n style,\n disabled: disabledProp,\n ...remainingProps\n } = props;\n\n const optionRef = useRef<HTMLDivElement>(null);\n const mergedRef = useMergeRefs([ref, optionRef]);\n\n const cellRef = useRef<HTMLDivElement>(null);\n const rowId = useId();\n const {\n selectedItems,\n setSelectedItems,\n indeterminateItems,\n controlled,\n onSelectionChange,\n } = useListView();\n const disabled =\n \"item\" in remainingProps\n ? disabledProp || remainingProps.item.disabled\n : disabledProp;\n\n useEffect(() => {\n const focusables = optionRef.current?.querySelectorAll(\n \"button:not(:disabled):not([aria-disabled='true']), input:not(:disabled):not([aria-disabled='true']), [tabindex='0']:not(:disabled):not([aria-disabled='true'])\",\n );\n focusables?.forEach((item, i) => {\n item.setAttribute(\"tabindex\", \"-1\");\n if (item.hasAttribute(\"id\")) return;\n item.setAttribute(\"id\", `${rowId}-${i}`);\n });\n }, [rowId]);\n\n const label =\n \"item\" in remainingProps\n ? remainingProps.item.label\n : remainingProps.label;\n\n const isSelected = useMemo(\n () => matchInArray(label, selectedItems),\n [selectedItems, label],\n );\n\n const isIndeterminate = useMemo(\n () => matchInArray(label, indeterminateItems),\n [indeterminateItems, label],\n );\n\n const onChangeHandler: CheckboxProps[\"onChange\"] = (e) => {\n onChange?.(e, { checked: isSelected });\n };\n\n const onClickHandler: CheckboxProps[\"onClick\"] = () => {\n updateSelectedItems();\n };\n\n const removeItemFromSelectedItems = (itemLabelToRemove: string) => {\n return (selectedItems as (ItemType | string)[]).filter(\n (potentialRemove) => {\n if (typeof potentialRemove === \"string\") {\n return potentialRemove !== itemLabelToRemove;\n }\n return potentialRemove.label !== itemLabelToRemove;\n },\n );\n };\n\n const addItemFromSelectedItems = (itemToAdd: ItemType | string) => {\n return [...selectedItems, itemToAdd];\n };\n\n function updateSelectedItems() {\n const isPartOfSelectedItems = matchInArray(label, selectedItems);\n const callback = controlled ? onSelectionChange : setSelectedItems;\n if (isPartOfSelectedItems) {\n callback?.(removeItemFromSelectedItems(label));\n } else {\n callback?.(\n addItemFromSelectedItems(\n \"item\" in remainingProps\n ? remainingProps.item\n : remainingProps.label,\n ),\n );\n }\n }\n\n const data = {\n label: \"item\" in props ? props.item?.label : props.label,\n };\n\n const trackingId = useTrackingId({\n name: \"ListViewOption\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const {\n item: _item,\n label: _label,\n ...forwardedProps\n } = remainingProps as {\n // This is to satisfy the type checker and allow us to destructure the item and label props which \"could\" exist.\n // We're destructuring them because we don't want to forward them to the div element.\n item: ItemType;\n label: string;\n };\n\n return (\n <div\n data-tracking-id={trackingId}\n className={cx([styles[\"listview-option\"]], className)}\n data-anv=\"listview-option\"\n style={style}\n ref={mergedRef}\n aria-disabled={disabled}\n aria-selected={isSelected}\n aria-label={label ?? \"Select\"}\n role=\"row\"\n {...forwardedProps}\n >\n <div className={styles[\"cell\"]} ref={cellRef} role=\"gridcell\">\n <Checkbox\n disabled={disabled}\n checked={isIndeterminate ? undefined : isSelected}\n indeterminate={isIndeterminate}\n aria-label={label ?? \"Select\"}\n onChange={onChangeHandler}\n onClick={onClickHandler}\n />\n </div>\n {children}\n </div>\n );\n },\n);\n\nListViewOption.displayName = \"ListViewOption\";\n\n/**\n * Helper function to check if a list view option item is in an array (e.g. selected items or indeterminate items)\n * @param itemLabel - The label of the item to check if it is in the array\n * @param array - The array to check if the item is in\n * @returns True if the item is in the array, false otherwise\n */\nfunction matchInArray(\n itemLabel: string,\n array: (ItemType | unknown)[],\n): boolean {\n return array.some(\n (i) => itemLabel === i || itemLabel === (i as ItemType).label,\n );\n}\n","import { ComponentPropsWithoutRef, forwardRef } from \"react\";\n\n/**\n * ListViewOptionCell component for rendering a cell within a listview option.\n *\n * Features:\n * - Renders a grid cell for option content\n * - Supports custom content and layout\n * - Accessible with proper ARIA attributes\n *\n * @example\n * <ListView.OptionCell>Custom cell content</ListView.OptionCell>\n */\nexport const ListViewOptionCell = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<\"div\">\n>((props, ref) => {\n const { ...rest } = props;\n return (\n <div role=\"gridcell\" data-anv=\"listview-option-cell\" {...rest} ref={ref} />\n );\n});\n\nListViewOptionCell.displayName = \"ListViewOptionCell\";\n","import { Dispatch, KeyboardEvent, SetStateAction } from \"react\";\nimport { FocusedItem, Option } from \"./types\";\nimport { getActiveElement } from \"../../../internal/functions\";\n\nexport const listViewKeyboardNavigation = (\n e: KeyboardEvent<HTMLDivElement>,\n options: Option[],\n focusedItem: FocusedItem,\n setFocusedItem: Dispatch<SetStateAction<FocusedItem>>,\n parent: HTMLDivElement | null,\n currentFocusId: (id: string) => void,\n) => {\n if (!options) return;\n let activeElement: HTMLElement | null;\n switch (e.code) {\n case \"Enter\":\n case \"Space\":\n (\n options[focusedItem.row].focusables[focusedItem.col] as HTMLElement\n ).click();\n activeElement = getActiveElement(document);\n if (!activeElement) break;\n activeElement.click();\n e.preventDefault();\n break;\n case \"ArrowDown\":\n parent?.focus();\n options[focusedItem.row].focusables[focusedItem.col].removeAttribute(\n \"data-interactive\",\n );\n if (focusedItem.row === options.length - 1) {\n options[0].focusables[focusedItem.col].setAttribute(\n \"data-interactive\",\n \"focus-visible\",\n );\n currentFocusId(options[0].focusables[focusedItem.col].id);\n setFocusedItem((prev) => {\n return { ...prev, row: 0 };\n });\n break;\n }\n\n options[focusedItem.row + 1].focusables[focusedItem.col].setAttribute(\n \"data-interactive\",\n \"focus-visible\",\n );\n currentFocusId(\n options[focusedItem.row + 1].focusables[focusedItem.col].id,\n );\n setFocusedItem((prev) => {\n return { ...prev, row: focusedItem.row + 1 };\n });\n break;\n case \"ArrowUp\":\n parent?.focus();\n options[focusedItem.row].focusables[focusedItem.col].removeAttribute(\n \"data-interactive\",\n );\n if (focusedItem.row === 0) {\n options[options.length - 1].focusables[focusedItem.col].setAttribute(\n \"data-interactive\",\n \"focus-visible\",\n );\n currentFocusId(\n options[options.length - 1].focusables[focusedItem.col].id,\n );\n setFocusedItem((prev) => {\n return { ...prev, row: options.length - 1 };\n });\n break;\n }\n\n options[focusedItem.row - 1].focusables[focusedItem.col].setAttribute(\n \"data-interactive\",\n \"focus-visible\",\n );\n currentFocusId(\n options[focusedItem.row - 1].focusables[focusedItem.col].id,\n );\n setFocusedItem((prev) => {\n return { ...prev, row: focusedItem.row - 1 };\n });\n break;\n case \"ArrowRight\":\n parent?.focus();\n options[focusedItem.row].focusables[focusedItem.col].removeAttribute(\n \"data-interactive\",\n );\n if (focusedItem.col === options[focusedItem.row].focusables.length - 1) {\n options[focusedItem.row].focusables[0].setAttribute(\n \"data-interactive\",\n \"focus-visible\",\n );\n currentFocusId(options[focusedItem.row].focusables[0].id);\n setFocusedItem((prev) => {\n return {\n ...prev,\n col: 0,\n };\n });\n break;\n }\n\n options[focusedItem.row].focusables[focusedItem.col + 1].setAttribute(\n \"data-interactive\",\n \"focus-visible\",\n );\n currentFocusId(\n options[focusedItem.row].focusables[focusedItem.col + 1].id,\n );\n setFocusedItem((prev) => {\n return { ...prev, col: focusedItem.col + 1 };\n });\n break;\n case \"ArrowLeft\":\n parent?.focus();\n options[focusedItem.row].focusables[focusedItem.col].removeAttribute(\n \"data-interactive\",\n );\n if (focusedItem.col === 0) {\n options[focusedItem.row].focusables[\n options[focusedItem.row].focusables.length - 1\n ].setAttribute(\"data-interactive\", \"focus-visible\");\n currentFocusId(\n options[focusedItem.row].focusables[\n options[focusedItem.row].focusables.length - 1\n ].id,\n );\n setFocusedItem((prev) => {\n return {\n ...prev,\n col: options[focusedItem.row].focusables.length - 1,\n };\n });\n break;\n }\n\n options[focusedItem.row].focusables[focusedItem.col - 1].setAttribute(\n \"data-interactive\",\n \"focus-visible\",\n );\n currentFocusId(\n options[focusedItem.row].focusables[focusedItem.col - 1].id,\n );\n setFocusedItem((prev) => {\n return { ...prev, col: focusedItem.col - 1 };\n });\n break;\n\n default:\n break;\n }\n};\n\nexport const getFocusables = (el: Element) => {\n return el.querySelectorAll(\n \"button:not(:disabled):not([aria-disabled='true']), input:not(:disabled):not([aria-disabled='true']), [tabindex='0']:not(:disabled):not([aria-disabled='true'])\",\n );\n};\n","import {\n KeyboardEvent,\n MouseEvent,\n ReactNode,\n Ref,\n forwardRef,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { LayoutUtilProps } from \"../../types\";\nimport {\n FocusedItem,\n ItemType,\n ListViewWithItems,\n ListViewWithOutItems,\n Option,\n} from \"./internal/types\";\nimport { ListViewOption } from \"./ListViewOption\";\nimport { ListViewOptionCell } from \"./ListViewOptionCell\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport { useMergeRefs } from \"../../hooks\";\nimport { getFocusables, listViewKeyboardNavigation } from \"./internal/utils\";\nimport { mapOrder } from \"../../internal/functions\";\nimport { ListViewContext } from \"./internal/ListViewContext\";\n\nimport cx from \"classnames\";\nimport styles from \"./ListView.module.scss\";\n\n/**\n * Props for the ListView component\n * @template T - The type of additional properties for items\n * @extends LayoutUtilProps\n */\nexport type ListViewProps<T> = LayoutUtilProps &\n (ListViewWithItems<T> | ListViewWithOutItems);\n\nfunction ListViewInner<T>(props: ListViewProps<T>, ref: Ref<HTMLDivElement>) {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n indeterminate,\n onSelectionChange,\n className,\n selected,\n defaultSelected,\n style,\n onKeyDown,\n ...remainingProps\n } = componentProps;\n\n const ListViewRef = useRef<HTMLDivElement>(null);\n const isFocusVisible = useRef(true);\n const combinedRef = useMergeRefs([ref, ListViewRef]);\n const [options, setOptions] = useState<Option[]>();\n const [currentActive, setCurrentActive] = useState<string>();\n const [selectedItems, setSelectedItems] = useState<unknown[]>(\n selected ?? defaultSelected ?? [],\n );\n const [focusedItem, setFocusedItem] = useState<FocusedItem>({\n row: 0,\n col: 0,\n });\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n const onFocusHandler = () => {\n if (!isFocusVisible.current) return;\n if (!options) return;\n options[focusedItem.row].focusables[focusedItem.col].setAttribute(\n \"data-interactive\",\n \"focus-visible\",\n );\n return;\n };\n const onBlurHandler = () => {\n if (!options) return;\n options[focusedItem.row].focusables[focusedItem.col]?.removeAttribute(\n \"data-interactive\",\n );\n return;\n };\n\n const onKeyDownHandler = (e: KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(e);\n if (!options) return;\n isFocusVisible.current = true;\n listViewKeyboardNavigation(\n e,\n options,\n focusedItem,\n setFocusedItem,\n ListViewRef.current,\n (id) => setCurrentActive(id),\n );\n };\n\n const onMouseDownHandler = (e: MouseEvent<HTMLDivElement>) => {\n isFocusVisible.current = false;\n if (options && ListViewRef.current) {\n options[focusedItem.row].focusables[focusedItem.col]?.removeAttribute(\n \"data-interactive\",\n );\n\n const closestFocusable = (e.target as HTMLElement).closest(\n \"button:not(:disabled):not([aria-disabled='true']), input:not(:disabled):not([aria-disabled='true']), [data-anv='checkbox']\",\n );\n\n const optionRow = (e.target as HTMLElement).closest(\n '[data-anv=\"listview-option\"]',\n );\n if (!optionRow || optionRow.ariaDisabled) return;\n const row = options.findIndex((option) => option.node === optionRow);\n if (!closestFocusable) {\n (options[row].focusables[0] as HTMLElement).click();\n return;\n }\n const col = Array.prototype.indexOf.call(\n options[row].focusables,\n closestFocusable?.getAttribute(\"data-anv\") === \"checkbox\"\n ? closestFocusable.children[0]\n : closestFocusable,\n );\n setFocusedItem({ row, col });\n }\n };\n\n useEffect(() => {\n if (!ListViewRef.current) return;\n const optionArr = ListViewRef.current.querySelectorAll<HTMLDivElement>(\n \"div[data-anv='listview-option']:not([aria-disabled='true'])\",\n );\n const makeTree = Array.from(optionArr).map((option) => {\n const childFocusables = getFocusables(option);\n return {\n node: option,\n focusables: childFocusables,\n };\n });\n setOptions(makeTree);\n }, [props.children]);\n\n const prevCallbackItems = useRef<unknown[]>([]);\n const prevControlledItems = useRef<unknown[]>(\n selected ?? defaultSelected ?? [],\n );\n\n useEffect(() => {\n if (!options) return;\n const compareArr = options.map((option) => option.node.ariaLabel);\n const orderedSelectedItems = mapOrder(selectedItems, compareArr, \"label\");\n if (\n JSON.stringify(prevCallbackItems.current) ===\n JSON.stringify(orderedSelectedItems)\n )\n return;\n\n onSelectionChange?.(orderedSelectedItems);\n prevCallbackItems.current = orderedSelectedItems;\n }, [onSelectionChange, options, selectedItems]);\n\n useEffect(() => {\n if (!selected) return;\n\n // Helper to extract label from either string or ItemType\n const getLabel = (item: unknown): string =>\n typeof item === \"string\" ? item : (item as ItemType<T>).label;\n\n const filterDuplicates = (selected as unknown[]).reduce<unknown[]>(\n (acc, current) => {\n const currentLabel = getLabel(current);\n const isDup = acc.find((item) => getLabel(item) === currentLabel);\n if (!isDup) {\n return [...acc, current];\n } else {\n return acc;\n }\n },\n [],\n );\n\n if (!options) return;\n const compareArr = options.map((option) => option.node.ariaLabel);\n const orderedSelected = mapOrder(filterDuplicates, compareArr, \"label\");\n if (\n JSON.stringify(prevControlledItems.current) ===\n JSON.stringify(orderedSelected)\n )\n return;\n setSelectedItems(orderedSelected);\n prevControlledItems.current = orderedSelected;\n }, [options, selected]);\n\n const ListViewClassNames = cx([styles[\"listview\"]], className);\n\n if (remainingProps.items !== undefined) {\n const { children, items, ...rest } = remainingProps as Omit<\n ListViewWithItems<T>,\n keyof LayoutUtilProps\n >;\n const renderChildren = children as\n | (({ items }: { items: ItemType<T>[] }) => ReactNode)\n | undefined;\n return (\n <ListViewContext.Provider\n value={{\n options,\n onSelectionChange: onSelectionChange as\n | ((value: unknown[]) => void)\n | undefined,\n indeterminateItems: indeterminate ?? [],\n selectedItems,\n setSelectedItems,\n items,\n controlled: !!selected,\n }}\n >\n <div\n ref={combinedRef}\n className={ListViewClassNames}\n style={styleCombined}\n data-anv=\"listview\"\n role=\"grid\"\n aria-multiselectable=\"true\"\n onFocus={onFocusHandler}\n onBlur={onBlurHandler}\n onKeyDown={onKeyDownHandler}\n onMouseDown={onMouseDownHandler}\n aria-activedescendant={currentActive}\n tabIndex={0}\n {...rest}\n >\n {renderChildren?.({\n items: items.map((item: ItemType<T>) => {\n return item;\n }),\n })}\n </div>\n </ListViewContext.Provider>\n );\n }\n\n const { children, ...rest } = remainingProps;\n return (\n <ListViewContext.Provider\n value={{\n options,\n onSelectionChange: onSelectionChange as\n | ((value: unknown[]) => void)\n | undefined,\n selectedItems,\n indeterminateItems: indeterminate ?? [],\n setSelectedItems,\n controlled: !!selected || !!indeterminate,\n }}\n >\n <div\n ref={combinedRef}\n className={ListViewClassNames}\n style={styleCombined}\n data-anv=\"listview\"\n role=\"grid\"\n onFocus={onFocusHandler}\n onBlur={onBlurHandler}\n onKeyDown={onKeyDownHandler}\n onMouseDown={onMouseDownHandler}\n aria-activedescendant={currentActive}\n tabIndex={0}\n {...rest}\n >\n {children}\n </div>\n </ListViewContext.Provider>\n );\n}\n\nListViewInner.displayName = \"ListView\";\n\n/**\n * ListView component for displaying a list of selectable items in a grid layout.\n *\n * Features:\n * - Supports single and multiple selection modes\n * - Keyboard navigation with arrow keys\n * - Customizable item rendering\n * - Controlled and uncontrolled modes\n * - Accessible with proper ARIA attributes\n * - Focus management for interactive elements\n * - Layout utilities for positioning and spacing\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <ListView items={[{ label: \"Item 1\" }, { label: \"Item 2\" }]} onSelectionChange={handleSelection}>\n * {({ items }) => items.map(item => (\n * <ListView.Option key={item.label} item={item} />\n * ))}\n * </ListView>\n */\nexport const ListView = Object.assign(\n forwardRef(ListViewInner) as <T>(\n props: ListViewProps<T> & { ref?: React.ForwardedRef<HTMLUListElement> },\n ) => ReturnType<typeof ListViewInner>,\n {\n /**\n * ListViewOption component for individual selectable items within a listview.\n *\n * Features:\n * - Displays selectable options with proper ARIA attributes\n * - Supports disabled state for non-selectable options\n * - Keyboard navigation support\n * - Accessible with screen reader support\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <ListView.Option item={{ label: \"Option 1\" }} />\n */\n Option: ListViewOption,\n /**\n * ListViewOptionCell component for rendering a cell within a listview option.\n *\n * Features:\n * - Renders a grid cell for option content\n * - Supports custom content and layout\n * - Accessible with proper ARIA attributes\n *\n * @example\n * <ListView.OptionCell>Custom cell content</ListView.OptionCell>\n */\n OptionCell: ListViewOptionCell,\n },\n);\n"],"names":["children","rest"],"mappings":"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"}
|
package/dist/ListView.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { L as ListView, a as ListViewOption, b as ListViewOptionCell, L as default } from './ListView-
|
|
1
|
+
export { L as ListView, a as ListViewOption, b as ListViewOptionCell, L as default } from './ListView-DpveXOsN.js';
|
|
2
2
|
//# sourceMappingURL=ListView.js.map
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { useState, useEffect, createContext, useContext, forwardRef, useRef, useMemo } from 'react';
|
|
3
|
-
import { I as Icon } from './Icon-
|
|
3
|
+
import { I as Icon } from './Icon-B4uCvMU9.js';
|
|
4
4
|
import { F as Flex } from './Flex-Bb3iHExM.js';
|
|
5
5
|
import { S as SvgCheck } from './check-Cf67OWrZ.js';
|
|
6
6
|
import { c as cx } from './index-De1g9FRV.js';
|
|
7
7
|
import { l as listboxStyles } from './Listbox.module-K85jTwXo.js';
|
|
8
8
|
import { useTrackingId } from './useTrackingId.js';
|
|
9
|
-
import { T as Text } from './Text-
|
|
9
|
+
import { T as Text } from './Text-mDcQHC2U.js';
|
|
10
10
|
import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-DjqeAJZ9.js';
|
|
11
11
|
import { u as useMergeRefs } from './useMergeRefs-Dfmtq9cI.js';
|
|
12
12
|
|
|
@@ -114,7 +114,7 @@ const ListboxOption = forwardRef(
|
|
|
114
114
|
const selectedItemsWithItemRemoved = selectedItems.filter(
|
|
115
115
|
(selectedItem) => selectedItem.label !== label
|
|
116
116
|
);
|
|
117
|
-
setSelected?.(selectedItemsWithItemRemoved);
|
|
117
|
+
if (!controlled) setSelected?.(selectedItemsWithItemRemoved);
|
|
118
118
|
onSelectionChange?.(selectedItemsWithItemRemoved);
|
|
119
119
|
return;
|
|
120
120
|
}
|
|
@@ -122,19 +122,19 @@ const ListboxOption = forwardRef(
|
|
|
122
122
|
const selectedItemsWithItemRemoved = selectedItems.filter(
|
|
123
123
|
(selectedItem) => selectedItem !== label
|
|
124
124
|
);
|
|
125
|
-
setSelected?.(selectedItemsWithItemRemoved);
|
|
125
|
+
if (!controlled) setSelected?.(selectedItemsWithItemRemoved);
|
|
126
126
|
onSelectionChange?.(selectedItemsWithItemRemoved);
|
|
127
127
|
return;
|
|
128
128
|
}
|
|
129
129
|
if (item) {
|
|
130
130
|
const selectedItemsWithItemAdded = [...selectedItems, item];
|
|
131
|
-
setSelected?.(selectedItemsWithItemAdded);
|
|
131
|
+
if (!controlled) setSelected?.(selectedItemsWithItemAdded);
|
|
132
132
|
onSelectionChange?.(selectedItemsWithItemAdded);
|
|
133
133
|
return;
|
|
134
134
|
}
|
|
135
135
|
if (!item) {
|
|
136
136
|
const selectedItemsWithItemAdded = [...selectedItems, label];
|
|
137
|
-
setSelected?.(selectedItemsWithItemAdded);
|
|
137
|
+
if (!controlled) setSelected?.(selectedItemsWithItemAdded);
|
|
138
138
|
onSelectionChange?.(selectedItemsWithItemAdded);
|
|
139
139
|
return;
|
|
140
140
|
}
|
|
@@ -249,10 +249,9 @@ const onListboxKeyDown = (e, context) => {
|
|
|
249
249
|
case "Space":
|
|
250
250
|
e.preventDefault();
|
|
251
251
|
if (!currentFocus) return;
|
|
252
|
-
if (controlled) return;
|
|
253
252
|
if (selectionMode === "single") {
|
|
254
253
|
if (typeof selected === "object" ? selected.label === currentFocus : selected === currentFocus) {
|
|
255
|
-
setSelected?.(void 0);
|
|
254
|
+
if (!controlled) setSelected?.(void 0);
|
|
256
255
|
onSelectionChange?.(void 0);
|
|
257
256
|
return;
|
|
258
257
|
}
|
|
@@ -260,18 +259,18 @@ const onListboxKeyDown = (e, context) => {
|
|
|
260
259
|
const enabledItems = items.filter(
|
|
261
260
|
(item) => !item?.disabled
|
|
262
261
|
);
|
|
263
|
-
setSelected?.(enabledItems[currentIndex]);
|
|
262
|
+
if (!controlled) setSelected?.(enabledItems[currentIndex]);
|
|
264
263
|
onSelectionChange?.(enabledItems[currentIndex]);
|
|
265
264
|
return;
|
|
266
265
|
}
|
|
267
266
|
if (!items) {
|
|
268
|
-
setSelected?.(currentFocus);
|
|
267
|
+
if (!controlled) setSelected?.(currentFocus);
|
|
269
268
|
onSelectionChange?.(currentFocus);
|
|
270
269
|
return;
|
|
271
270
|
}
|
|
272
271
|
}
|
|
273
272
|
if (selectionMode === "multiple") {
|
|
274
|
-
const selectedItems = Array.isArray(selected) ? selected : [selected];
|
|
273
|
+
const selectedItems = Array.isArray(selected) ? selected : selected ? [selected] : [];
|
|
275
274
|
if (items) {
|
|
276
275
|
const focusedItem = items.find(
|
|
277
276
|
(item) => item.label === currentFocus
|
|
@@ -280,28 +279,28 @@ const onListboxKeyDown = (e, context) => {
|
|
|
280
279
|
const selectedItemsWithItemRemoved = selectedItems.filter(
|
|
281
280
|
(selectedItem) => selectedItem !== focusedItem
|
|
282
281
|
);
|
|
283
|
-
setSelected?.(selectedItemsWithItemRemoved);
|
|
282
|
+
if (!controlled) setSelected?.(selectedItemsWithItemRemoved);
|
|
284
283
|
onSelectionChange?.(selectedItemsWithItemRemoved);
|
|
285
284
|
return;
|
|
286
285
|
} else {
|
|
287
286
|
const selectedItemsWithItemAdded = [...selectedItems, focusedItem];
|
|
288
|
-
setSelected?.(selectedItemsWithItemAdded);
|
|
287
|
+
if (!controlled) setSelected?.(selectedItemsWithItemAdded);
|
|
289
288
|
onSelectionChange?.(selectedItemsWithItemAdded);
|
|
290
289
|
return;
|
|
291
290
|
}
|
|
292
291
|
}
|
|
293
292
|
if (!items) {
|
|
294
293
|
if (selectedItems.includes(currentFocus)) {
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
);
|
|
298
|
-
onSelectionChange?.(
|
|
299
|
-
selectedItems.filter((item) => item !== currentFocus)
|
|
294
|
+
const filtered = selectedItems.filter(
|
|
295
|
+
(item) => item !== currentFocus
|
|
300
296
|
);
|
|
297
|
+
if (!controlled) setSelected?.(filtered);
|
|
298
|
+
onSelectionChange?.(filtered);
|
|
301
299
|
return;
|
|
302
300
|
}
|
|
303
|
-
|
|
304
|
-
|
|
301
|
+
const added = [...selectedItems, currentFocus];
|
|
302
|
+
if (!controlled) setSelected?.(added);
|
|
303
|
+
onSelectionChange?.(added);
|
|
305
304
|
}
|
|
306
305
|
}
|
|
307
306
|
break;
|
|
@@ -457,6 +456,7 @@ function ListboxInner(props, ref) {
|
|
|
457
456
|
return;
|
|
458
457
|
}
|
|
459
458
|
onListboxKeyDown(e, {
|
|
459
|
+
controlled,
|
|
460
460
|
setCurrentFocus,
|
|
461
461
|
currentFocus,
|
|
462
462
|
setSelected,
|
|
@@ -600,4 +600,4 @@ const Listbox = Object.assign(
|
|
|
600
600
|
);
|
|
601
601
|
|
|
602
602
|
export { Listbox as L };
|
|
603
|
-
//# sourceMappingURL=Listbox-
|
|
603
|
+
//# sourceMappingURL=Listbox-Cdwaofd2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Listbox-Cdwaofd2.js","sources":["../src/internal/hooks/useTypeAhead/useTypeAhead.tsx","../src/components/Listbox/internal/ListboxContext.tsx","../src/components/Listbox/internal/ListboxOptionGroupContext.tsx","../src/components/Listbox/ListboxOption.tsx","../src/components/Listbox/internal/utils.ts","../src/components/Listbox/ListboxOptionGroup.tsx","../src/components/Listbox/Listbox.tsx"],"sourcesContent":["import { useState, useEffect } from \"react\";\n\n/**\n * Custom hook for implementing type-ahead functionality.\n *\n * Features:\n * - Accumulates typed characters with automatic timeout clearing\n * - Provides type-ahead string for keyboard navigation\n * - Automatically resets after specified timeout period\n * - Supports customizable timeout duration\n * - Uses useEffect for automatic cleanup\n * - Optimized for keyboard navigation in lists and menus\n *\n * @param timeout - Timeout duration in milliseconds before clearing the type-ahead string\n * @returns Tuple containing current type-ahead string and function to update it\n */\nexport const useTypeAhead = (\n timeout = 750,\n): [string, (char: string) => void] => {\n const [typeAhead, setTypeAhead] = useState(\"\");\n\n useEffect(() => {\n const timer = setTimeout(() => setTypeAhead(\"\"), timeout);\n return () => clearTimeout(timer);\n }, [typeAhead, timeout]);\n\n const updateTypeAhead = (char: string) => setTypeAhead((prev) => prev + char);\n\n return [typeAhead, updateTypeAhead];\n};\n","import { createContext, Dispatch, SetStateAction, useContext } from \"react\";\nimport { ListboxProps } from \"../Listbox\";\n\n/**\n * Context properties for the Listbox component\n * @template T - The type of additional properties for items\n */\nexport type ListboxContextProps<T> = {\n /** ID of the currently focused option */\n currentFocus?: string;\n /** Function to set the currently focused option */\n setCurrentFocus: Dispatch<\n SetStateAction<ListboxContextProps<T>[\"currentFocus\"]>\n >;\n /** Currently selected option(s) */\n selected: ListboxProps<T>[\"defaultSelected\"];\n /** Function to set the selected option(s) */\n setSelected: Dispatch<SetStateAction<ListboxContextProps<T>[\"selected\"]>>;\n /** List of available option elements */\n options: NodeListOf<HTMLElement> | undefined;\n /** Current selection mode */\n selectionMode: Exclude<ListboxProps<T>[\"selectionMode\"], undefined>;\n /** Callback when selection changes */\n onSelectionChange: ListboxProps<T>[\"onSelectionChange\"];\n /** Whether auto-select on focus is disabled */\n disableAutoSelectOnFocus: boolean;\n /** Array of items if using items prop */\n items?: unknown[];\n /** Whether the component is controlled */\n controlled?: boolean;\n};\n\n/**\n * Context for sharing listbox state between components\n */\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const ListboxContext = createContext<ListboxContextProps<any> | null>(\n null,\n);\n\n/**\n * Hook to access the listbox context\n * @returns The listbox context\n * @throws Error if used outside of a Listbox component\n */\nexport const useListbox = () => {\n const context = useContext(ListboxContext);\n\n if (context == null) {\n throw new Error(\"useListbox must be wrapped in <Listbox />\");\n }\n\n return context;\n};\n","import { createContext } from \"react\";\n\ntype ListboxOptionGroupContextProps = {\n disabled?: boolean;\n};\n\nexport const ListboxOptionGroupContext =\n createContext<ListboxOptionGroupContextProps>({});\n","import {\n ComponentPropsWithoutRef,\n forwardRef,\n useContext,\n MouseEvent,\n} from \"react\";\nimport { Icon } from \"../Icon\";\nimport { Flex, FlexProps } from \"../Flex\";\nimport Check from \"@servicetitan/hammer-icon/mdi/round/check.svg\";\nimport { DataTrackingId } from \"../../types\";\nimport { useListbox } from \"./internal/ListboxContext\";\nimport { useTrackingId } from \"../../hooks\";\nimport { ListboxOptionGroupContext } from \"./internal/ListboxOptionGroupContext\";\n\nimport cx from \"classnames\";\nimport styles from \"./Listbox.module.scss\";\n\ntype ItemType = {\n label: string;\n [key: string]: unknown;\n};\n\n/**\n * Props for the ListboxOption component\n * @extends ComponentPropsWithoutRef<\"li\">\n */\nexport type ListboxOptionProps = ComponentPropsWithoutRef<\"li\"> & {\n /** The value of the option */\n value?: string;\n /** Whether the option is disabled */\n disabled?: boolean;\n /** Flex alignment for items */\n alignItems?: FlexProps[\"alignItems\"];\n /** Flex justification for items */\n justifyItems?: FlexProps[\"justifyItems\"];\n /** Flex alignment for content */\n alignContent?: FlexProps[\"alignContent\"];\n /** Flex justification for content */\n justifyContent?: FlexProps[\"justifyContent\"];\n /** Flex place-items property */\n placeItems?: FlexProps[\"placeItems\"];\n /** Flex place-content property */\n placeContent?: FlexProps[\"placeContent\"];\n} & (\n | {\n /** The item object when using items prop */\n item: ItemType;\n /** The display label for the option (optional if item is provided) */\n label?: string;\n }\n | {\n /** The display label for the option */\n label: string;\n /** No item object when using label directly */\n item?: never;\n }\n ) &\n DataTrackingId;\n\n/**\n * ListboxOption component for individual selectable items within a listbox.\n *\n * Features:\n * - Displays selectable options with proper ARIA attributes\n * - Supports disabled state for non-selectable options\n * - Keyboard navigation support\n * - Accessible with screen reader support\n *\n * @example\n * <ListboxOption value=\"option1\" label=\"Option 1\" />\n */\nexport const ListboxOption = forwardRef<HTMLLIElement, ListboxOptionProps>(\n (props, ref) => {\n const {\n className,\n children,\n disabled: disabledProp,\n onClick,\n label: labelProp,\n item,\n value,\n alignItems,\n justifyItems,\n alignContent,\n justifyContent,\n placeItems,\n placeContent,\n ...rest\n } = props;\n\n const {\n setCurrentFocus,\n currentFocus,\n selected,\n setSelected,\n selectionMode,\n onSelectionChange,\n controlled,\n } = useListbox();\n\n const label = labelProp || item?.label || \"\";\n\n const { disabled: groupDisabled } = useContext(ListboxOptionGroupContext);\n const disabled =\n groupDisabled || disabledProp || (item?.disabled as boolean) || false;\n\n const isSelected = () => {\n if (selectionMode === \"single\") {\n if (item) {\n return selected?.label === label;\n }\n return selected === label;\n }\n if (selectionMode === \"multiple\") {\n const selectedItems = Array.isArray(selected)\n ? selected\n : selected\n ? [selected]\n : [];\n if (item) {\n return selectedItems.some(\n (selectedItem) => selectedItem.label === label,\n );\n }\n return selectedItems.includes(label);\n }\n return false;\n };\n\n const onClickHandler = (e: MouseEvent<HTMLLIElement>) => {\n if (disabled) return;\n\n onClick?.(e);\n setCurrentFocus?.(label);\n\n if (selectionMode === \"single\") {\n if (\n (!item && selected === label) ||\n (item && selected?.label === label)\n ) {\n if (!controlled) {\n setSelected?.(undefined);\n }\n onSelectionChange?.(undefined);\n return;\n }\n\n if (item) {\n if (!controlled) {\n setSelected?.(item);\n }\n onSelectionChange?.(item);\n return;\n }\n\n if (!item) {\n if (!controlled) {\n setSelected?.(label);\n }\n onSelectionChange?.(label);\n return;\n }\n }\n\n if (selectionMode === \"multiple\") {\n const selectedItems = Array.isArray(selected)\n ? selected\n : selected\n ? [selected]\n : [];\n if (\n item &&\n selectedItems.some((selectedItem) => selectedItem.label === label)\n ) {\n const selectedItemsWithItemRemoved = selectedItems.filter(\n (selectedItem) => selectedItem.label !== label,\n );\n if (!controlled) setSelected?.(selectedItemsWithItemRemoved);\n onSelectionChange?.(selectedItemsWithItemRemoved);\n return;\n }\n\n if (!item && selectedItems.includes(label)) {\n const selectedItemsWithItemRemoved = selectedItems.filter(\n (selectedItem) => selectedItem !== label,\n );\n if (!controlled) setSelected?.(selectedItemsWithItemRemoved);\n onSelectionChange?.(selectedItemsWithItemRemoved);\n return;\n }\n\n if (item) {\n const selectedItemsWithItemAdded = [...selectedItems, item];\n if (!controlled) setSelected?.(selectedItemsWithItemAdded);\n onSelectionChange?.(selectedItemsWithItemAdded);\n return;\n }\n\n if (!item) {\n const selectedItemsWithItemAdded = [...selectedItems, label];\n if (!controlled) setSelected?.(selectedItemsWithItemAdded);\n onSelectionChange?.(selectedItemsWithItemAdded);\n return;\n }\n }\n };\n\n const data = {\n value: props.value,\n label: \"item\" in props ? props.item?.label : props.label,\n };\n\n const trackingId = useTrackingId({\n name: \"ListboxOption\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const ListboxOptionClassNames = cx(styles[\"option\"], className, {});\n\n return (\n <li // eslint-disable-line jsx-a11y/click-events-have-key-events\n data-tracking-id={trackingId}\n className={ListboxOptionClassNames}\n data-anv=\"listbox-option\"\n role=\"option\"\n aria-disabled={disabled}\n data-focused={currentFocus === label}\n aria-selected={isSelected()}\n id={label}\n onClick={onClickHandler}\n ref={ref}\n value={value ?? label}\n {...rest}\n >\n <Flex\n className={styles[\"children\"]}\n grow={1}\n shrink={1}\n alignItems={alignItems}\n justifyItems={justifyItems}\n alignContent={alignContent}\n justifyContent={justifyContent}\n placeItems={placeItems}\n placeContent={placeContent}\n >\n {children}\n </Flex>\n <Icon\n aria-hidden\n svg={Check}\n inherit\n className={styles[\"icon\"]}\n style={{ opacity: isSelected() ? 1 : 0 }}\n />\n </li>\n );\n },\n);\n\nListboxOption.displayName = \"ListboxOption\";\n","import { KeyboardEvent } from \"react\";\nimport { ListboxContextProps } from \"./ListboxContext\";\n\nexport const scrollToOption = (node: HTMLElement | undefined) => {\n node?.scrollIntoView({\n block: \"nearest\",\n inline: \"center\",\n });\n};\n\nexport const onListboxKeyDown = (\n e: KeyboardEvent<HTMLUListElement>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n context: ListboxContextProps<any>,\n) => {\n const {\n options,\n currentFocus,\n selectionMode,\n onSelectionChange,\n selected,\n setSelected,\n items,\n controlled,\n } = context;\n\n if (!options) return;\n\n const currentNode = Array.from(options).find(\n (node) => node.id === currentFocus,\n ) as HTMLElement;\n\n const currentIndex = Array.from(options).indexOf(currentNode);\n\n switch (e.code) {\n case \"ArrowDown\":\n e.preventDefault();\n if (currentIndex === options.length - 1) {\n goTo(options[0], 0, context);\n } else {\n goTo(options[currentIndex + 1], currentIndex + 1, context);\n }\n break;\n case \"ArrowUp\":\n e.preventDefault();\n if (currentIndex === 0) {\n goTo(options[options.length - 1], options.length - 1, context);\n } else {\n goTo(options[currentIndex - 1], currentIndex - 1, context);\n }\n break;\n case \"Home\":\n e.preventDefault();\n goTo(options[0], 0, context);\n break;\n case \"End\":\n e.preventDefault();\n goTo(options[options.length - 1], options.length - 1, context);\n break;\n\n case \"Enter\":\n case \"Space\":\n e.preventDefault();\n\n if (!currentFocus) return;\n\n if (selectionMode === \"single\") {\n if (\n typeof selected === \"object\"\n ? selected.label === currentFocus\n : selected === currentFocus\n ) {\n if (!controlled) setSelected?.(undefined);\n onSelectionChange?.(undefined);\n return;\n }\n\n if (items) {\n const enabledItems = items.filter(\n (item) => !(item as { disabled?: boolean })?.disabled,\n );\n if (!controlled) setSelected?.(enabledItems[currentIndex]);\n onSelectionChange?.(enabledItems[currentIndex]);\n return;\n }\n\n if (!items) {\n if (!controlled) setSelected?.(currentFocus);\n onSelectionChange?.(currentFocus);\n return;\n }\n }\n\n if (selectionMode === \"multiple\") {\n const selectedItems = Array.isArray(selected)\n ? selected\n : selected\n ? [selected]\n : [];\n\n if (items) {\n const focusedItem = items.find(\n (item) => (item as { label: string }).label === currentFocus,\n );\n\n if (selectedItems.includes(focusedItem)) {\n const selectedItemsWithItemRemoved = selectedItems.filter(\n (selectedItem) => selectedItem !== focusedItem,\n );\n if (!controlled) setSelected?.(selectedItemsWithItemRemoved);\n onSelectionChange?.(selectedItemsWithItemRemoved);\n return;\n } else {\n const selectedItemsWithItemAdded = [...selectedItems, focusedItem];\n if (!controlled) setSelected?.(selectedItemsWithItemAdded);\n onSelectionChange?.(selectedItemsWithItemAdded);\n return;\n }\n }\n\n if (!items) {\n if (selectedItems.includes(currentFocus)) {\n const filtered = selectedItems.filter(\n (item) => item !== currentFocus,\n );\n if (!controlled) setSelected?.(filtered);\n onSelectionChange?.(filtered);\n return;\n }\n const added = [...selectedItems, currentFocus];\n if (!controlled) setSelected?.(added);\n onSelectionChange?.(added);\n }\n }\n break;\n\n default:\n break;\n }\n};\n\nconst goTo = (\n option: HTMLElement,\n index: number,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n context: ListboxContextProps<any>,\n) => {\n const {\n setCurrentFocus,\n setSelected,\n selectionMode,\n disableAutoSelectOnFocus,\n onSelectionChange,\n items,\n controlled,\n } = context;\n\n scrollToOption(option);\n if (disableAutoSelectOnFocus || selectionMode === \"multiple\") {\n setCurrentFocus(option?.id);\n return;\n }\n\n setCurrentFocus(option?.id);\n\n if (controlled) return;\n\n if (items) {\n const enabledItems = items.filter(\n (item) => !(item as { disabled?: boolean })?.disabled,\n );\n setSelected(enabledItems[index]);\n onSelectionChange?.(enabledItems[index]);\n } else {\n setSelected(option?.id);\n onSelectionChange?.(option?.id);\n }\n};\n","import { ComponentPropsWithoutRef, forwardRef } from \"react\";\nimport { Text } from \"../Text\";\nimport { ListboxOptionGroupContext } from \"./internal/ListboxOptionGroupContext\";\n\nimport cx from \"classnames\";\nimport styles from \"./Listbox.module.scss\";\n\n/**\n * Props for the ListboxOptionGroup component\n * @extends ComponentPropsWithoutRef<\"div\">\n */\nexport type ListboxOptionGroupProps = ComponentPropsWithoutRef<\"div\"> & {\n /** Whether the group is disabled */\n disabled?: boolean;\n /** The label for the option group */\n label: string;\n};\n\n/**\n * ListboxOptionGroup component for grouping related options within a listbox.\n *\n * Features:\n * - Groups related options with a descriptive label\n * - Maintains proper ARIA structure for accessibility\n * - Supports keyboard navigation within groups\n * - Visual separation of option categories\n *\n * @example\n * <ListboxOptionGroup label=\"Fruits\">\n * <ListboxOption value=\"apple\">Apple</ListboxOption>\n * <ListboxOption value=\"banana\">Banana</ListboxOption>\n * </ListboxOptionGroup>\n */\nexport const ListboxOptionGroup = forwardRef<\n HTMLDivElement,\n ListboxOptionGroupProps\n>((props, ref) => {\n const { className, children, disabled, label, ...rest } = props;\n\n const optionGroupCx = cx(styles[\"option-group\"], className);\n\n const labelCx = cx(styles[\"label\"], {\n [styles[\"disabled\"]]: disabled,\n });\n\n return (\n <ListboxOptionGroupContext.Provider value={{ disabled }}>\n <div\n data-anv=\"listbox-option-group\"\n className={optionGroupCx}\n ref={ref}\n {...rest}\n >\n <Text variant=\"eyebrow\" className={labelCx}>\n {label}\n </Text>\n\n {children}\n </div>\n </ListboxOptionGroupContext.Provider>\n );\n});\n\nListboxOptionGroup.displayName = \"ListboxOptionGroup\";\n","import {\n Ref,\n forwardRef,\n ReactNode,\n ComponentPropsWithoutRef,\n useRef,\n useState,\n useEffect,\n KeyboardEvent,\n FocusEvent,\n useMemo,\n} from \"react\";\nimport { LayoutUtilProps } from \"../../types\";\nimport { ListboxOption } from \"./ListboxOption\";\nimport { ListboxContext, ListboxContextProps } from \"./internal/ListboxContext\";\nimport { onListboxKeyDown, scrollToOption } from \"./internal/utils\";\nimport { useMergeRefs } from \"../../hooks\";\nimport { ListboxOptionGroup } from \"./ListboxOptionGroup\";\n\nimport cx from \"classnames\";\nimport styles from \"./Listbox.module.scss\";\nimport { useLayoutPropsUtil, useTypeAhead } from \"../../internal/hooks\";\n\n/**\n * Represents an item in the listbox with a label and optional disabled state.\n * @template T - The type of additional properties for the item\n */\nexport type ListboxItemType<T> = T & {\n /** The display label for the item */\n label: string;\n /** Whether the item is disabled and cannot be selected */\n disabled?: boolean;\n};\n\n/**\n * Props for single selection mode without items array\n */\ntype SingleWithoutItems = {\n /** Selection mode for single item selection */\n selectionMode?: \"single\";\n /** Whether to disable automatic selection when focusing on an option */\n disableAutoSelectOnFocus?: boolean;\n /** Currently selected item (controlled) */\n selected?: string;\n /** Default selected item (uncontrolled) */\n defaultSelected?: string;\n /** Callback when selection changes */\n onSelectionChange?: (selected: string | undefined) => void;\n /** Items array - not allowed in this mode */\n items?: never;\n /** Child elements to render */\n children: ReactNode;\n};\n\n/**\n * Props for multiple selection mode without items array\n */\ntype MultipleWithoutItems = {\n /** Selection mode for multiple item selection */\n selectionMode: \"multiple\";\n /** Auto-select on focus is not available in multiple mode */\n disableAutoSelectOnFocus?: never;\n /** Currently selected items (controlled) */\n selected?: string[];\n /** Default selected items (uncontrolled) */\n defaultSelected?: string[];\n /** Callback when selection changes */\n onSelectionChange?: (selected: string[]) => void;\n /** Items array - not allowed in this mode */\n items?: never;\n /** Child elements to render */\n children: ReactNode;\n};\n\n/**\n * Props for single selection mode with items array\n * @template T - The type of additional properties for items\n */\ntype SingleWithItems<T> = {\n /** Selection mode for single item selection */\n selectionMode?: \"single\";\n /** Whether to disable automatic selection when focusing on an option */\n disableAutoSelectOnFocus?: boolean;\n /** Currently selected item (controlled) */\n selected?: ListboxItemType<T>;\n /** Default selected item (uncontrolled) */\n defaultSelected?: ListboxItemType<T>;\n /** Callback when selection changes */\n onSelectionChange?: (selected: ListboxItemType<T> | undefined) => void;\n /** Array of items to render */\n items: ListboxItemType<T>[];\n /** Optional render function for items */\n children?: ({ items }: { items: ListboxItemType<T>[] }) => ReactNode;\n};\n\n/**\n * Props for multiple selection mode with items array\n * @template T - The type of additional properties for items\n */\ntype MultipleWithItems<T> = {\n /** Selection mode for multiple item selection */\n selectionMode: \"multiple\";\n /** Auto-select on focus is not available in multiple mode */\n disableAutoSelectOnFocus?: never;\n /** Currently selected items (controlled) */\n selected?: ListboxItemType<T>[];\n /** Default selected items (uncontrolled) */\n defaultSelected?: ListboxItemType<T>[];\n /** Callback when selection changes */\n onSelectionChange?: (selected: ListboxItemType<T>[]) => void;\n /** Array of items to render */\n items: ListboxItemType<T>[];\n /** Optional render function for items */\n children?: ({ items }: { items: ListboxItemType<T>[] }) => ReactNode;\n};\n\n/**\n * Props for the Listbox component\n * @template T - The type of additional properties for items\n * @extends ComponentPropsWithoutRef<\"ul\">\n * @extends LayoutUtilProps\n */\nexport type ListboxProps<T> = Omit<ComponentPropsWithoutRef<\"ul\">, \"children\"> &\n LayoutUtilProps &\n (\n | SingleWithoutItems\n | MultipleWithoutItems\n | SingleWithItems<T>\n | MultipleWithItems<T>\n );\n\nfunction ListboxInner<T>(props: ListboxProps<T>, ref: Ref<HTMLUListElement>) {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n className,\n selectionMode = \"single\",\n items,\n children,\n onKeyDown,\n onFocus,\n onSelectionChange,\n selected: selectedProp,\n defaultSelected,\n disableAutoSelectOnFocus,\n style,\n ...rest\n } = componentProps;\n\n const listboxRef = useRef<HTMLUListElement>(null);\n const [selected, setSelected] = useState<ListboxProps<T>[\"defaultSelected\"]>(\n selectedProp || defaultSelected,\n );\n const [options, setOptions] = useState<NodeListOf<HTMLElement>>();\n const [typeAhead, updateTypeAhead] = useTypeAhead();\n const [currentFocus, setCurrentFocus] = useState<\n ListboxContextProps<T>[\"currentFocus\"]\n >(\n Array.isArray(selected)\n ? typeof selected[0] === \"object\"\n ? (selected as ListboxItemType<T>[])[0].label\n : (selected as string[])[0]\n : typeof selected === \"object\"\n ? (selected as ListboxItemType<T>)?.label\n : (selected as string),\n );\n\n const ListboxClassNames = cx(styles[\"listbox\"], className, {});\n\n const controlled = selectedProp !== undefined;\n\n useEffect(() => {\n if (listboxRef.current) {\n setOptions(\n listboxRef.current.querySelectorAll(\n \"[role=option]:not([aria-disabled='true'])\",\n ),\n );\n }\n }, [items, listboxRef, selectionMode]);\n\n useEffect(\n () => {\n if (\"selected\" in componentProps) {\n setSelected(selectedProp);\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [selectedProp],\n );\n\n useEffect(() => {\n if (!typeAhead.length) {\n return;\n }\n const lowerTypeAhead = typeAhead.toLowerCase();\n const nodes =\n options &&\n Array.from(options).filter((node) =>\n node.innerText.toLowerCase().startsWith(lowerTypeAhead),\n );\n\n if (!nodes?.length) {\n return;\n }\n\n let node = nodes[0];\n\n if (lowerTypeAhead.length === 1 && nodes.length > 1) {\n // Select next matching item on first key press if the list of matches contains our current selection WITH looping\n const focusIndex = currentFocus\n ? nodes.map((node) => node.id).indexOf(currentFocus)\n : -1;\n if (focusIndex > -1) {\n let nextFocusIndex = focusIndex + 1;\n if (nextFocusIndex === nodes.length) {\n nextFocusIndex = 0;\n }\n node = nodes[nextFocusIndex];\n }\n }\n\n setCurrentFocus(node.id);\n scrollToOption(node);\n\n if (controlled) return;\n\n if (selectionMode === \"single\") {\n if (items) {\n if (disableAutoSelectOnFocus) {\n const focusedItem = items.find(\n (item) => (item as ListboxItemType<T>).label === currentFocus,\n );\n setSelected?.(focusedItem);\n onSelectionChange?.(focusedItem);\n }\n return;\n }\n\n if (!items) {\n if (disableAutoSelectOnFocus) {\n setSelected(node.id);\n onSelectionChange?.(node.id);\n }\n return;\n }\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [typeAhead]);\n\n const onKeyDownHandler = (e: KeyboardEvent<HTMLUListElement>) => {\n onKeyDown?.(e);\n\n if (new RegExp(/^[a-zA-Z0-9]$/i).test(e.key)) {\n e.preventDefault();\n e.stopPropagation();\n updateTypeAhead(e.key);\n return;\n }\n\n onListboxKeyDown(e, {\n controlled,\n setCurrentFocus,\n currentFocus,\n setSelected,\n selected,\n selectionMode,\n options,\n onSelectionChange,\n disableAutoSelectOnFocus: !!disableAutoSelectOnFocus,\n items,\n });\n };\n\n const onFocusHandler = (e: FocusEvent<HTMLUListElement>) => {\n onFocus?.(e);\n\n if (!options) return;\n\n if (selectionMode === \"single\") {\n const currentFocusExists = Array.from(options).some(\n (item) => item.id === currentFocus,\n );\n\n if (currentFocus && currentFocusExists) return;\n if (!items) {\n if (currentFocusExists) {\n setCurrentFocus(selected as string);\n return;\n }\n setCurrentFocus(options[0].id);\n return;\n }\n if (currentFocusExists) {\n setCurrentFocus((selected as ListboxItemType<T>)?.label);\n return;\n }\n setCurrentFocus(items?.[0].label);\n return;\n }\n\n if (selectionMode === \"multiple\") {\n const selectedArr = Array.isArray(selected) ? selected : [selected];\n const currentFocusExists = Array.from(options).some(\n (item) => item.id === currentFocus,\n );\n\n if (currentFocus && currentFocusExists) return;\n if (!items) {\n console.log({ currentFocus, currentFocusExists });\n if (currentFocusExists) {\n setCurrentFocus((selectedArr as ListboxItemType<T>[])[0].label);\n return;\n }\n setCurrentFocus(options[0].id);\n return;\n }\n if (currentFocusExists) {\n setCurrentFocus((selectedArr as ListboxItemType<T>[])[0]?.label);\n return;\n }\n setCurrentFocus(items?.[0].label);\n return;\n }\n\n setCurrentFocus(options[0].id);\n };\n\n const mergeRef = useMergeRefs([ref, listboxRef]);\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n const value = useMemo(\n () => ({\n setCurrentFocus,\n currentFocus,\n setSelected,\n selected,\n selectionMode,\n items,\n options,\n onSelectionChange,\n disableAutoSelectOnFocus: !!disableAutoSelectOnFocus,\n controlled,\n }),\n [\n currentFocus,\n disableAutoSelectOnFocus,\n onSelectionChange,\n options,\n selected,\n selectionMode,\n items,\n controlled,\n ],\n );\n\n return (\n <ListboxContext.Provider value={value}>\n <ul\n tabIndex={0}\n role=\"listbox\"\n style={styleCombined}\n aria-multiselectable={selectionMode === \"multiple\" ? \"true\" : \"false\"}\n aria-activedescendant={currentFocus}\n className={ListboxClassNames}\n data-anv=\"listbox\"\n onKeyDown={onKeyDownHandler}\n onFocus={onFocusHandler}\n {...rest}\n ref={mergeRef}\n >\n {items ? children?.({ items }) : children}\n </ul>\n </ListboxContext.Provider>\n );\n}\n\nListboxInner.displayName = \"Listbox\";\n\n/**\n * Listbox component for selecting one or more items from a list\n *\n * Features:\n * - Supports single and multiple selection modes\n * - Keyboard navigation with arrow keys and type-ahead\n * - Optional auto-selection on focus\n * - Controlled and uncontrolled modes\n * - Accessible with proper ARIA attributes\n * - Supports custom item rendering\n * - Option grouping for organization\n * - Layout utilities for positioning and spacing\n * - Automatic tracking ID generation for analytics\n *\n * @template T - The type of additional properties for items\n * @example\n * <Listbox selectionMode=\"single\" onSelectionChange={handleSelection}>\n * <Listbox.Option value=\"option1\">Option 1</Listbox.Option>\n * <Listbox.Option value=\"option2\">Option 2</Listbox.Option>\n * </Listbox>\n */\nexport const Listbox = Object.assign(\n forwardRef(ListboxInner) as <T>(\n props: ListboxProps<T> & { ref?: React.ForwardedRef<HTMLUListElement> },\n ) => ReturnType<typeof ListboxInner>,\n {\n /**\n * ListboxOption component for individual selectable items within a listbox\n *\n * Features:\n * - Displays selectable options with proper ARIA attributes\n * - Supports disabled state for non-selectable options\n * - Keyboard navigation support\n * - Automatic tracking ID generation for analytics\n * - Accessible with screen reader support\n *\n * @example\n * <Listbox.Option value=\"option1\" label=\"Option 1\" />\n */\n Option: ListboxOption,\n /**\n * ListboxOptionGroup component for grouping related options within a listbox\n *\n * Features:\n * - Groups related options with a descriptive label\n * - Maintains proper ARIA structure for accessibility\n * - Supports keyboard navigation within groups\n * - Visual separation of option categories\n *\n * @example\n * <Listbox.OptionGroup label=\"Fruits\">\n * <Listbox.Option value=\"apple\">Apple</Listbox.Option>\n * <Listbox.Option value=\"banana\">Banana</Listbox.Option>\n * </Listbox.OptionGroup>\n */\n OptionGroup: ListboxOptionGroup,\n },\n);\n"],"names":["styles","Check","node"],"mappings":"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"}
|
package/dist/Listbox.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { L as Listbox, L as default } from './Listbox-
|
|
1
|
+
export { L as Listbox, L as default } from './Listbox-Cdwaofd2.js';
|
|
2
2
|
//# sourceMappingURL=Listbox.js.map
|
|
@@ -3,9 +3,9 @@ import * as React from 'react';
|
|
|
3
3
|
import { createContext, forwardRef, useContext, useId, useRef, useState, useCallback, useLayoutEffect, useEffect, useMemo } from 'react';
|
|
4
4
|
import { c as cx } from './index-De1g9FRV.js';
|
|
5
5
|
import { S as SvgArrowDropDown } from './arrow_drop_down-ChAdBDux.js';
|
|
6
|
-
import { B as Button } from './Button-
|
|
6
|
+
import { B as Button } from './Button-BNzCI47m.js';
|
|
7
7
|
import { D as DialogContext } from './DialogContext-DBgtApl9.js';
|
|
8
|
-
import { I as Icon } from './Icon-
|
|
8
|
+
import { I as Icon } from './Icon-B4uCvMU9.js';
|
|
9
9
|
import { m as menuStyles } from './Menu.module-CoyI86tZ.js';
|
|
10
10
|
import { u as useMergeRefs } from './useMergeRefs-Dfmtq9cI.js';
|
|
11
11
|
import { c as childrenToString } from './childrenToString-Bz9MqbHb.js';
|
|
@@ -832,4 +832,4 @@ const Menu = Object.assign(
|
|
|
832
832
|
);
|
|
833
833
|
|
|
834
834
|
export { Menu as M };
|
|
835
|
-
//# sourceMappingURL=Menu-
|
|
835
|
+
//# sourceMappingURL=Menu-DmEXQLXt.js.map
|