@agent-native/core 0.165.4 → 0.167.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/templates/analytics/.agents/skills/secrets/SKILL.md +5 -1
  3. package/corpus/templates/analytics/.agents/skills/workspace-conventions/SKILL.md +4 -1
  4. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +93 -56
  5. package/corpus/templates/analytics/app/i18n-data.ts +23 -20
  6. package/corpus/templates/analytics/app/pages/Settings.tsx +0 -1
  7. package/corpus/templates/analytics/app/pages/adhoc/explorer/index.tsx +0 -1
  8. package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +1 -1
  9. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +2 -1
  10. package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +0 -1
  11. package/corpus/templates/analytics/server/lib/first-party-analytics-backend.ts +0 -32
  12. package/corpus/templates/analytics/server/lib/session-replay.ts +1 -5
  13. package/corpus/templates/assets/.agents/skills/secrets/SKILL.md +5 -1
  14. package/corpus/templates/assets/.agents/skills/workspace-conventions/SKILL.md +4 -1
  15. package/corpus/templates/assets/actions/navigate.ts +2 -2
  16. package/corpus/templates/assets/actions/save-generated-image.ts +0 -5
  17. package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +2 -262
  18. package/corpus/templates/assets/app/routes/library.tsx +1 -1
  19. package/corpus/templates/assets/app/routes/settings.tsx +0 -3
  20. package/corpus/templates/brain/.agents/skills/secrets/SKILL.md +5 -1
  21. package/corpus/templates/brain/.agents/skills/workspace-conventions/SKILL.md +4 -1
  22. package/corpus/templates/brain/actions/ask-brain.ts +0 -1
  23. package/corpus/templates/brain/actions/navigate.ts +2 -2
  24. package/corpus/templates/brain/app/routes/sources.tsx +0 -4
  25. package/corpus/templates/brain/server/lib/capture-sanitization.ts +0 -11
  26. package/corpus/templates/calendar/.agents/skills/secrets/SKILL.md +5 -1
  27. package/corpus/templates/calendar/.agents/skills/workspace-conventions/SKILL.md +4 -1
  28. package/corpus/templates/calendar/app/components/calendar/EventDetailPopover.tsx +0 -20
  29. package/corpus/templates/calendar/app/pages/CalendarView.tsx +0 -1
  30. package/corpus/templates/chat/.agents/skills/secrets/SKILL.md +5 -1
  31. package/corpus/templates/chat/.agents/skills/workspace-conventions/SKILL.md +4 -1
  32. package/corpus/templates/chat/actions/navigate.ts +2 -2
  33. package/corpus/templates/clips/.agents/skills/secrets/SKILL.md +5 -1
  34. package/corpus/templates/clips/.agents/skills/workspace-conventions/SKILL.md +4 -1
  35. package/corpus/templates/clips/CHANGELOG.md +1 -0
  36. package/corpus/templates/clips/actions/import-loom-recording.ts +16 -4
  37. package/corpus/templates/clips/actions/navigate.ts +2 -2
  38. package/corpus/templates/clips/app/components/editor/stitch-manager.tsx +0 -1
  39. package/corpus/templates/clips/app/components/library/space-dialogs.tsx +0 -1
  40. package/corpus/templates/clips/app/components/meetings/share-meeting-dialog.tsx +0 -1
  41. package/corpus/templates/clips/app/components/player/clips-share-trigger.tsx +17 -0
  42. package/corpus/templates/clips/app/components/player/delete-recording-menu.tsx +3 -3
  43. package/corpus/templates/clips/app/components/player/video-player.tsx +2 -2
  44. package/corpus/templates/clips/app/components/recorder/recorder-engine.ts +0 -1
  45. package/corpus/templates/clips/app/components/settings/ai-setup-section.tsx +0 -1
  46. package/corpus/templates/clips/app/global.css +31 -0
  47. package/corpus/templates/clips/app/hooks/use-playback-position.ts +0 -2
  48. package/corpus/templates/clips/app/lib/download-release-channel.ts +10 -0
  49. package/corpus/templates/clips/app/routes/_app.meetings.$meetingId.tsx +1 -3
  50. package/corpus/templates/clips/app/routes/download.tsx +67 -44
  51. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +7 -12
  52. package/corpus/templates/clips/app/routes/record.tsx +6 -6
  53. package/corpus/templates/clips/app/routes/share.$shareId.tsx +26 -29
  54. package/corpus/templates/clips/changelog/2026-08-20-clip-viewer-share-actions.md +6 -0
  55. package/corpus/templates/clips/changelog/2026-08-20-preparing-recording-countdown-overlay.md +1 -0
  56. package/corpus/templates/clips/chrome-extension/src/background.ts +0 -13
  57. package/corpus/templates/clips/chrome-extension/src/overlay.ts +0 -1
  58. package/corpus/templates/clips/chrome-extension/src/popup.ts +0 -20
  59. package/corpus/templates/clips/desktop/src/app.tsx +6 -18
  60. package/corpus/templates/clips/desktop/src/hooks/useMediaDevices.ts +0 -1
  61. package/corpus/templates/clips/desktop/src/lib/recorder.ts +0 -8
  62. package/corpus/templates/content/.agents/skills/secrets/SKILL.md +5 -1
  63. package/corpus/templates/content/.agents/skills/workspace-conventions/SKILL.md +4 -1
  64. package/corpus/templates/content/actions/_database-source-utils.ts +0 -3
  65. package/corpus/templates/content/actions/attach-content-database-source.ts +1 -4
  66. package/corpus/templates/content/actions/navigate.ts +2 -2
  67. package/corpus/templates/content/actions/prepare-builder-source-execution.ts +1 -1
  68. package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +0 -6
  69. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +0 -580
  70. package/corpus/templates/content/app/components/editor/database/FormView.tsx +2 -2
  71. package/corpus/templates/content/app/components/editor/database/filter-sort.ts +1 -1
  72. package/corpus/templates/content/app/components/editor/database/settings.tsx +0 -23
  73. package/corpus/templates/content/app/components/editor/database/sidebar.tsx +0 -1
  74. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +8 -304
  75. package/corpus/templates/content/app/hooks/use-documents.ts +0 -1
  76. package/corpus/templates/content/shared/api.ts +0 -1
  77. package/corpus/templates/content/shared/builder-mdx.ts +0 -1
  78. package/corpus/templates/content/shared/nfm.ts +1 -7
  79. package/corpus/templates/crm/.agents/skills/secrets/SKILL.md +5 -1
  80. package/corpus/templates/crm/.agents/skills/workspace-conventions/SKILL.md +4 -1
  81. package/corpus/templates/crm/actions/merge-crm-records.ts +0 -4
  82. package/corpus/templates/crm/app/components/crm/record/RecordLists.tsx +0 -1
  83. package/corpus/templates/crm/server/crm/hubspot-adapter.ts +0 -1
  84. package/corpus/templates/crm/server/crm/salesforce-adapter.ts +0 -1
  85. package/corpus/templates/crm/server/db/crm-store.ts +1 -1
  86. package/corpus/templates/design/.agents/skills/secrets/SKILL.md +5 -1
  87. package/corpus/templates/design/.agents/skills/workspace-conventions/SKILL.md +4 -1
  88. package/corpus/templates/design/.generated/bridge/editor-chrome.generated.ts +1 -14
  89. package/corpus/templates/design/AGENTS.md +2 -1
  90. package/corpus/templates/design/actions/apply-component-prop-edit.ts +1 -5
  91. package/corpus/templates/design/actions/generate-design.ts +0 -1
  92. package/corpus/templates/design/actions/generate-screens.ts +5 -2
  93. package/corpus/templates/design/actions/go-to-main-component.ts +2 -2
  94. package/corpus/templates/design/actions/list-design-systems.ts +10 -0
  95. package/corpus/templates/design/actions/navigate.ts +2 -2
  96. package/corpus/templates/design/actions/open-component-source.ts +4 -4
  97. package/corpus/templates/design/actions/present-design-variants.ts +1 -2
  98. package/corpus/templates/design/actions/run-design-audit.ts +0 -22
  99. package/corpus/templates/design/actions/show-design-questions.ts +5 -2
  100. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +19 -8
  101. package/corpus/templates/design/app/components/design/EditPanel.tsx +11 -183
  102. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +21 -4
  103. package/corpus/templates/design/app/components/design/QuestionFlow.tsx +1 -5
  104. package/corpus/templates/design/app/components/design/bridge/codegen.ts +1 -1
  105. package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +10 -19
  106. package/corpus/templates/design/app/components/design/edit-panel/appearance-properties.tsx +1 -1
  107. package/corpus/templates/design/app/components/design/edit-panel/layout-properties.tsx +13 -3
  108. package/corpus/templates/design/app/components/design/edit-panel/panel-primitives.tsx +38 -32
  109. package/corpus/templates/design/app/components/design/edit-panel/position-layout-properties.tsx +1 -4
  110. package/corpus/templates/design/app/components/design/inspector/AlignmentMatrix.tsx +0 -4
  111. package/corpus/templates/design/app/components/design/inspector/AutoLayoutMatrix.tsx +15 -6
  112. package/corpus/templates/design/app/components/design/inspector/DesignColorPicker.tsx +2 -2
  113. package/corpus/templates/design/app/components/visual-editor/NodeRewriteProposal.tsx +0 -1
  114. package/corpus/templates/design/app/components/visual-editor/ReviewCanvasPins.tsx +1 -1
  115. package/corpus/templates/design/app/i18n-data.ts +122 -0
  116. package/corpus/templates/design/app/lib/clipboard-content-lineage.ts +11 -1
  117. package/corpus/templates/design/app/pages/DesignEditor.tsx +50 -254
  118. package/corpus/templates/design/app/pages/DesignSystemSetup.tsx +163 -8
  119. package/corpus/templates/design/app/pages/Index.tsx +17 -0
  120. package/corpus/templates/design/app/pages/design-editor/canvas-primitive-insert.ts +44 -32
  121. package/corpus/templates/design/app/pages/design-editor/canvas-primitives.ts +10 -0
  122. package/corpus/templates/design/app/pages/design-editor/clone-and-pen-edit.ts +49 -3
  123. package/corpus/templates/design/app/pages/design-editor/clone-idrefs.ts +31 -0
  124. package/corpus/templates/design/app/pages/design-editor/code-layer-state.ts +28 -0
  125. package/corpus/templates/design/app/pages/design-editor/commands/add-auto-layout.ts +3 -3
  126. package/corpus/templates/design/app/pages/design-editor/commands/align-selection.ts +44 -14
  127. package/corpus/templates/design/app/pages/design-editor/commands/apply-local-content-update.ts +16 -5
  128. package/corpus/templates/design/app/pages/design-editor/commands/change-selected-z-index.ts +1 -1
  129. package/corpus/templates/design/app/pages/design-editor/commands/frame-selection.ts +1 -1
  130. package/corpus/templates/design/app/pages/design-editor/commands/group-selection.ts +1 -1
  131. package/corpus/templates/design/app/pages/design-editor/commands/nudge-selection.ts +1 -1
  132. package/corpus/templates/design/app/pages/design-editor/commands/paste-selection.ts +142 -17
  133. package/corpus/templates/design/app/pages/design-editor/commands/screen-visual-duplicate-change.ts +1 -0
  134. package/corpus/templates/design/app/pages/design-editor/commands/ungroup-selection.ts +1 -1
  135. package/corpus/templates/design/app/pages/design-editor/commands/visual-duplicate-change.ts +1 -0
  136. package/corpus/templates/design/app/pages/design-editor/cross-screen-text-color.ts +25 -9
  137. package/corpus/templates/design/app/pages/design-editor/editor-state.ts +1 -0
  138. package/corpus/templates/design/app/pages/design-editor/measure-child-rects.ts +83 -0
  139. package/corpus/templates/design/app/pages/design-editor/paste-placement.ts +66 -0
  140. package/corpus/templates/design/server/routes/[...page].get.ts +0 -1
  141. package/corpus/templates/design/shared/code-layer.ts +120 -70
  142. package/corpus/templates/design/shared/design-surface-index.ts +0 -1
  143. package/corpus/templates/design/shared/pen-path.ts +0 -4
  144. package/corpus/templates/dispatch/.agents/skills/secrets/SKILL.md +5 -1
  145. package/corpus/templates/dispatch/.agents/skills/workspace-conventions/SKILL.md +4 -1
  146. package/corpus/templates/dispatch/app/routes/integrations.tsx +0 -109
  147. package/corpus/templates/factory/.agents/skills/secrets/SKILL.md +5 -1
  148. package/corpus/templates/factory/.agents/skills/workspace-conventions/SKILL.md +4 -1
  149. package/corpus/templates/factory/actions/navigate.ts +2 -2
  150. package/corpus/templates/factory/app/components/factory/FactoryAuditView.tsx +0 -13
  151. package/corpus/templates/factory/app/routes/factory.tsx +0 -1
  152. package/corpus/templates/factory/server/factory-graph/store.ts +0 -1
  153. package/corpus/templates/forms/.agents/skills/secrets/SKILL.md +5 -1
  154. package/corpus/templates/forms/.agents/skills/workspace-conventions/SKILL.md +4 -1
  155. package/corpus/templates/macros/.agents/skills/secrets/SKILL.md +5 -1
  156. package/corpus/templates/macros/.agents/skills/workspace-conventions/SKILL.md +4 -1
  157. package/corpus/templates/macros/app/components/layout/AppLayout.tsx +0 -1
  158. package/corpus/templates/mail/.agents/skills/secrets/SKILL.md +5 -1
  159. package/corpus/templates/mail/.agents/skills/workspace-conventions/SKILL.md +4 -1
  160. package/corpus/templates/mail/app/components/email/EmailList.tsx +0 -1
  161. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +2 -2
  162. package/corpus/templates/mail/shared/markdown.ts +3 -0
  163. package/corpus/templates/plan/.agents/skills/secrets/SKILL.md +5 -1
  164. package/corpus/templates/plan/.agents/skills/workspace-conventions/SKILL.md +4 -1
  165. package/corpus/templates/slides/.agents/skills/secrets/SKILL.md +5 -1
  166. package/corpus/templates/slides/.agents/skills/workspace-conventions/SKILL.md +4 -1
  167. package/corpus/templates/slides/actions/add-slide.ts +0 -1
  168. package/corpus/templates/slides/actions/list-decks.ts +1 -1
  169. package/corpus/templates/slides/app/components/editor/EditorSidebar.tsx +1 -4
  170. package/corpus/templates/slides/app/components/editor/SlideContextToolbar.tsx +0 -1
  171. package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +1 -1
  172. package/corpus/templates/slides/app/pages/DeckEditor.tsx +1 -6
  173. package/corpus/templates/tasks/.agents/skills/secrets/SKILL.md +5 -1
  174. package/corpus/templates/tasks/.agents/skills/workspace-conventions/SKILL.md +4 -1
  175. package/corpus/templates/tasks/app/components/layout/Layout.tsx +0 -1
  176. package/corpus/templates/tasks/app/hooks/use-visible-task-fields.ts +1 -4
  177. package/corpus/templates/tasks/server/custom-fields/store.ts +1 -6
  178. package/corpus/templates/tasks/shared/list-screen-snapshot.ts +2 -2
  179. package/dist/agent/engine/registry.js +27 -14
  180. package/dist/agent/index.d.ts +1 -1
  181. package/dist/agent/production-agent.d.ts +19 -6
  182. package/dist/agent/production-agent.js +57 -16
  183. package/dist/agent/types.d.ts +3 -0
  184. package/dist/client/EnvironmentBadge.d.ts +1 -0
  185. package/dist/client/EnvironmentBadge.js +7 -0
  186. package/dist/collab/awareness.d.ts +2 -2
  187. package/dist/collab/routes.d.ts +1 -1
  188. package/dist/config.d.ts +11 -0
  189. package/dist/config.js +248 -0
  190. package/dist/deploy/build.js +12 -1
  191. package/dist/index.d.ts +1 -1
  192. package/dist/notifications/routes.d.ts +3 -3
  193. package/dist/observability/routes.d.ts +2 -2
  194. package/dist/progress/routes.d.ts +1 -1
  195. package/dist/resources/handlers.d.ts +2 -2
  196. package/dist/server/agent-chat/plugin-options.d.ts +3 -2
  197. package/dist/server/agent-chat-plugin.js +5 -2
  198. package/dist/server/index.d.ts +1 -1
  199. package/dist/templates/chat/.agents/skills/secrets/SKILL.md +5 -1
  200. package/dist/templates/chat/.agents/skills/workspace-conventions/SKILL.md +4 -1
  201. package/dist/templates/chat/actions/navigate.ts +2 -2
  202. package/dist/templates/default/.agents/skills/secrets/SKILL.md +5 -1
  203. package/dist/templates/default/.agents/skills/workspace-conventions/SKILL.md +4 -1
  204. package/dist/templates/headless/.agents/skills/secrets/SKILL.md +5 -1
  205. package/dist/templates/workspace-core/.agents/skills/secrets/SKILL.md +5 -1
  206. package/dist/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +4 -1
  207. package/dist/vite/agent-native-config-loader.d.ts +1 -0
  208. package/dist/vite/agent-native-config-loader.js +3 -3
  209. package/dist/vite/agents-bundle-plugin.d.ts +1 -1
  210. package/dist/vite/agents-bundle-plugin.js +13 -1
  211. package/dist/vite/client.js +14 -14
  212. package/docs/content/agent-native-config.mdx +62 -11
  213. package/docs/content/agent-surfaces.mdx +6 -0
  214. package/docs/content/environment-variables.mdx +5 -2
  215. package/package.json +3 -3
  216. package/src/templates/chat/.agents/skills/secrets/SKILL.md +5 -1
  217. package/src/templates/chat/.agents/skills/workspace-conventions/SKILL.md +4 -1
  218. package/src/templates/chat/actions/navigate.ts +2 -2
  219. package/src/templates/default/.agents/skills/secrets/SKILL.md +5 -1
  220. package/src/templates/default/.agents/skills/workspace-conventions/SKILL.md +4 -1
  221. package/src/templates/headless/.agents/skills/secrets/SKILL.md +5 -1
  222. package/src/templates/workspace-core/.agents/skills/secrets/SKILL.md +5 -1
  223. package/src/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +4 -1
