@nadicodeai/ui 12.1.39 → 12.1.41

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.
@@ -0,0 +1,7 @@
1
+ import { type VariantProps } from "class-variance-authority";
2
+ declare const textLinkVariants: (props?: ({
3
+ kind?: "plain" | "inline" | "quiet" | null | undefined;
4
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
5
+ type TextLinkKind = NonNullable<VariantProps<typeof textLinkVariants>["kind"]>;
6
+ export { textLinkVariants, type TextLinkKind };
7
+ //# sourceMappingURL=text-link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-link.d.ts","sourceRoot":"","sources":["../../src/components/text-link.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAElE,QAAA,MAAM,gBAAgB;;8EAYpB,CAAC;AAEH,KAAK,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAE/E,OAAO,EAAE,gBAAgB,EAAE,KAAK,YAAY,EAAE,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { cva } from "class-variance-authority";
2
+ const textLinkVariants = cva("nc-transition-paint rounded-md underline-offset-4", {
3
+ variants: {
4
+ kind: {
5
+ inline: "text-(--nc-link) underline hover:decoration-2",
6
+ plain: "hover:underline",
7
+ quiet: "inline-flex w-fit shrink-0 items-center gap-1 text-muted-foreground hover:text-foreground hover:underline [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
8
+ },
9
+ },
10
+ defaultVariants: {
11
+ kind: "plain",
12
+ },
13
+ });
14
+ export { textLinkVariants };
@@ -12,8 +12,9 @@
12
12
  * What is read is a JSX element that is a control (a name ending in `Button`
13
13
  * or `Trigger`, or a `Toggle`/`ToggleGroupItem`/`NativeSelect`) and its `size`
14
14
  * attribute and the heights its `className` sets (`h-7`, `min-h-7`, `size-7`,
15
- * `h-[28px]`), plus the `triggerSize` attribute a confirm form passes to the
16
- * button it renders, plus the `size` key of a `buttonVariants({ ... })` or
15
+ * `h-[28px]`, and a fixed `h-10` or `size-10` above the control unless every
16
+ * branch of its `size` is `"lg"`), with `!` read on either side, plus the `triggerSize` attribute a confirm
17
+ * form passes to the button it renders, plus the `size` key of a `buttonVariants({ ... })` or
17
18
  * `toggleVariants({ ... })` call that styles a link as a button.
18
19
  * A string literal is read directly and through both branches of a
19
20
  * conditional, so `size={compact ? "sm" : "default"}` is reported too.
@@ -57,17 +58,24 @@ function variantsAndUtility(className) {
57
58
  start = index + 1;
58
59
  }
59
60
  }
60
- return { variants: parts, utility: className.slice(start).replace(/^!/, "") };
61
+ return { variants: parts, utility: className.slice(start).replace(/^!|!$/g, "") };
61
62
  }
62
63
 
