@navecss/base-ui 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/README.md +242 -12
  2. package/dist/alert-dialog/index.d.ts +2 -0
  3. package/dist/alert-dialog/index.js +2 -0
  4. package/dist/alert-dialog/parts.generated.d.ts +55 -0
  5. package/dist/alert-dialog/parts.generated.js +14 -0
  6. package/dist/autocomplete/index.d.ts +2 -0
  7. package/dist/autocomplete/index.js +2 -0
  8. package/dist/autocomplete/parts.generated.d.ts +116 -0
  9. package/dist/autocomplete/parts.generated.js +27 -0
  10. package/dist/avatar/index.d.ts +2 -0
  11. package/dist/avatar/index.js +2 -0
  12. package/dist/avatar/parts.generated.d.ts +18 -0
  13. package/dist/avatar/parts.generated.js +6 -0
  14. package/dist/combobox/index.d.ts +2 -0
  15. package/dist/combobox/index.js +2 -0
  16. package/dist/combobox/parts.generated.d.ts +140 -0
  17. package/dist/combobox/parts.generated.js +33 -0
  18. package/dist/context-menu/index.d.ts +2 -0
  19. package/dist/context-menu/index.js +2 -0
  20. package/dist/context-menu/parts.generated.d.ts +104 -0
  21. package/dist/context-menu/parts.generated.js +23 -0
  22. package/dist/dialog/parts.generated.d.ts +1 -0
  23. package/dist/dialog/parts.generated.js +1 -1
  24. package/dist/field/parts.generated.d.ts +1 -0
  25. package/dist/index.d.ts +13 -0
  26. package/dist/index.js +13 -0
  27. package/dist/menu/parts.generated.d.ts +1 -0
  28. package/dist/menu/parts.generated.js +7 -7
  29. package/dist/menubar/index.d.ts +2 -0
  30. package/dist/menubar/index.js +3 -0
  31. package/dist/menubar/parts.generated.d.ts +6 -0
  32. package/dist/menubar/parts.generated.js +5 -0
  33. package/dist/meter/index.d.ts +2 -0
  34. package/dist/meter/index.js +2 -0
  35. package/dist/meter/parts.generated.d.ts +26 -0
  36. package/dist/meter/parts.generated.js +9 -0
  37. package/dist/navigation-menu/index.d.ts +2 -0
  38. package/dist/navigation-menu/index.js +2 -0
  39. package/dist/navigation-menu/parts.generated.d.ts +69 -0
  40. package/dist/navigation-menu/parts.generated.js +17 -0
  41. package/dist/part.d.ts +17 -1
  42. package/dist/part.js +12 -5
  43. package/dist/popover/parts.generated.d.ts +1 -0
  44. package/dist/popover/parts.generated.js +2 -2
  45. package/dist/preview-card/index.d.ts +2 -0
  46. package/dist/preview-card/index.js +2 -0
  47. package/dist/preview-card/parts.generated.d.ts +48 -0
  48. package/dist/preview-card/parts.generated.js +14 -0
  49. package/dist/progress/index.d.ts +2 -0
  50. package/dist/progress/index.js +2 -0
  51. package/dist/progress/parts.generated.d.ts +27 -0
  52. package/dist/progress/parts.generated.js +9 -0
  53. package/dist/scroll-area/index.d.ts +2 -0
  54. package/dist/scroll-area/index.js +2 -0
  55. package/dist/scroll-area/parts.generated.d.ts +31 -0
  56. package/dist/scroll-area/parts.generated.js +10 -0
  57. package/dist/select/parts.generated.js +3 -3
  58. package/dist/separator/index.d.ts +2 -0
  59. package/dist/separator/index.js +3 -0
  60. package/dist/separator/parts.generated.d.ts +6 -0
  61. package/dist/separator/parts.generated.js +5 -0
  62. package/dist/styles.css +129 -0
  63. package/dist/tabs/parts.generated.js +1 -1
  64. package/dist/toast/index.d.ts +2 -0
  65. package/dist/toast/index.js +2 -0
  66. package/dist/toast/parts.generated.d.ts +61 -0
  67. package/dist/toast/parts.generated.js +16 -0
  68. package/dist/toolbar/parts.generated.d.ts +1 -0
  69. package/dist/tooltip/parts.generated.d.ts +1 -0
  70. package/dist/tooltip/parts.generated.js +2 -2
  71. package/package.json +71 -4
package/dist/part.js CHANGED
@@ -3,11 +3,12 @@
3
3
  * The one helper every wrapped part is built with. A wrapped part is Base UI's part with Nave's
4
4
  * class added to its `className` (a string is joined after Nave's class, a function of state is
5
5
  * wrapped, never stringified) and, for the Button family, the typed `variant` and `size` props
6
- * turned into `data-nave-*` attributes. Everything else (every other prop, the ref, `render`) goes
7
- * to Base UI's part untouched, and nothing here reads state, layout or style: what the wrapper adds
8
- * is chosen by the props the consumer passed.
6
+ * turned into `data-nave-*` attributes (as `size` is for an Avatar). Everything else (every other
7
+ * prop, the ref, `render`) goes to Base UI's part untouched, and nothing here reads state, layout
8
+ * or style: what the wrapper adds is chosen by the props the consumer passed.
9
9
  */
10
10
  import { createElement, forwardRef, useMemo, } from 'react';
11
+ const isOffDefault = (size, variants) => size === 'sm' || (variants === 'avatar' && size === 'lg');
11
12
  const join = (own, consumer) => consumer === undefined || consumer === '' ? own : `${own} ${consumer}`;
