austere-axi 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +168 -102
- package/dist/austere.js +128 -153
- package/dist/catalog.json +1 -0
- package/dist/chrome/chrome.css +1 -1
- package/dist/chrome/chrome.js +5 -4
- package/dist/cli.mjs +2402 -335
- package/dist/pack-kit.mjs +284 -0
- package/dist/packs/mermaid/catalog.json +53 -0
- package/dist/packs/mermaid/pack.js +25 -0
- package/dist/packs/shadcn/catalog.json +429 -0
- package/dist/packs/shadcn/pack.js +69 -0
- package/dist/prompt.md +8 -20
- package/dist/spec.json +1 -1
- package/package.json +20 -4
- package/skills/austere-setup/SKILL.md +82 -0
- package/types/catalog.d.ts +82 -0
- package/types/pack-kit.d.ts +46 -0
- package/types/pack.d.ts +104 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"format": 1,
|
|
3
|
+
"pack": "@austere-axi/pack-mermaid",
|
|
4
|
+
"version": "0.4.0",
|
|
5
|
+
"groups": [
|
|
6
|
+
{
|
|
7
|
+
"name": "Content",
|
|
8
|
+
"notes": [
|
|
9
|
+
"- Mermaid for sequences, state machines, ER, gantt and quick flowcharts."
|
|
10
|
+
]
|
|
11
|
+
}
|
|
12
|
+
],
|
|
13
|
+
"components": [
|
|
14
|
+
{
|
|
15
|
+
"name": "Mermaid",
|
|
16
|
+
"group": "Content",
|
|
17
|
+
"signature": "Mermaid(source: string, caption?: string)",
|
|
18
|
+
"description": "Diagram from Mermaid source (flowchart, sequence, state, class, ER, gantt). source is a raw multi-line string. Keep node labels to a few words; clicked nodes reach the agent by label.",
|
|
19
|
+
"tier": "core",
|
|
20
|
+
"pack": "@austere-axi/pack-mermaid",
|
|
21
|
+
"examples": [
|
|
22
|
+
"requestPath = Mermaid(\"flowchart LR\n client[Client] --> api[API]\n api --> pg[(Postgres)]\", \"Request path\")"
|
|
23
|
+
],
|
|
24
|
+
"slots": [
|
|
25
|
+
"Card.children",
|
|
26
|
+
"TabItem.content",
|
|
27
|
+
"AccordionItem.content"
|
|
28
|
+
]
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"api": 1,
|
|
32
|
+
"integrity": "sha384-GpGRe0zuS3HGqdLLXFhR3BCOsY+8rsN2SPv0yaA3gNvcB69o4HJ4aF/01oUOP2u0",
|
|
33
|
+
"size": 5782,
|
|
34
|
+
"css": true,
|
|
35
|
+
"defs": {
|
|
36
|
+
"Mermaid": {
|
|
37
|
+
"type": "object",
|
|
38
|
+
"properties": {
|
|
39
|
+
"source": {
|
|
40
|
+
"type": "string"
|
|
41
|
+
},
|
|
42
|
+
"caption": {
|
|
43
|
+
"type": "string"
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"required": [
|
|
47
|
+
"source"
|
|
48
|
+
],
|
|
49
|
+
"additionalProperties": false,
|
|
50
|
+
"description": "Diagram from Mermaid source (flowchart, sequence, state, class, ER, gantt). source is a raw multi-line string. Keep node labels to a few words; clicked nodes reach the agent by label."
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
(()=>{var F=Object.create;var B=Object.defineProperty;var I=Object.getOwnPropertyDescriptor;var W=Object.getOwnPropertyNames;var K=Object.getPrototypeOf,O=Object.prototype.hasOwnProperty;var p=(e,t)=>()=>{try{return t||e((t={exports:{}}).exports,t),t.exports}catch(r){throw t=0,r}};var U=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of W(t))!O.call(e,n)&&n!==r&&B(e,n,{get:()=>t[n],enumerable:!(a=I(t,n))||a.enumerable});return e};var l=(e,t,r)=>(r=e!=null?F(K(e)):{},U(t||!e||!e.__esModule?B(r,"default",{value:e,enumerable:!0}):r,e));var E=p((te,T)=>{var k=globalThis.__austereHost;if(!k)throw new Error("this austere-axi component pack needs the austere-axi runtime on the page");T.exports=k.React});var S=p((re,q)=>{var M=globalThis.__austereHost;if(!M)throw new Error("this austere-axi component pack needs the austere-axi runtime on the page");q.exports=M.zod});var w=p((ae,_)=>{var R=globalThis.__austereHost;if(!R)throw new Error("this austere-axi component pack needs the austere-axi runtime on the page");_.exports=R.pack});var b=p((oe,L)=>{var A=globalThis.__austereHost;if(!A)throw new Error("this austere-axi component pack needs the austere-axi runtime on the page");L.exports=A.jsxRuntime});var c=l(E()),f=l(S()),m=l(w()),i=l(b()),P="https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.js",C=null,G=0;function y(e){return new Promise((t,r)=>{let a=document.createElement("script");a.src=e,a.async=!0,a.onload=()=>t(),a.onerror=()=>r(new Error(`failed to load ${e}`)),document.head.appendChild(a)})}function J(){if(window.mermaid)return Promise.resolve(z(window.mermaid));if(!C){let e=(0,m.assetUrl)("mermaid.min.js");C=(e?y(e).catch(()=>y(P)):y(P)).then(()=>z(window.mermaid))}return C}var j=!1;function z(e){return j||(j=!0,e.initialize({startOnLoad:!1,securityLevel:"strict",theme:"base",fontFamily:"Inter Variable, Inter, ui-sans-serif, system-ui, sans-serif",themeVariables:{darkMode:!0,background:"#121214",fontSize:"14px",primaryColor:"#202024",primaryTextColor:"#ececef",primaryBorderColor:"#4a4a52",secondaryColor:"#1a1a1e",secondaryTextColor:"#ececef",secondaryBorderColor:"#3a3a40",tertiaryColor:"#18181b",tertiaryTextColor:"#ececef",tertiaryBorderColor:"#3a3a40",lineColor:"#8b8b94",textColor:"#d4d4d8",mainBkg:"#202024",nodeBorder:"#4a4a52",clusterBkg:"#18181b",clusterBorder:"#34343a",edgeLabelBackground:"#121214",noteBkgColor:"#2a2614",noteTextColor:"#ececef",noteBorderColor:"#5c5326",actorBkg:"#202024",actorBorder:"#4a4a52",actorTextColor:"#ececef",signalColor:"#a1a1aa",signalTextColor:"#d4d4d8",labelBoxBkgColor:"#202024",labelBoxBorderColor:"#4a4a52",labelTextColor:"#ececef",loopTextColor:"#d4d4d8",activationBkgColor:"#2a2a30",activationBorderColor:"#5a5a64",sequenceNumberColor:"#121214"},flowchart:{htmlLabels:!1,curve:"basis",padding:12},gantt:{axisFormat:"%m-%d",fontSize:12,barHeight:22}})),e}function Q(e){let t=/^```(?:mermaid)?\s*\n([\s\S]*?)\n?```\s*$/.exec(e);return t?t[1]:e}function H(e){let t=e.querySelectorAll("tspan, div, span, p");return(t.length?Array.from(t,a=>a.children.length?"":a.textContent):[e.textContent]).join(" ").replace(/\s+/g," ").trim()}function X(e){let t=(r,a)=>{a&&r.setAttribute("data-austere-part",a.slice(0,80))};e.querySelectorAll("g.node, g.cluster, g.edgeLabel").forEach(r=>{let a=r.querySelector(".classTitle, .label-group, .er.entityLabel, .name");t(r,H(a||r))}),e.querySelectorAll("text.actor, text.messageText, text.noteText, text.taskText").forEach(r=>t(r,H(r)))}function Y({props:e,statementId:t}){let r=(0,c.useRef)(null),[a,n]=(0,c.useState)(null),g=String(e.source??"").trim();return(0,c.useEffect)(()=>{let h=!1;if(!g)return;let v=`austere-mmd-${++G}`;return J().then(async d=>{let{svg:u,bindFunctions:D}=await d.render(v,Q(g));if(h||!r.current)return;r.current.innerHTML=u;let o=r.current.querySelector("svg");if(o){o.removeAttribute("height"),o.style.height="auto",o.style.maxWidth||(o.style.maxWidth="100%");let x=o.viewBox&&o.viewBox.baseVal?o.viewBox.baseVal.width:0;x>0&&(o.style.minWidth=`${Math.round(Math.min(x,x*.6))}px`)}X(r.current),D?.(r.current),n(null)}).catch(d=>{if(h)return;let u=String(d?.message||d).split(`
|
|
2
|
+
`).slice(0,4).join(" ").split(/\s*Expecting /)[0];n(u),(0,m.reportRuntimeError)({source:"mermaid",statementId:t,component:"Mermaid",message:u}),document.getElementById(`d${v}`)?.remove()}),()=>{h=!0}},[g,t]),(0,i.jsxs)("figure",{className:"austere-mermaid",children:[a?(0,i.jsxs)("div",{className:"austere-render-error",children:[(0,i.jsx)("strong",{children:"Diagram failed to render."})," ",a]}):null,(0,i.jsx)("div",{className:"austere-mermaid-svg",ref:r}),e.caption?(0,i.jsx)("figcaption",{children:e.caption}):null]})}var N=(0,m.austereComponent)({name:"Mermaid",group:"Content",props:f.z.object({source:f.z.string(),caption:f.z.string().optional()}),description:"Diagram from Mermaid source (flowchart, sequence, state, class, ER, gantt). source is a raw multi-line string. Keep node labels to a few words; clicked nodes reach the agent by label.",notes:["- Mermaid for sequences, state machines, ER, gantt and quick flowcharts."],renderer:Y,example:`requestPath = Mermaid("flowchart LR
|
|
3
|
+
client[Client] --> api[API]
|
|
4
|
+
api --> pg[(Postgres)]", "Request path")`});var V=`.austere-mermaid {
|
|
5
|
+
margin: 0;
|
|
6
|
+
width: 100%;
|
|
7
|
+
min-width: 0;
|
|
8
|
+
}
|
|
9
|
+
.austere-mermaid-svg {
|
|
10
|
+
display: flex;
|
|
11
|
+
justify-content: safe center;
|
|
12
|
+
overflow-x: auto;
|
|
13
|
+
padding: 8px 0;
|
|
14
|
+
}
|
|
15
|
+
.austere-mermaid-svg svg {
|
|
16
|
+
max-width: 100%;
|
|
17
|
+
height: auto;
|
|
18
|
+
}
|
|
19
|
+
.austere-mermaid figcaption {
|
|
20
|
+
margin-top: 8px;
|
|
21
|
+
text-align: center;
|
|
22
|
+
font-size: 12.5px;
|
|
23
|
+
color: var(--austere-muted);
|
|
24
|
+
}
|
|
25
|
+
`;var s={components:[N],css:V};var $=l(w());(0,$.registerPack)({name:"@austere-axi/pack-mermaid",version:"0.4.0",api:1,components:[].concat(s&&s.components?s.components:s),css:s&&s.css});})();
|
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
{
|
|
2
|
+
"format": 1,
|
|
3
|
+
"pack": "@austere-axi/pack-shadcn",
|
|
4
|
+
"version": "0.4.0",
|
|
5
|
+
"groups": [
|
|
6
|
+
{
|
|
7
|
+
"name": "Data",
|
|
8
|
+
"notes": []
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"name": "Content",
|
|
12
|
+
"notes": []
|
|
13
|
+
}
|
|
14
|
+
],
|
|
15
|
+
"components": [
|
|
16
|
+
{
|
|
17
|
+
"name": "Progress",
|
|
18
|
+
"group": "Data",
|
|
19
|
+
"signature": "Progress(value: number, label?: string, max?: number)",
|
|
20
|
+
"description": "Progress bar. value counts toward max (default 100); label names what is progressing. Shows a percentage.",
|
|
21
|
+
"tier": "extended",
|
|
22
|
+
"pack": "@austere-axi/pack-shadcn",
|
|
23
|
+
"examples": [
|
|
24
|
+
"migration = Progress(64, \"Rows migrated\")"
|
|
25
|
+
],
|
|
26
|
+
"slots": [
|
|
27
|
+
"Card.children",
|
|
28
|
+
"TabItem.content",
|
|
29
|
+
"AccordionItem.content"
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"name": "Avatar",
|
|
34
|
+
"group": "Data",
|
|
35
|
+
"signature": "Avatar(name: string, src?: string, size?: \"md\" | \"lg\")",
|
|
36
|
+
"description": "Round avatar for a person. Shows the initials of name; src is an optional https image URL.",
|
|
37
|
+
"tier": "extended",
|
|
38
|
+
"pack": "@austere-axi/pack-shadcn",
|
|
39
|
+
"examples": [
|
|
40
|
+
"owner = Avatar(\"Ada Lovelace\")"
|
|
41
|
+
],
|
|
42
|
+
"slots": [
|
|
43
|
+
"Card.children",
|
|
44
|
+
"TabItem.content",
|
|
45
|
+
"AccordionItem.content"
|
|
46
|
+
]
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"name": "AvatarGroup",
|
|
50
|
+
"group": "Data",
|
|
51
|
+
"signature": "AvatarGroup(avatars: Avatar[], max?: number)",
|
|
52
|
+
"description": "Overlapping Avatars, for reviewers or owners. max (default 4) shows the rest as +N.",
|
|
53
|
+
"tier": "extended",
|
|
54
|
+
"pack": "@austere-axi/pack-shadcn",
|
|
55
|
+
"examples": [
|
|
56
|
+
"team = AvatarGroup([ada, grace, linus], 2)\nada = Avatar(\"Ada Lovelace\")\ngrace = Avatar(\"Grace Hopper\")\nlinus = Avatar(\"Linus Torvalds\")"
|
|
57
|
+
],
|
|
58
|
+
"slots": [
|
|
59
|
+
"Card.children",
|
|
60
|
+
"TabItem.content",
|
|
61
|
+
"AccordionItem.content"
|
|
62
|
+
]
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"name": "Tooltip",
|
|
66
|
+
"group": "Content",
|
|
67
|
+
"signature": "Tooltip(text: string, tip: string)",
|
|
68
|
+
"description": "Inline text with a short hint on hover or focus (a term and its definition). Keep tip to one line.",
|
|
69
|
+
"tier": "extended",
|
|
70
|
+
"pack": "@austere-axi/pack-shadcn",
|
|
71
|
+
"examples": [
|
|
72
|
+
"term = Tooltip(\"idempotent\", \"Safe to run twice with the same result.\")"
|
|
73
|
+
],
|
|
74
|
+
"slots": [
|
|
75
|
+
"Card.children",
|
|
76
|
+
"TabItem.content",
|
|
77
|
+
"AccordionItem.content"
|
|
78
|
+
]
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"name": "HoverCard",
|
|
82
|
+
"group": "Content",
|
|
83
|
+
"signature": "HoverCard(text: string, title: string, body?: string)",
|
|
84
|
+
"description": "Inline text that shows a small card (title and a line or two of body) on hover or focus, e.g. a person or a service.",
|
|
85
|
+
"tier": "extended",
|
|
86
|
+
"pack": "@austere-axi/pack-shadcn",
|
|
87
|
+
"examples": [
|
|
88
|
+
"svc = HoverCard(\"billing-api\", \"billing-api\", \"Owns invoices and refunds. On call: payments team.\")"
|
|
89
|
+
],
|
|
90
|
+
"slots": [
|
|
91
|
+
"Card.children",
|
|
92
|
+
"TabItem.content",
|
|
93
|
+
"AccordionItem.content"
|
|
94
|
+
]
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"name": "Breadcrumb",
|
|
98
|
+
"group": "Content",
|
|
99
|
+
"signature": "Breadcrumb(items: BreadcrumbItem[])",
|
|
100
|
+
"description": "Path trail such as Repo / Package / File, from BreadcrumbItems. Each item is a click target.",
|
|
101
|
+
"tier": "extended",
|
|
102
|
+
"pack": "@austere-axi/pack-shadcn",
|
|
103
|
+
"examples": [
|
|
104
|
+
"trail = Breadcrumb([repo, pkg, file])\nrepo = BreadcrumbItem(\"austere-axi\")\npkg = BreadcrumbItem(\"packs\")\nfile = BreadcrumbItem(\"shadcn\")"
|
|
105
|
+
],
|
|
106
|
+
"slots": [
|
|
107
|
+
"Card.children",
|
|
108
|
+
"TabItem.content",
|
|
109
|
+
"AccordionItem.content"
|
|
110
|
+
]
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"name": "BreadcrumbItem",
|
|
114
|
+
"group": "Content",
|
|
115
|
+
"signature": "BreadcrumbItem(label: string, href?: string)",
|
|
116
|
+
"description": "One step of a Breadcrumb. href is optional; the last item is the current page.",
|
|
117
|
+
"tier": "extended",
|
|
118
|
+
"pack": "@austere-axi/pack-shadcn",
|
|
119
|
+
"examples": [],
|
|
120
|
+
"slots": null
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"name": "Kbd",
|
|
124
|
+
"group": "Content",
|
|
125
|
+
"signature": "Kbd(keys: string)",
|
|
126
|
+
"description": "Keyboard shortcut. keys joins keys with \"+\", e.g. \"Ctrl+K\"; each key is drawn as a key cap.",
|
|
127
|
+
"tier": "extended",
|
|
128
|
+
"pack": "@austere-axi/pack-shadcn",
|
|
129
|
+
"examples": [
|
|
130
|
+
"shortcut = Kbd(\"Ctrl+Shift+P\")"
|
|
131
|
+
],
|
|
132
|
+
"slots": [
|
|
133
|
+
"Card.children",
|
|
134
|
+
"TabItem.content",
|
|
135
|
+
"AccordionItem.content"
|
|
136
|
+
]
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"name": "Skeleton",
|
|
140
|
+
"group": "Content",
|
|
141
|
+
"signature": "Skeleton(lines?: number, shape?: \"lines\" | \"avatar\")",
|
|
142
|
+
"description": "Grey placeholder block for content not yet written or loaded (default 3 lines). shape avatar adds a round head.",
|
|
143
|
+
"tier": "extended",
|
|
144
|
+
"pack": "@austere-axi/pack-shadcn",
|
|
145
|
+
"examples": [
|
|
146
|
+
"pending = Skeleton(3, \"avatar\")"
|
|
147
|
+
],
|
|
148
|
+
"slots": [
|
|
149
|
+
"Card.children",
|
|
150
|
+
"TabItem.content",
|
|
151
|
+
"AccordionItem.content"
|
|
152
|
+
]
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"name": "Calendar",
|
|
156
|
+
"group": "Data",
|
|
157
|
+
"signature": "Calendar(month: string, highlights?: string[])",
|
|
158
|
+
"description": "Read-only month grid (not a date picker). month is \"YYYY-MM\"; highlights lists \"YYYY-MM-DD\" or \"YYYY-MM-DD label\" entries to mark, e.g. a freeze or a release. Marked days are click targets.",
|
|
159
|
+
"tier": "extended",
|
|
160
|
+
"pack": "@austere-axi/pack-shadcn",
|
|
161
|
+
"examples": [
|
|
162
|
+
"window = Calendar(\"2026-11\", [\"2026-11-04 Code freeze\", \"2026-11-12 Release\", \"2026-11-13\"])"
|
|
163
|
+
],
|
|
164
|
+
"slots": [
|
|
165
|
+
"Card.children",
|
|
166
|
+
"TabItem.content",
|
|
167
|
+
"AccordionItem.content"
|
|
168
|
+
]
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"name": "Timeline",
|
|
172
|
+
"group": "Content",
|
|
173
|
+
"signature": "Timeline(items: TimelineItem[])",
|
|
174
|
+
"description": "Vertical history or schedule of TimelineItems, oldest first. Each item is a click target.",
|
|
175
|
+
"tier": "extended",
|
|
176
|
+
"pack": "@austere-axi/pack-shadcn",
|
|
177
|
+
"examples": [
|
|
178
|
+
"history = Timeline([found, fixed, rollout])\nfound = TimelineItem(\"Bug found\", \"Oct 28\", \"Retries double-charge on timeout.\")\nfixed = TimelineItem(\"Fix merged\", \"Oct 29\", \"Idempotency key added.\", \"current\")\nrollout = TimelineItem(\"Rollout\", \"Nov 3\", \"\", \"upcoming\")"
|
|
179
|
+
],
|
|
180
|
+
"slots": [
|
|
181
|
+
"Card.children",
|
|
182
|
+
"TabItem.content",
|
|
183
|
+
"AccordionItem.content"
|
|
184
|
+
]
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
"name": "TimelineItem",
|
|
188
|
+
"group": "Content",
|
|
189
|
+
"signature": "TimelineItem(title: string, date?: string, detail?: string, state?: \"done\" | \"current\" | \"upcoming\")",
|
|
190
|
+
"description": "One event in a Timeline. state: done (default), current or upcoming.",
|
|
191
|
+
"tier": "extended",
|
|
192
|
+
"pack": "@austere-axi/pack-shadcn",
|
|
193
|
+
"examples": [],
|
|
194
|
+
"slots": null
|
|
195
|
+
}
|
|
196
|
+
],
|
|
197
|
+
"api": 1,
|
|
198
|
+
"integrity": "sha384-CIYnYWZ/pwcwzMxA737O2dQSLE8ta7pk7PH4aMDoNOvM7KFwYz3n7ETeb/91s2pE",
|
|
199
|
+
"size": 16313,
|
|
200
|
+
"css": true,
|
|
201
|
+
"defs": {
|
|
202
|
+
"Progress": {
|
|
203
|
+
"type": "object",
|
|
204
|
+
"properties": {
|
|
205
|
+
"value": {
|
|
206
|
+
"type": "number"
|
|
207
|
+
},
|
|
208
|
+
"label": {
|
|
209
|
+
"type": "string"
|
|
210
|
+
},
|
|
211
|
+
"max": {
|
|
212
|
+
"type": "number"
|
|
213
|
+
}
|
|
214
|
+
},
|
|
215
|
+
"required": [
|
|
216
|
+
"value"
|
|
217
|
+
],
|
|
218
|
+
"additionalProperties": false,
|
|
219
|
+
"description": "Progress bar. value counts toward max (default 100); label names what is progressing. Shows a percentage."
|
|
220
|
+
},
|
|
221
|
+
"Avatar": {
|
|
222
|
+
"type": "object",
|
|
223
|
+
"properties": {
|
|
224
|
+
"name": {
|
|
225
|
+
"type": "string"
|
|
226
|
+
},
|
|
227
|
+
"src": {
|
|
228
|
+
"type": "string"
|
|
229
|
+
},
|
|
230
|
+
"size": {
|
|
231
|
+
"type": "string",
|
|
232
|
+
"enum": [
|
|
233
|
+
"md",
|
|
234
|
+
"lg"
|
|
235
|
+
]
|
|
236
|
+
}
|
|
237
|
+
},
|
|
238
|
+
"required": [
|
|
239
|
+
"name"
|
|
240
|
+
],
|
|
241
|
+
"additionalProperties": false,
|
|
242
|
+
"description": "Round avatar for a person. Shows the initials of name; src is an optional https image URL."
|
|
243
|
+
},
|
|
244
|
+
"AvatarGroup": {
|
|
245
|
+
"type": "object",
|
|
246
|
+
"properties": {
|
|
247
|
+
"avatars": {
|
|
248
|
+
"type": "array",
|
|
249
|
+
"items": {
|
|
250
|
+
"$ref": "#/$defs/Avatar"
|
|
251
|
+
}
|
|
252
|
+
},
|
|
253
|
+
"max": {
|
|
254
|
+
"type": "integer",
|
|
255
|
+
"minimum": -9007199254740991,
|
|
256
|
+
"maximum": 9007199254740991
|
|
257
|
+
}
|
|
258
|
+
},
|
|
259
|
+
"required": [
|
|
260
|
+
"avatars"
|
|
261
|
+
],
|
|
262
|
+
"additionalProperties": false,
|
|
263
|
+
"description": "Overlapping Avatars, for reviewers or owners. max (default 4) shows the rest as +N."
|
|
264
|
+
},
|
|
265
|
+
"Tooltip": {
|
|
266
|
+
"type": "object",
|
|
267
|
+
"properties": {
|
|
268
|
+
"text": {
|
|
269
|
+
"type": "string"
|
|
270
|
+
},
|
|
271
|
+
"tip": {
|
|
272
|
+
"type": "string"
|
|
273
|
+
}
|
|
274
|
+
},
|
|
275
|
+
"required": [
|
|
276
|
+
"text",
|
|
277
|
+
"tip"
|
|
278
|
+
],
|
|
279
|
+
"additionalProperties": false,
|
|
280
|
+
"description": "Inline text with a short hint on hover or focus (a term and its definition). Keep tip to one line."
|
|
281
|
+
},
|
|
282
|
+
"HoverCard": {
|
|
283
|
+
"type": "object",
|
|
284
|
+
"properties": {
|
|
285
|
+
"text": {
|
|
286
|
+
"type": "string"
|
|
287
|
+
},
|
|
288
|
+
"title": {
|
|
289
|
+
"type": "string"
|
|
290
|
+
},
|
|
291
|
+
"body": {
|
|
292
|
+
"type": "string"
|
|
293
|
+
}
|
|
294
|
+
},
|
|
295
|
+
"required": [
|
|
296
|
+
"text",
|
|
297
|
+
"title"
|
|
298
|
+
],
|
|
299
|
+
"additionalProperties": false,
|
|
300
|
+
"description": "Inline text that shows a small card (title and a line or two of body) on hover or focus, e.g. a person or a service."
|
|
301
|
+
},
|
|
302
|
+
"Breadcrumb": {
|
|
303
|
+
"type": "object",
|
|
304
|
+
"properties": {
|
|
305
|
+
"items": {
|
|
306
|
+
"type": "array",
|
|
307
|
+
"items": {
|
|
308
|
+
"$ref": "#/$defs/BreadcrumbItem"
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
},
|
|
312
|
+
"required": [
|
|
313
|
+
"items"
|
|
314
|
+
],
|
|
315
|
+
"additionalProperties": false,
|
|
316
|
+
"description": "Path trail such as Repo / Package / File, from BreadcrumbItems. Each item is a click target."
|
|
317
|
+
},
|
|
318
|
+
"BreadcrumbItem": {
|
|
319
|
+
"type": "object",
|
|
320
|
+
"properties": {
|
|
321
|
+
"label": {
|
|
322
|
+
"type": "string"
|
|
323
|
+
},
|
|
324
|
+
"href": {
|
|
325
|
+
"type": "string"
|
|
326
|
+
}
|
|
327
|
+
},
|
|
328
|
+
"required": [
|
|
329
|
+
"label"
|
|
330
|
+
],
|
|
331
|
+
"additionalProperties": false,
|
|
332
|
+
"description": "One step of a Breadcrumb. href is optional; the last item is the current page."
|
|
333
|
+
},
|
|
334
|
+
"Kbd": {
|
|
335
|
+
"type": "object",
|
|
336
|
+
"properties": {
|
|
337
|
+
"keys": {
|
|
338
|
+
"type": "string"
|
|
339
|
+
}
|
|
340
|
+
},
|
|
341
|
+
"required": [
|
|
342
|
+
"keys"
|
|
343
|
+
],
|
|
344
|
+
"additionalProperties": false,
|
|
345
|
+
"description": "Keyboard shortcut. keys joins keys with \"+\", e.g. \"Ctrl+K\"; each key is drawn as a key cap."
|
|
346
|
+
},
|
|
347
|
+
"Skeleton": {
|
|
348
|
+
"type": "object",
|
|
349
|
+
"properties": {
|
|
350
|
+
"lines": {
|
|
351
|
+
"type": "integer",
|
|
352
|
+
"minimum": -9007199254740991,
|
|
353
|
+
"maximum": 9007199254740991
|
|
354
|
+
},
|
|
355
|
+
"shape": {
|
|
356
|
+
"type": "string",
|
|
357
|
+
"enum": [
|
|
358
|
+
"lines",
|
|
359
|
+
"avatar"
|
|
360
|
+
]
|
|
361
|
+
}
|
|
362
|
+
},
|
|
363
|
+
"additionalProperties": false,
|
|
364
|
+
"description": "Grey placeholder block for content not yet written or loaded (default 3 lines). shape avatar adds a round head."
|
|
365
|
+
},
|
|
366
|
+
"Calendar": {
|
|
367
|
+
"type": "object",
|
|
368
|
+
"properties": {
|
|
369
|
+
"month": {
|
|
370
|
+
"type": "string"
|
|
371
|
+
},
|
|
372
|
+
"highlights": {
|
|
373
|
+
"type": "array",
|
|
374
|
+
"items": {
|
|
375
|
+
"type": "string"
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
},
|
|
379
|
+
"required": [
|
|
380
|
+
"month"
|
|
381
|
+
],
|
|
382
|
+
"additionalProperties": false,
|
|
383
|
+
"description": "Read-only month grid (not a date picker). month is \"YYYY-MM\"; highlights lists \"YYYY-MM-DD\" or \"YYYY-MM-DD label\" entries to mark, e.g. a freeze or a release. Marked days are click targets."
|
|
384
|
+
},
|
|
385
|
+
"Timeline": {
|
|
386
|
+
"type": "object",
|
|
387
|
+
"properties": {
|
|
388
|
+
"items": {
|
|
389
|
+
"type": "array",
|
|
390
|
+
"items": {
|
|
391
|
+
"$ref": "#/$defs/TimelineItem"
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
},
|
|
395
|
+
"required": [
|
|
396
|
+
"items"
|
|
397
|
+
],
|
|
398
|
+
"additionalProperties": false,
|
|
399
|
+
"description": "Vertical history or schedule of TimelineItems, oldest first. Each item is a click target."
|
|
400
|
+
},
|
|
401
|
+
"TimelineItem": {
|
|
402
|
+
"type": "object",
|
|
403
|
+
"properties": {
|
|
404
|
+
"title": {
|
|
405
|
+
"type": "string"
|
|
406
|
+
},
|
|
407
|
+
"date": {
|
|
408
|
+
"type": "string"
|
|
409
|
+
},
|
|
410
|
+
"detail": {
|
|
411
|
+
"type": "string"
|
|
412
|
+
},
|
|
413
|
+
"state": {
|
|
414
|
+
"type": "string",
|
|
415
|
+
"enum": [
|
|
416
|
+
"done",
|
|
417
|
+
"current",
|
|
418
|
+
"upcoming"
|
|
419
|
+
]
|
|
420
|
+
}
|
|
421
|
+
},
|
|
422
|
+
"required": [
|
|
423
|
+
"title"
|
|
424
|
+
],
|
|
425
|
+
"additionalProperties": false,
|
|
426
|
+
"description": "One event in a Timeline. state: done (default), current or upcoming."
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
(()=>{var fe=Object.create;var U=Object.defineProperty;var xe=Object.getOwnPropertyDescriptor;var be=Object.getOwnPropertyNames;var ve=Object.getPrototypeOf,we=Object.prototype.hasOwnProperty;var A=(e,a)=>()=>{try{return a||e((a={exports:{}}).exports,a),a.exports}catch(t){throw a=0,t}};var ye=(e,a,t,o)=>{if(a&&typeof a=="object"||typeof a=="function")for(let s of be(a))!we.call(e,s)&&s!==t&&U(e,s,{get:()=>a[s],enumerable:!(o=xe(a,s))||o.enumerable});return e};var r=(e,a,t)=>(t=e!=null?fe(ve(e)):{},ye(a||!e||!e.__esModule?U(t,"default",{value:e,enumerable:!0}):t,e));var c=A((Ke,O)=>{var G=globalThis.__austereHost;if(!G)throw new Error("this austere-axi component pack needs the austere-axi runtime on the page");O.exports=G.React});var u=A((Ue,L)=>{var F=globalThis.__austereHost;if(!F)throw new Error("this austere-axi component pack needs the austere-axi runtime on the page");L.exports=F.zod});var l=A((Ge,q)=>{var W=globalThis.__austereHost;if(!W)throw new Error("this austere-axi component pack needs the austere-axi runtime on the page");q.exports=W.pack});var i=A((Oe,J)=>{var Z=globalThis.__austereHost;if(!Z)throw new Error("this austere-axi component pack needs the austere-axi runtime on the page");J.exports=Z.jsxRuntime});var Fe=r(c()),C=r(u()),Q=r(l()),f=r(i());function ke({props:e}){let a=Number(e.max)>0?Number(e.max):100,t=Math.min(a,Math.max(0,Number(e.value)||0)),o=Math.round(t/a*100);return(0,f.jsxs)("div",{className:"sh-progress",children:[(0,f.jsxs)("div",{className:"sh-progress-head",children:[(0,f.jsx)("span",{children:e.label}),(0,f.jsxs)("span",{className:"sh-muted",children:[o,"%"]})]}),(0,f.jsx)("div",{className:"sh-progress-bar",role:"progressbar","aria-valuemin":0,"aria-valuemax":a,"aria-valuenow":t,children:(0,f.jsx)("div",{className:"sh-progress-fill",style:{width:`${o}%`}})})]})}var X=(0,Q.austereComponent)({name:"Progress",group:"Data",tier:"extended",props:C.z.object({value:C.z.number(),label:C.z.string().optional(),max:C.z.number().optional()}),description:"Progress bar. value counts toward max (default 100); label names what is progressing. Shows a percentage.",renderer:ke,example:'migration = Progress(64, "Rows migrated")'});var qe=r(c()),x=r(u()),B=r(l()),h=r(i()),Ne=e=>String(e||"?").trim().split(/\s+/).slice(0,2).map(a=>a[0]).join("").toUpperCase()||"?",Ce=e=>typeof e=="string"&&/^(https:\/\/|data:image\/)/i.test(e)?e:"";function ee({name:e,src:a,size:t}){let o=Ce(a);return(0,h.jsx)("span",{className:`sh-avatar sh-avatar-${t==="lg"?"lg":"md"}`,title:e,"data-austere-part":e||void 0,children:o?(0,h.jsx)("img",{src:o,alt:e||""}):(0,h.jsx)("span",{"aria-hidden":"true",children:Ne(e)})})}function Te({props:e}){return(0,h.jsx)(ee,{name:e.name,src:e.src,size:e.size})}var M=(0,B.austereComponent)({name:"Avatar",group:"Data",tier:"extended",props:x.z.object({name:x.z.string(),src:x.z.string().optional(),size:x.z.enum(["md","lg"]).optional()}),description:"Round avatar for a person. Shows the initials of name; src is an optional https image URL.",renderer:Te,example:'owner = Avatar("Ada Lovelace")'});function Ae({props:e}){let a=(Array.isArray(e.avatars)?e.avatars:[]).filter(n=>n&&n.props),t=Number.isInteger(e.max)&&e.max>0?e.max:4,o=a.slice(0,t),s=a.length-o.length;return(0,h.jsxs)("span",{className:"sh-avatar-group",children:[o.map((n,I)=>(0,h.jsx)(ee,{name:n.props.name,src:n.props.src,size:n.props.size},I)),s>0?(0,h.jsxs)("span",{className:"sh-avatar sh-avatar-md sh-avatar-more",children:["+",s]}):null]})}var ae=(0,B.austereComponent)({name:"AvatarGroup",group:"Data",tier:"extended",props:x.z.object({avatars:x.z.array(M.definition.ref),max:x.z.number().int().optional()}),description:"Overlapping Avatars, for reviewers or owners. max (default 4) shows the rest as +N.",renderer:Ae,example:`team = AvatarGroup([ada, grace, linus], 2)
|
|
2
|
+
ada = Avatar("Ada Lovelace")
|
|
3
|
+
grace = Avatar("Grace Hopper")
|
|
4
|
+
linus = Avatar("Linus Torvalds")`});var Qe=r(c()),b=r(u()),D=r(l()),d=r(i());function ze({props:e}){return(0,d.jsxs)("span",{className:"sh-pop sh-tooltip",tabIndex:0,children:[(0,d.jsx)("span",{className:"sh-pop-trigger",children:e.text}),(0,d.jsx)("span",{className:"sh-pop-card",role:"tooltip",children:e.tip})]})}var re=(0,D.austereComponent)({name:"Tooltip",group:"Content",tier:"extended",props:b.z.object({text:b.z.string(),tip:b.z.string()}),description:"Inline text with a short hint on hover or focus (a term and its definition). Keep tip to one line.",renderer:ze,example:'term = Tooltip("idempotent", "Safe to run twice with the same result.")'});function Ie({props:e}){return(0,d.jsxs)("span",{className:"sh-pop sh-hovercard",tabIndex:0,children:[(0,d.jsx)("span",{className:"sh-pop-trigger",children:e.text}),(0,d.jsxs)("span",{className:"sh-pop-card sh-card",role:"tooltip",children:[(0,d.jsx)("strong",{children:e.title}),e.body?(0,d.jsx)("span",{className:"sh-muted",children:e.body}):null]})]})}var te=(0,D.austereComponent)({name:"HoverCard",group:"Content",tier:"extended",props:b.z.object({text:b.z.string(),title:b.z.string(),body:b.z.string().optional()}),description:"Inline text that shows a small card (title and a line or two of body) on hover or focus, e.g. a person or a service.",renderer:Ie,example:'svc = HoverCard("billing-api", "billing-api", "Owns invoices and refunds. On call: payments team.")'});var aa=r(c()),k=r(u()),Y=r(l()),v=r(i()),Se=()=>null,Re=e=>typeof e=="string"&&/^(https?:\/\/|\/|#)/i.test(e)?e:"";function Be({props:e}){let a=(Array.isArray(e.items)?e.items:[]).filter(t=>t&&t.props);return(0,v.jsx)("nav",{className:"sh-breadcrumb","aria-label":"Breadcrumb",children:(0,v.jsx)("ol",{children:a.map((t,o)=>{let s=o===a.length-1,n=Re(t.props.href);return(0,v.jsxs)("li",{"data-austere-part":t.props.label,children:[n&&!s?(0,v.jsx)("a",{href:n,children:t.props.label}):(0,v.jsx)("span",{"aria-current":s?"page":void 0,children:t.props.label}),s?null:(0,v.jsx)("span",{className:"sh-crumb-sep","aria-hidden":"true",children:"/"})]},o)})})})}var H=(0,Y.austereComponent)({name:"BreadcrumbItem",group:"Content",tier:"extended",props:k.z.object({label:k.z.string(),href:k.z.string().optional()}),description:"One step of a Breadcrumb. href is optional; the last item is the current page.",renderer:Se,slots:null,tagged:!1}),oe=(0,Y.austereComponent)({name:"Breadcrumb",group:"Content",tier:"extended",props:k.z.object({items:k.z.array(H.definition.ref)}),description:"Path trail such as Repo / Package / File, from BreadcrumbItems. Each item is a click target.",renderer:Be,example:`trail = Breadcrumb([repo, pkg, file])
|
|
5
|
+
repo = BreadcrumbItem("austere-axi")
|
|
6
|
+
pkg = BreadcrumbItem("packs")
|
|
7
|
+
file = BreadcrumbItem("shadcn")`});var oa=r(c()),V=r(u()),se=r(l()),j=r(i());function Me({props:e}){let a=String(e.keys??"").split("+").map(t=>t.trim()).filter(Boolean);return(0,j.jsx)("span",{className:"sh-kbd-group",children:a.map((t,o)=>(0,j.jsx)("kbd",{className:"sh-kbd",children:t},o))})}var ne=(0,se.austereComponent)({name:"Kbd",group:"Content",tier:"extended",props:V.z.object({keys:V.z.string()}),description:'Keyboard shortcut. keys joins keys with "+", e.g. "Ctrl+K"; each key is drawn as a key cap.',renderer:Me,example:'shortcut = Kbd("Ctrl+Shift+P")'});var ia=r(c()),z=r(u()),ie=r(l()),N=r(i());function De({props:e}){let a=Math.min(12,Math.max(1,Number.isInteger(e.lines)?e.lines:3));return(0,N.jsxs)("div",{className:"sh-skeleton","aria-hidden":"true",children:[e.shape==="avatar"?(0,N.jsx)("span",{className:"sh-skel sh-skel-avatar"}):null,(0,N.jsx)("div",{className:"sh-skeleton-lines",children:Array.from({length:a},(t,o)=>(0,N.jsx)("span",{className:"sh-skel",style:{width:o===a-1&&a>1?"60%":"100%"}},o))})]})}var pe=(0,ie.austereComponent)({name:"Skeleton",group:"Content",tier:"extended",props:z.z.object({lines:z.z.number().int().optional(),shape:z.z.enum(["lines","avatar"]).optional()}),description:"Grey placeholder block for content not yet written or loaded (default 3 lines). shape avatar adds a round head.",renderer:De,example:'pending = Skeleton(3, "avatar")'});var da=r(c()),T=r(u()),le=r(l()),g=r(i()),Ye=/^(\d{4})-(\d{2})-(\d{2})(?:\s+(.*))?$/,He=["Mo","Tu","We","Th","Fr","Sa","Su"];function Ve(e,a,t){let o=new Map;for(let s of Array.isArray(t)?t:[]){let n=Ye.exec(String(s).trim());n&&Number(n[1])===e&&Number(n[2])===a&&o.set(Number(n[3]),(n[4]||"").trim())}return o}function je({props:e}){let a=/^(\d{4})-(\d{2})/.exec(String(e.month??"")),t=a?Number(a[1]):NaN,o=a?Number(a[2]):NaN;if(!(o>=1&&o<=12))return(0,g.jsx)("div",{className:"austere-render-error",children:'Calendar needs a month like "2026-11".'});let s=new Date(Date.UTC(t,o-1,1)),n=new Date(Date.UTC(t,o,0)).getUTCDate(),I=(s.getUTCDay()+6)%7,$=Ve(t,o,e.highlights),E=s.toLocaleString("en-US",{month:"long",year:"numeric",timeZone:"UTC"}),ge=[...Array(I).fill(null),...Array.from({length:n},(p,S)=>S+1)];return(0,g.jsxs)("div",{className:"sh-calendar",children:[(0,g.jsx)("div",{className:"sh-calendar-title",children:E}),(0,g.jsxs)("div",{className:"sh-calendar-grid",children:[He.map(p=>(0,g.jsx)("span",{className:"sh-calendar-dow",children:p},p)),ge.map((p,S)=>{if(p===null)return(0,g.jsx)("span",{},`b${S}`);let K=$.has(p),R=$.get(p);return(0,g.jsx)("span",{className:`sh-calendar-day${K?" is-marked":""}`,title:R||void 0,"data-austere-part":K?`${E.split(" ")[0]} ${p}${R?`: ${R}`:""}`:void 0,children:p},p)})]})]})}var de=(0,le.austereComponent)({name:"Calendar",group:"Data",tier:"extended",props:T.z.object({month:T.z.string(),highlights:T.z.array(T.z.string()).optional()}),description:'Read-only month grid (not a date picker). month is "YYYY-MM"; highlights lists "YYYY-MM-DD" or "YYYY-MM-DD label" entries to mark, e.g. a freeze or a release. Marked days are click targets.',renderer:je,example:'window = Calendar("2026-11", ["2026-11-04 Code freeze", "2026-11-12 Release", "2026-11-13"])'});var ua=r(c()),w=r(u()),P=r(l()),m=r(i()),Pe=()=>null,me=["done","current","upcoming"];function _e({props:e}){let a=(Array.isArray(e.items)?e.items:[]).filter(t=>t&&t.props);return(0,m.jsx)("ol",{className:"sh-timeline",children:a.map((t,o)=>{let s=t.props,n=me.includes(s.state)?s.state:"done";return(0,m.jsxs)("li",{className:`sh-timeline-item is-${n}`,"data-austere-part":s.title,children:[(0,m.jsx)("span",{className:"sh-timeline-dot","aria-hidden":"true"}),(0,m.jsxs)("div",{className:"sh-timeline-body",children:[(0,m.jsxs)("div",{className:"sh-timeline-head",children:[(0,m.jsx)("strong",{children:s.title}),s.date?(0,m.jsx)("span",{className:"sh-muted",children:s.date}):null]}),s.detail?(0,m.jsx)("div",{className:"sh-muted",children:s.detail}):null]})]},o)})})}var _=(0,P.austereComponent)({name:"TimelineItem",group:"Content",tier:"extended",props:w.z.object({title:w.z.string(),date:w.z.string().optional(),detail:w.z.string().optional(),state:w.z.enum(me).optional()}),description:"One event in a Timeline. state: done (default), current or upcoming.",renderer:Pe,slots:null,tagged:!1}),ce=(0,P.austereComponent)({name:"Timeline",group:"Content",tier:"extended",props:w.z.object({items:w.z.array(_.definition.ref)}),description:"Vertical history or schedule of TimelineItems, oldest first. Each item is a click target.",renderer:_e,example:`history = Timeline([found, fixed, rollout])
|
|
8
|
+
found = TimelineItem("Bug found", "Oct 28", "Retries double-charge on timeout.")
|
|
9
|
+
fixed = TimelineItem("Fix merged", "Oct 29", "Idempotency key added.", "current")
|
|
10
|
+
rollout = TimelineItem("Rollout", "Nov 3", "", "upcoming")`});var ue=`.sh-muted { color: var(--austere-muted); }
|
|
11
|
+
|
|
12
|
+
/* Progress */
|
|
13
|
+
.sh-progress { width: 100%; }
|
|
14
|
+
.sh-progress-head { display: flex; justify-content: space-between; gap: 12px; font-size: 13px; margin-bottom: 6px; }
|
|
15
|
+
.sh-progress-bar { height: 8px; border-radius: 999px; background: var(--austere-surface-2); overflow: hidden; }
|
|
16
|
+
.sh-progress-fill { height: 100%; border-radius: 999px; background: var(--austere-accent); }
|
|
17
|
+
|
|
18
|
+
/* Avatar */
|
|
19
|
+
.sh-avatar { display: inline-flex; align-items: center; justify-content: center; flex: none; overflow: hidden; border-radius: 50%; background: var(--austere-surface-2); border: 1px solid var(--austere-line); color: var(--austere-text); font-size: 12px; font-weight: 600; }
|
|
20
|
+
.sh-avatar-md { width: 32px; height: 32px; }
|
|
21
|
+
.sh-avatar-lg { width: 44px; height: 44px; font-size: 15px; }
|
|
22
|
+
.sh-avatar img { width: 100%; height: 100%; object-fit: cover; }
|
|
23
|
+
.sh-avatar-group { display: inline-flex; }
|
|
24
|
+
.sh-avatar-group .sh-avatar + .sh-avatar { margin-left: -6px; }
|
|
25
|
+
.sh-avatar-group .sh-avatar { box-shadow: 0 0 0 2px var(--austere-surface); }
|
|
26
|
+
.sh-avatar-more { color: var(--austere-muted); }
|
|
27
|
+
|
|
28
|
+
/* Tooltip and HoverCard */
|
|
29
|
+
.sh-pop { position: relative; display: inline-block; outline: none; }
|
|
30
|
+
.sh-pop-trigger { border-bottom: 1px dotted var(--austere-muted); cursor: help; }
|
|
31
|
+
.sh-pop-card { position: absolute; left: 0; bottom: calc(100% + 6px); z-index: 20; display: none; width: max-content; max-width: min(280px, 80vw); padding: 6px 10px; border-radius: 6px; border: 1px solid var(--austere-line); background: var(--austere-surface-2); color: var(--austere-text); font-size: 12.5px; line-height: 1.4; box-shadow: 0 6px 20px rgba(0, 0, 0, 0.4); white-space: normal; overflow-wrap: anywhere; }
|
|
32
|
+
.sh-pop:hover .sh-pop-card, .sh-pop:focus .sh-pop-card { display: block; }
|
|
33
|
+
.sh-pop:hover .sh-pop-card.sh-card, .sh-pop:focus .sh-pop-card.sh-card { display: flex; flex-direction: column; gap: 4px; padding: 10px 12px; }
|
|
34
|
+
|
|
35
|
+
/* Breadcrumb */
|
|
36
|
+
.sh-breadcrumb ol { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin: 0; padding: 0; list-style: none; font-size: 13px; color: var(--austere-muted); }
|
|
37
|
+
.sh-breadcrumb li { display: inline-flex; gap: 6px; overflow-wrap: anywhere; }
|
|
38
|
+
.sh-breadcrumb a { color: inherit; text-decoration: none; }
|
|
39
|
+
.sh-breadcrumb a:hover { color: var(--austere-text); }
|
|
40
|
+
.sh-breadcrumb [aria-current] { color: var(--austere-text); }
|
|
41
|
+
|
|
42
|
+
/* Kbd */
|
|
43
|
+
.sh-kbd-group { display: inline-flex; gap: 4px; }
|
|
44
|
+
.sh-kbd { padding: 1px 6px; border-radius: 5px; border: 1px solid var(--austere-line); border-bottom-width: 2px; background: var(--austere-surface-2); color: var(--austere-text); font: 600 11.5px ui-monospace, SFMono-Regular, Menlo, monospace; }
|
|
45
|
+
|
|
46
|
+
/* Skeleton */
|
|
47
|
+
.sh-skeleton { display: flex; align-items: center; gap: 12px; width: 100%; }
|
|
48
|
+
.sh-skeleton-lines { display: flex; flex-direction: column; gap: 8px; flex: 1; min-width: 0; }
|
|
49
|
+
.sh-skel { display: block; height: 12px; border-radius: 6px; background: var(--austere-surface-2); }
|
|
50
|
+
.sh-skel-avatar { width: 40px; height: 40px; border-radius: 50%; flex: none; }
|
|
51
|
+
|
|
52
|
+
/* Calendar */
|
|
53
|
+
.sh-calendar { display: inline-block; max-width: 100%; padding: 12px; border: 1px solid var(--austere-line); border-radius: 10px; background: var(--austere-surface); }
|
|
54
|
+
.sh-calendar-title { margin-bottom: 8px; font-weight: 600; font-size: 14px; }
|
|
55
|
+
.sh-calendar-grid { display: grid; grid-template-columns: repeat(7, 34px); gap: 2px; text-align: center; font-size: 12.5px; }
|
|
56
|
+
.sh-calendar-dow { color: var(--austere-muted); font-size: 11px; padding-bottom: 4px; }
|
|
57
|
+
.sh-calendar-day { line-height: 32px; border-radius: 6px; color: var(--austere-muted); }
|
|
58
|
+
.sh-calendar-day.is-marked { background: var(--austere-accent-bg); color: var(--austere-accent); border: 1px solid var(--austere-accent); font-weight: 600; line-height: 30px; }
|
|
59
|
+
|
|
60
|
+
/* Timeline */
|
|
61
|
+
.sh-timeline { list-style: none; margin: 0; padding: 0; }
|
|
62
|
+
.sh-timeline-item { position: relative; display: flex; gap: 12px; padding-bottom: 16px; }
|
|
63
|
+
.sh-timeline-item:not(:last-child)::before { content: ""; position: absolute; left: 5px; top: 14px; bottom: 0; width: 1px; background: var(--austere-line); }
|
|
64
|
+
.sh-timeline-dot { flex: none; width: 11px; height: 11px; margin-top: 4px; border-radius: 50%; background: var(--austere-queued); }
|
|
65
|
+
.sh-timeline-item.is-current .sh-timeline-dot { background: var(--austere-accent); box-shadow: 0 0 0 3px var(--austere-accent-bg); }
|
|
66
|
+
.sh-timeline-item.is-upcoming .sh-timeline-dot { background: transparent; border: 1px solid var(--austere-muted); }
|
|
67
|
+
.sh-timeline-body { min-width: 0; font-size: 13.5px; overflow-wrap: anywhere; }
|
|
68
|
+
.sh-timeline-head { display: flex; flex-wrap: wrap; gap: 4px 12px; }
|
|
69
|
+
`;var y={components:[X,M,ae,re,te,oe,H,ne,pe,de,ce,_],css:ue};var he=r(l());(0,he.registerPack)({name:"@austere-axi/pack-shadcn",version:"0.4.0",api:1,components:[].concat(y&&y.components?y.components:y),css:y&&y.css});})();
|