diff --git a/.gitignore b/.gitignore
index 7c5074fb114..aa29ca54595 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,7 +21,6 @@
.ipynb_checkpoints/
.venv/
/.direnv/
-*.tf
**/.terraform/*
*.tfstate
*.tfstate.*
diff --git a/docs/contributing/platform/01-config-tooling.md b/docs/contributing/platform/01-config-tooling.md
index 95662318dae..23f1302a6de 100644
--- a/docs/contributing/platform/01-config-tooling.md
+++ b/docs/contributing/platform/01-config-tooling.md
@@ -333,22 +333,6 @@ Some pointers:
auto-scroll things into view (which we almost never want since there's no real
scrolling in our app).
-## Debugging module graph
-
-Look at what modules are big (you may want to compare the results from
-before and after your commit):
-
- yarn source-map-explorer build/static/js/canvas.js
-
-If you want to figure out how a particular module is getting included, use:
-
- rm graph.json
- bash tools/import-chains.bash
-
-import-chains.bash currently just works for canvas-entry.tsx (which is the
-entrypoint for the canvas.js bundle), but it can be easily updated to analyze a
-different entrypoint.
-
## Audit licenses of dependencies
For node dependencies, do this from each project directory:
diff --git a/examples/angular-components/README b/examples/angular-components/README
deleted file mode 100644
index 5287c3a2f4d..00000000000
--- a/examples/angular-components/README
+++ /dev/null
@@ -1,5 +0,0 @@
-# Angular code components in Plasmic
-
-This is an example app that demonstrates how to use [Angular code components](https://docs.plasmic.app/learn/angular-code-components) with Plasmic.
-
-[Read the docs on how to set up Angular code copmonents](https://docs.plasmic.app/learn/angular-code-components).
\ No newline at end of file
diff --git a/examples/angular-components/angular-app/.browserslistrc b/examples/angular-components/angular-app/.browserslistrc
deleted file mode 100644
index 4f9ac26980c..00000000000
--- a/examples/angular-components/angular-app/.browserslistrc
+++ /dev/null
@@ -1,16 +0,0 @@
-# This file is used by the build system to adjust CSS and JS output to support the specified browsers below.
-# For additional information regarding the format and rule options, please see:
-# https://github.com/browserslist/browserslist#queries
-
-# For the full list of supported browsers by the Angular framework, please see:
-# https://angular.io/guide/browser-support
-
-# You can see what browsers were selected by your queries by running:
-# npx browserslist
-
-last 1 Chrome version
-last 1 Firefox version
-last 2 Edge major versions
-last 2 Safari major versions
-last 2 iOS major versions
-Firefox ESR
diff --git a/examples/angular-components/angular-app/.editorconfig b/examples/angular-components/angular-app/.editorconfig
deleted file mode 100644
index 59d9a3a3e73..00000000000
--- a/examples/angular-components/angular-app/.editorconfig
+++ /dev/null
@@ -1,16 +0,0 @@
-# Editor configuration, see https://editorconfig.org
-root = true
-
-[*]
-charset = utf-8
-indent_style = space
-indent_size = 2
-insert_final_newline = true
-trim_trailing_whitespace = true
-
-[*.ts]
-quote_type = single
-
-[*.md]
-max_line_length = off
-trim_trailing_whitespace = false
diff --git a/examples/angular-components/angular-app/.gitignore b/examples/angular-components/angular-app/.gitignore
deleted file mode 100644
index 0711527ef9d..00000000000
--- a/examples/angular-components/angular-app/.gitignore
+++ /dev/null
@@ -1,42 +0,0 @@
-# See http://help.github.com/ignore-files/ for more about ignoring files.
-
-# Compiled output
-/dist
-/tmp
-/out-tsc
-/bazel-out
-
-# Node
-/node_modules
-npm-debug.log
-yarn-error.log
-
-# IDEs and editors
-.idea/
-.project
-.classpath
-.c9/
-*.launch
-.settings/
-*.sublime-workspace
-
-# Visual Studio Code
-.vscode/*
-!.vscode/settings.json
-!.vscode/tasks.json
-!.vscode/launch.json
-!.vscode/extensions.json
-.history/*
-
-# Miscellaneous
-/.angular/cache
-.sass-cache/
-/connect.lock
-/coverage
-/libpeerconnection.log
-testem.log
-/typings
-
-# System files
-.DS_Store
-Thumbs.db
diff --git a/examples/angular-components/angular-app/README.md b/examples/angular-components/angular-app/README.md
deleted file mode 100644
index 1b85c6c7968..00000000000
--- a/examples/angular-components/angular-app/README.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# NestedApp
-
-This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 14.1.1.
-
-## Development server
-
-Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The application will automatically reload if you change any of the source files.
-
-## Code scaffolding
-
-Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.
-
-## Build
-
-Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory.
-
-## Running unit tests
-
-Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
-
-## Running end-to-end tests
-
-Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities.
-
-## Further help
-
-To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
diff --git a/examples/angular-components/angular-app/angular.json b/examples/angular-components/angular-app/angular.json
deleted file mode 100644
index 4806dde0d2f..00000000000
--- a/examples/angular-components/angular-app/angular.json
+++ /dev/null
@@ -1,94 +0,0 @@
-{
- "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
- "version": 1,
- "newProjectRoot": "projects",
- "projects": {
- "nested-app": {
- "projectType": "application",
- "schematics": {},
- "root": "",
- "sourceRoot": "src",
- "prefix": "app",
- "architect": {
- "build": {
- "builder": "@angular-devkit/build-angular:browser",
- "options": {
- "outputPath": "dist/nested-app",
- "index": "src/index.html",
- "main": "src/main.ts",
- "polyfills": "src/polyfills.ts",
- "tsConfig": "tsconfig.app.json",
- "assets": ["src/favicon.ico", "src/assets"],
- "styles": ["src/styles.css"],
- "scripts": []
- },
- "configurations": {
- "production": {
- "budgets": [
- {
- "type": "initial",
- "maximumWarning": "500kb",
- "maximumError": "1mb"
- },
- {
- "type": "anyComponentStyle",
- "maximumWarning": "2kb",
- "maximumError": "4kb"
- }
- ],
- "fileReplacements": [
- {
- "replace": "src/environments/environment.ts",
- "with": "src/environments/environment.prod.ts"
- }
- ],
- "outputHashing": "all"
- },
- "development": {
- "buildOptimizer": false,
- "optimization": false,
- "vendorChunk": true,
- "extractLicenses": false,
- "sourceMap": true,
- "namedChunks": true
- }
- },
- "defaultConfiguration": "production"
- },
- "serve": {
- "builder": "@angular-devkit/build-angular:dev-server",
- "configurations": {
- "production": {
- "browserTarget": "nested-app:build:production"
- },
- "development": {
- "browserTarget": "nested-app:build:development"
- }
- },
- "defaultConfiguration": "development"
- },
- "extract-i18n": {
- "builder": "@angular-devkit/build-angular:extract-i18n",
- "options": {
- "browserTarget": "nested-app:build"
- }
- },
- "test": {
- "builder": "@angular-devkit/build-angular:karma",
- "options": {
- "main": "src/test.ts",
- "polyfills": "src/polyfills.ts",
- "tsConfig": "tsconfig.spec.json",
- "karmaConfig": "karma.conf.js",
- "assets": ["src/favicon.ico", "src/assets"],
- "styles": ["src/styles.css"],
- "scripts": []
- }
- }
- }
- }
- },
- "cli": {
- "analytics": false
- }
-}
diff --git a/examples/angular-components/angular-app/dist/nested-app/3rdpartylicenses.txt b/examples/angular-components/angular-app/dist/nested-app/3rdpartylicenses.txt
deleted file mode 100644
index 893eb4e570c..00000000000
--- a/examples/angular-components/angular-app/dist/nested-app/3rdpartylicenses.txt
+++ /dev/null
@@ -1,256 +0,0 @@
-@angular/common
-MIT
-
-@angular/core
-MIT
-
-@angular/elements
-MIT
-
-@angular/platform-browser
-MIT
-
-rxjs
-Apache-2.0
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright (c) 2015-2018 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-
-
-tslib
-0BSD
-Copyright (c) Microsoft Corporation.
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
-
-zone.js
-MIT
-The MIT License
-
-Copyright (c) 2010-2022 Google LLC. https://angular.io/license
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/examples/angular-components/angular-app/dist/nested-app/favicon.ico b/examples/angular-components/angular-app/dist/nested-app/favicon.ico
deleted file mode 100644
index 997406ad22c..00000000000
Binary files a/examples/angular-components/angular-app/dist/nested-app/favicon.ico and /dev/null differ
diff --git a/examples/angular-components/angular-app/dist/nested-app/index.html b/examples/angular-components/angular-app/dist/nested-app/index.html
deleted file mode 100644
index 237c9f0682a..00000000000
--- a/examples/angular-components/angular-app/dist/nested-app/index.html
+++ /dev/null
@@ -1,12 +0,0 @@
-
- You’ve successfully created a project with
- Vite +
- Vue 3. What's next?
-
-
-
-
-
diff --git a/examples/vue-quickstart/src/components/TheWelcome.vue b/examples/vue-quickstart/src/components/TheWelcome.vue
deleted file mode 100644
index a70765c231f..00000000000
--- a/examples/vue-quickstart/src/components/TheWelcome.vue
+++ /dev/null
@@ -1,86 +0,0 @@
-
-
-
-
-
-
-
- Documentation
-
- Vue’s
- official documentation
- provides you with all information you need to get started.
-
-
-
-
-
-
- Tooling
-
- This project is served and bundled with
- Vite. The
- recommended IDE setup is
- VSCode +
- Volar. If
- you need to test your components and web pages, check out
- Cypress and
- Cypress Component Testing.
-
-
-
- More instructions are available in README.md.
-
-
-
-
-
-
- Ecosystem
-
- Get official tools and libraries for your project:
- Pinia,
- Vue Router,
- Vue Test Utils, and
- Vue Dev Tools. If
- you need more resources, we suggest paying
- Awesome Vue
- a visit.
-
-
-
-
-
-
- Community
-
- Got stuck? Ask your question on
- Vue Land, our official
- Discord server, or
- StackOverflow. You should also subscribe to
- our mailing list and follow
- the official
- @vuejs
- twitter account for latest news in the Vue world.
-
-
-
-
-
-
- Support Vue
-
- As an independent project, Vue relies on community backing for its sustainability. You can help
- us by
- becoming a sponsor.
-
-
diff --git a/examples/vue-quickstart/src/components/WelcomeItem.vue b/examples/vue-quickstart/src/components/WelcomeItem.vue
deleted file mode 100644
index ba0def33c0e..00000000000
--- a/examples/vue-quickstart/src/components/WelcomeItem.vue
+++ /dev/null
@@ -1,86 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/vue-quickstart/src/components/__tests__/HelloWorld.spec.ts b/examples/vue-quickstart/src/components/__tests__/HelloWorld.spec.ts
deleted file mode 100644
index c80503c0506..00000000000
--- a/examples/vue-quickstart/src/components/__tests__/HelloWorld.spec.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { describe, expect, it } from "vitest";
-
-import { mount } from "@vue/test-utils";
-import HelloWorld from "../HelloWorld.vue";
-
-describe("HelloWorld", () => {
- it("renders properly", () => {
- const wrapper = mount(HelloWorld, { props: { msg: "Hello Vitest" } });
- expect(wrapper.text()).toContain("Hello Vitest");
- });
-});
diff --git a/examples/vue-quickstart/src/components/icons/IconCommunity.vue b/examples/vue-quickstart/src/components/icons/IconCommunity.vue
deleted file mode 100644
index 2dc8b055253..00000000000
--- a/examples/vue-quickstart/src/components/icons/IconCommunity.vue
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
diff --git a/examples/vue-quickstart/src/components/icons/IconDocumentation.vue b/examples/vue-quickstart/src/components/icons/IconDocumentation.vue
deleted file mode 100644
index 6d4791cfbcf..00000000000
--- a/examples/vue-quickstart/src/components/icons/IconDocumentation.vue
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
diff --git a/examples/vue-quickstart/src/components/icons/IconEcosystem.vue b/examples/vue-quickstart/src/components/icons/IconEcosystem.vue
deleted file mode 100644
index c3a4f078c0b..00000000000
--- a/examples/vue-quickstart/src/components/icons/IconEcosystem.vue
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
diff --git a/examples/vue-quickstart/src/components/icons/IconSupport.vue b/examples/vue-quickstart/src/components/icons/IconSupport.vue
deleted file mode 100644
index 7452834d3ef..00000000000
--- a/examples/vue-quickstart/src/components/icons/IconSupport.vue
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
diff --git a/examples/vue-quickstart/src/components/icons/IconTooling.vue b/examples/vue-quickstart/src/components/icons/IconTooling.vue
deleted file mode 100644
index 660598d7c76..00000000000
--- a/examples/vue-quickstart/src/components/icons/IconTooling.vue
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
diff --git a/examples/vue-quickstart/src/main.ts b/examples/vue-quickstart/src/main.ts
deleted file mode 100644
index 9d040c62ad4..00000000000
--- a/examples/vue-quickstart/src/main.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { createPinia } from "pinia";
-import { createApp } from "vue";
-
-import App from "./App.vue";
-import router from "./router";
-
-import "./assets/main.css";
-
-const app = createApp(App);
-
-app.use(createPinia());
-app.use(router);
-
-app.mount("#app");
diff --git a/examples/vue-quickstart/src/plasmic-init.ts b/examples/vue-quickstart/src/plasmic-init.ts
deleted file mode 100644
index dd46b15fe7d..00000000000
--- a/examples/vue-quickstart/src/plasmic-init.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-/** @format */
-
-import { initPlasmicLoader } from "@plasmicapp/loader-vue";
-export const PLASMIC = initPlasmicLoader({
- projects: [
- {
- id: "i5FheHmF6C39nqpnHjdBD4", // ID of a project you are using
- token:
- "e88cDjRCPlVXXeCSp8A92DdrypgHEx3GOup1zZRvkxkAbEZkXN0ry0uJjXdO58mzhPTnV83QAEOp6ZieXA", // API token for that project
- },
- ],
- // Fetches the latest revisions, whether or not they were unpublished!
- // Disable for production to ensure you render only published changes.
- preview: true,
-});
diff --git a/examples/vue-quickstart/src/router/index.jsx b/examples/vue-quickstart/src/router/index.jsx
deleted file mode 100644
index 00848442387..00000000000
--- a/examples/vue-quickstart/src/router/index.jsx
+++ /dev/null
@@ -1,47 +0,0 @@
-/** @format */
-
-import { PlasmicComponent } from "@plasmicapp/loader-vue";
-import { createRouter, createWebHistory } from "vue-router"; // vue-router 4.x
-import { PLASMIC } from "../plasmic-init";
-
-// Create a catch-all route for your specific routing framework
-const CatchAllPage = {
- data() {
- return {
- loading: true,
- pageData: null,
- };
- },
- created() {
- this.fetchData();
- },
- render() {
- if (this.loading) {
- return
+ );
+ }
return (
{
+// // etc.
+// }
+//
+// You can also stop extending from DefaultAddCommentMarkerProps altogether and have
+// total control over the props for your component.
+export interface AddCommentMarkerProps extends DefaultAddCommentMarkerProps {
+ icon?: PlasmicAddCommentMarker__OverridesType["icon"];
+}
+
+export function AddCommentMarker(props: AddCommentMarkerProps) {
+ // Use PlasmicAddCommentMarker to render this component as it was
+ // designed in Plasmic, by activating the appropriate variants,
+ // attaching the appropriate event handlers, etc. You
+ // can also install whatever React hooks you need here to manage state or
+ // fetch data.
+ //
+ // Props you can pass into PlasmicAddCommentMarker are:
+ // 1. Variants you want to activate,
+ // 2. Contents for slots you want to fill,
+ // 3. Overrides for any named node in the component to attach behavior and data,
+ // 4. Props to set on the root node.
+ //
+ // By default, we are just piping all AddCommentMarkerProps here, but feel free
+ // to do whatever works for you.
+
+ return ;
+}
diff --git a/platform/wab/src/wab/client/components/comments/CanvasCommentMarkers.tsx b/platform/wab/src/wab/client/components/comments/CanvasCommentMarkers.tsx
index a8d3cf127b8..52ebaf790a3 100644
--- a/platform/wab/src/wab/client/components/comments/CanvasCommentMarkers.tsx
+++ b/platform/wab/src/wab/client/components/comments/CanvasCommentMarkers.tsx
@@ -1,36 +1,41 @@
import { CanvasTransformedBox } from "@/wab/client/components/canvas/CanvasTransformedBox";
import { useRerenderOnUserBodyChange } from "@/wab/client/components/canvas/UserBodyObserver";
+import { AddCommentMarker } from "@/wab/client/components/comments/AddCommentMarker";
+import { CommentMarker } from "@/wab/client/components/comments/CommentMarker";
import CommentPost from "@/wab/client/components/comments/CommentPost";
-import CommentPostForm from "@/wab/client/components/comments/CommentPostForm";
-import { useCommentsCtx } from "@/wab/client/components/comments/CommentsProvider";
-import ThreadComments from "@/wab/client/components/comments/ThreadComments";
import {
+ getSubjectVariantsKey,
TplCommentThread,
- isCommentForFrame,
} from "@/wab/client/components/comments/utils";
import { Avatar } from "@/wab/client/components/studio/Avatar";
-import {
- BASE_VARIANT_COLOR,
- NON_BASE_VARIANT_COLOR,
-} from "@/wab/client/components/studio/GlobalCssVariables";
import { useStudioCtx } from "@/wab/client/studio-ctx/StudioCtx";
-import { ViewCtx } from "@/wab/client/studio-ctx/view-ctx";
-import { OnClickAway } from "@/wab/commons/components/OnClickAway";
+import {
+ getSetOfVariantsForViewCtx,
+ ViewCtx,
+} from "@/wab/client/studio-ctx/view-ctx";
import { AnyArena } from "@/wab/shared/Arenas";
-import { ensure, ensureString, xGroupBy } from "@/wab/shared/common";
-import { isTplVariantable } from "@/wab/shared/core/tpls";
+import { ensure, ensureString, withoutNils } from "@/wab/shared/common";
+import {
+ isTplNamable,
+ isTplVariantable,
+ tryGetTplOwnerComponent,
+} from "@/wab/shared/core/tpls";
import { ArenaFrame, ObjInst, TplNode } from "@/wab/shared/model/classes";
import { mkSemVerSiteElement } from "@/wab/shared/site-diffs";
-import Chroma from "@/wab/shared/utils/color-utils";
-import classNames from "classnames";
+import { Popover, Tooltip } from "antd";
import $ from "jquery";
import { observer } from "mobx-react";
import React, { ReactNode } from "react";
import { createPortal } from "react-dom";
+const HORIZONTAL_MARKER_OFFSET = 12;
+const ADD_COMMENT_MARKER_MARGIN = 10;
+const ADD_COMMENT_INDIVIDUAL_MARKER_MARGIN = 20;
+const COMMENT_MARKER_INITIAL_Z_INDEX = 12;
+const THREAD_MARKER_MARGIN = 30;
+
function ObjInstLabel(props: { subject: ObjInst }) {
const { subject } = props;
-
const item = mkSemVerSiteElement(subject as any);
const typeName = item.type;
const objName = item.name;
@@ -47,114 +52,178 @@ function ObjInstLabel(props: { subject: ObjInst }) {
);
}
-function ThreadWithHeader(props: { commentThread: TplCommentThread }) {
- const { commentThread } = props;
-
- const { bundler } = useCommentsCtx();
-
- const subject = bundler.objByAddr(commentThread.location.subject);
-
- return (
-
);
});
diff --git a/platform/wab/src/wab/client/components/comments/MarkdownHintRow.tsx b/platform/wab/src/wab/client/components/comments/MarkdownHintRow.tsx
new file mode 100644
index 00000000000..58b2e783a23
--- /dev/null
+++ b/platform/wab/src/wab/client/components/comments/MarkdownHintRow.tsx
@@ -0,0 +1,47 @@
+// This is a skeleton starter React component generated by Plasmic.
+// This file is owned by you, feel free to edit as you see fit.
+import {
+ DefaultMarkdownHintRowProps,
+ PlasmicMarkdownHintRow,
+} from "@/wab/client/plasmic/plasmic_kit_comments/PlasmicMarkdownHintRow";
+import { HTMLElementRefOf } from "@plasmicapp/react-web";
+import * as React from "react";
+
+// Your component props start with props for variants and slots you defined
+// in Plasmic, but you can add more here, like event handlers that you can
+// attach to named nodes in your component.
+//
+// If you don't want to expose certain variants or slots as a prop, you can use
+// Omit to hide them:
+//
+// interface MarkdownHintRowProps extends Omit {
+// // etc.
+// }
+//
+// You can also stop extending from DefaultMarkdownHintRowProps altogether and have
+// total control over the props for your component.
+export type MarkdownHintRowProps = DefaultMarkdownHintRowProps;
+
+function MarkdownHintRow_(
+ props: MarkdownHintRowProps,
+ ref: HTMLElementRefOf<"div">
+) {
+ // Use PlasmicMarkdownHintRow to render this component as it was
+ // designed in Plasmic, by activating the appropriate variants,
+ // attaching the appropriate event handlers, etc. You
+ // can also install whatever React hooks you need here to manage state or
+ // fetch data.
+ //
+ // Props you can pass into PlasmicMarkdownHintRow are:
+ // 1. Variants you want to activate,
+ // 2. Contents for slots you want to fill,
+ // 3. Overrides for any named node in the component to attach behavior and data,
+ // 4. Props to set on the root node.
+ //
+ // By default, we are just piping all MarkdownHintRowProps here, but feel free
+ // to do whatever works for you.
+
+ return ;
+}
+
+export const MarkdownHintRow = React.forwardRef(MarkdownHintRow_);
diff --git a/platform/wab/src/wab/client/components/comments/MarkdownHintsPopoverContent.tsx b/platform/wab/src/wab/client/components/comments/MarkdownHintsPopoverContent.tsx
new file mode 100644
index 00000000000..06462bcda22
--- /dev/null
+++ b/platform/wab/src/wab/client/components/comments/MarkdownHintsPopoverContent.tsx
@@ -0,0 +1,52 @@
+import { MarkdownHintRow } from "@/wab/client/components/comments/MarkdownHintRow";
+import {
+ DefaultMarkdownHintsPopoverContentProps,
+ PlasmicMarkdownHintsPopoverContent,
+} from "@/wab/client/plasmic/plasmic_kit_comments/PlasmicMarkdownHintsPopoverContent";
+import { HTMLElementRefOf } from "@plasmicapp/react-web";
+import * as React from "react";
+
+export type MarkdownHintsPopoverContentProps =
+ DefaultMarkdownHintsPopoverContentProps;
+
+const MARKDOWN_HINTS = [
+ {
+ name: "Heading",
+ rules: ["# H1", "## H2", "### H3"],
+ },
+ { name: "Bold", rules: ["**bold**"] },
+ { name: "Italic", rules: ["*italic*"] },
+ { name: "Blockquote", rules: ["> blockquote"] },
+ {
+ name: "Ordered list",
+ rules: ["1. First item", "2. Second item", "3. Third item"],
+ },
+ {
+ name: "Unordered list",
+ rules: ["- First item", "- Second item", "- Third item"],
+ },
+ { name: "Code", rules: ["`code`"] },
+ { name: "Horizontal rule", rules: ["---"] },
+ { name: "Link", rules: ["[title](https://www.link.com)"] },
+];
+
+function MarkdownHintsPopoverContent_(
+ props: MarkdownHintsPopoverContentProps,
+ ref: HTMLElementRefOf<"div">
+) {
+ return (
+ (
+
+ )),
+ }}
+ />
+ );
+}
+
+export const MarkdownHintsPopoverContent = React.forwardRef(
+ MarkdownHintsPopoverContent_
+);
diff --git a/platform/wab/src/wab/client/components/comments/ReactionsByEmoji.tsx b/platform/wab/src/wab/client/components/comments/ReactionsByEmoji.tsx
new file mode 100644
index 00000000000..8263e19a938
--- /dev/null
+++ b/platform/wab/src/wab/client/components/comments/ReactionsByEmoji.tsx
@@ -0,0 +1,138 @@
+import { Icon as IconComponent } from "@/wab/client/components/widgets/Icon";
+import IconButton from "@/wab/client/components/widgets/IconButton";
+import PlasmicReactionButton from "@/wab/client/plasmic/plasmic_kit_comments/PlasmicReactionButton";
+import EmojiPlusSvgIcon from "@/wab/client/plasmic/plasmic_kit_icons/icons/PlasmicIcon__EmojiPlusSvg";
+import { useStudioCtx } from "@/wab/client/studio-ctx/StudioCtx";
+import { OnClickAway } from "@/wab/commons/components/OnClickAway";
+import {
+ ApiCommentReaction,
+ CommentId,
+ CommentReactionId,
+} from "@/wab/shared/ApiSchema";
+import { fullName } from "@/wab/shared/ApiSchemaUtil";
+import { ensure, mkUuid } from "@/wab/shared/common";
+import { Tooltip } from "antd";
+import Popover from "antd/lib/popover";
+import EmojiPicker, { Emoji } from "emoji-picker-react";
+import { Dictionary } from "lodash";
+import * as React from "react";
+
+// Reactions using unicode emojis hex codes
+const REACTIONS = [
+ "1f44d", // 👍
+ "1f44f", // 👏
+ "1f4af", // 💯
+ "2705", // ✅
+ "1f525", // 🔥
+ "274c", // ❌
+ "1f44e", // 👎
+];
+
+function ReactionsPopover(props: { commentId: CommentId }) {
+ const { commentId } = props;
+ const studioCtx = useStudioCtx();
+ const appCtx = studioCtx.appCtx;
+ const api = appCtx.api;
+
+ const commentsCtx = studioCtx.commentsCtx;
+ const [showPicker, setShowPicker] = React.useState(false);
+ return (
+ setShowPicker(x)}
+ overlayClassName={"NoPaddingPopover NoBackgroundStyles"}
+ content={
+