12
13
  /**
13
14
  * Nave's class composed with the consumer's. The result is memoized on the consumer's own value,
@@ -25,8 +26,9 @@ const variantAttributes = (props, variants) => {
25
26
  const { size, variant, ...rest } = props;
26
27
  return {
27
28
  ...rest,
28
- ...(variants === 'variant' && variant === 'primary' && { 'data-nave-variant': 'primary' }),
29
- ...(size === 'sm' && { 'data-nave-size': 'sm' }),
29
+ ...(variants === 'variant' &&
30
+ (variant === 'primary' || variant === 'ghost') && { 'data-nave-variant': variant }),
31
+ ...(isOffDefault(size, variants) && { 'data-nave-size': size }),
30
32
  };
31
33
  };
32
34
  const build = (part, own, variants) => forwardRef(function NaveBaseUiPart(props, ref) {
@@ -57,3 +59,8 @@ export const wrapVariantPart = (part, className) => wrap(part, className, 'varia
57
59
  * stays absent, as for `wrapPart`.
58
60
  */
59
61
  export const wrapSizePart = (part, className) => wrap(part, className, 'size');
62
+ /**
63
+ * A part that gains `size` with the Avatar's three values. A part the installed Base UI does not
64
+ * have stays absent, as for `wrapPart`.
65
+ */
66
+ export const wrapAvatarPart = (part, className) => wrap(part, className, 'avatar');
@@ -10,6 +10,7 @@ export declare namespace Root {
10
10
  type ChangeEventDetails = Base.Root.ChangeEventDetails;
11
11
  }
12
12
  export declare const Trigger: <Payload>(props: Omit<Base.Trigger.Props<Payload>, 'ref'> & RefAttributes<HTMLElement> & VariantProps) => ReactElement;
