@payfit/unity-components 2.55.13 → 2.55.15

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.
Files changed (60) hide show
  1. package/dist/esm/components/autocomplete/parts/AutocompletePanel.js +1 -1
  2. package/dist/esm/components/avatar/Avatar.context.js +1 -1
  3. package/dist/esm/components/bottom-sheet/parts/BottomSheetDragIndicator.js +1 -1
  4. package/dist/esm/components/breadcrumbs/Breadcrumbs.context.js +1 -1
  5. package/dist/esm/components/breadcrumbs/Breadcrumbs.js +1 -1
  6. package/dist/esm/components/carousel/Carousel.options.js +1 -1
  7. package/dist/esm/components/carousel/hooks/useCarouselState.js +8 -4
  8. package/dist/esm/components/client-side-pagination/ClientSidePagination.js +1 -1
  9. package/dist/esm/components/client-side-pagination/parts/RawPaginationLink.js +1 -1
  10. package/dist/esm/components/client-side-pagination/utils/pagination-window.js +18 -19
  11. package/dist/esm/components/code/Code.js +1 -1
  12. package/dist/esm/components/collapsible/Collapsible.js +1 -1
  13. package/dist/esm/components/dialog/test-utils.js +4 -2
  14. package/dist/esm/components/error-state/initConfig.js +1 -1
  15. package/dist/esm/components/filter/parts/FilterButton.js +1 -1
  16. package/dist/esm/components/filter/parts/FilterLabel.js +1 -1
  17. package/dist/esm/components/filter/utils/value-formatters.js +1 -1
  18. package/dist/esm/components/filter-toolbar/FilterToolbar.js +27 -27
  19. package/dist/esm/components/filter-toolbar/parts/AddFilterItem.js +1 -1
  20. package/dist/esm/components/form/Form.context.js +1 -1
  21. package/dist/esm/components/form-field/FormField.context.js +1 -1
  22. package/dist/esm/components/inline-field/parts/InlineFieldEditView.js +7 -4
  23. package/dist/esm/components/inline-field-group/InlineFieldGroup.js +14 -8
  24. package/dist/esm/components/multi-select/MultiSelect.js +2 -2
  25. package/dist/esm/components/pagination/utils/pagination-window.js +25 -26
  26. package/dist/esm/components/phone-number/parts/PhoneNumberItem.js +1 -1
  27. package/dist/esm/components/popover/Popover.js +1 -1
  28. package/dist/esm/components/radio-button-group/parts/RadioButton.js +1 -1
  29. package/dist/esm/components/select/parts/SelectOption.context.js +1 -1
  30. package/dist/esm/components/select-list/helpers.js +2 -2
  31. package/dist/esm/components/select-list/parts/SelectListOptGroup.js +1 -1
  32. package/dist/esm/components/selectable-card/internals/Content.js +1 -1
  33. package/dist/esm/components/selectable-card/internals/Description.js +1 -1
  34. package/dist/esm/components/selectable-card/internals/Illustration.js +1 -1
  35. package/dist/esm/components/selectable-card/internals/SelectedIndicator.js +1 -1
  36. package/dist/esm/components/side-panel/parts/SidePanelDragIndicator.js +1 -1
  37. package/dist/esm/components/stepper/Stepper.context.js +1 -1
  38. package/dist/esm/components/table/Table.context.js +1 -1
  39. package/dist/esm/components/table/hooks/useTableKeyboardNavigation.js +10 -8
  40. package/dist/esm/components/tabs/Tabs.context.js +1 -1
  41. package/dist/esm/components/task-menu/TaskMenu.context.js +1 -1
  42. package/dist/esm/components/timeline/Timeline.context.js +1 -1
  43. package/dist/esm/components/timeline/parts/TimelineStepContent.context.js +1 -1
  44. package/dist/esm/hooks/use-has-scroll.js +3 -1
  45. package/dist/esm/index.js +2 -2
  46. package/package.json +14 -14
  47. package/skills/unity-data-table/SKILL.md +24 -240
  48. package/skills/unity-data-table/references/patterns.md +237 -0
  49. package/skills/unity-find-component/SKILL.md +20 -105
  50. package/skills/unity-find-component/references/component-catalog.md +94 -0
  51. package/skills/unity-layout-and-styling/SKILL.md +14 -141
  52. package/skills/unity-layout-and-styling/references/patterns.md +139 -0
  53. package/skills/unity-migrate-from-midnight/SKILL.md +9 -9
  54. package/skills/unity-navigation/SKILL.md +12 -116
  55. package/skills/unity-navigation/references/patterns.md +115 -0
  56. package/skills/unity-overlays/SKILL.md +11 -132
  57. package/skills/unity-overlays/references/patterns.md +131 -0
  58. package/skills/unity-setup-feature-plugin/SKILL.md +4 -3
  59. package/skills/unity-tanstack-form/SKILL.md +15 -102
  60. package/skills/unity-tanstack-form/references/patterns.md +102 -0
@@ -20,4 +20,4 @@ function a() {
20
20
  return e;
21
21
  }
22
22
  //#endregion
