@antigenic-oss/paint 0.1.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 (158) hide show
  1. package/LICENSE +178 -0
  2. package/NOTICE +4 -0
  3. package/README.md +180 -0
  4. package/bin/paint.js +266 -0
  5. package/next-env.d.ts +6 -0
  6. package/next.config.ts +19 -0
  7. package/package.json +81 -0
  8. package/postcss.config.mjs +8 -0
  9. package/public/dev-editor-inspector.js +1872 -0
  10. package/src/app/api/claude/analyze/route.ts +319 -0
  11. package/src/app/api/claude/apply/route.ts +185 -0
  12. package/src/app/api/claude/pick-folder/route.ts +64 -0
  13. package/src/app/api/claude/scan/route.ts +221 -0
  14. package/src/app/api/claude/status/route.ts +55 -0
  15. package/src/app/api/project/scan/route.ts +634 -0
  16. package/src/app/api/project-scan/css-variables/route.ts +238 -0
  17. package/src/app/api/project-scan/route.ts +40 -0
  18. package/src/app/api/project-scan/tailwind-config/route.ts +172 -0
  19. package/src/app/api/proxy/[[...path]]/route.ts +2400 -0
  20. package/src/app/docs/DocsClient.tsx +322 -0
  21. package/src/app/docs/layout.tsx +7 -0
  22. package/src/app/docs/page.tsx +855 -0
  23. package/src/app/globals.css +176 -0
  24. package/src/app/layout.tsx +19 -0
  25. package/src/app/page.tsx +46 -0
  26. package/src/bridge/api-handlers.ts +885 -0
  27. package/src/bridge/proxy-handler.ts +329 -0
  28. package/src/bridge/server.ts +113 -0
  29. package/src/components/BreakpointTabs.tsx +72 -0
  30. package/src/components/ChangeSummaryModal.tsx +267 -0
  31. package/src/components/ConnectModal.tsx +994 -0
  32. package/src/components/Editor.tsx +90 -0
  33. package/src/components/PageSelector.tsx +208 -0
  34. package/src/components/PreviewFrame.tsx +299 -0
  35. package/src/components/ProjectFolderBanner.tsx +91 -0
  36. package/src/components/ResponsiveToolbar.tsx +222 -0
  37. package/src/components/TargetSelector.tsx +243 -0
  38. package/src/components/TopBar.tsx +315 -0
  39. package/src/components/common/CollapsibleSection.tsx +36 -0
  40. package/src/components/common/ColorPicker.tsx +920 -0
  41. package/src/components/common/EditablePre.tsx +136 -0
  42. package/src/components/common/ErrorBoundary.tsx +65 -0
  43. package/src/components/common/ResizablePanel.tsx +83 -0
  44. package/src/components/common/ScanAnimation.tsx +76 -0
  45. package/src/components/common/ToastContainer.tsx +97 -0
  46. package/src/components/common/UnitInput.tsx +77 -0
  47. package/src/components/common/VariableColorPicker.tsx +622 -0
  48. package/src/components/left-panel/AddElementPanel.tsx +237 -0
  49. package/src/components/left-panel/ComponentsPanel.tsx +609 -0
  50. package/src/components/left-panel/IconSidebar.tsx +99 -0
  51. package/src/components/left-panel/LayerNode.tsx +874 -0
  52. package/src/components/left-panel/LayerSearch.tsx +23 -0
  53. package/src/components/left-panel/LayersPanel.tsx +52 -0
  54. package/src/components/left-panel/LeftPanel.tsx +122 -0
  55. package/src/components/left-panel/PagesPanel.tsx +114 -0
  56. package/src/components/left-panel/icons.tsx +162 -0
  57. package/src/components/left-panel/terminal/ScanOverlay.tsx +66 -0
  58. package/src/components/left-panel/terminal/TerminalPanel.tsx +217 -0
  59. package/src/components/right-panel/ElementLogBox.tsx +248 -0
  60. package/src/components/right-panel/PanelTabs.tsx +83 -0
  61. package/src/components/right-panel/RightPanel.tsx +41 -0
  62. package/src/components/right-panel/changes/AiScanResultPanel.tsx +285 -0
  63. package/src/components/right-panel/changes/ChangeEntry.tsx +59 -0
  64. package/src/components/right-panel/changes/ChangelogActions.tsx +105 -0
  65. package/src/components/right-panel/changes/ChangesPanel.tsx +1474 -0
  66. package/src/components/right-panel/claude/ApplyConfirmModal.tsx +376 -0
  67. package/src/components/right-panel/claude/ClaudeErrorState.tsx +125 -0
  68. package/src/components/right-panel/claude/ClaudeIntegrationPanel.tsx +482 -0
  69. package/src/components/right-panel/claude/ClaudeProgressIndicator.tsx +76 -0
  70. package/src/components/right-panel/claude/DiffCard.tsx +130 -0
  71. package/src/components/right-panel/claude/DiffViewer.tsx +54 -0
  72. package/src/components/right-panel/claude/ProjectRootSelector.tsx +275 -0
  73. package/src/components/right-panel/claude/ResultsSummary.tsx +119 -0
  74. package/src/components/right-panel/claude/SetupFlow.tsx +315 -0
  75. package/src/components/right-panel/console/ConsolePanel.tsx +209 -0
  76. package/src/components/right-panel/design/AppearanceSection.tsx +703 -0
  77. package/src/components/right-panel/design/BackgroundSection.tsx +516 -0
  78. package/src/components/right-panel/design/BorderSection.tsx +161 -0
  79. package/src/components/right-panel/design/CSSRawView.tsx +412 -0
  80. package/src/components/right-panel/design/DesignCSSTabToggle.tsx +51 -0
  81. package/src/components/right-panel/design/DesignPanel.tsx +275 -0
  82. package/src/components/right-panel/design/ElementBreadcrumb.tsx +51 -0
  83. package/src/components/right-panel/design/GradientEditor.tsx +726 -0
  84. package/src/components/right-panel/design/LayoutSection.tsx +1948 -0
  85. package/src/components/right-panel/design/PositionSection.tsx +865 -0
  86. package/src/components/right-panel/design/PropertiesSection.tsx +86 -0
  87. package/src/components/right-panel/design/SVGSection.tsx +361 -0
  88. package/src/components/right-panel/design/ShadowBlurSection.tsx +227 -0
  89. package/src/components/right-panel/design/SizeSection.tsx +183 -0
  90. package/src/components/right-panel/design/TextSection.tsx +719 -0
  91. package/src/components/right-panel/design/icons.tsx +948 -0
  92. package/src/components/right-panel/design/inputs/BoxModelPreview.tsx +467 -0
  93. package/src/components/right-panel/design/inputs/ColorInput.tsx +43 -0
  94. package/src/components/right-panel/design/inputs/CompactInput.tsx +333 -0
  95. package/src/components/right-panel/design/inputs/DraggableLabel.tsx +118 -0
  96. package/src/components/right-panel/design/inputs/IconToggleGroup.tsx +54 -0
  97. package/src/components/right-panel/design/inputs/LinkedInputPair.tsx +174 -0
  98. package/src/components/right-panel/design/inputs/SectionHeader.tsx +79 -0
  99. package/src/components/right-panel/variables/VariablesPanel.tsx +388 -0
  100. package/src/hooks/useBridge.ts +95 -0
  101. package/src/hooks/useChangeTracker.ts +563 -0
  102. package/src/hooks/useClaudeAPI.ts +118 -0
  103. package/src/hooks/useDOMTree.ts +25 -0
  104. package/src/hooks/useKeyboardShortcuts.ts +76 -0
  105. package/src/hooks/usePostMessage.ts +589 -0
  106. package/src/hooks/useProjectScan.ts +204 -0
  107. package/src/hooks/useResizable.ts +20 -0
  108. package/src/hooks/useSelectedElement.ts +51 -0
  109. package/src/hooks/useTargetUrl.ts +81 -0
  110. package/src/inspector/DOMTraverser.ts +71 -0
  111. package/src/inspector/ElementSelector.ts +23 -0
  112. package/src/inspector/HoverHighlighter.ts +54 -0
  113. package/src/inspector/SelectionHighlighter.ts +27 -0
  114. package/src/inspector/StyleExtractor.ts +19 -0
  115. package/src/inspector/inspector.ts +17 -0
  116. package/src/inspector/messaging.ts +30 -0
  117. package/src/lib/apiBase.ts +15 -0
  118. package/src/lib/classifyElement.ts +430 -0
  119. package/src/lib/claude-bin.ts +197 -0
  120. package/src/lib/claude-stream.ts +158 -0
  121. package/src/lib/clientProjectScanner.ts +344 -0
  122. package/src/lib/componentMatcher.ts +156 -0
  123. package/src/lib/constants.ts +573 -0
  124. package/src/lib/cssVariableUtils.ts +409 -0
  125. package/src/lib/diffParser.ts +206 -0
  126. package/src/lib/folderPicker.ts +84 -0
  127. package/src/lib/gradientParser.ts +160 -0
  128. package/src/lib/projectScanner.ts +355 -0
  129. package/src/lib/promptBuilder.ts +402 -0
  130. package/src/lib/shadowParser.ts +124 -0
  131. package/src/lib/tailwindClassParser.ts +248 -0
  132. package/src/lib/textShadowUtils.ts +106 -0
  133. package/src/lib/utils.ts +299 -0
  134. package/src/lib/validatePath.ts +40 -0
  135. package/src/proxy.ts +92 -0
  136. package/src/server/terminal-server.ts +104 -0
  137. package/src/store/changeSlice.ts +288 -0
  138. package/src/store/claudeSlice.ts +222 -0
  139. package/src/store/componentSlice.ts +90 -0
  140. package/src/store/consoleSlice.ts +51 -0
  141. package/src/store/cssVariableSlice.ts +94 -0
  142. package/src/store/elementSlice.ts +78 -0
  143. package/src/store/index.ts +35 -0
  144. package/src/store/terminalSlice.ts +30 -0
  145. package/src/store/treeSlice.ts +69 -0
  146. package/src/store/uiSlice.ts +327 -0
  147. package/src/types/changelog.ts +49 -0
  148. package/src/types/claude.ts +131 -0
  149. package/src/types/component.ts +49 -0
  150. package/src/types/cssVariables.ts +18 -0
  151. package/src/types/element.ts +21 -0
  152. package/src/types/file-system-access.d.ts +27 -0
  153. package/src/types/gradient.ts +12 -0
  154. package/src/types/messages.ts +392 -0
  155. package/src/types/shadow.ts +8 -0
  156. package/src/types/tree.ts +9 -0
  157. package/tsconfig.json +42 -0
  158. package/tsconfig.server.json +12 -0
