nine-9 1.8.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -17,6 +17,7 @@ type KebabToCamel<S extends string> = S extends `${infer First}-${infer Rest}` ?
17
17
  type ObjectToEntryUnion<T> = {
18
18
  [K in keyof T]: [K, T[K]];
19
19
  }[keyof T];
20
+ declare function defineTemplate<T = void>(): T;
20
21
 
21
22
  type Wrapper<T> = {
22
23
  get(): T;
@@ -24,6 +25,7 @@ type Wrapper<T> = {
24
25
  updateOnly(): void;
25
26
  event: EventSubcriber<[T, T]>;
26
27
  };
28
+ declare function normalizeWrap<T>(data: T | Wrapper<T>): Wrapper<T>;
27
29
  declare function wrap<T>(initialData: T, wrapperOptions?: Partial<Wrapper<T>>): Wrapper<T>;
28
30
  declare function sync<R>(effectRenderer: () => R, dependencies?: unknown[]): Wrapper<R>;
29
31
  declare function when(condition: Wrapper<boolean> | (() => boolean), tree: () => SourceTree, dependencies?: unknown[]): Wrapper<SourceTree[]>;
@@ -70,30 +72,13 @@ type HostTree<E extends SupportedHTMLElements = SupportedHTMLElements, T = HTMLE
70
72
  };
71
73
  declare function tree<E extends SupportedHTMLElements>(data: E | Node): HostTree<E, HTMLElementTagNameMap[E], SupportedHTMLRawAttributes[E]>;
72
74
 
73
- type RawSlotInput = SourceTree | (() => SourceTree);
74
- type SlotInput = RawSlotInput | Wrapper<RawSlotInput>;
75
- type SlotOutput = () => Wrapper<SourceTree>;
76
- declare function pipeExtract(input: SlotInput): SlotOutput;
75
+ declare function camelToHyphen<T extends string>(str: T): T;
76
+ declare function hyphenToCamel<T extends string>(str: T): T;
77
77
 
78
- type EventDescriptor<T, N extends string> = {
79
- name: N;
80
- } & EventOptions<T>;
81
- interface EventOptions<T> {
82
- bubbleable?: boolean;
83
- template?: T;
84
- }
85
- declare function defineEvent<T, N extends string>(name: N, options?: EventOptions<T>): EventDescriptor<T, N>;
78
+ declare function typedIsArray<T>(arr: unknown[]): arr is T[];
79
+ declare function putIntoArray<T>(data: T): T extends (infer R)[] ? R[] : [T];
80
+ declare function createArray<T>(length: number, filler: () => T): T[];
86
81
 
87
- interface ComponentRenderEntry<P extends ComponentPropertyStore, E extends ComponentEventStore> {
88
- (props?: ComponentPropertyInputDict<P>, slot?: SlotInput): ComponentInstance<E>;
89
- }
90
- interface ComponentInternalRender<P extends ComponentPropertyStore, E extends ComponentEventStore> {
91
- (options: ComponentPropertyOutputDict<P>, slot: SlotOutput, emit: <D extends E[number], K extends D["name"]>(key: K, data: D extends infer R extends EventDescriptor<unknown, string> ? R["name"] extends K ? R["template"] : never : never) => void): SourceTree;
92
- }
93
- type Component<P extends ComponentPropertyStore, E extends ComponentEventStore> = ComponentRenderEntry<P, E> & ComponentOption<P, E>;
94
- interface PropertyTransformer<I, O> {
95
- (data: I): O;
96
- }
97
82
  interface ComponentPropertyDescriptor<I = unknown, O = unknown, R extends boolean = boolean> {
98
83
  validate?: (data: I) => boolean;
99
84
  transform: PropertyTransformer<I, O>;
@@ -102,8 +87,6 @@ interface ComponentPropertyDescriptor<I = unknown, O = unknown, R extends boolea
102
87
  downloadable?: boolean;
103
88
  uploadable?: boolean;
104
89
  }
