@coveord/plasma-mantine 58.0.2 → 59.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/.turbo/turbo-build.log +4 -4
  2. package/.turbo/turbo-test.log +100 -108
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/cjs/components/Badge/Badge.d.ts +2 -2
  5. package/dist/cjs/components/Badge/Badge.d.ts.map +1 -1
  6. package/dist/cjs/components/Badge/Badge.js.map +1 -1
  7. package/dist/cjs/components/Header/HeaderRight/HeaderRight.js +1 -1
  8. package/dist/cjs/components/Header/HeaderRight/HeaderRight.js.map +1 -1
  9. package/dist/cjs/components/Table/use-persisted-column-visibility.d.ts +16 -0
  10. package/dist/cjs/components/Table/use-persisted-column-visibility.d.ts.map +1 -0
  11. package/dist/cjs/components/Table/use-persisted-column-visibility.js +123 -0
  12. package/dist/cjs/components/Table/use-persisted-column-visibility.js.map +1 -0
  13. package/dist/cjs/components/Table/use-table.d.ts +12 -0
  14. package/dist/cjs/components/Table/use-table.d.ts.map +1 -1
  15. package/dist/cjs/components/Table/use-table.js +22 -7
  16. package/dist/cjs/components/Table/use-table.js.map +1 -1
  17. package/dist/cjs/utils/local-storage.d.ts +38 -0
  18. package/dist/cjs/utils/local-storage.d.ts.map +1 -0
  19. package/dist/cjs/utils/local-storage.js +175 -0
  20. package/dist/cjs/utils/local-storage.js.map +1 -0
  21. package/dist/esm/components/Badge/Badge.d.ts +2 -2
  22. package/dist/esm/components/Badge/Badge.d.ts.map +1 -1
  23. package/dist/esm/components/Badge/Badge.js.map +1 -1
  24. package/dist/esm/components/Header/HeaderRight/HeaderRight.js +1 -1
  25. package/dist/esm/components/Header/HeaderRight/HeaderRight.js.map +1 -1
  26. package/dist/esm/components/Table/use-persisted-column-visibility.d.ts +16 -0
  27. package/dist/esm/components/Table/use-persisted-column-visibility.d.ts.map +1 -0
  28. package/dist/esm/components/Table/use-persisted-column-visibility.js +85 -0
  29. package/dist/esm/components/Table/use-persisted-column-visibility.js.map +1 -0
  30. package/dist/esm/components/Table/use-table.d.ts +12 -0
  31. package/dist/esm/components/Table/use-table.d.ts.map +1 -1
  32. package/dist/esm/components/Table/use-table.js +15 -3
  33. package/dist/esm/components/Table/use-table.js.map +1 -1
  34. package/dist/esm/utils/local-storage.d.ts +38 -0
  35. package/dist/esm/utils/local-storage.d.ts.map +1 -0
  36. package/dist/esm/utils/local-storage.js +134 -0
  37. package/dist/esm/utils/local-storage.js.map +1 -0
  38. package/package.json +1 -1
  39. package/src/components/Badge/Badge.tsx +30 -27
  40. package/src/components/Header/HeaderRight/HeaderRight.tsx +1 -1
  41. package/src/components/Table/__tests__/use-persisted-column-visibility.spec.ts +203 -0
  42. package/src/components/Table/use-persisted-column-visibility.ts +79 -0
  43. package/src/components/Table/use-table.ts +36 -3
  44. package/src/utils/__tests__/local-storage.spec.ts +176 -0
  45. package/src/utils/local-storage.ts +151 -0
@@ -1,6 +1,6 @@
1
- import { BadgeCssVariables, BadgeProps, BadgeStylesNames, BadgeVariant, PolymorphicFactory, PolymorphicComponentProps } from '@mantine/core';
1
+ import { BadgeCssVariables, BadgeProps, BadgeStylesNames, BadgeVariant, ElementProps, PolymorphicComponentProps, PolymorphicFactory } from '@mantine/core';
2
2
  import { ForwardRefExoticComponent, ReactNode, RefAttributes } from 'react';
