impact-nova 3.0.0-alpha.2 → 3.0.0-alpha.4

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 (29) hide show
  1. package/dist/components/data/expandable-list-item/index.d.ts +2 -0
  2. package/dist/components/data/expandable-list-item/index.js +20 -16
  3. package/dist/components/data/expandable-list-item/product-card-hero.d.ts +15 -0
  4. package/dist/components/data/expandable-list-item/product-card-iris-insight-trigger.d.ts +8 -0
  5. package/dist/components/data/expandable-list-item/product-card-iris-insight-trigger.js +41 -0
  6. package/dist/components/data/expandable-list-item/product-card-metrics-toggle.d.ts +13 -0
  7. package/dist/components/data/expandable-list-item/product-card-metrics-toggle.js +27 -0
  8. package/dist/components/data/expandable-list-item/sku-picker-chrome.d.ts +35 -0
  9. package/dist/components/data/expandable-list-item/sku-picker-chrome.js +144 -0
  10. package/dist/components/data/expandable-list-item/virtualized-responsive-grid.sku-picker.d.ts +3 -2
  11. package/dist/components/forms/choice-card/choice-card.variants.js +3 -3
  12. package/dist/components/primitives/iris/iris.d.ts +1 -0
  13. package/dist/components/primitives/iris/iris.js +76 -74
  14. package/dist/components/primitives/iris/iris.types.d.ts +2 -0
  15. package/dist/form-react/Fields/VirtualizedListField.d.ts +3 -0
  16. package/dist/form-react/Fields/VirtualizedListField.js +174 -0
  17. package/dist/form-react/fields.d.ts +1 -0
  18. package/dist/form-react/fields.js +28 -26
  19. package/dist/form-react/registry/defaultFieldRegistrations.d.ts +1 -1
  20. package/dist/form-react/registry/defaultFieldRegistrations.js +13 -12
  21. package/dist/form-react/types/fields.types.d.ts +21 -1
  22. package/dist/form-react/types/fieldsOutput.types.d.ts +4 -1
  23. package/dist/form-react/utils/fieldDefaults.utils.js +1 -1
  24. package/dist/impact-nova.css +1 -1
  25. package/dist/index.js +356 -352
  26. package/dist/lib/alphabetical-sort.d.ts +3 -0
  27. package/dist/llms/rules/installation.js +1 -1
  28. package/dist/llms/rules/requirements.js +1 -1
  29. package/package.json +3 -1
@@ -1,3 +1,5 @@
1
+ export { ProductCardMetricsToggle, type ProductCardMetricsToggleProps, } from './product-card-metrics-toggle';
2
+ export { ProductCardIrisInsightTrigger, type ProductCardIrisInsightTriggerProps, } from './product-card-iris-insight-trigger';
1
3
  export { ExpandableListItem, type ExpandableListItemProps, } from './expandable-list-item-preset';
2
4
  export { ExpandableListItemRoot, ExpandableListItemRow, ExpandableListItemCheckbox, ExpandableListItemTrigger, ExpandableListItemTitle, ExpandableListItemDescription, ExpandableListItemMedia, ExpandableListItemHeader, ExpandableListItemContent, ExpandableListItemFooter, type ExpandableListItemRootProps, type ExpandableListItemCheckboxProps, } from './expandable-list-item-parts';
3
5
  export { ExpandableListItemMetrics, type ExpandableListItemMetricsProps } from './expandable-list-item-metrics';