@@ -0,0 +1,183 @@
1
+ 'use client'
2
+
3
+ import { useCallback } from 'react'
4
+ import { useEditorStore } from '@/store'
5
+ import { SectionHeader } from '@/components/right-panel/design/inputs/SectionHeader'
6
+ import { CompactInput } from '@/components/right-panel/design/inputs/CompactInput'
7
+ import { DraggableLabel } from '@/components/right-panel/design/inputs/DraggableLabel'
8
+ import { useChangeTracker } from '@/hooks/useChangeTracker'
9
+
10
+ // ─── Properties tracked ─────────────────────────────────────────
11
+
12
+ const SIZE_PROPERTIES = [
13
+ 'width',
14
+ 'height',
15
+ 'minWidth',
16
+ 'minHeight',
17
+ 'maxWidth',
18
+ 'maxHeight',
19
+ 'boxSizing',
20
+ ]
21
+
22
+ // ─── Main Component ─────────────────────────────────────────────
23
+
24
+ export function SizeSection() {
25
+ const computedStyles = useEditorStore((state) => state.computedStyles)
26
+ const { applyChange, resetProperty } = useChangeTracker()
27
+
28
+ const hasChanges = useEditorStore((s) => {
29
+ const sp = s.selectorPath
30
+ if (!sp) return false
31
+ return s.styleChanges.some(
32
+ (c) => c.elementSelector === sp && SIZE_PROPERTIES.includes(c.property),
33
+ )
34
+ })
35
+
36
+ const handleResetAll = useCallback(() => {
37
+ const { selectorPath, styleChanges } = useEditorStore.getState()
38
+ if (!selectorPath) return
39
+ const matching = styleChanges.filter(
40
+ (c) =>
41
+ c.elementSelector === selectorPath &&
42
+ SIZE_PROPERTIES.includes(c.property),
43
+ )
44
+ for (const c of matching) resetProperty(c.property)
45
+ }, [resetProperty])
46
+
47
+ const handleChange = useCallback(
48
+ (property: string, value: string) => {
49
+ applyChange(property, value)
50
+ },
51
+ [applyChange],
52
+ )
53
+
54
+ const handleReset = useCallback(
55
+ (property: string) => {
56
+ resetProperty(property)
57
+ },
58
+ [resetProperty],
59
+ )
60
+
61
+ return (
62
+ <SectionHeader
63
+ title="Size"
64
+ defaultOpen={true}
65
+ hasChanges={hasChanges}
66
+ onReset={handleResetAll}
67
+ >
68
+ {/* Width & Height */}
69
+ <div className="grid grid-cols-[auto_1fr_auto_1fr] items-center gap-x-2 gap-y-2">
70
+ <DraggableLabel
71
+ value={computedStyles.width || 'auto'}
72
+ property="width"
73
+ onChange={handleChange}
74
+ className="text-[11px] whitespace-nowrap"
75
+ style={{ color: 'var(--text-muted)' }}
76
+ >
77
+ Width
78
+ </DraggableLabel>
79
+ <CompactInput
80
+ value={computedStyles.width || 'auto'}
81
+ property="width"
82
+ onChange={handleChange}
83
+ onReset={handleReset}
84
+ units={['px', '%', 'em', 'rem', 'vw', 'auto']}
85
+ className="min-w-0"
86
+ />
87
+ <DraggableLabel
88
+ value={computedStyles.height || 'auto'}
89
+ property="height"
90
+ onChange={handleChange}
91
+ className="text-[11px] whitespace-nowrap"
92
+ style={{ color: 'var(--text-muted)' }}
93
+ >
94
+ Height
95
+ </DraggableLabel>
96
+ <CompactInput
97
+ value={computedStyles.height || 'auto'}
98
+ property="height"
99
+ onChange={handleChange}
100
+ onReset={handleReset}
101
+ units={['px', '%', 'em', 'rem', 'vh', 'auto']}
102
+ className="min-w-0"
103
+ />
104
+
105
+ {/* Min Width & Min Height */}
106
+ <DraggableLabel
107
+ value={computedStyles.minWidth || '0px'}
108
+ property="minWidth"
109
+ onChange={handleChange}
110
+ min={0}
111
+ className="text-[11px] whitespace-nowrap"
112
+ style={{ color: 'var(--text-muted)' }}
113
+ >
114
+ Min W
115
+ </DraggableLabel>
116
+ <CompactInput
117
+ value={computedStyles.minWidth || '0px'}
118
+ property="minWidth"
119
+ onChange={handleChange}
120
+ onReset={handleReset}
121
+ units={['px', '%', 'em', 'rem', 'vw']}
122
+ min={0}
123
+ className="min-w-0"
124
+ />
125
+ <DraggableLabel
126
+ value={computedStyles.minHeight || '0px'}
127
+ property="minHeight"
128
+ onChange={handleChange}
129
+ min={0}
130
+ className="text-[11px] whitespace-nowrap"
131
+ style={{ color: 'var(--text-muted)' }}
132
+ >
133
+ Min H
134
+ </DraggableLabel>
135
+ <CompactInput
136
+ value={computedStyles.minHeight || '0px'}
137
+ property="minHeight"
138
+ onChange={handleChange}
139
+ onReset={handleReset}
140
+ units={['px', '%', 'em', 'rem', 'vh']}
141
+ min={0}
142
+ className="min-w-0"
143
+ />
144
+
145
+ {/* Max Width & Max Height */}
146
+ <DraggableLabel
147
+ value={computedStyles.maxWidth || 'none'}
148
+ property="maxWidth"
149
+ onChange={handleChange}
150
+ className="text-[11px] whitespace-nowrap"
151
+ style={{ color: 'var(--text-muted)' }}
152
+ >
153
+ Max W
154
+ </DraggableLabel>
155
+ <CompactInput
156
+ value={computedStyles.maxWidth || 'none'}
157
+ property="maxWidth"
158
+ onChange={handleChange}
159
+ onReset={handleReset}
160
+ units={['px', '%', 'em', 'rem', 'vw', 'none']}
161
+ className="min-w-0"
162
+ />
163
+ <DraggableLabel
164
+ value={computedStyles.maxHeight || 'none'}
165
+ property="maxHeight"
166
+ onChange={handleChange}
167
+ className="text-[11px] whitespace-nowrap"
168
+ style={{ color: 'var(--text-muted)' }}
169
+ >
170
+ Max H
171
+ </DraggableLabel>
172
+ <CompactInput
173
+ value={computedStyles.maxHeight || 'none'}
174
+ property="maxHeight"
175
+ onChange={handleChange}
176
+ onReset={handleReset}
177
+ units={['px', '%', 'em', 'rem', 'vh', 'none']}
178
+ className="min-w-0"
179
+ />
180
+ </div>
181
+ </SectionHeader>
182
+ )
183
+ }