likec4 1.32.1 → 1.33.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/__app__/src/fonts.css +1 -1
- package/__app__/src/main.js +522 -374
- package/__app__/src/style.css +1 -1
- package/dist/cli/index.mjs +539 -538
- package/dist/index.d.mts +1 -4
- package/dist/index.mjs +2 -2
- package/dist/shared/likec4.BeWJWU7_.mjs +1 -0
- package/dist/shared/likec4.Bo8Klpk_.mjs +2390 -0
- package/dist/shared/{likec4.CVzYPnDX.d.mts → likec4.Pysz93eX.d.mts} +11738 -1509
- package/dist/shared/likec4.qcW0JcqE.mjs +239 -0
- package/dist/vite-plugin/index.d.mts +2 -2
- package/dist/vite-plugin/index.mjs +2 -2
- package/dist/vite-plugin/internal.d.mts +417 -0
- package/dist/vite-plugin/internal.mjs +9 -0
- package/package.json +44 -42
- package/react/index.d.mts +71 -307
- package/react/index.mjs +30 -30
- package/vite-plugin-modules.d.ts +82 -2
- package/dist/shared/likec4.B20Ey-3l.mjs +0 -239
- package/dist/shared/likec4.CbTFhAsc.mjs +0 -2386
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
import { DependencyList } from 'react';
|
|
2
|
+
|
|
3
|
+
type AllKeys<T> = T extends any ? keyof T : never
|
|
4
|
+
|
|
5
|
+
type Primitive = boolean | number | string
|
|
6
|
+
|
|
7
|
+
type ReadonlyIfObject<Value> = Value extends undefined
|
|
8
|
+
? Value
|
|
9
|
+
: Value extends (...args: any) => any
|
|
10
|
+
? Value
|
|
11
|
+
: Value extends Primitive
|
|
12
|
+
? Value
|
|
13
|
+
: Value extends object
|
|
14
|
+
? Readonly<Value>
|
|
15
|
+
: Value
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Store object.
|
|
19
|
+
*/
|
|
20
|
+
interface ReadableAtom<Value = any> {
|
|
21
|
+
/**
|
|
22
|
+
* Get store value.
|
|
23
|
+
*
|
|
24
|
+
* In contrast with {@link ReadableAtom#value} this value will be always
|
|
25
|
+
* initialized even if store had no listeners.
|
|
26
|
+
*
|
|
27
|
+
* ```js
|
|
28
|
+
* $store.get()
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* @returns Store value.
|
|
32
|
+
*/
|
|
33
|
+
get(): Value
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Listeners count.
|
|
37
|
+
*/
|
|
38
|
+
readonly lc: number
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Subscribe to store changes.
|
|
42
|
+
*
|
|
43
|
+
* In contrast with {@link Store#subscribe} it do not call listener
|
|
44
|
+
* immediately.
|
|
45
|
+
*
|
|
46
|
+
* @param listener Callback with store value and old value.
|
|
47
|
+
* @returns Function to remove listener.
|
|
48
|
+
*/
|
|
49
|
+
listen(
|
|
50
|
+
listener: (
|
|
51
|
+
value: ReadonlyIfObject<Value>,
|
|
52
|
+
oldValue: ReadonlyIfObject<Value>
|
|
53
|
+
) => void
|
|
54
|
+
): () => void
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Low-level method to notify listeners about changes in the store.
|
|
58
|
+
*
|
|
59
|
+
* Can cause unexpected behaviour when combined with frontend frameworks
|
|
60
|
+
* that perform equality checks for values, such as React.
|
|
61
|
+
*/
|
|
62
|
+
notify(oldValue?: ReadonlyIfObject<Value>): void
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Unbind all listeners.
|
|
66
|
+
*/
|
|
67
|
+
off(): void
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Subscribe to store changes and call listener immediately.
|
|
71
|
+
*
|
|
72
|
+
* ```
|
|
73
|
+
* import { $router } from '../store'
|
|
74
|
+
*
|
|
75
|
+
* $router.subscribe(page => {
|
|
76
|
+
* console.log(page)
|
|
77
|
+
* })
|
|
78
|
+
* ```
|
|
79
|
+
*
|
|
80
|
+
* @param listener Callback with store value and old value.
|
|
81
|
+
* @returns Function to remove listener.
|
|
82
|
+
*/
|
|
83
|
+
subscribe(
|
|
84
|
+
listener: (
|
|
85
|
+
value: ReadonlyIfObject<Value>,
|
|
86
|
+
oldValue?: ReadonlyIfObject<Value>
|
|
87
|
+
) => void
|
|
88
|
+
): () => void
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Low-level method to read store’s value without calling `onStart`.
|
|
92
|
+
*
|
|
93
|
+
* Try to use only {@link ReadableAtom#get}.
|
|
94
|
+
* Without subscribers, value can be undefined.
|
|
95
|
+
*/
|
|
96
|
+
readonly value: undefined | Value
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Store with a way to manually change the value.
|
|
101
|
+
*/
|
|
102
|
+
interface WritableAtom<Value = any> extends ReadableAtom<Value> {
|
|
103
|
+
/**
|
|
104
|
+
* Change store value.
|
|
105
|
+
*
|
|
106
|
+
* ```js
|
|
107
|
+
* $router.set({ path: location.pathname, page: parse(location.pathname) })
|
|
108
|
+
* ```
|
|
109
|
+
*
|
|
110
|
+
* @param newValue New store value.
|
|
111
|
+
*/
|
|
112
|
+
set(newValue: Value): void
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
interface PreinitializedWritableAtom<Value> extends WritableAtom<Value> {
|
|
116
|
+
readonly value: Value
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
type Atom<Value = any> = ReadableAtom<Value> | WritableAtom<Value>
|
|
120
|
+
/**
|
|
121
|
+
* Create store with atomic value. It could be a string or an object, which you
|
|
122
|
+
* will replace completely.
|
|
123
|
+
*
|
|
124
|
+
* If you want to change keys in the object inside store, use {@link map}.
|
|
125
|
+
*
|
|
126
|
+
* ```js
|
|
127
|
+
* import { atom, onMount } from 'nanostores'
|
|
128
|
+
*
|
|
129
|
+
* // Initial value
|
|
130
|
+
* export const $router = atom({ path: '', page: 'home' })
|
|
131
|
+
*
|
|
132
|
+
* function parse () {
|
|
133
|
+
* $router.set({ path: location.pathname, page: parse(location.pathname) })
|
|
134
|
+
* }
|
|
135
|
+
*
|
|
136
|
+
* // Listen for URL changes on first store’s listener.
|
|
137
|
+
* onMount($router, () => {
|
|
138
|
+
* parse()
|
|
139
|
+
* window.addEventListener('popstate', parse)
|
|
140
|
+
* return () => {
|
|
141
|
+
* window.removeEventListener('popstate', parse)
|
|
142
|
+
* }
|
|
143
|
+
* })
|
|
144
|
+
* ```
|
|
145
|
+
*
|
|
146
|
+
* @param initialValue Initial value of the store.
|
|
147
|
+
* @returns The store object with methods to subscribe.
|
|
148
|
+
*/
|
|
149
|
+
declare function atom<Value, StoreExt = object>(
|
|
150
|
+
...args: undefined extends Value ? [] | [Value] : [Value]
|
|
151
|
+
): PreinitializedWritableAtom<Value> & StoreExt
|
|
152
|
+
|
|
153
|
+
type KeyofBase = keyof any
|
|
154
|
+
|
|
155
|
+
type Get<T, K extends KeyofBase> = Extract<T, { [K1 in K]: any }>[K]
|
|
156
|
+
|
|
157
|
+
type HasIndexSignature<T> = string extends keyof T ? true : false
|
|
158
|
+
|
|
159
|
+
type ValueWithUndefinedForIndexSignatures<
|
|
160
|
+
Value,
|
|
161
|
+
Key extends keyof Value
|
|
162
|
+
> = HasIndexSignature<Value> extends true ? undefined | Value[Key] : Value[Key]
|
|
163
|
+
|
|
164
|
+
type WritableStore<Value = any> =
|
|
165
|
+
| (Value extends object ? MapStore<Value> : never)
|
|
166
|
+
| WritableAtom<Value>
|
|
167
|
+
|
|
168
|
+
type Store<Value = any> = ReadableAtom<Value> | WritableStore<Value>
|
|
169
|
+
|
|
170
|
+
type AnyStore<Value = any> = {
|
|
171
|
+
get(): Value
|
|
172
|
+
readonly value: undefined | Value
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
type StoreValue<SomeStore> = SomeStore extends {
|
|
176
|
+
get(): infer Value
|
|
177
|
+
}
|
|
178
|
+
? Value
|
|
179
|
+
: any
|
|
180
|
+
|
|
181
|
+
interface MapStore<Value extends object = any>
|
|
182
|
+
extends WritableAtom<Value> {
|
|
183
|
+
/**
|
|
184
|
+
* Subscribe to store changes.
|
|
185
|
+
*
|
|
186
|
+
* In contrast with {@link Store#subscribe} it do not call listener
|
|
187
|
+
* immediately.
|
|
188
|
+
*
|
|
189
|
+
* @param listener Callback with store value and old value.
|
|
190
|
+
* @param changedKey Key that was changed. Will present only if `setKey`
|
|
191
|
+
* has been used to change a store.
|
|
192
|
+
* @returns Function to remove listener.
|
|
193
|
+
*/
|
|
194
|
+
listen(
|
|
195
|
+
listener: (
|
|
196
|
+
value: ReadonlyIfObject<Value>,
|
|
197
|
+
oldValue: ReadonlyIfObject<Value>,
|
|
198
|
+
changedKey: AllKeys<Value>
|
|
199
|
+
) => void
|
|
200
|
+
): () => void
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Low-level method to notify listeners about changes in the store.
|
|
204
|
+
*
|
|
205
|
+
* Can cause unexpected behaviour when combined with frontend frameworks
|
|
206
|
+
* that perform equality checks for values, such as React.
|
|
207
|
+
*/
|
|
208
|
+
notify(oldValue?: ReadonlyIfObject<Value>, changedKey?: AllKeys<Value>): void
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Change store value.
|
|
212
|
+
*
|
|
213
|
+
* ```js
|
|
214
|
+
* $settings.set({ theme: 'dark' })
|
|
215
|
+
* ```
|
|
216
|
+
*
|
|
217
|
+
* Operation is atomic, subscribers will be notified once with the new value.
|
|
218
|
+
* `changedKey` will be undefined
|
|
219
|
+
*
|
|
220
|
+
* @param newValue New store value.
|
|
221
|
+
*/
|
|
222
|
+
set(newValue: Value): void
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Change key in store value.
|
|
226
|
+
*
|
|
227
|
+
* ```js
|
|
228
|
+
* $settings.setKey('theme', 'dark')
|
|
229
|
+
* ```
|
|
230
|
+
*
|
|
231
|
+
* To delete key set `undefined`.
|
|
232
|
+
*
|
|
233
|
+
* ```js
|
|
234
|
+
* $settings.setKey('theme', undefined)
|
|
235
|
+
* ```
|
|
236
|
+
*
|
|
237
|
+
* @param key The key name.
|
|
238
|
+
* @param value New value.
|
|
239
|
+
*/
|
|
240
|
+
setKey<Key extends AllKeys<Value>>(
|
|
241
|
+
key: Key,
|
|
242
|
+
value: Get<Value, Key> | ValueWithUndefinedForIndexSignatures<Value, Key>
|
|
243
|
+
): void
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Subscribe to store changes and call listener immediately.
|
|
247
|
+
*
|
|
248
|
+
* ```
|
|
249
|
+
* import { $router } from '../store'
|
|
250
|
+
*
|
|
251
|
+
* $router.subscribe(page => {
|
|
252
|
+
* console.log(page)
|
|
253
|
+
* })
|
|
254
|
+
* ```
|
|
255
|
+
*
|
|
256
|
+
* @param listener Callback with store value and old value.
|
|
257
|
+
* @param changedKey Key that was changed. Will present only
|
|
258
|
+
* if `setKey` has been used to change a store.
|
|
259
|
+
* @returns Function to remove listener.
|
|
260
|
+
*/
|
|
261
|
+
subscribe(
|
|
262
|
+
listener: (
|
|
263
|
+
value: ReadonlyIfObject<Value>,
|
|
264
|
+
oldValue: ReadonlyIfObject<Value> | undefined,
|
|
265
|
+
changedKey: AllKeys<Value> | undefined
|
|
266
|
+
) => void
|
|
267
|
+
): () => void
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
interface PreinitializedMapStore<Value extends object = any>
|
|
271
|
+
extends MapStore<Value> {
|
|
272
|
+
readonly value: Value
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* Create map store. Map store is a store with key-value object
|
|
277
|
+
* as a store value.
|
|
278
|
+
*
|
|
279
|
+
* @param init Initialize store and return store destructor.
|
|
280
|
+
* @returns The store object with methods to subscribe.
|
|
281
|
+
*/
|
|
282
|
+
declare function map<Value extends object, StoreExt extends object = object>(
|
|
283
|
+
value?: Value
|
|
284
|
+
): PreinitializedMapStore<Value> & StoreExt
|
|
285
|
+
|
|
286
|
+
interface Task<Value> extends Promise<Value> {
|
|
287
|
+
t: true
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
type StoreValues<Stores extends AnyStore[]> = {
|
|
291
|
+
[Index in keyof Stores]: StoreValue<Stores[Index]>
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
interface Computed {
|
|
295
|
+
<Value, OriginStore extends Store>(
|
|
296
|
+
stores: OriginStore,
|
|
297
|
+
cb: (value: StoreValue<OriginStore>) => Task<Value>
|
|
298
|
+
): ReadableAtom<undefined | Value>
|
|
299
|
+
<Value, OriginStores extends AnyStore[]>(
|
|
300
|
+
stores: [...OriginStores],
|
|
301
|
+
cb: (...values: StoreValues<OriginStores>) => Task<Value>
|
|
302
|
+
): ReadableAtom<undefined | Value>
|
|
303
|
+
<Value, OriginStore extends Store>(
|
|
304
|
+
stores: OriginStore,
|
|
305
|
+
cb: (value: StoreValue<OriginStore>) => Value
|
|
306
|
+
): ReadableAtom<Value>
|
|
307
|
+
/**
|
|
308
|
+
* Create derived store, which use generates value from another stores.
|
|
309
|
+
*
|
|
310
|
+
* ```js
|
|
311
|
+
* import { computed } from 'nanostores'
|
|
312
|
+
*
|
|
313
|
+
* import { $users } from './users.js'
|
|
314
|
+
*
|
|
315
|
+
* export const $admins = computed($users, users => {
|
|
316
|
+
* return users.filter(user => user.isAdmin)
|
|
317
|
+
* })
|
|
318
|
+
* ```
|
|
319
|
+
*
|
|
320
|
+
* An async function can be evaluated by using {@link task}.
|
|
321
|
+
*
|
|
322
|
+
* ```js
|
|
323
|
+
* import { computed, task } from 'nanostores'
|
|
324
|
+
*
|
|
325
|
+
* import { $userId } from './users.js'
|
|
326
|
+
*
|
|
327
|
+
* export const $user = computed($userId, userId => task(async () => {
|
|
328
|
+
* const response = await fetch(`https://my-api/users/${userId}`)
|
|
329
|
+
* return response.json()
|
|
330
|
+
* }))
|
|
331
|
+
* ```
|
|
332
|
+
*/
|
|
333
|
+
<Value, OriginStores extends AnyStore[]>(
|
|
334
|
+
stores: [...OriginStores],
|
|
335
|
+
cb: (...values: StoreValues<OriginStores>) => Task<Value> | Value
|
|
336
|
+
): ReadableAtom<Value>
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
declare const computed: Computed
|
|
340
|
+
|
|
341
|
+
interface Batched {
|
|
342
|
+
<Value, OriginStore extends Store>(
|
|
343
|
+
stores: OriginStore,
|
|
344
|
+
cb: (value: StoreValue<OriginStore>) => Task<Value> | Value
|
|
345
|
+
): ReadableAtom<Value>
|
|
346
|
+
/**
|
|
347
|
+
* Create derived store, which use generates value from another stores.
|
|
348
|
+
*
|
|
349
|
+
* ```js
|
|
350
|
+
* import { batched } from 'nanostores'
|
|
351
|
+
*
|
|
352
|
+
* const $sortBy = atom('id')
|
|
353
|
+
* const $category = atom('')
|
|
354
|
+
*
|
|
355
|
+
* export const $link = batched([$sortBy, $category], (sortBy, category) => {
|
|
356
|
+
* return `/api/entities?sortBy=${sortBy}&category=${category}`
|
|
357
|
+
* })
|
|
358
|
+
* ```
|
|
359
|
+
*/
|
|
360
|
+
<Value, OriginStores extends AnyStore[]>(
|
|
361
|
+
stores: [...OriginStores],
|
|
362
|
+
cb: (...values: StoreValues<OriginStores>) => Task<Value> | Value
|
|
363
|
+
): ReadableAtom<Value>
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
declare const batched: Batched
|
|
367
|
+
|
|
368
|
+
type StoreKeys<T> = T extends { setKey: (k: infer K, v: any) => unknown }
|
|
369
|
+
? K
|
|
370
|
+
: never
|
|
371
|
+
|
|
372
|
+
interface UseStoreOptions<SomeStore> {
|
|
373
|
+
/**
|
|
374
|
+
* @default
|
|
375
|
+
* ```ts
|
|
376
|
+
* [store, options.keys]
|
|
377
|
+
* ```
|
|
378
|
+
*/
|
|
379
|
+
deps?: DependencyList
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* Will re-render components only on specific key changes.
|
|
383
|
+
*/
|
|
384
|
+
keys?: StoreKeys<SomeStore>[]
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
/**
|
|
388
|
+
* Subscribe to store changes and get store’s value.
|
|
389
|
+
*
|
|
390
|
+
* Can be user with store builder too.
|
|
391
|
+
*
|
|
392
|
+
* ```js
|
|
393
|
+
* import { useStore } from 'nanostores/react'
|
|
394
|
+
*
|
|
395
|
+
* import { router } from '../store/router'
|
|
396
|
+
*
|
|
397
|
+
* export const Layout = () => {
|
|
398
|
+
* let page = useStore(router)
|
|
399
|
+
* if (page.route === 'home') {
|
|
400
|
+
* return <HomePage />
|
|
401
|
+
* } else {
|
|
402
|
+
* return <Error404 />
|
|
403
|
+
* }
|
|
404
|
+
* }
|
|
405
|
+
* ```
|
|
406
|
+
*
|
|
407
|
+
* @param store Store instance.
|
|
408
|
+
* @returns Store value.
|
|
409
|
+
*/
|
|
410
|
+
declare function useStore<SomeStore extends Store>(
|
|
411
|
+
store: SomeStore,
|
|
412
|
+
options?: UseStoreOptions<SomeStore>
|
|
413
|
+
): StoreValue<SomeStore>
|
|
414
|
+
|
|
415
|
+
declare const createHooksForModel: ($atom: WritableAtom) => any;
|
|
416
|
+
|
|
417
|
+
export { type Atom, type ReadableAtom, type WritableAtom, atom, batched, computed, createHooksForModel, map, useStore };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import{LikeC4Model as x}from"@likec4/core/model";import{useRef as R,useCallback as U,useSyncExternalStore as _,useState as y,useEffect as A}from"react";import{u as k,i as V}from"../shared/likec4.BeWJWU7_.mjs";function L(...e){return k(g,e)}function g(e,t){if(e===t||Object.is(e,t))return!0;if(typeof e!="object"||typeof t!="object"||e===null||t===null||Object.getPrototypeOf(e)!==Object.getPrototypeOf(t))return!1;if(Array.isArray(e))return z(e,t);if(e instanceof Map)return C(e,t);if(e instanceof Set)
|
|
2
|
+
return D(e,t);if(e instanceof Date)return e.getTime()===t.getTime();if(e instanceof RegExp)return e.toString()===t.toString();if(Object.keys(e).length!==Object.keys(t).length)return!1;for(let[n,r]of Object.entries(e))if(!(n in t)||!g(r,t[n]))return!1;return!0}function z(e,t){if(e.length!==t.length)return!1;for(let[n,r]of e.entries())if(!g(r,t[n]))return!1;return!0}function C(e,t){if(e.size!==t.size)return!1;for(let[n,r]of e.entries())if(!t.has(n)||!g(r,t.get(n)))return!1;return!0}function D(e,t){
|
|
3
|
+
if(e.size!==t.size)return!1;let n=[...t];for(let r of e){let i=!1;for(let[l,u]of n.entries())if(g(r,u)){i=!0,n.splice(l,1);break}if(!i)return!1}return!0}let S=Symbol("clean"),c=[],a=0;const m=4;let h=0,T=e=>{let t=[],n={get(){return n.lc||n.listen(()=>{})(),n.value},lc:0,listen(r){return n.lc=t.push(r),()=>{for(let l=a+m;l<c.length;)c[l]===r?c.splice(l,m):l+=m;let i=t.indexOf(r);~i&&(t.splice(i,1),--n.lc||n.off())}},notify(r,i){h++;let l=!c.length;for(let u of t)c.push(u,n.value,r,i);if(l){for(a=
|
|
4
|
+
0;a<c.length;a+=m)c[a](c[a+1],c[a+2],c[a+3]);c.length=0}},off(){},set(r){let i=n.value;i!==r&&(n.value=r,n.notify(i))},subscribe(r){let i=n.listen(r);return r(n.value),i},value:e};return process.env.NODE_ENV!=="production"&&(n[S]=()=>{t=[],n.lc=0,n.off()}),n};const I=5,v=6,O=10;let P=(e,t,n,r)=>(e.events=e.events||{},e.events[n+O]||(e.events[n+O]=r(i=>{e.events[n].reduceRight((l,u)=>(u(l),l),{shared:{},...i})})),e.events[n]=e.events[n]||[],e.events[n].push(t),()=>{let i=e.events[n],l=i.indexOf(t);
|
|
5
|
+
i.splice(l,1),i.length||(delete e.events[n],e.events[n+O](),delete e.events[n+O])}),Q=1e3,q=(e,t)=>P(e,r=>{let i=t(r);i&&e.events[v].push(i)},I,r=>{let i=e.listen;e.listen=(...u)=>(!e.lc&&!e.active&&(e.active=!0,r()),i(...u));let l=e.off;if(e.events[v]=[],e.off=()=>{l(),setTimeout(()=>{if(e.active&&!e.lc){e.active=!1;for(let u of e.events[v])u();e.events[v]=[]}},Q)},process.env.NODE_ENV!=="production"){let u=e[S];e[S]=()=>{for(let s of e.events[v])s();e.events[v]=[],e.active=!1,u()}}return()=>{e.
|
|
6
|
+
listen=i,e.off=l}}),w=(e,t,n)=>{Array.isArray(e)||(e=[e]);let r,i,l=()=>{if(i===h)return;i=h;let o=e.map(f=>f.get());if(!r||o.some((f,E)=>f!==r[E])){r=o;let f=t(...o);f&&f.then&&f.t?f.then(E=>{r===o&&u.set(E)}):(u.set(f),i=h)}},u=T(void 0),s=u.get;u.get=()=>(l(),s());let d,p=n?()=>{clearTimeout(d),d=setTimeout(l)}:l;return q(u,()=>{let o=e.map(f=>f.listen(p));return l(),()=>{for(let f of o)f()}}),u},M=(e,t)=>w(e,t),F=(e,t)=>w(e,t,!0);function H(e,t,n){let r=new Set(t).add(void 0);return e.listen(
|
|
7
|
+
(i,l,u)=>{r.has(u)&&n(i,l,u)})}let Y=(e={})=>{let t=T(e);return t.setKey=function(n,r){let i=t.value;typeof r>"u"&&n in t.value?(t.value={...t.value},delete t.value[n],t.notify(i,n)):t.value[n]!==r&&(t.value={...t.value,[n]:r},t.notify(i,n))},t},b=(e,t)=>n=>{e.current!==n&&(e.current=n,t())};function N(e,{keys:t,deps:n=[e,t]}={}){let r=R();r.current=e.get();let i=U(u=>(b(r,u)(e.value),t?.length>0?H(e,t,b(r,u)):e.listen(b(r,u))),n),l=()=>r.current;return _(i,l,l)}const B=e=>{const t=M(e,s=>x.create(
|
|
8
|
+
s));function n(s){const d=e.get();if(L(d,s))return;const p={...s,views:V(s.views,o=>{const f=d.views[o.id];return L(f,o)?f:o})};e.set(p)}const r=M(e,s=>[...Object.values(s.views)]);function i(){return N(t)}function l(){return N(r)}function u(s){const[d,p]=y(e.value?.views[s]??null);return A(()=>e.subscribe(o=>{p(o.views[s]??null)}),[s]),d}return{updateModel:n,$likec4model:t,useLikeC4Model:i,useLikeC4Views:l,useLikeC4View:u}};export{T as atom,F as batched,M as computed,B as createHooksForModel,Y as map,
|
|
9
|
+
N as useStore};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "likec4",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.33.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"homepage": "https://likec4.dev",
|
|
6
6
|
"author": "Denis Davydkov <denis@davydkov.com>",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"graph"
|
|
20
20
|
],
|
|
21
21
|
"engines": {
|
|
22
|
-
"node": ">=20.19.
|
|
22
|
+
"node": ">=20.19.3"
|
|
23
23
|
},
|
|
24
24
|
"engineStrict": true,
|
|
25
25
|
"bugs": "https://github.com/likec4/likec4/issues",
|
|
@@ -61,6 +61,10 @@
|
|
|
61
61
|
"./vite-plugin-modules": {
|
|
62
62
|
"types": "./vite-plugin-modules.d.ts"
|
|
63
63
|
},
|
|
64
|
+
"./vite-plugin/internal": {
|
|
65
|
+
"sources": "./src/vite-plugin/internal.ts",
|
|
66
|
+
"default": "./dist/vite-plugin/internal.mjs"
|
|
67
|
+
},
|
|
64
68
|
"./vite-plugin": {
|
|
65
69
|
"sources": "./src/vite-plugin/index.ts",
|
|
66
70
|
"default": {
|
|
@@ -86,13 +90,13 @@
|
|
|
86
90
|
},
|
|
87
91
|
"dependencies": {
|
|
88
92
|
"@hpcc-js/wasm-graphviz": "1.7.0",
|
|
89
|
-
"@vitejs/plugin-react": "^4.5.
|
|
93
|
+
"@vitejs/plugin-react": "^4.5.2",
|
|
90
94
|
"boxen": "^8.0.1",
|
|
91
|
-
"playwright": "^1.
|
|
92
|
-
"rollup": "^4.
|
|
95
|
+
"playwright": "^1.53.0",
|
|
96
|
+
"rollup": "^4.44.0",
|
|
93
97
|
"type-fest": "^4.41.0",
|
|
94
98
|
"vite": "^6.3.5",
|
|
95
|
-
"@likec4/core": "1.
|
|
99
|
+
"@likec4/core": "1.33.0"
|
|
96
100
|
},
|
|
97
101
|
"peerDependencies": {
|
|
98
102
|
"react": "^18.x || ^19.x",
|
|
@@ -100,21 +104,20 @@
|
|
|
100
104
|
},
|
|
101
105
|
"devDependencies": {
|
|
102
106
|
"@dagrejs/dagre": "1.1.4",
|
|
103
|
-
"@fontsource/ibm-plex-sans": "^5.2.
|
|
104
|
-
"@mantine/core": "8.1.
|
|
105
|
-
"@mantine/hooks": "8.1.
|
|
107
|
+
"@fontsource/ibm-plex-sans": "^5.2.6",
|
|
108
|
+
"@mantine/core": "8.1.1",
|
|
109
|
+
"@mantine/hooks": "8.1.1",
|
|
106
110
|
"@nanostores/react": "1.0.0",
|
|
107
|
-
"@pandacss/dev": "^0.53.
|
|
111
|
+
"@pandacss/dev": "^0.53.7",
|
|
108
112
|
"@react-hookz/web": "^25.1.1",
|
|
109
113
|
"@tabler/icons-react": "3.31.0",
|
|
110
114
|
"@tanstack/react-router": "^1.114.13",
|
|
111
115
|
"@tanstack/router-cli": "^1.114.13",
|
|
112
116
|
"@tanstack/router-vite-plugin": "^1.114.13",
|
|
113
|
-
"@types/node": "~20.19.
|
|
117
|
+
"@types/node": "~20.19.1",
|
|
114
118
|
"@types/picomatch": "^4.0.0",
|
|
115
|
-
"@types/
|
|
116
|
-
"@types/react": "
|
|
117
|
-
"@types/react-dom": "^19.1.5",
|
|
119
|
+
"@types/react": "19.1.8",
|
|
120
|
+
"@types/react-dom": "19.1.6",
|
|
118
121
|
"@types/semver": "^7.7.0",
|
|
119
122
|
"@types/yargs": "^17.0.33",
|
|
120
123
|
"@xyflow/react": "^12.6.4",
|
|
@@ -126,11 +129,11 @@
|
|
|
126
129
|
"consola": "^3.4.2",
|
|
127
130
|
"defu": "^6.1.4",
|
|
128
131
|
"dts-bundle-generator": "^9.5.1",
|
|
129
|
-
"esbuild": "
|
|
130
|
-
"esbuild-node-externals": "
|
|
132
|
+
"esbuild": "0.25.5",
|
|
133
|
+
"esbuild-node-externals": "1.18.0",
|
|
131
134
|
"esm-env": "^1.2.2",
|
|
132
135
|
"fast-equals": "^5.2.2",
|
|
133
|
-
"fdir": "
|
|
136
|
+
"fdir": "6.4.6",
|
|
134
137
|
"get-port": "^7.1.0",
|
|
135
138
|
"html-to-image": "^1.11.13",
|
|
136
139
|
"json5": "^2.2.3",
|
|
@@ -141,50 +144,48 @@
|
|
|
141
144
|
"motion": "^12.12.2",
|
|
142
145
|
"nano-spawn": "^1.0.2",
|
|
143
146
|
"nanostores": "1.0.1",
|
|
144
|
-
"npm-run-all2": "^
|
|
145
|
-
"p-limit": "
|
|
146
|
-
"package-manager-detector": "
|
|
147
|
+
"npm-run-all2": "^8.0.4",
|
|
148
|
+
"p-limit": "6.2.0",
|
|
149
|
+
"package-manager-detector": "1.3.0",
|
|
147
150
|
"package-up": "^5.0.0",
|
|
148
151
|
"picomatch": "^4.0.2",
|
|
149
|
-
"postcss": "
|
|
152
|
+
"postcss": "8.5.5",
|
|
150
153
|
"pretty-ms": "^9.2.0",
|
|
151
|
-
"prop-types": "^15.8.1",
|
|
152
154
|
"react": "^19.1.0",
|
|
153
155
|
"react-dom": "^19.1.0",
|
|
154
|
-
"react-error-boundary": "^
|
|
155
|
-
"react-resizable-panels": "^3.0.
|
|
156
|
+
"react-error-boundary": "^6.0.0",
|
|
157
|
+
"react-resizable-panels": "^3.0.3",
|
|
156
158
|
"react-shadow": "^20.6.0",
|
|
157
|
-
"remeda": "^2.23.
|
|
159
|
+
"remeda": "^2.23.1",
|
|
158
160
|
"semver": "^7.7.2",
|
|
159
161
|
"std-env": "^3.9.0",
|
|
160
162
|
"strip-indent": "^4.0.0",
|
|
161
|
-
"terser": "^5.39.2",
|
|
162
163
|
"tinyrainbow": "^2.0.0",
|
|
163
|
-
"tsx": "
|
|
164
|
-
"turbo": "
|
|
165
|
-
"typescript": "
|
|
166
|
-
"ufo": "
|
|
167
|
-
"unbuild": "
|
|
164
|
+
"tsx": "4.19.4",
|
|
165
|
+
"turbo": "2.5.4",
|
|
166
|
+
"typescript": "5.8.3",
|
|
167
|
+
"ufo": "1.6.1",
|
|
168
|
+
"unbuild": "3.5.0",
|
|
168
169
|
"vite-plugin-dts": "^4.5.4",
|
|
169
170
|
"vite-plugin-inspect": "^11.1.0",
|
|
170
171
|
"vite-plugin-singlefile": "^2.2.0",
|
|
171
|
-
"vitest": "3.2.
|
|
172
|
+
"vitest": "3.2.4",
|
|
172
173
|
"vscode-jsonrpc": "8.2.0",
|
|
173
174
|
"vscode-languageserver": "9.0.1",
|
|
174
175
|
"vscode-languageserver-types": "3.17.5",
|
|
175
176
|
"vscode-uri": "3.1.0",
|
|
176
177
|
"which": "^5.0.0",
|
|
177
|
-
"wireit": "
|
|
178
|
+
"wireit": "0.14.12",
|
|
178
179
|
"yargs": "17.7.2",
|
|
179
|
-
"@likec4/
|
|
180
|
-
"@likec4/icons": "1.
|
|
181
|
-
"@likec4/
|
|
182
|
-
"@likec4/
|
|
183
|
-
"@likec4/layouts": "1.
|
|
184
|
-
"@likec4/log": "1.
|
|
185
|
-
"@likec4/
|
|
186
|
-
"@likec4/
|
|
187
|
-
"@likec4/tsconfig": "1.
|
|
180
|
+
"@likec4/generators": "1.33.0",
|
|
181
|
+
"@likec4/icons": "1.33.0",
|
|
182
|
+
"@likec4/diagram": "1.33.0",
|
|
183
|
+
"@likec4/language-server": "1.33.0",
|
|
184
|
+
"@likec4/layouts": "1.33.0",
|
|
185
|
+
"@likec4/log": "1.33.0",
|
|
186
|
+
"@likec4/styles": "1.33.0",
|
|
187
|
+
"@likec4/style-preset": "1.33.0",
|
|
188
|
+
"@likec4/tsconfig": "1.33.0"
|
|
188
189
|
},
|
|
189
190
|
"scripts": {
|
|
190
191
|
"typecheck": "tsc --build --verbose",
|
|
@@ -196,6 +197,7 @@
|
|
|
196
197
|
"generate:icons": "tsx --conditions=sources scripts/generate-icons.ts",
|
|
197
198
|
"pack": "pnpm pack",
|
|
198
199
|
"lint": "run -T eslint src/ --fix",
|
|
200
|
+
"lint:package": "pnpx publint ./package.tgz",
|
|
199
201
|
"clean": "pnpm rimraf lib dist app/dist dev/.export dev/dist node_modules/.vite react/*.mjs react/*.d.mts icons",
|
|
200
202
|
"start": "tsx --conditions=sources src/cli/index.ts",
|
|
201
203
|
"dev": "pnpm cli:serve dev",
|