23
- export { i as TabsProvider, a as useTabsContext };
23
+ export { r as TabsContext, i as TabsProvider, a as useTabsContext };
@@ -44,4 +44,4 @@ function u() {
44
44
  return e;
45
45
  }
46
46
  //#endregion
47
- export { l as TaskMenuProvider, u as useTaskMenuContext };
47
+ export { c as TaskMenuContext, l as TaskMenuProvider, u as useTaskMenuContext };
@@ -17,4 +17,4 @@ function a() {
17
17
  return e;
18
18
  }
19
19
  //#endregion
20
- export { i as TimelineProvider, a as useTimelineContext };
20
+ export { r as TimelineContext, i as TimelineProvider, a as useTimelineContext };
@@ -14,4 +14,4 @@ function a() {
14
14
  return e;
15
15
  }
16
16
  //#endregion
17
- export { i as TimelineStepContentProvider, a as useTimelineStepContentContext };
17
+ export { r as TimelineStepContentContext, i as TimelineStepContentProvider, a as useTimelineStepContentContext };
@@ -18,7 +18,9 @@ function a(a, o = {}) {
18
18
  }
19
19
  }), p = t(() => {
20
20
  let t = a.current;
21
- t && f(e(t, s));
21
+ if (!t) return;
22
+ let n = e(t, s);
23
+ f(n);
22
24
  }, [a, s]);
