@k2b/cloud 0.6.0-rc.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.
Files changed (540) hide show
  1. package/README.md +98 -0
  2. package/package.json +128 -0
  3. package/public/logo.svg +1 -0
  4. package/scripts/app-favicon.test.ts +49 -0
  5. package/scripts/app-favicon.ts +51 -0
  6. package/scripts/build.ts +205 -0
  7. package/scripts/preload.ts +164 -0
  8. package/scripts/sync-recovery-smoke.ts +200 -0
  9. package/src/_internal/app-favicon.ts +2 -0
  10. package/src/_internal/app-presentation.ts +61 -0
  11. package/src/_internal/app-workspace-state.ts +24 -0
  12. package/src/_internal/bounded-json.ts +47 -0
  13. package/src/_internal/build-metadata.ts +9 -0
  14. package/src/_internal/capabilities.ts +1118 -0
  15. package/src/_internal/define-app.ts +801 -0
  16. package/src/_internal/heartbeat.ts +167 -0
  17. package/src/_internal/help-catalog.ts +241 -0
  18. package/src/_internal/help.ts +95 -0
  19. package/src/_internal/nats-connection.ts +34 -0
  20. package/src/_internal/page-responses.ts +40 -0
  21. package/src/_internal/process-sync.ts +117 -0
  22. package/src/_internal/readiness.ts +3 -0
  23. package/src/_internal/registry-validation.ts +136 -0
  24. package/src/_internal/registry-watch.ts +52 -0
  25. package/src/_internal/registry.ts +338 -0
  26. package/src/_internal/runtime-compatibility.ts +64 -0
  27. package/src/_internal/runtime-context.ts +84 -0
  28. package/src/_internal/runtime-watcher.ts +78 -0
  29. package/src/_internal/static-assets.ts +86 -0
  30. package/src/_internal/status-preserving-ssr.ts +49 -0
  31. package/src/access/PermissionEditor.tsx +486 -0
  32. package/src/access/ResourceApiKeys.tsx +271 -0
  33. package/src/access/messages.ts +121 -0
  34. package/src/access/ui.ts +16 -0
  35. package/src/account/Avatar.tsx +28 -0
  36. package/src/account/EntitySearch.tsx +363 -0
  37. package/src/account/avatar-upload-dialog.tsx +197 -0
  38. package/src/account/avatar-upload.ts +149 -0
  39. package/src/account/ui.ts +3 -0
  40. package/src/ai/admin.ts +47 -0
  41. package/src/ai/approval-routes.ts +130 -0
  42. package/src/ai/approvals.ts +139 -0
  43. package/src/ai/assistant-models.ts +61 -0
  44. package/src/ai/attachments.ts +40 -0
  45. package/src/ai/browser.ts +92 -0
  46. package/src/ai/capabilities.ts +714 -0
  47. package/src/ai/capability-execution.ts +151 -0
  48. package/src/ai/chat/blocks.render.test.tsx +1108 -0
  49. package/src/ai/chat/blocks.tsx +730 -0
  50. package/src/ai/chat/builtin-tools.tsx +428 -0
  51. package/src/ai/chat/capability-table.tsx +87 -0
  52. package/src/ai/chat/composer-adapter.ts +169 -0
  53. package/src/ai/chat/file-tools.tsx +81 -0
  54. package/src/ai/chat/message-actions.tsx +370 -0
  55. package/src/ai/chat/message-utils.ts +479 -0
  56. package/src/ai/chat/messages.ts +43 -0
  57. package/src/ai/chat/presentation.tsx +395 -0
  58. package/src/ai/chat/primitives.tsx +3 -0
  59. package/src/ai/chat/tool-disclosure.tsx +41 -0
  60. package/src/ai/chat/turn-navigator-utils.ts +28 -0
  61. package/src/ai/chat/turn-navigator.tsx +164 -0
  62. package/src/ai/chat/user-message.tsx +149 -0
  63. package/src/ai/chat/visual-tools.tsx +435 -0
  64. package/src/ai/chat/web-tools.tsx +202 -0
  65. package/src/ai/chat-task-contracts.ts +113 -0
  66. package/src/ai/chat-tasks.ts +952 -0
  67. package/src/ai/client/controller.ts +1211 -0
  68. package/src/ai/client/file-source.ts +95 -0
  69. package/src/ai/client/live-connection.ts +140 -0
  70. package/src/ai/client/projection.ts +178 -0
  71. package/src/ai/client/transport.ts +111 -0
  72. package/src/ai/compaction.ts +182 -0
  73. package/src/ai/credentials.ts +124 -0
  74. package/src/ai/default-tool-contracts.ts +108 -0
  75. package/src/ai/default-tools.ts +127 -0
  76. package/src/ai/enrich.ts +280 -0
  77. package/src/ai/executor.ts +1624 -0
  78. package/src/ai/fetch-file-tool.ts +313 -0
  79. package/src/ai/file-context.ts +92 -0
  80. package/src/ai/file-media-type.ts +28 -0
  81. package/src/ai/file-mount.ts +16 -0
  82. package/src/ai/file-tools.ts +566 -0
  83. package/src/ai/files-store.ts +390 -0
  84. package/src/ai/firecrawl-tools.ts +305 -0
  85. package/src/ai/grids-skill.ts +126 -0
  86. package/src/ai/http.ts +265 -0
  87. package/src/ai/index.ts +337 -0
  88. package/src/ai/kit-skill.ts +22 -0
  89. package/src/ai/limits.ts +5 -0
  90. package/src/ai/live-events.ts +289 -0
  91. package/src/ai/live-messages.ts +45 -0
  92. package/src/ai/live-outbox.ts +102 -0
  93. package/src/ai/live-routes.ts +412 -0
  94. package/src/ai/live.ts +2 -0
  95. package/src/ai/maintenance.ts +302 -0
  96. package/src/ai/markdown-pdf-tool.ts +95 -0
  97. package/src/ai/memories.ts +605 -0
  98. package/src/ai/memory-learning-runs.ts +222 -0
  99. package/src/ai/memory-learning.ts +619 -0
  100. package/src/ai/memory-tool.ts +120 -0
  101. package/src/ai/memory-workflow-evidence.ts +158 -0
  102. package/src/ai/migrate.ts +2082 -0
  103. package/src/ai/model-access-migrate.ts +30 -0
  104. package/src/ai/model-access.ts +191 -0
  105. package/src/ai/personal-agent.ts +6 -0
  106. package/src/ai/prefs.ts +72 -0
  107. package/src/ai/project-tool.ts +94 -0
  108. package/src/ai/projects-routes.ts +277 -0
  109. package/src/ai/projects.ts +902 -0
  110. package/src/ai/protocol.ts +279 -0
  111. package/src/ai/provider.ts +73 -0
  112. package/src/ai/public-projection.ts +25 -0
  113. package/src/ai/resource-markers.ts +31 -0
  114. package/src/ai/resource-refs.ts +70 -0
  115. package/src/ai/routes.ts +1131 -0
  116. package/src/ai/runtime-tools.ts +39 -0
  117. package/src/ai/runtime.ts +544 -0
  118. package/src/ai/settings.ts +529 -0
  119. package/src/ai/short-id.ts +45 -0
  120. package/src/ai/skill-catalog.ts +73 -0
  121. package/src/ai/skill-format.ts +145 -0
  122. package/src/ai/skill-seeds.ts +430 -0
  123. package/src/ai/skill-tool.ts +81 -0
  124. package/src/ai/skills-routes.ts +143 -0
  125. package/src/ai/skills.ts +934 -0
  126. package/src/ai/solid.ts +27 -0
  127. package/src/ai/store.ts +3113 -0
  128. package/src/ai/stream.ts +308 -0
  129. package/src/ai/structured-runs.ts +66 -0
  130. package/src/ai/structured.ts +186 -0
  131. package/src/ai/system-prompt.ts +170 -0
  132. package/src/ai/task-prompt.ts +22 -0
  133. package/src/ai/timeline.ts +148 -0
  134. package/src/ai/tool-audit.ts +177 -0
  135. package/src/ai/tool-result-budget.ts +16 -0
  136. package/src/ai/tools.ts +155 -0
  137. package/src/ai/types.ts +967 -0
  138. package/src/ai/ui.tsx +39 -0
  139. package/src/ai/usage-migrate.ts +81 -0
  140. package/src/ai/usage.ts +315 -0
  141. package/src/ai/validate.ts +54 -0
  142. package/src/ai/vision-tool.ts +79 -0
  143. package/src/api/accounts-entities.ts +174 -0
  144. package/src/api/admin-ai-projects.ts +74 -0
  145. package/src/api/admin-ai-skills.ts +76 -0
  146. package/src/api/admin-ai-usage.ts +42 -0
  147. package/src/api/admin-core-settings.ts +508 -0
  148. package/src/api/admin-identity.ts +148 -0
  149. package/src/api/admin-lifecycle.ts +206 -0
  150. package/src/api/admin-linux-identities.ts +66 -0
  151. package/src/api/announcements.ts +131 -0
  152. package/src/api/app-approval.ts +129 -0
  153. package/src/api/apps.ts +51 -0
  154. package/src/api/auth/schemas.ts +54 -0
  155. package/src/api/auth.ts +370 -0
  156. package/src/api/capabilities.ts +658 -0
  157. package/src/api/help-messages.ts +19 -0
  158. package/src/api/help.ts +78 -0
  159. package/src/api/index.ts +108 -0
  160. package/src/api/mcp.ts +744 -0
  161. package/src/api/me-rail.ts +45 -0
  162. package/src/api/me.ts +753 -0
  163. package/src/api/search/schemas.ts +79 -0
  164. package/src/api/search.bench.ts +185 -0
  165. package/src/api/search.ts +407 -0
  166. package/src/api/sync-ops.ts +79 -0
  167. package/src/api/widgets.ts +143 -0
  168. package/src/browser/CloudResourceSearch.behavior.test.tsx +74 -0
  169. package/src/browser/CloudResourceSearch.tsx +791 -0
  170. package/src/browser/app-approval-vault.ts +305 -0
  171. package/src/browser/app-approval.ts +234 -0
  172. package/src/browser/live-websocket.ts +268 -0
  173. package/src/browser/locale-preference.ts +25 -0
  174. package/src/browser/notification-target.ts +27 -0
  175. package/src/browser/notification-timeout.ts +14 -0
  176. package/src/browser/notifications.ts +181 -0
  177. package/src/browser/resource-clipboard.ts +70 -0
  178. package/src/browser/resource-picker.tsx +39 -0
  179. package/src/browser/resource-search-messages.ts +55 -0
  180. package/src/browser/resource-search.ts +27 -0
  181. package/src/capabilities/client.ts +149 -0
  182. package/src/capabilities/response.ts +39 -0
  183. package/src/capabilities/server.ts +215 -0
  184. package/src/capabilities/signals.ts +4 -0
  185. package/src/capabilities/testing.ts +12 -0
  186. package/src/capabilities/types.ts +32 -0
  187. package/src/cli/access.ts +499 -0
  188. package/src/cli/account.ts +382 -0
  189. package/src/cli/admin/account-administration.ts +45 -0
  190. package/src/cli/admin/account-categories.ts +49 -0
  191. package/src/cli/admin/ai-usage.ts +118 -0
  192. package/src/cli/admin/app-sign-in.ts +49 -0
  193. package/src/cli/admin/data.ts +343 -0
  194. package/src/cli/admin/documentation.ts +34 -0
  195. package/src/cli/admin/gateway.ts +155 -0
  196. package/src/cli/admin/index.ts +61 -0
  197. package/src/cli/admin/instance.ts +250 -0
  198. package/src/cli/admin/jobs.ts +223 -0
  199. package/src/cli/admin/legal.ts +122 -0
  200. package/src/cli/admin/linux.ts +53 -0
  201. package/src/cli/admin/logs.ts +324 -0
  202. package/src/cli/admin/metrics.ts +142 -0
  203. package/src/cli/admin/nats.ts +167 -0
  204. package/src/cli/admin/notifications.ts +516 -0
  205. package/src/cli/admin/shared.ts +113 -0
  206. package/src/cli/admin/sync.ts +188 -0
  207. package/src/cli/admin/telemetry.ts +314 -0
  208. package/src/cli/admin/webhooks.ts +222 -0
  209. package/src/cli/admin/workflows.ts +367 -0
  210. package/src/cli/apps.ts +40 -0
  211. package/src/cli/capabilities.ts +239 -0
  212. package/src/cli/commands.ts +604 -0
  213. package/src/cli/index.ts +61 -0
  214. package/src/cli/locale.ts +31 -0
  215. package/src/cli/output.ts +58 -0
  216. package/src/clients/core.ts +20 -0
  217. package/src/config/env.ts +54 -0
  218. package/src/config/index.ts +6 -0
  219. package/src/contracts/account-categories.ts +62 -0
  220. package/src/contracts/announcements.ts +121 -0
  221. package/src/contracts/app-approval.ts +197 -0
  222. package/src/contracts/app.ts +162 -0
  223. package/src/contracts/capabilities.ts +484 -0
  224. package/src/contracts/index.ts +14 -0
  225. package/src/contracts/notification-live.ts +66 -0
  226. package/src/contracts/notification-types.ts +235 -0
  227. package/src/contracts/posix.ts +69 -0
  228. package/src/contracts/profile.ts +85 -0
  229. package/src/contracts/rail-preferences.ts +53 -0
  230. package/src/contracts/registry.ts +110 -0
  231. package/src/contracts/resource-clipboard.ts +33 -0
  232. package/src/contracts/settings-types.ts +98 -0
  233. package/src/contracts/shared.ts +408 -0
  234. package/src/contracts/user-notifications.ts +101 -0
  235. package/src/contracts/widgets.ts +183 -0
  236. package/src/desktop/index.ts +704 -0
  237. package/src/desktop/solid.tsx +938 -0
  238. package/src/index.ts +58 -0
  239. package/src/server/actor.ts +41 -0
  240. package/src/server/api/index.ts +2 -0
  241. package/src/server/api/respond.ts +96 -0
  242. package/src/server/api-client.ts +54 -0
  243. package/src/server/app-context.ts +39 -0
  244. package/src/server/help.ts +187 -0
  245. package/src/server/index.ts +89 -0
  246. package/src/server/locale.ts +55 -0
  247. package/src/server/middleware/auth.ts +386 -0
  248. package/src/server/middleware/index.ts +28 -0
  249. package/src/server/middleware/invocation.ts +55 -0
  250. package/src/server/middleware/middleware.ts +65 -0
  251. package/src/server/middleware/openapi.ts +126 -0
  252. package/src/server/middleware/rate-limit.ts +125 -0
  253. package/src/server/middleware/request-logger.ts +41 -0
  254. package/src/server/middleware/route-template.ts +46 -0
  255. package/src/server/middleware/runtime.ts +22 -0
  256. package/src/server/middleware/settings.ts +55 -0
  257. package/src/server/middleware/validator.ts +49 -0
  258. package/src/server/middleware/workload.ts +22 -0
  259. package/src/server/ratelimit.ts +151 -0
  260. package/src/server/request-cookies.ts +18 -0
  261. package/src/server/services/access.ts +644 -0
  262. package/src/server/services/freeipa/client.ts +137 -0
  263. package/src/server/services/freeipa/index.ts +9 -0
  264. package/src/server/services/freeipa/session.ts +123 -0
  265. package/src/server/services/freeipa/test-certificates.ts +44 -0
  266. package/src/server/services/freeipa/tls.ts +44 -0
  267. package/src/server/services/freeipa/transport.ts +116 -0
  268. package/src/server/services/freeipa/util.ts +59 -0
  269. package/src/server/services/geo.ts +198 -0
  270. package/src/server/services/index.ts +48 -0
  271. package/src/server/services/pagination.ts +22 -0
  272. package/src/server/services/services.ts +13 -0
  273. package/src/server/time.ts +33 -0
  274. package/src/services/account-category-policy.ts +51 -0
  275. package/src/services/account-lifecycle/audit.ts +41 -0
  276. package/src/services/account-lifecycle/index.ts +940 -0
  277. package/src/services/account-lifecycle/ipa-backfill.ts +152 -0
  278. package/src/services/account-lifecycle/notification-sender.ts +13 -0
  279. package/src/services/account-lifecycle/scheduler.ts +506 -0
  280. package/src/services/account-model.ts +22 -0
  281. package/src/services/accounts/app.ts +1671 -0
  282. package/src/services/accounts/authz.ts +44 -0
  283. package/src/services/accounts/avatar.ts +120 -0
  284. package/src/services/accounts/base-group.ts +11 -0
  285. package/src/services/accounts/base-user.ts +46 -0
  286. package/src/services/accounts/duplicate-emails.ts +82 -0
  287. package/src/services/accounts/entities.ts +622 -0
  288. package/src/services/accounts/group-sql.ts +106 -0
  289. package/src/services/accounts/groups.ts +272 -0
  290. package/src/services/accounts/index.ts +14 -0
  291. package/src/services/accounts/ipa-data.ts +66 -0
  292. package/src/services/accounts/lifecycle.ts +2 -0
  293. package/src/services/accounts/local-groups.ts +499 -0
  294. package/src/services/accounts/model.ts +129 -0
  295. package/src/services/accounts/notification-sender.ts +31 -0
  296. package/src/services/accounts/posix.ts +386 -0
  297. package/src/services/accounts/request-policy.ts +11 -0
  298. package/src/services/accounts/switching.ts +126 -0
  299. package/src/services/accounts/users.ts +745 -0
  300. package/src/services/announcements/index.ts +224 -0
  301. package/src/services/app-approval.ts +498 -0
  302. package/src/services/audit/index.ts +438 -0
  303. package/src/services/auth-flows/index.ts +15 -0
  304. package/src/services/auth-flows/ipa.ts +197 -0
  305. package/src/services/auth-flows/magic-link.ts +185 -0
  306. package/src/services/auth-flows/notification-sender.ts +10 -0
  307. package/src/services/auth-flows/password-reset.ts +268 -0
  308. package/src/services/auth-flows/proxy-return.ts +49 -0
  309. package/src/services/document-extraction.ts +148 -0
  310. package/src/services/freeipa-config.ts +179 -0
  311. package/src/services/gateway.ts +186 -0
  312. package/src/services/identity/constants.ts +18 -0
  313. package/src/services/identity/index.ts +52 -0
  314. package/src/services/identity/invocation-actor.ts +120 -0
  315. package/src/services/identity/invocation-authority.ts +53 -0
  316. package/src/services/identity/invocation-operations.ts +15 -0
  317. package/src/services/identity/invocation-token.ts +276 -0
  318. package/src/services/identity/key-config.ts +41 -0
  319. package/src/services/identity/key-ring.ts +530 -0
  320. package/src/services/identity/metrics.ts +29 -0
  321. package/src/services/identity/routes.ts +18 -0
  322. package/src/services/identity/runtime-config.ts +88 -0
  323. package/src/services/identity/session-token.ts +152 -0
  324. package/src/services/identity/signer-refresh.ts +44 -0
  325. package/src/services/identity/workload-auth.ts +64 -0
  326. package/src/services/index.ts +187 -0
  327. package/src/services/ipa/auth.ts +216 -0
  328. package/src/services/ipa/connection.ts +57 -0
  329. package/src/services/ipa/effective-groups.ts +70 -0
  330. package/src/services/ipa/groups.ts +722 -0
  331. package/src/services/ipa/guard.ts +17 -0
  332. package/src/services/ipa/index.ts +17 -0
  333. package/src/services/ipa/posix.ts +19 -0
  334. package/src/services/ipa/profile.ts +132 -0
  335. package/src/services/ipa/runtime.ts +28 -0
  336. package/src/services/ipa/search.ts +154 -0
  337. package/src/services/ipa/service-account.ts +15 -0
  338. package/src/services/ipa/sync-planning.ts +100 -0
  339. package/src/services/ipa/sync.ts +862 -0
  340. package/src/services/ipa/users.ts +806 -0
  341. package/src/services/legal-consent.ts +76 -0
  342. package/src/services/logging/index.ts +477 -0
  343. package/src/services/logging/redaction.ts +20 -0
  344. package/src/services/logging/trace.ts +1231 -0
  345. package/src/services/mandates/index.ts +855 -0
  346. package/src/services/mandates/policy.ts +85 -0
  347. package/src/services/network-security.ts +31 -0
  348. package/src/services/notifications/batches.ts +722 -0
  349. package/src/services/notifications/browser.ts +252 -0
  350. package/src/services/notifications/catalog.ts +113 -0
  351. package/src/services/notifications/channels.ts +104 -0
  352. package/src/services/notifications/dispatcher.ts +139 -0
  353. package/src/services/notifications/email.ts +118 -0
  354. package/src/services/notifications/index.ts +633 -0
  355. package/src/services/notifications/live.ts +50 -0
  356. package/src/services/notifications/observability.ts +407 -0
  357. package/src/services/notifications/platform.ts +421 -0
  358. package/src/services/notifications/runtime.ts +120 -0
  359. package/src/services/notifications/user.ts +248 -0
  360. package/src/services/notifications/web-push-transport.ts +135 -0
  361. package/src/services/oauth-tokens.ts +209 -0
  362. package/src/services/outbox.ts +187 -0
  363. package/src/services/pdf/gotenberg.ts +290 -0
  364. package/src/services/pdf/index.ts +43 -0
  365. package/src/services/pdf/markdown.ts +209 -0
  366. package/src/services/pdf/template-preview.ts +122 -0
  367. package/src/services/postgres.ts +76 -0
  368. package/src/services/providers/index.ts +27 -0
  369. package/src/services/providers/local/auth.ts +51 -0
  370. package/src/services/providers/local/index.ts +4 -0
  371. package/src/services/providers/local/users.ts +263 -0
  372. package/src/services/rail-preferences.ts +27 -0
  373. package/src/services/runtime-lifecycle.ts +191 -0
  374. package/src/services/secrets.ts +10 -0
  375. package/src/services/service-account-credentials.ts +891 -0
  376. package/src/services/service-accounts.ts +184 -0
  377. package/src/services/session/index.ts +236 -0
  378. package/src/services/session/test-fixture.ts +18 -0
  379. package/src/services/session/user.ts +144 -0
  380. package/src/services/settings/api.ts +61 -0
  381. package/src/services/settings/app.ts +86 -0
  382. package/src/services/settings/core-settings.ts +796 -0
  383. package/src/services/settings/crypto.ts +69 -0
  384. package/src/services/settings/defaults.ts +374 -0
  385. package/src/services/settings/index.ts +215 -0
  386. package/src/services/settings/namespace.ts +9 -0
  387. package/src/services/settings/snapshot.ts +49 -0
  388. package/src/services/settings/store.ts +241 -0
  389. package/src/services/settings/templates.ts +4 -0
  390. package/src/services/sync-ops.ts +403 -0
  391. package/src/services/topic-cursor.ts +22 -0
  392. package/src/services/weather/forecast.ts +323 -0
  393. package/src/services/weather/geo.ts +119 -0
  394. package/src/services/weather/index.ts +67 -0
  395. package/src/services/weather/location.ts +24 -0
  396. package/src/services/weather/locations.ts +133 -0
  397. package/src/services/weather/migrate.ts +45 -0
  398. package/src/services/weather/settings.ts +66 -0
  399. package/src/services/weather/short-id.ts +57 -0
  400. package/src/services/weather/types.ts +61 -0
  401. package/src/services/weather/ui.ts +50 -0
  402. package/src/services/webauthn.ts +385 -0
  403. package/src/shared/account-action-notice.ts +70 -0
  404. package/src/shared/account-display.ts +15 -0
  405. package/src/shared/account-session.ts +15 -0
  406. package/src/shared/ai-platform-prompt.ts +134 -0
  407. package/src/shared/ai-usage.ts +49 -0
  408. package/src/shared/app-presentation.ts +48 -0
  409. package/src/shared/app-url.ts +12 -0
  410. package/src/shared/branding.ts +14 -0
  411. package/src/shared/capability-messages.ts +70 -0
  412. package/src/shared/email-html.ts +54 -0
  413. package/src/shared/format.ts +91 -0
  414. package/src/shared/help.ts +68 -0
  415. package/src/shared/icons.ts +400 -0
  416. package/src/shared/index.ts +54 -0
  417. package/src/shared/locale.ts +48 -0
  418. package/src/shared/login-method.ts +44 -0
  419. package/src/shared/markdown/client.ts +130 -0
  420. package/src/shared/markdown/extensions/code.ts +105 -0
  421. package/src/shared/markdown/extensions/guided-help.ts +100 -0
  422. package/src/shared/markdown/extensions/images.ts +79 -0
  423. package/src/shared/markdown/extensions/info-blocks.ts +97 -0
  424. package/src/shared/markdown/extensions/katex.ts +120 -0
  425. package/src/shared/markdown/extensions/links.ts +43 -0
  426. package/src/shared/markdown/extensions/mark.ts +48 -0
  427. package/src/shared/markdown/extensions/sub-sup.ts +60 -0
  428. package/src/shared/markdown/extensions/tables.ts +109 -0
  429. package/src/shared/markdown/extensions/task-list.ts +53 -0
  430. package/src/shared/markdown/formula.ts +1187 -0
  431. package/src/shared/markdown/index.ts +193 -0
  432. package/src/shared/markdown/shared.ts +36 -0
  433. package/src/shared/mock-cover.ts +130 -0
  434. package/src/shared/network-address.ts +106 -0
  435. package/src/shared/redirect.ts +56 -0
  436. package/src/shared/template-rendering.ts +140 -0
  437. package/src/shared/theme.ts +68 -0
  438. package/src/shared/time.ts +13 -0
  439. package/src/ssr/AdminLayout.tsx +53 -0
  440. package/src/ssr/AdminSidebar.tsx +50 -0
  441. package/src/ssr/AppLaunchpad.island.tsx +236 -0
  442. package/src/ssr/AppWorkspaceController.island.tsx +21 -0
  443. package/src/ssr/BrowserNotifications.island.tsx +135 -0
  444. package/src/ssr/GlobalAnnouncements.island.tsx +142 -0
  445. package/src/ssr/GlobalSearchDialog.behavior.test.tsx +96 -0
  446. package/src/ssr/GlobalSearchDialog.tsx +35 -0
  447. package/src/ssr/GlobalSearchHelpDialog.tsx +104 -0
  448. package/src/ssr/GlobalSearchTrigger.island.tsx +55 -0
  449. package/src/ssr/HotkeysHelpRail.island.tsx +55 -0
  450. package/src/ssr/Layout.render.test.tsx +148 -0
  451. package/src/ssr/Layout.tsx +292 -0
  452. package/src/ssr/LayoutBreadcrumbs.island.tsx +44 -0
  453. package/src/ssr/LayoutFooter.tsx +22 -0
  454. package/src/ssr/LayoutHeader.tsx +81 -0
  455. package/src/ssr/LayoutHelp.tsx +869 -0
  456. package/src/ssr/LayoutPreferences.island.tsx +36 -0
  457. package/src/ssr/LayoutRail.tsx +58 -0
  458. package/src/ssr/MinimalLayout.tsx +46 -0
  459. package/src/ssr/PageError.tsx +29 -0
  460. package/src/ssr/ProfilePreferences.island.tsx +92 -0
  461. package/src/ssr/RailApps.island.tsx +61 -0
  462. package/src/ssr/RailEditor.tsx +293 -0
  463. package/src/ssr/RegisteredHelpDocuments.island.tsx +3 -0
  464. package/src/ssr/TimezoneCookie.island.tsx +23 -0
  465. package/src/ssr/admin-active-link.ts +47 -0
  466. package/src/ssr/admin-navigation.ts +78 -0
  467. package/src/ssr/app-appearance.ts +23 -0
  468. package/src/ssr/app-navigation.ts +41 -0
  469. package/src/ssr/help-messages.ts +104 -0
  470. package/src/ssr/index.ts +14 -0
  471. package/src/ssr/islands/SearchBar.island.tsx +80 -0
  472. package/src/ssr/islands/index.ts +16 -0
  473. package/src/ssr/layout-context.ts +17 -0
  474. package/src/ssr/layout-help-markdown.ts +9 -0
  475. package/src/ssr/layout-help-navigation.ts +24 -0
  476. package/src/ssr/layout-help-url.ts +5 -0
  477. package/src/ssr/layout-runtime.ts +22 -0
  478. package/src/ssr/page-error-messages.ts +25 -0
  479. package/src/ssr/platform-messages.ts +135 -0
  480. package/src/ssr/preference-controller.ts +44 -0
  481. package/src/ssr/profile-preferences-messages.ts +29 -0
  482. package/src/ssr/rail-context.ts +21 -0
  483. package/src/ssr/rail-messages.ts +66 -0
  484. package/src/ssr/rail-navigation.ts +60 -0
  485. package/src/ssr/runtime.ts +31 -0
  486. package/src/ssr/url-filter.ts +127 -0
  487. package/src/styles/base-popover.css +36 -0
  488. package/src/styles/effects.css +851 -0
  489. package/src/styles/global.css +268 -0
  490. package/src/styles/input.css +58 -0
  491. package/src/styles/tokens.css +230 -0
  492. package/src/styles/utilities-buttons.css +405 -0
  493. package/src/styles/utilities-data.css +33 -0
  494. package/src/styles/utilities-feedback.css +232 -0
  495. package/src/styles/utilities-layout.css +603 -0
  496. package/src/styles/utilities-markdown-editor.css +525 -0
  497. package/src/styles/utilities-markdown-table.css +234 -0
  498. package/src/styles/utilities-navigation.css +1054 -0
  499. package/src/types/ambient.d.ts +24 -0
  500. package/src/workflows/ai/index.ts +17 -0
  501. package/src/workflows/ai/runtime.ts +286 -0
  502. package/src/workflows/ai/store.ts +314 -0
  503. package/src/workflows/ai/types.ts +111 -0
  504. package/src/workflows/ai-actions.ts +269 -0
  505. package/src/workflows/authoring.ts +88 -0
  506. package/src/workflows/builtins.ts +193 -0
  507. package/src/workflows/contracts.ts +280 -0
  508. package/src/workflows/definition.ts +334 -0
  509. package/src/workflows/editor.ts +113 -0
  510. package/src/workflows/index.ts +71 -0
  511. package/src/workflows/language/binder.ts +45 -0
  512. package/src/workflows/language/canonical.ts +29 -0
  513. package/src/workflows/language/compiler.ts +396 -0
  514. package/src/workflows/language/expressions.ts +34 -0
  515. package/src/workflows/language/index.ts +20 -0
  516. package/src/workflows/language/references.ts +55 -0
  517. package/src/workflows/language/schema.ts +134 -0
  518. package/src/workflows/language/strict-yaml.ts +131 -0
  519. package/src/workflows/manifest.ts +24 -0
  520. package/src/workflows/module.ts +12 -0
  521. package/src/workflows/runtime/coordinator.ts +115 -0
  522. package/src/workflows/runtime/executor.ts +1003 -0
  523. package/src/workflows/runtime/index.ts +60 -0
  524. package/src/workflows/runtime/instant.ts +8 -0
  525. package/src/workflows/runtime/ports.ts +213 -0
  526. package/src/workflows/runtime/schedule.ts +203 -0
  527. package/src/workflows/runtime/trigger.ts +37 -0
  528. package/src/workflows/runtime/wake.ts +13 -0
  529. package/src/workflows/store/actions.ts +438 -0
  530. package/src/workflows/store/budget.ts +145 -0
  531. package/src/workflows/store/definitions.ts +345 -0
  532. package/src/workflows/store/events.ts +383 -0
  533. package/src/workflows/store/index.ts +107 -0
  534. package/src/workflows/store/observability.ts +594 -0
  535. package/src/workflows/store/runs.ts +975 -0
  536. package/src/workflows/store/transaction.ts +23 -0
  537. package/src/workflows/store/worker.ts +439 -0
  538. package/src/workflows/testing/conformance.ts +72 -0
  539. package/src/workflows/testing/index.ts +11 -0
  540. package/src/workflows/testing/process-fixtures.ts +275 -0