13
+ export type Trigger = typeof Trigger;
13
14
  export declare namespace Trigger {
14
15
  type State = Base.Trigger.State;
15
16
  type Props<Payload = unknown> = Base.Trigger.Props<Payload> & VariantProps;
@@ -5,8 +5,8 @@ export const Root = /*#__PURE__*/ (() => Base.Root)();
5
5
  export const Trigger = /*#__PURE__*/ (() => wrapVariantPart(Base.Trigger, 'nave-base-ui-button'))();
6
6
  export const Portal = /*#__PURE__*/ (() => Base.Portal)();
7
7
  export const Positioner = /*#__PURE__*/ (() => Base.Positioner)();
8
- export const Popup = /*#__PURE__*/ (() => wrapPart(Base.Popup, 'nave-base-ui-popover-popup'))();
9
- export const Arrow = /*#__PURE__*/ (() => wrapPart(Base.Arrow, 'nave-base-ui-arrow'))();
8
+ export const Popup = /*#__PURE__*/ (() => wrapPart(Base.Popup, 'nave-base-ui-popover-popup nave-base-ui-popup-motion'))();
9
+ export const Arrow = /*#__PURE__*/ (() => wrapPart(Base.Arrow, 'nave-base-ui-arrow nave-base-ui-arrow-inline'))();
10
10
  export const Backdrop = /*#__PURE__*/ (() => Base.Backdrop)();
11
11
  export const Title = /*#__PURE__*/ (() => wrapPart(Base.Title, 'nave-base-ui-title'))();
12
12
  export const Description = /*#__PURE__*/ (() => wrapPart(Base.Description, 'nave-base-ui-description'))();
@@ -0,0 +1,2 @@
1
+ export * as PreviewCard from './parts.generated.ts';
2
+ export type * from '@base-ui/react/preview-card';
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ export * as PreviewCard from "./parts.generated.js";
@@ -0,0 +1,48 @@
1
+ import { PreviewCard as Base } from '@base-ui/react/preview-card';
2
+ export declare const Root: typeof Base.Root;
3
+ export declare namespace Root {
4
+ type State = Base.Root.State;
5
+ type Props<Payload = unknown> = Base.Root.Props<Payload>;
6
+ type Actions = Base.Root.Actions;
7
+ type ChangeEventReason = Base.Root.ChangeEventReason;
8
+ type ChangeEventDetails = Base.Root.ChangeEventDetails;
9
+ }
10
+ export declare const Portal: typeof Base.Portal;
11
+ export declare namespace Portal {
12
+ type State = Base.Portal.State;
13
+ type Props = Base.Portal.Props;
14
+ }
15
+ export declare const Trigger: typeof Base.Trigger;
16
+ export type Trigger = typeof Trigger;
17
+ export declare namespace Trigger {
18
+ type State = Base.Trigger.State;
19
+ type Props<Payload = unknown> = Base.Trigger.Props<Payload>;
20
+ }
21
+ export declare const Positioner: typeof Base.Positioner;
22
+ export declare namespace Positioner {
23
+ type State = Base.Positioner.State;
24
+ type Props = Base.Positioner.Props;
25
+ }
26
+ export declare const Popup: typeof Base.Popup;
27
+ export declare namespace Popup {
28
+ type State = Base.Popup.State;
29
+ type Props = Base.Popup.Props;
30
+ }
31
+ export declare const Arrow: typeof Base.Arrow;
32
+ export declare namespace Arrow {
33
+ type State = Base.Arrow.State;
34
+ type Props = Base.Arrow.Props;
35
+ }
36
+ export declare const Backdrop: typeof Base.Backdrop;
37
+ export declare namespace Backdrop {
38
+ type State = Base.Backdrop.State;
39
+ type Props = Base.Backdrop.Props;
40
+ }
41
+ export declare const Viewport: typeof Base.Viewport;
42
+ export declare namespace Viewport {
43
+ type Props = Base.Viewport.Props;
44
+ type State = Base.Viewport.State;
45
+ }
46
+ export declare const createHandle: typeof Base.createHandle;
47
+ export declare const Handle: typeof Base.Handle;
48
+ export type Handle<Payload> = Base.Handle<Payload>;
@@ -0,0 +1,14 @@
1
+ 'use client';
2
+ // Generated by scripts/generate-wrappers.ts: change the roster or the generator, not this file.
3
+ import { PreviewCard as Base } from '@base-ui/react/preview-card';
4
+ import { wrapPart } from "../part.js";
5
+ export const Root = /*#__PURE__*/ (() => Base.Root)();
6
+ export const Portal = /*#__PURE__*/ (() => Base.Portal)();
7
+ export const Trigger = /*#__PURE__*/ (() => Base.Trigger)();
8
+ export const Positioner = /*#__PURE__*/ (() => Base.Positioner)();
9
+ export const Popup = /*#__PURE__*/ (() => wrapPart(Base.Popup, 'nave-base-ui-popover-popup nave-base-ui-popup-fade'))();
10
+ export const Arrow = /*#__PURE__*/ (() => wrapPart(Base.Arrow, 'nave-base-ui-arrow nave-base-ui-arrow-inline'))();
11
+ export const Backdrop = /*#__PURE__*/ (() => Base.Backdrop)();
12
+ export const Viewport = /*#__PURE__*/ (() => Base.Viewport)();
13
+ export const createHandle = /*#__PURE__*/ (() => Base.createHandle)();
14
+ export const Handle = /*#__PURE__*/ (() => Base.Handle)();
@@ -0,0 +1,2 @@
1
+ export * as Progress from './parts.generated.ts';
2
+ export type * from '@base-ui/react/progress';
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ export * as Progress from "./parts.generated.js";
@@ -0,0 +1,27 @@
1
+ import { Progress as Base } from '@base-ui/react/progress';
2
+ export declare const Root: typeof Base.Root;
3
+ export declare namespace Root {
4
+ type State = Base.Root.State;
5
+ type Props = Base.Root.Props;
6
+ }
7
+ export declare const Track: typeof Base.Track;
8
+ export declare namespace Track {
9
+ type State = Base.Track.State;
10
+ type Props = Base.Track.Props;
11
+ }
12
+ export declare const Indicator: typeof Base.Indicator;
13
+ export declare namespace Indicator {
14
+ type State = Base.Indicator.State;
15
+ type Props = Base.Indicator.Props;
16
+ }
17
+ export declare const Value: typeof Base.Value;
18
+ export declare namespace Value {
19
+ type State = Base.Value.State;
20
+ type Props = Base.Value.Props;
21
+ }
22
+ export declare const Label: typeof Base.Label;
23
+ export declare namespace Label {
24
+ type State = Base.Label.State;
25
+ type Props = Base.Label.Props;
26
+ }
27
+ export type Status = Base.Status;
@@ -0,0 +1,9 @@
1
+ 'use client';
2
+ // Generated by scripts/generate-wrappers.ts: change the roster or the generator, not this file.
3
+ import { Progress as Base } from '@base-ui/react/progress';
4
+ import { wrapPart } from "../part.js";
5
+ export const Root = /*#__PURE__*/ (() => wrapPart(Base.Root, 'nave-base-ui-value-bar'))();
6
+ export const Track = /*#__PURE__*/ (() => wrapPart(Base.Track, 'nave-base-ui-value-bar-track'))();
7
+ export const Indicator = /*#__PURE__*/ (() => wrapPart(Base.Indicator, 'nave-base-ui-value-bar-indicator'))();
8
+ export const Value = /*#__PURE__*/ (() => wrapPart(Base.Value, 'nave-base-ui-slider-value'))();
9
+ export const Label = /*#__PURE__*/ (() => wrapPart(Base.Label, 'nave-base-ui-label'))();
@@ -0,0 +1,2 @@
1
+ export * as ScrollArea from './parts.generated.ts';
2
+ export type * from '@base-ui/react/scroll-area';
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ export * as ScrollArea from "./parts.generated.js";
@@ -0,0 +1,31 @@
1
+ import { ScrollArea as Base } from '@base-ui/react/scroll-area';
2
+ export declare const Root: typeof Base.Root;
3
+ export declare namespace Root {
4
+ type State = Base.Root.State;
5
+ type Props = Base.Root.Props;
6
+ }
7
+ export declare const Viewport: typeof Base.Viewport;
8
+ export declare namespace Viewport {
9
+ type Props = Base.Viewport.Props;
10
+ type State = Base.Viewport.State;
11
+ }
12
+ export declare const Scrollbar: typeof Base.Scrollbar;
13
+ export declare namespace Scrollbar {
14
+ type State = Base.Scrollbar.State;
15
+ type Props = Base.Scrollbar.Props;
16
+ }
17
+ export declare const Content: typeof Base.Content;
18
+ export declare namespace Content {
19
+ type State = Base.Content.State;
20
+ type Props = Base.Content.Props;
21
+ }
22
+ export declare const Thumb: typeof Base.Thumb;
23
+ export declare namespace Thumb {
24
+ type State = Base.Thumb.State;
25
+ type Props = Base.Thumb.Props;
26
+ }
27
+ export declare const Corner: typeof Base.Corner;
28
+ export declare namespace Corner {
29
+ type State = Base.Corner.State;
30
+ type Props = Base.Corner.Props;
31
+ }
@@ -0,0 +1,10 @@
1
+ 'use client';
2
+ // Generated by scripts/generate-wrappers.ts: change the roster or the generator, not this file.
3
+ import { ScrollArea as Base } from '@base-ui/react/scroll-area';
4
+ import { wrapPart } from "../part.js";
5
+ export const Root = /*#__PURE__*/ (() => wrapPart(Base.Root, 'nave-base-ui-scroll-area'))();
6
+ export const Viewport = /*#__PURE__*/ (() => wrapPart(Base.Viewport, 'nave-base-ui-scroll-area-viewport'))();
7
+ export const Scrollbar = /*#__PURE__*/ (() => wrapPart(Base.Scrollbar, 'nave-base-ui-scroll-area-scrollbar'))();
8
+ export const Content = /*#__PURE__*/ (() => Base.Content)();
9
+ export const Thumb = /*#__PURE__*/ (() => wrapPart(Base.Thumb, 'nave-base-ui-scroll-area-thumb'))();
10
+ export const Corner = /*#__PURE__*/ (() => wrapPart(Base.Corner, 'nave-base-ui-scroll-area-corner'))();
@@ -10,12 +10,12 @@ export const Icon = /*#__PURE__*/ (() => wrapPart(Base.Icon, 'nave-base-ui-selec
10
10
  export const Portal = /*#__PURE__*/ (() => Base.Portal)();
11
11
  export const Backdrop = /*#__PURE__*/ (() => Base.Backdrop)();
12
12
  export const Positioner = /*#__PURE__*/ (() => Base.Positioner)();
13
- export const Popup = /*#__PURE__*/ (() => wrapPart(Base.Popup, 'nave-base-ui-list-popup'))();
13
+ export const Popup = /*#__PURE__*/ (() => wrapPart(Base.Popup, 'nave-base-ui-list-popup nave-base-ui-popup-fade'))();
14
14
  export const List = /*#__PURE__*/ (() => Base.List)();
15
- export const Item = /*#__PURE__*/ (() => wrapPart(Base.Item, 'nave-base-ui-item'))();
15
+ export const Item = /*#__PURE__*/ (() => wrapPart(Base.Item, 'nave-base-ui-item nave-base-ui-item-highlight'))();
16
16
  export const ItemIndicator = /*#__PURE__*/ (() => Base.ItemIndicator)();
17
17
  export const ItemText = /*#__PURE__*/ (() => Base.ItemText)();
18
- export const Arrow = /*#__PURE__*/ (() => wrapPart(Base.Arrow, 'nave-base-ui-arrow'))();
18
+ export const Arrow = /*#__PURE__*/ (() => wrapPart(Base.Arrow, 'nave-base-ui-arrow nave-base-ui-arrow-inline'))();
19
19
  export const ScrollDownArrow = /*#__PURE__*/ (() => Base.ScrollDownArrow)();
20
20
  export const ScrollUpArrow = /*#__PURE__*/ (() => Base.ScrollUpArrow)();
21
21
  export const Group = /*#__PURE__*/ (() => Base.Group)();
@@ -0,0 +1,2 @@
1
+ export { Separator } from './parts.generated.ts';
2
+ export type * from '@base-ui/react/separator';
@@ -0,0 +1,3 @@
1
+ 'use client';
2
+ /* eslint-disable import-x/export -- the named export wins over the star re-export, as TypeScript has it */
3
+ export { Separator } from "./parts.generated.js";
@@ -0,0 +1,6 @@
1
+ import { Separator as Base } from '@base-ui/react/separator';
2
+ export declare const Separator: typeof Base;
3
+ export declare namespace Separator {
4
+ type Props = Base.Props;
5
+ type State = Base.State;
6
+ }
@@ -0,0 +1,5 @@
1
+ 'use client';
2
+ // Generated by scripts/generate-wrappers.ts: change the roster or the generator, not this file.
3
+ import { Separator as Base } from '@base-ui/react/separator';
4
+ import { wrapPart } from "../part.js";
5
+ export const Separator = /*#__PURE__*/ (() => wrapPart(Base, 'nave-base-ui-toolbar-separator'))();
package/dist/styles.css CHANGED
@@ -75,6 +75,10 @@
75
75
  } &[data-nave-variant="primary"]:hover:not(:disabled, [aria-disabled="true"]){ background-color: var(--nave-color-action-primary-hover);
76
76
  } &[data-nave-variant="primary"]:active:not(:disabled, [aria-disabled="true"]){ background-color: var(--nave-color-action-primary-active);
77
77
  } &:disabled, &[aria-disabled="true"]{ background-color: transparent; border-color: var(--nave-color-border-disabled); color: var(--nave-color-content-disabled); cursor: not-allowed;
78
+ } &[data-nave-variant="ghost"]{ background-color: transparent; border-color: transparent;
79
+ } &[data-nave-variant="ghost"]:hover:not(:disabled, [aria-disabled="true"]){ background-color: var(--nave-color-action-highlight);
80
+ } &[data-nave-variant="ghost"]:active:not(:disabled, [aria-disabled="true"]){ background-color: var(--nave-color-action-highlight);
81
+ } &[data-nave-variant="ghost"][aria-expanded="true"]:not(:disabled, [aria-disabled="true"]){ background-color: var(--nave-color-action-highlight);
78
82
  } &:focus-visible{ outline-style: solid; outline-width: var(--nave-border-width-focus, 2px); outline-color: var(--nave-color-border-focus, currentColor); outline-offset: 2px;
79
83
  } }
80
84
  .nave-base-ui-toggle { box-sizing: border-box; display: inline-flex; align-items: center; justify-content: center; gap: var(--nave-spacing-control-sm); min-block-size: var(--nave-size-control-md); padding-block: 0; padding-inline: var(--nave-spacing-control-lg); border: var(--nave-border-width-sm) solid var(--nave-color-border-control); border-radius: var(--nave-radius-control); background-color: var(--nave-color-action-secondary); color: var(--nave-color-content-primary); font-family: inherit; font-size: var(--nave-font-size-sm); font-weight: var(--nave-font-weight-medium); line-height: var(--nave-line-height-tight); white-space: nowrap; cursor: pointer; user-select: none; position: relative; outline: none; &[data-nave-size="sm"]{ min-block-size: var(--nave-size-control-sm); padding-inline: var(--nave-spacing-control-md);
@@ -158,4 +162,129 @@
158
162
  } &[data-disabled]{ color: var(--nave-color-content-disabled); cursor: not-allowed;
159
163
  } }
160
164
  .nave-base-ui-slider-value { font-size: var(--nave-font-size-sm); font-variant-numeric: tabular-nums; color: var(--nave-color-content-secondary); }
165
+ .nave-base-ui-item-highlight { border-radius: var(--nave-radius-sm); &[data-highlighted]:not([aria-disabled="true"]){ background-color: var(--nave-color-action-highlight);
166
+ } }
167
+ .nave-base-ui-active-option { position: relative; &[data-highlighted]::before{ content: ""; position: absolute; inset: calc(-1 * (var(--nave-border-width-focus, 2px) + 2px)); border-style: solid; border-width: var(--nave-border-width-focus, 2px); border-color: var(--nave-color-border-focus, currentColor); border-radius: calc(var(--nave-radius-sm) + var(--nave-border-width-focus, 2px) + 2px); pointer-events: none;
168
+ } }
169
+ .nave-base-ui-backdrop { position: fixed; inset: 0; background-color: var(--nave-color-backdrop-modal); transition-property: opacity; transition-duration: var(--nave-motion-duration-fast); transition-timing-function: var(--nave-motion-easing-decelerate); &[data-starting-style], &[data-ending-style]{ opacity: 0;
170
+ } &[data-ending-style]{ transition-timing-function: var(--nave-motion-easing-accelerate);
171
+ } @media (prefers-reduced-motion: reduce){
172
+
173
+ &, &[data-instant]{ transition-duration: calc(0 * var(--nave-motion-duration-fast));
174
+ }
175
+ } }
176
+ .nave-base-ui-popup-motion { transition-property: opacity; transition-duration: var(--nave-motion-duration-fast); transition-timing-function: var(--nave-motion-easing-decelerate); &[data-starting-style], &[data-ending-style]{ opacity: 0;
177
+ } &[data-ending-style]{ transition-timing-function: var(--nave-motion-easing-accelerate);
178
+ } &[data-instant]{ transition-duration: var(--nave-motion-duration-instant);
179
+ } @media (prefers-reduced-motion: reduce){
180
+
181
+ &, &[data-instant]{ transition-duration: calc(0 * var(--nave-motion-duration-fast));
182
+ }
183
+ } }
184
+ .nave-base-ui-popup-fade { transition-property: opacity; transition-duration: var(--nave-motion-duration-fast); transition-timing-function: var(--nave-motion-easing-decelerate); &[data-starting-style], &[data-ending-style]{ opacity: 0;
185
+ } &[data-ending-style]{ transition-timing-function: var(--nave-motion-easing-accelerate);
186
+ } @media (prefers-reduced-motion: reduce){
187
+
188
+ &, &[data-instant]{ transition-duration: calc(0 * var(--nave-motion-duration-fast));
189
+ }
190
+ } }
191
+ .nave-base-ui-tooltip-motion { transition-property: opacity; transition-duration: var(--nave-motion-duration-fast); transition-timing-function: var(--nave-motion-easing-decelerate); &[data-starting-style], &[data-ending-style]{ opacity: 0;
192
+ } &[data-ending-style]{ transition-timing-function: var(--nave-motion-easing-accelerate);
193
+ } &[data-instant]{ transition-duration: var(--nave-motion-duration-instant);
194
+ } @media (prefers-reduced-motion: reduce){
195
+
196
+ &, &[data-instant]{ transition-duration: calc(0 * var(--nave-motion-duration-fast));
197
+ }
198
+ } }
199
+ .nave-base-ui-tab-indicator-motion { transition-property: left, top, width, height; transition-duration: var(--nave-motion-duration-base); transition-timing-function: var(--nave-motion-easing-standard); @media (prefers-reduced-motion: reduce){
200
+
201
+ &, &[data-instant]{ transition-duration: calc(0 * var(--nave-motion-duration-fast));
202
+ }
203
+ } }
204
+ .nave-base-ui-arrow-inline {
205
+
206
+ &[data-side="inline-start"], &[data-side="inline-end"]{ position: absolute; box-sizing: border-box; inline-size: 8px; block-size: 8px; background-color: inherit; border-style: inherit; border-width: inherit; border-color: inherit; border-top-style: none; border-left-style: none;
207
+ }
208
+
209
+ &[data-side="inline-start"]{ inset-inline-end: -4px; rotate: -45deg;
210
+ }
211
+
212
+ &[data-side="inline-end"]{ inset-inline-start: -4px; rotate: 135deg;
213
+ }
214
+
215
+ &[data-side="inline-start"]:dir(rtl){ rotate: 135deg;
216
+ }
217
+
218
+ &[data-side="inline-end"]:dir(rtl){ rotate: -45deg;
219
+ } }
220
+ .nave-base-ui-input-group { box-sizing: border-box; display: flex; align-items: stretch; min-block-size: var(--nave-size-control-md); border: var(--nave-border-width-sm) solid var(--nave-color-border-control); border-radius: var(--nave-radius-control); background-color: transparent; color: var(--nave-color-content-primary); &[data-invalid]:not([data-disabled]){ border-color: var(--nave-color-feedback-danger); border-width: var(--nave-border-width-mark);
221
+ } &[data-disabled]{ border-color: var(--nave-color-border-disabled); color: var(--nave-color-content-disabled);
222
+ } }
223
+ .nave-base-ui-combobox-trigger { box-sizing: border-box; display: inline-flex; align-items: center; justify-content: center; flex: none; inline-size: var(--nave-size-control-sm); padding: 0; border: 0; background-color: transparent; color: inherit; font-family: inherit; cursor: pointer; outline: none; &[aria-haspopup="dialog"]{ inline-size: auto; min-block-size: var(--nave-size-control-md); justify-content: space-between; gap: var(--nave-spacing-control-sm); padding-inline: var(--nave-spacing-control-md); border: var(--nave-border-width-sm) solid var(--nave-color-border-control); border-radius: var(--nave-radius-control); color: var(--nave-color-content-primary); font-size: var(--nave-font-size-sm); text-align: start;
224
+ } &[aria-haspopup="dialog"][aria-invalid="true"]{ border-color: var(--nave-color-feedback-danger); border-width: var(--nave-border-width-mark); padding-inline: calc(var(--nave-spacing-control-md) - var(--nave-border-width-mark) + var(--nave-border-width-sm));
225
+ } &:disabled, &[aria-disabled="true"]{ color: var(--nave-color-content-disabled); cursor: not-allowed;
226
+ } &[aria-haspopup="dialog"]:disabled, &[aria-haspopup="dialog"][aria-disabled="true"]{ border-color: var(--nave-color-border-disabled);
227
+ } &:focus-visible{ outline-style: solid; outline-width: var(--nave-border-width-focus, 2px); outline-color: var(--nave-color-border-focus, currentColor); outline-offset: 2px;
228
+ } }
229
+ .nave-base-ui-chips { display: flex; flex-wrap: wrap; align-items: center; flex: 1; min-inline-size: 0; gap: var(--nave-spacing-control-sm); padding: var(--nave-spacing-control-sm); }
230
+ .nave-base-ui-chip { box-sizing: border-box; display: inline-flex; align-items: center; gap: var(--nave-spacing-control-xs); min-block-size: calc(var(--nave-size-control-xs) + 2 * var(--nave-border-width-sm)); padding-inline: var(--nave-spacing-control-sm) var(--nave-spacing-control-xs); border: var(--nave-border-width-sm) solid var(--nave-color-border-control); border-radius: var(--nave-radius-control); background-color: transparent; color: var(--nave-color-content-primary); font-size: var(--nave-font-size-sm); line-height: var(--nave-line-height-tight); cursor: default; outline: none; &[aria-disabled="true"]{ border-color: var(--nave-color-border-disabled); color: var(--nave-color-content-disabled);
231
+ } &:focus-visible{ outline-style: solid; outline-width: var(--nave-border-width-focus, 2px); outline-color: var(--nave-color-border-focus, currentColor); outline-offset: 2px;
232
+ } }
233
+ .nave-base-ui-chip-remove { display: inline-flex; align-items: center; justify-content: center; flex: none; align-self: stretch; inline-size: var(--nave-size-control-xs); padding: 0; border: 0; background-color: transparent; color: inherit; font-family: inherit; cursor: pointer; &:disabled, &[aria-disabled="true"]{ color: var(--nave-color-content-disabled); cursor: not-allowed;
234
+ } }
235
+ .nave-base-ui-list-empty { font-size: var(--nave-font-size-sm); color: var(--nave-color-content-secondary); [data-empty] > &{ padding: var(--nave-spacing-control-sm) var(--nave-spacing-control-md);
236
+ } }
237
+ .nave-base-ui-toast-viewport { display: flex; flex-direction: column; gap: var(--nave-spacing-content-sm); }
238
+ .nave-base-ui-toast-placement { position: fixed; inset-block-end: var(--nave-spacing-content-lg); inset-inline-end: var(--nave-spacing-content-lg); inline-size: 20rem; max-inline-size: calc(100% - 2 * var(--nave-spacing-content-lg)); z-index: var(--nave-layer-toast); }
239
+ .nave-base-ui-toast-root { box-sizing: border-box; background-color: var(--nave-color-surface-overlay); color: var(--nave-color-content-primary); border: var(--nave-border-width-sm) solid var(--nave-color-border-default); border-radius: var(--nave-radius-card); box-shadow: var(--nave-shadow-overlay); padding: var(--nave-spacing-content-md); font-size: var(--nave-font-size-sm); }
240
+ .nave-base-ui-toast-fade { transition-property: opacity; transition-duration: var(--nave-motion-duration-fast); transition-timing-function: var(--nave-motion-easing-decelerate); &[data-starting-style], &[data-ending-style]:not([data-swipe-direction]){ opacity: 0;
241
+ } &[data-ending-style]{ transition-timing-function: var(--nave-motion-easing-accelerate);
242
+ } @media (prefers-reduced-motion: reduce){
243
+
244
+ &{ transition-duration: calc(0 * var(--nave-motion-duration-fast));
245
+ }
246
+ } }
247
+ .nave-base-ui-toast-limit {
248
+
249
+ &[data-limited]{ display: none;
250
+ } }
251
+ .nave-base-ui-navigation-menu-list { display: flex; align-items: center; gap: var(--nave-spacing-control-xs); margin: 0; padding: 0; list-style: none; }
252
+ .nave-base-ui-navigation-menu-trigger { box-sizing: border-box; display: inline-flex; align-items: center; justify-content: center; gap: var(--nave-spacing-control-sm); min-block-size: var(--nave-size-control-md); padding-block: 0; padding-inline: var(--nave-spacing-control-lg); border: var(--nave-border-width-sm) solid transparent; border-radius: var(--nave-radius-control); background-color: transparent; color: var(--nave-color-content-primary); font-family: inherit; font-size: var(--nave-font-size-sm); font-weight: var(--nave-font-weight-medium); line-height: var(--nave-line-height-tight); white-space: nowrap; cursor: pointer; user-select: none; outline: none; &:hover:not(:disabled, [aria-disabled="true"]), &:active:not(:disabled, [aria-disabled="true"]){ background-color: var(--nave-color-action-highlight);
253
+ } &:focus-visible{ outline-style: solid; outline-width: var(--nave-border-width-focus, 2px); outline-color: var(--nave-color-border-focus, currentColor); outline-offset: 2px;
254
+ } }
255
+ .nave-base-ui-navigation-menu-icon { display: inline-flex; flex: none; transition-property: rotate; transition-duration: var(--nave-motion-duration-fast); transition-timing-function: var(--nave-motion-easing-standard); [aria-expanded="true"] > &{ rotate: 180deg;
256
+ } @media (prefers-reduced-motion: reduce){
257
+
258
+ &{ transition-duration: calc(0 * var(--nave-motion-duration-fast));
259
+ }
260
+ } }
261
+ .nave-base-ui-navigation-menu-fade { transition-property: opacity; transition-duration: var(--nave-motion-duration-fast); transition-timing-function: var(--nave-motion-easing-decelerate); &[data-starting-style], &[data-ending-style]{ opacity: 0;
262
+ } &[data-ending-style]{ transition-property: none;
263
+ } @media (prefers-reduced-motion: reduce){
264
+
265
+ &{ transition-duration: calc(0 * var(--nave-motion-duration-fast));
266
+ }
267
+ } }
268
+ .nave-base-ui-current-link { padding-block: var(--nave-border-width-lg); &[aria-current="page"]{ text-decoration-line: underline; text-decoration-thickness: var(--nave-border-width-lg);
269
+ } }
270
+ .nave-base-ui-scroll-area { display: flex; flex-direction: column; }
271
+ .nave-base-ui-scroll-area-viewport { box-sizing: border-box; flex: 1; min-block-size: 0; padding: var(--nave-spacing-control-xs); scroll-padding: var(--nave-spacing-control-xs); &[data-has-overflow-y]{ padding-inline-end: calc(var(--nave-size-control-xs) + var(--nave-spacing-control-xs)); scroll-padding-inline-end: calc(var(--nave-size-control-xs) + var(--nave-spacing-control-xs));
272
+ } &[data-has-overflow-x]{ padding-block-end: calc(var(--nave-size-control-xs) + var(--nave-spacing-control-xs)); scroll-padding-block-end: calc(var(--nave-size-control-xs) + var(--nave-spacing-control-xs));
273
+ } }
274
+ .nave-base-ui-scroll-area-scrollbar { box-sizing: border-box; background-color: var(--nave-color-surface-base); &[data-orientation="vertical"]{ inline-size: var(--nave-size-control-xs); padding-inline: calc((var(--nave-size-control-xs) - var(--nave-border-width-lg)) / 2);
275
+ } &[data-orientation="horizontal"]{ block-size: var(--nave-size-control-xs); padding-block: calc((var(--nave-size-control-xs) - var(--nave-border-width-lg)) / 2);
276
+ } }
277
+ .nave-base-ui-scroll-area-thumb { box-sizing: border-box; border-radius: var(--nave-radius-full); &[data-orientation="vertical"]{ border-inline: calc(var(--nave-border-width-lg) / 2) solid var(--nave-color-border-control);
278
+ } &[data-orientation="horizontal"]{ block-size: 100%; border-block: calc(var(--nave-border-width-lg) / 2) solid var(--nave-color-border-control);
279
+ } }
280
+ .nave-base-ui-scroll-area-corner { background-color: var(--nave-color-surface-base); }
281
+ .nave-base-ui-value-bar { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--nave-spacing-control-xs); }
282
+ .nave-base-ui-value-bar-track { box-sizing: border-box; flex: 0 0 100%; min-block-size: calc(var(--nave-border-width-lg) + 4 * var(--nave-border-width-sm)); padding: var(--nave-border-width-sm); border: var(--nave-border-width-sm) solid var(--nave-color-border-control); border-radius: var(--nave-radius-full); display: flex; align-items: center; }
283
+ .nave-base-ui-value-bar-indicator { box-sizing: border-box; max-block-size: var(--nave-border-width-lg); border-block: calc(var(--nave-border-width-lg) / 2) solid currentColor; border-radius: var(--nave-radius-full); color: var(--nave-color-content-primary); &[data-indeterminate]{ display: none;
284
+ } }
285
+ .nave-base-ui-avatar { box-sizing: border-box; display: inline-flex; align-items: center; justify-content: center; flex: none; vertical-align: middle; border: var(--nave-border-width-sm) solid var(--nave-color-border-default); border-radius: var(--nave-radius-full); inline-size: var(--nave-size-avatar-md); block-size: var(--nave-size-avatar-md); font-size: var(--nave-font-size-sm); font-weight: var(--nave-font-weight-medium); line-height: var(--nave-line-height-none); &[data-nave-size="sm"]{ inline-size: var(--nave-size-avatar-sm); block-size: var(--nave-size-avatar-sm); font-size: var(--nave-font-size-xs);
286
+ } &[data-nave-size="lg"]{ inline-size: var(--nave-size-avatar-lg); block-size: var(--nave-size-avatar-lg); font-size: var(--nave-font-size-xl);
287
+ } }
288
+ .nave-base-ui-avatar-image { inline-size: 100%; block-size: 100%; object-fit: cover; border-radius: inherit; }
289
+ .nave-base-ui-avatar-fallback { display: flex; align-items: center; justify-content: center; inline-size: 100%; block-size: 100%; border-radius: inherit; background-color: var(--nave-color-surface-sunken); color: var(--nave-color-content-primary); }
161
290
  }