23
25
  return r(() => {
24
26
  if (!a.current) return;
package/dist/esm/index.js CHANGED
@@ -169,7 +169,7 @@ import { usePaginationWindow as Dr } from "./components/pagination/hooks/use-pag
169
169
  import { usePaginationState as Or } from "./components/pagination/hooks/use-pagination-state.js";
170
170
  import { PhoneNumberInput as kr } from "./components/phone-number/PhoneNumberInput.js";
171
171
  import { Pill as Ar } from "./components/pill/Pill.js";
172
- import { DialogTrigger as jr, Popover as Mr } from "./components/popover/Popover.js";
172
+ import { Popover as jr, PopoverTrigger as Mr } from "./components/popover/Popover.js";
173
173
  import { ProgressBar as Nr } from "./components/progress-bar/ProgressBar.js";
174
174
  import { RadioButtonGroup as Pr } from "./components/radio-button-group/RadioButtonGroup.js";
175
175
  import { RadioButtonHelper as Fr } from "./components/radio-button-group/parts/RadioButtonHelper.js";
@@ -238,4 +238,4 @@ import { tanstackFormDefaultValues as la } from "./hooks/tanstack-form-default-v
238
238
  import { useFieldA11yContext as ua } from "./components/form-field/TanstackFormField.context.js";
239
239
  import { fieldRevalidateLogic as da } from "./utils/field-revalidate-logic.js";
240
240
  import { CollapsibleGroup as fa } from "./components/collapsible-group/CollapsibleGroup.js";
241
- export { y as ActionBar, u as ActionBarAction, d as ActionBarButton, m as ActionBarIconButton, b as ActionBarRoot, e as Actionable, w as Alert, T as AlertActions, O as AlertContent, k as AlertTitle, A as Anchor, j as AppLayout, F as AppMenu, M as AppMenuContext, N as AppMenuContextProvider, U as AppMenuFooter, K as AppMenuHeader, q as AppMenuNavContent, J as Autocomplete, Y as AutocompleteItem, Z as AutocompleteItemGroup, I as Avatar, R as AvatarFallback, $ as AvatarIcon, z as AvatarImage, ee as AvatarPair, _e as BREADCRUMB_ITEM_MAX_WIDTH, B as Badge, te as BadgeDot, ne as BottomSheet, ie as BottomSheetContent, oe as BottomSheetFooter, ce as BottomSheetHeader, de as Breadcrumb, ue as Breadcrumbs, l as Button, ke as Card, Me as CardContent, je as CardTitle, xe as Carousel, Te as CarouselContent, Ce as CarouselHeader, ye as CarouselNav, De as CarouselSlide, Ie as Checkbox, Ui as CheckboxField, Pe as CheckboxGroup, Wi as CheckboxGroupField, Le as CheckboxStandalone, S as CircularIconButton, Re as Collapsible, ze as CollapsibleContent, fa as CollapsibleGroup, Be as CollapsibleTitle, n as DESKTOP_BREAKPOINTS, pt as DataTable, gt as DataTableBulkActions, mt as DataTableRoot, _t as DateCalendar, vt as DatePicker, Ki as DatePickerField, yt as DateRangeCalendar, bt as DateRangePicker, St as DefinitionItem, xt as DefinitionList, Ct as DefinitionTooltip, Et as Dialog, wt as DialogActions, Tt as DialogButton, kt as DialogContent, At as DialogTitle, Dt as DialogTrigger, Ge as EmptyState, Ke as EmptyStateActions, qe as EmptyStateContent, Rt as EmptyStateGetStarted, Bt as EmptyStateGoodJob, Je as EmptyStateIcon, Ht as EmptyStateNoSearchResults, Vt as EmptyStateUpgradeRequired, Ut as EmptyStateUseDesktop, zt as EmptyStateWaitingForData, Gt as ErrorState, Yt as FieldGroup, qt as Fieldset, Xt as Filter, rn as FilterAdapters, Zt as FilterControls, Qt as FilterLabels, an as FilterToolbar, ln as Flex, dn as FlexItem, tn as FloatingActionBar, pn as Form, Vi as FormControl, Hi as FormFeedbackText, zi as FormField, Li as FormHelperText, Gi as FormLabel, mn as FullPageLoader, kn as FunnelBackButton, bn as FunnelBody, vn as FunnelLayout, Sn as FunnelPage, wn as FunnelPageAction, Tn as FunnelPageActions, Dn as FunnelPageContent, An as FunnelPageFooter, Mn as FunnelPageHeader, Pn as FunnelSidebar, In as FunnelTopBar, Bn as Grid, Vn as GridItem, s as Icon, p as IconButton, Hn as Input, Ne as Label, Wn as ListView, Yn as ListViewItemLabel, Xn as ListViewItemText, qn as ListViewSection, r as MOBILE_BREAKPOINTS, h as Menu, g as MenuContent, H as MenuHeader, Zn as MenuSection, V as MenuSeparator, _ as MenuTrigger, Qn as MultiSelect, qi as MultiSelectField, $n as MultiSelectOptGroup, er as MultiSelectOption, tr as Nav, ir as NavGroup, lr as NavigationCardDescription, or as NavigationCardGroup, cr as NavigationCardLabel, fe as NoopRouterProvider, Ji as NumberField, ur as NumberInput, fr as Page, mr as PageHeader, gr as PageHeading, _r as Pagination, yr as PaginationContent, Er as PaginationEllipsis, xr as PaginationItem, W as PayFitBrand, G as PayFitBrandPreprod, kr as PhoneNumberInput, Ar as Pill, Mr as Popover, jr as PopoverTrigger, Nr as ProgressBar, Pt as PromoDialog, jt as PromoDialogActions, Lt as PromoDialogContent, Mt as PromoDialogHero, It as PromoDialogSubtitle, Nt as PromoDialogTitle, Lr as RadioButton, Pr as RadioButtonGroup, Xi as RadioButtonGroupField, Fr as RadioButtonHelper, Ir as RadioIndicator, ve as RawBreadcrumbLink, Ri as RawFormContextualLink, he as RawLink, Un as RawLinkButton, Gn as RawListViewItem, v as RawMenuItem, nr as RawNavItem, ar as RawNavigationCard, Sr as RawPaginationLink, Tr as RawPaginationNext, wr as RawPaginationPrevious, vi as RawSubTask, pi as RawTab, bi as RawTask, pe as RouterProvider, at as Search, zr as SegmentedButtonGroup, ct as Select, st as SelectButton, ea as SelectField, it as SelectOption, Yr as SelectOptionGroup, Xr as SelectOptionHelper, Ur as SelectableButton, Vr as SelectableButtonGroup, Zi as SelectableButtonGroupField, Kr as SelectableCardCheckbox, Gr as SelectableCardCheckboxGroup, Qi as SelectableCardCheckboxGroupField, Jr as SelectableCardRadio, qr as SelectableCardRadioGroup, $i as SelectableCardRadioGroupField, Zr as SidePanel, $r as SidePanelContent, ti as SidePanelFooter, ri as SidePanelHeader, gn as SkipLink, _n as SkipLinks, c as Spinner, un as Stack, fn as StackItem, oi as Step, ai as Stepper, ki as TOAST_CONFIG, mi as TabList, hi as TabPanel, dt as Table, Ve as TableBody, ci as TableCell, Ue as TableColumnHeader, Ye as TableEmptyState, Xe as TableEmptyStateError, Ze as TableEmptyStateLoading, Qe as TableEmptyStateNoData, $e as TableEmptyStateText, nt as TableHeader, et as TableNoSearchResults, lt as TablePagination, ft as TableRoot, ui as TableRow, fi as Tabs, Si as TaskGroup, gi as TaskMenu, D as Text, Ci as TextArea, ta as TextField, Ti as Timeline, Ei as TimelineStep, Oi as TimelineStepDescription, Di as TimelineStepHeader, Ai as ToastManager, Br as ToggleButton, Pi as ToggleSwitch, na as ToggleSwitchField, Mi as ToggleSwitchGroup, ra as ToggleSwitchGroupField, f as Tooltip, x as actionBarRoot, X as autocompleteItem, Q as autocompleteItemGroup, re as bottomSheet, ae as bottomSheetContent, se as bottomSheetFooter, le as bottomSheetHeader, Ae as card, Se as carousel, Ee as carouselContent, we as carouselHeader, be as carouselNav, Oe as carouselSlide, Fe as checkboxGroup, C as circularIconButton, ht as dataTableRoot, Ot as dialog, Kt as errorState, da as fieldRevalidateLogic, Jt as fieldset, $t as filterContainer, en as filterDismissButton, on as filterToolbar, sn as flex, cn as flexItem, nn as floatingActionBar, hn as fullPageLoader, xn as funnelBody, yn as funnelLayout, Cn as funnelPage, En as funnelPageActions, On as funnelPageContent, jn as funnelPageFooter, Nn as funnelPageHeader, Fn as funnelSidebar, Ln as funnelTopBar, L as getInitials, Rn as grid, zn as gridItem, i as isDesktopBreakpoint, a as isMobileBreakpoint, ge as link, Kn as listViewItem, Jn as listViewSection, rr as navItemBase, sr as navigationCardGroup, Yi as numberField, dr as numberInput, pr as page, hr as pageHeader, vr as pagination, br as paginationContent, Cr as paginationLink, Ft as promoDialog, Rr as radioButton, yi as rawSubTask, xi as rawTask, ot as search, Wr as selectableButton, Hr as selectableButtonGroup, Qr as sidePanel, ei as sidePanelContent, ni as sidePanelFooter, ii as sidePanelHeader, He as tableBody, li as tableCell, We as tableColumnHeader, tt as tableEmptyState, rt as tableHeader, ut as tablePagination, di as tableRow, la as tanstackFormDefaultValues, _i as taskMenu, E as text, wi as textArea, ji as toast, Fi as toggleSwitch, Ni as toggleSwitchGroup, P as useAppMenuContext, Ii as useAsyncList, o as useBreakpointListener, Wt as useContainerQueryLevel, ua as useFieldA11yContext, ia as useFieldContext, aa as useFormContext, t as useMediaQuery, Or as usePaginationState, Dr as usePaginationWindow, me as useRouter, si as useStepper, oa as useTanstackUnityForm, Bi as useUnityForm, sa as withFieldGroup, ca as withForm };
241
+ export { y as ActionBar, u as ActionBarAction, d as ActionBarButton, m as ActionBarIconButton, b as ActionBarRoot, e as Actionable, w as Alert, T as AlertActions, O as AlertContent, k as AlertTitle, A as Anchor, j as AppLayout, F as AppMenu, M as AppMenuContext, N as AppMenuContextProvider, U as AppMenuFooter, K as AppMenuHeader, q as AppMenuNavContent, J as Autocomplete, Y as AutocompleteItem, Z as AutocompleteItemGroup, I as Avatar, R as AvatarFallback, $ as AvatarIcon, z as AvatarImage, ee as AvatarPair, _e as BREADCRUMB_ITEM_MAX_WIDTH, B as Badge, te as BadgeDot, ne as BottomSheet, ie as BottomSheetContent, oe as BottomSheetFooter, ce as BottomSheetHeader, de as Breadcrumb, ue as Breadcrumbs, l as Button, ke as Card, Me as CardContent, je as CardTitle, xe as Carousel, Te as CarouselContent, Ce as CarouselHeader, ye as CarouselNav, De as CarouselSlide, Ie as Checkbox, Ui as CheckboxField, Pe as CheckboxGroup, Wi as CheckboxGroupField, Le as CheckboxStandalone, S as CircularIconButton, Re as Collapsible, ze as CollapsibleContent, fa as CollapsibleGroup, Be as CollapsibleTitle, n as DESKTOP_BREAKPOINTS, pt as DataTable, gt as DataTableBulkActions, mt as DataTableRoot, _t as DateCalendar, vt as DatePicker, Ki as DatePickerField, yt as DateRangeCalendar, bt as DateRangePicker, St as DefinitionItem, xt as DefinitionList, Ct as DefinitionTooltip, Et as Dialog, wt as DialogActions, Tt as DialogButton, kt as DialogContent, At as DialogTitle, Dt as DialogTrigger, Ge as EmptyState, Ke as EmptyStateActions, qe as EmptyStateContent, Rt as EmptyStateGetStarted, Bt as EmptyStateGoodJob, Je as EmptyStateIcon, Ht as EmptyStateNoSearchResults, Vt as EmptyStateUpgradeRequired, Ut as EmptyStateUseDesktop, zt as EmptyStateWaitingForData, Gt as ErrorState, Yt as FieldGroup, qt as Fieldset, Xt as Filter, rn as FilterAdapters, Zt as FilterControls, Qt as FilterLabels, an as FilterToolbar, ln as Flex, dn as FlexItem, tn as FloatingActionBar, pn as Form, Vi as FormControl, Hi as FormFeedbackText, zi as FormField, Li as FormHelperText, Gi as FormLabel, mn as FullPageLoader, kn as FunnelBackButton, bn as FunnelBody, vn as FunnelLayout, Sn as FunnelPage, wn as FunnelPageAction, Tn as FunnelPageActions, Dn as FunnelPageContent, An as FunnelPageFooter, Mn as FunnelPageHeader, Pn as FunnelSidebar, In as FunnelTopBar, Bn as Grid, Vn as GridItem, s as Icon, p as IconButton, Hn as Input, Ne as Label, Wn as ListView, Yn as ListViewItemLabel, Xn as ListViewItemText, qn as ListViewSection, r as MOBILE_BREAKPOINTS, h as Menu, g as MenuContent, H as MenuHeader, Zn as MenuSection, V as MenuSeparator, _ as MenuTrigger, Qn as MultiSelect, qi as MultiSelectField, $n as MultiSelectOptGroup, er as MultiSelectOption, tr as Nav, ir as NavGroup, lr as NavigationCardDescription, or as NavigationCardGroup, cr as NavigationCardLabel, fe as NoopRouterProvider, Ji as NumberField, ur as NumberInput, fr as Page, mr as PageHeader, gr as PageHeading, _r as Pagination, yr as PaginationContent, Er as PaginationEllipsis, xr as PaginationItem, W as PayFitBrand, G as PayFitBrandPreprod, kr as PhoneNumberInput, Ar as Pill, jr as Popover, Mr as PopoverTrigger, Nr as ProgressBar, Pt as PromoDialog, jt as PromoDialogActions, Lt as PromoDialogContent, Mt as PromoDialogHero, It as PromoDialogSubtitle, Nt as PromoDialogTitle, Lr as RadioButton, Pr as RadioButtonGroup, Xi as RadioButtonGroupField, Fr as RadioButtonHelper, Ir as RadioIndicator, ve as RawBreadcrumbLink, Ri as RawFormContextualLink, he as RawLink, Un as RawLinkButton, Gn as RawListViewItem, v as RawMenuItem, nr as RawNavItem, ar as RawNavigationCard, Sr as RawPaginationLink, Tr as RawPaginationNext, wr as RawPaginationPrevious, vi as RawSubTask, pi as RawTab, bi as RawTask, pe as RouterProvider, at as Search, zr as SegmentedButtonGroup, ct as Select, st as SelectButton, ea as SelectField, it as SelectOption, Yr as SelectOptionGroup, Xr as SelectOptionHelper, Ur as SelectableButton, Vr as SelectableButtonGroup, Zi as SelectableButtonGroupField, Kr as SelectableCardCheckbox, Gr as SelectableCardCheckboxGroup, Qi as SelectableCardCheckboxGroupField, Jr as SelectableCardRadio, qr as SelectableCardRadioGroup, $i as SelectableCardRadioGroupField, Zr as SidePanel, $r as SidePanelContent, ti as SidePanelFooter, ri as SidePanelHeader, gn as SkipLink, _n as SkipLinks, c as Spinner, un as Stack, fn as StackItem, oi as Step, ai as Stepper, ki as TOAST_CONFIG, mi as TabList, hi as TabPanel, dt as Table, Ve as TableBody, ci as TableCell, Ue as TableColumnHeader, Ye as TableEmptyState, Xe as TableEmptyStateError, Ze as TableEmptyStateLoading, Qe as TableEmptyStateNoData, $e as TableEmptyStateText, nt as TableHeader, et as TableNoSearchResults, lt as TablePagination, ft as TableRoot, ui as TableRow, fi as Tabs, Si as TaskGroup, gi as TaskMenu, D as Text, Ci as TextArea, ta as TextField, Ti as Timeline, Ei as TimelineStep, Oi as TimelineStepDescription, Di as TimelineStepHeader, Ai as ToastManager, Br as ToggleButton, Pi as ToggleSwitch, na as ToggleSwitchField, Mi as ToggleSwitchGroup, ra as ToggleSwitchGroupField, f as Tooltip, x as actionBarRoot, X as autocompleteItem, Q as autocompleteItemGroup, re as bottomSheet, ae as bottomSheetContent, se as bottomSheetFooter, le as bottomSheetHeader, Ae as card, Se as carousel, Ee as carouselContent, we as carouselHeader, be as carouselNav, Oe as carouselSlide, Fe as checkboxGroup, C as circularIconButton, ht as dataTableRoot, Ot as dialog, Kt as errorState, da as fieldRevalidateLogic, Jt as fieldset, $t as filterContainer, en as filterDismissButton, on as filterToolbar, sn as flex, cn as flexItem, nn as floatingActionBar, hn as fullPageLoader, xn as funnelBody, yn as funnelLayout, Cn as funnelPage, En as funnelPageActions, On as funnelPageContent, jn as funnelPageFooter, Nn as funnelPageHeader, Fn as funnelSidebar, Ln as funnelTopBar, L as getInitials, Rn as grid, zn as gridItem, i as isDesktopBreakpoint, a as isMobileBreakpoint, ge as link, Kn as listViewItem, Jn as listViewSection, rr as navItemBase, sr as navigationCardGroup, Yi as numberField, dr as numberInput, pr as page, hr as pageHeader, vr as pagination, br as paginationContent, Cr as paginationLink, Ft as promoDialog, Rr as radioButton, yi as rawSubTask, xi as rawTask, ot as search, Wr as selectableButton, Hr as selectableButtonGroup, Qr as sidePanel, ei as sidePanelContent, ni as sidePanelFooter, ii as sidePanelHeader, He as tableBody, li as tableCell, We as tableColumnHeader, tt as tableEmptyState, rt as tableHeader, ut as tablePagination, di as tableRow, la as tanstackFormDefaultValues, _i as taskMenu, E as text, wi as textArea, ji as toast, Fi as toggleSwitch, Ni as toggleSwitchGroup, P as useAppMenuContext, Ii as useAsyncList, o as useBreakpointListener, Wt as useContainerQueryLevel, ua as useFieldA11yContext, ia as useFieldContext, aa as useFormContext, t as useMediaQuery, Or as usePaginationState, Dr as usePaginationWindow, me as useRouter, si as useStepper, oa as useTanstackUnityForm, Bi as useUnityForm, sa as withFieldGroup, ca as withForm };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payfit/unity-components",
3
- "version": "2.55.13",
3
+ "version": "2.55.15",
4
4
  "module": "./dist/esm/index.js",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -93,7 +93,7 @@
93
93
  "tailwind-variants": "3.2.2",
94
94
  "usehooks-ts": "3.1.1",
95
95
  "zod": "4.4.3",
96
- "@payfit/unity-illustrations": "2.55.13"
96
+ "@payfit/unity-illustrations": "2.55.15"
97
97
  },
98
98
  "peerDependencies": {
99
99
  "@hookform/devtools": "^4",
@@ -105,8 +105,8 @@
105
105
  "react-hook-form": "^7",
106
106
  "react-router-dom": "^5",
107
107
  "zod": "^3 || ^4",
108
- "@payfit/unity-icons": "2.55.13",
109
- "@payfit/unity-themes": "2.55.13"
108
+ "@payfit/unity-icons": "2.55.15",
109
+ "@payfit/unity-themes": "2.55.15"
110
110
  },
111
111
  "devDependencies": {
112
112
  "@figma/code-connect": "1.4.8",
@@ -132,8 +132,8 @@
132
132
  "@types/react": "18.3.18",
133
133
  "@types/react-dom": "18.3.5",
134
134
  "@types/react-router-dom": "5.3.3",
135
- "@vitejs/plugin-react": "6.0.2",
136
- "@vitest/browser-playwright": "4.1.9",
135
+ "@vitejs/plugin-react": "6.0.3",
136
+ "@vitest/browser-playwright": "4.1.10",
137
137
  "eslint-plugin-storybook": "10.3.2",
138
138
  "glob": "11.1.0",
139
139
  "msw": "2.14.6",
@@ -149,17 +149,17 @@
149
149
  "storybook-mock-date-decorator": "3.0.0",
150
150
  "tailwindcss": "4.3.2",
151
151
  "typescript": "npm:@typescript/typescript6@6.0.2",
152
- "vite": "8.0.16",
152
+ "vite": "8.1.4",
153
153
  "vite-plugin-node-polyfills": "0.28.0",
154
- "vitest": "4.1.9",
154
+ "vitest": "4.1.10",
155
+ "@payfit/hr-app-eslint": "0.0.0-use.local",
155
156
  "@payfit/hr-apps-tsconfigs": "0.0.0-use.local",
156
157
  "@payfit/storybook-addon-console-errors": "0.0.0-use.local",
157
- "@payfit/hr-app-eslint": "0.0.0-use.local",
158
- "@payfit/unity-icons": "2.55.13",
159
- "@payfit/unity-illustrations": "2.55.13",
160
- "@payfit/unity-themes": "2.55.13",
161
- "@payfit/vite-configs": "0.0.0-use.local",
162
- "@payfit/storybook-config": "0.0.0-use.local"
158
+ "@payfit/storybook-config": "0.0.0-use.local",
159
+ "@payfit/unity-icons": "2.55.15",
160
+ "@payfit/unity-illustrations": "2.55.15",
161
+ "@payfit/unity-themes": "2.55.15",
162
+ "@payfit/vite-configs": "0.0.0-use.local"
163
163
  },
164
164
  "peerDependenciesMeta": {
165
165
  "@hookform/devtools": {
@@ -4,9 +4,10 @@ description: >
4
4
  Load when rendering tabular data with Unity. Use it to choose DataTable for
5
5
  managed table state or primitive Table for static/custom markup, including
6
6
  filtering, pagination, virtualization, or bulk actions.
7
- type: core
8
- library: '@payfit/unity-components'
9
- library_version: '2.x'
7
+ metadata:
8
+ type: core
9
+ library: '@payfit/unity-components'
10
+ library_version: '2.x'
10
11
  sources:
11
12
  - 'PayFit/hr-apps:libs/shared/unity/components/src/components/data-table/DataTable.tsx'
12
13
  - 'PayFit/hr-apps:libs/shared/unity/components/src/components/data-table/parts/DataTableRoot.tsx'
@@ -23,7 +24,9 @@ table state to manage.
23
24
 
24
25
  ## Setup
25
26
 
26
- Minimum working client-side DataTable. Columns and data MUST be memoized.
27
+ Minimum working client-side DataTable. Keep `columns` and `data` references
28
+ stable across renders. Define static columns outside the component or memoize
29
+ them; memoize derived data when its source would otherwise create a new array.
27
30
 
28
31
  ```tsx
29
32
  import { useMemo, useState } from 'react'
@@ -98,241 +101,17 @@ export function EmployeeTable({ employees }: { employees: Employee[] }) {
98
101
 
99
102
  ## Core Patterns
100
103
 
101
- ### Define columns with the column helper and ColumnMeta
104
+ - Define columns with `createColumnHelper` and use `ColumnMeta` for row
105
+ headers, focus behavior, helper text, and fixed-layout widths.
106
+ - For server pagination, pass only the current page, set `manualPagination`,
107
+ and derive `pageCount` from the server total.
108
+ - Map `FilterToolbar.onChange` into TanStack Table's column/global filter
109
+ state.
110
+ - Put `DataTableBulkActions` beside `DataTable` inside `DataTableRoot` and
111
+ drive it from row-selection state.
102
112
 
103
- ColumnMeta drives accessibility (`isRowHeader`), keyboard navigation
104
- (`isFocusable: false` for cells whose children are themselves focusable like
105
- checkboxes), `helperText` (renders a tooltip next to the header), and
106
- `headerClassName` (required when `layout="fixed"`).
107
-
108
- ```tsx
109
- import { Badge } from '@payfit/unity-components'
110
- import { createColumnHelper } from '@tanstack/react-table'
111
-
112
- const columnHelper = createColumnHelper<Employee>()
113
-
114
- export const employeeColumns = [
115
- columnHelper.accessor('name', {
116
- id: 'employee',
117
- header: 'Employee',
118
- enableSorting: true,
119
- meta: { isRowHeader: true, headerClassName: 'uy:w-[260px]' },
120
- }),
121
- columnHelper.accessor('status', {
122
- header: 'Status',
123
- enableColumnFilter: true,
124
- filterFn: 'arrIncludesSome',
125
- cell: info => {
126
- const status = info.getValue()
127
- return (
128
- <Badge variant={status === 'active' ? 'success' : 'neutral'}>
129
- {status}
130
- </Badge>
131
- )
132
- },
133
- meta: { helperText: 'Active employees can sign in.' },
134
- }),
135
- columnHelper.display({
136
- id: 'actions',
137
- header: '',
138
- cell: ({ row }) => <RowMenu row={row.original} />,
139
- meta: { isFocusable: false },
140
- }),
141
- ]
142
- ```
143
-
144
- ### Server-side pagination
145
-
146
- `manualPagination: true` disables Tanstack's internal slicing. Pass only the
147
- current page's slice as `data` and supply `pageCount`.
148
-
149
- ```tsx
150
- import { useMemo, useState } from 'react'
151
-
152
- import { getCoreRowModel, useReactTable } from '@tanstack/react-table'
153
-
154
- export function ServerTable({ totalCount, fetchPage }: Props) {
155
- const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: 20 })
156
- const { data: pageRows = [] } = useQuery({
157
- queryKey: ['employees', pagination],
158
- queryFn: () => fetchPage(pagination.pageIndex, pagination.pageSize),
159
- })
160
-
161
- const columns = useMemo(() => employeeColumns, [])
162
- const data = useMemo(() => pageRows, [pageRows])
163
-
164
- const table = useReactTable({
165
- data,
166
- columns,
167
- manualPagination: true,
168
- pageCount: Math.ceil(totalCount / pagination.pageSize),
169
- state: { pagination },
170
- onPaginationChange: setPagination,
171
- getCoreRowModel: getCoreRowModel(),
172
- })
173
-
174
- return (
175
- <DataTableRoot>
176
- <DataTable table={table}>
177
- {row => (
178
- <TableRow key={row.id}>
179
- {row.getVisibleCells().map(cell => (
180
- <TableCell key={cell.id}>
181
- {flexRender(cell.column.columnDef.cell, cell.getContext())}
182
- </TableCell>
183
- ))}
184
- </TableRow>
185
- )}
186
- </DataTable>
187
- </DataTableRoot>
188
- )
189
- }
190
- ```
191
-
192
- ### Filtering with FilterToolbar
193
-
194
- `FilterToolbar.onChange` emits `SerializableAppliedFilter[]`. Map that onto
195
- `table.setColumnFilters` / `table.setGlobalFilter`. `renderControl` takes any
196
- control — it is a render function on purpose so you can drop in date pickers,
197
- multi-selects, text fields, etc.
198
-
199
- ```tsx
200
- import type { FilterDef } from '@payfit/unity-components'
201
-
202
- import { FilterToolbar, Select, SelectItem } from '@payfit/unity-components'
203
- import { getFilteredRowModel } from '@tanstack/react-table'
204
-
205
- const filterDefs: FilterDef[] = [
206
- {
207
- id: 'status',
208
- label: 'Status',
209
- renderControl: (value, onChange) => (
210
- <Select selectedKey={value as string} onSelectionChange={onChange}>
211
- <SelectItem id="active">Active</SelectItem>
212
- <SelectItem id="inactive">Inactive</SelectItem>
213
- </Select>
214
- ),
215
- renderLabel: value => String(value),
216
- },
217
- ]
218
-
219
- export function FilteredTable() {
220
- const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([])
221
-
222
- const table = useReactTable({
223
- data,
224
- columns,
225
- state: { columnFilters, pagination },
226
- onColumnFiltersChange: setColumnFilters,
227
- onPaginationChange: setPagination,
228
- getCoreRowModel: getCoreRowModel(),
229
- getFilteredRowModel: getFilteredRowModel(),
230
- getPaginationRowModel: getPaginationRowModel(),
231
- })
232
-
233
- return (
234
- <>
235
- <FilterToolbar
236
- filterDefs={filterDefs}
237
- onChange={applied =>
238
- setColumnFilters(applied.map(f => ({ id: f.id, value: f.value })))
239
- }
240
- />
241
- <DataTableRoot>
242
- <DataTable table={table}>
243
- {row => (
244
- <TableRow key={row.id}>
245
- {row.getVisibleCells().map(cell => (
246
- <TableCell key={cell.id}>
247
- {flexRender(cell.column.columnDef.cell, cell.getContext())}
248
- </TableCell>
249
- ))}
250
- </TableRow>
251
- )}
252
- </DataTable>
253
- </DataTableRoot>
254
- </>
255
- )
256
- }
257
- ```
258
-
259
- ### Bulk actions with row selection
260
-
261
- `DataTableBulkActions` lives next to `DataTable` inside `DataTableRoot`.
262
- It auto-shows when rows are selected and provides the F6 focus trap. Use a
263
- display column with `meta.isFocusable: false` for the checkbox.
264
-
265
- ```tsx
266
- import {
267
- CheckboxStandalone,
268
- DataTable,
269
- DataTableBulkActions,
270
- DataTableRoot,
271
- } from '@payfit/unity-components'
272
-
273
- const checkboxColumn = columnHelper.display({
274
- id: 'select',
275
- header: ({ table }) => (
276
- <CheckboxStandalone
277
- isSelected={table.getIsAllPageRowsSelected()}
278
- isIndeterminate={table.getIsSomePageRowsSelected()}
279
- onChange={value => table.toggleAllPageRowsSelected(value)}
280
- slot="selection"
281
- >
282
- Select all
283
- </CheckboxStandalone>
284
- ),
285
- cell: ({ row }) => (
286
- <CheckboxStandalone
287
- isSelected={row.getIsSelected()}
288
- onChange={value => row.toggleSelected(value)}
289
- slot="selection"
290
- >
291
- Select row
292
- </CheckboxStandalone>
293
- ),
294
- enableSorting: false,
295
- meta: { isFocusable: false },
296
- })
297
-
298
- export function BulkTable() {
299
- const [rowSelection, setRowSelection] = useState({})
300
- const columns = useMemo(() => [checkboxColumn, ...employeeColumns], [])
301
- const table = useReactTable({
302
- data,
303
- columns,
304
- state: { rowSelection, pagination },
305
- onRowSelectionChange: setRowSelection,
306
- onPaginationChange: setPagination,
307
- enableRowSelection: true,
308
- getCoreRowModel: getCoreRowModel(),
309
- getPaginationRowModel: getPaginationRowModel(),
310
- })
311
-
312
- return (
313
- <DataTableRoot>
314
- <DataTable table={table}>
315
- {row => (
316
- <TableRow key={row.id} isSelected={row.getIsSelected()}>
317
- {row.getVisibleCells().map(cell => (
318
- <TableCell key={cell.id}>
319
- {flexRender(cell.column.columnDef.cell, cell.getContext())}
320
- </TableCell>
321
- ))}
322
- </TableRow>
323
- )}
324
- </DataTable>
325
- <DataTableBulkActions
326
- table={table}
327
- actions={[
328
- { id: 'archive', label: 'Archive', onAction: rows => archive(rows) },
329
- { id: 'delete', label: 'Delete', onAction: rows => remove(rows) },
330
- ]}
331
- />
332
- </DataTableRoot>
333
- )
334
- }
335
- ```
113
+ Read [references/patterns.md](references/patterns.md) when implementing one of
114
+ these patterns.
336
115
 
337
116
  ## Common Mistakes
338
117
 
@@ -435,7 +214,7 @@ const table = useReactTable({ /* … */ state: { columnFilters, globalFilter },
435
214
 
436
215
  FilterToolbar.onChange emits AppliedFilter[]. Agent stores them locally without mapping to table.setGlobalFilter / setColumnFilters, so rows do not actually filter.
437
216
 
438
- ### CRITICAL Server-side pagination without slicing data
217
+ ### HIGH Pass every local row with manual pagination
439
218
 
440
219
  Wrong:
441
220
 
@@ -447,7 +226,7 @@ useReactTable({
447
226
  })
448
227
  ```
449
228
 
450
- Correct:
229
+ Correct for locally held data:
451
230
 
452
231
  ```tsx
453
232
  const currentData = useMemo(() => {
@@ -465,6 +244,11 @@ useReactTable({
465
244
 
466
245
  manualPagination: true tells Tanstack not to slice. Agents pass the full dataset and expect TanStack to paginate anyway.
467
246
 
247
+ For server-side pagination, fetch and pass only the current server page and
248
+ set `pageCount` from the server's total count. When all rows are local and
249
+ TanStack should paginate them automatically, omit `manualPagination` and use
250
+ `getPaginationRowModel()` instead.
251
+
468
252
  ### MEDIUM Render large datasets without enableVirtualization
469
253
 
470
254
  Wrong: