agentcss 0.0.0-stage → 0.11.2

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.
Files changed (274) hide show
  1. package/01-tokens/README.md +236 -0
  2. package/01-tokens/behavior/dismissable.js +132 -0
  3. package/01-tokens/behavior/emit.js +76 -0
  4. package/01-tokens/behavior/focus-return.js +81 -0
  5. package/01-tokens/behavior/roving.js +152 -0
  6. package/01-tokens/behavior/typeahead.js +124 -0
  7. package/01-tokens/focus-ring-demo.html +133 -0
  8. package/01-tokens/focus-ring.css +102 -0
  9. package/01-tokens/page.css +244 -0
  10. package/01-tokens/polyfill.js +116 -0
  11. package/01-tokens/responsive-demo.html +171 -0
  12. package/01-tokens/scrollbar-demo.html +194 -0
  13. package/01-tokens/scrollbar.css +179 -0
  14. package/01-tokens/theme-toggle.js +103 -0
  15. package/01-tokens/tokens.css +972 -0
  16. package/01-tokens/typography.css +156 -0
  17. package/02-primitives/badge/README.md +71 -0
  18. package/02-primitives/badge/badge.css +141 -0
  19. package/02-primitives/badge/demo.html +101 -0
  20. package/02-primitives/button/README.md +99 -0
  21. package/02-primitives/button/button.css +353 -0
  22. package/02-primitives/button/demo.html +200 -0
  23. package/02-primitives/card/README.md +145 -0
  24. package/02-primitives/card/card.css +246 -0
  25. package/02-primitives/card/demo.html +170 -0
  26. package/02-primitives/choice/README.md +161 -0
  27. package/02-primitives/choice/choice.css +395 -0
  28. package/02-primitives/choice/demo.html +277 -0
  29. package/02-primitives/combobox/README.md +79 -0
  30. package/02-primitives/combobox/combobox.css +223 -0
  31. package/02-primitives/combobox/combobox.js +485 -0
  32. package/02-primitives/combobox/demo.html +109 -0
  33. package/02-primitives/date-range/README.md +100 -0
  34. package/02-primitives/date-range/date-range.css +206 -0
  35. package/02-primitives/date-range/date-range.js +301 -0
  36. package/02-primitives/date-range/demo.html +104 -0
  37. package/02-primitives/input/README.md +170 -0
  38. package/02-primitives/input/demo.html +246 -0
  39. package/02-primitives/input/input.css +239 -0
  40. package/02-primitives/popover/README.md +80 -0
  41. package/02-primitives/popover/demo.html +150 -0
  42. package/02-primitives/popover/popover.css +187 -0
  43. package/02-primitives/popover/popover.js +331 -0
  44. package/02-primitives/progress/README.md +82 -0
  45. package/02-primitives/progress/demo.html +154 -0
  46. package/02-primitives/progress/progress.css +172 -0
  47. package/02-primitives/select/README.md +95 -0
  48. package/02-primitives/select/demo.html +121 -0
  49. package/02-primitives/select/select.css +151 -0
  50. package/02-primitives/select/select.js +549 -0
  51. package/02-primitives/separator/README.md +63 -0
  52. package/02-primitives/separator/demo.html +84 -0
  53. package/02-primitives/separator/separator.css +73 -0
  54. package/02-primitives/skeleton/README.md +69 -0
  55. package/02-primitives/skeleton/demo.html +110 -0
  56. package/02-primitives/skeleton/skeleton.css +96 -0
  57. package/02-primitives/switch/README.md +65 -0
  58. package/02-primitives/switch/demo.html +115 -0
  59. package/02-primitives/switch/switch.css +370 -0
  60. package/03-patterns/accordion/README.md +121 -0
  61. package/03-patterns/accordion/accordion.css +453 -0
  62. package/03-patterns/accordion/accordion.js +369 -0
  63. package/03-patterns/accordion/demo.html +223 -0
  64. package/03-patterns/content/README.md +103 -0
  65. package/03-patterns/content/content.css +286 -0
  66. package/03-patterns/content/demo.html +88 -0
  67. package/03-patterns/drawer/README.md +79 -0
  68. package/03-patterns/drawer/demo.html +101 -0
  69. package/03-patterns/drawer/drawer.css +129 -0
  70. package/03-patterns/drawer/drawer.js +258 -0
  71. package/03-patterns/dropdown/README.md +78 -0
  72. package/03-patterns/dropdown/demo.html +101 -0
  73. package/03-patterns/dropdown/dropdown.css +135 -0
  74. package/03-patterns/dropdown/dropdown.js +451 -0
  75. package/03-patterns/form-validation/README.md +147 -0
  76. package/03-patterns/form-validation/demo.html +280 -0
  77. package/03-patterns/form-validation/form-validation.css +263 -0
  78. package/03-patterns/list/README.md +150 -0
  79. package/03-patterns/list/demo.html +225 -0
  80. package/03-patterns/list/flip.js +201 -0
  81. package/03-patterns/list/list.css +162 -0
  82. package/03-patterns/nav/README.md +225 -0
  83. package/03-patterns/nav/demo.html +131 -0
  84. package/03-patterns/nav/nav.css +314 -0
  85. package/03-patterns/nav/nav.js +430 -0
  86. package/03-patterns/nav/toc.js +111 -0
  87. package/03-patterns/overlay/README.md +196 -0
  88. package/03-patterns/overlay/demo.html +241 -0
  89. package/03-patterns/overlay/overlay.css +319 -0
  90. package/03-patterns/overlay/overlay.js +563 -0
  91. package/03-patterns/pagination/README.md +114 -0
  92. package/03-patterns/pagination/demo.html +165 -0
  93. package/03-patterns/pagination/pagination.css +195 -0
  94. package/03-patterns/pagination/pagination.js +395 -0
  95. package/03-patterns/reveal/README.md +91 -0
  96. package/03-patterns/reveal/demo.html +106 -0
  97. package/03-patterns/reveal/reveal.css +93 -0
  98. package/03-patterns/reveal/reveal.js +172 -0
  99. package/03-patterns/states/README.md +141 -0
  100. package/03-patterns/states/demo.html +240 -0
  101. package/03-patterns/states/states.css +252 -0
  102. package/03-patterns/tabs/README.md +84 -0
  103. package/03-patterns/tabs/demo.html +139 -0
  104. package/03-patterns/tabs/tabs.css +172 -0
  105. package/03-patterns/tabs/tabs.js +307 -0
  106. package/03-patterns/tooltip/README.md +96 -0
  107. package/03-patterns/tooltip/demo.html +78 -0
  108. package/03-patterns/tooltip/tooltip.css +89 -0
  109. package/03-patterns/tooltip/tooltip.js +288 -0
  110. package/03-patterns/tree/README.md +94 -0
  111. package/03-patterns/tree/demo.html +138 -0
  112. package/03-patterns/tree/tree.css +113 -0
  113. package/03-patterns/tree/tree.js +456 -0
  114. package/04-recipes/analysis-report/README.md +80 -0
  115. package/04-recipes/analysis-report/analysis-report.css +187 -0
  116. package/04-recipes/analysis-report/demo.html +274 -0
  117. package/04-recipes/data-showcase/README.md +45 -0
  118. package/04-recipes/data-showcase/demo.html +247 -0
  119. package/04-recipes/detail-page/README.md +93 -0
  120. package/04-recipes/detail-page/demo.html +55 -0
  121. package/04-recipes/detail-page/detail-page.css +190 -0
  122. package/04-recipes/detail-page/full.html +60 -0
  123. package/04-recipes/detail-page/null.html +60 -0
  124. package/04-recipes/detail-page/partial.html +60 -0
  125. package/04-recipes/detail-page/verify-skeleton.py +19 -0
  126. package/04-recipes/longform/README.md +93 -0
  127. package/04-recipes/longform/agc-memory.svg +4 -0
  128. package/04-recipes/longform/content.html +610 -0
  129. package/04-recipes/longform/content.md +51 -0
  130. package/04-recipes/longform/longform.html +627 -0
  131. package/04-recipes/report/README.md +176 -0
  132. package/04-recipes/report/demo.html +355 -0
  133. package/04-recipes/report/report.css +364 -0
  134. package/04-recipes/table/README.md +103 -0
  135. package/04-recipes/table/demo.html +455 -0
  136. package/04-recipes/table/table.css +372 -0
  137. package/04-recipes/tierA-tokens.css +189 -0
  138. package/09-assets/README.md +74 -0
  139. package/09-assets/bar/README.md +94 -0
  140. package/09-assets/bar/bar.css +166 -0
  141. package/09-assets/bar/bar.js +320 -0
  142. package/09-assets/bar/demo.html +176 -0
  143. package/09-assets/echarts-adapter/demo.html +192 -0
  144. package/09-assets/echarts-adapter/echarts-adapter.js +277 -0
  145. package/09-assets/model-viewer/README.md +155 -0
  146. package/09-assets/model-viewer/demo.html +105 -0
  147. package/09-assets/model-viewer/model-viewer.css +143 -0
  148. package/09-assets/model-viewer/model-viewer.js +423 -0
  149. package/09-assets/scientific-plot/README.md +94 -0
  150. package/09-assets/scientific-plot/demo.html +252 -0
  151. package/09-assets/scientific-plot/scientific-plot.css +141 -0
  152. package/09-assets/scientific-plot/scientific-plot.js +610 -0
  153. package/09-assets/sparkline/README.md +153 -0
  154. package/09-assets/sparkline/demo.html +163 -0
  155. package/09-assets/sparkline/sparkline.css +158 -0
  156. package/09-assets/sparkline/sparkline.js +508 -0
  157. package/API.md +332 -0
  158. package/CHANGELOG.md +3116 -0
  159. package/CODE_OF_CONDUCT.md +64 -0
  160. package/CONTRIBUTING.md +89 -0
  161. package/ERRORS.md +1658 -0
  162. package/LICENSE +21 -0
  163. package/README.md +491 -2
  164. package/SECURITY.md +72 -0
  165. package/START-HERE.md +164 -0
  166. package/SUPPORT.md +109 -0
  167. package/adapters/presentation/README.md +113 -0
  168. package/adapters/presentation/check.js +101 -0
  169. package/adapters/presentation/deck.schema.json +74 -0
  170. package/adapters/presentation/to-doc.js +138 -0
  171. package/ai/START-HERE.md +104 -0
  172. package/ai/behaviors.json +380 -0
  173. package/ai/behaviors.schema.json +61 -0
  174. package/ai/capabilities.json +56 -0
  175. package/ai/cli.js +387 -0
  176. package/ai/components.json +1944 -0
  177. package/ai/components.meta.json +168 -0
  178. package/ai/components.schema.json +220 -0
  179. package/ai/contract.schema.json +147 -0
  180. package/ai/deprecations.json +55 -0
  181. package/ai/deprecations.schema.json +85 -0
  182. package/ai/motion-policy.json +22 -0
  183. package/ai/patch.js +323 -0
  184. package/ai/patch.schema.json +63 -0
  185. package/ai/profiles.json +92 -0
  186. package/ai/tokens.audience.json +55 -0
  187. package/ai/tokens.audience.schema.json +73 -0
  188. package/ai/tokens.json +762 -0
  189. package/ai/tokens.schema.json +58 -0
  190. package/ai/tokens.tree.json +752 -0
  191. package/ai/tokens.tree.schema.json +56 -0
  192. package/ai/validate.js +383 -0
  193. package/dist/01-tokens/behavior/dismissable.js +60 -0
  194. package/dist/01-tokens/behavior/emit.js +21 -0
  195. package/dist/01-tokens/behavior/focus-return.js +31 -0
  196. package/dist/01-tokens/behavior/roving.js +77 -0
  197. package/dist/01-tokens/behavior/typeahead.js +61 -0
  198. package/dist/01-tokens/focus-ring.css +1 -0
  199. package/dist/01-tokens/page.css +1 -0
  200. package/dist/01-tokens/polyfill.js +78 -0
  201. package/dist/01-tokens/scrollbar.css +1 -0
  202. package/dist/01-tokens/theme-toggle.js +61 -0
  203. package/dist/01-tokens/tokens.css +1 -0
  204. package/dist/01-tokens/typography.css +1 -0
  205. package/dist/02-primitives/badge/badge.css +1 -0
  206. package/dist/02-primitives/button/button.css +1 -0
  207. package/dist/02-primitives/card/card.css +1 -0
  208. package/dist/02-primitives/choice/choice.css +1 -0
  209. package/dist/02-primitives/combobox/combobox.css +1 -0
  210. package/dist/02-primitives/combobox/combobox.js +439 -0
  211. package/dist/02-primitives/date-range/date-range.css +1 -0
  212. package/dist/02-primitives/date-range/date-range.js +267 -0
  213. package/dist/02-primitives/input/input.css +1 -0
  214. package/dist/02-primitives/popover/popover.css +1 -0
  215. package/dist/02-primitives/popover/popover.js +257 -0
  216. package/dist/02-primitives/progress/progress.css +1 -0
  217. package/dist/02-primitives/select/select.css +1 -0
  218. package/dist/02-primitives/select/select.js +449 -0
  219. package/dist/02-primitives/separator/separator.css +1 -0
  220. package/dist/02-primitives/skeleton/skeleton.css +1 -0
  221. package/dist/02-primitives/switch/switch.css +1 -0
  222. package/dist/03-patterns/accordion/accordion.css +1 -0
  223. package/dist/03-patterns/accordion/accordion.js +219 -0
  224. package/dist/03-patterns/content/content.css +1 -0
  225. package/dist/03-patterns/drawer/drawer.css +1 -0
  226. package/dist/03-patterns/drawer/drawer.js +229 -0
  227. package/dist/03-patterns/dropdown/dropdown.css +1 -0
  228. package/dist/03-patterns/dropdown/dropdown.js +365 -0
  229. package/dist/03-patterns/form-validation/form-validation.css +1 -0
  230. package/dist/03-patterns/list/flip.js +117 -0
  231. package/dist/03-patterns/list/list.css +1 -0
  232. package/dist/03-patterns/nav/nav.css +1 -0
  233. package/dist/03-patterns/nav/nav.js +322 -0
  234. package/dist/03-patterns/nav/toc.js +76 -0
  235. package/dist/03-patterns/overlay/overlay.css +1 -0
  236. package/dist/03-patterns/overlay/overlay.js +398 -0
  237. package/dist/03-patterns/pagination/pagination.css +1 -0
  238. package/dist/03-patterns/pagination/pagination.js +273 -0
  239. package/dist/03-patterns/reveal/reveal.css +1 -0
  240. package/dist/03-patterns/reveal/reveal.js +138 -0
  241. package/dist/03-patterns/states/states.css +1 -0
  242. package/dist/03-patterns/tabs/tabs.css +1 -0
  243. package/dist/03-patterns/tabs/tabs.js +242 -0
  244. package/dist/03-patterns/tooltip/tooltip.css +1 -0
  245. package/dist/03-patterns/tooltip/tooltip.js +213 -0
  246. package/dist/03-patterns/tree/tree.css +1 -0
  247. package/dist/03-patterns/tree/tree.js +383 -0
  248. package/dist/04-recipes/analysis-report/analysis-report.css +1 -0
  249. package/dist/04-recipes/detail-page/detail-page.css +1 -0
  250. package/dist/04-recipes/report/report.css +1 -0
  251. package/dist/04-recipes/table/table.css +1 -0
  252. package/dist/04-recipes/tierA-tokens.css +1 -0
  253. package/dist/09-assets/bar/bar.css +1 -0
  254. package/dist/09-assets/bar/bar.js +222 -0
  255. package/dist/09-assets/echarts-adapter/echarts-adapter.js +185 -0
  256. package/dist/09-assets/model-viewer/model-viewer.css +1 -0
  257. package/dist/09-assets/model-viewer/model-viewer.js +320 -0
  258. package/dist/09-assets/scientific-plot/scientific-plot.css +1 -0
  259. package/dist/09-assets/scientific-plot/scientific-plot.js +568 -0
  260. package/dist/09-assets/sparkline/sparkline.css +1 -0
  261. package/dist/09-assets/sparkline/sparkline.js +265 -0
  262. package/dist/COSTS.md +56 -0
  263. package/docs/AI-CONTRACT.md +197 -0
  264. package/docs/BACKLOG.md +127 -0
  265. package/docs/BENCHMARK.md +252 -0
  266. package/docs/GUIDANCE.md +154 -0
  267. package/docs/INVARIANT.md +372 -0
  268. package/docs/LAYER-BASELINE.md +158 -0
  269. package/docs/RELEASING.md +275 -0
  270. package/docs/RFC-THEME-SCOPE.md +141 -0
  271. package/docs/ROADMAP.md +182 -0
  272. package/index.html +82 -0
  273. package/package.json +107 -4
  274. package/types/index.d.ts +310 -0