@@ -4,6 +4,6 @@ import { Tabs as Base } from '@base-ui/react/tabs';
4
4
  import { wrapPart } from "../part.js";
5
5
  export const Root = /*#__PURE__*/ (() => Base.Root)();
6
6
  export const Tab = /*#__PURE__*/ (() => wrapPart(Base.Tab, 'nave-base-ui-tab'))();
7
- export const Indicator = /*#__PURE__*/ (() => wrapPart(Base.Indicator, 'nave-base-ui-tab-indicator'))();
7
+ export const Indicator = /*#__PURE__*/ (() => wrapPart(Base.Indicator, 'nave-base-ui-tab-indicator nave-base-ui-tab-indicator-motion'))();
8
8
  export const Panel = /*#__PURE__*/ (() => Base.Panel)();
9
9
  export const List = /*#__PURE__*/ (() => wrapPart(Base.List, 'nave-base-ui-tab-list'))();
@@ -0,0 +1,2 @@
1
+ export * as Toast from './parts.generated.ts';
2
+ export type * from '@base-ui/react/toast';
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ export * as Toast from "./parts.generated.js";
@@ -0,0 +1,61 @@
1
+ import type { ReactElement, RefAttributes } from 'react';
2
+ import { Toast as Base } from '@base-ui/react/toast';
3
+ import { type VariantProps } from '../part.ts';
4
+ export declare const Provider: typeof Base.Provider;
5
+ export declare namespace Provider {
6
+ type State = Base.Provider.State;
7
+ type Props = Base.Provider.Props;
8
+ }
9
+ export declare const Viewport: typeof Base.Viewport;
10
+ export declare namespace Viewport {
11
+ type State = Base.Viewport.State;
12
+ type Props = Base.Viewport.Props;
13
+ }
14
+ export declare const Root: typeof Base.Root;
15
+ export declare namespace Root {
16
+ type ToastObject<Data extends object = any> = Base.Root.ToastObject<Data>;
17
+ type State = Base.Root.State;
18
+ type Props = Base.Root.Props;
19
+ }
20
+ export declare const Content: typeof Base.Content;
21
+ export declare namespace Content {
22
+ type State = Base.Content.State;
23
+ type Props = Base.Content.Props;
24
+ }
25
+ export declare const Description: typeof Base.Description;
26
+ export declare namespace Description {
27
+ type State = Base.Description.State;
28
+ type Props = Base.Description.Props;
29
+ }
30
+ export declare const Title: typeof Base.Title;
31
+ export declare namespace Title {
32
+ type State = Base.Title.State;
33
+ type Props = Base.Title.Props;
34
+ }
35
+ export declare const Close: (props: Omit<Base.Close.Props, 'ref'> & RefAttributes<HTMLButtonElement> & VariantProps) => ReactElement;
36
+ export declare namespace Close {
37
+ type State = Base.Close.State;
38
+ type Props = Base.Close.Props & VariantProps;
39
+ }
40
+ export declare const Action: (props: Omit<Base.Action.Props, 'ref'> & RefAttributes<HTMLButtonElement> & VariantProps) => ReactElement;
41
+ export declare namespace Action {
42
+ type State = Base.Action.State;
43
+ type Props = Base.Action.Props & VariantProps;
44
+ }
45
+ export declare const Portal: typeof Base.Portal;
46
+ export declare namespace Portal {
47
+ type State = Base.Portal.State;
48
+ type Props = Base.Portal.Props;
49
+ }
50
+ export declare const Positioner: typeof Base.Positioner;
51
+ export declare namespace Positioner {
52
+ type State = Base.Positioner.State;
53
+ type Props = Base.Positioner.Props;
54
+ }
55
+ export declare const Arrow: typeof Base.Arrow;
56
+ export declare namespace Arrow {
57
+ type State = Base.Arrow.State;
58
+ type Props = Base.Arrow.Props;
59
+ }
60
+ export declare const useToastManager: typeof Base.useToastManager;
61
+ export declare const createToastManager: typeof Base.createToastManager;
@@ -0,0 +1,16 @@
1
+ 'use client';
2
+ import { Toast as Base } from '@base-ui/react/toast';
3
+ import { wrapPart, wrapVariantPart } from "../part.js";
4
+ export const Provider = /*#__PURE__*/ (() => Base.Provider)();
5
+ export const Viewport = /*#__PURE__*/ (() => wrapPart(Base.Viewport, 'nave-base-ui-toast-viewport nave-base-ui-toast-placement'))();
6
+ export const Root = /*#__PURE__*/ (() => wrapPart(Base.Root, 'nave-base-ui-toast-root nave-base-ui-toast-fade nave-base-ui-toast-limit'))();
7
+ export const Content = /*#__PURE__*/ (() => Base.Content)();
8
+ export const Description = /*#__PURE__*/ (() => wrapPart(Base.Description, 'nave-base-ui-description'))();
9
+ export const Title = /*#__PURE__*/ (() => wrapPart(Base.Title, 'nave-base-ui-title'))();
10
+ export const Close = /*#__PURE__*/ (() => wrapVariantPart(Base.Close, 'nave-base-ui-button'))();
11
+ export const Action = /*#__PURE__*/ (() => wrapVariantPart(Base.Action, 'nave-base-ui-button'))();
12
+ export const Portal = /*#__PURE__*/ (() => Base.Portal)();
13
+ export const Positioner = /*#__PURE__*/ (() => Base.Positioner)();
14
+ export const Arrow = /*#__PURE__*/ (() => wrapPart(Base.Arrow, 'nave-base-ui-arrow nave-base-ui-arrow-inline'))();
15
+ export const useToastManager = /*#__PURE__*/ (() => Base.useToastManager)();
16
+ export const createToastManager = /*#__PURE__*/ (() => Base.createToastManager)();
@@ -33,3 +33,4 @@ export declare namespace Input {
33
33
  type State = Base.Input.State;
34
34
  type Props = Base.Input.Props;
35
35
  }
