@ratiosolver/flick 0.0.42 → 0.1.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/app.d.ts +7 -46
- package/dist/app.js +2 -59
- package/dist/app.js.map +1 -1
- package/dist/component.d.ts +120 -0
- package/dist/component.js +161 -0
- package/dist/component.js.map +1 -0
- package/dist/components/app.d.ts +19 -19
- package/dist/components/app.js +74 -39
- package/dist/components/app.js.map +1 -1
- package/dist/components/button.d.ts +12 -5
- package/dist/components/button.js +13 -6
- package/dist/components/button.js.map +1 -1
- package/dist/components/checkbox.d.ts +19 -5
- package/dist/components/checkbox.js +23 -9
- package/dist/components/checkbox.js.map +1 -1
- package/dist/components/list.d.ts +16 -41
- package/dist/components/list.js +27 -54
- package/dist/components/list.js.map +1 -1
- package/dist/components/offcanvas.d.ts +2 -2
- package/dist/components/offcanvas.js +6 -6
- package/dist/components/offcanvas.js.map +1 -1
- package/dist/components/sidebar.d.ts +2 -2
- package/dist/components/sidebar.js +8 -8
- package/dist/components/sidebar.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utils/user_components.d.ts +3 -3
- package/dist/utils/user_components.js +46 -45
- package/dist/utils/user_components.js.map +1 -1
- package/package.json +1 -1
- package/dist/components/brand.d.ts +0 -15
- package/dist/components/brand.js +0 -39
- package/dist/components/brand.js.map +0 -1
package/dist/app.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Component } from "./component";
|
|
1
2
|
/**
|
|
2
3
|
* The `App` class implements the singleton pattern and manages the state and behavior of the application.
|
|
3
4
|
* It allows for the selection of components and notifies registered listeners of various events.
|
|
@@ -19,15 +20,15 @@ export declare class App implements AppListener {
|
|
|
19
20
|
/**
|
|
20
21
|
* Get the selected component.
|
|
21
22
|
*
|
|
22
|
-
* @returns {Component<
|
|
23
|
+
* @returns {Component<Node> | null} The selected component.
|
|
23
24
|
*/
|
|
24
|
-
get_selected_component(): Component<
|
|
25
|
+
get_selected_component(): Component<Node> | null;
|
|
25
26
|
/**
|
|
26
27
|
* Set the selected component.
|
|
27
28
|
*
|
|
28
|
-
* @param {Component<
|
|
29
|
+
* @param {Component<Node> | null} component The component to select.
|
|
29
30
|
*/
|
|
30
|
-
selected_component(component: Component<
|
|
31
|
+
selected_component(component: Component<Node> | null): void;
|
|
31
32
|
/**
|
|
32
33
|
* Add an application listener.
|
|
33
34
|
*
|
|
@@ -54,47 +55,7 @@ export interface AppListener {
|
|
|
54
55
|
/**
|
|
55
56
|
* Notification that a component has been selected.
|
|
56
57
|
*
|
|
57
|
-
* @param {Component<
|
|
58
|
+
* @param {Component<Node> | null} component The selected component.
|
|
58
59
|
*/
|
|
59
|
-
selected_component(component: Component<
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* The `Component` class represents a component in the application.
|
|
63
|
-
* It manages the payload and element of the component and its children.
|
|
64
|
-
*
|
|
65
|
-
* @template P The type of the payload.
|
|
66
|
-
* @template E The type of the element.
|
|
67
|
-
*/
|
|
68
|
-
export declare abstract class Component<P, E extends HTMLElement> {
|
|
69
|
-
payload: P;
|
|
70
|
-
element: E;
|
|
71
|
-
protected child_nodes: Set<Component<any, HTMLElement>>;
|
|
72
|
-
constructor(payload: P, element: E);
|
|
73
|
-
/**
|
|
74
|
-
* Add a child component.
|
|
75
|
-
*
|
|
76
|
-
* @param {Component<any, HTMLElement>} child The child component to add.
|
|
77
|
-
*/
|
|
78
|
-
add_child(child: Component<any, HTMLElement>): void;
|
|
79
|
-
/**
|
|
80
|
-
* Remove a child component.
|
|
81
|
-
*
|
|
82
|
-
* @param {Component<any, HTMLElement>} child The child component to remove.
|
|
83
|
-
* @throws {Error} If the child is not found.
|
|
84
|
-
*/
|
|
85
|
-
remove_child(child: Component<any, HTMLElement>): void;
|
|
86
|
-
/**
|
|
87
|
-
* Remove the component.
|
|
88
|
-
*/
|
|
89
|
-
remove(): void;
|
|
90
|
-
/**
|
|
91
|
-
* Notify that the component has been mounted.
|
|
92
|
-
* Override this method to perform actions when the component is mounted.
|
|
93
|
-
*/
|
|
94
|
-
mounted(): void;
|
|
95
|
-
/**
|
|
96
|
-
* Notify that the component is being unmounted.
|
|
97
|
-
* Override this method to perform actions when the component is being unmounted.
|
|
98
|
-
*/
|
|
99
|
-
unmounting(): void;
|
|
60
|
+
selected_component(component: Component<Node> | null): void;
|
|
100
61
|
}
|
package/dist/app.js
CHANGED
|
@@ -25,13 +25,13 @@ export class App {
|
|
|
25
25
|
/**
|
|
26
26
|
* Get the selected component.
|
|
27
27
|
*
|
|
28
|
-
* @returns {Component<
|
|
28
|
+
* @returns {Component<Node> | null} The selected component.
|
|
29
29
|
*/
|
|
30
30
|
get_selected_component() { return this.selected_comp; }
|
|
31
31
|
/**
|
|
32
32
|
* Set the selected component.
|
|
33
33
|
*
|
|
34
|
-
* @param {Component<
|
|
34
|
+
* @param {Component<Node> | null} component The component to select.
|
|
35
35
|
*/
|
|
36
36
|
selected_component(component) {
|
|
37
37
|
if (this.selected_comp)
|
|
@@ -58,61 +58,4 @@ export class App {
|
|
|
58
58
|
this.app_listeners.delete(listener);
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
|
-
/**
|
|
62
|
-
* The `Component` class represents a component in the application.
|
|
63
|
-
* It manages the payload and element of the component and its children.
|
|
64
|
-
*
|
|
65
|
-
* @template P The type of the payload.
|
|
66
|
-
* @template E The type of the element.
|
|
67
|
-
*/
|
|
68
|
-
export class Component {
|
|
69
|
-
constructor(payload, element) {
|
|
70
|
-
this.child_nodes = new Set(); // The children of the component
|
|
71
|
-
this.payload = payload;
|
|
72
|
-
this.element = element;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Add a child component.
|
|
76
|
-
*
|
|
77
|
-
* @param {Component<any, HTMLElement>} child The child component to add.
|
|
78
|
-
*/
|
|
79
|
-
add_child(child) {
|
|
80
|
-
this.child_nodes.add(child);
|
|
81
|
-
this.element.appendChild(child.element);
|
|
82
|
-
child.mounted();
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Remove a child component.
|
|
86
|
-
*
|
|
87
|
-
* @param {Component<any, HTMLElement>} child The child component to remove.
|
|
88
|
-
* @throws {Error} If the child is not found.
|
|
89
|
-
*/
|
|
90
|
-
remove_child(child) {
|
|
91
|
-
if (this.child_nodes.has(child)) {
|
|
92
|
-
this.child_nodes.delete(child);
|
|
93
|
-
child.remove();
|
|
94
|
-
}
|
|
95
|
-
else
|
|
96
|
-
throw new Error('Child not found');
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Remove the component.
|
|
100
|
-
*/
|
|
101
|
-
remove() {
|
|
102
|
-
for (const child of this.child_nodes)
|
|
103
|
-
child.unmounting();
|
|
104
|
-
this.unmounting();
|
|
105
|
-
this.element.remove();
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Notify that the component has been mounted.
|
|
109
|
-
* Override this method to perform actions when the component is mounted.
|
|
110
|
-
*/
|
|
111
|
-
mounted() { }
|
|
112
|
-
/**
|
|
113
|
-
* Notify that the component is being unmounted.
|
|
114
|
-
* Override this method to perform actions when the component is being unmounted.
|
|
115
|
-
*/
|
|
116
|
-
unmounting() { }
|
|
117
|
-
}
|
|
118
61
|
//# sourceMappingURL=app.js.map
|
package/dist/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,OAAO,GAAG;IAMd;QAHQ,kBAAa,GAA2B,IAAI,CAAC;QAC7C,kBAAa,GAAqB,IAAI,GAAG,EAAE,CAAC;IAE5B,CAAC;IAEzB,MAAM,CAAC,YAAY;QACjB,IAAI,CAAC,GAAG,CAAC,QAAQ;YACf,GAAG,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QAC3B,OAAO,GAAG,CAAC,QAAQ,CAAC;IACtB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,IAAY,IAAU,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAAC,CAAC,CAAC,CAAC;IAElG;;;;OAIG;IACH,sBAAsB,KAA6B,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAE/E;;;;OAIG;IACH,kBAAkB,CAAC,SAAiC;QAClD,IAAI,IAAI,CAAC,aAAa;YACpB,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;QAC9B,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YAAC,QAAQ,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAAC,CAAC;IACxF,CAAC;IAED;;;;OAIG;IACH,gBAAgB,CAAC,QAAqB;QACpC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACH,mBAAmB,CAAC,QAAqB;QACvC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;CACF"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abstract base class representing a UI component backed by a DOM Node.
|
|
3
|
+
*
|
|
4
|
+
* @typeParam N - The type of DOM Node associated with this component.
|
|
5
|
+
*
|
|
6
|
+
* @remarks
|
|
7
|
+
* - Manages mounting state and child components.
|
|
8
|
+
* - Handles DOM node insertion and removal.
|
|
9
|
+
* - Provides lifecycle hooks for mounting and unmounting.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* class MyComponent extends Component<HTMLElement> {
|
|
14
|
+
* mounted() {
|
|
15
|
+
* // Called when the component is mounted
|
|
16
|
+
* }
|
|
17
|
+
* unmounting() {
|
|
18
|
+
* // Called before the component is unmounted
|
|
19
|
+
* }
|
|
20
|
+
* }
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @property node - The DOM node associated with this component.
|
|
24
|
+
* @property is_mounted - Indicates whether the component is currently mounted.
|
|
25
|
+
* @property child_nodes - The set of child components.
|
|
26
|
+
*
|
|
27
|
+
* @method add_child - Adds a child component and appends its node.
|
|
28
|
+
* @method remove_child - Removes a child component and its node.
|
|
29
|
+
* @method remove - Unmounts and removes this component's node from the DOM.
|
|
30
|
+
* @method mount - Mounts this component to a parent component.
|
|
31
|
+
* @method mounted - Lifecycle hook called after mounting.
|
|
32
|
+
* @method unmounting - Lifecycle hook called before unmounting.
|
|
33
|
+
*/
|
|
34
|
+
export declare abstract class Component<N extends Node> {
|
|
35
|
+
readonly node: N;
|
|
36
|
+
private is_mounted;
|
|
37
|
+
private readonly child_nodes;
|
|
38
|
+
constructor(node: N);
|
|
39
|
+
/**
|
|
40
|
+
* Adds a child component to this component.
|
|
41
|
+
*
|
|
42
|
+
* This method appends the child's node to this component's node and adds the child to the internal set of child nodes.
|
|
43
|
+
* If this component is already mounted, the child will also be marked as mounted.
|
|
44
|
+
*
|
|
45
|
+
* @param child - The child component to add.
|
|
46
|
+
*/
|
|
47
|
+
add_child(child: Component<Node>): void;
|
|
48
|
+
/**
|
|
49
|
+
* Adds a child component before a specified node within this component.
|
|
50
|
+
*
|
|
51
|
+
* This method inserts the child's node before the specified node in this component's node
|
|
52
|
+
* and adds the child to the internal set of child nodes.
|
|
53
|
+
* If this component is already mounted, the child will also be marked as mounted.
|
|
54
|
+
*
|
|
55
|
+
* @param child - The child component to add.
|
|
56
|
+
* @param node - The node before which the child's node will be inserted.
|
|
57
|
+
*/
|
|
58
|
+
add_child_before(child: Component<Node>, node: Node): void;
|
|
59
|
+
/**
|
|
60
|
+
* Removes a child component from the current component.
|
|
61
|
+
*
|
|
62
|
+
* Attempts to delete the specified child from the `child_nodes` collection.
|
|
63
|
+
* If successful, it also calls the child's `remove()` method.
|
|
64
|
+
* Throws an error if the child is not found in the collection.
|
|
65
|
+
*
|
|
66
|
+
* @param child - The child component to remove.
|
|
67
|
+
* @throws {Error} If the child is not found in the `child_nodes` collection.
|
|
68
|
+
*/
|
|
69
|
+
remove_child(child: Component<Node>): void;
|
|
70
|
+
/**
|
|
71
|
+
* Removes the component from the DOM and marks it as unmounted.
|
|
72
|
+
*
|
|
73
|
+
* This method first sets the component's state to unmounted by calling `set_unmounted()`.
|
|
74
|
+
* If the associated node is an instance of `HTMLElement`, it removes the node from the DOM.
|
|
75
|
+
*/
|
|
76
|
+
remove(): void;
|
|
77
|
+
private set_mounted;
|
|
78
|
+
private set_unmounted;
|
|
79
|
+
/**
|
|
80
|
+
* Attaches this component to a parent component.
|
|
81
|
+
*
|
|
82
|
+
* This method performs the following steps:
|
|
83
|
+
* 1. Adds all child nodes of this component to the parent's child node set.
|
|
84
|
+
* 2. Appends this component's DOM node to the parent's DOM node.
|
|
85
|
+
* 3. Marks all child nodes of this component as mounted.
|
|
86
|
+
*
|
|
87
|
+
* @param parent - The parent component to attach this component to.
|
|
88
|
+
*/
|
|
89
|
+
attach_to(parent: Component<Node>): void;
|
|
90
|
+
/**
|
|
91
|
+
* Lifecycle hook called after the component has been mounted to the DOM.
|
|
92
|
+
* Override this method to perform initialization tasks such as fetching data or setting up event listeners.
|
|
93
|
+
*/
|
|
94
|
+
mounted(): void;
|
|
95
|
+
/**
|
|
96
|
+
* Called when the component is about to be unmounted from the DOM.
|
|
97
|
+
* Override this method to perform cleanup tasks such as removing event listeners,
|
|
98
|
+
* cancelling network requests, or releasing resources.
|
|
99
|
+
*/
|
|
100
|
+
unmounting(): void;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* An abstract component class that associates a payload of type `P` with a DOM node of type `N`.
|
|
104
|
+
*
|
|
105
|
+
* @typeParam P - The type of the payload data associated with the component.
|
|
106
|
+
* @typeParam N - The type of the DOM node, extending `Node`, that this component wraps.
|
|
107
|
+
* @extends Component<N>
|
|
108
|
+
*
|
|
109
|
+
* @property payload - The payload data associated with this component.
|
|
110
|
+
*
|
|
111
|
+
* @param node - The DOM node to associate with this component.
|
|
112
|
+
* @param payload - The payload data to associate with this component.
|
|
113
|
+
*/
|
|
114
|
+
export declare abstract class PayloadComponent<N extends Node, P> extends Component<N> {
|
|
115
|
+
readonly payload: P;
|
|
116
|
+
constructor(node: N, payload: P);
|
|
117
|
+
}
|
|
118
|
+
export declare class Fragment extends Component<DocumentFragment> {
|
|
119
|
+
constructor();
|
|
120
|
+
}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abstract base class representing a UI component backed by a DOM Node.
|
|
3
|
+
*
|
|
4
|
+
* @typeParam N - The type of DOM Node associated with this component.
|
|
5
|
+
*
|
|
6
|
+
* @remarks
|
|
7
|
+
* - Manages mounting state and child components.
|
|
8
|
+
* - Handles DOM node insertion and removal.
|
|
9
|
+
* - Provides lifecycle hooks for mounting and unmounting.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* class MyComponent extends Component<HTMLElement> {
|
|
14
|
+
* mounted() {
|
|
15
|
+
* // Called when the component is mounted
|
|
16
|
+
* }
|
|
17
|
+
* unmounting() {
|
|
18
|
+
* // Called before the component is unmounted
|
|
19
|
+
* }
|
|
20
|
+
* }
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @property node - The DOM node associated with this component.
|
|
24
|
+
* @property is_mounted - Indicates whether the component is currently mounted.
|
|
25
|
+
* @property child_nodes - The set of child components.
|
|
26
|
+
*
|
|
27
|
+
* @method add_child - Adds a child component and appends its node.
|
|
28
|
+
* @method remove_child - Removes a child component and its node.
|
|
29
|
+
* @method remove - Unmounts and removes this component's node from the DOM.
|
|
30
|
+
* @method mount - Mounts this component to a parent component.
|
|
31
|
+
* @method mounted - Lifecycle hook called after mounting.
|
|
32
|
+
* @method unmounting - Lifecycle hook called before unmounting.
|
|
33
|
+
*/
|
|
34
|
+
export class Component {
|
|
35
|
+
constructor(node) {
|
|
36
|
+
this.child_nodes = new Set(); // The children of the component
|
|
37
|
+
this.node = node;
|
|
38
|
+
this.is_mounted = node.isConnected;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Adds a child component to this component.
|
|
42
|
+
*
|
|
43
|
+
* This method appends the child's node to this component's node and adds the child to the internal set of child nodes.
|
|
44
|
+
* If this component is already mounted, the child will also be marked as mounted.
|
|
45
|
+
*
|
|
46
|
+
* @param child - The child component to add.
|
|
47
|
+
*/
|
|
48
|
+
add_child(child) {
|
|
49
|
+
this.child_nodes.add(child);
|
|
50
|
+
this.node.appendChild(child.node);
|
|
51
|
+
if (this.is_mounted)
|
|
52
|
+
child.set_mounted();
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Adds a child component before a specified node within this component.
|
|
56
|
+
*
|
|
57
|
+
* This method inserts the child's node before the specified node in this component's node
|
|
58
|
+
* and adds the child to the internal set of child nodes.
|
|
59
|
+
* If this component is already mounted, the child will also be marked as mounted.
|
|
60
|
+
*
|
|
61
|
+
* @param child - The child component to add.
|
|
62
|
+
* @param node - The node before which the child's node will be inserted.
|
|
63
|
+
*/
|
|
64
|
+
add_child_before(child, node) {
|
|
65
|
+
this.child_nodes.add(child);
|
|
66
|
+
this.node.insertBefore(child.node, node);
|
|
67
|
+
if (this.is_mounted)
|
|
68
|
+
child.set_mounted();
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Removes a child component from the current component.
|
|
72
|
+
*
|
|
73
|
+
* Attempts to delete the specified child from the `child_nodes` collection.
|
|
74
|
+
* If successful, it also calls the child's `remove()` method.
|
|
75
|
+
* Throws an error if the child is not found in the collection.
|
|
76
|
+
*
|
|
77
|
+
* @param child - The child component to remove.
|
|
78
|
+
* @throws {Error} If the child is not found in the `child_nodes` collection.
|
|
79
|
+
*/
|
|
80
|
+
remove_child(child) {
|
|
81
|
+
if (this.child_nodes.delete(child))
|
|
82
|
+
child.remove();
|
|
83
|
+
else
|
|
84
|
+
throw new Error('Child not found');
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Removes the component from the DOM and marks it as unmounted.
|
|
88
|
+
*
|
|
89
|
+
* This method first sets the component's state to unmounted by calling `set_unmounted()`.
|
|
90
|
+
* If the associated node is an instance of `HTMLElement`, it removes the node from the DOM.
|
|
91
|
+
*/
|
|
92
|
+
remove() {
|
|
93
|
+
this.set_unmounted();
|
|
94
|
+
if (this.node instanceof HTMLElement)
|
|
95
|
+
this.node.remove();
|
|
96
|
+
}
|
|
97
|
+
set_mounted() {
|
|
98
|
+
this.is_mounted = true;
|
|
99
|
+
for (const child of this.child_nodes)
|
|
100
|
+
child.set_mounted();
|
|
101
|
+
this.mounted();
|
|
102
|
+
}
|
|
103
|
+
set_unmounted() {
|
|
104
|
+
this.unmounting();
|
|
105
|
+
for (const child of this.child_nodes)
|
|
106
|
+
child.set_unmounted();
|
|
107
|
+
this.is_mounted = false;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Attaches this component to a parent component.
|
|
111
|
+
*
|
|
112
|
+
* This method performs the following steps:
|
|
113
|
+
* 1. Adds all child nodes of this component to the parent's child node set.
|
|
114
|
+
* 2. Appends this component's DOM node to the parent's DOM node.
|
|
115
|
+
* 3. Marks all child nodes of this component as mounted.
|
|
116
|
+
*
|
|
117
|
+
* @param parent - The parent component to attach this component to.
|
|
118
|
+
*/
|
|
119
|
+
attach_to(parent) {
|
|
120
|
+
for (const child of this.child_nodes)
|
|
121
|
+
parent.child_nodes.add(child);
|
|
122
|
+
parent.node.appendChild(this.node);
|
|
123
|
+
for (const child of this.child_nodes)
|
|
124
|
+
child.set_mounted();
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Lifecycle hook called after the component has been mounted to the DOM.
|
|
128
|
+
* Override this method to perform initialization tasks such as fetching data or setting up event listeners.
|
|
129
|
+
*/
|
|
130
|
+
mounted() { }
|
|
131
|
+
/**
|
|
132
|
+
* Called when the component is about to be unmounted from the DOM.
|
|
133
|
+
* Override this method to perform cleanup tasks such as removing event listeners,
|
|
134
|
+
* cancelling network requests, or releasing resources.
|
|
135
|
+
*/
|
|
136
|
+
unmounting() { }
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* An abstract component class that associates a payload of type `P` with a DOM node of type `N`.
|
|
140
|
+
*
|
|
141
|
+
* @typeParam P - The type of the payload data associated with the component.
|
|
142
|
+
* @typeParam N - The type of the DOM node, extending `Node`, that this component wraps.
|
|
143
|
+
* @extends Component<N>
|
|
144
|
+
*
|
|
145
|
+
* @property payload - The payload data associated with this component.
|
|
146
|
+
*
|
|
147
|
+
* @param node - The DOM node to associate with this component.
|
|
148
|
+
* @param payload - The payload data to associate with this component.
|
|
149
|
+
*/
|
|
150
|
+
export class PayloadComponent extends Component {
|
|
151
|
+
constructor(node, payload) {
|
|
152
|
+
super(node);
|
|
153
|
+
this.payload = payload;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
export class Fragment extends Component {
|
|
157
|
+
constructor() {
|
|
158
|
+
super(document.createDocumentFragment());
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component.js","sourceRoot":"","sources":["../src/component.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,OAAgB,SAAS;IAM7B,YAAY,IAAO;QAFF,gBAAW,GAAyB,IAAI,GAAG,EAAE,CAAC,CAAC,gCAAgC;QAG9F,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;IACrC,CAAC;IAED;;;;;;;OAOG;IACH,SAAS,CAAC,KAAsB;QAC9B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,UAAU;YACjB,KAAK,CAAC,WAAW,EAAE,CAAC;IACxB,CAAC;IAED;;;;;;;;;OASG;IACH,gBAAgB,CAAC,KAAsB,EAAE,IAAU;QACjD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,IAAI,CAAC,UAAU;YACjB,KAAK,CAAC,WAAW,EAAE,CAAC;IACxB,CAAC;IAED;;;;;;;;;OASG;IACH,YAAY,CAAC,KAAsB;QACjC,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;YAChC,KAAK,CAAC,MAAM,EAAE,CAAC;;YAEf,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACvC,CAAC;IAED;;;;;OAKG;IACH,MAAM;QACJ,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,IAAI,CAAC,IAAI,YAAY,WAAW;YAClC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;IAEO,WAAW;QACjB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW;YAClC,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAEO,aAAa;QACnB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW;YAClC,KAAK,CAAC,aAAa,EAAE,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED;;;;;;;;;OASG;IACH,SAAS,CAAC,MAAuB;QAC/B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW;YAClC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW;YAClC,KAAK,CAAC,WAAW,EAAE,CAAC;IACxB,CAAC;IAED;;;OAGG;IACH,OAAO,KAAW,CAAC;IACnB;;;;OAIG;IACH,UAAU,KAAW,CAAC;CACvB;AAED;;;;;;;;;;;GAWG;AACH,MAAM,OAAgB,gBAAoC,SAAQ,SAAY;IAI5E,YAAY,IAAO,EAAE,OAAU;QAC7B,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,MAAM,OAAO,QAAS,SAAQ,SAA2B;IAEvD;QACE,KAAK,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAC3C,CAAC;CACF"}
|
package/dist/components/app.d.ts
CHANGED
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AppListener } from "../app";
|
|
2
|
+
import { Component } from "../component";
|
|
2
3
|
import { ConnectionListener } from "../utils/connection";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* The `NavbarComponent` class represents a navigation bar component in the application.
|
|
6
|
-
* It manages the payload and element of the navigation bar component.
|
|
7
|
-
*/
|
|
8
|
-
export declare class NavbarComponent extends Component<App, HTMLDivElement> {
|
|
9
|
-
constructor();
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* The `AppComponent` class represents the main application component.
|
|
13
|
-
* It manages the application element and listens to application and connection events.
|
|
14
|
-
*/
|
|
15
|
-
export declare class AppComponent extends Component<App, HTMLDivElement> implements AppListener, ConnectionListener {
|
|
4
|
+
export declare class BrandComponent extends Component<HTMLAnchorElement> {
|
|
16
5
|
/**
|
|
17
|
-
*
|
|
6
|
+
* Creates a new brand component for the navigation bar.
|
|
7
|
+
*
|
|
8
|
+
* @param name - The display name of the brand. Defaults to 'Flick'.
|
|
9
|
+
* @param icon - The source URL or path for the brand icon. Defaults to 'favicon.ico'.
|
|
10
|
+
* @param icon_width - The width of the brand icon in pixels. Defaults to 32.
|
|
11
|
+
* @param icon_height - The height of the brand icon in pixels. Defaults to 32.
|
|
18
12
|
*
|
|
19
|
-
*
|
|
13
|
+
* The constructor initializes the brand element with an icon and text,
|
|
14
|
+
* styled and aligned for use in a navigation bar.
|
|
20
15
|
*/
|
|
21
|
-
|
|
16
|
+
constructor(name?: string, icon?: string, icon_width?: number, icon_height?: number);
|
|
17
|
+
}
|
|
18
|
+
export declare class NavbarContent extends Component<HTMLDivElement> {
|
|
19
|
+
constructor();
|
|
20
|
+
}
|
|
21
|
+
export declare class AppComponent extends Component<HTMLDivElement> implements AppListener, ConnectionListener {
|
|
22
22
|
/**
|
|
23
23
|
* Create an instance of the AppComponent.
|
|
24
24
|
*
|
|
25
25
|
* @param {string} id The ID of the element to use as the root of the application.
|
|
26
26
|
*/
|
|
27
|
-
constructor(brand?: BrandComponent, id?: string);
|
|
27
|
+
constructor(brand?: BrandComponent, content?: NavbarContent, id?: string);
|
|
28
28
|
toast(info: string): void;
|
|
29
|
-
selected_component(component: Component<
|
|
29
|
+
selected_component(component: Component<Node> | null): void;
|
|
30
30
|
connected(): void;
|
|
31
31
|
logged_in(_info: any): void;
|
|
32
32
|
received_message(_message: any): void;
|
package/dist/components/app.js
CHANGED
|
@@ -1,36 +1,17 @@
|
|
|
1
|
-
import { App
|
|
1
|
+
import { App } from "../app";
|
|
2
|
+
import { Component, Fragment } from "../component";
|
|
2
3
|
import { Connection } from "../utils/connection";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
export class NavbarComponent extends Component {
|
|
9
|
-
constructor() {
|
|
10
|
-
super(App.get_instance(), document.createElement('div'));
|
|
11
|
-
this.element.classList.add('collapse', 'navbar-collapse');
|
|
12
|
-
this.element.id = 'navbarContent';
|
|
4
|
+
class NavbarComponent extends Component {
|
|
5
|
+
constructor(brand, content) {
|
|
6
|
+
super(document.createElement('nav'));
|
|
7
|
+
this.node.classList.add('navbar', 'navbar-expand-lg');
|
|
8
|
+
this.add_child(new NavbarContainer(brand, content));
|
|
13
9
|
}
|
|
14
10
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
export class AppComponent extends Component {
|
|
20
|
-
/**
|
|
21
|
-
* Create an instance of the AppComponent.
|
|
22
|
-
*
|
|
23
|
-
* @param {string} id The ID of the element to use as the root of the application.
|
|
24
|
-
*/
|
|
25
|
-
constructor(brand = new BrandComponent(), id = 'app') {
|
|
26
|
-
super(App.get_instance(), document.querySelector('#' + id));
|
|
27
|
-
this.element.classList.add('d-flex', 'flex-column', 'h-100');
|
|
28
|
-
const fragment = document.createDocumentFragment();
|
|
29
|
-
// Add the Navbar..
|
|
30
|
-
const navbar = document.createElement('nav');
|
|
31
|
-
navbar.classList.add('navbar', 'navbar-expand-lg');
|
|
32
|
-
const nav_container = document.createElement('div');
|
|
33
|
-
nav_container.classList.add('container-fluid');
|
|
11
|
+
class NavbarContainer extends Component {
|
|
12
|
+
constructor(brand, content) {
|
|
13
|
+
super(document.createElement('div'));
|
|
14
|
+
this.node.classList.add('container-fluid');
|
|
34
15
|
// Add the brand..
|
|
35
16
|
this.add_child(brand);
|
|
36
17
|
// Add the toggler..
|
|
@@ -45,21 +26,75 @@ export class AppComponent extends Component {
|
|
|
45
26
|
const toggler_span = document.createElement('span');
|
|
46
27
|
toggler_span.classList.add('navbar-toggler-icon');
|
|
47
28
|
toggler.appendChild(toggler_span);
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
29
|
+
this.node.appendChild(toggler);
|
|
30
|
+
// Add the content..
|
|
31
|
+
this.add_child(content);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export class BrandComponent extends Component {
|
|
35
|
+
/**
|
|
36
|
+
* Creates a new brand component for the navigation bar.
|
|
37
|
+
*
|
|
38
|
+
* @param name - The display name of the brand. Defaults to 'Flick'.
|
|
39
|
+
* @param icon - The source URL or path for the brand icon. Defaults to 'favicon.ico'.
|
|
40
|
+
* @param icon_width - The width of the brand icon in pixels. Defaults to 32.
|
|
41
|
+
* @param icon_height - The height of the brand icon in pixels. Defaults to 32.
|
|
42
|
+
*
|
|
43
|
+
* The constructor initializes the brand element with an icon and text,
|
|
44
|
+
* styled and aligned for use in a navigation bar.
|
|
45
|
+
*/
|
|
46
|
+
constructor(name = 'Flick', icon = 'favicon.ico', icon_width = 32, icon_height = 32) {
|
|
47
|
+
super(document.createElement('a'));
|
|
48
|
+
this.node.classList.add('navbar-brand');
|
|
49
|
+
this.node.href = '#';
|
|
50
|
+
const brand_container = document.createElement('div');
|
|
51
|
+
brand_container.style.display = 'flex';
|
|
52
|
+
brand_container.style.alignItems = 'center';
|
|
53
|
+
brand_container.style.gap = '0.5rem'; // Add space between icon and text
|
|
54
|
+
const brand_icon = document.createElement('img');
|
|
55
|
+
brand_icon.src = icon;
|
|
56
|
+
brand_icon.alt = name;
|
|
57
|
+
brand_icon.width = icon_width;
|
|
58
|
+
brand_icon.height = icon_height;
|
|
59
|
+
brand_icon.classList.add('d-inline-block', 'align-text-top');
|
|
60
|
+
brand_container.appendChild(brand_icon);
|
|
61
|
+
if (name) {
|
|
62
|
+
brand_icon.classList.add('me-1');
|
|
63
|
+
const brand_text = document.createElement('span');
|
|
64
|
+
brand_text.textContent = name;
|
|
65
|
+
brand_text.style.fontWeight = '500'; // Make text slightly bolder
|
|
66
|
+
brand_container.appendChild(brand_text);
|
|
67
|
+
}
|
|
68
|
+
this.node.appendChild(brand_container);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
export class NavbarContent extends Component {
|
|
72
|
+
constructor() {
|
|
73
|
+
super(document.createElement('div'));
|
|
74
|
+
this.node.classList.add('collapse', 'navbar-collapse');
|
|
75
|
+
this.node.id = 'navbarContent';
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
export class AppComponent extends Component {
|
|
79
|
+
/**
|
|
80
|
+
* Create an instance of the AppComponent.
|
|
81
|
+
*
|
|
82
|
+
* @param {string} id The ID of the element to use as the root of the application.
|
|
83
|
+
*/
|
|
84
|
+
constructor(brand = new BrandComponent(), content = new NavbarContent(), id = 'app') {
|
|
85
|
+
super(document.querySelector('#' + id));
|
|
86
|
+
this.node.classList.add('d-flex', 'flex-column', 'h-100');
|
|
87
|
+
const fragment = new Fragment();
|
|
88
|
+
fragment.add_child(new NavbarComponent(brand, content));
|
|
53
89
|
// Add the toast container..
|
|
54
90
|
const toast_container = document.createElement('div');
|
|
55
|
-
|
|
56
|
-
fragment.
|
|
57
|
-
this.element.appendChild(fragment);
|
|
91
|
+
fragment.node.appendChild(toast_container);
|
|
92
|
+
fragment.attach_to(this);
|
|
58
93
|
App.get_instance().add_app_listener(this);
|
|
59
94
|
Connection.get_instance().add_connection_listener(this);
|
|
60
95
|
}
|
|
61
96
|
toast(info) {
|
|
62
|
-
const toast_container = this.
|
|
97
|
+
const toast_container = this.node.querySelector('.toast-container');
|
|
63
98
|
const toast = document.createElement('div');
|
|
64
99
|
toast.classList.add('toast');
|
|
65
100
|
toast.setAttribute('role', 'alert');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/components/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAe,
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/components/app.ts"],"names":[],"mappings":"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"}
|