@elastic/isomer-studio 0.0.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (406) hide show
  1. package/LICENSE.txt +93 -0
  2. package/NOTICE.txt +17329 -0
  3. package/README.md +64 -0
  4. package/THIRD_PARTY_LICENSES.md +404 -0
  5. package/bin/isomer-studio.js +10 -0
  6. package/dist/app/assets/codicon-5T574S7B.ttf +0 -0
  7. package/dist/app/assets/editor.worker.js +11 -0
  8. package/dist/app/assets/esbuild.wasm +0 -0
  9. package/dist/app/assets/json.worker.js +47 -0
  10. package/dist/app/assets/slack.css +1 -0
  11. package/dist/app/assets/studio.css +11 -0
  12. package/dist/app/assets/ts.worker.js +37029 -0
  13. package/dist/app/index.html +16 -0
  14. package/dist/apps/app_host.d.ts +8 -0
  15. package/dist/apps/app_host.d.ts.map +1 -0
  16. package/dist/apps/app_host.js +73 -0
  17. package/dist/apps/app_host.js.map +1 -0
  18. package/dist/browser/dev_host.d.ts +5 -0
  19. package/dist/browser/dev_host.d.ts.map +1 -0
  20. package/dist/browser/dev_host.js +46 -0
  21. package/dist/browser/dev_host.js.map +1 -0
  22. package/dist/browser/mount.d.ts +16 -0
  23. package/dist/browser/mount.d.ts.map +1 -0
  24. package/dist/browser/mount.js +37 -0
  25. package/dist/browser/mount.js.map +1 -0
  26. package/dist/browser/static_host.d.ts +5 -0
  27. package/dist/browser/static_host.d.ts.map +1 -0
  28. package/dist/browser/static_host.js +55 -0
  29. package/dist/browser/static_host.js.map +1 -0
  30. package/dist/chrome/accent.d.ts +14 -0
  31. package/dist/chrome/accent.d.ts.map +1 -0
  32. package/dist/chrome/accent.js +31 -0
  33. package/dist/chrome/accent.js.map +1 -0
  34. package/dist/chrome/app_pages.d.ts +13 -0
  35. package/dist/chrome/app_pages.d.ts.map +1 -0
  36. package/dist/chrome/app_pages.js +33 -0
  37. package/dist/chrome/app_pages.js.map +1 -0
  38. package/dist/chrome/color_mode.d.ts +10 -0
  39. package/dist/chrome/color_mode.d.ts.map +1 -0
  40. package/dist/chrome/color_mode.js +45 -0
  41. package/dist/chrome/color_mode.js.map +1 -0
  42. package/dist/chrome/dev_tint.d.ts +7 -0
  43. package/dist/chrome/dev_tint.d.ts.map +1 -0
  44. package/dist/chrome/dev_tint.js +31 -0
  45. package/dist/chrome/dev_tint.js.map +1 -0
  46. package/dist/chrome/header.d.ts +20 -0
  47. package/dist/chrome/header.d.ts.map +1 -0
  48. package/dist/chrome/header.js +124 -0
  49. package/dist/chrome/header.js.map +1 -0
  50. package/dist/chrome/icon_data_uri.d.ts +12 -0
  51. package/dist/chrome/icon_data_uri.d.ts.map +1 -0
  52. package/dist/chrome/icon_data_uri.js +21 -0
  53. package/dist/chrome/icon_data_uri.js.map +1 -0
  54. package/dist/chrome/isomer_mark.d.ts +17 -0
  55. package/dist/chrome/isomer_mark.d.ts.map +1 -0
  56. package/dist/chrome/isomer_mark.js +46 -0
  57. package/dist/chrome/isomer_mark.js.map +1 -0
  58. package/dist/chrome/nav.d.ts +22 -0
  59. package/dist/chrome/nav.d.ts.map +1 -0
  60. package/dist/chrome/nav.js +306 -0
  61. package/dist/chrome/nav.js.map +1 -0
  62. package/dist/chrome/nav_groups.d.ts +6 -0
  63. package/dist/chrome/nav_groups.d.ts.map +1 -0
  64. package/dist/chrome/nav_groups.js +48 -0
  65. package/dist/chrome/nav_groups.js.map +1 -0
  66. package/dist/chrome/nav_sections.d.ts +29 -0
  67. package/dist/chrome/nav_sections.d.ts.map +1 -0
  68. package/dist/chrome/nav_sections.js +55 -0
  69. package/dist/chrome/nav_sections.js.map +1 -0
  70. package/dist/chrome/oklch.d.ts +10 -0
  71. package/dist/chrome/oklch.d.ts.map +1 -0
  72. package/dist/chrome/oklch.js +61 -0
  73. package/dist/chrome/oklch.js.map +1 -0
  74. package/dist/chrome/primitive_glyph.d.ts +14 -0
  75. package/dist/chrome/primitive_glyph.d.ts.map +1 -0
  76. package/dist/chrome/primitive_glyph.js +48 -0
  77. package/dist/chrome/primitive_glyph.js.map +1 -0
  78. package/dist/chrome/primitive_heading.d.ts +14 -0
  79. package/dist/chrome/primitive_heading.d.ts.map +1 -0
  80. package/dist/chrome/primitive_heading.js +32 -0
  81. package/dist/chrome/primitive_heading.js.map +1 -0
  82. package/dist/chrome/primitive_peek.d.ts +8 -0
  83. package/dist/chrome/primitive_peek.d.ts.map +1 -0
  84. package/dist/chrome/primitive_peek.js +51 -0
  85. package/dist/chrome/primitive_peek.js.map +1 -0
  86. package/dist/chrome/primitive_search.d.ts +9 -0
  87. package/dist/chrome/primitive_search.d.ts.map +1 -0
  88. package/dist/chrome/primitive_search.js +93 -0
  89. package/dist/chrome/primitive_search.js.map +1 -0
  90. package/dist/chrome/route.d.ts +48 -0
  91. package/dist/chrome/route.d.ts.map +1 -0
  92. package/dist/chrome/route.js +136 -0
  93. package/dist/chrome/route.js.map +1 -0
  94. package/dist/cli/args.d.ts +39 -0
  95. package/dist/cli/args.d.ts.map +1 -0
  96. package/dist/cli/args.js +171 -0
  97. package/dist/cli/args.js.map +1 -0
  98. package/dist/cli/run.d.ts +15 -0
  99. package/dist/cli/run.d.ts.map +1 -0
  100. package/dist/cli/run.js +113 -0
  101. package/dist/cli/run.js.map +1 -0
  102. package/dist/cli.d.ts +2 -0
  103. package/dist/cli.d.ts.map +1 -0
  104. package/dist/cli.js +22 -0
  105. package/dist/cli.js.map +1 -0
  106. package/dist/config.d.ts +118 -0
  107. package/dist/config.d.ts.map +1 -0
  108. package/dist/config.js +11 -0
  109. package/dist/config.js.map +1 -0
  110. package/dist/dev/code_editor.d.ts +10 -0
  111. package/dist/dev/code_editor.d.ts.map +1 -0
  112. package/dist/dev/code_editor.js +22 -0
  113. package/dist/dev/code_editor.js.map +1 -0
  114. package/dist/dev/dev_view.d.ts +9 -0
  115. package/dist/dev/dev_view.d.ts.map +1 -0
  116. package/dist/dev/dev_view.js +65 -0
  117. package/dist/dev/dev_view.js.map +1 -0
  118. package/dist/dev/editor_panel.d.ts +17 -0
  119. package/dist/dev/editor_panel.d.ts.map +1 -0
  120. package/dist/dev/editor_panel.js +51 -0
  121. package/dist/dev/editor_panel.js.map +1 -0
  122. package/dist/dev/monaco_editor.d.ts +15 -0
  123. package/dist/dev/monaco_editor.d.ts.map +1 -0
  124. package/dist/dev/monaco_editor.js +159 -0
  125. package/dist/dev/monaco_editor.js.map +1 -0
  126. package/dist/dev/preview_panel.d.ts +10 -0
  127. package/dist/dev/preview_panel.d.ts.map +1 -0
  128. package/dist/dev/preview_panel.js +45 -0
  129. package/dist/dev/preview_panel.js.map +1 -0
  130. package/dist/dev/prop_reference.d.ts +9 -0
  131. package/dist/dev/prop_reference.d.ts.map +1 -0
  132. package/dist/dev/prop_reference.js +134 -0
  133. package/dist/dev/prop_reference.js.map +1 -0
  134. package/dist/dev/tsx_language.d.ts +10 -0
  135. package/dist/dev/tsx_language.d.ts.map +1 -0
  136. package/dist/dev/tsx_language.js +283 -0
  137. package/dist/dev/tsx_language.js.map +1 -0
  138. package/dist/dev/use_editor.d.ts +23 -0
  139. package/dist/dev/use_editor.d.ts.map +1 -0
  140. package/dist/dev/use_editor.js +124 -0
  141. package/dist/dev/use_editor.js.map +1 -0
  142. package/dist/docs/docs_view.d.ts +10 -0
  143. package/dist/docs/docs_view.d.ts.map +1 -0
  144. package/dist/docs/docs_view.js +80 -0
  145. package/dist/docs/docs_view.js.map +1 -0
  146. package/dist/docs/example_source.d.ts +7 -0
  147. package/dist/docs/example_source.d.ts.map +1 -0
  148. package/dist/docs/example_source.js +56 -0
  149. package/dist/docs/example_source.js.map +1 -0
  150. package/dist/docs/examples_panel.d.ts +10 -0
  151. package/dist/docs/examples_panel.d.ts.map +1 -0
  152. package/dist/docs/examples_panel.js +51 -0
  153. package/dist/docs/examples_panel.js.map +1 -0
  154. package/dist/docs/gallery_view.d.ts +9 -0
  155. package/dist/docs/gallery_view.d.ts.map +1 -0
  156. package/dist/docs/gallery_view.js +98 -0
  157. package/dist/docs/gallery_view.js.map +1 -0
  158. package/dist/docs/inline_code.d.ts +11 -0
  159. package/dist/docs/inline_code.d.ts.map +1 -0
  160. package/dist/docs/inline_code.js +24 -0
  161. package/dist/docs/inline_code.js.map +1 -0
  162. package/dist/docs/on_this_page.d.ts +17 -0
  163. package/dist/docs/on_this_page.d.ts.map +1 -0
  164. package/dist/docs/on_this_page.js +77 -0
  165. package/dist/docs/on_this_page.js.map +1 -0
  166. package/dist/docs/props_table.d.ts +14 -0
  167. package/dist/docs/props_table.d.ts.map +1 -0
  168. package/dist/docs/props_table.js +34 -0
  169. package/dist/docs/props_table.js.map +1 -0
  170. package/dist/home/apps_section.d.ts +6 -0
  171. package/dist/home/apps_section.d.ts.map +1 -0
  172. package/dist/home/apps_section.js +44 -0
  173. package/dist/home/apps_section.js.map +1 -0
  174. package/dist/home/featured_strip.d.ts +12 -0
  175. package/dist/home/featured_strip.d.ts.map +1 -0
  176. package/dist/home/featured_strip.js +176 -0
  177. package/dist/home/featured_strip.js.map +1 -0
  178. package/dist/home/home_view.d.ts +11 -0
  179. package/dist/home/home_view.d.ts.map +1 -0
  180. package/dist/home/home_view.js +261 -0
  181. package/dist/home/home_view.js.map +1 -0
  182. package/dist/home/links.d.ts +8 -0
  183. package/dist/home/links.d.ts.map +1 -0
  184. package/dist/home/links.js +14 -0
  185. package/dist/home/links.js.map +1 -0
  186. package/dist/home/loaded_panel.d.ts +6 -0
  187. package/dist/home/loaded_panel.d.ts.map +1 -0
  188. package/dist/home/loaded_panel.js +116 -0
  189. package/dist/home/loaded_panel.js.map +1 -0
  190. package/dist/home/surface_chart.d.ts +6 -0
  191. package/dist/home/surface_chart.d.ts.map +1 -0
  192. package/dist/home/surface_chart.js +263 -0
  193. package/dist/home/surface_chart.js.map +1 -0
  194. package/dist/home/tokens.d.ts +49 -0
  195. package/dist/home/tokens.d.ts.map +1 -0
  196. package/dist/home/tokens.js +171 -0
  197. package/dist/home/tokens.js.map +1 -0
  198. package/dist/index.d.ts +6 -0
  199. package/dist/index.d.ts.map +1 -0
  200. package/dist/index.js +9 -0
  201. package/dist/index.js.map +1 -0
  202. package/dist/model/app_problems.d.ts +4 -0
  203. package/dist/model/app_problems.d.ts.map +1 -0
  204. package/dist/model/app_problems.js +90 -0
  205. package/dist/model/app_problems.js.map +1 -0
  206. package/dist/model/authoring_types.d.ts +23 -0
  207. package/dist/model/authoring_types.d.ts.map +1 -0
  208. package/dist/model/authoring_types.js +35 -0
  209. package/dist/model/authoring_types.js.map +1 -0
  210. package/dist/model/compile_jsx.d.ts +19 -0
  211. package/dist/model/compile_jsx.d.ts.map +1 -0
  212. package/dist/model/compile_jsx.js +55 -0
  213. package/dist/model/compile_jsx.js.map +1 -0
  214. package/dist/model/compose_example.d.ts +9 -0
  215. package/dist/model/compose_example.d.ts.map +1 -0
  216. package/dist/model/compose_example.js +24 -0
  217. package/dist/model/compose_example.js.map +1 -0
  218. package/dist/model/composition_key.d.ts +6 -0
  219. package/dist/model/composition_key.d.ts.map +1 -0
  220. package/dist/model/composition_key.js +26 -0
  221. package/dist/model/composition_key.js.map +1 -0
  222. package/dist/model/describe_runtime.d.ts +33 -0
  223. package/dist/model/describe_runtime.d.ts.map +1 -0
  224. package/dist/model/describe_runtime.js +77 -0
  225. package/dist/model/describe_runtime.js.map +1 -0
  226. package/dist/model/featured.d.ts +11 -0
  227. package/dist/model/featured.d.ts.map +1 -0
  228. package/dist/model/featured.js +70 -0
  229. package/dist/model/featured.js.map +1 -0
  230. package/dist/model/jsx_transform.d.ts +10 -0
  231. package/dist/model/jsx_transform.d.ts.map +1 -0
  232. package/dist/model/jsx_transform.js +31 -0
  233. package/dist/model/jsx_transform.js.map +1 -0
  234. package/dist/model/png_manifest.d.ts +23 -0
  235. package/dist/model/png_manifest.d.ts.map +1 -0
  236. package/dist/model/png_manifest.js +26 -0
  237. package/dist/model/png_manifest.js.map +1 -0
  238. package/dist/model/read_examples.d.ts +12 -0
  239. package/dist/model/read_examples.d.ts.map +1 -0
  240. package/dist/model/read_examples.js +43 -0
  241. package/dist/model/read_examples.js.map +1 -0
  242. package/dist/model/search.d.ts +4 -0
  243. package/dist/model/search.d.ts.map +1 -0
  244. package/dist/model/search.js +29 -0
  245. package/dist/model/search.js.map +1 -0
  246. package/dist/model/sha256.d.ts +3 -0
  247. package/dist/model/sha256.d.ts.map +1 -0
  248. package/dist/model/sha256.js +72 -0
  249. package/dist/model/sha256.js.map +1 -0
  250. package/dist/model/slack_limits.d.ts +9 -0
  251. package/dist/model/slack_limits.d.ts.map +1 -0
  252. package/dist/model/slack_limits.js +213 -0
  253. package/dist/model/slack_limits.js.map +1 -0
  254. package/dist/node/app_bundle.d.ts +45 -0
  255. package/dist/node/app_bundle.d.ts.map +1 -0
  256. package/dist/node/app_bundle.js +212 -0
  257. package/dist/node/app_bundle.js.map +1 -0
  258. package/dist/node/build_site.d.ts +28 -0
  259. package/dist/node/build_site.d.ts.map +1 -0
  260. package/dist/node/build_site.js +90 -0
  261. package/dist/node/build_site.js.map +1 -0
  262. package/dist/node/check.d.ts +40 -0
  263. package/dist/node/check.d.ts.map +1 -0
  264. package/dist/node/check.js +162 -0
  265. package/dist/node/check.js.map +1 -0
  266. package/dist/node/dev_bundle.d.ts +21 -0
  267. package/dist/node/dev_bundle.d.ts.map +1 -0
  268. package/dist/node/dev_bundle.js +121 -0
  269. package/dist/node/dev_bundle.js.map +1 -0
  270. package/dist/node/dev_server.d.ts +16 -0
  271. package/dist/node/dev_server.d.ts.map +1 -0
  272. package/dist/node/dev_server.js +291 -0
  273. package/dist/node/dev_server.js.map +1 -0
  274. package/dist/node/init_config.d.ts +30 -0
  275. package/dist/node/init_config.d.ts.map +1 -0
  276. package/dist/node/init_config.js +158 -0
  277. package/dist/node/init_config.js.map +1 -0
  278. package/dist/node/load_config.d.ts +34 -0
  279. package/dist/node/load_config.d.ts.map +1 -0
  280. package/dist/node/load_config.js +246 -0
  281. package/dist/node/load_config.js.map +1 -0
  282. package/dist/node/project_resolution.d.ts +17 -0
  283. package/dist/node/project_resolution.d.ts.map +1 -0
  284. package/dist/node/project_resolution.js +66 -0
  285. package/dist/node/project_resolution.js.map +1 -0
  286. package/dist/node/rasterize.d.ts +23 -0
  287. package/dist/node/rasterize.d.ts.map +1 -0
  288. package/dist/node/rasterize.js +79 -0
  289. package/dist/node/rasterize.js.map +1 -0
  290. package/dist/node/report.d.ts +8 -0
  291. package/dist/node/report.d.ts.map +1 -0
  292. package/dist/node/report.js +57 -0
  293. package/dist/node/report.js.map +1 -0
  294. package/dist/node/resolve_hooks.d.ts +16 -0
  295. package/dist/node/resolve_hooks.d.ts.map +1 -0
  296. package/dist/node/resolve_hooks.js +104 -0
  297. package/dist/node/resolve_hooks.js.map +1 -0
  298. package/dist/studio.d.ts +4 -0
  299. package/dist/studio.d.ts.map +1 -0
  300. package/dist/studio.js +188 -0
  301. package/dist/studio.js.map +1 -0
  302. package/dist/studio_context.d.ts +27 -0
  303. package/dist/studio_context.d.ts.map +1 -0
  304. package/dist/studio_context.js +17 -0
  305. package/dist/studio_context.js.map +1 -0
  306. package/dist/surfaces/adopt_stylesheet.d.ts +7 -0
  307. package/dist/surfaces/adopt_stylesheet.d.ts.map +1 -0
  308. package/dist/surfaces/adopt_stylesheet.js +64 -0
  309. package/dist/surfaces/adopt_stylesheet.js.map +1 -0
  310. package/dist/surfaces/app_preview.d.ts +4 -0
  311. package/dist/surfaces/app_preview.d.ts.map +1 -0
  312. package/dist/surfaces/app_preview.js +28 -0
  313. package/dist/surfaces/app_preview.js.map +1 -0
  314. package/dist/surfaces/app_surface.d.ts +9 -0
  315. package/dist/surfaces/app_surface.d.ts.map +1 -0
  316. package/dist/surfaces/app_surface.js +27 -0
  317. package/dist/surfaces/app_surface.js.map +1 -0
  318. package/dist/surfaces/applicable_enhancements.d.ts +4 -0
  319. package/dist/surfaces/applicable_enhancements.d.ts.map +1 -0
  320. package/dist/surfaces/applicable_enhancements.js +16 -0
  321. package/dist/surfaces/applicable_enhancements.js.map +1 -0
  322. package/dist/surfaces/enhancement_select.d.ts +10 -0
  323. package/dist/surfaces/enhancement_select.d.ts.map +1 -0
  324. package/dist/surfaces/enhancement_select.js +28 -0
  325. package/dist/surfaces/enhancement_select.js.map +1 -0
  326. package/dist/surfaces/example_picker.d.ts +11 -0
  327. package/dist/surfaces/example_picker.d.ts.map +1 -0
  328. package/dist/surfaces/example_picker.js +44 -0
  329. package/dist/surfaces/example_picker.js.map +1 -0
  330. package/dist/surfaces/format_source.d.ts +4 -0
  331. package/dist/surfaces/format_source.d.ts.map +1 -0
  332. package/dist/surfaces/format_source.js +30 -0
  333. package/dist/surfaces/format_source.js.map +1 -0
  334. package/dist/surfaces/html_surface.d.ts +14 -0
  335. package/dist/surfaces/html_surface.d.ts.map +1 -0
  336. package/dist/surfaces/html_surface.js +122 -0
  337. package/dist/surfaces/html_surface.js.map +1 -0
  338. package/dist/surfaces/png_surface.d.ts +13 -0
  339. package/dist/surfaces/png_surface.d.ts.map +1 -0
  340. package/dist/surfaces/png_surface.js +68 -0
  341. package/dist/surfaces/png_surface.js.map +1 -0
  342. package/dist/surfaces/react_surface.d.ts +11 -0
  343. package/dist/surfaces/react_surface.d.ts.map +1 -0
  344. package/dist/surfaces/react_surface.js +55 -0
  345. package/dist/surfaces/react_surface.js.map +1 -0
  346. package/dist/surfaces/render_output.d.ts +31 -0
  347. package/dist/surfaces/render_output.d.ts.map +1 -0
  348. package/dist/surfaces/render_output.js +119 -0
  349. package/dist/surfaces/render_output.js.map +1 -0
  350. package/dist/surfaces/scaled_preview.d.ts +17 -0
  351. package/dist/surfaces/scaled_preview.d.ts.map +1 -0
  352. package/dist/surfaces/scaled_preview.js +74 -0
  353. package/dist/surfaces/scaled_preview.js.map +1 -0
  354. package/dist/surfaces/shadow_root.d.ts +8 -0
  355. package/dist/surfaces/shadow_root.d.ts.map +1 -0
  356. package/dist/surfaces/shadow_root.js +41 -0
  357. package/dist/surfaces/shadow_root.js.map +1 -0
  358. package/dist/surfaces/slack_surface.d.ts +12 -0
  359. package/dist/surfaces/slack_surface.d.ts.map +1 -0
  360. package/dist/surfaces/slack_surface.js +27 -0
  361. package/dist/surfaces/slack_surface.js.map +1 -0
  362. package/dist/surfaces/snapshot_surface.d.ts +6 -0
  363. package/dist/surfaces/snapshot_surface.d.ts.map +1 -0
  364. package/dist/surfaces/snapshot_surface.js +5 -0
  365. package/dist/surfaces/snapshot_surface.js.map +1 -0
  366. package/dist/surfaces/surface_board.d.ts +19 -0
  367. package/dist/surfaces/surface_board.d.ts.map +1 -0
  368. package/dist/surfaces/surface_board.js +128 -0
  369. package/dist/surfaces/surface_board.js.map +1 -0
  370. package/dist/surfaces/surface_frame.d.ts +8 -0
  371. package/dist/surfaces/surface_frame.d.ts.map +1 -0
  372. package/dist/surfaces/surface_frame.js +4 -0
  373. package/dist/surfaces/surface_frame.js.map +1 -0
  374. package/dist/surfaces/surface_logos.d.ts +9 -0
  375. package/dist/surfaces/surface_logos.d.ts.map +1 -0
  376. package/dist/surfaces/surface_logos.js +21 -0
  377. package/dist/surfaces/surface_logos.js.map +1 -0
  378. package/dist/surfaces/surface_preview.d.ts +32 -0
  379. package/dist/surfaces/surface_preview.d.ts.map +1 -0
  380. package/dist/surfaces/surface_preview.js +66 -0
  381. package/dist/surfaces/surface_preview.js.map +1 -0
  382. package/dist/surfaces/surface_select.d.ts +34 -0
  383. package/dist/surfaces/surface_select.d.ts.map +1 -0
  384. package/dist/surfaces/surface_select.js +119 -0
  385. package/dist/surfaces/surface_select.js.map +1 -0
  386. package/dist/surfaces/text_surfaces.d.ts +14 -0
  387. package/dist/surfaces/text_surfaces.d.ts.map +1 -0
  388. package/dist/surfaces/text_surfaces.js +31 -0
  389. package/dist/surfaces/text_surfaces.js.map +1 -0
  390. package/dist/surfaces/zoom_select.d.ts +9 -0
  391. package/dist/surfaces/zoom_select.d.ts.map +1 -0
  392. package/dist/surfaces/zoom_select.js +32 -0
  393. package/dist/surfaces/zoom_select.js.map +1 -0
  394. package/dist/types.d.ts +32 -0
  395. package/dist/types.d.ts.map +1 -0
  396. package/dist/types.js +9 -0
  397. package/dist/types.js.map +1 -0
  398. package/docs/ci.md +55 -0
  399. package/docs/commands.md +167 -0
  400. package/docs/config.md +192 -0
  401. package/docs/images/home.png +0 -0
  402. package/docs/images/reference.png +0 -0
  403. package/docs/images/workbench.png +0 -0
  404. package/docs/index.md +96 -0
  405. package/docs/toc.yml +10 -0
  406. package/package.json +89 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../src/chrome/header.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAU1C,MAAM,WAAW,iBAAiB;IAChC,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,uEAAuE;IACvE,IAAI,EAAE,UAAU,GAAG,SAAS,CAAC;IAC7B,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,yEAAyE;IACzE,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,SAAS,EAAE,mBAAmB,CAAC;IAC/B,YAAY,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IACzC,iBAAiB,EAAE,CAAC,SAAS,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC5D,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAwCD,qGAAqG;AACrG,eAAO,MAAM,YAAY,GAAI,yGAU1B,iBAAiB,qDAgKnB,CAAC"}
