@softov/scena 0.1.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 (496) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +42 -0
  3. package/dist/controls/command.d.ts +18 -0
  4. package/dist/controls/command.js +150 -0
  5. package/dist/controls/events.d.ts +3 -0
  6. package/dist/controls/events.js +43 -0
  7. package/dist/controls/index.d.ts +10 -0
  8. package/dist/controls/index.js +10 -0
  9. package/dist/controls/keybinding.d.ts +9 -0
  10. package/dist/controls/keybinding.js +94 -0
  11. package/dist/controls/layout.d.ts +16 -0
  12. package/dist/controls/layout.js +201 -0
  13. package/dist/controls/manifest.d.ts +21 -0
  14. package/dist/controls/manifest.js +219 -0
  15. package/dist/controls/session.d.ts +16 -0
  16. package/dist/controls/session.js +95 -0
  17. package/dist/controls/shell.d.ts +8 -0
  18. package/dist/controls/shell.js +48 -0
  19. package/dist/controls/storage/layout-local.d.ts +6 -0
  20. package/dist/controls/storage/layout-local.js +47 -0
  21. package/dist/controls/storage/session-local.d.ts +5 -0
  22. package/dist/controls/storage/session-local.js +38 -0
  23. package/dist/controls/when.d.ts +7 -0
  24. package/dist/controls/when.js +226 -0
  25. package/dist/converters/a2ui-v0.10.d.ts +23 -0
  26. package/dist/converters/a2ui-v0.10.js +136 -0
  27. package/dist/converters/index.d.ts +1 -0
  28. package/dist/converters/index.js +1 -0
  29. package/dist/core/backends/modus-backend.d.ts +13 -0
  30. package/dist/core/backends/modus-backend.js +115 -0
  31. package/dist/core/backends/storage-backend.d.ts +7 -0
  32. package/dist/core/backends/storage-backend.js +73 -0
  33. package/dist/core/backends/yjs-backend.d.ts +3 -0
  34. package/dist/core/backends/yjs-backend.js +44 -0
  35. package/dist/core/binding-resolver.d.ts +7 -0
  36. package/dist/core/binding-resolver.js +106 -0
  37. package/dist/core/component-graph.d.ts +6 -0
  38. package/dist/core/component-graph.js +77 -0
  39. package/dist/core/component-registry.d.ts +7 -0
  40. package/dist/core/component-registry.js +87 -0
  41. package/dist/core/computed-dsl.d.ts +2 -0
  42. package/dist/core/computed-dsl.js +267 -0
  43. package/dist/core/converter-registry.d.ts +2 -0
  44. package/dist/core/converter-registry.js +37 -0
  45. package/dist/core/disposable.d.ts +3 -0
  46. package/dist/core/disposable.js +19 -0
  47. package/dist/core/dynamic-resolver.d.ts +12 -0
  48. package/dist/core/dynamic-resolver.js +134 -0
  49. package/dist/core/index.d.ts +44 -0
  50. package/dist/core/index.js +48 -0
  51. package/dist/core/label.d.ts +2 -0
  52. package/dist/core/label.js +14 -0
  53. package/dist/core/mount-menu.d.ts +2 -0
  54. package/dist/core/mount-menu.js +23 -0
  55. package/dist/core/mount-surface.d.ts +15 -0
  56. package/dist/core/mount-surface.js +214 -0
  57. package/dist/core/path-resolver.d.ts +14 -0
  58. package/dist/core/path-resolver.js +169 -0
  59. package/dist/core/permissions.d.ts +2 -0
  60. package/dist/core/permissions.js +50 -0
  61. package/dist/core/reactive-store.d.ts +17 -0
  62. package/dist/core/reactive-store.js +496 -0
  63. package/dist/core/scena.d.ts +2 -0
  64. package/dist/core/scena.js +115 -0
  65. package/dist/core/surface-presentation.d.ts +6 -0
  66. package/dist/core/surface-presentation.js +12 -0
  67. package/dist/i18n/i18n-backend.d.ts +2 -0
  68. package/dist/i18n/i18n-backend.js +35 -0
  69. package/dist/i18n/registry.d.ts +32 -0
  70. package/dist/i18n/registry.js +200 -0
  71. package/dist/porta/Limen.css +50 -0
  72. package/dist/porta/Limen.d.ts +16 -0
  73. package/dist/porta/Limen.js +14 -0
  74. package/dist/porta/PortaContext.d.ts +10 -0
  75. package/dist/porta/PortaContext.js +20 -0
  76. package/dist/porta/PortaLock.css +14 -0
  77. package/dist/porta/PortaLock.d.ts +10 -0
  78. package/dist/porta/PortaLock.js +13 -0
  79. package/dist/porta/SigillumGate.d.ts +8 -0
  80. package/dist/porta/SigillumGate.js +7 -0
  81. package/dist/porta/commands.d.ts +3 -0
  82. package/dist/porta/commands.js +125 -0
  83. package/dist/porta/index.d.ts +18 -0
  84. package/dist/porta/index.js +22 -0
  85. package/dist/porta/login-form.block.d.ts +2 -0
  86. package/dist/porta/login-form.block.js +7 -0
  87. package/dist/porta/match.d.ts +2 -0
  88. package/dist/porta/match.js +20 -0
  89. package/dist/porta/provider.d.ts +59 -0
  90. package/dist/porta/provider.js +1 -0
  91. package/dist/porta/providers/examples/google-oauth.d.ts +6 -0
  92. package/dist/porta/providers/examples/google-oauth.js +21 -0
  93. package/dist/porta/providers/examples/index.d.ts +6 -0
  94. package/dist/porta/providers/examples/index.js +3 -0
  95. package/dist/porta/providers/examples/magic-link.d.ts +8 -0
  96. package/dist/porta/providers/examples/magic-link.js +31 -0
  97. package/dist/porta/providers/examples/sms-otp.d.ts +9 -0
  98. package/dist/porta/providers/examples/sms-otp.js +31 -0
  99. package/dist/porta/providers/password.d.ts +12 -0
  100. package/dist/porta/providers/password.js +46 -0
  101. package/dist/porta/register-blocks.d.ts +3 -0
  102. package/dist/porta/register-blocks.js +31 -0
  103. package/dist/porta/register.d.ts +15 -0
  104. package/dist/porta/register.js +31 -0
  105. package/dist/porta/sigillum.d.ts +19 -0
  106. package/dist/porta/sigillum.js +41 -0
  107. package/dist/react/DefaultShell.d.ts +1 -0
  108. package/dist/react/DefaultShell.js +37 -0
  109. package/dist/react/Scena.d.ts +9 -0
  110. package/dist/react/Scena.js +20 -0
  111. package/dist/react/ScenaProvider.d.ts +8 -0
  112. package/dist/react/ScenaProvider.js +13 -0
  113. package/dist/react/ShellSplitter.d.ts +13 -0
  114. package/dist/react/ShellSplitter.js +88 -0
  115. package/dist/react/SurfaceArea.d.ts +13 -0
  116. package/dist/react/SurfaceArea.js +75 -0
  117. package/dist/react/Translate.d.ts +8 -0
  118. package/dist/react/Translate.js +10 -0
  119. package/dist/react/ViewMount.d.ts +12 -0
  120. package/dist/react/ViewMount.js +268 -0
  121. package/dist/react/core.d.ts +6 -0
  122. package/dist/react/core.js +10 -0
  123. package/dist/react/hooks/useCommand.d.ts +1 -0
  124. package/dist/react/hooks/useCommand.js +6 -0
  125. package/dist/react/hooks/useI18n.d.ts +9 -0
  126. package/dist/react/hooks/useI18n.js +16 -0
  127. package/dist/react/hooks/useLabel.d.ts +2 -0
  128. package/dist/react/hooks/useLabel.js +19 -0
  129. package/dist/react/hooks/useLayout.d.ts +2 -0
  130. package/dist/react/hooks/useLayout.js +10 -0
  131. package/dist/react/hooks/useMounts.d.ts +2 -0
  132. package/dist/react/hooks/useMounts.js +17 -0
  133. package/dist/react/hooks/useStore.d.ts +3 -0
  134. package/dist/react/hooks/useStore.js +40 -0
  135. package/dist/react/hooks/useStoreLabel.d.ts +3 -0
  136. package/dist/react/hooks/useStoreLabel.js +25 -0
  137. package/dist/react/hooks/useSurfacePresentation.d.ts +4 -0
  138. package/dist/react/hooks/useSurfacePresentation.js +16 -0
  139. package/dist/react/index.d.ts +20 -0
  140. package/dist/react/index.js +20 -0
  141. package/dist/react/mount-context.d.ts +8 -0
  142. package/dist/react/mount-context.js +20 -0
  143. package/dist/react/useSurfaceResize.d.ts +39 -0
  144. package/dist/react/useSurfaceResize.js +135 -0
  145. package/dist/runtime/args-schema.d.ts +11 -0
  146. package/dist/runtime/args-schema.js +45 -0
  147. package/dist/runtime/builtins.d.ts +3 -0
  148. package/dist/runtime/builtins.js +193 -0
  149. package/dist/runtime/client-handlers.d.ts +3 -0
  150. package/dist/runtime/client-handlers.js +19 -0
  151. package/dist/runtime/in-memory-socket.d.ts +7 -0
  152. package/dist/runtime/in-memory-socket.js +53 -0
  153. package/dist/runtime/index.d.ts +10 -0
  154. package/dist/runtime/index.js +7 -0
  155. package/dist/runtime/layout-commands.d.ts +5 -0
  156. package/dist/runtime/layout-commands.js +548 -0
  157. package/dist/runtime/opener-commands.d.ts +17 -0
  158. package/dist/runtime/opener-commands.js +96 -0
  159. package/dist/runtime/surface-bridge.d.ts +15 -0
  160. package/dist/runtime/surface-bridge.js +116 -0
  161. package/dist/styles/bar.css +155 -0
  162. package/dist/styles/base.css +285 -0
  163. package/dist/styles/geometry.css +32 -0
  164. package/dist/styles/index.d.ts +29 -0
  165. package/dist/styles/index.js +109 -0
  166. package/dist/styles/scrollbar.css +45 -0
  167. package/dist/styles/surface.css +179 -0
  168. package/dist/styles/theme.css +3 -0
  169. package/dist/styles/themes/dark.css +30 -0
  170. package/dist/styles/themes/light.css +1 -0
  171. package/dist/styles/themes/tokens.css +222 -0
  172. package/dist/types/binding-resolver.d.ts +30 -0
  173. package/dist/types/binding-resolver.js +1 -0
  174. package/dist/types/colors.d.ts +7 -0
  175. package/dist/types/colors.js +59 -0
  176. package/dist/types/command.d.ts +62 -0
  177. package/dist/types/command.js +1 -0
  178. package/dist/types/component-graph.d.ts +72 -0
  179. package/dist/types/component-graph.js +40 -0
  180. package/dist/types/component-registry.d.ts +70 -0
  181. package/dist/types/component-registry.js +1 -0
  182. package/dist/types/converter-registry.d.ts +17 -0
  183. package/dist/types/converter-registry.js +1 -0
  184. package/dist/types/disposable.d.ts +3 -0
  185. package/dist/types/disposable.js +1 -0
  186. package/dist/types/events.d.ts +75 -0
  187. package/dist/types/events.js +1 -0
  188. package/dist/types/host.d.ts +50 -0
  189. package/dist/types/host.js +1 -0
  190. package/dist/types/index.d.ts +23 -0
  191. package/dist/types/index.js +23 -0
  192. package/dist/types/keybinding.d.ts +36 -0
  193. package/dist/types/keybinding.js +1 -0
  194. package/dist/types/label.d.ts +9 -0
  195. package/dist/types/label.js +1 -0
  196. package/dist/types/layout.d.ts +117 -0
  197. package/dist/types/layout.js +1 -0
  198. package/dist/types/manifest.d.ts +152 -0
  199. package/dist/types/manifest.js +1 -0
  200. package/dist/types/mount-menu.d.ts +8 -0
  201. package/dist/types/mount-menu.js +1 -0
  202. package/dist/types/mount-surface.d.ts +87 -0
  203. package/dist/types/mount-surface.js +1 -0
  204. package/dist/types/permissions.d.ts +18 -0
  205. package/dist/types/permissions.js +1 -0
  206. package/dist/types/query.d.ts +34 -0
  207. package/dist/types/query.js +7 -0
  208. package/dist/types/reactive-store.d.ts +39 -0
  209. package/dist/types/reactive-store.js +1 -0
  210. package/dist/types/scena.d.ts +53 -0
  211. package/dist/types/scena.js +1 -0
  212. package/dist/types/scope-backend.d.ts +16 -0
  213. package/dist/types/scope-backend.js +1 -0
  214. package/dist/types/session.d.ts +39 -0
  215. package/dist/types/session.js +1 -0
  216. package/dist/types/shell.d.ts +21 -0
  217. package/dist/types/shell.js +1 -0
  218. package/dist/types/when.d.ts +10 -0
  219. package/dist/types/when.js +1 -0
  220. package/dist/ui/_utils.d.ts +8 -0
  221. package/dist/ui/_utils.js +53 -0
  222. package/dist/ui/campus/CampusMappa.d.ts +18 -0
  223. package/dist/ui/campus/CampusMappa.js +106 -0
  224. package/dist/ui/campus/CampusNodus.d.ts +25 -0
  225. package/dist/ui/campus/CampusNodus.js +211 -0
  226. package/dist/ui/campus/CampusStratum.d.ts +13 -0
  227. package/dist/ui/campus/CampusStratum.js +20 -0
  228. package/dist/ui/campus/CampusVelum.d.ts +7 -0
  229. package/dist/ui/campus/CampusVelum.js +12 -0
  230. package/dist/ui/campus/CampusView.d.ts +27 -0
  231. package/dist/ui/campus/CampusView.js +420 -0
  232. package/dist/ui/campus/context.d.ts +13 -0
  233. package/dist/ui/campus/context.js +12 -0
  234. package/dist/ui/campus/index.d.ts +14 -0
  235. package/dist/ui/campus/index.js +11 -0
  236. package/dist/ui/campus/stratum-context.d.ts +2 -0
  237. package/dist/ui/campus/stratum-context.js +10 -0
  238. package/dist/ui/campus/types.d.ts +47 -0
  239. package/dist/ui/campus/types.js +4 -0
  240. package/dist/ui/chart/BarChart.css +53 -0
  241. package/dist/ui/chart/BarChart.d.ts +24 -0
  242. package/dist/ui/chart/BarChart.js +32 -0
  243. package/dist/ui/chart/Donut.css +15 -0
  244. package/dist/ui/chart/Donut.d.ts +15 -0
  245. package/dist/ui/chart/Donut.js +18 -0
  246. package/dist/ui/chart/LineChart.css +8 -0
  247. package/dist/ui/chart/LineChart.d.ts +24 -0
  248. package/dist/ui/chart/LineChart.js +29 -0
  249. package/dist/ui/chart/catalog.d.ts +2 -0
  250. package/dist/ui/chart/catalog.js +7 -0
  251. package/dist/ui/chart/index.d.ts +6 -0
  252. package/dist/ui/chart/index.js +4 -0
  253. package/dist/ui/control/Button.css +7 -0
  254. package/dist/ui/control/Button.d.ts +17 -0
  255. package/dist/ui/control/Button.js +17 -0
  256. package/dist/ui/control/CheckBox.css +16 -0
  257. package/dist/ui/control/CheckBox.d.ts +15 -0
  258. package/dist/ui/control/CheckBox.js +23 -0
  259. package/dist/ui/control/Checks.css +6 -0
  260. package/dist/ui/control/Checks.d.ts +9 -0
  261. package/dist/ui/control/Checks.js +10 -0
  262. package/dist/ui/control/ChoicePicker.css +16 -0
  263. package/dist/ui/control/ChoicePicker.d.ts +25 -0
  264. package/dist/ui/control/ChoicePicker.js +38 -0
  265. package/dist/ui/control/DateTimeInput.css +1 -0
  266. package/dist/ui/control/DateTimeInput.d.ts +22 -0
  267. package/dist/ui/control/DateTimeInput.js +41 -0
  268. package/dist/ui/control/LocaleToggle.css +38 -0
  269. package/dist/ui/control/LocaleToggle.d.ts +11 -0
  270. package/dist/ui/control/LocaleToggle.js +23 -0
  271. package/dist/ui/control/ReloadButton.d.ts +6 -0
  272. package/dist/ui/control/ReloadButton.js +9 -0
  273. package/dist/ui/control/Slider.css +2 -0
  274. package/dist/ui/control/Slider.d.ts +21 -0
  275. package/dist/ui/control/Slider.js +37 -0
  276. package/dist/ui/control/TextField.css +0 -0
  277. package/dist/ui/control/TextField.d.ts +25 -0
  278. package/dist/ui/control/TextField.js +36 -0
  279. package/dist/ui/control/_field-parts.css +102 -0
  280. package/dist/ui/control/_field-parts.d.ts +15 -0
  281. package/dist/ui/control/_field-parts.js +17 -0
  282. package/dist/ui/control/catalog.d.ts +2 -0
  283. package/dist/ui/control/catalog.js +10 -0
  284. package/dist/ui/control/index.d.ts +13 -0
  285. package/dist/ui/control/index.js +11 -0
  286. package/dist/ui/data/DataTable.d.ts +19 -0
  287. package/dist/ui/data/DataTable.js +20 -0
  288. package/dist/ui/data/Filter.d.ts +13 -0
  289. package/dist/ui/data/Filter.js +56 -0
  290. package/dist/ui/data/List.css +16 -0
  291. package/dist/ui/data/List.d.ts +15 -0
  292. package/dist/ui/data/List.js +18 -0
  293. package/dist/ui/data/Listable.css +245 -0
  294. package/dist/ui/data/Listable.d.ts +60 -0
  295. package/dist/ui/data/Listable.js +209 -0
  296. package/dist/ui/data/Pagination.d.ts +5 -0
  297. package/dist/ui/data/Pagination.js +43 -0
  298. package/dist/ui/data/Tree.css +118 -0
  299. package/dist/ui/data/Tree.d.ts +45 -0
  300. package/dist/ui/data/Tree.js +170 -0
  301. package/dist/ui/data/catalog.d.ts +2 -0
  302. package/dist/ui/data/catalog.js +7 -0
  303. package/dist/ui/data/index.d.ts +11 -0
  304. package/dist/ui/data/index.js +7 -0
  305. package/dist/ui/display/AddPlaceholder.d.ts +6 -0
  306. package/dist/ui/display/AddPlaceholder.js +24 -0
  307. package/dist/ui/display/Alert.css +42 -0
  308. package/dist/ui/display/Alert.d.ts +14 -0
  309. package/dist/ui/display/Alert.js +13 -0
  310. package/dist/ui/display/Avatar.css +19 -0
  311. package/dist/ui/display/Avatar.d.ts +16 -0
  312. package/dist/ui/display/Avatar.js +52 -0
  313. package/dist/ui/display/Badge.css +26 -0
  314. package/dist/ui/display/Badge.d.ts +16 -0
  315. package/dist/ui/display/Badge.js +9 -0
  316. package/dist/ui/display/Card.css +15 -0
  317. package/dist/ui/display/Card.d.ts +11 -0
  318. package/dist/ui/display/Card.js +8 -0
  319. package/dist/ui/display/DetailContainer.d.ts +6 -0
  320. package/dist/ui/display/DetailContainer.js +7 -0
  321. package/dist/ui/display/DetailHeader.css +53 -0
  322. package/dist/ui/display/DetailHeader.d.ts +22 -0
  323. package/dist/ui/display/DetailHeader.js +8 -0
  324. package/dist/ui/display/DetailList.css +26 -0
  325. package/dist/ui/display/DetailList.d.ts +13 -0
  326. package/dist/ui/display/DetailList.js +5 -0
  327. package/dist/ui/display/DetailNotFound.d.ts +17 -0
  328. package/dist/ui/display/DetailNotFound.js +39 -0
  329. package/dist/ui/display/Divider.css +6 -0
  330. package/dist/ui/display/Divider.d.ts +8 -0
  331. package/dist/ui/display/Divider.js +16 -0
  332. package/dist/ui/display/Divisor.css +30 -0
  333. package/dist/ui/display/Divisor.d.ts +11 -0
  334. package/dist/ui/display/Divisor.js +43 -0
  335. package/dist/ui/display/Icon.css +10 -0
  336. package/dist/ui/display/Icon.d.ts +14 -0
  337. package/dist/ui/display/Icon.js +144 -0
  338. package/dist/ui/display/Image.css +1 -0
  339. package/dist/ui/display/Image.d.ts +16 -0
  340. package/dist/ui/display/Image.js +19 -0
  341. package/dist/ui/display/Markdown.css +38 -0
  342. package/dist/ui/display/Markdown.d.ts +8 -0
  343. package/dist/ui/display/Markdown.js +140 -0
  344. package/dist/ui/display/Progress.css +39 -0
  345. package/dist/ui/display/Progress.d.ts +15 -0
  346. package/dist/ui/display/Progress.js +17 -0
  347. package/dist/ui/display/SectionTitle.d.ts +6 -0
  348. package/dist/ui/display/SectionTitle.js +6 -0
  349. package/dist/ui/display/Skeleton.css +20 -0
  350. package/dist/ui/display/Skeleton.d.ts +11 -0
  351. package/dist/ui/display/Skeleton.js +11 -0
  352. package/dist/ui/display/Spinner.css +20 -0
  353. package/dist/ui/display/Spinner.d.ts +12 -0
  354. package/dist/ui/display/Spinner.js +12 -0
  355. package/dist/ui/display/Svg.d.ts +13 -0
  356. package/dist/ui/display/Svg.js +17 -0
  357. package/dist/ui/display/Text.css +20 -0
  358. package/dist/ui/display/Text.d.ts +13 -0
  359. package/dist/ui/display/Text.js +15 -0
  360. package/dist/ui/display/catalog.d.ts +2 -0
  361. package/dist/ui/display/catalog.js +12 -0
  362. package/dist/ui/display/index.d.ts +22 -0
  363. package/dist/ui/display/index.js +14 -0
  364. package/dist/ui/embed/HtmlEmbed.d.ts +12 -0
  365. package/dist/ui/embed/HtmlEmbed.js +16 -0
  366. package/dist/ui/embed/index.d.ts +2 -0
  367. package/dist/ui/embed/index.js +1 -0
  368. package/dist/ui/forms/DangerZone.d.ts +8 -0
  369. package/dist/ui/forms/DangerZone.js +31 -0
  370. package/dist/ui/forms/Field.css +15 -0
  371. package/dist/ui/forms/Field.d.ts +28 -0
  372. package/dist/ui/forms/Field.js +25 -0
  373. package/dist/ui/forms/FieldGroup.css +15 -0
  374. package/dist/ui/forms/FieldGroup.d.ts +7 -0
  375. package/dist/ui/forms/FieldGroup.js +7 -0
  376. package/dist/ui/forms/Form.css +14 -0
  377. package/dist/ui/forms/Form.d.ts +18 -0
  378. package/dist/ui/forms/Form.js +17 -0
  379. package/dist/ui/forms/FormActions.css +11 -0
  380. package/dist/ui/forms/FormActions.d.ts +18 -0
  381. package/dist/ui/forms/FormActions.js +10 -0
  382. package/dist/ui/forms/FormSection.css +19 -0
  383. package/dist/ui/forms/FormSection.d.ts +7 -0
  384. package/dist/ui/forms/FormSection.js +7 -0
  385. package/dist/ui/forms/LoginForm.css +105 -0
  386. package/dist/ui/forms/LoginForm.d.ts +12 -0
  387. package/dist/ui/forms/LoginForm.js +137 -0
  388. package/dist/ui/forms/SchemaForm.css +81 -0
  389. package/dist/ui/forms/SchemaForm.d.ts +26 -0
  390. package/dist/ui/forms/SchemaForm.js +186 -0
  391. package/dist/ui/forms/SettingsContainer.d.ts +8 -0
  392. package/dist/ui/forms/SettingsContainer.js +8 -0
  393. package/dist/ui/forms/catalog.d.ts +2 -0
  394. package/dist/ui/forms/catalog.js +11 -0
  395. package/dist/ui/forms/index.d.ts +19 -0
  396. package/dist/ui/forms/index.js +12 -0
  397. package/dist/ui/forms/schema-walk.d.ts +50 -0
  398. package/dist/ui/forms/schema-walk.js +116 -0
  399. package/dist/ui/index.d.ts +58 -0
  400. package/dist/ui/index.js +63 -0
  401. package/dist/ui/layout/BarLayout.d.ts +2 -0
  402. package/dist/ui/layout/BarLayout.js +18 -0
  403. package/dist/ui/layout/Column.css +6 -0
  404. package/dist/ui/layout/Column.d.ts +12 -0
  405. package/dist/ui/layout/Column.js +13 -0
  406. package/dist/ui/layout/FloatingLayout.d.ts +2 -0
  407. package/dist/ui/layout/FloatingLayout.js +12 -0
  408. package/dist/ui/layout/Grid.css +5 -0
  409. package/dist/ui/layout/Grid.d.ts +13 -0
  410. package/dist/ui/layout/Grid.js +19 -0
  411. package/dist/ui/layout/InlineLayout.d.ts +2 -0
  412. package/dist/ui/layout/InlineLayout.js +13 -0
  413. package/dist/ui/layout/MountTitle.d.ts +12 -0
  414. package/dist/ui/layout/MountTitle.js +42 -0
  415. package/dist/ui/layout/RailLayout.d.ts +2 -0
  416. package/dist/ui/layout/RailLayout.js +38 -0
  417. package/dist/ui/layout/Row.css +16 -0
  418. package/dist/ui/layout/Row.d.ts +13 -0
  419. package/dist/ui/layout/Row.js +21 -0
  420. package/dist/ui/layout/SectionHeader.d.ts +10 -0
  421. package/dist/ui/layout/SectionHeader.js +65 -0
  422. package/dist/ui/layout/SingleLayout.d.ts +2 -0
  423. package/dist/ui/layout/SingleLayout.js +25 -0
  424. package/dist/ui/layout/SpatialCard.d.ts +9 -0
  425. package/dist/ui/layout/SpatialCard.js +30 -0
  426. package/dist/ui/layout/SpatialLayout.d.ts +2 -0
  427. package/dist/ui/layout/SpatialLayout.js +446 -0
  428. package/dist/ui/layout/SplitLayout.d.ts +2 -0
  429. package/dist/ui/layout/SplitLayout.js +159 -0
  430. package/dist/ui/layout/Splitter.d.ts +12 -0
  431. package/dist/ui/layout/Splitter.js +64 -0
  432. package/dist/ui/layout/StackHeader.d.ts +9 -0
  433. package/dist/ui/layout/StackHeader.js +87 -0
  434. package/dist/ui/layout/StackLayout.d.ts +2 -0
  435. package/dist/ui/layout/StackLayout.js +137 -0
  436. package/dist/ui/layout/TabLayout.d.ts +2 -0
  437. package/dist/ui/layout/TabLayout.js +145 -0
  438. package/dist/ui/layout/TabPanelLayout.d.ts +20 -0
  439. package/dist/ui/layout/TabPanelLayout.js +615 -0
  440. package/dist/ui/layout/catalog.d.ts +2 -0
  441. package/dist/ui/layout/catalog.js +10 -0
  442. package/dist/ui/layout/index.d.ts +17 -0
  443. package/dist/ui/layout/index.js +17 -0
  444. package/dist/ui/layout/register.d.ts +3 -0
  445. package/dist/ui/layout/register.js +25 -0
  446. package/dist/ui/media/Audio.css +1 -0
  447. package/dist/ui/media/Audio.d.ts +12 -0
  448. package/dist/ui/media/Audio.js +8 -0
  449. package/dist/ui/media/Video.css +1 -0
  450. package/dist/ui/media/Video.d.ts +16 -0
  451. package/dist/ui/media/Video.js +9 -0
  452. package/dist/ui/media/catalog.d.ts +2 -0
  453. package/dist/ui/media/catalog.js +5 -0
  454. package/dist/ui/media/index.d.ts +2 -0
  455. package/dist/ui/media/index.js +3 -0
  456. package/dist/ui/menu/ActionList.css +262 -0
  457. package/dist/ui/menu/ActionList.d.ts +19 -0
  458. package/dist/ui/menu/ActionList.js +369 -0
  459. package/dist/ui/menu/ContainerMenu.d.ts +13 -0
  460. package/dist/ui/menu/ContainerMenu.js +57 -0
  461. package/dist/ui/menu/ContextMenu.d.ts +27 -0
  462. package/dist/ui/menu/ContextMenu.js +93 -0
  463. package/dist/ui/menu/index.d.ts +10 -0
  464. package/dist/ui/menu/index.js +7 -0
  465. package/dist/ui/menu/token.d.ts +22 -0
  466. package/dist/ui/menu/token.js +145 -0
  467. package/dist/ui/menu/useChatPicker.d.ts +24 -0
  468. package/dist/ui/menu/useChatPicker.js +210 -0
  469. package/dist/ui/navigation/Breadcrumb.css +30 -0
  470. package/dist/ui/navigation/Breadcrumb.d.ts +14 -0
  471. package/dist/ui/navigation/Breadcrumb.js +12 -0
  472. package/dist/ui/navigation/Link.css +13 -0
  473. package/dist/ui/navigation/Link.d.ts +18 -0
  474. package/dist/ui/navigation/Link.js +43 -0
  475. package/dist/ui/navigation/Tabs.css +39 -0
  476. package/dist/ui/navigation/Tabs.d.ts +18 -0
  477. package/dist/ui/navigation/Tabs.js +55 -0
  478. package/dist/ui/navigation/Toolbar.css +25 -0
  479. package/dist/ui/navigation/Toolbar.d.ts +12 -0
  480. package/dist/ui/navigation/Toolbar.js +21 -0
  481. package/dist/ui/navigation/catalog.d.ts +2 -0
  482. package/dist/ui/navigation/catalog.js +5 -0
  483. package/dist/ui/navigation/index.d.ts +8 -0
  484. package/dist/ui/navigation/index.js +5 -0
  485. package/dist/ui/overlay/Modal.css +35 -0
  486. package/dist/ui/overlay/Modal.d.ts +12 -0
  487. package/dist/ui/overlay/Modal.js +57 -0
  488. package/dist/ui/overlay/Popup.d.ts +12 -0
  489. package/dist/ui/overlay/Popup.js +74 -0
  490. package/dist/ui/overlay/catalog.d.ts +2 -0
  491. package/dist/ui/overlay/catalog.js +4 -0
  492. package/dist/ui/overlay/index.d.ts +1 -0
  493. package/dist/ui/overlay/index.js +2 -0
  494. package/dist/ui/register.d.ts +6 -0
  495. package/dist/ui/register.js +26 -0
  496. package/package.json +115 -0