@@ -1,94 +1,24 @@
1
- import {
2
- useActionMutation,
3
- useActionQuery,
4
- } from "@agent-native/core/client/hooks";
5
1
  import { useT } from "@agent-native/core/client/i18n";
6
2
  import type { TweakDefinition } from "@shared/api";
7
- import {
8
- getBreakpointOverrideState,
9
- type BreakpointOverrideState,
10
- } from "@shared/breakpoint-media";
11
- import {
12
- composeTransform3D,
13
- isTransform3DActive,
14
- parseTransform3DParts,
15
- type Transform3DParts,
16
- } from "@shared/canvas-math";
17
- import {
18
- alphaToOpacity,
19
- parseCssColor,
20
- rgbaToCss,
21
- rgbaToHex,
22
- withColorOpacity,
23
- } from "@shared/color-utils";
24
- import { propNameToDataAttribute } from "@shared/component-model";
3
+ import { alphaToOpacity, parseCssColor } from "@shared/color-utils";
25
4
  import {
26
5
  listInteractionStates,
27
6
  readResolvedStateStyles,
28
7
  type InteractionState,
29
8
  } from "@shared/interaction-states";
30
9
  import {
31
- IconAlignCenter,
32
- IconAlignJustified,
33
- IconAlignLeft,
34
- IconAlignRight,
35
- IconAngle,
36
- IconArrowAutofitHeight,
37
- IconArrowAutofitWidth,
38
- IconArrowRight,
39
- IconAxisX,
40
- IconAxisY,
41
- IconBackground,
42
- IconBlur,
43
- IconBorderCorners,
44
- IconBorderRadius,
45
- IconBorderStyle,
46
- IconCheck,
47
10
  IconChevronDown,
48
11
  IconChevronRight,
49
12
  IconCode,
50
13
  IconComponents,
51
14
  IconDeviceMobile,
52
15
  IconExternalLink,
53
- IconDroplet,
54
- IconEye,
55
- IconEyeOff,
56
- IconFlipHorizontal,
57
- IconFlipVertical,
58
16
  IconFrame,
59
- IconGridDots,
60
- IconGripVertical,
61
- IconLayoutDistributeHorizontal,
62
- IconLayoutGrid,
63
- IconLoader2,
64
- IconLayoutAlignBottom,
65
- IconLayoutAlignCenter,
66
- IconLayoutAlignLeft,
67
- IconLayoutAlignMiddle,
68
- IconLayoutAlignRight,
69
- IconLayoutAlignTop,
70
- IconLetterCase,
71
- IconLetterSpacing,
72
- IconLineHeight,
73
- IconLink,
74
- IconLinkOff,
75
- IconMinus,
76
- IconPerspective,
77
17
  IconPhoto,
78
18
  IconPlus,
79
- IconRadiusBottomLeft,
80
- IconRadiusBottomRight,
81
- IconRadiusTopLeft,
82
- IconRadiusTopRight,
83
19
  IconRefresh,
84
- IconRotate3d,
85
- IconShadow,
86
- IconSquare,
87
- IconUnlink,
88
20
  IconVector,
89
- IconWaveSine,
90
21
  } from "@tabler/icons-react";
