@servicetitan/anvil2 3.0.7 → 3.0.9
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 +42 -0
- package/dist/{AiMark-BXL0sWIV.js → AiMark-CS6MvraM.js} +5 -4
- package/dist/{AiMark-BXL0sWIV.js.map → AiMark-CS6MvraM.js.map} +1 -1
- package/dist/AiMark.js +1 -1
- package/dist/{Alert-BNH0UD2s.js → Alert-CNDLoh6b.js} +2 -2
- package/dist/{Alert-BNH0UD2s.js.map → Alert-CNDLoh6b.js.map} +1 -1
- package/dist/Alert.js +1 -1
- package/dist/{AnvilProvider-J9DjoJiB.js → AnvilProvider-BFK29dL5.js} +3 -2
- package/dist/{AnvilProvider-J9DjoJiB.js.map → AnvilProvider-BFK29dL5.js.map} +1 -1
- package/dist/AnvilProvider.js +1 -1
- package/dist/{Avatar-FDHyqiCy.js → Avatar-Bl-Dxbhf.js} +7 -2
- package/dist/Avatar-Bl-Dxbhf.js.map +1 -0
- package/dist/{Avatar-B_cRQqKR.js → Avatar-CdAIJ5VK.js} +2 -2
- package/dist/{Avatar-B_cRQqKR.js.map → Avatar-CdAIJ5VK.js.map} +1 -1
- package/dist/Avatar.js +2 -2
- package/dist/{Breadcrumbs-Bzxbdu-S.js → Breadcrumbs--Xt6l_2L.js} +2 -2
- package/dist/{Breadcrumbs-Bzxbdu-S.js.map → Breadcrumbs--Xt6l_2L.js.map} +1 -1
- package/dist/Breadcrumbs.js +1 -1
- package/dist/{Calendar-DS5eWpGF.js → Calendar-5mAxtdNh.js} +2 -2
- package/dist/{Calendar-DS5eWpGF.js.map → Calendar-5mAxtdNh.js.map} +1 -1
- package/dist/{Calendar-BYNFAWpZ.js → Calendar-rITorBvD.js} +5 -3
- package/dist/{Calendar-BYNFAWpZ.js.map → Calendar-rITorBvD.js.map} +1 -1
- package/dist/Calendar.js +2 -2
- package/dist/{Checkbox-BeIzx_ZX.js → Checkbox-BYWhkYoK.js} +2 -2
- package/dist/{Checkbox-BeIzx_ZX.js.map → Checkbox-BYWhkYoK.js.map} +1 -1
- package/dist/{Checkbox-BB3BDJsK.js → Checkbox-DTzoDcJl.js} +3 -3
- package/dist/{Checkbox-BB3BDJsK.js.map → Checkbox-DTzoDcJl.js.map} +1 -1
- package/dist/Checkbox.js +1 -1
- package/dist/{Chip-D2k5X_wX.js → Chip-CyMNyEPR.js} +3 -3
- package/dist/{Chip-D2k5X_wX.js.map → Chip-CyMNyEPR.js.map} +1 -1
- package/dist/Chip.js +1 -1
- package/dist/Combobox.js +1 -1
- package/dist/{DataTable-E8z0H8c7.js → DataTable-FG0Kjx0d.js} +1206 -445
- package/dist/DataTable-FG0Kjx0d.js.map +1 -0
- package/dist/DataTable.css +301 -233
- package/dist/{DateFieldRange-BN_uIvHI.js → DateFieldRange-BUug1tUy.js} +4 -4
- package/dist/{DateFieldRange-BN_uIvHI.js.map → DateFieldRange-BUug1tUy.js.map} +1 -1
- package/dist/DateFieldRange.js +1 -1
- package/dist/{DateFieldSingle-h3YkdwPo.js → DateFieldSingle-DR7faQGD.js} +4 -4
- package/dist/{DateFieldSingle-h3YkdwPo.js.map → DateFieldSingle-DR7faQGD.js.map} +1 -1
- package/dist/DateFieldSingle.js +1 -1
- package/dist/{DateFieldYearless-m_Hl2gMY.js → DateFieldYearless-7MFcR7L6.js} +4 -4
- package/dist/{DateFieldYearless-m_Hl2gMY.js.map → DateFieldYearless-7MFcR7L6.js.map} +1 -1
- package/dist/DateFieldYearless.js +1 -1
- package/dist/{DateFieldYearlessRange-DNqSTBDr.js → DateFieldYearlessRange-DGtdyISH.js} +3 -3
- package/dist/{DateFieldYearlessRange-DNqSTBDr.js.map → DateFieldYearlessRange-DGtdyISH.js.map} +1 -1
- package/dist/DateFieldYearlessRange.js +1 -1
- package/dist/{DaysOfTheWeek-D58z_eF3.js → DaysOfTheWeek-C7oN9nIe.js} +3 -3
- package/dist/{DaysOfTheWeek-D58z_eF3.js.map → DaysOfTheWeek-C7oN9nIe.js.map} +1 -1
- package/dist/DaysOfTheWeek.js +1 -1
- package/dist/{Dialog-CvYSMvfD.js → Dialog-dE9c90iR.js} +3 -3
- package/dist/{Dialog-CvYSMvfD.js.map → Dialog-dE9c90iR.js.map} +1 -1
- package/dist/Dialog.js +1 -1
- package/dist/{Divider-CxtTyw8_.js → Divider-Dz27DFuE.js} +17 -17
- package/dist/{Divider-CxtTyw8_.js.map → Divider-Dz27DFuE.js.map} +1 -1
- package/dist/Divider.css +21 -24
- package/dist/Divider.js +1 -1
- package/dist/Dnd.js +2 -2
- package/dist/{DndHandleButton-CHTOYRlq.js → DndHandleButton-BW9xLWQm.js} +2 -4
- package/dist/DndHandleButton-BW9xLWQm.js.map +1 -0
- package/dist/DndSort.js +2 -2
- package/dist/{Drawer-s2y0xcgV.js → Drawer-Dk0MsaOU.js} +3 -3
- package/dist/{Drawer-s2y0xcgV.js.map → Drawer-Dk0MsaOU.js.map} +1 -1
- package/dist/Drawer.js +1 -1
- package/dist/DrillDown.js +1 -1
- package/dist/{EditCard-B25pj0Jx.js → EditCard-DV2N7zWr.js} +2 -2
- package/dist/{EditCard-B25pj0Jx.js.map → EditCard-DV2N7zWr.js.map} +1 -1
- package/dist/EditCard.js +1 -1
- package/dist/{FieldLabel-D1qPAGtB.js → FieldLabel-VVn8GR64.js} +3 -3
- package/dist/{FieldLabel-D1qPAGtB.js.map → FieldLabel-VVn8GR64.js.map} +1 -1
- package/dist/FieldLabel.js +1 -1
- package/dist/{FilterBar-B4ZAs73g.js → FilterBar-B3c_VGDk.js} +6 -5
- package/dist/{FilterBar-B4ZAs73g.js.map → FilterBar-B3c_VGDk.js.map} +1 -1
- package/dist/FilterBar.js +1 -1
- package/dist/{InputMask-BDl09V4u.js → InputMask-VBHWGZGN.js} +3 -3
- package/dist/{InputMask-BDl09V4u.js.map → InputMask-VBHWGZGN.js.map} +1 -1
- package/dist/InputMask.js +1 -1
- package/dist/{ListView-DO5psxd4.js → ListView-BUrfz75g.js} +2 -2
- package/dist/{ListView-DO5psxd4.js.map → ListView-BUrfz75g.js.map} +1 -1
- package/dist/ListView.js +1 -1
- package/dist/{Listbox-CvQHBFWb.js → Listbox-CRY-0BkS.js} +2 -2
- package/dist/{Listbox-CvQHBFWb.js.map → Listbox-CRY-0BkS.js.map} +1 -1
- package/dist/Listbox.js +1 -1
- package/dist/{Menu-W0c-xKdX.js → Menu-DNJ0YqjA.js} +11 -7
- package/dist/Menu-DNJ0YqjA.js.map +1 -0
- package/dist/Menu.js +1 -1
- package/dist/MenuFooter-CrsZdXvN.js +115 -0
- package/dist/MenuFooter-CrsZdXvN.js.map +1 -0
- package/dist/MultiSelectField.js +1 -1
- package/dist/{MultiSelectFieldSync-CXX2F0ru.js → MultiSelectFieldSync-CzHj9Qvy.js} +8 -53
- package/dist/MultiSelectFieldSync-CzHj9Qvy.js.map +1 -0
- package/dist/MultiSelectMenu.js +1 -1
- package/dist/{MultiSelectMenuSync-EKtvlL62.js → MultiSelectMenuSync-BGcrYjby.js} +9 -76
- package/dist/MultiSelectMenuSync-BGcrYjby.js.map +1 -0
- package/dist/{NumberField-BymFZhIJ.js → NumberField-bgYX7JGs.js} +3 -3
- package/dist/{NumberField-BymFZhIJ.js.map → NumberField-bgYX7JGs.js.map} +1 -1
- package/dist/NumberField.js +1 -1
- package/dist/{Page-C2_Hm27h.js → Page-BSHydn4p.js} +9 -9
- package/dist/{Page-C2_Hm27h.js.map → Page-BSHydn4p.js.map} +1 -1
- package/dist/Page.js +1 -1
- package/dist/{Pagination-Bmd4JORe.js → Pagination-CAeyJ7Pl.js} +192 -26
- package/dist/Pagination-CAeyJ7Pl.js.map +1 -0
- package/dist/Pagination.css +4 -2
- package/dist/Pagination.js +1 -1
- package/dist/{Popover-8mTJoMy7.js → Popover-Cq5tirFz.js} +11 -5
- package/dist/Popover-Cq5tirFz.js.map +1 -0
- package/dist/Popover.js +1 -1
- package/dist/{ProgressBar-C1CkQHV5.js → ProgressBar-ByR50ln7.js} +2 -2
- package/dist/{ProgressBar-C1CkQHV5.js.map → ProgressBar-ByR50ln7.js.map} +1 -1
- package/dist/ProgressBar.js +1 -1
- package/dist/{Radio-BcHMk8dD.js → Radio-CPuctRpl.js} +2 -2
- package/dist/{Radio-BcHMk8dD.js.map → Radio-CPuctRpl.js.map} +1 -1
- package/dist/{Radio-D5WyQN2i.js → Radio-WlsZFRzX.js} +3 -3
- package/dist/{Radio-D5WyQN2i.js.map → Radio-WlsZFRzX.js.map} +1 -1
- package/dist/Radio.js +1 -1
- package/dist/{RichTextEditor-DstVbYch.js → RichTextEditor-FSWAVmTe.js} +80 -44
- package/dist/RichTextEditor-FSWAVmTe.js.map +1 -0
- package/dist/RichTextEditor.js +1 -1
- package/dist/{SavedFiltersButton-2qba2Cgu.js → SavedFiltersButton-Cr829guv.js} +12 -11
- package/dist/SavedFiltersButton-Cr829guv.js.map +1 -0
- package/dist/SavedFiltersButton.js +1 -1
- package/dist/{SelectCard-BN-LI14f.js → SelectCard-DLWLHi_i.js} +3 -3
- package/dist/{SelectCard-BN-LI14f.js.map → SelectCard-DLWLHi_i.js.map} +1 -1
- package/dist/SelectCard.js +1 -1
- package/dist/SelectField.js +1 -1
- package/dist/{SelectFieldLabel-UbQT7fDD.js → SelectFieldLabel-vemffdmu.js} +2 -2
- package/dist/{SelectFieldLabel-UbQT7fDD.js.map → SelectFieldLabel-vemffdmu.js.map} +1 -1
- package/dist/{SelectFieldSync-DykGkR_w.js → SelectFieldSync-C65VFWGm.js} +5 -4
- package/dist/{SelectFieldSync-DykGkR_w.js.map → SelectFieldSync-C65VFWGm.js.map} +1 -1
- package/dist/SelectMenu.js +1 -1
- package/dist/{SelectMenuSync-DTQ8Ofoz.js → SelectMenuSync-CF49L12-.js} +6 -4
- package/dist/{SelectMenuSync-DTQ8Ofoz.js.map → SelectMenuSync-CF49L12-.js.map} +1 -1
- package/dist/{SelectOptions-DVSOJwRy.js → SelectOptions-C7skDFj2.js} +2 -2
- package/dist/{SelectOptions-DVSOJwRy.js.map → SelectOptions-C7skDFj2.js.map} +1 -1
- package/dist/{SelectTrigger-CHk0KO-P.js → SelectTrigger-BbneVXMz.js} +3 -3
- package/dist/{SelectTrigger-CHk0KO-P.js.map → SelectTrigger-BbneVXMz.js.map} +1 -1
- package/dist/SelectTrigger.js +1 -1
- package/dist/{SelectTriggerBase-B2S5SOZr.js → SelectTriggerBase-BjIOERXr.js} +3 -3
- package/dist/{SelectTriggerBase-B2S5SOZr.js.map → SelectTriggerBase-BjIOERXr.js.map} +1 -1
- package/dist/{Switch-onmiKoRd.js → Switch-B6bKmpwN.js} +3 -3
- package/dist/{Switch-onmiKoRd.js.map → Switch-B6bKmpwN.js.map} +1 -1
- package/dist/Switch.js +1 -1
- package/dist/Table.js +1 -1
- package/dist/{Text-BTzgTpqu.js → Text-w2gWn4K6.js} +2 -2
- package/dist/{Text-BTzgTpqu.js.map → Text-w2gWn4K6.js.map} +1 -1
- package/dist/Text.js +1 -1
- package/dist/{TextField-WTYZJlX3.js → TextField-BQsCh5Nb.js} +2 -2
- package/dist/{TextField-WTYZJlX3.js.map → TextField-BQsCh5Nb.js.map} +1 -1
- package/dist/{TextField-rVfctM1E.js → TextField-DJ3gEIP6.js} +3 -3
- package/dist/{TextField-rVfctM1E.js.map → TextField-DJ3gEIP6.js.map} +1 -1
- package/dist/TextField.js +1 -1
- package/dist/{Textarea-PXjppEQ6.js → Textarea-BK4Vf84K.js} +3 -3
- package/dist/{Textarea-PXjppEQ6.js.map → Textarea-BK4Vf84K.js.map} +1 -1
- package/dist/Textarea.js +1 -1
- package/dist/{ThemeProvider-D4KdGCaP.js → ThemeProvider-BC6wbuLU.js} +4 -9
- package/dist/{ThemeProvider-D4KdGCaP.js.map → ThemeProvider-BC6wbuLU.js.map} +1 -1
- package/dist/ThemeProvider.js +1 -1
- package/dist/ThemeProvider.module-D9pNGYjP.js +8 -0
- package/dist/ThemeProvider.module-D9pNGYjP.js.map +1 -0
- package/dist/{TimeField-BJPXIv6W.js → TimeField-B4IW2B_o.js} +4 -4
- package/dist/{TimeField-BJPXIv6W.js.map → TimeField-B4IW2B_o.js.map} +1 -1
- package/dist/TimeField.js +1 -1
- package/dist/Toast.js +2 -2
- package/dist/{Toaster-CoChsMD0.js → Toaster-BGY2IzF5.js} +53 -48
- package/dist/Toaster-BGY2IzF5.js.map +1 -0
- package/dist/{Toaster-DXLc86VD.js → Toaster-DTF9qnTy.js} +2 -2
- package/dist/{Toaster-DXLc86VD.js.map → Toaster-DTF9qnTy.js.map} +1 -1
- package/dist/{Toolbar-Bt3kShho.js → Toolbar-DObrJ_S5.js} +5 -4
- package/dist/{Toolbar-Bt3kShho.js.map → Toolbar-DObrJ_S5.js.map} +1 -1
- package/dist/{Toolbar-DaUKbbsL.js → Toolbar-DRJGKk8D.js} +6 -5
- package/dist/{Toolbar-DaUKbbsL.js.map → Toolbar-DRJGKk8D.js.map} +1 -1
- package/dist/Toolbar.js +2 -2
- package/dist/{ToolbarButtonToggle-BPu81Wuv.js → ToolbarButtonToggle-BCKgA8FE.js} +2 -2
- package/dist/{ToolbarButtonToggle-BPu81Wuv.js.map → ToolbarButtonToggle-BCKgA8FE.js.map} +1 -1
- package/dist/{Tooltip-yr1D06BE.js → Tooltip-DqS6xDUf.js} +27 -25
- package/dist/Tooltip-DqS6xDUf.js.map +1 -0
- package/dist/Tooltip.js +1 -1
- package/dist/TreeSelectField.d.ts +1 -0
- package/dist/TreeSelectField.js +2 -0
- package/dist/TreeSelectField.js.map +1 -0
- package/dist/TreeSelectFieldSync-Do5ffU0b.js +609 -0
- package/dist/TreeSelectFieldSync-Do5ffU0b.js.map +1 -0
- package/dist/TreeSelectFieldSync.css +173 -0
- package/dist/TreeSelectMenu.d.ts +1 -0
- package/dist/TreeSelectMenu.js +2 -0
- package/dist/TreeSelectMenu.js.map +1 -0
- package/dist/TreeSelectMenuSync-s05Ly6lj.js +413 -0
- package/dist/TreeSelectMenuSync-s05Ly6lj.js.map +1 -0
- package/dist/{YearlessDateInputWithPicker-BIcVgz-J.js → YearlessDateInputWithPicker-BHfFjCqE.js} +2 -2
- package/dist/{YearlessDateInputWithPicker-BIcVgz-J.js.map → YearlessDateInputWithPicker-BHfFjCqE.js.map} +1 -1
- package/dist/beta.js +15 -13
- package/dist/beta.js.map +1 -1
- package/dist/confirmationTypes-CG7xl50f.js +75 -0
- package/dist/confirmationTypes-CG7xl50f.js.map +1 -0
- package/dist/drag_indicator-BRHAPLSJ.js +6 -0
- package/dist/drag_indicator-BRHAPLSJ.js.map +1 -0
- package/dist/{filter-state-Bx3aYS1r.js → filter-state-CE8t3-Q7.js} +324 -84
- package/dist/filter-state-CE8t3-Q7.js.map +1 -0
- package/dist/{floating-ui.react-dom-CHrYz13o.js → floating-ui.react-dom-BIKT960u.js} +2 -2
- package/dist/{floating-ui.react-dom-CHrYz13o.js.map → floating-ui.react-dom-BIKT960u.js.map} +1 -1
- package/dist/{index-CukEaIHB.js → index-CKdC7x1S.js} +2 -2
- package/dist/{index-CukEaIHB.js.map → index-CKdC7x1S.js.map} +1 -1
- package/dist/{index-DVYRUKtW.js → index-DN_iqxhF.js} +79 -109
- package/dist/{index-DVYRUKtW.js.map → index-DN_iqxhF.js.map} +1 -1
- package/dist/index.js +44 -44
- package/dist/keyboard_arrow_left-CiE1n99w.js +6 -0
- package/dist/keyboard_arrow_left-CiE1n99w.js.map +1 -0
- package/dist/keyboard_arrow_right-DMloHg_F.js +6 -0
- package/dist/keyboard_arrow_right-DMloHg_F.js.map +1 -0
- package/dist/portalScopeClassNames-jlZkdug_.js +7 -0
- package/dist/portalScopeClassNames-jlZkdug_.js.map +1 -0
- package/dist/src/beta/components/FilterBar/FilterTextInput.d.ts +29 -0
- package/dist/src/beta/components/FilterBar/index.d.ts +1 -1
- package/dist/src/beta/components/FilterBar/internal/adapters/asyncTree.d.ts +6 -0
- package/dist/src/beta/components/FilterBar/internal/adapters/textInput.d.ts +3 -0
- package/dist/src/beta/components/FilterBar/internal/adapters/tree.d.ts +6 -0
- package/dist/src/beta/components/FilterBar/internal/adapters/types.d.ts +4 -1
- package/dist/src/beta/components/FilterBar/internal/types.d.ts +69 -12
- package/dist/src/beta/components/FilterBar/internal/utils/test.d.ts +4 -1
- package/dist/src/beta/components/Table/DataTable/DataTable.d.ts +8 -31
- package/dist/src/beta/components/Table/DataTable/internal/DataTableBody.d.ts +2 -19
- package/dist/src/beta/components/Table/DataTable/internal/DataTableBodyRow.d.ts +17 -13
- package/dist/src/beta/components/Table/DataTable/internal/context/focus/DTFocusContext.d.ts +1 -11
- package/dist/src/beta/components/Table/DataTable/internal/context/focus/useDTFocusDispatchContext.d.ts +0 -2
- package/dist/src/beta/components/Table/DataTable/internal/context/surface/DataTableSurfaceCoordinatorContext.d.ts +13 -0
- package/dist/src/beta/components/Table/DataTable/internal/context/surface/DataTableSurfaceCoordinatorProvider.d.ts +7 -0
- package/dist/src/beta/components/Table/DataTable/internal/context/surface/useDataTableSurfaceCoordinator.d.ts +1 -0
- package/dist/src/beta/components/Table/DataTable/internal/editable-cells/useCustomEditHelpers.d.ts +8 -6
- package/dist/src/beta/components/Table/DataTable/internal/useColumnOrder.d.ts +1 -0
- package/dist/src/beta/components/Table/createColumnHelper.d.ts +4 -2
- package/dist/src/beta/components/Table/formatters/htmlFormatter.d.ts +4 -2
- package/dist/src/beta/components/Table/formatters/htmlToMarkdown.d.ts +5 -2
- package/dist/src/beta/components/Table/formatters/markdownFormatter.d.ts +3 -2
- package/dist/src/beta/components/Table/types.d.ts +47 -30
- package/dist/src/beta/components/TreeSelectField/TreeSelectField.d.ts +68 -0
- package/dist/src/beta/components/TreeSelectField/TreeSelectFieldSync.d.ts +64 -0
- package/dist/src/beta/components/TreeSelectField/index.d.ts +3 -0
- package/dist/src/beta/components/TreeSelectField/internal/TreeContent.d.ts +31 -0
- package/dist/src/beta/components/TreeSelectField/internal/TreePanel.d.ts +56 -0
- package/dist/src/beta/components/TreeSelectField/internal/TreeRow.d.ts +56 -0
- package/dist/src/beta/components/TreeSelectField/internal/TreeSelectFieldInput.d.ts +82 -0
- package/dist/src/beta/components/TreeSelectField/internal/VirtualizedTreePanel.d.ts +57 -0
- package/dist/src/beta/components/TreeSelectField/internal/treeSync.d.ts +33 -0
- package/dist/src/beta/components/TreeSelectField/internal/treeUtils.d.ts +25 -0
- package/dist/src/beta/components/TreeSelectField/internal/types.d.ts +12 -0
- package/dist/src/beta/components/TreeSelectField/internal/useTree.d.ts +99 -0
- package/dist/src/beta/components/TreeSelectField/internal/useTreeCascade.d.ts +93 -0
- package/dist/src/beta/components/TreeSelectField/internal/useTreeKeyboard.d.ts +42 -0
- package/dist/src/beta/components/TreeSelectField/internal/useTreeLazyCascade.d.ts +56 -0
- package/dist/src/beta/components/TreeSelectField/internal/useTreeLoader.d.ts +58 -0
- package/dist/src/beta/components/TreeSelectField/stories/TreeSelectField.stories.data.d.ts +21 -0
- package/dist/src/beta/components/TreeSelectField/types.d.ts +124 -0
- package/dist/src/beta/components/TreeSelectMenu/TreeSelectMenu.d.ts +29 -0
- package/dist/src/beta/components/TreeSelectMenu/TreeSelectMenuSync.d.ts +65 -0
- package/dist/src/beta/components/TreeSelectMenu/index.d.ts +4 -0
- package/dist/src/beta/components/TreeSelectMenu/types.d.ts +103 -0
- package/dist/src/beta/components/index.d.ts +2 -0
- package/dist/src/components/Pagination/internal/Pagination.d.ts +1 -0
- package/dist/src/components/Pagination/internal/PaginationOverflowMenu.d.ts +12 -1
- package/dist/src/internal/components/Surface/Surface.d.ts +4 -0
- package/dist/src/internal/components/Surface/surfaceGeometry.d.ts +31 -0
- package/dist/src/internal/functions/portalScopeClassNames.d.ts +14 -0
- package/dist/src/internal/utils/arrayIdsEqual.d.ts +10 -0
- package/dist/src/internal/utils/index.d.ts +1 -0
- package/dist/{stripInlineMarkdown-C5DNxxwf.js → stripInlineMarkdown-C0bVmYgG.js} +2 -2
- package/dist/{stripInlineMarkdown-C5DNxxwf.js.map → stripInlineMarkdown-C0bVmYgG.js.map} +1 -1
- package/dist/{syncFilterUtils-BEKek64h.js → syncFilterUtils-CgHB-l6A.js} +35 -410
- package/dist/syncFilterUtils-CgHB-l6A.js.map +1 -0
- package/dist/syncFilterUtils.css +0 -180
- package/dist/treeSync-Cz3H08cr.js +1453 -0
- package/dist/treeSync-Cz3H08cr.js.map +1 -0
- package/dist/treeSync.css +40 -0
- package/dist/useAdaptiveView-CeYKH0Me.js +386 -0
- package/dist/useAdaptiveView-CeYKH0Me.js.map +1 -0
- package/dist/useAdaptiveView.css +181 -0
- package/dist/useChipLayout-BWZfKDgd.js +51 -0
- package/dist/useChipLayout-BWZfKDgd.js.map +1 -0
- package/dist/{useDrilldown-KZ9rRsXQ.js → useDrilldown-BJ2dHHKV.js} +2 -2
- package/dist/{useDrilldown-KZ9rRsXQ.js.map → useDrilldown-BJ2dHHKV.js.map} +1 -1
- package/dist/{useInfiniteCombobox-CknXmqlQ.js → useInfiniteCombobox-BqJm-CdN.js} +24 -24
- package/dist/useInfiniteCombobox-BqJm-CdN.js.map +1 -0
- package/dist/{useMenuInteraction-CpAOHSJu.js → useMenuInteraction-NEJXUD4I.js} +2 -114
- package/dist/useMenuInteraction-NEJXUD4I.js.map +1 -0
- package/dist/{useToggleSelection-B-Z80gy2.js → useToggleSelection-BGc5OiZF.js} +2 -2
- package/dist/{useToggleSelection-B-Z80gy2.js.map → useToggleSelection-BGc5OiZF.js.map} +1 -1
- package/package.json +5 -7
- package/dist/Avatar-FDHyqiCy.js.map +0 -1
- package/dist/DataTable-E8z0H8c7.js.map +0 -1
- package/dist/DndHandleButton-CHTOYRlq.js.map +0 -1
- package/dist/Menu-W0c-xKdX.js.map +0 -1
- package/dist/MultiSelectFieldSync-CXX2F0ru.js.map +0 -1
- package/dist/MultiSelectMenuSync-EKtvlL62.js.map +0 -1
- package/dist/Pagination-Bmd4JORe.js.map +0 -1
- package/dist/Popover-8mTJoMy7.js.map +0 -1
- package/dist/RichTextEditor-DstVbYch.js.map +0 -1
- package/dist/SavedFiltersButton-2qba2Cgu.js.map +0 -1
- package/dist/Toaster-CoChsMD0.js.map +0 -1
- package/dist/Tooltip-yr1D06BE.js.map +0 -1
- package/dist/filter-state-Bx3aYS1r.js.map +0 -1
- package/dist/keyboard_arrow_right-DZWNVytH.js +0 -8
- package/dist/keyboard_arrow_right-DZWNVytH.js.map +0 -1
- package/dist/syncFilterUtils-BEKek64h.js.map +0 -1
- package/dist/useInfiniteCombobox-CknXmqlQ.js.map +0 -1
- package/dist/useMenuInteraction-CpAOHSJu.js.map +0 -1
- /package/dist/{useMenuInteraction.css → MenuFooter.css} +0 -0
|
@@ -1,117 +1,5 @@
|
|
|
1
|
-
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
|
-
import { B as Button } from './Button-C_V2xQAs.js';
|
|
3
1
|
import { useState, useId, useRef, useCallback } from 'react';
|
|
4
2
|
|
|
5
|
-
import './useMenuInteraction.css';const stack = "_stack_o8ro5_1";
|
|
6
|
-
const leading = "_leading_o8ro5_26";
|
|
7
|
-
const trailing = "_trailing_o8ro5_32";
|
|
8
|
-
const styles = {
|
|
9
|
-
stack: stack,
|
|
10
|
-
"stack-row": "_stack-row_o8ro5_8",
|
|
11
|
-
"clear-full": "_clear-full_o8ro5_13",
|
|
12
|
-
"confirmation-row": "_confirmation-row_o8ro5_18",
|
|
13
|
-
leading: leading,
|
|
14
|
-
trailing: trailing
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
const preventBlur = (e) => {
|
|
18
|
-
e.preventDefault();
|
|
19
|
-
};
|
|
20
|
-
const ClearButton = ({
|
|
21
|
-
onClick,
|
|
22
|
-
label = "Clear",
|
|
23
|
-
disabled,
|
|
24
|
-
fullWidth
|
|
25
|
-
}) => /* @__PURE__ */ jsx(
|
|
26
|
-
Button,
|
|
27
|
-
{
|
|
28
|
-
appearance: "secondary",
|
|
29
|
-
size: "small",
|
|
30
|
-
onMouseDown: preventBlur,
|
|
31
|
-
onClick,
|
|
32
|
-
disabled,
|
|
33
|
-
className: fullWidth ? styles["clear-full"] : void 0,
|
|
34
|
-
children: label
|
|
35
|
-
}
|
|
36
|
-
);
|
|
37
|
-
const ConfirmationRow = ({
|
|
38
|
-
applyLabel = "Apply",
|
|
39
|
-
cancelLabel = "Cancel",
|
|
40
|
-
onApply,
|
|
41
|
-
onCancel,
|
|
42
|
-
applyDisabled,
|
|
43
|
-
leading
|
|
44
|
-
}) => /* @__PURE__ */ jsxs("div", { className: styles["confirmation-row"], children: [
|
|
45
|
-
leading ? /* @__PURE__ */ jsx("div", { className: styles["leading"], children: leading }) : null,
|
|
46
|
-
/* @__PURE__ */ jsxs("div", { className: styles["trailing"], children: [
|
|
47
|
-
/* @__PURE__ */ jsx(
|
|
48
|
-
Button,
|
|
49
|
-
{
|
|
50
|
-
appearance: "secondary",
|
|
51
|
-
size: "small",
|
|
52
|
-
onMouseDown: preventBlur,
|
|
53
|
-
onClick: onCancel,
|
|
54
|
-
children: cancelLabel
|
|
55
|
-
}
|
|
56
|
-
),
|
|
57
|
-
/* @__PURE__ */ jsx(
|
|
58
|
-
Button,
|
|
59
|
-
{
|
|
60
|
-
appearance: "primary",
|
|
61
|
-
size: "small",
|
|
62
|
-
onMouseDown: preventBlur,
|
|
63
|
-
onClick: onApply,
|
|
64
|
-
disabled: applyDisabled,
|
|
65
|
-
children: applyLabel
|
|
66
|
-
}
|
|
67
|
-
)
|
|
68
|
-
] })
|
|
69
|
-
] });
|
|
70
|
-
const MenuFooter = ({
|
|
71
|
-
clear,
|
|
72
|
-
confirmation,
|
|
73
|
-
addNew
|
|
74
|
-
}) => {
|
|
75
|
-
if (confirmation) {
|
|
76
|
-
if (clear && addNew) {
|
|
77
|
-
return /* @__PURE__ */ jsxs("div", { className: styles["stack"], children: [
|
|
78
|
-
/* @__PURE__ */ jsx("div", { className: styles["stack-row"], children: addNew }),
|
|
79
|
-
/* @__PURE__ */ jsx(
|
|
80
|
-
ConfirmationRow,
|
|
81
|
-
{
|
|
82
|
-
...confirmation,
|
|
83
|
-
leading: /* @__PURE__ */ jsx(ClearButton, { ...clear })
|
|
84
|
-
}
|
|
85
|
-
)
|
|
86
|
-
] });
|
|
87
|
-
}
|
|
88
|
-
if (clear) {
|
|
89
|
-
return /* @__PURE__ */ jsx(
|
|
90
|
-
ConfirmationRow,
|
|
91
|
-
{
|
|
92
|
-
...confirmation,
|
|
93
|
-
leading: /* @__PURE__ */ jsx(ClearButton, { ...clear })
|
|
94
|
-
}
|
|
95
|
-
);
|
|
96
|
-
}
|
|
97
|
-
return /* @__PURE__ */ jsx(ConfirmationRow, { ...confirmation, leading: addNew });
|
|
98
|
-
}
|
|
99
|
-
if (clear && addNew) {
|
|
100
|
-
return /* @__PURE__ */ jsxs("div", { className: styles["stack"], children: [
|
|
101
|
-
/* @__PURE__ */ jsx("div", { className: styles["stack-row"], children: addNew }),
|
|
102
|
-
/* @__PURE__ */ jsx("div", { className: styles["stack-row"], children: /* @__PURE__ */ jsx(ClearButton, { ...clear, fullWidth: true }) })
|
|
103
|
-
] });
|
|
104
|
-
}
|
|
105
|
-
if (clear) {
|
|
106
|
-
return /* @__PURE__ */ jsx("div", { className: styles["stack-row"], children: /* @__PURE__ */ jsx(ClearButton, { ...clear, fullWidth: true }) });
|
|
107
|
-
}
|
|
108
|
-
if (addNew) {
|
|
109
|
-
return /* @__PURE__ */ jsx(Fragment, { children: addNew });
|
|
110
|
-
}
|
|
111
|
-
return null;
|
|
112
|
-
};
|
|
113
|
-
MenuFooter.displayName = "MenuFooter";
|
|
114
|
-
|
|
115
3
|
const useMenuInteraction = ({
|
|
116
4
|
items,
|
|
117
5
|
sectionsMeta: _sectionsMeta,
|
|
@@ -359,5 +247,5 @@ const useMenuInteraction = ({
|
|
|
359
247
|
};
|
|
360
248
|
};
|
|
361
249
|
|
|
362
|
-
export {
|
|
363
|
-
//# sourceMappingURL=useMenuInteraction-
|
|
250
|
+
export { useMenuInteraction as u };
|
|
251
|
+
//# sourceMappingURL=useMenuInteraction-NEJXUD4I.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMenuInteraction-NEJXUD4I.js","sources":["../src/beta/components/SelectMenu/internal/useMenuInteraction.ts"],"sourcesContent":["import {\n CSSProperties,\n KeyboardEvent,\n RefObject,\n useCallback,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport {\n SelectItem,\n SectionMeta,\n} from \"../../../../internal/types/selectFieldInternalTypes\";\nimport { OptionsPanelHandle } from \"../../../../internal/components/OptionsPanel\";\n\nexport type UseMenuInteractionConfig = {\n items: SelectItem[];\n sectionsMeta: SectionMeta[];\n onItemActivate: (item: SelectItem) => void;\n selectedItemIds: Set<string | number>;\n displayAs: \"popover\" | \"dialog\";\n closeOnActivate: boolean;\n disabled?: boolean;\n id: string;\n triggerRef: RefObject<HTMLButtonElement>;\n label: string;\n /**\n * Controlled open state. The consumer owns `[isOpen, setIsOpen]` so other\n * hooks in the same render (e.g. `useConfirmationDraft`) can read the same\n * value without a one-render lag.\n */\n isOpen: boolean;\n setIsOpen: (open: boolean) => void;\n onImplicitClose?: () => void;\n onExplicitClose?: () => void;\n};\n\nexport type MenuTriggerProps = {\n ref: RefObject<HTMLButtonElement>;\n onClick: () => void;\n onKeyDown: (e: KeyboardEvent) => void;\n \"aria-haspopup\": \"listbox\";\n \"aria-controls\": string;\n \"aria-expanded\": boolean;\n \"data-state\": \"open\" | \"close\";\n};\n\ntype MenuPropsArg = {\n className?: string;\n style?: CSSProperties;\n};\n\ntype MenuReturnProps = MenuPropsArg & {\n role: \"listbox\";\n id: string;\n \"aria-label\": string;\n \"aria-labelledby\"?: string;\n tabIndex?: number;\n \"aria-activedescendant\"?: string;\n ref: RefObject<HTMLDivElement>;\n onKeyDown: (e: KeyboardEvent) => void;\n};\n\ntype ItemPropsArg = {\n item: SelectItem;\n index: number;\n className?: string;\n \"data-type\"?: string;\n};\n\ntype ItemReturnProps = {\n role: \"option\";\n id: string;\n \"aria-selected\": boolean;\n \"aria-disabled\"?: boolean;\n onClick: () => void;\n onMouseMove: () => void;\n className?: string;\n \"data-type\"?: string;\n};\n\nexport type GetMenuPropsFn = (opts?: MenuPropsArg) => MenuReturnProps;\nexport type GetItemPropsFn = (opts: ItemPropsArg) => ItemReturnProps;\n\nexport const useMenuInteraction = ({\n items,\n sectionsMeta: _sectionsMeta,\n onItemActivate,\n selectedItemIds,\n displayAs: _displayAs,\n closeOnActivate,\n disabled = false,\n id,\n triggerRef,\n label,\n isOpen,\n setIsOpen,\n onImplicitClose,\n onExplicitClose,\n}: UseMenuInteractionConfig) => {\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n\n const generatedId = useId();\n const menuId = `${id}-menu-${generatedId}`;\n const menuContainerRef = useRef<HTMLDivElement>(null);\n const listRef = useRef<OptionsPanelHandle>(null);\n\n const isItemDisabled = useCallback(\n (item: SelectItem) => {\n return (disabled || item.disabled) ?? false;\n },\n [disabled],\n );\n\n const findNextEnabledIndex = useCallback(\n (startIndex: number, direction: 1 | -1, wrap = true): number => {\n if (items.length === 0) return -1;\n const len = items.length;\n let index = startIndex;\n for (let i = 0; i < len; i++) {\n index = wrap\n ? (index + direction + len) % len\n : Math.min(Math.max(index + direction, 0), len - 1);\n if (!isItemDisabled(items[index])) return index;\n if (!wrap && (index === 0 || index === len - 1)) return -1;\n }\n return -1;\n },\n [items, isItemDisabled],\n );\n\n const openMenu = useCallback(() => {\n if (disabled) return;\n setIsOpen(true);\n }, [disabled, setIsOpen]);\n\n const closeMenu = useCallback(\n (options?: { restoreFocus?: boolean }) => {\n setIsOpen(false);\n setHighlightedIndex(-1);\n if (options?.restoreFocus !== false) {\n triggerRef.current?.focus();\n onExplicitClose?.();\n } else {\n onImplicitClose?.();\n }\n },\n [triggerRef, onImplicitClose, onExplicitClose, setIsOpen],\n );\n\n const getItemId = useCallback(\n (index: number) => `${menuId}-option-${index}`,\n [menuId],\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (!isOpen) return;\n\n switch (e.key) {\n case \"ArrowDown\": {\n e.preventDefault();\n const next =\n highlightedIndex < 0\n ? findNextEnabledIndex(-1, 1)\n : findNextEnabledIndex(highlightedIndex, 1);\n if (next >= 0) {\n setHighlightedIndex(next);\n listRef.current?.scrollToIndex(next);\n }\n break;\n }\n case \"ArrowUp\": {\n e.preventDefault();\n const prev =\n highlightedIndex < 0\n ? findNextEnabledIndex(items.length, -1)\n : findNextEnabledIndex(highlightedIndex, -1);\n if (prev >= 0) {\n setHighlightedIndex(prev);\n listRef.current?.scrollToIndex(prev);\n }\n break;\n }\n case \"Home\": {\n e.preventDefault();\n const first = findNextEnabledIndex(-1, 1, false);\n if (first >= 0) {\n setHighlightedIndex(first);\n listRef.current?.scrollToIndex(first);\n }\n break;\n }\n case \"End\": {\n e.preventDefault();\n const last = findNextEnabledIndex(items.length, -1, false);\n if (last >= 0) {\n setHighlightedIndex(last);\n listRef.current?.scrollToIndex(last);\n }\n break;\n }\n case \"Enter\": {\n e.preventDefault();\n if (highlightedIndex >= 0 && highlightedIndex < items.length) {\n const item = items[highlightedIndex];\n if (!isItemDisabled(item)) {\n onItemActivate(item);\n if (closeOnActivate) {\n closeMenu();\n }\n }\n }\n break;\n }\n case \" \": {\n // Only activate on Space when the menu container itself has focus.\n // If a search input is focused, Space should type a space character.\n const target = e.target as HTMLElement;\n if (target.tagName === \"INPUT\") break;\n e.preventDefault();\n if (highlightedIndex >= 0 && highlightedIndex < items.length) {\n const item = items[highlightedIndex];\n if (!isItemDisabled(item)) {\n onItemActivate(item);\n if (closeOnActivate) {\n closeMenu();\n }\n }\n }\n break;\n }\n case \"Escape\": {\n e.preventDefault();\n closeMenu();\n break;\n }\n }\n },\n [\n isOpen,\n highlightedIndex,\n items,\n findNextEnabledIndex,\n isItemDisabled,\n onItemActivate,\n closeOnActivate,\n closeMenu,\n ],\n );\n\n const handleTriggerKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === \"ArrowDown\" || e.key === \"ArrowUp\") {\n e.preventDefault();\n if (!isOpen) openMenu();\n }\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n if (isOpen) {\n closeMenu();\n } else {\n openMenu();\n }\n }\n },\n [isOpen, openMenu, closeMenu],\n );\n\n const getTriggerProps = useCallback((): MenuTriggerProps => {\n return {\n ref: triggerRef,\n onClick: () => {\n if (isOpen) {\n closeMenu();\n } else {\n openMenu();\n }\n },\n onKeyDown: handleTriggerKeyDown,\n \"aria-haspopup\": \"listbox\",\n \"aria-controls\": menuId,\n \"aria-expanded\": isOpen,\n \"data-state\": isOpen ? \"open\" : \"close\",\n };\n }, [isOpen, openMenu, closeMenu, menuId, handleTriggerKeyDown, triggerRef]);\n\n const getMenuProps: GetMenuPropsFn = useCallback(\n (opts?: MenuPropsArg): MenuReturnProps => {\n return {\n role: \"listbox\",\n id: menuId,\n \"aria-label\": label,\n tabIndex: 0,\n \"aria-activedescendant\":\n highlightedIndex >= 0 ? getItemId(highlightedIndex) : undefined,\n ref: menuContainerRef,\n onKeyDown: handleKeyDown,\n className: opts?.className,\n style: { outline: \"none\", ...opts?.style },\n };\n },\n [menuId, label, highlightedIndex, getItemId, handleKeyDown],\n );\n\n const getItemProps: GetItemPropsFn = useCallback(\n (opts: ItemPropsArg): ItemReturnProps => {\n const { item, index, className, \"data-type\": dataType } = opts;\n return {\n role: \"option\",\n id: getItemId(index),\n \"aria-selected\": selectedItemIds.has(item.original.id),\n \"aria-disabled\": isItemDisabled(item) || undefined,\n onClick: () => {\n if (isItemDisabled(item)) return;\n onItemActivate(item);\n if (closeOnActivate) {\n closeMenu();\n }\n },\n onMouseMove: () => {\n if (highlightedIndex !== index) {\n setHighlightedIndex(index);\n }\n },\n className,\n \"data-type\": dataType,\n };\n },\n [\n getItemId,\n selectedItemIds,\n isItemDisabled,\n onItemActivate,\n closeOnActivate,\n closeMenu,\n highlightedIndex,\n ],\n );\n\n return {\n isOpen,\n openMenu,\n closeMenu,\n highlightedIndex,\n setHighlightedIndex,\n getTriggerProps,\n getMenuProps,\n getItemProps,\n listRef,\n menuContainerRef,\n handleKeyDown,\n };\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useState, useRef, useEffect, useCallback, forwardRef, useMemo } from 'react';
|
|
2
2
|
import { jsx } from 'react/jsx-runtime';
|
|
3
|
-
import { V as VirtualizedOptionsPanel, O as OptionsPanel } from './syncFilterUtils-
|
|
3
|
+
import { V as VirtualizedOptionsPanel, O as OptionsPanel } from './syncFilterUtils-CgHB-l6A.js';
|
|
4
4
|
|
|
5
5
|
function useBulkActionRunner({
|
|
6
6
|
setDraft
|
|
@@ -109,4 +109,4 @@ const useToggleSelection = ({
|
|
|
109
109
|
};
|
|
110
110
|
|
|
111
111
|
export { MultiSelectOptions as M, useToggleSelection as a, useBulkActionRunner as u };
|
|
112
|
-
//# sourceMappingURL=useToggleSelection-
|
|
112
|
+
//# sourceMappingURL=useToggleSelection-BGc5OiZF.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useToggleSelection-B-Z80gy2.js","sources":["../src/internal/hooks/useBulkActionRunner.ts","../src/internal/components/MultiSelectOptions.tsx","../src/internal/hooks/useToggleSelection.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\n\ntype BulkComputeResult<T> = T[] | Promise<T[]>;\n\nexport type UseBulkActionRunnerOptions<T> = {\n /** Sets the draft (or commits when confirmation is off). */\n setDraft: (next: T[]) => void;\n};\n\nexport type UseBulkActionRunnerResult<T> = {\n /**\n * True while a bulk-action promise is in flight. While true, callers should\n * disable option rows, override the bulk row's checkState to \"loading\", and\n * disable Apply.\n */\n pending: boolean;\n /**\n * Run a bulk action. If `compute` returns an array synchronously, the draft\n * is updated immediately. If it returns a promise, the runner enters the\n * pending state until resolve/reject. Stale resolutions (those that finish\n * after another draft mutation or another bulk run, or after `reset()`) are\n * silently discarded.\n */\n runBulk: (\n compute: (current: T[]) => BulkComputeResult<T>,\n current: T[],\n ) => void;\n /**\n * Wrap an external draft mutation so that any in-flight bulk promise's\n * eventual resolution is discarded. Use this in place of the raw setDraft\n * whenever the user mutates the draft outside of a bulk action (option\n * click, etc.) so that a slow Select-All-fetching promise can't clobber a\n * subsequent click.\n */\n setDraftAndBump: (next: T[]) => void;\n /**\n * Discard any in-flight bulk resolution. Call when the menu closes so that\n * a promise resolving after close can't apply to the next menu instance.\n */\n reset: () => void;\n};\n\n/**\n * Runs Select-All / Select-Filtered-style \"bulk action\" computations against\n * the controlled or draft selection, with support for both synchronous and\n * asynchronous results, and stale-result discard via a monotonic generation.\n */\nexport function useBulkActionRunner<T>({\n setDraft,\n}: UseBulkActionRunnerOptions<T>): UseBulkActionRunnerResult<T> {\n const [pending, setPending] = useState(false);\n const genRef = useRef(0);\n const isMountedRef = useRef(true);\n\n useEffect(() => {\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n const runBulk = useCallback(\n (compute: (current: T[]) => BulkComputeResult<T>, current: T[]) => {\n const result = compute(current);\n\n // Bumping the generation here means any earlier in-flight promise's\n // eventual resolution will be discarded.\n genRef.current += 1;\n const myGen = genRef.current;\n\n if (Array.isArray(result)) {\n setDraft(result);\n // If a previous async run was pending, it has now been superseded.\n if (pending) setPending(false);\n return;\n }\n\n setPending(true);\n result\n .then((next) => {\n if (!isMountedRef.current) return;\n if (genRef.current !== myGen) return; // stale\n setDraft(next);\n setPending(false);\n })\n .catch(() => {\n if (!isMountedRef.current) return;\n if (genRef.current !== myGen) return; // stale\n // Silent failure — consumer manages their own error UI.\n setPending(false);\n });\n },\n [pending, setDraft],\n );\n\n const setDraftAndBump = useCallback(\n (next: T[]) => {\n genRef.current += 1;\n setDraft(next);\n },\n [setDraft],\n );\n\n const reset = useCallback(() => {\n genRef.current += 1;\n setPending(false);\n }, []);\n\n return { pending, runBulk, setDraftAndBump, reset };\n}\n","import { MultiSelectFieldOption } from \"../../beta/components/MultiSelectField/types\";\nimport { CheckState } from \"../../types\";\nimport { CSSProperties, forwardRef, useCallback, useMemo } from \"react\";\nimport { OptionsPanel, OptionsPanelHandle } from \"./OptionsPanel\";\nimport { VirtualizedOptionsPanel } from \"./VirtualizedOptionsPanel\";\nimport {\n GetItemPropsFn,\n GetMenuPropsFn,\n SectionMeta,\n SelectItem,\n} from \"../types/selectFieldInternalTypes\";\n\nexport type MultiSelectOptionsProps = {\n isOpen: boolean;\n items: SelectItem[];\n getMenuProps: GetMenuPropsFn;\n getItemProps: GetItemPropsFn;\n highlightedIndex: number;\n selectedOptions: MultiSelectFieldOption[];\n hasMore: boolean;\n onLoadMore: () => void;\n loading: boolean;\n loadingMore: boolean;\n disableAutoLoadMore?: boolean;\n disabled?: boolean;\n className?: string;\n style?: CSSProperties;\n sectionsMeta?: SectionMeta[];\n virtualize?: boolean;\n};\n\nexport const MultiSelectOptions = forwardRef<\n OptionsPanelHandle,\n MultiSelectOptionsProps\n>(({ selectedOptions, items, virtualize, ...rest }, ref) => {\n const selectedIds = useMemo(\n () => new Set(selectedOptions.map((opt) => opt.id)),\n [selectedOptions],\n );\n\n const getCheckedState = useCallback(\n (item: SelectItem): CheckState => {\n if (item.type === \"select-all\" || item.type === \"select-filtered\") {\n return item.checkState ?? \"indeterminate\";\n }\n const checkId =\n item.type === \"pinned-option\" ? item.original.id : item.id;\n return selectedIds.has(checkId) ? \"checked\" : \"unchecked\";\n },\n [selectedIds],\n );\n\n const ListComponent = virtualize ? VirtualizedOptionsPanel : OptionsPanel;\n\n return (\n <ListComponent\n {...rest}\n ref={ref}\n items={items}\n selectionType=\"multiple\"\n getCheckedState={getCheckedState}\n />\n );\n});\n\nMultiSelectOptions.displayName = \"MultiSelectOptions\";\n","import { useCallback, useMemo } from \"react\";\nimport { SelectFieldOption } from \"../../beta/components/SelectField/types\";\nimport { NormalizedPinnedSection } from \"./usePinnedOptions\";\n\ntype UseToggleSelectionParams = {\n options: SelectFieldOption[];\n pinnedSections: NormalizedPinnedSection[];\n selectedOptions: SelectFieldOption[];\n onSelectedOptionsChange: (options: SelectFieldOption[]) => void;\n};\n\n/**\n * Shared multi-select toggle logic: computes allPinnedOptions and provides\n * handleItemClick to add/remove an option from the selection.\n * Used by both useComboMultiple and useSelectModeMultiple.\n */\nexport const useToggleSelection = ({\n options,\n pinnedSections,\n selectedOptions,\n onSelectedOptionsChange,\n}: UseToggleSelectionParams) => {\n const allPinnedOptions = useMemo(() => {\n return pinnedSections.flatMap((section) => section.options);\n }, [pinnedSections]);\n\n const handleItemClick = useCallback(\n (option: { id: string | number; label: string }) => {\n const isSelected = selectedOptions.some((opt) => opt.id === option.id);\n if (isSelected) {\n onSelectedOptionsChange(\n selectedOptions.filter((opt) => opt.id !== option.id),\n );\n } else {\n const fullOption =\n options.find((opt) => opt.id === option.id) ||\n allPinnedOptions.find((opt) => opt.id === option.id);\n if (fullOption) {\n onSelectedOptionsChange([...selectedOptions, fullOption]);\n }\n }\n },\n [selectedOptions, onSelectedOptionsChange, options, allPinnedOptions],\n );\n\n return { handleItemClick, allPinnedOptions };\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useToggleSelection-BGc5OiZF.js","sources":["../src/internal/hooks/useBulkActionRunner.ts","../src/internal/components/MultiSelectOptions.tsx","../src/internal/hooks/useToggleSelection.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\n\ntype BulkComputeResult<T> = T[] | Promise<T[]>;\n\nexport type UseBulkActionRunnerOptions<T> = {\n /** Sets the draft (or commits when confirmation is off). */\n setDraft: (next: T[]) => void;\n};\n\nexport type UseBulkActionRunnerResult<T> = {\n /**\n * True while a bulk-action promise is in flight. While true, callers should\n * disable option rows, override the bulk row's checkState to \"loading\", and\n * disable Apply.\n */\n pending: boolean;\n /**\n * Run a bulk action. If `compute` returns an array synchronously, the draft\n * is updated immediately. If it returns a promise, the runner enters the\n * pending state until resolve/reject. Stale resolutions (those that finish\n * after another draft mutation or another bulk run, or after `reset()`) are\n * silently discarded.\n */\n runBulk: (\n compute: (current: T[]) => BulkComputeResult<T>,\n current: T[],\n ) => void;\n /**\n * Wrap an external draft mutation so that any in-flight bulk promise's\n * eventual resolution is discarded. Use this in place of the raw setDraft\n * whenever the user mutates the draft outside of a bulk action (option\n * click, etc.) so that a slow Select-All-fetching promise can't clobber a\n * subsequent click.\n */\n setDraftAndBump: (next: T[]) => void;\n /**\n * Discard any in-flight bulk resolution. Call when the menu closes so that\n * a promise resolving after close can't apply to the next menu instance.\n */\n reset: () => void;\n};\n\n/**\n * Runs Select-All / Select-Filtered-style \"bulk action\" computations against\n * the controlled or draft selection, with support for both synchronous and\n * asynchronous results, and stale-result discard via a monotonic generation.\n */\nexport function useBulkActionRunner<T>({\n setDraft,\n}: UseBulkActionRunnerOptions<T>): UseBulkActionRunnerResult<T> {\n const [pending, setPending] = useState(false);\n const genRef = useRef(0);\n const isMountedRef = useRef(true);\n\n useEffect(() => {\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n const runBulk = useCallback(\n (compute: (current: T[]) => BulkComputeResult<T>, current: T[]) => {\n const result = compute(current);\n\n // Bumping the generation here means any earlier in-flight promise's\n // eventual resolution will be discarded.\n genRef.current += 1;\n const myGen = genRef.current;\n\n if (Array.isArray(result)) {\n setDraft(result);\n // If a previous async run was pending, it has now been superseded.\n if (pending) setPending(false);\n return;\n }\n\n setPending(true);\n result\n .then((next) => {\n if (!isMountedRef.current) return;\n if (genRef.current !== myGen) return; // stale\n setDraft(next);\n setPending(false);\n })\n .catch(() => {\n if (!isMountedRef.current) return;\n if (genRef.current !== myGen) return; // stale\n // Silent failure — consumer manages their own error UI.\n setPending(false);\n });\n },\n [pending, setDraft],\n );\n\n const setDraftAndBump = useCallback(\n (next: T[]) => {\n genRef.current += 1;\n setDraft(next);\n },\n [setDraft],\n );\n\n const reset = useCallback(() => {\n genRef.current += 1;\n setPending(false);\n }, []);\n\n return { pending, runBulk, setDraftAndBump, reset };\n}\n","import { MultiSelectFieldOption } from \"../../beta/components/MultiSelectField/types\";\nimport { CheckState } from \"../../types\";\nimport { CSSProperties, forwardRef, useCallback, useMemo } from \"react\";\nimport { OptionsPanel, OptionsPanelHandle } from \"./OptionsPanel\";\nimport { VirtualizedOptionsPanel } from \"./VirtualizedOptionsPanel\";\nimport {\n GetItemPropsFn,\n GetMenuPropsFn,\n SectionMeta,\n SelectItem,\n} from \"../types/selectFieldInternalTypes\";\n\nexport type MultiSelectOptionsProps = {\n isOpen: boolean;\n items: SelectItem[];\n getMenuProps: GetMenuPropsFn;\n getItemProps: GetItemPropsFn;\n highlightedIndex: number;\n selectedOptions: MultiSelectFieldOption[];\n hasMore: boolean;\n onLoadMore: () => void;\n loading: boolean;\n loadingMore: boolean;\n disableAutoLoadMore?: boolean;\n disabled?: boolean;\n className?: string;\n style?: CSSProperties;\n sectionsMeta?: SectionMeta[];\n virtualize?: boolean;\n};\n\nexport const MultiSelectOptions = forwardRef<\n OptionsPanelHandle,\n MultiSelectOptionsProps\n>(({ selectedOptions, items, virtualize, ...rest }, ref) => {\n const selectedIds = useMemo(\n () => new Set(selectedOptions.map((opt) => opt.id)),\n [selectedOptions],\n );\n\n const getCheckedState = useCallback(\n (item: SelectItem): CheckState => {\n if (item.type === \"select-all\" || item.type === \"select-filtered\") {\n return item.checkState ?? \"indeterminate\";\n }\n const checkId =\n item.type === \"pinned-option\" ? item.original.id : item.id;\n return selectedIds.has(checkId) ? \"checked\" : \"unchecked\";\n },\n [selectedIds],\n );\n\n const ListComponent = virtualize ? VirtualizedOptionsPanel : OptionsPanel;\n\n return (\n <ListComponent\n {...rest}\n ref={ref}\n items={items}\n selectionType=\"multiple\"\n getCheckedState={getCheckedState}\n />\n );\n});\n\nMultiSelectOptions.displayName = \"MultiSelectOptions\";\n","import { useCallback, useMemo } from \"react\";\nimport { SelectFieldOption } from \"../../beta/components/SelectField/types\";\nimport { NormalizedPinnedSection } from \"./usePinnedOptions\";\n\ntype UseToggleSelectionParams = {\n options: SelectFieldOption[];\n pinnedSections: NormalizedPinnedSection[];\n selectedOptions: SelectFieldOption[];\n onSelectedOptionsChange: (options: SelectFieldOption[]) => void;\n};\n\n/**\n * Shared multi-select toggle logic: computes allPinnedOptions and provides\n * handleItemClick to add/remove an option from the selection.\n * Used by both useComboMultiple and useSelectModeMultiple.\n */\nexport const useToggleSelection = ({\n options,\n pinnedSections,\n selectedOptions,\n onSelectedOptionsChange,\n}: UseToggleSelectionParams) => {\n const allPinnedOptions = useMemo(() => {\n return pinnedSections.flatMap((section) => section.options);\n }, [pinnedSections]);\n\n const handleItemClick = useCallback(\n (option: { id: string | number; label: string }) => {\n const isSelected = selectedOptions.some((opt) => opt.id === option.id);\n if (isSelected) {\n onSelectedOptionsChange(\n selectedOptions.filter((opt) => opt.id !== option.id),\n );\n } else {\n const fullOption =\n options.find((opt) => opt.id === option.id) ||\n allPinnedOptions.find((opt) => opt.id === option.id);\n if (fullOption) {\n onSelectedOptionsChange([...selectedOptions, fullOption]);\n }\n }\n },\n [selectedOptions, onSelectedOptionsChange, options, allPinnedOptions],\n );\n\n return { handleItemClick, allPinnedOptions };\n};\n"],"names":[],"mappings":";;;;AA+CO,SAAS,mBAAA,CAAuB;AAAA,EACrC;AACF,CAAA,EAAgE;AAC9D,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,MAAA,GAAS,OAAO,CAAC,CAAA;AACvB,EAAA,MAAM,YAAA,GAAe,OAAO,IAAI,CAAA;AAEhC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,OAAO,MAAM;AACX,MAAA,YAAA,CAAa,OAAA,GAAU,KAAA;AAAA,IACzB,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,OAAA,GAAU,WAAA;AAAA,IACd,CAAC,SAAiD,OAAA,KAAiB;AACjE,MAAA,MAAM,MAAA,GAAS,QAAQ,OAAO,CAAA;AAI9B,MAAA,MAAA,CAAO,OAAA,IAAW,CAAA;AAClB,MAAA,MAAM,QAAQ,MAAA,CAAO,OAAA;AAErB,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AACzB,QAAA,QAAA,CAAS,MAAM,CAAA;AAEf,QAAA,IAAI,OAAA,aAAoB,KAAK,CAAA;AAC7B,QAAA;AAAA,MACF;AAEA,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,MAAA,CACG,IAAA,CAAK,CAAC,IAAA,KAAS;AACd,QAAA,IAAI,CAAC,aAAa,OAAA,EAAS;AAC3B,QAAA,IAAI,MAAA,CAAO,YAAY,KAAA,EAAO;AAC9B,QAAA,QAAA,CAAS,IAAI,CAAA;AACb,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB,CAAC,CAAA,CACA,KAAA,CAAM,MAAM;AACX,QAAA,IAAI,CAAC,aAAa,OAAA,EAAS;AAC3B,QAAA,IAAI,MAAA,CAAO,YAAY,KAAA,EAAO;AAE9B,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB,CAAC,CAAA;AAAA,IACL,CAAA;AAAA,IACA,CAAC,SAAS,QAAQ;AAAA,GACpB;AAEA,EAAA,MAAM,eAAA,GAAkB,WAAA;AAAA,IACtB,CAAC,IAAA,KAAc;AACb,MAAA,MAAA,CAAO,OAAA,IAAW,CAAA;AAClB,MAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACf,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAEA,EAAA,MAAM,KAAA,GAAQ,YAAY,MAAM;AAC9B,IAAA,MAAA,CAAO,OAAA,IAAW,CAAA;AAClB,IAAA,UAAA,CAAW,KAAK,CAAA;AAAA,EAClB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,EAAE,OAAA,EAAS,OAAA,EAAS,eAAA,EAAiB,KAAA,EAAM;AACpD;;AC7EO,MAAM,kBAAA,GAAqB,UAAA,CAGhC,CAAC,EAAE,eAAA,EAAiB,OAAO,UAAA,EAAY,GAAG,IAAA,EAAK,EAAG,GAAA,KAAQ;AAC1D,EAAA,MAAM,WAAA,GAAc,OAAA;AAAA,IAClB,MAAM,IAAI,GAAA,CAAI,eAAA,CAAgB,IAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,EAAE,CAAC,CAAA;AAAA,IAClD,CAAC,eAAe;AAAA,GAClB;AAEA,EAAA,MAAM,eAAA,GAAkB,WAAA;AAAA,IACtB,CAAC,IAAA,KAAiC;AAChC,MAAA,IAAI,IAAA,CAAK,IAAA,KAAS,YAAA,IAAgB,IAAA,CAAK,SAAS,iBAAA,EAAmB;AACjE,QAAA,OAAO,KAAK,UAAA,IAAc,eAAA;AAAA,MAC5B;AACA,MAAA,MAAM,UACJ,IAAA,CAAK,IAAA,KAAS,kBAAkB,IAAA,CAAK,QAAA,CAAS,KAAK,IAAA,CAAK,EAAA;AAC1D,MAAA,OAAO,WAAA,CAAY,GAAA,CAAI,OAAO,CAAA,GAAI,SAAA,GAAY,WAAA;AAAA,IAChD,CAAA;AAAA,IACA,CAAC,WAAW;AAAA,GACd;AAEA,EAAA,MAAM,aAAA,GAAgB,aAAa,uBAAA,GAA0B,YAAA;AAE7D,EAAA,uBACE,GAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACE,GAAG,IAAA;AAAA,MACJ,GAAA;AAAA,MACA,KAAA;AAAA,MACA,aAAA,EAAc,UAAA;AAAA,MACd;AAAA;AAAA,GACF;AAEJ,CAAC;AAED,kBAAA,CAAmB,WAAA,GAAc,oBAAA;;ACjD1B,MAAM,qBAAqB,CAAC;AAAA,EACjC,OAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAA,KAAgC;AAC9B,EAAA,MAAM,gBAAA,GAAmB,QAAQ,MAAM;AACrC,IAAA,OAAO,cAAA,CAAe,OAAA,CAAQ,CAAC,OAAA,KAAY,QAAQ,OAAO,CAAA;AAAA,EAC5D,CAAA,EAAG,CAAC,cAAc,CAAC,CAAA;AAEnB,EAAA,MAAM,eAAA,GAAkB,WAAA;AAAA,IACtB,CAAC,MAAA,KAAmD;AAClD,MAAA,MAAM,UAAA,GAAa,gBAAgB,IAAA,CAAK,CAAC,QAAQ,GAAA,CAAI,EAAA,KAAO,OAAO,EAAE,CAAA;AACrE,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,uBAAA;AAAA,UACE,gBAAgB,MAAA,CAAO,CAAC,QAAQ,GAAA,CAAI,EAAA,KAAO,OAAO,EAAE;AAAA,SACtD;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAM,aACJ,OAAA,CAAQ,IAAA,CAAK,CAAC,GAAA,KAAQ,IAAI,EAAA,KAAO,MAAA,CAAO,EAAE,CAAA,IAC1C,iBAAiB,IAAA,CAAK,CAAC,QAAQ,GAAA,CAAI,EAAA,KAAO,OAAO,EAAE,CAAA;AACrD,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,uBAAA,CAAwB,CAAC,GAAG,eAAA,EAAiB,UAAU,CAAC,CAAA;AAAA,QAC1D;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,CAAC,eAAA,EAAiB,uBAAA,EAAyB,OAAA,EAAS,gBAAgB;AAAA,GACtE;AAEA,EAAA,OAAO,EAAE,iBAAiB,gBAAA,EAAiB;AAC7C;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@servicetitan/anvil2",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.9",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"types": "./dist/src/index.d.ts",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -72,9 +72,9 @@
|
|
|
72
72
|
"react-window": "1.8.10",
|
|
73
73
|
"tabbable": "^6.2.0",
|
|
74
74
|
"tinycolor2": "^1.6.0",
|
|
75
|
-
"uuid": "^
|
|
76
|
-
"@servicetitan/hammer-
|
|
77
|
-
"@servicetitan/hammer-
|
|
75
|
+
"uuid": "^14.0.0",
|
|
76
|
+
"@servicetitan/hammer-icon": "1.2.0",
|
|
77
|
+
"@servicetitan/hammer-token": "3.0.2"
|
|
78
78
|
},
|
|
79
79
|
"peerDependencies": {
|
|
80
80
|
"@types/react": "^18 || ^19",
|
|
@@ -102,8 +102,6 @@
|
|
|
102
102
|
"@types/testing-library__jest-dom": "^5.14.9",
|
|
103
103
|
"@types/tinycolor2": "^1.4.6",
|
|
104
104
|
"@types/uuid": "^10.0.0",
|
|
105
|
-
"@typescript-eslint/eslint-plugin": "^8.59.0",
|
|
106
|
-
"@typescript-eslint/parser": "^8.59.0",
|
|
107
105
|
"@vitest/browser": "^3.2.4",
|
|
108
106
|
"chromatic": "^11.20.2",
|
|
109
107
|
"commander": "^12.1.0",
|
|
@@ -136,7 +134,7 @@
|
|
|
136
134
|
"check-types": "tsc --noEmit --project tsconfig.build.json",
|
|
137
135
|
"clean": "rimraf dist node_modules/.cache",
|
|
138
136
|
"cp-files": "cp ./package.json dist && cp ./README.md dist",
|
|
139
|
-
"lint": "
|
|
137
|
+
"lint": "oxlint . -c ../../.oxlintrc.json",
|
|
140
138
|
"nuke": "pnpm clean && rimraf node_modules",
|
|
141
139
|
"svgo:st-icons": "pnpm svgo ./public/assets/icons/st/*.svg",
|
|
142
140
|
"test": "vitest run --project=unit --coverage.enabled=true --coverage.reporter=lcov --coverage.reporter=text",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar-FDHyqiCy.js","sources":["../src/internal/functions/getInitial.ts","../src/components/Avatar/internal/AvatarBase.tsx","../src/components/Avatar/AvatarGroup.tsx","../src/components/Avatar/internal/Avatar.tsx"],"sourcesContent":["/**\n * Extracts initials from a full name string.\n *\n * Features:\n * - Handles single names (returns first two characters)\n * - Handles multiple names (returns first and last name initials)\n * - Automatically capitalizes all initials\n * - Filters out empty strings and whitespace\n * - Handles edge cases like empty names and single characters\n * - Preserves proper capitalization rules\n * - Returns undefined for empty or falsy input\n *\n * @param name - The full name string to extract initials from\n * @returns The initials as a string, or undefined if name is empty\n */\nexport function getInitial(name: string) {\n if (!name) return undefined;\n\n const nameArray = name.split(\" \").filter(Boolean);\n\n if (nameArray.length > 1)\n return `${nameArray[0][0]?.toUpperCase()}${nameArray[\n nameArray.length - 1\n ][0].toUpperCase()}`;\n\n if (nameArray[0][1]) {\n return `${nameArray[0][0].toUpperCase()}${nameArray[0][1].toLowerCase()}`;\n }\n return `${nameArray[0][0].toUpperCase()}`;\n}\n","import {\n ComponentPropsWithoutRef,\n forwardRef,\n useContext,\n useRef,\n useState,\n useEffect,\n useMemo,\n} from \"react\";\nimport cx from \"classnames\";\nimport tinycolor from \"tinycolor2\";\n\nimport { LayoutUtilProps, Size } from \"../../../types\";\nimport { SrOnly } from \"../../SrOnly\";\nimport {\n useAccessibleColor,\n useMergeRefs,\n usePrefersColorScheme,\n} from \"../../../hooks\";\n\nimport styles from \"./AvatarBase.module.scss\";\nimport { ThemeProviderContext } from \"../../../providers/ThemeProvider/internal/ThemeProviderContext\";\n\n/**\n * Props for the AvatarBase component\n * @extends ComponentPropsWithoutRef<\"span\">\n * @extends Omit<LayoutUtilProps, \"flex\" | \"flexBasis\" | \"flexGrow\" | \"flexShrink\">\n */\nexport type AvatarBaseProps = ComponentPropsWithoutRef<\"span\"> &\n Omit<LayoutUtilProps, \"flex\" | \"flexBasis\" | \"flexGrow\" | \"flexShrink\"> & {\n /**\n * Full name\n * @accessibility This is used for alt text and Screenreader\n */\n name: string;\n /**\n * Custom color of the AvatarBase\n */\n color?: string;\n /**\n * Image source to be used for AvatarBase\n */\n image?: string;\n /**\n * Initials to display if no image is provided\n */\n initials?: string;\n /**\n * @default medium\n */\n size?: Extract<Size, \"xsmall\" | \"small\" | \"medium\" | \"large\">;\n /**\n * Online status of the AvatarBase\n */\n status?: \"online\" | \"offline\";\n };\n\n/**\n * Base Avatar component that handles the core avatar functionality.\n *\n * Features:\n * - Renders user avatars with images or initials\n * - Supports custom colors with accessible contrast\n * - Shows online/offline status indicator\n * - Handles image loading errors gracefully\n * - Supports light and dark themes\n * - Fully accessible with screen reader support\n *\n * @example\n * <AvatarBase name=\"John Doe\" size=\"medium\" status=\"online\" />\n */\nexport const AvatarBase = forwardRef<HTMLSpanElement, AvatarBaseProps>(\n (props, ref) => {\n const {\n className,\n color,\n status,\n name,\n image,\n initials,\n style,\n size,\n ...rest\n } = props;\n\n const elRef = useRef<HTMLSpanElement>(null);\n const imgRef = useRef<HTMLImageElement>(null);\n const [hasImageErrored, setHasImageErrored] = useState(false);\n const avatarBaseClassNames = cx(styles[\"avatar-base\"], className, {\n [styles[`${size}`]]: size && size !== \"medium\",\n });\n const onlineIndicatorClassNames = cx(styles[\"indicator\"], {\n [styles[\"offline\"]]: !status || status === \"offline\",\n [styles[\"online\"]]: status && status === \"online\",\n });\n\n const { mode: themeMode } = useContext(ThemeProviderContext);\n const { mode: sysMode } = usePrefersColorScheme();\n const mode = themeMode ?? sysMode;\n\n const { foreground, background, border } = useAccessibleColor(color, mode);\n\n const styleWithColor = {\n \"--a2-inline-avatar-background-color\": color && background,\n \"--a2-inline-avatar-font-color\": color && foreground,\n \"--a2-inline-avatar-border-color\": color && border,\n ...style,\n };\n\n const onlineIndicatorBorderColor = useMemo(() => {\n if (mode === \"dark\") {\n if (color) {\n return tinycolor(background).brighten(20).toHexString();\n }\n }\n return \"var(--a2-background-color-default)\";\n }, [color, mode, background]);\n\n const onlineIndicatorStyles = {\n \"--a2-inline-avatar-border-color\": onlineIndicatorBorderColor,\n } as React.CSSProperties;\n\n const onlineString = status;\n const srOnly = [name, onlineString].filter(Boolean).join(\" \");\n\n // if the image prop updates, also reset the error state for the new image\n useEffect(() => {\n if (image) {\n setHasImageErrored(false);\n }\n }, [image]);\n\n // if the image is already complete on our first render (likely due to SSR),\n // check the error state of the already complete image\n useEffect(() => {\n if (image && imgRef.current && imgRef.current.complete) {\n const img = new Image();\n img.onerror = () => setHasImageErrored(true);\n img.src = image;\n }\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n return (\n <span\n className={avatarBaseClassNames}\n style={styleWithColor}\n data-anv=\"avatarBase\"\n {...rest}\n ref={useMergeRefs([elRef, ref])}\n >\n {image && !hasImageErrored ? (\n <img\n className={styles[\"img\"]}\n aria-hidden\n src={image}\n alt={name}\n onError={() => setHasImageErrored(true)}\n ref={imgRef}\n />\n ) : initials ? (\n <span className={styles[\"initial\"]} aria-hidden>\n {initials}\n </span>\n ) : (\n <span aria-hidden>?</span>\n )}\n\n {status && (\n <span\n aria-hidden\n className={onlineIndicatorClassNames}\n style={onlineIndicatorStyles}\n />\n )}\n\n <SrOnly>{srOnly}</SrOnly>\n </span>\n );\n },\n);\n\nAvatarBase.displayName = \"AvatarBase\";\n","import {\n ComponentPropsWithoutRef,\n forwardRef,\n Children,\n isValidElement,\n cloneElement,\n CSSProperties,\n ReactElement,\n} from \"react\";\nimport cx from \"classnames\";\nimport styles from \"./AvatarGroup.module.scss\";\nimport avatarBaseStyles from \"./internal/AvatarBase.module.scss\";\nimport type { LayoutUtilProps } from \"../../types\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport { AvatarBase } from \"./internal/AvatarBase\";\n\n/**\n * Props for the AvatarGroup component\n * @property {number} [max] - Maximum number of avatars to display before truncating\n * @extends LayoutUtilProps\n * @extends ComponentPropsWithoutRef<\"span\">\n */\nexport type AvatarGroupProps = LayoutUtilProps &\n ComponentPropsWithoutRef<\"span\"> & {\n /**\n * Max child to show before truncating\n */\n max?: number;\n };\n\n/**\n * AvatarGroup component for displaying multiple avatars in a group.\n *\n * Features:\n * - Displays multiple avatars in a stacked layout\n * - Handles overflow with a count indicator\n * - Maintains consistent sizing across all avatars\n * - Supports custom styling and layout\n * - Automatically adjusts z-index for proper stacking\n * - Fully accessible with screen reader support\n *\n * @example\n * <Avatar.Group max={3}>\n * <Avatar name=\"John Doe\" />\n * <Avatar name=\"Jane Smith\" />\n * <Avatar name=\"Bob Johnson\" />\n * <Avatar name=\"Alice Brown\" />\n * </Avatar.Group>\n */\nexport const AvatarGroup = forwardRef<HTMLSpanElement, AvatarGroupProps>(\n (props, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const { className, max, style, children, ...rest } = componentProps;\n const childrenArr = Children.toArray(children);\n const inferredSize =\n (isValidElement(childrenArr[0]) && childrenArr[0].props.size) ?? \"medium\";\n const isOverflowing = max ? max < childrenArr.length : false;\n\n const overflowCount = max && childrenArr.length - max;\n\n const avatarGroupClassNames = cx(styles[\"avatar-group\"], className, {\n [styles[`${inferredSize}`]]: inferredSize,\n });\n\n const avatarBaseOverflowClassNames = cx(\n avatarBaseStyles[\"avatar-base-overflow\"],\n {\n [avatarBaseStyles[\"overflow-ten-plus\"]]:\n overflowCount && overflowCount > 9,\n },\n );\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n return (\n <span\n ref={ref}\n className={avatarGroupClassNames}\n style={styleCombined}\n data-anv=\"avatar-group\"\n {...rest}\n >\n {childrenArr.map((child, i) => {\n let childEl = child;\n if (isValidElement(child)) {\n const nIndex = childrenArr.length - i;\n const nStyle: CSSProperties = {\n ...child.props.style,\n zIndex: nIndex,\n };\n childEl = cloneElement(child as ReactElement, {\n style: nStyle,\n });\n }\n\n if (!max) return childEl;\n if (i < max) return childEl;\n return null;\n })}\n {isOverflowing && max && (\n <AvatarBase\n className={avatarBaseOverflowClassNames}\n name={`+${overflowCount}`}\n initials={`+${overflowCount}`}\n size={inferredSize}\n />\n )}\n </span>\n );\n },\n);\n\nAvatarGroup.displayName = \"AvatarGroup\";\n","import { ComponentPropsWithoutRef, forwardRef, useMemo } from \"react\";\nimport { AvatarGroup } from \"../AvatarGroup\";\nimport { LayoutUtilProps } from \"../../../types\";\nimport { getInitial } from \"../../../internal/functions\";\n\nimport { useLayoutPropsUtil } from \"../../../internal/hooks\";\nimport { AvatarBase, AvatarBaseProps } from \"./AvatarBase\";\n\n/**\n * Props for the Avatar component\n * @property {string} name - Full name of the user. Used for alt text and screen reader announcements\n * @property {string} [color] - Custom color of the avatar. Should maintain sufficient contrast ratio for accessibility\n * @property {string} [image] - Image source to be used for avatar. Falls back to initials if image fails to load\n * @property {Extract<Size, \"small\" | \"medium\" | \"large\">} [size] - Size of the Avatar\n * @property {\"online\" | \"offline\"} [status] - Online status of the Avatar\n * @extends ComponentPropsWithoutRef<\"span\">\n * @extends Omit<AvatarBaseProps, \"initials\">\n * @extends Omit<LayoutUtilProps, \"flex\" | \"flexBasis\" | \"flexGrow\" | \"flexShrink\">\n */\nexport type AvatarProps = ComponentPropsWithoutRef<\"span\"> &\n Omit<AvatarBaseProps, \"initials\"> &\n Omit<LayoutUtilProps, \"flex\" | \"flexBasis\" | \"flexGrow\" | \"flexShrink\">;\n\n/**\n * Avatar component for displaying user avatars with initials or images.\n *\n * Features:\n * - Displays user initials when no image is provided\n * - Supports custom colors and sizes\n * - Shows online/offline status\n * - Fully accessible with screen reader support\n * - Automatic image fallback handling\n * - Supports layout utilities for positioning and spacing\n *\n * @example\n * <Avatar\n * name=\"John Doe\"\n * image=\"https://example.com/avatar.jpg\"\n * size=\"medium\"\n * status=\"online\"\n * />\n */\nexport const Avatar = Object.assign(\n forwardRef<HTMLSpanElement, AvatarProps>(function AvatarInner(props, ref) {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const { name, style, ...rest } = componentProps;\n\n const styleWithLayout = useMemo(() => {\n return {\n ...layoutStyles,\n ...style,\n };\n }, [layoutStyles, style]);\n\n const initials = getInitial(name);\n\n return (\n <AvatarBase\n style={styleWithLayout}\n data-anv=\"avatar\"\n name={name}\n ref={ref}\n initials={rest.size === \"small\" ? initials?.[0] : initials}\n {...rest}\n />\n );\n }),\n {\n /**\n * AvatarGroup component for displaying multiple avatars in a group.\n *\n * Features:\n * - Displays multiple avatars in a stacked layout\n * - Handles overflow with a count indicator\n * - Maintains consistent sizing across all avatars\n * - Supports custom styling and layout\n * - Automatically adjusts z-index for proper stacking\n * - Fully accessible with screen reader support\n *\n * @example\n * <Avatar.Group max={3}>\n * <Avatar name=\"John Doe\" />\n * <Avatar name=\"Jane Smith\" />\n * <Avatar name=\"Bob Johnson\" />\n * <Avatar name=\"Alice Brown\" />\n * </Avatar.Group>\n */\n Group: AvatarGroup,\n },\n);\nAvatar.displayName = \"Avatar\";\n"],"names":["styles"],"mappings":"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"}
|