@@ -0,0 +1,116 @@
1
+ // Pure JSON Schema helpers for SchemaForm. No React. Ported from web's
2
+ // JsonSchemaForm so the schema logic is testable in isolation and the form
3
+ // component stays a thin renderer.
4
+ export function isObjectRecord(value) {
5
+ return !!value && typeof value === 'object' && !Array.isArray(value);
6
+ }
7
+ // Structural equality for form values (JSON-shaped: primitives, arrays,
8
+ // plain objects). Used for dirty tracking against a pristine baseline.
9
+ export function deepEqual(a, b) {
10
+ if (a === b)
11
+ return true;
12
+ if (a === null || b === null || typeof a !== typeof b)
13
+ return false;
14
+ if (Array.isArray(a) || Array.isArray(b)) {
15
+ if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length)
16
+ return false;
17
+ return a.every((x, i) => deepEqual(x, b[i]));
18
+ }
19
+ if (typeof a === 'object' && typeof b === 'object') {
20
+ const ak = Object.keys(a);
21
+ const bk = Object.keys(b);
22
+ if (ak.length !== bk.length)
23
+ return false;
24
+ return ak.every((k) => Object.prototype.hasOwnProperty.call(b, k) &&
25
+ deepEqual(a[k], b[k]));
26
+ }
27
+ return false;
28
+ }
29
+ // Primary type, ignoring "null" in union arrays like ["string", "null"].
30
+ export function effectiveType(field) {
31
+ const t = field.type;
32
+ if (Array.isArray(t)) {
33
+ return (t.find((x) => x !== 'null') ?? 'string');
34
+ }
35
+ if (!t && Array.isArray(field.oneOf)) {
36
+ const fromOneOf = field.oneOf.find((entry) => entry.type && entry.type !== 'null')?.type;
37
+ if (fromOneOf)
38
+ return fromOneOf;
39
+ }
40
+ if (!t && Array.isArray(field.anyOf)) {
41
+ const fromAnyOf = field.anyOf.find((entry) => entry.type && entry.type !== 'null')?.type;
42
+ if (fromAnyOf)
43
+ return fromAnyOf;
44
+ }
45
+ if (!t && field.items)
46
+ return 'array';
47
+ if (!t && field.properties)
48
+ return 'object';
49
+ return t ?? 'string';
50
+ }
51
+ export function resolveUnionOptions(field) {
52
+ if (Array.isArray(field.oneOf) && field.oneOf.length > 0)
53
+ return field.oneOf;
54
+ if (Array.isArray(field.anyOf) && field.anyOf.length > 0)
55
+ return field.anyOf;
56
+ return [];
57
+ }
58
+ export function normalizeUnionOptions(field) {
59
+ return resolveUnionOptions(field).map((option) => ({
60
+ ...option,
61
+ description: option.description ?? field.description,
62
+ }));
63
+ }
64
+ // null → tuple arrays (edited as raw JSON); object → item schema.
65
+ export function resolveArrayItemSchema(field) {
66
+ if (!field.items)
67
+ return { type: 'string' };
68
+ if (Array.isArray(field.items))
69
+ return null;
70
+ return field.items;
71
+ }
72
+ export function defaultValueForSchema(field) {
73
+ const unionOptions = resolveUnionOptions(field);
74
+ if (unionOptions.length > 0) {
75
+ return defaultValueForSchema(unionOptions[0]);
76
+ }
77
+ if (field.default !== undefined)
78
+ return field.default;
79
+ if (field.const !== undefined)
80
+ return field.const;
81
+ const type = effectiveType(field);
82
+ if (type === 'boolean')
83
+ return false;
84
+ if (type === 'number' || type === 'integer')
85
+ return 0;
86
+ if (type === 'array')
87
+ return [];
88
+ if (type === 'object') {
89
+ const defaults = {};
90
+ const properties = field.properties ?? {};
91
+ const requiredSet = new Set(field.required ?? []);
92
+ for (const [key, child] of Object.entries(properties)) {
93
+ if (child.default !== undefined || child.const !== undefined || requiredSet.has(key)) {
94
+ defaults[key] = defaultValueForSchema(child);
95
+ }
96
+ }
97
+ return defaults;
98
+ }
99
+ return '';
100
+ }
101
+ // Strip the `[textarea]` / `[textarea:n]` marker web embeds in descriptions.
102
+ export function cleanDescription(description) {
103
+ if (typeof description !== 'string')
104
+ return description;
105
+ return description.replace(/\s*\[textarea(?::\d+)?\]/, '');
106
+ }
107
+ // Returns the textarea row count when a string field is marked as multiline
108
+ // (via `format: 'textarea'` or a `[textarea:n]` description marker), else null.
109
+ export function textareaRows(field) {
110
+ if (field.format === 'textarea')
111
+ return 4;
112
+ const match = field.description?.match(/\[textarea(?::(\d+))?\]/);
113
+ if (!match)
114
+ return null;
115
+ return match[1] ? parseInt(match[1], 10) : 4;
116
+ }
@@ -0,0 +1,58 @@
1
+ export { registerBuiltins, registerCatalog } from './register.js';
2
+ export { Splitter } from './layout/Splitter.js';
3
+ export { Popup } from './overlay/Popup.js';
4
+ export type { PopupProps } from './overlay/Popup.js';
5
+ export { Toolbar } from './navigation/index.js';
6
+ export type { ToolbarProps } from './navigation/index.js';
7
+ export { Badge } from './display/Badge.js';
8
+ export type { BadgeProps, BadgeTone } from './display/Badge.js';
9
+ export { Breadcrumb } from './navigation/index.js';
10
+ export type { BreadcrumbProps, BreadcrumbItem } from './navigation/index.js';
11
+ export { Progress } from './display/Progress.js';
12
+ export type { ProgressProps } from './display/Progress.js';
13
+ export { Spinner } from './display/Spinner.js';
14
+ export type { SpinnerProps } from './display/Spinner.js';
15
+ export { Skeleton } from './display/Skeleton.js';
16
+ export type { SkeletonProps } from './display/Skeleton.js';
17
+ export { Markdown } from './display/Markdown.js';
18
+ export type { MarkdownProps } from './display/Markdown.js';
19
+ export { HtmlEmbed } from './embed/index.js';
20
+ export type { HtmlEmbedProps } from './embed/index.js';
21
+ export { Svg } from './display/Svg.js';
22
+ export type { SvgProps } from './display/Svg.js';
23
+ export { Alert } from './display/Alert.js';
24
+ export type { AlertProps, AlertTone } from './display/Alert.js';
25
+ export { Avatar } from './display/Avatar.js';
26
+ export type { AvatarProps, AvatarSize } from './display/Avatar.js';
27
+ export { Tree } from './data/index.js';
28
+ export type { TreeProps, TreeNode } from './data/index.js';
29
+ export { Listable } from './data/index.js';
30
+ export type { ListableProps, ListableColumn, ListableCellProps, ListableTitleProps, ListableSort, ListableRenderContext, } from './data/index.js';
31
+ export { DataTable } from './data/index.js';
32
+ export type { DataTableProps, DataColumn, DataRow } from './data/index.js';
33
+ export { Pagination, Filter } from './data/index.js';
34
+ export type { PaginationProps, FilterProps, FilterField } from './data/index.js';
35
+ export { BarChart, LineChart, Sparkline, Donut } from './chart/index.js';
36
+ export type { BarChartProps, BarChartBar, BarChartSegment, LineChartProps, LineSeries, SparklineProps, DonutProps, DonutSlice, } from './chart/index.js';
37
+ export { ActionList, ContextMenu, ContainerMenu, useChatPicker, sentinelHas, useContextMenu, clampCaretIndex, getActiveToken, replaceActiveToken, shortcutMatchesToken, canonicalShortcut, } from './menu/index.js';
38
+ export type { ActionListProps, ContextMenuProps, ContainerMenuProps, UseChatPickerParams, UseChatPickerResult, TokenInfo, } from './menu/index.js';
39
+ export { CampusView, CampusNodus, CampusStratum, CampusVelum, CampusMappa, useCampus, useStratumZoom, } from './campus/index.js';
40
+ export type { CampusViewProps, CampusNodusProps, CampusStratumProps, CampusVelumProps, CampusMappaProps, CampusContextValue, CampusBounds, CampusViewport, CampusController, CampusMappaNode, CampusNode, CampusLayerConfig, CampusNodeRenderProps, CampusNodeComponent, CampusNodeTypes, DragMode, ResizeMode, } from './campus/index.js';
41
+ export { TabLayout, TabPanelLayout, SingleLayout, SplitLayout, StackLayout, SpatialLayout, RailLayout, InlineLayout, BarLayout, FloatingLayout, registerBuiltinLayouts, } from './layout/index.js';
42
+ export { Card, Divider, Text, Image, Icon } from './display/index.js';
43
+ export { DetailList, DetailHeader, DetailContainer, DetailNotFound, AddPlaceholder, SectionTitle } from './display/index.js';
44
+ export type { DetailListProps, DetailItem, DetailHeaderProps, DetailHeaderMeta, DetailContainerProps, DetailNotFoundProps, DetailNotFoundAction, AddPlaceholderProps, SectionTitleProps } from './display/index.js';
45
+ export { List } from './data/index.js';
46
+ export { Tabs } from './navigation/index.js';
47
+ export { Link, resolveLinkHref } from './navigation/index.js';
48
+ export type { LinkProps, LinkKind } from './navigation/index.js';
49
+ export { Button, ReloadButton, TextField, CheckBox, ChoicePicker, Slider, DateTimeInput, Checks, LocaleToggle, } from './control/index.js';
50
+ export type { LocaleToggleProps, LocaleToggleDisplay, ReloadButtonProps } from './control/index.js';
51
+ export { Row, Column } from './layout/index.js';
52
+ export { Grid } from './layout/index.js';
53
+ export type { GridProps } from './layout/index.js';
54
+ export { Video, Audio } from './media/index.js';
55
+ export { Modal } from './overlay/index.js';
56
+ export type { CheckRuleResolved, ChecksProps } from './control/index.js';
57
+ export { Form, FormContext, useFormContext, Field, FieldLabel, FieldError, FieldHint, FieldGroup, FormSection, FormActions, SchemaForm, DangerZone, SettingsContainer, LoginForm, } from './forms/index.js';
58
+ export type { FormProps, FormContextValue, FieldProps, FieldLabelProps, FieldErrorProps, FieldHintProps, FieldGroupProps, FormSectionProps, FormActionsProps, FormActionItem, SchemaFormProps, FormatRenderer, FormatRendererProps, JsonSchemaField, JsonSchemaObject, EnumOption, DangerZoneProps, SettingsContainerProps, } from './forms/index.js';
@@ -0,0 +1,63 @@
1
+ // scena UI module — top-level re-export map. Folder layout:
2
+ //
3
+ // basic/ — a2ui v0.10 spec primitives (Row, Column, List, Card,
4
+ // Button, TextField, Checks, ...). Stay declarative; the
5
+ // ViewMount renderer resolves DynamicChildList upstream.
6
+ // primitives/ — composed low-level building blocks (Popup, Splitter,
7
+ // Toolbar, Badge, Alert, Progress, Spinner, Skeleton,
8
+ // Markdown, HtmlEmbed, Svg, Breadcrumb). Stateless display.
9
+ // blocks/ — composed higher-level reusables (Tree, Listable, ...).
10
+ // Own interaction state: selection, kbd nav, drag-drop,
11
+ // right-click context menus.
12
+ // menu/ — picker family (ActionList engine + ContextMenu +
13
+ // useChatPicker host hook).
14
+ // layouts/ — surface render strategies (Tab, TabPanel, Single, Split,
15
+ // Stack, Spatial, Rail, Inline, Bar, Floating).
16
+ export { registerBuiltins, registerCatalog } from './register.js';
17
+ // ─── primitives/ ─────────────────────────────────────────────────────────
18
+ export { Splitter } from './layout/Splitter.js';
19
+ export { Popup } from './overlay/Popup.js';
20
+ export { Toolbar } from './navigation/index.js';
21
+ export { Badge } from './display/Badge.js';
22
+ export { Breadcrumb } from './navigation/index.js';
23
+ export { Progress } from './display/Progress.js';
24
+ export { Spinner } from './display/Spinner.js';
25
+ export { Skeleton } from './display/Skeleton.js';
26
+ export { Markdown } from './display/Markdown.js';
27
+ export { HtmlEmbed } from './embed/index.js';
28
+ export { Svg } from './display/Svg.js';
29
+ export { Alert } from './display/Alert.js';
30
+ export { Avatar } from './display/Avatar.js';
31
+ // ─── blocks/ ─────────────────────────────────────────────────────────────
32
+ export { Tree } from './data/index.js';
33
+ export { Listable } from './data/index.js';
34
+ export { DataTable } from './data/index.js';
35
+ export { Pagination, Filter } from './data/index.js';
36
+ // ─── chart/ — hand-drawn charts (flexbox + SVG, no deps) ──────────────────
37
+ export { BarChart, LineChart, Sparkline, Donut } from './chart/index.js';
38
+ // ─── menu/ ───────────────────────────────────────────────────────────────
39
+ // Picker family — ActionList engine + ContextMenu + chat-style host hook.
40
+ // See doop-roadmap/ideas/scena/15-command-view.md.
41
+ export { ActionList, ContextMenu, ContainerMenu, useChatPicker, sentinelHas, useContextMenu, clampCaretIndex, getActiveToken, replaceActiveToken, shortcutMatchesToken, canonicalShortcut, } from './menu/index.js';
42
+ // ─── campus/ ─────────────────────────────────────────────────────────────
43
+ // Generic pan/zoom canvas primitives. Extracted from SpatialLayout so other
44
+ // surfaces (flowchart editors, whiteboards, node graphs) can reuse them.
45
+ export { CampusView, CampusNodus, CampusStratum, CampusVelum, CampusMappa, useCampus, useStratumZoom, } from './campus/index.js';
46
+ // ─── layouts/ ────────────────────────────────────────────────────────────
47
+ export { TabLayout, TabPanelLayout, SingleLayout, SplitLayout, StackLayout, SpatialLayout, RailLayout, InlineLayout, BarLayout, FloatingLayout, registerBuiltinLayouts, } from './layout/index.js';
48
+ // ─── basic/ — a2ui v0.10 spec ────────────────────────────────────────────
49
+ export { Card, Divider, Text, Image, Icon } from './display/index.js';
50
+ export { DetailList, DetailHeader, DetailContainer, DetailNotFound, AddPlaceholder, SectionTitle } from './display/index.js';
51
+ export { List } from './data/index.js';
52
+ export { Tabs } from './navigation/index.js';
53
+ export { Link, resolveLinkHref } from './navigation/index.js';
54
+ export { Button, ReloadButton, TextField, CheckBox, ChoicePicker, Slider, DateTimeInput, Checks, LocaleToggle, } from './control/index.js';
55
+ export { Row, Column } from './layout/index.js';
56
+ export { Grid } from './layout/index.js';
57
+ export { Video, Audio } from './media/index.js';
58
+ export { Modal } from './overlay/index.js';
59
+ // ─── forms/ — JSON Schema form + composable parts ─────────────────────────
60
+ // Form / Field / FieldGroup / FormSection / SchemaForm register as catalog
61
+ // components. FieldLabel / FieldError / FieldHint are export-only (internal
62
+ // parts of Field). See doop-roadmap/ideas/scena/16-forms.md.
63
+ export { Form, FormContext, useFormContext, Field, FieldLabel, FieldError, FieldHint, FieldGroup, FormSection, FormActions, SchemaForm, DangerZone, SettingsContainer, LoginForm, } from './forms/index.js';
@@ -0,0 +1,2 @@
1
+ import type { LayoutProps } from '../../types/layout.js';
2
+ export declare function BarLayout({ mounts, renderMount }: LayoutProps): import("react").JSX.Element;
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ function isSlot(v) {
3
+ return v === 'left' || v === 'center' || v === 'right';
4
+ }
5
+ function slotOf(m) {
6
+ const s = m.component.slot;
7
+ return isSlot(s) ? s : 'center';
8
+ }
9
+ export function BarLayout({ mounts, renderMount }) {
10
+ const left = [];
11
+ const center = [];
12
+ const right = [];
13
+ for (const m of mounts) {
14
+ const bucket = slotOf(m) === 'left' ? left : slotOf(m) === 'right' ? right : center;
15
+ bucket.push(m);
16
+ }
17
+ return (_jsxs("div", { className: "oo-layout oo-layout--bar", children: [_jsx("div", { className: "oo-bar__slot oo-bar__slot--left", children: left.map((m) => (_jsx("div", { className: "oo-bar__item", children: renderMount(m) }, m.key))) }), _jsx("div", { className: "oo-bar__slot oo-bar__slot--center", children: center.map((m) => (_jsx("div", { className: "oo-bar__item", children: renderMount(m) }, m.key))) }), _jsx("div", { className: "oo-bar__slot oo-bar__slot--right", children: right.map((m) => (_jsx("div", { className: "oo-bar__item", children: renderMount(m) }, m.key))) })] }));
18
+ }
@@ -0,0 +1,6 @@
1
+ .oo-col {
2
+ display: flex;
3
+ flex-direction: column;
4
+ min-width: 0;
5
+ gap: var(--oo-column-gap, var(--oo-spacing-md));
6
+ }
@@ -0,0 +1,12 @@
1
+ import type { CSSProperties, ReactNode } from 'react';
2
+ import { type StyleAlign, type StyleJustify } from '../_utils.js';
3
+ import './Column.css';
4
+ export interface ColumnProps {
5
+ children?: ReactNode;
6
+ justify?: StyleJustify;
7
+ align?: StyleAlign;
8
+ weight?: number;
9
+ gap?: number | string;
10
+ style?: CSSProperties;
11
+ }
12
+ export declare function Column({ children, justify, align, weight, gap, style, }: ColumnProps): import("react").JSX.Element;
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { mapAlign, mapJustify, weightStyle } from '../_utils.js';
3
+ import './Column.css';
4
+ export function Column({ children, justify = 'start', align = 'stretch', weight, gap, style, }) {
5
+ const inlineStyle = {
6
+ justifyContent: mapJustify(justify),
7
+ alignItems: mapAlign(align),
8
+ ...(gap !== undefined ? { gap } : null),
9
+ ...weightStyle(weight),
10
+ ...style,
11
+ };
12
+ return _jsx("div", { className: "oo-col", style: inlineStyle, children: children });
13
+ }
@@ -0,0 +1,2 @@
1
+ import type { LayoutProps } from '../../types/layout.js';
2
+ export declare function FloatingLayout({ mounts, renderMount }: LayoutProps): import("react").JSX.Element;
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // Floating overlay. Used for the `overlay` surface. The container is
3
+ // pointer-events: none so it doesn't block underlying chrome; each child
4
+ // re-enables pointer-events. Mounts decide their own positioning via
5
+ // inline style or CSS classes.
6
+ export function FloatingLayout({ mounts, renderMount }) {
7
+ return (_jsx("div", { className: "oo-layout oo-layout--floating", style: {
8
+ position: 'absolute',
9
+ inset: 0,
10
+ pointerEvents: 'none',
11
+ }, children: mounts.map((m) => (_jsx("div", { style: { pointerEvents: 'auto' }, children: renderMount(m) }, m.key))) }));
12
+ }
@@ -0,0 +1,5 @@
1
+ .oo-grid {
2
+ display: grid;
3
+ width: 100%;
4
+ min-width: 0;
5
+ }
@@ -0,0 +1,13 @@
1
+ import type { CSSProperties, ReactNode } from 'react';
2
+ import { type StyleAlign } from '../_utils.js';
3
+ import './Grid.css';
4
+ export interface GridProps {
5
+ children?: ReactNode;
6
+ minColumnWidth?: number | string;
7
+ columns?: number;
8
+ gap?: number | string;
9
+ align?: StyleAlign;
10
+ weight?: number;
11
+ style?: CSSProperties;
12
+ }
13
+ export declare function Grid({ children, minColumnWidth, columns, gap, align, weight, style }: GridProps): import("react").JSX.Element;
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { mapAlign, weightStyle } from '../_utils.js';
3
+ import './Grid.css';
4
+ function asSize(v) {
5
+ return typeof v === 'number' ? `${v}px` : v;
6
+ }
7
+ export function Grid({ children, minColumnWidth = 220, columns, gap, align = 'stretch', weight, style }) {
8
+ const gridTemplateColumns = columns
9
+ ? `repeat(${columns}, minmax(0, 1fr))`
10
+ : `repeat(auto-fit, minmax(${asSize(minColumnWidth)}, 1fr))`;
11
+ const gridStyle = {
12
+ gridTemplateColumns,
13
+ gap: gap ?? 'var(--oo-grid-gap, 12px)',
14
+ alignItems: mapAlign(align, 'stretch'),
15
+ ...weightStyle(weight),
16
+ ...style,
17
+ };
18
+ return (_jsx("div", { className: "oo-grid", style: gridStyle, children: children }));
19
+ }
@@ -0,0 +1,2 @@
1
+ import type { LayoutProps } from '../../types/layout.js';
2
+ export declare function InlineLayout({ mounts, renderMount }: LayoutProps): import("react").JSX.Element;
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // Horizontal inline row. Used for the statusbar. Mount order matches
3
+ // listAt() order; the StatusItem component handles its own side/priority
4
+ // via internal styling.
5
+ export function InlineLayout({ mounts, renderMount }) {
6
+ return (_jsx("div", { className: "oo-layout oo-layout--inline", style: {
7
+ display: 'flex',
8
+ flexDirection: 'row',
9
+ alignItems: 'center',
10
+ gap: 'var(--oo-spacing-md)',
11
+ height: '100%',
12
+ }, children: mounts.map((m) => (_jsx("div", { style: { display: 'contents' }, children: renderMount(m) }, m.key))) }));
13
+ }
@@ -0,0 +1,12 @@
1
+ import type { CSSProperties, ReactNode } from 'react';
2
+ import type { Scena } from '../../types/scena.js';
3
+ import type { ResolvedMount } from '../../types/mount-surface.js';
4
+ export declare function useMountTitle(mount: ResolvedMount | undefined, fallback?: string): string;
5
+ export declare function MountTitle({ mount, fallback, iconClassName, titleClassName, style, }: {
6
+ mount: ResolvedMount | undefined;
7
+ fallback?: string;
8
+ iconClassName?: string;
9
+ titleClassName?: string;
10
+ style?: CSSProperties;
11
+ }): ReactNode;
12
+ export declare function resolveMountTitle(scena: Scena, mount: ResolvedMount): string;
@@ -0,0 +1,42 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useScena } from '../../react/ScenaProvider.js';
3
+ import { useStoreLabel } from '../../react/hooks/useStoreLabel.js';
4
+ import { readPath } from '../../core/path-resolver.js';
5
+ import { translate } from '../../i18n/registry.js';
6
+ // Shared title resolution for layout headers. A mount's title is
7
+ // `mount.props.title ?? the component's registered default`, resolved against
8
+ // the mount's OWN dataContext — so a relative `{ path: '/name' }` resolves to
9
+ // this record (set by `openResource`) and updates live on change.
10
+ // Reactive — for component scopes (SpatialCard, SingleLayout, the TabTitle).
11
+ export function useMountTitle(mount, fallback = '') {
12
+ const scena = useScena();
13
+ const compProps = mount ? scena.components.get(mount.component.component)?.props : undefined;
14
+ return useStoreLabel(mount?.props?.title ?? compProps?.title, '', mount?.dataContext) || fallback;
15
+ }
16
+ // Reactive icon + title text + truncation tooltip — the label cluster shared by
17
+ // every layout header. Rendered as a CHILD component (not a hook in a `.map()`
18
+ // body) so it stays reactive inside inline list renders (split panes, stack
19
+ // sections).
20
+ export function MountTitle({ mount, fallback, iconClassName, titleClassName, style, }) {
21
+ const scena = useScena();
22
+ const compProps = mount ? scena.components.get(mount.component.component)?.props : undefined;
23
+ const title = useStoreLabel(mount?.props?.title ?? compProps?.title, '', mount?.dataContext) || (fallback ?? '');
24
+ const icon = mount?.props?.icon ?? compProps?.icon;
25
+ return (_jsxs("span", { title: title, style: { display: 'inline-flex', alignItems: 'center', gap: 6, minWidth: 0, ...style }, children: [icon ? (_jsx("span", { className: iconClassName, "aria-hidden": true, children: icon })) : null, _jsx("span", { className: titleClassName, style: { overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }, children: title })] }));
26
+ }
27
+ // One-shot (non-reactive) resolve — for contexts where a hook can't run, e.g.
28
+ // building ContextMenu item strings inside a `.map()`. Resolves a `{ path }`
29
+ // via readPath against the mount's dataContext (so relative titles work); the
30
+ // menu re-resolves each time it opens, so non-reactive is fine.
31
+ export function resolveMountTitle(scena, mount) {
32
+ const compProps = scena.components.get(mount.component.component)?.props;
33
+ const label = (mount.props?.title ?? compProps?.title);
34
+ if (label == null)
35
+ return mount.key;
36
+ if (typeof label === 'string')
37
+ return label;
38
+ if ('t' in label)
39
+ return translate(label.t);
40
+ const value = readPath(scena.store, mount.dataContext, label.path);
41
+ return value == null ? mount.key : String(value);
42
+ }
@@ -0,0 +1,2 @@
1
+ import type { LayoutProps } from '../../types/layout.js';
2
+ export declare function RailLayout({ mounts, renderMount, presentation }: LayoutProps): import("react").JSX.Element;
@@ -0,0 +1,38 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // Icon rail with two groups (top + bottom). The second group sticks to the far
3
+ // end via an auto margin; mount order within each group is preserved.
4
+ //
5
+ // Axis follows the hosting surface's presentation: a docked activitybar is a
6
+ // vertical rail, and the same surface presented as a `bar` (pinned to the
7
+ // bottom edge when the viewport is narrow) lays out horizontally. Both the
8
+ // flex direction AND which margin does the pushing have to flip together —
9
+ // margin-top: auto does nothing in a row.
10
+ //
11
+ // Mounts declare placement via a literal-string `pos` prop on the root node
12
+ // (`pos: 'bottom'`). Anything else (including undefined) counts as top.
13
+ function isLiteralString(v) {
14
+ return typeof v === 'string';
15
+ }
16
+ function posOf(mount) {
17
+ const pos = mount.component.pos;
18
+ if (isLiteralString(pos) && pos === 'bottom')
19
+ return 'bottom';
20
+ return 'top';
21
+ }
22
+ export function RailLayout({ mounts, renderMount, presentation }) {
23
+ const top = [];
24
+ const bottom = [];
25
+ for (const m of mounts) {
26
+ (posOf(m) === 'bottom' ? bottom : top).push(m);
27
+ }
28
+ const horizontal = presentation === 'bar';
29
+ const direction = horizontal ? 'row' : 'column';
30
+ const pushEnd = horizontal ? { marginLeft: 'auto' } : { marginTop: 'auto' };
31
+ return (_jsxs("div", { className: "oo-layout oo-layout--rail", "data-orientation": horizontal ? 'horizontal' : 'vertical', style: {
32
+ display: 'flex',
33
+ flexDirection: direction,
34
+ height: horizontal ? undefined : '100%',
35
+ width: horizontal ? '100%' : undefined,
36
+ alignItems: horizontal ? 'center' : undefined,
37
+ }, children: [_jsx("div", { className: "oo-rail__top", style: { display: 'flex', flexDirection: direction }, children: top.map((m) => (_jsx("div", { style: { display: 'contents' }, children: renderMount(m) }, m.key))) }), _jsx("div", { className: "oo-rail__bottom", style: { display: 'flex', flexDirection: direction, ...pushEnd }, children: bottom.map((m) => (_jsx("div", { style: { display: 'contents' }, children: renderMount(m) }, m.key))) })] }));
38
+ }
@@ -0,0 +1,16 @@
1
+ .oo-row {
2
+ --oo-row-gap: var(--oo-spacing-md);
3
+ display: flex;
4
+ /* flex: var(--weight); */
5
+ /* flex-direction: row; */
6
+ /* min-width: 0; */
7
+ /* gap: var(--oo-row-gap, var(--oo-spacing-md)); */
8
+ }
9
+
10
+ .oo-row>section {
11
+ display: flex;
12
+ flex-direction: row;
13
+ width: 100%;
14
+ min-height: 100%;
15
+ gap: var(--oo-row-gap, var(--oo-spacing-md));
16
+ }
@@ -0,0 +1,13 @@
1
+ import type { CSSProperties, ReactNode } from 'react';
2
+ import { type StyleAlign, type StyleJustify } from '../_utils.js';
3
+ import './Row.css';
4
+ export interface RowProps {
5
+ children?: ReactNode;
6
+ justify?: StyleJustify;
7
+ align?: StyleAlign;
8
+ weight?: number;
9
+ gap?: number | string;
10
+ wrap?: boolean;
11
+ style?: CSSProperties;
12
+ }
13
+ export declare function Row({ children, justify, align, weight, gap, wrap, style, }: RowProps): import("react").JSX.Element;
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { mapAlign, mapJustify, weightStyle } from '../_utils.js';
3
+ import './Row.css';
4
+ export function Row({ children, justify = 'start', align = 'stretch', weight, gap, wrap = false, style, }) {
5
+ return (_jsx("div", { className: "oo-row", "data-align": mapAlign(align), "data-weight": weight, "data-justify": mapJustify(justify), style: {
6
+ // display: 'flex',
7
+ // flexDirection: 'row',
8
+ ...weightStyle(weight),
9
+ }, children: _jsx("section", { style: {
10
+ // display: 'flex',
11
+ // flexDirection: 'row',
12
+ flexWrap: wrap ? 'wrap' : 'nowrap',
13
+ justifyContent: mapJustify(justify, style?.justifyContent),
14
+ alignItems: mapAlign(align, style?.alignItems),
15
+ // width: '100%',
16
+ // minHeight: '100%',
17
+ // ...(gap !== undefined ? { gap } : null),
18
+ ['--oo-row-gap']: gap !== undefined ? (typeof gap === 'number' ? `${gap}px` : gap) : undefined,
19
+ ...style,
20
+ }, children: children }) }));
21
+ }
@@ -0,0 +1,10 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { MountAction } from '../../types/mount-surface.js';
3
+ import type { Label } from '../../types/label.js';
4
+ export interface SectionHeaderProps {
5
+ title: Label;
6
+ icon?: ReactNode;
7
+ color?: string;
8
+ actions?: MountAction[];
9
+ }
10
+ export declare function SectionHeader({ title, icon, color, actions }: SectionHeaderProps): ReactNode;
@@ -0,0 +1,65 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { resolveLabel } from '../../core/label.js';
4
+ import { useScena } from '../../react/ScenaProvider.js';
5
+ import { useI18n } from '../../react/hooks/useI18n.js';
6
+ import { translate } from '../../i18n/registry.js';
7
+ import { ContextMenu } from '../menu/ContextMenu.js';
8
+ // The header strip for a sidebar section (single layout) — same visual language
9
+ // as StackHeader's container strip, plus an action row. Title/icon/actions come
10
+ // from the active mount's display (mount.props ?? component.props).
11
+ export function SectionHeader({ title, icon, color, actions = [] }) {
12
+ const scena = useScena();
13
+ useI18n(); // re-resolve `{ t }` labels on locale switch
14
+ const [menu, setMenu] = useState(null);
15
+ const run = (command) => void scena.commands.execute(command);
16
+ const resolve = (l) => resolveLabel(l, { get: (p) => scena.store.get(p), translate });
17
+ const label = (a) => resolve(a.label);
18
+ const titleText = resolve(title);
19
+ function openMenu(e) {
20
+ e.stopPropagation();
21
+ const r = e.currentTarget.getBoundingClientRect();
22
+ setMenu({ x: r.right, y: r.bottom + 2 });
23
+ }
24
+ return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "oo-section-header", "data-color": color, style: headerStyle, children: [_jsxs("span", { style: { display: 'inline-flex', alignItems: 'center', gap: 6, minWidth: 0 }, children: [icon ? _jsx("span", { className: "oo-section-header__icon", "aria-hidden": true, children: icon }) : null, _jsx("span", { className: "oo-section-header__title", style: { overflow: 'hidden', textOverflow: 'ellipsis' }, children: titleText })] }), _jsxs("span", { style: { display: 'inline-flex', alignItems: 'center', gap: 2 }, children: [actions.map((a) => {
25
+ const text = label(a);
26
+ return (_jsx("button", { type: "button", title: text, "aria-label": text, onClick: () => run(a.command), style: iconBtn, children: a.icon ?? text ?? '•' }, a.command));
27
+ }), actions.length ? (_jsx("button", { type: "button", title: "More actions", "aria-label": "More actions", onClick: openMenu, style: iconBtn, children: "\u22EF" })) : null] })] }), menu ? (_jsx(ContextMenu, { x: menu.x, y: menu.y, onClose: () => setMenu(null), spec: {
28
+ footerHints: true,
29
+ items: actions.map((a) => ({
30
+ title: label(a) || a.command,
31
+ icon: a.icon,
32
+ onSelect: (h) => {
33
+ run(a.command);
34
+ h.closeMenu();
35
+ },
36
+ })),
37
+ } })) : null] }));
38
+ }
39
+ const headerStyle = {
40
+ flex: '0 0 auto',
41
+ display: 'flex',
42
+ alignItems: 'center',
43
+ justifyContent: 'space-between',
44
+ padding: 'var(--oo-spacing-xs) var(--oo-spacing-sm)',
45
+ background: 'var(--oo-color-surface)',
46
+ borderBottom: '1px solid var(--oo-color-border)',
47
+ fontSize: 'var(--oo-font-size-xs)',
48
+ textTransform: 'uppercase',
49
+ letterSpacing: '0.06em',
50
+ color: 'var(--oo-color-muted)',
51
+ userSelect: 'none',
52
+ minWidth: 0,
53
+ minHeight: 32,
54
+ };
55
+ const iconBtn = {
56
+ background: 'transparent',
57
+ border: 'none',
58
+ color: 'var(--oo-color-muted)',
59
+ cursor: 'pointer',
60
+ font: 'inherit',
61
+ fontSize: 'var(--oo-font-size-sm)',
62
+ lineHeight: 1,
63
+ padding: '2px 5px',
64
+ borderRadius: 4,
65
+ };
@@ -0,0 +1,2 @@
1
+ import type { LayoutProps } from '../../types/layout.js';
2
+ export declare function SingleLayout({ mounts, state, renderMount }: LayoutProps): import("react").JSX.Element;