@wheelhouse/ui 0.2.6 → 0.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/blocks/columns/column-popover-panel-header.d.ts +10 -0
- package/dist/blocks/columns/column-popover-panel-header.d.ts.map +1 -0
- package/dist/blocks/columns/column-popover-panel-header.js +9 -0
- package/dist/blocks/columns/columns-add-view.d.ts +12 -0
- package/dist/blocks/columns/columns-add-view.d.ts.map +1 -0
- package/dist/blocks/columns/columns-add-view.js +34 -0
- package/dist/blocks/columns/columns-types.d.ts +26 -1
- package/dist/blocks/columns/columns-types.d.ts.map +1 -1
- package/dist/blocks/columns/columns-types.js +9 -2
- package/dist/blocks/columns/columns-utils.d.ts +7 -3
- package/dist/blocks/columns/columns-utils.d.ts.map +1 -1
- package/dist/blocks/columns/columns-utils.js +28 -6
- package/dist/blocks/columns/columns.d.ts.map +1 -1
- package/dist/blocks/columns/columns.js +106 -68
- package/dist/blocks/columns/columns.stories.d.ts +1 -0
- package/dist/blocks/columns/columns.stories.d.ts.map +1 -1
- package/dist/blocks/columns/columns.stories.js +19 -4
- package/dist/blocks/columns/index.d.ts +1 -1
- package/dist/blocks/columns/index.d.ts.map +1 -1
- package/dist/blocks/columns/index.js +1 -1
- package/dist/components/avatar/avatar.d.ts +3 -2
- package/dist/components/avatar/avatar.d.ts.map +1 -1
- package/dist/components/avatar/avatar.js +3 -2
- package/dist/components/avatar/avatar.stories.d.ts.map +1 -1
- package/dist/components/avatar/avatar.stories.js +7 -0
- package/dist/components/button/button.d.ts +3 -3
- package/dist/components/button/button.js +7 -7
- package/dist/components/button-group/button-group.js +2 -2
- package/dist/components/calendar/calendar.js +2 -2
- package/dist/components/data-grid/data-grid-column-filter.js +1 -1
- package/dist/components/field/field.d.ts +1 -1
- package/dist/components/field/field.d.ts.map +1 -1
- package/dist/components/filters/filter-date-metric-value.js +1 -1
- package/dist/components/filters/filters.d.ts.map +1 -1
- package/dist/components/filters/filters.js +3 -2
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +2 -0
- package/dist/components/input/input.d.ts +2 -2
- package/dist/components/input/input.d.ts.map +1 -1
- package/dist/components/input/input.js +4 -3
- package/dist/components/input/input.stories.d.ts +1 -1
- package/dist/components/input/input.stories.d.ts.map +1 -1
- package/dist/components/input/input.stories.js +1 -1
- package/dist/components/input-group/input-group.d.ts +1 -1
- package/dist/components/number-field/index.d.ts +2 -0
- package/dist/components/number-field/index.d.ts.map +1 -0
- package/dist/components/number-field/index.js +1 -0
- package/dist/components/number-field/number-field.d.ts +59 -0
- package/dist/components/number-field/number-field.d.ts.map +1 -0
- package/dist/components/number-field/number-field.js +49 -0
- package/dist/components/number-field/number-field.stories.d.ts +25 -0
- package/dist/components/number-field/number-field.stories.d.ts.map +1 -0
- package/dist/components/number-field/number-field.stories.js +225 -0
- package/dist/components/overlapping-stack/index.d.ts +3 -0
- package/dist/components/overlapping-stack/index.d.ts.map +1 -0
- package/dist/components/overlapping-stack/index.js +2 -0
- package/dist/components/overlapping-stack/overlapping-stack.d.ts +12 -0
- package/dist/components/overlapping-stack/overlapping-stack.d.ts.map +1 -0
- package/dist/components/overlapping-stack/overlapping-stack.js +45 -0
- package/dist/components/overlapping-stack/overlapping-stack.stories.d.ts +78 -0
- package/dist/components/overlapping-stack/overlapping-stack.stories.d.ts.map +1 -0
- package/dist/components/overlapping-stack/overlapping-stack.stories.js +120 -0
- package/dist/components/overlapping-stack/use-overlapping-stack.d.ts +47 -0
- package/dist/components/overlapping-stack/use-overlapping-stack.d.ts.map +1 -0
- package/dist/components/overlapping-stack/use-overlapping-stack.js +47 -0
- package/dist/components/sidebar/sidebar.js +1 -1
- package/dist/components/textarea/textarea.js +1 -1
- package/dist/components/toggle/toggle.d.ts +3 -3
- package/dist/components/toggle/toggle.js +4 -4
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -3
- 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,
|
|
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 =
|
|
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 }:
|
|
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;
|
|
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(
|
|
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,
|
|
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
|
|
13
|
+
readonly default: "h-8 gap-2 px-[calc(--spacing(3)-1px)] text-base sm:text-sm 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-
|
|
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
|
|
15
|
+
readonly sm: "h-7 gap-1.5 rounded-[min(var(--radius-md),12px)] px-[calc(--spacing(2.5)-1px)] text-base sm: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
|
|
16
|
+
default: "h-8 gap-2 px-[calc(--spacing(3)-1px)] text-base sm:text-sm 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-
|
|
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
|
|
18
|
+
sm: "h-7 gap-1.5 rounded-[min(var(--radius-md),12px)] px-[calc(--spacing(2.5)-1px)] text-base sm: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
|
|
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
|
|
38
|
+
default: 'size-3',
|
|
39
39
|
xs: 'size-3',
|
|
40
|
-
sm: 'size-3.5
|
|
41
|
-
lg: '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-
|
|
11
|
-
default: "min-h-8 px-2.5 text-
|
|
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-
|
|
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-
|
|
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)
|
|
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;
|
|
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
|
|
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;
|
|
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,
|
|
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(
|
|
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"}
|
package/dist/components/index.js
CHANGED
|
@@ -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;;
|
|
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-
|
|
11
|
-
default: 'h-
|
|
10
|
+
sm: 'h-7 rounded-[min(var(--radius-md),12px)] px-[calc(--spacing(2.5)-1px)] text-base sm:text-sm',
|
|
11
|
+
default: 'h-8 px-[calc(--spacing(3)-1px)] text-base sm:text-sm',
|
|
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
|
});
|
|
@@ -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,
|
|
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
|
|
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-
|
|
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 @@
|
|
|
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"}
|