@wheelhouse/ui 0.2.5 → 0.2.7

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 (73) hide show
  1. package/dist/blocks/columns/column-popover-panel-header.d.ts +10 -0
  2. package/dist/blocks/columns/column-popover-panel-header.d.ts.map +1 -0
  3. package/dist/blocks/columns/column-popover-panel-header.js +9 -0
  4. package/dist/blocks/columns/columns-add-view.d.ts +12 -0
  5. package/dist/blocks/columns/columns-add-view.d.ts.map +1 -0
  6. package/dist/blocks/columns/columns-add-view.js +34 -0
  7. package/dist/blocks/columns/columns-types.d.ts +26 -1
  8. package/dist/blocks/columns/columns-types.d.ts.map +1 -1
  9. package/dist/blocks/columns/columns-types.js +9 -2
  10. package/dist/blocks/columns/columns-utils.d.ts +7 -3
  11. package/dist/blocks/columns/columns-utils.d.ts.map +1 -1
  12. package/dist/blocks/columns/columns-utils.js +28 -6
  13. package/dist/blocks/columns/columns.d.ts.map +1 -1
  14. package/dist/blocks/columns/columns.js +106 -68
  15. package/dist/blocks/columns/columns.stories.d.ts +1 -0
  16. package/dist/blocks/columns/columns.stories.d.ts.map +1 -1
  17. package/dist/blocks/columns/columns.stories.js +19 -4
  18. package/dist/blocks/columns/index.d.ts +1 -1
  19. package/dist/blocks/columns/index.d.ts.map +1 -1
  20. package/dist/blocks/columns/index.js +1 -1
  21. package/dist/components/avatar/avatar.d.ts +3 -2
  22. package/dist/components/avatar/avatar.d.ts.map +1 -1
  23. package/dist/components/avatar/avatar.js +3 -2
  24. package/dist/components/avatar/avatar.stories.d.ts.map +1 -1
  25. package/dist/components/avatar/avatar.stories.js +7 -0
  26. package/dist/components/button/button.d.ts +3 -3
  27. package/dist/components/button/button.js +7 -7
  28. package/dist/components/button-group/button-group.js +2 -2
  29. package/dist/components/calendar/calendar.js +2 -2
  30. package/dist/components/data-grid/data-grid-column-filter.js +1 -1
  31. package/dist/components/field/field.d.ts +1 -1
  32. package/dist/components/field/field.d.ts.map +1 -1
  33. package/dist/components/filters/filter-date-metric-value.js +1 -1
  34. package/dist/components/filters/filters.d.ts.map +1 -1
  35. package/dist/components/filters/filters.js +3 -2
  36. package/dist/components/index.d.ts +2 -0
  37. package/dist/components/index.d.ts.map +1 -1
  38. package/dist/components/index.js +2 -0
  39. package/dist/components/input/input.d.ts +2 -2
  40. package/dist/components/input/input.d.ts.map +1 -1
  41. package/dist/components/input/input.js +4 -3
  42. package/dist/components/input/input.stories.d.ts +1 -1
  43. package/dist/components/input/input.stories.d.ts.map +1 -1
  44. package/dist/components/input/input.stories.js +1 -1
  45. package/dist/components/input-group/input-group.d.ts +1 -1
  46. package/dist/components/number-field/index.d.ts +2 -0
  47. package/dist/components/number-field/index.d.ts.map +1 -0
  48. package/dist/components/number-field/index.js +1 -0
  49. package/dist/components/number-field/number-field.d.ts +59 -0
  50. package/dist/components/number-field/number-field.d.ts.map +1 -0
  51. package/dist/components/number-field/number-field.js +49 -0
  52. package/dist/components/number-field/number-field.stories.d.ts +25 -0
  53. package/dist/components/number-field/number-field.stories.d.ts.map +1 -0
  54. package/dist/components/number-field/number-field.stories.js +225 -0
  55. package/dist/components/overlapping-stack/index.d.ts +3 -0
  56. package/dist/components/overlapping-stack/index.d.ts.map +1 -0
  57. package/dist/components/overlapping-stack/index.js +2 -0
  58. package/dist/components/overlapping-stack/overlapping-stack.d.ts +12 -0
  59. package/dist/components/overlapping-stack/overlapping-stack.d.ts.map +1 -0
  60. package/dist/components/overlapping-stack/overlapping-stack.js +45 -0
  61. package/dist/components/overlapping-stack/overlapping-stack.stories.d.ts +78 -0
  62. package/dist/components/overlapping-stack/overlapping-stack.stories.d.ts.map +1 -0
  63. package/dist/components/overlapping-stack/overlapping-stack.stories.js +120 -0
  64. package/dist/components/overlapping-stack/use-overlapping-stack.d.ts +47 -0
  65. package/dist/components/overlapping-stack/use-overlapping-stack.d.ts.map +1 -0
  66. package/dist/components/overlapping-stack/use-overlapping-stack.js +47 -0
  67. package/dist/components/sidebar/sidebar.js +1 -1
  68. package/dist/components/textarea/textarea.js +1 -1
  69. package/dist/components/toggle/toggle.d.ts +3 -3
  70. package/dist/components/toggle/toggle.js +4 -4
  71. package/dist/tsconfig.tsbuildinfo +1 -1
  72. package/package.json +6 -5
  73. package/src/styles/globals.css +6 -24
@@ -1,6 +1,6 @@
1
1
  export { Columns } from './columns';
2
2
  export type { ColumnDefinition, ColumnFieldGroup, ColumnsDateMetricOptions, ColumnsFieldsConfig, ColumnsI18n, ColumnsProps, SelectedColumn, } from './columns-types';
3
3
  export { DEFAULT_COLUMNS_I18N } from './columns-types';
4
- export { buildColumnMap, flattenColumns, formatColumnDateRangeSecondary, hasTopLevelColumnGroups, parseColumnSections } from './columns-utils';
4
+ export { buildColumnMap, columnAllowsMultipleInstances, flattenColumns, formatColumnDateRangeSecondary, getSelectedColumnRowKey, hasTopLevelColumnGroups, newSelectedColumn, parseColumnSections, } from './columns-utils';
5
5
  export type { ColumnsMenuSection } from './columns-utils';
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/blocks/columns/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EACR,gBAAgB,EAChB,gBAAgB,EAChB,wBAAwB,EACxB,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,cAAc,GACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,8BAA8B,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC/I,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/blocks/columns/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EACR,gBAAgB,EAChB,gBAAgB,EAChB,wBAAwB,EACxB,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,cAAc,GACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EACH,cAAc,EACd,6BAA6B,EAC7B,cAAc,EACd,8BAA8B,EAC9B,uBAAuB,EACvB,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,GACtB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -1,3 +1,3 @@
1
1
  export { Columns } from './columns';
2
2
  export { DEFAULT_COLUMNS_I18N } from './columns-types';
3
- export { buildColumnMap, flattenColumns, formatColumnDateRangeSecondary, hasTopLevelColumnGroups, parseColumnSections } from './columns-utils';
3
+ export { buildColumnMap, columnAllowsMultipleInstances, flattenColumns, formatColumnDateRangeSecondary, getSelectedColumnRowKey, hasTopLevelColumnGroups, newSelectedColumn, parseColumnSections, } from './columns-utils';
@@ -1,5 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { Avatar as AvatarPrimitive } from '@base-ui/react/avatar';
3
+ import { type OverlappingStackProps } from '../overlapping-stack';
3
4
  /**
4
5
  * Props for `Avatar`. Inherits additional behavior from
5
6
  * [Base UI Avatar](https://base-ui.com/react/components/avatar).
@@ -14,7 +15,7 @@ export type AvatarFallbackProps = AvatarPrimitive.Fallback.Props;
14
15
  /** Props for `AvatarBadge`. */