@@ -1,19 +1,23 @@
1
- import { ExpandableListItem as a } from "./expandable-list-item-preset.js";
2
- import { ExpandableListItemCheckbox as p, ExpandableListItemContent as x, ExpandableListItemDescription as m, ExpandableListItemFooter as n, ExpandableListItemHeader as o, ExpandableListItemMedia as s, ExpandableListItemRoot as b, ExpandableListItemRow as d, ExpandableListItemTitle as r, ExpandableListItemTrigger as l } from "./expandable-list-item-parts.js";
3
- import { ExpandableListItemMetrics as I } from "./expandable-list-item-metrics.js";
4
- import { ExpandableListItemAttributes as f } from "./expandable-list-item-attributes.js";
1
+ import { ProductCardMetricsToggle as a } from "./product-card-metrics-toggle.js";
2
+ import { ProductCardIrisInsightTrigger as i } from "./product-card-iris-insight-trigger.js";
3
+ import { ExpandableListItem as p } from "./expandable-list-item-preset.js";
4
+ import { ExpandableListItemCheckbox as d, ExpandableListItemContent as m, ExpandableListItemDescription as s, ExpandableListItemFooter as n, ExpandableListItemHeader as b, ExpandableListItemMedia as l, ExpandableListItemRoot as I, ExpandableListItemRow as E, ExpandableListItemTitle as L, ExpandableListItemTrigger as g } from "./expandable-list-item-parts.js";
5
+ import { ExpandableListItemMetrics as f } from "./expandable-list-item-metrics.js";
6
+ import { ExpandableListItemAttributes as T } from "./expandable-list-item-attributes.js";
5
7
  export {
6
- a as ExpandableListItem,
7
- f as ExpandableListItemAttributes,
8
- p as ExpandableListItemCheckbox,
9
- x as ExpandableListItemContent,
10
- m as ExpandableListItemDescription,
8
+ p as ExpandableListItem,
9
+ T as ExpandableListItemAttributes,
10
+ d as ExpandableListItemCheckbox,
11
+ m as ExpandableListItemContent,
12
+ s as ExpandableListItemDescription,
11
13
  n as ExpandableListItemFooter,
12
- o as ExpandableListItemHeader,
13
- s as ExpandableListItemMedia,
14
- I as ExpandableListItemMetrics,
15
- b as ExpandableListItemRoot,
16
- d as ExpandableListItemRow,
17
- r as ExpandableListItemTitle,
18
- l as ExpandableListItemTrigger
14
+ b as ExpandableListItemHeader,
15
+ l as ExpandableListItemMedia,
16
+ f as ExpandableListItemMetrics,
17
+ I as ExpandableListItemRoot,
18
+ E as ExpandableListItemRow,
19
+ L as ExpandableListItemTitle,
20
+ g as ExpandableListItemTrigger,
21
+ i as ProductCardIrisInsightTrigger,
22
+ a as ProductCardMetricsToggle
19
23
  };
