@akashjs/runtime 0.2.7 → 0.2.8
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/a11y.cjs +1 -1
- package/dist/a11y.js +1 -1
- package/dist/async-component.cjs +1 -1
- package/dist/async-component.js +1 -1
- package/dist/await-block.cjs +1 -1
- package/dist/await-block.js +1 -1
- package/dist/browser.cjs +1 -1
- package/dist/browser.js +1 -1
- package/dist/{chunk-SXYPAP4B.js → chunk-2GGCZC4O.js} +2 -2
- package/dist/{chunk-SXYPAP4B.js.map → chunk-2GGCZC4O.js.map} +1 -1
- package/dist/chunk-2UATNCKC.js +2 -0
- package/dist/chunk-2UATNCKC.js.map +1 -0
- package/dist/{chunk-FVF3T4JJ.js → chunk-2XFW6MT7.js} +2 -2
- package/dist/{chunk-FVF3T4JJ.js.map → chunk-2XFW6MT7.js.map} +1 -1
- package/dist/{chunk-ZJULEDLY.js → chunk-3CD6A5YV.js} +2 -2
- package/dist/{chunk-ZJULEDLY.js.map → chunk-3CD6A5YV.js.map} +1 -1
- package/dist/{chunk-N5APNCPB.js → chunk-3PCZFKBH.js} +2 -2
- package/dist/{chunk-N5APNCPB.js.map → chunk-3PCZFKBH.js.map} +1 -1
- package/dist/{chunk-Q6S7SUOM.js → chunk-3PLQPLVA.js} +2 -2
- package/dist/{chunk-Q6S7SUOM.js.map → chunk-3PLQPLVA.js.map} +1 -1
- package/dist/chunk-3RDEFZMT.js +2 -0
- package/dist/{chunk-NCXMNJUN.js.map → chunk-3RDEFZMT.js.map} +1 -1
- package/dist/{chunk-KUPL3ZVD.js → chunk-3VYMJMAU.js} +2 -2
- package/dist/{chunk-KUPL3ZVD.js.map → chunk-3VYMJMAU.js.map} +1 -1
- package/dist/{chunk-QQ725EZL.js → chunk-3Y663FYJ.js} +2 -2
- package/dist/{chunk-QQ725EZL.js.map → chunk-3Y663FYJ.js.map} +1 -1
- package/dist/{chunk-VNDSKBXQ.cjs → chunk-4VLBY2BW.cjs} +2 -2
- package/dist/{chunk-VNDSKBXQ.cjs.map → chunk-4VLBY2BW.cjs.map} +1 -1
- package/dist/{chunk-VUSNUBNI.js → chunk-5GDMAABU.js} +2 -2
- package/dist/{chunk-VUSNUBNI.js.map → chunk-5GDMAABU.js.map} +1 -1
- package/dist/{chunk-QE2TJ6P5.cjs → chunk-5JKXREA2.cjs} +2 -2
- package/dist/{chunk-QE2TJ6P5.cjs.map → chunk-5JKXREA2.cjs.map} +1 -1
- package/dist/{chunk-AZCELE44.cjs → chunk-637ENG3A.cjs} +2 -2
- package/dist/{chunk-AZCELE44.cjs.map → chunk-637ENG3A.cjs.map} +1 -1
- package/dist/{chunk-BB7P6HTR.js → chunk-66PLXQS3.js} +2 -2
- package/dist/{chunk-BB7P6HTR.js.map → chunk-66PLXQS3.js.map} +1 -1
- package/dist/{chunk-TDKDZ3QJ.cjs → chunk-6GY6HC75.cjs} +2 -2
- package/dist/{chunk-TDKDZ3QJ.cjs.map → chunk-6GY6HC75.cjs.map} +1 -1
- package/dist/{chunk-M5IACTFC.cjs → chunk-6I5PPQ34.cjs} +3 -3
- package/dist/{chunk-M5IACTFC.cjs.map → chunk-6I5PPQ34.cjs.map} +1 -1
- package/dist/{chunk-QNVMBXVH.js → chunk-6ZCFPR4O.js} +2 -2
- package/dist/{chunk-QNVMBXVH.js.map → chunk-6ZCFPR4O.js.map} +1 -1
- package/dist/{chunk-R7NUVVHP.js → chunk-7T4HMWUC.js} +2 -2
- package/dist/{chunk-R7NUVVHP.js.map → chunk-7T4HMWUC.js.map} +1 -1
- package/dist/{chunk-36VM3RJW.cjs → chunk-BLT7XOSX.cjs} +2 -2
- package/dist/{chunk-36VM3RJW.cjs.map → chunk-BLT7XOSX.cjs.map} +1 -1
- package/dist/chunk-CDZR6GWB.js +2 -0
- package/dist/chunk-CDZR6GWB.js.map +1 -0
- package/dist/chunk-DWSIR5SL.cjs +2 -0
- package/dist/{chunk-7ZPSYZHD.cjs.map → chunk-DWSIR5SL.cjs.map} +1 -1
- package/dist/{chunk-NJXXC5JB.js → chunk-E7BPGVIS.js} +2 -2
- package/dist/{chunk-NJXXC5JB.js.map → chunk-E7BPGVIS.js.map} +1 -1
- package/dist/chunk-E7GAIKQT.cjs +2 -0
- package/dist/{chunk-FUVSCPU4.cjs.map → chunk-E7GAIKQT.cjs.map} +1 -1
- package/dist/{chunk-VWTULWXF.js → chunk-EEQZFKEG.js} +2 -2
- package/dist/{chunk-VWTULWXF.js.map → chunk-EEQZFKEG.js.map} +1 -1
- package/dist/{chunk-7IJUJUXE.cjs → chunk-EXKQPZ5N.cjs} +2 -2
- package/dist/{chunk-7IJUJUXE.cjs.map → chunk-EXKQPZ5N.cjs.map} +1 -1
- package/dist/{chunk-NHDYQTC5.cjs → chunk-F2F5OXCK.cjs} +3 -3
- package/dist/{chunk-NHDYQTC5.cjs.map → chunk-F2F5OXCK.cjs.map} +1 -1
- package/dist/{chunk-7VBH4F3P.js → chunk-GAAO2KXN.js} +2 -2
- package/dist/{chunk-7VBH4F3P.js.map → chunk-GAAO2KXN.js.map} +1 -1
- package/dist/{chunk-F6VSSM2P.js → chunk-GB7IUC6E.js} +2 -2
- package/dist/{chunk-F6VSSM2P.js.map → chunk-GB7IUC6E.js.map} +1 -1
- package/dist/{chunk-TZHEZW6R.js → chunk-GHSJ4B55.js} +3 -3
- package/dist/{chunk-TZHEZW6R.js.map → chunk-GHSJ4B55.js.map} +1 -1
- package/dist/{chunk-NBYFHJWB.js → chunk-GRXHWCFR.js} +3 -3
- package/dist/{chunk-NBYFHJWB.js.map → chunk-GRXHWCFR.js.map} +1 -1
- package/dist/{chunk-WTDTVWCQ.cjs → chunk-HHPRQMGX.cjs} +2 -2
- package/dist/{chunk-WTDTVWCQ.cjs.map → chunk-HHPRQMGX.cjs.map} +1 -1
- package/dist/chunk-HL2VGVJT.cjs +2 -0
- package/dist/chunk-HL2VGVJT.cjs.map +1 -0
- package/dist/{chunk-Z6K4FYG6.js → chunk-IDTJWCYW.js} +2 -2
- package/dist/{chunk-Z6K4FYG6.js.map → chunk-IDTJWCYW.js.map} +1 -1
- package/dist/{chunk-6O46EMQS.cjs → chunk-JMY6E7VR.cjs} +2 -2
- package/dist/{chunk-6O46EMQS.cjs.map → chunk-JMY6E7VR.cjs.map} +1 -1
- package/dist/{chunk-XZR3J626.cjs → chunk-KFMCMKSC.cjs} +2 -2
- package/dist/{chunk-XZR3J626.cjs.map → chunk-KFMCMKSC.cjs.map} +1 -1
- package/dist/{chunk-IKVHLORY.cjs → chunk-KGV5MKBC.cjs} +3 -3
- package/dist/{chunk-IKVHLORY.cjs.map → chunk-KGV5MKBC.cjs.map} +1 -1
- package/dist/{chunk-R65RPMQX.cjs → chunk-KQAYFPJI.cjs} +2 -2
- package/dist/{chunk-R65RPMQX.cjs.map → chunk-KQAYFPJI.cjs.map} +1 -1
- package/dist/chunk-LSD7DEMV.cjs +2 -0
- package/dist/chunk-LSD7DEMV.cjs.map +1 -0
- package/dist/{chunk-2LKFIID7.cjs → chunk-LTMDSGQ6.cjs} +2 -2
- package/dist/{chunk-2LKFIID7.cjs.map → chunk-LTMDSGQ6.cjs.map} +1 -1
- package/dist/{chunk-4NQEIKH5.cjs → chunk-M2OWSNOM.cjs} +2 -2
- package/dist/{chunk-4NQEIKH5.cjs.map → chunk-M2OWSNOM.cjs.map} +1 -1
- package/dist/{chunk-PYASLKWF.js → chunk-MGFRVOM5.js} +2 -2
- package/dist/{chunk-PYASLKWF.js.map → chunk-MGFRVOM5.js.map} +1 -1
- package/dist/{chunk-JQCN42XX.js → chunk-MNUOIAXS.js} +2 -2
- package/dist/{chunk-JQCN42XX.js.map → chunk-MNUOIAXS.js.map} +1 -1
- package/dist/{chunk-NEQ5TENE.cjs → chunk-ND2HZRMR.cjs} +2 -2
- package/dist/{chunk-NEQ5TENE.cjs.map → chunk-ND2HZRMR.cjs.map} +1 -1
- package/dist/chunk-O5OTZP5M.cjs +2 -0
- package/dist/{chunk-JD3LDHUI.cjs.map → chunk-O5OTZP5M.cjs.map} +1 -1
- package/dist/{chunk-LD4C62JY.cjs → chunk-P4USGNUK.cjs} +2 -2
- package/dist/{chunk-LD4C62JY.cjs.map → chunk-P4USGNUK.cjs.map} +1 -1
- package/dist/{chunk-L3ZZX36S.js → chunk-P55EWYAD.js} +2 -2
- package/dist/{chunk-L3ZZX36S.js.map → chunk-P55EWYAD.js.map} +1 -1
- package/dist/{chunk-OZ4GNBKA.js → chunk-PVIYD25D.js} +2 -2
- package/dist/{chunk-OZ4GNBKA.js.map → chunk-PVIYD25D.js.map} +1 -1
- package/dist/{chunk-2HLDEWRT.cjs → chunk-PWJMCURK.cjs} +2 -2
- package/dist/{chunk-2HLDEWRT.cjs.map → chunk-PWJMCURK.cjs.map} +1 -1
- package/dist/{chunk-7UX5CSGZ.cjs → chunk-SBDFBADL.cjs} +2 -2
- package/dist/{chunk-7UX5CSGZ.cjs.map → chunk-SBDFBADL.cjs.map} +1 -1
- package/dist/{chunk-DHFVVFZF.cjs → chunk-SPS3LM47.cjs} +2 -2
- package/dist/{chunk-DHFVVFZF.cjs.map → chunk-SPS3LM47.cjs.map} +1 -1
- package/dist/{chunk-N3ITIHHM.js → chunk-SVNS64LE.js} +3 -3
- package/dist/{chunk-N3ITIHHM.js.map → chunk-SVNS64LE.js.map} +1 -1
- package/dist/{chunk-TSFY5HKB.js → chunk-SZDKDXRV.js} +3 -3
- package/dist/{chunk-TSFY5HKB.js.map → chunk-SZDKDXRV.js.map} +1 -1
- package/dist/{chunk-T2RVAQEU.js → chunk-UXHQ5OFW.js} +2 -2
- package/dist/{chunk-T2RVAQEU.js.map → chunk-UXHQ5OFW.js.map} +1 -1
- package/dist/{chunk-TFEHO7SF.cjs → chunk-UYJ4BAPL.cjs} +2 -2
- package/dist/{chunk-TFEHO7SF.cjs.map → chunk-UYJ4BAPL.cjs.map} +1 -1
- package/dist/chunk-VDHUPQDK.cjs +2 -0
- package/dist/{chunk-TYTEJYUQ.cjs.map → chunk-VDHUPQDK.cjs.map} +1 -1
- package/dist/{chunk-YDO5KARN.js → chunk-VTD3TI3M.js} +2 -2
- package/dist/{chunk-YDO5KARN.js.map → chunk-VTD3TI3M.js.map} +1 -1
- package/dist/{chunk-CP6SK2B4.js → chunk-WB7QDCEA.js} +2 -2
- package/dist/{chunk-CP6SK2B4.js.map → chunk-WB7QDCEA.js.map} +1 -1
- package/dist/{chunk-WZ5ULION.js → chunk-XAGYLTHV.js} +2 -2
- package/dist/{chunk-WZ5ULION.js.map → chunk-XAGYLTHV.js.map} +1 -1
- package/dist/{chunk-QSPRVXFV.cjs → chunk-XE7JC7Y3.cjs} +2 -2
- package/dist/{chunk-QSPRVXFV.cjs.map → chunk-XE7JC7Y3.cjs.map} +1 -1
- package/dist/{chunk-FVWHMFX6.cjs → chunk-XMNDNTHK.cjs} +3 -3
- package/dist/{chunk-FVWHMFX6.cjs.map → chunk-XMNDNTHK.cjs.map} +1 -1
- package/dist/{chunk-J6KDUWX6.cjs → chunk-XOPRWJCX.cjs} +2 -2
- package/dist/{chunk-J6KDUWX6.cjs.map → chunk-XOPRWJCX.cjs.map} +1 -1
- package/dist/{chunk-VO4FCKHM.js → chunk-XRWOZO67.js} +2 -2
- package/dist/{chunk-VO4FCKHM.js.map → chunk-XRWOZO67.js.map} +1 -1
- package/dist/chunk-XZOP3IWH.cjs +2 -0
- package/dist/{chunk-YURIYBTN.cjs.map → chunk-XZOP3IWH.cjs.map} +1 -1
- package/dist/{chunk-BGSF77LF.js → chunk-YG76TVFL.js} +2 -2
- package/dist/{chunk-BGSF77LF.js.map → chunk-YG76TVFL.js.map} +1 -1
- package/dist/{chunk-V2JDKH3W.cjs → chunk-YQQDRDJ7.cjs} +2 -2
- package/dist/{chunk-V2JDKH3W.cjs.map → chunk-YQQDRDJ7.cjs.map} +1 -1
- package/dist/{chunk-3XREYIJH.cjs → chunk-ZGE46DPV.cjs} +2 -2
- package/dist/{chunk-3XREYIJH.cjs.map → chunk-ZGE46DPV.cjs.map} +1 -1
- package/dist/composables.cjs +1 -1
- package/dist/composables.js +1 -1
- package/dist/core.cjs +1 -1
- package/dist/core.js +1 -1
- package/dist/data-table.cjs +1 -1
- package/dist/data-table.js +1 -1
- package/dist/deep-signal.cjs +1 -1
- package/dist/deep-signal.js +1 -1
- package/dist/defer.cjs +1 -1
- package/dist/defer.js +1 -1
- package/dist/{devtools-overlay-3WRM6GKM.js → devtools-overlay-3PHULVP4.js} +3 -3
- package/dist/{devtools-overlay-3WRM6GKM.js.map → devtools-overlay-3PHULVP4.js.map} +1 -1
- package/dist/{devtools-overlay-WJGSIB4N.cjs → devtools-overlay-SJV7WNNS.cjs} +4 -4
- package/dist/{devtools-overlay-WJGSIB4N.cjs.map → devtools-overlay-SJV7WNNS.cjs.map} +1 -1
- package/dist/devtools.cjs +1 -1
- package/dist/devtools.js +1 -1
- package/dist/di.cjs +1 -1
- package/dist/di.js +1 -1
- package/dist/error-boundary.cjs +1 -1
- package/dist/error-boundary.js +1 -1
- package/dist/event-modifiers.cjs +1 -1
- package/dist/event-modifiers.js +1 -1
- package/dist/head.cjs +1 -1
- package/dist/head.js +1 -1
- package/dist/hydration.cjs +1 -1
- package/dist/hydration.js +1 -1
- package/dist/image.cjs +1 -1
- package/dist/image.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/infinite-scroll.cjs +1 -1
- package/dist/infinite-scroll.js +1 -1
- package/dist/machine.cjs +1 -1
- package/dist/machine.js +1 -1
- package/dist/offline.cjs +1 -1
- package/dist/offline.js +1 -1
- package/dist/portal.cjs +1 -1
- package/dist/portal.js +1 -1
- package/dist/pwa.cjs +1 -1
- package/dist/pwa.js +1 -1
- package/dist/query-state.cjs +1 -1
- package/dist/query-state.js +1 -1
- package/dist/seo.cjs +1 -1
- package/dist/seo.js +1 -1
- package/dist/snippets.cjs +1 -1
- package/dist/snippets.js +1 -1
- package/dist/ssr.cjs +1 -1
- package/dist/ssr.js +1 -1
- package/dist/store.cjs +1 -1
- package/dist/store.js +1 -1
- package/dist/suspense.cjs +1 -1
- package/dist/suspense.js +1 -1
- package/dist/switch.cjs +1 -1
- package/dist/switch.js +1 -1
- package/dist/sync.cjs +1 -1
- package/dist/sync.js +1 -1
- package/dist/test.cjs +2 -2
- package/dist/test.js +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/theme.js +1 -1
- package/dist/toast.cjs +1 -1
- package/dist/toast.js +1 -1
- package/dist/transition.cjs +1 -1
- package/dist/transition.js +1 -1
- package/dist/tweened.cjs +1 -1
- package/dist/tweened.js +1 -1
- package/dist/virtual-list.cjs +1 -1
- package/dist/virtual-list.js +1 -1
- package/dist/watch.cjs +1 -1
- package/dist/watch.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-7ZPSYZHD.cjs +0 -2
- package/dist/chunk-FUVSCPU4.cjs +0 -2
- package/dist/chunk-JD3LDHUI.cjs +0 -2
- package/dist/chunk-KE7BJTCD.js +0 -2
- package/dist/chunk-KE7BJTCD.js.map +0 -1
- package/dist/chunk-NCXMNJUN.js +0 -2
- package/dist/chunk-TYTEJYUQ.cjs +0 -2
- package/dist/chunk-WOZWFMOK.cjs +0 -2
- package/dist/chunk-WOZWFMOK.cjs.map +0 -1
- package/dist/chunk-XWVNLE2W.cjs +0 -2
- package/dist/chunk-XWVNLE2W.cjs.map +0 -1
- package/dist/chunk-YURIYBTN.cjs +0 -2
- package/dist/chunk-YXKQTEPR.js +0 -2
- package/dist/chunk-YXKQTEPR.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/store.ts"],"names":["globalPlugins","configureStores","options","storeInstances","defineStore","id","definition","initialState","store","createStoreInstance","stateSignals","stateKeys","key","signal","getterKeys","actionKeys","getterFn","computed","plugins","actionFn","args","plugin","fresh","partialOrFn","batch","value","snapshot","subscribers","subscribeEffect","callback","isInitial","effect","cb","configs","normalizePersistConfigs","cfg","storage","serialize","deserialize","persistKeys","raw","saved","persistScheduled","isInitialPersist","e","updated","syncOpts","syncKeys","syncState","doc","createSync","localSignal","syncSignal","originalSet","fromSync","remoteVal","persist","p","i","clearStores","__getStoreInstances"],"mappings":"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","file":"chunk-QSPRVXFV.cjs","sourcesContent":["/**\n * Global state management via defineStore().\n *\n * Stores are singleton signal containers that persist across\n * components. They provide shared state, computed getters,\n * and actions — no external library needed.\n *\n * ```ts\n * const useCounterStore = defineStore('counter', {\n * state: () => ({ count: 0, name: 'Counter' }),\n * getters: {\n * doubled: (state) => state.count() * 2,\n * },\n * actions: {\n * increment() { this.count.update(c => c + 1); },\n * reset() { this.count.set(0); },\n * },\n * });\n *\n * // In any component:\n * const store = useCounterStore();\n * store.count(); // 0\n * store.doubled(); // 0\n * store.increment();\n * store.count(); // 1\n * ```\n */\n\nimport { signal, computed, effect } from './signals.js';\nimport { batch } from './scheduler.js';\nimport { createSync } from './sync.js';\nimport type { SyncDoc } from './sync.js';\nimport type { Signal, ReadonlySignal } from './signals.js';\n\n// --- Types ---\n\ntype StateFactory<S> = () => S;\n\ntype Getters<S, G> = {\n [K in keyof G]: (state: SignalifiedState<S>) => G[K];\n};\n\ntype Actions<A> = {\n [K in keyof A]: A[K] extends (...args: infer P) => infer R\n ? (...args: P) => R\n : never;\n};\n\n/** Maps plain state values to signals */\ntype SignalifiedState<S> = {\n [K in keyof S]: Signal<S[K]>;\n};\n\n/** The store instance returned to consumers */\nexport type Store<S, G, A> = SignalifiedState<S> & {\n [K in keyof G]: ReadonlySignal<G[K]>;\n} & {\n [K in keyof A]: A[K] extends (...args: infer P) => infer R\n ? (...args: P) => R\n : never;\n} & {\n /** Reset all state to initial values */\n $reset(): void;\n /** Merge partial state into the store, or apply changes via callback */\n $patch(partialOrFn: Partial<S> | ((state: SignalifiedState<S>) => void)): void;\n /** Subscribe to all state changes */\n $subscribe(callback: (state: S) => void): () => void;\n /** Get a plain snapshot of current state */\n $snapshot(): S;\n /** Store ID */\n $id: string;\n};\n\nexport interface PersistOptions<S> {\n /** Only persist these state keys (default: all) */\n pick?: (keyof S)[];\n /** Storage backend (default: 'localStorage') */\n storage?: 'localStorage' | 'sessionStorage';\n /** Custom storage key (default: 'akash-store:{storeId}') */\n key?: string;\n /** Custom serializer (default: JSON.stringify) */\n serialize?: (value: unknown) => string;\n /** Custom deserializer (default: JSON.parse) */\n deserialize?: (value: string) => unknown;\n}\n\nexport interface StoreSyncOptions {\n /** Sync transport (WebSocket, local, etc.) */\n transport?: import('./sync.js').SyncTransport;\n /** Enable sync — uses provided or default transport */\n enabled?: boolean;\n /** Sync room/channel name (default: store ID) */\n room?: string;\n /** Unique peer ID */\n peerId?: string;\n /** Enable presence tracking */\n presence?: boolean;\n /** Only sync these state keys (default: all) */\n pick?: string[];\n}\n\nexport interface StoreDefinition<S, G, A> {\n state: StateFactory<S>;\n getters?: Getters<S, G>;\n actions?: A & ThisType<\n SignalifiedState<S> &\n { [K in keyof G]: ReadonlySignal<G[K]> } &\n A\n >;\n plugins?: StorePlugin[];\n /** Auto-persist state to storage. true = persist all to localStorage. */\n persist?: boolean | PersistOptions<S> | PersistOptions<S>[];\n /** Sync state across peers via CRDT. Adds real-time collaboration to any store. */\n sync?: StoreSyncOptions;\n}\n\n// --- Plugin system ---\n\nexport interface StorePlugin {\n init?(store: Store<any, any, any>): void;\n onAction?(store: Store<any, any, any>, actionName: string, args: unknown[]): void;\n}\n\nconst globalPlugins: StorePlugin[] = [];\n\n/** Register global plugins that apply to all stores */\nexport function configureStores(options: { plugins: StorePlugin[] }): void {\n globalPlugins.push(...options.plugins);\n}\n\n// --- Store registry (singleton) ---\n\nconst storeInstances = new Map<string, Store<any, any, any>>();\n\n// --- defineStore ---\n\n/**\n * Define a global store. Returns a composable function that\n * always returns the same store instance (singleton).\n */\nexport function defineStore<\n S extends Record<string, unknown>,\n G extends Record<string, unknown> = {},\n A extends Record<string, (...args: any[]) => any> = {},\n>(\n id: string,\n definition: StoreDefinition<S, G, A>,\n): () => Store<S, G, A> {\n return () => {\n // Return existing instance if already created\n if (storeInstances.has(id)) {\n return storeInstances.get(id) as Store<S, G, A>;\n }\n\n const initialState = definition.state();\n const store = createStoreInstance(id, initialState, definition);\n storeInstances.set(id, store);\n return store;\n };\n}\n\nfunction createStoreInstance<\n S extends Record<string, unknown>,\n G extends Record<string, unknown>,\n A extends Record<string, (...args: any[]) => any>,\n>(\n id: string,\n initialState: S,\n definition: StoreDefinition<S, G, A>,\n): Store<S, G, A> {\n // Create signals for each state property\n const stateSignals: Record<string, Signal<unknown>> = {};\n const stateKeys = Object.keys(initialState);\n\n for (const key of stateKeys) {\n stateSignals[key] = signal(initialState[key]);\n }\n\n // Build the store object first so getters can reference other getters via `this`\n const store: any = { $id: id };\n\n // Add state signals\n for (const key of stateKeys) {\n store[key] = stateSignals[key];\n }\n\n // Metadata for devtools — avoids calling functions to classify them\n const getterKeys: string[] = [];\n const actionKeys: string[] = [];\n store.$__meta = { stateKeys, getterKeys, actionKeys };\n\n // Create computed getters — bound to store so `this.otherGetter()` works\n if (definition.getters) {\n for (const [key, getterFn] of Object.entries(definition.getters)) {\n getterKeys.push(key);\n store[key] = computed(() =>\n (getterFn as Function).call(store, stateSignals),\n );\n }\n }\n\n // Collect all plugins (global + per-store)\n const plugins = [...globalPlugins, ...(definition.plugins ?? [])];\n\n // Bind actions with `this` pointing to the full store (state + getters + actions)\n if (definition.actions) {\n for (const [key, actionFn] of Object.entries(definition.actions)) {\n actionKeys.push(key);\n store[key] = (...args: unknown[]) => {\n for (const plugin of plugins) plugin.onAction?.(store, key, args);\n return (actionFn as Function).apply(store, args);\n };\n }\n }\n\n // $reset\n store.$reset = () => {\n const fresh = definition.state();\n for (const key of stateKeys) {\n stateSignals[key].set(fresh[key as keyof S]);\n }\n };\n\n // $patch — merge partial state or apply via callback (batched)\n store.$patch = (partialOrFn: Partial<S> | ((state: any) => void)) => {\n batch(() => {\n if (typeof partialOrFn === 'function') {\n partialOrFn(stateSignals);\n } else {\n for (const [key, value] of Object.entries(partialOrFn)) {\n if (key in stateSignals) {\n stateSignals[key].set(value);\n }\n }\n }\n });\n };\n\n // $snapshot\n store.$snapshot = (): S => {\n const snapshot: Record<string, unknown> = {};\n for (const key of stateKeys) {\n snapshot[key] = stateSignals[key]();\n }\n return snapshot as S;\n };\n\n // $subscribe — watch all state signals and notify on change\n const subscribers = new Set<(state: S) => void>();\n let subscribeEffect: (() => void) | null = null;\n store.$subscribe = (callback: (state: S) => void): (() => void) => {\n subscribers.add(callback);\n // Start watching if this is the first subscriber\n if (!subscribeEffect) {\n let isInitial = true;\n subscribeEffect = effect(() => {\n // Read all state signals to track them\n for (const key of stateKeys) {\n stateSignals[key]();\n }\n // Skip initial run — only notify on actual changes\n if (isInitial) {\n isInitial = false;\n return;\n }\n const snapshot = store.$snapshot();\n for (const cb of subscribers) {\n cb(snapshot);\n }\n });\n }\n return () => {\n subscribers.delete(callback);\n // Dispose effect when no subscribers remain\n if (subscribers.size === 0 && subscribeEffect) {\n subscribeEffect();\n subscribeEffect = null;\n }\n };\n };\n\n // --- Persistence ---\n if (definition.persist && typeof window !== 'undefined') {\n const configs = normalizePersistConfigs(id, definition.persist);\n for (const cfg of configs) {\n const storage = cfg.storage === 'sessionStorage' ? sessionStorage : localStorage;\n const serialize = cfg.serialize ?? JSON.stringify;\n const deserialize = cfg.deserialize ?? JSON.parse;\n const persistKeys = cfg.pick ?? stateKeys;\n\n // Hydrate: read from storage and merge into state\n try {\n const raw = storage.getItem(cfg.key);\n if (raw) {\n const saved = deserialize(raw) as Record<string, unknown>;\n for (const key of persistKeys as string[]) {\n if (key in saved && key in stateSignals) {\n stateSignals[key].set(saved[key]);\n }\n }\n }\n } catch { /* corrupt storage — ignore */ }\n\n // Write: subscribe to state changes and persist (debounced via microtask)\n // The effect tracks signals to detect changes; the microtask reads\n // fresh values so sequential updates in the same tick are all captured.\n let persistScheduled = false;\n let isInitialPersist = true;\n effect(() => {\n // Track the persisted signals (read them so the effect re-runs on change)\n for (const key of persistKeys as string[]) {\n if (key in stateSignals) stateSignals[key]();\n }\n // Skip the initial run (hydration just happened, don't write stale defaults)\n if (isInitialPersist) { isInitialPersist = false; return; }\n // Schedule a microtask to capture the LATEST values after all sync updates\n if (!persistScheduled) {\n persistScheduled = true;\n queueMicrotask(() => {\n persistScheduled = false;\n // Read fresh values NOW, not when the effect ran\n const snapshot: Record<string, unknown> = {};\n for (const key of persistKeys as string[]) {\n if (key in stateSignals) snapshot[key] = stateSignals[key].peek();\n }\n try { storage.setItem(cfg.key, serialize(snapshot)); } catch { /* quota exceeded */ }\n });\n }\n });\n\n // Cross-tab sync: listen for storage events from other tabs\n if (cfg.storage !== 'sessionStorage') {\n window.addEventListener('storage', (e) => {\n if (e.key !== cfg.key || !e.newValue) return;\n try {\n const updated = deserialize(e.newValue) as Record<string, unknown>;\n for (const key of persistKeys as string[]) {\n if (key in updated && key in stateSignals) {\n stateSignals[key].set(updated[key]);\n }\n }\n } catch { /* ignore parse errors */ }\n });\n }\n }\n }\n\n // --- Sync ---\n if (definition.sync && (definition.sync.enabled !== false)) {\n const syncOpts = definition.sync;\n const syncKeys = syncOpts.pick ?? stateKeys;\n\n const syncState: Record<string, unknown> = {};\n for (const key of syncKeys) {\n syncState[key] = stateSignals[key]?.peek?.() ?? initialState[key as keyof S];\n }\n\n const doc = createSync(syncState as Record<string, unknown>, {\n transport: syncOpts.transport,\n peerId: syncOpts.peerId,\n });\n\n // Wire: local signal changes → sync broadcast\n for (const key of syncKeys) {\n if (!(key in stateSignals) || !(key in doc.state)) continue;\n const localSignal = stateSignals[key];\n const syncSignal = (doc.state as Record<string, any>)[key];\n\n const originalSet = localSignal.set;\n let fromSync = false;\n localSignal.set = (value: unknown) => {\n originalSet.call(localSignal, value);\n if (!fromSync) syncSignal.set(value);\n };\n\n // Listen for remote changes\n effect(() => {\n const remoteVal = syncSignal();\n fromSync = true;\n localSignal.set(remoteVal);\n fromSync = false;\n });\n }\n\n // Expose sync metadata on the store\n (store as any).$sync = {\n peers: doc.peers,\n presence: doc.presence,\n peerPresence: doc.peerPresence,\n peerId: doc.peerId,\n connected: doc.connected,\n connect: doc.connect.bind(doc),\n disconnect: doc.disconnect.bind(doc),\n };\n }\n\n // Initialize plugins\n for (const plugin of plugins) plugin.init?.(store);\n\n return store as Store<S, G, A>;\n}\n\nfunction normalizePersistConfigs<S>(id: string, persist: boolean | PersistOptions<S> | PersistOptions<S>[]): Array<PersistOptions<S> & { key: string }> {\n if (persist === true) {\n return [{ key: `akash-store:${id}` }];\n }\n if (persist === false) return [];\n if (Array.isArray(persist)) {\n return persist.map((p, i) => ({ ...p, key: p.key ?? `akash-store:${id}:${i}` }));\n }\n return [{ ...persist, key: persist.key ?? `akash-store:${id}` }];\n}\n\n/**\n * Clear all store instances (useful for testing).\n */\nexport function clearStores(): void {\n storeInstances.clear();\n}\n\n/** @internal — exposes store registry for devtools */\nexport function __getStoreInstances(): Record<string, Store<any, any, any>> {\n return Object.fromEntries(storeInstances);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/store.ts"],"names":["globalPlugins","configureStores","options","storeInstances","defineStore","id","definition","initialState","store","createStoreInstance","stateSignals","stateKeys","key","signal","getterKeys","actionKeys","getterFn","computed","plugins","actionFn","args","plugin","fresh","partialOrFn","batch","value","snapshot","subscribers","subscribeEffect","callback","isInitial","effect","cb","configs","normalizePersistConfigs","cfg","storage","serialize","deserialize","persistKeys","raw","saved","persistScheduled","isInitialPersist","e","updated","syncOpts","syncKeys","syncState","doc","createSync","localSignal","syncSignal","originalSet","fromSync","remoteVal","persist","p","i","clearStores","__getStoreInstances"],"mappings":"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","file":"chunk-XE7JC7Y3.cjs","sourcesContent":["/**\n * Global state management via defineStore().\n *\n * Stores are singleton signal containers that persist across\n * components. They provide shared state, computed getters,\n * and actions — no external library needed.\n *\n * ```ts\n * const useCounterStore = defineStore('counter', {\n * state: () => ({ count: 0, name: 'Counter' }),\n * getters: {\n * doubled: (state) => state.count() * 2,\n * },\n * actions: {\n * increment() { this.count.update(c => c + 1); },\n * reset() { this.count.set(0); },\n * },\n * });\n *\n * // In any component:\n * const store = useCounterStore();\n * store.count(); // 0\n * store.doubled(); // 0\n * store.increment();\n * store.count(); // 1\n * ```\n */\n\nimport { signal, computed, effect } from './signals.js';\nimport { batch } from './scheduler.js';\nimport { createSync } from './sync.js';\nimport type { SyncDoc } from './sync.js';\nimport type { Signal, ReadonlySignal } from './signals.js';\n\n// --- Types ---\n\ntype StateFactory<S> = () => S;\n\ntype Getters<S, G> = {\n [K in keyof G]: (state: SignalifiedState<S>) => G[K];\n};\n\ntype Actions<A> = {\n [K in keyof A]: A[K] extends (...args: infer P) => infer R\n ? (...args: P) => R\n : never;\n};\n\n/** Maps plain state values to signals */\ntype SignalifiedState<S> = {\n [K in keyof S]: Signal<S[K]>;\n};\n\n/** The store instance returned to consumers */\nexport type Store<S, G, A> = SignalifiedState<S> & {\n [K in keyof G]: ReadonlySignal<G[K]>;\n} & {\n [K in keyof A]: A[K] extends (...args: infer P) => infer R\n ? (...args: P) => R\n : never;\n} & {\n /** Reset all state to initial values */\n $reset(): void;\n /** Merge partial state into the store, or apply changes via callback */\n $patch(partialOrFn: Partial<S> | ((state: SignalifiedState<S>) => void)): void;\n /** Subscribe to all state changes */\n $subscribe(callback: (state: S) => void): () => void;\n /** Get a plain snapshot of current state */\n $snapshot(): S;\n /** Store ID */\n $id: string;\n};\n\nexport interface PersistOptions<S> {\n /** Only persist these state keys (default: all) */\n pick?: (keyof S)[];\n /** Storage backend (default: 'localStorage') */\n storage?: 'localStorage' | 'sessionStorage';\n /** Custom storage key (default: 'akash-store:{storeId}') */\n key?: string;\n /** Custom serializer (default: JSON.stringify) */\n serialize?: (value: unknown) => string;\n /** Custom deserializer (default: JSON.parse) */\n deserialize?: (value: string) => unknown;\n}\n\nexport interface StoreSyncOptions {\n /** Sync transport (WebSocket, local, etc.) */\n transport?: import('./sync.js').SyncTransport;\n /** Enable sync — uses provided or default transport */\n enabled?: boolean;\n /** Sync room/channel name (default: store ID) */\n room?: string;\n /** Unique peer ID */\n peerId?: string;\n /** Enable presence tracking */\n presence?: boolean;\n /** Only sync these state keys (default: all) */\n pick?: string[];\n}\n\nexport interface StoreDefinition<S, G, A> {\n state: StateFactory<S>;\n getters?: Getters<S, G>;\n actions?: A & ThisType<\n SignalifiedState<S> &\n { [K in keyof G]: ReadonlySignal<G[K]> } &\n A\n >;\n plugins?: StorePlugin[];\n /** Auto-persist state to storage. true = persist all to localStorage. */\n persist?: boolean | PersistOptions<S> | PersistOptions<S>[];\n /** Sync state across peers via CRDT. Adds real-time collaboration to any store. */\n sync?: StoreSyncOptions;\n}\n\n// --- Plugin system ---\n\nexport interface StorePlugin {\n init?(store: Store<any, any, any>): void;\n onAction?(store: Store<any, any, any>, actionName: string, args: unknown[]): void;\n}\n\nconst globalPlugins: StorePlugin[] = [];\n\n/** Register global plugins that apply to all stores */\nexport function configureStores(options: { plugins: StorePlugin[] }): void {\n globalPlugins.push(...options.plugins);\n}\n\n// --- Store registry (singleton) ---\n\nconst storeInstances = new Map<string, Store<any, any, any>>();\n\n// --- defineStore ---\n\n/**\n * Define a global store. Returns a composable function that\n * always returns the same store instance (singleton).\n */\nexport function defineStore<\n S extends Record<string, unknown>,\n G extends Record<string, unknown> = {},\n A extends Record<string, (...args: any[]) => any> = {},\n>(\n id: string,\n definition: StoreDefinition<S, G, A>,\n): () => Store<S, G, A> {\n return () => {\n // Return existing instance if already created\n if (storeInstances.has(id)) {\n return storeInstances.get(id) as Store<S, G, A>;\n }\n\n const initialState = definition.state();\n const store = createStoreInstance(id, initialState, definition);\n storeInstances.set(id, store);\n return store;\n };\n}\n\nfunction createStoreInstance<\n S extends Record<string, unknown>,\n G extends Record<string, unknown>,\n A extends Record<string, (...args: any[]) => any>,\n>(\n id: string,\n initialState: S,\n definition: StoreDefinition<S, G, A>,\n): Store<S, G, A> {\n // Create signals for each state property\n const stateSignals: Record<string, Signal<unknown>> = {};\n const stateKeys = Object.keys(initialState);\n\n for (const key of stateKeys) {\n stateSignals[key] = signal(initialState[key]);\n }\n\n // Build the store object first so getters can reference other getters via `this`\n const store: any = { $id: id };\n\n // Add state signals\n for (const key of stateKeys) {\n store[key] = stateSignals[key];\n }\n\n // Metadata for devtools — avoids calling functions to classify them\n const getterKeys: string[] = [];\n const actionKeys: string[] = [];\n store.$__meta = { stateKeys, getterKeys, actionKeys };\n\n // Create computed getters — bound to store so `this.otherGetter()` works\n if (definition.getters) {\n for (const [key, getterFn] of Object.entries(definition.getters)) {\n getterKeys.push(key);\n store[key] = computed(() =>\n (getterFn as Function).call(store, stateSignals),\n );\n }\n }\n\n // Collect all plugins (global + per-store)\n const plugins = [...globalPlugins, ...(definition.plugins ?? [])];\n\n // Bind actions with `this` pointing to the full store (state + getters + actions)\n if (definition.actions) {\n for (const [key, actionFn] of Object.entries(definition.actions)) {\n actionKeys.push(key);\n store[key] = (...args: unknown[]) => {\n for (const plugin of plugins) plugin.onAction?.(store, key, args);\n return (actionFn as Function).apply(store, args);\n };\n }\n }\n\n // $reset\n store.$reset = () => {\n const fresh = definition.state();\n for (const key of stateKeys) {\n stateSignals[key].set(fresh[key as keyof S]);\n }\n };\n\n // $patch — merge partial state or apply via callback (batched)\n store.$patch = (partialOrFn: Partial<S> | ((state: any) => void)) => {\n batch(() => {\n if (typeof partialOrFn === 'function') {\n partialOrFn(stateSignals);\n } else {\n for (const [key, value] of Object.entries(partialOrFn)) {\n if (key in stateSignals) {\n stateSignals[key].set(value);\n }\n }\n }\n });\n };\n\n // $snapshot\n store.$snapshot = (): S => {\n const snapshot: Record<string, unknown> = {};\n for (const key of stateKeys) {\n snapshot[key] = stateSignals[key]();\n }\n return snapshot as S;\n };\n\n // $subscribe — watch all state signals and notify on change\n const subscribers = new Set<(state: S) => void>();\n let subscribeEffect: (() => void) | null = null;\n store.$subscribe = (callback: (state: S) => void): (() => void) => {\n subscribers.add(callback);\n // Start watching if this is the first subscriber\n if (!subscribeEffect) {\n let isInitial = true;\n subscribeEffect = effect(() => {\n // Read all state signals to track them\n for (const key of stateKeys) {\n stateSignals[key]();\n }\n // Skip initial run — only notify on actual changes\n if (isInitial) {\n isInitial = false;\n return;\n }\n const snapshot = store.$snapshot();\n for (const cb of subscribers) {\n cb(snapshot);\n }\n });\n }\n return () => {\n subscribers.delete(callback);\n // Dispose effect when no subscribers remain\n if (subscribers.size === 0 && subscribeEffect) {\n subscribeEffect();\n subscribeEffect = null;\n }\n };\n };\n\n // --- Persistence ---\n if (definition.persist && typeof window !== 'undefined') {\n const configs = normalizePersistConfigs(id, definition.persist);\n for (const cfg of configs) {\n const storage = cfg.storage === 'sessionStorage' ? sessionStorage : localStorage;\n const serialize = cfg.serialize ?? JSON.stringify;\n const deserialize = cfg.deserialize ?? JSON.parse;\n const persistKeys = cfg.pick ?? stateKeys;\n\n // Hydrate: read from storage and merge into state\n try {\n const raw = storage.getItem(cfg.key);\n if (raw) {\n const saved = deserialize(raw) as Record<string, unknown>;\n for (const key of persistKeys as string[]) {\n if (key in saved && key in stateSignals) {\n stateSignals[key].set(saved[key]);\n }\n }\n }\n } catch { /* corrupt storage — ignore */ }\n\n // Write: subscribe to state changes and persist (debounced via microtask)\n // The effect tracks signals to detect changes; the microtask reads\n // fresh values so sequential updates in the same tick are all captured.\n let persistScheduled = false;\n let isInitialPersist = true;\n effect(() => {\n // Track the persisted signals (read them so the effect re-runs on change)\n for (const key of persistKeys as string[]) {\n if (key in stateSignals) stateSignals[key]();\n }\n // Skip the initial run (hydration just happened, don't write stale defaults)\n if (isInitialPersist) { isInitialPersist = false; return; }\n // Schedule a microtask to capture the LATEST values after all sync updates\n if (!persistScheduled) {\n persistScheduled = true;\n queueMicrotask(() => {\n persistScheduled = false;\n // Read fresh values NOW, not when the effect ran\n const snapshot: Record<string, unknown> = {};\n for (const key of persistKeys as string[]) {\n if (key in stateSignals) snapshot[key] = stateSignals[key].peek();\n }\n try { storage.setItem(cfg.key, serialize(snapshot)); } catch { /* quota exceeded */ }\n });\n }\n });\n\n // Cross-tab sync: listen for storage events from other tabs\n if (cfg.storage !== 'sessionStorage') {\n window.addEventListener('storage', (e) => {\n if (e.key !== cfg.key || !e.newValue) return;\n try {\n const updated = deserialize(e.newValue) as Record<string, unknown>;\n for (const key of persistKeys as string[]) {\n if (key in updated && key in stateSignals) {\n stateSignals[key].set(updated[key]);\n }\n }\n } catch { /* ignore parse errors */ }\n });\n }\n }\n }\n\n // --- Sync ---\n if (definition.sync && (definition.sync.enabled !== false)) {\n const syncOpts = definition.sync;\n const syncKeys = syncOpts.pick ?? stateKeys;\n\n const syncState: Record<string, unknown> = {};\n for (const key of syncKeys) {\n syncState[key] = stateSignals[key]?.peek?.() ?? initialState[key as keyof S];\n }\n\n const doc = createSync(syncState as Record<string, unknown>, {\n transport: syncOpts.transport,\n peerId: syncOpts.peerId,\n });\n\n // Wire: local signal changes → sync broadcast\n for (const key of syncKeys) {\n if (!(key in stateSignals) || !(key in doc.state)) continue;\n const localSignal = stateSignals[key];\n const syncSignal = (doc.state as Record<string, any>)[key];\n\n const originalSet = localSignal.set;\n let fromSync = false;\n localSignal.set = (value: unknown) => {\n originalSet.call(localSignal, value);\n if (!fromSync) syncSignal.set(value);\n };\n\n // Listen for remote changes\n effect(() => {\n const remoteVal = syncSignal();\n fromSync = true;\n localSignal.set(remoteVal);\n fromSync = false;\n });\n }\n\n // Expose sync metadata on the store\n (store as any).$sync = {\n peers: doc.peers,\n presence: doc.presence,\n peerPresence: doc.peerPresence,\n peerId: doc.peerId,\n connected: doc.connected,\n connect: doc.connect.bind(doc),\n disconnect: doc.disconnect.bind(doc),\n };\n }\n\n // Initialize plugins\n for (const plugin of plugins) plugin.init?.(store);\n\n return store as Store<S, G, A>;\n}\n\nfunction normalizePersistConfigs<S>(id: string, persist: boolean | PersistOptions<S> | PersistOptions<S>[]): Array<PersistOptions<S> & { key: string }> {\n if (persist === true) {\n return [{ key: `akash-store:${id}` }];\n }\n if (persist === false) return [];\n if (Array.isArray(persist)) {\n return persist.map((p, i) => ({ ...p, key: p.key ?? `akash-store:${id}:${i}` }));\n }\n return [{ ...persist, key: persist.key ?? `akash-store:${id}` }];\n}\n\n/**\n * Clear all store instances (useful for testing).\n */\nexport function clearStores(): void {\n storeInstances.clear();\n}\n\n/** @internal — exposes store registry for devtools */\nexport function __getStoreInstances(): Record<string, Store<any, any, any>> {\n return Object.fromEntries(storeInstances);\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var chunkLSD7DEMV_cjs=require('./chunk-LSD7DEMV.cjs'),chunkHL2VGVJT_cjs=require('./chunk-HL2VGVJT.cjs');var f=[];function m(){let i=f;return f=[],i}function g(i){if(!i||i.length===0)return "";let r="",s=i.reduce((o,t)=>t.title??o,""),c=i.reduce((o,t)=>t.titleTemplate??o,"");if(s){let o=c?c.replace("%s",s):s;r+=`<title>${o}</title>
|
|
2
2
|
`;}for(let o of i)for(let t of o.meta??[])r+=" <meta",t.name&&(r+=` name="${t.name}"`),t.property&&(r+=` property="${t.property}"`),t.httpEquiv&&(r+=` http-equiv="${t.httpEquiv}"`),r+=` content="${t.content}"`,r+=` />
|
|
3
3
|
`;for(let o of i)for(let t of o.link??[])r+=` <link rel="${t.rel}" href="${t.href}"`,t.type&&(r+=` type="${t.type}"`),r+=` />
|
|
4
|
-
`;return r}var a="data-akash-head";function h(i){let r=typeof i=="function"?i:()=>i;if(typeof document>"u")return f.push(r()),()=>{};let s=[],c=
|
|
5
|
-
//# sourceMappingURL=chunk-
|
|
4
|
+
`;return r}var a="data-akash-head";function h(i){let r=typeof i=="function"?i:()=>i;if(typeof document>"u")return f.push(r()),()=>{};let s=[],c=chunkHL2VGVJT_cjs.e(()=>{let t=r();for(let e of s)e.remove();if(s.length=0,t.title){let e=t.titleTemplate?t.titleTemplate.replace("%s",t.title):t.title;document.title=e;}for(let e of t.meta??[]){let n=document.createElement("meta");n.setAttribute(a,""),e.name&&n.setAttribute("name",e.name),e.property&&n.setAttribute("property",e.property),e.httpEquiv&&n.setAttribute("http-equiv",e.httpEquiv),n.setAttribute("content",e.content),document.head.appendChild(n),s.push(n);}for(let e of t.link??[]){let n=document.createElement("link");n.setAttribute(a,""),n.setAttribute("rel",e.rel),n.setAttribute("href",e.href),e.type&&n.setAttribute("type",e.type),document.head.appendChild(n),s.push(n);}for(let e of t.script??[]){let n=document.createElement("script");n.setAttribute(a,""),e.src&&n.setAttribute("src",e.src),e.type&&n.setAttribute("type",e.type),e.async&&n.setAttribute("async",""),e.defer&&n.setAttribute("defer",""),e.innerHTML&&(n.textContent=e.innerHTML),document.head.appendChild(n),s.push(n);}if(t.htmlAttrs)for(let[e,n]of Object.entries(t.htmlAttrs))document.documentElement.setAttribute(e,n);if(t.bodyAttrs)for(let[e,n]of Object.entries(t.bodyAttrs))document.body.setAttribute(e,n);}),o=()=>{c();for(let t of s)t.remove();s.length=0;};try{chunkLSD7DEMV_cjs.p(o);}catch{}return o}exports.a=m;exports.b=g;exports.c=h;//# sourceMappingURL=chunk-XMNDNTHK.cjs.map
|
|
5
|
+
//# sourceMappingURL=chunk-XMNDNTHK.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/head.ts"],"names":["ssrHeadTags","collectSSRHead","tags","renderHeadToString","configs","html","title","t","c","titleTemplate","finalTitle","config","meta","link","MANAGED_ATTR","useHead","getConfig","managedElements","dispose","effect","cfg","el","script","key","value","cleanup","onUnmount"],"mappings":"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","file":"chunk-FVWHMFX6.cjs","sourcesContent":["/**\n * Document head management.\n *\n * Provides Title, Meta, and Head components for managing\n * <head> content declaratively. SSR-compatible — on the server,\n * collects tags; on the client, directly mutates the DOM.\n *\n * ```ts\n * // In any component:\n * useHead({\n * title: 'My Page',\n * meta: [\n * { name: 'description', content: 'Page description' },\n * { property: 'og:title', content: 'My Page' },\n * ],\n * link: [\n * { rel: 'canonical', href: 'https://example.com/page' },\n * ],\n * });\n * ```\n */\n\nimport { effect } from './signals.js';\nimport { onUnmount } from './component.js';\n\n// --- Types ---\n\nexport interface HeadConfig {\n /** Document title */\n title?: string;\n /** Title template — use %s as placeholder */\n titleTemplate?: string;\n /** Meta tags */\n meta?: MetaTag[];\n /** Link tags */\n link?: LinkTag[];\n /** Script tags */\n script?: ScriptTag[];\n /** HTML attributes */\n htmlAttrs?: Record<string, string>;\n /** Body attributes */\n bodyAttrs?: Record<string, string>;\n}\n\nexport interface MetaTag {\n name?: string;\n property?: string;\n httpEquiv?: string;\n content: string;\n}\n\nexport interface LinkTag {\n rel: string;\n href: string;\n type?: string;\n crossorigin?: string;\n}\n\nexport interface ScriptTag {\n src?: string;\n type?: string;\n async?: boolean;\n defer?: boolean;\n innerHTML?: string;\n}\n\n// --- SSR head collection ---\n\nlet ssrHeadTags: HeadConfig[] = [];\n\n/** @internal — collect head tags during SSR */\nexport function collectSSRHead(): HeadConfig[] {\n const tags = ssrHeadTags;\n ssrHeadTags = [];\n return tags;\n}\n\n/** Render collected head tags to HTML string (for SSR) */\nexport function renderHeadToString(configs?: HeadConfig[] | null): string {\n if (!configs || configs.length === 0) return '';\n let html = '';\n\n // Last title wins\n const title = configs.reduce((t, c) => c.title ?? t, '');\n const titleTemplate = configs.reduce((t, c) => c.titleTemplate ?? t, '');\n\n if (title) {\n const finalTitle = titleTemplate\n ? titleTemplate.replace('%s', title)\n : title;\n html += `<title>${finalTitle}</title>\\n`;\n }\n\n // Merge all meta tags\n for (const config of configs) {\n for (const meta of config.meta ?? []) {\n html += ' <meta';\n if (meta.name) html += ` name=\"${meta.name}\"`;\n if (meta.property) html += ` property=\"${meta.property}\"`;\n if (meta.httpEquiv) html += ` http-equiv=\"${meta.httpEquiv}\"`;\n html += ` content=\"${meta.content}\"`;\n html += ' />\\n';\n }\n }\n\n // Merge all link tags\n for (const config of configs) {\n for (const link of config.link ?? []) {\n html += ` <link rel=\"${link.rel}\" href=\"${link.href}\"`;\n if (link.type) html += ` type=\"${link.type}\"`;\n html += ' />\\n';\n }\n }\n\n return html;\n}\n\n// --- Client-side head management ---\n\nconst MANAGED_ATTR = 'data-akash-head';\n\n/**\n * Declaratively manage document head tags.\n * Call inside defineComponent() setup.\n *\n * Tags are automatically cleaned up when the component unmounts.\n * Reactive values (signals) in the config trigger updates.\n */\nexport function useHead(config: HeadConfig | (() => HeadConfig)): () => void {\n const getConfig = typeof config === 'function' ? config : () => config;\n\n // SSR: just collect\n if (typeof document === 'undefined') {\n ssrHeadTags.push(getConfig());\n return () => {};\n }\n\n const managedElements: Element[] = [];\n\n const dispose = effect(() => {\n const cfg = getConfig();\n\n // Clean up previously managed elements\n for (const el of managedElements) {\n el.remove();\n }\n managedElements.length = 0;\n\n // Title\n if (cfg.title) {\n const title = cfg.titleTemplate\n ? cfg.titleTemplate.replace('%s', cfg.title)\n : cfg.title;\n document.title = title;\n }\n\n // Meta tags\n for (const meta of cfg.meta ?? []) {\n const el = document.createElement('meta');\n el.setAttribute(MANAGED_ATTR, '');\n if (meta.name) el.setAttribute('name', meta.name);\n if (meta.property) el.setAttribute('property', meta.property);\n if (meta.httpEquiv) el.setAttribute('http-equiv', meta.httpEquiv);\n el.setAttribute('content', meta.content);\n document.head.appendChild(el);\n managedElements.push(el);\n }\n\n // Link tags\n for (const link of cfg.link ?? []) {\n const el = document.createElement('link');\n el.setAttribute(MANAGED_ATTR, '');\n el.setAttribute('rel', link.rel);\n el.setAttribute('href', link.href);\n if (link.type) el.setAttribute('type', link.type);\n document.head.appendChild(el);\n managedElements.push(el);\n }\n\n // Script tags\n for (const script of cfg.script ?? []) {\n const el = document.createElement('script');\n el.setAttribute(MANAGED_ATTR, '');\n if (script.src) el.setAttribute('src', script.src);\n if (script.type) el.setAttribute('type', script.type);\n if (script.async) el.setAttribute('async', '');\n if (script.defer) el.setAttribute('defer', '');\n if (script.innerHTML) el.textContent = script.innerHTML;\n document.head.appendChild(el);\n managedElements.push(el);\n }\n\n // HTML attributes\n if (cfg.htmlAttrs) {\n for (const [key, value] of Object.entries(cfg.htmlAttrs)) {\n document.documentElement.setAttribute(key, value);\n }\n }\n\n // Body attributes\n if (cfg.bodyAttrs) {\n for (const [key, value] of Object.entries(cfg.bodyAttrs)) {\n document.body.setAttribute(key, value);\n }\n }\n });\n\n const cleanup = () => {\n dispose();\n for (const el of managedElements) {\n el.remove();\n }\n managedElements.length = 0;\n };\n\n // Cleanup on unmount\n try {\n onUnmount(cleanup);\n } catch {\n // onUnmount may throw if called outside component — that's fine,\n // caller can use the returned dispose function manually\n }\n\n return cleanup;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/head.ts"],"names":["ssrHeadTags","collectSSRHead","tags","renderHeadToString","configs","html","title","t","c","titleTemplate","finalTitle","config","meta","link","MANAGED_ATTR","useHead","getConfig","managedElements","dispose","effect","cfg","el","script","key","value","cleanup","onUnmount"],"mappings":"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","file":"chunk-XMNDNTHK.cjs","sourcesContent":["/**\n * Document head management.\n *\n * Provides Title, Meta, and Head components for managing\n * <head> content declaratively. SSR-compatible — on the server,\n * collects tags; on the client, directly mutates the DOM.\n *\n * ```ts\n * // In any component:\n * useHead({\n * title: 'My Page',\n * meta: [\n * { name: 'description', content: 'Page description' },\n * { property: 'og:title', content: 'My Page' },\n * ],\n * link: [\n * { rel: 'canonical', href: 'https://example.com/page' },\n * ],\n * });\n * ```\n */\n\nimport { effect } from './signals.js';\nimport { onUnmount } from './component.js';\n\n// --- Types ---\n\nexport interface HeadConfig {\n /** Document title */\n title?: string;\n /** Title template — use %s as placeholder */\n titleTemplate?: string;\n /** Meta tags */\n meta?: MetaTag[];\n /** Link tags */\n link?: LinkTag[];\n /** Script tags */\n script?: ScriptTag[];\n /** HTML attributes */\n htmlAttrs?: Record<string, string>;\n /** Body attributes */\n bodyAttrs?: Record<string, string>;\n}\n\nexport interface MetaTag {\n name?: string;\n property?: string;\n httpEquiv?: string;\n content: string;\n}\n\nexport interface LinkTag {\n rel: string;\n href: string;\n type?: string;\n crossorigin?: string;\n}\n\nexport interface ScriptTag {\n src?: string;\n type?: string;\n async?: boolean;\n defer?: boolean;\n innerHTML?: string;\n}\n\n// --- SSR head collection ---\n\nlet ssrHeadTags: HeadConfig[] = [];\n\n/** @internal — collect head tags during SSR */\nexport function collectSSRHead(): HeadConfig[] {\n const tags = ssrHeadTags;\n ssrHeadTags = [];\n return tags;\n}\n\n/** Render collected head tags to HTML string (for SSR) */\nexport function renderHeadToString(configs?: HeadConfig[] | null): string {\n if (!configs || configs.length === 0) return '';\n let html = '';\n\n // Last title wins\n const title = configs.reduce((t, c) => c.title ?? t, '');\n const titleTemplate = configs.reduce((t, c) => c.titleTemplate ?? t, '');\n\n if (title) {\n const finalTitle = titleTemplate\n ? titleTemplate.replace('%s', title)\n : title;\n html += `<title>${finalTitle}</title>\\n`;\n }\n\n // Merge all meta tags\n for (const config of configs) {\n for (const meta of config.meta ?? []) {\n html += ' <meta';\n if (meta.name) html += ` name=\"${meta.name}\"`;\n if (meta.property) html += ` property=\"${meta.property}\"`;\n if (meta.httpEquiv) html += ` http-equiv=\"${meta.httpEquiv}\"`;\n html += ` content=\"${meta.content}\"`;\n html += ' />\\n';\n }\n }\n\n // Merge all link tags\n for (const config of configs) {\n for (const link of config.link ?? []) {\n html += ` <link rel=\"${link.rel}\" href=\"${link.href}\"`;\n if (link.type) html += ` type=\"${link.type}\"`;\n html += ' />\\n';\n }\n }\n\n return html;\n}\n\n// --- Client-side head management ---\n\nconst MANAGED_ATTR = 'data-akash-head';\n\n/**\n * Declaratively manage document head tags.\n * Call inside defineComponent() setup.\n *\n * Tags are automatically cleaned up when the component unmounts.\n * Reactive values (signals) in the config trigger updates.\n */\nexport function useHead(config: HeadConfig | (() => HeadConfig)): () => void {\n const getConfig = typeof config === 'function' ? config : () => config;\n\n // SSR: just collect\n if (typeof document === 'undefined') {\n ssrHeadTags.push(getConfig());\n return () => {};\n }\n\n const managedElements: Element[] = [];\n\n const dispose = effect(() => {\n const cfg = getConfig();\n\n // Clean up previously managed elements\n for (const el of managedElements) {\n el.remove();\n }\n managedElements.length = 0;\n\n // Title\n if (cfg.title) {\n const title = cfg.titleTemplate\n ? cfg.titleTemplate.replace('%s', cfg.title)\n : cfg.title;\n document.title = title;\n }\n\n // Meta tags\n for (const meta of cfg.meta ?? []) {\n const el = document.createElement('meta');\n el.setAttribute(MANAGED_ATTR, '');\n if (meta.name) el.setAttribute('name', meta.name);\n if (meta.property) el.setAttribute('property', meta.property);\n if (meta.httpEquiv) el.setAttribute('http-equiv', meta.httpEquiv);\n el.setAttribute('content', meta.content);\n document.head.appendChild(el);\n managedElements.push(el);\n }\n\n // Link tags\n for (const link of cfg.link ?? []) {\n const el = document.createElement('link');\n el.setAttribute(MANAGED_ATTR, '');\n el.setAttribute('rel', link.rel);\n el.setAttribute('href', link.href);\n if (link.type) el.setAttribute('type', link.type);\n document.head.appendChild(el);\n managedElements.push(el);\n }\n\n // Script tags\n for (const script of cfg.script ?? []) {\n const el = document.createElement('script');\n el.setAttribute(MANAGED_ATTR, '');\n if (script.src) el.setAttribute('src', script.src);\n if (script.type) el.setAttribute('type', script.type);\n if (script.async) el.setAttribute('async', '');\n if (script.defer) el.setAttribute('defer', '');\n if (script.innerHTML) el.textContent = script.innerHTML;\n document.head.appendChild(el);\n managedElements.push(el);\n }\n\n // HTML attributes\n if (cfg.htmlAttrs) {\n for (const [key, value] of Object.entries(cfg.htmlAttrs)) {\n document.documentElement.setAttribute(key, value);\n }\n }\n\n // Body attributes\n if (cfg.bodyAttrs) {\n for (const [key, value] of Object.entries(cfg.bodyAttrs)) {\n document.body.setAttribute(key, value);\n }\n }\n });\n\n const cleanup = () => {\n dispose();\n for (const el of managedElements) {\n el.remove();\n }\n managedElements.length = 0;\n };\n\n // Cleanup on unmount\n try {\n onUnmount(cleanup);\n } catch {\n // onUnmount may throw if called outside component — that's fine,\n // caller can use the returned dispose function manually\n }\n\n return cleanup;\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
'use strict';var chunkHL2VGVJT_cjs=require('./chunk-HL2VGVJT.cjs');var v=0;function h(u={}){let{maxVisible:T=5,defaultDuration:l=3e3,position:f="top-right"}=u,i=chunkHL2VGVJT_cjs.c([]),e=new Map;function o(t,s,n){let r=`toast-${++v}`,p=n?.duration??l,y=n?.dismissible??true,x={id:r,type:t,message:s,duration:p,dismissible:y,createdAt:Date.now()};if(i.update(g=>{let d=[...g,x];if(d.length>T){let O=d.shift();a(O.id);}return d}),p>0){let g=setTimeout(()=>c(r),p);e.set(r,g);}return r}function c(t){a(t),i.update(s=>s.filter(n=>n.id!==t));}function b(){for(let[t]of e)a(t);i.set([]);}function a(t){let s=e.get(t);s&&(clearTimeout(s),e.delete(t));}return {toasts:(()=>i()),position:f,success:(t,s)=>o("success",t,s),error:(t,s)=>o("error",t,s),info:(t,s)=>o("info",t,s),warning:(t,s)=>o("warning",t,s),add:o,dismiss:c,dismissAll:b}}exports.a=h;//# sourceMappingURL=chunk-XOPRWJCX.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-XOPRWJCX.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/toast.ts"],"names":["idCounter","createToaster","options","maxVisible","defaultDuration","position","toasts","signal","timers","add","type","message","opts","id","duration","dismissible","toast","list","next","removed","clearTimer","timer","dismiss","t","dismissAll","msg"],"mappings":"mEAyEA,IAAIA,CAAAA,CAAY,CAAA,CAKT,SAASC,CAAAA,CAAcC,CAAAA,CAA0B,EAAC,CAAY,CACnE,GAAM,CACJ,UAAA,CAAAC,CAAAA,CAAa,EACb,eAAA,CAAAC,CAAAA,CAAkB,GAAA,CAClB,QAAA,CAAAC,CAAAA,CAAW,WACb,EAAIH,CAAAA,CAEEI,CAAAA,CAASC,mBAAAA,CAAgB,EAAE,CAAA,CAC3BC,EAAS,IAAI,GAAA,CAEnB,SAASC,CAAAA,CAAIC,CAAAA,CAAiBC,CAAAA,CAAiBC,EAA6B,CAC1E,IAAMC,CAAAA,CAAK,CAAA,MAAA,EAAS,EAAEb,CAAS,GACzBc,CAAAA,CAAWF,CAAAA,EAAM,QAAA,EAAYR,CAAAA,CAC7BW,CAAAA,CAAcH,CAAAA,EAAM,aAAe,IAAA,CAEnCI,CAAAA,CAAe,CACnB,EAAA,CAAAH,CAAAA,CACA,IAAA,CAAAH,EACA,OAAA,CAAAC,CAAAA,CACA,QAAA,CAAAG,CAAAA,CACA,WAAA,CAAAC,CAAAA,CACA,UAAW,IAAA,CAAK,GAAA,EAClB,CAAA,CAaA,GAXAT,CAAAA,CAAO,OAAQW,CAAAA,EAAS,CACtB,IAAMC,CAAAA,CAAO,CAAC,GAAGD,EAAMD,CAAK,CAAA,CAE5B,GAAIE,CAAAA,CAAK,MAAA,CAASf,CAAAA,CAAY,CAC5B,IAAMgB,CAAAA,CAAUD,CAAAA,CAAK,KAAA,EAAM,CAC3BE,CAAAA,CAAWD,EAAQ,EAAE,EACvB,CACA,OAAOD,CACT,CAAC,EAGGJ,CAAAA,CAAW,CAAA,CAAG,CAChB,IAAMO,CAAAA,CAAQ,UAAA,CAAW,IAAMC,CAAAA,CAAQT,CAAE,CAAA,CAAGC,CAAQ,CAAA,CACpDN,CAAAA,CAAO,GAAA,CAAIK,EAAIQ,CAAK,EACtB,CAEA,OAAOR,CACT,CAEA,SAASS,CAAAA,CAAQT,CAAAA,CAAkB,CACjCO,CAAAA,CAAWP,CAAE,CAAA,CACbP,EAAO,MAAA,CAAQW,CAAAA,EAASA,CAAAA,CAAK,MAAA,CAAQM,CAAAA,EAAMA,CAAAA,CAAE,KAAOV,CAAE,CAAC,EACzD,CAEA,SAASW,CAAAA,EAAmB,CAC1B,IAAA,GAAW,CAACX,CAAE,CAAA,GAAKL,CAAAA,CACjBY,CAAAA,CAAWP,CAAE,CAAA,CAEfP,CAAAA,CAAO,GAAA,CAAI,EAAE,EACf,CAEA,SAASc,CAAAA,CAAWP,CAAAA,CAAkB,CACpC,IAAMQ,CAAAA,CAAQb,CAAAA,CAAO,GAAA,CAAIK,CAAE,CAAA,CACvBQ,CAAAA,GACF,YAAA,CAAaA,CAAK,CAAA,CAClBb,EAAO,MAAA,CAAOK,CAAE,CAAA,EAEpB,CAEA,OAAO,CACL,QAAS,IAAMP,CAAAA,EAAO,CAAA,CACtB,QAAA,CAAAD,CAAAA,CACA,OAAA,CAAS,CAACoB,CAAAA,CAAKb,CAAAA,GAASH,CAAAA,CAAI,SAAA,CAAWgB,CAAAA,CAAKb,CAAI,EAChD,KAAA,CAAO,CAACa,CAAAA,CAAKb,CAAAA,GAASH,CAAAA,CAAI,OAAA,CAASgB,EAAKb,CAAI,CAAA,CAC5C,IAAA,CAAM,CAACa,CAAAA,CAAKb,CAAAA,GAASH,EAAI,MAAA,CAAQgB,CAAAA,CAAKb,CAAI,CAAA,CAC1C,OAAA,CAAS,CAACa,EAAKb,CAAAA,GAASH,CAAAA,CAAI,SAAA,CAAWgB,CAAAA,CAAKb,CAAI,CAAA,CAChD,GAAA,CAAAH,CAAAA,CACA,OAAA,CAAAa,CAAAA,CACA,UAAA,CAAAE,CACF,CACF","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/toast.ts"],"names":["idCounter","createToaster","options","maxVisible","defaultDuration","position","toasts","signal","timers","add","type","message","opts","id","duration","dismissible","toast","list","next","removed","clearTimer","timer","dismiss","t","dismissAll","msg"],"mappings":"mEAyEA,IAAIA,CAAAA,CAAY,CAAA,CAKT,SAASC,CAAAA,CAAcC,CAAAA,CAA0B,EAAC,CAAY,CACnE,GAAM,CACJ,UAAA,CAAAC,CAAAA,CAAa,EACb,eAAA,CAAAC,CAAAA,CAAkB,GAAA,CAClB,QAAA,CAAAC,CAAAA,CAAW,WACb,EAAIH,CAAAA,CAEEI,CAAAA,CAASC,mBAAAA,CAAgB,EAAE,CAAA,CAC3BC,EAAS,IAAI,GAAA,CAEnB,SAASC,CAAAA,CAAIC,CAAAA,CAAiBC,CAAAA,CAAiBC,EAA6B,CAC1E,IAAMC,CAAAA,CAAK,CAAA,MAAA,EAAS,EAAEb,CAAS,GACzBc,CAAAA,CAAWF,CAAAA,EAAM,QAAA,EAAYR,CAAAA,CAC7BW,CAAAA,CAAcH,CAAAA,EAAM,aAAe,IAAA,CAEnCI,CAAAA,CAAe,CACnB,EAAA,CAAAH,CAAAA,CACA,IAAA,CAAAH,EACA,OAAA,CAAAC,CAAAA,CACA,QAAA,CAAAG,CAAAA,CACA,WAAA,CAAAC,CAAAA,CACA,UAAW,IAAA,CAAK,GAAA,EAClB,CAAA,CAaA,GAXAT,CAAAA,CAAO,OAAQW,CAAAA,EAAS,CACtB,IAAMC,CAAAA,CAAO,CAAC,GAAGD,EAAMD,CAAK,CAAA,CAE5B,GAAIE,CAAAA,CAAK,MAAA,CAASf,CAAAA,CAAY,CAC5B,IAAMgB,CAAAA,CAAUD,CAAAA,CAAK,KAAA,EAAM,CAC3BE,CAAAA,CAAWD,EAAQ,EAAE,EACvB,CACA,OAAOD,CACT,CAAC,EAGGJ,CAAAA,CAAW,CAAA,CAAG,CAChB,IAAMO,CAAAA,CAAQ,UAAA,CAAW,IAAMC,CAAAA,CAAQT,CAAE,CAAA,CAAGC,CAAQ,CAAA,CACpDN,CAAAA,CAAO,GAAA,CAAIK,EAAIQ,CAAK,EACtB,CAEA,OAAOR,CACT,CAEA,SAASS,CAAAA,CAAQT,CAAAA,CAAkB,CACjCO,CAAAA,CAAWP,CAAE,CAAA,CACbP,EAAO,MAAA,CAAQW,CAAAA,EAASA,CAAAA,CAAK,MAAA,CAAQM,CAAAA,EAAMA,CAAAA,CAAE,KAAOV,CAAE,CAAC,EACzD,CAEA,SAASW,CAAAA,EAAmB,CAC1B,IAAA,GAAW,CAACX,CAAE,CAAA,GAAKL,CAAAA,CACjBY,CAAAA,CAAWP,CAAE,CAAA,CAEfP,CAAAA,CAAO,GAAA,CAAI,EAAE,EACf,CAEA,SAASc,CAAAA,CAAWP,CAAAA,CAAkB,CACpC,IAAMQ,CAAAA,CAAQb,CAAAA,CAAO,GAAA,CAAIK,CAAE,CAAA,CACvBQ,CAAAA,GACF,YAAA,CAAaA,CAAK,CAAA,CAClBb,EAAO,MAAA,CAAOK,CAAE,CAAA,EAEpB,CAEA,OAAO,CACL,QAAS,IAAMP,CAAAA,EAAO,CAAA,CACtB,QAAA,CAAAD,CAAAA,CACA,OAAA,CAAS,CAACoB,CAAAA,CAAKb,CAAAA,GAASH,CAAAA,CAAI,SAAA,CAAWgB,CAAAA,CAAKb,CAAI,EAChD,KAAA,CAAO,CAACa,CAAAA,CAAKb,CAAAA,GAASH,CAAAA,CAAI,OAAA,CAASgB,EAAKb,CAAI,CAAA,CAC5C,IAAA,CAAM,CAACa,CAAAA,CAAKb,CAAAA,GAASH,EAAI,MAAA,CAAQgB,CAAAA,CAAKb,CAAI,CAAA,CAC1C,OAAA,CAAS,CAACa,EAAKb,CAAAA,GAASH,CAAAA,CAAI,SAAA,CAAWgB,CAAAA,CAAKb,CAAI,CAAA,CAChD,GAAA,CAAAH,CAAAA,CACA,OAAA,CAAAa,CAAAA,CACA,UAAA,CAAAE,CACF,CACF","file":"chunk-XOPRWJCX.cjs","sourcesContent":["/**\n * Toast notification system.\n *\n * Signal-based toast queue with auto-dismiss, stacking, and positions.\n *\n * ```ts\n * const toast = createToaster();\n * toast.success('Saved!');\n * toast.error('Something went wrong');\n * toast.info('Tip: try dark mode', { duration: 5000 });\n * toast.toasts(); // reactive list of active toasts\n * ```\n */\n\nimport { signal } from './signals.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// --- Types ---\n\nexport type ToastType = 'success' | 'error' | 'info' | 'warning';\n\nexport type ToastPosition =\n | 'top-right' | 'top-left' | 'top-center'\n | 'bottom-right' | 'bottom-left' | 'bottom-center';\n\nexport interface Toast {\n id: string;\n type: ToastType;\n message: string;\n duration: number;\n dismissible: boolean;\n createdAt: number;\n}\n\nexport interface ToastOptions {\n /** Duration in ms (default: 3000, 0 = no auto-dismiss) */\n duration?: number;\n /** Whether the toast can be manually dismissed (default: true) */\n dismissible?: boolean;\n}\n\nexport interface ToasterOptions {\n /** Max visible toasts (default: 5) */\n maxVisible?: number;\n /** Default duration in ms (default: 3000) */\n defaultDuration?: number;\n /** Position (default: 'top-right') */\n position?: ToastPosition;\n}\n\nexport interface Toaster {\n /** Active toasts (reactive signal) */\n toasts: ReadonlySignal<Toast[]>;\n /** Position setting */\n position: ToastPosition;\n /** Show a success toast */\n success(message: string, options?: ToastOptions): string;\n /** Show an error toast */\n error(message: string, options?: ToastOptions): string;\n /** Show an info toast */\n info(message: string, options?: ToastOptions): string;\n /** Show a warning toast */\n warning(message: string, options?: ToastOptions): string;\n /** Show a toast with custom type */\n add(type: ToastType, message: string, options?: ToastOptions): string;\n /** Dismiss a specific toast */\n dismiss(id: string): void;\n /** Dismiss all toasts */\n dismissAll(): void;\n}\n\n// --- Implementation ---\n\nlet idCounter = 0;\n\n/**\n * Create a toast notification manager.\n */\nexport function createToaster(options: ToasterOptions = {}): Toaster {\n const {\n maxVisible = 5,\n defaultDuration = 3000,\n position = 'top-right',\n } = options;\n\n const toasts = signal<Toast[]>([]);\n const timers = new Map<string, ReturnType<typeof setTimeout>>();\n\n function add(type: ToastType, message: string, opts?: ToastOptions): string {\n const id = `toast-${++idCounter}`;\n const duration = opts?.duration ?? defaultDuration;\n const dismissible = opts?.dismissible ?? true;\n\n const toast: Toast = {\n id,\n type,\n message,\n duration,\n dismissible,\n createdAt: Date.now(),\n };\n\n toasts.update((list) => {\n const next = [...list, toast];\n // Trim to maxVisible\n if (next.length > maxVisible) {\n const removed = next.shift()!;\n clearTimer(removed.id);\n }\n return next;\n });\n\n // Auto-dismiss\n if (duration > 0) {\n const timer = setTimeout(() => dismiss(id), duration);\n timers.set(id, timer);\n }\n\n return id;\n }\n\n function dismiss(id: string): void {\n clearTimer(id);\n toasts.update((list) => list.filter((t) => t.id !== id));\n }\n\n function dismissAll(): void {\n for (const [id] of timers) {\n clearTimer(id);\n }\n toasts.set([]);\n }\n\n function clearTimer(id: string): void {\n const timer = timers.get(id);\n if (timer) {\n clearTimeout(timer);\n timers.delete(id);\n }\n }\n\n return {\n toasts: (() => toasts()) as ReadonlySignal<Toast[]>,\n position,\n success: (msg, opts) => add('success', msg, opts),\n error: (msg, opts) => add('error', msg, opts),\n info: (msg, opts) => add('info', msg, opts),\n warning: (msg, opts) => add('warning', msg, opts),\n add,\n dismiss,\n dismissAll,\n };\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {s,l}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {s,l}from'./chunk-CDZR6GWB.js';import {c,e}from'./chunk-2UATNCKC.js';var n=null;function h(){return n}function C(t){n&&n.addPending(t);}var x=s(t=>{let s=c(false),i=[],u={addPending(e){i.push(e);},isResolved:()=>s()},a=n;n=u;let r;try{r=t.children();}finally{n=a;}return i.length>0?Promise.all(i).then(()=>{s.set(true);}):s.set(true),()=>{let e$1=document.createElement("div");return e$1.setAttribute("data-akash-suspense",""),e$1.style.display="contents",s()?e$1.appendChild(l(r)):e$1.appendChild(l(t.props.fallback())),e(()=>{if(s()){for(;e$1.firstChild;)e$1.removeChild(e$1.firstChild);e$1.appendChild(l(r));}}),e$1}});export{h as a,C as b,x as c};//# sourceMappingURL=chunk-XRWOZO67.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-XRWOZO67.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/suspense.ts"],"names":["currentSuspenseCtx","getSuspenseContext","registerPending","promise","Suspense","defineComponent","ctx","resolved","signal","pending","suspenseCtx","prevCtx","childrenNode","container","nodeToDOM","effect"],"mappings":"4EAyBA,IAAIA,CAAAA,CAA6C,IAAA,CAM1C,SAASC,CAAAA,EAA6C,CAC3D,OAAOD,CACT,CAOO,SAASE,CAAAA,CAAgBC,CAAAA,CAAiC,CAC3DH,CAAAA,EACFA,EAAmB,UAAA,CAAWG,CAAO,EAEzC,CAkBO,IAAMC,CAAAA,CAAWC,CAAAA,CAAgCC,CAAAA,EAAQ,CAC9D,IAAMC,CAAAA,CAAWC,CAAAA,CAAO,KAAK,EACvBC,CAAAA,CAA8B,EAAC,CAE/BC,CAAAA,CAA+B,CACnC,UAAA,CAAWP,CAAAA,CAA2B,CACpCM,CAAAA,CAAQ,IAAA,CAAKN,CAAO,EACtB,CAAA,CACA,WAAY,IAAMI,CAAAA,EACpB,CAAA,CAGMI,CAAAA,CAAUX,CAAAA,CAChBA,CAAAA,CAAqBU,CAAAA,CAGrB,IAAIE,CAAAA,CACJ,GAAI,CACFA,CAAAA,CAAeN,CAAAA,CAAI,QAAA,GACrB,CAAA,OAAE,CACAN,CAAAA,CAAqBW,EACvB,CAGA,OAAIF,EAAQ,MAAA,CAAS,CAAA,CACnB,OAAA,CAAQ,GAAA,CAAIA,CAAO,CAAA,CAAE,IAAA,CAAK,IAAM,CAC9BF,CAAAA,CAAS,GAAA,CAAI,IAAI,EACnB,CAAC,CAAA,CAGDA,CAAAA,CAAS,GAAA,CAAI,IAAI,CAAA,CAGZ,IAAM,CACX,IAAMM,IAAY,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA,CAC9C,OAAAA,GAAAA,CAAU,YAAA,CAAa,qBAAA,CAAuB,EAAE,CAAA,CAChDA,GAAAA,CAAU,KAAA,CAAM,OAAA,CAAU,WAEtBN,CAAAA,EAAS,CACXM,GAAAA,CAAU,WAAA,CAAYC,EAAUF,CAAY,CAAC,CAAA,CAE7CC,GAAAA,CAAU,WAAA,CAAYC,CAAAA,CAAUR,CAAAA,CAAI,KAAA,CAAM,UAAU,CAAC,CAAA,CAIvDS,CAAAA,CAAO,IAAM,CACX,GAAIR,CAAAA,EAAS,CAAG,CACd,KAAOM,GAAAA,CAAU,UAAA,EACfA,GAAAA,CAAU,WAAA,CAAYA,GAAAA,CAAU,UAAU,CAAA,CAE5CA,IAAU,WAAA,CAAYC,CAAAA,CAAUF,CAAY,CAAC,EAC/C,CACF,CAAC,CAAA,CAEMC,GACT,CACF,CAAC","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/suspense.ts"],"names":["currentSuspenseCtx","getSuspenseContext","registerPending","promise","Suspense","defineComponent","ctx","resolved","signal","pending","suspenseCtx","prevCtx","childrenNode","container","nodeToDOM","effect"],"mappings":"4EAyBA,IAAIA,CAAAA,CAA6C,IAAA,CAM1C,SAASC,CAAAA,EAA6C,CAC3D,OAAOD,CACT,CAOO,SAASE,CAAAA,CAAgBC,CAAAA,CAAiC,CAC3DH,CAAAA,EACFA,EAAmB,UAAA,CAAWG,CAAO,EAEzC,CAkBO,IAAMC,CAAAA,CAAWC,CAAAA,CAAgCC,CAAAA,EAAQ,CAC9D,IAAMC,CAAAA,CAAWC,CAAAA,CAAO,KAAK,EACvBC,CAAAA,CAA8B,EAAC,CAE/BC,CAAAA,CAA+B,CACnC,UAAA,CAAWP,CAAAA,CAA2B,CACpCM,CAAAA,CAAQ,IAAA,CAAKN,CAAO,EACtB,CAAA,CACA,WAAY,IAAMI,CAAAA,EACpB,CAAA,CAGMI,CAAAA,CAAUX,CAAAA,CAChBA,CAAAA,CAAqBU,CAAAA,CAGrB,IAAIE,CAAAA,CACJ,GAAI,CACFA,CAAAA,CAAeN,CAAAA,CAAI,QAAA,GACrB,CAAA,OAAE,CACAN,CAAAA,CAAqBW,EACvB,CAGA,OAAIF,EAAQ,MAAA,CAAS,CAAA,CACnB,OAAA,CAAQ,GAAA,CAAIA,CAAO,CAAA,CAAE,IAAA,CAAK,IAAM,CAC9BF,CAAAA,CAAS,GAAA,CAAI,IAAI,EACnB,CAAC,CAAA,CAGDA,CAAAA,CAAS,GAAA,CAAI,IAAI,CAAA,CAGZ,IAAM,CACX,IAAMM,IAAY,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA,CAC9C,OAAAA,GAAAA,CAAU,YAAA,CAAa,qBAAA,CAAuB,EAAE,CAAA,CAChDA,GAAAA,CAAU,KAAA,CAAM,OAAA,CAAU,WAEtBN,CAAAA,EAAS,CACXM,GAAAA,CAAU,WAAA,CAAYC,EAAUF,CAAY,CAAC,CAAA,CAE7CC,GAAAA,CAAU,WAAA,CAAYC,CAAAA,CAAUR,CAAAA,CAAI,KAAA,CAAM,UAAU,CAAC,CAAA,CAIvDS,CAAAA,CAAO,IAAM,CACX,GAAIR,CAAAA,EAAS,CAAG,CACd,KAAOM,GAAAA,CAAU,UAAA,EACfA,GAAAA,CAAU,WAAA,CAAYA,GAAAA,CAAU,UAAU,CAAA,CAE5CA,IAAU,WAAA,CAAYC,CAAAA,CAAUF,CAAY,CAAC,EAC/C,CACF,CAAC,CAAA,CAEMC,GACT,CACF,CAAC","file":"chunk-XRWOZO67.js","sourcesContent":["/**\n * <Suspense> component.\n *\n * Shows a fallback while async children are loading.\n * When all pending async work resolves, swaps to the real content.\n *\n * Works with both client rendering and SSR streaming:\n * - Client: shows fallback, swaps when promises resolve\n * - SSR: flushes fallback HTML immediately, then sends replacement when ready\n */\n\nimport { defineComponent } from './component.js';\nimport { signal, effect } from './signals.js';\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\n\n// --- Suspense tracking ---\n\ninterface SuspenseContext {\n /** Register a pending promise */\n addPending(promise: Promise<unknown>): void;\n /** Check if all pending work is resolved */\n isResolved: () => boolean;\n}\n\nlet currentSuspenseCtx: SuspenseContext | null = null;\n\n/**\n * Get the current Suspense context (if inside a <Suspense> boundary).\n * Used by async components and createResource to register pending work.\n */\nexport function getSuspenseContext(): SuspenseContext | null {\n return currentSuspenseCtx;\n}\n\n/**\n * Register a promise with the nearest Suspense boundary.\n * If there is no Suspense boundary, the promise is ignored\n * (component renders without waiting).\n */\nexport function registerPending(promise: Promise<unknown>): void {\n if (currentSuspenseCtx) {\n currentSuspenseCtx.addPending(promise);\n }\n}\n\n// --- Suspense component ---\n\nexport interface SuspenseProps {\n /** Fallback UI shown while children are loading */\n fallback: () => AkashNode;\n}\n\n/**\n * <Suspense> component.\n *\n * ```html\n * <Suspense fallback={() => <Spinner />}>\n * <AsyncComponent />\n * </Suspense>\n * ```\n */\nexport const Suspense = defineComponent<SuspenseProps>((ctx) => {\n const resolved = signal(false);\n const pending: Promise<unknown>[] = [];\n\n const suspenseCtx: SuspenseContext = {\n addPending(promise: Promise<unknown>) {\n pending.push(promise);\n },\n isResolved: () => resolved(),\n };\n\n // Set up the context so child components can register promises\n const prevCtx = currentSuspenseCtx;\n currentSuspenseCtx = suspenseCtx;\n\n // Render children (this may trigger async work registration)\n let childrenNode: AkashNode;\n try {\n childrenNode = ctx.children();\n } finally {\n currentSuspenseCtx = prevCtx;\n }\n\n // If there are pending promises, wait for them\n if (pending.length > 0) {\n Promise.all(pending).then(() => {\n resolved.set(true);\n });\n } else {\n // No async work — resolve immediately\n resolved.set(true);\n }\n\n return () => {\n const container = document.createElement('div');\n container.setAttribute('data-akash-suspense', '');\n container.style.display = 'contents';\n\n if (resolved()) {\n container.appendChild(nodeToDOM(childrenNode));\n } else {\n container.appendChild(nodeToDOM(ctx.props.fallback()));\n }\n\n // Watch for resolution and swap content\n effect(() => {\n if (resolved()) {\n while (container.firstChild) {\n container.removeChild(container.firstChild);\n }\n container.appendChild(nodeToDOM(childrenNode));\n }\n });\n\n return container;\n };\n});\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkLSD7DEMV_cjs=require('./chunk-LSD7DEMV.cjs'),chunkHL2VGVJT_cjs=require('./chunk-HL2VGVJT.cjs');var c=chunkLSD7DEMV_cjs.s(e=>{let s=chunkHL2VGVJT_cjs.c({status:"pending"}),r=e.props.promise;return e.props.promise.then(t=>{e.props.promise===r&&s.set({status:"resolved",value:t});}).catch(t=>{e.props.promise===r&&s.set({status:"rejected",error:t instanceof Error?t:new Error(String(t))});}),()=>{let t=s();switch(t.status){case "pending":return e.props.pending?chunkLSD7DEMV_cjs.l(e.props.pending()):document.createComment("await-pending");case "resolved":return chunkLSD7DEMV_cjs.l(e.props.then(t.value));case "rejected":return e.props.catch?chunkLSD7DEMV_cjs.l(e.props.catch(t.error)):document.createComment("await-error")}}});function m(e){let s=chunkHL2VGVJT_cjs.c({status:"pending"});return e.then(r=>s.set({status:"resolved",value:r})).catch(r=>s.set({status:"rejected",error:r instanceof Error?r:new Error(String(r))})),()=>s()}exports.a=c;exports.b=m;//# sourceMappingURL=chunk-XZOP3IWH.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-XZOP3IWH.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/await-block.ts"],"names":["Await","defineComponent","ctx","state","signal","currentPromise","value","err","s","nodeToDOM","awaitSignal","promise","error"],"mappings":"qHAgDO,IAAMA,EAAQC,mBAAAA,CAAkCC,CAAAA,EAAQ,CAC7D,IAAMC,EAAQC,mBAAAA,CAA4B,CAAE,MAAA,CAAQ,SAAU,CAAC,CAAA,CAG3DC,CAAAA,CAAiBH,EAAI,KAAA,CAAM,OAAA,CAE/B,OAAAA,CAAAA,CAAI,KAAA,CAAM,OAAA,CACP,IAAA,CAAMI,GAAU,CACXJ,CAAAA,CAAI,MAAM,OAAA,GAAYG,CAAAA,EACxBF,EAAM,GAAA,CAAI,CAAE,MAAA,CAAQ,UAAA,CAAY,MAAAG,CAAM,CAAC,EAE3C,CAAC,CAAA,CACA,MAAOC,CAAAA,EAAQ,CACVL,CAAAA,CAAI,KAAA,CAAM,UAAYG,CAAAA,EACxBF,CAAAA,CAAM,IAAI,CACR,MAAA,CAAQ,WACR,KAAA,CAAOI,CAAAA,YAAe,KAAA,CAAQA,CAAAA,CAAM,IAAI,KAAA,CAAM,MAAA,CAAOA,CAAG,CAAC,CAC3D,CAAC,EAEL,CAAC,CAAA,CAEI,IAAM,CACX,IAAMC,CAAAA,CAAIL,GAAM,CAEhB,OAAQK,EAAE,MAAA,EACR,KAAK,SAAA,CACH,OAAON,CAAAA,CAAI,KAAA,CAAM,QACbO,mBAAAA,CAAUP,CAAAA,CAAI,MAAM,OAAA,EAAS,CAAA,CAC7B,QAAA,CAAS,cAAc,eAAe,CAAA,CAE5C,KAAK,UAAA,CACH,OAAOO,oBAAUP,CAAAA,CAAI,KAAA,CAAM,IAAA,CAAKM,CAAAA,CAAE,KAAK,CAAC,CAAA,CAE1C,KAAK,UAAA,CACH,OAAON,EAAI,KAAA,CAAM,KAAA,CACbO,mBAAAA,CAAUP,CAAAA,CAAI,MAAM,KAAA,CAAMM,CAAAA,CAAE,KAAK,CAAC,CAAA,CAClC,SAAS,aAAA,CAAc,aAAa,CAC5C,CACF,CACF,CAAC,EAcM,SAASE,CAAAA,CAAeC,CAAAA,CAAqB,CAClD,IAAMR,CAAAA,CAAQC,mBAAAA,CAAsB,CAAE,OAAQ,SAAU,CAAC,EAEzD,OAAAO,CAAAA,CACG,KAAML,CAAAA,EAAUH,CAAAA,CAAM,GAAA,CAAI,CAAE,OAAQ,UAAA,CAAY,KAAA,CAAAG,CAAM,CAAC,CAAC,EACxD,KAAA,CAAOM,CAAAA,EAAUT,CAAAA,CAAM,GAAA,CAAI,CAC1B,MAAA,CAAQ,UAAA,CACR,MAAOS,CAAAA,YAAiB,KAAA,CAAQA,EAAQ,IAAI,KAAA,CAAM,MAAA,CAAOA,CAAK,CAAC,CACjE,CAAC,CAAC,CAAA,CAEG,IAAMT,GACf","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/await-block.ts"],"names":["Await","defineComponent","ctx","state","signal","currentPromise","value","err","s","nodeToDOM","awaitSignal","promise","error"],"mappings":"qHAgDO,IAAMA,EAAQC,mBAAAA,CAAkCC,CAAAA,EAAQ,CAC7D,IAAMC,EAAQC,mBAAAA,CAA4B,CAAE,MAAA,CAAQ,SAAU,CAAC,CAAA,CAG3DC,CAAAA,CAAiBH,EAAI,KAAA,CAAM,OAAA,CAE/B,OAAAA,CAAAA,CAAI,KAAA,CAAM,OAAA,CACP,IAAA,CAAMI,GAAU,CACXJ,CAAAA,CAAI,MAAM,OAAA,GAAYG,CAAAA,EACxBF,EAAM,GAAA,CAAI,CAAE,MAAA,CAAQ,UAAA,CAAY,MAAAG,CAAM,CAAC,EAE3C,CAAC,CAAA,CACA,MAAOC,CAAAA,EAAQ,CACVL,CAAAA,CAAI,KAAA,CAAM,UAAYG,CAAAA,EACxBF,CAAAA,CAAM,IAAI,CACR,MAAA,CAAQ,WACR,KAAA,CAAOI,CAAAA,YAAe,KAAA,CAAQA,CAAAA,CAAM,IAAI,KAAA,CAAM,MAAA,CAAOA,CAAG,CAAC,CAC3D,CAAC,EAEL,CAAC,CAAA,CAEI,IAAM,CACX,IAAMC,CAAAA,CAAIL,GAAM,CAEhB,OAAQK,EAAE,MAAA,EACR,KAAK,SAAA,CACH,OAAON,CAAAA,CAAI,KAAA,CAAM,QACbO,mBAAAA,CAAUP,CAAAA,CAAI,MAAM,OAAA,EAAS,CAAA,CAC7B,QAAA,CAAS,cAAc,eAAe,CAAA,CAE5C,KAAK,UAAA,CACH,OAAOO,oBAAUP,CAAAA,CAAI,KAAA,CAAM,IAAA,CAAKM,CAAAA,CAAE,KAAK,CAAC,CAAA,CAE1C,KAAK,UAAA,CACH,OAAON,EAAI,KAAA,CAAM,KAAA,CACbO,mBAAAA,CAAUP,CAAAA,CAAI,MAAM,KAAA,CAAMM,CAAAA,CAAE,KAAK,CAAC,CAAA,CAClC,SAAS,aAAA,CAAc,aAAa,CAC5C,CACF,CACF,CAAC,EAcM,SAASE,CAAAA,CAAeC,CAAAA,CAAqB,CAClD,IAAMR,CAAAA,CAAQC,mBAAAA,CAAsB,CAAE,OAAQ,SAAU,CAAC,EAEzD,OAAAO,CAAAA,CACG,KAAML,CAAAA,EAAUH,CAAAA,CAAM,GAAA,CAAI,CAAE,OAAQ,UAAA,CAAY,KAAA,CAAAG,CAAM,CAAC,CAAC,EACxD,KAAA,CAAOM,CAAAA,EAAUT,CAAAA,CAAM,GAAA,CAAI,CAC1B,MAAA,CAAQ,UAAA,CACR,MAAOS,CAAAA,YAAiB,KAAA,CAAQA,EAAQ,IAAI,KAAA,CAAM,MAAA,CAAOA,CAAK,CAAC,CACjE,CAAC,CAAC,CAAA,CAEG,IAAMT,GACf","file":"chunk-XZOP3IWH.cjs","sourcesContent":["/**\n * Await block — template-level async handling.\n *\n * Renders different content for pending/resolved/rejected states\n * of a promise, similar to Svelte's {#await} blocks.\n *\n * ```ts\n * Await({\n * promise: fetchUser(userId()),\n * pending: () => <Spinner />,\n * then: (user) => <UserCard user={user} />,\n * catch: (err) => <Error message={err.message} />,\n * });\n * ```\n */\n\nimport { defineComponent } from './component.js';\nimport { signal } from './signals.js';\nimport { nodeToDOM } from './dom.js';\nimport type { AkashNode } from './types.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface AwaitProps<T> {\n /** The promise to await */\n promise: Promise<T>;\n /** Render while pending */\n pending?: () => AkashNode;\n /** Render when resolved */\n then: (value: T) => AkashNode;\n /** Render when rejected */\n catch?: (error: Error) => AkashNode;\n}\n\ntype AwaitState<T> =\n | { status: 'pending' }\n | { status: 'resolved'; value: T }\n | { status: 'rejected'; error: Error };\n\n// =========================================================================\n// Await component\n// =========================================================================\n\n/**\n * <Await> component — declarative promise handling.\n */\nexport const Await = defineComponent<AwaitProps<any>>((ctx) => {\n const state = signal<AwaitState<unknown>>({ status: 'pending' });\n\n // Track the promise to handle race conditions\n let currentPromise = ctx.props.promise;\n\n ctx.props.promise\n .then((value) => {\n if (ctx.props.promise === currentPromise) {\n state.set({ status: 'resolved', value });\n }\n })\n .catch((err) => {\n if (ctx.props.promise === currentPromise) {\n state.set({\n status: 'rejected',\n error: err instanceof Error ? err : new Error(String(err)),\n });\n }\n });\n\n return () => {\n const s = state();\n\n switch (s.status) {\n case 'pending':\n return ctx.props.pending\n ? nodeToDOM(ctx.props.pending())\n : document.createComment('await-pending');\n\n case 'resolved':\n return nodeToDOM(ctx.props.then(s.value));\n\n case 'rejected':\n return ctx.props.catch\n ? nodeToDOM(ctx.props.catch(s.error))\n : document.createComment('await-error');\n }\n };\n});\n\n// =========================================================================\n// Functional await helper\n// =========================================================================\n\n/**\n * Functional await block — returns a signal that updates as the promise resolves.\n *\n * ```ts\n * const result = awaitSignal(fetchData());\n * result().status; // 'pending' | 'resolved' | 'rejected'\n * ```\n */\nexport function awaitSignal<T>(promise: Promise<T>) {\n const state = signal<AwaitState<T>>({ status: 'pending' });\n\n promise\n .then((value) => state.set({ status: 'resolved', value }))\n .catch((error) => state.set({\n status: 'rejected',\n error: error instanceof Error ? error : new Error(String(error)),\n }));\n\n return () => state();\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {c}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {c}from'./chunk-2UATNCKC.js';var p=Symbol("deepSignal"),m=Symbol("deepRaw");function h(o){let u=c(0),a=JSON.parse(JSON.stringify(o)),f=new Map;function d(r){let e=f.get(r);return e||(e=c(0),f.set(r,e)),e}let l=false;function c$1(r){if(l)return;let e=f.get(r);e&&e.update(i=>i+1);}function T(r,e){l=true;try{return r()}finally{l=false,c$1(e);}}function y(r,e=[]){return new Proxy(r,{get(i,t,s){if(t==="$raw")return JSON.parse(JSON.stringify(a));if(t==="$signal")return ()=>(u(),JSON.parse(JSON.stringify(a)));if(t===p)return u;if(t===m)return a;let n=Reflect.get(i,t,s),g=[...e,String(t)].join(".");if(d(g)(),Array.isArray(i)&&typeof n=="function"&&new Set(["push","pop","shift","unshift","splice","sort","reverse","fill","copyWithin"]).has(String(t))){let w=e.join(".")||"__root";return (...b)=>T(()=>n.apply(i,b),w)}return n!==null&&typeof n=="object"?y(n,[...e,String(t)]):n},set(i,t,s){let n=Reflect.set(i,t,s);return c$1([...e,String(t)].join(".")),u.update(g=>g+1),n},deleteProperty(i,t){let s=Reflect.deleteProperty(i,t);return c$1([...e,String(t)].join(".")),u.update(n=>n+1),s}})}return y(a)}function N(o){return o.$raw??o}function D(o){if(o===null||typeof o!="object")return false;try{return o[p]!==void 0}catch{return false}}export{h as a,N as b,D as c};//# sourceMappingURL=chunk-YG76TVFL.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-YG76TVFL.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/deep-signal.ts"],"names":["SIGNAL_KEY","RAW_KEY","deepSignal","initialValue","version","signal","raw","pathSignals","getPathSignal","path","s","batchedNotify","notifyPath","v","batchNotify","fn","createProxy","target","obj","prop","receiver","value","currentPath","arrPath","args","result","toRaw","proxy","isDeepSignal"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/deep-signal.ts"],"names":["SIGNAL_KEY","RAW_KEY","deepSignal","initialValue","version","signal","raw","pathSignals","getPathSignal","path","s","batchedNotify","notifyPath","v","batchNotify","fn","createProxy","target","obj","prop","receiver","value","currentPath","arrPath","args","result","toRaw","proxy","isDeepSignal"],"mappings":"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","file":"chunk-YG76TVFL.js","sourcesContent":["/**\n * Deep reactive signals.\n *\n * Unlike regular signals that are shallow, deepSignal() tracks\n * nested property access and triggers updates when any nested\n * property changes.\n *\n * ```ts\n * const state = deepSignal({ user: { name: 'Alice', age: 30 }, items: [1, 2, 3] });\n * state.user.name; // 'Alice' (tracked)\n * state.user.name = 'Bob'; // triggers reactivity\n * state.items.push(4); // triggers reactivity\n * ```\n */\n\nimport { signal, computed } from './signals.js';\nimport { batch } from './scheduler.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport type DeepSignal<T> = T extends object\n ? { [K in keyof T]: DeepSignal<T[K]> } & { readonly $raw: T; readonly $signal: () => T }\n : T;\n\n// =========================================================================\n// deepSignal()\n// =========================================================================\n\nconst SIGNAL_KEY = Symbol('deepSignal');\nconst RAW_KEY = Symbol('deepRaw');\n\n/**\n * Create a deeply reactive signal. Nested property access is tracked,\n * and setting any nested property triggers updates.\n *\n * ```ts\n * const state = deepSignal({\n * user: { name: 'Alice', age: 30 },\n * todos: [{ text: 'Buy milk', done: false }],\n * });\n *\n * effect(() => {\n * console.log(state.user.name); // re-runs when name changes\n * });\n *\n * state.user.name = 'Bob'; // triggers the effect above\n * ```\n */\nexport function deepSignal<T extends object>(initialValue: T): DeepSignal<T> {\n const version = signal(0); // root-level signal for $signal compatibility\n const raw = JSON.parse(JSON.stringify(initialValue));\n\n // Per-path signals for fine-grained tracking\n const pathSignals = new Map<string, ReturnType<typeof signal<number>>>();\n\n function getPathSignal(path: string): ReturnType<typeof signal<number>> {\n let s = pathSignals.get(path);\n if (!s) {\n s = signal(0);\n pathSignals.set(path, s);\n }\n return s;\n }\n\n let batchedNotify = false;\n function notifyPath(path: string): void {\n if (batchedNotify) return;\n // Only notify the exact path that changed — not ancestors\n const s = pathSignals.get(path);\n if (s) s.update(v => v + 1);\n }\n function batchNotify(fn: () => unknown, path: string): unknown {\n batchedNotify = true;\n try {\n return fn();\n } finally {\n batchedNotify = false;\n notifyPath(path);\n }\n }\n\n function createProxy<O extends object>(target: O, path: string[] = []): DeepSignal<O> {\n return new Proxy(target, {\n get(obj, prop, receiver) {\n // Special properties\n if (prop === '$raw') return JSON.parse(JSON.stringify(raw));\n if (prop === '$signal') return () => { version(); return JSON.parse(JSON.stringify(raw)); };\n if (prop === SIGNAL_KEY) return version;\n if (prop === RAW_KEY) return raw;\n\n const value = Reflect.get(obj, prop, receiver);\n\n // Track read — use per-path signal for fine-grained reactivity\n const currentPath = [...path, String(prop)].join('.');\n getPathSignal(currentPath)();\n\n // Batch array mutation methods so they fire only one notification\n if (Array.isArray(obj) && typeof value === 'function') {\n const mutators = new Set(['push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse', 'fill', 'copyWithin']);\n if (mutators.has(String(prop))) {\n const arrPath = path.join('.') || '__root';\n return (...args: unknown[]) => batchNotify(() => value.apply(obj, args), arrPath);\n }\n }\n\n // Wrap nested objects in proxies\n if (value !== null && typeof value === 'object') {\n return createProxy(value, [...path, String(prop)]);\n }\n\n return value;\n },\n\n set(obj, prop, value) {\n const result = Reflect.set(obj, prop, value);\n notifyPath([...path, String(prop)].join('.'));\n version.update(v => v + 1); // for $signal users only\n return result;\n },\n\n deleteProperty(obj, prop) {\n const result = Reflect.deleteProperty(obj, prop);\n notifyPath([...path, String(prop)].join('.'));\n version.update(v => v + 1); // for $signal users only\n return result;\n },\n }) as DeepSignal<O>;\n }\n\n // Wrap arrays to track mutation methods\n if (Array.isArray(raw)) {\n const arrayProxy = createProxy(raw);\n return arrayProxy as DeepSignal<T>;\n }\n\n return createProxy(raw);\n}\n\n/**\n * Get the raw (unwrapped) value from a deep signal.\n */\nexport function toRaw<T>(proxy: DeepSignal<T>): T {\n return (proxy as any).$raw ?? proxy;\n}\n\n/**\n * Check if a value is a deep signal proxy.\n */\nexport function isDeepSignal(value: unknown): boolean {\n if (value === null || typeof value !== 'object') return false;\n try {\n return (value as any)[SIGNAL_KEY] !== undefined;\n } catch {\n return false;\n }\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
'use strict';var chunkHL2VGVJT_cjs=require('./chunk-HL2VGVJT.cjs');function w(e,t,u={}){let{immediate:x=false,once:O=false,debounce:i,deep:l=false}=u,T=Array.isArray(e),s=T?e:[e],o=s.map(()=>{}),h=true,c=null,f=false,y=null,b=()=>{f=true,c&&clearTimeout(c),y?.();};y=chunkHL2VGVJT_cjs.e(()=>{let n=s.map(r=>r());if(h){h=false,o=l?n.map(k):[...n],x&&m(n,s.map(()=>{}));return}if(!(l?n.some((r,p)=>!S(r,o[p])):n.some((r,p)=>!Object.is(r,o[p]))))return;let a=[...o];o=l?n.map(k):[...n],m(n,a);});function m(n,d){if(f)return;let a=()=>{O&&(f=true,queueMicrotask(b)),T?t(n,d):t(n[0],d[0]);};i&&i>0?(c&&clearTimeout(c),c=setTimeout(a,i)):a();}return b}function v(e,t){return w(e,t,{once:true})}function g(e,t,u){return w(e,t,{debounce:u})}function k(e){if(e===null||typeof e!="object")return e;try{return JSON.parse(JSON.stringify(e))}catch{return e}}function S(e,t){if(Object.is(e,t))return true;if(e===null||t===null||typeof e!="object"||typeof t!="object")return false;try{return JSON.stringify(e)===JSON.stringify(t)}catch{return false}}exports.a=w;exports.b=v;exports.c=g;//# sourceMappingURL=chunk-YQQDRDJ7.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-YQQDRDJ7.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/watch.ts"],"names":["watch","source","callback","options","immediate","once","debounceMs","deep","isMulti","sources","oldValues","isFirst","debounceTimer","disposed","disposeEffect","dispose","effect","newValues","s","deepClone","fireCallback","v","i","deepEqual","prevValues","newVals","oldVals","doCall","watchOnce","watchDebounced","ms","value","a","b"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/watch.ts"],"names":["watch","source","callback","options","immediate","once","debounceMs","deep","isMulti","sources","oldValues","isFirst","debounceTimer","disposed","disposeEffect","dispose","effect","newValues","s","deepClone","fireCallback","v","i","deepEqual","prevValues","newVals","oldVals","doCall","watchOnce","watchDebounced","ms","value","a","b"],"mappings":"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","file":"chunk-YQQDRDJ7.cjs","sourcesContent":["/**\n * watch() — react to signal changes with old/new values.\n *\n * Unlike effect() which just re-runs, watch() gives you the previous\n * and current value so you can react to *what changed*.\n *\n * ```ts\n * const count = signal(0);\n * watch(count, (newVal, oldVal) => {\n * console.log(`Changed from ${oldVal} to ${newVal}`);\n * });\n *\n * // With options:\n * watch(count, callback, { immediate: true, once: true });\n *\n * // Multiple sources:\n * watch([count, name], ([newCount, newName], [oldCount, oldName]) => { ... });\n * ```\n */\n\nimport { effect } from './signals.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface WatchOptions {\n /** Run callback immediately with current value (default: false) */\n immediate?: boolean;\n /** Only fire once, then auto-dispose (default: false) */\n once?: boolean;\n /** Debounce callback in ms */\n debounce?: number;\n /** Deep comparison for objects (default: false) */\n deep?: boolean;\n}\n\nexport type WatchSource<T> = () => T;\nexport type WatchCallback<T> = (newValue: T, oldValue: T | undefined) => void;\nexport type WatchArrayCallback<T extends unknown[]> = (newValues: T, oldValues: (T[number] | undefined)[]) => void;\n\n// =========================================================================\n// watch() — single source\n// =========================================================================\n\n/**\n * Watch a reactive source and call back with old + new values.\n *\n * ```ts\n * const dispose = watch(count, (newVal, oldVal) => {\n * analytics.track('count_changed', { from: oldVal, to: newVal });\n * });\n * ```\n */\nexport function watch<T>(\n source: WatchSource<T>,\n callback: WatchCallback<T>,\n options?: WatchOptions,\n): () => void;\n\n/**\n * Watch multiple sources.\n */\nexport function watch<T extends unknown[]>(\n sources: { [K in keyof T]: WatchSource<T[K]> },\n callback: WatchArrayCallback<T>,\n options?: WatchOptions,\n): () => void;\n\nexport function watch(\n source: WatchSource<any> | WatchSource<any>[],\n callback: any,\n options: WatchOptions = {},\n): () => void {\n const { immediate = false, once = false, debounce: debounceMs, deep = false } = options;\n\n const isMulti = Array.isArray(source);\n const sources = isMulti ? source : [source];\n\n let oldValues: any[] = sources.map(() => undefined);\n let isFirst = true;\n let debounceTimer: ReturnType<typeof setTimeout> | null = null;\n let disposed = false;\n let disposeEffect: (() => void) | null = null;\n\n const dispose = () => {\n disposed = true;\n if (debounceTimer) clearTimeout(debounceTimer);\n disposeEffect?.();\n };\n\n disposeEffect = effect(() => {\n // Read all sources to establish tracking\n const newValues = sources.map((s) => s());\n\n if (isFirst) {\n isFirst = false;\n oldValues = deep ? newValues.map(deepClone) : [...newValues];\n\n if (immediate) {\n fireCallback(newValues, sources.map(() => undefined));\n }\n return;\n }\n\n // Check if anything actually changed\n const changed = deep\n ? newValues.some((v, i) => !deepEqual(v, oldValues[i]))\n : newValues.some((v, i) => !Object.is(v, oldValues[i]));\n\n if (!changed) return;\n\n const prevValues = [...oldValues];\n oldValues = deep ? newValues.map(deepClone) : [...newValues];\n\n fireCallback(newValues, prevValues);\n });\n\n function fireCallback(newVals: any[], oldVals: any[]): void {\n if (disposed) return;\n\n const doCall = () => {\n if (once) {\n // Dispose BEFORE calling callback so any signal writes in the\n // callback don't re-trigger this watcher\n disposed = true;\n queueMicrotask(dispose);\n }\n\n if (isMulti) {\n callback(newVals, oldVals);\n } else {\n callback(newVals[0], oldVals[0]);\n }\n };\n\n if (debounceMs && debounceMs > 0) {\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(doCall, debounceMs);\n } else {\n doCall();\n }\n }\n\n return dispose;\n}\n\n// =========================================================================\n// watchOnce — convenience\n// =========================================================================\n\n/**\n * Watch a source once, then auto-dispose.\n *\n * ```ts\n * watchOnce(isReady, (ready) => {\n * if (ready) initApp();\n * });\n * ```\n */\nexport function watchOnce<T>(\n source: WatchSource<T>,\n callback: WatchCallback<T>,\n): () => void {\n return watch(source, callback, { once: true });\n}\n\n// =========================================================================\n// watchDebounced — convenience\n// =========================================================================\n\n/**\n * Watch with built-in debounce.\n *\n * ```ts\n * watchDebounced(searchInput, (query) => {\n * fetchResults(query);\n * }, 300);\n * ```\n */\nexport function watchDebounced<T>(\n source: WatchSource<T>,\n callback: WatchCallback<T>,\n ms: number,\n): () => void {\n return watch(source, callback, { debounce: ms });\n}\n\n// =========================================================================\n// Helpers\n// =========================================================================\n\nfunction deepClone<T>(value: T): T {\n if (value === null || typeof value !== 'object') return value;\n try {\n return JSON.parse(JSON.stringify(value));\n } catch {\n return value;\n }\n}\n\nfunction deepEqual(a: unknown, b: unknown): boolean {\n if (Object.is(a, b)) return true;\n if (a === null || b === null || typeof a !== 'object' || typeof b !== 'object') return false;\n try {\n return JSON.stringify(a) === JSON.stringify(b);\n } catch {\n return false;\n }\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
'use strict';var chunkHL2VGVJT_cjs=require('./chunk-HL2VGVJT.cjs');function v(i){return i}function E(...i){let d={},e=[];for(let n of i)typeof n=="function"?e.push(n):typeof n=="object"&&n!==null&&(d=n);let{label:l="inspect",level:m="log",logger:c,when:u}=d,s={dispose:null,get values(){return e.map(n=>n())},get value(){return e.length===1?e[0]():e.map(n=>n())},label:l,sources:e.length};return s.dispose=chunkHL2VGVJT_cjs.e(()=>{if(u&&!u())return;let n=e.map(r=>r());c?c(l,...n):console[m](`[${l}]`,...n);}),s}function b(i,d={}){let{method:e="POST",headers:l={},onSuccess:m,onError:c,fetch:u=globalThis.fetch.bind(globalThis)}=d,s=chunkHL2VGVJT_cjs.c(false),n=chunkHL2VGVJT_cjs.c(null),r=chunkHL2VGVJT_cjs.c(null);async function f(a){s.set(true),r.set(null);try{let o=await u(i,{method:e,headers:{"Content-Type":"application/json",...l},body:JSON.stringify(a)});if(!o.ok)throw new Error(`Form action failed: ${o.status}`);let t=await o.json();return n.set(t),s.set(!1),m?.(t),t}catch(o){let t=o instanceof Error?o:new Error(String(o));throw r.set(t),s.set(false),c?.(t),t}}return {url:i,method:e,submitting:()=>s(),result:()=>n(),error:()=>r(),handle(a){return o=>{o.preventDefault();let t=o.target,p=new FormData(t),h={...a};p.forEach((T,y)=>{h[y]=T;}),f(h);}},submit:f}}function k(i={}){if(typeof window>"u")return ()=>{};let{keyPrefix:d="akash-snapshot",capture:e=["scroll","forms"]}=i;function l(){let n={scrollX:window.scrollX,scrollY:window.scrollY,forms:{},timestamp:Date.now()};return e.includes("forms")&&document.querySelectorAll("form[id]").forEach(r=>{let f=r,a={};new FormData(f).forEach((o,t)=>{a[t]=String(o);}),n.forms[f.id]=a;}),n}function m(n){if(e.includes("scroll")&&requestAnimationFrame(()=>{window.scrollTo(n.scrollX,n.scrollY);}),e.includes("forms"))for(let[r,f]of Object.entries(n.forms)){let a=document.getElementById(r);if(a)for(let[o,t]of Object.entries(f)){let p=a.elements.namedItem(o);p&&(p.value=t);}}}let c=()=>`${d}-${window.location.pathname}`;function u(){try{let n=l();sessionStorage.setItem(c(),JSON.stringify(n));}catch{}}function s(){try{let n=sessionStorage.getItem(c());if(n){let r=JSON.parse(n);Date.now()-r.timestamp<1800*1e3&&m(r);}}catch{}}return window.addEventListener("beforeunload",u),window.addEventListener("popstate",()=>{requestAnimationFrame(s);}),performance.getEntriesByType("navigation")[0]?.type==="back_forward"&&requestAnimationFrame(s),()=>{window.removeEventListener("beforeunload",u);}}exports.a=v;exports.b=E;exports.c=b;exports.d=k;//# sourceMappingURL=chunk-ZGE46DPV.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-ZGE46DPV.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/snippets.ts"],"names":["defineSnippet","render","inspect","args","options","sources","arg","label","level","logger","when","result","s","effect","values","defineFormAction","url","method","headers","onSuccess","onError","customFetch","submitting","signal","error","submit","data","response","res","err","e","extraData","form","formData","value","key","enableSnapshots","config","keyPrefix","capture","captureSnapshot","snapshot","formEl","restoreSnapshot","formId","input","saveKey","save","restore","raw"],"mappings":"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","file":"chunk-3XREYIJH.cjs","sourcesContent":["/**\n * Snippets, $inspect, form actions, and navigation snapshots.\n */\n\nimport { signal, effect } from './signals.js';\nimport type { AkashNode } from './types.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// Snippets — reusable template fragments\n// =========================================================================\n\nexport type Snippet<TArgs extends unknown[] = []> = (...args: TArgs) => AkashNode;\n\n/**\n * Define a reusable template snippet.\n *\n * ```ts\n * const UserBadge = defineSnippet((name: string, role: string) => {\n * const el = document.createElement('span');\n * el.textContent = `${name} (${role})`;\n * el.className = 'badge';\n * return el;\n * });\n *\n * // Reuse anywhere:\n * container.appendChild(nodeToDOM(UserBadge('Alice', 'admin')));\n * container.appendChild(nodeToDOM(UserBadge('Bob', 'user')));\n * ```\n */\nexport function defineSnippet<TArgs extends unknown[]>(\n render: (...args: TArgs) => AkashNode,\n): Snippet<TArgs> {\n return render;\n}\n\n// =========================================================================\n// $inspect — debug reactive values\n// =========================================================================\n\nexport interface InspectOptions {\n /** Label prefix for console output */\n label?: string;\n /** Log level (default: 'log') */\n level?: 'log' | 'warn' | 'debug' | 'trace';\n /** Custom logger */\n logger?: (label: string, ...values: unknown[]) => void;\n /** Only log when a condition is true */\n when?: () => boolean;\n}\n\n/**\n * Debug helper — logs when reactive values change.\n *\n * ```ts\n * const count = signal(0);\n * const name = signal('Alice');\n *\n * inspect(count, name); // logs: [inspect] 0, 'Alice'\n * count.set(1); // logs: [inspect] 1, 'Alice'\n *\n * // With label:\n * inspect(count, { label: 'counter' });\n * // logs: [counter] 1\n * ```\n */\nexport function inspect(\n ...args: Array<(() => unknown) | InspectOptions>\n): () => void {\n let options: InspectOptions = {};\n const sources: Array<() => unknown> = [];\n\n for (const arg of args) {\n if (typeof arg === 'function') {\n sources.push(arg);\n } else if (typeof arg === 'object' && arg !== null) {\n options = arg as InspectOptions;\n }\n }\n\n const {\n label = 'inspect',\n level = 'log',\n logger,\n when,\n } = options;\n\n const result = {\n dispose: null as unknown as () => void,\n get values() { return sources.map(s => s()); },\n get value() { return sources.length === 1 ? sources[0]() : sources.map(s => s()); },\n label,\n sources: sources.length,\n };\n\n result.dispose = effect(() => {\n if (when && !when()) return;\n\n const values = sources.map((s) => s());\n\n if (logger) {\n logger(label, ...values);\n } else {\n (console as any)[level](`[${label}]`, ...values);\n }\n });\n\n return result as any;\n}\n\n// =========================================================================\n// Form actions — server-side form handling\n// =========================================================================\n\nexport interface FormAction<T = unknown> {\n /** The action URL */\n url: string;\n /** Submit method */\n method: 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n /** Whether a submission is in progress */\n submitting: ReadonlySignal<boolean>;\n /** The last result */\n result: ReadonlySignal<T | null>;\n /** The last error */\n error: ReadonlySignal<Error | null>;\n /** Create an onSubmit handler for a <form> */\n handle(formData?: Record<string, unknown>): (e: Event) => void;\n /** Submit programmatically */\n submit(data: Record<string, unknown>): Promise<T>;\n}\n\n/**\n * Define a server-side form action with progressive enhancement.\n *\n * ```ts\n * const createPost = defineFormAction<Post>('/api/posts', {\n * method: 'POST',\n * onSuccess: (post) => navigate(`/posts/${post.id}`),\n * onError: (err) => toast.error(err.message),\n * });\n *\n * // In template:\n * <form onSubmit={createPost.handle()}>\n * <input name=\"title\" />\n * <button disabled={createPost.submitting()}>Create</button>\n * </form>\n * ```\n */\nexport function defineFormAction<T = unknown>(\n url: string,\n options: {\n method?: 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n headers?: Record<string, string>;\n onSuccess?: (result: T) => void;\n onError?: (error: Error) => void;\n fetch?: typeof globalThis.fetch;\n } = {},\n): FormAction<T> {\n const {\n method = 'POST',\n headers = {},\n onSuccess,\n onError,\n fetch: customFetch = globalThis.fetch.bind(globalThis),\n } = options;\n\n const submitting = signal(false);\n const result = signal<T | null>(null);\n const error = signal<Error | null>(null);\n\n async function submit(data: Record<string, unknown>): Promise<T> {\n submitting.set(true);\n error.set(null);\n\n try {\n const response = await customFetch(url, {\n method,\n headers: { 'Content-Type': 'application/json', ...headers },\n body: JSON.stringify(data),\n });\n\n if (!response.ok) {\n throw new Error(`Form action failed: ${response.status}`);\n }\n\n const res = await response.json() as T;\n result.set(res);\n submitting.set(false);\n onSuccess?.(res);\n return res;\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n error.set(e);\n submitting.set(false);\n onError?.(e);\n throw e;\n }\n }\n\n return {\n url,\n method,\n submitting: () => submitting(),\n result: () => result(),\n error: () => error(),\n handle(extraData?: Record<string, unknown>) {\n return (e: Event) => {\n e.preventDefault();\n const form = e.target as HTMLFormElement;\n const formData = new FormData(form);\n const data: Record<string, unknown> = { ...extraData };\n formData.forEach((value, key) => { data[key] = value; });\n submit(data);\n };\n },\n submit,\n };\n}\n\n// =========================================================================\n// Navigation snapshots — preserve scroll & form state\n// =========================================================================\n\nexport interface SnapshotConfig {\n /** Storage key prefix (default: 'akash-snapshot') */\n keyPrefix?: string;\n /** What to capture */\n capture?: ('scroll' | 'forms')[];\n}\n\ninterface PageSnapshot {\n scrollX: number;\n scrollY: number;\n forms: Record<string, Record<string, string>>;\n timestamp: number;\n}\n\n/**\n * Enable navigation snapshots — preserves scroll position and form\n * state when navigating with back/forward.\n *\n * ```ts\n * enableSnapshots();\n * // Now back/forward restores scroll position and form inputs\n * ```\n */\nexport function enableSnapshots(config: SnapshotConfig = {}): () => void {\n if (typeof window === 'undefined') return () => {};\n\n const { keyPrefix = 'akash-snapshot', capture = ['scroll', 'forms'] } = config;\n\n function captureSnapshot(): PageSnapshot {\n const snapshot: PageSnapshot = {\n scrollX: window.scrollX,\n scrollY: window.scrollY,\n forms: {},\n timestamp: Date.now(),\n };\n\n if (capture.includes('forms')) {\n document.querySelectorAll('form[id]').forEach((form) => {\n const formEl = form as HTMLFormElement;\n const data: Record<string, string> = {};\n new FormData(formEl).forEach((value, key) => {\n data[key] = String(value);\n });\n snapshot.forms[formEl.id] = data;\n });\n }\n\n return snapshot;\n }\n\n function restoreSnapshot(snapshot: PageSnapshot): void {\n if (capture.includes('scroll')) {\n requestAnimationFrame(() => {\n window.scrollTo(snapshot.scrollX, snapshot.scrollY);\n });\n }\n\n if (capture.includes('forms')) {\n for (const [formId, data] of Object.entries(snapshot.forms)) {\n const form = document.getElementById(formId) as HTMLFormElement | null;\n if (!form) continue;\n for (const [key, value] of Object.entries(data)) {\n const input = form.elements.namedItem(key) as HTMLInputElement | null;\n if (input) input.value = value;\n }\n }\n }\n }\n\n // Save snapshot before navigation\n const saveKey = () => `${keyPrefix}-${window.location.pathname}`;\n\n function save(): void {\n try {\n const snapshot = captureSnapshot();\n sessionStorage.setItem(saveKey(), JSON.stringify(snapshot));\n } catch { /* storage full */ }\n }\n\n function restore(): void {\n try {\n const raw = sessionStorage.getItem(saveKey());\n if (raw) {\n const snapshot = JSON.parse(raw) as PageSnapshot;\n // Only restore if recent (within 30 minutes)\n if (Date.now() - snapshot.timestamp < 30 * 60 * 1000) {\n restoreSnapshot(snapshot);\n }\n }\n } catch { /* */ }\n }\n\n // Listen for navigation\n window.addEventListener('beforeunload', save);\n window.addEventListener('popstate', () => {\n requestAnimationFrame(restore);\n });\n\n // Restore on initial load if coming from back/forward\n if ((performance.getEntriesByType('navigation')[0] as PerformanceNavigationTiming | undefined)?.type === 'back_forward') {\n requestAnimationFrame(restore);\n }\n\n return () => {\n window.removeEventListener('beforeunload', save);\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/snippets.ts"],"names":["defineSnippet","render","inspect","args","options","sources","arg","label","level","logger","when","result","s","effect","values","defineFormAction","url","method","headers","onSuccess","onError","customFetch","submitting","signal","error","submit","data","response","res","err","e","extraData","form","formData","value","key","enableSnapshots","config","keyPrefix","capture","captureSnapshot","snapshot","formEl","restoreSnapshot","formId","input","saveKey","save","restore","raw"],"mappings":"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","file":"chunk-ZGE46DPV.cjs","sourcesContent":["/**\n * Snippets, $inspect, form actions, and navigation snapshots.\n */\n\nimport { signal, effect } from './signals.js';\nimport type { AkashNode } from './types.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// Snippets — reusable template fragments\n// =========================================================================\n\nexport type Snippet<TArgs extends unknown[] = []> = (...args: TArgs) => AkashNode;\n\n/**\n * Define a reusable template snippet.\n *\n * ```ts\n * const UserBadge = defineSnippet((name: string, role: string) => {\n * const el = document.createElement('span');\n * el.textContent = `${name} (${role})`;\n * el.className = 'badge';\n * return el;\n * });\n *\n * // Reuse anywhere:\n * container.appendChild(nodeToDOM(UserBadge('Alice', 'admin')));\n * container.appendChild(nodeToDOM(UserBadge('Bob', 'user')));\n * ```\n */\nexport function defineSnippet<TArgs extends unknown[]>(\n render: (...args: TArgs) => AkashNode,\n): Snippet<TArgs> {\n return render;\n}\n\n// =========================================================================\n// $inspect — debug reactive values\n// =========================================================================\n\nexport interface InspectOptions {\n /** Label prefix for console output */\n label?: string;\n /** Log level (default: 'log') */\n level?: 'log' | 'warn' | 'debug' | 'trace';\n /** Custom logger */\n logger?: (label: string, ...values: unknown[]) => void;\n /** Only log when a condition is true */\n when?: () => boolean;\n}\n\n/**\n * Debug helper — logs when reactive values change.\n *\n * ```ts\n * const count = signal(0);\n * const name = signal('Alice');\n *\n * inspect(count, name); // logs: [inspect] 0, 'Alice'\n * count.set(1); // logs: [inspect] 1, 'Alice'\n *\n * // With label:\n * inspect(count, { label: 'counter' });\n * // logs: [counter] 1\n * ```\n */\nexport function inspect(\n ...args: Array<(() => unknown) | InspectOptions>\n): () => void {\n let options: InspectOptions = {};\n const sources: Array<() => unknown> = [];\n\n for (const arg of args) {\n if (typeof arg === 'function') {\n sources.push(arg);\n } else if (typeof arg === 'object' && arg !== null) {\n options = arg as InspectOptions;\n }\n }\n\n const {\n label = 'inspect',\n level = 'log',\n logger,\n when,\n } = options;\n\n const result = {\n dispose: null as unknown as () => void,\n get values() { return sources.map(s => s()); },\n get value() { return sources.length === 1 ? sources[0]() : sources.map(s => s()); },\n label,\n sources: sources.length,\n };\n\n result.dispose = effect(() => {\n if (when && !when()) return;\n\n const values = sources.map((s) => s());\n\n if (logger) {\n logger(label, ...values);\n } else {\n (console as any)[level](`[${label}]`, ...values);\n }\n });\n\n return result as any;\n}\n\n// =========================================================================\n// Form actions — server-side form handling\n// =========================================================================\n\nexport interface FormAction<T = unknown> {\n /** The action URL */\n url: string;\n /** Submit method */\n method: 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n /** Whether a submission is in progress */\n submitting: ReadonlySignal<boolean>;\n /** The last result */\n result: ReadonlySignal<T | null>;\n /** The last error */\n error: ReadonlySignal<Error | null>;\n /** Create an onSubmit handler for a <form> */\n handle(formData?: Record<string, unknown>): (e: Event) => void;\n /** Submit programmatically */\n submit(data: Record<string, unknown>): Promise<T>;\n}\n\n/**\n * Define a server-side form action with progressive enhancement.\n *\n * ```ts\n * const createPost = defineFormAction<Post>('/api/posts', {\n * method: 'POST',\n * onSuccess: (post) => navigate(`/posts/${post.id}`),\n * onError: (err) => toast.error(err.message),\n * });\n *\n * // In template:\n * <form onSubmit={createPost.handle()}>\n * <input name=\"title\" />\n * <button disabled={createPost.submitting()}>Create</button>\n * </form>\n * ```\n */\nexport function defineFormAction<T = unknown>(\n url: string,\n options: {\n method?: 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n headers?: Record<string, string>;\n onSuccess?: (result: T) => void;\n onError?: (error: Error) => void;\n fetch?: typeof globalThis.fetch;\n } = {},\n): FormAction<T> {\n const {\n method = 'POST',\n headers = {},\n onSuccess,\n onError,\n fetch: customFetch = globalThis.fetch.bind(globalThis),\n } = options;\n\n const submitting = signal(false);\n const result = signal<T | null>(null);\n const error = signal<Error | null>(null);\n\n async function submit(data: Record<string, unknown>): Promise<T> {\n submitting.set(true);\n error.set(null);\n\n try {\n const response = await customFetch(url, {\n method,\n headers: { 'Content-Type': 'application/json', ...headers },\n body: JSON.stringify(data),\n });\n\n if (!response.ok) {\n throw new Error(`Form action failed: ${response.status}`);\n }\n\n const res = await response.json() as T;\n result.set(res);\n submitting.set(false);\n onSuccess?.(res);\n return res;\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n error.set(e);\n submitting.set(false);\n onError?.(e);\n throw e;\n }\n }\n\n return {\n url,\n method,\n submitting: () => submitting(),\n result: () => result(),\n error: () => error(),\n handle(extraData?: Record<string, unknown>) {\n return (e: Event) => {\n e.preventDefault();\n const form = e.target as HTMLFormElement;\n const formData = new FormData(form);\n const data: Record<string, unknown> = { ...extraData };\n formData.forEach((value, key) => { data[key] = value; });\n submit(data);\n };\n },\n submit,\n };\n}\n\n// =========================================================================\n// Navigation snapshots — preserve scroll & form state\n// =========================================================================\n\nexport interface SnapshotConfig {\n /** Storage key prefix (default: 'akash-snapshot') */\n keyPrefix?: string;\n /** What to capture */\n capture?: ('scroll' | 'forms')[];\n}\n\ninterface PageSnapshot {\n scrollX: number;\n scrollY: number;\n forms: Record<string, Record<string, string>>;\n timestamp: number;\n}\n\n/**\n * Enable navigation snapshots — preserves scroll position and form\n * state when navigating with back/forward.\n *\n * ```ts\n * enableSnapshots();\n * // Now back/forward restores scroll position and form inputs\n * ```\n */\nexport function enableSnapshots(config: SnapshotConfig = {}): () => void {\n if (typeof window === 'undefined') return () => {};\n\n const { keyPrefix = 'akash-snapshot', capture = ['scroll', 'forms'] } = config;\n\n function captureSnapshot(): PageSnapshot {\n const snapshot: PageSnapshot = {\n scrollX: window.scrollX,\n scrollY: window.scrollY,\n forms: {},\n timestamp: Date.now(),\n };\n\n if (capture.includes('forms')) {\n document.querySelectorAll('form[id]').forEach((form) => {\n const formEl = form as HTMLFormElement;\n const data: Record<string, string> = {};\n new FormData(formEl).forEach((value, key) => {\n data[key] = String(value);\n });\n snapshot.forms[formEl.id] = data;\n });\n }\n\n return snapshot;\n }\n\n function restoreSnapshot(snapshot: PageSnapshot): void {\n if (capture.includes('scroll')) {\n requestAnimationFrame(() => {\n window.scrollTo(snapshot.scrollX, snapshot.scrollY);\n });\n }\n\n if (capture.includes('forms')) {\n for (const [formId, data] of Object.entries(snapshot.forms)) {\n const form = document.getElementById(formId) as HTMLFormElement | null;\n if (!form) continue;\n for (const [key, value] of Object.entries(data)) {\n const input = form.elements.namedItem(key) as HTMLInputElement | null;\n if (input) input.value = value;\n }\n }\n }\n }\n\n // Save snapshot before navigation\n const saveKey = () => `${keyPrefix}-${window.location.pathname}`;\n\n function save(): void {\n try {\n const snapshot = captureSnapshot();\n sessionStorage.setItem(saveKey(), JSON.stringify(snapshot));\n } catch { /* storage full */ }\n }\n\n function restore(): void {\n try {\n const raw = sessionStorage.getItem(saveKey());\n if (raw) {\n const snapshot = JSON.parse(raw) as PageSnapshot;\n // Only restore if recent (within 30 minutes)\n if (Date.now() - snapshot.timestamp < 30 * 60 * 1000) {\n restoreSnapshot(snapshot);\n }\n }\n } catch { /* */ }\n }\n\n // Listen for navigation\n window.addEventListener('beforeunload', save);\n window.addEventListener('popstate', () => {\n requestAnimationFrame(restore);\n });\n\n // Restore on initial load if coming from back/forward\n if ((performance.getEntriesByType('navigation')[0] as PerformanceNavigationTiming | undefined)?.type === 'back_forward') {\n requestAnimationFrame(restore);\n }\n\n return () => {\n window.removeEventListener('beforeunload', save);\n };\n}\n"]}
|
package/dist/composables.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var chunk5JKXREA2_cjs=require('./chunk-5JKXREA2.cjs');require('./chunk-HL2VGVJT.cjs'),require('./chunk-XPLIEN2G.cjs');Object.defineProperty(exports,"useCounter",{enumerable:true,get:function(){return chunk5JKXREA2_cjs.e}});Object.defineProperty(exports,"useDebounce",{enumerable:true,get:function(){return chunk5JKXREA2_cjs.c}});Object.defineProperty(exports,"useInterval",{enumerable:true,get:function(){return chunk5JKXREA2_cjs.a}});Object.defineProperty(exports,"usePrevious",{enumerable:true,get:function(){return chunk5JKXREA2_cjs.g}});Object.defineProperty(exports,"useThrottle",{enumerable:true,get:function(){return chunk5JKXREA2_cjs.d}});Object.defineProperty(exports,"useTimeout",{enumerable:true,get:function(){return chunk5JKXREA2_cjs.b}});Object.defineProperty(exports,"useToggle",{enumerable:true,get:function(){return chunk5JKXREA2_cjs.f}});//# sourceMappingURL=composables.cjs.map
|
|
2
2
|
//# sourceMappingURL=composables.cjs.map
|
package/dist/composables.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{e as useCounter,c as useDebounce,a as useInterval,g as usePrevious,d as useThrottle,b as useTimeout,f as useToggle}from'./chunk-
|
|
1
|
+
export{e as useCounter,c as useDebounce,a as useInterval,g as usePrevious,d as useThrottle,b as useTimeout,f as useToggle}from'./chunk-IDTJWCYW.js';import'./chunk-2UATNCKC.js';import'./chunk-U65WRXZC.js';//# sourceMappingURL=composables.js.map
|
|
2
2
|
//# sourceMappingURL=composables.js.map
|
package/dist/core.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var chunkLSD7DEMV_cjs=require('./chunk-LSD7DEMV.cjs'),chunkIQGSDFBI_cjs=require('./chunk-IQGSDFBI.cjs');require('./chunk-PPNEAFKE.cjs');var chunkHL2VGVJT_cjs=require('./chunk-HL2VGVJT.cjs');require('./chunk-XPLIEN2G.cjs');Object.defineProperty(exports,"For",{enumerable:true,get:function(){return chunkLSD7DEMV_cjs.k}});Object.defineProperty(exports,"Show",{enumerable:true,get:function(){return chunkLSD7DEMV_cjs.j}});Object.defineProperty(exports,"bindProperty",{enumerable:true,get:function(){return chunkLSD7DEMV_cjs.f}});Object.defineProperty(exports,"bindText",{enumerable:true,get:function(){return chunkLSD7DEMV_cjs.e}});Object.defineProperty(exports,"bindVisible",{enumerable:true,get:function(){return chunkLSD7DEMV_cjs.g}});Object.defineProperty(exports,"cloneTemplate",{enumerable:true,get:function(){return chunkLSD7DEMV_cjs.c}});Object.defineProperty(exports,"createElement",{enumerable:true,get:function(){return chunkLSD7DEMV_cjs.a}});Object.defineProperty(exports,"createText",{enumerable:true,get:function(){return chunkLSD7DEMV_cjs.b}});Object.defineProperty(exports,"defineComponent",{enumerable:true,get:function(){return chunkLSD7DEMV_cjs.s}});Object.defineProperty(exports,"insert",{enumerable:true,get:function(){return chunkLSD7DEMV_cjs.m}});Object.defineProperty(exports,"nodeToDOM",{enumerable:true,get:function(){return chunkLSD7DEMV_cjs.l}});Object.defineProperty(exports,"onError",{enumerable:true,get:function(){return chunkLSD7DEMV_cjs.q}});Object.defineProperty(exports,"onMount",{enumerable:true,get:function(){return chunkLSD7DEMV_cjs.o}});Object.defineProperty(exports,"onUnmount",{enumerable:true,get:function(){return chunkLSD7DEMV_cjs.p}});Object.defineProperty(exports,"ref",{enumerable:true,get:function(){return chunkLSD7DEMV_cjs.r}});Object.defineProperty(exports,"renderConditional",{enumerable:true,get:function(){return chunkLSD7DEMV_cjs.h}});Object.defineProperty(exports,"renderList",{enumerable:true,get:function(){return chunkLSD7DEMV_cjs.i}});Object.defineProperty(exports,"setProperty",{enumerable:true,get:function(){return chunkLSD7DEMV_cjs.d}});Object.defineProperty(exports,"createContext",{enumerable:true,get:function(){return chunkIQGSDFBI_cjs.e}});Object.defineProperty(exports,"inject",{enumerable:true,get:function(){return chunkIQGSDFBI_cjs.g}});Object.defineProperty(exports,"provide",{enumerable:true,get:function(){return chunkIQGSDFBI_cjs.f}});Object.defineProperty(exports,"batch",{enumerable:true,get:function(){return chunkHL2VGVJT_cjs.a}});Object.defineProperty(exports,"computed",{enumerable:true,get:function(){return chunkHL2VGVJT_cjs.d}});Object.defineProperty(exports,"effect",{enumerable:true,get:function(){return chunkHL2VGVJT_cjs.e}});Object.defineProperty(exports,"flushSync",{enumerable:true,get:function(){return chunkHL2VGVJT_cjs.b}});Object.defineProperty(exports,"signal",{enumerable:true,get:function(){return chunkHL2VGVJT_cjs.c}});Object.defineProperty(exports,"untrack",{enumerable:true,get:function(){return chunkHL2VGVJT_cjs.f}});//# sourceMappingURL=core.cjs.map
|
|
2
2
|
//# sourceMappingURL=core.cjs.map
|
package/dist/core.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{k as For,j as Show,f as bindProperty,e as bindText,g as bindVisible,c as cloneTemplate,a as createElement,b as createText,s as defineComponent,m as insert,l as nodeToDOM,q as onError,o as onMount,p as onUnmount,r as ref,h as renderConditional,i as renderList,d as setProperty}from'./chunk-
|
|
1
|
+
export{k as For,j as Show,f as bindProperty,e as bindText,g as bindVisible,c as cloneTemplate,a as createElement,b as createText,s as defineComponent,m as insert,l as nodeToDOM,q as onError,o as onMount,p as onUnmount,r as ref,h as renderConditional,i as renderList,d as setProperty}from'./chunk-CDZR6GWB.js';export{e as createContext,g as inject,f as provide}from'./chunk-VUMMC2P5.js';import'./chunk-AOFLE33X.js';export{a as batch,d as computed,e as effect,b as flushSync,c as signal,f as untrack}from'./chunk-2UATNCKC.js';import'./chunk-U65WRXZC.js';//# sourceMappingURL=core.js.map
|
|
2
2
|
//# sourceMappingURL=core.js.map
|
package/dist/data-table.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var chunkEXKQPZ5N_cjs=require('./chunk-EXKQPZ5N.cjs');require('./chunk-HL2VGVJT.cjs'),require('./chunk-XPLIEN2G.cjs');Object.defineProperty(exports,"createDataTable",{enumerable:true,get:function(){return chunkEXKQPZ5N_cjs.a}});//# sourceMappingURL=data-table.cjs.map
|
|
2
2
|
//# sourceMappingURL=data-table.cjs.map
|
package/dist/data-table.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{a as createDataTable}from'./chunk-
|
|
1
|
+
export{a as createDataTable}from'./chunk-PVIYD25D.js';import'./chunk-2UATNCKC.js';import'./chunk-U65WRXZC.js';//# sourceMappingURL=data-table.js.map
|
|
2
2
|
//# sourceMappingURL=data-table.js.map
|