@@ -0,0 +1,138 @@
1
+ (function (global) {
2
+ 'use strict';
3
+
4
+ var SELECTOR = '[data-reveal]';
5
+ var GROUP_SELECTOR = '[data-reveal-children]';
6
+ var STAGGER_MS = 40;
7
+ var STAGGER_CAP = 6;
8
+ var THRESHOLD = 0.15;
9
+ var WATCHDOG_MS = 2000;
10
+ var observer = null;
11
+ var watchdog = null;
12
+
13
+ function each(list, fn) {
14
+ for (var i = 0; i < list.length; i++) { fn(list[i], i); }
15
+ }
16
+
17
+ function reduced() {
18
+ return !!(global.matchMedia &&
19
+ global.matchMedia('(prefers-reduced-motion: reduce)').matches);
20
+ }
21
+
22
+ function markDone(el) { el.setAttribute('data-reveal-done', ''); }
23
+ function clearDone(el) { el.removeAttribute('data-reveal-done'); }
24
+
25
+ function prepareGroups() {
26
+ var groups = document.querySelectorAll(GROUP_SELECTOR);
27
+ each(groups, function (group) {
28
+ var dir = group.getAttribute('data-reveal-children') || 'up';
29
+ var kids = group.children;
30
+ for (var i = 0; i < kids.length; i++) {
31
+ var k = kids[i];
32
+ if (!k.hasAttribute('data-reveal')) {
33
+ k.setAttribute('data-reveal', dir);
34
+ }
35
+ if (!k.hasAttribute('data-reveal-delay')) {
36
+ var step = i < STAGGER_CAP ? i : STAGGER_CAP;
37
+ k.style.setProperty('--reveal-delay', (step * STAGGER_MS) + 'ms');
38
+ }
39
+ }
40
+ });
41
+ }
42
+
43
+ function revealAll() {
44
+ each(document.querySelectorAll(SELECTOR), markDone);
45
+ }
46
+
47
+ function inViewport(el) {
48
+ var vh = global.innerHeight || document.documentElement.clientHeight || 0;
49
+ var r = el.getBoundingClientRect();
50
+ return r.bottom > 0 && r.top < vh;
51
+ }
52
+
53
+ function watchdogSweep() {
54
+ watchdog = null;
55
+ each(document.querySelectorAll(SELECTOR), function (el) {
56
+ if (el.hasAttribute('data-reveal-done')) { return; }
57
+ if (inViewport(el)) { markDone(el); }
58
+ });
59
+ }
60
+
61
+ function teardown() {
62
+ if (watchdog) { global.clearTimeout(watchdog); watchdog = null; }
63
+ if (observer) { observer.disconnect(); observer = null; }
64
+ each(document.querySelectorAll(SELECTOR), function (el) {
65
+ clearDone(el);
66
+ });
67
+ document.documentElement.removeAttribute('data-reveal-ready');
68
+ }
69
+
70
+ function enable() {
71
+ var root = document.documentElement;
72
+ if (observer) { return true; }
73
+
74
+ prepareGroups();
75
+ root.setAttribute('data-reveal-ready', '');
76
+
77
+ if (!('IntersectionObserver' in global) || reduced()) {
78
+ revealAll();
79
+ return true;
80
+ }
81
+
82
+ try {
83
+ observer = new global.IntersectionObserver(function (entries) {
84
+ for (var i = 0; i < entries.length; i++) {
85
+ var en = entries[i];
86
+ if (en.isIntersecting) {
87
+ markDone(en.target);
88
+ if (!en.target.hasAttribute('data-reveal-repeat')) {
89
+ observer.unobserve(en.target);
90
+ }
91
+ } else if (en.target.hasAttribute('data-reveal-repeat')) {
92
+ clearDone(en.target);
93
+ }
94
+ }
95
+ }, { threshold: THRESHOLD, rootMargin: '0px 0px -8% 0px' });
96
+
97
+ each(document.querySelectorAll(SELECTOR), function (el) {
98
+ observer.observe(el);
99
+ });
100
+ } catch (e) {
101
+ if (observer) {
102
+ try { observer.disconnect(); } catch (e2) { observer = null; }
103
+ observer = null;
104
+ }
105
+ revealAll();
106
+ return true;
107
+ }
108
+
109
+ if (!watchdog) {
110
+ watchdog = global.setTimeout(watchdogSweep, WATCHDOG_MS);
111
+ }
112
+ return true;
113
+ }
114
+
115
+ function disable() {
116
+ teardown();
117
+ revealAll();
118
+ }
119
+
120
+ function replay() {
121
+ teardown();
122
+ return enable();
123
+ }
124
+
125
+ global.Reveal = { enable: enable, disable: disable, replay: replay };
126
+
127
+ function auto() {
128
+ if (document.documentElement.hasAttribute('data-reveal-auto')) {
129
+ enable();
130
+ }
131
+ }
132
+
133
+ if (document.readyState === 'loading') {
134
+ document.addEventListener('DOMContentLoaded', auto, false);
135
+ } else {
136
+ auto();
137
+ }
138
+ }(this));
@@ -0,0 +1 @@
1
+ .state {display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--sp-2);padding:var(--sp-8) var(--sp-5);text-align:center;min-height:200px;}.state__icon {flex:none;width:48px;height:48px;margin-bottom:var(--sp-2);display:grid;place-items:center;border-radius:var(--r-pill);background:var(--surface-sunken);color:var(--text-tertiary);}.state__title {margin:0;font-size:var(--fs-md);font-weight:500;line-height:var(--lh-tight);color:var(--text-primary);}.state__desc {margin:0;max-width:42ch;font-size:var(--fs-sm);color:var(--text-secondary);line-height:var(--lh-base);}.state__action {margin-top:var(--sp-3);display:flex;gap:var(--sp-3);flex-wrap:wrap;justify-content:center;}.state--empty .state__icon {background:var(--surface-sunken);color:var(--text-tertiary);}.state--loading {gap:var(--sp-3);}.spinner {width:24px;height:24px;border:2.5px solid var(--border-control);border-top-color:var(--accent);border-radius:50%;animation:spinner-rotate 700ms linear infinite;}@keyframes spinner-rotate {to {transform:rotate(360deg);}}.skeleton {--sk-base:var(--surface-sunken);--sk-hi:var(--border-decor);background:var(--sk-base);border-radius:var(--r-sm);position:relative;overflow:hidden;}.skeleton::after {content:"";position:absolute;inset:0;background:linear-gradient(90deg, transparent 0%, var(--sk-hi) 50%, transparent 100%);transform:translateX(-100%);animation:skeleton-sweep 1.4s ease-in-out infinite;}@keyframes skeleton-sweep {to {transform:translateX(100%);}}.skeleton--text {height:1em;margin-block:0.35em;border-radius:4px;}.skeleton--title {height:1.4em;width:60%;}.skeleton--avatar {width:40px;height:40px;border-radius:var(--r-pill);}.skeleton--block {height:120px;}.skeleton--text:last-child {width:70%;}.state--error .state__icon {background:var(--danger-bg);color:var(--danger);}.state--error .state__title {color:var(--danger);}.state__detail {margin-top:var(--sp-3);font-family:var(--mono);font-size:var(--fs-xs);color:var(--text-tertiary);background:var(--surface-sunken);padding:var(--sp-2) var(--sp-3);border-radius:var(--r-sm);max-width:100%;overflow-x:auto;}@media (prefers-reduced-motion:reduce) {.spinner {animation-duration:1.2s !important;}.skeleton::after {animation:none;transform:none;}}
@@ -0,0 +1 @@
1
+ .tabs {display:flex;flex-direction:column;gap:var(--sp-4);}.tabs--manual .tabs__tab[aria-selected="true"] {color:var(--text-secondary);font-weight:400;}@media (hover:hover) and (pointer:fine) {.tabs--manual .tabs__tab[aria-selected="true"]:hover {color:var(--text-primary);}}.tabs__list {display:flex;gap:var(--sp-1);border-bottom:1px solid var(--border-decor);position:relative;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;}.tabs__list::-webkit-scrollbar {display:none;}.tabs--vertical {flex-direction:row;gap:var(--sp-4);}.tabs--vertical .tabs__list {flex-direction:column;border-bottom:0;border-inline-end:1px solid var(--border-decor);}.tabs__tab {appearance:none;background:none;border:0;margin-bottom:-1px;padding:var(--sp-3) var(--sp-4);font:inherit;font-size:var(--fs-base);color:var(--text-secondary);cursor:pointer;border-bottom:2px solid transparent;transition:color var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out);white-space:nowrap;flex:0 0 auto;}.tabs--vertical .tabs__tab {margin-bottom:0;margin-inline-end:-1px;border-bottom:0;border-inline-end:2px solid transparent;text-align:start;}.tabs__tab[aria-selected="true"] {color:var(--text-primary);font-weight:600;border-bottom-color:var(--accent);}.tabs--vertical .tabs__tab[aria-selected="true"] {border-inline-end-color:var(--accent);}@media (hover:hover) and (pointer:fine) {.tabs__tab:not([aria-disabled="true"]):hover {color:var(--text-primary);background:var(--surface-sunken);}}.tabs__tab[aria-disabled="true"] {color:var(--text-tertiary);cursor:not-allowed;}.tabs__tab:focus-visible {outline:2px solid var(--accent);outline-offset:-2px;border-radius:var(--r-sm) var(--r-sm) 0 0;}.tabs__panel {padding:var(--sp-4) 0;}.tabs__panel[hidden] {display:none;}@media (prefers-reduced-motion:no-preference) {.tabs__panel--enter {animation:tabs-fade var(--dur-base) var(--ease-out);}}@keyframes tabs-fade {from {opacity:0;}to {opacity:1;}}
@@ -0,0 +1,242 @@
1
+ (function () {
2
+ 'use strict';
3
+
4
+ var flEmit = function (el, name, detail) {
5
+ if (!el || !el.dispatchEvent) return null;
6
+ var type = name.indexOf('fl-') === 0 ? name : 'fl-' + name;
7
+ var ev = null;
8
+
9
+ if (typeof window.CustomEvent === 'function') {
10
+ try {
11
+ ev = new window.CustomEvent(type, {
12
+ detail: detail || null, bubbles: true, cancelable: false
13
+ });
14
+ } catch (e) { ev = null; }
15
+ }
16
+ if (!ev) {
17
+ try {
18
+ ev = document.createEvent('CustomEvent');
19
+ ev.initCustomEvent(type, true, false, detail || null);
20
+ } catch (e2) { return null; }
21
+ }
22
+ el.dispatchEvent(ev);
23
+ return ev;
24
+ };
25
+
26
+ var flRoving = function (opts) {
27
+ var opt = opts || {};
28
+ var container = opt.container;
29
+ var all = opt.items || function () { return []; };
30
+ var movable = opt.movable || all;
31
+ var nodeOf = opt.nodeOf || function (x) { return x; };
32
+ var axis = opt.axis || 'x';
33
+ var loop = opt.loop !== false;
34
+ var homeEnd = opt.homeEnd !== false;
35
+
36
+ var roveTab = opt.tabindex !== false;
37
+ var onMove = opt.onMove || function () {};
38
+
39
+ function rove(target) {
40
+ if (!roveTab) return target;
41
+ var l = all() || [];
42
+ for (var i = 0; i < l.length; i++) {
43
+ var n = nodeOf(l[i]);
44
+ if (!n || !n.setAttribute) continue;
45
+ n.setAttribute('tabindex', n === target ? '0' : '-1');
46
+ }
47
+ return target;
48
+ }
49
+
50
+ function step(i, d) {
51
+ var n = (movable() || []).length;
52
+ if (!n) return -1;
53
+ if (loop) return ((i + d) % n + n) % n;
54
+ var t = i + d;
55
+ return (t < 0 || t >= n) ? -1 : t;
56
+ }
57
+
58
+ function indexOfNode(node) {
59
+ var l = movable() || [];
60
+ for (var i = 0; i < l.length; i++) {
61
+ if (nodeOf(l[i]) === node) return i;
62
+ }
63
+ return -1;
64
+ }
65
+
66
+ function onKey(e) {
67
+ var l = movable() || [];
68
+ if (!l.length) return;
69
+ var i = indexOfNode(e.target);
70
+ if (i < 0) return;
71
+ var k = e.key;
72
+ var next = -1;
73
+ var reason = 'step';
74
+
75
+ if (axis === 'y') {
76
+ if (k === 'ArrowDown') next = step(i, 1);
77
+ else if (k === 'ArrowUp') next = step(i, -1);
78
+ } else {
79
+ if (k === 'ArrowRight') next = step(i, 1);
80
+ else if (k === 'ArrowLeft') next = step(i, -1);
81
+ }
82
+ if (homeEnd && k === 'Home') { next = 0; reason = 'home'; }
83
+ else if (homeEnd && k === 'End') { next = l.length - 1; reason = 'end'; }
84
+
85
+ if (next < 0 || next >= l.length) return;
86
+
87
+ if (e.preventDefault) e.preventDefault();
88
+ if (e.stopPropagation) e.stopPropagation();
89
+ onMove(next, l[next], reason);
90
+ }
91
+
92
+ if (container) container.addEventListener('keydown', onKey);
93
+
94
+ return {
95
+ rove: rove,
96
+ step: step,
97
+ indexOf: indexOfNode,
98
+ destroy: function () {
99
+ if (container) container.removeEventListener('keydown', onKey);
100
+ },
101
+ };
102
+ };
103
+
104
+ function toArray(x) { return Array.prototype.slice.call(x); }
105
+
106
+ function closest(el, sel) {
107
+ while (el && el.nodeType === 1) {
108
+ if (matches(el, sel)) return el;
109
+ el = el.parentNode;
110
+ }
111
+ return null;
112
+ }
113
+
114
+ function matches(el, sel) {
115
+ var fn = el.matches || el.msMatchesSelector || el.webkitMatchesSelector;
116
+ return fn ? fn.call(el, sel) : false;
117
+ }
118
+
119
+ function filter(list, fn, self) {
120
+ var out = [];
121
+ for (var i = 0; i < list.length; i++) {
122
+ if (fn.call(self, list[i], i, list)) out.push(list[i]);
123
+ }
124
+ return out;
125
+ }
126
+
127
+ function Tabs(root, opts) {
128
+ this.root = root;
129
+ this.opts = opts || {};
130
+ this.list = root.querySelector('[role="tablist"]');
131
+ if (!this.list) return;
132
+ this.tabs = toArray(this.list.querySelectorAll('[role="tab"]'));
133
+ this.panels = toArray(root.querySelectorAll('[role="tabpanel"]'));
134
+ this.vertical = this.list.getAttribute('aria-orientation') === 'vertical';
135
+
136
+ this.manual = root.classList.contains('tabs--manual');
137
+
138
+ var self = this;
139
+ this.roving = flRoving({
140
+ container: this.list,
141
+ items: function () { return self.tabs; },
142
+ movable: function () { return self.focusables(); },
143
+ axis: this.vertical ? 'y' : 'x',
144
+ onMove: function (i, tab) {
145
+ if (self.manual) { self.rove(tab); tab.focus(); }
146
+ else self.select(tab, true);
147
+ },
148
+ });
149
+ this.bind();
150
+ }
151
+
152
+ Tabs.prototype.enabled = function (tab) {
153
+ return tab.getAttribute('aria-disabled') !== 'true';
154
+ };
155
+
156
+ Tabs.prototype.focusables = function () {
157
+ return filter(this.tabs, this.enabled, this);
158
+ };
159
+
160
+ Tabs.prototype.rove = function (target) {
161
+ if (!this.roving) return;
162
+ this.roving.rove(target);
163
+ };
164
+ Tabs.prototype.select = function (tab, focusIt) {
165
+ if (!this.enabled(tab)) return;
166
+ for (var i = 0; i < this.tabs.length; i++) {
167
+ var on = this.tabs[i] === tab;
168
+ this.tabs[i].setAttribute('aria-selected', on ? 'true' : 'false');
169
+
170
+ var pid = this.tabs[i].getAttribute('aria-controls');
171
+ var panel = pid ? document.getElementById(pid) : null;
172
+ if (!panel) {
173
+
174
+ panel = this.panels[i] || null;
175
+ }
176
+ if (panel) {
177
+ if (on) {
178
+ panel.removeAttribute('hidden');
179
+ panel.classList.add('tabs__panel--enter');
180
+ } else {
181
+ panel.setAttribute('hidden', '');
182
+ panel.classList.remove('tabs__panel--enter');
183
+ }
184
+ }
185
+ }
186
+ this.active = tab;
187
+ this.rove(tab);
188
+ if (focusIt) tab.focus();
189
+ flEmit(this.root, 'fl-change',
190
+ { value: tab.getAttribute('data-value') || tab.id, tab: tab });
191
+ if (typeof this.opts.onChange === 'function') {
192
+ this.opts.onChange(tab.getAttribute('data-value') || tab.id, tab);
193
+ }
194
+ };
195
+
196
+ Tabs.prototype.bind = function () {
197
+ var self = this;
198
+
199
+ var initial = null;
200
+ for (var i = 0; i < this.tabs.length; i++) {
201
+ if (this.tabs[i].getAttribute('aria-selected') === 'true') {
202
+ initial = this.tabs[i];
203
+ break;
204
+ }
205
+ }
206
+ this.select(initial || this.tabs[0], false);
207
+
208
+ this.list.addEventListener('click', function (e) {
209
+ var tab = closest(e.target, '[role="tab"]');
210
+ if (!tab || !self.list.contains(tab)) return;
211
+ if (!self.enabled(tab)) return;
212
+ self.select(tab, false);
213
+ });
214
+
215
+ this.list.addEventListener('keydown', function (e) {
216
+ var tab = closest(e.target, '[role="tab"]');
217
+ if (!tab) return;
218
+ var k = e.key;
219
+
220
+ if (k !== 'Enter' && k !== ' ' && k !== 'Spacebar') return;
221
+ if (self.manual) {
222
+ e.preventDefault();
223
+ self.select(tab, false);
224
+ }
225
+ });
226
+ };
227
+
228
+ window.Tabs = Tabs;
229
+
230
+ function init() {
231
+ var nodes = document.querySelectorAll('[data-tabs]');
232
+ for (var i = 0; i < nodes.length; i++) {
233
+ nodes[i].tabsInstance = new Tabs(nodes[i], {});
234
+ }
235
+ }
236
+
237
+ if (document.readyState === 'loading') {
238
+ document.addEventListener('DOMContentLoaded', init);
239
+ } else {
240
+ init();
241
+ }
242
+ })();
@@ -0,0 +1 @@
1
+ .tooltip {position:absolute;z-index:var(--z-raised);max-width:260px;padding:var(--sp-2) var(--sp-3);background:var(--tooltip-bg);color:var(--tooltip-fg);font-size:var(--fs-xs);line-height:1.5;border-radius:var(--r-sm);box-shadow:inset 0 0 0 1px var(--tooltip-border), var(--shadow-2);user-select:none;opacity:0;visibility:hidden;transition:opacity 120ms var(--ease-out, ease);pointer-events:none;}.tooltip[data-state="open"] {opacity:1;visibility:visible;}.tooltip::after {content:"";position:absolute;border:5px solid transparent;}.tooltip--top::after {top:100%;inset-inline-start:50%;margin-inline-start:-5px;border-top-color:var(--tooltip-bg);}.tooltip--bottom::after {bottom:100%;inset-inline-start:50%;margin-inline-start:-5px;border-bottom-color:var(--tooltip-bg);}.tooltip--inset-inline-start::after {inset-inline-start:100%;top:50%;margin-top:-5px;border-inline-start-color:var(--tooltip-bg);}.tooltip--inset-inline-end::after {inset-inline-end:100%;top:50%;margin-top:-5px;border-inline-end-color:var(--tooltip-bg);}@media (prefers-reduced-motion:reduce) {.tooltip {transition:none;}}@media (hover:hover) and (pointer:fine) {[data-tooltip]:hover + .tooltip, [data-tooltip]:focus-visible + .tooltip {opacity:1;visibility:visible;}}
@@ -0,0 +1,213 @@
1
+ (function (global) {
2
+
3
+ var flFocusReturn = function (opts) {
4
+ var opt = opts || {};
5
+ var saved = null;
6
+
7
+ return {
8
+ save: function () {
9
+ var a = document.activeElement;
10
+ saved = (a && a !== document.body && a.focus) ? a : null;
11
+ return saved;
12
+ },
13
+
14
+ restore: function () {
15
+ var target = saved;
16
+
17
+ if (!target || !document.contains(target)) target = opt.fallback || null;
18
+ if (!target) { saved = null; return false; }
19
+ try {
20
+ target.focus();
21
+ } catch (e) {
22
+ saved = null;
23
+ return false;
24
+ }
25
+ var ok = document.activeElement === target;
26
+ saved = null;
27
+ return ok;
28
+ },
29
+
30
+ target: function () { return saved; },
31
+ clear: function () { saved = null; },
32
+ };
33
+ };
34
+
35
+ var flDismissable = function (opts) {
36
+ var opt = opts || {};
37
+ var escOn = opt.escOn || [];
38
+ var inside = opt.inside || [];
39
+ var when = opt.when || function () { return true; };
40
+ var onDismiss = opt.onDismiss || function () {};
41
+
42
+ var shared = window.__flDismiss || (window.__flDismiss = { stack: [], bound: false });
43
+
44
+ function isInside(node) {
45
+ if (!node) return false;
46
+ for (var i = 0; i < inside.length; i++) {
47
+ var el = inside[i];
48
+ if (!el || !el.contains) continue;
49
+ if (el === node || el.contains(node)) return true;
50
+ }
51
+ return false;
52
+ }
53
+
54
+ function onKey(e) {
55
+ if (!when()) return;
56
+ var k = e.key;
57
+ if (k !== 'Escape' && k !== 'Esc' && e.keyCode !== 27) return;
58
+
59
+ var closed = onDismiss(e, 'esc');
60
+ if (closed === false) return;
61
+ if (e.preventDefault) e.preventDefault();
62
+ if (e.stopPropagation) e.stopPropagation();
63
+ }
64
+
65
+ function onDocClick(e) {
66
+ var top = null;
67
+ for (var i = shared.stack.length - 1; i >= 0; i--) {
68
+ if (shared.stack[i].when()) { top = shared.stack[i]; break; }
69
+ }
70
+ if (!top || top.isInside(e.target)) return;
71
+ top.onDismiss(e, 'outside');
72
+ }
73
+
74
+ var rec = { when: when, isInside: isInside, onDismiss: onDismiss };
75
+
76
+ for (var j = 0; j < escOn.length; j++) {
77
+ if (escOn[j]) escOn[j].addEventListener('keydown', onKey);
78
+ }
79
+ shared.stack.push(rec);
80
+ if (!shared.bound) {
81
+ shared.bound = true;
82
+ document.addEventListener('click', onDocClick, true);
83
+ }
84
+
85
+ return {
86
+ destroy: function () {
87
+ for (var j = 0; j < escOn.length; j++) {
88
+ if (escOn[j]) escOn[j].removeEventListener('keydown', onKey);
89
+ }
90
+ var k = shared.stack.indexOf(rec);
91
+ if (k >= 0) shared.stack.splice(k, 1);
92
+ },
93
+ };
94
+ };
95
+
96
+ 'use strict';
97
+
98
+ var uid = 0;
99
+
100
+ function ensureStyle() {
101
+ if (document.getElementById('tooltip-css')) return;
102
+
103
+ }
104
+
105
+ function ensureLiveRegion() {
106
+ var id = 'tooltip-live';
107
+ var r = document.getElementById(id);
108
+ if (r) return r;
109
+ r = document.createElement('div');
110
+ r.id = id;
111
+ r.setAttribute('role', 'tooltip');
112
+
113
+ r.setAttribute('aria-live', 'polite');
114
+ r.setAttribute('aria-atomic', 'true');
115
+
116
+ r.setAttribute('aria-label', '组件提示');
117
+ r.style.cssText =
118
+ 'position:absolute;width:1px;height:1px;padding:0;margin:-1px;'+
119
+ 'overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0';
120
+ document.body.appendChild(r);
121
+ return r;
122
+ }
123
+
124
+ var CLS = {
125
+ top: 'top', bottom: 'bottom',
126
+ start: 'inset-inline-start', end: 'inset-inline-end',
127
+ };
128
+
129
+ function resolve(el, place) {
130
+ var p = place || 'bottom';
131
+ if (p === 'top' || p === 'bottom' || p === 'start' || p === 'end') return p;
132
+ if (p !== 'left' && p !== 'right') return 'bottom';
133
+ var rtl = getComputedStyle(el).direction === 'rtl';
134
+ if (p === 'left') return rtl ? 'end' : 'start';
135
+ return rtl ? 'start' : 'end';
136
+ }
137
+
138
+ function attach(el, text, place) {
139
+
140
+ var fr = flFocusReturn({ fallback: el });
141
+ if (!el || !text) return;
142
+ ensureStyle();
143
+
144
+ var pos = resolve(el, place);
145
+ var id = 'tt' + (++uid);
146
+ var tip = document.createElement('div');
147
+ tip.id = id;
148
+ tip.className = 'tooltip tooltip--' + CLS[pos];
149
+ tip.setAttribute('role', 'tooltip');
150
+ tip.textContent = text;
151
+
152
+ var live = ensureLiveRegion();
153
+
154
+ function show() {
155
+
156
+ fr.save();
157
+
158
+ tip.style.visibility = 'hidden';
159
+ tip.style.display = 'block';
160
+ if (!tip.parentNode) document.body.appendChild(tip);
161
+
162
+ var b = el.getBoundingClientRect();
163
+ var t = tip.getBoundingClientRect();
164
+ if (pos === 'top') {
165
+ tip.style.top = (b.top - t.height) + window.pageYOffset + 'px';
166
+ tip.style.left = (b.left + b.width / 2 - t.width / 2) + window.pageXOffset + 'px';
167
+ } else if (pos === 'start' || pos === 'end') {
168
+ var rtl = getComputedStyle(el).direction === 'rtl';
169
+
170
+ var x = (pos === 'start')
171
+ ? (rtl ? b.right : b.left - t.width)
172
+ : (rtl ? b.left - t.width : b.right);
173
+ tip.style.left = x + window.pageXOffset + 'px';
174
+ tip.style.top = (b.top + b.height / 2 - t.height / 2) + window.pageYOffset + 'px';
175
+ } else {
176
+ tip.style.top = (b.bottom + window.pageYOffset) + 'px';
177
+ tip.style.left = (b.left + b.width / 2 - t.width / 2) + window.pageXOffset + 'px';
178
+ }
179
+ tip.style.visibility = '';
180
+ tip.setAttribute('data-state', 'open');
181
+ live.textContent = text;
182
+ }
183
+
184
+ function hide() {
185
+ tip.removeAttribute('data-state');
186
+ live.textContent = '';
187
+ }
188
+
189
+ el.addEventListener('focus', show);
190
+ el.addEventListener('blur', hide);
191
+
192
+ el.addEventListener('click', function (e) {
193
+ e.stopPropagation();
194
+ if (tip.getAttribute('data-state') === 'open') hide(); else show();
195
+ });
196
+
197
+ var dismiss = flDismissable({
198
+ escOn: [el],
199
+ inside: [el, tip],
200
+ when: function () { return tip.getAttribute('data-state') === 'open'; },
201
+ onDismiss: function (ev, reason) {
202
+ hide();
203
+ if (reason === 'esc') fr.restore();
204
+ }
205
+ });
206
+
207
+ var cur = el.getAttribute('aria-describedby');
208
+ el.setAttribute('aria-describedby', cur ? (cur + ' ' + id) : id);
209
+ el.setAttribute('data-tooltip', text);
210
+ }
211
+
212
+ global.Tooltip = { attach: attach };
213
+ })(window);
@@ -0,0 +1 @@
1
+ .tree {font-size:var(--fs-sm);color:var(--text-primary);outline:none;}.tree ul {margin:0;padding:0;list-style:none;}.tree__item {position:relative;}.tree__node {display:flex;align-items:center;gap:var(--sp-2);min-height:32px;padding:0 var(--sp-2);border-radius:var(--r-xs);cursor:pointer;user-select:none;}.tree__node:focus-visible {outline:var(--focus-ring-width) solid var(--focus-ring-color);outline-offset:calc(-1 * var(--focus-ring-width));}@media (hover:hover) and (pointer:fine) {.tree__node:hover {background:var(--surface-sunken);}}.tree__node[aria-selected="true"] {background:var(--accent-soft);color:var(--text-primary);font-weight:500;}.tree__marker {flex:0 0 auto;width:1em;font-size:.8em;color:var(--text-tertiary);text-align:center;}.tree__item[aria-expanded="true"] > .tree__node .tree__marker::before {content:"\25BC";}.tree__item[aria-expanded="false"] > .tree__node .tree__marker::before {content:"\25B6";}.tree__item:not([aria-expanded]) > .tree__node .tree__marker::before {content:"\00B7";}.tree ul ul {padding-inline-start:var(--sp-5);border-inline-start:1px solid var(--border-decor);margin-inline-start:var(--sp-4);}.tree__label {flex:1 1 auto;}.tree__count {flex:0 0 auto;padding:0 var(--sp-1);font-size:var(--fs-xs);font-family:var(--mono);font-variant-numeric:tabular-nums;color:var(--text-tertiary);background:var(--surface-sunken);border-radius:var(--r-pill);}@media (prefers-reduced-motion:reduce) {.tree__marker {transition:none;}}