@fukict/basic 0.1.0 → 0.1.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 +510 -0
- package/dist/component-class/fukict.d.ts +7 -9
- package/dist/component-class/fukict.d.ts.map +1 -1
- package/dist/component-class/fukict.js +22 -20
- package/dist/component-class/fukict.js.map +1 -1
- package/dist/component-function/define.d.ts +1 -1
- package/dist/component-function/define.d.ts.map +1 -1
- package/dist/component-function/define.js +1 -4
- package/dist/component-function/define.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/metadata.d.ts +1 -1
- package/dist/metadata.js +1 -1
- package/dist/renderer/attributes.d.ts +2 -2
- package/dist/renderer/attributes.d.ts.map +1 -1
- package/dist/renderer/attributes.js +4 -14
- package/dist/renderer/attributes.js.map +1 -1
- package/dist/renderer/class-helpers.d.ts +19 -0
- package/dist/renderer/class-helpers.d.ts.map +1 -0
- package/dist/renderer/class-helpers.js +49 -0
- package/dist/renderer/class-helpers.js.map +1 -0
- package/dist/renderer/create.d.ts.map +1 -1
- package/dist/renderer/create.js +47 -43
- package/dist/renderer/create.js.map +1 -1
- package/dist/renderer/diff/class.d.ts +8 -1
- package/dist/renderer/diff/class.d.ts.map +1 -1
- package/dist/renderer/diff/class.js +14 -7
- package/dist/renderer/diff/class.js.map +1 -1
- package/dist/renderer/diff/element.d.ts.map +1 -1
- package/dist/renderer/diff/element.js +11 -7
- package/dist/renderer/diff/element.js.map +1 -1
- package/dist/renderer/diff/fragment.d.ts.map +1 -1
- package/dist/renderer/diff/fragment.js +6 -3
- package/dist/renderer/diff/fragment.js.map +1 -1
- package/dist/renderer/diff/function.d.ts.map +1 -1
- package/dist/renderer/diff/function.js +13 -12
- package/dist/renderer/diff/function.js.map +1 -1
- package/dist/renderer/diff/helpers.d.ts.map +1 -1
- package/dist/renderer/diff/helpers.js +13 -0
- package/dist/renderer/diff/helpers.js.map +1 -1
- package/dist/renderer/diff/index.d.ts.map +1 -1
- package/dist/renderer/diff/index.js +4 -0
- package/dist/renderer/diff/index.js.map +1 -1
- package/dist/renderer/diff/primitive.d.ts +12 -0
- package/dist/renderer/diff/primitive.d.ts.map +1 -0
- package/dist/renderer/diff/primitive.js +50 -0
- package/dist/renderer/diff/primitive.js.map +1 -0
- package/dist/renderer/mount.d.ts.map +1 -1
- package/dist/renderer/mount.js +30 -0
- package/dist/renderer/mount.js.map +1 -1
- package/dist/renderer/vnode-helpers.d.ts +44 -0
- package/dist/renderer/vnode-helpers.d.ts.map +1 -0
- package/dist/renderer/vnode-helpers.js +47 -0
- package/dist/renderer/vnode-helpers.js.map +1 -0
- package/dist/types/class.d.ts +25 -2
- package/dist/types/class.d.ts.map +1 -1
- package/dist/types/core.d.ts +27 -3
- package/dist/types/core.d.ts.map +1 -1
- package/dist/types/core.js +1 -0
- package/dist/types/core.js.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/vnode.d.ts +9 -3
- package/dist/vnode.d.ts.map +1 -1
- package/dist/vnode.js +71 -2
- package/dist/vnode.js.map +1 -1
- package/package.json +4 -1
package/README.md
ADDED
|
@@ -0,0 +1,510 @@
|
|
|
1
|
+
# @fukict/basic
|
|
2
|
+
|
|
3
|
+
Lightweight DOM rendering engine with compile-time optimization and zero dependencies.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Lightweight**: Core rendering engine with minimal overhead
|
|
8
|
+
- **VNode System**: Virtual DOM with efficient diff algorithm
|
|
9
|
+
- **Component Model**: Both class and function components
|
|
10
|
+
- **Lifecycle Hooks**: Full lifecycle management (mounted, beforeUnmount, etc.)
|
|
11
|
+
- **Refs Management**: Component and DOM element references
|
|
12
|
+
- **Slots System**: Children composition with named slots
|
|
13
|
+
- **Event Handling**: Optimized event delegation with `on:` prefix
|
|
14
|
+
- **TypeScript**: Complete type definitions with excellent IDE support
|
|
15
|
+
- **Zero Dependencies**: No external runtime dependencies
|
|
16
|
+
|
|
17
|
+
## Installation
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
pnpm add @fukict/basic
|
|
21
|
+
pnpm add -D @fukict/babel-preset @fukict/vite-plugin
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Quick Start
|
|
25
|
+
|
|
26
|
+
### Vite Setup
|
|
27
|
+
|
|
28
|
+
```typescript
|
|
29
|
+
// vite.config.ts
|
|
30
|
+
import fukict from '@fukict/vite-plugin';
|
|
31
|
+
|
|
32
|
+
import { defineConfig } from 'vite';
|
|
33
|
+
|
|
34
|
+
export default defineConfig({
|
|
35
|
+
plugins: [fukict()],
|
|
36
|
+
});
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### TypeScript Configuration
|
|
40
|
+
|
|
41
|
+
```json
|
|
42
|
+
{
|
|
43
|
+
"compilerOptions": {
|
|
44
|
+
"jsx": "preserve",
|
|
45
|
+
"jsxImportSource": "@fukict/basic"
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Component Types
|
|
51
|
+
|
|
52
|
+
### Class Components
|
|
53
|
+
|
|
54
|
+
Extend `Fukict` for components with lifecycle and state:
|
|
55
|
+
|
|
56
|
+
```tsx
|
|
57
|
+
import { Fukict } from '@fukict/basic';
|
|
58
|
+
|
|
59
|
+
interface CounterProps {
|
|
60
|
+
initial?: number;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
class Counter extends Fukict<CounterProps> {
|
|
64
|
+
private count = this.props.initial ?? 0;
|
|
65
|
+
private timer?: number;
|
|
66
|
+
|
|
67
|
+
increment = () => {
|
|
68
|
+
this.count++;
|
|
69
|
+
this.update(this.props);
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
mounted() {
|
|
73
|
+
console.log('Component mounted');
|
|
74
|
+
this.timer = setInterval(this.increment, 1000);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
beforeUnmount() {
|
|
78
|
+
console.log('Component will unmount');
|
|
79
|
+
clearInterval(this.timer);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
render() {
|
|
83
|
+
return (
|
|
84
|
+
<div>
|
|
85
|
+
<p>Count: {this.count}</p>
|
|
86
|
+
<button on:click={this.increment}>Increment</button>
|
|
87
|
+
</div>
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Function Components
|
|
94
|
+
|
|
95
|
+
Use `defineFukict()` for simple, stateless components:
|
|
96
|
+
|
|
97
|
+
```tsx
|
|
98
|
+
import { defineFukict } from '@fukict/basic';
|
|
99
|
+
|
|
100
|
+
interface GreetingProps {
|
|
101
|
+
name: string;
|
|
102
|
+
age?: number;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const Greeting = defineFukict<GreetingProps>(({ name, age }) => (
|
|
106
|
+
<div>
|
|
107
|
+
<h1>Hello {name}!</h1>
|
|
108
|
+
{age && <p>You are {age} years old</p>}
|
|
109
|
+
</div>
|
|
110
|
+
));
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Core API
|
|
114
|
+
|
|
115
|
+
### Rendering
|
|
116
|
+
|
|
117
|
+
```tsx
|
|
118
|
+
import { attach, replaceNode, unmount } from '@fukict/basic';
|
|
119
|
+
|
|
120
|
+
// Attach component to DOM
|
|
121
|
+
const vnode = attach(<App />, document.getElementById('app')!);
|
|
122
|
+
|
|
123
|
+
// Replace component
|
|
124
|
+
replaceNode(<NewApp />, vnode);
|
|
125
|
+
|
|
126
|
+
// Unmount component
|
|
127
|
+
unmount(vnode);
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### VNode Creation
|
|
131
|
+
|
|
132
|
+
```tsx
|
|
133
|
+
import { h, hyperscript, Fragment } from '@fukict/basic';
|
|
134
|
+
|
|
135
|
+
// Using JSX (recommended)
|
|
136
|
+
const element = <div class="container">Content</div>;
|
|
137
|
+
|
|
138
|
+
// Using hyperscript
|
|
139
|
+
const element = h('div', { class: 'container' }, ['Content']);
|
|
140
|
+
|
|
141
|
+
// Fragment
|
|
142
|
+
const list = (
|
|
143
|
+
<Fragment>
|
|
144
|
+
<li>Item 1</li>
|
|
145
|
+
<li>Item 2</li>
|
|
146
|
+
</Fragment>
|
|
147
|
+
);
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Event Handling
|
|
151
|
+
|
|
152
|
+
Use `on:` prefix for event listeners:
|
|
153
|
+
|
|
154
|
+
```tsx
|
|
155
|
+
class Form extends Fukict {
|
|
156
|
+
private value = '';
|
|
157
|
+
|
|
158
|
+
handleInput = (e: Event) => {
|
|
159
|
+
this.value = (e.target as HTMLInputElement).value;
|
|
160
|
+
this.update(this.props);
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
handleSubmit = (e: Event) => {
|
|
164
|
+
e.preventDefault();
|
|
165
|
+
console.log('Submitted:', this.value);
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
render() {
|
|
169
|
+
return (
|
|
170
|
+
<form on:submit={this.handleSubmit}>
|
|
171
|
+
<input on:input={this.handleInput} value={this.value} />
|
|
172
|
+
<button type="submit">Submit</button>
|
|
173
|
+
</form>
|
|
174
|
+
);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Refs
|
|
180
|
+
|
|
181
|
+
**Component Refs** with `fukict:ref`:
|
|
182
|
+
|
|
183
|
+
```tsx
|
|
184
|
+
class Parent extends Fukict {
|
|
185
|
+
// Type-safe refs declaration
|
|
186
|
+
declare readonly refs: {
|
|
187
|
+
child: Counter;
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
mounted() {
|
|
191
|
+
// Access child component instance directly
|
|
192
|
+
console.log('Child count:', this.refs.child?.count);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
render() {
|
|
196
|
+
return (
|
|
197
|
+
<div>
|
|
198
|
+
<Counter fukict:ref="child" />
|
|
199
|
+
<button on:click={() => this.refs.child?.increment()}>
|
|
200
|
+
Increment from parent
|
|
201
|
+
</button>
|
|
202
|
+
</div>
|
|
203
|
+
);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
**DOM Refs** with `ref` callback:
|
|
209
|
+
|
|
210
|
+
```tsx
|
|
211
|
+
class AutoFocusInput extends Fukict {
|
|
212
|
+
private inputRef?: HTMLInputElement;
|
|
213
|
+
|
|
214
|
+
mounted() {
|
|
215
|
+
this.inputRef?.focus();
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
render() {
|
|
219
|
+
return <input ref={el => (this.inputRef = el)} />;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
**Or use `fukict:ref` for DOM elements:**
|
|
225
|
+
|
|
226
|
+
```tsx
|
|
227
|
+
class AutoFocusInput extends Fukict {
|
|
228
|
+
declare readonly refs: {
|
|
229
|
+
input: HTMLInputElement;
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
mounted() {
|
|
233
|
+
this.refs.input?.focus();
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
render() {
|
|
237
|
+
return <input fukict:ref="input" />;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### Slots (Children)
|
|
243
|
+
|
|
244
|
+
```tsx
|
|
245
|
+
interface CardProps {
|
|
246
|
+
title: string;
|
|
247
|
+
footer?: string;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
class Card extends Fukict<CardProps> {
|
|
251
|
+
render() {
|
|
252
|
+
return (
|
|
253
|
+
<div class="card">
|
|
254
|
+
<div class="card-header">
|
|
255
|
+
<h2>{this.props.title}</h2>
|
|
256
|
+
</div>
|
|
257
|
+
<div class="card-body">{this.slots.default}</div>
|
|
258
|
+
{this.props.footer && (
|
|
259
|
+
<div class="card-footer">{this.props.footer}</div>
|
|
260
|
+
)}
|
|
261
|
+
</div>
|
|
262
|
+
);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
// Usage
|
|
267
|
+
<Card title="My Card" footer="Card footer">
|
|
268
|
+
<p>This is the card content</p>
|
|
269
|
+
<button>Action</button>
|
|
270
|
+
</Card>;
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### Detached Rendering
|
|
274
|
+
|
|
275
|
+
Use `fukict:detach` to prevent component from being re-rendered when parent updates:
|
|
276
|
+
|
|
277
|
+
```tsx
|
|
278
|
+
class Parent extends Fukict {
|
|
279
|
+
private count = 0;
|
|
280
|
+
|
|
281
|
+
increment = () => {
|
|
282
|
+
this.count++;
|
|
283
|
+
this.update(this.props);
|
|
284
|
+
};
|
|
285
|
+
|
|
286
|
+
render() {
|
|
287
|
+
return (
|
|
288
|
+
<div>
|
|
289
|
+
<p>Parent count: {this.count}</p>
|
|
290
|
+
{/* This component won't re-render when parent updates */}
|
|
291
|
+
<ExpensiveComponent fukict:detach={true} />
|
|
292
|
+
<button on:click={this.increment}>Increment</button>
|
|
293
|
+
</div>
|
|
294
|
+
);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
## Lifecycle Hooks
|
|
300
|
+
|
|
301
|
+
```tsx
|
|
302
|
+
class LifecycleDemo extends Fukict {
|
|
303
|
+
// Called after component is mounted to DOM
|
|
304
|
+
mounted() {
|
|
305
|
+
console.log('Mounted');
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
// Called before component is removed from DOM
|
|
309
|
+
beforeUnmount() {
|
|
310
|
+
console.log('Before unmount');
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
// Called after component updates
|
|
314
|
+
updated() {
|
|
315
|
+
console.log('Updated');
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
render() {
|
|
319
|
+
return <div>Lifecycle Demo</div>;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
## Advanced Features
|
|
325
|
+
|
|
326
|
+
### Component Update Control
|
|
327
|
+
|
|
328
|
+
```tsx
|
|
329
|
+
class OptimizedComponent extends Fukict<{ data: string }> {
|
|
330
|
+
// Manually trigger updates
|
|
331
|
+
handleChange = () => {
|
|
332
|
+
// Update with new props
|
|
333
|
+
this.update({ data: 'new data' });
|
|
334
|
+
};
|
|
335
|
+
|
|
336
|
+
render() {
|
|
337
|
+
return (
|
|
338
|
+
<div>
|
|
339
|
+
<p>{this.props.data}</p>
|
|
340
|
+
<button on:click={this.handleChange}>Change</button>
|
|
341
|
+
</div>
|
|
342
|
+
);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
### DOM Utilities
|
|
348
|
+
|
|
349
|
+
```tsx
|
|
350
|
+
import {
|
|
351
|
+
createRealNode,
|
|
352
|
+
getAllDomNodes,
|
|
353
|
+
getFirstDomNode,
|
|
354
|
+
isDomArray,
|
|
355
|
+
isVNode,
|
|
356
|
+
normalizeDom,
|
|
357
|
+
} from '@fukict/basic';
|
|
358
|
+
|
|
359
|
+
// Create DOM node from VNode
|
|
360
|
+
const vnode = <div>Hello</div>;
|
|
361
|
+
const domNode = createRealNode(vnode);
|
|
362
|
+
|
|
363
|
+
// Get DOM nodes from VNode
|
|
364
|
+
const firstNode = getFirstDomNode(vnode);
|
|
365
|
+
const allNodes = getAllDomNodes(vnode);
|
|
366
|
+
|
|
367
|
+
// Type checks
|
|
368
|
+
if (isVNode(value)) {
|
|
369
|
+
// value is a VNode
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
if (isDomArray(nodes)) {
|
|
373
|
+
// nodes is an array of DOM elements
|
|
374
|
+
}
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
### Type Definitions
|
|
378
|
+
|
|
379
|
+
```tsx
|
|
380
|
+
import type {
|
|
381
|
+
CSSProperties,
|
|
382
|
+
ClassComponentVNode,
|
|
383
|
+
ElementVNode,
|
|
384
|
+
FukictComponent,
|
|
385
|
+
FukictProps,
|
|
386
|
+
FunctionComponentVNode,
|
|
387
|
+
HTMLAttributes,
|
|
388
|
+
SVGAttributes,
|
|
389
|
+
VNode,
|
|
390
|
+
} from '@fukict/basic';
|
|
391
|
+
|
|
392
|
+
// Custom component props
|
|
393
|
+
interface MyComponentProps extends FukictProps {
|
|
394
|
+
title: string;
|
|
395
|
+
count: number;
|
|
396
|
+
onClick?: (e: MouseEvent) => void;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
// Custom element with specific attributes
|
|
400
|
+
type ButtonElement = ElementVNode & {
|
|
401
|
+
props: HTMLAttributes & {
|
|
402
|
+
type?: 'button' | 'submit' | 'reset';
|
|
403
|
+
};
|
|
404
|
+
};
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
## Performance Tips
|
|
408
|
+
|
|
409
|
+
1. **Use `fukict:detach`** for components that don't need to react to parent updates
|
|
410
|
+
2. **Minimize renders** by only calling `update()` when necessary
|
|
411
|
+
3. **Reuse components** instead of recreating them
|
|
412
|
+
4. **Event handlers** are automatically optimized with event delegation
|
|
413
|
+
5. **Refs** provide direct access to avoid unnecessary queries
|
|
414
|
+
|
|
415
|
+
## Best Practices
|
|
416
|
+
|
|
417
|
+
### Component Organization
|
|
418
|
+
|
|
419
|
+
```tsx
|
|
420
|
+
// ✅ Good: Separate concerns
|
|
421
|
+
class TodoList extends Fukict<{ items: Todo[] }> {
|
|
422
|
+
render() {
|
|
423
|
+
return (
|
|
424
|
+
<ul>
|
|
425
|
+
{this.props.items.map(item => (
|
|
426
|
+
<TodoItem item={item} />
|
|
427
|
+
))}
|
|
428
|
+
</ul>
|
|
429
|
+
);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
// ❌ Bad: Too much in one component
|
|
434
|
+
class TodoApp extends Fukict {
|
|
435
|
+
render() {
|
|
436
|
+
return <div>{/* Everything in one component */}</div>;
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
### Event Handlers
|
|
442
|
+
|
|
443
|
+
```tsx
|
|
444
|
+
// ✅ Good: Arrow function as class property
|
|
445
|
+
class Button extends Fukict {
|
|
446
|
+
handleClick = () => {
|
|
447
|
+
console.log('Clicked');
|
|
448
|
+
};
|
|
449
|
+
|
|
450
|
+
render() {
|
|
451
|
+
return <button on:click={this.handleClick}>Click</button>;
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
// ❌ Bad: Creates new function on every render
|
|
456
|
+
class Button extends Fukict {
|
|
457
|
+
render() {
|
|
458
|
+
return <button on:click={() => console.log('Clicked')}>Click</button>;
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
### Refs Usage
|
|
464
|
+
|
|
465
|
+
```tsx
|
|
466
|
+
// ✅ Good: Use refs for direct DOM access
|
|
467
|
+
class Form extends Fukict {
|
|
468
|
+
private inputRef?: HTMLInputElement;
|
|
469
|
+
|
|
470
|
+
focus() {
|
|
471
|
+
this.inputRef?.focus();
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
render() {
|
|
475
|
+
return <input ref={(el) => (this.inputRef = el)} />;
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
// ❌ Bad: Query DOM manually
|
|
480
|
+
class Form extends Fukict {
|
|
481
|
+
focus() {
|
|
482
|
+
document.querySelector('input')?.focus(); // Don't do this
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
render() {
|
|
486
|
+
return <input />;
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
## Examples
|
|
492
|
+
|
|
493
|
+
See the [examples](../../examples) directory for complete examples:
|
|
494
|
+
|
|
495
|
+
- [Basic usage](../../examples/basic-vite)
|
|
496
|
+
- [Router integration](../../examples/infra-router)
|
|
497
|
+
- [State management](../../examples/infra-flux)
|
|
498
|
+
- [Complete app](../../examples/complete)
|
|
499
|
+
|
|
500
|
+
## Related Packages
|
|
501
|
+
|
|
502
|
+
- [@fukict/babel-preset](../babel-preset) - JSX transformation (required)
|
|
503
|
+
- [@fukict/vite-plugin](../vite-plugin) - Vite integration (recommended)
|
|
504
|
+
- [@fukict/router](../router) - SPA routing
|
|
505
|
+
- [@fukict/flux](../flux) - State management
|
|
506
|
+
- [@fukict/i18n](../i18n) - Internationalization
|
|
507
|
+
|
|
508
|
+
## License
|
|
509
|
+
|
|
510
|
+
MIT
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Refs, Slots } from '../types/class.js';
|
|
2
2
|
import type { VNode, VNodeChild } from '../types/core.js';
|
|
3
3
|
import type { FukictDetachAttribute, FukictRefAttribute, FukictSlotAttribute } from '../types/dom-attributes.js';
|
|
4
4
|
/**
|
|
@@ -50,11 +50,6 @@ export type FukictComponentProps<P extends Record<string, any>> = P & BaseProps
|
|
|
50
50
|
* ```
|
|
51
51
|
*/
|
|
52
52
|
export declare abstract class Fukict<P extends Record<string, any> = {}, S extends Slots = Slots> {
|
|
53
|
-
/**
|
|
54
|
-
* Component type marker for Babel plugin
|
|
55
|
-
* @internal
|
|
56
|
-
*/
|
|
57
|
-
static readonly __COMPONENT_TYPE__: "class";
|
|
58
53
|
/**
|
|
59
54
|
* Unique component instance ID (for debugging)
|
|
60
55
|
* @internal
|
|
@@ -78,9 +73,10 @@ export declare abstract class Fukict<P extends Record<string, any> = {}, S exten
|
|
|
78
73
|
*/
|
|
79
74
|
protected slots: S;
|
|
80
75
|
/**
|
|
81
|
-
* Refs
|
|
76
|
+
* Refs object (shared with framework and user)
|
|
77
|
+
* Can be extended by subclasses with specific ref types
|
|
82
78
|
*/
|
|
83
|
-
readonly refs:
|
|
79
|
+
readonly refs: Refs;
|
|
84
80
|
/**
|
|
85
81
|
* Current rendered VNode (component's internal render result)
|
|
86
82
|
* @internal
|
|
@@ -115,8 +111,10 @@ export declare abstract class Fukict<P extends Record<string, any> = {}, S exten
|
|
|
115
111
|
constructor(props: FukictComponentProps<P>);
|
|
116
112
|
/**
|
|
117
113
|
* Render method (must be implemented by subclass)
|
|
114
|
+
*
|
|
115
|
+
* @returns VNode to render, or null/undefined to render nothing
|
|
118
116
|
*/
|
|
119
|
-
abstract render(): VNode;
|
|
117
|
+
abstract render(): VNode | null | undefined;
|
|
120
118
|
/**
|
|
121
119
|
* Provide context value at current component level
|
|
122
120
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fukict.d.ts","sourceRoot":"","sources":["../../src/component-class/fukict.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"fukict.d.ts","sourceRoot":"","sources":["../../src/component-class/fukict.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EACV,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,4BAA4B,CAAC;AAOpC;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,GACjE,SAAS,GACT,kBAAkB,GAClB,mBAAmB,GACnB,qBAAqB,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,8BAAsB,MAAM,CAC1B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,EAClC,CAAC,SAAS,KAAK,GAAG,KAAK;IAEvB;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAElD;;;;;OAKG;IACH,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;IAEnB;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAEpB;;;OAGG;IACH,SAAS,EAAE,KAAK,GAAG,IAAI,CAAC;IAExB;;;;OAIG;IACH,WAAW,EAAE,KAAK,GAAG,IAAI,CAAC;IAE1B;;;OAGG;IACH,aAAa,EAAE,OAAO,GAAG,IAAI,CAAC;IAE9B;;;OAGG;IACH,eAAe,EAAE,OAAO,GAAG,IAAI,CAAC;IAEhC;;;OAGG;IACH,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAC;IAE1B;;OAEG;gBACS,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAoB1C;;;;OAIG;IACH,QAAQ,CAAC,MAAM,IAAI,KAAK,GAAG,IAAI,GAAG,SAAS;IAE3C;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,SAAS,CAAC,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAkBjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,SAAS,CAAC,UAAU,CAAC,CAAC,EACpB,GAAG,EAAE,MAAM,GAAG,MAAM,EACpB,YAAY,CAAC,EAAE,CAAC,GACf,CAAC,GAAG,SAAS;IA4BhB;;;;;;;;OAQG;IACH,MAAM,CAAC,QAAQ,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,IAAI;IAiDhD;;OAEG;IACH,OAAO,CAAC,IAAI,IAAI;IAEhB;;OAEG;IACH,aAAa,CAAC,IAAI,IAAI;IAEtB;;OAEG;IACH,OAAO,CAAC,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,IAAI;IAElD;;;OAGG;IACH,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,IAAI;IA8BtD;;;OAGG;IACH,OAAO,IAAI,IAAI;CAiBhB"}
|
|
@@ -5,6 +5,7 @@ import { createRealNode } from '../renderer/create.js';
|
|
|
5
5
|
import { diff, removeNode } from '../renderer/diff/index.js';
|
|
6
6
|
import { activate } from '../renderer/mount.js';
|
|
7
7
|
import { createImmutableProxy, getParentContext } from '../utils/context.js';
|
|
8
|
+
import { createPrimitiveVNode } from '../vnode.js';
|
|
8
9
|
// Global component instance counter for unique IDs
|
|
9
10
|
let componentIdCounter = 0;
|
|
10
11
|
/**
|
|
@@ -44,11 +45,6 @@ let componentIdCounter = 0;
|
|
|
44
45
|
* ```
|
|
45
46
|
*/
|
|
46
47
|
export class Fukict {
|
|
47
|
-
/**
|
|
48
|
-
* Component type marker for Babel plugin
|
|
49
|
-
* @internal
|
|
50
|
-
*/
|
|
51
|
-
static __COMPONENT_TYPE__ = 'class';
|
|
52
48
|
/**
|
|
53
49
|
* Unique component instance ID (for debugging)
|
|
54
50
|
* @internal
|
|
@@ -72,7 +68,8 @@ export class Fukict {
|
|
|
72
68
|
*/
|
|
73
69
|
slots;
|
|
74
70
|
/**
|
|
75
|
-
* Refs
|
|
71
|
+
* Refs object (shared with framework and user)
|
|
72
|
+
* Can be extended by subclasses with specific ref types
|
|
76
73
|
*/
|
|
77
74
|
refs;
|
|
78
75
|
/**
|
|
@@ -112,7 +109,7 @@ export class Fukict {
|
|
|
112
109
|
this.props = props;
|
|
113
110
|
this.slots = {};
|
|
114
111
|
// Initialize instance fields (avoid field initializers for better memory efficiency)
|
|
115
|
-
this.refs =
|
|
112
|
+
this.refs = {};
|
|
116
113
|
this.__vnode__ = null;
|
|
117
114
|
this.__wrapper__ = null;
|
|
118
115
|
this.__container__ = null;
|
|
@@ -234,12 +231,16 @@ export class Fukict {
|
|
|
234
231
|
this.props = newProps;
|
|
235
232
|
}
|
|
236
233
|
// Re-render
|
|
237
|
-
const
|
|
234
|
+
const rawVNode = this.render();
|
|
235
|
+
// Wrap null/undefined as PrimitiveVNode for consistent diff handling
|
|
236
|
+
const newVNode = rawVNode === null || rawVNode === undefined
|
|
237
|
+
? createPrimitiveVNode(rawVNode)
|
|
238
|
+
: rawVNode;
|
|
238
239
|
// Preserve context from old VNode to new VNode
|
|
239
240
|
if (this.__vnode__?.__context__) {
|
|
240
241
|
newVNode.__context__ = this.__vnode__.__context__;
|
|
241
242
|
}
|
|
242
|
-
//
|
|
243
|
+
// Diff and patch (let diff handle all cases including PrimitiveVNode)
|
|
243
244
|
if (this.__vnode__ && this.__container__) {
|
|
244
245
|
diff(this.__vnode__, newVNode, this.__container__);
|
|
245
246
|
}
|
|
@@ -260,21 +261,22 @@ export class Fukict {
|
|
|
260
261
|
this.__inMounting__ = true;
|
|
261
262
|
// First render (if not already rendered)
|
|
262
263
|
if (!this.__vnode__) {
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
264
|
+
const rawVNode = this.render();
|
|
265
|
+
// Wrap null/undefined as PrimitiveVNode
|
|
266
|
+
this.__vnode__ =
|
|
267
|
+
rawVNode === null || rawVNode === undefined
|
|
268
|
+
? createPrimitiveVNode(rawVNode)
|
|
269
|
+
: rawVNode;
|
|
268
270
|
}
|
|
269
|
-
//
|
|
271
|
+
// Create real DOM for instance.__vnode__ (pass this for fukict:ref)
|
|
270
272
|
createRealNode(this.__vnode__, this);
|
|
271
|
-
//
|
|
273
|
+
// Recursively activate nested components in instance.__vnode__
|
|
272
274
|
activate({
|
|
273
275
|
vnode: this.__vnode__,
|
|
274
276
|
...(placeholder ? { placeholder } : { container }),
|
|
275
277
|
onMounted: () => {
|
|
276
278
|
this.__inMounting__ = false;
|
|
277
|
-
//
|
|
279
|
+
// Trigger mounted() hook (protected from re-entry)
|
|
278
280
|
this.mounted?.();
|
|
279
281
|
},
|
|
280
282
|
});
|
|
@@ -287,10 +289,10 @@ export class Fukict {
|
|
|
287
289
|
this.__inUnmounting__ = true;
|
|
288
290
|
this.beforeUnmount?.();
|
|
289
291
|
removeNode(this.__vnode__, this.__container__);
|
|
290
|
-
|
|
291
|
-
|
|
292
|
+
// Clear all refs (refs now store instances directly, not Ref wrappers)
|
|
293
|
+
for (const key in this.refs) {
|
|
294
|
+
delete this.refs[key];
|
|
292
295
|
}
|
|
293
|
-
this.refs.clear();
|
|
294
296
|
this.__vnode__ = null;
|
|
295
297
|
this.__container__ = null;
|
|
296
298
|
this.__inUnmounting__ = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fukict.js","sourceRoot":"","sources":["../../src/component-class/fukict.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAShD,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"fukict.js","sourceRoot":"","sources":["../../src/component-class/fukict.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,7 +30,7 @@ export type FunctionComponent<P = {}> = (props: FunctionComponentProps<P>) => VN
|
|
|
30
30
|
* ```
|
|
31
31
|
*
|
|
32
32
|
* @param fn - Function component
|
|
33
|
-
* @returns The same function with better types
|
|
33
|
+
* @returns The same function with better types
|
|
34
34
|
*/
|
|
35
35
|
export declare function defineFukict<P = {}>(fn: FunctionComponent<P>): FunctionComponent<P>;
|
|
36
36
|
//# sourceMappingURL=define.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define.d.ts","sourceRoot":"","sources":["../../src/component-function/define.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE1D;;;GAGG;AACH,MAAM,MAAM,sBAAsB,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,GAC5C,mBAAmB,GAAG;IACpB,QAAQ,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,CAAC;CACtC,CAAC;AAEJ;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,GAAG,EAAE,IAAI,CACtC,KAAK,EAAE,sBAAsB,CAAC,CAAC,CAAC,KAC7B,KAAK,GAAG,IAAI,CAAC;AAElB;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAAC,CAAC,GAAG,EAAE,EACjC,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC,GACvB,iBAAiB,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"define.d.ts","sourceRoot":"","sources":["../../src/component-function/define.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE1D;;;GAGG;AACH,MAAM,MAAM,sBAAsB,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,GAC5C,mBAAmB,GAAG;IACpB,QAAQ,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,CAAC;CACtC,CAAC;AAEJ;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,GAAG,EAAE,IAAI,CACtC,KAAK,EAAE,sBAAsB,CAAC,CAAC,CAAC,KAC7B,KAAK,GAAG,IAAI,CAAC;AAElB;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAAC,CAAC,GAAG,EAAE,EACjC,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC,GACvB,iBAAiB,CAAC,CAAC,CAAC,CAEtB"}
|