@@ -0,0 +1,124 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "@emotion/react/jsx-runtime";
2
+ import { EuiButton, EuiButtonGroup, EuiButtonIcon, EuiLink, EuiText, useEuiTheme, } from '@elastic/eui';
3
+ import { css } from '@emotion/react';
4
+ import { DOCS_URL } from '../home/links.js';
5
+ import { IsomerMark } from './isomer_mark.js';
6
+ import { PrimitiveSearch } from './primitive_search.js';
7
+ import { formatLocation, HOME } from './route.js';
8
+ const MODE_OPTIONS = [
9
+ { id: 'dev', label: 'Workbench' },
10
+ { id: 'docs', label: 'Reference' },
11
+ ];
12
+ const isMode = (id) => MODE_OPTIONS.some((option) => option.id === id);
13
+ const COLOR_MODES = [
14
+ { id: 'system', label: 'System', iconType: 'display' },
15
+ { id: 'light', label: 'Light', iconType: 'sun' },
16
+ { id: 'dark', label: 'Dark', iconType: 'moon' },
17
+ ];
18
+ const isColorMode = (id) => COLOR_MODES.some((option) => option.id === id);
19
+ const ColorModePicker = ({ colorMode, onColorModeChange, }) => (_jsx(EuiButtonGroup, { css: css `
20
+ flex: none;
21
+ `, legend: "Color mode", buttonSize: "s", variant: "selection", idSelected: colorMode, display: "highlighted", onChange: (id) => isColorMode(id) && onColorModeChange(id), children: COLOR_MODES.map(({ id, label, iconType }) => (_jsx(EuiButtonIcon, { id, iconType, "aria-label": label, title: label }, id))) }));
22
+ /** Title, the Workbench/Reference switch, search and color mode. The mark and title link to Home. */
23
+ export const StudioHeader = ({ title = 'Isomer Studio', mode, appTitle, home = false, colorMode, onModeChange, onColorModeChange, onSelectPrimitive, onHome, }) => {
24
+ const { euiTheme } = useEuiTheme();
25
+ const bar = css `
26
+ flex: none;
27
+ height: ${euiTheme.size.xxxl};
28
+ padding: 0 ${euiTheme.size.base} 0 ${euiTheme.size.m};
29
+ display: grid;
30
+ grid-template-columns: 1fr auto 1fr;
31
+ align-items: center;
32
+ gap: ${euiTheme.size.s};
33
+ @media (max-width: 1200px) {
34
+ display: flex;
35
+ flex-wrap: nowrap;
36
+ padding-inline: ${euiTheme.size.s};
37
+ }
38
+ `;
39
+ const brandSlot = css `
40
+ min-width: 0;
41
+ flex-wrap: nowrap;
42
+ @media (max-width: 1200px) {
43
+ flex: 1 0 auto;
44
+ }
45
+ `;
46
+ const subtitle = css `
47
+ white-space: nowrap;
48
+ @media (max-width: 1024px) {
49
+ display: none;
50
+ }
51
+ `;
52
+ const titleText = css `
53
+ white-space: nowrap;
54
+ @media (max-width: 640px) {
55
+ display: none;
56
+ }
57
+ `;
58
+ const modeSlot = css `
59
+ flex: none;
60
+ `;
61
+ const modeLabel = css `
62
+ @media (max-width: 1200px) {
63
+ position: absolute;
64
+ inline-size: 1px;
65
+ block-size: 1px;
66
+ overflow: hidden;
67
+ clip-path: inset(50%);
68
+ white-space: nowrap;
69
+ }
70
+ `;
71
+ const toolsSlot = css `
72
+ min-width: 0;
73
+ flex-wrap: nowrap;
74
+ @media (max-width: 1200px) {
75
+ flex: 0 1 auto;
76
+ }
77
+ `;
78
+ const brand = css `
79
+ flex: none;
80
+ display: inline-flex;
81
+ align-items: center;
82
+ gap: ${euiTheme.size.s};
83
+ border-radius: ${euiTheme.border.radius.small};
84
+ text-decoration: none;
85
+ &:hover {
86
+ text-decoration: none;
87
+ }
88
+ &:focus-visible {
89
+ outline: 2px solid ${euiTheme.colors.primary};
90
+ outline-offset: 2px;
91
+ }
92
+ `;
93
+ return (_jsxs("header", { css: bar, children: [_jsxs("div", { css: [
94
+ brandSlot,
95
+ css `
96
+ display: flex;
97
+ align-items: center;
98
+ gap: ${euiTheme.size.s};
99
+ `,
100
+ ], children: [_jsxs("a", { href: formatLocation(HOME), css: brand, "aria-label": `${title} home`, onClick: (event) => {
101
+ if (event.button !== 0 || event.metaKey || event.ctrlKey) {
102
+ return;
103
+ }
104
+ event.preventDefault();
105
+ onHome();
106
+ }, children: [_jsx(IsomerMark, { size: 22 }), _jsx(EuiText, { size: "s", color: "ghost", css: titleText, children: _jsx("strong", { children: title }) })] }), home ? null : (_jsx(EuiText, { size: "xs", color: "ghost", css: subtitle, children: mode === undefined
107
+ ? appTitle
108
+ : mode === 'dev'
109
+ ? 'Composition editor'
110
+ : 'Primitive reference' }))] }), home ? (_jsx("span", { css: css `
111
+ @media (max-width: 1200px) {
112
+ display: none;
113
+ }
114
+ ` })) : (_jsx(EuiButtonGroup, { css: modeSlot, legend: "Studio mode", buttonSize: "s", variant: "selection", idSelected: mode ?? '', display: "highlighted", onChange: (id) => isMode(id) && onModeChange(id), children: MODE_OPTIONS.map(({ id, label }) => (_jsx(EuiButton, { id: id, title: label, iconType: id === 'dev' ? 'code' : 'document', children: _jsx("span", { css: modeLabel, children: label }) }, id))) })), _jsx("div", { css: [
115
+ toolsSlot,
116
+ css `
117
+ display: flex;
118
+ justify-content: flex-end;
119
+ align-items: center;
120
+ gap: ${euiTheme.size.s};
121
+ `,
122
+ ], children: home ? (_jsx(EuiLink, { href: DOCS_URL, target: "_blank", external: true, color: "ghost", children: "Isomer docs" })) : (_jsxs(_Fragment, { children: [_jsx(PrimitiveSearch, { onSelectPrimitive }), _jsx(ColorModePicker, { colorMode, onColorModeChange })] })) })] }));
123
+ };
124
+ //# sourceMappingURL=header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header.js","sourceRoot":"","sources":["../../src/chrome/header.tsx"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\nimport React from 'react';\nimport {\n EuiButton,\n EuiButtonGroup,\n EuiButtonIcon,\n EuiLink,\n EuiText,\n useEuiTheme,\n} from '@elastic/eui';\nimport { css } from '@emotion/react';\n\nimport { DOCS_URL } from '../home/links';\n\nimport type { ColorModePreference } from './color_mode';\nimport { IsomerMark } from './isomer_mark';\nimport { PrimitiveSearch } from './primitive_search';\nimport type { StudioMode } from './route';\nimport { formatLocation, HOME } from './route';\n\nconst MODE_OPTIONS: { id: StudioMode; label: string }[] = [\n { id: 'dev', label: 'Workbench' },\n { id: 'docs', label: 'Reference' },\n];\nconst isMode = (id: string): id is StudioMode =>\n MODE_OPTIONS.some((option) => option.id === id);\n\nexport interface StudioHeaderProps {\n /** Defaults to \"Isomer Studio\". */\n title?: string | undefined;\n /** Absent while an app or Home is open, which selects neither mode. */\n mode: StudioMode | undefined;\n /** The open app's title, shown in place of the mode's name. */\n appTitle?: string | undefined;\n /** On Home the switch, search and color mode give way to a docs link. */\n home?: boolean | undefined;\n colorMode: ColorModePreference;\n onModeChange: (mode: StudioMode) => void;\n onColorModeChange: (colorMode: ColorModePreference) => void;\n onSelectPrimitive: (type: string) => void;\n onHome: () => void;\n}\n\nconst COLOR_MODES: {\n id: ColorModePreference;\n label: string;\n iconType: 'sun' | 'moon' | 'display';\n}[] = [\n { id: 'system', label: 'System', iconType: 'display' },\n { id: 'light', label: 'Light', iconType: 'sun' },\n { id: 'dark', label: 'Dark', iconType: 'moon' },\n];\n\nconst isColorMode = (id: string): id is ColorModePreference =>\n COLOR_MODES.some((option) => option.id === id);\n\nconst ColorModePicker = ({\n colorMode,\n onColorModeChange,\n}: Pick<StudioHeaderProps, 'colorMode' | 'onColorModeChange'>) => (\n <EuiButtonGroup\n css={css`\n flex: none;\n `}\n legend=\"Color mode\"\n buttonSize=\"s\"\n variant=\"selection\"\n idSelected={colorMode}\n display=\"highlighted\"\n onChange={(id) => isColorMode(id) && onColorModeChange(id)}>\n {COLOR_MODES.map(({ id, label, iconType }) => (\n <EuiButtonIcon\n key={id}\n {...{ id, iconType }}\n aria-label={label}\n title={label}\n />\n ))}\n </EuiButtonGroup>\n);\n\n/** Title, the Workbench/Reference switch, search and color mode. The mark and title link to Home. */\nexport const StudioHeader = ({\n title = 'Isomer Studio',\n mode,\n appTitle,\n home = false,\n colorMode,\n onModeChange,\n onColorModeChange,\n onSelectPrimitive,\n onHome,\n}: StudioHeaderProps) => {\n const { euiTheme } = useEuiTheme();\n\n const bar = css`\n flex: none;\n height: ${euiTheme.size.xxxl};\n padding: 0 ${euiTheme.size.base} 0 ${euiTheme.size.m};\n display: grid;\n grid-template-columns: 1fr auto 1fr;\n align-items: center;\n gap: ${euiTheme.size.s};\n @media (max-width: 1200px) {\n display: flex;\n flex-wrap: nowrap;\n padding-inline: ${euiTheme.size.s};\n }\n `;\n const brandSlot = css`\n min-width: 0;\n flex-wrap: nowrap;\n @media (max-width: 1200px) {\n flex: 1 0 auto;\n }\n `;\n const subtitle = css`\n white-space: nowrap;\n @media (max-width: 1024px) {\n display: none;\n }\n `;\n const titleText = css`\n white-space: nowrap;\n @media (max-width: 640px) {\n display: none;\n }\n `;\n const modeSlot = css`\n flex: none;\n `;\n const modeLabel = css`\n @media (max-width: 1200px) {\n position: absolute;\n inline-size: 1px;\n block-size: 1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n }\n `;\n const toolsSlot = css`\n min-width: 0;\n flex-wrap: nowrap;\n @media (max-width: 1200px) {\n flex: 0 1 auto;\n }\n `;\n const brand = css`\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: ${euiTheme.size.s};\n border-radius: ${euiTheme.border.radius.small};\n text-decoration: none;\n &:hover {\n text-decoration: none;\n }\n &:focus-visible {\n outline: 2px solid ${euiTheme.colors.primary};\n outline-offset: 2px;\n }\n `;\n\n return (\n <header css={bar}>\n <div\n css={[\n brandSlot,\n css`\n display: flex;\n align-items: center;\n gap: ${euiTheme.size.s};\n `,\n ]}>\n <a\n href={formatLocation(HOME)}\n css={brand}\n aria-label={`${title} home`}\n onClick={(event) => {\n if (event.button !== 0 || event.metaKey || event.ctrlKey) {\n return;\n }\n event.preventDefault();\n onHome();\n }}>\n <IsomerMark size={22} />\n <EuiText size=\"s\" color=\"ghost\" css={titleText}>\n <strong>{title}</strong>\n </EuiText>\n </a>\n {home ? null : (\n <EuiText size=\"xs\" color=\"ghost\" css={subtitle}>\n {mode === undefined\n ? appTitle\n : mode === 'dev'\n ? 'Composition editor'\n : 'Primitive reference'}\n </EuiText>\n )}\n </div>\n {home ? (\n <span\n css={css`\n @media (max-width: 1200px) {\n display: none;\n }\n `}\n />\n ) : (\n <EuiButtonGroup\n css={modeSlot}\n legend=\"Studio mode\"\n buttonSize=\"s\"\n variant=\"selection\"\n idSelected={mode ?? ''}\n display=\"highlighted\"\n onChange={(id) => isMode(id) && onModeChange(id)}>\n {MODE_OPTIONS.map(({ id, label }) => (\n <EuiButton\n key={id}\n id={id}\n title={label}\n iconType={id === 'dev' ? 'code' : 'document'}>\n <span css={modeLabel}>{label}</span>\n </EuiButton>\n ))}\n </EuiButtonGroup>\n )}\n <div\n css={[\n toolsSlot,\n css`\n display: flex;\n justify-content: flex-end;\n align-items: center;\n gap: ${euiTheme.size.s};\n `,\n ]}>\n {home ? (\n <EuiLink href={DOCS_URL} target=\"_blank\" external color=\"ghost\">\n Isomer docs\n </EuiLink>\n ) : (\n <>\n <PrimitiveSearch {...{ onSelectPrimitive }} />\n <ColorModePicker {...{ colorMode, onColorModeChange }} />\n </>\n )}\n </div>\n </header>\n );\n};\n"]}
@@ -0,0 +1,12 @@
1
+ import type { ICON_VARS } from '@elastic/isomer-sdk';
2
+ /** A colour per `--isomer-icon-*` slot, keyed by the slot's suffix. */
3
+ export type IconColors = Readonly<Record<IconSlot, string>>;
4
+ type IconSlot = (typeof ICON_VARS)[number] extends `--isomer-icon-${infer Slot}` ? Slot : never;
5
+ /**
6
+ * A pack icon as an `<img>` source, so its markup never reaches the DOM.
7
+ *
8
+ * An image inherits neither CSS variables nor `currentColor`, so both resolve to `colors`.
9
+ */
10
+ export declare const iconDataUri: (svg: string, colors: IconColors) => string;
11
+ export {};
12
+ //# sourceMappingURL=icon_data_uri.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon_data_uri.d.ts","sourceRoot":"","sources":["../../src/chrome/icon_data_uri.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,uEAAuE;AACvE,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAE5D,KAAK,QAAQ,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,SAAS,iBAAiB,MAAM,IAAI,EAAE,GAC5E,IAAI,GACJ,KAAK,CAAC;AAOV;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,KAAK,MAAM,EAAE,QAAQ,UAAU,KAAG,MAW7D,CAAC"}
@@ -0,0 +1,21 @@
1
+ /*
2
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3
+ * or more contributor license agreements. Licensed under the Elastic License
4
+ * 2.0; you may not use this file except in compliance with the Elastic License
5
+ * 2.0.
6
+ */
7
+ const ICON_VAR = /var\(\s*--isomer-icon-([a-z]+)\s*(?:,\s*([^)]*?)\s*)?\)/g;
8
+ const isSlot = (name, colors) => Object.hasOwn(colors, name);
9
+ /**
10
+ * A pack icon as an `<img>` source, so its markup never reaches the DOM.
11
+ *
12
+ * An image inherits neither CSS variables nor `currentColor`, so both resolve to `colors`.
13
+ */
14
+ export const iconDataUri = (svg, colors) => {
15
+ const painted = svg
16
+ .replace(ICON_VAR, (match, name, fallback) => isSlot(name, colors) ? colors[name] : (fallback ?? match))
17
+ .replace(/\bcurrentColor\b/g, colors.fg)
18
+ .replace(/^(\s*<svg)(?![^>]*\sxmlns=)/, '$1 xmlns="http://www.w3.org/2000/svg"');
19
+ return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(painted)}`;
20
+ };
21
+ //# sourceMappingURL=icon_data_uri.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon_data_uri.js","sourceRoot":"","sources":["../../src/chrome/icon_data_uri.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,MAAM,QAAQ,GAAG,0DAA0D,CAAC;AAE5E,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,MAAkB,EAAoB,EAAE,CACpE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAE9B;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,MAAkB,EAAU,EAAE;IACrE,MAAM,OAAO,GAAG,GAAG;SAChB,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,IAAY,EAAE,QAAiB,EAAE,EAAE,CAC5D,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,KAAK,CAAC,CAC1D;SACA,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,EAAE,CAAC;SACvC,OAAO,CACN,6BAA6B,EAC7B,uCAAuC,CACxC,CAAC;IACJ,OAAO,oCAAoC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;AAC3E,CAAC,CAAC","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\nimport type { ICON_VARS } from '@elastic/isomer-sdk';\n\n/** A colour per `--isomer-icon-*` slot, keyed by the slot's suffix. */\nexport type IconColors = Readonly<Record<IconSlot, string>>;\n\ntype IconSlot = (typeof ICON_VARS)[number] extends `--isomer-icon-${infer Slot}`\n ? Slot\n : never;\n\nconst ICON_VAR = /var\\(\\s*--isomer-icon-([a-z]+)\\s*(?:,\\s*([^)]*?)\\s*)?\\)/g;\n\nconst isSlot = (name: string, colors: IconColors): name is IconSlot =>\n Object.hasOwn(colors, name);\n\n/**\n * A pack icon as an `<img>` source, so its markup never reaches the DOM.\n *\n * An image inherits neither CSS variables nor `currentColor`, so both resolve to `colors`.\n */\nexport const iconDataUri = (svg: string, colors: IconColors): string => {\n const painted = svg\n .replace(ICON_VAR, (match, name: string, fallback?: string) =>\n isSlot(name, colors) ? colors[name] : (fallback ?? match)\n )\n .replace(/\\bcurrentColor\\b/g, colors.fg)\n .replace(\n /^(\\s*<svg)(?![^>]*\\sxmlns=)/,\n '$1 xmlns=\"http://www.w3.org/2000/svg\"'\n );\n return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(painted)}`;\n};\n"]}
@@ -0,0 +1,17 @@
1
+ /** The four balls of the Isomer logo, in the logo's own colors. */
2
+ export declare const ISOMER_MARK: {
3
+ readonly yellow: "#FEC514";
4
+ readonly teal: "#00BFB3";
5
+ readonly pink: "#F04E98";
6
+ readonly blue: "#1BA9F5";
7
+ };
8
+ /** Paths and fills from `docs/logo.svg`, which `isomer_mark.test.ts` keeps in step. */
9
+ export declare const ISOMER_LOGO_PATHS: ReadonlyArray<{
10
+ d: string;
11
+ fill: string;
12
+ }>;
13
+ /** The Isomer mark at `size` pixels, decorative. */
14
+ export declare const IsomerMark: ({ size }: {
15
+ size: number;
16
+ }) => import("@emotion/react/jsx-runtime").JSX.Element;
17
+ //# sourceMappingURL=isomer_mark.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isomer_mark.d.ts","sourceRoot":"","sources":["../../src/chrome/isomer_mark.tsx"],"names":[],"mappings":"AASA,mEAAmE;AACnE,eAAO,MAAM,WAAW;;;;;CAKd,CAAC;AAEX,uFAAuF;AACvF,eAAO,MAAM,iBAAiB,EAAE,aAAa,CAAC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAiCxE,CAAC;AAEF,oDAAoD;AACpD,eAAO,MAAM,UAAU,GAAI,UAAU;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,qDAWpD,CAAC"}
@@ -0,0 +1,46 @@
1
+ import { jsx as _jsx } from "@emotion/react/jsx-runtime";
2
+ /** The four balls of the Isomer logo, in the logo's own colors. */
3
+ export const ISOMER_MARK = {
4
+ yellow: '#FEC514',
5
+ teal: '#00BFB3',
6
+ pink: '#F04E98',
7
+ blue: '#1BA9F5',
8
+ };
9
+ /** Paths and fills from `docs/logo.svg`, which `isomer_mark.test.ts` keeps in step. */
10
+ export const ISOMER_LOGO_PATHS = [
11
+ {
12
+ d: 'M16 31C19.3137 31 22 28.3137 22 25C22 21.6863 19.3137 19 16 19C12.6863 19 10 21.6863 10 25C10 28.3137 12.6863 31 16 31Z',
13
+ fill: ISOMER_MARK.teal,
14
+ },
15
+ {
16
+ d: 'M16 19C19.3137 19 22 21.6863 22 25C20.3287 26.2553 18.2511 27 16 27C13.7486 27 11.6714 26.2555 10 25C10 21.6863 12.6863 19 16 19Z',
17
+ fill: '#FF957D',
18
+ },
19
+ {
20
+ d: 'M24 9C24 4.58172 20.4183 1 16 1C11.5817 1 8 4.58172 8 9C8 13.4183 11.5817 17 16 17C20.4183 17 24 13.4183 24 9Z',
21
+ fill: ISOMER_MARK.yellow,
22
+ },
23
+ {
24
+ d: 'M16 7C19.1578 7 21.972 8.46505 23.8047 10.751C23.006 14.3267 19.8166 17 16 17C12.1834 17 8.99298 14.3268 8.19434 10.751C10.027 8.46477 12.842 7 16 7Z',
25
+ fill: ISOMER_MARK.blue,
26
+ },
27
+ {
28
+ d: 'M6 24C8.76142 24 11 21.7614 11 19C11 16.2386 8.76142 14 6 14C3.23858 14 1 16.2386 1 19C1 21.7614 3.23858 24 6 24Z',
29
+ fill: ISOMER_MARK.pink,
30
+ },
31
+ {
32
+ d: 'M6.4502 14.0205C9.00066 14.2481 11 16.3903 11 19C11 20.9178 9.91966 22.5822 8.33496 23.4209C6.87813 21.6836 6 19.4446 6 17C6 15.9625 6.15693 14.9615 6.4502 14.0205Z',
33
+ fill: '#FF957D',
34
+ },
35
+ {
36
+ d: 'M26 24C28.7614 24 31 21.7614 31 19C31 16.2386 28.7614 14 26 14C23.2386 14 21 16.2386 21 19C21 21.7614 23.2386 24 26 24Z',
37
+ fill: ISOMER_MARK.pink,
38
+ },
39
+ {
40
+ d: 'M25.5488 14.0205C25.8422 14.9616 26 15.9624 26 17C26 19.4449 25.1211 21.6836 23.6641 23.4209C22.0798 22.582 21 20.9175 21 19C21 16.3907 22.9988 14.2486 25.5488 14.0205Z',
41
+ fill: '#FF957D',
42
+ },
43
+ ];
44
+ /** The Isomer mark at `size` pixels, decorative. */
45
+ export const IsomerMark = ({ size }) => (_jsx("svg", { width: size, height: size, viewBox: "0 0 32 32", fill: "none", "aria-hidden": true, children: ISOMER_LOGO_PATHS.map(({ d, fill }) => (_jsx("path", { d, fill }, d))) }));
46
+ //# sourceMappingURL=isomer_mark.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isomer_mark.js","sourceRoot":"","sources":["../../src/chrome/isomer_mark.tsx"],"names":[],"mappings":";AASA,mEAAmE;AACnE,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,MAAM,EAAE,SAAS;IACjB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;CACP,CAAC;AAEX,uFAAuF;AACvF,MAAM,CAAC,MAAM,iBAAiB,GAA+C;IAC3E;QACE,CAAC,EAAE,yHAAyH;QAC5H,IAAI,EAAE,WAAW,CAAC,IAAI;KACvB;IACD;QACE,CAAC,EAAE,mIAAmI;QACtI,IAAI,EAAE,SAAS;KAChB;IACD;QACE,CAAC,EAAE,gHAAgH;QACnH,IAAI,EAAE,WAAW,CAAC,MAAM;KACzB;IACD;QACE,CAAC,EAAE,uJAAuJ;QAC1J,IAAI,EAAE,WAAW,CAAC,IAAI;KACvB;IACD;QACE,CAAC,EAAE,mHAAmH;QACtH,IAAI,EAAE,WAAW,CAAC,IAAI;KACvB;IACD;QACE,CAAC,EAAE,sKAAsK;QACzK,IAAI,EAAE,SAAS;KAChB;IACD;QACE,CAAC,EAAE,yHAAyH;QAC5H,IAAI,EAAE,WAAW,CAAC,IAAI;KACvB;IACD;QACE,CAAC,EAAE,0KAA0K;QAC7K,IAAI,EAAE,SAAS;KAChB;CACF,CAAC;AAEF,oDAAoD;AACpD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EAAE,IAAI,EAAoB,EAAE,EAAE,CAAC,CACxD,cACE,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,EACZ,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,iBACE,IAAI,YAChB,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CACtC,eAAoB,CAAC,EAAE,IAAI,IAAhB,CAAC,CAAqB,CAClC,CAAC,GACE,CACP,CAAC","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\nimport React from 'react';\n\n/** The four balls of the Isomer logo, in the logo's own colors. */\nexport const ISOMER_MARK = {\n yellow: '#FEC514',\n teal: '#00BFB3',\n pink: '#F04E98',\n blue: '#1BA9F5',\n} as const;\n\n/** Paths and fills from `docs/logo.svg`, which `isomer_mark.test.ts` keeps in step. */\nexport const ISOMER_LOGO_PATHS: ReadonlyArray<{ d: string; fill: string }> = [\n {\n d: 'M16 31C19.3137 31 22 28.3137 22 25C22 21.6863 19.3137 19 16 19C12.6863 19 10 21.6863 10 25C10 28.3137 12.6863 31 16 31Z',\n fill: ISOMER_MARK.teal,\n },\n {\n d: 'M16 19C19.3137 19 22 21.6863 22 25C20.3287 26.2553 18.2511 27 16 27C13.7486 27 11.6714 26.2555 10 25C10 21.6863 12.6863 19 16 19Z',\n fill: '#FF957D',\n },\n {\n d: 'M24 9C24 4.58172 20.4183 1 16 1C11.5817 1 8 4.58172 8 9C8 13.4183 11.5817 17 16 17C20.4183 17 24 13.4183 24 9Z',\n fill: ISOMER_MARK.yellow,\n },\n {\n d: 'M16 7C19.1578 7 21.972 8.46505 23.8047 10.751C23.006 14.3267 19.8166 17 16 17C12.1834 17 8.99298 14.3268 8.19434 10.751C10.027 8.46477 12.842 7 16 7Z',\n fill: ISOMER_MARK.blue,\n },\n {\n d: 'M6 24C8.76142 24 11 21.7614 11 19C11 16.2386 8.76142 14 6 14C3.23858 14 1 16.2386 1 19C1 21.7614 3.23858 24 6 24Z',\n fill: ISOMER_MARK.pink,\n },\n {\n d: 'M6.4502 14.0205C9.00066 14.2481 11 16.3903 11 19C11 20.9178 9.91966 22.5822 8.33496 23.4209C6.87813 21.6836 6 19.4446 6 17C6 15.9625 6.15693 14.9615 6.4502 14.0205Z',\n fill: '#FF957D',\n },\n {\n d: 'M26 24C28.7614 24 31 21.7614 31 19C31 16.2386 28.7614 14 26 14C23.2386 14 21 16.2386 21 19C21 21.7614 23.2386 24 26 24Z',\n fill: ISOMER_MARK.pink,\n },\n {\n d: 'M25.5488 14.0205C25.8422 14.9616 26 15.9624 26 17C26 19.4449 25.1211 21.6836 23.6641 23.4209C22.0798 22.582 21 20.9175 21 19C21 16.3907 22.9988 14.2486 25.5488 14.0205Z',\n fill: '#FF957D',\n },\n];\n\n/** The Isomer mark at `size` pixels, decorative. */\nexport const IsomerMark = ({ size }: { size: number }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\n fill=\"none\"\n aria-hidden={true}>\n {ISOMER_LOGO_PATHS.map(({ d, fill }) => (\n <path key={d} {...{ d, fill }} />\n ))}\n </svg>\n);\n"]}
@@ -0,0 +1,22 @@
1
+ import type { StudioMode } from './route.js';
2
+ export declare const NAV_WIDTH: {
3
+ readonly open: 272;
4
+ readonly closed: 72;
5
+ readonly compactAt: 1120;
6
+ };
7
+ export interface StudioNavProps {
8
+ mode: StudioMode;
9
+ page: string;
10
+ /** The open app's id; while one is open, no primitive is active. */
11
+ app?: string | undefined;
12
+ /** The open app's `path`, which picks its active page. */
13
+ appPath?: string | undefined;
14
+ isOpen: boolean;
15
+ isCompact?: boolean | undefined;
16
+ onToggle: () => void;
17
+ onSelect: (page: string) => void;
18
+ onSelectApp: (id: string, path?: string) => void;
19
+ }
20
+ /** The Gallery link and the config's apps with their pages, then primitives under collapsible groups, narrowed by a filter. */
21
+ export declare const StudioNav: ({ mode, page, app, appPath, isOpen, isCompact, onToggle, onSelect, onSelectApp, }: StudioNavProps) => import("@emotion/react/jsx-runtime").JSX.Element;
22
+ //# sourceMappingURL=nav.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nav.d.ts","sourceRoot":"","sources":["../../src/chrome/nav.tsx"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAG1C,eAAO,MAAM,SAAS;;;;CAIZ,CAAC;AA6CX,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAClD;AAiTD,+HAA+H;AAC/H,eAAO,MAAM,SAAS,GAAI,mFAUvB,cAAc,qDAkQhB,CAAC"}
@@ -0,0 +1,306 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "@emotion/react/jsx-runtime";
2
+ import React, { useMemo, useState } from 'react';
3
+ import { EuiButtonIcon, EuiFieldSearch, EuiIcon, transparentize, useEuiScrollBar, useEuiTheme, } from '@elastic/eui';
4
+ import { css } from '@emotion/react';
5
+ import { searchPrimitives } from '../model/search.js';
6
+ import { useStudio } from '../studio_context.js';
7
+ import { useAccent } from './accent.js';
8
+ import { activeAppPage, appPageSections, filterAppPages } from './app_pages.js';
9
+ import { useClosedNavGroups } from './nav_groups.js';
10
+ import { navPacks } from './nav_sections.js';
11
+ import { Glyph, PrimitiveGlyph } from './primitive_glyph.js';
12
+ import { PrimitivePeek } from './primitive_peek.js';
13
+ import { GALLERY } from './route.js';
14
+ export const NAV_WIDTH = {
15
+ open: 272,
16
+ closed: 72,
17
+ compactAt: 1120,
18
+ };
19
+ const NAV_GLYPH_SIZE = 17;
20
+ const ROW_HEIGHT = 32;
21
+ const ROW_GAP = 4;
22
+ const HOVER_ROW = 'rgba(255, 255, 255, 0.08)';
23
+ const ACTIVE_LABEL = '#FFFFFF';
24
+ const LABEL = 'rgba(255, 255, 255, 0.86)';
25
+ const GROUP_LABEL = 'rgba(255, 255, 255, 0.6)';
26
+ const GLYPH_OPACITY = 0.6;
27
+ /** Clears the group header's inset, chevron, and gap, then indents a further `s`. */
28
+ const itemInset = ({ xs, m }) => `calc(${xs} + ${m} + ${xs})`;
29
+ /** Lines an app's pages up with its label, past its glyph and gap. */
30
+ const pageInset = ({ m, s }) => `calc(${m} + ${NAV_GLYPH_SIZE}px + ${s})`;
31
+ /** An accent tint behind the active entry, with a bar on its leading edge. */
32
+ const activeMark = ({ bright }) => css `
33
+ background: ${transparentize(bright, 0.18)};
34
+ box-shadow: inset 2px 0 0 ${bright};
35
+ color: ${ACTIVE_LABEL};
36
+ `;
37
+ const NavIcon = ({ isActive, isRail = false, children, }) => (_jsx("span", { css: css `
38
+ display: inline-flex;
39
+ flex: none;
40
+ opacity: ${isActive || isRail ? 1 : GLYPH_OPACITY};
41
+ `, children: children }));
42
+ const GALLERY_ITEM = {
43
+ id: GALLERY,
44
+ label: 'Gallery',
45
+ icon: (_jsx(EuiIcon, { type: "grid", css: css `
46
+ inline-size: ${NAV_GLYPH_SIZE}px;
47
+ block-size: ${NAV_GLYPH_SIZE}px;
48
+ `, "aria-hidden": true })),
49
+ isPrimitive: false,
50
+ };
51
+ const withPeek = ({ id, isPrimitive }, element) => isPrimitive ? _jsx(PrimitivePeek, { type: id, children: element }) : element;
52
+ const RailEntry = ({ item, isActive, accent, onSelect, }) => {
53
+ const { id, label, icon } = item;
54
+ return withPeek(item, _jsx(EuiButtonIcon, { display: "empty", size: "s", color: "text", iconType: () => (_jsx(NavIcon, { isActive, isRail: true, children: icon })), css: css `
55
+ flex: none;
56
+ inline-size: ${ROW_HEIGHT}px;
57
+ block-size: ${ROW_HEIGHT}px;
58
+ color: ${ACTIVE_LABEL};
59
+ ${isActive ? activeMark(accent) : ''}
60
+ `, "aria-label": label, "aria-current": isActive ? 'page' : undefined, onClick: () => onSelect(id) }));
61
+ };
62
+ const Row = ({ item, isActive, accent, onSelect, inset, children, }) => {
63
+ const { euiTheme } = useEuiTheme();
64
+ const { id, label, icon } = item;
65
+ return (_jsxs("li", { css: css `
66
+ flex: none;
67
+ `, children: [withPeek(item, _jsxs("button", { type: "button", "aria-current": isActive ? 'page' : undefined, onClick: () => onSelect(id), css: css `
68
+ display: flex;
69
+ align-items: center;
70
+ gap: ${euiTheme.size.s};
71
+ inline-size: 100%;
72
+ block-size: ${ROW_HEIGHT}px;
73
+ padding-inline: ${inset ?? itemInset(euiTheme.size)}
74
+ ${euiTheme.size.s};
75
+ border-radius: ${euiTheme.border.radius.small};
76
+ color: ${LABEL};
77
+ font-size: 14px;
78
+ font-weight: ${euiTheme.font.weight.regular};
79
+ text-align: start;
80
+
81
+ &:hover {
82
+ background: ${HOVER_ROW};
83
+ color: ${ACTIVE_LABEL};
84
+ }
85
+
86
+ ${isActive ? activeMark(accent) : ''}
87
+
88
+ &:focus-visible {
89
+ outline: ${euiTheme.focus.width} solid ${accent.bright};
90
+ outline-offset: -${euiTheme.focus.width};
91
+ }
92
+ `, children: [icon ? _jsx(NavIcon, { isActive, children: icon }) : null, _jsx("span", { css: css `
93
+ overflow: hidden;
94
+ text-overflow: ellipsis;
95
+ white-space: nowrap;
96
+ `, children: label })] })), children] }));
97
+ };
98
+ const subList = (gap) => css `
99
+ display: flex;
100
+ flex-direction: column;
101
+ gap: ${gap}px;
102
+ margin: ${gap}px 0 0;
103
+ padding: 0;
104
+ list-style: none;
105
+ `;
106
+ const appItem = ({ id, title, icon }) => ({
107
+ id,
108
+ label: title,
109
+ icon: _jsx(Glyph, { svg: icon?.svg, label: title, size: NAV_GLYPH_SIZE }),
110
+ isPrimitive: false,
111
+ });
112
+ /** An app's row, with its pages under it in their sections. */
113
+ const AppRow = ({ app, openApp, appPath, filter, accent, onSelectApp, }) => {
114
+ const { euiTheme } = useEuiTheme();
115
+ const { id, title, pages = [] } = app;
116
+ const item = useMemo(() => appItem(app), [app]);
117
+ const isOpen = openApp === id;
118
+ const active = isOpen ? activeAppPage(pages, appPath) : undefined;
119
+ const sections = appPageSections(filterAppPages(pages, filter));
120
+ const inset = pageInset(euiTheme.size);
121
+ const pageRows = (listed) => listed.map(({ path, title: label }) => (_jsx(Row, { item: { id: path, label, isPrimitive: false }, isActive: active?.path === path, onSelect: (next) => onSelectApp(id, next), accent, inset }, path)));
122
+ return (_jsx(Row, { item, accent, inset: euiTheme.size.m, isActive: isOpen && active === undefined, onSelect: () => onSelectApp(id), children: sections.length ? (_jsx("ul", { css: subList(ROW_GAP), "aria-label": `${title} pages`, children: sections.map(({ title: section, pages: listed }) => section === undefined ? (_jsx(React.Fragment, { children: pageRows(listed) }, "unsectioned")) : (_jsxs("li", { children: [_jsx("h4", { css: css `
123
+ margin: ${euiTheme.size.xs} 0 0;
124
+ padding-inline: ${inset} ${euiTheme.size.s};
125
+ color: ${GROUP_LABEL};
126
+ font-size: 11px;
127
+ font-weight: ${euiTheme.font.weight.semiBold};
128
+ letter-spacing: 0.08em;
129
+ line-height: ${ROW_HEIGHT}px;
130
+ text-transform: uppercase;
131
+ `, children: section }), _jsx("ul", { css: subList(ROW_GAP), "aria-label": section, children: pageRows(listed) })] }, `section:${section}`))) })) : null }));
132
+ };
133
+ const Group = ({ title, isOpen, onToggle, children, }) => {
134
+ const { euiTheme } = useEuiTheme();
135
+ return (_jsxs("div", { css: css `
136
+ display: flex;
137
+ flex-direction: column;
138
+ flex: none;
139
+ `, children: [_jsx("h3", { css: css `
140
+ margin: 0;
141
+ `, children: _jsxs("button", { type: "button", "aria-expanded": isOpen, onClick: onToggle, css: css `
142
+ display: flex;
143
+ align-items: center;
144
+ gap: ${euiTheme.size.xs};
145
+ inline-size: 100%;
146
+ block-size: ${ROW_HEIGHT}px;
147
+ padding-inline: ${euiTheme.size.xs};
148
+ color: ${GROUP_LABEL};
149
+ font-size: 11px;
150
+ font-weight: ${euiTheme.font.weight.semiBold};
151
+ letter-spacing: 0.08em;
152
+ text-transform: uppercase;
153
+ text-align: start;
154
+
155
+ &:hover {
156
+ color: ${ACTIVE_LABEL};
157
+ }
158
+
159
+ &:focus-visible {
160
+ outline: ${euiTheme.focus.width} solid ${ACTIVE_LABEL};
161
+ outline-offset: -${euiTheme.focus.width};
162
+ }
163
+ `, children: [_jsx(EuiIcon, { type: isOpen ? 'chevronSingleDown' : 'chevronSingleRight', size: "s", "aria-hidden": true }), title] }) }), isOpen ? (_jsx("ul", { css: css `
164
+ display: flex;
165
+ flex-direction: column;
166
+ gap: ${ROW_GAP}px;
167
+ margin: 0;
168
+ padding: 0;
169
+ list-style: none;
170
+ `, children: children })) : null] }));
171
+ };
172
+ /** The Gallery link and the config's apps with their pages, then primitives under collapsible groups, narrowed by a filter. */
173
+ export const StudioNav = ({ mode, page, app, appPath = '', isOpen, isCompact = false, onToggle, onSelect, onSelectApp, }) => {
174
+ const { euiTheme } = useEuiTheme();
175
+ const accent = useAccent(app === undefined ? mode : 'docs');
176
+ const scrollbar = useEuiScrollBar();
177
+ const { runtime, apps, docs: { primitives }, } = useStudio();
178
+ const appItems = useMemo(() => apps.map(appItem), [apps]);
179
+ const [filter, setFilter] = useState('');
180
+ const { closed, setOpen } = useClosedNavGroups();
181
+ const separatePacks = runtime.packs.length > 1;
182
+ const packs = useMemo(() => {
183
+ const labels = new Map(primitives.map(({ type, label }) => [type, label]));
184
+ const matched = new Set(searchPrimitives(primitives, filter).map(({ type }) => type));
185
+ return navPacks(runtime.packs.map((pack) => ({
186
+ id: pack.id,
187
+ groups: pack.authoring?.groups ?? [],
188
+ types: pack.primitives.map(({ type }) => type),
189
+ })), (type) => labels.get(type) ?? type, (type) => matched.has(type), separatePacks);
190
+ }, [primitives, runtime.packs, filter, separatePacks]);
191
+ const listed = useMemo(() => {
192
+ const byType = new Map(primitives.map((doc) => [doc.type, doc]));
193
+ return packs.map((pack) => ({
194
+ ...pack,
195
+ groups: pack.groups.map((group) => ({
196
+ ...group,
197
+ items: group.types.flatMap((type) => {
198
+ const doc = byType.get(type);
199
+ return doc
200
+ ? [
201
+ {
202
+ id: type,
203
+ label: doc.label,
204
+ icon: _jsx(PrimitiveGlyph, { type, size: NAV_GLYPH_SIZE }),
205
+ isPrimitive: true,
206
+ },
207
+ ]
208
+ : [];
209
+ }),
210
+ })),
211
+ }));
212
+ }, [packs, primitives]);
213
+ const isGroupOpen = (key) => Boolean(filter) || !closed.has(key);
214
+ const toggleGroup = (key) => {
215
+ if (!filter) {
216
+ setOpen(key, closed.has(key));
217
+ }
218
+ };
219
+ const column = css `
220
+ display: flex;
221
+ flex-direction: column;
222
+ gap: ${euiTheme.size.xs};
223
+ min-block-size: 0;
224
+ padding-block: 0 ${euiTheme.size.m};
225
+ overflow: hidden;
226
+ ${isCompact
227
+ ? css `
228
+ position: absolute;
229
+ inset-block: 0;
230
+ inset-inline-start: 0;
231
+ z-index: 1;
232
+ inline-size: ${isOpen ? NAV_WIDTH.open : NAV_WIDTH.closed}px;
233
+ background: ${isOpen ? euiTheme.colors.backgroundBasePlain : 'transparent'};
234
+ border-inline-end: ${isOpen ? euiTheme.border.thin : 'none'};
235
+ box-shadow: ${isOpen ? '0 8px 24px rgba(0, 0, 0, 0.28)' : 'none'};
236
+ transition: inline-size ${euiTheme.animation.normal}
237
+ ${euiTheme.animation.resistance};
238
+ `
239
+ : ''}
240
+ `;
241
+ const fieldInset = css `
242
+ display: flex;
243
+ flex-wrap: nowrap;
244
+ align-items: center;
245
+ gap: ${euiTheme.size.xs};
246
+ flex: none;
247
+ margin-inline: ${euiTheme.size.s};
248
+ margin-block-end: ${euiTheme.size.s};
249
+ min-block-size: ${ROW_HEIGHT}px;
250
+ justify-content: ${isOpen ? 'flex-start' : 'center'};
251
+ `;
252
+ const scroller = css `
253
+ flex: 1;
254
+ min-block-size: 0;
255
+ display: flex;
256
+ flex-direction: column;
257
+ gap: ${euiTheme.size.s};
258
+ padding-inline: ${isOpen ? euiTheme.size.s : 0};
259
+ overflow: hidden auto;
260
+ ${scrollbar}
261
+ `;
262
+ const rail = css `
263
+ flex: none;
264
+ inline-size: ${NAV_WIDTH.closed}px;
265
+ display: flex;
266
+ flex-direction: column;
267
+ align-items: center;
268
+ gap: ${ROW_GAP}px;
269
+ `;
270
+ const packHeading = css `
271
+ flex: none;
272
+ margin: ${euiTheme.size.s} ${euiTheme.size.xs} 0;
273
+ color: ${euiTheme.colors.textSubdued};
274
+ font-size: 11px;
275
+ font-weight: ${euiTheme.font.weight.semiBold};
276
+ text-transform: uppercase;
277
+ `;
278
+ const plainList = css `
279
+ display: flex;
280
+ flex-direction: column;
281
+ gap: ${ROW_GAP}px;
282
+ margin: 0;
283
+ padding: 0;
284
+ list-style: none;
285
+ `;
286
+ const activePage = app === undefined ? page : undefined;
287
+ const rows = (items) => items.map((item) => (_jsx(Row, { item, accent, onSelect, isActive: item.id === activePage }, item.id)));
288
+ const appRows = apps.map((entry) => (_jsx(AppRow, { app: entry, openApp: app, appPath, filter, accent, onSelectApp }, entry.id)));
289
+ const toggleLabel = `${isOpen ? 'Collapse' : 'Expand'} primitive navigation`;
290
+ return (_jsxs("nav", { css: column, "aria-label": "Primitives", children: [_jsxs("div", { css: fieldInset, children: [isOpen ? (_jsx("div", { css: css `
291
+ flex: 1 1 auto;
292
+ min-inline-size: 0;
293
+ `, children: _jsx(EuiFieldSearch, { compressed: true, fullWidth: true, placeholder: "Filter primitives", value: filter, onChange: ({ target: { value } }) => setFilter(value), "aria-label": "Filter primitives" }) })) : null, _jsx(EuiButtonIcon, { display: "empty", size: "s", color: "text", css: css `
294
+ flex: none;
295
+ inline-size: ${ROW_HEIGHT}px;
296
+ block-size: ${ROW_HEIGHT}px;
297
+ color: ${ACTIVE_LABEL};
298
+ `, iconType: isOpen ? 'transitionRightIn' : 'transitionLeftIn', "aria-label": toggleLabel, title: toggleLabel, "aria-expanded": isOpen, onClick: onToggle })] }), _jsx("div", { css: scroller, children: isOpen ? (_jsxs(_Fragment, { children: [_jsxs("ul", { css: plainList, children: [appRows, _jsx(Row, { item: GALLERY_ITEM, isActive: GALLERY === activePage, inset: euiTheme.size.m, accent, onSelect })] }), listed.map((pack) => (_jsxs(React.Fragment, { children: [separatePacks ? _jsx("h2", { css: packHeading, children: pack.label }) : null, pack.groups.map((group) => (_jsx(Group, { title: group.title, isOpen: isGroupOpen(group.key), onToggle: () => toggleGroup(group.key), children: rows(group.items) }, group.key)))] }, pack.id)))] })) : (_jsxs(_Fragment, { children: [_jsxs("div", { css: rail, children: [appItems.map((item) => (_jsx(RailEntry, { item, accent, onSelect: (id) => onSelectApp(id), isActive: item.id === app }, item.id))), _jsx(RailEntry, { item: GALLERY_ITEM, isActive: GALLERY === activePage, accent, onSelect })] }), listed
299
+ .flatMap((pack) => pack.groups)
300
+ .map((group) => (_jsxs("div", { css: rail, children: [_jsx("div", { role: "separator", css: css `
301
+ width: ${NAV_GLYPH_SIZE}px;
302
+ margin-block: ${euiTheme.size.xs};
303
+ border-top: 1px solid ${euiTheme.colors.textSubdued};
304
+ ` }), group.items.map((item) => (_jsx(RailEntry, { item, accent, onSelect, isActive: item.id === activePage }, item.id)))] }, group.key)))] })) })] }));
305
+ };
306
+ //# sourceMappingURL=nav.js.map