@alwith/module-editor 0.0.0-stage → 0.1.0-rc.13

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 (66) hide show
  1. package/LICENSE +94 -0
  2. package/README.md +47 -2
  3. package/THIRD_PARTY_NOTICES.md +3 -0
  4. package/dist/core.d.ts +56 -0
  5. package/dist/core.js +8 -0
  6. package/dist/index.d.ts +89 -0
  7. package/dist/index.js +1 -0
  8. package/dist/monaco.d.ts +16 -0
  9. package/dist/monaco.js +1 -0
  10. package/dist/new-tab.d.ts +43 -0
  11. package/dist/new-tab.js +1 -0
  12. package/dist/preview-source-mode-toggle.d.ts +8 -0
  13. package/dist/preview-source-mode-toggle.js +1 -0
  14. package/dist/previews/excel-data.d.ts +20 -0
  15. package/dist/previews/excel-data.js +3 -0
  16. package/dist/previews/excel-navigation.d.ts +4 -0
  17. package/dist/previews/excel-navigation.js +1 -0
  18. package/dist/previews/excel.d.ts +3 -0
  19. package/dist/previews/excel.js +1 -0
  20. package/dist/previews/html-resources.d.ts +3 -0
  21. package/dist/previews/html-resources.js +2 -0
  22. package/dist/previews/html-session.d.ts +8 -0
  23. package/dist/previews/html-session.js +1 -0
  24. package/dist/previews/html.d.ts +3 -0
  25. package/dist/previews/html.js +1 -0
  26. package/dist/previews/index.d.ts +83 -0
  27. package/dist/previews/index.js +1 -0
  28. package/dist/previews/markdown-outline.d.ts +6 -0
  29. package/dist/previews/markdown-outline.js +1 -0
  30. package/dist/previews/markdown-readonly.d.ts +4 -0
  31. package/dist/previews/markdown-readonly.js +2 -0
  32. package/dist/previews/markdown.css +918 -0
  33. package/dist/previews/markdown.d.ts +5 -0
  34. package/dist/previews/markdown.js +1 -0
  35. package/dist/previews/media-types.d.ts +1 -0
  36. package/dist/previews/media-types.js +1 -0
  37. package/dist/previews/media.d.ts +2 -0
  38. package/dist/previews/media.js +1 -0
  39. package/dist/previews/pdf-controls.d.ts +1 -0
  40. package/dist/previews/pdf-controls.js +1 -0
  41. package/dist/previews/pdf.d.ts +2 -0
  42. package/dist/previews/pdf.js +1 -0
  43. package/dist/previews/shared.d.ts +7 -0
  44. package/dist/previews/shared.js +1 -0
  45. package/dist/previews/styles.css +142 -0
  46. package/dist/previews/tiff.d.ts +2 -0
  47. package/dist/previews/tiff.js +1 -0
  48. package/dist/previews/viewers.css +221 -0
  49. package/dist/previews/word.d.ts +2 -0
  50. package/dist/previews/word.js +1 -0
  51. package/dist/quick-start-assets.d.ts +4 -0
  52. package/dist/quick-start-assets.js +1 -0
  53. package/dist/quick-start-data.d.ts +11 -0
  54. package/dist/quick-start-data.js +1 -0
  55. package/dist/quick-start-icons.d.ts +9 -0
  56. package/dist/quick-start-icons.js +1 -0
  57. package/dist/shortcut-hint.d.ts +4 -0
  58. package/dist/shortcut-hint.js +0 -0
  59. package/dist/styles.css +726 -0
  60. package/dist/workspace-assets.d.ts +2 -0
  61. package/dist/workspace-assets.js +1 -0
  62. package/dist/workspace-tabs.d.ts +27 -0
  63. package/dist/workspace-tabs.js +1 -0
  64. package/dist/workspace.d.ts +31 -0
  65. package/dist/workspace.js +1 -0
  66. package/package.json +163 -4
