@xeonr/platform-ui 0.1.0 → 0.2.1

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/index.d.ts CHANGED
@@ -15,4 +15,9 @@ export { LogSurface, LogPanel, type LogLine } from "./kit/LogView.tsx";
15
15
  export { KVGrid } from "./kit/KV.tsx";
16
16
  export { SecretField, CopyIcon } from "./kit/Secret.tsx";
17
17
  export { ToastProvider, useToast } from "./kit/Toast.tsx";
18
+ export { Mono, Num, Hint, InlineHint, Cell, InlineLink } from "./kit/Text.tsx";
19
+ export { RowList, ListRow, RowActions, SelectableList, Breadcrumbs } from "./kit/List.tsx";
20
+ export { FilterBar, Chip, EditableChip } from "./kit/Chip.tsx";
21
+ export { StatGrid, StatTile, StatValue, Meter } from "./kit/Stat.tsx";
22
+ export { Tabs, Disclosure, Subpanel, SubpanelHead, AddPanel, Callout, RepeaterRows, CodeBlock, StepList, CopyField, PanelHeadMeta, LoadMoreFooter, DarkSurface, } from "./kit/Blocks.tsx";
18
23
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAIvF,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACzF,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC9G,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EACL,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EACtE,WAAW,EAAE,WAAW,EAAE,WAAW,EACrC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,MAAM,GACxC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACpG,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAIvF,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACzF,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC9G,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EACL,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EACtE,WAAW,EAAE,WAAW,EAAE,WAAW,EACrC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,MAAM,GACxC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACpG,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAI1D,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC3F,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EACL,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EACzE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,GAC3E,MAAM,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -21,4 +21,11 @@ export { LogSurface, LogPanel } from "./kit/LogView.js";
21
21
  export { KVGrid } from "./kit/KV.js";
22
22
  export { SecretField, CopyIcon } from "./kit/Secret.js";
23
23
  export { ToastProvider, useToast } from "./kit/Toast.js";
24
+ // Added for the Container Platform adoption (2026-09-26): the widgets every
25
+ // list and detail screen grows locally, now shared.
26
+ export { Mono, Num, Hint, InlineHint, Cell, InlineLink } from "./kit/Text.js";
27
+ export { RowList, ListRow, RowActions, SelectableList, Breadcrumbs } from "./kit/List.js";
28
+ export { FilterBar, Chip, EditableChip } from "./kit/Chip.js";
29
+ export { StatGrid, StatTile, StatValue, Meter } from "./kit/Stat.js";
30
+ export { Tabs, Disclosure, Subpanel, SubpanelHead, AddPanel, Callout, RepeaterRows, CodeBlock, StepList, CopyField, PanelHeadMeta, LoadMoreFooter, DarkSurface, } from "./kit/Blocks.js";
24
31
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,EAAE;AACF,2EAA2E;AAC3E,sEAAsE;AACtE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAkB,MAAM,0BAA2B,CAAC;AAEvF,4EAA4E;AAC5E,oDAAoD;AACpD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAiB,MAAM,eAAgB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAuB,MAAM,iBAAkB,CAAC;AACzF,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAa,MAAM,gBAAiB,CAAC;AACtE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAiB,CAAC;AAC9G,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mBAAoB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAsB,CAAC;AAClD,OAAO,EACL,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EACtE,WAAW,EAAE,WAAW,EAAE,WAAW,EACrC,QAAQ,EAAE,OAAO,EAAE,OAAO,GAC3B,MAAM,eAAgB,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAiB,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAe,MAAM,oBAAqB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,qBAAsB,CAAC;AACpG,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,uBAAwB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAgB,MAAM,kBAAmB,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAc,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,iBAAkB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,gBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,EAAE;AACF,2EAA2E;AAC3E,sEAAsE;AACtE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAkB,MAAM,0BAA2B,CAAC;AAEvF,4EAA4E;AAC5E,oDAAoD;AACpD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAiB,MAAM,eAAgB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAuB,MAAM,iBAAkB,CAAC;AACzF,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAa,MAAM,gBAAiB,CAAC;AACtE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAiB,CAAC;AAC9G,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mBAAoB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAsB,CAAC;AAClD,OAAO,EACL,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EACtE,WAAW,EAAE,WAAW,EAAE,WAAW,EACrC,QAAQ,EAAE,OAAO,EAAE,OAAO,GAC3B,MAAM,eAAgB,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAiB,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAe,MAAM,oBAAqB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,qBAAsB,CAAC;AACpG,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,uBAAwB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAgB,MAAM,kBAAmB,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAc,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,iBAAkB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,gBAAiB,CAAC;AAE1D,4EAA4E;AAC5E,oDAAoD;AACpD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,eAAgB,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAgB,CAAC;AAC3F,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,eAAgB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,eAAgB,CAAC;AACtE,OAAO,EACL,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EACzE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,GAC3E,MAAM,iBAAkB,CAAC"}
@@ -10,6 +10,7 @@ export declare const Tag: import("styled-components/dist/types").IStyledComponen
10
10
  style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
11
11
  }, {
12
12
  $tone?: Tone | undefined;
13
+ $dashed?: boolean | undefined;
13
14
  }>> & string;
14
15
  export declare const LiveDot: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Merged<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLElement>, HTMLElement>, "style"> & {
15
16
  style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../src/kit/Badge.tsx"],"names":[],"mappings":"AAGA,MAAM,MAAM,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;AAc7E,eAAO,MAAM,UAAU;;;WAAwB,IAAI;YAAU,OAAO,GAAG,SAAS;YAsB/E,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,GAAG;;;YAAyB,IAAI,GAAG,SAAS;YAgBxD,CAAC;AAGF,eAAO,MAAM,OAAO;;;YAAsB,IAAI,GAAG,SAAS;YAMzD,CAAC"}
1
+ {"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../src/kit/Badge.tsx"],"names":[],"mappings":"AAGA,MAAM,MAAM,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;AAc7E,eAAO,MAAM,UAAU;;;WAAwB,IAAI;YAAU,OAAO,GAAG,SAAS;YAsB/E,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,GAAG;;;YAAyB,IAAI,GAAG,SAAS;cAAY,OAAO,GAAG,SAAS;YAiBvF,CAAC;AAGF,eAAO,MAAM,OAAO;;;YAAsB,IAAI,GAAG,SAAS;YAMzD,CAAC"}
package/dist/kit/Badge.js CHANGED
@@ -49,6 +49,7 @@ export const Tag = styled.span `
49
49
  overflow: hidden;
50
50
  text-overflow: ellipsis;
51
51
  ${(p) => (p.$tone ? css `border-color: transparent; ${tones[p.$tone]}` : "")}
52
+ ${(p) => p.$dashed && css `background: transparent; border-style: dashed; border-color: currentColor; letter-spacing: 0.08em; text-transform: uppercase; font-size: 9px; font-weight: 600;`}
52
53
  `;
53
54
  const dotPulse = keyframes `50% { opacity: 0.4; }`;