3
- export interface SemanticBadgeProps extends Pick<BadgeProps, 'm' | 'mt' | 'mb' | 'ml' | 'mr' | 'ms' | 'me' | 'mx' | 'my' | 'miw' | 'maw' | 'pos' | 'top' | 'left' | 'right' | 'bottom' | 'inset' | 'display' | 'flex' | 'leftSection' | 'rightSection' | 'fullWidth' | 'circle'> {
3
+ export interface SemanticBadgeProps extends Pick<BadgeProps, 'm' | 'mt' | 'mb' | 'ml' | 'mr' | 'ms' | 'me' | 'mx' | 'my' | 'miw' | 'maw' | 'pos' | 'top' | 'left' | 'right' | 'bottom' | 'inset' | 'display' | 'flex' | 'leftSection' | 'rightSection' | 'fullWidth' | 'circle'>, ElementProps<'div'> {
4
4
  /**
5
5
  * The size of the badge.
6
6
  * @default 'small'
@@ -1 +1 @@
1
- {"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../../../src/components/Badge/Badge.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEH,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAChB,YAAY,EAGZ,kBAAkB,EAClB,yBAAyB,EAE5B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAa,yBAAyB,EAAgB,SAAS,EAAE,aAAa,EAAC,MAAM,OAAO,CAAC;AAEpG,MAAM,WAAW,kBACb,SAAQ,IAAI,CACR,UAAU,EACR,GAAG,GACH,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,MAAM,GACN,OAAO,GACP,QAAQ,GACR,OAAO,GACP,SAAS,GACT,MAAM,GACN,aAAa,GACb,cAAc,GACd,WAAW,GACX,QAAQ,CACb;IACD;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACzB;;;OAGG;IACH,EAAE,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACtB;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACxB;AAED,MAAM,MAAM,aAAa,GAAG,yBAAyB,CAAC,kBAAkB,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC;AAuH1G,MAAM,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;IAClD,KAAK,EAAE,UAAU,CAAC;IAClB,UAAU,EAAE,cAAc,CAAC;IAC3B,gBAAgB,EAAE,KAAK,CAAC;IACxB,WAAW,EAAE,gBAAgB,CAAC;IAC9B,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,EAAE,YAAY,CAAC;IACtB,gBAAgB,EAAE;QACd,OAAO,EAAE,aAAa,CAAC;QACvB,SAAS,EAAE,aAAa,CAAC;QACzB,OAAO,EAAE,aAAa,CAAC;QACvB,QAAQ,EAAE,aAAa,CAAC;QACxB,OAAO,EAAE,aAAa,CAAC;QACvB,QAAQ,EAAE,aAAa,CAAC;KAC3B,CAAC;CACL,CAAC,CAAC;AAEH,eAAO,MAAM,KAAK;;;;;;;;;WAhBP,UAAU;gBACL,cAAc;sBACR,KAAK;iBACV,gBAAgB;UACvB,iBAAiB;aACd,YAAY;sBACH;QACd,OAAO,EAAE,aAAa,CAAC;QACvB,SAAS,EAAE,aAAa,CAAC;QACzB,OAAO,EAAE,aAAa,CAAC;QACvB,QAAQ,EAAE,aAAa,CAAC;QACxB,OAAO,EAAE,aAAa,CAAC;QACvB,QAAQ,EAAE,aAAa,CAAC;KAC3B;;WAbM,UAAU;gBACL,cAAc;sBACR,KAAK;iBACV,gBAAgB;UACvB,iBAAiB;aACd,YAAY;sBACH;QACd,OAAO,EAAE,aAAa,CAAC;QACvB,SAAS,EAAE,aAAa,CAAC;QACzB,OAAO,EAAE,aAAa,CAAC;QACvB,QAAQ,EAAE,aAAa,CAAC;QACxB,OAAO,EAAE,aAAa,CAAC;QACvB,QAAQ,EAAE,aAAa,CAAC;KAC3B;;WAbM,UAAU;gBACL,cAAc;sBACR,KAAK;iBACV,gBAAgB;UACvB,iBAAiB;aACd,YAAY;sBACH;QACd,OAAO,EAAE,aAAa,CAAC;QACvB,SAAS,EAAE,aAAa,CAAC;QACzB,OAAO,EAAE,aAAa,CAAC;QACvB,QAAQ,EAAE,aAAa,CAAC;QACxB,OAAO,EAAE,aAAa,CAAC;QACvB,QAAQ,EAAE,aAAa,CAAC;KAC3B;;aANY,aAAa;eACX,aAAa;aACf,aAAa;cACZ,aAAa;aACd,aAAa;cACZ,aAAa;CAIqF,CAAC"}
1
+ {"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../../../src/components/Badge/Badge.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEH,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,YAAY,EAEZ,yBAAyB,EAEzB,kBAAkB,EAErB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAa,yBAAyB,EAAgB,SAAS,EAAE,aAAa,EAAC,MAAM,OAAO,CAAC;AAEpG,MAAM,WAAW,kBACb,SACI,IAAI,CACA,UAAU,EACR,GAAG,GACH,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,MAAM,GACN,OAAO,GACP,QAAQ,GACR,OAAO,GACP,SAAS,GACT,MAAM,GACN,aAAa,GACb,cAAc,GACd,WAAW,GACX,QAAQ,CACb,EACD,YAAY,CAAC,KAAK,CAAC;IACvB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACzB;;;OAGG;IACH,EAAE,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACtB;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACxB;AAED,MAAM,MAAM,aAAa,GAAG,yBAAyB,CAAC,kBAAkB,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC;AAuH1G,MAAM,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;IAClD,KAAK,EAAE,UAAU,CAAC;IAClB,UAAU,EAAE,cAAc,CAAC;IAC3B,gBAAgB,EAAE,KAAK,CAAC;IACxB,WAAW,EAAE,gBAAgB,CAAC;IAC9B,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,EAAE,YAAY,CAAC;IACtB,gBAAgB,EAAE;QACd,OAAO,EAAE,aAAa,CAAC;QACvB,SAAS,EAAE,aAAa,CAAC;QACzB,OAAO,EAAE,aAAa,CAAC;QACvB,QAAQ,EAAE,aAAa,CAAC;QACxB,OAAO,EAAE,aAAa,CAAC;QACvB,QAAQ,EAAE,aAAa,CAAC;KAC3B,CAAC;CACL,CAAC,CAAC;AAEH,eAAO,MAAM,KAAK;;;;;;;;;WAhBP,UAAU;gBACL,cAAc;sBACR,KAAK;iBACV,gBAAgB;UACvB,iBAAiB;aACd,YAAY;sBACH;QACd,OAAO,EAAE,aAAa,CAAC;QACvB,SAAS,EAAE,aAAa,CAAC;QACzB,OAAO,EAAE,aAAa,CAAC;QACvB,QAAQ,EAAE,aAAa,CAAC;QACxB,OAAO,EAAE,aAAa,CAAC;QACvB,QAAQ,EAAE,aAAa,CAAC;KAC3B;;WAbM,UAAU;gBACL,cAAc;sBACR,KAAK;iBACV,gBAAgB;UACvB,iBAAiB;aACd,YAAY;sBACH;QACd,OAAO,EAAE,aAAa,CAAC;QACvB,SAAS,EAAE,aAAa,CAAC;QACzB,OAAO,EAAE,aAAa,CAAC;QACvB,QAAQ,EAAE,aAAa,CAAC;QACxB,OAAO,EAAE,aAAa,CAAC;QACvB,QAAQ,EAAE,aAAa,CAAC;KAC3B;;WAbM,UAAU;gBACL,cAAc;sBACR,KAAK;iBACV,gBAAgB;UACvB,iBAAiB;aACd,YAAY;sBACH;QACd,OAAO,EAAE,aAAa,CAAC;QACvB,SAAS,EAAE,aAAa,CAAC;QACzB,OAAO,EAAE,aAAa,CAAC;QACvB,QAAQ,EAAE,aAAa,CAAC;QACxB,OAAO,EAAE,aAAa,CAAC;QACvB,QAAQ,EAAE,aAAa,CAAC;KAC3B;;aANY,aAAa;eACX,aAAa;aACf,aAAa;cACZ,aAAa;aACd,aAAa;cACZ,aAAa;CAIqF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Badge/Badge.tsx"],"sourcesContent":["import {\n alpha,\n BadgeCssVariables,\n BadgeProps,\n BadgeStylesNames,\n BadgeVariant,\n Badge as MantineBadge,\n polymorphicFactory,\n PolymorphicFactory,\n PolymorphicComponentProps,\n useComputedColorScheme,\n} from '@mantine/core';\nimport {forwardRef, ForwardRefExoticComponent, ReactElement, ReactNode, RefAttributes} from 'react';\n\nexport interface SemanticBadgeProps\n extends Pick<\n BadgeProps,\n | 'm'\n | 'mt'\n | 'mb'\n | 'ml'\n | 'mr'\n | 'ms'\n | 'me'\n | 'mx'\n | 'my'\n | 'miw'\n | 'maw'\n | 'pos'\n | 'top'\n | 'left'\n | 'right'\n | 'bottom'\n | 'inset'\n | 'display'\n | 'flex'\n | 'leftSection'\n | 'rightSection'\n | 'fullWidth'\n | 'circle'\n > {\n /**\n * The size of the badge.\n * @default 'small'\n */\n size?: 'small' | 'large';\n /**\n * Whether the badge is displayed over a light or dark background.\n * @default Falls back to theme.\n */\n on?: 'light' | 'dark';\n /**\n * The content of the badge.\n */\n children?: ReactNode;\n}\n\nexport type SemanticBadge = ForwardRefExoticComponent<SemanticBadgeProps & RefAttributes<HTMLDivElement>>;\n\nconst enhanceBadge = (\n ComponentLight: <L = 'div'>(props: PolymorphicComponentProps<L, BadgeProps>) => ReactElement,\n ComponentDark: <L = 'div'>(props: PolymorphicComponentProps<L, BadgeProps>) => ReactElement,\n displayName: string,\n): SemanticBadge => {\n const EnhancedBadge = forwardRef<HTMLDivElement, SemanticBadgeProps>((props, ref) => {\n const computedColorScheme = useComputedColorScheme('light', {getInitialValueInEffect: true});\n const Component = (props.on || computedColorScheme) === 'dark' ? ComponentDark : ComponentLight;\n return (\n <Component\n ref={ref}\n {...props}\n py={2}\n px={12}\n size={props.size === 'large' ? 'lg' : 'md'}\n h={props.size === 'large' ? 22 : 20}\n />\n );\n });\n EnhancedBadge.displayName = displayName;\n return EnhancedBadge;\n};\n\nconst BadgePrimary = enhanceBadge(\n MantineBadge.withProps({\n variant: 'light',\n bd: '1px solid var(--badge-bg)',\n c: 'var(--mantine-primary-color-6)',\n }),\n MantineBadge.withProps({\n variant: 'light',\n bd: `1px solid ${alpha('var(--mantine-primary-color-3)', 0.32)}`,\n c: 'var(--mantine-primary-color-2)',\n bg: alpha('var(--mantine-primary-color-3)', 0.32),\n }),\n 'Badge.Primary',\n);\nconst BadgeSecondary = enhanceBadge(\n MantineBadge.withProps({\n variant: 'light',\n color: 'gray',\n bd: '1px solid var(--badge-bg)',\n c: 'gray.7',\n }),\n MantineBadge.withProps({\n variant: 'light',\n color: 'gray',\n c: 'var(--mantine-color-white)',\n bd: `1px solid ${alpha('var(--mantine-color-gray-3)', 0.16)}`,\n bg: alpha('var(--mantine-color-gray-3)', 0.16),\n }),\n 'Badge.Secondary',\n);\nconst BadgeSuccess = enhanceBadge(\n MantineBadge.withProps({\n variant: 'light',\n color: 'green',\n bd: '1px solid var(--badge-bg)',\n c: 'green.6',\n }),\n MantineBadge.withProps({\n variant: 'light',\n color: 'green',\n c: 'green.2',\n bd: `1px solid ${alpha('var(--mantine-color-green-3)', 0.16)}`,\n bg: alpha('var(--mantine-color-green-3)', 0.16),\n }),\n 'Badge.Success',\n);\nconst BadgeCritical = enhanceBadge(\n MantineBadge.withProps({\n variant: 'light',\n color: 'critical',\n bd: '1px solid var(--badge-bg)',\n c: 'red.6',\n }),\n MantineBadge.withProps({\n variant: 'light',\n color: 'critical',\n c: 'red.2',\n bd: `1px solid ${alpha('var(--mantine-color-red-3)', 0.16)}`,\n bg: alpha('var(--mantine-color-red-3)', 0.16),\n }),\n 'Badge.Critical',\n);\nconst BadgeWarning = enhanceBadge(\n MantineBadge.withProps({\n variant: 'light',\n color: 'warning',\n bd: '1px solid var(--badge-bg)',\n c: 'yellow.6',\n }),\n MantineBadge.withProps({\n variant: 'light',\n color: 'warning',\n c: 'yellow.2',\n bd: `1px solid ${alpha('var(--mantine-color-yellow-3)', 0.16)}`,\n bg: alpha('var(--mantine-color-yellow-3)', 0.16),\n }),\n 'Badge.Warning',\n);\nconst BadgeDisabled = enhanceBadge(\n MantineBadge.withProps({\n variant: 'light',\n color: 'gray',\n c: 'var(--coveo-color-text-disabled)',\n bg: 'var(--coveo-color-bg-disabled)',\n }),\n MantineBadge.withProps({\n variant: 'light',\n color: 'gray',\n c: 'dark.3',\n bg: alpha('var(--mantine-color-gray-3)', 0.16),\n }),\n 'Badge.Disabled',\n);\n\nexport type BadgeOverloadFactory = PolymorphicFactory<{\n props: BadgeProps;\n defaultRef: HTMLDivElement;\n defaultComponent: 'div';\n stylesNames: BadgeStylesNames;\n vars: BadgeCssVariables;\n variant: BadgeVariant;\n staticComponents: {\n Primary: SemanticBadge;\n Secondary: SemanticBadge;\n Success: SemanticBadge;\n Critical: SemanticBadge;\n Warning: SemanticBadge;\n Disabled: SemanticBadge;\n };\n}>;\n\nexport const Badge = polymorphicFactory<BadgeOverloadFactory>((props, ref) => <MantineBadge ref={ref} {...props} />);\n\nBadge.Primary = BadgePrimary;\nBadge.Secondary = BadgeSecondary;\nBadge.Success = BadgeSuccess;\nBadge.Critical = BadgeCritical;\nBadge.Warning = BadgeWarning;\nBadge.Disabled = BadgeDisabled;\n"],"names":["Badge","enhanceBadge","ComponentLight","ComponentDark","displayName","EnhancedBadge","forwardRef","props","ref","computedColorScheme","useComputedColorScheme","getInitialValueInEffect","Component","on","py","px","size","h","BadgePrimary","MantineBadge","withProps","variant","bd","c","alpha","bg","BadgeSecondary","color","BadgeSuccess","BadgeCritical","BadgeWarning","BadgeDisabled","polymorphicFactory","Primary","Secondary","Success","Critical","Warning","Disabled"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/Badge/Badge.tsx"],"sourcesContent":["import {\n alpha,\n BadgeCssVariables,\n BadgeProps,\n BadgeStylesNames,\n BadgeVariant,\n ElementProps,\n Badge as MantineBadge,\n PolymorphicComponentProps,\n polymorphicFactory,\n PolymorphicFactory,\n useComputedColorScheme,\n} from '@mantine/core';\nimport {forwardRef, ForwardRefExoticComponent, ReactElement, ReactNode, RefAttributes} from 'react';\n\nexport interface SemanticBadgeProps\n extends\n Pick<\n BadgeProps,\n | 'm'\n | 'mt'\n | 'mb'\n | 'ml'\n | 'mr'\n | 'ms'\n | 'me'\n | 'mx'\n | 'my'\n | 'miw'\n | 'maw'\n | 'pos'\n | 'top'\n | 'left'\n | 'right'\n | 'bottom'\n | 'inset'\n | 'display'\n | 'flex'\n | 'leftSection'\n | 'rightSection'\n | 'fullWidth'\n | 'circle'\n >,\n ElementProps<'div'> {\n /**\n * The size of the badge.\n * @default 'small'\n */\n size?: 'small' | 'large';\n /**\n * Whether the badge is displayed over a light or dark background.\n * @default Falls back to theme.\n */\n on?: 'light' | 'dark';\n /**\n * The content of the badge.\n */\n children?: ReactNode;\n}\n\nexport type SemanticBadge = ForwardRefExoticComponent<SemanticBadgeProps & RefAttributes<HTMLDivElement>>;\n\nconst enhanceBadge = (\n ComponentLight: <L = 'div'>(props: PolymorphicComponentProps<L, BadgeProps>) => ReactElement,\n ComponentDark: <L = 'div'>(props: PolymorphicComponentProps<L, BadgeProps>) => ReactElement,\n displayName: string,\n): SemanticBadge => {\n const EnhancedBadge = forwardRef<HTMLDivElement, SemanticBadgeProps>((props, ref) => {\n const computedColorScheme = useComputedColorScheme('light', {getInitialValueInEffect: true});\n const Component = (props.on || computedColorScheme) === 'dark' ? ComponentDark : ComponentLight;\n return (\n <Component\n ref={ref}\n {...props}\n py={2}\n px={12}\n size={props.size === 'large' ? 'lg' : 'md'}\n h={props.size === 'large' ? 22 : 20}\n />\n );\n });\n EnhancedBadge.displayName = displayName;\n return EnhancedBadge;\n};\n\nconst BadgePrimary = enhanceBadge(\n MantineBadge.withProps({\n variant: 'light',\n bd: '1px solid var(--badge-bg)',\n c: 'var(--mantine-primary-color-6)',\n }),\n MantineBadge.withProps({\n variant: 'light',\n bd: `1px solid ${alpha('var(--mantine-primary-color-3)', 0.32)}`,\n c: 'var(--mantine-primary-color-2)',\n bg: alpha('var(--mantine-primary-color-3)', 0.32),\n }),\n 'Badge.Primary',\n);\nconst BadgeSecondary = enhanceBadge(\n MantineBadge.withProps({\n variant: 'light',\n color: 'gray',\n bd: '1px solid var(--badge-bg)',\n c: 'gray.7',\n }),\n MantineBadge.withProps({\n variant: 'light',\n color: 'gray',\n c: 'var(--mantine-color-white)',\n bd: `1px solid ${alpha('var(--mantine-color-gray-3)', 0.16)}`,\n bg: alpha('var(--mantine-color-gray-3)', 0.16),\n }),\n 'Badge.Secondary',\n);\nconst BadgeSuccess = enhanceBadge(\n MantineBadge.withProps({\n variant: 'light',\n color: 'green',\n bd: '1px solid var(--badge-bg)',\n c: 'green.6',\n }),\n MantineBadge.withProps({\n variant: 'light',\n color: 'green',\n c: 'green.2',\n bd: `1px solid ${alpha('var(--mantine-color-green-3)', 0.16)}`,\n bg: alpha('var(--mantine-color-green-3)', 0.16),\n }),\n 'Badge.Success',\n);\nconst BadgeCritical = enhanceBadge(\n MantineBadge.withProps({\n variant: 'light',\n color: 'critical',\n bd: '1px solid var(--badge-bg)',\n c: 'red.6',\n }),\n MantineBadge.withProps({\n variant: 'light',\n color: 'critical',\n c: 'red.2',\n bd: `1px solid ${alpha('var(--mantine-color-red-3)', 0.16)}`,\n bg: alpha('var(--mantine-color-red-3)', 0.16),\n }),\n 'Badge.Critical',\n);\nconst BadgeWarning = enhanceBadge(\n MantineBadge.withProps({\n variant: 'light',\n color: 'warning',\n bd: '1px solid var(--badge-bg)',\n c: 'yellow.6',\n }),\n MantineBadge.withProps({\n variant: 'light',\n color: 'warning',\n c: 'yellow.2',\n bd: `1px solid ${alpha('var(--mantine-color-yellow-3)', 0.16)}`,\n bg: alpha('var(--mantine-color-yellow-3)', 0.16),\n }),\n 'Badge.Warning',\n);\nconst BadgeDisabled = enhanceBadge(\n MantineBadge.withProps({\n variant: 'light',\n color: 'gray',\n c: 'var(--coveo-color-text-disabled)',\n bg: 'var(--coveo-color-bg-disabled)',\n }),\n MantineBadge.withProps({\n variant: 'light',\n color: 'gray',\n c: 'dark.3',\n bg: alpha('var(--mantine-color-gray-3)', 0.16),\n }),\n 'Badge.Disabled',\n);\n\nexport type BadgeOverloadFactory = PolymorphicFactory<{\n props: BadgeProps;\n defaultRef: HTMLDivElement;\n defaultComponent: 'div';\n stylesNames: BadgeStylesNames;\n vars: BadgeCssVariables;\n variant: BadgeVariant;\n staticComponents: {\n Primary: SemanticBadge;\n Secondary: SemanticBadge;\n Success: SemanticBadge;\n Critical: SemanticBadge;\n Warning: SemanticBadge;\n Disabled: SemanticBadge;\n };\n}>;\n\nexport const Badge = polymorphicFactory<BadgeOverloadFactory>((props, ref) => <MantineBadge ref={ref} {...props} />);\n\nBadge.Primary = BadgePrimary;\nBadge.Secondary = BadgeSecondary;\nBadge.Success = BadgeSuccess;\nBadge.Critical = BadgeCritical;\nBadge.Warning = BadgeWarning;\nBadge.Disabled = BadgeDisabled;\n"],"names":["Badge","enhanceBadge","ComponentLight","ComponentDark","displayName","EnhancedBadge","forwardRef","props","ref","computedColorScheme","useComputedColorScheme","getInitialValueInEffect","Component","on","py","px","size","h","BadgePrimary","MantineBadge","withProps","variant","bd","c","alpha","bg","BadgeSecondary","color","BadgeSuccess","BadgeCritical","BadgeWarning","BadgeDisabled","polymorphicFactory","Primary","Secondary","Success","Critical","Warning","Disabled"],"mappings":"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"}
@@ -15,7 +15,7 @@ var _jsxruntime = require("react/jsx-runtime");
15
15
  var _core = require("@mantine/core");
