@welldot/render 0.1.0-next.20260509.039db95 → 0.2.2
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 +82 -33
- package/dist/{fgdcTextures-5IIUV7QV.js → fgdcTextures-P5DTFNPT.js} +1 -1
- package/dist/{fgdcTextures-5IIUV7QV.js.map → fgdcTextures-P5DTFNPT.js.map} +1 -1
- package/dist/index.cjs +461 -146
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +209 -10
- package/dist/index.d.ts +209 -10
- package/dist/index.js +455 -139
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -56,27 +56,51 @@ new WellRenderer(svgs: SvgInstance[], options?: {
|
|
|
56
56
|
renderConfig?: DeepPartial<RenderConfig>;
|
|
57
57
|
theme?: DeepPartial<WellTheme>;
|
|
58
58
|
units?: Units;
|
|
59
|
+
locale?: 'en' | 'pt';
|
|
59
60
|
classNames?: DeepPartial<ComponentsClassNames>;
|
|
60
61
|
onError?: (err: Error) => void;
|
|
62
|
+
onZoom?: (scale: number) => void;
|
|
61
63
|
})
|
|
62
64
|
```
|
|
63
65
|
|
|
64
|
-
| Option
|
|
65
|
-
|
|
66
|
-
| `svgs`
|
|
67
|
-
| `renderConfig` | `DeepPartial<RenderConfig>`
|
|
68
|
-
| `theme`
|
|
69
|
-
| `units`
|
|
70
|
-
| `
|
|
71
|
-
| `
|
|
66
|
+
| Option | Type | Description |
|
|
67
|
+
| -------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
68
|
+
| `svgs` | `SvgInstance[]` | One or more SVG panel descriptors (`{ selector, height, width, margins }`) |
|
|
69
|
+
| `renderConfig` | `DeepPartial<RenderConfig>` | Controls zoom, pan, animation, labels, tooltips, layout |
|
|
70
|
+
| `theme` | `DeepPartial<WellTheme>` | Visual style overrides (merged with `DEFAULT_WELL_THEME`) |
|
|
71
|
+
| `units` | `Units` | `{ length: 'm' \| 'ft'; diameter: 'mm' \| 'inches' }` |
|
|
72
|
+
| `locale` | `'en' \| 'pt'` | Locale for renderer-drawn text (diameter symbol, and any labels resolved via `applyRenderLocale`). Defaults to `'pt'` (the package's historical output) |
|
|
73
|
+
| `classNames` | `DeepPartial<ComponentsClassNames>` | Override CSS class names for any SVG element |
|
|
74
|
+
| `onError` | `(err: Error) => void` | Error callback |
|
|
75
|
+
| `onZoom` | `(scale: number) => void` | Called with the current zoom scale (`1` = initial/fit) on every wheel/drag zoom-pan tick, and on `zoomBy`/`resetZoom` calls |
|
|
72
76
|
|
|
73
77
|
#### Methods
|
|
74
78
|
|
|
75
|
-
| Method
|
|
76
|
-
|
|
77
|
-
| `prepareSvg(): Promise<void>`
|
|
78
|
-
| `draw(profile:
|
|
79
|
-
| `renderLegend(selector: string, profile: Well): void`
|
|
79
|
+
| Method | Description |
|
|
80
|
+
| ------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------- |
|
|
81
|
+
| `prepareSvg(): Promise<void>` | Initialise SVG DOM structure and preload FGDC textures. Call once before the first `draw`. |
|
|
82
|
+
| `draw(profile: RenderableWell, options?: { units?: Units; locale?: 'en' \| 'pt'; highlights?: Highlights }): void` | Render or re-render the full well profile. |
|
|
83
|
+
| `renderLegend(selector: string, profile: Well): void` | Render a standalone legend into a separate SVG. |
|
|
84
|
+
| `zoomBy(factor: number): void` | Multiply the current zoom scale by `factor` (e.g. `1.25` in, `1 / 1.25` out). No-op if `zoom`/`pan` are both disabled. |
|
|
85
|
+
| `resetZoom(): void` | Reset zoom/pan back to `renderConfig.zoomLevel` (default `1` — the initial fit-to-container view). |
|
|
86
|
+
| `getZoomScale(): number` | Current zoom scale of the first panel (`1` = initial/fit). |
|
|
87
|
+
|
|
88
|
+
`RenderableWell` extends `Well` with an optional `key` field on each feature array element, enabling stable D3 data-join keys across re-renders. A plain `Well` object is directly assignable to `RenderableWell`. **`key` is runtime-only** — keep it in memory across edits for stable animation, but strip it before serializing to a `.well` file.
|
|
89
|
+
|
|
90
|
+
#### Driving zoom from your own UI (zoom in/out/fit buttons)
|
|
91
|
+
|
|
92
|
+
`zoom`/`pan` (when enabled in `renderConfig`) already wire up mouse wheel and drag directly on the SVG. `zoomBy`/`resetZoom`/`getZoomScale` operate on that same internal zoom behavior, so wheel/drag and a custom toolbar stay in sync — including through the `onZoom` callback, which fires for both interaction sources. `renderConfig.minZoomScale`/`maxZoomScale` (default `0`–`150`, i.e. 0%–15000%) bound the scale for wheel, drag, and `zoomBy`/`resetZoom` alike, since they're enforced on the shared d3-zoom behavior itself rather than by any one call site.
|
|
93
|
+
|
|
94
|
+
```ts
|
|
95
|
+
const renderer = new WellRenderer(svgs, {
|
|
96
|
+
renderConfig: { ...INTERACTIVE_RENDER_CONFIG, zoom: true, pan: true },
|
|
97
|
+
onZoom: scale => updateScaleLabel(scale),
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
zoomInButton.onclick = () => renderer.zoomBy(1.25);
|
|
101
|
+
zoomOutButton.onclick = () => renderer.zoomBy(1 / 1.25);
|
|
102
|
+
fitButton.onclick = () => renderer.resetZoom();
|
|
103
|
+
```
|
|
80
104
|
|
|
81
105
|
---
|
|
82
106
|
|
|
@@ -89,8 +113,10 @@ drawWellLegend(
|
|
|
89
113
|
selector: string,
|
|
90
114
|
profile: Well,
|
|
91
115
|
options?: {
|
|
92
|
-
config?:
|
|
93
|
-
|
|
116
|
+
config?: Partial<LegendRenderConfig>;
|
|
117
|
+
theme?: Partial<WellTheme>;
|
|
118
|
+
classNames?: ComponentsClassNames['legend'];
|
|
119
|
+
textures?: TexturesConfig;
|
|
94
120
|
}
|
|
95
121
|
): void
|
|
96
122
|
```
|
|
@@ -101,42 +127,63 @@ Does nothing if the profile contains no fractures or caves.
|
|
|
101
127
|
|
|
102
128
|
### Config presets
|
|
103
129
|
|
|
104
|
-
| Export
|
|
105
|
-
|
|
130
|
+
| Export | Description |
|
|
131
|
+
| --------------------------- | -------------------------------------------------- |
|
|
106
132
|
| `INTERACTIVE_RENDER_CONFIG` | Full-featured preset: zoom, pan, animation enabled |
|
|
107
|
-
| `STATIC_RENDER_CONFIG`
|
|
108
|
-
| `DEFAULT_WELL_THEME`
|
|
133
|
+
| `STATIC_RENDER_CONFIG` | Zoom and pan disabled; suitable for static exports |
|
|
134
|
+
| `DEFAULT_WELL_THEME` | Complete default visual theme |
|
|
109
135
|
|
|
110
136
|
---
|
|
111
137
|
|
|
112
138
|
### Format utilities
|
|
113
139
|
|
|
114
|
-
| Export
|
|
115
|
-
|
|
116
|
-
| `formatLength`
|
|
117
|
-
| `formatDiameter`
|
|
118
|
-
| `getLengthUnit`
|
|
119
|
-
| `getDiameterUnit`
|
|
140
|
+
| Export | Signature | Description |
|
|
141
|
+
| -------------------- | -------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
|
|
142
|
+
| `formatLength` | `(m: number, units: LengthUnits) => string` | Depth in metres → unit-aware string |
|
|
143
|
+
| `formatDiameter` | `(mm: number, units: DiameterUnits) => string` | Diameter in mm → unit-aware string |
|
|
144
|
+
| `getLengthUnit` | `(units: LengthUnits) => string` | Returns `'m'` or `'ft'` |
|
|
145
|
+
| `getDiameterUnit` | `(units: DiameterUnits, locale?: 'en' \| 'pt') => string` | Returns `'mm'`, or `'"'`/`'in.'` for `inches` depending on `locale` (defaults to `'"'`) |
|
|
146
|
+
| `resolveRenderLabel` | `(value: RenderLocalizedText, locale: 'en' \| 'pt') => string` | Resolves a paired-locale label to a plain string, falling back to `pt` |
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
### Locale
|
|
151
|
+
|
|
152
|
+
Every string `@welldot/render` draws (tooltip titles/fields, construction-label prefixes, fracture/cave type words, legend entries) is sourced from `RenderConfig` — the `locale` constructor/`draw()` option only controls the diameter unit symbol (`getDiameterUnit`) directly. To get fully English-rendered text, resolve the package's built-in English label pack into your `RenderConfig` with `applyRenderLocale`:
|
|
153
|
+
|
|
154
|
+
```ts
|
|
155
|
+
import {
|
|
156
|
+
WellRenderer,
|
|
157
|
+
INTERACTIVE_RENDER_CONFIG,
|
|
158
|
+
applyRenderLocale,
|
|
159
|
+
} from '@welldot/render';
|
|
160
|
+
|
|
161
|
+
const renderer = new WellRenderer(svgs, {
|
|
162
|
+
units: { length: 'ft', diameter: 'inches' },
|
|
163
|
+
locale: 'en',
|
|
164
|
+
renderConfig: applyRenderLocale(INTERACTIVE_RENDER_CONFIG, 'en'),
|
|
165
|
+
});
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
`applyRenderLocale(config, locale)` returns a copy of `config` with `constructionLabels.labels`, `legend.labels`, `tooltipLabels`, and `labels.typeLabels` resolved from the package's canonical `RENDER_LABELS` pack — every other field of `config` is unchanged. `RENDER_LABELS` (and the `RenderLocalizedText`/`RenderLabelPack`/`TooltipLabels` types describing its shape) are also exported directly for consumers who want to resolve labels themselves. Omitting `locale`/`applyRenderLocale` entirely preserves the package's historical Portuguese-only output.
|
|
120
169
|
|
|
121
170
|
---
|
|
122
171
|
|
|
123
172
|
## Theming
|
|
124
173
|
|
|
125
|
-
Visual appearance is controlled by
|
|
174
|
+
Visual appearance is controlled by the `theme` option passed to `WellRenderer`. All colors, stroke widths, and opacities are defined as a `WellTheme` object. Use `DEFAULT_WELL_THEME` as a base and pass a `DeepPartial<WellTheme>` to override specific values:
|
|
126
175
|
|
|
127
176
|
```ts
|
|
128
|
-
// Override via renderConfig at construction time
|
|
129
177
|
new WellRenderer(svgs, {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
},
|
|
178
|
+
theme: {
|
|
179
|
+
lithology: { stroke: '#222222', strokeWidth: 1.5 },
|
|
180
|
+
wellCase: { fill: '#f5f5f5', stroke: '#333333', strokeWidth: 2 },
|
|
181
|
+
reduction: { fill: '#f5f5f5', stroke: '#333333', strokeWidth: 2 },
|
|
135
182
|
},
|
|
136
183
|
});
|
|
137
184
|
```
|
|
138
185
|
|
|
139
|
-
|
|
186
|
+
See `DEFAULT_WELL_THEME` in `src/configs/render.configs.ts` for all available keys.
|
|
140
187
|
|
|
141
188
|
---
|
|
142
189
|
|
|
@@ -144,6 +191,8 @@ All CSS variables (colors, stroke widths, opacities) are listed in `src/styles/m
|
|
|
144
191
|
|
|
145
192
|
`@welldot/render` renders [`Well`](https://www.npmjs.com/package/@welldot/core) objects from `@welldot/core`. See that package for the `.well` file format specification, types, and validators.
|
|
146
193
|
|
|
194
|
+
**Version requirement:** Only `.well` v2 (`version: 2`) is supported. Pass raw JSON through `deserializeWell()` from `@welldot/core` before calling `draw()` — it normalizes v1 files to v2 automatically.
|
|
195
|
+
|
|
147
196
|
---
|
|
148
197
|
|
|
149
198
|
## License
|