@nadicodeai/ui 6.6.0 → 6.6.2
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/components/action-status.d.ts.map +1 -1
- package/dist/components/action-status.js +3 -2
- package/dist/components/dropdown-menu.d.ts +4 -1
- package/dist/components/dropdown-menu.d.ts.map +1 -1
- package/dist/components/dropdown-menu.js +6 -3
- package/dist/eslint/index.js +2 -0
- package/dist/eslint/rules/menu-command-owner.js +45 -0
- package/docs/activity.md +4 -0
- package/docs/contract.md +18 -4
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-status.d.ts","sourceRoot":"","sources":["../../src/components/action-status.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"action-status.d.ts","sourceRoot":"","sources":["../../src/components/action-status.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,UAAU,iBAAiB;IACzB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AACD,iBAAS,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAe,EAAE,EAAE,iBAAiB,+BAapF;AACD,OAAO,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { CheckIcon
|
|
2
|
+
import { CheckIcon } from "lucide-react";
|
|
3
|
+
import { ActivityOrb } from "./activity-orb.js";
|
|
3
4
|
function ActionStatus({ state, idle, busy, done, idleIcon = null }) {
|
|
4
|
-
return (_jsxs(_Fragment, { children: [state === "saving" ? (_jsx(
|
|
5
|
+
return (_jsxs(_Fragment, { children: [state === "saving" ? (_jsx(ActivityOrb, { activity: "processing", "data-icon": "inline-start", decorative: true })) : state === "done" ? (_jsx(CheckIcon, { "aria-hidden": "true", "data-icon": "inline-start" })) : (idleIcon), state === "saving" ? busy : state === "done" ? done : idle] }));
|
|
5
6
|
}
|
|
6
7
|
export { ActionStatus };
|
|
@@ -15,6 +15,9 @@ declare function DropdownMenuItem({ className, iconOnly, inset, variant, ...prop
|
|
|
15
15
|
inset?: boolean;
|
|
16
16
|
variant?: "default" | "destructive";
|
|
17
17
|
}): React.JSX.Element;
|
|
18
|
+
declare function DropdownMenuCommand({ icon, children, className, ...props }: Omit<React.ComponentProps<typeof DropdownMenuItem>, "iconOnly"> & {
|
|
19
|
+
icon: React.ReactElement;
|
|
20
|
+
}): React.JSX.Element;
|
|
18
21
|
declare function DropdownMenuSub({ ...props }: MenuPrimitive.SubmenuRoot.Props): React.JSX.Element;
|
|
19
22
|
declare function DropdownMenuSubTrigger({ className, inset, children, ...props }: MenuPrimitive.SubmenuTrigger.Props & {
|
|
20
23
|
inset?: boolean;
|
|
@@ -30,5 +33,5 @@ declare function DropdownMenuRadioItem({ className, iconOnly, children, inset, .
|
|
|
30
33
|
}): React.JSX.Element;
|
|
31
34
|
declare function DropdownMenuSeparator({ className, ...props }: MenuPrimitive.Separator.Props): React.JSX.Element;
|
|
32
35
|
declare function DropdownMenuShortcut({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
|
|
33
|
-
export { DropdownMenu, DropdownMenuPortal, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuGroup, DropdownMenuLabel, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent, };
|
|
36
|
+
export { DropdownMenu, DropdownMenuPortal, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuGroup, DropdownMenuLabel, DropdownMenuItem, DropdownMenuCommand, DropdownMenuCheckboxItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent, };
|
|
34
37
|
//# sourceMappingURL=dropdown-menu.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown-menu.d.ts","sourceRoot":"","sources":["../../src/components/dropdown-menu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,IAAI,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAM5D,iBAAS,YAAY,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,qBAE3D;AAED,iBAAS,kBAAkB,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,qBAEnE;AAED,iBAAS,mBAAmB,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,qBAErE;AAED,iBAAS,mBAAmB,CAAC,EAC3B,KAAe,EACf,WAAe,EACf,
|
|
1
|
+
{"version":3,"file":"dropdown-menu.d.ts","sourceRoot":"","sources":["../../src/components/dropdown-menu.tsx"],"names":[],"mappings":"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"}
|
|
@@ -12,8 +12,8 @@ function DropdownMenuPortal({ ...props }) {
|
|
|
12
12
|
function DropdownMenuTrigger({ ...props }) {
|
|
13
13
|
return _jsx(MenuPrimitive.Trigger, { "data-slot": "dropdown-menu-trigger", ...props });
|
|
14
14
|
}
|
|
15
|
-
function DropdownMenuContent({ align = "start", alignOffset = 0, density = "
|
|
16
|
-
return (_jsx(MenuPrimitive.Portal, { children: _jsx(MenuPrimitive.Positioner, { className: "isolate z-50 outline-none", align: align, alignOffset: alignOffset, side: side, sideOffset: sideOffset, children: _jsx(MenuPrimitive.Popup, { "data-slot": "dropdown-menu-content", "data-density": density, className: cn("group/menu z-50 max-h-(--available-height) w-(--
|
|
15
|
+
function DropdownMenuContent({ align = "start", alignOffset = 0, density = "comfortable", side = "bottom", sideOffset = 6, className, ...props }) {
|
|
16
|
+
return (_jsx(MenuPrimitive.Portal, { children: _jsx(MenuPrimitive.Positioner, { className: "isolate z-50 outline-none", align: align, alignOffset: alignOffset, side: side, sideOffset: sideOffset, collisionPadding: 8, children: _jsx(MenuPrimitive.Popup, { "data-slot": "dropdown-menu-content", "data-density": density, className: cn("group/menu z-50 max-h-(--available-height) w-max min-w-[min(14rem,var(--available-width))] max-w-(--available-width) overflow-x-hidden overflow-y-auto rounded-2xl border-0 bg-popover p-nadicode-xxs text-popover-foreground nc-elevation-floating outline-none data-closed:overflow-hidden", anchoredOverlayMotion, className), ...props }) }) }));
|
|
17
17
|
}
|
|
18
18
|
function DropdownMenuGroup({ ...props }) {
|
|
19
19
|
return _jsx(MenuPrimitive.Group, { "data-slot": "dropdown-menu-group", ...props });
|
|
@@ -25,6 +25,9 @@ function DropdownMenuItem({ className, iconOnly = false, inset, variant = "defau
|
|
|
25
25
|
return (_jsx(MenuPrimitive.Item, { "data-slot": "dropdown-menu-item", "data-icon-only": iconOnly || undefined, "data-inset": inset, "data-variant": variant, className: cn("group/dropdown-menu-item relative flex min-h-touch-target cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 group-data-[density=comfortable]/menu:px-3 group-data-[density=comfortable]/menu:py-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-[var(--nc-error-deep)] data-[variant=destructive]:focus:bg-[var(--nc-error-soft)] data-[variant=destructive]:focus:text-[var(--nc-error-deep)] data-disabled:pointer-events-none data-disabled:opacity-50 [@media(hover:hover)_and_(pointer:fine)]:min-h-0 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-[var(--nc-error-deep)]", iconOnly &&
|
|
26
26
|
"size-8 min-w-touch-target shrink-0 justify-center rounded-full p-0 group-data-[density=comfortable]/menu:p-0 [@media(hover:hover)_and_(pointer:fine)]:min-w-0", className), ...props }));
|
|
27
27
|
}
|
|
28
|
+
function DropdownMenuCommand({ icon, children, className, ...props }) {
|
|
29
|
+
return (_jsxs(DropdownMenuItem, { ...props, className: cn(className, "h-auto w-full min-w-0 justify-start gap-3 text-left font-normal whitespace-normal"), children: [_jsx("span", { className: "min-w-0 flex-1 [overflow-wrap:anywhere]", children: children }), _jsx("span", { "aria-hidden": "true", className: "flex shrink-0 items-center justify-center", children: icon })] }));
|
|
30
|
+
}
|
|
28
31
|
function DropdownMenuSub({ ...props }) {
|
|
29
32
|
return _jsx(MenuPrimitive.SubmenuRoot, { "data-slot": "dropdown-menu-sub", ...props });
|
|
30
33
|
}
|
|
@@ -50,4 +53,4 @@ function DropdownMenuSeparator({ className, ...props }) {
|
|
|
50
53
|
function DropdownMenuShortcut({ className, ...props }) {
|
|
51
54
|
return (_jsx("span", { "data-slot": "dropdown-menu-shortcut", className: cn("ml-auto text-xs text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground", className), ...props }));
|
|
52
55
|
}
|
|
53
|
-
export { DropdownMenu, DropdownMenuPortal, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuGroup, DropdownMenuLabel, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent, };
|
|
56
|
+
export { DropdownMenu, DropdownMenuPortal, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuGroup, DropdownMenuLabel, DropdownMenuItem, DropdownMenuCommand, DropdownMenuCheckboxItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent, };
|
package/dist/eslint/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { readFileSync } from "node:fs";
|
|
2
2
|
|
|
3
|
+
import { menuCommandOwner } from "./rules/menu-command-owner.js";
|
|
3
4
|
import { cardRowOwner } from "./rules/card-row-owner.js";
|
|
4
5
|
import { confirmDestructiveAction } from "./rules/confirm-destructive-action.js";
|
|
5
6
|
import { iconControlAccessibleName } from "./rules/icon-control-accessible-name.js";
|
|
@@ -78,6 +79,7 @@ const plugin = {
|
|
|
78
79
|
configs: {},
|
|
79
80
|
rules: {
|
|
80
81
|
"card-row-owner": cardRowOwner,
|
|
82
|
+
"menu-command-owner": menuCommandOwner,
|
|
81
83
|
"confirm-destructive-action": confirmDestructiveAction,
|
|
82
84
|
"icon-control-accessible-name": iconControlAccessibleName,
|
|
83
85
|
"no-app-feature-component": noAppFeatureComponent,
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { jsxComponentName } from "./jsx-class-utility.js";
|
|
2
|
+
|
|
3
|
+
export const menuCommandOwner = {
|
|
4
|
+
meta: {
|
|
5
|
+
type: "problem",
|
|
6
|
+
docs: { description: "Keep command labels and icons in the shared menu composition." },
|
|
7
|
+
schema: [],
|
|
8
|
+
messages: {
|
|
9
|
+
command:
|
|
10
|
+
"Use DropdownMenuCommand with its required icon; it owns readable labels and trailing icon layout. DropdownMenuItem is only for an iconOnly control here.",
|
|
11
|
+
trigger:
|
|
12
|
+
"Use ActionMenu for three-dot commands so placement, naming, and popup behavior have one owner.",
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
create(context) {
|
|
16
|
+
return {
|
|
17
|
+
JSXOpeningElement(node) {
|
|
18
|
+
const name = jsxComponentName(node, context);
|
|
19
|
+
if (
|
|
20
|
+
name === "DropdownMenuItem" &&
|
|
21
|
+
!node.attributes.some(
|
|
22
|
+
(attribute) =>
|
|
23
|
+
attribute.type === "JSXAttribute" &&
|
|
24
|
+
attribute.name.name === "iconOnly" &&
|
|
25
|
+
(attribute.value === null ||
|
|
26
|
+
(attribute.value.type === "JSXExpressionContainer" &&
|
|
27
|
+
attribute.value.expression.value === true)),
|
|
28
|
+
)
|
|
29
|
+
)
|
|
30
|
+
context.report({ node, messageId: "command" });
|
|
31
|
+
if (
|
|
32
|
+
[
|
|
33
|
+
"Ellipsis",
|
|
34
|
+
"EllipsisIcon",
|
|
35
|
+
"EllipsisVertical",
|
|
36
|
+
"MoreHorizontal",
|
|
37
|
+
"MoreVertical",
|
|
38
|
+
].includes(name)
|
|
39
|
+
) {
|
|
40
|
+
context.report({ node, messageId: "trigger" });
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
},
|
|
45
|
+
};
|
package/docs/activity.md
CHANGED
|
@@ -65,6 +65,10 @@ Use 20 CSS pixels inline, including buttons and rows with room for that size;
|
|
|
65
65
|
separately tuned, and must not be obtained by shrinking the 64 preset. The 88
|
|
66
66
|
extent uses the 64 preset. A 12–16 pixel badge slot keeps its existing compact
|
|
67
67
|
spinner until its surrounding component explicitly accommodates this family.
|
|
68
|
+
Nadia's desktop accommodates it once, in the spinner itself: the spinner's box
|
|
69
|
+
stays one text line tall and at least 20 pixels wide, and the 20 pixel orb sits
|
|
70
|
+
centred in it and overhangs it above and below, so a row keeps its height and
|
|
71
|
+
the orb never meets the text beside it.
|
|
68
72
|
|
|
69
73
|
## React
|
|
70
74
|
|
package/docs/contract.md
CHANGED
|
@@ -62,9 +62,10 @@ restates those three as separate utilities: an `outline-none` or
|
|
|
62
62
|
`outline-hidden` on the same element leaves Tailwind's own outline utilities
|
|
63
63
|
painting nothing.
|
|
64
64
|
|
|
65
|
-
`nc-glass` is the one glass material
|
|
66
|
-
|
|
67
|
-
|
|
65
|
+
`nc-glass` is the one glass material for floating chrome: popover, select,
|
|
66
|
+
combobox, and navigation-menu popups, the command palette, and `GlassControl`
|
|
67
|
+
bars carry it over our own content. Command dropdowns use a solid popover fill
|
|
68
|
+
so labels stay readable over dense rows; account dropdowns share that surface. Content surfaces stay
|
|
68
69
|
solid: cards, KPIs, tables, inspectors, and dialog, sheet, and drawer bodies.
|
|
69
70
|
Glass keeps exactly one separator, the elevation falloff's integrated edge
|
|
70
71
|
ring. Reduced transparency falls back to the same solid floating surface.
|
|
@@ -107,7 +108,7 @@ Its caption names the table. Callers supply data and labels, not column-hiding C
|
|
|
107
108
|
`ActionMenu` is the shared three-dot composition of `Button` and `DropdownMenu`:
|
|
108
109
|
a ghost icon trigger, horizontal ellipsis, and end-aligned popup. The shared
|
|
109
110
|
stylesheet gives enabled buttons a pointer cursor, including this trigger. It inherits the
|
|
110
|
-
menu's
|
|
111
|
+
menu's opaque surface, elevation, motion, keyboard behavior, and focus return. Supply
|
|
111
112
|
`label` as a localized, record-specific accessible name; `triggerId` supports
|
|
112
113
|
focus return from an app-owned confirmation, and `children` supplies menu items.
|
|
113
114
|
Apps own action selection, permission, placement, and confirmation. Reuse this
|
|
@@ -272,6 +273,19 @@ Portal placement is owned by its [context contract](../../../apps/portal/docs/in
|
|
|
272
273
|
`DataTable.heading`, `CardHeader` and `SettingsSection` are its composition
|
|
273
274
|
seams. Empty states and operational notices remain distinct message owners.
|
|
274
275
|
|
|
276
|
+
### Command popup composition
|
|
277
|
+
|
|
278
|
+
`DropdownMenuContent` uses comfortable spacing by default. Its content-based
|
|
279
|
+
width is bounded by Base UI's available width; collision padding keeps it off
|
|
280
|
+
screen edges and available height allows vertical scrolling. A command popup
|
|
281
|
+
uses solid `bg-popover` so underlying table text cannot compete with labels.
|
|
282
|
+
Do not size command menus from an icon trigger. `DropdownMenuCommand` requires
|
|
283
|
+
an `icon` element and owns the wrapping label and trailing, decorative icon slot.
|
|
284
|
+
Use it for links, callbacks, native form buttons, and dialog triggers. It retains
|
|
285
|
+
Menu.Item behavior; it is not a new positioning or focus implementation.
|
|
286
|
+
`DropdownMenuItem iconOnly` remains available for the account-settings gear;
|
|
287
|
+
checkbox and radio items retain their selection semantics.
|
|
288
|
+
|
|
275
289
|
### Account popup composition
|
|
276
290
|
|
|
277
291
|
`DropdownMenuContent density="comfortable"` supplies roomier command rows
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nadicodeai/ui",
|
|
3
|
-
"version": "6.6.
|
|
3
|
+
"version": "6.6.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
"@assistant-ui/react": "0.15.18",
|
|
71
71
|
"@assistant-ui/react-markdown": "0.14.14",
|
|
72
72
|
"@base-ui/react": "^1.8.0",
|
|
73
|
-
"@nadicodeai/design-system": "6.6.
|
|
73
|
+
"@nadicodeai/design-system": "6.6.2",
|
|
74
74
|
"@paper-design/shaders": "0.0.80",
|
|
75
75
|
"class-variance-authority": "^0.7.1",
|
|
76
76
|
"clsx": "^2.1.1",
|