@zseven-w/pen-sdk 0.0.1
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.
- package/README.md +56 -0
- package/package.json +28 -0
- package/src/index.ts +195 -0
package/README.md
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# @zseven-w/pen-sdk
|
|
2
|
+
|
|
3
|
+
The umbrella SDK for [OpenPencil](https://github.com/nicepkg/openpencil). One import gives you everything — types, document operations, code generation, Figma import, and rendering.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @zseven-w/pen-sdk
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## What's Included
|
|
12
|
+
|
|
13
|
+
This package re-exports all OpenPencil packages:
|
|
14
|
+
|
|
15
|
+
| Package | Provides |
|
|
16
|
+
|---|---|
|
|
17
|
+
| `@zseven-w/pen-types` | TypeScript types for the document model |
|
|
18
|
+
| `@zseven-w/pen-core` | Tree operations, layout engine, variables, boolean ops |
|
|
19
|
+
| `@zseven-w/pen-codegen` | Code generators (React, HTML, Vue, Svelte, Flutter, SwiftUI, Compose, RN) |
|
|
20
|
+
| `@zseven-w/pen-figma` | Figma `.fig` parser and converter |
|
|
21
|
+
| `@zseven-w/pen-renderer` | CanvasKit/Skia GPU renderer |
|
|
22
|
+
|
|
23
|
+
## Usage
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
import {
|
|
27
|
+
// Types
|
|
28
|
+
type PenDocument,
|
|
29
|
+
type PenNode,
|
|
30
|
+
|
|
31
|
+
// Document operations
|
|
32
|
+
createEmptyDocument,
|
|
33
|
+
findNodeInTree,
|
|
34
|
+
insertNodeInTree,
|
|
35
|
+
normalizePenDocument,
|
|
36
|
+
|
|
37
|
+
// Code generation
|
|
38
|
+
generateReactFromDocument,
|
|
39
|
+
generateHTMLFromDocument,
|
|
40
|
+
generateFlutterFromDocument,
|
|
41
|
+
|
|
42
|
+
// Figma import
|
|
43
|
+
parseFigFile,
|
|
44
|
+
figmaAllPagesToPenDocument,
|
|
45
|
+
|
|
46
|
+
// Rendering
|
|
47
|
+
loadCanvasKit,
|
|
48
|
+
PenRenderer,
|
|
49
|
+
} from '@zseven-w/pen-sdk'
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Or install individual packages for smaller bundles — see each package's README for details.
|
|
53
|
+
|
|
54
|
+
## License
|
|
55
|
+
|
|
56
|
+
MIT
|
package/package.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@zseven-w/pen-sdk",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "OpenPencil SDK — parse, manipulate, and generate code from .op design files",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"exports": {
|
|
7
|
+
".": {
|
|
8
|
+
"types": "./src/index.ts",
|
|
9
|
+
"import": "./src/index.ts"
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"src"
|
|
14
|
+
],
|
|
15
|
+
"scripts": {
|
|
16
|
+
"typecheck": "tsc --noEmit"
|
|
17
|
+
},
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"@zseven-w/pen-types": "0.0.1",
|
|
20
|
+
"@zseven-w/pen-core": "0.0.1",
|
|
21
|
+
"@zseven-w/pen-codegen": "0.0.1",
|
|
22
|
+
"@zseven-w/pen-figma": "0.0.1",
|
|
23
|
+
"@zseven-w/pen-renderer": "0.0.1"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"typescript": "^5.7.2"
|
|
27
|
+
}
|
|
28
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zseven-w/pen-sdk — OpenPencil SDK
|
|
3
|
+
*
|
|
4
|
+
* High-level API for working with OpenPencil (.op) design files.
|
|
5
|
+
* Combines types, document operations, code generation, and Figma import.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* import {
|
|
10
|
+
* type PenDocument,
|
|
11
|
+
* createEmptyDocument,
|
|
12
|
+
* normalizePenDocument,
|
|
13
|
+
* generateReactFromDocument,
|
|
14
|
+
* parseFigFile,
|
|
15
|
+
* } from '@zseven-w/pen-sdk'
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
// ── Types ──────────────────────────────────────────────────────────────
|
|
20
|
+
export type {
|
|
21
|
+
// Document model
|
|
22
|
+
PenDocument,
|
|
23
|
+
PenNode,
|
|
24
|
+
PenNodeType,
|
|
25
|
+
PenPage,
|
|
26
|
+
PenNodeBase,
|
|
27
|
+
ContainerProps,
|
|
28
|
+
SizingBehavior,
|
|
29
|
+
FrameNode,
|
|
30
|
+
GroupNode,
|
|
31
|
+
RectangleNode,
|
|
32
|
+
EllipseNode,
|
|
33
|
+
LineNode,
|
|
34
|
+
PolygonNode,
|
|
35
|
+
PathNode,
|
|
36
|
+
TextNode,
|
|
37
|
+
ImageNode,
|
|
38
|
+
ImageFitMode,
|
|
39
|
+
IconFontNode,
|
|
40
|
+
RefNode,
|
|
41
|
+
// Styles
|
|
42
|
+
PenFill,
|
|
43
|
+
PenStroke,
|
|
44
|
+
PenEffect,
|
|
45
|
+
SolidFill,
|
|
46
|
+
LinearGradientFill,
|
|
47
|
+
RadialGradientFill,
|
|
48
|
+
ImageFill,
|
|
49
|
+
GradientStop,
|
|
50
|
+
BlendMode,
|
|
51
|
+
BlurEffect,
|
|
52
|
+
ShadowEffect,
|
|
53
|
+
StyledTextSegment,
|
|
54
|
+
// Variables
|
|
55
|
+
VariableDefinition,
|
|
56
|
+
VariableValue,
|
|
57
|
+
ThemedValue,
|
|
58
|
+
// Canvas
|
|
59
|
+
ToolType,
|
|
60
|
+
ViewportState,
|
|
61
|
+
// UIKit
|
|
62
|
+
UIKit,
|
|
63
|
+
KitComponent,
|
|
64
|
+
ComponentCategory,
|
|
65
|
+
// Theme presets
|
|
66
|
+
ThemePreset,
|
|
67
|
+
ThemePresetFile,
|
|
68
|
+
} from '@zseven-w/pen-types'
|
|
69
|
+
|
|
70
|
+
// ── Core: Document operations ──────────────────────────────────────────
|
|
71
|
+
export {
|
|
72
|
+
// ID generation
|
|
73
|
+
generateId,
|
|
74
|
+
// Document creation & tree operations
|
|
75
|
+
createEmptyDocument,
|
|
76
|
+
DEFAULT_FRAME_ID,
|
|
77
|
+
DEFAULT_PAGE_ID,
|
|
78
|
+
findNodeInTree,
|
|
79
|
+
findParentInTree,
|
|
80
|
+
removeNodeFromTree,
|
|
81
|
+
updateNodeInTree,
|
|
82
|
+
flattenNodes,
|
|
83
|
+
insertNodeInTree,
|
|
84
|
+
isDescendantOf,
|
|
85
|
+
getNodeBounds,
|
|
86
|
+
// Page operations
|
|
87
|
+
getActivePage,
|
|
88
|
+
getActivePageChildren,
|
|
89
|
+
setActivePageChildren,
|
|
90
|
+
getAllChildren,
|
|
91
|
+
migrateToPages,
|
|
92
|
+
ensureDocumentNodeIds,
|
|
93
|
+
// Variables
|
|
94
|
+
isVariableRef,
|
|
95
|
+
getDefaultTheme,
|
|
96
|
+
resolveVariableRef,
|
|
97
|
+
resolveColorRef,
|
|
98
|
+
resolveNumericRef,
|
|
99
|
+
resolveNodeForCanvas,
|
|
100
|
+
replaceVariableRefsInTree,
|
|
101
|
+
// Normalization
|
|
102
|
+
normalizePenDocument,
|
|
103
|
+
// Layout
|
|
104
|
+
type Padding,
|
|
105
|
+
resolvePadding,
|
|
106
|
+
computeLayoutPositions,
|
|
107
|
+
getNodeWidth,
|
|
108
|
+
getNodeHeight,
|
|
109
|
+
inferLayout,
|
|
110
|
+
// Text measurement
|
|
111
|
+
parseSizing,
|
|
112
|
+
defaultLineHeight,
|
|
113
|
+
estimateTextWidth,
|
|
114
|
+
estimateTextHeight,
|
|
115
|
+
resolveTextContent,
|
|
116
|
+
hasCjkText,
|
|
117
|
+
// Arc path
|
|
118
|
+
buildEllipseArcPath,
|
|
119
|
+
isArcEllipse,
|
|
120
|
+
// Boolean operations
|
|
121
|
+
type BooleanOpType,
|
|
122
|
+
canBooleanOp,
|
|
123
|
+
executeBooleanOp,
|
|
124
|
+
} from '@zseven-w/pen-core'
|
|
125
|
+
|
|
126
|
+
// ── Codegen: Multi-platform code generation ────────────────────────────
|
|
127
|
+
export {
|
|
128
|
+
// CSS Variables
|
|
129
|
+
variableNameToCSS,
|
|
130
|
+
generateCSSVariables,
|
|
131
|
+
// React + Tailwind
|
|
132
|
+
generateReactCode,
|
|
133
|
+
generateReactFromDocument,
|
|
134
|
+
// HTML + CSS
|
|
135
|
+
generateHTMLCode,
|
|
136
|
+
generateHTMLFromDocument,
|
|
137
|
+
// Vue 3
|
|
138
|
+
generateVueCode,
|
|
139
|
+
generateVueFromDocument,
|
|
140
|
+
// Svelte
|
|
141
|
+
generateSvelteCode,
|
|
142
|
+
generateSvelteFromDocument,
|
|
143
|
+
// Flutter
|
|
144
|
+
generateFlutterCode,
|
|
145
|
+
generateFlutterFromDocument,
|
|
146
|
+
// SwiftUI
|
|
147
|
+
generateSwiftUICode,
|
|
148
|
+
generateSwiftUIFromDocument,
|
|
149
|
+
// Android Compose
|
|
150
|
+
generateComposeCode,
|
|
151
|
+
generateComposeFromDocument,
|
|
152
|
+
// React Native
|
|
153
|
+
generateReactNativeCode,
|
|
154
|
+
generateReactNativeFromDocument,
|
|
155
|
+
} from '@zseven-w/pen-codegen'
|
|
156
|
+
|
|
157
|
+
// ── Figma: .fig file import ────────────────────────────────────────────
|
|
158
|
+
export {
|
|
159
|
+
parseFigFile,
|
|
160
|
+
figmaToPenDocument,
|
|
161
|
+
figmaAllPagesToPenDocument,
|
|
162
|
+
getFigmaPages,
|
|
163
|
+
figmaNodeChangesToPenNodes,
|
|
164
|
+
isFigmaClipboardHtml,
|
|
165
|
+
extractFigmaClipboardData,
|
|
166
|
+
figmaClipboardToNodes,
|
|
167
|
+
resolveImageBlobs,
|
|
168
|
+
setIconLookup,
|
|
169
|
+
type FigmaDecodedFile,
|
|
170
|
+
type FigmaImportLayoutMode,
|
|
171
|
+
} from '@zseven-w/pen-figma'
|
|
172
|
+
|
|
173
|
+
// ── Renderer: CanvasKit/Skia rendering engine ────────────────────────
|
|
174
|
+
export {
|
|
175
|
+
// Primary API
|
|
176
|
+
loadCanvasKit,
|
|
177
|
+
PenRenderer,
|
|
178
|
+
// Low-level
|
|
179
|
+
SkiaNodeRenderer,
|
|
180
|
+
SkiaFontManager,
|
|
181
|
+
SkiaImageLoader,
|
|
182
|
+
SpatialIndex,
|
|
183
|
+
flattenToRenderNodes,
|
|
184
|
+
resolveRefs,
|
|
185
|
+
premeasureTextHeights,
|
|
186
|
+
// Viewport
|
|
187
|
+
viewportMatrix,
|
|
188
|
+
screenToScene,
|
|
189
|
+
sceneToScreen,
|
|
190
|
+
zoomToPoint,
|
|
191
|
+
// Types
|
|
192
|
+
type RenderNode,
|
|
193
|
+
type PenRendererOptions,
|
|
194
|
+
type IconLookupFn,
|
|
195
|
+
} from '@zseven-w/pen-renderer'
|