91
- import { useQueryClient } from "@tanstack/react-query";
92
22
  import {
93
23
  memo,
94
24
  useCallback,
@@ -96,20 +26,10 @@ import {
96
26
  useMemo,
97
27
  useRef,
98
28
  useState,
99
- type DragEvent,
100
29
  type ReactNode,
101
30
  } from "react";
102
- import { useParams } from "react-router";
103
- import { toast } from "sonner";
104
31
 
105
32
  import { Button } from "@/components/ui/button";
106
- import {
107
- DropdownMenu,
108
- DropdownMenuContent,
109
- DropdownMenuItem,
110
- DropdownMenuSeparator,
111
- DropdownMenuTrigger,
112
- } from "@/components/ui/dropdown-menu";
113
33
  import { Input } from "@/components/ui/input";
114
34
  import { Label } from "@/components/ui/label";
115
35
  import {
@@ -117,15 +37,6 @@ import {
117
37
  PopoverContent,
118
38
  PopoverTrigger,
119
39
  } from "@/components/ui/popover";
120
- import {
121
- Select,
122
- SelectContent,
123
- SelectItem,
124
- SelectTrigger,
125
- SelectValue,
126
- } from "@/components/ui/select";
127
- import { Slider } from "@/components/ui/slider";
128
- import { Switch } from "@/components/ui/switch";
129
40
  import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs";
130
41
  import {
131
42
  Tooltip,
@@ -135,11 +46,7 @@ import {
135
46
  } from "@/components/ui/tooltip";
136
47
  import { cn } from "@/lib/utils";
137
48
 
138
- import {
139
- AppearanceProperties,
140
- AppearanceScrubField,
141
- CornerRadiusControl,
142
- } from "./edit-panel/appearance-properties";
49
+ import { AppearanceProperties } from "./edit-panel/appearance-properties";
143
50
  import {
144
51
  alpineDataValueLiteral,
145
52
  canRebuildAlpineDataLosslessly,
@@ -163,54 +70,27 @@ import {
163
70
  } from "./edit-panel/document-colors";
164
71
  import { EffectsProperties } from "./edit-panel/effects-properties";
165
72
  import {
166
- autoLayoutAlignmentFromStyles,
167
- availableSizingForElement,
168
- commitElementMinMax,
169
- commitElementSizing,
170
- componentNameForElementInfo,
171
- cssElementSize,
172
- displayLabel,
173
73
  elementIsComponentSelection,
174
- horizontalToJustify,
175
- inferElementSizing,
176
74
  inspectorObjectTitle,
177
75
  isContainerElement,
178
- isParentFlex,
179
- isParentGrid,
180
76
  isTextElement,
181
- justifyToHorizontal,
182
- parentFlexDirection,
183
- readElementMinMax,
184
77
  TEXT_TAGS,
185
- verticalToAlign,
186
78
  } from "./edit-panel/element-classification";
187
79
  import {
188
80
  deriveLockedAspectSize,
189
81
  interactionStateSelectionKey,
190
- useAspectRatioLock,
191
82
  } from "./edit-panel/element-identity";
192
- import {
193
- commitStylePatch,
194
- DesignSpacingControl,
195
- FieldTrailer,
196
- ScrubStyleInput,
197
- } from "./edit-panel/field-primitives";
83
+ import { commitStylePatch } from "./edit-panel/field-primitives";
198
84
  import {
199
85
  averageGradientOpacity,
200
86
  buildGradientLayer,
201
87
  DEFAULT_EXPORT_SETTINGS,
202
- defaultGradientLayer,
203
88
  defaultGradientStops,
204
- clampNumber,
205
- fillLayerId,
206
- fillLayerIndex,
207
89
  type FillLayerArrays,
208
- gradientLabel,
209
90
  isLayerHiddenBySize,
210
91
  joinCssLayers,
211
92
  parseGradientLayer,
212
93
  removeFillLayerAtIndex,
213
- SOLID_FILL_ID,
214
94
  solidToGradientPatch,
215
95
  splitCssLayers,
216
96
  withLayerSizeMarker,
@@ -218,13 +98,7 @@ import {
218
98
  import { FillProperties } from "./edit-panel/fill-properties";
219
99
  import { FramePresetsPanel } from "./edit-panel/frame-presets-panel";
220
100
  import type { InspectCodeSourceLocation } from "./edit-panel/inspect-code-source";
221
- import {
222
- InspectorIconButton,
223
- InspectorSegment,
224
- RowDragHandle,
225
- SectionIconButton,
226
- useRowDragReorder,
227
- } from "./edit-panel/inspector-controls";
101
+ import { SectionIconButton } from "./edit-panel/inspector-controls";
228
102
  import {
229
103
  authoredStyleValue,
230
104
  elementWithInteractionStateStyles,
@@ -236,18 +110,13 @@ import {
236
110
  } from "./edit-panel/layout-properties";
237
111
  import {
238
112
  ColorInput,
239
- FieldLabel,
240
113
  PanelSection,
241
114
  PropInput,
242
115
  PropSelect,
243
- PropSlider,
244
116
  SubsectionLabel,
245
117
  } from "./edit-panel/panel-primitives";
246
118
  import {
247
- colorHasVisibleAlpha,
248
- compactCssValue,
249
119
  cssColorOrFallback,
250
- cssLengthNumber,
251
120
  fourValuesEqual,
252
121
  outlineOffsetForPosition,
253
122
  readStrokeOutlinePosition,
@@ -255,86 +124,41 @@ import {
255
124
  resolveTextStrokeColor,
256
125
  roundToOneDecimal,
257
126
  strokeHiddenByColor,
258
- strokeIsVisible,
259
127
  swatchStyle,
260
128
  textStrokeIsVisible,
261
129
  } from "./edit-panel/position-helpers";
262
130
  import { PositionLayoutProperties } from "./edit-panel/position-layout-properties";
263
- import {
264
- isMixedValue,
265
- MIXED_VALUE,
266
- mixedElementFromSelection,
267
- sameOrMixed,
268
- } from "./edit-panel/selection-helpers";
131
+ import { mixedElementFromSelection } from "./edit-panel/selection-helpers";
269
132
  import { StrokeProperties } from "./edit-panel/stroke-properties";
270
133
  import {
271
134
  type BreakpointOverrideFieldContext,
272
135
  type MotionKeyframeFieldContext,
273
- resolveBreakpointOverride,
274
136
  type StyleChangeHandler,
275
137
  type StyleChangeMeta,
276
138
  type StylesChangeHandler,
277
139
  } from "./edit-panel/style-change-types";
278
- import {
279
- ALIGN_SELF_OPTIONS,
280
- BLEND_MODE_OPTIONS,
281
- optionValue,
282
- parseNumericValue,
283
- resolveLineHeight,
284
- sidesAreLinked,
285
- STROKE_POSITION_OPTIONS,
286
- } from "./edit-panel/style-options";
287
140
  import {
288
141
  mergeRotationValue,
289
- mergeTranslateFunction,
290
142
  normalizeRotationDegrees,
291
- parseRotationValue,
292
- parseScaleValue,
293
143
  } from "./edit-panel/transform-helpers";
294
144
  import {
295
145
  displayFontFamilyName,
296
146
  FONT_FAMILY_OPTIONS,
297
- FONT_WEIGHT_OPTIONS,
298
147
  resolveFontFamilySelectValue,
299
- splitFontFamilyList,
300
- type TextResizeMode,
301
148
  } from "./edit-panel/typography-helpers";
302
149
  import { TypographyProperties } from "./edit-panel/typography-properties";
303
150
  import {
304
- AutoLayoutMatrix,
305
- BreakpointOverrideIndicator,
306
- ConstraintsPreview,
307
- ConstraintsWidget,
308
151
  ExportSettingsPanel,
309
152
  DesignColorPicker,
310
- FRAME_SIZE_PRESET_CATEGORIES,
311
- MotionKeyframeDiamond,
312
- motionPropertyHasKeyframe,
313
153
  ScrubInput,
314
- SizingField,
315
- type AlignmentMatrixValue,
316
- type AutoLayoutMatrixValue,
317
- type AutoLayoutSizing,
318
- type AutoLayoutSizingAxis,
319
- type ConstraintsValue,
320
154
  type ExportSettingsValue,
321
155
  type FrameSizePreset,
322
- type FrameSizePresetCategoryKey,
323
156
  InteractionStatePanel,
324
157
  type ActiveInteractionState,
325
- type DesignFillRow,
326
- type DesignGradientStop,
327
- type DesignGradientType,
328
- type ImageFillValue,
329
158
  type MotionKeyframeCssProperty,
330
- type ScrubInputChangeMeta,
331
159
  } from "./inspector";
332
- import { IconLayoutSettings, IconText } from "./inspector/design-icons";
333
- import type { DesignPaintType } from "./inspector/DesignColorPicker";
334
- import {
335
- GlslShaderEffectSection,
336
- type GlslShaderPanelContext,
337
- } from "./inspector/GlslShaderPanel";
160
+ import { IconText } from "./inspector/design-icons";
161
+ import { type GlslShaderPanelContext } from "./inspector/GlslShaderPanel";
338
162
  import {
339
163
  ReviewCommentsPanel,
340
164
  type ReviewCommentsPanelProps,
@@ -583,6 +407,8 @@ interface EditPanelProps {
583
407
  * always shows this row) but no-op, since EditPanel has no selection
584
408
  * bbox/parent geometry of its own to act on.
585
409
  */
410
+ /** Convert this container to freeform, pinning children where they render. */
411
+ onDisableAutoLayout?: (nodeId: string) => void;
586
412
  onAlignSelection?: (
587
413
  edge: "left" | "center-h" | "right" | "top" | "center-v" | "bottom",
588
414
  ) => void;
@@ -1837,6 +1663,7 @@ export const EditPanel = memo(function EditPanel({
1837
1663
  activeTool,
1838
1664
  onCreateScreenFromPreset,
1839
1665
  onAlignSelection,
1666
+ onDisableAutoLayout,
1840
1667
  onInteractionStateChange,
1841
1668
  availableInteractionStates,
1842
1669
  onEditCode,
@@ -2360,6 +2187,7 @@ export const EditPanel = memo(function EditPanel({
2360
2187
  element={stateResolvedInspectorElement ?? inspectorElement}
2361
2188
  onStyleChange={onStyleChange}
2362
2189
  onStylesChange={onStylesChange}
2190
+ onDisableAutoLayout={onDisableAutoLayout}
2363
2191
  motionKeyframeContext={motionKeyframeFieldContext}
2364
2192
  breakpointOverrideContext={breakpointOverrideFieldContext}
2365
2193
  />
@@ -2258,7 +2258,11 @@ export const MultiScreenCanvas = memo(function MultiScreenCanvas({
2258
2258
  sourceScreenId !== boardFileId &&
2259
2259
  boardFileId &&
2260
2260
  boardFrameGeometry &&
2261
- geometryContainsPoint(boardFrameGeometry, boardPoint)
2261
+ boardSurfaceRenderGeometry &&
2262
+ // boardFrameGeometry is a 131,072px square centred on the origin, so
2263
+ // testing against it makes every pointer a board hit and silently
2264
+ // relocates the layer into an invisible file.
2265
+ geometryContainsPoint(boardSurfaceRenderGeometry, boardPoint)
2262
2266
  ) {
2263
2267
  const nextTarget = { id: boardFileId, geometry: boardFrameGeometry };
2264
2268
  if (crossScreenTargetRef.current?.id !== boardFileId) {
@@ -2323,14 +2327,27 @@ export const MultiScreenCanvas = memo(function MultiScreenCanvas({
2323
2327
  ? "discarded — pointer never left the source screen"
2324
2328
  : candidate
2325
2329
  ? "moving into candidate"
2326
- : "no candidate; falling back to the board",
2330
+ : "no candidate — refused unless over the board surface",
2327
2331
  });
2332
+ const boardSurfaceHit =
2333
+ !!boardFileId &&
2334
+ sourceScreenId !== boardFileId &&
2335
+ !!boardFrameGeometry &&
2336
+ !!boardSurfaceRenderGeometry &&
2337
+ geometryContainsPoint(boardSurfaceRenderGeometry, lastBoardPoint);
2328
2338
  const targetCandidate =
2329
2339
  candidate ??
2330
- (boardFileId && sourceScreenId !== boardFileId && boardFrameGeometry
2340
+ (boardSurfaceHit && boardFileId && boardFrameGeometry
2331
2341
  ? { id: boardFileId, geometry: boardFrameGeometry }
2332
2342
  : null);
2333
- if (!targetCandidate) return;
2343
+ if (!targetCandidate) {
2344
+ trace("drop", "refused", {
2345
+ reason: "no screen under the pointer and not over the board surface",
2346
+ sourceScreen: sourceScreenId,
2347
+ lastBoardPoint,
2348
+ });
2349
+ return;
2350
+ }
2334
2351
 
2335
2352
  if (targetCandidate.id === boardFileId) {
2336
2353
  void runHitTest(targetCandidate, lastBoardPoint).then(
@@ -69,16 +69,12 @@ export function QuestionFlow({
69
69
  return v.trim().length > 0;
70
70
  return hasGuidedAnswer(v);
71
71
  };
72
- const answeredCount = guidedQuestions.filter(isAnswered).length;
72
+
73
73
  const requiredQuestions = guidedQuestions.filter(
74
74
  (question) => question.required,
75
75
  );
76
76
  const requiredAnswered = requiredQuestions.filter(isAnswered).length;
77
77
  const allRequiredAnswered = requiredAnswered === requiredQuestions.length;
78
- const progress =
79
- guidedQuestions.length === 0
80
- ? 0
81
- : Math.round((answeredCount / guidedQuestions.length) * 100);
82
78
 
83
79
  return (
84
80
  /* `items-start` is what makes the trailing space real: stretched, this
@@ -25,7 +25,7 @@
25
25
  */
26
26
 
27
27
  import { execSync } from "node:child_process";
28
- import { readdirSync, readFileSync, writeFileSync } from "node:fs";
28
+ import { readdirSync, writeFileSync } from "node:fs";
29
29
  import { join, resolve } from "node:path";
30
30
  import { fileURLToPath } from "node:url";
31
31
 
@@ -2937,7 +2937,6 @@ declare var __SELECTED_LAYER_DRAG_PRIORITY__: boolean;
2937
2937
  } | null = null;
2938
2938
  var suppressNextShieldClick = false;
2939
2939
  var suppressNextShieldClickTimer: ReturnType<typeof setTimeout> | null = null;
2940
- var selectedSpacingHovered = false;
2941
2940
  var hoveredSpacingHandleKey = "";
2942
2941
  var spacingHoverClearTimer: ReturnType<typeof setTimeout> | null = null;
2943
2942
  var lastSpacingPointerPoint: { x: number; y: number } | null = null;
@@ -2971,7 +2970,6 @@ declare var __SELECTED_LAYER_DRAG_PRIORITY__: boolean;
2971
2970
  clearHoverGate();
2972
2971
  setPassiveSelectionElements([]);
2973
2972
  clearSpacingHoverTimer();
2974
- selectedSpacingHovered = false;
2975
2973
  hoveredSpacingHandleKey = "";
2976
2974
  lastSpacingPointerPoint = null;
2977
2975
  spacingDrag = null;
@@ -3291,7 +3289,13 @@ declare var __SELECTED_LAYER_DRAG_PRIORITY__: boolean;
3291
3289
  lastSourceHeadHtml = nextHeadHtml;
3292
3290
  }
3293
3291
  var currentHeadHtml = lastSourceHeadHtml;
3294
- if (nextHeadHtml === currentHeadHtml && activeCandidates.length > 0) {
3292
+ // The subtree path rewrites one selector's match. A forced replacement can
3293
+ // have changed any number of nodes, so taking it leaves the rest stale.
3294
+ if (
3295
+ !forceFullDocument &&
3296
+ nextHeadHtml === currentHeadHtml &&
3297
+ activeCandidates.length > 0
3298
+ ) {
3295
3299
  var currentMatch = null;
3296
3300
  var nextMatch = null;
3297
3301
  var matchedSelector = "";
@@ -4244,7 +4248,6 @@ declare var __SELECTED_LAYER_DRAG_PRIORITY__: boolean;
4244
4248
  function activateSpacingHandle(spacingKey: string): void {
4245
4249
  if (!spacingKey) return;
4246
4250
  clearSpacingHoverTimer();
4247
- selectedSpacingHovered = true;
4248
4251
  setHoverToSelectedElementFromSpacingSurface();
4249
4252
  if (
4250
4253
  hoveredSpacingHandleKey !== spacingKey ||
@@ -4336,7 +4339,6 @@ declare var __SELECTED_LAYER_DRAG_PRIORITY__: boolean;
4336
4339
  hit &&
4337
4340
  (hit === selectedEl || (selectedEl.contains && selectedEl.contains(hit)))
4338
4341
  ) {
4339
- selectedSpacingHovered = true;
4340
4342
  return true;
4341
4343
  }
4342
4344
  return false;
@@ -4355,7 +4357,6 @@ declare var __SELECTED_LAYER_DRAG_PRIORITY__: boolean;
4355
4357
  updateSpacingOverlay(selectedEl);
4356
4358
  return;
4357
4359
  }
4358
- selectedSpacingHovered = false;
4359
4360
  hoveredSpacingHandleKey = "";
4360
4361
  updateSpacingOverlay(selectedEl);
4361
4362
  }, 80);
@@ -5532,7 +5533,6 @@ declare var __SELECTED_LAYER_DRAG_PRIORITY__: boolean;
5532
5533
  (window.parent as Window).postMessage({ type: "clear-selection" }, "*");
5533
5534
  return;
5534
5535
  }
5535
- selectedSpacingHovered = false;
5536
5536
  hoveredSpacingHandleKey = "";
5537
5537
  var previousSelectedEl = selectedEl;
5538
5538
  selectedEl = selectionTargetForHit(target);
@@ -5844,7 +5844,6 @@ declare var __SELECTED_LAYER_DRAG_PRIORITY__: boolean;
5844
5844
  var target = candidateElements[0] || null;
5845
5845
  var info = null;
5846
5846
  if (target) {
5847
- selectedSpacingHovered = false;
5848
5847
  hoveredSpacingHandleKey = "";
5849
5848
  selectedEl = selectionTargetForHit(target);
5850
5849
  if (selectedEl && !isLayerInteractionBlocked(selectedEl)) {
@@ -6825,7 +6824,6 @@ declare var __SELECTED_LAYER_DRAG_PRIORITY__: boolean;
6825
6824
  var startY = e.clientY;
6826
6825
  lastSpacingPointerPoint = { x: startX, y: startY };
6827
6826
  hoveredSpacingHandleKey = key;
6828
- selectedSpacingHovered = true;
6829
6827
  spacingDrag = {
6830
6828
  handle: handle,
6831
6829
  currentValue: originValue,
@@ -9292,10 +9290,6 @@ declare var __SELECTED_LAYER_DRAG_PRIORITY__: boolean;
9292
9290
  ctrl: Boolean(e.ctrlKey),
9293
9291
  target: dndTarget(currentTarget),
9294
9292
  });
9295
- // Cross-screen drag state: true when the pointer is outside this iframe's
9296
- // viewport bounds. The host frame renders the ghost + highlight and owns
9297
- // the drop when this is true; the bridge suppresses its in-iframe reorder.
9298
- var pointerOutsideIframe = false;
9299
9293
  var reorderSelector = getSelector(reorderEl);
9300
9294
  var reorderSourceId = getSourceId(reorderEl);
9301
9295
  var reorderStyleSnapshot = collectPortableStyleSnapshot(reorderEl);
@@ -9655,7 +9649,6 @@ declare var __SELECTED_LAYER_DRAG_PRIORITY__: boolean;
9655
9649
  var dx = cx - reorderPointerStart.clientX;
9656
9650
  var dy = cy - reorderPointerStart.clientY;
9657
9651
  var outside = cx < 0 || cy < 0 || cx > vw || cy > vh;
9658
- pointerOutsideIframe = outside;
9659
9652
  // Always notify the host frame so it can track the cursor position,
9660
9653
  // render the ghost, and highlight the target screen. Group drags stay
9661
9654
  // in-iframe (the host's cross-screen drop moves a single element and
@@ -9806,8 +9799,8 @@ declare var __SELECTED_LAYER_DRAG_PRIORITY__: boolean;
9806
9799
  // avoid a ghost element left in screen A's DOM. For group drags an
9807
9800
  // outside release is simply a no-op (nothing moved during a flow
9808
9801
  // reorder drag, so there is nothing to restore).
9809
- // Use outsideOnDrop only — pointerOutsideIframe is stale when the user
9810
- // briefly exits the iframe and re-enters before releasing. The host
9802
+ // Use outsideOnDrop only — a live pointer-outside flag is stale when the
9803
+ // user briefly exits the iframe and re-enters before releasing. The host
9811
9804
  // already clears cross-screen state on re-entry so checking the
9812
9805
  // momentary excursion flag here would wrongly drop the element nowhere.
9813
9806
  if (outsideOnDrop) return;
@@ -9959,7 +9952,7 @@ declare var __SELECTED_LAYER_DRAG_PRIORITY__: boolean;
9959
9952
  });
9960
9953
  var gestureState =
9961
9954
  memberStates[groupEls.indexOf(gestureEl)] || memberStates[0];
9962
- var originalInlineOpacity = gestureState.originalOpacity;
9955
+
9963
9956
  var originLeft = gestureState.originLeft;
9964
9957
  var originTop = gestureState.originTop;
9965
9958
  function setMembersOpacity(value: string | null): void {
@@ -12023,7 +12016,6 @@ declare var __SELECTED_LAYER_DRAG_PRIORITY__: boolean;
12023
12016
  );
12024
12017
  if (hoveringSelectedSpacingSurface) {
12025
12018
  clearSpacingHoverTimer();
12026
- selectedSpacingHovered = true;
12027
12019
  lastSpacingPointerPoint = { x: e.clientX, y: e.clientY };
12028
12020
  updateSpacingOverlay(selectedEl);
12029
12021
  // Reliable padding/gap hover: hit-test the handle geometry
@@ -12580,7 +12572,6 @@ declare var __SELECTED_LAYER_DRAG_PRIORITY__: boolean;
12580
12572
  // replay must be a no-op for hover state.
12581
12573
  var selectionChangedByHost = target !== selectedEl;
12582
12574
  if (selectionChangedByHost) {
12583
- selectedSpacingHovered = false;
12584
12575
  hoveredSpacingHandleKey = "";
12585
12576
  }
12586
12577
  selectedEl = target;
@@ -12,7 +12,7 @@ import {
12
12
  IconRadiusTopLeft,
13
13
  IconRadiusTopRight,
14
14
  } from "@tabler/icons-react";
15
- import { useEffect, useState, type ReactNode } from "react";
15
+ import { useState, type ReactNode } from "react";
16
16
 
17
17
  import { Button } from "@/components/ui/button";
18
18
  import {
@@ -17,7 +17,6 @@ import { cn } from "@/lib/utils";
17
17
 
18
18
  import {
19
19
  AutoLayoutMatrix,
20
- ScrubInput,
21
20
  SizingField,
22
21
  type AutoLayoutFlow,
23
22
  type AutoLayoutGridTrackSizing,
@@ -45,7 +44,7 @@ import {
45
44
  elementStableKey,
46
45
  useAspectRatioLock,
47
46
  } from "./element-identity";
48
- import { FieldTrailer, ScrubStyleInput } from "./field-primitives";
47
+ import { FieldTrailer } from "./field-primitives";
49
48
  import { joinCssLayers, splitCssLayers } from "./fill-gradient-helpers";
50
49
  import { SectionIconButton } from "./inspector-controls";
51
50
  import {
@@ -213,12 +212,13 @@ function FlexContainerControls({
213
212
  element,
214
213
  onStyleChange,
215
214
  onStylesChange,
215
+ onDisableAutoLayout,
216
216
  }: {
217
217
  element: ElementInfo;
218
218
  onStyleChange: StyleChangeHandler;
219
219
  onStylesChange?: StylesChangeHandler;
220
+ onDisableAutoLayout?: (nodeId: string) => void;
220
221
  }) {
221
- const t = useT();
222
222
  const styles = element.computedStyles;
223
223
  // The element's CURRENT layout flow as authored in code, read from its own
224
224
  // computed `display`: block/flow-root/grid/etc. = "normal flow",
@@ -372,6 +372,13 @@ function FlexContainerControls({
372
372
  <AutoLayoutMatrix
373
373
  value={autoLayoutValue}
374
374
  onFlowChange={(flow) => {
375
+ const nodeId = element.sourceId ?? element.pendingNodeId;
376
+ // A raw display:block leaves the children in flow, so they re-stack
377
+ // and stop being draggable. The command measures and pins them.
378
+ if (flow === "normal" && onDisableAutoLayout && nodeId) {
379
+ onDisableAutoLayout(nodeId);
380
+ return;
381
+ }
375
382
  const patch = autoLayoutStylesForFlow(flow, {
376
383
  ...styles,
377
384
  ...element.inlineStyles,
@@ -641,12 +648,14 @@ export function LayoutContextProperties({
641
648
  element,
642
649
  onStyleChange,
643
650
  onStylesChange,
651
+ onDisableAutoLayout,
644
652
  motionKeyframeContext,
645
653
  breakpointOverrideContext,
646
654
  }: {
647
655
  element: ElementInfo;
648
656
  onStyleChange: StyleChangeHandler;
649
657
  onStylesChange?: StylesChangeHandler;
658
+ onDisableAutoLayout?: (nodeId: string) => void;
650
659
  motionKeyframeContext?: MotionKeyframeFieldContext;
651
660
  breakpointOverrideContext?: BreakpointOverrideFieldContext;
652
661
  }) {
@@ -875,6 +884,7 @@ export function LayoutContextProperties({
875
884
  element={element}
876
885
  onStyleChange={onStyleChange}
877
886
  onStylesChange={onStylesChange}
887
+ onDisableAutoLayout={onDisableAutoLayout}
878
888
  />
879
889
  {childControls}
880
890
  </PanelSection>