63
- function smallHeight(className) {
64
+ function offHeight(className) {
64
65
  const { variants, utility } = variantsAndUtility(className);
65
66
  if (variants.some((variant) => variant.startsWith("[&") || /^\*{1,2}$/.test(variant)))
66
- return false;
67
- const match = /^(?:min-h|h|size)-(?:(\d+(?:\.\d+)?)|\[(\d+(?:\.\d+)?)px\])$/.exec(utility);
68
- if (!match) return false;
69
- const pixels = match[1] === undefined ? Number(match[2]) : Number(match[1]) * SPACING_UNIT_PX;
70
- return pixels > 0 && pixels < CONTROL_HEIGHT_PX;
67
+ return undefined;
68
+ const match =
69
+ /^(?<property>min-h|h|size)-(?:(?<steps>\d+(?:\.\d+)?)|\[(?<px>\d+(?:\.\d+)?)px\])$/.exec(
70
+ utility,
71
+ );
72
+ if (!match?.groups) return undefined;
73
+ const { property, steps, px } = match.groups;
74
+ const pixels = steps === undefined ? Number(px) : Number(steps) * SPACING_UNIT_PX;
75
+ const growsFromFloor = property === "min-h";
76
+ if (pixels > 0 && pixels < CONTROL_HEIGHT_PX) return "small";
77
+ if (pixels > CONTROL_HEIGHT_PX && !growsFromFloor) return "tall";
78
+ return undefined;
71
79
  }
72
80
 
73
81
  function literals(node) {
@@ -102,6 +110,8 @@ export const oneControlHeight = {
102
110
  '{{attribute}}="{{size}}" renders this control below the 32px control height. Product chrome uses one control: drop the size for the default, or use "icon" for an icon-only control (DESIGN.md "Layout", rule/one-control-height).',
103
111
  smallClassHeight:
104
112
  '"{{utility}}" sets this control below the 32px control height. Product chrome uses one control: drop the height and let the control keep `h-control-height` (DESIGN.md "Layout", rule/one-control-height).',
113
+ tallClassHeight:
114
+ '"{{utility}}" sets this control above the 32px control height. Product chrome uses one control: drop the height and let the control keep `h-control-height` (DESIGN.md "Layout", rule/one-control-height).',
105
115
  },
106
116
  },
107
117
  create(context) {
@@ -126,9 +136,20 @@ export const oneControlHeight = {
126
136
  const attributeName = attribute.name.type === "JSXIdentifier" ? attribute.name.name : "";
127
137
  if (attributeName === "className") {
128
138
  if (!isControl(jsxComponentName(attribute.parent, context))) return;
139
+ const large = attribute.parent.attributes.some((other) => {
140
+ if (other.type !== "JSXAttribute" || other.name.name !== "size") return false;
141
+ const sizes = literals(other.value);
142
+ return sizes.length > 0 && sizes.every(({ value }) => value === "lg");
143
+ });
129
144
  for (const utility of classUtilities(attribute, context)) {
130
- if (smallHeight(utility))
131
- context.report({ node: attribute, messageId: "smallClassHeight", data: { utility } });
145
+ const off = offHeight(utility);
146
+ if (off === "tall" && large) continue;
147
+ if (off)
148
+ context.report({
149
+ node: attribute,
150
+ messageId: `${off}ClassHeight`,
151
+ data: { utility },
152
+ });
132
153
  }
133
154
  return;
134
155
  }
package/dist/index.d.ts CHANGED
@@ -108,6 +108,7 @@ export * from "./components/table-card.js";
108
108
  export * from "./components/table-value.js";
109
109
  export * from "./components/object-workspace.js";
110
110
  export * from "./components/tabs.js";
111
+ export * from "./components/text-link.js";
111
112
  export * from "./components/textarea.js";
112
113
  export * from "./components/theme-mode-switcher.js";
113
114
  export * from "./components/toggle.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -108,6 +108,7 @@ export * from "./components/table-card.js";
108
108
  export * from "./components/table-value.js";
109
109
  export * from "./components/object-workspace.js";
110
110
  export * from "./components/tabs.js";
111
+ export * from "./components/text-link.js";
111
112
  export * from "./components/textarea.js";
112
113
  export * from "./components/theme-mode-switcher.js";
113
114
  export * from "./components/toggle.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nadicodeai/ui",
3
- "version": "12.1.39",
3
+ "version": "12.1.41",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -74,10 +74,10 @@
74
74
  "test": "vitest run"
75
75
  },
76
76
  "dependencies": {
77
- "@assistant-ui/react": "0.15.21",
78
- "@assistant-ui/react-markdown": "0.14.16",
77
+ "@assistant-ui/react": "0.15.22",
78
+ "@assistant-ui/react-markdown": "0.14.17",
79
79
  "@base-ui/react": "^1.8.0",
80
- "@nadicodeai/design-system": "12.1.39",
80
+ "@nadicodeai/design-system": "12.1.41",
81
81
  "class-variance-authority": "^0.7.1",
82
82
  "clsx": "^2.1.1",
83
83
  "cmdk": "^1.1.1",
@@ -85,11 +85,11 @@
85
85
  "embla-carousel-react": "^8.6.0",
86
86
  "input-otp": "^1.5.0",
87
87
  "lucide-react": "1.48.0",
88
- "motion": "^13.4.0",
88
+ "motion": "^13.4.3",
89
89
  "next-themes": "^0.4.6",
90
90
  "react-day-picker": "^10.0.1",
91
91
  "react-hook-form": "^7.88.0",
92
- "react-resizable-panels": "^4.13.2",
92
+ "react-resizable-panels": "^4.13.3",
93
93
  "recharts": "^3.10.1",
94
94
  "remark-gfm": "^4.0.1",
95
95
  "sonner": "^2.0.8",