16
16
  var _Headercontext = require("../Header.context.js");
17
17
  var defaultProps = {
18
- gap: 'sm'
18
+ gap: 'xs'
19
19
  };
20
20
  var HeaderRight = (0, _core.factory)(function(_props, ref) {
21
21
  var props = (0, _core.useProps)('HeaderRight', defaultProps, _props);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/Header/HeaderRight/HeaderRight.tsx"],"sourcesContent":["import {CompoundStylesApiProps, Factory, Group, GroupProps, factory, useProps} from '@mantine/core';\nimport {ReactNode} from 'react';\nimport {useHeaderContext} from '../Header.context.js';\n\nexport type HeaderRightStyleNames = 'right';\n\nexport interface HeaderRightProps\n extends\n Omit<GroupProps, 'classNames' | 'styles' | 'vars' | 'children'>,\n CompoundStylesApiProps<HeaderRightFactory> {\n children: ReactNode;\n}\n\nexport type HeaderRightFactory = Factory<{\n props: HeaderRightProps;\n ref: HTMLDivElement;\n stylesNames: HeaderRightStyleNames;\n compound: true;\n}>;\n\nconst defaultProps: Partial<HeaderRightProps> = {\n gap: 'sm',\n};\n\nexport const HeaderRight = factory<HeaderRightFactory>((_props, ref) => {\n const props = useProps('HeaderRight', defaultProps, _props);\n const {gap, className, classNames, styles, style, children, vars, ...others} = props;\n const ctx = useHeaderContext();\n\n return (\n <Group\n ref={ref}\n gap={gap}\n {...ctx.getStyles('right', {className, style, classNames, styles, props})}\n {...others}\n >\n {children}\n </Group>\n );\n});\n\nHeaderRight.displayName = 'Header.Right';\n"],"names":["HeaderRight","defaultProps","gap","factory","_props","ref","props","useProps","className","classNames","styles","style","children","vars","others","ctx","useHeaderContext","Group","getStyles","displayName"],"mappings":";;;;+BAwBaA;;;eAAAA;;;;;;;oBAxBuE;6BAErD;AAkB/B,IAAMC,eAA0C;IAC5CC,KAAK;AACT;AAEO,IAAMF,cAAcG,IAAAA,aAAO,EAAqB,SAACC,QAAQC;IAC5D,IAAMC,QAAQC,IAAAA,cAAQ,EAAC,eAAeN,cAAcG;IACpD,IAAOF,MAAwEI,MAAxEJ,KAAKM,YAAmEF,MAAnEE,WAAWC,aAAwDH,MAAxDG,YAAYC,SAA4CJ,MAA5CI,QAAQC,QAAoCL,MAApCK,OAAOC,WAA6BN,MAA7BM,UAAUC,OAAmBP,MAAnBO,MAASC,sCAAUR;;;;;;;;;IAC/E,IAAMS,MAAMC,IAAAA,+BAAgB;IAE5B,qBACI,qBAACC,WAAK;QACFZ,KAAKA;QACLH,KAAKA;OACDa,IAAIG,SAAS,CAAC,SAAS;QAACV,WAAAA;QAAWG,OAAAA;QAAOF,YAAAA;QAAYC,QAAAA;QAAQJ,OAAAA;IAAK,IACnEQ;kBAEHF;;AAGb;AAEAZ,YAAYmB,WAAW,GAAG"}
1
+ {"version":3,"sources":["../../../../../src/components/Header/HeaderRight/HeaderRight.tsx"],"sourcesContent":["import {CompoundStylesApiProps, Factory, Group, GroupProps, factory, useProps} from '@mantine/core';\nimport {ReactNode} from 'react';\nimport {useHeaderContext} from '../Header.context.js';\n\nexport type HeaderRightStyleNames = 'right';\n\nexport interface HeaderRightProps\n extends\n Omit<GroupProps, 'classNames' | 'styles' | 'vars' | 'children'>,\n CompoundStylesApiProps<HeaderRightFactory> {\n children: ReactNode;\n}\n\nexport type HeaderRightFactory = Factory<{\n props: HeaderRightProps;\n ref: HTMLDivElement;\n stylesNames: HeaderRightStyleNames;\n compound: true;\n}>;\n\nconst defaultProps: Partial<HeaderRightProps> = {\n gap: 'xs',\n};\n\nexport const HeaderRight = factory<HeaderRightFactory>((_props, ref) => {\n const props = useProps('HeaderRight', defaultProps, _props);\n const {gap, className, classNames, styles, style, children, vars, ...others} = props;\n const ctx = useHeaderContext();\n\n return (\n <Group\n ref={ref}\n gap={gap}\n {...ctx.getStyles('right', {className, style, classNames, styles, props})}\n {...others}\n >\n {children}\n </Group>\n );\n});\n\nHeaderRight.displayName = 'Header.Right';\n"],"names":["HeaderRight","defaultProps","gap","factory","_props","ref","props","useProps","className","classNames","styles","style","children","vars","others","ctx","useHeaderContext","Group","getStyles","displayName"],"mappings":";;;;+BAwBaA;;;eAAAA;;;;;;;oBAxBuE;6BAErD;AAkB/B,IAAMC,eAA0C;IAC5CC,KAAK;AACT;AAEO,IAAMF,cAAcG,IAAAA,aAAO,EAAqB,SAACC,QAAQC;IAC5D,IAAMC,QAAQC,IAAAA,cAAQ,EAAC,eAAeN,cAAcG;IACpD,IAAOF,MAAwEI,MAAxEJ,KAAKM,YAAmEF,MAAnEE,WAAWC,aAAwDH,MAAxDG,YAAYC,SAA4CJ,MAA5CI,QAAQC,QAAoCL,MAApCK,OAAOC,WAA6BN,MAA7BM,UAAUC,OAAmBP,MAAnBO,MAASC,sCAAUR;;;;;;;;;IAC/E,IAAMS,MAAMC,IAAAA,+BAAgB;IAE5B,qBACI,qBAACC,WAAK;QACFZ,KAAKA;QACLH,KAAKA;OACDa,IAAIG,SAAS,CAAC,SAAS;QAACV,WAAAA;QAAWG,OAAAA;QAAOF,YAAAA;QAAYC,QAAAA;QAAQJ,OAAAA;IAAK,IACnEQ;kBAEHF;;AAGb;AAEAZ,YAAYmB,WAAW,GAAG"}
@@ -0,0 +1,16 @@
1
+ import type { TableState } from './use-table.js';
2
+ type ColumnVisibility = TableState['columnVisibility'];
3
+ /**
4
+ * Hook that persists column visibility preferences to localStorage.
5
+ *
6
+ * @param defaultVisibleColumns - The default visibility map. Its keys define the set of valid column IDs.
7
+ * Must be a stable reference (e.g. via `useRef`) to avoid re-reading localStorage on every render.
8
+ * @param maxSelectableColumns - Maximum number of columns that can be visible at the same time.
9
+ * @param tableId - Unique identifier for the table. When omitted, no persistence occurs.
10
+ */
11
+ export declare const usePersistedColumnVisibility: (defaultVisibleColumns: ColumnVisibility, maxSelectableColumns: number, tableId?: string) => {
12
+ initialColumnVisibility: Record<string, boolean>;
13
+ persistColumnVisibility: (visibility: ColumnVisibility) => void;
14
+ };
15
+ export {};
16
+ //# sourceMappingURL=use-persisted-column-visibility.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-persisted-column-visibility.d.ts","sourceRoot":"","sources":["../../../../src/components/Table/use-persisted-column-visibility.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAE/C,KAAK,gBAAgB,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;AAgCvD;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,GACrC,uBAAuB,gBAAgB,EACvC,sBAAsB,MAAM,EAC5B,UAAU,MAAM;;0CAqBC,gBAAgB;CAUpC,CAAC"}
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "usePersistedColumnVisibility", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return usePersistedColumnVisibility;
9
+ }
10
+ });
11
+ var _object_spread = require("@swc/helpers/_/_object_spread");
12
+ var _sliced_to_array = require("@swc/helpers/_/_sliced_to_array");
13
+ var _to_consumable_array = require("@swc/helpers/_/_to_consumable_array");
14
+ var _type_of = require("@swc/helpers/_/_type_of");
15
+ var _react = require("react");
16
+ var _localstorage = require("../../utils/local-storage.js");
17
+ var storagePath = function storagePath(tableId) {
18
+ return [
19
+ 'table',
20
+ tableId,
21
+ 'columnVisibility'
22
+ ];
23
+ };
24
+ var capVisibleColumns = function capVisibleColumns(visibility, max) {
25
+ var visibleCount = 0;
26
+ var result = {};
27
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
28
+ try {
29
+ for(var _iterator = Object.entries(visibility)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
30
+ var _step_value = _sliced_to_array._(_step.value, 2), key = _step_value[0], isVisible = _step_value[1];
31
+ var shouldShow = isVisible && visibleCount < max;
32
+ result[key] = shouldShow;
33
+ if (shouldShow) {
34
+ visibleCount++;
35
+ }
36
+ }
37
+ } catch (err) {
38
+ _didIteratorError = true;
39
+ _iteratorError = err;
40
+ } finally{
41
+ try {
42
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
43
+ _iterator.return();
44
+ }
45
+ } finally{
46
+ if (_didIteratorError) {
47
+ throw _iteratorError;
48
+ }
49
+ }
50
+ }
51
+ return result;
52
+ };
53
+ var sanitizeFromStorage = function sanitizeFromStorage(raw, validColumnIds) {
54
+ var result = {};
55
+ if ((typeof raw === "undefined" ? "undefined" : _type_of._(raw)) !== 'object' || raw === null || Array.isArray(raw)) {
56
+ return result;
57
+ }
58
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
59
+ try {
60
+ for(var _iterator = Object.entries(raw)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
61
+ var _step_value = _sliced_to_array._(_step.value, 2), key = _step_value[0], value = _step_value[1];
62
+ if (validColumnIds.has(key) && typeof value === 'boolean') {
63
+ result[key] = value;
64
+ }
65
+ }
66
+ } catch (err) {
67
+ _didIteratorError = true;
68
+ _iteratorError = err;
69
+ } finally{
70
+ try {
71
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
72
+ _iterator.return();
73
+ }
74
+ } finally{
75
+ if (_didIteratorError) {
76
+ throw _iteratorError;
77
+ }
78
+ }
79
+ }
80
+ return result;
81
+ };
82
+ var usePersistedColumnVisibility = function usePersistedColumnVisibility(defaultVisibleColumns, maxSelectableColumns, tableId) {
83
+ var path = tableId ? storagePath(tableId) : null;
84
+ var validIds = (0, _react.useMemo)(function() {
85
+ return new Set(Object.keys(defaultVisibleColumns));
86
+ }, [
87
+ defaultVisibleColumns
88
+ ]);
89
+ var hasValidIds = validIds.size > 0;
90
+ var initialColumnVisibility = (0, _react.useMemo)(function() {
91
+ if (!path || !hasValidIds) {
92
+ return defaultVisibleColumns;
93
+ }
94
+ var stored = (0, _localstorage.getStorageItem)(_to_consumable_array._(path));
95
+ if (stored !== null) {
96
+ var sanitized = sanitizeFromStorage(stored, validIds);
97
+ if (Object.keys(sanitized).length > 0) {
98
+ return capVisibleColumns(_object_spread._({}, defaultVisibleColumns, sanitized), maxSelectableColumns);
99
+ }
100
+ }
101
+ return capVisibleColumns(defaultVisibleColumns, maxSelectableColumns);
102
+ }, [
103
+ path,
104
+ validIds,
105
+ defaultVisibleColumns,
106
+ maxSelectableColumns
107
+ ]);
108
+ var persistColumnVisibility = (0, _react.useCallback)(function(visibility) {
109
+ if (!path || !hasValidIds) {
110
+ return;
111
+ }
112
+ (0, _localstorage.setStorageItem)(_to_consumable_array._(path), visibility);
113
+ }, [
114
+ path,
115
+ hasValidIds
116
+ ]);
117
+ return {
118
+ initialColumnVisibility: initialColumnVisibility,
119
+ persistColumnVisibility: persistColumnVisibility
120
+ };
121
+ };
122
+
123
+ //# sourceMappingURL=use-persisted-column-visibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/Table/use-persisted-column-visibility.ts"],"sourcesContent":["import {useCallback, useMemo} from 'react';\nimport {getStorageItem, setStorageItem} from '../../utils/local-storage.js';\nimport type {TableState} from './use-table.js';\n\ntype ColumnVisibility = TableState['columnVisibility'];\n\nconst storagePath = (tableId: string) => ['table', tableId, 'columnVisibility'] as const;\n\nconst capVisibleColumns = (visibility: ColumnVisibility, max: number): ColumnVisibility => {\n let visibleCount = 0;\n const result: ColumnVisibility = {};\n for (const [key, isVisible] of Object.entries(visibility)) {\n const shouldShow = isVisible && visibleCount < max;\n result[key] = shouldShow;\n if (shouldShow) {\n visibleCount++;\n }\n }\n return result;\n};\n\nconst sanitizeFromStorage = (raw: unknown, validColumnIds: Set<string>): ColumnVisibility => {\n const result: ColumnVisibility = {};\n\n if (typeof raw !== 'object' || raw === null || Array.isArray(raw)) {\n return result;\n }\n\n for (const [key, value] of Object.entries(raw as Record<string, unknown>)) {\n if (validColumnIds.has(key) && typeof value === 'boolean') {\n result[key] = value;\n }\n }\n return result;\n};\n\n/**\n * Hook that persists column visibility preferences to localStorage.\n *\n * @param defaultVisibleColumns - The default visibility map. Its keys define the set of valid column IDs.\n * Must be a stable reference (e.g. via `useRef`) to avoid re-reading localStorage on every render.\n * @param maxSelectableColumns - Maximum number of columns that can be visible at the same time.\n * @param tableId - Unique identifier for the table. When omitted, no persistence occurs.\n */\nexport const usePersistedColumnVisibility = (\n defaultVisibleColumns: ColumnVisibility,\n maxSelectableColumns: number,\n tableId?: string,\n) => {\n const path = tableId ? storagePath(tableId) : null;\n const validIds = useMemo(() => new Set(Object.keys(defaultVisibleColumns)), [defaultVisibleColumns]);\n const hasValidIds = validIds.size > 0;\n\n const initialColumnVisibility = useMemo((): ColumnVisibility => {\n if (!path || !hasValidIds) {\n return defaultVisibleColumns;\n }\n const stored = getStorageItem<unknown>([...path]);\n if (stored !== null) {\n const sanitized = sanitizeFromStorage(stored, validIds);\n if (Object.keys(sanitized).length > 0) {\n return capVisibleColumns({...defaultVisibleColumns, ...sanitized}, maxSelectableColumns);\n }\n }\n return capVisibleColumns(defaultVisibleColumns, maxSelectableColumns);\n }, [path, validIds, defaultVisibleColumns, maxSelectableColumns]);\n\n const persistColumnVisibility = useCallback(\n (visibility: ColumnVisibility) => {\n if (!path || !hasValidIds) {\n return;\n }\n setStorageItem([...path], visibility);\n },\n [path, hasValidIds],\n );\n\n return {initialColumnVisibility, persistColumnVisibility};\n};\n"],"names":["usePersistedColumnVisibility","storagePath","tableId","capVisibleColumns","visibility","max","visibleCount","result","Object","entries","key","isVisible","shouldShow","sanitizeFromStorage","raw","validColumnIds","Array","isArray","value","has","defaultVisibleColumns","maxSelectableColumns","path","validIds","useMemo","Set","keys","hasValidIds","size","initialColumnVisibility","stored","getStorageItem","sanitized","length","persistColumnVisibility","useCallback","setStorageItem"],"mappings":";;;;+BA4CaA;;;eAAAA;;;;;;;qBA5CsB;4BACU;AAK7C,IAAMC,cAAc,qBAACC;WAAoB;QAAC;QAASA;QAAS;KAAmB;;AAE/E,IAAMC,oBAAoB,2BAACC,YAA8BC;IACrD,IAAIC,eAAe;IACnB,IAAMC,SAA2B,CAAC;QAC7B,kCAAA,2BAAA;;QAAL,QAAK,YAA0BC,OAAOC,OAAO,CAACL,gCAAzC,SAAA,6BAAA,QAAA,yBAAA,iCAAsD;YAAtD,qCAAA,iBAAOM,sBAAKC;YACb,IAAMC,aAAaD,aAAaL,eAAeD;YAC/CE,MAAM,CAACG,IAAI,GAAGE;YACd,IAAIA,YAAY;gBACZN;YACJ;QACJ;;QANK;QAAA;;;iBAAA,6BAAA;gBAAA;;;gBAAA;sBAAA;;;;IAOL,OAAOC;AACX;AAEA,IAAMM,sBAAsB,6BAACC,KAAcC;IACvC,IAAMR,SAA2B,CAAC;IAElC,IAAI,CAAA,OAAOO,oCAAP,UAAU,CAAHA,IAAE,MAAM,YAAYA,QAAQ,QAAQE,MAAMC,OAAO,CAACH,MAAM;QAC/D,OAAOP;IACX;QAEK,kCAAA,2BAAA;;QAAL,QAAK,YAAsBC,OAAOC,OAAO,CAACK,yBAArC,SAAA,6BAAA,QAAA,yBAAA,iCAAsE;YAAtE,qCAAA,iBAAOJ,sBAAKQ;YACb,IAAIH,eAAeI,GAAG,CAACT,QAAQ,OAAOQ,UAAU,WAAW;gBACvDX,MAAM,CAACG,IAAI,GAAGQ;YAClB;QACJ;;QAJK;QAAA;;;iBAAA,6BAAA;gBAAA;;;gBAAA;sBAAA;;;;IAKL,OAAOX;AACX;AAUO,IAAMP,+BAA+B,sCACxCoB,uBACAC,sBACAnB;IAEA,IAAMoB,OAAOpB,UAAUD,YAAYC,WAAW;IAC9C,IAAMqB,WAAWC,IAAAA,cAAO,EAAC;eAAM,IAAIC,IAAIjB,OAAOkB,IAAI,CAACN;OAAyB;QAACA;KAAsB;IACnG,IAAMO,cAAcJ,SAASK,IAAI,GAAG;IAEpC,IAAMC,0BAA0BL,IAAAA,cAAO,EAAC;QACpC,IAAI,CAACF,QAAQ,CAACK,aAAa;YACvB,OAAOP;QACX;QACA,IAAMU,SAASC,IAAAA,4BAAc,EAAW,uBAAGT;QAC3C,IAAIQ,WAAW,MAAM;YACjB,IAAME,YAAYnB,oBAAoBiB,QAAQP;YAC9C,IAAIf,OAAOkB,IAAI,CAACM,WAAWC,MAAM,GAAG,GAAG;gBACnC,OAAO9B,kBAAkB,qBAAIiB,uBAA0BY,YAAYX;YACvE;QACJ;QACA,OAAOlB,kBAAkBiB,uBAAuBC;IACpD,GAAG;QAACC;QAAMC;QAAUH;QAAuBC;KAAqB;IAEhE,IAAMa,0BAA0BC,IAAAA,kBAAW,EACvC,SAAC/B;QACG,IAAI,CAACkB,QAAQ,CAACK,aAAa;YACvB;QACJ;QACAS,IAAAA,4BAAc,EAAE,uBAAGd,OAAOlB;IAC9B,GACA;QAACkB;QAAMK;KAAY;IAGvB,OAAO;QAACE,yBAAAA;QAAyBK,yBAAAA;IAAuB;AAC5D"}
@@ -182,6 +182,18 @@ export interface UseTableOptions<TData = unknown> {
182
182
  * @default false
183
183
  */
184
184
  syncWithUrl?: boolean;
185
+ /**
186
+ * Unique identifier for the table. When provided, column visibility preferences are persisted to localStorage.
187
+ */
188
+ tableId?: string;
189
+ /**
190
+ * Maximum number of columns that can be visible when restoring persisted visibility from localStorage.
191
+ * This only affects the initial column visibility resolved on mount when `tableId` is set.
192
+ * It does not enforce a runtime limit on `setColumnVisibility` — use `TableColumnsSelector` for UI enforcement.
193
+ *
194
+ * @default Infinity
195
+ */
196
+ maxSelectableColumns?: number;
185
197
  }
