likec4 1.32.2 → 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.
@@ -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.32.2",
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.1"
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": {
@@ -89,10 +93,10 @@
89
93
  "@vitejs/plugin-react": "^4.5.2",
90
94
  "boxen": "^8.0.1",
91
95
  "playwright": "^1.53.0",
92
- "rollup": "^4.41.0",
96
+ "rollup": "^4.44.0",
93
97
  "type-fest": "^4.41.0",
94
98
  "vite": "^6.3.5",
95
- "@likec4/core": "1.32.2"
99
+ "@likec4/core": "1.33.0"
96
100
  },
97
101
  "peerDependencies": {
98
102
  "react": "^18.x || ^19.x",
@@ -100,9 +104,9 @@
100
104
  },
101
105
  "devDependencies": {
102
106
  "@dagrejs/dagre": "1.1.4",
103
- "@fontsource/ibm-plex-sans": "^5.2.5",
104
- "@mantine/core": "8.1.0",
105
- "@mantine/hooks": "8.1.0",
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
111
  "@pandacss/dev": "^0.53.7",
108
112
  "@react-hookz/web": "^25.1.1",
@@ -110,10 +114,10 @@
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.0",
117
+ "@types/node": "~20.19.1",
114
118
  "@types/picomatch": "^4.0.0",
115
- "@types/react": "19.1.5",
116
- "@types/react-dom": "19.1.5",
119
+ "@types/react": "19.1.8",
120
+ "@types/react-dom": "19.1.6",
117
121
  "@types/semver": "^7.7.0",
118
122
  "@types/yargs": "^17.0.33",
119
123
  "@xyflow/react": "^12.6.4",
@@ -125,11 +129,11 @@
125
129
  "consola": "^3.4.2",
126
130
  "defu": "^6.1.4",
127
131
  "dts-bundle-generator": "^9.5.1",
128
- "esbuild": "^0.25.5",
129
- "esbuild-node-externals": "^1.18.0",
132
+ "esbuild": "0.25.5",
133
+ "esbuild-node-externals": "1.18.0",
130
134
  "esm-env": "^1.2.2",
131
135
  "fast-equals": "^5.2.2",
132
- "fdir": "^6.4.4",
136
+ "fdir": "6.4.6",
133
137
  "get-port": "^7.1.0",
134
138
  "html-to-image": "^1.11.13",
135
139
  "json5": "^2.2.3",
@@ -141,8 +145,8 @@
141
145
  "nano-spawn": "^1.0.2",
142
146
  "nanostores": "1.0.1",
143
147
  "npm-run-all2": "^8.0.4",
144
- "p-limit": "^6.2.0",
145
- "package-manager-detector": "^1.2.0",
148
+ "p-limit": "6.2.0",
149
+ "package-manager-detector": "1.3.0",
146
150
  "package-up": "^5.0.0",
147
151
  "picomatch": "^4.0.2",
148
152
  "postcss": "8.5.5",
@@ -150,9 +154,9 @@
150
154
  "react": "^19.1.0",
151
155
  "react-dom": "^19.1.0",
152
156
  "react-error-boundary": "^6.0.0",
153
- "react-resizable-panels": "^3.0.2",
157
+ "react-resizable-panels": "^3.0.3",
154
158
  "react-shadow": "^20.6.0",
155
- "remeda": "^2.23.0",
159
+ "remeda": "^2.23.1",
156
160
  "semver": "^7.7.2",
157
161
  "std-env": "^3.9.0",
158
162
  "strip-indent": "^4.0.0",
@@ -160,12 +164,12 @@
160
164
  "tsx": "4.19.4",
161
165
  "turbo": "2.5.4",
162
166
  "typescript": "5.8.3",
163
- "ufo": "^1.6.1",
167
+ "ufo": "1.6.1",
164
168
  "unbuild": "3.5.0",
165
169
  "vite-plugin-dts": "^4.5.4",
166
170
  "vite-plugin-inspect": "^11.1.0",
167
171
  "vite-plugin-singlefile": "^2.2.0",
168
- "vitest": "3.2.3",
172
+ "vitest": "3.2.4",
169
173
  "vscode-jsonrpc": "8.2.0",
170
174
  "vscode-languageserver": "9.0.1",
171
175
  "vscode-languageserver-types": "3.17.5",
@@ -173,15 +177,15 @@
173
177
  "which": "^5.0.0",
174
178
  "wireit": "0.14.12",
175
179
  "yargs": "17.7.2",
176
- "@likec4/diagram": "1.32.2",
177
- "@likec4/generators": "1.32.2",
178
- "@likec4/icons": "1.32.2",
179
- "@likec4/layouts": "1.32.2",
180
- "@likec4/style-preset": "1.32.2",
181
- "@likec4/language-server": "1.32.2",
182
- "@likec4/styles": "1.32.2",
183
- "@likec4/log": "1.32.2",
184
- "@likec4/tsconfig": "1.32.2"
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"
185
189
  },
186
190
  "scripts": {
187
191
  "typecheck": "tsc --build --verbose",
@@ -193,6 +197,7 @@
193
197
  "generate:icons": "tsx --conditions=sources scripts/generate-icons.ts",
194
198
  "pack": "pnpm pack",
195
199
  "lint": "run -T eslint src/ --fix",
200
+ "lint:package": "pnpx publint ./package.tgz",
196
201
  "clean": "pnpm rimraf lib dist app/dist dev/.export dev/dist node_modules/.vite react/*.mjs react/*.d.mts icons",
197
202
  "start": "tsx --conditions=sources src/cli/index.ts",
198
203
  "dev": "pnpm cli:serve dev",