Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
379 commits
Select commit Hold shift + click to select a range
eade02f
upgrade-internal
May 27, 2026
a0c1334
test: add missing test features from cypress
sampullman May 11, 2026
6a63e61
fix: host-app console check improvement
sampullman May 11, 2026
7642969
test: improve interactions-custom and dynamic-initial-value
sampullman May 11, 2026
9305523
test: fix remaining playwright tests for cypress parity
sampullman May 11, 2026
5a44a4c
test: fix broken conversion tests and other flakiness
sampullman May 12, 2026
949ee6b
refactor: move fixtures and remove old cypress wab tests
sampullman May 12, 2026
d619098
Revert "[PLA-12977]: Animations do not work in codegen (#2719)"
sampullman May 27, 2026
33a3b16
chore: update CLI in required-versions to 0.1.363
sampullman May 27, 2026
4ad0f37
Publish
May 27, 2026
6f2aef2
upgrade-internal
May 27, 2026
d88162c
fix: correctly support html attr interactions
sampullman May 18, 2026
e0412fb
refactor: address pr review comment
sampullman May 28, 2026
f2bee08
feat: use TemplatedString for dynamic rich text child nodes
sampullman May 18, 2026
161ebf1
fix: avoid resetting cursor when creating text blocks
sampullman May 20, 2026
06ebb92
fix: update e2e tests for new rich text behavior
sampullman May 20, 2026
4c52103
feat: implement setPageMeta copilot tool
sampullman Apr 25, 2026
b134173
refactor: minor requirement check improvement and fix
sampullman May 10, 2026
7a5e141
feat: copilot dynamic value js templated strings
sampullman May 12, 2026
f708ad1
refactor: move simplifyTemplatedString to shared util
sampullman May 20, 2026
50e97cb
refactor: address pr review comments
sampullman May 28, 2026
d6aeaa0
fix: throw on bare js identifier without accessor
sampullman May 28, 2026
012d370
fix: support dynamic changes to query params on the client
sampullman May 5, 2026
bd2853c
fix: preserve prop query values in PageParamsProvider
sampullman May 6, 2026
14725df
fix: refactor history tracker and clean up tests
sampullman May 8, 2026
48c078a
fix: prepass dispatcher returns undefined instead of throwing
sampullman May 8, 2026
f888e95
fix: revert useBrowserQueryParams merge
sampullman May 11, 2026
c5f67b5
feat: add trackQueryParams flag to PageParamsProvider
sampullman May 12, 2026
8189ad1
fix: review feedback about query in loader-react
sampullman May 28, 2026
0d4d5c6
Publish
May 29, 2026
3a29f4f
upgrade-internal
May 29, 2026
f95cba1
upgrade-internal
May 29, 2026
3e7b43f
fix: Missing headers in Insert Panel search results (#2811)
sarahsga May 30, 2026
e3a8982
[PLA-12996] Make using data tokens faster (#2823)
sarahsga May 30, 2026
0c40812
[PLA-13038] Use data query action (custom code query) does not work (…
sarahsga May 31, 2026
dc41011
fix: remap tpl tree correctly on text save (#2847)
sampullman May 31, 2026
77faa21
[PLA-13055]: Add identify tool that must be called before making any …
asimkhan73301 Jun 1, 2026
f02e59b
chore: finish loader-test migration and remove cypress references (#2…
sampullman Jun 1, 2026
0079d85
Publish
Jun 1, 2026
c6c0344
test: flattenChildren fork (#2419)
sarahsga Jun 1, 2026
0d70457
Publish
Jun 1, 2026
3fec8cd
upgrade-internal
Jun 1, 2026
d7b2b92
fix: remove server query swr cache override
sampullman May 23, 2026
eb53d3c
fix: match cache key in query preview and modal
sampullman May 23, 2026
d847090
fix: use bounded cache for studio server query execution
sampullman May 29, 2026
3a19466
refactor: move useServerQueryOp to client and clean up
sampullman May 30, 2026
53e8984
[PLA-13058]: Review data-props and style issues (#2832)
asimkhan73301 Jun 1, 2026
e15c38f
feat(copilot-tools): add extractComponent tool (#2836)
asimkhan73301 Jun 1, 2026
0ddfddc
fix(wab): sanitize user-supplied text in transactional emails [PLA-13…
jaslong Jun 1, 2026
b4daec5
[create-plasmic-app] update cpa-out/.gitignore
jaslong Jun 2, 2026
4f6da98
[cpa] re-run
jaslong Jun 2, 2026
a6e04c5
[cpa] run-cpa
jaslong Jun 3, 2026
805697b
Override nextjs globals.css in cpa (#2854)
sampullman Jun 3, 2026
f189df0
Publish
Jun 3, 2026
7e19378
feat(wab): rate-limit grant-revoke endpoint (#2851)
jaslong Jun 3, 2026
254ae9c
[wab] cap maximum password length (#2856)
jaslong Jun 3, 2026
f396e14
[wab] PLA-13074 stop writing to Amplitude (#2809)
jaslong Jun 3, 2026
d01d091
refactor MixinPopup to handle themeTag (#1977)
jaslong Jun 3, 2026
3476090
Reapply "[PLA-12977]: Animations do not work in codegen (#2719)" (#2861)
asimkhan73301 Jun 4, 2026
fb63378
Publish
Jun 4, 2026
fe4934d
upgrade-internal
Jun 4, 2026
0525995
Refactor copilot internal imports and add lint (#2853)
sampullman Jun 4, 2026
ee282bf
refactor: fix issues with copilot stubs (#2864)
sampullman Jun 4, 2026
da33595
[PLA-13104] ensure owner of workspace can delete data source (#2857)
jaslong Jun 4, 2026
0db8552
[wab] plasmic sync --force --all-files
jaslong Jun 4, 2026
2872226
[wab] remove forwardRef from HoverableIcon/HoverableText
jaslong Jun 4, 2026
3a96734
[wab] fix icon case mismatch and remove unused deps
jaslong Jun 4, 2026
123e044
[PLA-13040]: Tools to manage Animations through AI (#2758)
asimkhan73301 Jun 4, 2026
79fc2a9
Database CI instability in studio-tests-root (#2860)
sampullman Jun 5, 2026
6323c0d
[wab] Improve HostConfig (#2286)
jaslong Jun 5, 2026
786ce32
[PLA-13093]: Allow usage of Imported project components in Plasmic AI…
asimkhan73301 Jun 5, 2026
1581910
[PLA-13047]: Update Component variantGroup variants (#2819)
asimkhan73301 Jun 6, 2026
e530e8e
[wab] centralize LocalStorageKey (#2874)
jaslong Jun 7, 2026
074d9bb
Deduplicate copilot test bundle and fix import (#2873)
sampullman Jun 8, 2026
da8fb53
Implement prop delete for server query params (#2869)
sampullman Jun 8, 2026
a86e514
fix: disable link external for query params (#2870)
sampullman Jun 8, 2026
587d858
fix: hide nextjs debug icon in plasmic-host iframe (#2868)
sampullman Jun 8, 2026
f7156cb
Publish
Jun 8, 2026
6edb7c1
upgrade-internal
Jun 8, 2026
2bbf5b6
[PLA-13108]: Animations do not work in Live Preview (#2872)
asimkhan73301 Jun 9, 2026
fa327df
[PLA-12674] Reorganize insert menu for hostless functions (#2738)
sarahsga Jun 9, 2026
861a0b4
chore(dev): Change codegen url to call from sanboxed loader (#2859)
daniel-schub Jun 9, 2026
3b42197
[wab] fix data picker not opening when settings tab not open
jaslong Jun 6, 2026
2272ca2
[wab] sync DataBinding
jaslong Jun 4, 2026
088532d
[wab] add generic UiActionBus
jaslong Jun 8, 2026
1538e63
[wab] PLA-13069 link dynamic value picker rows to their source
jaslong Jun 8, 2026
5edbce0
Refresh all queries using a custom function (#2855)
sampullman Jun 12, 2026
4feb5ba
Publish
Jun 12, 2026
2bda529
upgrade-internal
Jun 12, 2026
9ae8d15
Get e2e tests running correctly on Mac (#2897)
sampullman Jun 12, 2026
7f182ca
upgrade-internal
Jun 12, 2026
862d804
[PLA-13096]: Expose Copilot Tools meta information at runtime for MCP…
asimkhan73301 Jun 13, 2026
c0d8939
fix: validate and quote postgres sort.field to avoid injection (#2901)
sampullman Jun 13, 2026
b38c80b
[PLA-13095]: Support OverridableToken in Plasmic AI Tools (#2879)
asimkhan73301 Jun 15, 2026
3c42924
[cpa] run-cpa: project-level CSS as non-module (.module.css -> .css) …
jaslong Jun 15, 2026
6b04bf3
Publish
Jun 15, 2026
015d1f6
refactor(wab): remove legacy postgres credentials.connectionString pa…
jaslong Jun 16, 2026
bfbff88
export isPlasmicUndefinedDataErrorPromise from data-sources (#2915)
sampullman Jun 16, 2026
54f331e
Publish
Jun 16, 2026
d9a7938
upgrade-internal
Jun 16, 2026
b14f580
[host][wab] add required field to params in function registration (#2…
jaslong Jun 16, 2026
e754fa3
Publish
Jun 16, 2026
05462bc
upgrade-internal
Jun 16, 2026
dbeec5d
[PLA-13094]: Allow updating props/variants on Component Instance (#2896)
asimkhan73301 Jun 17, 2026
03246c0
[copilot-tools]: add deleteComponent tool (#2905)
asimkhan73301 Jun 17, 2026
bc3ea88
Export _safeExecResult from data-sources (#2918)
sampullman Jun 18, 2026
34c1be5
Publish
Jun 18, 2026
779e70b
upgrade-internal
Jun 18, 2026
cc4d75f
upgrade-internal
Jun 18, 2026
4483fa8
fix: image-slots.spec.ts test causes CI failure (#2932)
sarahsga Jun 22, 2026
453bf1e
[PLA-13142] Misplaced Hide Component Templates crashes studio (#2927)
sarahsga Jun 22, 2026
d50938b
fix: Can't scroll content in Popover Frame (#2929)
sarahsga Jun 22, 2026
86a3181
Avoid referencing generateOnMutateForSpec in query execution (#2917)
sampullman Jun 22, 2026
8c8d91d
[wab] hide linked advanced props
jaslong Jun 22, 2026
213a6fc
[wab] blink advanced props only when revealed via Show more
jaslong Jun 22, 2026
43b7f4e
Pin wab Node base image to 24.16.0-alpine to avoid 24.17.0 keep-alive…
jaslong Jun 23, 2026
44a1c49
fix: guard ViewCtx.renderState against post-dispose reads (#2935)
sampullman Jun 23, 2026
c38a491
fix: reenable skipped playwright tests (#2903)
sampullman Jun 23, 2026
7f44b67
fix: enterprise copybara copilot stub (#2926)
sampullman Jun 23, 2026
2a78f5b
MCP wait helper (#2922)
sampullman Jun 23, 2026
772dbcc
Re-enable plasmic-website test and delete old auth test (#2904)
sampullman Jun 24, 2026
ca4e963
Include functions in delete project warning (#2890)
sampullman Jun 24, 2026
b3e61ea
[DEVOP-495]: Codegen distributed tracing (#2928)
daniel-schub Jun 26, 2026
38a770c
[wab] rename deprecated data queries label to "legacy" (#2938)
jaslong Jun 26, 2026
ee88dcf
Migrate packages and plasmicpkgs to pnpm (#2939)
sampullman Jun 26, 2026
614b9e3
Publish
Jun 26, 2026
69f6dc5
fix: CMS color field hides hex input in entry editor (#2953)
sarahsga Jun 26, 2026
f457a14
fix: remove unused prepare step (#2955)
sampullman Jun 26, 2026
950a56a
Publish
Jun 26, 2026
e1fdbf4
upgrade-internal
Jun 26, 2026
be77c07
fix: bump package version to test deploy (#2956)
sampullman Jun 26, 2026
a4846d6
Publish
Jun 26, 2026
40748fd
upgrade-internal
Jun 26, 2026
95f70b3
[wab] improve logging in prefillCloudfront (#2729)
jaslong Jun 26, 2026
58b74a2
[wab] ensure repeated element/index var names are unique (#2949)
jaslong Jun 26, 2026
8e3b336
[wab] add fetchUntrusted powered by request-filtering-agent (#2950)
jaslong Jun 29, 2026
cacd26b
chore: bump deps and consolidate node types (#2958)
sampullman Jun 29, 2026
eb86dad
Publish
Jun 29, 2026
84feb02
[wab] remove dead Supabase database fetcher code (#2951)
jaslong Jun 29, 2026
8a424f3
upgrade-internal
Jun 29, 2026
6934723
[root] Use default minimumReleaseAge (#2972)
jaslong Jun 29, 2026
c567886
[PLA-13057]: Add JSON support in Copilot Tools (#2921)
asimkhan73301 Jun 29, 2026
c3bf6c2
fix(wab): Preview swatch in Color Picker shows incorrect color (#2954)
sarahsga Jun 30, 2026
e7d2421
fix(wab): externalize CSS url() in codegen esbuild bundling (#2959)
jaslong Jun 30, 2026
1154e23
[loader-*] remove node-fetch, use native fetch (#2842)
jaslong Jun 30, 2026
9988136
[data-sources] group $ctx/$props/$state into env object for unstable_…
jaslong May 20, 2026
31ea12b
[data-sources] extract named env types and rename executePlasmicQueri…
jaslong May 20, 2026
f582c21
[data-sources] rename server-local QueryExecutionContext to ServerQue…
jaslong May 20, 2026
bca2242
[data-sources] rename QueryExecutionInitialContext to InitialQueryExe…
jaslong May 20, 2026
d6cd333
rename queries API symbols (#2784)
jaslong Jun 30, 2026
256724f
Publish
Jun 30, 2026
7d09442
manually upgrade-internal
jaslong Jun 30, 2026
59344f3
docs: fix stale dependency audit command (#2969)
charliecreates[bot] Jul 1, 2026
69b0116
Avoid pkg version undefined when getting branch (#2834)
sampullman Jul 1, 2026
338e6b1
docs: clarify loader-tests local publish step (#2968)
charliecreates[bot] Jul 1, 2026
be27869
upgrade-internal
Jul 1, 2026
689ebfb
fix: various typos in packages and platform (#2982)
sampullman Jul 2, 2026
c257dc7
Publish
Jul 2, 2026
67dddee
upgrade-internal
Jul 2, 2026
d15ba51
[PLA-13160] Code completion z-index issue (#2957)
sarahsga Jul 2, 2026
b9c1203
Avoid hang in url.spec.ts when external service is slow (#2987)
sampullman Jul 2, 2026
51ebce1
rename PlasmicClientRootProvider to ClientPlasmicRootProvider (#2984)
jaslong Jul 2, 2026
5229d80
Publish
Jul 2, 2026
e62f336
upgrade-internal
Jul 2, 2026
c628c56
Dot menu for integrations (#2989)
sampullman Jul 3, 2026
2d5e39c
[wab] update to new data queries doc (#2993)
jaslong Jul 3, 2026
62c8c74
[PLA-13171] Function insertion UX Missing spinner (#2994)
sarahsga Jul 3, 2026
180ab13
Flatten query data in data picker (#2916)
sampullman Jul 3, 2026
c994cec
[wab] remove loader version <7 code paths (#2995)
jaslong Jul 3, 2026
0709a0b
[PLA-13157]: Copilot move element tool (#2985)
asimkhan73301 Jul 3, 2026
23f33fb
Export page prop types from react-web (#2992)
sampullman Jul 4, 2026
9834149
Publish
Jul 4, 2026
08ddeff
upgrade-internal
Jul 4, 2026
ab02cbb
[wab] Delete dead code json-fetch (#2998)
jaslong Jul 5, 2026
4dd5a18
serverRendering code component config test (#2898)
sampullman Jul 6, 2026
d41d366
Publish
Jul 6, 2026
278362f
Pass searchParams to queries without breaking SSG (#2990)
sampullman Jul 6, 2026
a5d5caf
upgrade-internal
Jul 6, 2026
4344de2
docs: fix create-plasmic-app starter summary (#3004)
charliecreates[bot] Jul 6, 2026
d35b6fd
Publish
Jul 6, 2026
deaa638
[wab] fix multiplayer leaks, improve code (#3002)
jaslong Jul 6, 2026
dd32d85
[wab] add icons for data picker items (#2999)
jaslong Jul 6, 2026
fbfda74
[wab] disable http-server caching in dev host-server (#3000)
jaslong Jul 6, 2026
6c62d5e
merge plasmic_kit_design_system_deprecated into plasmic_kit_design_sy…
jaslong Jul 7, 2026
45adc51
[PLA-12992] Support multi select choice prop (#2947)
sarahsga Jul 7, 2026
589527a
[PLA-12992] UI for multi-choice prop (#2974)
sarahsga Jul 7, 2026
607bd69
chore: remove plasmicapp/nextjs-app-router from examples (#3006)
sampullman Jul 7, 2026
c23caa6
Publish
Jul 7, 2026
38eb073
upgrade-internal
Jul 7, 2026
1980363
chore(cpa): show app dir question (#3008)
sarahsga Jul 7, 2026
156c115
Publish
Jul 7, 2026
ae5ca82
[wab] fix plasmic paths (#3011)
jaslong Jul 7, 2026
00b975c
fix: better codegen app router ssg query support (#3014)
sampullman Jul 8, 2026
4b16028
docs: clarify nextjs app router direct install (#3012)
charliecreates[bot] Jul 8, 2026
7263cca
Publish
Jul 8, 2026
74dbf5b
[PLA-11939] RSC example (#2256)
sampullman Jul 8, 2026
9dc27e1
[wab] design system clean up and refactor color tokens (#3010)
jaslong Jul 8, 2026
02a07f3
Publish
Jul 8, 2026
792eb26
[DEVOP-518]: Add Gemini Enterprise models (#2986)
daniel-schub Jul 8, 2026
145f5b3
Dev mode blank artboards in next16 loader (#3013)
sampullman Jul 10, 2026
19d9fc6
Publish
Jul 10, 2026
39e8473
upgrade-internal
Jul 10, 2026
6bdf213
[PLA-13139]: Improve GlobalContext fallback rendering in Loader mode …
asimkhan73301 Jul 13, 2026
2044249
[html-tpl-styles-validation]: ensure styles for a tpl are validated d…
asimkhan73301 Jul 13, 2026
09418e2
Document worktree hook setup; ignore node_modules symlinks (#3035)
jaslong Jul 13, 2026
571eaf7
[wab] remove unused LeftPagesPanel component (#3032)
jaslong Jul 13, 2026
3076b40
[wab] standardize dialog, update comments and copilot chat (#3018)
jaslong Jul 13, 2026
fd20819
docs: document Git hooks in fresh worktrees (#3036)
charliecreates[bot] Jul 13, 2026
b4ecb44
[PLA-13155]: Copilot state variable support (#3015)
asimkhan73301 Jul 13, 2026
d5bc473
[PLA-13030]: Consolidate OmnibarAddItem and AddDrawerItem (#3029)
jaslong Jul 13, 2026
2068f92
Copilot read data context (#2849)
sampullman Jul 14, 2026
032408b
[PLA-13172] Misplaced Allowed Values control in Choice prop (#2996)
sarahsga Jul 14, 2026
5b5da18
Create data query copilot tool (#2936)
sampullman Jul 14, 2026
a87a876
Generalize prop link drift warnings (#3031)
sarahsga Jul 14, 2026
71eb031
[PLA-12986] Expose variants of inner components (#2700)
sarahsga Jul 15, 2026
7056e1b
Fix silent failure when changing variant group multi -> single with d…
charliecreates[bot] Jul 16, 2026
ac40e57
[copilot-devflags]: remove default temperature value (#3047)
asimkhan73301 Jul 16, 2026
dbb932b
fix: avoid redundant getMigratedBundle in getProjectRev (#3039)
sampullman Jul 16, 2026
79d112b
feat: worker pool stat guages (#3046)
sampullman Jul 17, 2026
fc09b01
Avoid overwriting code component defaultStyles (#3051)
sampullman Jul 20, 2026
f754e83
[wab] migrate ts-failable to neverthrow (#3040)
jaslong Jul 20, 2026
47e2d35
[wab] add FloatingWindow for comments, copilot chat (#3025)
jaslong Jul 20, 2026
eeb70a5
[wab] Remove unused Copilot chat/tab shortcuts and copilotTab devflag…
jaslong Jul 20, 2026
72c570d
[fix-json]: Consider jsonrepair for invalid JSON only (#3063)
asimkhan73301 Jul 22, 2026
fe6f861
Delete platform/wab/tools/validate-neverthrow-migration.js (#3068)
jaslong Jul 22, 2026
5682f72
Support dynamic values in content/props (#2937)
sampullman Jul 23, 2026
96ff78c
Support repeated element and visibility in copilot (#2945)
sampullman Jul 23, 2026
f0024b3
hosting: migrate LLM domain check to ai-sdk, default to Vertex Gemini…
jaslong Jul 24, 2026
75dd961
deps: refresh create-plasmic-app runtime ranges (#2930)
charliecreates[bot] Jul 24, 2026
2e07167
Publish
Jul 24, 2026
ba3861a
Dedupe some packages and upgrade esbuild (#3074)
sampullman Jul 25, 2026
2968bfd
Publish
Jul 25, 2026
610ad94
upgrade-internal
Jul 25, 2026
6c080f5
[PLA-13180]: Manage Slot Targets in HTML Import and Copilot Tools (#3…
asimkhan73301 Jul 27, 2026
4275c83
[PLA-13163]: HTML parser write unvalidated CSS values into RuleSet (U…
asimkhan73301 Jul 27, 2026
97d0ed2
[FIX]: Validate style props for effective styles instead of target va…
asimkhan73301 Jul 27, 2026
905552e
cli: omit default tokens config and guard Theo generation (PLA-10737)…
charliecreates[bot] Jul 28, 2026
4a72fce
Publish
Jul 28, 2026
2f5a32c
upgrade-internal
Jul 28, 2026
a2295ee
[wab] allow copy on top frame (#3083)
jaslong Jul 29, 2026
db09aea
[wab] allow URI and number globals in dynamic value expressions (#3089)
jaslong Jul 30, 2026
27759d8
[wab] floating window fixes (#3084)
jaslong Jul 30, 2026
302be45
chore: clean up readme and contributing docs (#3094)
sampullman Jul 30, 2026
f4a76be
Update packages and plasmicpkgs metadata (#3088)
sampullman Jul 30, 2026
3f59f20
Publish
Jul 30, 2026
f9cc21e
upgrade-internal
Jul 30, 2026
6adf732
[DEVOP-445]: Change static/canvas host content to specific subdomain …
daniel-schub Jul 31, 2026
9856ae6
Publish
Jul 31, 2026
4b8a4e8
upgrade-internal
Jul 31, 2026
26d4e2a
merge: upstream (conflicts to resolve)
github-actions[bot] Aug 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
135 changes: 101 additions & 34 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const TYPES = `Animation|AnimationSequence|AnyType|Arena|ArenaChild|ArenaFrame|ArenaFrameCell|ArenaFrameGrid|ArenaFrameRow|Arg|ArgType|BindingStruct|BoolType|Choice|ClassNamePropType|CodeComponentHelper|CodeComponentMeta|CodeComponentVariantMeta|CodeLibrary|CollectionExpr|ColorPropType|ColumnsConfig|ColumnsSetting|Component|ComponentArena|ComponentDataQuery|ComponentInstance|ComponentServerQuery|ComponentSwapSplitContent|ComponentTemplateInfo|ComponentVariantGroup|ComponentVariantSplitContent|CompositeExpr|CustomCode|CustomFunction|CustomFunctionExpr|DataSourceOpExpr|DataSourceTemplate|DataToken|DateRangeStrings|DateString|DefaultStylesClassNamePropType|DefaultStylesPropType|EventHandler|Expr|ExprText|FigmaComponentMapping|FunctionArg|FunctionExpr|FunctionType|GenericEventHandler|GlobalVariantGroup|GlobalVariantGroupParam|GlobalVariantSplitContent|HostLessPackageInfo|HrefType|ImageAsset|ImageAssetRef|Img|Interaction|KeyFrame|LabeledSelector|MapExpr|Marker|Mixin|NameArg|NamedState|NodeMarker|Num|ObjectPath|PageArena|PageHref|PageMeta|Param|PlumeInfo|PlumeInstance|PrimitiveType|ProjectDependency|PropParam|QueryData|QueryInvalidationExpr|QueryRef|RandomSplitSlice|RawText|RenderExpr|RenderFuncType|RenderableType|Rep|RichText|Rule|RuleSet|Scalar|SegmentSplitSlice|SelectorRuleSet|Site|SlotParam|Split|SplitContent|SplitSlice|State|StateChangeHandlerParam|StateParam|StrongFunctionArg|StyleExpr|StyleMarker|StyleNode|StylePropType|StyleScopeClassNamePropType|StyleToken|StyleTokenOverride|StyleTokenRef|TargetType|TemplatedString|Text|Theme|ThemeLayoutSettings|ThemeStyle|Token|TplComponent|TplNode|TplRef|TplSlot|TplTag|Var|VarRef|Variant|VariantGroup|VariantGroupState|VariantSetting|VariantedRuleSet|VariantedValue|VariantsRef|VirtualRenderExpr`;
const TYPES = `Animation|AnimationSequence|AnyType|Arena|ArenaChild|ArenaFrame|ArenaFrameCell|ArenaFrameGrid|ArenaFrameRow|Arg|ArgType|BindingStruct|BoolType|Choice|ClassNamePropType|CodeComponentHelper|CodeComponentMeta|CodeComponentVariantMeta|CodeLibrary|CollectionExpr|ColorPropType|ColumnsConfig|ColumnsSetting|Component|ComponentArena|ComponentDataQuery|ComponentInstance|ComponentServerQuery|ComponentSwapSplitContent|ComponentTemplateInfo|ComponentVariantGroup|ComponentVariantSplitContent|CompositeExpr|CustomCode|CustomFunction|CustomFunctionExpr|DataSourceOpExpr|DataSourceTemplate|DataToken|DateRangeStrings|DateString|DefaultStylesClassNamePropType|DefaultStylesPropType|EventHandler|Expr|ExprText|FigmaComponentMapping|FunctionArg|FunctionExpr|FunctionType|GenericEventHandler|GlobalVariantGroup|GlobalVariantGroupParam|GlobalVariantSplitContent|HostLessPackageInfo|HrefType|ImageAsset|ImageAssetRef|Img|Interaction|KeyFrame|LabeledSelector|MapExpr|Marker|Mixin|MultiChoice|NameArg|NamedState|NodeMarker|Num|ObjectPath|PageArena|PageHref|PageMeta|Param|PlumeInfo|PlumeInstance|PrimitiveType|ProjectDependency|PropParam|QueryData|QueryInvalidationExpr|QueryRef|RandomSplitSlice|RawText|RenderExpr|RenderFuncType|RenderableType|Rep|RichText|Rule|RuleSet|Scalar|SegmentSplitSlice|SelectorRuleSet|Site|SlotParam|Split|SplitContent|SplitSlice|State|StateChangeHandlerParam|StateParam|StrongFunctionArg|StyleExpr|StyleMarker|StyleNode|StylePropType|StyleScopeClassNamePropType|StyleToken|StyleTokenOverride|StyleTokenRef|TargetType|TemplatedString|Text|Theme|ThemeLayoutSettings|ThemeStyle|Token|TplComponent|TplNode|TplRef|TplSlot|TplTag|Var|VarRef|Variant|VariantGroup|VariantGroupState|VariantSetting|VariantedRuleSet|VariantedValue|VariantsRef|VirtualRenderExpr`;

const clientFiles = [
"platform/wab/src/wab/main.tsx",
Expand All @@ -21,6 +21,88 @@ const testFiles = [
"**/__mocks__/**/*",
];

const fs = require("fs");
const path = require("path");

// Find all files in the repo with overlay, e.g. `foo.external.ts` -> `foo.ts`.
// There are two stub types (see copy.bara.sky):
// - `.external.` : replaces files in both public and enterprise sync
// - `.public.` : replaces files only in public sync
function findOverlayTargets(root) {
const targets = [];
const walk = (dir) => {
let entries;
try {
entries = fs.readdirSync(dir, { withFileTypes: true });
} catch {
return;
}
for (const entry of entries) {
const full = path.join(dir, entry.name);
if (entry.isDirectory()) {
walk(full);
} else if (
entry.name.includes(".external.") ||
entry.name.includes(".public.")
) {
targets.push(
path
.relative(__dirname, full)
.replace(".external", "")
.replace(".public", "")
);
}
}
};
walk(root);
return targets;
}

const internalFiles = ["**/enterprise/**", "**/internal/**", "**/*.internal*"];
const overlayTargets = findOverlayTargets(
path.join(__dirname, "platform/wab/src")
);

// Public synced files can't import enterprise/internal code.
const noEnterpriseImportPattern = {
group: internalFiles,
message:
"Either move this file under `enterprise/`/`internal/`, or add an `.external`/`.public`" +
"stub sibling to override it (see copy.bara.sky).",
};

// Shared by the top-level rule and the public-import guard override (which replaces it per-file).
const restrictedImportPaths = [
{
name: "@plasmicapp/host",
importNames: ["registerComponent", "CodeComponentMeta"],
message: "Please import from @plasmicapp/host/registerComponent instead",
},
{
name: "antd",
importNames: ["Modal"],
message:
"Please use drop-in replacement src/wab/client/components/widgets/Modal.tsx instead",
},
{
name: "react-use",
importNames: ["useAsync", "useAsyncRetry", "useAsyncFn"],
message: "Please use useAsyncStrict()/useAsyncFnStrict() instead",
},
{
name: "react-use/lib/useAsync",
message: "Please use useAsyncStrict() instead",
},
{
name: "react-use/lib/useAsyncRetry",
message: "Please use useAsyncStrict() instead",
},
{
name: "react-use/lib/useAsyncFn",
message: "Please use useAsyncFnStrict() instead",
},
];

module.exports = {
root: true,
ignorePatterns: [
Expand All @@ -29,6 +111,8 @@ module.exports = {
"node_modules",
"storybook-static",

// Examples lint themselves via their own `next lint`; also skipped in
// .lintstagedrc.js since eslint resolves `extends` before ignores.
"examples/",
"internal/",
"packages/host/src/type-utils.ts",
Expand Down Expand Up @@ -96,38 +180,7 @@ module.exports = {
"Please use reactPrompt() instead; window.prompt() does not work well with app hosting",
},
],
"no-restricted-imports": [
"error",
{
name: "@plasmicapp/host",
importNames: ["registerComponent", "CodeComponentMeta"],
message:
"Please import from @plasmicapp/host/registerComponent instead",
},
{
name: "antd",
importNames: ["Modal"],
message:
"Please use drop-in replacement src/wab/client/components/widgets/Modal.tsx instead",
},
{
name: "react-use",
importNames: ["useAsync", "useAsyncRetry", "useAsyncFn"],
message: "Please use useAsyncStrict()/useAsyncFnStrict() instead",
},
{
name: "react-use/lib/useAsync",
message: "Please use useAsyncStrict() instead",
},
{
name: "react-use/lib/useAsyncRetry",
message: "Please use useAsyncStrict() instead",
},
{
name: "react-use/lib/useAsyncFn",
message: "Please use useAsyncFnStrict() instead",
},
],
"no-restricted-imports": ["error", { paths: restrictedImportPaths }],
"no-restricted-syntax": [
"warn",
{
Expand Down Expand Up @@ -356,6 +409,21 @@ module.exports = {
],
},
},
{
files: ["platform/wab/src/**/*.ts", "platform/wab/src/**/*.tsx"],
// Files allowed to import from internalFiles. Includes files which are overlay targets,
// since they are replaced in the public sync.
excludedFiles: [...testFiles, ...internalFiles, ...overlayTargets],
rules: {
"no-restricted-imports": [
"error",
{
paths: restrictedImportPaths,
patterns: [noEnterpriseImportPattern],
},
],
},
},
],

parserOptions: {
Expand Down Expand Up @@ -422,7 +490,6 @@ module.exports = {
SocketIOClient: false,
JSX: false,
JQuery: false,
Cypress: false,
cy: false,
},
};
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,10 @@
/platform/sub/typedoc.json.gz
/platform/sub/typedoc/
bower_components/
node_modules/
# No trailing slash so node_modules symlinks are ignored too, not just directories
node_modules
.pnpm-store/
lerna-debug.log
storybook-static/
.nx/
# ignore decrypted yaml files by sops
Expand Down
15 changes: 12 additions & 3 deletions .lintstagedrc.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,21 @@
module.exports = {
"*.{js,jsx,ts,tsx,cjs,mjs,cts,mts}": ["eslint --fix", "prettier --write"],
"*.{js,jsx,ts,tsx,cjs,mjs,cts,mts}": (files) => {
// Examples lint themselves via `next lint`; the monorepo eslint can't
// load their eslint-config-next (`extends` resolves before ignores).
const eslintable = files.filter((f) => !/(^|\/)examples\//.test(f));
const cmds = [];
if (eslintable.length) {
cmds.push(`eslint --fix ${eslintable.map((f) => `"${f}"`).join(" ")}`);
}
cmds.push(`prettier --write ${files.map((f) => `"${f}"`).join(" ")}`);
return cmds;
},
"*.{json,css,less,scss,md,toml,xml,yml,yaml}": ["prettier --write"],
"Dockerfile*": ["hadolint --failure-threshold=error"],

// Format HCL/Terragrunt files, but never touch generated *.lock.hcl (excluded via extglob)
"!(*lock).hcl": (files) => {
// Prefer terragrunt's formatter for *.hcl; fall back to terraform fmt if needed
return files.map((f) => `terragrunt hclfmt --file "${f}"`);
return files.map((f) => `terragrunt hcl format --file "${f}"`);
},

// Terraform files (format on commit)
Expand Down
1 change: 1 addition & 0 deletions .tool-versions
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
nodejs 24.4.0
python 3.10.13
terragrunt 1.0.4
4 changes: 2 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ Plasmic is an open-source visual web builder. This monorepo contains:
- Infra: Docker, k8s, Terraform
- Package Managers: asdf, npm, yarn, pnpm
- Languages: Node.js, TypeScript
- Libraries: React, MobX, TypeORM, Jest, Playwright, Cypress (deprecating) Storybook
- Libraries: React, MobX, TypeORM, Jest, Playwright, Storybook

## Instructions for AI assistant

- Do not worry about styling/formatting. All files will be formatted to the same style in git hooks.
- Do not worry about styling/formatting. All files will be formatted to the same style in git hooks, which husky manages via the generated, gitignored `.husky/_` directory. In a fresh worktree that directory doesn't exist and git silently skips all hooks, so run `pnpm install` at the worktree root before your first commit.
- When searching files, you should almost never look through node_modules/ files and other gitignored files unless you have a explicit reason to.
39 changes: 11 additions & 28 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ This repo contains:

For hacking on code components or `plasmicpkgs`, see specific additional instructions further down.

We use `lerna` to help us manage dependencies among all the packages.
`packages/` and `plasmicpkgs/` are a `pnpm` workspace (see `pnpm-workspace.yaml`), `lerna` is used for versioning and publishing.

In general, we follow the "fork-and-pull" Git workflow.

Expand Down Expand Up @@ -111,7 +111,7 @@ cd packages/cli/

# Step 1. (One-time)
# Ensure dependencies are built.
npx nx build @plasmicapp/cli
pnpm --filter "@plasmicapp/cli..." run build

# Step 2. (Repeat)
# Hackety hack, then you can directly run the source with esbuild-register.
Expand All @@ -130,12 +130,12 @@ If you need the package installed in another npm project to test it, like say a
# This unpublishes YOURPKG and its dependencies from your verdaccio, re-builds them, and publishes them to your local
# verdaccio.
# Note that this does not bump versions!
# We are using nx under the hood, so if your dependencies haven't changed, this should be fast.
# pnpm builds the dependency graph, so if your dependencies haven't changed, this should be fast.
# In this example, even though we edited @plasmicapp/host, we can just think about publishing the "root" package(s) we're ultimately installing into the test app, in this case @plasmicapp/loader-nextjs.
yarn local-publish @plasmicapp/loader-nextjs &&
pnpm local-publish @plasmicapp/loader-nextjs &&

# Or publish all packages to verdaccio. This will take longer.
# yarn local-publish
# pnpm local-publish

# Step 3.
# Go to the package you're testing, e.g. test-host-app.
Expand Down Expand Up @@ -168,32 +168,19 @@ Check that the versions in your package.json are also not holding back any plasm
In general, you probably want all @plasmicapp/@plasmicpkgs packages to be installed from your local verdaccio, rather than having some installed from npmjs.org and others installed from local,
since you want to prevent mismatched and duplicate package versions.

### Odds and ends

For a few packages like react-ssr-prepass, these are not currently integrated into the NX workspace system.
This is because Lerna doesn't work with git submodules.
You can publish these as individual packages with, for instance:

```
cd plasmicpkgs/SOMETHING
yarn install # Not included in the workspace install
yarn publish --registry=http://localhost:4873
# Or with more options: yarn publish --canary --yes --include-merged-tags --no-git-tag-version --no-push --registry=http://localhost:4873 --force-publish
```

## Contributing code components (`plasmicpkgs`)

The above general contribution instructions also apply to plasmicpkgs, so read that if you haven't done so.

Before starting, we recommend reading our docs for Code Components:

- [Docs on code components][https://docs.plasmic.app/learn/code-components/]
- [Docs on code components](https://docs.plasmic.app/learn/code-components/)

### Creating a new package

Ignore this if you are just updating an existing package.

To create a new plasmicpkg, the easiest approach is to clone one of the existing packages (like react-slick) and fix up the names in package.json and README. Then author your registration code in src. Please use `yarn` for package management.
To create a new plasmicpkg, the easiest approach is to clone one of the existing packages (like `plasmicpkgs/fetch`, which has an up-to-date build setup, see [plasmicpkgs/README.md](plasmicpkgs/README.md)), then fix names in package.json and README. Then author your registration code in src. Use `pnpm` for package management.

The directory name should be the same name as the main package you'll be using to import the React components. Your package must be named `@plasmicpkgs/{package-name}` and start with version 1.0.0.

Expand All @@ -211,17 +198,13 @@ So a typical `package.json` might look like this:
```json
{
"devDependencies": {
"@plasmicapp/data-sources": "0.1.53",
"@plasmicapp/host": "1.0.119",
"@size-limit/preset-small-lib": "^4.11.0",
"@types/node": "^14.0.26",
"size-limit": "^4.11.0",
"tsdx": "^0.14.1",
"@plasmicapp/data-sources": "1.0.21",
"@plasmicapp/host": "2.0.12",
"tslib": "^2.2.0",
"typescript": "^3.9.7"
"typescript": "^5.7.3"
},
"peerDependencies": {
"@plasmicapp/data-sources": ">=0.1.52",
"@plasmicapp/data-sources": ">=1.0.0",
"@plasmicapp/host": ">=1.0.0",
"react": ">=16.8.0",
"react-dom": ">=16.8.0"
Expand Down
4 changes: 1 addition & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,6 @@

- Interview with Lee Robinson, Plasmic as a visual CMS: https://www.youtube.com/watch?v=pcVzNR6FBAQ

- Emails with React.Email: coming soon

## What is Plasmic?

Plasmic is a visual builder for the web.
Expand Down Expand Up @@ -210,7 +208,7 @@ Read [the full technical overview](https://docs.plasmic.app/learn/technical-over
### Bring your own React components

You can register your own arbitrary custom React components for use as building blocks within Plasmic Studio.
[Learn more about code components](https://code-components.plasmic.site).
[Learn more about code components](https://docs.plasmic.app/learn/code-components/).

### Codegen

Expand Down
Loading