rask-ui 0.17.0 → 0.18.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.
@@ -1 +1 @@
1
- {"version":3,"file":"batch.d.ts","sourceRoot":"","sources":["../src/batch.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC;AA8ClE,wBAAgB,KAAK,CAAC,EAAE,EAAE,cAAc,QAiBvC;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,QAgBvC"}
1
+ {"version":3,"file":"batch.d.ts","sourceRoot":"","sources":["../src/batch.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC;AA+BlE,wBAAgB,KAAK,CAAC,EAAE,EAAE,cAAc,QAgBvC;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,QA6CvC"}
package/dist/batch.js CHANGED
@@ -23,23 +23,9 @@ function flushAsyncQueue() {
23
23
  }
24
24
  asyncQueue.length = 0;
25
25
  }
26
- function flushSyncQueue(queue) {
27
- if (!queue.length)
28
- return;
29
- // No snapshot, just iterate.
30
- // New callbacks queued via nested syncBatch will create
31
- // their own queue on the stack and flush independently.
32
- for (let i = 0; i < queue.length; i++) {
33
- const cb = queue[i];
34
- queue[i] = undefined;
35
- cb();
36
- cb.__queued = false;
37
- }
38
- queue.length = 0;
39
- }
40
26
  export function queue(cb) {
41
- // Optional: uncomment this if you want deduping:
42
- // if (cb.__queued) return;
27
+ if (cb.__queued)
28
+ return;
43
29
  cb.__queued = true;
44
30
  // If we're in a sync batch, push to the current sync queue
45
31
  if (syncQueueStack.length) {
@@ -64,7 +50,35 @@ export function syncBatch(cb) {
64
50
  syncQueueStack.pop();
65
51
  throw e;
66
52
  }
67
- // Pop the queue and flush it
53
+ // CASCADING SYNCHRONOUS UPDATES
54
+ // ------------------------------
55
+ // Keep flushing the queue in a loop while it has work. This is critical for handling
56
+ // cascading reactive updates where one observer's notification triggers another.
57
+ //
58
+ // Example cascade: state → derived → component
59
+ // 1. User updates state in a syncBatch
60
+ // 2. Derived observer is notified and queued
61
+ // 3. Derived observer runs, marks derived as dirty
62
+ // 4. Derived's signal notifies component observers
63
+ // 5. Component observers are added to the SAME queue (because it's still on the stack)
64
+ // 6. Loop continues, flushing component observers
65
+ //
66
+ // By keeping the queue on the stack during the flush loop, all synchronous cascades
67
+ // are captured in the same batch. This ensures:
68
+ // - No updates escape to the async queue
69
+ // - Components render with fully updated derived values
70
+ // - Deduplication works across the entire cascade (same observer can't be queued twice)
71
+ //
72
+ // The loop terminates when all cascades have settled (queue is empty).
73
+ while (queue.length > 0) {
74
+ for (let i = 0; i < queue.length; i++) {
75
+ const cb = queue[i];
76
+ queue[i] = undefined;
77
+ cb();
78
+ cb.__queued = false;
79
+ }
80
+ queue.length = 0;
81
+ }
82
+ // Pop the queue after everything is flushed
68
83
  syncQueueStack.pop();
69
- flushSyncQueue(queue);
70
84
  }
@@ -1,10 +1,15 @@
1
- import { VNode, Component, Props } from "inferno";
1
+ import { VNode, Component, Props, InfernoNode } from "inferno";
2
2
  import { Observer } from "./observation";
3
3
  export type RaskStatelessFunctionComponent<P extends Props<any>> = (() => VNode) | ((props: P) => VNode);
4
4
  export declare class RaskStatelessComponent extends Component {
5
5
  renderFn: RaskStatelessFunctionComponent<any>;
6
+ private isNotified;
7
+ private isReconciling;
6
8
  observer: Observer;
7
- shouldComponentUpdate(nextProps: Props<any>): boolean;
9
+ private reactiveProps;
10
+ shouldComponentUpdate(): boolean;
11
+ componentWillMount(): void;
12
+ componentWillReceiveProps(nextProps: any): void;
8
13
  render(): VNode;
9
14
  }
10
15
  export declare function getCurrentComponent(): RaskStatefulComponent<any> | undefined;
@@ -15,10 +20,10 @@ export declare class RaskStatefulComponent<P extends Props<any>> extends Compone
15
20
  setup: RaskStatefulFunctionComponent<P>;
16
21
  private renderFn?;
17
22
  private reactiveProps?;
18
- private observer;
23
+ private isNotified;
24
+ private isReconciling;
25
+ observer: Observer;
19
26
  isRendering: boolean;
20
- private willRender;
21
- private nextProps;
22
27
  effects: Array<{
23
28
  isDirty: boolean;
24
29
  run: () => void;
@@ -27,14 +32,12 @@ export declare class RaskStatefulComponent<P extends Props<any>> extends Compone
27
32
  getChildContext(): any;
28
33
  onMounts: Array<() => void>;
29
34
  onCleanups: Array<() => void>;
30
- private createReactiveProps;
31
35
  componentDidMount(): void;
32
36
  componentWillUnmount(): void;
33
- /**
34
- *
35
- */
36
- componentWillUpdate(nextProps: any): void;
37
- shouldComponentUpdate(nextProps: Props<any>): boolean;
37
+ componentWillReceiveProps(nextProps: Readonly<{
38
+ children?: InfernoNode;
39
+ } & P>): void;
40
+ shouldComponentUpdate(): boolean;
38
41
  render(): any;
39
42
  }
40
43
  export declare function createComponent(props: Props<any>, key?: string): VNode;
@@ -1 +1 @@
1
- {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../src/component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAExE,OAAO,EAAsB,QAAQ,EAAU,MAAM,eAAe,CAAC;AAIrE,MAAM,MAAM,8BAA8B,CAAC,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,IAC3D,CAAC,MAAM,KAAK,CAAC,GACb,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC;AAE1B,qBAAa,sBAAuB,SAAQ,SAAS;IAC3C,QAAQ,EAAE,8BAA8B,CAAC,GAAG,CAAC,CAAC;IACtD,QAAQ,WAEL;IACH,qBAAqB,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO;IAUrD,MAAM;CAOP;AAID,wBAAgB,mBAAmB,2CAElC;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,IAAI,QAM5C;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,IAAI,QAMxC;AAED,MAAM,MAAM,6BAA6B,CAAC,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,IAC1D,CAAC,MAAM,MAAM,KAAK,CAAC,GACnB,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,KAAK,CAAC,CAAC;AAEhC,qBAAa,qBAAqB,CAAC,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,CAAE,SAAQ,SAAS,CAAC,CAAC,CAAC;IACnE,KAAK,EAAE,6BAA6B,CAAC,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,QAAQ,CAAC,CAAc;IAC/B,OAAO,CAAC,aAAa,CAAC,CAAa;IACnC,OAAO,CAAC,QAAQ,CAKb;IAEH,WAAW,UAAS;IAEpB,OAAO,CAAC,UAAU,CAAQ;IAG1B,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC,CAAM;IAC3D,QAAQ,gBAAa;IACrB,eAAe;IAUf,QAAQ,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAM;IACjC,UAAU,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAM;IACnC,OAAO,CAAC,mBAAmB;IAyD3B,iBAAiB,IAAI,IAAI;IAGzB,oBAAoB,IAAI,IAAI;IAG5B;;OAEG;IACH,mBAAmB,CAAC,SAAS,EAAE,GAAG;IAkBlC,qBAAqB,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO;IAWrD,MAAM;CA0CP;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,SAO9D"}
1
+ {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../src/component.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,EACL,SAAS,EACT,KAAK,EACL,WAAW,EACZ,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAsB,QAAQ,EAAU,MAAM,eAAe,CAAC;AAIrE,MAAM,MAAM,8BAA8B,CAAC,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,IAC3D,CAAC,MAAM,KAAK,CAAC,GACb,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC;AAE1B,qBAAa,sBAAuB,SAAQ,SAAS;IAC3C,QAAQ,EAAE,8BAA8B,CAAC,GAAG,CAAC,CAAC;IACtD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAS;IAC9B,QAAQ,WAML;IACH,OAAO,CAAC,aAAa,CAAc;IAEnC,qBAAqB,IAAI,OAAO;IAMhC,kBAAkB,IAAI,IAAI;IAG1B,yBAAyB,CAAC,SAAS,EAAE,GAAG,GAAG,IAAI;IAe/C,MAAM;CAOP;AAID,wBAAgB,mBAAmB,2CAElC;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,IAAI,QAM5C;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,IAAI,QAMxC;AAED,MAAM,MAAM,6BAA6B,CAAC,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,IAC1D,CAAC,MAAM,MAAM,KAAK,CAAC,GACnB,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,KAAK,CAAC,CAAC;AAEhC,qBAAa,qBAAqB,CAAC,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,CAAE,SAAQ,SAAS,CAAC,CAAC,CAAC;IACnE,KAAK,EAAE,6BAA6B,CAAC,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,QAAQ,CAAC,CAAc;IAC/B,OAAO,CAAC,aAAa,CAAC,CAAa;IAwBnC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAS;IAE9B,QAAQ,WAOL;IAEH,WAAW,UAAS;IACpB,OAAO,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC,CAAM;IAC3D,QAAQ,gBAAa;IACrB,eAAe;IAUf,QAAQ,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAM;IACjC,UAAU,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAM;IAEnC,iBAAiB,IAAI,IAAI;IAGzB,oBAAoB,IAAI,IAAI;IAI5B,yBAAyB,CACvB,SAAS,EAAE,QAAQ,CAAC;QAAE,QAAQ,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,CAAC,CAAC,GAClD,IAAI;IAcP,qBAAqB,IAAI,OAAO;IAMhC,MAAM;CAyCP;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,SAO9D"}
package/dist/component.js CHANGED
@@ -1,23 +1,43 @@
1
- import { createComponentVNode, Component } from "inferno";
1
+ import { createComponentVNode, Component, } from "inferno";
2
2
  import { getCurrentObserver, Observer, Signal } from "./observation";
3
3
  import { syncBatch } from "./batch";
4
4
  import { PROXY_MARKER } from "./useState";
5
5
  export class RaskStatelessComponent extends Component {
6
+ isNotified = false;
7
+ isReconciling = false;
6
8
  observer = new Observer(() => {
9
+ if (this.isReconciling) {
10
+ this.isNotified = true;
11
+ return;
12
+ }
7
13
  this.forceUpdate();
8
14
  });
9
- shouldComponentUpdate(nextProps) {
10
- for (const prop in nextProps) {
11
- // @ts-ignore
12
- if (this.props[prop] !== nextProps[prop]) {
13
- return true;
15
+ reactiveProps;
16
+ shouldComponentUpdate() {
17
+ const shouldRender = this.isNotified;
18
+ this.isNotified = false;
19
+ this.isReconciling = false;
20
+ return shouldRender;
21
+ }
22
+ componentWillMount() {
23
+ this.reactiveProps = createReactiveProps(this);
24
+ }
25
+ componentWillReceiveProps(nextProps) {
26
+ this.isReconciling = true;
27
+ syncBatch(() => {
28
+ for (const prop in nextProps) {
29
+ if (this.props[prop] === nextProps[prop]) {
30
+ continue;
31
+ }
32
+ // @ts-ignore
33
+ this.reactiveProps[prop] = nextProps[prop];
14
34
  }
15
- }
16
- return false;
35
+ });
36
+ this.props = nextProps;
17
37
  }
18
38
  render() {
19
39
  const stopObserving = this.observer.observe();
20
- const result = this.renderFn(this.props);
40
+ const result = this.renderFn(this.reactiveProps);
21
41
  stopObserving();
22
42
  return result;
23
43
  }
@@ -41,19 +61,39 @@ export function useCleanup(cb) {
41
61
  export class RaskStatefulComponent extends Component {
42
62
  renderFn;
43
63
  reactiveProps;
64
+ // RECONCILIATION FLAGS
65
+ // --------------------
66
+ // These flags coordinate observer notifications with Inferno's reconciliation lifecycle
67
+ // to prevent double-rendering while ensuring effects can update state synchronously.
68
+ //
69
+ // isReconciling: Set to true during componentWillReceiveProps. When true, the observer
70
+ // will NOT call forceUpdate() immediately, avoiding a render while Inferno is already
71
+ // in the middle of updating this component (which would cause a double-render).
72
+ //
73
+ // isNotified: Tracks whether the observer was notified during reconciliation. If true,
74
+ // it means reactive prop updates or effects have modified state, and the component
75
+ // should render to reflect those changes.
76
+ //
77
+ // Flow example (props change triggers effect that updates state):
78
+ // 1. componentWillReceiveProps → isReconciling = true
79
+ // 2. Prop updates in syncBatch → reactive prop signals notify
80
+ // 3. Observer fires → sees isReconciling → sets isNotified = true, skips forceUpdate()
81
+ // 4. shouldComponentUpdate → checks isNotified → returns true
82
+ // 5. Component renders once with all updates (props + effect state changes)
83
+ //
84
+ // This ensures components render synchronously with fully updated state, without
85
+ // calling forceUpdate() at the wrong time during Inferno's reconciliation.
86
+ isNotified = false;
87
+ isReconciling = false;
44
88
  observer = new Observer(() => {
45
- if (this.willRender) {
89
+ if (this.isReconciling) {
90
+ this.isNotified = true;
46
91
  return;
47
92
  }
48
93
  this.forceUpdate();
49
94
  });
50
95
  // Flag to prevent props from tracking in render scope (We use props reconciliation)
51
96
  isRendering = false;
52
- // Flag to prevent observer notifications to cause render during reconciliation
53
- willRender = true;
54
- // Since reactive props updates before the reconciliation (without causing a new one), we
55
- // need to return these from the reactive props
56
- nextProps = this.props;
57
97
  effects = [];
58
98
  contexts = new Map();
59
99
  getChildContext() {
@@ -67,90 +107,35 @@ export class RaskStatefulComponent extends Component {
67
107
  }
68
108
  onMounts = [];
69
109
  onCleanups = [];
70
- createReactiveProps() {
71
- const reactiveProps = {};
72
- const self = this;
73
- const signals = new Map();
74
- for (const prop in this.nextProps) {
75
- const value = this.nextProps[prop];
76
- // Skip known non-reactive props
77
- if (prop === "key" || prop === "ref") {
78
- reactiveProps[prop] = value;
79
- continue;
80
- }
81
- // Skip objects/arrays - they're already reactive if they're proxies
82
- // No need to wrap them in additional signals
83
- if (typeof value === "object" &&
84
- value !== null &&
85
- PROXY_MARKER in value) {
86
- reactiveProps[prop] = value;
87
- continue;
88
- }
89
- // Only create reactive getters for primitives
90
- Object.defineProperty(reactiveProps, prop, {
91
- enumerable: true,
92
- get() {
93
- const observer = getCurrentObserver();
94
- if (observer) {
95
- // Lazy create signal only when accessed in reactive context
96
- let signal = signals.get(prop);
97
- if (!signal) {
98
- signal = new Signal();
99
- signals.set(prop, signal);
100
- }
101
- observer.subscribeSignal(signal);
102
- }
103
- // @ts-ignore
104
- return self.nextProps[prop];
105
- },
106
- set(value) {
107
- // Only notify if signal was created (i.e., prop was accessed reactively)
108
- const signal = signals.get(prop);
109
- if (signal) {
110
- signal.notify();
111
- }
112
- },
113
- });
114
- }
115
- return reactiveProps;
116
- }
117
110
  componentDidMount() {
118
111
  this.onMounts.forEach((cb) => cb());
119
112
  }
120
113
  componentWillUnmount() {
121
114
  this.onCleanups.forEach((cb) => cb());
122
115
  }
123
- /**
124
- *
125
- */
126
- componentWillUpdate(nextProps) {
127
- this.willRender = true;
128
- this.nextProps = nextProps;
116
+ componentWillReceiveProps(nextProps) {
117
+ this.isReconciling = true;
129
118
  syncBatch(() => {
130
119
  for (const prop in nextProps) {
131
- if (prop === "children" ||
132
- this.props[prop] === nextProps[prop]) {
120
+ if (this.props[prop] === nextProps[prop]) {
133
121
  continue;
134
122
  }
135
123
  // @ts-ignore
136
124
  this.reactiveProps[prop] = nextProps[prop];
137
125
  }
138
126
  });
127
+ this.props = nextProps;
139
128
  }
140
- shouldComponentUpdate(nextProps) {
141
- // Shallow comparison of props, excluding internal props
142
- for (const prop in nextProps) {
143
- // @ts-ignore
144
- if (this.props[prop] !== nextProps[prop]) {
145
- return true;
146
- }
147
- }
148
- return false;
129
+ shouldComponentUpdate() {
130
+ const shouldRender = this.isNotified;
131
+ this.isNotified = false;
132
+ this.isReconciling = false;
133
+ return shouldRender;
149
134
  }
150
135
  render() {
151
136
  currentComponent = this;
152
137
  if (!this.renderFn) {
153
- this.reactiveProps = this.createReactiveProps();
138
+ this.reactiveProps = createReactiveProps(this);
154
139
  try {
155
140
  this.renderFn = this.setup(this.reactiveProps);
156
141
  if (typeof this.renderFn !== "function") {
@@ -171,7 +156,6 @@ export class RaskStatefulComponent extends Component {
171
156
  this.isRendering = true;
172
157
  result = this.renderFn();
173
158
  this.isRendering = false;
174
- this.willRender = false;
175
159
  }
176
160
  catch (error) {
177
161
  if (typeof this.context.notifyError !== "function") {
@@ -189,3 +173,47 @@ export class RaskStatefulComponent extends Component {
189
173
  export function createComponent(props, key) {
190
174
  return createComponentVNode(4 /* VNodeFlags.ComponentClass */, RaskStatefulComponent, props, key);
191
175
  }
176
+ function createReactiveProps(comp) {
177
+ const reactiveProps = {};
178
+ const signals = new Map();
179
+ for (const prop in comp.props) {
180
+ const value = comp.props[prop];
181
+ // Skip known non-reactive props
182
+ if (prop === "key" || prop === "ref") {
183
+ reactiveProps[prop] = value;
184
+ continue;
185
+ }
186
+ // Skip objects/arrays - they're already reactive if they're proxies
187
+ // No need to wrap them in additional signals
188
+ if (typeof value === "object" && value !== null && PROXY_MARKER in value) {
189
+ reactiveProps[prop] = value;
190
+ continue;
191
+ }
192
+ // Only create reactive getters for primitives
193
+ Object.defineProperty(reactiveProps, prop, {
194
+ enumerable: true,
195
+ get() {
196
+ const observer = getCurrentObserver();
197
+ if (observer) {
198
+ // Lazy create signal only when accessed in reactive context
199
+ let signal = signals.get(prop);
200
+ if (!signal) {
201
+ signal = new Signal();
202
+ signals.set(prop, signal);
203
+ }
204
+ observer.subscribeSignal(signal);
205
+ }
206
+ return comp.props[prop];
207
+ },
208
+ set(value) {
209
+ comp.props[prop] = value;
210
+ // Only notify if signal was created (i.e., prop was accessed reactively)
211
+ const signal = signals.get(prop);
212
+ if (signal) {
213
+ signal.notify();
214
+ }
215
+ },
216
+ });
217
+ }
218
+ return reactiveProps;
219
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"useDerived.d.ts","sourceRoot":"","sources":["../src/useDerived.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,IAAI;KACxD,CAAC,IAAI,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACjC,CAAC;AAEF,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,EAC5D,QAAQ,EAAE,CAAC,GACV,OAAO,CAAC,CAAC,CAAC,CAgFZ"}
1
+ {"version":3,"file":"useDerived.d.ts","sourceRoot":"","sources":["../src/useDerived.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,IAAI;KACxD,CAAC,IAAI,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACjC,CAAC;AAEF,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,EAC5D,QAAQ,EAAE,CAAC,GACV,OAAO,CAAC,CAAC,CAAC,CAiFZ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rask-ui",
3
- "version": "0.17.0",
3
+ "version": "0.18.1",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",