54
55
  export const LiveDot = styled.i `
@@ -1 +1 @@
1
- {"version":3,"file":"Badge.js","sourceRoot":"","sources":["../../src/kit/Badge.tsx"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AAIvC,MAAM,KAAK,GAAyC;IAClD,EAAE,EAAE,GAAG,CAAA,eAAe,CAAC,CAAC,SAAS,YAAY,CAAC,CAAC,OAAO,GAAG;IACzD,GAAG,EAAE,GAAG,CAAA,eAAe,CAAC,CAAC,MAAM,YAAY,CAAC,CAAC,IAAI,GAAG;IACpD,IAAI,EAAE,GAAG,CAAA,eAAe,CAAC,CAAC,SAAS,YAAY,CAAC,CAAC,OAAO,GAAG;IAC3D,IAAI,EAAE,GAAG,CAAA,eAAe,CAAC,CAAC,QAAQ,YAAY,CAAC,CAAC,MAAM,GAAG;IACzD,IAAI,EAAE,GAAG,CAAA,eAAe,CAAC,CAAC,MAAM,YAAY,CAAC,CAAC,IAAI,GAAG;IACrD,KAAK,EAAE,GAAG,CAAA,eAAe,CAAC,CAAC,OAAO,YAAY,CAAC,CAAC,KAAK,GAAG;IACxD,GAAG,EAAE,GAAG,CAAA,eAAe,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,KAAK,GAAG;CACrD,CAAC;AAEF,MAAM,OAAO,GAAG,SAAS,CAAA,wBAAwB,CAAC;AAElD,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAA8C;;;;;;;;;;;IAW/E,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IACrB,CAAC,CAAC,EAAE,EAAE,CACN,CAAC,CAAC,KAAK;IACP,GAAG,CAAA;;;;;qBAKc,OAAO;;KAEvB;CACJ,CAAC;AAEF,0EAA0E;AAC1E,MAAM,CAAC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAA8B;;;;;;;iBAO3C,CAAC,CAAC,IAAI;;sBAED,CAAC,CAAC,KAAK;WAClB,CAAC,CAAC,KAAK;;;;;IAKd,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAA,8BAA8B,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;CAC5E,CAAC;AAEF,MAAM,QAAQ,GAAG,SAAS,CAAA,uBAAuB,CAAC;AAClD,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAA8B;;;gBAG7C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;;eAEpF,QAAQ;CACtB,CAAC"}
1
+ {"version":3,"file":"Badge.js","sourceRoot":"","sources":["../../src/kit/Badge.tsx"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AAIvC,MAAM,KAAK,GAAyC;IAClD,EAAE,EAAE,GAAG,CAAA,eAAe,CAAC,CAAC,SAAS,YAAY,CAAC,CAAC,OAAO,GAAG;IACzD,GAAG,EAAE,GAAG,CAAA,eAAe,CAAC,CAAC,MAAM,YAAY,CAAC,CAAC,IAAI,GAAG;IACpD,IAAI,EAAE,GAAG,CAAA,eAAe,CAAC,CAAC,SAAS,YAAY,CAAC,CAAC,OAAO,GAAG;IAC3D,IAAI,EAAE,GAAG,CAAA,eAAe,CAAC,CAAC,QAAQ,YAAY,CAAC,CAAC,MAAM,GAAG;IACzD,IAAI,EAAE,GAAG,CAAA,eAAe,CAAC,CAAC,MAAM,YAAY,CAAC,CAAC,IAAI,GAAG;IACrD,KAAK,EAAE,GAAG,CAAA,eAAe,CAAC,CAAC,OAAO,YAAY,CAAC,CAAC,KAAK,GAAG;IACxD,GAAG,EAAE,GAAG,CAAA,eAAe,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,KAAK,GAAG;CACrD,CAAC;AAEF,MAAM,OAAO,GAAG,SAAS,CAAA,wBAAwB,CAAC;AAElD,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAA8C;;;;;;;;;;;IAW/E,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IACrB,CAAC,CAAC,EAAE,EAAE,CACN,CAAC,CAAC,KAAK;IACP,GAAG,CAAA;;;;;qBAKc,OAAO;;KAEvB;CACJ,CAAC;AAEF,0EAA0E;AAC1E,MAAM,CAAC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAA6D;;;;;;;iBAO1E,CAAC,CAAC,IAAI;;sBAED,CAAC,CAAC,KAAK;WAClB,CAAC,CAAC,KAAK;;;;;IAKd,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAA,8BAA8B,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACzE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,GAAG,CAAA,iKAAiK;CAC3L,CAAC;AAEF,MAAM,QAAQ,GAAG,SAAS,CAAA,uBAAuB,CAAC;AAClD,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAA8B;;;gBAG7C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;;eAEpF,QAAQ;CACtB,CAAC"}
@@ -0,0 +1,89 @@
1
+ import { type ReactNode } from "react";
2
+ export declare function Tabs<T extends string>({ tabs, value, onChange, mono, label, after }: {
3
+ tabs: {
4
+ id: T;
5
+ label: ReactNode;
6
+ meta?: ReactNode | undefined;
7
+ title?: string | undefined;
8
+ }[];
9
+ /** the active tab, or several (one per split pane) */
10
+ value: T | T[];
11
+ /** the click event rides along so a product can treat shift-click specially */
12
+ onChange: (id: T, ev: React.MouseEvent<HTMLButtonElement>) => void;
13
+ mono?: boolean | undefined;
14
+ label?: string | undefined;
15
+ /** trailing slot on the strip (a hint, an add button) */
16
+ after?: ReactNode | undefined;
17
+ }): import("react").JSX.Element;
18
+ export declare function Disclosure({ summary, defaultOpen, open, onToggle, children }: {
19
+ summary: ReactNode;
20
+ defaultOpen?: boolean | undefined;
21
+ open?: boolean | undefined;
22
+ onToggle?: ((open: boolean) => void) | undefined;
23
+ children: ReactNode;
24
+ }): import("react").JSX.Element;
25
+ /** Subpanel: a bordered sub-block inside a Panel or modal. */
26
+ export declare const Subpanel: import("styled-components/dist/types").IStyledComponentBase<"web", Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "style"> & {
27
+ style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
28
+ }> & string;
29
+ export declare const SubpanelHead: import("styled-components/dist/types").IStyledComponentBase<"web", Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "style"> & {
30
+ style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
31
+ }> & string;
32
+ export declare function AddPanel({ label, onClick, disabled }: {
33
+ label: ReactNode;
34
+ onClick: () => void;
35
+ disabled?: boolean | undefined;
36
+ }): import("react").JSX.Element;
37
+ export declare function Callout({ tone, title, actions, children }: {
38
+ tone?: "info" | "warn" | "crit" | "ok" | undefined;
39
+ title?: ReactNode | undefined;
40
+ actions?: ReactNode | undefined;
41
+ children: ReactNode;
42
+ }): import("react").JSX.Element;
43
+ export declare function RepeaterRows<T>({ rows, onChange, render, blank, addLabel, addVariant, removeLabel, emptyLabel, columns, disabled, max }: {
44
+ rows: T[];
45
+ onChange: (rows: T[]) => void;
46
+ render: (row: T, patch: (next: T) => void, index: number) => ReactNode;
47
+ blank: () => T;
48
+ addLabel?: ReactNode | undefined;
49
+ /** "panel": the dashed full-width affordance; "button": a compact quiet button */
50
+ addVariant?: "panel" | "button" | undefined;
51
+ /** aria-label of each row's remove button, per row if needed */
52
+ removeLabel?: string | ((row: T, index: number) => string) | undefined;
53
+ emptyLabel?: ReactNode | undefined;
54
+ /** grid-template-columns for the fields of one row, per row if it varies */
55
+ columns?: string | ((row: T, index: number) => string) | undefined;
56
+ disabled?: boolean | undefined;
57
+ max?: number | undefined;
58
+ }): import("react").JSX.Element;
59
+ export declare function CodeBlock({ code, wrap }: {
60
+ code: string;
61
+ wrap?: boolean | undefined;
62
+ }): import("react").JSX.Element;
63
+ /** StepList: numbered commands; dark by default, `variant="light"` for a bordered surface list. */
64
+ export declare function StepList({ steps, variant }: {
65
+ steps: string[];
66
+ variant?: "dark" | "light" | undefined;
67
+ }): import("react").JSX.Element;
68
+ export declare function CopyField({ value, meta, label }: {
69
+ value: string;
70
+ meta?: ReactNode | undefined;
71
+ label?: string | undefined;
72
+ }): import("react").JSX.Element;
73
+ export declare function PanelHeadMeta({ title, meta }: {
74
+ title: ReactNode;
75
+ meta?: ReactNode | undefined;
76
+ }): import("react").JSX.Element;
77
+ export declare function LoadMoreFooter({ shown, total, hasMore, loading, onMore, noun }: {
78
+ shown: number;
79
+ total?: number | undefined;
80
+ hasMore: boolean;
81
+ loading?: boolean | undefined;
82
+ onMore: () => void;
83
+ noun?: string | undefined;
84
+ }): import("react").JSX.Element;
85
+ /** DarkSurface: an always-dark frame for editors and terminals (like LogSurface). */
86
+ export declare const DarkSurface: import("styled-components/dist/types").IStyledComponentBase<"web", Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "style"> & {
87
+ style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
88
+ }> & string;
89
+ //# sourceMappingURL=Blocks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Blocks.d.ts","sourceRoot":"","sources":["../../src/kit/Blocks.tsx"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAkCjD,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAc,EAAE,KAAK,EAAE,EAAE;IAC7F,IAAI,EAAE;QAAE,EAAE,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,SAAS,CAAC;QAAC,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,EAAE,CAAC;IAC9F,sDAAsD;IACtD,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IACf,+EAA+E;IAC/E,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IACnE,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,yDAAyD;IACzD,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CAC/B,+BAaA;AAuBD,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;IAC7E,OAAO,EAAE,SAAS,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACjD,QAAQ,EAAE,SAAS,CAAC;CACrB,+BAOA;AAED,8DAA8D;AAC9D,eAAO,MAAM,QAAQ;;WAMpB,CAAC;AACF,eAAO,MAAM,YAAY;;WAIxB,CAAC;AAeF,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAAE,+BAE/H;AAkBD,wBAAgB,OAAO,CAAC,EAAE,IAAa,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;IACnE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACnD,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAChC,QAAQ,EAAE,SAAS,CAAC;CACrB,+BAYA;AAgBD,wBAAgB,YAAY,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAgB,EAAE,UAAoB,EAAE,WAA0B,EAAE,UAAU,EAAE,OAAe,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE;IACjL,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;IAC9B,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;IACvE,KAAK,EAAE,MAAM,CAAC,CAAC;IACf,QAAQ,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IACjC,kFAAkF;IAClF,UAAU,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC5C,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;IACvE,UAAU,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IACnC,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;IACnE,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1B,+BAuBA;AAeD,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAAE,+BAErF;AAcD,mGAAmG;AACnG,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAA;CAAE,+BAMvG;AAYD,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAc,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,+BASrI;AAQD,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;CAAE,+BAOhG;AAQD,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAa,EAAE,EAAE;IACxF,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B,+BAOA;AAED,qFAAqF;AACrF,eAAO,MAAM,WAAW;;WAKvB,CAAC"}
@@ -0,0 +1,199 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import styled, { css } from "styled-components";
3
+ import { useState } from "react";
4
+ import { v } from "../theme/tokens.js";
5
+ import { Icon } from "./Icon.js";
6
+ import { AppButton } from "./Button.js";
7
+ // Structural blocks inside a panel or a modal: tabs held in local state, a
8
+ // disclosure, a bordered sub-block, the dashed "add one" affordance, callouts,
9
+ // repeating editable rows, code and step lists, copy-first fields, and a
10
+ // panel head with a meta line.
11
+ /** Tabs: a local-state tab strip (routes use SubNav). */
12
+ const TabStrip = styled.div `
13
+ display: flex;
14
+ align-items: center;
15
+ gap: 2px;
16
+ border-bottom: 1px solid ${v.line};
17
+ margin-bottom: 12px;
18
+ overflow-x: auto;
19
+ > .after { margin-left: auto; padding-left: 12px; font-size: 10.5px; color: ${v.faint}; white-space: nowrap; display: inline-flex; align-items: center; gap: 6px; }
20
+ `;
21
+ const TabBtn = styled.button `
22
+ padding: 8px 12px;
23
+ font-size: 12px;
24
+ font-weight: 600;
25
+ ${(p) => p.$mono && css `font-family: ${v.mono}; font-weight: 500;`}
26
+ color: ${(p) => (p.$on ? v.text : v.muted)};
27
+ border-bottom: 2px solid ${(p) => (p.$on ? v.brand : "transparent")};
28
+ margin-bottom: -1px;
29
+ white-space: nowrap;
30
+ display: inline-flex; align-items: center; gap: 6px;
31
+ .meta { font-size: 10.5px; color: ${v.faint}; font-family: ${v.mono}; }
32
+ &:hover { color: ${v.text}; }
33
+ `;
34
+ export function Tabs({ tabs, value, onChange, mono, label = "Tabs", after }) {
35
+ const active = Array.isArray(value) ? value : [value];
36
+ return (_jsxs(TabStrip, { role: "tablist", "aria-label": label, children: [tabs.map((t) => (_jsxs(TabBtn, { type: "button", role: "tab", title: t.title, "aria-selected": active.includes(t.id), "$on": active.includes(t.id), "$mono": mono, onClick: (ev) => onChange(t.id, ev), children: [t.label, t.meta ? _jsx("span", { className: "meta", children: t.meta }) : null] }, t.id))), after ? _jsx("span", { className: "after", children: after }) : null] }));
37
+ }
38
+ /** Disclosure: a themed <details>. */
39
+ const Details = styled.details `
40
+ border: 1px solid ${v.line};
41
+ border-radius: ${v.rCard};
42
+ background: ${v.surface2};
43
+ summary {
44
+ cursor: pointer;
45
+ list-style: none;
46
+ padding: 9px 12px;
47
+ font-size: 12px;
48
+ font-weight: 600;
49
+ color: ${v.muted};
50
+ display: flex; align-items: center; gap: 8px;
51
+ &::-webkit-details-marker { display: none; }
52
+ svg { font-size: 10px; transition: transform 0.12s ease; }
53
+ }
54
+ &[open] summary { color: ${v.text}; border-bottom: 1px solid ${v.line}; }
55
+ &[open] summary svg { transform: rotate(90deg); }
56
+ > div { padding: 12px; }
57
+ `;
58
+ export function Disclosure({ summary, defaultOpen, open, onToggle, children }) {
59
+ return (_jsxs(Details, { open: open ?? (defaultOpen ? true : undefined), onToggle: (e) => onToggle?.(e.currentTarget.open), children: [_jsxs("summary", { children: [_jsx(Icon, { name: "chevron-right" }), summary] }), _jsx("div", { children: children })] }));
60
+ }
61
+ /** Subpanel: a bordered sub-block inside a Panel or modal. */
62
+ export const Subpanel = styled.div `
63
+ border: 1px solid ${v.line};
64
+ border-radius: ${v.rCard};
65
+ background: ${v.surface2};
66
+ padding: 12px;
67
+ display: flex; flex-direction: column; gap: 8px;
68
+ `;
69
+ export const SubpanelHead = styled.div `
70
+ display: flex; align-items: center; gap: 8px;
71
+ font-size: 12px; font-weight: 600;
72
+ > .actions { margin-left: auto; display: flex; gap: 6px; }
73
+ `;
74
+ /** AddPanel: the dashed "add one" affordance at the end of a list or editor. */
75
+ const AddBtn = styled.button `
76
+ width: 100%;
77
+ padding: 10px 12px;
78
+ border: 1px dashed ${v.line2};
79
+ border-radius: ${v.rCard};
80
+ color: ${v.muted};
81
+ font-size: 12px; font-weight: 600;
82
+ display: flex; align-items: center; justify-content: center; gap: 8px;
83
+ cursor: pointer;
84
+ &:hover { border-color: ${v.brand55}; color: ${v.text}; background: ${v.hover}; }
85
+ &:disabled { opacity: 0.55; cursor: not-allowed; }
86
+ `;
87
+ export function AddPanel({ label, onClick, disabled }) {
88
+ return _jsxs(AddBtn, { type: "button", onClick: onClick, disabled: disabled, children: [_jsx(Icon, { name: "add" }), label] });
89
+ }
90
+ /** Callout: an inline notice with a tone, optional title and actions. */
91
+ const CalloutWrap = styled.section `
92
+ border-radius: ${v.rCard};
93
+ padding: 12px 14px;
94
+ display: flex; gap: 12px; align-items: flex-start;
95
+ border: 1px solid transparent;
96
+ ${(p) => p.$tone === "warn" && css `background: ${v.warningBg}; color: ${v.warning}; border-color: ${v.warning};`}
97
+ ${(p) => p.$tone === "crit" && css `background: ${v.dangerBg}; color: ${v.danger}; border-color: ${v.danger};`}
98
+ ${(p) => p.$tone === "ok" && css `background: ${v.successBg}; color: ${v.success}; border-color: ${v.success};`}
99
+ ${(p) => p.$tone === "info" && css `background: ${v.infoBg}; color: ${v.info}; border-color: ${v.brand55};`}
100
+ .ic { flex: none; margin-top: 1px; }
101
+ .body { flex: 1 1 auto; min-width: 0; color: ${v.text}; font-size: 12.5px; line-height: 1.5; }
102
+ .title { display: block; font-weight: 650; margin-bottom: 2px; color: inherit; }
103
+ .actions { display: flex; gap: 8px; margin-top: 8px; }
104
+ ul:not([class]) { margin: 6px 0 0; padding-left: 18px; }
105
+ `;
106
+ export function Callout({ tone = "info", title, actions, children }) {
107
+ const icon = tone === "crit" ? "error" : tone === "warn" ? "warn" : tone === "ok" ? "check" : "info";
108
+ return (_jsxs(CalloutWrap, { "$tone": tone, role: tone === "crit" || tone === "warn" ? "alert" : "note", children: [_jsx("span", { className: "ic", children: _jsx(Icon, { name: icon }) }), _jsxs("div", { className: "body", children: [title ? _jsx("span", { className: "title", children: title }) : null, children, actions ? _jsx("div", { className: "actions", children: actions }) : null] })] }));
109
+ }
110
+ /** RepeaterRows: a list of editable rows with add/remove — the generalised KVEditor. */
111
+ const RepWrap = styled.div `display: flex; flex-direction: column; gap: 8px;`;
112
+ const RepRow = styled.div `
113
+ display: flex; align-items: flex-start; gap: 8px;
114
+ > .fields { flex: 1 1 auto; min-width: 0; display: grid; gap: 8px; }
115
+ `;
116
+ const RepRemove = styled.button `
117
+ flex: none; width: 30px; height: 34px;
118
+ display: grid; place-items: center;
119
+ color: ${v.faint}; border-radius: ${v.rCtl};
120
+ &:hover { color: ${v.danger}; background: ${v.dangerBg}; }
121
+ `;
122
+ const RepEmpty = styled.div `font-size: 11.5px; color: ${v.faint}; padding: 4px 0;`;
123
+ export function RepeaterRows({ rows, onChange, render, blank, addLabel = "Add", addVariant = "panel", removeLabel = "Remove row", emptyLabel, columns = "1fr", disabled, max }) {
124
+ const full = max !== undefined && rows.length >= max;
125
+ const add = () => onChange([...rows, blank()]);
126
+ return (_jsxs(RepWrap, { children: [rows.length === 0 && emptyLabel ? _jsx(RepEmpty, { children: emptyLabel }) : null, rows.map((r, i) => (_jsxs(RepRow, { children: [_jsx("div", { className: "fields", style: { gridTemplateColumns: typeof columns === "function" ? columns(r, i) : columns }, children: render(r, (next) => onChange(rows.map((x, j) => (j === i ? next : x))), i) }), _jsx(RepRemove, { type: "button", "aria-label": typeof removeLabel === "function" ? removeLabel(r, i) : removeLabel, disabled: disabled, onClick: () => onChange(rows.filter((_, j) => j !== i)), children: _jsx(Icon, { name: "delete" }) })] }, i))), addVariant === "button" ? (_jsx("div", { children: _jsx(AppButton, { size: "xs", variant: "quiet", icon: "add", disabled: disabled || full, onClick: add, children: addLabel }) })) : (_jsx(AddPanel, { label: addLabel, disabled: disabled || full, onClick: add }))] }));
127
+ }
128
+ /** CodeBlock and StepList: dark code surfaces (always dark, like logs). */
129
+ const Code = styled.pre `
130
+ margin: 0;
131
+ background: ${v.logBg};
132
+ color: ${v.logText};
133
+ font-family: ${v.mono};
134
+ font-size: 11.5px;
135
+ line-height: 1.6;
136
+ padding: 10px 12px;
137
+ border-radius: ${v.rCard};
138
+ overflow: auto;
139
+ white-space: ${(p) => (p.$wrap ? "pre-wrap" : "pre")};
140
+ `;
141
+ export function CodeBlock({ code, wrap }) {
142
+ return _jsx(Code, { "$wrap": wrap, children: code });
143
+ }
144
+ const Steps = styled.ol `
145
+ margin: 0; padding: 0; list-style: none;
146
+ background: ${(p) => (p.$light ? v.surface2 : v.logBg)};
147
+ border: 1px solid ${(p) => (p.$light ? v.line : "transparent")};
148
+ border-radius: ${v.rCard};
149
+ font-family: ${v.mono}; font-size: 11.5px; line-height: 1.6;
150
+ overflow: auto;
151
+ li { display: flex; gap: 12px; padding: 4px 12px; color: ${(p) => (p.$light ? v.text : v.logText)}; }
152
+ li:first-child { padding-top: 10px; } li:last-child { padding-bottom: 10px; }
153
+ .n { flex: none; width: 2ch; text-align: right; color: ${(p) => (p.$light ? v.faint : v.logDim)}; user-select: none; }
154
+ .cmd { white-space: pre-wrap; word-break: break-all; }
155
+ `;
156
+ /** StepList: numbered commands; dark by default, `variant="light"` for a bordered surface list. */
157
+ export function StepList({ steps, variant }) {
158
+ return (_jsx(Steps, { "$light": variant === "light", children: steps.map((s, i) => _jsxs("li", { children: [_jsx("span", { className: "n", children: i + 1 }), _jsx("span", { className: "cmd", children: s })] }, i)) }));
159
+ }
160
+ /** CopyField: a read-only value shown in full with a copy button. */
161
+ const CopyWrap = styled.div `
162
+ display: flex; align-items: center; gap: 8px;
163
+ padding: 7px 10px;
164
+ border: 1px solid ${v.fieldLine};
165
+ background: ${v.field};
166
+ border-radius: ${v.rCtl};
167
+ code { flex: 1 1 auto; min-width: 0; font-family: ${v.mono}; font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
168
+ small { flex: none; font-size: 10.5px; color: ${v.faint}; }
169
+ `;
170
+ export function CopyField({ value, meta, label = "Copy" }) {
171
+ const [done, setDone] = useState(false);
172
+ return (_jsxs(CopyWrap, { children: [_jsx("code", { title: value, children: value }), meta ? _jsx("small", { children: meta }) : null, _jsx(AppButton, { size: "xs", variant: "quiet", icon: done ? "check" : "copy", onClick: () => { void navigator.clipboard.writeText(value); setDone(true); setTimeout(() => setDone(false), 1200); }, children: label })] }));
173
+ }
174
+ /** PanelHeadMeta: a panel head with a title line and a meta line under it. */
175
+ const HeadMeta = styled.div `
176
+ display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1 1 auto;
177
+ .t { font-size: 12px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
178
+ .m { font-size: 10.5px; color: ${v.faint}; font-family: ${v.mono}; display: flex; gap: 10px; flex-wrap: wrap; }
179
+ `;
180
+ export function PanelHeadMeta({ title, meta }) {
181
+ return (_jsxs(HeadMeta, { children: [_jsx("span", { className: "t", children: title }), meta ? _jsx("span", { className: "m", children: meta }) : null] }));
182
+ }
183
+ /** LoadMoreFooter: the standard "N shown · load more" table footer. */
184
+ const Foot = styled.div `
185
+ display: flex; align-items: center; gap: 10px; width: 100%;
186
+ > span { color: ${v.faint}; }
187
+ > button { margin-left: auto; }
188
+ `;
189
+ export function LoadMoreFooter({ shown, total, hasMore, loading, onMore, noun = "rows" }) {
190
+ return (_jsxs(Foot, { children: [_jsxs("span", { children: [shown, " ", noun, total !== undefined ? ` of ${total}` : "", " loaded"] }), hasMore ? _jsx(AppButton, { size: "xs", variant: "quiet", loading: loading, onClick: onMore, children: "Load more" }) : null] }));
191
+ }
192
+ /** DarkSurface: an always-dark frame for editors and terminals (like LogSurface). */
193
+ export const DarkSurface = styled.div `
194
+ background: ${v.termBg};
195
+ border: 1px solid ${v.line};
196
+ border-radius: ${v.rCard};
197
+ overflow: hidden;
198
+ `;
199
+ //# sourceMappingURL=Blocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Blocks.js","sourceRoot":"","sources":["../../src/kit/Blocks.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { ReactNode } from "react";
2
+ /** FilterBar: wraps chips (and a search field) above a list. */
3
+ export declare const FilterBar: import("styled-components/dist/types").IStyledComponentBase<"web", Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "style"> & {
4
+ style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
5
+ }> & string;
6
+ /** Chip: a toggle (filters, presets, multi-select). */
7
+ export declare function Chip({ on, onToggle, mono, count, disabled, children, ...rest }: {
8
+ on: boolean;
9
+ onToggle: () => void;
10
+ mono?: boolean | undefined;
11
+ count?: number | string | undefined;
12
+ disabled?: boolean | undefined;
13
+ children: ReactNode;
14
+ title?: string | undefined;
15
+ }): import("react").JSX.Element;
16
+ export declare function EditableChip({ value, empty, onClick }: {
17
+ value: string;
18
+ empty?: string | undefined;
19
+ onClick: () => void;
20
+ }): import("react").JSX.Element;
21
+ //# sourceMappingURL=Chip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Chip.d.ts","sourceRoot":"","sources":["../../src/kit/Chip.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAOvC,gEAAgE;AAChE,eAAO,MAAM,SAAS;;WAOrB,CAAC;AA0BF,uDAAuD;AACvD,wBAAgB,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE;IAC/E,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,+BAOA;AAYD,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,KAAmB,EAAE,OAAO,EAAE,EAAE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,+BAOA"}
@@ -0,0 +1,53 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import styled, { css } from "styled-components";
3
+ import { v } from "../theme/tokens.js";
4
+ import { Icon } from "./Icon.js";
5
+ // Chips and the filter bar above lists: toggleable state filters, preset
6
+ // pickers, multi-select method chips, and an editable label chip.
7
+ /** FilterBar: wraps chips (and a search field) above a list. */
8
+ export const FilterBar = styled.div `
9
+ display: flex;
10
+ align-items: center;
11
+ flex-wrap: wrap;
12
+ gap: 6px;
13
+ margin-bottom: 12px;
14
+ > .spacer { flex: 1 1 auto; }
15
+ `;
16
+ const chipCss = css `
17
+ display: inline-flex;
18
+ align-items: center;
19
+ gap: 6px;
20
+ height: 26px;
21
+ padding: 0 10px;
22
+ border-radius: 999px;
23
+ font-size: 11.5px;
24
+ font-weight: 600;
25
+ ${(p) => p.$mono && css `font-family: ${v.mono}; font-weight: 500;`}
26
+ border: 1px solid ${(p) => (p.$on ? v.brand55 : v.line2)};
27
+ background: ${(p) => (p.$on ? v.brand12 : "transparent")};
28
+ color: ${(p) => (p.$on ? v.text : v.muted)};
29
+ cursor: pointer;
30
+ white-space: nowrap;
31
+ transition: background 0.12s ease, border-color 0.12s ease;
32
+ &:hover { border-color: ${v.brand55}; color: ${v.text}; }
33
+ &:disabled { opacity: 0.55; cursor: not-allowed; }
34
+ .count { font-size: 10.5px; color: ${v.faint}; font-variant-numeric: tabular-nums; }
35
+ `;
36
+ const ChipBtn = styled.button `${chipCss}`;
37
+ /** Chip: a toggle (filters, presets, multi-select). */
38
+ export function Chip({ on, onToggle, mono, count, disabled, children, ...rest }) {
39
+ return (_jsxs(ChipBtn, { type: "button", role: "switch", "aria-checked": on, onClick: onToggle, "$on": on, "$mono": mono, disabled: disabled, ...rest, children: [children, count !== undefined ? _jsx("span", { className: "count", children: count }) : null] }));
40
+ }
41
+ /** EditableChip: a value shown as a chip that opens an editor on click; empty state reads as an affordance. */
42
+ const EditChip = styled.button `
43
+ ${chipCss}
44
+ height: 24px;
45
+ font-weight: 500;
46
+ border-style: ${(p) => (p.$empty ? "dashed" : "solid")};
47
+ color: ${(p) => (p.$empty ? v.faint : v.text)};
48
+ svg { font-size: 10px; opacity: 0.7; }
49
+ `;
50
+ export function EditableChip({ value, empty = "Add label", onClick }) {
51
+ return (_jsxs(EditChip, { type: "button", onClick: onClick, "$empty": !value, "aria-label": value ? `Edit: ${value}` : empty, children: [value || empty, _jsx(Icon, { name: "edit" })] }));
52
+ }
53
+ //# sourceMappingURL=Chip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Chip.js","sourceRoot":"","sources":["../../src/kit/Chip.tsx"],"names":[],"mappings":";AAAA,OAAO,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAY,CAAC;AAElC,yEAAyE;AACzE,kEAAkE;AAElE,gEAAgE;AAChE,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;CAOlC,CAAC;AAEF,MAAM,OAAO,GAAG,GAAG,CAA4D;;;;;;;;;IAS3E,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAA,gBAAgB,CAAC,CAAC,IAAI,qBAAqB;sBAC9C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC1C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;WAC/C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;;;;4BAIhB,CAAC,CAAC,OAAO,YAAY,CAAC,CAAC,IAAI;;uCAEhB,CAAC,CAAC,KAAK;CAC7C,CAAC;AAGF,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAW,GAAG,OAAO,EAAE,CAAC;AAErD,uDAAuD;AACvD,MAAM,UAAU,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,EAQ5E;IACC,OAAO,CACL,MAAC,OAAO,IAAC,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,QAAQ,kBAAe,EAAE,EAAE,OAAO,EAAE,QAAQ,SAAO,EAAE,WAAS,IAAI,EAAE,QAAQ,EAAE,QAAQ,KAAM,IAAI,aACzH,QAAQ,EACR,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,eAAM,SAAS,EAAC,OAAO,YAAE,KAAK,GAAQ,CAAC,CAAC,CAAC,IAAI,IAC5D,CACX,CAAC;AACJ,CAAC;AAED,+GAA+G;AAC/G,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAA8C;IACxE,OAAO;;;kBAGO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;WAC7C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;;CAE9C,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,WAAW,EAAE,OAAO,EAIjE;IACC,OAAO,CACL,MAAC,QAAQ,IAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,OAAO,YAAU,CAAC,KAAK,gBAAc,KAAK,CAAC,CAAC,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,aACnG,KAAK,IAAI,KAAK,EACf,KAAC,IAAI,IAAC,IAAI,EAAC,MAAM,GAAG,IACX,CACZ,CAAC;AACJ,CAAC"}
@@ -8,7 +8,7 @@ export interface Column<T> {
8
8
  /** hide below this viewport width (px) */
9
9
  hideBelow?: number | undefined;
10
10
  }
11
- export declare function DataTable<T>({ columns, rows, rowKey, loading, skeletonRows, empty, rowHref, onRowClick, severity, footer }: {
11
+ export declare function DataTable<T>({ columns, rows, rowKey, loading, skeletonRows, empty, rowHref, onRowClick, severity, footer, variant, hideHead }: {
12
12
  columns: Column<T>[];
13
13
  rows: T[] | undefined;
14
14
  rowKey: (row: T) => string;
@@ -19,5 +19,9 @@ export declare function DataTable<T>({ columns, rows, rowKey, loading, skeletonR
19
19
  onRowClick?: ((row: T) => void) | undefined;
20
20
  severity?: ((row: T) => "crit" | "warn" | null) | undefined;
21
21
  footer?: ReactNode | undefined;
22
+ /** "bare": no panel chrome and compact padding — a table inside a panel or modal */
23
+ variant?: "panel" | "bare" | undefined;
24
+ /** omit the header row (short bare lists whose columns are self-evident) */
25
+ hideHead?: boolean | undefined;
22
26
  }): import("react").JSX.Element;
23
27
  //# sourceMappingURL=DataTable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../src/kit/DataTable.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAOjD,MAAM,WAAW,MAAM,CAAC,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,SAAS,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACrC,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAiDD,wBAAgB,SAAS,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE;IAC/H,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACrB,IAAI,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC;IACtB,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;IAClD,UAAU,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;IAC5D,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CAChC,+BA6CA"}
1
+ {"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../src/kit/DataTable.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAOjD,MAAM,WAAW,MAAM,CAAC,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,SAAS,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACrC,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAsDD,wBAAgB,SAAS,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;IAClJ,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACrB,IAAI,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC;IACtB,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;IAClD,UAAU,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;IAC5D,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC/B,oFAAoF;IACpF,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IACvC,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAChC,+BAgDA"}
@@ -46,11 +46,16 @@ const FootRow = styled.div `
46
46
  border-top: 1px solid ${v.line};
47
47
  `;
48
48
  const Scroll = styled.div `overflow-x: auto;`;
49
- export function DataTable({ columns, rows, rowKey, loading, skeletonRows = 5, empty, rowHref, onRowClick, severity, footer }) {
49
+ const Bare = styled.div `
50
+ table td { padding: 7px 12px; }
51
+ table th { padding: 7px 12px; background: transparent; }
52
+ `;
53
+ export function DataTable({ columns, rows, rowKey, loading, skeletonRows = 5, empty, rowHref, onRowClick, severity, footer, variant, hideHead }) {
50
54
  const navigate = useNavigate();
55
+ const Wrap = variant === "bare" ? Bare : Panel;
51
56
  const showSkeleton = loading && (!rows || rows.length === 0);
52
57
  const isEmpty = !loading && rows && rows.length === 0;
53
- return (_jsxs(Panel, { children: [_jsx(Scroll, { children: _jsxs(Table, { children: [_jsx("thead", { children: _jsx("tr", { children: columns.map((c) => _jsx(Th, { "$align": c.align, "$hide": c.hideBelow, style: c.width ? { width: c.width } : undefined, children: c.head }, c.key)) }) }), !showSkeleton && !isEmpty ? (_jsx("tbody", { style: loading ? { opacity: 0.55 } : undefined, children: (rows ?? []).map((r) => {
58
+ return (_jsxs(Wrap, { children: [_jsx(Scroll, { children: _jsxs(Table, { children: [hideHead ? null : (_jsx("thead", { children: _jsx("tr", { children: columns.map((c) => _jsx(Th, { "$align": c.align, "$hide": c.hideBelow, style: c.width ? { width: c.width } : undefined, children: c.head }, c.key)) }) })), !showSkeleton && !isEmpty ? (_jsx("tbody", { style: loading ? { opacity: 0.55 } : undefined, children: (rows ?? []).map((r) => {
54
59
  const href = rowHref?.(r) ?? null;
55
60
  const click = !!href || !!onRowClick;
56
61
  return (_jsx(Tr, { "$click": click, "$mark": severity?.(r) ?? null, onClick: click ? () => (href ? navigate(href) : onRowClick?.(r)) : undefined, children: columns.map((c) => _jsx(Td, { "$align": c.align, "$hide": c.hideBelow, children: c.render(r) }, c.key)) }, rowKey(r)));
@@ -1 +1 @@
1
- {"version":3,"file":"DataTable.js","sourceRoot":"","sources":["../../src/kit/DataTable.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DataTable.js","sourceRoot":"","sources":["../../src/kit/DataTable.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { ReactNode } from "react";
2
+ export declare const RowList: import("styled-components/dist/types").IStyledComponentBase<"web", Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "style"> & {
3
+ style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
4
+ }> & string;
5
+ /** ListRow: one row of a RowList. `to` makes it a router link, `onClick` a button. */
6
+ export declare function ListRow({ to, onClick, selected, leading, trailing, actions, inline, children }: {
7
+ to?: string | undefined;
8
+ onClick?: (() => void) | undefined;
9
+ selected?: boolean | undefined;
10
+ /** lay the main slot out in a row (id + pill on one line) rather than stacked */
11
+ inline?: boolean | undefined;
12
+ leading?: ReactNode | undefined;
13
+ trailing?: ReactNode | undefined;
14
+ actions?: ReactNode | undefined;
15
+ children: ReactNode;
16
+ }): import("react").JSX.Element;
17
+ /** RowActions: an action cluster revealed on row hover/focus (rows and table cells). */
18
+ export declare const RowActions: import("styled-components/dist/types").IStyledComponentBase<"web", Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "style"> & {
19
+ style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
20
+ }, "className"> & Partial<Pick<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "style"> & {
21
+ style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
22
+ }, "className">>> & string;
23
+ export declare function SelectableList<T>({ rows, value, onPick, rowKey, render, onDelete }: {
24
+ rows: T[];
25
+ value: string | null;
26
+ onPick: (key: string) => void;
27
+ rowKey: (row: T) => string;
28
+ render: (row: T) => ReactNode;
29
+ onDelete?: ((row: T) => void) | undefined;
30
+ }): import("react").JSX.Element;
31
+ export declare function Breadcrumbs({ segments, current, label }: {
32
+ segments: {
33
+ label: string;
34
+ onClick: () => void;
35
+ }[];
36
+ current: string;
37
+ label?: string | undefined;
38
+ }): import("react").JSX.Element;
39
+ //# sourceMappingURL=List.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"List.d.ts","sourceRoot":"","sources":["../../src/kit/List.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AASvC,eAAO,MAAM,OAAO;;WAGnB,CAAC;AA4BF,sFAAsF;AACtF,wBAAgB,OAAO,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;IAC/F,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,OAAO,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,iFAAiF;IACjF,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAChC,QAAQ,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IACjC,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAChC,QAAQ,EAAE,SAAS,CAAC;CACrB,+BAYA;AAED,wFAAwF;AACxF,eAAO,MAAM,UAAU;;;;0BAQtB,CAAC;AAUF,wBAAgB,cAAc,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;IACnF,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC;IAC3B,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,SAAS,CAAC;IAC9B,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CAC3C,+BAoBA;AAYD,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAc,EAAE,EAAE;IACjE,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,EAAE,CAAC;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,+BAYA"}
@@ -0,0 +1,80 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import styled, { css } from "styled-components";
3
+ import { Link } from "react-router-dom";
4
+ import { v } from "../theme/tokens.js";
5
+ import { Icon } from "./Icon.js";
6
+ // Row lists — the "recent jobs", "artifacts", "ports", "files" idiom: a
7
+ // bordered row with hover, an optional leading/trailing slot, and actions
8
+ // that reveal on hover. RowActions is also usable inside DataTable cells.
9
+ export const RowList = styled.div `
10
+ display: flex;
11
+ flex-direction: column;
12
+ `;
13
+ const rowCss = css `
14
+ display: flex;
15
+ align-items: center;
16
+ gap: 12px;
17
+ padding: 10px 16px;
18
+ border-bottom: 1px solid ${v.line};
19
+ color: ${v.text};
20
+ text-decoration: none;
21
+ font-size: 12.5px;
22
+ width: 100%;
23
+ text-align: left;
24
+ background: ${(p) => (p.$selected ? v.brand08 : "transparent")};
25
+ &:last-child { border-bottom: none; }
26
+ ${(p) => p.$click && css `cursor: pointer; &:hover { background: ${v.hover}; }`}
27
+ &:hover .row-actions, &:focus-within .row-actions { opacity: 1; }
28
+ `;
29
+ const RowDiv = styled.div `${rowCss}`;
30
+ const RowLink = styled(Link) `${rowCss}`;
31
+ const RowBtn = styled.button `${rowCss}`;
32
+ const Main = styled.span `flex: 1 1 auto; min-width: 0; display: flex; flex-direction: ${(p) => (p.$inline ? "row" : "column")}; align-items: ${(p) => (p.$inline ? "center" : "stretch")}; gap: ${(p) => (p.$inline ? "8px" : "2px")};`;
33
+ const Lead = styled.span `flex: none; display: grid; place-items: center; color: ${v.muted};`;
34
+ const Trail = styled.span `flex: none; display: flex; align-items: center; gap: 8px; font-size: 11.5px; color: ${v.faint};`;
35
+ /** ListRow: one row of a RowList. `to` makes it a router link, `onClick` a button. */
36
+ export function ListRow({ to, onClick, selected, leading, trailing, actions, inline, children }) {
37
+ const inner = (_jsxs(_Fragment, { children: [leading ? _jsx(Lead, { children: leading }) : null, _jsx(Main, { "$inline": inline, children: children }), trailing ? _jsx(Trail, { children: trailing }) : null, actions ? _jsx(RowActions, { children: actions }) : null] }));
38
+ if (to)
39
+ return _jsx(RowLink, { to: to, "$click": true, "$selected": selected, children: inner });
40
+ if (onClick)
41
+ return _jsx(RowBtn, { type: "button", onClick: onClick, "$click": true, "$selected": selected, children: inner });
42
+ return _jsx(RowDiv, { "$selected": selected, children: inner });
43
+ }
44
+ /** RowActions: an action cluster revealed on row hover/focus (rows and table cells). */
45
+ export const RowActions = styled.span.attrs({ className: "row-actions" }) `
46
+ flex: none;
47
+ display: inline-flex;
48
+ align-items: center;
49
+ gap: 6px;
50
+ opacity: 0;
51
+ transition: opacity 0.12s ease;
52
+ tr:hover &, tr:focus-within & { opacity: 1; }
53
+ `;
54
+ /** SelectableList: rows with a radio affordance; one value picked. */
55
+ const Radio = styled.span `
56
+ width: 14px; height: 14px; border-radius: 50%; flex: none;
57
+ border: 1.5px solid ${(p) => (p.$on ? v.brand : v.line2)};
58
+ display: grid; place-items: center;
59
+ &::after { content: ""; width: 6px; height: 6px; border-radius: 50%; background: ${(p) => (p.$on ? v.brand : "transparent")}; }
60
+ `;
61
+ export function SelectableList({ rows, value, onPick, rowKey, render, onDelete }) {
62
+ return (_jsx(RowList, { role: "radiogroup", children: rows.map((r) => {
63
+ const k = rowKey(r);
64
+ const on = k === value;
65
+ return (_jsx(ListRow, { onClick: () => onPick(k), selected: on, leading: _jsx(Radio, { "$on": on, "aria-hidden": "true" }), actions: onDelete ? _jsx("button", { type: "button", "aria-label": "Remove", onClick: (e) => { e.stopPropagation(); onDelete(r); }, style: { color: v.faint }, children: _jsx(Icon, { name: "delete" }) }) : undefined, children: render(r) }, k));
66
+ }) }));
67
+ }
68
+ /** Breadcrumbs: a path with clickable ancestors and a current segment. */
69
+ const Crumbs = styled.nav `
70
+ display: flex; align-items: center; flex-wrap: wrap; gap: 4px;
71
+ font-family: ${v.mono}; font-size: 12px; color: ${v.muted};
72
+ button { font: inherit; color: ${v.muted}; background: none; border: none; padding: 2px 4px; border-radius: 4px; cursor: pointer; }
73
+ button:hover { color: ${v.text}; background: ${v.hover}; }
74
+ .sep { color: ${v.faint}; display: grid; svg { font-size: 10px; } }
75
+ .cur { color: ${v.text}; padding: 2px 4px; }
76
+ `;
77
+ export function Breadcrumbs({ segments, current, label = "Path" }) {
78
+ return (_jsxs(Crumbs, { "aria-label": label, children: [segments.map((s, i) => (_jsxs("span", { style: { display: "contents" }, children: [_jsx("button", { type: "button", onClick: s.onClick, children: s.label }), _jsx("span", { className: "sep", children: _jsx(Icon, { name: "chevron-right" }) })] }, `${s.label}-${i}`))), _jsx("span", { className: "cur", "aria-current": "location", children: current })] }));
79
+ }
80
+ //# sourceMappingURL=List.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"List.js","sourceRoot":"","sources":["../../src/kit/List.tsx"],"names":[],"mappings":"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"}
@@ -2,6 +2,10 @@ export interface LogLine {
2
2
  at?: string | undefined;
3
3
  text: string;
4
4
  stderr?: boolean | undefined;
5
+ /** render as a labelled rule instead of a line (attempt boundaries, restarts) */
6
+ divider?: boolean | undefined;
7
+ /** tone of a divider: ok (finished), crit (crashed), default muted */
8
+ tone?: "ok" | "crit" | "mut" | undefined;
5
9
  }
6
10
  export declare function LogSurface({ lines, height, follow, placeholder }: {
7
11
  lines: LogLine[];
@@ -1 +1 @@
1
- {"version":3,"file":"LogView.d.ts","sourceRoot":"","sources":["../../src/kit/LogView.tsx"],"names":[],"mappings":"AASA,MAAM,WAAW,OAAO;IACtB,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC9B;AAmBD,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAa,EAAE,WAAmC,EAAE,EAAE;IAChG,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC,+BAgBA;AAED,gFAAgF;AAChF,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE;IAC/E,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC,+BAiBA"}
1
+ {"version":3,"file":"LogView.d.ts","sourceRoot":"","sources":["../../src/kit/LogView.tsx"],"names":[],"mappings":"AASA,MAAM,WAAW,OAAO;IACtB,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,iFAAiF;IACjF,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,sEAAsE;IACtE,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;CAC1C;AAyBD,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAa,EAAE,WAAmC,EAAE,EAAE;IAChG,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC,+BAkBA;AAED,gFAAgF;AAChF,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE;IAC/E,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC,+BAiBA"}
@@ -19,13 +19,19 @@ const Sur = styled.pre `
19
19
  `;
20
20
  const Ts = styled.span `color: ${v.logDim}; user-select: none;`;
21
21
  const Err = styled.span `color: ${v.danger};`;
22
+ const Rule = styled.div `
23
+ display: flex; align-items: center; gap: 8px;
24
+ color: ${(p) => (p.$tone === "ok" ? v.success : p.$tone === "crit" ? v.danger : v.logDim)};
25
+ margin: 4px 0;
26
+ &::before, &::after { content: ""; flex: 1 1 auto; border-top: 1px dashed ${v.logDim}; opacity: 0.6; }
27
+ `;
22
28
  export function LogSurface({ lines, height, follow = true, placeholder = "waiting for output…" }) {
23
29
  const ref = useRef(null);
24
30
  useEffect(() => {
25
31
  if (follow && ref.current)
26
32
  ref.current.scrollTop = ref.current.scrollHeight;
27
33
  }, [lines, follow]);
28
- return (_jsxs(Sur, { ref: ref, "$h": height, children: [lines.length === 0 ? _jsx(Ts, { children: placeholder }) : null, lines.map((l, i) => (_jsxs("div", { children: [l.at ? _jsxs(Ts, { children: [l.at, " "] }) : null, l.stderr ? _jsx(Err, { children: l.text }) : l.text] }, i)))] }));
34
+ return (_jsxs(Sur, { ref: ref, "$h": height, children: [lines.length === 0 ? _jsx(Ts, { children: placeholder }) : null, lines.map((l, i) => (l.divider ? _jsx(Rule, { "$tone": l.tone, children: l.text }, i) : (_jsxs("div", { children: [l.at ? _jsxs(Ts, { children: [l.at, " "] }) : null, l.stderr ? _jsx(Err, { children: l.text }) : l.text] }, i))))] }));
29
35
  }
30
36
  /** LogPanel: LogSurface inside a Panel with a follow toggle and status slot. */
31
37
  export function LogPanel({ title, lines, status, height, actions, placeholder }) {
@@ -1 +1 @@
1
- {"version":3,"file":"LogView.js","sourceRoot":"","sources":["../../src/kit/LogView.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LogView.js","sourceRoot":"","sources":["../../src/kit/LogView.tsx"],"names":[],"mappings":"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"}
@@ -20,7 +20,9 @@ export declare const PanelBody: import("styled-components/dist/types").IStyledCo
20
20
  export declare const MicroLabel: import("styled-components/dist/types").IStyledComponentBase<"web", Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "style"> & {
21
21
  style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
22
22
  }> & string;
23
- export declare const Hairline: import("styled-components/dist/types").IStyledComponentBase<"web", Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLHRElement>, HTMLHRElement>, "style"> & {
23
+ export declare const Hairline: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Merged<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLHRElement>, HTMLHRElement>, "style"> & {
24
24
  style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
25
- }> & string;
25
+ }, {
26
+ $vertical?: boolean | undefined;
27
+ }>> & string;
26
28
  //# sourceMappingURL=Panel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../../src/kit/Panel.tsx"],"names":[],"mappings":"AAGA,gFAAgF;AAChF,eAAO,MAAM,KAAK;;WAMjB,CAAC;AAEF,eAAO,MAAM,SAAS;;WAQrB,CAAC;AAEF,eAAO,MAAM,UAAU;;WAItB,CAAC;AAEF,eAAO,MAAM,YAAY;;WAKxB,CAAC;AAEF,eAAO,MAAM,SAAS;;;WAAuB,OAAO,GAAG,SAAS;YAE/D,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,UAAU;;WAQtB,CAAC;AAEF,eAAO,MAAM,QAAQ;;WAIpB,CAAC"}
1
+ {"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../../src/kit/Panel.tsx"],"names":[],"mappings":"AAGA,gFAAgF;AAChF,eAAO,MAAM,KAAK;;WAMjB,CAAC;AAEF,eAAO,MAAM,SAAS;;WAQrB,CAAC;AAEF,eAAO,MAAM,UAAU;;WAItB,CAAC;AAEF,eAAO,MAAM,YAAY;;WAKxB,CAAC;AAEF,eAAO,MAAM,SAAS;;;WAAuB,OAAO,GAAG,SAAS;YAE/D,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,UAAU;;WAQtB,CAAC;AAEF,eAAO,MAAM,QAAQ;;;gBAA2B,OAAO,GAAG,SAAS;YAIlE,CAAC"}
package/dist/kit/Panel.js CHANGED
@@ -43,7 +43,7 @@ export const MicroLabel = styled.span `
43
43
  `;
44
44
  export const Hairline = styled.hr `
45
45
  border: none;
46
- border-top: 1px solid ${v.line};
47
46
  margin: 0;
47
+ ${(p) => (p.$vertical ? `border-left: 1px solid ${v.line}; width: 0; align-self: stretch; height: auto;` : `border-top: 1px solid ${v.line};`)}
48
48
  `;
49
49
  //# sourceMappingURL=Panel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Panel.js","sourceRoot":"","sources":["../../src/kit/Panel.tsx"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AAEvC,gFAAgF;AAChF,MAAM,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAA;gBACnB,CAAC,CAAC,OAAO;sBACH,CAAC,CAAC,IAAI;mBACT,CAAC,CAAC,MAAM;gCACK,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,IAAI;;CAEnD,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAA;;;;;6BAKT,CAAC,CAAC,IAAI;;;CAGlC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,EAAE,CAAA;;;;CAIlC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;CAKrC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAgC;aACtD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;CACvD,CAAC;AAEF,iFAAiF;AACjF,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAA;;iBAEpB,CAAC,CAAC,IAAI;;;;;WAKZ,CAAC,CAAC,KAAK;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAA;;0BAEP,CAAC,CAAC,IAAI;;CAE/B,CAAC"}
1
+ {"version":3,"file":"Panel.js","sourceRoot":"","sources":["../../src/kit/Panel.tsx"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AAEvC,gFAAgF;AAChF,MAAM,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAA;gBACnB,CAAC,CAAC,OAAO;sBACH,CAAC,CAAC,IAAI;mBACT,CAAC,CAAC,MAAM;gCACK,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,IAAI;;CAEnD,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAA;;;;;6BAKT,CAAC,CAAC,IAAI;;;CAGlC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,EAAE,CAAA;;;;CAIlC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;CAKrC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAgC;aACtD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;CACvD,CAAC;AAEF,iFAAiF;AACjF,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAA;;iBAEpB,CAAC,CAAC,IAAI;;;;;WAKZ,CAAC,CAAC,KAAK;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAqC;;;IAGlE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,IAAI,gDAAgD,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,IAAI,GAAG,CAAC;CAC/I,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { ReactNode } from "react";
2
+ export declare const StatGrid: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Merged<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "style"> & {
3
+ style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
4
+ }, {
5
+ $min?: number | undefined;
6
+ }>> & string;
7
+ /** StatValue: label over a big number with no tile chrome (mini-stats inside a panel). */
8
+ export declare function StatValue({ label, value, sub, tone }: {
9
+ label: ReactNode;
10
+ value: ReactNode;
11
+ sub?: ReactNode | undefined;
12
+ tone?: "ok" | "warn" | "crit" | "brand" | undefined;
13
+ }): import("react").JSX.Element;
14
+ /** StatTile: label over a big number, with an optional subline. */
15
+ export declare function StatTile({ label, value, sub, tone }: {
16
+ label: ReactNode;
17
+ value: ReactNode;
18
+ sub?: ReactNode | undefined;
19
+ tone?: "ok" | "warn" | "crit" | "brand" | undefined;
20
+ }): import("react").JSX.Element;
21
+ /** Meter: value out of max as a bar; tone defaults from the ratio. */
22
+ export declare function Meter({ value, max, tone, label, width }: {
23
+ value: number;
24
+ max: number;
25
+ tone?: "ok" | "warn" | "crit" | "brand" | undefined;
26
+ label?: string | undefined;
27
+ /** fixed width in px (inside a table cell); fills the container otherwise */
28
+ width?: number | undefined;
29
+ }): import("react").JSX.Element;
30
+ //# sourceMappingURL=Stat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stat.d.ts","sourceRoot":"","sources":["../../src/kit/Stat.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAOvC,eAAO,MAAM,QAAQ;;;WAAuB,MAAM,GAAG,SAAS;YAI7D,CAAC;AAmBF,0FAA0F;AAC1F,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACrD,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,GAAG,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC5B,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CACrD,+BAQA;AAED,mEAAmE;AACnE,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACpD,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,GAAG,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC5B,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CACrD,+BAQA;AAiBD,sEAAsE;AACtE,wBAAgB,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACpD,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,+BAQA"}
@@ -0,0 +1,54 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import styled, { css } from "styled-components";
3
+ import { v } from "../theme/tokens.js";
4
+ import { Panel } from "./Panel.js";
5
+ import { MicroLabel } from "./Panel.js";
6
+ // Stat tiles (overview numbers) and a utilisation meter.
7
+ export const StatGrid = styled.div `
8
+ display: grid;
9
+ grid-template-columns: repeat(auto-fit, minmax(${(p) => p.$min ?? 150}px, 1fr));
10
+ gap: 12px;
11
+ `;
12
+ const Tile = styled(Panel) `
13
+ padding: 12px 14px;
14
+ display: flex;
15
+ flex-direction: column;
16
+ gap: 6px;
17
+ `;
18
+ const Value = styled.span `
19
+ font-size: 22px;
20
+ font-weight: 650;
21
+ line-height: 1.1;
22
+ font-variant-numeric: tabular-nums;
23
+ color: ${(p) => (p.$tone === "ok" ? v.success : p.$tone === "warn" ? v.warning : p.$tone === "crit" ? v.danger : p.$tone === "brand" ? v.brand : v.text)};
24
+ `;
25
+ const Sub = styled.span `font-size: 11px; color: ${v.faint};`;
26
+ /** StatValue: label over a big number with no tile chrome (mini-stats inside a panel). */
27
+ export function StatValue({ label, value, sub, tone }) {
28
+ return (_jsxs("span", { style: { display: "flex", flexDirection: "column", gap: 4 }, children: [_jsx(MicroLabel, { children: label }), _jsx(Value, { "$tone": tone, children: value }), sub ? _jsx(Sub, { children: sub }) : null] }));
29
+ }
30
+ /** StatTile: label over a big number, with an optional subline. */
31
+ export function StatTile({ label, value, sub, tone }) {
32
+ return (_jsxs(Tile, { children: [_jsx(MicroLabel, { children: label }), _jsx(Value, { "$tone": tone, children: value }), sub ? _jsx(Sub, { children: sub }) : null] }));
33
+ }
34
+ const Bar = styled.div `
35
+ ${(p) => p.$w && css `width: ${p.$w}px;`}
36
+ height: 6px;
37
+ border-radius: 999px;
38
+ background: ${v.field};
39
+ border: 1px solid ${v.fieldLine};
40
+ overflow: hidden;
41
+ `;
42
+ const Fill = styled.div `
43
+ height: 100%;
44
+ width: ${(p) => p.$pct}%;
45
+ background: ${(p) => (p.$tone === "ok" ? v.success : p.$tone === "warn" ? v.warning : p.$tone === "crit" ? v.danger : v.grad90)};
46
+ transition: width 0.3s ease;
47
+ `;
48
+ /** Meter: value out of max as a bar; tone defaults from the ratio. */
49
+ export function Meter({ value, max, tone, label, width }) {
50
+ const pct = max > 0 ? Math.max(0, Math.min(100, (value / max) * 100)) : 0;
51
+ const t = tone ?? (pct >= 90 ? "crit" : pct >= 70 ? "warn" : "brand");
52
+ return (_jsx(Bar, { "$w": width, role: "meter", "aria-valuenow": value, "aria-valuemin": 0, "aria-valuemax": max, "aria-label": label, children: _jsx(Fill, { "$pct": pct, "$tone": t }) }));
53
+ }
54
+ //# sourceMappingURL=Stat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stat.js","sourceRoot":"","sources":["../../src/kit/Stat.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import type { ReactNode } from "react";
2
+ /** Mono: a technical string — id, ref, path, host. */
3
+ export declare const Mono: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Merged<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "style"> & {
4
+ style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
5
+ }, {
6
+ $dim?: boolean | undefined;
7
+ $size?: number | undefined;
8
+ $truncate?: boolean | undefined;
9
+ $weight?: number | undefined;
10
+ }>> & string;
11
+ /** Num: a tabular figure, right-aligned in tables. */
12
+ export declare const Num: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Merged<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "style"> & {
13
+ style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
14
+ }, {
15
+ $dim?: boolean | undefined;
16
+ $faint?: boolean | undefined;
17
+ $mono?: boolean | undefined;
18
+ }>> & string;
19
+ /** Hint: secondary explanatory text under a control or a block. */
20
+ export declare const Hint: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Merged<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>, "style"> & {
21
+ style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
22
+ }, {
23
+ $tone?: "mut" | "warn" | "crit" | "info" | undefined;
24
+ $size?: number | undefined;
25
+ }>> & string;
26
+ /** InlineHint: Hint as a span, for inside table cells and panel heads. */
27
+ export declare const InlineHint: import("styled-components/dist/types").IStyledComponentBase<"web", Omit<import("styled-components/dist/types").Merged<Omit<import("styled-components").FastOmit<import("styled-components/dist/types").Merged<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>, "style"> & {
28
+ style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
29
+ }, {
30
+ $tone?: "mut" | "warn" | "crit" | "info" | undefined;
31
+ $size?: number | undefined;
32
+ }>, "as" | "forwardedAs"> & {
33
+ as?: import("styled-components").WebTarget | undefined;
34
+ forwardedAs?: import("styled-components").WebTarget | undefined;
35
+ }, "style"> & {
36
+ style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | (import("react").CSSProperties & {
37
+ [key: `--${string}`]: string | number | undefined;
38
+ }) | undefined;
39
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>>, "as"> & Partial<Pick<import("styled-components/dist/types").Merged<Omit<import("styled-components").FastOmit<import("styled-components/dist/types").Merged<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>, "style"> & {
40
+ style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
41
+ }, {
42
+ $tone?: "mut" | "warn" | "crit" | "info" | undefined;
43
+ $size?: number | undefined;
44
+ }>, "as" | "forwardedAs"> & {
45
+ as?: import("styled-components").WebTarget | undefined;
46
+ forwardedAs?: import("styled-components").WebTarget | undefined;
47
+ }, "style"> & {
48
+ style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | (import("react").CSSProperties & {
49
+ [key: `--${string}`]: string | number | undefined;
50
+ }) | undefined;
51
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>>, "as">>> & string;
52
+ /** Cell: the two-line table cell — a title with a mono subline under it. */
53
+ export declare function Cell({ title, sub, mono, subMono }: {
54
+ title: ReactNode;
55
+ sub?: ReactNode | undefined;
56
+ mono?: boolean | undefined; /** default true */
57
+ subMono?: boolean | undefined;
58
+ }): import("react").JSX.Element;
59
+ /** InlineLink: a link (router, external, or a button that reads as a link). */
60
+ export declare function InlineLink({ to, href, onClick, mono, tone, external, truncate, children, ...rest }: {
61
+ to?: string | undefined;
62
+ href?: string | undefined;
63
+ onClick?: (() => void) | undefined;
64
+ mono?: boolean | undefined;
65
+ tone?: "brand" | "mut" | undefined;
66
+ /** open in a new tab (href only) */
67
+ external?: boolean | undefined;
68
+ truncate?: boolean | undefined;
69
+ children: ReactNode;
70
+ title?: string | undefined;
71
+ "aria-label"?: string | undefined;
72
+ }): import("react").JSX.Element;
73
+ //# sourceMappingURL=Text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Text.d.ts","sourceRoot":"","sources":["../../src/kit/Text.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQvC,sDAAsD;AACtD,eAAO,MAAM,IAAI;;;WAAwB,OAAO,GAAG,SAAS;YAAU,MAAM,GAAG,SAAS;gBAAc,OAAO,GAAG,SAAS;cAAY,MAAM,GAAG,SAAS;YAMtJ,CAAC;AAEF,sDAAsD;AACtD,eAAO,MAAM,GAAG;;;WAAwB,OAAO,GAAG,SAAS;aAAW,OAAO,GAAG,SAAS;YAAU,OAAO,GAAG,SAAS;YAIrH,CAAC;AAEF,mEAAmE;AACnE,eAAO,MAAM,IAAI;;;YAAsB,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS;YAAU,MAAM,GAAG,SAAS;YAK9G,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,UAAU;;;YARgB,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS;YAAU,MAAM,GAAG,SAAS;;;;;;;;;;;YAAxE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS;YAAU,MAAM,GAAG,SAAS;;;;;;;;yHAQjD,CAAC;AAoB/D,4EAA4E;AAC5E,wBAAgB,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,GAAG,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC,CAAC,mBAAmB;IAAC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAAE,+BAOnL;AAkBD,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE;IACnG,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACnC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,IAAI,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,SAAS,CAAC;IACnC,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC,+BAIA"}
@@ -0,0 +1,73 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import styled, { css } from "styled-components";
3
+ import { Link } from "react-router-dom";
4
+ import { v } from "../theme/tokens.js";
5
+ // Text primitives every list and detail screen needs. These replace the
6
+ // MonoId / NameTxt / SubEnv / MutedNote / Num styled spans that each product
7
+ // screen had grown its own copy of.
8
+ /** Mono: a technical string — id, ref, path, host. */
9
+ export const Mono = styled.span `
10
+ font-family: ${v.mono};
11
+ font-size: ${(p) => p.$size ?? 12}px;
12
+ font-weight: ${(p) => p.$weight ?? "inherit"};
13
+ color: ${(p) => (p.$dim ? v.muted : v.text)};
14
+ ${(p) => p.$truncate && css `display: inline-block; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; vertical-align: bottom;`}
15
+ `;
16
+ /** Num: a tabular figure, right-aligned in tables. */
17
+ export const Num = styled.span `
18
+ font-variant-numeric: tabular-nums;
19
+ ${(p) => p.$mono && css `font-family: ${v.mono}; font-size: 12px;`}
20
+ color: ${(p) => (p.$faint ? v.faint : p.$dim ? v.muted : v.text)};
21
+ `;
22
+ /** Hint: secondary explanatory text under a control or a block. */
23
+ export const Hint = styled.p `
24
+ margin: 0;
25
+ font-size: ${(p) => p.$size ?? 11.5}px;
26
+ line-height: 1.5;
27
+ color: ${(p) => (p.$tone === "warn" ? v.warning : p.$tone === "crit" ? v.danger : p.$tone === "info" ? v.info : v.faint)};
28
+ `;
29
+ /** InlineHint: Hint as a span, for inside table cells and panel heads. */
30
+ export const InlineHint = styled(Hint).attrs({ as: "span" }) ``;
31
+ const CellWrap = styled.span `
32
+ display: flex;
33
+ flex-direction: column;
34
+ gap: 2px;
35
+ min-width: 0;
36
+ `;
37
+ const CellTitle = styled.span `
38
+ font-weight: 600;
39
+ ${(p) => p.$mono && css `font-family: ${v.mono}; font-size: 12px; font-weight: 650;`}
40
+ overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
41
+ `;
42
+ const CellSub = styled.span `
43
+ font-size: 11px;
44
+ color: ${v.faint};
45
+ ${(p) => p.$mono !== false && css `font-family: ${v.mono};`}
46
+ overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
47
+ `;
48
+ /** Cell: the two-line table cell — a title with a mono subline under it. */
49
+ export function Cell({ title, sub, mono, subMono }) {
50
+ return (_jsxs(CellWrap, { children: [_jsx(CellTitle, { "$mono": mono, children: title }), sub ? _jsx(CellSub, { "$mono": subMono, children: sub }) : null] }));
51
+ }
52
+ const linkCss = css `
53
+ font: inherit;
54
+ ${(p) => p.$mono && css `font-family: ${v.mono}; font-size: 12px;`}
55
+ ${(p) => p.$truncate && css `display: inline-block; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; vertical-align: bottom;`}
56
+ color: ${(p) => (p.$tone === "mut" ? v.muted : v.info)};
57
+ text-decoration: none;
58
+ cursor: pointer;
59
+ background: none; border: none; padding: 0;
60
+ &:hover { text-decoration: underline; color: ${v.text}; }
61
+ `;
62
+ const A = styled.a `${linkCss}`;
63
+ const L = styled(Link) `${linkCss}`;
64
+ const B = styled.button `${linkCss}`;
65
+ /** InlineLink: a link (router, external, or a button that reads as a link). */
66
+ export function InlineLink({ to, href, onClick, mono, tone, external, truncate, children, ...rest }) {
67
+ if (to)
68
+ return _jsx(L, { to: to, "$mono": mono, "$tone": tone, "$truncate": truncate, ...rest, children: children });
69
+ if (href)
70
+ return _jsx(A, { href: href, "$mono": mono, "$tone": tone, "$truncate": truncate, ...(external ? { target: "_blank", rel: "noreferrer" } : {}), ...rest, children: children });
71
+ return _jsx(B, { type: "button", onClick: onClick, "$mono": mono, "$tone": tone, "$truncate": truncate, ...rest, children: children });
72
+ }
73
+ //# sourceMappingURL=Text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Text.js","sourceRoot":"","sources":["../../src/kit/Text.tsx"],"names":[],"mappings":";AAAA,OAAO,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AAEvC,wEAAwE;AACxE,6EAA6E;AAC7E,oCAAoC;AAEpC,sDAAsD;AACtD,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAA2H;iBACzI,CAAC,CAAC,IAAI;eACR,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;iBAClB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,SAAS;WACnC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,GAAG,CAAA,iIAAiI;CAC7J,CAAC;AAEF,sDAAsD;AACtD,MAAM,CAAC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAA2F;;IAErH,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAA,gBAAgB,CAAC,CAAC,IAAI,oBAAoB;WACxD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;CACjE,CAAC;AAEF,mEAAmE;AACnE,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAsF;;eAEnG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI;;WAE1B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;CACzH,CAAC;AAEF,0EAA0E;AAC1E,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA,EAAE,CAAC;AAE/D,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAA;;;;;CAK3B,CAAC;AACF,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAiC;;IAE1D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAA,gBAAgB,CAAC,CAAC,IAAI,sCAAsC;;CAEpF,CAAC;AACF,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAiC;;WAEjD,CAAC,CAAC,KAAK;IACd,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,GAAG,CAAA,gBAAgB,CAAC,CAAC,IAAI,GAAG;;CAE3D,CAAC;AAEF,4EAA4E;AAC5E,MAAM,UAAU,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAoI;IAClL,OAAO,CACL,MAAC,QAAQ,eACP,KAAC,SAAS,aAAQ,IAAI,YAAG,KAAK,GAAa,EAC1C,GAAG,CAAC,CAAC,CAAC,KAAC,OAAO,aAAQ,OAAO,YAAG,GAAG,GAAW,CAAC,CAAC,CAAC,IAAI,IAC7C,CACZ,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,GAAG,GAAG,CAAuG;;IAEtH,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAA,gBAAgB,CAAC,CAAC,IAAI,oBAAoB;IAC/D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,GAAG,CAAA,iIAAiI;WACnJ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;;;;iDAIP,CAAC,CAAC,IAAI;CACtD,CAAC;AAGF,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAW,GAAG,OAAO,EAAE,CAAC;AAC1C,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAW,GAAG,OAAO,EAAE,CAAC;AAC9C,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAW,GAAG,OAAO,EAAE,CAAC;AAE/C,+EAA+E;AAC/E,MAAM,UAAU,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,EAYhG;IACC,IAAI,EAAE;QAAE,OAAO,KAAC,CAAC,IAAC,EAAE,EAAE,EAAE,WAAS,IAAI,WAAS,IAAI,eAAa,QAAQ,KAAM,IAAI,YAAG,QAAQ,GAAK,CAAC;IAClG,IAAI,IAAI;QAAE,OAAO,KAAC,CAAC,IAAC,IAAI,EAAE,IAAI,WAAS,IAAI,WAAS,IAAI,eAAa,QAAQ,KAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAM,IAAI,YAAG,QAAQ,GAAK,CAAC;IACvK,OAAO,KAAC,CAAC,IAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,OAAO,WAAS,IAAI,WAAS,IAAI,eAAa,QAAQ,KAAM,IAAI,YAAG,QAAQ,GAAK,CAAC;AACpH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xeonr/platform-ui",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
4
  "description": "Xeonr Platform Suite design language: the --x-* token sheet, theme provider and kit shared by every Xeonr console.",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",