186
198
  export declare const useTable: <TData>(userOptions?: UseTableOptions<TData>) => TableStore<TData>;
187
199
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"use-table.d.ts","sourceRoot":"","sources":["../../../../src/components/Table/use-table.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-table.d.ts","sourceRoot":"","sources":["../../../../src/components/Table/use-table.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,7 @@ var _hooks = require("@mantine/hooks");
17
17
  var _lodashdefaultsdeep = /*#__PURE__*/ _interop_require_default._(require("lodash.defaultsdeep"));
18
18
  var _react = require("react");
19
19
  var _useurlsyncedstate = require("../../hooks/use-url-synced-state.js");
20
+ var _usepersistedcolumnvisibility = require("./use-persisted-column-visibility.js");
20
21
  var defaultOptions = {
21
22
  enableRowSelection: true,
22
23
  enableMultiRowSelection: false,
@@ -200,8 +201,11 @@ var COLUMN_VISIBILITY_SERIALIZATION = serialization({
200
201
  });
201
202
  var useTable = function useTable() {
202
203
  var userOptions = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
204
+ var _options_maxSelectableColumns;
203
205
  var options = (0, _lodashdefaultsdeep.default)({}, userOptions, defaultOptions);
204
- var initialState = (0, _lodashdefaultsdeep.default)({}, options.initialState, defaultState);
206
+ var _useState = _sliced_to_array._((0, _react.useState)(function() {
207
+ return (0, _lodashdefaultsdeep.default)({}, userOptions.initialState, defaultState);
208
+ }), 1), initialState = _useState[0];
205
209
  /**
206
210
  * The `useUrlSyncedState` hook defaults to synchronize, but the table wants to default to not synchronize,
207
211
  * so always pass the sync option as a resolved boolean value.
@@ -231,15 +235,26 @@ var useTable = function useTable() {
231
235
  initialState: initialState.dateRange,
232
236
  sync: sync
233
237
  })), 2), dateRange = _useUrlSyncedState5[0], setDateRange = _useUrlSyncedState5[1];
238
+ var _usePersistedColumnVisibility = (0, _usepersistedcolumnvisibility.usePersistedColumnVisibility)(initialState.columnVisibility, (_options_maxSelectableColumns = options.maxSelectableColumns) !== null && _options_maxSelectableColumns !== void 0 ? _options_maxSelectableColumns : Infinity, options.tableId), initialColumnVisibility = _usePersistedColumnVisibility.initialColumnVisibility, persistColumnVisibility = _usePersistedColumnVisibility.persistColumnVisibility;
234
239
  var _useUrlSyncedState6 = _sliced_to_array._((0, _useurlsyncedstate.useUrlSyncedState)(_object_spread_props._(_object_spread._({}, COLUMN_VISIBILITY_SERIALIZATION), {
235
- initialState: initialState.columnVisibility,
240
+ initialState: initialColumnVisibility,
236
241
  sync: sync
237
- })), 2), columnVisibility = _useUrlSyncedState6[0], setColumnVisibility = _useUrlSyncedState6[1];
242
+ })), 2), columnVisibility = _useUrlSyncedState6[0], _setColumnVisibility = _useUrlSyncedState6[1];
243
+ var setColumnVisibility = (0, _react.useCallback)(function(updater) {
244
+ _setColumnVisibility(function(old) {
245
+ var newVis = _instanceof._(updater, Function) ? updater(old) : updater;
246
+ persistColumnVisibility(newVis);
247
+ return newVis;
248
+ });
249
+ }, [
250
+ _setColumnVisibility,
251
+ persistColumnVisibility
252
+ ]);
238
253
  // unsynced
239
- var _useState = _sliced_to_array._((0, _react.useState)(initialState.totalEntries), 2), totalEntries = _useState[0], _setTotalEntries = _useState[1];
240
- var _useState1 = _sliced_to_array._((0, _react.useState)(initialState.totalEntries), 2), unfilteredTotalEntries = _useState1[0], setUnfilteredTotalEntries = _useState1[1];
241
- var _useState2 = _sliced_to_array._((0, _react.useState)(initialState.expanded), 2), expanded = _useState2[0], setExpanded = _useState2[1];
242
- var _useState3 = _sliced_to_array._((0, _react.useState)(initialState.rowSelection), 2), rowSelection = _useState3[0], setRowSelection = _useState3[1];
254
+ var _useState1 = _sliced_to_array._((0, _react.useState)(initialState.totalEntries), 2), totalEntries = _useState1[0], _setTotalEntries = _useState1[1];
255
+ var _useState2 = _sliced_to_array._((0, _react.useState)(initialState.totalEntries), 2), unfilteredTotalEntries = _useState2[0], setUnfilteredTotalEntries = _useState2[1];
256
+ var _useState3 = _sliced_to_array._((0, _react.useState)(initialState.expanded), 2), expanded = _useState3[0], setExpanded = _useState3[1];
257
+ var _useState4 = _sliced_to_array._((0, _react.useState)(initialState.rowSelection), 2), rowSelection = _useState4[0], setRowSelection = _useState4[1];
243
258
  var isFiltered = !!globalFilter || Object.keys(predicates).some(function(predicate) {
244
259
  return !!predicates[predicate];
245
260
  }) || !!(dateRange === null || dateRange === void 0 ? void 0 : dateRange[0]) || !!(dateRange === null || dateRange === void 0 ? void 0 : dateRange[1]);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Table/use-table.ts"],"sourcesContent":["import type {DatesRangeValue, DateStringValue} from '@mantine/dates';\nimport {useDidUpdate} from '@mantine/hooks';\nimport {type ExpandedState, type PaginationState, type SortingState} from '@tanstack/table-core';\nimport defaultsDeep from 'lodash.defaultsdeep';\nimport {Dispatch, SetStateAction, useCallback, useMemo, useState} from 'react';\nimport {useUrlSyncedState, UseUrlSyncedStateOptions} from '../../hooks/use-url-synced-state.js';\n\n// Create a deeply optional version of another type\ntype DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];\n};\n\nexport interface TableState<TData = unknown> {\n /**\n * Current pagination state\n *\n * @default { pageIndex: 0, pageSize: 50 }\n */\n pagination: PaginationState;\n /**\n * Total number of entries in the table.\n * This number is used to calculate the number of pages in the pagination.\n * When null, the number of pages is calculated using the current data length.\n *\n * @default null\n */\n totalEntries: number | null;\n /**\n * Current sorting state\n *\n * @default []\n */\n sorting: SortingState;\n /**\n * Current global filter value\n *\n * @default ''\n */\n globalFilter: string;\n\n /**\n * Current expanded state\n *\n * @default {}\n */\n expanded: ExpandedState;\n /**\n * Predicates and their current value\n *\n * @default {}\n */\n predicates: Record<string, string>;\n /**\n * Layout currently selected. When null, the first layout is used.\n *\n * @default null\n */\n layout: string | null;\n /**\n * Currently selected date range\n *\n * @default [null, null]\n */\n dateRange: DatesRangeValue<DateStringValue | null>;\n /**\n * Currently selected rows\n *\n * @default {}\n */\n rowSelection: Record<string, TData>;\n /**\n * Columns that are currently visible\n *\n * @default {}\n */\n columnVisibility: Record<string, boolean>;\n}\n\nexport interface TableStore<TData = unknown> {\n /**\n * Current state of the table.\n */\n state: TableState<TData>;\n /**\n * Allows to change the pagination state.\n */\n setPagination: Dispatch<SetStateAction<TableState<TData>['pagination']>>;\n /**\n * Allows to change the total number of entries.\n */\n setTotalEntries: Dispatch<SetStateAction<TableState<TData>['totalEntries']>>;\n /**\n * Allows to change the sorting state.\n */\n setSorting: Dispatch<SetStateAction<TableState<TData>['sorting']>>;\n /**\n * Allows to change the global filter value.\n */\n setGlobalFilter: Dispatch<SetStateAction<TableState<TData>['globalFilter']>>;\n /**\n * Allows to change the rows expanded state.\n */\n setExpanded: Dispatch<SetStateAction<TableState<TData>['expanded']>>;\n /**\n * Allows to change the predicates values.\n */\n setPredicates: Dispatch<SetStateAction<TableState<TData>['predicates']>>;\n /**\n * Allows to change the selected layout.\n */\n setLayout: Dispatch<SetStateAction<TableState<TData>['layout']>>;\n /**\n * Allows to change the selected date range.\n */\n setDateRange: Dispatch<SetStateAction<TableState<TData>['dateRange']>>;\n /**\n * Allows to change the current row selection.\n */\n setRowSelection: Dispatch<SetStateAction<TableState<TData>['rowSelection']>>;\n /**\n * Allows to change the visible columns.\n */\n setColumnVisibility: Dispatch<SetStateAction<TableState<TData>['columnVisibility']>>;\n /**\n * Whether the table is currently filtered.\n */\n isFiltered: boolean;\n /**\n * Whether the table has data when unfiltered.\n *\n * This is derived from the totalEntries so make sure you set that number correctly, even if you're using a client side table.\n */\n isVacant: boolean;\n /**\n * Clear currently applied filters.\n */\n clearFilters: () => void;\n /**\n * Deselects all currently selected rows.\n */\n clearRowSelection: () => void;\n /**\n * Get currently selected rows.\n */\n getSelectedRows: () => TData[];\n /**\n * Get currently selected row\n */\n getSelectedRow: () => TData | null;\n /**\n * Whether the user can select multiple rows at the same time.\n */\n multiRowSelectionEnabled: boolean;\n /**\n * Whether rows can be selected.\n */\n rowSelectionEnabled: boolean;\n /**\n * Whether row selection is forced.\n */\n rowSelectionForced: boolean;\n}\n\nexport interface UseTableOptions<TData = unknown> {\n /**\n * Initial state of the table.\n */\n initialState?: DeepPartial<TableState<TData>>;\n /**\n * Whether rows can be selected.\n *\n * @default true\n */\n enableRowSelection?: boolean;\n /**\n * Whether multiple rows can be selected at the same time.\n *\n * @default false\n */\n enableMultiRowSelection?: boolean;\n /**\n * Forces the user to always have one row selected.\n * When activating that setting, a good practice is to have a row already selected in the initial state.\n *\n * @default false\n */\n forceSelection?: boolean;\n /**\n * Whether to sync the table state with the URL.\n *\n * @default false\n */\n syncWithUrl?: boolean;\n}\n\nconst defaultOptions: UseTableOptions = {\n enableRowSelection: true,\n enableMultiRowSelection: false,\n forceSelection: false,\n syncWithUrl: false,\n};\n\nconst defaultState: Partial<TableState> = {\n pagination: {\n pageIndex: 0,\n pageSize: 50,\n },\n totalEntries: null,\n sorting: [],\n globalFilter: '',\n predicates: {},\n layout: null,\n dateRange: [null, null],\n rowSelection: {},\n columnVisibility: {},\n};\n\nconst serialization = <K extends keyof TableState>(\n input: Pick<UseUrlSyncedStateOptions<TableState[K]>, 'serializer' | 'deserializer'>,\n) => Object.freeze(input);\n\nconst PAGINATION_SERIALIZATION = serialization<'pagination'>({\n serializer: ({pageIndex, pageSize}) => [\n ['page', (pageIndex + 1).toString()],\n ['pageSize', pageSize.toString()],\n ],\n deserializer: (params, initialState) =>\n defaultsDeep(\n {\n pageIndex: params.get('page') ? Math.max(1, parseInt(params.get('page'), 10)) - 1 : undefined,\n pageSize: params.get('pageSize') ? parseInt(params.get('pageSize'), 10) : undefined,\n },\n initialState,\n ),\n});\n\nconst SORTING_SERIALIZATION = serialization<'sorting'>({\n serializer: (sorting) => [['sortBy', sorting.map(({id, desc}) => `${id}.${desc ? 'desc' : 'asc'}`).join(',')]],\n deserializer: (params, initialState) => {\n if (!params.has('sortBy')) {\n return initialState;\n }\n const sorts = params.get('sortBy')?.split(',') ?? [];\n return sorts.map((sort) => {\n const [id, order] = sort.split('.');\n return {id, desc: order === 'desc'};\n });\n },\n});\n\nconst GLOBAL_FILTER_SERIALIZATION = serialization<'globalFilter'>({\n serializer: (filter) => [['filter', filter]],\n deserializer: (params, initialState) => params.get('filter') ?? initialState,\n});\n\nconst PREDICATES_SERIALIZATION = serialization<'predicates'>({\n serializer: (predicates) => Object.entries(predicates),\n deserializer: (params, initialState) =>\n Object.keys(initialState).reduce(\n (acc, predicateKey) => {\n acc[predicateKey] = params.get(predicateKey) ?? initialState[predicateKey];\n return acc;\n },\n {} as TableState['predicates'],\n ),\n});\n\nconst LAYOUT_SERIALIZATION = serialization<'layout'>({\n serializer: (_layout) => [['layout', _layout]],\n deserializer: (params, initialState) => params.get('layout') ?? initialState,\n});\n\nconst DATE_RANGE_SERIALIZATION = serialization<'dateRange'>({\n serializer: ([from, to]) => [\n ['from', from ? new Date(from).toISOString() : '', true],\n ['to', to ? new Date(to).toISOString() : '', true],\n ],\n deserializer: (params, initial) => [\n params.get('from') ? params.get('from') : initial[0],\n params.get('to') ? params.get('to') : initial[1],\n ],\n});\n\nconst COLUMN_VISIBILITY_SERIALIZATION = serialization<'columnVisibility'>({\n serializer: (columns) => [\n [\n 'show',\n Object.entries(columns)\n .filter(([, visible]) => visible === true)\n .map(([columnName]) => columnName)\n .join(','),\n ],\n [\n 'hide',\n Object.entries(columns)\n .filter(([, visible]) => visible === false)\n .map(([columnName]) => columnName)\n .join(','),\n ],\n ],\n deserializer: (params, initial) => {\n if (!params.has('show') && !params.has('hide')) {\n return initial;\n }\n const visible = params.get('show')?.split(',') ?? [];\n const invisible = params.get('hide')?.split(',') ?? [];\n const columns = {} as TableState['columnVisibility'];\n visible.forEach((column) => {\n columns[column] = true;\n });\n invisible.forEach((column) => {\n columns[column] = false;\n });\n return columns;\n },\n});\n\nexport const useTable = <TData>(userOptions: UseTableOptions<TData> = {}): TableStore<TData> => {\n const options = defaultsDeep({}, userOptions, defaultOptions) as UseTableOptions<TData>;\n const initialState = defaultsDeep({}, options.initialState, defaultState) as TableState<TData>;\n /**\n * The `useUrlSyncedState` hook defaults to synchronize, but the table wants to default to not synchronize,\n * so always pass the sync option as a resolved boolean value.\n */\n const sync = !!options.syncWithUrl;\n\n // (Optionally) synced with url\n const [pagination, setPagination] = useUrlSyncedState<TableState<TData>['pagination']>({\n ...PAGINATION_SERIALIZATION,\n initialState: initialState.pagination,\n sync,\n });\n const [sorting, setSorting] = useUrlSyncedState<TableState<TData>['sorting']>({\n ...SORTING_SERIALIZATION,\n initialState: initialState.sorting,\n sync,\n });\n const [globalFilter, setGlobalFilter] = useUrlSyncedState<TableState<TData>['globalFilter']>({\n ...GLOBAL_FILTER_SERIALIZATION,\n initialState: initialState.globalFilter,\n sync,\n });\n const [predicates, setPredicates] = useUrlSyncedState<TableState<TData>['predicates']>({\n ...PREDICATES_SERIALIZATION,\n initialState: initialState.predicates,\n sync,\n });\n const [layout, setLayout] = useUrlSyncedState<TableState<TData>['layout']>({\n ...LAYOUT_SERIALIZATION,\n initialState: initialState.layout,\n sync,\n });\n const [dateRange, setDateRange] = useUrlSyncedState<TableState<TData>['dateRange']>({\n ...DATE_RANGE_SERIALIZATION,\n initialState: initialState.dateRange,\n sync,\n });\n const [columnVisibility, setColumnVisibility] = useUrlSyncedState<TableState<TData>['columnVisibility']>({\n ...COLUMN_VISIBILITY_SERIALIZATION,\n initialState: initialState.columnVisibility,\n sync,\n });\n\n // unsynced\n const [totalEntries, _setTotalEntries] = useState<TableState<TData>['totalEntries']>(initialState.totalEntries);\n const [unfilteredTotalEntries, setUnfilteredTotalEntries] = useState<TableState<TData>['totalEntries']>(\n initialState.totalEntries,\n );\n const [expanded, setExpanded] = useState<TableState<TData>['expanded']>(initialState.expanded);\n const [rowSelection, setRowSelection] = useState<TableState<TData>['rowSelection']>(initialState.rowSelection);\n\n const isFiltered =\n !!globalFilter ||\n Object.keys(predicates).some((predicate) => !!predicates[predicate]) ||\n !!dateRange?.[0] ||\n !!dateRange?.[1];\n\n const isVacant = unfilteredTotalEntries === 0;\n\n const setTotalEntries: typeof _setTotalEntries = useCallback(\n (updater) => {\n _setTotalEntries((old) => {\n const newTotalEntries = updater instanceof Function ? updater(old) : updater;\n if (!isFiltered) {\n setUnfilteredTotalEntries(newTotalEntries);\n }\n return newTotalEntries;\n });\n },\n [isFiltered],\n );\n\n const clearFilters = useCallback(() => {\n setPredicates(initialState.predicates);\n setGlobalFilter('');\n }, []);\n\n const clearRowSelection = useCallback(() => {\n setRowSelection({});\n }, []);\n\n const getSelectedRows = useCallback(() => Object.values(rowSelection), [rowSelection]);\n\n const getSelectedRow = () => getSelectedRows()[0] ?? null;\n\n useDidUpdate(() => {\n if (!options.enableMultiRowSelection) {\n clearRowSelection();\n }\n }, [globalFilter, pagination, sorting, dateRange, predicates]);\n\n const state = useMemo(\n () => ({\n pagination,\n totalEntries,\n sorting,\n globalFilter,\n expanded,\n predicates,\n layout,\n dateRange,\n rowSelection,\n columnVisibility,\n }),\n [\n pagination,\n totalEntries,\n sorting,\n globalFilter,\n expanded,\n predicates,\n layout,\n dateRange,\n rowSelection,\n columnVisibility,\n ],\n );\n\n return {\n state,\n setPagination,\n setTotalEntries,\n setSorting,\n setGlobalFilter,\n setExpanded,\n setPredicates,\n setLayout,\n setDateRange,\n setRowSelection,\n setColumnVisibility,\n isFiltered,\n isVacant,\n clearFilters,\n clearRowSelection,\n getSelectedRows,\n getSelectedRow,\n rowSelectionEnabled: options.enableRowSelection,\n rowSelectionForced: options.forceSelection,\n multiRowSelectionEnabled: options.enableMultiRowSelection,\n };\n};\n"],"names":["useTable","defaultOptions","enableRowSelection","enableMultiRowSelection","forceSelection","syncWithUrl","defaultState","pagination","pageIndex","pageSize","totalEntries","sorting","globalFilter","predicates","layout","dateRange","rowSelection","columnVisibility","serialization","input","Object","freeze","PAGINATION_SERIALIZATION","serializer","toString","deserializer","params","initialState","defaultsDeep","get","Math","max","parseInt","undefined","SORTING_SERIALIZATION","map","id","desc","join","has","sorts","split","sort","order","GLOBAL_FILTER_SERIALIZATION","filter","PREDICATES_SERIALIZATION","entries","keys","reduce","acc","predicateKey","LAYOUT_SERIALIZATION","_layout","DATE_RANGE_SERIALIZATION","from","to","Date","toISOString","initial","COLUMN_VISIBILITY_SERIALIZATION","columns","visible","columnName","invisible","forEach","column","userOptions","options","sync","useUrlSyncedState","setPagination","setSorting","setGlobalFilter","setPredicates","setLayout","setDateRange","setColumnVisibility","useState","_setTotalEntries","unfilteredTotalEntries","setUnfilteredTotalEntries","expanded","setExpanded","setRowSelection","isFiltered","some","predicate","isVacant","setTotalEntries","useCallback","updater","old","newTotalEntries","Function","clearFilters","clearRowSelection","getSelectedRows","values","getSelectedRow","useDidUpdate","state","useMemo","rowSelectionEnabled","rowSelectionForced","multiRowSelectionEnabled"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/Table/use-table.ts"],"sourcesContent":["import type {DatesRangeValue, DateStringValue} from '@mantine/dates';\nimport {useDidUpdate} from '@mantine/hooks';\nimport {type ExpandedState, type PaginationState, type SortingState} from '@tanstack/table-core';\nimport defaultsDeep from 'lodash.defaultsdeep';\nimport {Dispatch, SetStateAction, useCallback, useMemo, useState} from 'react';\nimport {useUrlSyncedState, UseUrlSyncedStateOptions} from '../../hooks/use-url-synced-state.js';\nimport {usePersistedColumnVisibility} from './use-persisted-column-visibility.js';\n\n// Create a deeply optional version of another type\ntype DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];\n};\n\nexport interface TableState<TData = unknown> {\n /**\n * Current pagination state\n *\n * @default { pageIndex: 0, pageSize: 50 }\n */\n pagination: PaginationState;\n /**\n * Total number of entries in the table.\n * This number is used to calculate the number of pages in the pagination.\n * When null, the number of pages is calculated using the current data length.\n *\n * @default null\n */\n totalEntries: number | null;\n /**\n * Current sorting state\n *\n * @default []\n */\n sorting: SortingState;\n /**\n * Current global filter value\n *\n * @default ''\n */\n globalFilter: string;\n\n /**\n * Current expanded state\n *\n * @default {}\n */\n expanded: ExpandedState;\n /**\n * Predicates and their current value\n *\n * @default {}\n */\n predicates: Record<string, string>;\n /**\n * Layout currently selected. When null, the first layout is used.\n *\n * @default null\n */\n layout: string | null;\n /**\n * Currently selected date range\n *\n * @default [null, null]\n */\n dateRange: DatesRangeValue<DateStringValue | null>;\n /**\n * Currently selected rows\n *\n * @default {}\n */\n rowSelection: Record<string, TData>;\n /**\n * Columns that are currently visible\n *\n * @default {}\n */\n columnVisibility: Record<string, boolean>;\n}\n\nexport interface TableStore<TData = unknown> {\n /**\n * Current state of the table.\n */\n state: TableState<TData>;\n /**\n * Allows to change the pagination state.\n */\n setPagination: Dispatch<SetStateAction<TableState<TData>['pagination']>>;\n /**\n * Allows to change the total number of entries.\n */\n setTotalEntries: Dispatch<SetStateAction<TableState<TData>['totalEntries']>>;\n /**\n * Allows to change the sorting state.\n */\n setSorting: Dispatch<SetStateAction<TableState<TData>['sorting']>>;\n /**\n * Allows to change the global filter value.\n */\n setGlobalFilter: Dispatch<SetStateAction<TableState<TData>['globalFilter']>>;\n /**\n * Allows to change the rows expanded state.\n */\n setExpanded: Dispatch<SetStateAction<TableState<TData>['expanded']>>;\n /**\n * Allows to change the predicates values.\n */\n setPredicates: Dispatch<SetStateAction<TableState<TData>['predicates']>>;\n /**\n * Allows to change the selected layout.\n */\n setLayout: Dispatch<SetStateAction<TableState<TData>['layout']>>;\n /**\n * Allows to change the selected date range.\n */\n setDateRange: Dispatch<SetStateAction<TableState<TData>['dateRange']>>;\n /**\n * Allows to change the current row selection.\n */\n setRowSelection: Dispatch<SetStateAction<TableState<TData>['rowSelection']>>;\n /**\n * Allows to change the visible columns.\n */\n setColumnVisibility: Dispatch<SetStateAction<TableState<TData>['columnVisibility']>>;\n /**\n * Whether the table is currently filtered.\n */\n isFiltered: boolean;\n /**\n * Whether the table has data when unfiltered.\n *\n * This is derived from the totalEntries so make sure you set that number correctly, even if you're using a client side table.\n */\n isVacant: boolean;\n /**\n * Clear currently applied filters.\n */\n clearFilters: () => void;\n /**\n * Deselects all currently selected rows.\n */\n clearRowSelection: () => void;\n /**\n * Get currently selected rows.\n */\n getSelectedRows: () => TData[];\n /**\n * Get currently selected row\n */\n getSelectedRow: () => TData | null;\n /**\n * Whether the user can select multiple rows at the same time.\n */\n multiRowSelectionEnabled: boolean;\n /**\n * Whether rows can be selected.\n */\n rowSelectionEnabled: boolean;\n /**\n * Whether row selection is forced.\n */\n rowSelectionForced: boolean;\n}\n\nexport interface UseTableOptions<TData = unknown> {\n /**\n * Initial state of the table.\n */\n initialState?: DeepPartial<TableState<TData>>;\n /**\n * Whether rows can be selected.\n *\n * @default true\n */\n enableRowSelection?: boolean;\n /**\n * Whether multiple rows can be selected at the same time.\n *\n * @default false\n */\n enableMultiRowSelection?: boolean;\n /**\n * Forces the user to always have one row selected.\n * When activating that setting, a good practice is to have a row already selected in the initial state.\n *\n * @default false\n */\n forceSelection?: boolean;\n /**\n * Whether to sync the table state with the URL.\n *\n * @default false\n */\n syncWithUrl?: boolean;\n /**\n * Unique identifier for the table. When provided, column visibility preferences are persisted to localStorage.\n */\n tableId?: string;\n /**\n * Maximum number of columns that can be visible when restoring persisted visibility from localStorage.\n * This only affects the initial column visibility resolved on mount when `tableId` is set.\n * It does not enforce a runtime limit on `setColumnVisibility` — use `TableColumnsSelector` for UI enforcement.\n *\n * @default Infinity\n */\n maxSelectableColumns?: number;\n}\n\nconst defaultOptions: UseTableOptions = {\n enableRowSelection: true,\n enableMultiRowSelection: false,\n forceSelection: false,\n syncWithUrl: false,\n};\n\nconst defaultState: Partial<TableState> = {\n pagination: {\n pageIndex: 0,\n pageSize: 50,\n },\n totalEntries: null,\n sorting: [],\n globalFilter: '',\n predicates: {},\n layout: null,\n dateRange: [null, null],\n rowSelection: {},\n columnVisibility: {},\n};\n\nconst serialization = <K extends keyof TableState>(\n input: Pick<UseUrlSyncedStateOptions<TableState[K]>, 'serializer' | 'deserializer'>,\n) => Object.freeze(input);\n\nconst PAGINATION_SERIALIZATION = serialization<'pagination'>({\n serializer: ({pageIndex, pageSize}) => [\n ['page', (pageIndex + 1).toString()],\n ['pageSize', pageSize.toString()],\n ],\n deserializer: (params, initialState) =>\n defaultsDeep(\n {\n pageIndex: params.get('page') ? Math.max(1, parseInt(params.get('page'), 10)) - 1 : undefined,\n pageSize: params.get('pageSize') ? parseInt(params.get('pageSize'), 10) : undefined,\n },\n initialState,\n ),\n});\n\nconst SORTING_SERIALIZATION = serialization<'sorting'>({\n serializer: (sorting) => [['sortBy', sorting.map(({id, desc}) => `${id}.${desc ? 'desc' : 'asc'}`).join(',')]],\n deserializer: (params, initialState) => {\n if (!params.has('sortBy')) {\n return initialState;\n }\n const sorts = params.get('sortBy')?.split(',') ?? [];\n return sorts.map((sort) => {\n const [id, order] = sort.split('.');\n return {id, desc: order === 'desc'};\n });\n },\n});\n\nconst GLOBAL_FILTER_SERIALIZATION = serialization<'globalFilter'>({\n serializer: (filter) => [['filter', filter]],\n deserializer: (params, initialState) => params.get('filter') ?? initialState,\n});\n\nconst PREDICATES_SERIALIZATION = serialization<'predicates'>({\n serializer: (predicates) => Object.entries(predicates),\n deserializer: (params, initialState) =>\n Object.keys(initialState).reduce(\n (acc, predicateKey) => {\n acc[predicateKey] = params.get(predicateKey) ?? initialState[predicateKey];\n return acc;\n },\n {} as TableState['predicates'],\n ),\n});\n\nconst LAYOUT_SERIALIZATION = serialization<'layout'>({\n serializer: (_layout) => [['layout', _layout]],\n deserializer: (params, initialState) => params.get('layout') ?? initialState,\n});\n\nconst DATE_RANGE_SERIALIZATION = serialization<'dateRange'>({\n serializer: ([from, to]) => [\n ['from', from ? new Date(from).toISOString() : '', true],\n ['to', to ? new Date(to).toISOString() : '', true],\n ],\n deserializer: (params, initial) => [\n params.get('from') ? params.get('from') : initial[0],\n params.get('to') ? params.get('to') : initial[1],\n ],\n});\n\nconst COLUMN_VISIBILITY_SERIALIZATION = serialization<'columnVisibility'>({\n serializer: (columns) => [\n [\n 'show',\n Object.entries(columns)\n .filter(([, visible]) => visible === true)\n .map(([columnName]) => columnName)\n .join(','),\n ],\n [\n 'hide',\n Object.entries(columns)\n .filter(([, visible]) => visible === false)\n .map(([columnName]) => columnName)\n .join(','),\n ],\n ],\n deserializer: (params, initial) => {\n if (!params.has('show') && !params.has('hide')) {\n return initial;\n }\n const visible = params.get('show')?.split(',') ?? [];\n const invisible = params.get('hide')?.split(',') ?? [];\n const columns = {} as TableState['columnVisibility'];\n visible.forEach((column) => {\n columns[column] = true;\n });\n invisible.forEach((column) => {\n columns[column] = false;\n });\n return columns;\n },\n});\n\nexport const useTable = <TData>(userOptions: UseTableOptions<TData> = {}): TableStore<TData> => {\n const options = defaultsDeep({}, userOptions, defaultOptions) as UseTableOptions<TData>;\n const [initialState] = useState(\n () => defaultsDeep({}, userOptions.initialState, defaultState) as TableState<TData>,\n );\n /**\n * The `useUrlSyncedState` hook defaults to synchronize, but the table wants to default to not synchronize,\n * so always pass the sync option as a resolved boolean value.\n */\n const sync = !!options.syncWithUrl;\n\n // (Optionally) synced with url\n const [pagination, setPagination] = useUrlSyncedState<TableState<TData>['pagination']>({\n ...PAGINATION_SERIALIZATION,\n initialState: initialState.pagination,\n sync,\n });\n const [sorting, setSorting] = useUrlSyncedState<TableState<TData>['sorting']>({\n ...SORTING_SERIALIZATION,\n initialState: initialState.sorting,\n sync,\n });\n const [globalFilter, setGlobalFilter] = useUrlSyncedState<TableState<TData>['globalFilter']>({\n ...GLOBAL_FILTER_SERIALIZATION,\n initialState: initialState.globalFilter,\n sync,\n });\n const [predicates, setPredicates] = useUrlSyncedState<TableState<TData>['predicates']>({\n ...PREDICATES_SERIALIZATION,\n initialState: initialState.predicates,\n sync,\n });\n const [layout, setLayout] = useUrlSyncedState<TableState<TData>['layout']>({\n ...LAYOUT_SERIALIZATION,\n initialState: initialState.layout,\n sync,\n });\n const [dateRange, setDateRange] = useUrlSyncedState<TableState<TData>['dateRange']>({\n ...DATE_RANGE_SERIALIZATION,\n initialState: initialState.dateRange,\n sync,\n });\n\n const {initialColumnVisibility, persistColumnVisibility} = usePersistedColumnVisibility(\n initialState.columnVisibility,\n options.maxSelectableColumns ?? Infinity,\n options.tableId,\n );\n\n const [columnVisibility, _setColumnVisibility] = useUrlSyncedState<TableState<TData>['columnVisibility']>({\n ...COLUMN_VISIBILITY_SERIALIZATION,\n initialState: initialColumnVisibility,\n sync,\n });\n\n const setColumnVisibility: typeof _setColumnVisibility = useCallback(\n (updater) => {\n _setColumnVisibility((old) => {\n const newVis = updater instanceof Function ? updater(old) : updater;\n persistColumnVisibility(newVis);\n return newVis;\n });\n },\n [_setColumnVisibility, persistColumnVisibility],\n );\n\n // unsynced\n const [totalEntries, _setTotalEntries] = useState<TableState<TData>['totalEntries']>(initialState.totalEntries);\n const [unfilteredTotalEntries, setUnfilteredTotalEntries] = useState<TableState<TData>['totalEntries']>(\n initialState.totalEntries,\n );\n const [expanded, setExpanded] = useState<TableState<TData>['expanded']>(initialState.expanded);\n const [rowSelection, setRowSelection] = useState<TableState<TData>['rowSelection']>(initialState.rowSelection);\n\n const isFiltered =\n !!globalFilter ||\n Object.keys(predicates).some((predicate) => !!predicates[predicate]) ||\n !!dateRange?.[0] ||\n !!dateRange?.[1];\n\n const isVacant = unfilteredTotalEntries === 0;\n\n const setTotalEntries: typeof _setTotalEntries = useCallback(\n (updater) => {\n _setTotalEntries((old) => {\n const newTotalEntries = updater instanceof Function ? updater(old) : updater;\n if (!isFiltered) {\n setUnfilteredTotalEntries(newTotalEntries);\n }\n return newTotalEntries;\n });\n },\n [isFiltered],\n );\n\n const clearFilters = useCallback(() => {\n setPredicates(initialState.predicates);\n setGlobalFilter('');\n }, []);\n\n const clearRowSelection = useCallback(() => {\n setRowSelection({});\n }, []);\n\n const getSelectedRows = useCallback(() => Object.values(rowSelection), [rowSelection]);\n\n const getSelectedRow = () => getSelectedRows()[0] ?? null;\n\n useDidUpdate(() => {\n if (!options.enableMultiRowSelection) {\n clearRowSelection();\n }\n }, [globalFilter, pagination, sorting, dateRange, predicates]);\n\n const state = useMemo(\n () => ({\n pagination,\n totalEntries,\n sorting,\n globalFilter,\n expanded,\n predicates,\n layout,\n dateRange,\n rowSelection,\n columnVisibility,\n }),\n [\n pagination,\n totalEntries,\n sorting,\n globalFilter,\n expanded,\n predicates,\n layout,\n dateRange,\n rowSelection,\n columnVisibility,\n ],\n );\n\n return {\n state,\n setPagination,\n setTotalEntries,\n setSorting,\n setGlobalFilter,\n setExpanded,\n setPredicates,\n setLayout,\n setDateRange,\n setRowSelection,\n setColumnVisibility,\n isFiltered,\n isVacant,\n clearFilters,\n clearRowSelection,\n getSelectedRows,\n getSelectedRow,\n rowSelectionEnabled: options.enableRowSelection,\n rowSelectionForced: options.forceSelection,\n multiRowSelectionEnabled: options.enableMultiRowSelection,\n };\n};\n"],"names":["useTable","defaultOptions","enableRowSelection","enableMultiRowSelection","forceSelection","syncWithUrl","defaultState","pagination","pageIndex","pageSize","totalEntries","sorting","globalFilter","predicates","layout","dateRange","rowSelection","columnVisibility","serialization","input","Object","freeze","PAGINATION_SERIALIZATION","serializer","toString","deserializer","params","initialState","defaultsDeep","get","Math","max","parseInt","undefined","SORTING_SERIALIZATION","map","id","desc","join","has","sorts","split","sort","order","GLOBAL_FILTER_SERIALIZATION","filter","PREDICATES_SERIALIZATION","entries","keys","reduce","acc","predicateKey","LAYOUT_SERIALIZATION","_layout","DATE_RANGE_SERIALIZATION","from","to","Date","toISOString","initial","COLUMN_VISIBILITY_SERIALIZATION","columns","visible","columnName","invisible","forEach","column","userOptions","options","useState","sync","useUrlSyncedState","setPagination","setSorting","setGlobalFilter","setPredicates","setLayout","setDateRange","usePersistedColumnVisibility","maxSelectableColumns","Infinity","tableId","initialColumnVisibility","persistColumnVisibility","_setColumnVisibility","setColumnVisibility","useCallback","updater","old","newVis","Function","_setTotalEntries","unfilteredTotalEntries","setUnfilteredTotalEntries","expanded","setExpanded","setRowSelection","isFiltered","some","predicate","isVacant","setTotalEntries","newTotalEntries","clearFilters","clearRowSelection","getSelectedRows","values","getSelectedRow","useDidUpdate","state","useMemo","rowSelectionEnabled","rowSelectionForced","multiRowSelectionEnabled"],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Versioned localStorage utility for Plasma.
3
+ *
4
+ * All Plasma data is stored under a single `"plasma"` key with the shape:
5
+ * ```json
6
+ * {
7
+ * "storage-version": 1,
8
+ * "storage": {
9
+ * "table": {
10
+ * "my-table": { "columnVisibility": { ... } }
11
+ * }
12
+ * }
13
+ * }
14
+ * ```
15
+ */
16
+ export declare const STORAGE_KEY = "plasma";
17
+ export declare const CURRENT_STORAGE_VERSION = 1;
18
+ /**
19
+ * Read a value from the versioned Plasma storage at the given path.
20
+ *
21
+ * @param path - Path segments within `storage`, e.g. `['table', 'my-table', 'columnVisibility']`.
22
+ * @returns The stored value, or `null` if it doesn't exist or the storage is corrupted.
23
+ */
24
+ export declare const getStorageItem: <T = unknown>(path: string[]) => T | null;
25
+ /**
26
+ * Write a value to the versioned Plasma storage at the given path.
27
+ *
28
+ * @param path - Path segments within `storage`, e.g. `['table', 'my-table', 'columnVisibility']`.
29
+ * @param value - The value to store (must be JSON-serializable).
30
+ */
31
+ export declare const setStorageItem: <T = unknown>(path: string[], value: T) => void;
32
+ /**
33
+ * Remove a value from the versioned Plasma storage at the given path.
34
+ *
35
+ * @param path - Path segments within `storage`, e.g. `['table', 'my-table', 'columnVisibility']`.
36
+ */
37
+ export declare const removeStorageItem: (path: string[]) => void;
38
+ //# sourceMappingURL=local-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-storage.d.ts","sourceRoot":"","sources":["../../../src/utils/local-storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,eAAO,MAAM,WAAW,WAAW,CAAC;AACpC,eAAO,MAAM,uBAAuB,IAAI,CAAC;AA0EzC;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,GAAG,OAAO,EAAE,MAAM,MAAM,EAAE,KAAG,CAAC,GAAG,IAUhE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,GAAG,OAAO,EAAE,MAAM,MAAM,EAAE,EAAE,OAAO,CAAC,KAAG,IAatE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,EAAE,KAAG,IAelD,CAAC"}