@kurot/ui 1.1.7 → 1.1.8

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 (92) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +44 -0
  3. package/dist/kurot/binding/Binding.d.ts +5 -13
  4. package/dist/kurot/binding/Binding.d.ts.map +1 -1
  5. package/dist/kurot/binding/Binding.js +7 -15
  6. package/dist/kurot/binding/Binding.js.map +1 -1
  7. package/dist/kurot/binding/Watcher.d.ts +11 -28
  8. package/dist/kurot/binding/Watcher.d.ts.map +1 -1
  9. package/dist/kurot/binding/Watcher.js +25 -46
  10. package/dist/kurot/binding/Watcher.js.map +1 -1
  11. package/dist/kurot/components/Skin.d.ts +6 -0
  12. package/dist/kurot/components/Skin.d.ts.map +1 -1
  13. package/dist/kurot/components/Skin.js +8 -0
  14. package/dist/kurot/components/Skin.js.map +1 -1
  15. package/dist/kurot/core/DefaultAssetAdapter.d.ts +1 -2
  16. package/dist/kurot/core/DefaultAssetAdapter.d.ts.map +1 -1
  17. package/dist/kurot/core/DefaultAssetAdapter.js +1 -2
  18. package/dist/kurot/core/DefaultAssetAdapter.js.map +1 -1
  19. package/dist/kurot/core/DefaultThemeAdapter.d.ts +1 -1
  20. package/dist/kurot/core/DefaultThemeAdapter.js +1 -1
  21. package/dist/kurot/core/IAssetAdapter.d.ts +3 -6
  22. package/dist/kurot/core/IAssetAdapter.d.ts.map +1 -1
  23. package/dist/kurot/core/IDisplayText.d.ts +1 -3
  24. package/dist/kurot/core/IDisplayText.d.ts.map +1 -1
  25. package/dist/kurot/core/IItemRenderer.d.ts +1 -1
  26. package/dist/kurot/core/IThemeAdapter.d.ts +2 -6
  27. package/dist/kurot/core/IThemeAdapter.d.ts.map +1 -1
  28. package/dist/kurot/core/IUIComponent.d.ts +3 -5
  29. package/dist/kurot/core/IUIComponent.d.ts.map +1 -1
  30. package/dist/kurot/core/IViewport.d.ts +1 -1
  31. package/dist/kurot/core/Theme.d.ts +9 -14
  32. package/dist/kurot/core/Theme.d.ts.map +1 -1
  33. package/dist/kurot/core/Theme.js +10 -16
  34. package/dist/kurot/core/Theme.js.map +1 -1
  35. package/dist/kurot/core/UIComponent.d.ts.map +1 -1
  36. package/dist/kurot/core/UIComponent.js +0 -2
  37. package/dist/kurot/core/UIComponent.js.map +1 -1
  38. package/dist/kurot/core/UIState.d.ts +5 -7
  39. package/dist/kurot/core/UIState.d.ts.map +1 -1
  40. package/dist/kurot/core/UIState.js +6 -13
  41. package/dist/kurot/core/UIState.js.map +1 -1
  42. package/dist/kurot/core/Validator.d.ts +4 -10
  43. package/dist/kurot/core/Validator.d.ts.map +1 -1
  44. package/dist/kurot/core/Validator.js +4 -19
  45. package/dist/kurot/core/Validator.js.map +1 -1
  46. package/dist/kurot/events/CollectionEvent.d.ts +25 -0
  47. package/dist/kurot/events/CollectionEvent.d.ts.map +1 -1
  48. package/dist/kurot/events/CollectionEvent.js +25 -0
  49. package/dist/kurot/events/CollectionEvent.js.map +1 -1
  50. package/dist/kurot/events/ItemTapEvent.d.ts +16 -0
  51. package/dist/kurot/events/ItemTapEvent.d.ts.map +1 -1
  52. package/dist/kurot/events/ItemTapEvent.js +16 -0
  53. package/dist/kurot/events/ItemTapEvent.js.map +1 -1
  54. package/dist/kurot/events/PropertyEvent.d.ts +10 -0
  55. package/dist/kurot/events/PropertyEvent.d.ts.map +1 -1
  56. package/dist/kurot/events/PropertyEvent.js +10 -0
  57. package/dist/kurot/events/PropertyEvent.js.map +1 -1
  58. package/dist/kurot/events/ScrollerThrowEvent.d.ts +9 -5
  59. package/dist/kurot/events/ScrollerThrowEvent.d.ts.map +1 -1
  60. package/dist/kurot/events/ScrollerThrowEvent.js +9 -5
  61. package/dist/kurot/events/ScrollerThrowEvent.js.map +1 -1
  62. package/dist/kurot/events/UIEvent.d.ts +5 -1
  63. package/dist/kurot/events/UIEvent.d.ts.map +1 -1
  64. package/dist/kurot/events/UIEvent.js +5 -1
  65. package/dist/kurot/events/UIEvent.js.map +1 -1
  66. package/dist/kurot/layouts/BasicLayout.d.ts +3 -3
  67. package/dist/kurot/layouts/BasicLayout.d.ts.map +1 -1
  68. package/dist/kurot/layouts/BasicLayout.js +3 -4
  69. package/dist/kurot/layouts/BasicLayout.js.map +1 -1
  70. package/dist/kurot/layouts/HorizontalLayout.d.ts +3 -7
  71. package/dist/kurot/layouts/HorizontalLayout.d.ts.map +1 -1
  72. package/dist/kurot/layouts/HorizontalLayout.js +3 -14
  73. package/dist/kurot/layouts/HorizontalLayout.js.map +1 -1
  74. package/dist/kurot/layouts/ILayoutTarget.d.ts +1 -2
  75. package/dist/kurot/layouts/ILayoutTarget.d.ts.map +1 -1
  76. package/dist/kurot/layouts/LayoutBase.d.ts +14 -2
  77. package/dist/kurot/layouts/LayoutBase.d.ts.map +1 -1
  78. package/dist/kurot/layouts/LayoutBase.js +14 -2
  79. package/dist/kurot/layouts/LayoutBase.js.map +1 -1
  80. package/dist/kurot/layouts/LinearLayoutBase.d.ts +1 -13
  81. package/dist/kurot/layouts/LinearLayoutBase.d.ts.map +1 -1
  82. package/dist/kurot/layouts/LinearLayoutBase.js +1 -14
  83. package/dist/kurot/layouts/LinearLayoutBase.js.map +1 -1
  84. package/dist/kurot/layouts/TileLayout.d.ts +4 -3
  85. package/dist/kurot/layouts/TileLayout.d.ts.map +1 -1
  86. package/dist/kurot/layouts/TileLayout.js +4 -3
  87. package/dist/kurot/layouts/TileLayout.js.map +1 -1
  88. package/dist/kurot/layouts/VerticalLayout.d.ts +3 -7
  89. package/dist/kurot/layouts/VerticalLayout.d.ts.map +1 -1
  90. package/dist/kurot/layouts/VerticalLayout.js +3 -15
  91. package/dist/kurot/layouts/VerticalLayout.js.map +1 -1
  92. package/package.json +15 -8
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Kelvin
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -245,6 +245,50 @@ class MyButtonSkin extends Skin {
245
245
  | `UIEvent.CLOSING` | `Panel` | Close button tapped (cancelable) |
246
246
  | `UIEvent.CREATION_COMPLETE` | Any `Component` | First `createChildren` completed |
247
247
 
248
+ ## UI Benchmark
249
+
250
+ The UI package includes three deterministic browser workloads: a 400-node
251
+ static skin, transform/alpha animation across 240 UI nodes, and a 10,000-record
252
+ virtual list. They measure frame/render time, draw calls, validation-phase
253
+ activity, and ItemRenderer creation/reuse.
254
+
255
+ Validation counters cover measured frames. Renderer creation/reuse and maximum
256
+ live-renderer counts cover the complete scenario, including warmup, so the
257
+ report can distinguish a stable pool from per-frame renderer churn.
258
+
259
+ The first complete Chromium run used 60 warmup frames and 300 measured frames:
260
+
261
+ | Workload | Setup | Frame P95 | Render P95 | Draw calls | UI lifecycle result |
262
+ | -------- | ----: | --------: | ---------: | ---------: | ------------------- |
263
+ | 400-node static image UI | 8.50 ms | 10.20 ms | 0.20 ms | 1 | No repeated validation after stabilization |
264
+ | 240-node transform/alpha animation | 3.90 ms | 10.00 ms | 0.30 ms | 1 | No measure or display-list validation |
265
+ | 10,000-record virtual list | 6.90 ms | 9.90 ms | 0.50 ms | 5 | 19 renderers created and at most 19 live |
266
+
267
+ The transform workload recorded 72,000 `commitProperties` calls: 240 moving UI
268
+ nodes × 300 measured frames. Multiple property changes on the same component
269
+ were coalesced to one property commit per frame. Under the current UI contract,
270
+ position changes participate in parent layout/content-bound invalidation, so
271
+ this is expected bookkeeping rather than 72,000 measurements, layouts, texture
272
+ uploads, or draw calls. The workload still remained one draw call and triggered
273
+ zero `measure` and zero `updateDisplayList` calls during measurement.
274
+
275
+ These results show that the core batching path reaches the UI layer, stable UI
276
+ does not continue validating, and virtual layout bounds renderer population by
277
+ the visible window. They are scoped results from one Chromium environment, not
278
+ a cross-device performance guarantee or a comparison with another UI framework.
279
+
280
+ ```sh
281
+ pnpm benchmark
282
+ pnpm benchmark:smoke
283
+ pnpm benchmark:compare
284
+ ```
285
+
286
+ `benchmark` starts the visual page at `/benchmark/`. `benchmark:smoke` verifies
287
+ all scenarios quickly, while `benchmark:compare` runs 60 warmup and 300 measured
288
+ frames per scenario and writes local JSON/Markdown results under
289
+ `examples/benchmark/results/`. This is a Kurot UI self-baseline, not a
290
+ cross-framework ranking.
291
+
248
292
  ## Differences from Egret EUI
249
293
 
250
294
  | | Egret EUI | @kurot/ui |
@@ -1,10 +1,7 @@
1
1
  import { Watcher } from './Watcher.js';
2
2
  /**
3
- * Binding static utility class for data binding.
4
- *
5
- * - `bindProperty(host, chain, target, prop)` — binds `host.chain` → `target.prop`
6
- * - `bindHandler(host, chain, handler, thisObject)` — calls `handler(value)` on change
7
- * - `bindProperties(host, templates, chainIndex, target, prop)` — template-string binding
3
+ * Creates reactive property-chain bindings.
4
+ * Binding hosts must dispatch property-change events for observed properties.
8
5
  */
9
6
  export declare class Binding {
10
7
  /**
@@ -12,7 +9,6 @@ export declare class Binding {
12
9
  *
13
10
  * ```ts
14
11
  * Binding.bindProperty(user, ['name'], label, 'text');
15
- * // label.text === user.name; auto-updates when user dispatches PropertyChange
16
12
  * ```
17
13
  */
18
14
  static bindProperty(host: unknown, chain: string[], target: unknown, prop: string): Watcher | undefined;
@@ -20,18 +16,14 @@ export declare class Binding {
20
16
  * Binds a property chain on `host` to a handler function.
21
17
  *
22
18
  * ```ts
23
- * Binding.bindHandler(user, ['name'], (v) => console.log(v), null);
19
+ * Binding.bindHandler(user, ['name'], value => console.log(value), undefined);
24
20
  * ```
25
21
  */
26
22
  static bindHandler(host: unknown, chain: string[], handler: (value: unknown) => void, thisObject: unknown): Watcher | undefined;
27
23
  /**
28
- * Template-string binding used by EXML compiler.
24
+ * Binds a mixture of literal values and property chains to a string property.
29
25
  *
30
- * `templates` is a mixed array of literal strings and `Watcher` instances.
31
- * `chainIndex` marks which entries are dynamic (property chains).
32
- *
33
- * The result is the string concatenation of all template values, written
34
- * to `target[prop]`.
26
+ * `chainIndex` identifies entries in `templates` that contain property chains.
35
27
  */
36
28
  static bindProperties(host: unknown, templates: unknown[], chainIndex: number[], target: unknown, prop: string): Watcher | undefined;
37
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Binding.d.ts","sourceRoot":"","sources":["../../../src/kurot/binding/Binding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC;;;;;;GAMG;AACH,qBAAa,OAAO;IACnB;;;;;;;OAOG;WACW,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAY9G;;;;;;OAMG;WACW,WAAW,CACxB,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,EACjC,UAAU,EAAE,OAAO,GACjB,OAAO,GAAG,SAAS;IAQtB;;;;;;;;OAQG;WACW,cAAc,CAC3B,IAAI,EAAE,OAAO,EACb,SAAS,EAAE,OAAO,EAAE,EACpB,UAAU,EAAE,MAAM,EAAE,EACpB,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,MAAM,GACV,OAAO,GAAG,SAAS;CAgCtB"}
1
+ {"version":3,"file":"Binding.d.ts","sourceRoot":"","sources":["../../../src/kurot/binding/Binding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC;;;GAGG;AACH,qBAAa,OAAO;IACnB;;;;;;OAMG;WACW,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAY9G;;;;;;OAMG;WACW,WAAW,CACxB,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,EACjC,UAAU,EAAE,OAAO,GACjB,OAAO,GAAG,SAAS;IAQtB;;;;OAIG;WACW,cAAc,CAC3B,IAAI,EAAE,OAAO,EACb,SAAS,EAAE,OAAO,EAAE,EACpB,UAAU,EAAE,MAAM,EAAE,EACpB,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,MAAM,GACV,OAAO,GAAG,SAAS;CAgCtB"}
@@ -1,10 +1,7 @@
1
1
  import { Watcher } from './Watcher.js';
2
2
  /**
3
- * Binding static utility class for data binding.
4
- *
5
- * - `bindProperty(host, chain, target, prop)` — binds `host.chain` → `target.prop`
6
- * - `bindHandler(host, chain, handler, thisObject)` — calls `handler(value)` on change
7
- * - `bindProperties(host, templates, chainIndex, target, prop)` — template-string binding
3
+ * Creates reactive property-chain bindings.
4
+ * Binding hosts must dispatch property-change events for observed properties.
8
5
  */
9
6
  export class Binding {
10
7
  /**
@@ -12,11 +9,10 @@ export class Binding {
12
9
  *
13
10
  * ```ts
14
11
  * Binding.bindProperty(user, ['name'], label, 'text');
15
- * // label.text === user.name; auto-updates when user dispatches PropertyChange
16
12
  * ```
17
13
  */
18
14
  static bindProperty(host, chain, target, prop) {
19
- const watcher = Watcher.watch(host, chain, undefined, undefined);
15
+ const watcher = Watcher.watch(host, chain);
20
16
  if (watcher) {
21
17
  const assign = (value) => {
22
18
  target[prop] = value;
@@ -30,7 +26,7 @@ export class Binding {
30
26
  * Binds a property chain on `host` to a handler function.
31
27
  *
32
28
  * ```ts
33
- * Binding.bindHandler(user, ['name'], (v) => console.log(v), null);
29
+ * Binding.bindHandler(user, ['name'], value => console.log(value), undefined);
34
30
  * ```
35
31
  */
36
32
  static bindHandler(host, chain, handler, thisObject) {
@@ -41,13 +37,9 @@ export class Binding {
41
37
  return watcher;
42
38
  }
43
39
  /**
44
- * Template-string binding used by EXML compiler.
40
+ * Binds a mixture of literal values and property chains to a string property.
45
41
  *
46
- * `templates` is a mixed array of literal strings and `Watcher` instances.
47
- * `chainIndex` marks which entries are dynamic (property chains).
48
- *
49
- * The result is the string concatenation of all template values, written
50
- * to `target[prop]`.
42
+ * `chainIndex` identifies entries in `templates` that contain property chains.
51
43
  */
52
44
  static bindProperties(host, templates, chainIndex, target, prop) {
53
45
  if (templates.length === 1 && chainIndex.length === 1) {
@@ -61,7 +53,7 @@ export class Binding {
61
53
  const element = templates[index];
62
54
  let watcher;
63
55
  if (typeof element === 'string') {
64
- watcher = Watcher.watch(host, element.split('.'), undefined, undefined);
56
+ watcher = Watcher.watch(host, element.split('.'));
65
57
  }
66
58
  else if (element instanceof Watcher) {
67
59
  watcher = element;
@@ -1 +1 @@
1
- {"version":3,"file":"Binding.js","sourceRoot":"","sources":["../../../src/kurot/binding/Binding.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Binding.js","sourceRoot":"","sources":["../../../src/kurot/binding/Binding.ts"],"names":[],"mappings":"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"}
@@ -1,48 +1,32 @@
1
1
  import type { IEventDispatcher } from '@kurot/core';
2
2
  /**
3
- * An object that can both dispatch {@link PropertyEvent.PROPERTY_CHANGE} and be
4
- * read by arbitrary property name (i.e. it is a record of named bindable values).
5
- *
6
- * This is the minimal contract a binding host must satisfy. In practice every
7
- * host is an {@link EventDispatcher} subclass (Skin, Component, Group, …) whose
8
- * own properties are mutated and then announced via
9
- * {@link PropertyEvent.dispatchPropertyEvent}. The index signature models that
10
- * dynamic access without forcing every host through `as unknown as Record<…>`.
3
+ * Event dispatcher whose properties can be observed by name.
11
4
  */
12
5
  export type Bindable = IEventDispatcher & Record<string, unknown>;
13
6
  /**
14
- * Watcher monitors a property (or property chain) on a host object.
15
- * When the property changes (via {@link PropertyEvent}), the registered
16
- * handler is invoked with the new value.
7
+ * Observes a property chain and reports changes to its leaf value.
17
8
  *
18
- * Create instances via the static {@link Watcher.watch} method — do not use the
19
- * constructor directly.
9
+ * Each object in the chain must dispatch
10
+ * {@link PropertyEvent.PROPERTY_CHANGE} when an observed property changes.
20
11
  */
21
12
  export declare class Watcher {
22
- private _host?;
23
13
  private readonly _property;
14
+ private readonly _next?;
15
+ private _host?;
24
16
  private _handler?;
25
17
  private _thisObject;
26
- private readonly _next?;
27
18
  private _isExecuting;
28
- constructor(property: string, handler: ((value: unknown) => void) | undefined, thisObject: unknown, next: Watcher | undefined);
19
+ private _onPropertyChange;
20
+ constructor(property: string, handler?: (value: unknown) => void, thisObject?: unknown, next?: Watcher);
29
21
  /**
30
22
  * Creates and starts a Watcher for a property chain.
23
+ * Returns `undefined` when the chain is empty.
31
24
  *
32
25
  * ```ts
33
- * // watches host.a.b.c
34
- * Watcher.watch(host, ['a', 'b', 'c'], (value) => { ... }, this);
26
+ * Watcher.watch(host, ['profile', 'name'], value => updateName(value));
35
27
  * ```
36
- *
37
- * @param host Root object hosting the chain. Must dispatch
38
- * `PropertyEvent.PROPERTY_CHANGE` when its bindable
39
- * properties change (i.e. implement `IEventDispatcher`).
40
- * @param chain Property names forming the chain, e.g. `['a','b','c']`.
41
- * @param handler Called with the new leaf value whenever the chain changes.
42
- * @param thisObject `this` context for the handler.
43
- * @returns The head Watcher, or `undefined` if `chain` is empty.
44
28
  */
45
- static watch(host: IEventDispatcher | undefined, chain: string[], handler: ((value: unknown) => void) | undefined, thisObject: unknown): Watcher | undefined;
29
+ static watch(host: IEventDispatcher | undefined, chain: string[], handler?: (value: unknown) => void, thisObject?: unknown): Watcher | undefined;
46
30
  getValue(): unknown;
47
31
  setHandler(handler: (value: unknown) => void, thisObject: unknown): void;
48
32
  /**
@@ -52,6 +36,5 @@ export declare class Watcher {
52
36
  reset(newHost: IEventDispatcher | undefined): void;
53
37
  unwatch(): void;
54
38
  private _getHostPropertyValue;
55
- private _onPropertyChange;
56
39
  }
57
40
  //# sourceMappingURL=Watcher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Watcher.d.ts","sourceRoot":"","sources":["../../../src/kurot/binding/Watcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG3D;;;;;;;;;GASG;AACH,MAAM,MAAM,QAAQ,GAAG,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAElE;;;;;;;GAOG;AACH,qBAAa,OAAO;IAGnB,OAAO,CAAC,KAAK,CAAC,CAAW;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,CAA2B;IAC5C,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAU;IACjC,OAAO,CAAC,YAAY,CAAS;gBAK5B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,SAAS,EAC/C,UAAU,EAAE,OAAO,EACnB,IAAI,EAAE,OAAO,GAAG,SAAS;IAU1B;;;;;;;;;;;;;;;OAeG;WACW,KAAK,CAClB,IAAI,EAAE,gBAAgB,GAAG,SAAS,EAClC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,SAAS,EAC/C,UAAU,EAAE,OAAO,GACjB,OAAO,GAAG,SAAS;IAUf,QAAQ,IAAI,OAAO;IAKnB,UAAU,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,EAAE,UAAU,EAAE,OAAO,GAAG,IAAI;IAM/E;;;OAGG;IACI,KAAK,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,GAAG,IAAI;IAsBlD,OAAO,IAAI,IAAI;IAQtB,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,iBAAiB,CAmBvB;CACF"}
1
+ {"version":3,"file":"Watcher.d.ts","sourceRoot":"","sources":["../../../src/kurot/binding/Watcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG3D;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAElE;;;;;GAKG;AACH,qBAAa,OAAO;IAGnB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAU;IAEpC,OAAO,CAAC,KAAK,CAAC,CAAW;IACzB,OAAO,CAAC,QAAQ,CAAC,CAA2B;IAC5C,OAAO,CAAC,WAAW,CAAU;IAC1B,OAAO,CAAC,YAAY,CAAS;IAEhC,OAAO,CAAC,iBAAiB,CAcvB;gBAKD,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,EAClC,UAAU,CAAC,EAAE,OAAO,EACpB,IAAI,CAAC,EAAE,OAAO;IAUf;;;;;;;OAOG;WACW,KAAK,CAClB,IAAI,EAAE,gBAAgB,GAAG,SAAS,EAClC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,EAClC,UAAU,CAAC,EAAE,OAAO,GAClB,OAAO,GAAG,SAAS;IAUf,QAAQ,IAAI,OAAO;IAKnB,UAAU,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,EAAE,UAAU,EAAE,OAAO,GAAG,IAAI;IAM/E;;;OAGG;IACI,KAAK,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,GAAG,IAAI;IAgBlD,OAAO,IAAI,IAAI;IAQtB,OAAO,CAAC,qBAAqB;CAG7B"}
@@ -1,20 +1,36 @@
1
1
  import { PropertyEvent } from '../events/PropertyEvent.js';
2
2
  /**
3
- * Watcher monitors a property (or property chain) on a host object.
4
- * When the property changes (via {@link PropertyEvent}), the registered
5
- * handler is invoked with the new value.
3
+ * Observes a property chain and reports changes to its leaf value.
6
4
  *
7
- * Create instances via the static {@link Watcher.watch} method — do not use the
8
- * constructor directly.
5
+ * Each object in the chain must dispatch
6
+ * {@link PropertyEvent.PROPERTY_CHANGE} when an observed property changes.
9
7
  */
10
8
  export class Watcher {
11
9
  // ── Instance fields ───────────────────────────────────────────────────
12
- _host;
13
10
  _property;
11
+ _next;
12
+ _host;
14
13
  _handler;
15
14
  _thisObject;
16
- _next;
17
15
  _isExecuting = false;
16
+ _onPropertyChange = (event) => {
17
+ if (!(event instanceof PropertyEvent))
18
+ return;
19
+ if (event.property !== this._property || this._isExecuting)
20
+ return;
21
+ try {
22
+ this._isExecuting = true;
23
+ if (this._next) {
24
+ this._next.reset(this._getHostPropertyValue());
25
+ }
26
+ if (this._handler) {
27
+ this._handler.call(this._thisObject, this.getValue());
28
+ }
29
+ }
30
+ finally {
31
+ this._isExecuting = false;
32
+ }
33
+ };
18
34
  // ── Constructor ───────────────────────────────────────────────────────
19
35
  constructor(property, handler, thisObject, next) {
20
36
  this._property = property;
@@ -25,19 +41,11 @@ export class Watcher {
25
41
  // ── Public methods ────────────────────────────────────────────────────
26
42
  /**
27
43
  * Creates and starts a Watcher for a property chain.
44
+ * Returns `undefined` when the chain is empty.
28
45
  *
29
46
  * ```ts
30
- * // watches host.a.b.c
31
- * Watcher.watch(host, ['a', 'b', 'c'], (value) => { ... }, this);
47
+ * Watcher.watch(host, ['profile', 'name'], value => updateName(value));
32
48
  * ```
33
- *
34
- * @param host Root object hosting the chain. Must dispatch
35
- * `PropertyEvent.PROPERTY_CHANGE` when its bindable
36
- * properties change (i.e. implement `IEventDispatcher`).
37
- * @param chain Property names forming the chain, e.g. `['a','b','c']`.
38
- * @param handler Called with the new leaf value whenever the chain changes.
39
- * @param thisObject `this` context for the handler.
40
- * @returns The head Watcher, or `undefined` if `chain` is empty.
41
49
  */
42
50
  static watch(host, chain, handler, thisObject) {
43
51
  if (chain.length === 0)
@@ -68,12 +76,6 @@ export class Watcher {
68
76
  if (this._host) {
69
77
  this._host.removeEventListener(PropertyEvent.PROPERTY_CHANGE, this._onPropertyChange);
70
78
  }
71
- // The cast is unavoidable: `IEventDispatcher` (core) is not generic over
72
- // a property map, so TS cannot know the host also exposes bindable own
73
- // properties by name. `Bindable` only adds an index signature on top of
74
- // `IEventDispatcher` — it models what every real host (Skin, Component,
75
- // Group) already does at runtime. This is the single place the engine
76
- // bridges the event-dispatcher contract and dynamic property access.
77
79
  this._host = newHost;
78
80
  if (this._host) {
79
81
  this._host.addEventListener(PropertyEvent.PROPERTY_CHANGE, this._onPropertyChange);
@@ -92,28 +94,5 @@ export class Watcher {
92
94
  _getHostPropertyValue() {
93
95
  return this._host ? this._host[this._property] : undefined;
94
96
  }
95
- _onPropertyChange = (e) => {
96
- // `e` arrives as `Event` because the listener is registered through the
97
- // `IEventDispatcher` interface, whose signature is not generic over an
98
- // EventMap (core 1.0 limitation). The dispatcher always uses
99
- // `PropertyEvent.dispatchPropertyEvent`, which constructs a
100
- // `PropertyEvent`, so the runtime type is guaranteed.
101
- if (!(e instanceof PropertyEvent))
102
- return;
103
- if (e.property !== this._property || this._isExecuting)
104
- return;
105
- try {
106
- this._isExecuting = true;
107
- if (this._next) {
108
- this._next.reset(this._getHostPropertyValue());
109
- }
110
- if (this._handler) {
111
- this._handler.call(this._thisObject, this.getValue());
112
- }
113
- }
114
- finally {
115
- this._isExecuting = false;
116
- }
117
- };
118
97
  }
119
98
  //# sourceMappingURL=Watcher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Watcher.js","sourceRoot":"","sources":["../../../src/kurot/binding/Watcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Watcher.js","sourceRoot":"","sources":["../../../src/kurot/binding/Watcher.ts"],"names":[],"mappings":"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"}
@@ -49,6 +49,12 @@ export declare class Skin extends EventDispatcher<SkinEvents> {
49
49
  * Get a skin part by name. Used by Component to bind parts.
50
50
  */
51
51
  getPart(name: string): unknown;
52
+ /**
53
+ * Set a skin part by name. Write-side counterpart to {@link getPart},
54
+ * used by programmatic materializers to install parts whose names come
55
+ * from authored data and therefore cannot be declared as class fields.
56
+ */
57
+ setPart(name: string, value: DisplayObject): void;
52
58
  /**
53
59
  * Unwatch every binding created from this skin.
54
60
  * Called by the host component when the skin is detached or replaced
@@ -1 +1 @@
1
- {"version":3,"file":"Skin.d.ts","sourceRoot":"","sources":["../../../src/kurot/components/Skin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAS,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,QAAQ;IAC3C,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,aAAa,CAAC;CAC/C;AAED;;;;;;;;;;GAUG;AACH,qBAAa,IAAK,SAAQ,eAAe,CAAC,UAAU,CAAC;IAG7C,SAAS,EAAE,MAAM,EAAE,CAAM;IACzB,KAAK,EAAE,MAAM,CAAO;IACpB,MAAM,EAAE,MAAM,CAAO;IACrB,QAAQ,EAAE,MAAM,CAAK;IACrB,QAAQ,EAAE,MAAM,CAAU;IAC1B,SAAS,EAAE,MAAM,CAAK;IACtB,SAAS,EAAE,MAAM,CAAU;IAC3B,MAAM,EAAE,KAAK,EAAE,CAAM;IAE5B;;;;OAIG;IACI,SAAS,EAAE,OAAO,EAAE,CAAM;IAEjC,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,cAAc,CAAC,CAAY;IACnC,OAAO,CAAC,aAAa,CAAM;IAC3B,OAAO,CAAC,iBAAiB,CAAS;IAIlC,IAAW,eAAe,IAAI,aAAa,EAAE,CAE5C;IAED,IAAW,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE,EAEhD;IAED,IAAW,aAAa,IAAI,SAAS,GAAG,SAAS,CAEhD;IAED,IAAW,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,EAuBpD;IAED,IAAW,YAAY,IAAI,MAAM,CAEhC;IAED,IAAW,YAAY,CAAC,KAAK,EAAE,MAAM,EAOpC;IAID;;OAEG;IACI,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIrC;;;;OAIG;IACI,UAAU,IAAI,IAAI;IASlB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAM3C,OAAO,CAAC,mBAAmB,CAEzB;IAEF,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,YAAY;CAOpB"}
1
+ {"version":3,"file":"Skin.d.ts","sourceRoot":"","sources":["../../../src/kurot/components/Skin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAS,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,QAAQ;IAC3C,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,aAAa,CAAC;CAC/C;AAED;;;;;;;;;;GAUG;AACH,qBAAa,IAAK,SAAQ,eAAe,CAAC,UAAU,CAAC;IAG7C,SAAS,EAAE,MAAM,EAAE,CAAM;IACzB,KAAK,EAAE,MAAM,CAAO;IACpB,MAAM,EAAE,MAAM,CAAO;IACrB,QAAQ,EAAE,MAAM,CAAK;IACrB,QAAQ,EAAE,MAAM,CAAU;IAC1B,SAAS,EAAE,MAAM,CAAK;IACtB,SAAS,EAAE,MAAM,CAAU;IAC3B,MAAM,EAAE,KAAK,EAAE,CAAM;IAE5B;;;;OAIG;IACI,SAAS,EAAE,OAAO,EAAE,CAAM;IAEjC,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,cAAc,CAAC,CAAY;IACnC,OAAO,CAAC,aAAa,CAAM;IAC3B,OAAO,CAAC,iBAAiB,CAAS;IAIlC,IAAW,eAAe,IAAI,aAAa,EAAE,CAE5C;IAED,IAAW,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE,EAEhD;IAED,IAAW,aAAa,IAAI,SAAS,GAAG,SAAS,CAEhD;IAED,IAAW,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,EAuBpD;IAED,IAAW,YAAY,IAAI,MAAM,CAEhC;IAED,IAAW,YAAY,CAAC,KAAK,EAAE,MAAM,EAOpC;IAID;;OAEG;IACI,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIrC;;;;OAIG;IACI,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI;IAIxD;;;;OAIG;IACI,UAAU,IAAI,IAAI;IASlB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAM3C,OAAO,CAAC,mBAAmB,CAEzB;IAEF,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,YAAY;CAOpB"}
@@ -82,6 +82,14 @@ export class Skin extends EventDispatcher {
82
82
  getPart(name) {
83
83
  return this[name];
84
84
  }
85
+ /**
86
+ * Set a skin part by name. Write-side counterpart to {@link getPart},
87
+ * used by programmatic materializers to install parts whose names come
88
+ * from authored data and therefore cannot be declared as class fields.
89
+ */
90
+ setPart(name, value) {
91
+ this[name] = value;
92
+ }
85
93
  /**
86
94
  * Unwatch every binding created from this skin.
87
95
  * Called by the host component when the skin is detached or replaced
@@ -1 +1 @@
1
- {"version":3,"file":"Skin.js","sourceRoot":"","sources":["../../../src/kurot/components/Skin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Skin.js","sourceRoot":"","sources":["../../../src/kurot/components/Skin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAiB,KAAK,EAAiB,MAAM,aAAa,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAY3D;;;;;;;;;;GAUG;AACH,MAAM,OAAO,IAAK,SAAQ,eAA2B;IACpD,yEAAyE;IAElE,SAAS,GAAa,EAAE,CAAC;IACzB,KAAK,GAAW,GAAG,CAAC;IACpB,MAAM,GAAW,GAAG,CAAC;IACrB,QAAQ,GAAW,CAAC,CAAC;IACrB,QAAQ,GAAW,MAAM,CAAC;IAC1B,SAAS,GAAW,CAAC,CAAC;IACtB,SAAS,GAAW,MAAM,CAAC;IAC3B,MAAM,GAAY,EAAE,CAAC;IAE5B;;;;OAIG;IACI,SAAS,GAAc,EAAE,CAAC;IAEzB,gBAAgB,GAAoB,EAAE,CAAC;IACvC,cAAc,CAAa;IAC3B,aAAa,GAAG,EAAE,CAAC;IACnB,iBAAiB,GAAG,KAAK,CAAC;IAElC,yEAAyE;IAEzE,IAAW,eAAe;QACzB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC9B,CAAC;IAED,IAAW,eAAe,CAAC,KAAsB;QAChD,IAAI,CAAC,gBAAgB,GAAG,KAAK,IAAI,EAAE,CAAC;IACrC,CAAC;IAED,IAAW,aAAa;QACvB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC5B,CAAC;IAED,IAAW,aAAa,CAAC,KAA4B;QACpD,IAAI,IAAI,CAAC,cAAc,KAAK,KAAK;YAAE,OAAO;QAE1C,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC;QACpC,IAAI,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAC5E,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC5B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;gBAC/C,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;YAChC,CAAC;QACF,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAE5B,IAAI,KAAK,EAAE,CAAC;YACX,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBACjB,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACP,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAC5D,CAAC;QACF,CAAC;QAED,aAAa,CAAC,qBAAqB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IAC5D,CAAC;IAED,IAAW,YAAY;QACtB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC3B,CAAC;IAED,IAAW,YAAY,CAAC,KAAa;QACpC,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK;YAAE,OAAO;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC;QAC/B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACnD,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9B,CAAC;IACF,CAAC;IAED,yEAAyE;IAEzE;;OAEG;IACI,OAAO,CAAC,IAAY;QAC1B,OAAQ,IAAgC,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IAED;;;;OAIG;IACI,OAAO,CAAC,IAAY,EAAE,KAAoB;QAC/C,IAAgC,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IACjD,CAAC;IAED;;;;OAIG;IACI,UAAU;QAChB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACtC,OAAO,CAAC,OAAO,EAAE,CAAC;YACnB,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3B,CAAC;IACF,CAAC;IAEM,QAAQ,CAAC,SAAiB;QAChC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IACpD,CAAC;IAED,yEAAyE;IAEjE,mBAAmB,GAAG,GAAS,EAAE;QACxC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC1B,CAAC,CAAC;IAEM,iBAAiB;QACxB,IAAI,IAAI,CAAC,iBAAiB;YAAE,OAAO;QACnC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1C,CAAC;IAEO,WAAW,CAAC,SAAiB,EAAE,OAAe;QACrD,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAErD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QAC7D,IAAI,QAAQ,EAAE,CAAC;YACd,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;gBAC3C,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,cAAe,EAAE,IAAI,CAAC,CAAC;YAC7C,CAAC;QACF,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;QAC3D,IAAI,QAAQ,EAAE,CAAC;YACd,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;gBAC3C,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,cAAe,EAAE,IAAI,CAAC,CAAC;YAC5C,CAAC;QACF,CAAC;IACF,CAAC;IAEO,YAAY,CAAC,SAAiB,EAAE,IAAe;QACtD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACxC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7B,CAAC;IACF,CAAC;CACD"}
@@ -1,8 +1,7 @@
1
1
  import { Texture } from '@kurot/core';
2
2
  import type { IAssetAdapter } from './IAssetAdapter.js';
3
3
  /**
4
- * Default asset adapter that loads images via ImageLoader and
5
- * resolves them to Texture instances.
4
+ * Loads image assets as textures with {@link ImageLoader}.
6
5
  */
7
6
  export declare class DefaultAssetAdapter implements IAssetAdapter {
8
7
  getAsset(source: string, callback: (content: Texture | undefined, source: string) => void): void;
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultAssetAdapter.d.ts","sourceRoot":"","sources":["../../../src/kurot/core/DefaultAssetAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAsB,MAAM,aAAa,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,aAAa;IAGjD,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;CAavG"}
1
+ {"version":3,"file":"DefaultAssetAdapter.d.ts","sourceRoot":"","sources":["../../../src/kurot/core/DefaultAssetAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAsB,MAAM,aAAa,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD;;GAEG;AACH,qBAAa,mBAAoB,YAAW,aAAa;IAGjD,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;CAavG"}
@@ -1,7 +1,6 @@
1
1
  import { Texture, ImageLoader, Event } from '@kurot/core';
2
2
  /**
3
- * Default asset adapter that loads images via ImageLoader and
4
- * resolves them to Texture instances.
3
+ * Loads image assets as textures with {@link ImageLoader}.
5
4
  */
6
5
  export class DefaultAssetAdapter {
7
6
  // ── Public methods ────────────────────────────────────────────────────
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultAssetAdapter.js","sourceRoot":"","sources":["../../../src/kurot/core/DefaultAssetAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAG1D;;;GAGG;AACH,MAAM,OAAO,mBAAmB;IAC/B,yEAAyE;IAElE,QAAQ,CAAC,MAAc,EAAE,QAAgE;QAC/F,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QACjC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAS,EAAE;YAClD,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBAClB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gBAC5B,OAAO;YACR,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;YAC9B,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC;CACD"}
1
+ {"version":3,"file":"DefaultAssetAdapter.js","sourceRoot":"","sources":["../../../src/kurot/core/DefaultAssetAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAG1D;;GAEG;AACH,MAAM,OAAO,mBAAmB;IAC/B,yEAAyE;IAElE,QAAQ,CAAC,MAAc,EAAE,QAAgE;QAC/F,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QACjC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAS,EAAE;YAClD,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBAClB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gBAC5B,OAAO;YACR,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;YAC9B,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC;CACD"}
@@ -1,6 +1,6 @@
1
1
  import type { IThemeAdapter } from './IThemeAdapter.js';
2
2
  /**
3
- * Default theme adapter that loads theme configuration files via fetch().
3
+ * Loads theme configuration files with `fetch`.
4
4
  */
5
5
  export declare class DefaultThemeAdapter implements IThemeAdapter {
6
6
  getTheme(url: string, onSuccess: (data: unknown) => void, onError: (err: unknown) => void): void;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Default theme adapter that loads theme configuration files via fetch().
2
+ * Loads theme configuration files with `fetch`.
3
3
  */
4
4
  export class DefaultThemeAdapter {
5
5
  // ── Public methods ────────────────────────────────────────────────────
@@ -1,14 +1,11 @@
1
1
  import type { Texture } from '@kurot/core';
2
2
  /**
3
- * Adapter interface for resolving asset sources (e.g. image URLs) to Texture instances.
4
- * Implement this interface and pass it to `setAssetAdapter()` to customize asset loading.
3
+ * Resolves asset identifiers to textures.
5
4
  */
6
5
  export interface IAssetAdapter {
7
6
  /**
8
- * Resolve an asset source string to a content value (typically a Texture).
9
- * @param source The asset identifier (URL, resource key, etc.)
10
- * @param callback Called with the resolved content and original source when done.
11
- * `content` is `undefined` when the asset could not be loaded.
7
+ * Resolves an asset and reports `undefined` when it cannot be loaded.
8
+ * The callback receives the original source so callers can correlate requests.
12
9
  */
13
10
  getAsset(source: string, callback: (content: Texture | undefined, source: string) => void): void;
14
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"IAssetAdapter.d.ts","sourceRoot":"","sources":["../../../src/kurot/core/IAssetAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;CACjG"}
1
+ {"version":3,"file":"IAssetAdapter.d.ts","sourceRoot":"","sources":["../../../src/kurot/core/IAssetAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;CACjG"}
@@ -1,7 +1,5 @@
1
1
  /**
2
- * Interface for components that display a simple text string.
3
- * Implemented by Label, EditableText, and by composite components that
4
- * expose a `text` property (Button, TextInput, ComboBox).
2
+ * UI component that exposes displayed text.
5
3
  */
6
4
  export interface IDisplayText {
7
5
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"IDisplayText.d.ts","sourceRoot":"","sources":["../../../src/kurot/core/IDisplayText.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC5B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;CACb"}
1
+ {"version":3,"file":"IDisplayText.d.ts","sourceRoot":"","sources":["../../../src/kurot/core/IDisplayText.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;CACb"}
@@ -1,6 +1,6 @@
1
1
  import type { IUIComponent } from './IUIComponent.js';
2
2
  /**
3
- * Interface for list item renderers.
3
+ * UI component that renders one item from a data provider.
4
4
  */
5
5
  export interface IItemRenderer extends IUIComponent {
6
6
  /**
@@ -1,13 +1,9 @@
1
1
  /**
2
- * Adapter interface for loading theme configuration files.
3
- * Implement this and pass it to `Theme` constructor to customize how .thm.js files are fetched.
2
+ * Loads theme configuration data for {@link Theme}.
4
3
  */
5
4
  export interface IThemeAdapter {
6
5
  /**
7
- * Fetch and return the theme config data.
8
- * @param url Path to the theme file (e.g. "resource/default.thm.js")
9
- * @param onSuccess Called with the parsed theme data on success.
10
- * @param onError Called on failure.
6
+ * Loads a theme URL and reports either its data or the loading error.
11
7
  */
12
8
  getTheme(url: string, onSuccess: (data: unknown) => void, onError: (err: unknown) => void): void;
13
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"IThemeAdapter.d.ts","sourceRoot":"","sources":["../../../src/kurot/core/IThemeAdapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;CACjG"}
1
+ {"version":3,"file":"IThemeAdapter.d.ts","sourceRoot":"","sources":["../../../src/kurot/core/IThemeAdapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;CACjG"}
@@ -1,16 +1,14 @@
1
1
  import type { IEventDispatcher, Rectangle } from '@kurot/core';
2
2
  /**
3
- * Interface implemented by all UI components.
4
- * Defines the layout contract: constraint properties, invalidation cycle,
5
- * and bounds query methods used by layout classes.
3
+ * Layout, measurement, and validation contract implemented by UI components.
6
4
  */
7
5
  export interface IUIComponent extends IEventDispatcher {
8
6
  /**
9
- * Whether this component participates in parent layout. Default true.
7
+ * Whether this component participates in its parent's layout.
10
8
  */
11
9
  includeInLayout: boolean;
12
10
  /**
13
- * Distance from the left edge of the parent container
11
+ * Distance from the left edge of the parent container.
14
12
  */
15
13
  left: number | string;
16
14
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"IUIComponent.d.ts","sourceRoot":"","sources":["../../../src/kurot/core/IUIComponent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE/D;;;;GAIG;AACH,MAAM,WAAW,YAAa,SAAQ,gBAAgB;IACrD;;OAEG;IACH,eAAe,EAAE,OAAO,CAAC;IAGzB;;OAEG;IACH,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB;;OAEG;IACH,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB;;OAEG;IACH,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB;;OAEG;IACH,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB;;OAEG;IACH,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAAC;IAClC;;OAEG;IACH,cAAc,EAAE,MAAM,GAAG,MAAM,CAAC;IAGhC;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IAGtB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAGlB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACrD,oBAAoB,IAAI,IAAI,CAAC;IAC7B,kBAAkB,IAAI,IAAI,CAAC;IAC3B,cAAc,IAAI,IAAI,CAAC;IACvB,YAAY,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACxC,qBAAqB,IAAI,IAAI,CAAC;IAC9B,mBAAmB,IAAI,IAAI,CAAC;IAC5B,WAAW,IAAI,IAAI,CAAC;IAGpB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrE,uBAAuB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpD,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IACzC,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;CAC5C"}
1
+ {"version":3,"file":"IUIComponent.d.ts","sourceRoot":"","sources":["../../../src/kurot/core/IUIComponent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,gBAAgB;IACrD;;OAEG;IACH,eAAe,EAAE,OAAO,CAAC;IAGzB;;OAEG;IACH,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB;;OAEG;IACH,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB;;OAEG;IACH,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB;;OAEG;IACH,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB;;OAEG;IACH,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAAC;IAClC;;OAEG;IACH,cAAc,EAAE,MAAM,GAAG,MAAM,CAAC;IAGhC;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IAGtB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAGlB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACrD,oBAAoB,IAAI,IAAI,CAAC;IAC7B,kBAAkB,IAAI,IAAI,CAAC;IAC3B,cAAc,IAAI,IAAI,CAAC;IACvB,YAAY,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACxC,qBAAqB,IAAI,IAAI,CAAC;IAC9B,mBAAmB,IAAI,IAAI,CAAC;IAC5B,WAAW,IAAI,IAAI,CAAC;IAGpB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrE,uBAAuB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpD,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IACzC,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;CAC5C"}
@@ -1,6 +1,6 @@
1
1
  import type { IUIComponent } from './IUIComponent.js';
2
2
  /**
3
- * Interface for scrollable container components.
3
+ * Scrollable UI component with measurable content bounds.
4
4
  */
5
5
  export interface IViewport extends IUIComponent {
6
6
  readonly contentWidth: number;