15
16
  export type AvatarBadgeProps = React.ComponentProps<'span'>;
16
17
  /** Props for `AvatarGroup`. */
17
- export type AvatarGroupProps = React.ComponentProps<'div'>;
18
+ export type AvatarGroupProps = OverlappingStackProps;
18
19
  /** Props for `AvatarGroupCount`. */
19
20
  export type AvatarGroupCountProps = React.ComponentProps<'div'>;
20
21
  declare function Avatar({ className, size, ...props }: AvatarPrimitive.Root.Props & {
@@ -23,7 +24,7 @@ declare function Avatar({ className, size, ...props }: AvatarPrimitive.Root.Prop
23
24
  declare function AvatarImage({ className, ...props }: AvatarPrimitive.Image.Props): import("react/jsx-runtime").JSX.Element;
24
25
  declare function AvatarFallback({ className, ...props }: AvatarPrimitive.Fallback.Props): import("react/jsx-runtime").JSX.Element;
25
26
  declare function AvatarBadge({ className, ...props }: React.ComponentProps<'span'>): import("react/jsx-runtime").JSX.Element;
26
- declare function AvatarGroup({ className, ...props }: React.ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
27
+ declare function AvatarGroup({ className, spreadOnHover, collapseThreshold, overlap, spread, ...props }: AvatarGroupProps): import("react/jsx-runtime").JSX.Element;
27
28
  declare function AvatarGroupCount({ className, ...props }: React.ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
28
29
  export { Avatar, AvatarImage, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarBadge };
29
30
  //# sourceMappingURL=avatar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"avatar.d.ts","sourceRoot":"","sources":["../../../src/components/avatar/avatar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAIlE;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,GAAG;IAAE,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI,CAAA;CAAE,CAAC;AAC1F,+BAA+B;AAC/B,MAAM,MAAM,gBAAgB,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC;AAC3D,kCAAkC;AAClC,MAAM,MAAM,mBAAmB,GAAG,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC;AACjE,+BAA+B;AAC/B,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AAC5D,+BAA+B;AAC/B,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAC3D,oCAAoC;AACpC,MAAM,MAAM,qBAAqB,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAEhE,iBAAS,MAAM,CAAC,EACZ,SAAS,EACT,IAAgB,EAChB,GAAG,KAAK,EACX,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,GAAG;IAC5B,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC;CAClC,2CAYA;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,CAAC,KAAK,CAAC,KAAK,2CAExE;AAED,iBAAS,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC,KAAK,2CAW9E;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,2CAczE;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAQxE;AAED,iBAAS,gBAAgB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAW7E;AAED,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"avatar.d.ts","sourceRoot":"","sources":["../../../src/components/avatar/avatar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGlE,OAAO,EAAoB,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAEpF;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,GAAG;IAAE,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI,CAAA;CAAE,CAAC;AAC1F,+BAA+B;AAC/B,MAAM,MAAM,gBAAgB,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC;AAC3D,kCAAkC;AAClC,MAAM,MAAM,mBAAmB,GAAG,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC;AACjE,+BAA+B;AAC/B,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AAC5D,+BAA+B;AAC/B,MAAM,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;AACrD,oCAAoC;AACpC,MAAM,MAAM,qBAAqB,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAEhE,iBAAS,MAAM,CAAC,EACZ,SAAS,EACT,IAAgB,EAChB,GAAG,KAAK,EACX,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,GAAG;IAC5B,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC;CAClC,2CAYA;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,CAAC,KAAK,CAAC,KAAK,2CAExE;AAED,iBAAS,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC,KAAK,2CAW9E;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,2CAczE;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,aAAoB,EAAE,iBAAqB,EAAE,OAAW,EAAE,MAAU,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,2CAYnI;AAED,iBAAS,gBAAgB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAW7E;AAED,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAC"}
@@ -3,6 +3,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import * as React from 'react';
4
4
  import { Avatar as AvatarPrimitive } from '@base-ui/react/avatar';
5
5
  import { cn } from '../../lib/utils';
6
+ import { OverlappingStack } from '../overlapping-stack';
6
7
  function Avatar({ className, size = 'default', ...props }) {
7
8
  return (_jsx(AvatarPrimitive.Root, { "data-slot": "avatar", "data-size": size, className: cn('group/avatar relative flex size-8 shrink-0 rounded-full select-none after:absolute after:inset-0 after:rounded-full after:border after:border-border after:mix-blend-darken data-[size=lg]:size-10 data-[size=sm]:size-6 dark:after:mix-blend-lighten', className), ...props }));
8
9
  }
@@ -15,8 +16,8 @@ function AvatarFallback({ className, ...props }) {
15
16
  function AvatarBadge({ className, ...props }) {
16
17
  return (_jsx("span", { "data-slot": "avatar-badge", className: cn('absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground bg-blend-color ring-2 ring-background select-none', 'group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden', 'group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2', 'group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2', className), ...props }));
17
18
  }
18
- function AvatarGroup({ className, ...props }) {
19
- return (_jsx("div", { "data-slot": "avatar-group", className: cn('group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background', className), ...props }));
19
+ function AvatarGroup({ className, spreadOnHover = true, collapseThreshold = 0, overlap = 8, spread = 6, ...props }) {
20
+ return (_jsx(OverlappingStack, { "data-slot": "avatar-group", collapseThreshold: collapseThreshold, overlap: overlap, spread: spread, spreadOnHover: spreadOnHover, className: cn('group/avatar-group [&>[data-slot=avatar]]:ring-2 [&>[data-slot=avatar]]:ring-background', className), ...props }));
20
21
  }
21
22
  function AvatarGroupCount({ className, ...props }) {
22
23
  return (_jsx("div", { "data-slot": "avatar-group-count", className: cn('relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3', className), ...props }));
@@ -1 +1 @@
1
- {"version":3,"file":"avatar.stories.d.ts","sourceRoot":"","sources":["../../../src/components/avatar/avatar.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,MAAM,EAA2E,MAAM,GAAG,CAAC;AAEpG,QAAA,MAAM,IAAI;;;;;;;CAOqB,CAAC;AAEhC,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAInC,eAAO,MAAM,OAAO,EAAE,KAOrB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAyFrB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAOtB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAQnB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAQnB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAQvB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAgBnB,CAAC"}
1
+ {"version":3,"file":"avatar.stories.d.ts","sourceRoot":"","sources":["../../../src/components/avatar/avatar.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,MAAM,EAA2E,MAAM,GAAG,CAAC;AAEpG,QAAA,MAAM,IAAI;;;;;;;CAOqB,CAAC;AAEhC,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAInC,eAAO,MAAM,OAAO,EAAE,KAOrB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAyFrB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAOtB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAQnB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAQnB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAQvB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAuBnB,CAAC"}
@@ -32,6 +32,13 @@ export const WithBadge = {
32
32
  render: (args) => (_jsxs(Avatar, { ...args, children: [_jsx(AvatarImage, { src: AVATAR_SRC, alt: "shadcn" }), _jsx(AvatarFallback, { children: "SC" }), _jsx(AvatarBadge, {})] })),
33
33
  };
34
34
  export const Group = {
35
+ parameters: {
36
+ docs: {
37
+ description: {
38
+ story: 'Hover the group to fan avatars apart (`spreadOnHover`, default on).',
39
+ },
40
+ },
41
+ },
35
42
  render: () => (_jsxs(AvatarGroup, { children: [[
36
43
  { src: AVATAR_SRC, fallback: 'SC' },
37
44
  { src: '/broken.jpg', fallback: 'JD' },
@@ -10,10 +10,10 @@ declare const buttonVariantStyles: {
10
10
  readonly link: "text-primary underline-offset-4 hover:underline [&_[data-slot=button-loading-indicator]]:text-primary";
11
11
  };
12
12
  declare const buttonSizeStyles: {
13
- readonly default: "h-8 gap-2 px-[calc(--spacing(3)-1px)] has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-3 sm:[&_svg:not([class*='size-'])]:size-3";
13
+ readonly default: "h-8 gap-2 px-[calc(--spacing(3)-1px)] text-base has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-3";
14
14
  readonly xs: "h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3";
15
- readonly sm: "h-7 gap-1.5 rounded-[min(var(--radius-md),12px)] px-[calc(--spacing(2.5)-1px)] text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-3.5 sm:[&_svg:not([class*='size-'])]:size-3.5";
16
- readonly lg: "h-9 gap-1.5 px-[calc(--spacing(3.5)-1px)] has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 sm:text-base [&_svg:not([class*='size-'])]:size-3.5 sm:[&_svg:not([class*='size-'])]:size-3.5";
15
+ readonly sm: "h-7 gap-1.5 rounded-[min(var(--radius-md),12px)] px-[calc(--spacing(2.5)-1px)] text-sm in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-3.5";
16
+ readonly lg: "h-9 gap-1.5 px-[calc(--spacing(3.5)-1px)] text-base has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 [&_svg:not([class*='size-'])]:size-3.5";
17
17
  readonly icon: "size-8";
18
18
  readonly 'icon-xs': "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3";
19
19
  readonly 'icon-sm': "size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg";
@@ -13,10 +13,10 @@ const buttonVariantStyles = {
13
13
  link: 'text-primary underline-offset-4 hover:underline [&_[data-slot=button-loading-indicator]]:text-primary',
14
14
  };
15
15
  const buttonSizeStyles = {
16
- default: "h-8 gap-2 px-[calc(--spacing(3)-1px)] has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-3 sm:[&_svg:not([class*='size-'])]:size-3",
16
+ default: "h-8 gap-2 px-[calc(--spacing(3)-1px)] text-base has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-3",
17
17
  xs: "h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
18
- sm: "h-7 gap-1.5 rounded-[min(var(--radius-md),12px)] px-[calc(--spacing(2.5)-1px)] text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-3.5 sm:[&_svg:not([class*='size-'])]:size-3.5",
19
- lg: "h-9 gap-1.5 px-[calc(--spacing(3.5)-1px)] has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 sm:text-base [&_svg:not([class*='size-'])]:size-3.5 sm:[&_svg:not([class*='size-'])]:size-3.5",
18
+ sm: "h-7 gap-1.5 rounded-[min(var(--radius-md),12px)] px-[calc(--spacing(2.5)-1px)] text-sm in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-3.5",
19
+ lg: "h-9 gap-1.5 px-[calc(--spacing(3.5)-1px)] text-base has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 [&_svg:not([class*='size-'])]:size-3.5",
20
20
  icon: 'size-8',
21
21
  'icon-xs': "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3",
22
22
  'icon-sm': 'size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg',
@@ -24,7 +24,7 @@ const buttonSizeStyles = {
24
24
  };
25
25
  export const buttonVariantKeys = Object.keys(buttonVariantStyles);
26
26
  export const buttonSizeKeys = Object.keys(buttonSizeStyles);
27
- const buttonVariants = cva("group/button relative inline-flex shrink-0 cursor-pointer items-center justify-center gap-2 rounded-md border border-transparent text-base font-medium whitespace-nowrap transition-shadow outline-none [text-box-edge:cap_alphabetic] [text-box-trim:trim-both] before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-lg)-1px)] focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 disabled:shadow-none disabled:inset-shadow-none disabled:before:shadow-none in-data-[slot=button-group]:before:rounded-none data-loading:text-transparent data-loading:select-none sm:text-sm pointer-coarse:after:absolute pointer-coarse:after:size-full pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11 data-disabled:cursor-not-allowed data-disabled:opacity-50 data-disabled:shadow-none data-disabled:inset-shadow-none data-disabled:before:shadow-none [&_svg]:pointer-events-none [&_svg]:-mx-0.5 [&_svg]:shrink-0 [&_svg:not([class*='opacity-'])]:opacity-80 [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4", {
27
+ const buttonVariants = cva("group/button relative inline-flex shrink-0 cursor-pointer items-center justify-center gap-2 rounded-md border border-transparent font-medium whitespace-nowrap transition-shadow outline-none [text-box-edge:cap_alphabetic] [text-box-trim:trim-both] before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-lg)-1px)] focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 disabled:shadow-none disabled:inset-shadow-none disabled:before:shadow-none in-data-[slot=button-group]:before:rounded-none data-loading:text-transparent data-loading:select-none pointer-coarse:after:absolute pointer-coarse:after:size-full pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11 data-disabled:cursor-not-allowed data-disabled:opacity-50 data-disabled:shadow-none data-disabled:inset-shadow-none data-disabled:before:shadow-none [&_svg]:pointer-events-none [&_svg]:-mx-0.5 [&_svg]:shrink-0 [&_svg:not([class*='opacity-'])]:opacity-80 [&_svg:not([class*='size-'])]:size-4", {
28
28
  variants: {
29
29
  variant: buttonVariantStyles,
30
30
  size: buttonSizeStyles,
@@ -35,10 +35,10 @@ const buttonVariants = cva("group/button relative inline-flex shrink-0 cursor-po
35
35
  },
36
36
  });
37
37
  const spinnerSizeByButtonSize = {
38
- default: 'size-3 sm:size-3',
38
+ default: 'size-3',
39
39
  xs: 'size-3',
40
- sm: 'size-3.5 sm:size-3.5',
41
- lg: 'size-3.5 sm:size-3.5',
40
+ sm: 'size-3.5',
41
+ lg: 'size-3.5',
42
42
  icon: 'size-4',
43
43
  'icon-xs': 'size-3',
44
44
  'icon-sm': 'size-3.5',
@@ -7,8 +7,8 @@ import { Separator } from '../separator';
7
7
  const buttonGroupTextVariants = cva('flex shrink-0 items-center gap-2 rounded-lg border bg-muted font-medium [&_svg]:pointer-events-none', {
8
8
  variants: {
9
9
  size: {
10
- sm: "h-7 px-2 text-[0.8rem] leading-none [&_svg:not([class*='size-'])]:size-3.5",
11
- default: "min-h-8 px-2.5 text-sm [&_svg:not([class*='size-'])]:size-4",
10
+ sm: "h-7 px-2 text-sm leading-none [&_svg:not([class*='size-'])]:size-3.5",
11
+ default: "min-h-8 px-2.5 text-base [&_svg:not([class*='size-'])]:size-4",
12
12
  lg: "h-9 px-3 text-base [&_svg:not([class*='size-'])]:size-4",
13
13
  },
14
14
  },
@@ -31,10 +31,10 @@ function Calendar({ className, classNames, showOutsideDays = true, captionLayout
31
31
  /** RDP v9: the day grid `<table>` uses the `month_grid` class key (not `table`). */
32
32
  month_grid: cn('w-full border-collapse', defaultClassNames.month_grid),
33
33
  weekdays: cn('flex', defaultClassNames.weekdays),
34
- weekday: cn('flex-1 rounded-(--cell-radius) text-[0.8rem] font-normal text-muted-foreground select-none', defaultClassNames.weekday),
34
+ weekday: cn('flex-1 rounded-(--cell-radius) text-sm font-normal text-muted-foreground select-none', defaultClassNames.weekday),
35
35
  week: cn('mt-2 flex w-full', defaultClassNames.week),
36
36
  week_number_header: cn('w-(--cell-size) select-none', defaultClassNames.week_number_header),
37
- week_number: cn('text-[0.8rem] text-muted-foreground select-none', defaultClassNames.week_number),
37
+ week_number: cn('text-sm text-muted-foreground select-none', defaultClassNames.week_number),
38
38
  day: cn('group/day relative aspect-square h-full w-full rounded-(--cell-radius) p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius)', props.showWeekNumber
39
39
  ? '[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)'
40
40
  : '[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)', defaultClassNames.day),
@@ -19,7 +19,7 @@ function DataGridColumnFilter({ column, title, options }) {
19
19
  }, [options, searchQuery]);
20
20
  return (_jsxs(Popover, { children: [_jsx(PopoverTrigger, { render: _jsxs(Button, { variant: "outline", size: "sm", children: [_jsx(CirclePlusIcon, { className: "size-4" }), title, selectedValues?.size > 0 && (_jsxs(_Fragment, { children: [_jsx(Separator, { orientation: "vertical", className: "mx-2 h-4" }), _jsx(Badge, { variant: "secondary", className: "rounded-sm px-1 font-normal lg:hidden", children: selectedValues.size }), _jsx("div", { className: "hidden space-x-1 lg:flex", children: selectedValues.size > 2 ? (_jsxs(Badge, { variant: "secondary", className: "rounded-sm px-1 font-normal", children: [selectedValues.size, " selected"] })) : (options
21
21
  .filter((option) => selectedValues.has(option.value))
22
- .map((option) => (_jsx(Badge, { variant: "secondary", className: "rounded-sm px-1 font-normal", children: option.label }, option.value)))) })] }))] }) }), _jsxs(PopoverContent, { className: "w-[200px] p-0", align: "start", children: [_jsx("div", { className: "p-2", children: _jsx(Input, { placeholder: title, value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), className: "h-8" }) }), _jsxs("div", { className: "max-h-[300px] overflow-y-auto", children: [filteredOptions.length === 0 ? (_jsx("div", { className: "py-6 text-center text-sm text-muted-foreground", children: "No results found." })) : (_jsx("div", { className: "p-1", children: filteredOptions.map((option) => {
22
+ .map((option) => (_jsx(Badge, { variant: "secondary", className: "rounded-sm px-1 font-normal", children: option.label }, option.value)))) })] }))] }) }), _jsxs(PopoverContent, { className: "w-[200px] p-0", align: "start", children: [_jsx("div", { className: "p-2", children: _jsx(Input, { placeholder: title, value: searchQuery, onChange: (e) => setSearchQuery(e.target.value) }) }), _jsxs("div", { className: "max-h-[300px] overflow-y-auto", children: [filteredOptions.length === 0 ? (_jsx("div", { className: "py-6 text-center text-sm text-muted-foreground", children: "No results found." })) : (_jsx("div", { className: "p-1", children: filteredOptions.map((option) => {
23
23
  const isSelected = selectedValues.has(option.value);
24
24
  return (_jsxs("button", { type: "button", onClick: () => {
25
25
  if (isSelected) {
@@ -4,7 +4,7 @@ declare function FieldLabel({ className, ...props }: FieldPrimitive.Label.Props)
4
4
  declare function FieldDescription({ className, ...props }: FieldPrimitive.Description.Props): import("react/jsx-runtime").JSX.Element;
5
5
  declare function FieldError({ className, ...props }: FieldPrimitive.Error.Props): import("react/jsx-runtime").JSX.Element;
6
6
  export type FieldControlProps = Omit<FieldPrimitive.Control.Props, 'size'> & {
7
- size?: 'sm' | 'default';
7
+ size?: 'sm' | 'default' | 'lg';
8
8
  };
9
9
  declare function FieldControl({ className, size, ...props }: FieldControlProps): import("react/jsx-runtime").JSX.Element;
10
10
  declare function FieldItem({ className, ...props }: FieldPrimitive.Item.Props): import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../../../src/components/field/field.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAK/D,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,IAAI,CAAC,KAAK,2CAEpE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,KAAK,CAAC,KAAK,2CAWtE;AAED,iBAAS,gBAAgB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,WAAW,CAAC,KAAK,2CAElF;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,KAAK,CAAC,KAAK,2CAEtE;AAED,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,CAAA;CAAE,CAAC;AAEzG,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,IAAgB,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,2CAEjF;AAED,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,IAAI,CAAC,KAAK,2CAEpE;AAED,QAAA,MAAM,aAAa,iEAA0B,CAAC;AAE9C,eAAO,MAAM,KAAK;;;;;;;;CAQjB,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,gBAAgB,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../../../src/components/field/field.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAK/D,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,IAAI,CAAC,KAAK,2CAEpE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,KAAK,CAAC,KAAK,2CAWtE;AAED,iBAAS,gBAAgB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,WAAW,CAAC,KAAK,2CAElF;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,KAAK,CAAC,KAAK,2CAEtE;AAED,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,GAAG,IAAI,CAAA;CAAE,CAAC;AAEhH,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,IAAgB,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,2CAEjF;AAED,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,IAAI,CAAC,KAAK,2CAEpE;AAED,QAAA,MAAM,aAAa,iEAA0B,CAAC;AAE9C,eAAO,MAAM,KAAK;;;;;;;;CAQjB,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,gBAAgB,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC"}
@@ -352,7 +352,7 @@ export function FilterDateMetricBarValueSegment({ field, values, onChange, opera
352
352
  const sym = i18n.defaultCurrency;
353
353
  const numberLocale = i18n.numberFormatLocale;
354
354
  const barValueFormat = dateMetricBarValueFormat(field);
355
- const inputSizeProp = size === 'lg' ? 'default' : 'sm';
355
+ const inputSizeProp = size;
356
356
  const buttonSize = size === 'lg' ? 'lg' : size === 'sm' ? 'sm' : 'default';
357
357
  const valueSegment = (() => {
358
358
  if (operator === 'value_any') {
@@ -1 +1 @@
1
- {"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../../src/components/filters/filters.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA+B/B,OAAO,KAAK,EAAE,MAAM,EAAuC,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEzH,uDAAuD;AACvD,eAAO,MAAM,kCAAkC,KAAK,CAAC;AA0sBrD,UAAU,mBAAmB,CAAC,CAAC,GAAG,OAAO;IACrC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACrB,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAC9B,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC;IACzC,6FAA6F;IAC7F,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED,eAAO,MAAM,cAAc,GAAI,CAAC,GAAG,OAAO,EAAG,kDAAyD,mBAAmB,CAAC,CAAC,CAAC,4CAoD3H,CAAC;AAEF,UAAU,YAAY,CAAC,CAAC,GAAG,OAAO;IAC9B,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACrB,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAC9B,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,GAAG,IAAI,CAAC;IAC/B,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACjC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oGAAoG;IACpG,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,uHAAuH;IACvH,+BAA+B,CAAC,EAAE,OAAO,CAAC;IAC1C;;;OAGG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,uJAAuJ;IACvJ,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AA8LD,wBAAgB,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,EACjC,OAAO,EACP,MAAM,EACN,QAAQ,EACR,SAAS,EACT,IAAW,EACX,MAAkB,EAClB,IAAI,EACJ,eAAsB,EACtB,uBAA4D,EAC5D,OAAO,EACP,aAAoB,EACpB,kBAAkB,EAClB,0BAAkC,EAClC,+BAAuC,EACvC,qBAA6B,EAC7B,iBAAyB,EACzB,cAAsB,EACtB,WAAiB,EACjB,aAAmB,GACtB,EAAE,YAAY,CAAC,CAAC,CAAC,2CAgsBjB"}
1
+ {"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../../src/components/filters/filters.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAgC/B,OAAO,KAAK,EAAE,MAAM,EAAuC,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEzH,uDAAuD;AACvD,eAAO,MAAM,kCAAkC,KAAK,CAAC;AA0sBrD,UAAU,mBAAmB,CAAC,CAAC,GAAG,OAAO;IACrC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACrB,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAC9B,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC;IACzC,6FAA6F;IAC7F,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED,eAAO,MAAM,cAAc,GAAI,CAAC,GAAG,OAAO,EAAG,kDAAyD,mBAAmB,CAAC,CAAC,CAAC,4CAoD3H,CAAC;AAEF,UAAU,YAAY,CAAC,CAAC,GAAG,OAAO;IAC9B,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACrB,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAC9B,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,GAAG,IAAI,CAAC;IAC/B,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACjC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oGAAoG;IACpG,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,uHAAuH;IACvH,+BAA+B,CAAC,EAAE,OAAO,CAAC;IAC1C;;;OAGG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,uJAAuJ;IACvJ,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AA8LD,wBAAgB,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,EACjC,OAAO,EACP,MAAM,EACN,QAAQ,EACR,SAAS,EACT,IAAW,EACX,MAAkB,EAClB,IAAI,EACJ,eAAsB,EACtB,uBAA4D,EAC5D,OAAO,EACP,aAAoB,EACpB,kBAAkB,EAClB,0BAAkC,EAClC,+BAAuC,EACvC,qBAA6B,EAC7B,iBAAyB,EACzB,cAAsB,EACtB,WAAiB,EACjB,aAAmB,GACtB,EAAE,YAAY,CAAC,CAAC,CAAC,2CAgsBjB"}
@@ -10,6 +10,7 @@ import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMe
10
10
  import { Input } from '../input';
11
11
  import { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText } from '../input-group';
12
12
  import { Kbd } from '../kbd';
13
+ import { OverlappingStack } from '../overlapping-stack';
13
14
  import { ScrollArea } from '../scroll-area';
14
15
  import { Tooltip, TooltipContent, TooltipTrigger } from '../tooltip';
15
16
  import { AlertCircle, Check, ChevronDown, Plus, X } from 'lucide-react';
@@ -116,7 +117,7 @@ function FilterInput({ field, onBlur, onKeyDown, className, ...props }) {
116
117
  // Call the original onKeyDown if provided
117
118
  onKeyDown?.(e);
118
119
  };
119
- return (_jsxs(InputGroup, { className: cn('w-36', context.size == 'sm' && 'h-7!', context.size == 'default' && 'h-8!', context.size == 'lg' && 'h-9!', className), children: [field?.prefix && (_jsx(InputGroupAddon, { children: _jsx(InputGroupText, { children: field.prefix }) })), _jsx(InputGroupInput, { ref: inputRef, "aria-invalid": !isValid, "aria-describedby": !isValid && validationMessage ? `${field?.key || 'input'}-error` : undefined, onBlur: handleBlur, onKeyDown: handleKeyDown, className: cn(context.size == 'sm' && 'h-7! text-xs', context.size == 'default' && 'h-8!', context.size == 'lg' && 'h-9!'), ...props }), !isValid && validationMessage && (_jsx(InputGroupAddon, { align: "inline-end", children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { render: _jsx(InputGroupButton, { size: "icon-xs" }), children: _jsx(AlertCircle, { className: "size-3.5 text-destructive" }) }), _jsx(TooltipContent, { children: _jsx("p", { className: "text-sm", children: validationMessage }) })] }) })), field?.suffix && (_jsx(InputGroupAddon, { align: "inline-end", children: _jsx(InputGroupText, { children: field.suffix }) }))] }));
120
+ return (_jsxs(InputGroup, { className: cn('w-36', context.size == 'sm' && 'h-7!', context.size == 'default' && 'h-8!', context.size == 'lg' && 'h-9!', className), children: [field?.prefix && (_jsx(InputGroupAddon, { children: _jsx(InputGroupText, { children: field.prefix }) })), _jsx(InputGroupInput, { ref: inputRef, size: context.size, "aria-invalid": !isValid, "aria-describedby": !isValid && validationMessage ? `${field?.key || 'input'}-error` : undefined, onBlur: handleBlur, onKeyDown: handleKeyDown, ...props }), !isValid && validationMessage && (_jsx(InputGroupAddon, { align: "inline-end", children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { render: _jsx(InputGroupButton, { size: "icon-xs" }), children: _jsx(AlertCircle, { className: "size-3.5 text-destructive" }) }), _jsx(TooltipContent, { children: _jsx("p", { className: "text-sm", children: validationMessage }) })] }) })), field?.suffix && (_jsx(InputGroupAddon, { align: "inline-end", children: _jsx(InputGroupText, { children: field.suffix }) }))] }));
120
121
  }
121
122
  function FilterRemoveButton({ className, icon = _jsx(X, {}), ...props }) {
122
123
  const context = useFilterContext();
@@ -323,7 +324,7 @@ function SelectOptionsPopover({ field, values, onChange, onClose, inline = false
323
324
  if (!nextOpen) {
324
325
  setTimeout(() => setSearchInput(''), 200);
325
326
  }
326
- }, children: [_jsx(DropdownMenuTrigger, { render: _jsx(Button, { variant: "outline", size: context.size, children: _jsx("div", { className: "flex items-center gap-1.5", children: field.customValueRenderer ? (field.customValueRenderer(values, field.options || [])) : (_jsxs(_Fragment, { children: [triggerPreviewIcons.length > 0 && (_jsx("div", { className: "flex items-center -space-x-1.5", children: triggerPreviewIcons.map((option) => (_jsx("div", { children: option.icon }, String(option.value)))) })), selectedOptions.length === 1
327
+ }, children: [_jsx(DropdownMenuTrigger, { render: _jsx(Button, { variant: "outline", size: context.size, children: _jsx("div", { className: "flex items-center gap-1.5", children: field.customValueRenderer ? (field.customValueRenderer(values, field.options || [])) : (_jsxs(_Fragment, { children: [triggerPreviewIcons.length > 0 && (_jsx(OverlappingStack, { collapseThreshold: 0, overlap: 6, spread: 4, spreadOnHover: true, inlineClassName: "gap-0", children: triggerPreviewIcons.map((option) => (_jsx("div", { children: option.icon }, String(option.value)))) })), selectedOptions.length === 1
327
328
  ? selectedOptions[0].label
328
329
  : selectedOptions.length > 1
329
330
  ? `${selectedOptions.length} ${context.i18n.selectedCount}`
@@ -32,6 +32,8 @@ export * from './label';
32
32
  export * from './menubar';
33
33
  export * from './native-select';
34
34
  export * from './navigation-menu';
35
+ export * from './number-field';
36
+ export * from './overlapping-stack';
35
37
  export * from './pagination';
36
38
  export * from './popover';
37
39
  export * from './progress';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC"}
@@ -32,6 +32,8 @@ export * from './label';
32
32
  export * from './menubar';
33
33
  export * from './native-select';
34
34
  export * from './navigation-menu';
35
+ export * from './number-field';
36
+ export * from './overlapping-stack';
35
37
  export * from './pagination';
36
38
  export * from './popover';
37
39
  export * from './progress';
@@ -2,9 +2,9 @@ import * as React from 'react';
2
2
  import { Input as InputPrimitive } from '@base-ui/react/input';
3
3
  import { type VariantProps } from 'class-variance-authority';
4
4
  declare const inputVariants: (props?: ({
5
- size?: "default" | "sm" | null | undefined;
5
+ size?: "default" | "sm" | "lg" | null | undefined;
6
6
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
- export declare const inputSizeKeys: readonly ["sm", "default"];
7
+ export declare const inputSizeKeys: readonly ["sm", "default", "lg"];
8
8
  /**
9
9
  * Props for `Input`. Inherits additional behavior from
10
10
  * [Base UI Input](https://base-ui.com/react/components/input).
@@ -1 +1 @@
1
- {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../src/components/input/input.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIlE,QAAA,MAAM,aAAa;;8EAalB,CAAC;AAEF,eAAO,MAAM,aAAa,4BAA6B,CAAC;AAExD;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,YAAY,CAAC,OAAO,aAAa,CAAC,CAAC;AAEjG,QAAA,MAAM,KAAK,kGAET,CAAC;AAEH,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../src/components/input/input.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIlE,QAAA,MAAM,aAAa;;8EAclB,CAAC;AAEF,eAAO,MAAM,aAAa,kCAAmC,CAAC;AAE9D;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,YAAY,CAAC,OAAO,aAAa,CAAC,CAAC;AAEjG,QAAA,MAAM,KAAK,kGAET,CAAC;AAEH,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC"}
@@ -7,15 +7,16 @@ import { cn } from '../../lib/utils';
7
7
  const inputVariants = cva('flex w-full min-w-0 rounded-md border border-input bg-background shadow-xs transition-[color,box-shadow] outline-none group-has-disabled/field:opacity-50 file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-invalid:border-destructive data-invalid:ring-3 data-invalid:ring-destructive/20 dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 dark:data-invalid:border-destructive/50 dark:data-invalid:ring-destructive/40', {
8
8
  variants: {
9
9
  size: {
10
- sm: 'h-8 px-2.5 text-xs',
11
- default: 'h-9 px-3 py-1 text-sm',
10
+ sm: 'h-7 rounded-[min(var(--radius-md),12px)] px-[calc(--spacing(2.5)-1px)] text-sm',
11
+ default: 'h-8 px-[calc(--spacing(3)-1px)] text-base',
12
+ lg: 'h-9 px-[calc(--spacing(3.5)-1px)] text-base',
12
13
  },
13
14
  },
14
15
  defaultVariants: {
15
16
  size: 'default',
16
17
  },
17
18
  });
18
- export const inputSizeKeys = ['sm', 'default'];
19
+ export const inputSizeKeys = ['sm', 'default', 'lg'];
19
20
  const Input = React.forwardRef(function Input({ className, size = 'default', ...props }, ref) {
20
21
  return _jsx(InputPrimitive, { ref: ref, "data-slot": "input", className: cn(inputVariants({ size }), className), ...props });
21
22
  });
@@ -13,7 +13,7 @@ declare const meta: {
13
13
  argTypes: {
14
14
  size: {
15
15
  control: "select";
16
- options: readonly ["sm", "default"];
16
+ options: readonly ["sm", "default", "lg"];
17
17
  };
18
18
  className: {
19
19
  control: false;
@@ -1 +1 @@
1
- {"version":3,"file":"input.stories.d.ts","sourceRoot":"","sources":["../../../src/components/input/input.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAMvD,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;CAeoB,CAAC;AAE/B,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KA4BrB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAgBvB,CAAC"}
1
+ {"version":3,"file":"input.stories.d.ts","sourceRoot":"","sources":["../../../src/components/input/input.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAMvD,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;CAeoB,CAAC;AAE/B,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KA6BrB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAgBvB,CAAC"}
@@ -24,7 +24,7 @@ export const Default = {
24
24
  };
25
25
  export const Gallery = {
26
26
  parameters: { layout: 'padded' },
27
- render: () => (_jsxs("div", { className: "flex max-w-md flex-col gap-8", children: [_jsxs("div", { className: "flex flex-col gap-3", children: [_jsx("p", { className: "text-xs font-medium tracking-wide text-muted-foreground uppercase", children: "Sizes" }), _jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(Input, { placeholder: "Default height", size: "default" }), _jsx(Input, { placeholder: "Small", size: "sm" })] })] }), _jsxs("div", { className: "flex flex-col gap-3", children: [_jsx("p", { className: "text-xs font-medium tracking-wide text-muted-foreground uppercase", children: "States" }), _jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(Input, { placeholder: "Disabled", disabled: true }), _jsx(Input, { placeholder: "Invalid (aria-invalid)", "aria-invalid": true }), _jsx(Input, { placeholder: "Invalid (data-invalid)", "data-invalid": true })] })] }), _jsxs("div", { className: "flex flex-col gap-3", children: [_jsx("p", { className: "text-xs font-medium tracking-wide text-muted-foreground uppercase", children: "With label" }), _jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(Label, { htmlFor: "input-gallery", children: "Email" }), _jsx(Input, { id: "input-gallery", type: "email", placeholder: "you@example.com" })] })] })] })),
27
+ render: () => (_jsxs("div", { className: "flex max-w-md flex-col gap-8", children: [_jsxs("div", { className: "flex flex-col gap-3", children: [_jsx("p", { className: "text-xs font-medium tracking-wide text-muted-foreground uppercase", children: "Sizes" }), _jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(Input, { placeholder: "Small (h-7)", size: "sm" }), _jsx(Input, { placeholder: "Default (h-8)", size: "default" }), _jsx(Input, { placeholder: "Large (h-9)", size: "lg" })] })] }), _jsxs("div", { className: "flex flex-col gap-3", children: [_jsx("p", { className: "text-xs font-medium tracking-wide text-muted-foreground uppercase", children: "States" }), _jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(Input, { placeholder: "Disabled", disabled: true }), _jsx(Input, { placeholder: "Invalid (aria-invalid)", "aria-invalid": true }), _jsx(Input, { placeholder: "Invalid (data-invalid)", "data-invalid": true })] })] }), _jsxs("div", { className: "flex flex-col gap-3", children: [_jsx("p", { className: "text-xs font-medium tracking-wide text-muted-foreground uppercase", children: "With label" }), _jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(Label, { htmlFor: "input-gallery", children: "Email" }), _jsx(Input, { id: "input-gallery", type: "email", placeholder: "you@example.com" })] })] })] })),
28
28
  };
29
29
  export const WithField = {
30
30
  name: 'With Field (validation)',
@@ -6,7 +6,7 @@ import type { TextareaProps } from '../textarea';
6
6
  /** Props for `InputGroup`. */
7
7
  export type InputGroupProps = React.ComponentProps<'div'>;
8
8
  declare const inputGroupAddonVariants: (props?: ({
9
- align?: "inline-start" | "inline-end" | "block-start" | "block-end" | null | undefined;
9
+ align?: "inline-end" | "inline-start" | "block-end" | "block-start" | null | undefined;
10
10
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
11
11
  export declare const inputGroupAddonAlignKeys: readonly ["inline-start", "inline-end", "block-start", "block-end"];
12
12
  /** Props for `InputGroupAddon`. */
@@ -0,0 +1,2 @@
1
+ export * from './number-field';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/number-field/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1 @@
1
+ export * from './number-field';
@@ -0,0 +1,59 @@
1
+ import { NumberField as NumberFieldPrimitive } from '@base-ui/react/number-field';
2
+ import * as React from 'react';
3
+ export declare const NumberFieldContext: React.Context<{
4
+ fieldId: string;
5
+ } | null>;
6
+ export type NumberFieldProps = NumberFieldPrimitive.Root.Props & {
7
+ /** Control height. Read by children through `data-size`. */
8
+ size?: 'sm' | 'default' | 'lg';
9
+ };
10
+ export declare function NumberField({ id, className, size, ...props }: NumberFieldProps): React.ReactElement;
11
+ export type NumberFieldGroupProps = NumberFieldPrimitive.Group.Props & {
12
+ /** `NumberFieldDecrement`, `NumberFieldInput`, `NumberFieldIncrement`, and optional `NumberFieldAddon` siblings. */
13
+ children?: React.ReactNode;
14
+ /** Additional CSS classes on the bordered group shell. */
15
+ className?: string;
16
+ };
17
+ export declare function NumberFieldGroup({ className, ...props }: NumberFieldGroupProps): React.ReactElement;
18
+ export type NumberFieldDecrementProps = NumberFieldPrimitive.Decrement.Props & {
19
+ /** Disable just the decrement button (independent of the root `disabled` prop). */
20
+ disabled?: boolean;
21
+ /** Override the default minus icon — pass any icon or node to customize the stepper glyph. */
22
+ children?: React.ReactNode;
23
+ /** Additional CSS classes on the decrement button. */
24
+ className?: string;
25
+ };
26
+ export declare function NumberFieldDecrement({ className, children, ...props }: NumberFieldDecrementProps): React.ReactElement;
27
+ export type NumberFieldIncrementProps = NumberFieldPrimitive.Increment.Props & {
28
+ /** Disable just the increment button (independent of the root `disabled` prop). */
29
+ disabled?: boolean;
30
+ /** Override the default plus icon — pass any icon or node to customize the stepper glyph. */
31
+ children?: React.ReactNode;
32
+ /** Additional CSS classes on the increment button. */
33
+ className?: string;
34
+ };
35
+ export declare function NumberFieldIncrement({ className, children, ...props }: NumberFieldIncrementProps): React.ReactElement;
36
+ export type NumberFieldAddonProps = React.ComponentProps<'span'> & {
37
+ /** Whether the addon sits before (`inline-start`) or after (`inline-end`) the input. Controls inner rounding so the addon hugs the group's outer corner when given a background. */
38
+ align?: 'inline-start' | 'inline-end';
39
+ };
40
+ /**
41
+ * Static prefix or suffix that renders inside `NumberFieldGroup` (currency symbol, unit label, small icon).
42
+ * Click-to-focus delegates to the inner input.
43
+ */
44
+ export declare function NumberFieldAddon({ className, align, ...props }: NumberFieldAddonProps): React.ReactElement;
45
+ export type NumberFieldInputProps = NumberFieldPrimitive.Input.Props & {
46
+ /** Additional CSS classes on the inner `<input>`. */
47
+ className?: string;
48
+ };
49
+ export declare function NumberFieldInput({ className, ...props }: NumberFieldInputProps): React.ReactElement;
50
+ export type NumberFieldScrubAreaProps = NumberFieldPrimitive.ScrubArea.Props & {
51
+ /** Visible label rendered inside the scrub area; associated with the inner input via `htmlFor` for accessibility. */
52
+ label: string;
53
+ /** Additional CSS classes on the scrub area. */
54
+ className?: string;
55
+ };
56
+ export declare function NumberFieldScrubArea({ className, label, ...props }: NumberFieldScrubAreaProps): React.ReactElement;
57
+ export declare function CursorGrowIcon(props: React.ComponentProps<'svg'>): React.ReactElement;
58
+ export { NumberFieldPrimitive };
59
+ //# sourceMappingURL=number-field.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number-field.d.ts","sourceRoot":"","sources":["../../../src/components/number-field/number-field.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,IAAI,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAElF,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,OAAO,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;CACnB,GAAG,IAAI,CAEO,CAAC;AAChB,MAAM,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,GAAG;IAC7D,4DAA4D;IAC5D,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,GAAG,IAAI,CAAC;CAClC,CAAC;AACF,wBAAgB,WAAW,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAgB,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,GAAG,KAAK,CAAC,YAAY,CAc/G;AACD,MAAM,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,KAAK,CAAC,KAAK,GAAG;IACnE,oHAAoH;IACpH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AACF,wBAAgB,gBAAgB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,qBAAqB,GAAG,KAAK,CAAC,YAAY,CAWnG;AACD,MAAM,MAAM,yBAAyB,GAAG,oBAAoB,CAAC,SAAS,CAAC,KAAK,GAAG;IAC3E,mFAAmF;IACnF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AACF,wBAAgB,oBAAoB,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,yBAAyB,GAAG,KAAK,CAAC,YAAY,CAarH;AACD,MAAM,MAAM,yBAAyB,GAAG,oBAAoB,CAAC,SAAS,CAAC,KAAK,GAAG;IAC3E,mFAAmF;IACnF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AACF,wBAAgB,oBAAoB,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,yBAAyB,GAAG,KAAK,CAAC,YAAY,CAarH;AACD,MAAM,MAAM,qBAAqB,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG;IAC/D,oLAAoL;IACpL,KAAK,CAAC,EAAE,cAAc,GAAG,YAAY,CAAC;CACzC,CAAC;AACF;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,SAAS,EAAE,KAAsB,EAAE,GAAG,KAAK,EAAE,EAAE,qBAAqB,GAAG,KAAK,CAAC,YAAY,CAmB3H;AACD,MAAM,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,KAAK,CAAC,KAAK,GAAG;IACnE,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AACF,wBAAgB,gBAAgB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,qBAAqB,GAAG,KAAK,CAAC,YAAY,CAWnG;AACD,MAAM,MAAM,yBAAyB,GAAG,oBAAoB,CAAC,SAAS,CAAC,KAAK,GAAG;IAC3E,qHAAqH;IACrH,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AACF,wBAAgB,oBAAoB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,yBAAyB,GAAG,KAAK,CAAC,YAAY,CAelH;AACD,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,YAAY,CAMrF;AACD,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,49 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { NumberField as NumberFieldPrimitive } from '@base-ui/react/number-field';
4
+ import { MinusIcon, PlusIcon } from 'lucide-react';
5
+ import * as React from 'react';
6
+ import { cn } from '../../lib/utils';
7
+ import { Label } from '../label/label';
8
+ export const NumberFieldContext = React.createContext(null);
9
+ export function NumberField({ id, className, size = 'default', ...props }) {
10
+ const generatedId = React.useId();
11
+ const fieldId = id ?? generatedId;
12
+ return (_jsx(NumberFieldContext.Provider, { value: { fieldId }, children: _jsx(NumberFieldPrimitive.Root, { className: cn('flex w-full flex-col items-start gap-2', className), "data-size": size, "data-slot": "number-field", id: fieldId, ...props }) }));
13
+ }
14
+ export function NumberFieldGroup({ className, ...props }) {
15
+ return (_jsx(NumberFieldPrimitive.Group, { className: cn("relative flex w-full justify-between rounded-lg border border-input bg-background text-base text-foreground shadow-xs/5 ring-ring/24 transition-shadow not-dark:bg-clip-padding before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-lg)-1px)] not-data-disabled:not-focus-within:not-aria-invalid:before:shadow-[0_1px_--theme(--color-black/4%)] focus-within:border-ring focus-within:ring-[3px] has-autofill:bg-foreground/4 has-aria-invalid:border-destructive/36 focus-within:has-aria-invalid:border-destructive/64 focus-within:has-aria-invalid:ring-destructive/48 dark:bg-input/32 dark:not-data-disabled:not-focus-within:not-aria-invalid:before:shadow-[0_-1px_--theme(--color-white/6%)] dark:has-autofill:bg-foreground/8 dark:has-aria-invalid:ring-destructive/24 data-disabled:pointer-events-none data-disabled:opacity-64 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [[data-disabled],:focus-within,[aria-invalid]]:shadow-none", className), "data-slot": "number-field-group", ...props }));
16
+ }
17
+ export function NumberFieldDecrement({ className, children, ...props }) {
18
+ return (_jsx(NumberFieldPrimitive.Decrement, { className: cn('relative flex shrink-0 cursor-pointer items-center justify-center rounded-s-[calc(var(--radius-lg)-1px)] px-[calc(--spacing(3)-1px)] transition-colors hover:bg-accent in-data-[size=sm]:px-[calc(--spacing(2.5)-1px)] pointer-coarse:after:absolute pointer-coarse:after:size-full pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11', className), "data-slot": "number-field-decrement", ...props, children: children ?? _jsx(MinusIcon, { className: "size-3" }) }));
19
+ }
20
+ export function NumberFieldIncrement({ className, children, ...props }) {
21
+ return (_jsx(NumberFieldPrimitive.Increment, { className: cn('relative flex shrink-0 cursor-pointer items-center justify-center rounded-e-[calc(var(--radius-lg)-1px)] px-[calc(--spacing(3)-1px)] transition-colors hover:bg-accent in-data-[size=sm]:px-[calc(--spacing(2.5)-1px)] pointer-coarse:after:absolute pointer-coarse:after:size-full pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11', className), "data-slot": "number-field-increment", ...props, children: children ?? _jsx(PlusIcon, { className: "size-3" }) }));
22
+ }
23
+ /**
24
+ * Static prefix or suffix that renders inside `NumberFieldGroup` (currency symbol, unit label, small icon).
25
+ * Click-to-focus delegates to the inner input.
26
+ */
27
+ export function NumberFieldAddon({ className, align = 'inline-start', ...props }) {
28
+ return (
29
+ // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions
30
+ _jsx("span", { "data-slot": "number-field-addon", "data-align": align, onClick: (e) => {
31
+ if (e.target.closest('button'))
32
+ return;
33
+ e.currentTarget.parentElement?.querySelector('input')?.focus();
34
+ }, className: cn("flex shrink-0 cursor-text items-center justify-center px-3 text-sm text-muted-foreground select-none in-data-[size=sm]:px-2.5 [&>svg]:pointer-events-none [&>svg:not([class*='size-'])]:size-4", align === 'inline-start' && 'order-first rounded-s-[calc(var(--radius-lg)-1px)] pe-0', align === 'inline-end' && 'order-last rounded-e-[calc(var(--radius-lg)-1px)] ps-0', className), ...props }));
35
+ }
36
+ export function NumberFieldInput({ className, ...props }) {
37
+ return (_jsx(NumberFieldPrimitive.Input, { className: cn('h-8.5 w-full min-w-0 grow bg-transparent px-[calc(--spacing(3)-1px)] text-center leading-8.5 tabular-nums outline-none [transition:background-color_5000000s_ease-in-out_0s] in-data-[size=lg]:h-9.5 in-data-[size=lg]:leading-9.5 in-data-[size=sm]:h-7.5 in-data-[size=sm]:px-[calc(--spacing(2.5)-1px)] in-data-[size=sm]:leading-7.5 sm:h-7.5 sm:leading-7.5 sm:in-data-[size=lg]:h-8.5 sm:in-data-[size=lg]:leading-8.5 sm:in-data-[size=sm]:h-6.5 sm:in-data-[size=sm]:leading-8.5', className), "data-slot": "number-field-input", ...props }));
38
+ }
39
+ export function NumberFieldScrubArea({ className, label, ...props }) {
40
+ const context = React.useContext(NumberFieldContext);
41
+ if (!context) {
42
+ throw new Error('NumberFieldScrubArea must be used within a NumberField component for accessibility.');
43
+ }
44
+ return (_jsxs(NumberFieldPrimitive.ScrubArea, { className: cn('flex cursor-ew-resize', className), "data-slot": "number-field-scrub-area", ...props, children: [_jsx(Label, { className: "cursor-ew-resize", htmlFor: context.fieldId, children: label }), _jsx(NumberFieldPrimitive.ScrubAreaCursor, { className: "drop-shadow-[0_1px_1px_#0008] filter", children: _jsx(CursorGrowIcon, {}) })] }));
45
+ }
46
+ export function CursorGrowIcon(props) {
47
+ return (_jsx("svg", { "aria-hidden": "true", fill: "black", height: "14", stroke: "white", viewBox: "0 0 24 14", width: "26", xmlns: "http://www.w3.org/2000/svg", ...props, children: _jsx("path", { d: "M19.5 5.5L6.49737 5.51844V2L1 6.9999L6.5 12L6.49737 8.5L19.5 8.5V12L25 6.9999L19.5 2V5.5Z" }) }));
48
+ }
49
+ export { NumberFieldPrimitive };
@@ -0,0 +1,25 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { NumberField } from './number-field';
3
+ declare const meta: Meta<typeof NumberField>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ export declare const Default: Story;
7
+ export declare const Sizes: Story;
8
+ export declare const MinMaxStep: Story;
9
+ export declare const Currency: Story;
10
+ export declare const Percent: Story;
11
+ export declare const PrefixAddon: Story;
12
+ export declare const SuffixAddon: Story;
13
+ export declare const UnitAddon: Story;
14
+ export declare const IconAddon: Story;
15
+ export declare const AddonWithStepper: Story;
16
+ export declare const StepperRight: Story;
17
+ export declare const StackedStepper: Story;
18
+ export declare const SteppersWithSuffixHorizontal: Story;
19
+ export declare const SteppersWithSuffixStacked: Story;
20
+ export declare const ScrubArea: Story;
21
+ export declare const Disabled: Story;
22
+ export declare const ReadOnly: Story;
23
+ export declare const WithField: Story;
24
+ export declare const Gallery: Story;
25
+ //# sourceMappingURL=number-field.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number-field.stories.d.ts","sourceRoot":"","sources":["../../../src/components/number-field/number-field.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAMvD,OAAO,EACH,WAAW,EAOd,MAAM,gBAAgB,CAAC;AAExB,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,WAAW,CA+HlC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAarB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAqCnB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAexB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAetB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAerB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAczB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAczB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAcvB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAgBvB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAgB9B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAe1B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAqB5B,CAAC;AAEF,eAAO,MAAM,4BAA4B,EAAE,KAkC1C,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,KA8CvC,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAavB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KActB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAetB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KA6BvB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAmDrB,CAAC"}