@@ -0,0 +1,405 @@
1
+ /* Button and input utility classes — flat, solid */
2
+ @utility focus-ui {
3
+ @apply focus-visible:outline-none;
4
+
5
+ &:focus-visible {
6
+ box-shadow: var(--ui-focus);
7
+ }
8
+ }
9
+
10
+ @utility btn-base {
11
+ border-radius: var(--ui-radius-control);
12
+ @apply inline-flex cursor-pointer items-center justify-center gap-1.5 select-none font-medium border;
13
+ @apply transition-[background-color,color,border-color,box-shadow,opacity] duration-150 ease-out;
14
+ @apply focus-ui;
15
+ @apply disabled:cursor-not-allowed disabled:opacity-40 disabled:transition-none disabled:shadow-none;
16
+ }
17
+
18
+ @utility btn-sm {
19
+ min-height: var(--ui-control-sm);
20
+ padding: var(--ui-input-padding-y) 0.75rem;
21
+ @apply text-xs;
22
+ }
23
+
24
+ @utility btn-md {
25
+ min-height: var(--ui-control-md);
26
+ @apply px-4 py-2 text-sm;
27
+ }
28
+
29
+ /* Simple: ghost — no bg, no border, text only, bg on hover */
30
+ @utility btn-simple {
31
+ @apply btn-base bg-transparent text-zinc-600 border-transparent;
32
+ @apply hover:bg-zinc-100 hover:text-zinc-800;
33
+ @apply active:bg-zinc-200;
34
+ @apply dark:text-zinc-400 dark:border-transparent;
35
+ @apply dark:hover:bg-zinc-800 dark:hover:text-zinc-200;
36
+ @apply dark:active:bg-zinc-700;
37
+ }
38
+
39
+ /* Primary: semantic forward/write action; sinks (inset) on press. */
40
+ @utility btn-primary {
41
+ @apply btn-base;
42
+ border-color: var(--ui-action-primary-border);
43
+ background: var(--ui-action-primary-surface);
44
+ color: var(--ui-action-primary-text);
45
+ box-shadow:
46
+ inset 0 1px 0 0 rgb(255 255 255 / 0.26),
47
+ inset 0 -1px 1px 0 rgb(0 0 0 / 0.16);
48
+ &:hover {
49
+ border-color: var(--ui-action-primary-hover-border);
50
+ background: var(--ui-action-primary-hover);
51
+ }
52
+ &:active {
53
+ border-color: var(--ui-action-primary-hover-border);
54
+ background: var(--ui-action-primary-active);
55
+ box-shadow: var(--ui-control-press);
56
+ }
57
+ &:disabled:hover {
58
+ border-color: var(--ui-action-primary-border);
59
+ background: var(--ui-action-primary-surface);
60
+ }
61
+ }
62
+
63
+ /* Secondary: filled zinc + soft bevel; sinks on press */
64
+ @utility btn-secondary {
65
+ @apply btn-base bg-zinc-100 text-zinc-700 border-transparent;
66
+ @apply hover:bg-zinc-200;
67
+ @apply active:bg-zinc-300;
68
+ @apply dark:bg-zinc-800 dark:text-zinc-200 dark:border-transparent;
69
+ @apply dark:hover:bg-zinc-700;
70
+ @apply dark:active:bg-zinc-600;
71
+ box-shadow: var(--ui-control-bevel);
72
+ &:active {
73
+ box-shadow: var(--ui-control-press);
74
+ }
75
+ }
76
+
77
+ /* Success: filled emerald + soft bevel; sinks on press */
78
+ @utility btn-success {
79
+ @apply btn-base bg-emerald-500 text-white border-emerald-600;
80
+ @apply hover:bg-emerald-600 hover:border-emerald-700;
81
+ @apply active:bg-emerald-700 active:border-emerald-700;
82
+ @apply dark:bg-emerald-500 dark:text-white dark:border-emerald-600;
83
+ @apply dark:hover:bg-emerald-600 dark:hover:border-emerald-700;
84
+ @apply dark:active:bg-emerald-700;
85
+ box-shadow:
86
+ inset 0 1px 0 0 rgb(255 255 255 / 0.26),
87
+ inset 0 -1px 1px 0 rgb(0 0 0 / 0.16);
88
+ &:active {
89
+ box-shadow: var(--ui-control-press);
90
+ }
91
+ }
92
+
93
+ /* Success, quiet: same geometry as secondary controls, with state carried by
94
+ a low-chroma fill instead of a louder outline or solid action surface. */
95
+ @utility btn-success-subtle {
96
+ @apply btn-base border-transparent bg-emerald-500/10 text-emerald-700;
97
+ @apply hover:bg-emerald-500/15 hover:text-emerald-800;
98
+ @apply active:bg-emerald-500/20;
99
+ @apply dark:bg-emerald-400/12 dark:text-emerald-300;
100
+ @apply dark:hover:bg-emerald-400/18 dark:hover:text-emerald-200;
101
+ @apply dark:active:bg-emerald-400/22;
102
+ box-shadow: none;
103
+ }
104
+
105
+ /* Danger: filled red + soft bevel; sinks on press */
106
+ @utility btn-danger {
107
+ @apply btn-base bg-red-500 text-white border-red-600;
108
+ @apply hover:bg-red-600 hover:border-red-700;
109
+ @apply active:bg-red-700 active:border-red-700;
110
+ @apply dark:bg-red-500 dark:text-white dark:border-red-600;
111
+ @apply dark:hover:bg-red-600 dark:hover:border-red-700;
112
+ @apply dark:active:bg-red-700;
113
+ box-shadow:
114
+ inset 0 1px 0 0 rgb(255 255 255 / 0.26),
115
+ inset 0 -1px 1px 0 rgb(0 0 0 / 0.16);
116
+ &:active {
117
+ box-shadow: var(--ui-control-press);
118
+ }
119
+ }
120
+
121
+ @utility btn-input {
122
+ border-radius: var(--ui-radius-control);
123
+ @apply inline-flex items-center justify-center gap-1.5 px-2.5 py-1 text-xs font-medium leading-5 select-none cursor-pointer;
124
+ @apply transition-[background-color,color,border-color,box-shadow] duration-150 border;
125
+ @apply bg-zinc-100 text-zinc-600 border-zinc-100;
126
+ @apply hover:bg-zinc-200/70 hover:text-zinc-800 hover:border-zinc-200/70;
127
+ @apply active:bg-zinc-200;
128
+ @apply focus-visible:outline-none focus-visible:bg-white focus-visible:border-blue-400;
129
+ @apply focus-ui;
130
+ @apply dark:bg-zinc-800 dark:text-zinc-300 dark:border-zinc-800;
131
+ @apply dark:hover:bg-zinc-700 dark:hover:text-zinc-100 dark:hover:border-zinc-700;
132
+ @apply dark:active:bg-zinc-700;
133
+ @apply dark:focus-visible:bg-zinc-900 dark:focus-visible:border-blue-400;
134
+ @apply disabled:cursor-not-allowed disabled:opacity-40 disabled:transition-none;
135
+ box-shadow: var(--ui-control-bevel);
136
+ &:active {
137
+ box-shadow: var(--ui-control-press);
138
+ }
139
+ &:disabled {
140
+ box-shadow: none;
141
+ }
142
+ }
143
+
144
+ /* Recessed sibling of `btn-input`. Same filled surface + hover / focus /
145
+ disabled states, but sunk in (inset recess) instead of raised (bevel) — for
146
+ select / dropdown / picker triggers that should read as form fields rather
147
+ than press-buttons. Sinks deeper on :active. Compose with `btn-input-sm/-md`
148
+ for sizing, like `btn-input`. */
149
+ @utility btn-input-recessed {
150
+ @apply btn-input;
151
+ box-shadow: var(--ui-control-recess);
152
+ &:active {
153
+ box-shadow: var(--ui-control-press);
154
+ }
155
+ &:disabled {
156
+ box-shadow: none;
157
+ }
158
+ }
159
+
160
+ @utility btn-input-sm {
161
+ min-height: var(--ui-control-sm);
162
+ padding: var(--ui-input-padding-y) 0.75rem;
163
+ @apply text-xs;
164
+ }
165
+
166
+ @utility btn-input-md {
167
+ @apply min-h-9 px-3 py-1.5 text-sm;
168
+ }
169
+
170
+ @utility btn-input-active {
171
+ @apply bg-blue-50 text-blue-600 border-blue-200;
172
+ @apply hover:bg-blue-100 hover:border-blue-200;
173
+ @apply dark:bg-blue-950 dark:text-blue-300 dark:border-blue-800;
174
+ @apply dark:hover:bg-blue-900 dark:hover:border-blue-700;
175
+ }
176
+
177
+ @utility btn-segment {
178
+ @apply inline-flex cursor-pointer items-center justify-center gap-1 rounded-lg border border-zinc-300/50 bg-zinc-100/55 px-2.5 py-1 text-xs font-medium leading-4 text-zinc-700 select-none;
179
+ @apply transition-[background-color,color,border-color] duration-150 ease-out;
180
+ @apply hover:bg-zinc-50/65 hover:text-zinc-900;
181
+ @apply active:bg-zinc-200/80;
182
+ @apply focus-ui;
183
+ @apply dark:border-zinc-700/50 dark:bg-zinc-900/50 dark:text-zinc-500;
184
+ @apply dark:hover:bg-zinc-800/35 dark:hover:text-zinc-300;
185
+ @apply dark:active:bg-zinc-800/95;
186
+ @apply disabled:pointer-events-none disabled:opacity-50;
187
+ }
188
+
189
+ @utility btn-segment-icon {
190
+ @apply btn-segment h-7 w-7 px-0;
191
+ }
192
+
193
+ @utility btn-input-primary {
194
+ @apply btn-input bg-white text-blue-600 border-blue-400;
195
+ @apply hover:bg-blue-50 hover:text-blue-700 hover:border-blue-500;
196
+ @apply active:bg-blue-100 active:border-blue-500;
197
+ @apply focus-visible:bg-white focus-visible:border-blue-500;
198
+ @apply dark:bg-transparent dark:text-blue-400 dark:border-blue-400;
199
+ @apply dark:hover:bg-blue-950 dark:hover:text-blue-300 dark:hover:border-blue-400;
200
+ @apply dark:active:bg-blue-900;
201
+ @apply dark:focus-visible:bg-zinc-900 dark:focus-visible:border-blue-400;
202
+ }
203
+
204
+ @utility btn-input-success {
205
+ @apply btn-input bg-white text-emerald-600 border-emerald-400;
206
+ @apply hover:bg-emerald-50 hover:text-emerald-700 hover:border-emerald-500;
207
+ @apply active:bg-emerald-100 active:border-emerald-500;
208
+ @apply focus-visible:bg-white focus-visible:border-emerald-500;
209
+ @apply dark:bg-transparent dark:text-emerald-400 dark:border-emerald-400;
210
+ @apply dark:hover:bg-emerald-950 dark:hover:text-emerald-300 dark:hover:border-emerald-400;
211
+ @apply dark:active:bg-emerald-900;
212
+ @apply dark:focus-visible:bg-zinc-900 dark:focus-visible:border-emerald-400;
213
+ }
214
+
215
+ /* Input: grey bg + matching border unfocused, white bg + blue border on focus */
216
+ @utility input {
217
+ padding: var(--ui-input-padding-y) var(--ui-input-padding-x);
218
+ border-radius: var(--ui-radius-control);
219
+ @apply border text-sm leading-5 focus-visible:outline-none;
220
+ border-color: var(--ui-field-border);
221
+ background: var(--ui-field);
222
+ @apply text-zinc-800 dark:text-zinc-200;
223
+ @apply disabled:bg-zinc-50 disabled:text-zinc-400 disabled:border-zinc-50 disabled:cursor-not-allowed;
224
+ @apply dark:disabled:bg-zinc-900 dark:disabled:text-zinc-500 dark:disabled:border-zinc-900;
225
+ @apply transition-[background-color,border-color,box-shadow] duration-150;
226
+ /* Recessed well (clip-safe). Stays recessed on focus while bg→white + blue border. */
227
+ box-shadow: var(--ui-control-recess);
228
+ &:hover {
229
+ border-color: var(--ui-field-hover-border);
230
+ background: var(--ui-field-hover);
231
+ }
232
+ &:focus,
233
+ &:focus-within {
234
+ border-color: var(--ui-field-focus-border) !important;
235
+ background: var(--ui-field-focus) !important;
236
+ }
237
+ &:disabled {
238
+ box-shadow: none;
239
+ }
240
+ &:disabled,
241
+ &:disabled:hover {
242
+ @apply bg-zinc-50 text-zinc-400 border-zinc-50 dark:bg-zinc-900 dark:text-zinc-500 dark:border-zinc-900;
243
+ }
244
+ }
245
+
246
+ @utility icon-btn {
247
+ border-radius: var(--ui-radius-control);
248
+ @apply inline-flex h-8 w-8 items-center justify-center p-1;
249
+ @apply text-zinc-400 dark:text-zinc-500;
250
+ @apply transition-[color,background-color] duration-150 ease-out;
251
+ @apply bg-transparent border-0 shadow-none;
252
+ @apply hover:text-zinc-700 hover:bg-zinc-100;
253
+ @apply dark:hover:text-zinc-200 dark:hover:bg-zinc-800;
254
+ @apply focus-ui;
255
+ @apply active:bg-zinc-200 dark:active:bg-zinc-700;
256
+ @apply disabled:cursor-not-allowed disabled:opacity-40 disabled:transition-none;
257
+ }
258
+
259
+ /* Active / pressed state — set `aria-pressed="true"` on an `icon-btn`
260
+ to mark it as the currently-selected option (active filter, toggled
261
+ toolbar mode, etc.). Same blue tint as the markdown-editor toolbar's
262
+ active state so the platform reads consistently for "this is on". */
263
+ .icon-btn[aria-pressed="true"] {
264
+ @apply text-blue-600 bg-blue-50;
265
+ @apply dark:text-blue-400 dark:bg-blue-950/40;
266
+ }
267
+
268
+ .icon-btn[aria-pressed="true"]:hover {
269
+ @apply bg-blue-100 text-blue-700;
270
+ @apply dark:bg-blue-900/40 dark:text-blue-300;
271
+ }
272
+
273
+ /* Final shared control states. Semantic roles carry hierarchy; controls avoid
274
+ decorative gloss and double focus borders. */
275
+ :is(.btn-primary, .btn-secondary, .btn-success, .btn-danger, .btn-input, .btn-input-recessed) {
276
+ box-shadow: none;
277
+ }
278
+
279
+ :is(.btn-primary, .btn-secondary, .btn-success, .btn-danger, .btn-input, .btn-input-recessed):active {
280
+ box-shadow: var(--ui-control-press);
281
+ }
282
+
283
+ :is(.btn-primary, .btn-secondary, .btn-success, .btn-danger, .btn-input, .btn-input-recessed):focus-visible {
284
+ box-shadow: var(--ui-focus);
285
+ }
286
+
287
+ :is(.btn-secondary, .btn-input, .btn-input-recessed) {
288
+ border-color: transparent;
289
+ }
290
+
291
+ .input {
292
+ box-shadow: none;
293
+ }
294
+
295
+ .input:hover {
296
+ border-color: var(--ui-border);
297
+ background: var(--ui-hover);
298
+ }
299
+
300
+ .input:focus,
301
+ .input:focus-within,
302
+ .input[data-state="open"] {
303
+ border-color: var(--ui-field-focus-border) !important;
304
+ background: var(--ui-field-focus) !important;
305
+ box-shadow: var(--ui-focus);
306
+ }
307
+
308
+ .checkbox-card {
309
+ border-color: transparent;
310
+ background: var(--ui-field);
311
+ }
312
+
313
+ .checkbox-card:hover {
314
+ border-color: var(--ui-field-hover-border);
315
+ background: var(--ui-field-hover);
316
+ }
317
+
318
+ .checkbox-card[data-state="checked"] {
319
+ border-color: transparent;
320
+ background: var(--ui-selected);
321
+ }
322
+
323
+ .checkbox-card[data-state="invalid"] {
324
+ border-color: color-mix(in srgb, var(--color-red-500) 28%, transparent);
325
+ background: color-mix(in srgb, var(--color-red-500) 7%, var(--ui-surface));
326
+ }
327
+
328
+ .file-dropzone {
329
+ border-color: var(--ui-border);
330
+ background: var(--ui-field);
331
+ }
332
+
333
+ .file-dropzone:hover {
334
+ border-color: var(--ui-field-hover-border);
335
+ background: var(--ui-field-hover);
336
+ }
337
+
338
+ .file-dropzone[data-state="dragging"] {
339
+ border-color: color-mix(in srgb, var(--color-blue-500) 32%, transparent);
340
+ background: color-mix(in srgb, var(--color-blue-500) 7%, var(--ui-surface));
341
+ }
342
+
343
+ .file-dropzone[data-state="invalid"] {
344
+ border-color: color-mix(in srgb, var(--color-red-500) 32%, transparent);
345
+ background: color-mix(in srgb, var(--color-red-500) 7%, var(--ui-surface));
346
+ }
347
+
348
+ .file-dropzone-icon {
349
+ background: var(--ui-surface-raised);
350
+ color: var(--color-zinc-600);
351
+ box-shadow: none;
352
+ }
353
+
354
+ .dark .file-dropzone-icon {
355
+ color: var(--color-zinc-300);
356
+ }
357
+
358
+ .color-input-swatch {
359
+ border-color: var(--ui-border-strong);
360
+ box-shadow: none;
361
+ }
362
+
363
+ .ui-switch-track {
364
+ background: var(--ui-field);
365
+ box-shadow: none;
366
+ }
367
+
368
+ .ui-switch-track[data-state="checked"] {
369
+ background: var(--color-blue-500);
370
+ }
371
+
372
+ .ui-slider {
373
+ box-shadow: none;
374
+ }
375
+
376
+ .image-input-preview,
377
+ .image-cropper-stage {
378
+ border-color: transparent;
379
+ background: var(--ui-field);
380
+ }
381
+
382
+ .image-input-placeholder {
383
+ background: var(--ui-surface-subtle);
384
+ }
385
+
386
+ .image-cropper-frame {
387
+ background: var(--ui-surface-subtle);
388
+ box-shadow: none;
389
+ }
390
+
391
+ .filter-chip-trigger {
392
+ border-color: transparent;
393
+ background: var(--ui-field);
394
+ box-shadow: none;
395
+ }
396
+
397
+ .filter-chip-trigger:hover {
398
+ background: var(--ui-hover);
399
+ }
400
+
401
+ .filter-chip-trigger[data-state="active"] {
402
+ border-color: transparent;
403
+ background: var(--ui-selected);
404
+ box-shadow: none;
405
+ }
@@ -0,0 +1,33 @@
1
+ /* Dense data surfaces. Colour roles stay separate from domain status and
2
+ category colours so tables remain scannable across app themes. */
3
+
4
+ @utility data-table-header {
5
+ background: var(--ui-data-header);
6
+ }
7
+
8
+ @utility data-table-divider {
9
+ border-color: var(--ui-data-divider);
10
+ }
11
+
12
+ @utility data-table-row-divider {
13
+ border-color: var(--ui-data-row-divider);
14
+ }
15
+
16
+ @utility data-table-row-hover {
17
+ &:hover {
18
+ background: var(--ui-data-row-hover);
19
+ }
20
+ }
21
+
22
+ @utility data-table-row-selected {
23
+ background: var(--ui-data-row-selected);
24
+ }
25
+
26
+ @utility data-table-column-hover {
27
+ background: var(--ui-data-column-hover);
28
+ }
29
+
30
+ [aria-label="Data table"] {
31
+ border-color: var(--ui-border);
32
+ box-shadow: none;
33
+ }
@@ -0,0 +1,232 @@
1
+ /* Feedback blocks, badges, and chips. */
2
+ @utility status-dot {
3
+ @apply w-2 h-2 rounded-full shrink-0;
4
+ }
5
+
6
+ @utility badge {
7
+ @apply rounded inline-flex items-center gap-1 px-1.5 py-0.5 text-xs;
8
+ }
9
+
10
+ /*
11
+ * Tone modifiers. Four apps were already asking for these — a status badge is
12
+ * the one place a colour carries the whole meaning — but only the shape utility
13
+ * above existed, so every `badge badge-success` rendered in body text and no
14
+ * status anywhere was distinguishable by colour.
15
+ */
16
+ @utility badge-neutral {
17
+ @apply badge;
18
+ @apply bg-zinc-100 text-zinc-700 dark:bg-zinc-800 dark:text-zinc-300;
19
+ }
20
+
21
+ @utility badge-success {
22
+ @apply badge;
23
+ @apply bg-emerald-100 text-emerald-800 dark:bg-emerald-950 dark:text-emerald-300;
24
+ }
25
+
26
+ @utility badge-warning {
27
+ @apply badge;
28
+ @apply bg-amber-100 text-amber-800 dark:bg-amber-950 dark:text-amber-300;
29
+ }
30
+
31
+ @utility badge-danger {
32
+ @apply badge;
33
+ @apply bg-red-100 text-red-800 dark:bg-red-950 dark:text-red-300;
34
+ }
35
+
36
+ /** Smaller variant for dense rows; tone-independent. */
37
+ @utility badge-sm {
38
+ @apply px-1 py-0 text-[0.6875rem];
39
+ }
40
+
41
+ @utility chip {
42
+ border-radius: var(--ui-radius-surface);
43
+ @apply inline-flex items-center gap-1.5 text-xs transition-colors cursor-pointer px-2 py-1;
44
+ @apply border border-zinc-200 dark:border-zinc-700;
45
+ }
46
+
47
+ @utility thumbnail {
48
+ border-radius: var(--ui-radius-surface);
49
+ @apply overflow-hidden;
50
+ }
51
+
52
+ @utility popup {
53
+ border: 1px solid var(--ui-border-strong);
54
+ border-radius: var(--ui-radius-surface);
55
+ background: var(--ui-surface);
56
+ @apply text-zinc-900 dark:text-zinc-100;
57
+ /* Floating layer (portaled) — outer shadow is fine here. */
58
+ box-shadow: var(--ui-shadow-float);
59
+ }
60
+
61
+ @utility context-menu-surface {
62
+ border: 0;
63
+ border-radius: var(--ui-context-menu-radius);
64
+ background: var(--ui-context-menu-surface);
65
+ box-shadow: var(--ui-context-menu-shadow);
66
+ }
67
+
68
+ @utility dropdown-menu-surface {
69
+ border: 0;
70
+ border-radius: var(--ui-dropdown-menu-radius);
71
+ background: var(--ui-dropdown-menu-surface);
72
+ box-shadow: var(--ui-dropdown-menu-shadow);
73
+ backdrop-filter: blur(14px) saturate(1.12);
74
+ -webkit-backdrop-filter: blur(14px) saturate(1.12);
75
+ }
76
+
77
+ @utility menu-item {
78
+ @apply flex w-full items-center gap-3 rounded-md px-3 py-2 text-left text-sm transition-colors;
79
+
80
+ &:hover,
81
+ &:focus-visible {
82
+ background: var(--ui-menu-hover);
83
+ }
84
+ }
85
+
86
+ @utility menu-section {
87
+ @apply mt-1 pt-1;
88
+ }
89
+
90
+ @utility menu-label {
91
+ @apply px-4 pt-3 pb-1 text-xs font-medium uppercase tracking-wider text-zinc-500;
92
+ }
93
+
94
+ @utility state-placeholder-icon {
95
+ @apply flex shrink-0 items-center justify-center text-zinc-400 dark:text-zinc-500;
96
+ }
97
+
98
+ @utility state-placeholder-icon-panel {
99
+ width: 3rem;
100
+ height: 3rem;
101
+ border: 1px solid var(--ui-state-icon-border);
102
+ border-radius: var(--ui-radius-surface);
103
+ background: var(--ui-state-icon-surface);
104
+ }
105
+
106
+ @utility state-placeholder-icon-error {
107
+ border-color: var(--ui-state-error-icon-border);
108
+ background: var(--ui-state-error-icon-surface);
109
+ @apply text-red-600 dark:text-red-400;
110
+ }
111
+
112
+ @utility progress-track {
113
+ background: var(--ui-progress-track);
114
+ box-shadow: var(--ui-progress-track-shadow);
115
+ }
116
+
117
+ @utility progress-fill-primary {
118
+ background: var(--ui-progress-primary);
119
+ }
120
+
121
+ @utility progress-fill-success {
122
+ background: var(--ui-progress-success);
123
+ }
124
+
125
+ @utility progress-fill-danger {
126
+ background: var(--ui-progress-danger);
127
+ }
128
+
129
+ @utility tooltip-surface {
130
+ position: fixed;
131
+ z-index: 100;
132
+ max-width: min(18rem, calc(100vw - 1rem));
133
+ padding: 0.25rem 0.5rem;
134
+ border: 1px solid var(--ui-tooltip-border);
135
+ border-radius: var(--ui-tooltip-radius);
136
+ background: var(--ui-tooltip-surface);
137
+ color: var(--ui-tooltip-text);
138
+ box-shadow: var(--ui-tooltip-shadow);
139
+ @apply pointer-events-auto text-[11px] leading-4 whitespace-normal;
140
+ }
141
+
142
+ @utility tag {
143
+ @apply rounded-full inline-flex items-center gap-1 px-1.5 py-0.5 text-[11px] leading-4 font-medium;
144
+ }
145
+
146
+ /* Stat cards are component-owned by StatGrid/StatCell. See
147
+ `skills/cloud-app/references/frontend.md` § Stats and the live demos in
148
+ the Fibel UI catalog. Do not reintroduce
149
+ the earlier `.stat-grid / .stat-cell / .stat-value / .stat-label / .stat-sub`
150
+ utilities; app code should import the shared components instead. */
151
+
152
+ .menu-item {
153
+ gap: 0.625rem;
154
+ padding: 0.4375rem 0.75rem;
155
+ font-size: 0.8125rem;
156
+ }
157
+
158
+ .menu-label {
159
+ padding: 0.625rem 0.75rem 0.25rem;
160
+ font-size: 0.625rem;
161
+ letter-spacing: 0.06em;
162
+ }
163
+
164
+ .state-placeholder[data-variant="panel"] {
165
+ min-height: 13rem;
166
+ padding: 1.5rem;
167
+ }
168
+
169
+ .state-placeholder-icon-panel {
170
+ width: 2.5rem;
171
+ height: 2.5rem;
172
+ border-radius: var(--ui-radius-control);
173
+ }
174
+
175
+ .prompt-panel,
176
+ .prompt-search-surface {
177
+ border: 1px solid var(--ui-dialog-border);
178
+ border-radius: var(--ui-dialog-radius);
179
+ background: var(--ui-dialog-surface);
180
+ box-shadow: var(--ui-shadow-float) !important;
181
+ }
182
+
183
+ .prompt-search-surface {
184
+ --prompt-search-focus-accent: var(--color-blue-500);
185
+ }
186
+
187
+ .dark .prompt-search-surface {
188
+ --prompt-search-focus-accent: var(--color-blue-400);
189
+ }
190
+
191
+ .prompt-panel-danger {
192
+ border-color: color-mix(in srgb, var(--color-red-500) 28%, var(--ui-dialog-border));
193
+ }
194
+
195
+ .prompt-panel-success {
196
+ border-color: color-mix(in srgb, var(--color-green-500) 24%, var(--ui-dialog-border));
197
+ }
198
+
199
+ .prompt-search-surface > label {
200
+ background: var(--ui-field);
201
+ }
202
+
203
+ .prompt-search-surface > label:focus-within {
204
+ background: color-mix(in srgb, var(--prompt-search-focus-accent) 4%, var(--ui-field-focus));
205
+ box-shadow: none;
206
+ }
207
+
208
+ .prompt-search-surface > label > i {
209
+ transition: color 150ms ease-out;
210
+ }
211
+
212
+ .prompt-search-surface > label:focus-within > i {
213
+ color: var(--prompt-search-focus-accent);
214
+ }
215
+
216
+ .prompt-search-surface input {
217
+ caret-color: var(--prompt-search-focus-accent);
218
+ }
219
+
220
+ @media (forced-colors: active) {
221
+ .prompt-search-surface:focus-within {
222
+ outline: 2px solid CanvasText;
223
+ outline-offset: -2px;
224
+ }
225
+ }
226
+
227
+ #ui-toast-container > div {
228
+ border: 1px solid var(--ui-border-strong);
229
+ border-radius: var(--ui-radius-surface);
230
+ background: var(--ui-surface-raised);
231
+ box-shadow: var(--ui-shadow-float) !important;
232
+ }