frosty 0.0.46 → 0.0.48

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/dom.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { _ as _DOMRenderer } from './internals/common-ArUp7Iqs.js';
1
+ import { _ as _DOMRenderer } from './internals/common-B0V0zJgq.js';
2
2
  import './internals/common-CUIKizze.js';
3
3
  import '@o2ter/utils-js';
4
4
  import 'lodash';
package/dist/dom.js CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var common = require('./internals/common-Gtdx0S3S.js');
3
+ var common = require('./internals/common-MihgZvIs.js');
4
4
  require('lodash');
5
5
  require('myers.js');
6
6
  require('./internals/component-BiP3XIPe.js');
package/dist/dom.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { _ as _DOMRenderer } from './internals/common-DGuu8VPY.mjs';
1
+ import { _ as _DOMRenderer } from './internals/common-FSgbZ-Ci.mjs';
2
2
  import 'lodash';
3
3
  import 'myers.js';
4
4
  import './internals/component-BzurKp_J.mjs';
@@ -15,12 +15,9 @@ declare abstract class DOMNativeNode extends NativeElementType {
15
15
  declare abstract class _DOMRenderer extends _Renderer<Element | DOMNativeNode> {
16
16
  private _window;
17
17
  private _namespace_map;
18
- private _tracked_elements;
19
- private _tracked_props;
20
- private _tracked_listener;
21
18
  private _tracked_head_children;
22
19
  private _tracked_style;
23
- private _tracked_style_names;
20
+ private _tracked_elements;
24
21
  constructor(window: Window | DOMWindow);
25
22
  get document(): Document;
26
23
  get window(): Window | DOMWindow;
@@ -31,4 +28,4 @@ declare abstract class _DOMRenderer extends _Renderer<Element | DOMNativeNode> {
31
28
  }
32
29
 
33
30
  export { DOMNativeNode as D, _DOMRenderer as _ };
34
- //# sourceMappingURL=common-ArUp7Iqs.d.ts.map
31
+ //# sourceMappingURL=common-B0V0zJgq.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common-B0V0zJgq.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -3825,12 +3825,11 @@ class StyleBuilder {
3825
3825
  const className = [];
3826
3826
  let searchIdx = 0;
3827
3827
  for (const style of styles) {
3828
- const _style = JSON.stringify(style);
3829
- const found = _.findIndex(this.registry, x => x._style === _style, searchIdx);
3828
+ const found = _.findIndex(this.registry, x => _.isEqual(x.style, style), searchIdx);
3830
3829
  searchIdx = found === -1 ? this.registry.length : found;
3831
3830
  if (found === -1) {
3832
3831
  const name = `__v_${uniqueId()}`;
3833
- this.registry.push({ name, style, _style });
3832
+ this.registry.push({ name, style });
3834
3833
  this.clearCache();
3835
3834
  className.push(name);
3836
3835
  }
@@ -3894,12 +3893,9 @@ class DOMNativeNode extends NativeElementType {
3894
3893
  class _DOMRenderer extends _Renderer {
3895
3894
  _window;
3896
3895
  _namespace_map = new WeakMap();
3897
- _tracked_elements = new WeakSet();
3898
- _tracked_props = new WeakMap();
3899
- _tracked_listener = new WeakMap();
3900
3896
  _tracked_head_children = [];
3901
3897
  _tracked_style = new StyleBuilder();
3902
- _tracked_style_names = [];
3898
+ _tracked_elements = new Map();
3903
3899
  constructor(window) {
3904
3900
  super();
3905
3901
  this._window = window;
@@ -3915,11 +3911,10 @@ class _DOMRenderer extends _Renderer {
3915
3911
  if (this._server) {
3916
3912
  this._tracked_head_children = [];
3917
3913
  }
3918
- this._tracked_style_names = [];
3919
3914
  }
3920
3915
  /** @internal */
3921
3916
  _afterUpdate() {
3922
- this._tracked_style.select(this._tracked_style_names);
3917
+ this._tracked_style.select([...this._tracked_elements.values().flatMap(({ className }) => className)]);
3923
3918
  const head = this.document.head ?? this.document.createElementNS(HTML_NS, 'head');
3924
3919
  if (this._tracked_style.isEmpty) {
3925
3920
  if (this._server) {
@@ -3947,6 +3942,11 @@ class _DOMRenderer extends _Renderer {
3947
3942
  if (!_.isString(type) && type.prototype instanceof DOMNativeNode) {
3948
3943
  const ElementType = type;
3949
3944
  const elem = ElementType.createElement(this.document, this);
3945
+ this._tracked_elements.set(elem, {
3946
+ props: [],
3947
+ className: [],
3948
+ listener: {},
3949
+ });
3950
3950
  this._updateElement(node, elem, stack);
3951
3951
  return elem;
3952
3952
  }
@@ -3966,19 +3966,27 @@ class _DOMRenderer extends _Renderer {
3966
3966
  const ns = _ns_list.length > 1 ? parent && _.first(_.intersection([this._namespace_map.get(parent)], _ns_list)) : _.first(_ns_list);
3967
3967
  const elem = ns ? this.document.createElementNS(ns, type) : this.document.createElement(type);
3968
3968
  this._namespace_map.set(node, ns);
3969
+ this._tracked_elements.set(elem, {
3970
+ props: [],
3971
+ className: [],
3972
+ listener: {},
3973
+ });
3969
3974
  this._updateElement(node, elem, stack);
3970
- this._tracked_elements.add(elem);
3971
3975
  return elem;
3972
3976
  }
3973
- __createBuiltClassName(className, style) {
3977
+ __createBuiltClassName(element, className, style) {
3974
3978
  const _className = _.compact(_.flattenDeep([className]));
3975
3979
  const built = this._tracked_style.buildStyle(_.compact(_.flattenDeep([style])));
3976
- this._tracked_style_names.push(...built);
3980
+ const tracked = this._tracked_elements.get(element);
3981
+ if (tracked)
3982
+ tracked.className = built;
3977
3983
  return [..._className, ...built].join(' ');
3978
3984
  }
3979
3985
  __updateEventListener(element, key, listener, options) {
3980
3986
  const event = key.endsWith('Capture') ? key.slice(2, -7).toLowerCase() : key.slice(2).toLowerCase();
3981
- const tracked_listener = this._tracked_listener.get(element) ?? {};
3987
+ const tracked_listener = this._tracked_elements.get(element)?.listener;
3988
+ if (!tracked_listener)
3989
+ return;
3982
3990
  if (tracked_listener[key] !== listener) {
3983
3991
  if (_.isFunction(tracked_listener[key]))
3984
3992
  element.removeEventListener(event, tracked_listener[key], options);
@@ -3986,7 +3994,6 @@ class _DOMRenderer extends _Renderer {
3986
3994
  element.addEventListener(event, listener, options);
3987
3995
  }
3988
3996
  tracked_listener[key] = listener;
3989
- this._tracked_listener.set(element, tracked_listener);
3990
3997
  }
3991
3998
  /** @internal */
3992
3999
  _updateElement(node, element, stack) {
@@ -3994,7 +4001,7 @@ class _DOMRenderer extends _Renderer {
3994
4001
  const { props: { ref, className, style, inlineStyle, ..._props } } = node;
3995
4002
  if (ref)
3996
4003
  mergeRefs(ref)(element.target);
3997
- const builtClassName = this.__createBuiltClassName(className, style);
4004
+ const builtClassName = this.__createBuiltClassName(element, className, style);
3998
4005
  const { css } = processCss(inlineStyle);
3999
4006
  element.update({
4000
4007
  className: builtClassName ? builtClassName : undefined,
@@ -4013,28 +4020,35 @@ class _DOMRenderer extends _Renderer {
4013
4020
  }
4014
4021
  if (ref)
4015
4022
  mergeRefs(ref)(element);
4016
- const builtClassName = this.__createBuiltClassName(className, style);
4023
+ const builtClassName = this.__createBuiltClassName(element, className, style);
4017
4024
  if (_.isEmpty(builtClassName)) {
4018
- element.removeAttribute('class');
4025
+ if (!_.isNil(element.getAttribute('class')))
4026
+ element.removeAttribute('class');
4019
4027
  }
4020
- else {
4028
+ else if (element.className !== builtClassName) {
4021
4029
  element.className = builtClassName;
4022
4030
  }
4023
- if (!_.isEmpty(innerHTML))
4031
+ if (!_.isEmpty(innerHTML) && element.innerHTML !== innerHTML)
4024
4032
  element.innerHTML = innerHTML;
4025
4033
  if (inlineStyle) {
4026
4034
  const { css } = processCss(inlineStyle);
4027
- element.setAttribute('style', css.split('\n').join(''));
4035
+ const oldValue = element.getAttribute('style');
4036
+ const newValue = css.split('\n').join('');
4037
+ if (oldValue !== newValue)
4038
+ element.setAttribute('style', newValue);
4028
4039
  }
4029
- else {
4040
+ else if (!_.isNil(element.getAttribute('style'))) {
4030
4041
  element.removeAttribute('style');
4031
4042
  }
4032
- const removed = _.difference(this._tracked_props.get(element), _.keys(_props));
4043
+ const tracked = this._tracked_elements.get(element);
4044
+ if (!tracked)
4045
+ return;
4046
+ const removed = _.difference(tracked.props, _.keys(_props));
4033
4047
  const props = {
4034
4048
  ..._props,
4035
4049
  ..._.fromPairs(_.map(removed, x => [x, undefined])),
4036
4050
  };
4037
- this._tracked_props.set(element, _.keys(_props));
4051
+ tracked.props = _.keys(_props);
4038
4052
  for (const [key, value] of _.entries(props)) {
4039
4053
  if (_.includes(globalEvents, key)) {
4040
4054
  this.__updateEventListener(element, key, value, { capture: false });
@@ -4043,17 +4057,19 @@ class _DOMRenderer extends _Renderer {
4043
4057
  this.__updateEventListener(element, key, value, { capture: true });
4044
4058
  }
4045
4059
  else if (isWriteable(element, key)) {
4046
- element[key] = value;
4060
+ if (element[key] !== value)
4061
+ element[key] = value;
4047
4062
  }
4048
4063
  else if (key.startsWith('data-')) {
4064
+ const oldValue = element.getAttribute(key);
4049
4065
  if (value === false || _.isNil(value)) {
4050
- element.removeAttribute(key);
4051
- }
4052
- else if (value === true) {
4053
- element.setAttribute(key, '');
4066
+ if (!_.isNil(oldValue))
4067
+ element.removeAttribute(key);
4054
4068
  }
4055
- else if (_.isNumber(value) || _.isString(value)) {
4056
- element.setAttribute(key, `${value}`);
4069
+ else {
4070
+ const newValue = value === true ? '' : `${value}`;
4071
+ if (oldValue !== newValue)
4072
+ element.setAttribute(key, newValue);
4057
4073
  }
4058
4074
  }
4059
4075
  else {
@@ -4063,14 +4079,15 @@ class _DOMRenderer extends _Renderer {
4063
4079
  ?? svgProps[type]?.[key]
4064
4080
  ?? {};
4065
4081
  if (_type && attr && _propValue[_type]) {
4082
+ const oldValue = element.getAttribute(key);
4066
4083
  if (value === false || _.isNil(value)) {
4067
- element.removeAttribute(attr);
4084
+ if (!_.isNil(oldValue))
4085
+ element.removeAttribute(key);
4068
4086
  }
4069
- else if (value === true) {
4070
- element.setAttribute(attr, '');
4071
- }
4072
- else if (_.isNumber(value) || _.isString(value)) {
4073
- element.setAttribute(attr, `${value}`);
4087
+ else {
4088
+ const newValue = value === true ? '' : `${value}`;
4089
+ if (oldValue !== newValue)
4090
+ element.setAttribute(key, newValue);
4074
4091
  }
4075
4092
  }
4076
4093
  }
@@ -4097,7 +4114,7 @@ class _DOMRenderer extends _Renderer {
4097
4114
  element.destroy();
4098
4115
  }
4099
4116
  else {
4100
- const tracked_listener = this._tracked_listener.get(element) ?? {};
4117
+ const tracked_listener = this._tracked_elements.get(element)?.listener;
4101
4118
  for (const [key, listener] of _.entries(tracked_listener)) {
4102
4119
  const event = key.endsWith('Capture') ? key.slice(2, -7).toLowerCase() : key.slice(2).toLowerCase();
4103
4120
  if (_.isFunction(listener)) {
@@ -4105,6 +4122,7 @@ class _DOMRenderer extends _Renderer {
4105
4122
  }
4106
4123
  }
4107
4124
  }
4125
+ this._tracked_elements.delete(element);
4108
4126
  }
4109
4127
  __replaceChildren(element, children, force) {
4110
4128
  const diff = myersSync(_.map(element.childNodes, x => x.nodeType === this.document.TEXT_NODE ? x.textContent ?? '' : x), _.map(children, x => x instanceof DOMNativeNode ? x.target : x), { compare: (a, b) => a === b });
@@ -4145,4 +4163,4 @@ class _DOMRenderer extends _Renderer {
4145
4163
  }
4146
4164
 
4147
4165
  export { DOMNativeNode as D, _DOMRenderer as _ };
4148
- //# sourceMappingURL=common-DGuu8VPY.mjs.map
4166
+ //# sourceMappingURL=common-FSgbZ-Ci.mjs.map