36
+ export type Orientation = Base.Orientation;
@@ -10,6 +10,7 @@ export declare namespace Root {
10
10
  type ChangeEventDetails = Base.Root.ChangeEventDetails;
11
11
  }
12
12
  export declare const Trigger: <Payload>(props: Omit<Base.Trigger.Props<Payload>, 'ref'> & RefAttributes<HTMLElement> & VariantProps) => ReactElement;
13
+ export type Trigger = typeof Trigger;
13
14
  export declare namespace Trigger {
14
15
  type State = Base.Trigger.State;
15
16
  type Props<Payload = unknown> = Base.Trigger.Props<Payload> & VariantProps;
@@ -5,8 +5,8 @@ export const Root = /*#__PURE__*/ (() => Base.Root)();
5
5
  export const Trigger = /*#__PURE__*/ (() => wrapVariantPart(Base.Trigger, 'nave-base-ui-button'))();
6
6
  export const Portal = /*#__PURE__*/ (() => Base.Portal)();
7
7
  export const Positioner = /*#__PURE__*/ (() => Base.Positioner)();
8
- export const Popup = /*#__PURE__*/ (() => wrapPart(Base.Popup, 'nave-base-ui-tooltip-popup'))();
9
- export const Arrow = /*#__PURE__*/ (() => wrapPart(Base.Arrow, 'nave-base-ui-arrow'))();
8
+ export const Popup = /*#__PURE__*/ (() => wrapPart(Base.Popup, 'nave-base-ui-tooltip-popup nave-base-ui-tooltip-motion'))();
9
+ export const Arrow = /*#__PURE__*/ (() => wrapPart(Base.Arrow, 'nave-base-ui-arrow nave-base-ui-arrow-inline'))();
10
10
  export const Provider = /*#__PURE__*/ (() => Base.Provider)();
11
11
  export const Viewport = /*#__PURE__*/ (() => Base.Viewport)();
12
12
  export const createHandle = /*#__PURE__*/ (() => Base.createHandle)();