@xemahq/ui-kernel 0.1.5 → 0.1.7
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/lib/biome-host/create-biome-orval-config.d.ts +14 -0
- package/dist/lib/biome-host/create-biome-orval-config.d.ts.map +1 -0
- package/dist/lib/biome-host/create-biome-orval-config.js +22 -0
- package/dist/lib/biome-host/create-biome-orval-config.js.map +1 -0
- package/dist/lib/biome-host/host-bridge.d.ts +2 -0
- package/dist/lib/biome-host/host-bridge.d.ts.map +1 -1
- package/dist/lib/biome-host/host-bridge.js.map +1 -1
- package/dist/lib/biome-host/host-sources.d.ts +2 -0
- package/dist/lib/biome-host/host-sources.d.ts.map +1 -1
- package/dist/lib/biome-host/index.d.ts +1 -0
- package/dist/lib/biome-host/index.d.ts.map +1 -1
- package/dist/lib/biome-host/index.js +1 -0
- package/dist/lib/biome-host/index.js.map +1 -1
- package/dist/session-kit/approvals/ApprovalButton.d.ts +14 -0
- package/dist/session-kit/approvals/ApprovalButton.d.ts.map +1 -0
- package/dist/session-kit/approvals/ApprovalButton.js +45 -0
- package/dist/session-kit/approvals/ApprovalButton.js.map +1 -0
- package/dist/session-kit/approvals/ApprovalCard.d.ts +12 -0
- package/dist/session-kit/approvals/ApprovalCard.d.ts.map +1 -0
- package/dist/session-kit/approvals/ApprovalCard.js +117 -0
- package/dist/session-kit/approvals/ApprovalCard.js.map +1 -0
- package/dist/session-kit/approvals/ApprovalsCenter.d.ts +11 -0
- package/dist/session-kit/approvals/ApprovalsCenter.d.ts.map +1 -0
- package/dist/session-kit/approvals/ApprovalsCenter.js +127 -0
- package/dist/session-kit/approvals/ApprovalsCenter.js.map +1 -0
- package/dist/session-kit/approvals/CapabilityApprovalStickyBar.d.ts +12 -0
- package/dist/session-kit/approvals/CapabilityApprovalStickyBar.d.ts.map +1 -0
- package/dist/session-kit/approvals/CapabilityApprovalStickyBar.js +36 -0
- package/dist/session-kit/approvals/CapabilityApprovalStickyBar.js.map +1 -0
- package/dist/session-kit/approvals/Obligation.d.ts +15 -0
- package/dist/session-kit/approvals/Obligation.d.ts.map +1 -0
- package/dist/session-kit/approvals/Obligation.js +42 -0
- package/dist/session-kit/approvals/Obligation.js.map +1 -0
- package/dist/session-kit/approvals/ScopedBody.d.ts +9 -0
- package/dist/session-kit/approvals/ScopedBody.d.ts.map +1 -0
- package/dist/session-kit/approvals/ScopedBody.js +145 -0
- package/dist/session-kit/approvals/ScopedBody.js.map +1 -0
- package/dist/session-kit/approvals/approval-icons.d.ts +15 -0
- package/dist/session-kit/approvals/approval-icons.d.ts.map +1 -0
- package/dist/session-kit/approvals/approval-icons.js +3 -0
- package/dist/session-kit/approvals/approval-icons.js.map +1 -0
- package/dist/session-kit/approvals/approval-model.d.ts +83 -0
- package/dist/session-kit/approvals/approval-model.d.ts.map +1 -0
- package/dist/session-kit/approvals/approval-model.js +25 -0
- package/dist/session-kit/approvals/approval-model.js.map +1 -0
- package/dist/session-kit/approvals/index.d.ts +12 -0
- package/dist/session-kit/approvals/index.d.ts.map +1 -0
- package/dist/session-kit/approvals/index.js +28 -0
- package/dist/session-kit/approvals/index.js.map +1 -0
- package/dist/session-kit/approvals/obligation-display.d.ts +17 -0
- package/dist/session-kit/approvals/obligation-display.d.ts.map +1 -0
- package/dist/session-kit/approvals/obligation-display.js +58 -0
- package/dist/session-kit/approvals/obligation-display.js.map +1 -0
- package/dist/session-kit/approvals/risk-accent.d.ts +8 -0
- package/dist/session-kit/approvals/risk-accent.d.ts.map +1 -0
- package/dist/session-kit/approvals/risk-accent.js +28 -0
- package/dist/session-kit/approvals/risk-accent.js.map +1 -0
- package/dist/session-kit/approvals/scope-icons.d.ts +12 -0
- package/dist/session-kit/approvals/scope-icons.d.ts.map +1 -0
- package/dist/session-kit/approvals/scope-icons.js +14 -0
- package/dist/session-kit/approvals/scope-icons.js.map +1 -0
- package/dist/session-kit/combobox/Combobox.d.ts +46 -0
- package/dist/session-kit/combobox/Combobox.d.ts.map +1 -0
- package/dist/session-kit/combobox/Combobox.js +113 -0
- package/dist/session-kit/combobox/Combobox.js.map +1 -0
- package/dist/session-kit/combobox/use-click-outside.d.ts +3 -0
- package/dist/session-kit/combobox/use-click-outside.d.ts.map +1 -0
- package/dist/session-kit/combobox/use-click-outside.js +18 -0
- package/dist/session-kit/combobox/use-click-outside.js.map +1 -0
- package/dist/session-kit/display/ContextHeader.d.ts +27 -0
- package/dist/session-kit/display/ContextHeader.d.ts.map +1 -0
- package/dist/session-kit/display/ContextHeader.js +47 -0
- package/dist/session-kit/display/ContextHeader.js.map +1 -0
- package/dist/session-kit/display/FileDiffCard.d.ts +18 -0
- package/dist/session-kit/display/FileDiffCard.d.ts.map +1 -0
- package/dist/session-kit/display/FileDiffCard.js +58 -0
- package/dist/session-kit/display/FileDiffCard.js.map +1 -0
- package/dist/session-kit/display/MD.d.ts +7 -0
- package/dist/session-kit/display/MD.d.ts.map +1 -0
- package/dist/session-kit/display/MD.js +89 -0
- package/dist/session-kit/display/MD.js.map +1 -0
- package/dist/session-kit/display/MessageTurn.d.ts +21 -0
- package/dist/session-kit/display/MessageTurn.d.ts.map +1 -0
- package/dist/session-kit/display/MessageTurn.js +62 -0
- package/dist/session-kit/display/MessageTurn.js.map +1 -0
- package/dist/session-kit/display/ThinkingPanel.d.ts +12 -0
- package/dist/session-kit/display/ThinkingPanel.d.ts.map +1 -0
- package/dist/session-kit/display/ThinkingPanel.js +30 -0
- package/dist/session-kit/display/ThinkingPanel.js.map +1 -0
- package/dist/session-kit/display/TodoChecklist.d.ts +17 -0
- package/dist/session-kit/display/TodoChecklist.d.ts.map +1 -0
- package/dist/session-kit/display/TodoChecklist.js +50 -0
- package/dist/session-kit/display/TodoChecklist.js.map +1 -0
- package/dist/session-kit/display/TokenMeter.d.ts +15 -0
- package/dist/session-kit/display/TokenMeter.d.ts.map +1 -0
- package/dist/session-kit/display/TokenMeter.js +35 -0
- package/dist/session-kit/display/TokenMeter.js.map +1 -0
- package/dist/session-kit/display/ToolStrip.d.ts +31 -0
- package/dist/session-kit/display/ToolStrip.d.ts.map +1 -0
- package/dist/session-kit/display/ToolStrip.js +99 -0
- package/dist/session-kit/display/ToolStrip.js.map +1 -0
- package/dist/session-kit/display/TypingDots.d.ts +3 -0
- package/dist/session-kit/display/TypingDots.d.ts.map +1 -0
- package/dist/session-kit/display/TypingDots.js +14 -0
- package/dist/session-kit/display/TypingDots.js.map +1 -0
- package/dist/session-kit/index.d.ts +21 -0
- package/dist/session-kit/index.d.ts.map +1 -0
- package/dist/session-kit/index.js +37 -0
- package/dist/session-kit/index.js.map +1 -0
- package/dist/session-kit/lib/enums.d.ts +34 -0
- package/dist/session-kit/lib/enums.d.ts.map +1 -0
- package/dist/session-kit/lib/enums.js +44 -0
- package/dist/session-kit/lib/enums.js.map +1 -0
- package/dist/session-kit/lib/portal-accent.d.ts +3 -0
- package/dist/session-kit/lib/portal-accent.d.ts.map +1 -0
- package/dist/session-kit/lib/portal-accent.js +9 -0
- package/dist/session-kit/lib/portal-accent.js.map +1 -0
- package/dist/session-kit/lib/status-dot.d.ts +10 -0
- package/dist/session-kit/lib/status-dot.d.ts.map +1 -0
- package/dist/session-kit/lib/status-dot.js +43 -0
- package/dist/session-kit/lib/status-dot.js.map +1 -0
- package/dist/session-kit/primitives/Avatar.d.ts +10 -0
- package/dist/session-kit/primitives/Avatar.d.ts.map +1 -0
- package/dist/session-kit/primitives/Avatar.js +21 -0
- package/dist/session-kit/primitives/Avatar.js.map +1 -0
- package/dist/session-kit/primitives/PortalGlyph.d.ts +12 -0
- package/dist/session-kit/primitives/PortalGlyph.d.ts.map +1 -0
- package/dist/session-kit/primitives/PortalGlyph.js +21 -0
- package/dist/session-kit/primitives/PortalGlyph.js.map +1 -0
- package/dist/session-kit/primitives/RiskPill.d.ts +12 -0
- package/dist/session-kit/primitives/RiskPill.d.ts.map +1 -0
- package/dist/session-kit/primitives/RiskPill.js +53 -0
- package/dist/session-kit/primitives/RiskPill.js.map +1 -0
- package/dist/session-kit/primitives/ScopeDot.d.ts +9 -0
- package/dist/session-kit/primitives/ScopeDot.d.ts.map +1 -0
- package/dist/session-kit/primitives/ScopeDot.js +23 -0
- package/dist/session-kit/primitives/ScopeDot.js.map +1 -0
- package/dist/session-kit/primitives/Segmented.d.ts +16 -0
- package/dist/session-kit/primitives/Segmented.d.ts.map +1 -0
- package/dist/session-kit/primitives/Segmented.js +31 -0
- package/dist/session-kit/primitives/Segmented.js.map +1 -0
- package/package.json +3 -3
- package/src/lib/biome-host/create-biome-orval-config.ts +76 -0
- package/src/lib/biome-host/host-bridge.ts +22 -0
- package/src/lib/biome-host/host-sources.ts +13 -0
- package/src/lib/biome-host/index.ts +1 -0
- package/src/session-kit/approvals/ApprovalButton.tsx +89 -0
- package/src/session-kit/approvals/ApprovalCard.tsx +336 -0
- package/src/session-kit/approvals/ApprovalsCenter.tsx +327 -0
- package/src/session-kit/approvals/CapabilityApprovalStickyBar.tsx +118 -0
- package/src/session-kit/approvals/Obligation.tsx +111 -0
- package/src/session-kit/approvals/ScopedBody.tsx +392 -0
- package/src/session-kit/approvals/approval-icons.ts +31 -0
- package/src/session-kit/approvals/approval-model.ts +205 -0
- package/src/session-kit/approvals/index.ts +22 -0
- package/src/session-kit/approvals/obligation-display.ts +100 -0
- package/src/session-kit/approvals/risk-accent.ts +47 -0
- package/src/session-kit/approvals/scope-icons.ts +19 -0
- package/src/session-kit/combobox/Combobox.tsx +327 -0
- package/src/session-kit/combobox/use-click-outside.ts +21 -0
- package/src/session-kit/display/ContextHeader.tsx +148 -0
- package/src/session-kit/display/FileDiffCard.tsx +140 -0
- package/src/session-kit/display/MD.tsx +153 -0
- package/src/session-kit/display/MessageTurn.tsx +157 -0
- package/src/session-kit/display/ThinkingPanel.tsx +78 -0
- package/src/session-kit/display/TodoChecklist.tsx +120 -0
- package/src/session-kit/display/TokenMeter.tsx +89 -0
- package/src/session-kit/display/ToolStrip.tsx +278 -0
- package/src/session-kit/display/TypingDots.tsx +24 -0
- package/src/session-kit/index.ts +44 -0
- package/src/session-kit/lib/enums.ts +66 -0
- package/src/session-kit/lib/portal-accent.ts +30 -0
- package/src/session-kit/lib/status-dot.ts +68 -0
- package/src/session-kit/primitives/Avatar.tsx +44 -0
- package/src/session-kit/primitives/PortalGlyph.tsx +51 -0
- package/src/session-kit/primitives/RiskPill.tsx +95 -0
- package/src/session-kit/primitives/ScopeDot.tsx +47 -0
- package/src/session-kit/primitives/Segmented.tsx +71 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capability risk-tier pill. Reuses the kernel `CapabilityRiskTier`
|
|
3
|
+
* enum (low / medium / high / critical) — it does NOT define a parallel
|
|
4
|
+
* string union. Critical renders an optional caller-supplied alert icon
|
|
5
|
+
* (the kit carries no icon dependency, matching the rest of ui-kernel).
|
|
6
|
+
*
|
|
7
|
+
* Risk → colour (HANDOFF §6):
|
|
8
|
+
* low → ink / muted
|
|
9
|
+
* medium → --info
|
|
10
|
+
* high → --warning
|
|
11
|
+
* critical → --destructive (always explicit)
|
|
12
|
+
*/
|
|
13
|
+
import { CapabilityRiskTier } from '@xemahq/kernel-contracts/capability';
|
|
14
|
+
|
|
15
|
+
import type { CSSProperties, ReactElement, ReactNode } from 'react';
|
|
16
|
+
|
|
17
|
+
export { CapabilityRiskTier };
|
|
18
|
+
|
|
19
|
+
interface RiskStyle {
|
|
20
|
+
readonly label: string;
|
|
21
|
+
readonly fg: string;
|
|
22
|
+
readonly bg: string;
|
|
23
|
+
readonly bd: string;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const DANGER = 'var(--destructive, var(--danger))';
|
|
27
|
+
|
|
28
|
+
const RISK: Record<CapabilityRiskTier, RiskStyle> = {
|
|
29
|
+
[CapabilityRiskTier.Low]: {
|
|
30
|
+
label: 'Low',
|
|
31
|
+
fg: 'hsl(var(--ink-3))',
|
|
32
|
+
bg: 'hsl(var(--muted))',
|
|
33
|
+
bd: 'hsl(var(--rule))',
|
|
34
|
+
},
|
|
35
|
+
[CapabilityRiskTier.Medium]: {
|
|
36
|
+
label: 'Medium',
|
|
37
|
+
fg: 'hsl(var(--info))',
|
|
38
|
+
bg: 'hsl(var(--info) / 0.09)',
|
|
39
|
+
bd: 'hsl(var(--info) / 0.28)',
|
|
40
|
+
},
|
|
41
|
+
[CapabilityRiskTier.High]: {
|
|
42
|
+
label: 'High',
|
|
43
|
+
fg: 'hsl(var(--warning))',
|
|
44
|
+
bg: 'hsl(var(--warning) / 0.1)',
|
|
45
|
+
bd: 'hsl(var(--warning) / 0.3)',
|
|
46
|
+
},
|
|
47
|
+
[CapabilityRiskTier.Critical]: {
|
|
48
|
+
label: 'Critical',
|
|
49
|
+
fg: `hsl(${DANGER})`,
|
|
50
|
+
bg: `hsl(${DANGER} / 0.09)`,
|
|
51
|
+
bd: `hsl(${DANGER} / 0.32)`,
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export type RiskPillSize = 'xs' | 'sm';
|
|
56
|
+
|
|
57
|
+
export interface RiskPillProps {
|
|
58
|
+
readonly tier: CapabilityRiskTier;
|
|
59
|
+
readonly size?: RiskPillSize;
|
|
60
|
+
/** Rendered before the label for the `critical` tier (e.g. an alert glyph). */
|
|
61
|
+
readonly criticalIcon?: ReactNode;
|
|
62
|
+
readonly style?: CSSProperties;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export function RiskPill({
|
|
66
|
+
tier,
|
|
67
|
+
size = 'sm',
|
|
68
|
+
criticalIcon,
|
|
69
|
+
style,
|
|
70
|
+
}: RiskPillProps): ReactElement {
|
|
71
|
+
const r = RISK[tier];
|
|
72
|
+
return (
|
|
73
|
+
<span
|
|
74
|
+
className="mono"
|
|
75
|
+
style={{
|
|
76
|
+
display: 'inline-flex',
|
|
77
|
+
alignItems: 'center',
|
|
78
|
+
gap: 4,
|
|
79
|
+
padding: size === 'xs' ? '1px 6px' : '2px 8px',
|
|
80
|
+
fontSize: size === 'xs' ? 9.5 : 10,
|
|
81
|
+
fontWeight: 600,
|
|
82
|
+
textTransform: 'uppercase',
|
|
83
|
+
letterSpacing: '0.06em',
|
|
84
|
+
color: r.fg,
|
|
85
|
+
background: r.bg,
|
|
86
|
+
border: `1px solid ${r.bd}`,
|
|
87
|
+
borderRadius: 5,
|
|
88
|
+
...style,
|
|
89
|
+
}}
|
|
90
|
+
>
|
|
91
|
+
{tier === CapabilityRiskTier.Critical && criticalIcon}
|
|
92
|
+
{r.label}
|
|
93
|
+
</span>
|
|
94
|
+
);
|
|
95
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Biome provenance dot — a tiny colour-coded circle keyed on
|
|
3
|
+
* `BiomeScope` (system / platform / community).
|
|
4
|
+
*/
|
|
5
|
+
import { BiomeScope } from '../lib/enums';
|
|
6
|
+
|
|
7
|
+
import type { CSSProperties, ReactElement } from 'react';
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
interface ScopeStyle {
|
|
11
|
+
readonly color: string;
|
|
12
|
+
readonly label: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const SCOPE: Record<BiomeScope, ScopeStyle> = {
|
|
16
|
+
[BiomeScope.System]: { color: 'hsl(var(--ink-4))', label: 'System' },
|
|
17
|
+
[BiomeScope.Platform]: { color: 'hsl(var(--primary))', label: 'Platform' },
|
|
18
|
+
[BiomeScope.Community]: { color: 'hsl(var(--p-people))', label: 'Community' },
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export interface ScopeDotProps {
|
|
22
|
+
readonly scope: BiomeScope;
|
|
23
|
+
readonly size?: number;
|
|
24
|
+
readonly style?: CSSProperties;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function ScopeDot({
|
|
28
|
+
scope,
|
|
29
|
+
size = 7,
|
|
30
|
+
style,
|
|
31
|
+
}: ScopeDotProps): ReactElement {
|
|
32
|
+
const s = SCOPE[scope];
|
|
33
|
+
return (
|
|
34
|
+
<span
|
|
35
|
+
title={s.label}
|
|
36
|
+
style={{
|
|
37
|
+
width: size,
|
|
38
|
+
height: size,
|
|
39
|
+
borderRadius: '50%',
|
|
40
|
+
background: s.color,
|
|
41
|
+
flexShrink: 0,
|
|
42
|
+
display: 'inline-block',
|
|
43
|
+
...style,
|
|
44
|
+
}}
|
|
45
|
+
/>
|
|
46
|
+
);
|
|
47
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Small segmented control. Generic over the option value type so a
|
|
3
|
+
* caller can drive it with a closed enum directly.
|
|
4
|
+
*/
|
|
5
|
+
import type { CSSProperties, ReactElement, ReactNode } from 'react';
|
|
6
|
+
|
|
7
|
+
export interface SegmentedOption<V extends string> {
|
|
8
|
+
readonly value: V;
|
|
9
|
+
readonly label: ReactNode;
|
|
10
|
+
/** Optional leading icon node (host-supplied). */
|
|
11
|
+
readonly icon?: ReactNode;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export type SegmentedSize = 'sm' | 'md';
|
|
15
|
+
|
|
16
|
+
export interface SegmentedProps<V extends string> {
|
|
17
|
+
readonly options: ReadonlyArray<SegmentedOption<V>>;
|
|
18
|
+
readonly value: V;
|
|
19
|
+
readonly onChange: (value: V) => void;
|
|
20
|
+
readonly size?: SegmentedSize;
|
|
21
|
+
readonly style?: CSSProperties;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function Segmented<V extends string>({
|
|
25
|
+
options,
|
|
26
|
+
value,
|
|
27
|
+
onChange,
|
|
28
|
+
size = 'sm',
|
|
29
|
+
style,
|
|
30
|
+
}: SegmentedProps<V>): ReactElement {
|
|
31
|
+
return (
|
|
32
|
+
<div
|
|
33
|
+
style={{
|
|
34
|
+
display: 'inline-flex',
|
|
35
|
+
padding: 2,
|
|
36
|
+
gap: 2,
|
|
37
|
+
background: 'hsl(var(--paper-sunk))',
|
|
38
|
+
border: '1px solid hsl(var(--rule))',
|
|
39
|
+
borderRadius: 8,
|
|
40
|
+
...style,
|
|
41
|
+
}}
|
|
42
|
+
>
|
|
43
|
+
{options.map((option) => {
|
|
44
|
+
const on = option.value === value;
|
|
45
|
+
return (
|
|
46
|
+
<button
|
|
47
|
+
key={option.value}
|
|
48
|
+
type="button"
|
|
49
|
+
onClick={() => onChange(option.value)}
|
|
50
|
+
style={{
|
|
51
|
+
display: 'inline-flex',
|
|
52
|
+
alignItems: 'center',
|
|
53
|
+
gap: 5,
|
|
54
|
+
padding: size === 'sm' ? '4px 10px' : '6px 12px',
|
|
55
|
+
fontSize: size === 'sm' ? 12 : 13,
|
|
56
|
+
fontWeight: on ? 600 : 450,
|
|
57
|
+
borderRadius: 6,
|
|
58
|
+
color: on ? 'hsl(var(--ink))' : 'hsl(var(--ink-3))',
|
|
59
|
+
background: on ? 'hsl(var(--paper-elev))' : 'transparent',
|
|
60
|
+
boxShadow: on ? 'var(--shadow-2, var(--shadow-1))' : 'none',
|
|
61
|
+
transition: 'background 140ms ease, color 140ms ease, box-shadow 140ms ease',
|
|
62
|
+
}}
|
|
63
|
+
>
|
|
64
|
+
{option.icon}
|
|
65
|
+
{option.label}
|
|
66
|
+
</button>
|
|
67
|
+
);
|
|
68
|
+
})}
|
|
69
|
+
</div>
|
|
70
|
+
);
|
|
71
|
+
}
|