@@ -0,0 +1,2 @@
1
+ export declare const tutorialImage = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik01MC42NDYgNDYuMzc4NUw0MS4wNjczIDM4LjkyMDNDNDAuNjEyNiAzOC41NjU5IDM5Ljk2NTcgMzguNjAxIDM5LjU1MjMgMzkuMDAyTDMzLjQ0NTggNDQuOTE4M0MzMi43NTY1IDQ1LjU4NTkgMzEuNjMyMiA0NC44OTI1IDMxLjkxOTUgNDMuOTc2OUwzMy45MTE5IDM3LjYxOTNDMzQuMTczMyAzNi43ODQzIDMzLjQ0ODkgMzUuOTcyIDMyLjU4OTEgMzYuMTM4NEwyMy4wMTY1IDM4LjMwMTNDMjIuMDAzOCAzOC40OTY2IDIxLjQ3OTkgMzcuMTM5NyAyMi4zNTkzIDM2LjYwMzRMMzIuNTExNiAzMS42NDgyQzMzLjIzNSAzMS4yMDY5IDMzLjI1NDYgMzAuMTY0MiAzMi41NDg4IDI5LjY5NzFMMjUuNTg5OCAyNS45MDU0QzI0Ljc0MjQgMjUuMzQ0MyAyNS4yODkgMjQuMDI1NyAyNi4yODQyIDI0LjIyNzJMMzMuMzc5NyAyNS43MDE5QzM0LjExNjUgMjUuODUwNyAzNC43OTc1IDI1LjI2ODkgMzQuNzY0NSAyNC41MTc2TDM0LjQ4MzQgMTguMDk0OUMzNC40NDEgMTcuMTM0OCAzNS43MDkgMTYuNzU0NSAzNi4yMDE5IDE3LjU4MDJMMzkuMDc5IDIyLjQwMDFDMzkuNTA4OSAyMy4xMjA0IDQwLjUzOTIgMjMuMTU3NiA0MS4wMTk3IDIyLjQ3MDRMNDcuNDQyNCAxMy4yODEyQzQ3Ljk0MzYgMTIuNTY0IDQ5LjA2OSAxMi44NzkyIDQ5LjEyMzggMTMuNzUzNUw0Ny41NjU0IDI0Ljc1MDFDNDcuNTk0MyAyNS4yMDQ4IDQ3Ljg4NjggMjUuNjAwNiA0OC4zMTM2IDI1Ljc2MDhMNTkuNDAzMiAyNy45MTEzQzYwLjI4MDYgMjguMjQxIDYwLjE2OSAyOS41MTYyIDU5LjI0NzIgMjkuNjg2N0w0OC43Nzk3IDMyLjc5OTRDNDguMDAzNiAzMi45NDMgNDcuNTQyNyAzMy43NTAxIDQ3LjgxMzQgMzQuNDkyMUw1Mi4wODM1IDQ1LjMzMTdDNTIuNDAyOCA0Ni4yMDM5IDUxLjM3OTggNDYuOTQ5IDUwLjY0NiA0Ni4zNzg1WiIgZmlsbD0iI0M1QjhGRCIvPgo8cGF0aCBkPSJNNjQuMjUwMyA1NC43MTc5QzY0LjI1MDMgNTQuNzE3OSA2Mi4yMDYyIDU5LjI3ODQgNTkuMjEzNSA1Ny4xMDJDNTYuMjE5NiA1NC45MjU2IDYwLjQzNSA0Ni41OTIxIDY0LjE2MzUgNDguNDc3MUM2OC4wNTIzIDUwLjQ0MTYgNjcuOTQ4OSA1NC4wNTg2IDY0LjAyMiA2My41NjZDNjAuMjkxMyA3Mi41OTgxIDQ3LjYwODIgNzEuMTAwNyA0Ni4zNTM2IDcwLjk1NkM0Ni4zMDA5IDcwLjk0OTggNDYuMjQ3MSA3MC45NDY3IDQ2LjE5MzQgNzAuOTQ0NkM0NC4yMzMgNzAuODkwOSA0Mi4yNTQgNzAuNDY1MSA0MC40NjMxIDY5LjkwODFDMzYuMzgwMSA2OC42MzcgMzMuNjE4OCA2NC44MzQgMzMuNjY5NCA2MC41NTg4TDMxLjU2NDMgMzYuNjM0MUMzMS41NzQ3IDM1LjgwODQgMzIuMDQ5IDMzLjkyMzQgMzQuNTE3OCAzMy40ODQyQzM2LjU0MTMgMzMuMTU0NiAzNy42NDA4IDM1LjMzNCAzNy42NDA4IDM1LjMzNEw0MC40NiA0MC45MzQxQzQxLjE4MzQgNDEuOTY3NiA0My4wMzQzIDQyLjMyNDEgNDQuMDQwOCA0MS4yMjg3QzQ4LjMxODEgMzYuNTc3MiA1OC4zMzgyIDI2Ljg3OTYgNjEuOTMwMyAyOS4xOTI0QzY2LjYzNTUgMzIuNTgxIDU1LjU3MDcgNDIuMDY0NyA1NS41NzA3IDQyLjA2NDciIHN0cm9rZT0iIzNGM0QzRCIgc3Ryb2tlLXdpZHRoPSIxLjI2MDgiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik01Ny40ODE5IDQ0LjUzMjJDNTcuNDgxOSA0NC41MzIyIDU0Ljk5NzYgMzguMTUyOSA0OS44NDUgNDQuMDk0QzQ0LjY5MjMgNTAuMDM1MSA0NS4yNjY5IDU5LjQyMjcgNTEuNTI5NSA1NS4xMDUxIiBzdHJva2U9IiMzRjNEM0QiIHN0cm9rZS13aWR0aD0iMS4yNjA4IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNNTguMTM4MSA1Ni4zNzE1QzU4LjEzODEgNTYuMzcxNSA0OS44MjMyIDYzLjA0NzQgNTIuOTQ1MiA0OS44MzcyQzU0Ljg5NDIgNDMuMDQ0NiA2Mi41NjEyIDQyLjI2MzMgNjIuMTg5MSA0OC4zMDk4IiBzdHJva2U9IiMzRjNEM0QiIHN0cm9rZS13aWR0aD0iMS4yNjA4IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMzguNTk0MSA1Mi4yNTI0QzM5LjA4NTUgNTIuMjUyNCAzOS40ODM5IDUxLjg1NDEgMzkuNDgzOSA1MS4zNjI2QzM5LjQ4MzkgNTAuODcxMiAzOS4wODU1IDUwLjQ3MjkgMzguNTk0MSA1MC40NzI5QzM4LjEwMjcgNTAuNDcyOSAzNy43MDQzIDUwLjg3MTIgMzcuNzA0MyA1MS4zNjI2QzM3LjcwNDMgNTEuODU0MSAzOC4xMDI3IDUyLjI1MjQgMzguNTk0MSA1Mi4yNTI0WiIgZmlsbD0iIzNGM0QzRCIvPgo8cGF0aCBkPSJNNDIuMDE0IDUzLjE1MjFDNDIuNTA1NCA1My4xNTIxIDQyLjkwMzggNTIuNzUzOCA0Mi45MDM4IDUyLjI2MjRDNDIuOTAzOCA1MS43NzEgNDIuNTA1NCA1MS4zNzI2IDQyLjAxNCA1MS4zNzI2QzQxLjUyMjYgNTEuMzcyNiA0MS4xMjQzIDUxLjc3MSA0MS4xMjQzIDUyLjI2MjRDNDEuMTI0MyA1Mi43NTM4IDQxLjUyMjYgNTMuMTUyMSA0Mi4wMTQgNTMuMTUyMVoiIGZpbGw9IiMzRjNEM0QiLz4KPHBhdGggZD0iTTM2LjA3NjggNTIuODYyOUMzNi4wNzY4IDUyLjg2MjkgMzcuOTA3IDU3LjkyOTcgNDMuMzMyNCA1NS41Mzc0IiBzdHJva2U9IiMzRjNEM0QiIHN0cm9rZS13aWR0aD0iMS4yNjA2OCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTg5LjM3NDEgNjMuOTM4NkM4OS42MTE4IDY0LjU0NzMgODkuNTI5MSA2NS4yMzQ1IDg5LjE1NCA2NS43Njg4TDc2LjUyNzcgODMuNzIxM0M3NS45MzY1IDg0LjUwNDcgNzUuMDkxMiA4NS4yNDI1IDc0LjE1MDggODQuOTYxNEM2MC41MTc5IDgwLjg5MjkgNDQuNjk1MyA4MS42MzY5IDM4Ljg2MTYgODIuMzg4MkMzNi45NTcgODIuNjMzMSAzNS4wMjQ1IDgyLjI1MDggMzMuMzU1NSA4MS4zMDIxQzIzLjQyNjUgNzUuNjU4NiAxNS43MzE2IDcyLjc1NjcgMTIuNDg1NyA3MS42NTMxQzExLjQ2ODggNzEuMzA2OSAxMC41NDE4IDcwLjUzMjggMTAuNDkyMiA2OS40NjAxTDEwLjUzNjYgNjUuMzUxM0MxMi4wMjc4IDY2LjYxNTEgMTguNDgzNiA2OC4wMDQxIDE4LjQ4MzYgNjguMDA0MUwyNS44OTAxIDcxLjgzN0MyNS44OTAxIDcxLjgzNyAzMC44NTA1IDc4LjE0MDkgMzUuODM5OSA3OC40MjYxQzQwLjgyODIgNzguNzEwMyA0MS43MzM1IDc4LjM1NjkgNDEuNzMzNSA3OC4zNTY5QzUyLjY4OTggNzUuOTI2MyA3MC41MTgzIDc5LjIzNzMgNzQuODM5MSA4MC4xMDk1TDc2LjY3MDMgNzkuNDkyNkw4OC44MjUzIDYyLjUzNjJMODkuMzc0MSA2My45Mzg2WiIgZmlsbD0iI0M1QjhGRCIvPgo8cGF0aCBkPSJNNjYuMjAwNyA1OC43MTFDNzQuNjI4MiA1Ni45MzQ2IDgyLjM1NzEgNTkuMTUyMyA4Ni44NjM5IDYwLjQ4NTRDODguNTIwNCA2MC45NzUyIDg5LjE4MjkgNjIuOTY1NiA4OC4xNDc0IDY0LjM0OTRMNzcuMjE1OSA3OC45NjA5Qzc2LjU4NDUgNzkuODA1MiA3NS40ODggODAuMTY2OSA3NC40ODI1IDc5Ljg0ODZDNjMuOTY1NCA3Ni41MTU4IDQ3LjQ4MjMgNzcuODI4MiAzOS4yMTI5IDc4LjU3NTRDMzYuNTMwMiA3OC44MTgyIDMzLjg0MjMgNzguMTg3OSAzMS41NDM5IDc2Ljc4NTVDMjYuNzI0MSA3My43OTg5IDI0LjE0MDUgNjguNDI1MiAxMy4wODI5IDY2LjY2ODNDMTAuNDk5NCA2Ni41NjUgOS43NzU5OSA2NC43MDQ4IDExLjQyOTUgNjMuMzYxNEMyMi4yODA0IDU1LjE5NzQgMzEuNDM3NSA1My40ODcxIDMxLjQzNzUgNTMuNDg3MUMzMS40Mzc1IDUzLjQ4NzEgMzEuODE2OCA1My4zOTgyIDMyLjQ2MDYgNTMuMjg5NyIgc3Ryb2tlPSIjM0YzRDNEIiBzdHJva2Utd2lkdGg9IjEuMjYwOCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTEwLjgwNDIgNzEuMTA3NUMxMC44MDQyIDcxLjEwNzUgMTcuNTY2OSA3MC44NTY0IDMyLjYwOTMgODEuMjM1QzM0LjUzNTYgODIuMjA4NSAzNi43NjY4IDgzLjAxMjUgMzguOTEzMiA4Mi43ODUxQzQ1LjY4OTMgODIuMDY2OSA2MS4wMjUzIDgwLjEyMiA3NC41MjY5IDg1LjEwODMiIHN0cm9rZT0iIzNGM0QzRCIgc3Ryb2tlLXdpZHRoPSIxLjI2MDgiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zNy4xMDQ2IDc1LjQyNzhMNDMuNDYyMiA3MS4wNzkyIiBzdHJva2U9IiMzRjNEM0QiIHN0cm9rZS13aWR0aD0iMS4yNjA4IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTAuODA0MiA3MS4xMTA0QzEwLjgwNDIgNzEuMTEwNCAxNi4yODEzIDcxLjExMDQgMzIuNjA5MyA4MS4yMzc5QzM0LjUzNTYgODIuMjExNCAzNi43NjY4IDgzLjAxNTQgMzguOTEzMiA4Mi43ODgxIiBzdHJva2U9IiMzRjNEM0QiIHN0cm9rZS13aWR0aD0iMS4yNjA4IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8L3N2Zz4K";
2
+ export declare const workspaceLogo = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAD0AAAAmCAYAAAB3c5OxAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwAAAzVJREFUeAHVmVtS6kAQhjvhAI+HJcADtzfYAa7g6ArEFehZgbCCw1mBuAJ1BbIDfaOAB7IDeYXi4t/WYEHMZW5O8KuyiJNMkn+6p7tn4pEB4/G47Pv+Mw7LCt2CQqHQrlQqC9kO0+n03263u5G93vO8Qa1W+xt33icDcPNzUhPMlJfLZVelg4pgmeuNROPmr6QBvOMPZYiR6GazOYK1R6QIBqvDU4Mywkg0s91un0gDWLtLGWEsulgsDkmPa8oIY9EchXVcHJTg4h3KAGPRgnvSQER/51gRnc/nH/EjnXf3QPTlfD4vkWOsiGYXR0TWsXZptVp1yDG23JvT0CNpAGs7D2jWRHPOJg0X55zt2sWtiRb8Jw1Uy1JTrIpGoTIiDVyXpVZFm5SlWEm1yBG23Vu7LIVwZzlbWrSsJX5CWSolmldEsMSdzMroJ5SlUqJzudwtflr4vSM5TrosTRUNt+7Cyl0+5oAzmUwu0/qcelmaKFq49W2oeZDm5qdelsaK5hGP2fT7aE8TrluWuiBSNAvGiCftcvIu6EOSK2qWpUG9Xv/2wfoimi0oBKelqBaue0mxuFJZqhn1I0l6L+/wH87FcMsHUtzHRkFyBssGEQ/uiCkihbjPKNyO4LkjdYKoQYS+p0/REHyNhh4OtaInxPWq1Wo/3I77PnPUl7gFu3Yl6oSm6DgW/mw264gXG5CmYAZW6uHl5vg7D7VLlaV4vtYKTYOSv16vOS2VyRIQeRS8ZMtSl9HexxwaslvhZftkAFuKv1GF56RMWcrno2LCd/EZvfHQHh7exmFAaiw4ADUajZu4j3JprrvZbLTKVl2OUha+9L2yAJIXzpG7HRVxD4EH8PmknD0ih3zJ0+xm7KawetrHudhUFSapLMVzhi5dm4msyPgl4XIXFG9xacF74gIV501yjJd0Unx0f6HjVLYQLh2QIkhnb6F7xebmUD+beTp5lSWEXR22wTJ9A3c8Cmg2y04VUtfTYgHw4Zo8/xClB6QJ+h+5uOuovUdq5wSBja3N89wol3N2OLBukBb1D1DekEgg+CVzFQc2lKpnNqIsBu4KcaIl0pgUiCEXvJWEfr/JEPaudwlPpOcVnMnUAAAAAElFTkSuQmCC";
@@ -0,0 +1 @@
1
+ var M="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik01MC42NDYgNDYuMzc4NUw0MS4wNjczIDM4LjkyMDNDNDAuNjEyNiAzOC41NjU5IDM5Ljk2NTcgMzguNjAxIDM5LjU1MjMgMzkuMDAyTDMzLjQ0NTggNDQuOTE4M0MzMi43NTY1IDQ1LjU4NTkgMzEuNjMyMiA0NC44OTI1IDMxLjkxOTUgNDMuOTc2OUwzMy45MTE5IDM3LjYxOTNDMzQuMTczMyAzNi43ODQzIDMzLjQ0ODkgMzUuOTcyIDMyLjU4OTEgMzYuMTM4NEwyMy4wMTY1IDM4LjMwMTNDMjIuMDAzOCAzOC40OTY2IDIxLjQ3OTkgMzcuMTM5NyAyMi4zNTkzIDM2LjYwMzRMMzIuNTExNiAzMS42NDgyQzMzLjIzNSAzMS4yMDY5IDMzLjI1NDYgMzAuMTY0MiAzMi41NDg4IDI5LjY5NzFMMjUuNTg5OCAyNS45MDU0QzI0Ljc0MjQgMjUuMzQ0MyAyNS4yODkgMjQuMDI1NyAyNi4yODQyIDI0LjIyNzJMMzMuMzc5NyAyNS43MDE5QzM0LjExNjUgMjUuODUwNyAzNC43OTc1IDI1LjI2ODkgMzQuNzY0NSAyNC41MTc2TDM0LjQ4MzQgMTguMDk0OUMzNC40NDEgMTcuMTM0OCAzNS43MDkgMTYuNzU0NSAzNi4yMDE5IDE3LjU4MDJMMzkuMDc5IDIyLjQwMDFDMzkuNTA4OSAyMy4xMjA0IDQwLjUzOTIgMjMuMTU3NiA0MS4wMTk3IDIyLjQ3MDRMNDcuNDQyNCAxMy4yODEyQzQ3Ljk0MzYgMTIuNTY0IDQ5LjA2OSAxMi44NzkyIDQ5LjEyMzggMTMuNzUzNUw0Ny41NjU0IDI0Ljc1MDFDNDcuNTk0MyAyNS4yMDQ4IDQ3Ljg4NjggMjUuNjAwNiA0OC4zMTM2IDI1Ljc2MDhMNTkuNDAzMiAyNy45MTEzQzYwLjI4MDYgMjguMjQxIDYwLjE2OSAyOS41MTYyIDU5LjI0NzIgMjkuNjg2N0w0OC43Nzk3IDMyLjc5OTRDNDguMDAzNiAzMi45NDMgNDcuNTQyNyAzMy43NTAxIDQ3LjgxMzQgMzQuNDkyMUw1Mi4wODM1IDQ1LjMzMTdDNTIuNDAyOCA0Ni4yMDM5IDUxLjM3OTggNDYuOTQ5IDUwLjY0NiA0Ni4zNzg1WiIgZmlsbD0iI0M1QjhGRCIvPgo8cGF0aCBkPSJNNjQuMjUwMyA1NC43MTc5QzY0LjI1MDMgNTQuNzE3OSA2Mi4yMDYyIDU5LjI3ODQgNTkuMjEzNSA1Ny4xMDJDNTYuMjE5NiA1NC45MjU2IDYwLjQzNSA0Ni41OTIxIDY0LjE2MzUgNDguNDc3MUM2OC4wNTIzIDUwLjQ0MTYgNjcuOTQ4OSA1NC4wNTg2IDY0LjAyMiA2My41NjZDNjAuMjkxMyA3Mi41OTgxIDQ3LjYwODIgNzEuMTAwNyA0Ni4zNTM2IDcwLjk1NkM0Ni4zMDA5IDcwLjk0OTggNDYuMjQ3MSA3MC45NDY3IDQ2LjE5MzQgNzAuOTQ0NkM0NC4yMzMgNzAuODkwOSA0Mi4yNTQgNzAuNDY1MSA0MC40NjMxIDY5LjkwODFDMzYuMzgwMSA2OC42MzcgMzMuNjE4OCA2NC44MzQgMzMuNjY5NCA2MC41NTg4TDMxLjU2NDMgMzYuNjM0MUMzMS41NzQ3IDM1LjgwODQgMzIuMDQ5IDMzLjkyMzQgMzQuNTE3OCAzMy40ODQyQzM2LjU0MTMgMzMuMTU0NiAzNy42NDA4IDM1LjMzNCAzNy42NDA4IDM1LjMzNEw0MC40NiA0MC45MzQxQzQxLjE4MzQgNDEuOTY3NiA0My4wMzQzIDQyLjMyNDEgNDQuMDQwOCA0MS4yMjg3QzQ4LjMxODEgMzYuNTc3MiA1OC4zMzgyIDI2Ljg3OTYgNjEuOTMwMyAyOS4xOTI0QzY2LjYzNTUgMzIuNTgxIDU1LjU3MDcgNDIuMDY0NyA1NS41NzA3IDQyLjA2NDciIHN0cm9rZT0iIzNGM0QzRCIgc3Ryb2tlLXdpZHRoPSIxLjI2MDgiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik01Ny40ODE5IDQ0LjUzMjJDNTcuNDgxOSA0NC41MzIyIDU0Ljk5NzYgMzguMTUyOSA0OS44NDUgNDQuMDk0QzQ0LjY5MjMgNTAuMDM1MSA0NS4yNjY5IDU5LjQyMjcgNTEuNTI5NSA1NS4xMDUxIiBzdHJva2U9IiMzRjNEM0QiIHN0cm9rZS13aWR0aD0iMS4yNjA4IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNNTguMTM4MSA1Ni4zNzE1QzU4LjEzODEgNTYuMzcxNSA0OS44MjMyIDYzLjA0NzQgNTIuOTQ1MiA0OS44MzcyQzU0Ljg5NDIgNDMuMDQ0NiA2Mi41NjEyIDQyLjI2MzMgNjIuMTg5MSA0OC4zMDk4IiBzdHJva2U9IiMzRjNEM0QiIHN0cm9rZS13aWR0aD0iMS4yNjA4IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMzguNTk0MSA1Mi4yNTI0QzM5LjA4NTUgNTIuMjUyNCAzOS40ODM5IDUxLjg1NDEgMzkuNDgzOSA1MS4zNjI2QzM5LjQ4MzkgNTAuODcxMiAzOS4wODU1IDUwLjQ3MjkgMzguNTk0MSA1MC40NzI5QzM4LjEwMjcgNTAuNDcyOSAzNy43MDQzIDUwLjg3MTIgMzcuNzA0MyA1MS4zNjI2QzM3LjcwNDMgNTEuODU0MSAzOC4xMDI3IDUyLjI1MjQgMzguNTk0MSA1Mi4yNTI0WiIgZmlsbD0iIzNGM0QzRCIvPgo8cGF0aCBkPSJNNDIuMDE0IDUzLjE1MjFDNDIuNTA1NCA1My4xNTIxIDQyLjkwMzggNTIuNzUzOCA0Mi45MDM4IDUyLjI2MjRDNDIuOTAzOCA1MS43NzEgNDIuNTA1NCA1MS4zNzI2IDQyLjAxNCA1MS4zNzI2QzQxLjUyMjYgNTEuMzcyNiA0MS4xMjQzIDUxLjc3MSA0MS4xMjQzIDUyLjI2MjRDNDEuMTI0MyA1Mi43NTM4IDQxLjUyMjYgNTMuMTUyMSA0Mi4wMTQgNTMuMTUyMVoiIGZpbGw9IiMzRjNEM0QiLz4KPHBhdGggZD0iTTM2LjA3NjggNTIuODYyOUMzNi4wNzY4IDUyLjg2MjkgMzcuOTA3IDU3LjkyOTcgNDMuMzMyNCA1NS41Mzc0IiBzdHJva2U9IiMzRjNEM0QiIHN0cm9rZS13aWR0aD0iMS4yNjA2OCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTg5LjM3NDEgNjMuOTM4NkM4OS42MTE4IDY0LjU0NzMgODkuNTI5MSA2NS4yMzQ1IDg5LjE1NCA2NS43Njg4TDc2LjUyNzcgODMuNzIxM0M3NS45MzY1IDg0LjUwNDcgNzUuMDkxMiA4NS4yNDI1IDc0LjE1MDggODQuOTYxNEM2MC41MTc5IDgwLjg5MjkgNDQuNjk1MyA4MS42MzY5IDM4Ljg2MTYgODIuMzg4MkMzNi45NTcgODIuNjMzMSAzNS4wMjQ1IDgyLjI1MDggMzMuMzU1NSA4MS4zMDIxQzIzLjQyNjUgNzUuNjU4NiAxNS43MzE2IDcyLjc1NjcgMTIuNDg1NyA3MS42NTMxQzExLjQ2ODggNzEuMzA2OSAxMC41NDE4IDcwLjUzMjggMTAuNDkyMiA2OS40NjAxTDEwLjUzNjYgNjUuMzUxM0MxMi4wMjc4IDY2LjYxNTEgMTguNDgzNiA2OC4wMDQxIDE4LjQ4MzYgNjguMDA0MUwyNS44OTAxIDcxLjgzN0MyNS44OTAxIDcxLjgzNyAzMC44NTA1IDc4LjE0MDkgMzUuODM5OSA3OC40MjYxQzQwLjgyODIgNzguNzEwMyA0MS43MzM1IDc4LjM1NjkgNDEuNzMzNSA3OC4zNTY5QzUyLjY4OTggNzUuOTI2MyA3MC41MTgzIDc5LjIzNzMgNzQuODM5MSA4MC4xMDk1TDc2LjY3MDMgNzkuNDkyNkw4OC44MjUzIDYyLjUzNjJMODkuMzc0MSA2My45Mzg2WiIgZmlsbD0iI0M1QjhGRCIvPgo8cGF0aCBkPSJNNjYuMjAwNyA1OC43MTFDNzQuNjI4MiA1Ni45MzQ2IDgyLjM1NzEgNTkuMTUyMyA4Ni44NjM5IDYwLjQ4NTRDODguNTIwNCA2MC45NzUyIDg5LjE4MjkgNjIuOTY1NiA4OC4xNDc0IDY0LjM0OTRMNzcuMjE1OSA3OC45NjA5Qzc2LjU4NDUgNzkuODA1MiA3NS40ODggODAuMTY2OSA3NC40ODI1IDc5Ljg0ODZDNjMuOTY1NCA3Ni41MTU4IDQ3LjQ4MjMgNzcuODI4MiAzOS4yMTI5IDc4LjU3NTRDMzYuNTMwMiA3OC44MTgyIDMzLjg0MjMgNzguMTg3OSAzMS41NDM5IDc2Ljc4NTVDMjYuNzI0MSA3My43OTg5IDI0LjE0MDUgNjguNDI1MiAxMy4wODI5IDY2LjY2ODNDMTAuNDk5NCA2Ni41NjUgOS43NzU5OSA2NC43MDQ4IDExLjQyOTUgNjMuMzYxNEMyMi4yODA0IDU1LjE5NzQgMzEuNDM3NSA1My40ODcxIDMxLjQzNzUgNTMuNDg3MUMzMS40Mzc1IDUzLjQ4NzEgMzEuODE2OCA1My4zOTgyIDMyLjQ2MDYgNTMuMjg5NyIgc3Ryb2tlPSIjM0YzRDNEIiBzdHJva2Utd2lkdGg9IjEuMjYwOCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTEwLjgwNDIgNzEuMTA3NUMxMC44MDQyIDcxLjEwNzUgMTcuNTY2OSA3MC44NTY0IDMyLjYwOTMgODEuMjM1QzM0LjUzNTYgODIuMjA4NSAzNi43NjY4IDgzLjAxMjUgMzguOTEzMiA4Mi43ODUxQzQ1LjY4OTMgODIuMDY2OSA2MS4wMjUzIDgwLjEyMiA3NC41MjY5IDg1LjEwODMiIHN0cm9rZT0iIzNGM0QzRCIgc3Ryb2tlLXdpZHRoPSIxLjI2MDgiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zNy4xMDQ2IDc1LjQyNzhMNDMuNDYyMiA3MS4wNzkyIiBzdHJva2U9IiMzRjNEM0QiIHN0cm9rZS13aWR0aD0iMS4yNjA4IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTAuODA0MiA3MS4xMTA0QzEwLjgwNDIgNzEuMTEwNCAxNi4yODEzIDcxLjExMDQgMzIuNjA5MyA4MS4yMzc5QzM0LjUzNTYgODIuMjExNCAzNi43NjY4IDgzLjAxNTQgMzguOTEzMiA4Mi43ODgxIiBzdHJva2U9IiMzRjNEM0QiIHN0cm9rZS13aWR0aD0iMS4yNjA4IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8L3N2Zz4K",N="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAD0AAAAmCAYAAAB3c5OxAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwAAAzVJREFUeAHVmVtS6kAQhjvhAI+HJcADtzfYAa7g6ArEFehZgbCCw1mBuAJ1BbIDfaOAB7IDeYXi4t/WYEHMZW5O8KuyiJNMkn+6p7tn4pEB4/G47Pv+Mw7LCt2CQqHQrlQqC9kO0+n03263u5G93vO8Qa1W+xt33icDcPNzUhPMlJfLZVelg4pgmeuNROPmr6QBvOMPZYiR6GazOYK1R6QIBqvDU4Mywkg0s91un0gDWLtLGWEsulgsDkmPa8oIY9EchXVcHJTg4h3KAGPRgnvSQER/51gRnc/nH/EjnXf3QPTlfD4vkWOsiGYXR0TWsXZptVp1yDG23JvT0CNpAGs7D2jWRHPOJg0X55zt2sWtiRb8Jw1Uy1JTrIpGoTIiDVyXpVZFm5SlWEm1yBG23Vu7LIVwZzlbWrSsJX5CWSolmldEsMSdzMroJ5SlUqJzudwtflr4vSM5TrosTRUNt+7Cyl0+5oAzmUwu0/qcelmaKFq49W2oeZDm5qdelsaK5hGP2fT7aE8TrluWuiBSNAvGiCftcvIu6EOSK2qWpUG9Xv/2wfoimi0oBKelqBaue0mxuFJZqhn1I0l6L+/wH87FcMsHUtzHRkFyBssGEQ/uiCkihbjPKNyO4LkjdYKoQYS+p0/REHyNhh4OtaInxPWq1Wo/3I77PnPUl7gFu3Yl6oSm6DgW/mw264gXG5CmYAZW6uHl5vg7D7VLlaV4vtYKTYOSv16vOS2VyRIQeRS8ZMtSl9HexxwaslvhZftkAFuKv1GF56RMWcrno2LCd/EZvfHQHh7exmFAaiw4ADUajZu4j3JprrvZbLTKVl2OUha+9L2yAJIXzpG7HRVxD4EH8PmknD0ih3zJ0+xm7KawetrHudhUFSapLMVzhi5dm4msyPgl4XIXFG9xacF74gIV501yjJd0Unx0f6HjVLYQLh2QIkhnb6F7xebmUD+beTp5lSWEXR22wTJ9A3c8Cmg2y04VUtfTYgHw4Zo8/xClB6QJ+h+5uOuovUdq5wSBja3N89wol3N2OLBukBb1D1DekEgg+CVzFQc2lKpnNqIsBu4KcaIl0pgUiCEXvJWEfr/JEPaudwlPpOcVnMnUAAAAAElFTkSuQmCC";export{M as tutorialImage,N as workspaceLogo};
@@ -0,0 +1,27 @@
1
+ import { type ReactNode } from "react";
2
+ import type { EditorController, EditorDocument } from "./core.js";
3
+ import type { EditorWorkspaceController } from "./workspace.js";
4
+ export interface WorkspaceTabLabels {
5
+ newTab: string;
6
+ close: string;
7
+ closeOthers: string;
8
+ closeRight: string;
9
+ closeSaved: string;
10
+ closeAll: string;
11
+ copyPath: string;
12
+ reveal: string;
13
+ }
14
+ export interface WorkspaceTabsProps {
15
+ workspace: EditorWorkspaceController;
16
+ editor: EditorController;
17
+ labels: WorkspaceTabLabels;
18
+ prefix: string;
19
+ leading?: ReactNode;
20
+ trailing?: ReactNode;
21
+ newTabIcon?: ReactNode;
22
+ renderFileIcon?: (document: EditorDocument) => ReactNode;
23
+ onCopyPath?: (document: EditorDocument) => Promise<void>;
24
+ onReveal?: (document: EditorDocument) => Promise<void>;
25
+ onError: (error: unknown) => void;
26
+ }
27
+ export declare function WorkspaceTabs({ workspace, editor, labels, prefix, leading, trailing, newTabIcon, renderFileIcon, onCopyPath, onReveal, onError }: WorkspaceTabsProps): ReactNode;
@@ -0,0 +1 @@
1
+ import{jsx as a,jsxs as p}from"react/jsx-runtime";import{basename as j}from"@alwith/module-fs/core";import{Button as W}from"@base-ui/react/button";import{ContextMenu as o}from"@base-ui/react/context-menu";import{File as E,Plus as Y,X as K}from"lucide-react";import{useEffect as q,useRef as M,useSyncExternalStore as X}from"react";function z({workspace:l,editor:b,labels:s,prefix:N,leading:x,trailing:B,newTabIcon:A,renderFileIcon:L,onCopyPath:T,onReveal:S,onError:R}){let n=X(l.subscribe,l.getSnapshot,l.getSnapshot),P=X(b.subscribe,b.getSnapshot,b.getSnapshot).documents,c=M(null),g=M(null),w=M(!1),u=(t)=>{t().catch(R)};return q(()=>{let t=c.current;if(!t)return;let d=(r)=>{if(r.ctrlKey||r.metaKey||t.scrollWidth<=t.clientWidth)return;let h=Math.abs(r.deltaX)>Math.abs(r.deltaY)?r.deltaX:r.deltaY;t.scrollLeft+=h*(r.deltaMode===1?16:r.deltaMode===2?t.clientWidth:1),r.preventDefault()};return t.addEventListener("wheel",d,{passive:!1}),()=>t.removeEventListener("wheel",d)},[]),q(()=>{c.current?.querySelector('[aria-selected="true"]')?.scrollIntoView({block:"nearest",inline:"nearest"})},[n.activeId]),p("div",{className:"alwith-workspace-tabbar","data-empty":n.tabs.length===0,children:[x,p("div",{className:"alwith-workspace-tab-scroll",ref:c,children:[a("div",{role:"tablist",className:"alwith-workspace-tablist",children:n.tabs.map((t,d)=>{let r=P.find((e)=>e.id===t.id);if(t.kind==="file"&&!r)throw Error(`Missing tab document: ${t.id}`);let h=r?j(r.path):s.newTab,y=t.id===n.activeId,C=()=>u(()=>l.requestClose(t.id));return p(o.Root,{children:[p(o.Trigger,{className:"alwith-workspace-tab","data-tab-id":t.id,"data-active":y,"data-dirty":Boolean(r?.dirty),"data-transient":r?!r.pinned:!1,"data-divider":d>0&&!y&&n.tabs[d-1].id!==n.activeId,role:"tab","aria-label":`${h}${r?.dirty?" •":""}`,id:`${N}-tab-${t.id}`,"aria-controls":`${N}-panel-${t.id}`,"aria-selected":y,tabIndex:y?0:-1,onClick:()=>{if(w.current){w.current=!1;return}l.activate(t.id)},onDoubleClick:()=>{if(r)b.pin(r.id)},onKeyDown:(e)=>{if(e.key==="Enter"||e.key===" "){e.preventDefault(),l.activate(t.id);return}if(e.key==="Delete"){e.preventDefault(),C();return}let i=e.key==="ArrowRight"?1:e.key==="ArrowLeft"?-1:0,m=e.key==="Home"?0:e.key==="End"?n.tabs.length-1:i?(d+i+n.tabs.length)%n.tabs.length:null;if(m===null)return;e.preventDefault();let k=n.tabs[m];l.activate(k.id),globalThis.document.getElementById(`${N}-tab-${k.id}`)?.focus()},title:r?.path??h,onPointerDown:(e)=>{if(e.button!==0)return;w.current=!1,g.current={id:t.id,x:e.clientX,y:e.clientY,moved:!1,before:null}},onPointerMove:(e)=>{let i=g.current;if(i?.id!==t.id)return;if(!i.moved&&Math.hypot(e.clientX-i.x,e.clientY-i.y)<5)return;e.currentTarget.setPointerCapture(e.pointerId),i.moved=!0,e.currentTarget.dataset.dragging="true";let m=[...c.current.querySelectorAll("[data-tab-id]")].filter((f)=>f.dataset.tabId!==t.id),k=getComputedStyle(e.currentTarget).direction==="rtl";i.before=m.find((f)=>{let I=f.getBoundingClientRect();return k?e.clientX>I.left+I.width/2:e.clientX<I.left+I.width/2})?.dataset.tabId??null;for(let f of m)f.dataset.dropBefore=String(f.dataset.tabId===i.before);let D=c.current.getBoundingClientRect();if(e.clientX>D.right-24)c.current.scrollLeft+=12;if(e.clientX<D.left+24)c.current.scrollLeft-=12},onPointerUp:(e)=>{let i=g.current;if(i?.id!==t.id)return;if(i.moved)l.reorder(t.id,i.before),w.current=!0;if(g.current=null,delete e.currentTarget.dataset.dragging,c.current?.querySelectorAll("[data-drop-before]").forEach((m)=>{delete m.dataset.dropBefore}),e.currentTarget.hasPointerCapture(e.pointerId))e.currentTarget.releasePointerCapture(e.pointerId)},onPointerCancel:(e)=>{g.current=null,delete e.currentTarget.dataset.dragging,c.current?.querySelectorAll("[data-drop-before]").forEach((i)=>{delete i.dataset.dropBefore})},onAuxClick:(e)=>{if(e.button===1)e.preventDefault(),C()},children:[p("span",{className:"alwith-workspace-tab-content",children:[a("span",{className:"alwith-workspace-tab-icon","aria-hidden":"true",children:r?L?.(r)??a(E,{}):A??a(E,{})}),a("span",{className:"alwith-workspace-tab-title",children:h})]}),a("span",{className:"alwith-workspace-tab-close","aria-hidden":"true",title:`${s.close} ${h}`,onPointerDown:(e)=>e.stopPropagation(),onClick:(e)=>{e.stopPropagation(),C()},children:a(K,{"aria-hidden":"true"})})]}),a(o.Portal,{children:a(o.Positioner,{children:p(o.Popup,{className:"alwith-editor-menu",children:[a(o.Item,{className:"alwith-editor-menu-item",onClick:C,children:s.close}),n.tabs.length>1&&a(o.Item,{className:"alwith-editor-menu-item",onClick:()=>u(()=>l.requestCloseMany(n.tabs.filter((e)=>e.id!==t.id).map((e)=>e.id))),children:s.closeOthers}),d<n.tabs.length-1&&a(o.Item,{className:"alwith-editor-menu-item",onClick:()=>u(()=>l.requestCloseMany(n.tabs.slice(d+1).map((e)=>e.id))),children:s.closeRight}),a(o.Item,{className:"alwith-editor-menu-item",onClick:()=>u(()=>l.requestCloseMany(n.tabs.filter((e)=>!P.find((i)=>i.id===e.id)?.dirty).map((e)=>e.id))),children:s.closeSaved}),a(o.Item,{className:"alwith-editor-menu-item",onClick:()=>u(()=>l.requestCloseMany(n.tabs.map((e)=>e.id))),children:s.closeAll}),r&&(S??T)&&a(o.Separator,{className:"alwith-editor-menu-separator"}),r&&S&&a(o.Item,{className:"alwith-editor-menu-item",onClick:()=>u(()=>S(r)),children:s.reveal}),r&&T&&a(o.Item,{className:"alwith-editor-menu-item",onClick:()=>u(()=>T(r)),children:s.copyPath})]})})})]},t.id)})}),a(W,{className:"alwith-workspace-new-tab","aria-label":s.newTab,title:`${s.newTab} (${typeof navigator<"u"&&navigator.platform.includes("Mac")?"⌘":"Ctrl+"}T)`,onClick:()=>l.openNewTab(),children:a(Y,{})}),a("div",{className:"alwith-workspace-tab-space"})]}),B]})}export{z as WorkspaceTabs};
@@ -0,0 +1,31 @@
1
+ import type { EditorController } from "./core.js";
2
+ export type WorkspaceTab = {
3
+ id: string;
4
+ kind: "file" | "new";
5
+ };
6
+ export interface EditorWorkspaceSnapshot {
7
+ tabs: readonly WorkspaceTab[];
8
+ activeId: string | null;
9
+ }
10
+ export interface SavedEditorWorkspace {
11
+ tabs: ({
12
+ kind: "file";
13
+ path: string;
14
+ } | {
15
+ kind: "new";
16
+ })[];
17
+ activeIndex: number | null;
18
+ }
19
+ export interface EditorWorkspaceController {
20
+ getSnapshot: () => EditorWorkspaceSnapshot;
21
+ subscribe: (listener: () => void) => () => void;
22
+ openNewTab: () => string;
23
+ activate: (id: string) => void;
24
+ reorder: (id: string, beforeId: string | null) => void;
25
+ requestClose: (id: string) => Promise<boolean>;
26
+ requestCloseMany: (ids: readonly string[]) => Promise<boolean>;
27
+ reopenClosed: () => Promise<void>;
28
+ serialize: () => SavedEditorWorkspace;
29
+ dispose: () => void;
30
+ }
31
+ export declare function createEditorWorkspace(editor: EditorController, saved?: SavedEditorWorkspace): EditorWorkspaceController;
@@ -0,0 +1 @@
1
+ function S(d,a){let v=d.getSnapshot(),l=v.documents,r=a?a.tabs.flatMap((t)=>{if(t.kind==="new")return[{id:crypto.randomUUID(),kind:"new"}];let e=l.find((i)=>i.path===t.path);return e?[{id:e.id,kind:"file"}]:[]}):l.map((t)=>({id:t.id,kind:"file"}));for(let t of l)if(!r.some((e)=>e.id===t.id))r.push({id:t.id,kind:"file"});if(!a&&r.length===0)r.push({id:crypto.randomUUID(),kind:"new"});let I=a?.activeIndex==null?void 0:a.tabs[a.activeIndex],b=I?.kind==="file"?l.find((t)=>t.path===I.path)?.id:I?.kind==="new"?r[a.tabs.slice(0,a.activeIndex).filter((t)=>t.kind==="new"||l.some((e)=>e.path===t.path)).length]?.id:void 0,n={tabs:r,activeId:b??v.activeId??r[0]?.id??null},m=new Set,w=0,u=[];function f(){for(let t of m)t()}function p(t){let e=n.tabs.find((i)=>i.id===t);if(!e)throw Error(`Unknown workspace tab: ${t}`);return e}function g(t){let e=v;v=t;let i=n.tabs.filter((c)=>c.kind==="new"||t.documents.some((h)=>h.id===c.id));for(let c of t.documents){if(i.some((h)=>h.id===c.id))continue;if(i.at(-1)?.kind==="new")i=i.slice(0,-1);i=[...i,{id:c.id,kind:"file"}]}let s=t.selectionRevision===void 0?e.activeId!==t.activeId||e!==t&&e.documents===t.documents:t.selectionRevision!==e.selectionRevision,o=!w&&s&&t.activeId!==null?t.activeId:i.some((c)=>c.id===n.activeId)?n.activeId:i[Math.min(n.tabs.findIndex((c)=>c.id===n.activeId),i.length-1)]?.id??null;if(o===n.activeId&&i.length===n.tabs.length&&i.every((c,h)=>c===n.tabs[h]))return;n={tabs:i,activeId:o},f()}let y=d.subscribe(()=>g(d.getSnapshot())),k={getSnapshot:()=>n,subscribe(t){return m.add(t),()=>{m.delete(t)}},openNewTab(){let t=crypto.randomUUID();return n={tabs:[...n.tabs,{id:t,kind:"new"}],activeId:t},f(),t},activate(t){let e=p(t);if(n={...n,activeId:t},e.kind==="file")d.activate(t);f()},reorder(t,e){let i=p(t);if(e===t)return;if(e!==null)p(e);let s=n.tabs.filter((o)=>o.id!==t);s.splice(e===null?s.length:s.findIndex((o)=>o.id===e),0,i),n={...n,tabs:s},f()},async requestClose(t){if(p(t).kind==="file"){let i=d.getSnapshot().documents.find((s)=>s.id===t);if(!i)throw Error(`Missing workspace document: ${t}`);w++;try{if(!await d.requestClose(t))return!1;if(u.unshift(i.path),u.length>20)u.pop()}finally{w--}}else{let i=n.tabs.findIndex((o)=>o.id===t),s=n.tabs.filter((o)=>o.id!==t);n={tabs:s,activeId:n.activeId===t?s[Math.min(i,s.length-1)]?.id??null:n.activeId},f()}if(n.activeId!==null)k.activate(n.activeId);return!0},async requestCloseMany(t){for(let e of[...new Set(t)])if(n.tabs.some((i)=>i.id===e)&&!await k.requestClose(e))return!1;return!0},async reopenClosed(){let t=u[0];if(t===void 0)return;let e=await d.open(t);d.pin(e.id),u.shift()},serialize(){return{tabs:n.tabs.map((t)=>{if(t.kind==="new")return{kind:"new"};let e=d.getSnapshot().documents.find((i)=>i.id===t.id);if(!e)throw Error(`Missing workspace document: ${t.id}`);return{kind:"file",path:e.path}}),activeIndex:n.activeId===null?null:n.tabs.findIndex((t)=>t.id===n.activeId)}},dispose(){y(),m.clear()}};if(n.activeId!==null&&p(n.activeId).kind==="file")d.activate(n.activeId);return k}export{S as createEditorWorkspace};
package/package.json CHANGED
@@ -1,6 +1,165 @@
1
1
  {
2
2
  "name": "@alwith/module-editor",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.0-rc.13",
4
+ "type": "module",
5
+ "license": "SEE LICENSE IN LICENSE",
6
+ "files": [
7
+ "dist/**/*.js",
8
+ "dist/**/*.d.ts",
9
+ "dist/**/*.css",
10
+ "LICENSE",
11
+ "THIRD_PARTY_NOTICES.md",
12
+ "README.md"
13
+ ],
14
+ "sideEffects": [
15
+ "**/*.css"
16
+ ],
17
+ "exports": {
18
+ ".": {
19
+ "types": "./dist/index.d.ts",
20
+ "import": "./dist/index.js"
21
+ },
22
+ "./core": {
23
+ "types": "./dist/core.d.ts",
24
+ "import": "./dist/core.js"
25
+ },
26
+ "./styles.css": "./dist/styles.css",
27
+ "./monaco": {
28
+ "types": "./dist/monaco.d.ts",
29
+ "import": "./dist/monaco.js"
30
+ },
31
+ "./previews": {
32
+ "types": "./dist/previews/index.d.ts",
33
+ "import": "./dist/previews/index.js"
34
+ },
35
+ "./previews/styles.css": "./dist/previews/styles.css"
36
+ },
37
+ "scripts": {
38
+ "build": "bun ../../scripts/build-npm.ts",
39
+ "test": "bun test src",
40
+ "prepack": "bun run build && bun ../../scripts/verify-frontend-package.ts editor"
41
+ },
42
+ "dependencies": {
43
+ "@alwith/module-fs": "^0.1.0-rc.7",
44
+ "@base-ui/react": "^1.8.0"
45
+ },
46
+ "peerDependencies": {
47
+ "react": "^19.0.0",
48
+ "react-dom": "^19.0.0",
49
+ "monaco-editor": "^0.57.0",
50
+ "pdfjs-dist": "^6.4.299",
51
+ "docx-preview": "^0.4.1",
52
+ "xlsx": "^0.18.5",
53
+ "@milkdown/core": "^7.22.2",
54
+ "@milkdown/plugin-history": "^7.22.2",
55
+ "@milkdown/preset-commonmark": "^7.22.2",
56
+ "@milkdown/preset-gfm": "^7.22.2",
57
+ "@milkdown/utils": "^7.22.2",
58
+ "utif": "^3.1.0",
59
+ "@milkdown/prose": "^7.22.2",
60
+ "lucide-react": "^1.54.0",
61
+ "@milkdown/plugin-math": "^7.5.9",
62
+ "@alwith/module-chat": "^0.1.10",
63
+ "shiki": "^4.5.0",
64
+ "dompurify": "^3.4.16",
65
+ "katex": "^0.19.0",
66
+ "marked": "^18.1.0",
67
+ "x-data-spreadsheet": "^1.1.9",
68
+ "audiomotion-analyzer": "^4.5.4",
69
+ "react-player": "^3.4.0"
70
+ },
71
+ "devDependencies": {
72
+ "@alwith/module-chat": "workspace:*",
73
+ "@milkdown/core": "^7.22.2",
74
+ "@milkdown/plugin-history": "^7.22.2",
75
+ "@milkdown/plugin-math": "^7.5.9",
76
+ "@milkdown/preset-commonmark": "^7.22.2",
77
+ "@milkdown/preset-gfm": "^7.22.2",
78
+ "@milkdown/prose": "^7.22.2",
79
+ "@milkdown/utils": "^7.22.2",
80
+ "@types/jsdom": "^30.0.0",
81
+ "@types/react": "^19.3.0",
82
+ "@types/react-dom": "^19.3.0",
83
+ "@types/utif": "^3.0.6",
84
+ "audiomotion-analyzer": "^4.5.4",
85
+ "docx-preview": "^0.4.1",
86
+ "dompurify": "^3.4.16",
87
+ "jsdom": "^30.1.2",
88
+ "katex": "^0.19.0",
89
+ "lucide-react": "^1.54.0",
90
+ "marked": "^18.1.0",
91
+ "monaco-editor": "^0.57.0",
92
+ "pdfjs-dist": "^6.4.299",
93
+ "react-player": "^3.4.0",
94
+ "shiki": "^4.5.0",
95
+ "utif": "^3.1.0",
96
+ "x-data-spreadsheet": "^1.1.9",
97
+ "xlsx": "^0.18.5"
98
+ },
99
+ "peerDependenciesMeta": {
100
+ "monaco-editor": {
101
+ "optional": true
102
+ },
103
+ "pdfjs-dist": {
104
+ "optional": true
105
+ },
106
+ "docx-preview": {
107
+ "optional": true
108
+ },
109
+ "xlsx": {
110
+ "optional": true
111
+ },
112
+ "@milkdown/core": {
113
+ "optional": true
114
+ },
115
+ "@milkdown/plugin-history": {
116
+ "optional": true
117
+ },
118
+ "@milkdown/preset-commonmark": {
119
+ "optional": true
120
+ },
121
+ "@milkdown/preset-gfm": {
122
+ "optional": true
123
+ },
124
+ "@milkdown/utils": {
125
+ "optional": true
126
+ },
127
+ "utif": {
128
+ "optional": true
129
+ },
130
+ "@milkdown/prose": {
131
+ "optional": true
132
+ },
133
+ "@milkdown/plugin-math": {
134
+ "optional": true
135
+ },
136
+ "@alwith/module-chat": {
137
+ "optional": true
138
+ },
139
+ "shiki": {
140
+ "optional": true
141
+ },
142
+ "dompurify": {
143
+ "optional": true
144
+ },
145
+ "katex": {
146
+ "optional": true
147
+ },
148
+ "marked": {
149
+ "optional": true
150
+ },
151
+ "x-data-spreadsheet": {
152
+ "optional": true
153
+ },
154
+ "audiomotion-analyzer": {
155
+ "optional": true
156
+ },
157
+ "react-player": {
158
+ "optional": true
159
+ }
160
+ },
161
+ "publishConfig": {
162
+ "access": "public",
163
+ "registry": "https://registry.npmjs.org"
164
+ }
165
+ }