@chances-ai/design-system 24.1.0 → 24.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.
- package/dist/heroui-theme.d.ts.map +1 -1
- package/dist/heroui-theme.js +4 -4
- package/dist/heroui-theme.js.map +1 -1
- package/dist/icon/sprite-sheet.d.ts +13 -0
- package/dist/icon/sprite-sheet.d.ts.map +1 -0
- package/dist/icon/sprite-sheet.js +8 -0
- package/dist/icon/sprite-sheet.js.map +1 -0
- package/dist/icon/sprite.d.ts +23 -11
- package/dist/icon/sprite.d.ts.map +1 -1
- package/dist/icon/sprite.js +7 -0
- package/dist/icon/sprite.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/motion/animated.d.ts +34 -0
- package/dist/motion/animated.d.ts.map +1 -0
- package/dist/motion/animated.js +39 -0
- package/dist/motion/animated.js.map +1 -0
- package/dist/primitives/status-badge.d.ts +2 -2
- package/dist/primitives/status-badge.d.ts.map +1 -1
- package/dist/primitives/status-badge.js +3 -1
- package/dist/primitives/status-badge.js.map +1 -1
- package/dist/primitives/tabs.d.ts +31 -0
- package/dist/primitives/tabs.d.ts.map +1 -0
- package/dist/primitives/tabs.js +70 -0
- package/dist/primitives/tabs.js.map +1 -0
- package/dist/primitives/text.d.ts.map +1 -1
- package/dist/primitives/text.js +6 -0
- package/dist/primitives/text.js.map +1 -1
- package/dist/widgets/index.d.ts +1 -1
- package/dist/widgets/index.d.ts.map +1 -1
- package/dist/widgets/index.js +1 -1
- package/dist/widgets/index.js.map +1 -1
- package/package.json +10 -3
- package/src/heroui-theme.css +2 -0
- package/src/tokens.css +7 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heroui-theme.d.ts","sourceRoot":"","sources":["../src/heroui-theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAExE;;uEAEuE;AACvE,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"heroui-theme.d.ts","sourceRoot":"","sources":["../src/heroui-theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAExE;;uEAEuE;AACvE,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA4BtD,CAAC;AAEF;;sEAEsE;AACtE,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAW5D,CAAC;AAEF;;;wFAGwF;AACxF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAE5D;AAED;6CAC6C;AAC7C,eAAO,MAAM,yBAAyB,EAAE,WAAW,CAAC,MAAM,CAEzD,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,WAAW,EAAE,WAAW,CAAC,MAAM,CAAsD,CAAC"}
|
package/dist/heroui-theme.js
CHANGED
|
@@ -33,6 +33,8 @@ export const HEROUI_BASE_VAR_MAP = {
|
|
|
33
33
|
"--muted": "textWeak",
|
|
34
34
|
"--default": "bgWeak",
|
|
35
35
|
"--default-foreground": "textBase",
|
|
36
|
+
"--accent": "interactive",
|
|
37
|
+
"--accent-foreground": "textOnInteractive",
|
|
36
38
|
"--success": "success",
|
|
37
39
|
"--success-foreground": "textOnSuccess",
|
|
38
40
|
"--warning": "warning",
|
|
@@ -50,10 +52,8 @@ export const HEROUI_BASE_VAR_MAP = {
|
|
|
50
52
|
* its reason. The test asserts every key here still exists in HeroUI's
|
|
51
53
|
* `variables.css` (so a stale exclusion gets flagged on upgrade). */
|
|
52
54
|
export const HEROUI_BASE_VARS_UNMAPPED = {
|
|
53
|
-
"--
|
|
54
|
-
"--
|
|
55
|
-
"--focus": "= --accent by default; follows the accent decision.",
|
|
56
|
-
"--link": "= --foreground by default, which is already our text color.",
|
|
55
|
+
"--focus": "= var(--accent) in HeroUI's own variables.css → automatically resolves to our overridden --accent at use-time (CSS var refs resolve against the cascade), so no explicit override needed. Same mechanism as the --accent-hover/--accent-soft calculated vars.",
|
|
56
|
+
"--link": "= --foreground by default, which is already our text color (links are body text → must stay legible on bg; the interactive fill is not).",
|
|
57
57
|
"--field-placeholder": "= --muted by default; --muted IS mapped, so the placeholder inherits our value.",
|
|
58
58
|
"--field-border": "transparent by default (HeroUI fields are borderless); chrome borders come from --border.",
|
|
59
59
|
"--backdrop": "a fixed translucent-black scrim; mode-agnostic, not a themed surface.",
|
package/dist/heroui-theme.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heroui-theme.js","sourceRoot":"","sources":["../src/heroui-theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,UAAU,EAAE,KAAK,EAAkB,MAAM,qBAAqB,CAAC;AAExE;;uEAEuE;AACvE,MAAM,CAAC,MAAM,mBAAmB,GAA2B;IACzD,cAAc,EAAE,QAAQ;IACxB,cAAc,EAAE,UAAU;IAC1B,WAAW,EAAE,aAAa;IAC1B,sBAAsB,EAAE,UAAU;IAClC,qBAAqB,EAAE,eAAe;IACtC,gCAAgC,EAAE,UAAU;IAC5C,oBAAoB,EAAE,QAAQ;IAC9B,+BAA+B,EAAE,UAAU;IAC3C,WAAW,EAAE,eAAe;IAC5B,sBAAsB,EAAE,UAAU;IAClC,SAAS,EAAE,UAAU;IACrB,WAAW,EAAE,QAAQ;IACrB,sBAAsB,EAAE,UAAU;IAClC,WAAW,EAAE,SAAS;IACtB,sBAAsB,EAAE,eAAe;IACvC,WAAW,EAAE,SAAS;IACtB,sBAAsB,EAAE,eAAe;IACvC,UAAU,EAAE,OAAO;IACnB,qBAAqB,EAAE,aAAa;IACpC,UAAU,EAAE,YAAY;IACxB,aAAa,EAAE,YAAY;IAC3B,oBAAoB,EAAE,WAAW;IACjC,oBAAoB,EAAE,UAAU;IAChC,WAAW,EAAE,eAAe;IAC5B,sBAAsB,EAAE,UAAU;CACnC,CAAC;AAEF;;sEAEsE;AACtE,MAAM,CAAC,MAAM,yBAAyB,GAA2B;IAC/D,
|
|
1
|
+
{"version":3,"file":"heroui-theme.js","sourceRoot":"","sources":["../src/heroui-theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,UAAU,EAAE,KAAK,EAAkB,MAAM,qBAAqB,CAAC;AAExE;;uEAEuE;AACvE,MAAM,CAAC,MAAM,mBAAmB,GAA2B;IACzD,cAAc,EAAE,QAAQ;IACxB,cAAc,EAAE,UAAU;IAC1B,WAAW,EAAE,aAAa;IAC1B,sBAAsB,EAAE,UAAU;IAClC,qBAAqB,EAAE,eAAe;IACtC,gCAAgC,EAAE,UAAU;IAC5C,oBAAoB,EAAE,QAAQ;IAC9B,+BAA+B,EAAE,UAAU;IAC3C,WAAW,EAAE,eAAe;IAC5B,sBAAsB,EAAE,UAAU;IAClC,SAAS,EAAE,UAAU;IACrB,WAAW,EAAE,QAAQ;IACrB,sBAAsB,EAAE,UAAU;IAClC,UAAU,EAAE,aAAa;IACzB,qBAAqB,EAAE,mBAAmB;IAC1C,WAAW,EAAE,SAAS;IACtB,sBAAsB,EAAE,eAAe;IACvC,WAAW,EAAE,SAAS;IACtB,sBAAsB,EAAE,eAAe;IACvC,UAAU,EAAE,OAAO;IACnB,qBAAqB,EAAE,aAAa;IACpC,UAAU,EAAE,YAAY;IACxB,aAAa,EAAE,YAAY;IAC3B,oBAAoB,EAAE,WAAW;IACjC,oBAAoB,EAAE,UAAU;IAChC,WAAW,EAAE,eAAe;IAC5B,sBAAsB,EAAE,UAAU;CACnC,CAAC;AAEF;;sEAEsE;AACtE,MAAM,CAAC,MAAM,yBAAyB,GAA2B;IAC/D,SAAS,EACP,+PAA+P;IACjQ,QAAQ,EAAE,0IAA0I;IACpJ,qBAAqB,EAAE,iFAAiF;IACxG,gBAAgB,EAAE,2FAA2F;IAC7G,YAAY,EAAE,uEAAuE;IACrF,SAAS,EAAE,yCAAyC;IACpD,SAAS,EAAE,yCAAyC;IACpD,QAAQ,EAAE,yCAAyC;IACnD,WAAW,EAAE,yCAAyC;CACvD,CAAC;AAEF;;;wFAGwF;AACxF,MAAM,UAAU,oBAAoB,CAAC,IAAe;IAClD,OAAO,iBAAiB,IAAI,EAAE,CAAC;AACjC,CAAC;AAED;6CAC6C;AAC7C,MAAM,CAAC,MAAM,yBAAyB,GAAwB,IAAI,GAAG,CACnE,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAClE,CAAC;AAEF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,WAAW,GAAwB,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GENERATED by scripts/gen-sprite.ts — DO NOT EDIT. Run `bun run gen:sprite`.
|
|
3
|
+
* The build-time SVG spritesheet `[11.7]` (design §3.4). Mount <SpriteSheet/>
|
|
4
|
+
* once near the app root; reference glyphs by id via <Sprite name=…> (icon/sprite).
|
|
5
|
+
*/
|
|
6
|
+
import type { JSX } from "react";
|
|
7
|
+
export declare const SPRITE_PREFIX = "ch-sprite-";
|
|
8
|
+
/** The domain glyph ids baked into the sheet (sorted). */
|
|
9
|
+
export type SpriteName = "file" | "folder";
|
|
10
|
+
export declare const SPRITE_IDS: readonly SpriteName[];
|
|
11
|
+
/** Hidden <symbol> defs — mount ONCE (e.g. at the panel root). */
|
|
12
|
+
export declare function SpriteSheet(): JSX.Element;
|
|
13
|
+
//# sourceMappingURL=sprite-sheet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sprite-sheet.d.ts","sourceRoot":"","sources":["../../src/icon/sprite-sheet.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAEjC,eAAO,MAAM,aAAa,eAAe,CAAC;AAE1C,0DAA0D;AAC1D,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;AAC3C,eAAO,MAAM,UAAU,EAAE,SAAS,UAAU,EAAuB,CAAC;AAEpE,kEAAkE;AAClE,wBAAgB,WAAW,IAAI,GAAG,CAAC,OAAO,CAOzC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export const SPRITE_PREFIX = "ch-sprite-";
|
|
3
|
+
export const SPRITE_IDS = ["file", "folder"];
|
|
4
|
+
/** Hidden <symbol> defs — mount ONCE (e.g. at the panel root). */
|
|
5
|
+
export function SpriteSheet() {
|
|
6
|
+
return (_jsxs("svg", { width: 0, height: 0, "aria-hidden": "true", focusable: "false", style: { position: "absolute" }, children: [_jsxs("symbol", { id: `${SPRITE_PREFIX}file`, viewBox: "0 0 16 16", children: [_jsx("path", { d: "M4 2h5l3 3v9H4z" }), _jsx("path", { d: "M9 2v3h3" })] }), _jsx("symbol", { id: `${SPRITE_PREFIX}folder`, viewBox: "0 0 16 16", children: _jsx("path", { d: "M2 4h4l1.5 1.5H14v8H2z" }) })] }));
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=sprite-sheet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sprite-sheet.js","sourceRoot":"","sources":["../../src/icon/sprite-sheet.tsx"],"names":[],"mappings":";AAOA,MAAM,CAAC,MAAM,aAAa,GAAG,YAAY,CAAC;AAI1C,MAAM,CAAC,MAAM,UAAU,GAA0B,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAEpE,kEAAkE;AAClE,MAAM,UAAU,WAAW;IACzB,OAAO,CACL,eAAK,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,iBAAc,MAAM,EAAC,SAAS,EAAC,OAAO,EAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,aAC5F,kBAAQ,EAAE,EAAE,GAAG,aAAa,MAAM,EAAE,OAAO,EAAC,WAAW,aAAC,eAAM,CAAC,EAAC,iBAAiB,GAAE,EAAA,eAAM,CAAC,EAAC,UAAU,GAAE,IAAS,EAChH,iBAAQ,EAAE,EAAE,GAAG,aAAa,QAAQ,EAAE,OAAO,EAAC,WAAW,YAAC,eAAM,CAAC,EAAC,wBAAwB,GAAE,GAAS,IACjG,CACP,CAAC;AACJ,CAAC"}
|
package/dist/icon/sprite.d.ts
CHANGED
|
@@ -1,18 +1,30 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* (7.3 / task 03 — W2) Domain-icon tier
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
2
|
+
* (7.3 / task 03 — W2 + followup) Domain-icon tier `[11.7]` (design §3.4). The
|
|
3
|
+
* build-time SVG spritesheet is now WIRED: `scripts/gen-sprite.ts` reads
|
|
4
|
+
* `src/icons/*.svg` → `sprite-sheet.tsx` (one hidden `<symbol>` sheet), and
|
|
5
|
+
* `<Sprite name=…>` references a glyph by id via `<use>`, so high-cardinality
|
|
6
|
+
* domain glyphs (Monaco file-type tree, provider logos) cost one request +
|
|
7
|
+
* tree-shake by id, themed by `currentColor`.
|
|
7
8
|
*
|
|
8
|
-
*
|
|
9
|
-
* file-type
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* to task 05.
|
|
9
|
+
* SCAFFOLD scope (docs/7.3 §3.4): the mechanism + example glyphs (file/folder) +
|
|
10
|
+
* the in-use `GitStatusIcon`. The FULL file-type set lands with **task 05** (the
|
|
11
|
+
* Monaco file tree that consumes it) — tracked, not a silent truncation.
|
|
12
|
+
* (Divergence from opencode's vite virtual-module plugin: a committed generated
|
|
13
|
+
* sheet is build-time-equivalent but safe under `bun test`/`tsc` — see gen-sprite.)
|
|
14
14
|
*/
|
|
15
15
|
import type { LucideProps } from "lucide-react";
|
|
16
|
+
import { type SpriteName } from "./sprite-sheet.js";
|
|
17
|
+
export interface SpriteProps {
|
|
18
|
+
name: SpriteName;
|
|
19
|
+
size?: number;
|
|
20
|
+
className?: string;
|
|
21
|
+
/** Provide for a meaningful glyph; omit to mark decorative (aria-hidden). */
|
|
22
|
+
"aria-label"?: string;
|
|
23
|
+
}
|
|
24
|
+
/** Render a domain glyph from the spritesheet by id. Requires <SpriteSheet/> to
|
|
25
|
+
* be mounted once in the tree (icon/sprite-sheet). */
|
|
26
|
+
export declare function Sprite({ name, size, className, "aria-label": ariaLabel }: SpriteProps): import("react/jsx-runtime").JSX.Element;
|
|
27
|
+
export { SpriteSheet, SPRITE_IDS, type SpriteName } from "./sprite-sheet.js";
|
|
16
28
|
/** Git working-tree status → a curated chrome glyph + tone token class.
|
|
17
29
|
* (5-block change-bar density lives in the diff module; this is the tree/sidebar
|
|
18
30
|
* per-file marker.) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sprite.d.ts","sourceRoot":"","sources":["../../src/icon/sprite.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"sprite.d.ts","sourceRoot":"","sources":["../../src/icon/sprite.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEnE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;uDACuD;AACvD,wBAAgB,MAAM,CAAC,EAAE,IAAI,EAAE,IAAS,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,WAAW,2CAa1F;AAED,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE7E;;wBAEwB;AACxB,eAAO,MAAM,eAAe;;;;;;CAMqE,CAAC;AAElG,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,MAAM,CAAC;IAC3E,MAAM,EAAE,MAAM,OAAO,eAAe,CAAC;CACtC;AAED,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,EAAE,kBAAkB,2CAEpE"}
|
package/dist/icon/sprite.js
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { Icon } from "./icon.js";
|
|
3
|
+
import { SPRITE_PREFIX } from "./sprite-sheet.js";
|
|
4
|
+
/** Render a domain glyph from the spritesheet by id. Requires <SpriteSheet/> to
|
|
5
|
+
* be mounted once in the tree (icon/sprite-sheet). */
|
|
6
|
+
export function Sprite({ name, size = 16, className, "aria-label": ariaLabel }) {
|
|
7
|
+
return (_jsx("svg", { width: size, height: size, className: className, role: ariaLabel ? "img" : undefined, "aria-label": ariaLabel, "aria-hidden": ariaLabel ? undefined : true, children: _jsx("use", { href: `#${SPRITE_PREFIX}${name}` }) }));
|
|
8
|
+
}
|
|
9
|
+
export { SpriteSheet, SPRITE_IDS } from "./sprite-sheet.js";
|
|
3
10
|
/** Git working-tree status → a curated chrome glyph + tone token class.
|
|
4
11
|
* (5-block change-bar density lives in the diff module; this is the tree/sidebar
|
|
5
12
|
* per-file marker.) */
|
package/dist/icon/sprite.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sprite.js","sourceRoot":"","sources":["../../src/icon/sprite.tsx"],"names":[],"mappings":";AAeA,OAAO,EAAE,IAAI,EAAiB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"sprite.js","sourceRoot":"","sources":["../../src/icon/sprite.tsx"],"names":[],"mappings":";AAeA,OAAO,EAAE,IAAI,EAAiB,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,aAAa,EAAmB,MAAM,mBAAmB,CAAC;AAUnE;uDACuD;AACvD,MAAM,UAAU,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAe;IACzF,OAAO,CACL,cACE,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,EACZ,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,gBACvB,SAAS,iBACR,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,YAEzC,cAAK,IAAI,EAAE,IAAI,aAAa,GAAG,IAAI,EAAE,GAAI,GACrC,CACP,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,WAAW,EAAE,UAAU,EAAmB,MAAM,mBAAmB,CAAC;AAE7E;;wBAEwB;AACxB,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,KAAK,EAAE,MAAM;IACb,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,OAAO;IAChB,SAAS,EAAE,YAAY;IACvB,OAAO,EAAE,eAAe;CACuE,CAAC;AAMlG,MAAM,UAAU,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAsB;IACnE,OAAO,KAAC,IAAI,IAAC,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,KAAM,IAAI,GAAI,CAAC;AAC3D,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -17,9 +17,11 @@ export { Text, text, type TextProps, type TextVariants } from "./primitives/text
|
|
|
17
17
|
export { Button, button, type ButtonProps, type ButtonVariants } from "./primitives/button.js";
|
|
18
18
|
export { Card } from "./primitives/card.js";
|
|
19
19
|
export { ScrollArea } from "./primitives/scroll-area.js";
|
|
20
|
+
export { Tabs, type TabItem, type TabsProps } from "./primitives/tabs.js";
|
|
20
21
|
export { StatusBadge, statusBadge, type StatusBadgeProps, type StatusBadgeVariants } from "./primitives/status-badge.js";
|
|
21
22
|
export { Icon, ICON_REGISTRY, type IconName, type IconProps } from "./icon/icon.js";
|
|
22
23
|
export { GitStatusIcon, GIT_STATUS_ICON, type GitStatusIconProps } from "./icon/sprite.js";
|
|
24
|
+
export { Sprite, SpriteSheet, SPRITE_IDS, type SpriteName, type SpriteProps } from "./icon/sprite.js";
|
|
23
25
|
export { HEROUI_BASE_VAR_MAP, HEROUI_BASE_VARS_UNMAPPED, heroUiThemeClassName, } from "./heroui-theme.js";
|
|
24
26
|
export { ChangeBar, changeBarBlocks, type ChangeBarProps, type ChangeBarBlocks } from "./diff/change-bar.js";
|
|
25
27
|
export { seedThemeToMonaco, type MonacoThemeData, type MonacoTokenRule } from "./diff/monaco-theme.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAI9E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACpG,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC/F,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAI9E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACpG,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC/F,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAGzD,OAAO,EAAE,IAAI,EAAE,KAAK,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAGzH,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAG3F,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAMtG,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC7G,OAAO,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -19,10 +19,16 @@ export { Text, text } from "./primitives/text.js";
|
|
|
19
19
|
export { Button, button } from "./primitives/button.js";
|
|
20
20
|
export { Card } from "./primitives/card.js";
|
|
21
21
|
export { ScrollArea } from "./primitives/scroll-area.js";
|
|
22
|
+
// Lightweight self-built Tabs (design §3.2); the HeroUI `Tabs` (richer collection
|
|
23
|
+
// behavior) is the separate `./widgets` entry.
|
|
24
|
+
export { Tabs } from "./primitives/tabs.js";
|
|
22
25
|
export { StatusBadge, statusBadge } from "./primitives/status-badge.js";
|
|
23
26
|
// (W2) Icons: typed lucide facade (general tier) + git-status domain glyph.
|
|
24
27
|
export { Icon, ICON_REGISTRY } from "./icon/icon.js";
|
|
25
28
|
export { GitStatusIcon, GIT_STATUS_ICON } from "./icon/sprite.js";
|
|
29
|
+
// (followup) build-time SVG spritesheet [11.7]: mount <SpriteSheet/> once, render
|
|
30
|
+
// domain glyphs by id via <Sprite>. Scaffold glyphs; full file-type set → task 05.
|
|
31
|
+
export { Sprite, SpriteSheet, SPRITE_IDS } from "./icon/sprite.js";
|
|
26
32
|
// (W3a) HeroUI theme wiring — the base-var override map + the panel-root class
|
|
27
33
|
// helper. HeroUI-FREE (just the map + a kebab string), so it lives in the main
|
|
28
34
|
// barrel; the HeroUI widget wrappers themselves are the separate `./widgets`
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,cAAc,EAAoB,MAAM,iBAAiB,CAAC;AAE9E,2EAA2E;AAC3E,6EAA6E;AAC7E,OAAO,EAAE,OAAO,EAAE,OAAO,EAA2C,MAAM,yBAAyB,CAAC;AACpG,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAqC,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAyC,MAAM,wBAAwB,CAAC;AAC/F,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAmD,MAAM,8BAA8B,CAAC;AAEzH,4EAA4E;AAC5E,OAAO,EAAE,IAAI,EAAE,aAAa,EAAiC,MAAM,gBAAgB,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,eAAe,EAA2B,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,cAAc,EAAoB,MAAM,iBAAiB,CAAC;AAE9E,2EAA2E;AAC3E,6EAA6E;AAC7E,OAAO,EAAE,OAAO,EAAE,OAAO,EAA2C,MAAM,yBAAyB,CAAC;AACpG,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAqC,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAyC,MAAM,wBAAwB,CAAC;AAC/F,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,kFAAkF;AAClF,+CAA+C;AAC/C,OAAO,EAAE,IAAI,EAAgC,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,WAAW,EAAmD,MAAM,8BAA8B,CAAC;AAEzH,4EAA4E;AAC5E,OAAO,EAAE,IAAI,EAAE,aAAa,EAAiC,MAAM,gBAAgB,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,eAAe,EAA2B,MAAM,kBAAkB,CAAC;AAC3F,kFAAkF;AAClF,mFAAmF;AACnF,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAqC,MAAM,kBAAkB,CAAC;AAEtG,+EAA+E;AAC/E,+EAA+E;AAC/E,6EAA6E;AAC7E,2EAA2E;AAC3E,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAE3B,8EAA8E;AAC9E,4DAA4D;AAC5D,OAAO,EAAE,SAAS,EAAE,eAAe,EAA6C,MAAM,sBAAsB,CAAC;AAC7G,OAAO,EAAE,iBAAiB,EAA8C,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* (7.3 / task 03 — followup) `motion`-powered high-value animations `[11.8]`
|
|
3
|
+
* (design §3.6). The design's rule is "CSS transitions for 90%, reach for motion
|
|
4
|
+
* ONLY at high-value moments" — these are exactly those two moments:
|
|
5
|
+
* - `AnimatedNumber` — a streaming token-count / context-gauge that springs from
|
|
6
|
+
* its old value to the new one (the live-number moment);
|
|
7
|
+
* - `SlideIn` — mount/unmount slide+fade for transient surfaces (the panel
|
|
8
|
+
* slide-in moment), via `AnimatePresence`.
|
|
9
|
+
*
|
|
10
|
+
* `motion` honours `prefers-reduced-motion` automatically. Browser-safe (no
|
|
11
|
+
* `node:*`); `motion/react` is a normal dep. These live on a separate `./motion`
|
|
12
|
+
* entry so the chrome barrel stays motion-free for consumers that don't need it.
|
|
13
|
+
*/
|
|
14
|
+
import { type ReactNode } from "react";
|
|
15
|
+
export interface AnimatedNumberProps {
|
|
16
|
+
value: number;
|
|
17
|
+
className?: string;
|
|
18
|
+
/** Locale for the formatted output (default: host locale). */
|
|
19
|
+
locale?: string;
|
|
20
|
+
}
|
|
21
|
+
/** A number that springs smoothly to `value` as it changes — for live token
|
|
22
|
+
* counts / context gauges. Renders the rounded, locale-formatted value. */
|
|
23
|
+
export declare function AnimatedNumber({ value, className, locale }: AnimatedNumberProps): import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
export interface SlideInProps {
|
|
25
|
+
children: ReactNode;
|
|
26
|
+
/** When false, the child animates out (and unmounts). */
|
|
27
|
+
show?: boolean;
|
|
28
|
+
/** Edge the panel slides from. */
|
|
29
|
+
from?: "right" | "left" | "bottom" | "top";
|
|
30
|
+
className?: string;
|
|
31
|
+
}
|
|
32
|
+
/** Slide + fade a transient surface (drawer/sidebar/notification) in and out. */
|
|
33
|
+
export declare function SlideIn({ children, show, from, className }: SlideInProps): import("react/jsx-runtime").JSX.Element;
|
|
34
|
+
//# sourceMappingURL=animated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animated.d.ts","sourceRoot":"","sources":["../../src/motion/animated.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlD,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;4EAC4E;AAC5E,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,mBAAmB,2CAO/E;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,SAAS,CAAC;IACpB,yDAAyD;IACzD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,kCAAkC;IAClC,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AASD,iFAAiF;AACjF,wBAAgB,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAW,EAAE,IAAc,EAAE,SAAS,EAAE,EAAE,YAAY,2CAiBzF"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* (7.3 / task 03 — followup) `motion`-powered high-value animations `[11.8]`
|
|
4
|
+
* (design §3.6). The design's rule is "CSS transitions for 90%, reach for motion
|
|
5
|
+
* ONLY at high-value moments" — these are exactly those two moments:
|
|
6
|
+
* - `AnimatedNumber` — a streaming token-count / context-gauge that springs from
|
|
7
|
+
* its old value to the new one (the live-number moment);
|
|
8
|
+
* - `SlideIn` — mount/unmount slide+fade for transient surfaces (the panel
|
|
9
|
+
* slide-in moment), via `AnimatePresence`.
|
|
10
|
+
*
|
|
11
|
+
* `motion` honours `prefers-reduced-motion` automatically. Browser-safe (no
|
|
12
|
+
* `node:*`); `motion/react` is a normal dep. These live on a separate `./motion`
|
|
13
|
+
* entry so the chrome barrel stays motion-free for consumers that don't need it.
|
|
14
|
+
*/
|
|
15
|
+
import { useEffect } from "react";
|
|
16
|
+
import { AnimatePresence, motion, useSpring, useTransform } from "motion/react";
|
|
17
|
+
import { cn } from "../cn.js";
|
|
18
|
+
/** A number that springs smoothly to `value` as it changes — for live token
|
|
19
|
+
* counts / context gauges. Renders the rounded, locale-formatted value. */
|
|
20
|
+
export function AnimatedNumber({ value, className, locale }) {
|
|
21
|
+
const spring = useSpring(value, { stiffness: 140, damping: 22, mass: 0.6 });
|
|
22
|
+
const text = useTransform(spring, (v) => Math.round(v).toLocaleString(locale));
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
spring.set(value);
|
|
25
|
+
}, [value, spring]);
|
|
26
|
+
return _jsx(motion.span, { className: cn("tabular-nums", className), children: text });
|
|
27
|
+
}
|
|
28
|
+
const OFFSET = {
|
|
29
|
+
right: { x: 24 },
|
|
30
|
+
left: { x: -24 },
|
|
31
|
+
bottom: { y: 24 },
|
|
32
|
+
top: { y: -24 },
|
|
33
|
+
};
|
|
34
|
+
/** Slide + fade a transient surface (drawer/sidebar/notification) in and out. */
|
|
35
|
+
export function SlideIn({ children, show = true, from = "right", className }) {
|
|
36
|
+
const offset = OFFSET[from];
|
|
37
|
+
return (_jsx(AnimatePresence, { children: show && (_jsx(motion.div, { className: className, initial: { opacity: 0, ...offset }, animate: { opacity: 1, x: 0, y: 0 }, exit: { opacity: 0, ...offset }, transition: { type: "spring", stiffness: 300, damping: 30 }, children: children })) }));
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=animated.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animated.js","sourceRoot":"","sources":["../../src/motion/animated.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,SAAS,EAAkB,MAAM,OAAO,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAS9B;4EAC4E;AAC5E,MAAM,UAAU,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAuB;IAC9E,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5E,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/E,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IACpB,OAAO,KAAC,MAAM,CAAC,IAAI,IAAC,SAAS,EAAE,EAAE,CAAC,cAAc,EAAE,SAAS,CAAC,YAAG,IAAI,GAAe,CAAC;AACrF,CAAC;AAWD,MAAM,MAAM,GAA0E;IACpF,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;IAChB,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;IAChB,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;IACjB,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;CAChB,CAAC;AAEF,iFAAiF;AACjF,MAAM,UAAU,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,OAAO,EAAE,SAAS,EAAgB;IACxF,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5B,OAAO,CACL,KAAC,eAAe,cACb,IAAI,IAAI,CACP,KAAC,MAAM,CAAC,GAAG,IACT,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,EAClC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EACnC,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,EAC/B,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,YAE1D,QAAQ,GACE,CACd,GACe,CACnB,CAAC;AACJ,CAAC"}
|
|
@@ -14,7 +14,7 @@ export declare const statusBadge: import("tailwind-variants").TVReturnType<{
|
|
|
14
14
|
error: string;
|
|
15
15
|
neutral: string;
|
|
16
16
|
};
|
|
17
|
-
}, undefined, "inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium", {
|
|
17
|
+
}, undefined, "inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium transition-colors", {
|
|
18
18
|
tone: {
|
|
19
19
|
plan: string;
|
|
20
20
|
accept: string;
|
|
@@ -32,7 +32,7 @@ export declare const statusBadge: import("tailwind-variants").TVReturnType<{
|
|
|
32
32
|
error: string;
|
|
33
33
|
neutral: string;
|
|
34
34
|
};
|
|
35
|
-
}, undefined, "inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium", unknown, unknown, undefined>>;
|
|
35
|
+
}, undefined, "inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium transition-colors", unknown, unknown, undefined>>;
|
|
36
36
|
export type StatusBadgeVariants = VariantProps<typeof statusBadge>;
|
|
37
37
|
export interface StatusBadgeProps extends StatusBadgeVariants {
|
|
38
38
|
children?: ReactNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status-badge.d.ts","sourceRoot":"","sources":["../../src/primitives/status-badge.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAM,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAG1D,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"status-badge.d.ts","sourceRoot":"","sources":["../../src/primitives/status-badge.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAM,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAG1D,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;4IAetB,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,YAAY,CAAC,OAAO,WAAW,CAAC,CAAC;AAEnE,MAAM,WAAW,gBAAiB,SAAQ,mBAAmB;IAC3D,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,gBAAgB,2CAE1E"}
|
|
@@ -2,7 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { tv } from "tailwind-variants";
|
|
3
3
|
import { cn } from "../cn.js";
|
|
4
4
|
export const statusBadge = tv({
|
|
5
|
-
base: "inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium",
|
|
5
|
+
base: "inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium transition-colors",
|
|
6
6
|
variants: {
|
|
7
7
|
tone: {
|
|
8
8
|
plan: "text-plan-mode border border-plan-mode",
|
|
@@ -10,6 +10,8 @@ export const statusBadge = tv({
|
|
|
10
10
|
success: "text-success border border-success",
|
|
11
11
|
warning: "text-warning border border-warning",
|
|
12
12
|
error: "text-error border border-error",
|
|
13
|
+
// text-weak (AA-normal after the neutral-scale repair, §11) + a neutral
|
|
14
|
+
// border — muted but legible at the badge's xs size.
|
|
13
15
|
neutral: "text-text-weak border border-border-base",
|
|
14
16
|
},
|
|
15
17
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status-badge.js","sourceRoot":"","sources":["../../src/primitives/status-badge.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,EAAE,EAAqB,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAE9B,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;IAC5B,IAAI,EAAE
|
|
1
|
+
{"version":3,"file":"status-badge.js","sourceRoot":"","sources":["../../src/primitives/status-badge.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,EAAE,EAAqB,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAE9B,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;IAC5B,IAAI,EAAE,+FAA+F;IACrG,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,IAAI,EAAE,wCAAwC;YAC9C,MAAM,EAAE,4CAA4C;YACpD,OAAO,EAAE,oCAAoC;YAC7C,OAAO,EAAE,oCAAoC;YAC7C,KAAK,EAAE,gCAAgC;YACvC,wEAAwE;YACxE,qDAAqD;YACrD,OAAO,EAAE,0CAA0C;SACpD;KACF;IACD,eAAe,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;CACrC,CAAC,CAAC;AASH,MAAM,UAAU,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAoB;IACzE,OAAO,eAAM,SAAS,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,YAAG,QAAQ,GAAQ,CAAC;AAClF,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* (7.3 / task 03 — followup) `Tabs` — the self-built LIGHTWEIGHT tab control
|
|
3
|
+
* `[11.1]` (design §3.2: "Tabs 自建轻量;重 Tabs 用 HeroUI"). For simple segmented
|
|
4
|
+
* views that don't need HeroUI's full overlay/collection machinery — a panel
|
|
5
|
+
* switcher with correct ARIA (`tablist`/`tab`/`tabpanel`, `aria-selected`,
|
|
6
|
+
* `aria-controls`, roving `tabIndex` + ←/→/Home/End keyboard nav) so it clears
|
|
7
|
+
* the a11y gate. Controlled (`selectedId`) or uncontrolled (`defaultSelectedId`).
|
|
8
|
+
* `transition-colors` on the tabs ([11.8] CSS-transition tier). Browser-safe.
|
|
9
|
+
*
|
|
10
|
+
* Reach for the HeroUI `Tabs` (./widgets) when you need its richer collection /
|
|
11
|
+
* orientation / disabled-key behavior; this stays deliberately small.
|
|
12
|
+
*/
|
|
13
|
+
import { type ReactNode } from "react";
|
|
14
|
+
export interface TabItem {
|
|
15
|
+
id: string;
|
|
16
|
+
label: ReactNode;
|
|
17
|
+
/** Panel content; rendered only for the active tab. */
|
|
18
|
+
content?: ReactNode;
|
|
19
|
+
}
|
|
20
|
+
export interface TabsProps {
|
|
21
|
+
items: readonly TabItem[];
|
|
22
|
+
/** Controlled active tab id. Omit + use `defaultSelectedId` for uncontrolled. */
|
|
23
|
+
selectedId?: string;
|
|
24
|
+
defaultSelectedId?: string;
|
|
25
|
+
onSelect?: (id: string) => void;
|
|
26
|
+
/** Required: the tablist has no visible label of its own. */
|
|
27
|
+
"aria-label": string;
|
|
28
|
+
className?: string;
|
|
29
|
+
}
|
|
30
|
+
export declare function Tabs({ items, selectedId, defaultSelectedId, onSelect, "aria-label": ariaLabel, className }: TabsProps): import("react/jsx-runtime").JSX.Element;
|
|
31
|
+
//# sourceMappingURL=tabs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../src/primitives/tabs.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAA4D,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAIjG,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,SAAS,CAAC;IACjB,uDAAuD;IACvD,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;IAC1B,iFAAiF;IACjF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,6DAA6D;IAC7D,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAeD,wBAAgB,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,SAAS,2CAwErH"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* (7.3 / task 03 — followup) `Tabs` — the self-built LIGHTWEIGHT tab control
|
|
4
|
+
* `[11.1]` (design §3.2: "Tabs 自建轻量;重 Tabs 用 HeroUI"). For simple segmented
|
|
5
|
+
* views that don't need HeroUI's full overlay/collection machinery — a panel
|
|
6
|
+
* switcher with correct ARIA (`tablist`/`tab`/`tabpanel`, `aria-selected`,
|
|
7
|
+
* `aria-controls`, roving `tabIndex` + ←/→/Home/End keyboard nav) so it clears
|
|
8
|
+
* the a11y gate. Controlled (`selectedId`) or uncontrolled (`defaultSelectedId`).
|
|
9
|
+
* `transition-colors` on the tabs ([11.8] CSS-transition tier). Browser-safe.
|
|
10
|
+
*
|
|
11
|
+
* Reach for the HeroUI `Tabs` (./widgets) when you need its richer collection /
|
|
12
|
+
* orientation / disabled-key behavior; this stays deliberately small.
|
|
13
|
+
*/
|
|
14
|
+
import { useCallback, useId, useRef, useState } from "react";
|
|
15
|
+
import { tv } from "tailwind-variants";
|
|
16
|
+
import { cn } from "../cn.js";
|
|
17
|
+
const tab = tv({
|
|
18
|
+
base: "relative px-3 py-1.5 text-sm font-medium transition-colors outline-none border-b-2 -mb-px focus-visible:ring-2 focus-visible:ring-border-focus rounded-t-sm",
|
|
19
|
+
variants: {
|
|
20
|
+
// Inactive tabs use text-weak (now AA-normal in every theme after the
|
|
21
|
+
// neutral-scale repair, §11) for the proper de-emphasis; active adds weight +
|
|
22
|
+
// the accent underline. Both clear WCAG AA at this sm size.
|
|
23
|
+
active: {
|
|
24
|
+
true: "text-text-base border-accent font-semibold",
|
|
25
|
+
false: "text-text-weak border-transparent hover:text-text-base hover:border-border-base",
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
export function Tabs({ items, selectedId, defaultSelectedId, onSelect, "aria-label": ariaLabel, className }) {
|
|
30
|
+
const baseId = useId();
|
|
31
|
+
const isControlled = selectedId != null;
|
|
32
|
+
const [internal, setInternal] = useState(defaultSelectedId ?? items[0]?.id ?? "");
|
|
33
|
+
const active = isControlled ? selectedId : internal;
|
|
34
|
+
const tabRefs = useRef({});
|
|
35
|
+
const select = useCallback((id) => {
|
|
36
|
+
if (!isControlled)
|
|
37
|
+
setInternal(id);
|
|
38
|
+
onSelect?.(id);
|
|
39
|
+
}, [isControlled, onSelect]);
|
|
40
|
+
const onKeyDown = (e) => {
|
|
41
|
+
const idx = items.findIndex((it) => it.id === active);
|
|
42
|
+
if (idx < 0)
|
|
43
|
+
return;
|
|
44
|
+
let next = idx;
|
|
45
|
+
if (e.key === "ArrowRight")
|
|
46
|
+
next = (idx + 1) % items.length;
|
|
47
|
+
else if (e.key === "ArrowLeft")
|
|
48
|
+
next = (idx - 1 + items.length) % items.length;
|
|
49
|
+
else if (e.key === "Home")
|
|
50
|
+
next = 0;
|
|
51
|
+
else if (e.key === "End")
|
|
52
|
+
next = items.length - 1;
|
|
53
|
+
else
|
|
54
|
+
return;
|
|
55
|
+
e.preventDefault();
|
|
56
|
+
const nextId = items[next]?.id;
|
|
57
|
+
if (nextId == null)
|
|
58
|
+
return;
|
|
59
|
+
select(nextId);
|
|
60
|
+
tabRefs.current[nextId]?.focus();
|
|
61
|
+
};
|
|
62
|
+
const activeItem = items.find((it) => it.id === active);
|
|
63
|
+
return (_jsxs("div", { className: cn("flex flex-col", className), children: [_jsx("div", { role: "tablist", "aria-label": ariaLabel, className: "flex flex-row border-b border-border-base", children: items.map((it) => {
|
|
64
|
+
const isActive = it.id === active;
|
|
65
|
+
return (_jsx("button", { ref: (el) => {
|
|
66
|
+
tabRefs.current[it.id] = el;
|
|
67
|
+
}, role: "tab", type: "button", id: `${baseId}-tab-${it.id}`, "aria-selected": isActive, "aria-controls": `${baseId}-panel-${it.id}`, tabIndex: isActive ? 0 : -1, className: tab({ active: isActive }), onClick: () => select(it.id), onKeyDown: onKeyDown, children: it.label }, it.id));
|
|
68
|
+
}) }), activeItem && (_jsx("div", { role: "tabpanel", id: `${baseId}-panel-${activeItem.id}`, "aria-labelledby": `${baseId}-tab-${activeItem.id}`, tabIndex: 0, className: "pt-3 outline-none animate-in fade-in duration-150", children: activeItem.content }))] }));
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=tabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../src/primitives/tabs.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAsC,MAAM,OAAO,CAAC;AACjG,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAoB9B,MAAM,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,EAAE,6JAA6J;IACnK,QAAQ,EAAE;QACR,sEAAsE;QACtE,8EAA8E;QAC9E,4DAA4D;QAC5D,MAAM,EAAE;YACN,IAAI,EAAE,4CAA4C;YAClD,KAAK,EAAE,iFAAiF;SACzF;KACF;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAa;IACpH,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC;IACvB,MAAM,YAAY,GAAG,UAAU,IAAI,IAAI,CAAC;IACxC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAS,iBAAiB,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1F,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;IACpD,MAAM,OAAO,GAAG,MAAM,CAA2C,EAAE,CAAC,CAAC;IAErE,MAAM,MAAM,GAAG,WAAW,CACxB,CAAC,EAAU,EAAE,EAAE;QACb,IAAI,CAAC,YAAY;YAAE,WAAW,CAAC,EAAE,CAAC,CAAC;QACnC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC,EACD,CAAC,YAAY,EAAE,QAAQ,CAAC,CACzB,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,CAAmC,EAAE,EAAE;QACxD,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;QACtD,IAAI,GAAG,GAAG,CAAC;YAAE,OAAO;QACpB,IAAI,IAAI,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,CAAC,GAAG,KAAK,YAAY;YAAE,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;aACvD,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW;YAAE,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;aAC1E,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM;YAAE,IAAI,GAAG,CAAC,CAAC;aAC/B,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK;YAAE,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;;YAC7C,OAAO;QACZ,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QAC/B,IAAI,MAAM,IAAI,IAAI;YAAE,OAAO;QAC3B,MAAM,CAAC,MAAM,CAAC,CAAC;QACf,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IACnC,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;IAExD,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,eAAe,EAAE,SAAS,CAAC,aAC5C,cAAK,IAAI,EAAC,SAAS,gBAAa,SAAS,EAAE,SAAS,EAAC,2CAA2C,YAC7F,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;oBAChB,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,KAAK,MAAM,CAAC;oBAClC,OAAO,CACL,iBAEE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE;4BACV,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;wBAC9B,CAAC,EACD,IAAI,EAAC,KAAK,EACV,IAAI,EAAC,QAAQ,EACb,EAAE,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC,EAAE,EAAE,mBACb,QAAQ,mBACR,GAAG,MAAM,UAAU,EAAE,CAAC,EAAE,EAAE,EACzC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC3B,SAAS,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EACpC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5B,SAAS,EAAE,SAAS,YAEnB,EAAE,CAAC,KAAK,IAdJ,EAAE,CAAC,EAAE,CAeH,CACV,CAAC;gBACJ,CAAC,CAAC,GACE,EACL,UAAU,IAAI,CACb,cACE,IAAI,EAAC,UAAU,EACf,EAAE,EAAE,GAAG,MAAM,UAAU,UAAU,CAAC,EAAE,EAAE,qBACrB,GAAG,MAAM,QAAQ,UAAU,CAAC,EAAE,EAAE,EACjD,QAAQ,EAAE,CAAC,EACX,SAAS,EAAC,mDAAmD,YAE5D,UAAU,CAAC,OAAO,GACf,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/primitives/text.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,EAAM,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAG1D,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/primitives/text.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,EAAM,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAG1D,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+CA2Bf,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,IAAI,CAAC,CAAC;AAErD,KAAK,WAAW,GAAG,MAAM,GAAG,GAAG,GAAG,KAAK,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,OAAO,GAAG,QAAQ,CAAC;AAElG,MAAM,WAAW,SAAU,SAAQ,YAAY;IAC7C,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,IAAI,CAAC,EAAE,EAAW,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,SAAS,2CAOhH"}
|
package/dist/primitives/text.js
CHANGED
|
@@ -4,6 +4,12 @@ import { cn } from "../cn.js";
|
|
|
4
4
|
export const text = tv({
|
|
5
5
|
base: "",
|
|
6
6
|
variants: {
|
|
7
|
+
// CONTRAST CONTRACT (engine-measured, see ui-core engine.test WCAG gate):
|
|
8
|
+
// base/weak/strong → WCAG AA-normal (≥4.5) — safe for body copy at any size.
|
|
9
|
+
// weaker → AA-large (≥3.0) — distinguishable secondary/dim text.
|
|
10
|
+
// Guaranteed across every built-in theme × mode by the neutral-scale repair
|
|
11
|
+
// (§11): the text segment is monotonic + meets these floors even in light mode.
|
|
12
|
+
// The Storybook axe gate (scripts/a11y-stories.ts) still backstops misuse.
|
|
7
13
|
tone: {
|
|
8
14
|
base: "text-text-base",
|
|
9
15
|
weak: "text-text-weak",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/primitives/text.tsx"],"names":[],"mappings":";AAQA,OAAO,EAAE,EAAE,EAAqB,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAE9B,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;IACrB,IAAI,EAAE,EAAE;IACR,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,IAAI,EAAE,gBAAgB;YACtB,IAAI,EAAE,gBAAgB;YACtB,MAAM,EAAE,kBAAkB;YAC1B,MAAM,EAAE,kBAAkB;YAC1B,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE,cAAc;YACvB,KAAK,EAAE,YAAY;YACnB,OAAO,EAAE,cAAc;YACvB,UAAU,EAAE,iBAAiB;YAC7B,OAAO,EAAE,EAAE;SACZ;QACD,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE;QACrF,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE;QACtG,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE;QACtC,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE;KAC1C;IACD,eAAe,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE;CAChE,CAAC,CAAC;AAcH,MAAM,UAAU,IAAI,CAAC,EAAE,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAa;IAC/G,MAAM,IAAI,GAAG,EAAE,CAAC;IAChB,OAAO,CACL,KAAC,IAAI,IAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,KAAM,IAAI,YACnF,QAAQ,GACJ,CACR,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/primitives/text.tsx"],"names":[],"mappings":";AAQA,OAAO,EAAE,EAAE,EAAqB,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAE9B,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;IACrB,IAAI,EAAE,EAAE;IACR,QAAQ,EAAE;QACR,0EAA0E;QAC1E,+EAA+E;QAC/E,6EAA6E;QAC7E,4EAA4E;QAC5E,gFAAgF;QAChF,2EAA2E;QAC3E,IAAI,EAAE;YACJ,IAAI,EAAE,gBAAgB;YACtB,IAAI,EAAE,gBAAgB;YACtB,MAAM,EAAE,kBAAkB;YAC1B,MAAM,EAAE,kBAAkB;YAC1B,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE,cAAc;YACvB,KAAK,EAAE,YAAY;YACnB,OAAO,EAAE,cAAc;YACvB,UAAU,EAAE,iBAAiB;YAC7B,OAAO,EAAE,EAAE;SACZ;QACD,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE;QACrF,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE;QACtG,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE;QACtC,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE;KAC1C;IACD,eAAe,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE;CAChE,CAAC,CAAC;AAcH,MAAM,UAAU,IAAI,CAAC,EAAE,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAa;IAC/G,MAAM,IAAI,GAAG,EAAE,CAAC;IAChB,OAAO,CACL,KAAC,IAAI,IAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,KAAM,IAAI,YACnF,QAAQ,GACJ,CACR,CAAC;AACJ,CAAC"}
|
package/dist/widgets/index.d.ts
CHANGED
|
@@ -12,6 +12,6 @@
|
|
|
12
12
|
* model-picker substrate). Self-built chrome (Surface/Text/Button/…) lives in
|
|
13
13
|
* the main barrel — NOT here — per the two-tier split (design §3.2/§3.3).
|
|
14
14
|
*/
|
|
15
|
-
export { Autocomplete, Select, Modal, Drawer, Popover, Menu, Tabs, Tooltip, ListBox, ListBoxItem, ListBoxSection, SearchField, EmptyState, Label, Separator, Spinner, } from "@heroui/react";
|
|
15
|
+
export { Autocomplete, Select, Modal, Drawer, Popover, Menu, Dropdown, Tabs, Tooltip, DatePicker, Calendar, Toast, ToastProvider, toast, ListBox, ListBoxItem, ListBoxSection, SearchField, EmptyState, Label, Separator, Spinner, } from "@heroui/react";
|
|
16
16
|
export { FilterAutocomplete, type FilterAutocompleteProps } from "./filter-autocomplete.js";
|
|
17
17
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/widgets/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EACL,YAAY,EACZ,MAAM,EACN,KAAK,EACL,MAAM,EACN,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,OAAO,EACP,WAAW,EACX,cAAc,EACd,WAAW,EACX,UAAU,EACV,KAAK,EACL,SAAS,EACT,OAAO,GACR,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/widgets/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EACL,YAAY,EACZ,MAAM,EACN,KAAK,EACL,MAAM,EACN,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,UAAU,EACV,QAAQ,EACR,KAAK,EACL,aAAa,EACb,KAAK,EACL,OAAO,EACP,WAAW,EACX,cAAc,EACd,WAAW,EACX,UAAU,EACV,KAAK,EACL,SAAS,EACT,OAAO,GACR,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,0BAA0B,CAAC"}
|
package/dist/widgets/index.js
CHANGED
|
@@ -12,6 +12,6 @@
|
|
|
12
12
|
* model-picker substrate). Self-built chrome (Surface/Text/Button/…) lives in
|
|
13
13
|
* the main barrel — NOT here — per the two-tier split (design §3.2/§3.3).
|
|
14
14
|
*/
|
|
15
|
-
export { Autocomplete, Select, Modal, Drawer, Popover, Menu, Tabs, Tooltip, ListBox, ListBoxItem, ListBoxSection, SearchField, EmptyState, Label, Separator, Spinner, } from "@heroui/react";
|
|
15
|
+
export { Autocomplete, Select, Modal, Drawer, Popover, Menu, Dropdown, Tabs, Tooltip, DatePicker, Calendar, Toast, ToastProvider, toast, ListBox, ListBoxItem, ListBoxSection, SearchField, EmptyState, Label, Separator, Spinner, } from "@heroui/react";
|
|
16
16
|
export { FilterAutocomplete } from "./filter-autocomplete.js";
|
|
17
17
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/widgets/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EACL,YAAY,EACZ,MAAM,EACN,KAAK,EACL,MAAM,EACN,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,OAAO,EACP,WAAW,EACX,cAAc,EACd,WAAW,EACX,UAAU,EACV,KAAK,EACL,SAAS,EACT,OAAO,GACR,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,kBAAkB,EAAgC,MAAM,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/widgets/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EACL,YAAY,EACZ,MAAM,EACN,KAAK,EACL,MAAM,EACN,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,UAAU,EACV,QAAQ,EACR,KAAK,EACL,aAAa,EACb,KAAK,EACL,OAAO,EACP,WAAW,EACX,cAAc,EACd,WAAW,EACX,UAAU,EACV,KAAK,EACL,SAAS,EACT,OAAO,GACR,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,kBAAkB,EAAgC,MAAM,0BAA0B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chances-ai/design-system",
|
|
3
|
-
"version": "24.
|
|
3
|
+
"version": "24.2.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -13,6 +13,10 @@
|
|
|
13
13
|
"types": "./dist/widgets/index.d.ts",
|
|
14
14
|
"import": "./dist/widgets/index.js"
|
|
15
15
|
},
|
|
16
|
+
"./motion": {
|
|
17
|
+
"types": "./dist/motion/animated.d.ts",
|
|
18
|
+
"import": "./dist/motion/animated.js"
|
|
19
|
+
},
|
|
16
20
|
"./styles": "./src/tokens.css",
|
|
17
21
|
"./heroui-theme.css": "./src/heroui-theme.css"
|
|
18
22
|
},
|
|
@@ -22,9 +26,10 @@
|
|
|
22
26
|
"src/heroui-theme.css"
|
|
23
27
|
],
|
|
24
28
|
"dependencies": {
|
|
25
|
-
"@chances-ai/ui-core": "24.
|
|
29
|
+
"@chances-ai/ui-core": "24.2.0",
|
|
26
30
|
"clsx": "^2.1.1",
|
|
27
31
|
"lucide-react": "1.17.0",
|
|
32
|
+
"motion": "12.40.0",
|
|
28
33
|
"tailwind-merge": "^3.4.0",
|
|
29
34
|
"tailwind-variants": "^3.2.2"
|
|
30
35
|
},
|
|
@@ -74,8 +79,10 @@
|
|
|
74
79
|
"check": "tsc -b",
|
|
75
80
|
"test": "bun test --timeout 30000",
|
|
76
81
|
"test:stories": "vitest run",
|
|
82
|
+
"test:a11y": "bun run scripts/a11y-stories.ts",
|
|
77
83
|
"storybook": "storybook dev -p 6006 --no-open --disable-telemetry",
|
|
78
84
|
"build:storybook": "storybook build --disable-telemetry",
|
|
79
|
-
"gen:theme": "bun ../../scripts/gen-theme-css.ts"
|
|
85
|
+
"gen:theme": "bun ../../scripts/gen-theme-css.ts",
|
|
86
|
+
"gen:sprite": "bun scripts/gen-sprite.ts"
|
|
80
87
|
}
|
|
81
88
|
}
|
package/src/heroui-theme.css
CHANGED
|
@@ -25,6 +25,8 @@
|
|
|
25
25
|
--muted: var(--ch-text-weak);
|
|
26
26
|
--default: var(--ch-bg-weak);
|
|
27
27
|
--default-foreground: var(--ch-text-base);
|
|
28
|
+
--accent: var(--ch-interactive);
|
|
29
|
+
--accent-foreground: var(--ch-text-on-interactive);
|
|
28
30
|
--success: var(--ch-success);
|
|
29
31
|
--success-foreground: var(--ch-text-on-success);
|
|
30
32
|
--warning: var(--ch-warning);
|
package/src/tokens.css
CHANGED
|
@@ -56,6 +56,7 @@
|
|
|
56
56
|
--color-button-primary: var(--ch-button-primary);
|
|
57
57
|
--color-button-secondary: var(--ch-button-secondary);
|
|
58
58
|
--color-button-ghost-hover: var(--ch-button-ghost-hover);
|
|
59
|
+
--color-interactive: var(--ch-interactive);
|
|
59
60
|
--color-diff-add-surface: var(--ch-diff-add-surface);
|
|
60
61
|
--color-diff-delete-surface: var(--ch-diff-delete-surface);
|
|
61
62
|
--color-diff-change-bar-add: var(--ch-diff-change-bar-add);
|
|
@@ -71,6 +72,7 @@
|
|
|
71
72
|
--color-text-on-success: var(--ch-text-on-success);
|
|
72
73
|
--color-text-on-error: var(--ch-text-on-error);
|
|
73
74
|
--color-text-on-warning: var(--ch-text-on-warning);
|
|
75
|
+
--color-text-on-interactive: var(--ch-text-on-interactive);
|
|
74
76
|
}
|
|
75
77
|
|
|
76
78
|
:root {
|
|
@@ -106,8 +108,8 @@
|
|
|
106
108
|
--ch-surface-hover: rgb(17,17,17);
|
|
107
109
|
--ch-surface-active: rgb(22,22,22);
|
|
108
110
|
--ch-text-base: rgb(255,255,255);
|
|
109
|
-
--ch-text-weak: rgb(
|
|
110
|
-
--ch-text-weaker: rgb(
|
|
111
|
+
--ch-text-weak: rgb(122,122,122);
|
|
112
|
+
--ch-text-weaker: rgb(105,105,105);
|
|
111
113
|
--ch-text-strong: rgb(240,240,240);
|
|
112
114
|
--ch-border-base: rgb(85,85,85);
|
|
113
115
|
--ch-border-weak: rgb(22,22,22);
|
|
@@ -118,13 +120,14 @@
|
|
|
118
120
|
--ch-input-hover: rgb(17,17,17);
|
|
119
121
|
--ch-input-focus: rgb(36,46,157);
|
|
120
122
|
--ch-input-disabled: rgb(22,22,22);
|
|
121
|
-
--ch-icon-base: rgb(
|
|
123
|
+
--ch-icon-base: rgb(134,134,134);
|
|
122
124
|
--ch-icon-weak: rgb(52,52,52);
|
|
123
125
|
--ch-icon-strong: rgb(240,240,240);
|
|
124
126
|
--ch-icon-disabled: rgb(39,39,39);
|
|
125
127
|
--ch-button-primary: rgb(240,240,240);
|
|
126
128
|
--ch-button-secondary: rgb(17,17,17);
|
|
127
129
|
--ch-button-ghost-hover: rgb(17,17,17);
|
|
130
|
+
--ch-interactive: rgb(85,111,246);
|
|
128
131
|
--ch-diff-add-surface: rgb(0,20,5);
|
|
129
132
|
--ch-diff-delete-surface: rgb(36,0,9);
|
|
130
133
|
--ch-diff-change-bar-add: rgb(22,108,57);
|
|
@@ -140,4 +143,5 @@
|
|
|
140
143
|
--ch-text-on-success: rgb(0,0,0);
|
|
141
144
|
--ch-text-on-error: rgb(0,0,0);
|
|
142
145
|
--ch-text-on-warning: rgb(0,0,0);
|
|
146
|
+
--ch-text-on-interactive: rgb(0,0,0);
|
|
143
147
|
}
|