@@ -0,0 +1,15 @@
1
+ import { ReactElement } from 'react';
2
+ import { ItemCatalogRecord } from './virtualized-responsive-grid.catalog';
3
+ export type ProductCardHeroProps = {
4
+ item: ItemCatalogRecord;
5
+ selected: boolean;
6
+ thumbnail: ReactElement;
7
+ onFlip: () => void;
8
+ onSelect: () => void;
9
+ };
10
+ export declare function ProductCardHero(props: ProductCardHeroProps): ReactElement;
11
+ export declare function ProductCardHeaderCheckbox(props: {
12
+ item: ItemCatalogRecord;
13
+ selected: boolean;
14
+ onSelect: () => void;
15
+ }): ReactElement;
@@ -0,0 +1,8 @@
1
+ import { ReactElement } from 'react';
2
+ import { ProductCardMetricsTogglePlacement } from './product-card-metrics-toggle';
3
+ export type ProductCardIrisInsightTriggerProps = {
4
+ styleId: string;
5
+ title: string;
6
+ placement?: ProductCardMetricsTogglePlacement;
7
+ };
8
+ export declare function ProductCardIrisInsightTrigger(props: ProductCardIrisInsightTriggerProps): ReactElement;
@@ -0,0 +1,41 @@
1
+ import { jsx as i, jsxs as a } from "react/jsx-runtime";
2
+ import { useState as o, useRef as c, useEffect as l } from "react";
3
+ import { IrisInsight as d } from "../../primitives/iris/iris.js";
4
+ const m = 2200;
5
+ function u(t) {
6
+ return t === "inline" ? "relative shrink-0" : "absolute right-2 top-2";
7
+ }
8
+ function I(t) {
9
+ const [s, n] = o("idle"), e = c(void 0);
10
+ l(
11
+ () => () => {
12
+ e.current && clearTimeout(e.current);
13
+ },
14
+ []
15
+ );
16
+ const r = u(t.placement);
17
+ return /* @__PURE__ */ i("div", { className: r, children: /* @__PURE__ */ i(
18
+ d,
19
+ {
20
+ status: s,
21
+ iconSize: "sm",
22
+ onTriggerClick: () => {
23
+ n("loading"), e.current = setTimeout(() => {
24
+ e.current = void 0, n("ready");
25
+ }, m);
26
+ },
27
+ onAskInChat: () => {
28
+ },
29
+ children: /* @__PURE__ */ a("p", { children: [
30
+ /* @__PURE__ */ i("span", { className: "font-bold", children: t.title }),
31
+ " is tracking",
32
+ " ",
33
+ /* @__PURE__ */ i("span", { className: "font-bold", children: t.styleId }),
34
+ " against plan this period."
35
+ ] })
36
+ }
37
+ ) });
38
+ }
39
+ export {
40
+ I as ProductCardIrisInsightTrigger
41
+ };
@@ -0,0 +1,13 @@
1
+ import { ReactElement, ReactNode } from 'react';
2
+ export type ProductCardMetricsTogglePlacement = "hero" | "inline";
3
+ export type ProductCardMetricsToggleProps = {
4
+ isFlipped: boolean;
5
+ showMetricsLabel: string;
6
+ showPhotoLabel: string;
7
+ actionAriaLabel: string;
8
+ onShowMetrics: () => void;
9
+ onShowPhoto: () => void;
10
+ icon: ReactNode;
11
+ placement?: ProductCardMetricsTogglePlacement;
12
+ };
13
+ export declare function ProductCardMetricsToggle(props: ProductCardMetricsToggleProps): ReactElement;
@@ -0,0 +1,27 @@
1
+ import { jsx as e } from "react/jsx-runtime";
2
+ import { ButtonIconTooltip as l } from "../../feedback/tooltip/button-icon-tooltip.js";
3
+ import { Button as r } from "../../primitives/button/button.js";
4
+ function d(t) {
5
+ const o = t.isFlipped ? t.showPhotoLabel : t.showMetricsLabel, n = (i) => {
6
+ if (i.stopPropagation(), t.isFlipped) {
7
+ t.onShowPhoto();
8
+ return;
9
+ }
10
+ t.onShowMetrics();
11
+ }, a = t.placement === "inline" ? "relative z-20 shrink-0" : "absolute right-2 top-2 z-20";
12
+ return /* @__PURE__ */ e("div", { className: a, onClick: (i) => i.stopPropagation(), children: /* @__PURE__ */ e(l, { label: o, children: /* @__PURE__ */ e(
13
+ r,
14
+ {
15
+ type: "button",
16
+ size: "iconSm",
17
+ variant: "tertiary",
18
+ "aria-pressed": t.isFlipped,
19
+ "aria-label": t.actionAriaLabel,
20
+ onClick: n,
21
+ children: t.icon
22
+ }
23
+ ) }) });
24
+ }
25
+ export {
26
+ d as ProductCardMetricsToggle
27
+ };
@@ -0,0 +1,35 @@
1
+ import { ReactNode } from 'react';
2
+ export type SkuPickerView = "card" | "list";
3
+ export type SkuPickerGridProps = {
4
+ /** Fold the toolbar and choices behind the title row. */
5
+ collapsible?: boolean;
6
+ /** Start folded. Ignored unless `collapsible` is set. */
7
+ defaultCollapsed?: boolean;
8
+ /** Title in the header. Default: SKU. */
9
+ title?: string;
10
+ required?: boolean;
11
+ };
12
+ export declare function SkuPickerChrome(props: {
13
+ view: SkuPickerView;
14
+ search: string;
15
+ sortAlphabetically: boolean;
16
+ selectedCount: number;
17
+ /** True when every choice Select All would touch is already selected. */
18
+ allSelected?: boolean;
19
+ previewCodes: string[];
20
+ onSearchChange: (value: string) => void;
21
+ onViewChange: (view: SkuPickerView) => void;
22
+ onToggleSort: () => void;
23
+ onSelectAll: () => void;
24
+ onClear: () => void;
25
+ children: ReactNode;
26
+ footer?: ReactNode;
27
+ collapsible?: boolean;
28
+ defaultCollapsed?: boolean;
29
+ title?: string;
30
+ required?: boolean;
31
+ emptyLabel?: string;
32
+ searchLabel?: string;
33
+ /** Story picker keeps the back control. Form fields omit it. */
34
+ showBack?: boolean;
35
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,144 @@
1
+ import { jsx as t, jsxs as l } from "react/jsx-runtime";
2
+ import { Search as s, CardView as m, ListFilter as h, TextFormat as u, Back as b } from "impact-nova-icons";
3
+ import "react";
4
+ import { Badge as v } from "../../data-display/badge/badge.js";
5
+ import { ButtonIconTooltip as r } from "../../feedback/tooltip/button-icon-tooltip.js";
6
+ import { Input as f } from "../../forms/input/input.js";
7
+ import { Accordion as x, AccordionItem as g, AccordionTrigger as w, AccordionContent as C } from "../../primitives/accordion/accordion.js";
8
+ import { Button as i } from "../../primitives/button/button.js";
9
+ import { cn as N } from "../../../lib/utils.js";
10
+ const d = "picker";
11
+ function S(e) {
12
+ return N(
13
+ e && "border-brand bg-accent text-brand hover:bg-accent hover:text-brand"
14
+ );
15
+ }
16
+ function y(e) {
17
+ if (e.selectedCount === 0)
18
+ return /* @__PURE__ */ t("p", { className: "text-xs font-medium text-content-muted", children: e.emptyLabel });
19
+ const a = Math.max(0, e.selectedCount - e.previewCodes.length);
20
+ return /* @__PURE__ */ l("div", { className: "flex min-w-0 items-center gap-1", children: [
21
+ /* @__PURE__ */ t("p", { className: "truncate text-xs font-medium text-content-muted", children: e.previewCodes.join(", ") }),
22
+ a > 0 ? /* @__PURE__ */ l(v, { variant: "subtle", color: "primary", size: "sm", shape: "square", children: [
23
+ "+",
24
+ a
25
+ ] }) : null
26
+ ] });
27
+ }
28
+ function V(e) {
29
+ const a = e.title ?? "SKU", n = /* @__PURE__ */ t(
30
+ y,
31
+ {
32
+ selectedCount: e.selectedCount,
33
+ previewCodes: e.previewCodes,
34
+ emptyLabel: e.emptyLabel ?? "No SKUs selected"
35
+ }
36
+ ), c = /* @__PURE__ */ l("div", { className: "flex items-center justify-between gap-3", children: [
37
+ /* @__PURE__ */ l("div", { className: "flex items-center gap-3", children: [
38
+ /* @__PURE__ */ t(
39
+ f,
40
+ {
41
+ size: "default",
42
+ className: "w-[200px]",
43
+ placeholder: "Search",
44
+ value: e.search,
45
+ onChange: (o) => e.onSearchChange(o.target.value),
46
+ prefix: /* @__PURE__ */ t(s, { className: "size-4 text-content-placeholder", "aria-hidden": !0 }),
47
+ "aria-label": e.searchLabel ?? "Search SKUs"
48
+ }
49
+ ),
50
+ /* @__PURE__ */ t(
51
+ r,
52
+ {
53
+ label: e.view === "card" ? "Switch to list view" : "Switch to card view",
54
+ children: /* @__PURE__ */ t(
55
+ i,
56
+ {
57
+ type: "button",
58
+ size: "icon",
59
+ variant: "tertiary",
60
+ "aria-label": e.view === "card" ? "Switch to list view" : "Switch to card view",
61
+ "aria-pressed": e.view === "list",
62
+ onClick: () => e.onViewChange(e.view === "card" ? "list" : "card"),
63
+ children: e.view === "card" ? /* @__PURE__ */ t(m, {}) : /* @__PURE__ */ t(h, {})
64
+ }
65
+ )
66
+ }
67
+ ),
68
+ /* @__PURE__ */ t(r, { label: "Sort Alphabetically", children: /* @__PURE__ */ t(
69
+ i,
70
+ {
71
+ type: "button",
72
+ size: "icon",
73
+ variant: "tertiary",
74
+ "aria-label": "Sort alphabetically",
75
+ "aria-pressed": e.sortAlphabetically,
76
+ className: S(e.sortAlphabetically),
77
+ onClick: e.onToggleSort,
78
+ children: /* @__PURE__ */ t(u, {})
79
+ }
80
+ ) })
81
+ ] }),
82
+ /* @__PURE__ */ l("div", { className: "flex items-center gap-3", children: [
83
+ /* @__PURE__ */ t(
84
+ i,
85
+ {
86
+ type: "button",
87
+ variant: "ghost",
88
+ className: "text-brand hover:text-brand",
89
+ onClick: e.onSelectAll,
90
+ disabled: e.allSelected === !0,
91
+ children: "Select All"
92
+ }
93
+ ),
94
+ /* @__PURE__ */ t(
95
+ i,
96
+ {
97
+ type: "button",
98
+ variant: "ghost",
99
+ className: "text-brand hover:text-brand",
100
+ onClick: e.onClear,
101
+ disabled: e.selectedCount === 0,
102
+ children: "Clear"
103
+ }
104
+ )
105
+ ] })
106
+ ] });
107
+ return e.collapsible ? /* @__PURE__ */ t(
108
+ x,
109
+ {
110
+ type: "single",
111
+ collapsible: !0,
112
+ defaultValue: e.defaultCollapsed ? void 0 : d,
113
+ className: "w-full",
114
+ children: /* @__PURE__ */ l(g, { value: d, className: "border border-stroke-subtle", children: [
115
+ /* @__PURE__ */ t(w, { headingLevel: 3, rightActions: n, children: /* @__PURE__ */ l("span", { className: "truncate text-sm font-semibold leading-6 text-content-title", children: [
116
+ a,
117
+ e.required ? /* @__PURE__ */ t("span", { className: "text-destructive", children: " *" }) : null
118
+ ] }) }),
119
+ /* @__PURE__ */ l(C, { className: "flex flex-col gap-3", children: [
120
+ c,
121
+ e.children,
122
+ e.footer
123
+ ] })
124
+ ] })
125
+ }
126
+ ) : /* @__PURE__ */ l("div", { className: "flex w-full flex-col gap-3 overflow-hidden rounded-lg border border-stroke-subtle bg-canvas-elevated px-4 py-2", children: [
127
+ /* @__PURE__ */ l("div", { className: "flex items-center justify-between gap-3", children: [
128
+ /* @__PURE__ */ l("div", { className: "flex items-center gap-3", children: [
129
+ e.showBack === !1 ? null : /* @__PURE__ */ t(i, { type: "button", size: "icon", variant: "ghost", "aria-label": "Back", children: /* @__PURE__ */ t(b, {}) }),
130
+ /* @__PURE__ */ l("p", { className: "text-sm font-semibold leading-6 text-content-title", children: [
131
+ a,
132
+ e.required ? /* @__PURE__ */ t("span", { className: "text-destructive", children: " *" }) : null
133
+ ] })
134
+ ] }),
135
+ n
136
+ ] }),
137
+ c,
138
+ e.children,
139
+ e.footer
140
+ ] });
141
+ }
142
+ export {
143
+ V as SkuPickerChrome
144
+ };
@@ -1,2 +1,3 @@
1
- export declare function ClientSkuPickerGrid(): import("react/jsx-runtime").JSX.Element;
2
- export declare function ServerSkuPickerGrid(): import("react/jsx-runtime").JSX.Element;
1
+ import { SkuPickerGridProps } from './sku-picker-chrome';
2
+ export declare function ClientSkuPickerGrid(props?: SkuPickerGridProps): import("react/jsx-runtime").JSX.Element;
3
+ export declare function ServerSkuPickerGrid(props?: SkuPickerGridProps): import("react/jsx-runtime").JSX.Element;
@@ -1,5 +1,5 @@
1
1
  import { cva as e } from "class-variance-authority";
2
- const r = "border-stroke-subtle p-3 hover:border-brand", a = "border-brand border-l-[3px] border-l-brand bg-brand-tint py-3 pr-3 pl-2.5 shadow-elevation-header", s = e(
2
+ const r = "border-stroke-subtle p-3 hover:border-stroke-field hover:bg-accent", a = "border-brand border-l-[3px] border-l-brand bg-brand-tint py-3 pr-3 pl-2.5 shadow-elevation-header hover:bg-brand-tint", o = e(
3
3
  [
4
4
  "group relative cursor-pointer select-none transition-[border-color,background-color,box-shadow] duration-150",
5
5
  "has-[[data-slot=choice-card-control]:focus-visible]:outline-none has-[[data-slot=choice-card-control]:focus-visible]:ring-1 has-[[data-slot=choice-card-control]:focus-visible]:ring-focus-ring"
@@ -7,7 +7,7 @@ const r = "border-stroke-subtle p-3 hover:border-brand", a = "border-brand borde
7
7
  {
8
8
  variants: {
9
9
  variant: {
10
- default: "flex flex-row items-start justify-between gap-2 overflow-hidden rounded-xl border border-solid bg-canvas-elevated",
10
+ default: "flex flex-row items-center justify-between gap-2 overflow-hidden rounded-xl border border-solid bg-canvas-elevated",
11
11
  featured: "flex h-[116px] w-[215px] shrink-0 flex-col overflow-hidden rounded-2xl border border-solid bg-canvas-elevated p-0",
12
12
  compare: "flex flex-col items-stretch gap-4 overflow-visible rounded-xl border border-solid p-3"
13
13
  },
@@ -96,5 +96,5 @@ const r = "border-stroke-subtle p-3 hover:border-brand", a = "border-brand borde
96
96
  }
97
97
  );
98
98
  export {
99
- s as choiceCardVariants
99
+ o as choiceCardVariants
100
100
  };
@@ -14,6 +14,7 @@ declare const IrisMenu: React.ForwardRefExoticComponent<React.HTMLAttributes<HTM
14
14
  appearance?: import('./iris.types').IrisMenuAppearance;
15
15
  onAskInChat?: () => void;
16
16
  askInChatLabel?: string;
17
+ overflowTooltipContent?: React.ReactNode;
17
18
  } & React.RefAttributes<HTMLDivElement>>;
18
19
  declare const IrisInsight: React.ForwardRefExoticComponent<IrisInsightProps & React.RefAttributes<HTMLDivElement>>;
19
20
  export { IrisControlProvider, IrisControlRegion, } from './iris-control-region';