@matthewp/zebra 0.0.4 → 0.1.1

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/list.js CHANGED
@@ -1,52 +1,69 @@
1
- import { SafeHTML } from "./html.js";
2
- export class List {
3
- ViewClass;
4
- keyFn;
5
- views = [];
6
- keys = [];
7
- items = [];
8
- container = null;
9
- constructor(ViewClass, keyFn) {
10
- this.ViewClass = ViewClass;
11
- this.keyFn = keyFn;
1
+ import { Element } from "./element.js";
2
+ import { View } from "./view.js";
3
+ import { effect } from 'alien-signals';
4
+ export class List extends View {
5
+ _containerTag;
6
+ _items;
7
+ _keyFn;
8
+ _factory;
9
+ _views = [];
10
+ _keys = [];
11
+ _currentItems = [];
12
+ constructor(items, keyFn, factory, tag = 'div') {
13
+ super();
14
+ this._containerTag = tag;
15
+ this._items = items;
16
+ this._keyFn = keyFn;
17
+ this._factory = factory;
12
18
  }
13
- template(items) {
14
- if (!items || items.length === 0)
15
- return new SafeHTML('');
16
- return new SafeHTML(items.map(item => {
17
- let view = new this.ViewClass();
18
- return view.template(item).toString();
19
- }).join(''));
19
+ _getItems() {
20
+ return typeof this._items === 'function'
21
+ ? this._items()
22
+ : this._items;
20
23
  }
21
- mount(container, items) {
22
- this.container = container;
23
- let children = Array.from(container.children);
24
- if (children.length > 0 && items) {
25
- for (let i = 0; i < children.length && i < items.length; i++) {
26
- let view = new this.ViewClass();
27
- view.mount(children[i]);
28
- view.update(items[i]);
29
- this.views.push(view);
30
- this.keys.push(this.keyFn(items[i]));
31
- this.items.push(items[i]);
24
+ render() {
25
+ const container = new Element(this._containerTag);
26
+ effect(() => {
27
+ const items = this._getItems();
28
+ if (container.el) {
29
+ this._reconcile(container.el, items);
32
30
  }
31
+ else {
32
+ this._buildInitial(container, items);
33
+ }
34
+ });
35
+ return container;
36
+ }
37
+ _buildInitial(container, items) {
38
+ this._views = [];
39
+ this._keys = [];
40
+ this._currentItems = [];
41
+ for (const item of items) {
42
+ const view = this._factory(item);
43
+ this._views.push(view);
44
+ this._keys.push(this._keyFn(item));
45
+ this._currentItems.push(item);
46
+ container.append(view);
33
47
  }
34
48
  }
35
- updateView(view, newItem, oldItem) {
36
- if (newItem !== oldItem)
37
- view.update(newItem);
49
+ _updateView(view, newItem, oldItem) {
50
+ if (newItem !== oldItem) {
51
+ const anyView = view;
52
+ if (typeof anyView.update === 'function') {
53
+ anyView.update(newItem);
54
+ }
55
+ }
38
56
  }
39
- update(items) {
40
- let container = this.container;
41
- let oldViews = this.views;
42
- let oldKeys = this.keys;
43
- let oldItems = this.items;
44
- // Fast path: same length + all keys in same order → pure in-place update
57
+ _reconcile(container, items) {
58
+ const oldViews = this._views;
59
+ const oldKeys = this._keys;
60
+ const oldItems = this._currentItems;
61
+ // Fast path: same length + all keys in same order
45
62
  if (items.length === oldViews.length && items.length > 0) {
46
63
  let sameOrder = true;
47
- let newKeys2 = new Array(items.length);
64
+ const newKeys2 = new Array(items.length);
48
65
  for (let i = 0; i < items.length; i++) {
49
- newKeys2[i] = this.keyFn(items[i]);
66
+ newKeys2[i] = this._keyFn(items[i]);
50
67
  if (newKeys2[i] !== oldKeys[i]) {
51
68
  sameOrder = false;
52
69
  break;
@@ -55,15 +72,15 @@ export class List {
55
72
  if (sameOrder) {
56
73
  for (let i = 0; i < items.length; i++) {
57
74
  if (items[i] !== oldItems[i])
58
- oldViews[i].update(items[i]);
59
- this.items[i] = items[i];
75
+ this._updateView(oldViews[i], items[i], oldItems[i]);
76
+ this._currentItems[i] = items[i];
60
77
  }
61
78
  return;
62
79
  }
63
80
  }
64
- let newKeys = items.map(this.keyFn);
65
- let newViews = new Array(items.length).fill(null);
66
- let newItems = new Array(items.length).fill(null);
81
+ const newKeys = items.map(this._keyFn);
82
+ const newViews = new Array(items.length).fill(null);
83
+ const newItems = new Array(items.length).fill(null);
67
84
  let oldHead = 0;
68
85
  let oldTail = oldViews.length - 1;
69
86
  let newHead = 0;
@@ -77,41 +94,36 @@ export class List {
77
94
  oldTail--;
78
95
  }
79
96
  else if (oldKeys[oldHead] === newKeys[newHead]) {
80
- // Head-Head match
81
97
  newViews[newHead] = oldViews[oldHead];
82
98
  newItems[newHead] = items[newHead];
83
- this.updateView(oldViews[oldHead], items[newHead], oldItems[oldHead]);
99
+ this._updateView(oldViews[oldHead], items[newHead], oldItems[oldHead]);
84
100
  oldHead++;
85
101
  newHead++;
86
102
  }
87
103
  else if (oldKeys[oldTail] === newKeys[newTail]) {
88
- // Tail-Tail match
89
104
  newViews[newTail] = oldViews[oldTail];
90
105
  newItems[newTail] = items[newTail];
91
- this.updateView(oldViews[oldTail], items[newTail], oldItems[oldTail]);
106
+ this._updateView(oldViews[oldTail], items[newTail], oldItems[oldTail]);
92
107
  oldTail--;
93
108
  newTail--;
94
109
  }
95
110
  else if (oldKeys[oldHead] === newKeys[newTail]) {
96
- // Head-Tail match: move old head to after old tail
97
111
  newViews[newTail] = oldViews[oldHead];
98
112
  newItems[newTail] = items[newTail];
99
- this.updateView(oldViews[oldHead], items[newTail], oldItems[oldHead]);
100
- oldViews[oldTail].el.after(oldViews[oldHead].el);
113
+ this._updateView(oldViews[oldHead], items[newTail], oldItems[oldHead]);
114
+ oldViews[oldTail].toDOM().after(oldViews[oldHead].toDOM());
101
115
  oldHead++;
102
116
  newTail--;
103
117
  }
104
118
  else if (oldKeys[oldTail] === newKeys[newHead]) {
105
- // Tail-Head match: move old tail to before old head
106
119
  newViews[newHead] = oldViews[oldTail];
107
120
  newItems[newHead] = items[newHead];
108
- this.updateView(oldViews[oldTail], items[newHead], oldItems[oldTail]);
109
- oldViews[oldHead].el.before(oldViews[oldTail].el);
121
+ this._updateView(oldViews[oldTail], items[newHead], oldItems[oldTail]);
122
+ oldViews[oldHead].toDOM().before(oldViews[oldTail].toDOM());
110
123
  oldTail--;
111
124
  newHead++;
112
125
  }
113
126
  else {
114
- // Build map lazily
115
127
  if (!oldKeyToIndex) {
116
128
  oldKeyToIndex = new Map();
117
129
  for (let i = oldHead; i <= oldTail; i++) {
@@ -120,55 +132,46 @@ export class List {
120
132
  }
121
133
  }
122
134
  }
123
- let oldIndex = oldKeyToIndex.get(newKeys[newHead]);
135
+ const oldIndex = oldKeyToIndex.get(newKeys[newHead]);
124
136
  if (oldIndex === undefined) {
125
- // New item
126
- let view = new this.ViewClass();
127
- view.createAndMount();
137
+ const view = this._factory(items[newHead]);
128
138
  newViews[newHead] = view;
129
139
  newItems[newHead] = items[newHead];
130
- oldViews[oldHead].el.before(view.el);
131
- this.updateView(view, items[newHead], null);
140
+ oldViews[oldHead].toDOM().before(view.toDOM());
132
141
  }
133
142
  else {
134
- // Move existing
135
- let view = oldViews[oldIndex];
136
- this.updateView(view, items[newHead], oldItems[oldIndex]);
143
+ const view = oldViews[oldIndex];
144
+ this._updateView(view, items[newHead], oldItems[oldIndex]);
137
145
  newViews[newHead] = view;
138
146
  newItems[newHead] = items[newHead];
139
- oldViews[oldHead].el.before(view.el);
147
+ oldViews[oldHead].toDOM().before(view.toDOM());
140
148
  oldViews[oldIndex] = null;
141
149
  }
142
150
  newHead++;
143
151
  }
144
152
  }
145
- // Remove remaining old items
146
153
  while (oldHead <= oldTail) {
147
154
  if (oldViews[oldHead] !== null) {
148
- oldViews[oldHead].el.remove();
155
+ oldViews[oldHead].toDOM().remove();
149
156
  }
150
157
  oldHead++;
151
158
  }
152
- // Add remaining new items
153
159
  while (newHead <= newTail) {
154
- let view = new this.ViewClass();
155
- view.createAndMount();
160
+ const view = this._factory(items[newHead]);
156
161
  newViews[newHead] = view;
157
162
  newItems[newHead] = items[newHead];
158
- let el = view.el;
159
- let ref = newViews[newTail + 1]?.el;
163
+ const ref = newViews[newTail + 1]?.toDOM();
160
164
  if (ref) {
161
- ref.before(el);
165
+ ref.before(view.toDOM());
162
166
  }
163
167
  else {
164
- container.append(el);
168
+ container.append(view.toDOM());
165
169
  }
166
- this.updateView(view, items[newHead], null);
167
170
  newHead++;
168
171
  }
169
- this.views = newViews;
170
- this.keys = newKeys;
171
- this.items = newItems;
172
+ this._views = newViews;
173
+ this._keys = newKeys;
174
+ this._currentItems = newItems;
172
175
  }
173
176
  }
174
177
  //# sourceMappingURL=list.js.map
package/dist/list.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../src/list.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../src/list.ts"],"names":[],"mappings":"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"}
package/dist/view.d.ts CHANGED
@@ -1,15 +1,30 @@
1
- export { SafeHTML, html, unsafeHTML } from './html.ts';
2
- import { SafeHTML } from './html.ts';
3
- export declare class View<T = Record<string, unknown>> {
4
- el: HTMLElement;
5
- createElement(): HTMLElement;
6
- template(_props?: T): SafeHTML;
7
- createAndMount(): void;
8
- mount(el: HTMLElement): void;
9
- update(_data?: T): HTMLElement;
1
+ import { Element, type Child } from './element.ts';
2
+ export declare class View extends Element {
3
+ protected _rendered: Element | null;
4
+ constructor();
5
+ render(): Element;
6
+ protected _getRendered(): Element;
7
+ append(...children: Child[]): this;
8
+ prepend(...children: Child[]): this;
9
+ setText(text: string): this;
10
+ setAttribute(name: string, value: string): this;
11
+ removeAttribute(name: string): this;
12
+ toggleAttribute(name: string, force?: boolean): this;
13
+ addClass(...classes: string[]): this;
14
+ removeClass(...classes: string[]): this;
15
+ toggleClass(name: string, force?: boolean): this;
16
+ setStyle(prop: string, value: string): this;
17
+ removeStyle(prop: string): this;
18
+ show(): this;
19
+ hide(): this;
20
+ on(event: string, handler: EventListener): this;
21
+ setHTML(html: string): this;
22
+ clear(): this;
23
+ disable(): this;
24
+ enable(): this;
25
+ toDOM(): HTMLElement;
26
+ hydrate(el: HTMLElement): this;
27
+ toString(): string;
28
+ mount(container: HTMLElement): this;
10
29
  }
11
- interface Slottable {
12
- template(props?: any): SafeHTML;
13
- }
14
- export declare function slot<T extends Slottable>(target: T, ...args: Parameters<T['template']>): SafeHTML;
15
30
  //# sourceMappingURL=view.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../src/view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAQ,MAAM,WAAW,CAAC;AAE3C,qBAAa,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC3C,EAAE,EAAG,WAAW,CAAC;IAEjB,aAAa,IAAI,WAAW;IAW5B,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,QAAQ;IAI9B,cAAc,IAAI,IAAI;IAItB,KAAK,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAI5B,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,WAAW;CAG/B;AAED,UAAU,SAAS;IACjB,QAAQ,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,QAAQ,CAAC;CACjC;AAED,wBAAgB,IAAI,CAAC,CAAC,SAAS,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,QAAQ,CAEjG"}
1
+ {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../src/view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,cAAc,CAAC;AAEnD,qBAAa,IAAK,SAAQ,OAAO;IAC/B,SAAS,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAAQ;;IAM3C,MAAM,IAAI,OAAO;IAIjB,SAAS,CAAC,YAAY,IAAI,OAAO;IAOjC,MAAM,CAAC,GAAG,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI;IAKlC,OAAO,CAAC,GAAG,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI;IAKnC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3B,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAK/C,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKnC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI;IAKpD,QAAQ,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAKpC,WAAW,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAKvC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI;IAKhD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAK3C,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK/B,IAAI,IAAI,IAAI;IAKZ,IAAI,IAAI,IAAI;IAKZ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI;IAK/C,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM3B,KAAK,IAAI,IAAI;IAKb,OAAO,IAAI,IAAI;IAKf,MAAM,IAAI,IAAI;IAKd,KAAK,IAAI,WAAW;IAOpB,OAAO,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAO9B,QAAQ,IAAI,MAAM;IAIlB,KAAK,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;CAIpC"}
package/dist/view.js CHANGED
@@ -1,31 +1,112 @@
1
- export { SafeHTML, html, unsafeHTML } from "./html.js";
2
- import { html } from "./html.js";
3
- export class View {
4
- el;
5
- createElement() {
6
- let ctor = this.constructor;
7
- if (!ctor._tpl) {
8
- let tpl = document.createElement('template');
9
- tpl.innerHTML = this.template().toString();
10
- ctor._tpl = tpl.content.firstElementChild;
1
+ import { Element } from "./element.js";
2
+ export class View extends Element {
3
+ _rendered = null;
4
+ constructor() {
5
+ super('');
6
+ }
7
+ render() {
8
+ return new Element('div');
9
+ }
10
+ _getRendered() {
11
+ if (!this._rendered) {
12
+ this._rendered = this.render();
11
13
  }
12
- this.el = ctor._tpl.cloneNode(true);
13
- return this.el;
14
+ return this._rendered;
15
+ }
16
+ append(...children) {
17
+ this._getRendered().append(...children);
18
+ return this;
19
+ }
20
+ prepend(...children) {
21
+ this._getRendered().prepend(...children);
22
+ return this;
23
+ }
24
+ setText(text) {
25
+ this._getRendered().setText(text);
26
+ return this;
27
+ }
28
+ setAttribute(name, value) {
29
+ this._getRendered().setAttribute(name, value);
30
+ return this;
31
+ }
32
+ removeAttribute(name) {
33
+ this._getRendered().removeAttribute(name);
34
+ return this;
35
+ }
36
+ toggleAttribute(name, force) {
37
+ this._getRendered().toggleAttribute(name, force);
38
+ return this;
39
+ }
40
+ addClass(...classes) {
41
+ this._getRendered().addClass(...classes);
42
+ return this;
43
+ }
44
+ removeClass(...classes) {
45
+ this._getRendered().removeClass(...classes);
46
+ return this;
47
+ }
48
+ toggleClass(name, force) {
49
+ this._getRendered().toggleClass(name, force);
50
+ return this;
14
51
  }
15
- template(_props) {
16
- return html ``;
52
+ setStyle(prop, value) {
53
+ this._getRendered().setStyle(prop, value);
54
+ return this;
17
55
  }
18
- createAndMount() {
19
- this.mount(this.createElement());
56
+ removeStyle(prop) {
57
+ this._getRendered().removeStyle(prop);
58
+ return this;
20
59
  }
21
- mount(el) {
60
+ show() {
61
+ this._getRendered().show();
62
+ return this;
63
+ }
64
+ hide() {
65
+ this._getRendered().hide();
66
+ return this;
67
+ }
68
+ on(event, handler) {
69
+ this._getRendered().on(event, handler);
70
+ return this;
71
+ }
72
+ setHTML(html) {
73
+ const r = this._getRendered();
74
+ if (r instanceof Element)
75
+ r.setHTML(html);
76
+ return this;
77
+ }
78
+ clear() {
79
+ this._getRendered().clear();
80
+ return this;
81
+ }
82
+ disable() {
83
+ this._getRendered().disable();
84
+ return this;
85
+ }
86
+ enable() {
87
+ this._getRendered().enable();
88
+ return this;
89
+ }
90
+ toDOM() {
91
+ if (this.el)
92
+ return this.el;
93
+ const el = this._getRendered().toDOM();
22
94
  this.el = el;
95
+ return el;
23
96
  }
24
- update(_data) {
25
- return this.el;
97
+ hydrate(el) {
98
+ if (this.el)
99
+ return this;
100
+ this._getRendered().hydrate(el);
101
+ this.el = el;
102
+ return this;
103
+ }
104
+ toString() {
105
+ return this._getRendered().toString();
106
+ }
107
+ mount(container) {
108
+ container.append(this.toDOM());
109
+ return this;
26
110
  }
27
- }
28
- export function slot(target, ...args) {
29
- return target.template(...args);
30
111
  }
31
112
  //# sourceMappingURL=view.js.map
package/dist/view.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"view.js","sourceRoot":"","sources":["../src/view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAY,IAAI,EAAE,MAAM,WAAW,CAAC;AAE3C,MAAM,OAAO,IAAI;IACf,EAAE,CAAe;IAEjB,aAAa;QACX,IAAI,IAAI,GAAG,IAAI,CAAC,WAAkB,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAC7C,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC;YAC3C,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC;QAC5C,CAAC;QACD,IAAI,CAAC,EAAE,GAAI,IAAI,CAAC,IAAoB,CAAC,SAAS,CAAC,IAAI,CAAgB,CAAC;QACpE,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAED,QAAQ,CAAC,MAAU;QACjB,OAAO,IAAI,CAAA,EAAE,CAAC;IAChB,CAAC;IAED,cAAc;QACZ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,EAAe;QACnB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAED,MAAM,CAAC,KAAS;QACd,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;CACF;AAMD,MAAM,UAAU,IAAI,CAAsB,MAAS,EAAE,GAAG,IAA+B;IACrF,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../src/view.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,23 +1,15 @@
1
1
  {
2
2
  "name": "@matthewp/zebra",
3
- "version": "0.0.4",
3
+ "version": "0.1.1",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
7
- "types": "./dist/view.d.ts",
8
- "default": "./dist/view.js"
9
- },
10
- "./html": {
11
- "types": "./dist/html.d.ts",
12
- "default": "./dist/html.js"
7
+ "types": "./dist/index.d.ts",
8
+ "default": "./dist/index.js"
13
9
  },
14
10
  "./list": {
15
11
  "types": "./dist/list.d.ts",
16
12
  "default": "./dist/list.js"
17
- },
18
- "./server": {
19
- "types": "./dist/server.d.ts",
20
- "default": "./dist/server.js"
21
13
  }
22
14
  },
23
15
  "files": [
@@ -28,5 +20,8 @@
28
20
  },
29
21
  "devDependencies": {
30
22
  "typescript": "^5.8.0"
23
+ },
24
+ "dependencies": {
25
+ "alien-signals": "^3.1.2"
31
26
  }
32
27
  }
package/dist/html.d.ts DELETED
@@ -1,8 +0,0 @@
1
- export declare class SafeHTML {
2
- #private;
3
- constructor(value: string);
4
- toString(): string;
5
- }
6
- export declare function unsafeHTML(s: string): SafeHTML;
7
- export declare function html(strings: TemplateStringsArray, ...values: unknown[]): SafeHTML;
8
- //# sourceMappingURL=html.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../src/html.ts"],"names":[],"mappings":"AAYA,qBAAa,QAAQ;;gBAEP,KAAK,EAAE,MAAM;IAGzB,QAAQ,IAAI,MAAM;CAGnB;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,QAAQ,CAE9C;AAYD,wBAAgB,IAAI,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,CAOlF"}
package/dist/html.js DELETED
@@ -1,43 +0,0 @@
1
- const ESC = {
2
- '&': '&amp;',
3
- '<': '&lt;',
4
- '>': '&gt;',
5
- '"': '&quot;',
6
- "'": '&#39;',
7
- };
8
- function escapeHtml(s) {
9
- return s.replace(/[&<>"']/g, (ch) => ESC[ch]);
10
- }
11
- export class SafeHTML {
12
- #html;
13
- constructor(value) {
14
- this.#html = value;
15
- }
16
- toString() {
17
- return this.#html;
18
- }
19
- }
20
- export function unsafeHTML(s) {
21
- return new SafeHTML(s);
22
- }
23
- function resolveValue(val) {
24
- if (val == null || val === false)
25
- return '';
26
- if (val instanceof SafeHTML)
27
- return val.toString();
28
- if (typeof val === 'object' && 'template' in val && typeof val.template === 'function') {
29
- return val.template().toString();
30
- }
31
- if (Array.isArray(val))
32
- return val.map(resolveValue).join('');
33
- return escapeHtml(String(val));
34
- }
35
- export function html(strings, ...values) {
36
- let result = strings[0];
37
- for (let i = 0; i < values.length; i++) {
38
- result += resolveValue(values[i]);
39
- result += strings[i + 1];
40
- }
41
- return new SafeHTML(result);
42
- }
43
- //# sourceMappingURL=html.js.map
package/dist/html.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"html.js","sourceRoot":"","sources":["../src/html.ts"],"names":[],"mappings":"AAAA,MAAM,GAAG,GAA2B;IAClC,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,OAAO;CACb,CAAC;AAEF,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,OAAO,QAAQ;IACnB,KAAK,CAAS;IACd,YAAY,KAAa;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IACD,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF;AAED,MAAM,UAAU,UAAU,CAAC,CAAS;IAClC,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,YAAY,CAAC,GAAY;IAChC,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,EAAE,CAAC;IAC5C,IAAI,GAAG,YAAY,QAAQ;QAAE,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;IACnD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,UAAU,IAAI,GAAG,IAAI,OAAQ,GAAW,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;QAChG,OAAQ,GAAW,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC;IAC5C,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9D,OAAO,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,OAA6B,EAAE,GAAG,MAAiB;IACtE,IAAI,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC"}
package/dist/server.d.ts DELETED
@@ -1,3 +0,0 @@
1
- import type { View } from './view.ts';
2
- export declare function renderToString(view: View, props?: Record<string, unknown>): string;
3
- //# sourceMappingURL=server.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAElF"}
package/dist/server.js DELETED
@@ -1,4 +0,0 @@
1
- export function renderToString(view, props) {
2
- return view.template(props).toString();
3
- }
4
- //# sourceMappingURL=server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,cAAc,CAAC,IAAU,EAAE,KAA+B;IACxE,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;AACzC,CAAC"}