105
- type ComponentEventStore = EventDescriptor<unknown, string>[];
106
- type ComponentPropertyStore = Record<string, ComponentPropertyDescriptor>;
107
90
  type ComponentPropertyInputDict<P extends ComponentPropertyStore> = {
108
91
  [K in keyof P as P[K]["required"] extends true ? K : never]: P[K] extends ComponentPropertyDescriptor<unknown, infer R> ? R | Wrapper<R> : never;
109
92
  } & {
@@ -112,14 +95,67 @@ type ComponentPropertyInputDict<P extends ComponentPropertyStore> = {
112
95
  type ComponentPropertyOutputDict<P extends ComponentPropertyStore> = {
113
96
  [K in keyof P]: P[K] extends ComponentPropertyDescriptor<unknown, infer R> ? Wrapper<R> : never;
114
97
  };
115
- interface ComponentOption<P extends ComponentPropertyStore, E extends ComponentEventStore> {
98
+ declare function rawProperty<T>(): PropertyTransformer<unknown, T>;
99
+ declare function normalizePropertyDescriptor<I, O, R extends boolean>(descriptor: ComponentPropertyDescriptor<I, O, R>): Required<ComponentPropertyDescriptor<I, O, R>>;
100
+ declare function validateStore(store: ComponentPropertyStore): void;
101
+ declare function hostdown<T extends ComponentPropertyStore>(upstream?: ComponentPropertyInputDict<T>, store?: T): ComponentPropertyOutputDict<T>;
102
+
103
+ type SlotDescriptor<T = unknown, N extends string = string, R extends boolean = boolean> = {
104
+ name: N;
105
+ } & SlotOptions<T, R>;
106
+ interface SlotOptions<T, R extends boolean> {
107
+ template: T;
108
+ required?: R;
109
+ defaultValue?: SourceTree;
110
+ }
111
+ type SlotInput<T> = (data: Wrapper<T>) => SourceTree | Wrapper<SourceTree>;
112
+ type SlotOutput<T> = (data: T | Wrapper<T>) => Wrapper<SourceTree>;
113
+ type ComponentSlotInputDict<T extends ComponentSlotStore> = {
114
+ [K in T[number] as K["name"]]?: SlotInput<K["template"]>;
115
+ };
116
+ type ComponentSlotOutputDict<T extends ComponentSlotStore> = {
117
+ [K in T[number] as K["name"]]-?: SlotOutput<K["template"]>;
118
+ };
119
+ declare function extractInput<T>(render: SlotInput<T>): SlotOutput<T>;
120
+ declare function renderSlots<T extends ComponentSlotStore>(rawInput?: ComponentSlotInputDict<T>, store?: T): ComponentSlotOutputDict<T>;
121
+ declare function defineSlot<N extends string, R extends boolean, T>(name: N, options: SlotOptions<T, R>): {
122
+ template: T;
123
+ required?: R | undefined;
124
+ defaultValue?: SourceTree;
125
+ name: N;
126
+ };
127
+
128
+ type EventDescriptor<T = unknown, N extends string = string> = {
129
+ name: N;
130
+ } & EventOptions<T>;
131
+ interface EventOptions<T> {
132
+ bubbleable?: boolean;
133
+ template?: T;
134
+ }
135
+ declare function defineEvent<T, N extends string>(name: N, options?: EventOptions<T>): EventDescriptor<T, N>;
136
+
137
+ interface ComponentRenderEntry<P extends ComponentPropertyStore, E extends ComponentEventStore, S extends ComponentSlotStore> {
138
+ (props?: ComponentPropertyInputDict<P>, slot?: ComponentSlotInputDict<S>): ComponentInstance<E>;
139
+ }
140
+ interface ComponentInternalRender<P extends ComponentPropertyStore, E extends ComponentEventStore, S extends ComponentSlotStore> {
141
+ (options: ComponentPropertyOutputDict<P>, slot: ComponentSlotOutputDict<S>, emit: <D extends E[number], K extends D["name"]>(key: K, data: D extends infer R extends EventDescriptor ? R["name"] extends K ? R["template"] : never : never) => void): SourceTree;
142
+ }
143
+ type Component<P extends ComponentPropertyStore, E extends ComponentEventStore, S extends ComponentSlotStore> = ComponentRenderEntry<P, E, S> & ComponentOption<P, E, S>;
144
+ interface PropertyTransformer<I, O> {
145
+ (data: I): O;
146
+ }
147
+ type ComponentPropertyStore = Record<string, ComponentPropertyDescriptor>;
148
+ type ComponentEventStore = EventDescriptor[];
149
+ type ComponentSlotStore = SlotDescriptor[];
150
+ interface ComponentOption<P extends ComponentPropertyStore, E extends ComponentEventStore, S extends ComponentSlotStore> {
116
151
  props?: P;
117
152
  events?: E;
118
153
  styles?: StyleSet[];
154
+ slots?: S;
119
155
  }
120
156
  type ComponentInstance<E extends ComponentEventStore = ComponentEventStore> = {
121
157
  mount(to: string | HTMLElement): void;
122
- on<D extends E[number], K extends D["name"]>(key: K, data: (data: D extends infer R extends EventDescriptor<unknown, string> ? R["name"] extends K ? R["template"] : never : never) => void): ComponentInstance<E>;
158
+ on<D extends E[number], K extends D["name"]>(key: K, data: (data: D extends infer R extends EventDescriptor ? R["name"] extends K ? R["template"] : never : never) => void): ComponentInstance<E>;
123
159
  $: HostTree;
124
160
  };
125
161
  type RawSourceTree = [
@@ -136,19 +172,7 @@ declare function render(nodeTree: SourceTree): HostTree;
136
172
  declare function $<T>(data: Wrapper<T>): Wrapper<SourceTree>;
137
173
  declare function flagment<T extends string>(uuid: T): `nine_${string}`;
138
174
  declare function attachUUID(root: Node, uuid: string): Node;
139
- declare function createComponent<P extends ComponentPropertyStore, E extends EventDescriptor<unknown, string>>(options: ComponentOption<P, E[]>, internalRenderer: ComponentInternalRender<P, E[]>): Component<P, E[]>;
140
-
141
- declare function rawProperty<T>(): PropertyTransformer<unknown, T>;
142
- declare function normalizePropertyDescriptor<I, O, R extends boolean>(descriptor: ComponentPropertyDescriptor<I, O, R>): Required<ComponentPropertyDescriptor<I, O, R>>;
143
- declare function validateStore(store: ComponentPropertyStore): void;
144
- declare function hostdown<T extends ComponentPropertyStore>(upstream?: ComponentPropertyInputDict<T>, store?: T): ComponentPropertyOutputDict<T>;
145
-
146
- declare function camelToHyphen<T extends string>(str: T): T;
147
- declare function hyphenToCamel<T extends string>(str: T): T;
148
-
149
- declare function typedIsArray<T>(arr: unknown[]): arr is T[];
150
- declare function putIntoArray<T>(data: T): T extends (infer R)[] ? R[] : [T];
151
- declare function createArray<T>(length: number, filler: () => T): T[];
175
+ declare function createComponent<P extends ComponentPropertyStore, E extends EventDescriptor, S extends SlotDescriptor>(options: ComponentOption<P, E[], S[]>, internalRenderer: ComponentInternalRender<P, E[], S[]>): Component<P, E[], S[]>;
152
176
 
153
177
  declare namespace logo {
154
178
  export { };
@@ -189,4 +213,4 @@ declare const _default: {
189
213
  }, (EventDescriptor<number, "select"> | EventDescriptor<boolean, "toggleState">)[]>;
190
214
  };
191
215
 
192
- export { $, type Component, type ComponentEventStore, type ComponentInstance, type ComponentInternalRender, type ComponentOption, type ComponentPropertyDescriptor, type ComponentPropertyInputDict, type ComponentPropertyOutputDict, type ComponentPropertyStore, type ComponentRenderEntry, type EmptyValue, type EventDescriptor, type EventOptions, EventSubcriber, type HostTree, type HostTreeHookStore, type HostTreeHooks, type KebabToCamel, type Normalize, type ObjectToEntryUnion, type PropertyTransformer, type RawSlotInput, type RawSourceTree, type SlotInput, type SlotOutput, type SourceTree, type StyleSet, type Valueof, type Wrapper, index as assets, attachUUID, camelToHyphen, createArray, createComponent, defineEvent, _default as examples, flagment, hostdown, hyphenToCamel, normalizePropertyDescriptor, pipeExtract, putIntoArray, rawProperty, render, styleSet, sync, tree, typedIsArray, validateStore, when, wrap };
216
+ export { $, type Component, type ComponentEventStore, type ComponentInstance, type ComponentInternalRender, type ComponentOption, type ComponentPropertyDescriptor, type ComponentPropertyInputDict, type ComponentPropertyOutputDict, type ComponentPropertyStore, type ComponentRenderEntry, type ComponentSlotInputDict, type ComponentSlotOutputDict, type ComponentSlotStore, type EmptyValue, type EventDescriptor, type EventOptions, EventSubcriber, type HostTree, type HostTreeHookStore, type HostTreeHooks, type KebabToCamel, type Normalize, type ObjectToEntryUnion, type PropertyTransformer, type RawSourceTree, type SlotDescriptor, type SlotInput, type SlotOptions, type SlotOutput, type SourceTree, type StyleSet, type Valueof, type Wrapper, index as assets, attachUUID, camelToHyphen, createArray, createComponent, defineEvent, defineSlot, defineTemplate, _default as examples, extractInput, flagment, hostdown, hyphenToCamel, normalizePropertyDescriptor, normalizeWrap, putIntoArray, rawProperty, render, renderSlots, styleSet, sync, tree, typedIsArray, validateStore, when, wrap };