{"version":3,"file":"signals.cjs","sources":["../../../src/signals/defineElement.ts","../../../src/signals/reactivity.ts"],"sourcesContent":["import type { CSSResultGroup, LitElement } from 'lit'\nimport { SignalWatcher } from '@lit-labs/signals'\nimport { isString, isSubclassOf } from '../utils/is'\nimport type {\n  DefinePropertyDeclaration,\n  FunctionComponentOptions,\n  SkipLastParam,\n  UnwrapProps,\n} from '../defineElement/defineElement'\nimport { defineElementWithOptions, defineFunctionalComponent } from '../defineElement/defineElement'\nimport type { ValidCustomElementName } from '../utils'\nimport type { ValidatedCustomElementName } from '../utils/ValidCustomElementName'\n\nexport * from '../defineElement/hooks'\n\nconst withSignals = (superClass: typeof LitElement) =>\n  isSubclassOf(superClass, SignalWatcher) ? superClass : SignalWatcher(superClass)\n\nexport function defineElement(\n  name: ValidCustomElementName,\n  render: () => unknown,\n  opts?: FunctionComponentOptions\n): typeof LitElement\nexport function defineElement<\n  Name extends ValidCustomElementName,\n  UseShadowRoot extends boolean,\n  Properties extends Record<string, DefinePropertyDeclaration>,\n  Styles extends UseShadowRoot extends true | undefined ? CSSResultGroup | undefined : undefined,\n  Parent extends typeof LitElement,\n  Instance extends InstanceType<Parent> & UnwrapProps<Properties>,\n  Render extends (this: Instance) => unknown,\n  Setup extends (this: Instance, comp?: Instance) => void | Render,\n>(options: {\n  name?: ValidatedCustomElementName<Name>\n  parent?: Parent\n  styles?: Styles\n  props?: Properties\n  register?: boolean\n  shadowRoot?: UseShadowRoot\n  setup?: Setup\n  render?: Render\n}): typeof LitElement\nexport function defineElement(\n  ...args:\n    | [name: ValidCustomElementName, render: () => unknown, opts?: FunctionComponentOptions]\n    | SkipLastParam<Parameters<typeof defineElementWithOptions>>\n) {\n  return isString(args[0])\n    ? defineFunctionalComponent(args[0], args[1] as () => unknown, args[2], withSignals)\n    : defineElementWithOptions(args[0], withSignals)\n}\n","import { Signal } from '@lit-labs/signals'\nimport { REACTIVE_OBJECT_SYMBOL } from '../symbols'\nimport { isObject } from '../utils/is'\n\ntype Reactive<T> = T extends object //\n  ? {\n      [K in keyof T]: T[K] extends Signal.State<infer V> //\n        ? V\n        : T[K] extends (...args: any[]) => unknown\n          ? T[K]\n          : T[K] extends object\n            ? Reactive<T[K]>\n            : T[K]\n    }\n  : T\n\n/**\n * Check if a value is a reactive proxy created by reactive().\n *\n * @typeParam T - The target object type.\n * @param target - The value to test.\n * @returns True if the value is a reactive object produced by reactive().\n */\nexport const isReactive = <T extends {}>(target: T): target is Reactive<never> =>\n  REACTIVE_OBJECT_SYMBOL in target && target[REACTIVE_OBJECT_SYMBOL] === REACTIVE_OBJECT_SYMBOL\n\n/**\n * Turn an object containing Effects into a reactive object.\n * @param target\n * @param deep - if true, recursively make all properties reactive\n */\nexport const reactive = <T extends {}>(target: T, deep = true): Reactive<T> => {\n  if (isReactive(target)) {\n    return target\n  }\n  return Object.defineProperties(\n    Object.create({}) as Reactive<T>,\n    Object.entries(target).reduce(\n      (result, [key, value]) => {\n        const k = key as keyof T\n        const props = Object.getOwnPropertyDescriptor(target, key)!\n        const isWritable = props.writable ?? true\n        const ref = Signal.isState(value)\n        let get: () => T[keyof T]\n        let set: (value: T[keyof T]) => void\n\n        if (ref) {\n          const state = value as Signal.State<T[keyof T]>\n          set = state.set.bind(state)\n          get = state.get.bind(state)\n        } else if (isObject(value)) {\n          set = (newValue) => (target[k] = newValue)\n          get = deep //\n            ? () => reactive(target[k] as {}, deep) as T[keyof T]\n            : () => target[k]\n        } else {\n          set = (newValue) => (target[k] = newValue)\n          get = () => target[k]\n        }\n\n        delete props.writable\n        delete props.value\n\n        result[key] = {\n          enumerable: props.enumerable ?? true,\n          get,\n          set: isWritable ? set : undefined,\n        }\n        return result\n      },\n      {\n        [REACTIVE_OBJECT_SYMBOL]: {\n          value: REACTIVE_OBJECT_SYMBOL,\n          enumerable: false,\n          writable: false,\n          configurable: false,\n        },\n      } as PropertyDescriptorMap\n    )\n  )\n}\n"],"names":["signals","defineElement$1","currentInstance","withSignals","superClass","isSubclassOf","SignalWatcher","defineElement","args","isString","defineFunctionalComponent","defineElementWithOptions","isReactive","target","REACTIVE_OBJECT_SYMBOL","reactive","deep","result","key","value","k","props","isWritable","ref","Signal","get","set","state","isObject","newValue"],"mappings":"aAeA,OAAA,eAAA,QAAA,OAAA,YAAA,CAAA,MAAA,QAAA,CAAA,EAAA,MAAAA,EAAA,QAAA,mBAAA,EAAAC,EAAA,QAAA,8BAAA,EAAAC,EAAA,QAAA,gCAAA,EAAMC,EAAeC,GACnBC,IAAaD,EAAYE,EAAAA,aAAa,EAAIF,EAAaE,EAAAA,cAAcF,CAAU,EA0B1E,SAASG,KACXC,EAGH,CACA,OAAOC,EAAAA,EAASD,EAAK,CAAC,CAAC,EACnBE,EAAAA,EAA0BF,EAAK,CAAC,EAAGA,EAAK,CAAC,EAAoBA,EAAK,CAAC,EAAGL,CAAW,EACjFQ,EAAAA,EAAyBH,EAAK,CAAC,EAAGL,CAAW,CACnD,CC3BO,MAAMS,EAA4BC,GACvCC,EAAAA,KAA0BD,GAAUA,EAAOC,EAAAA,CAAsB,IAAMA,EAAAA,EAO5DC,EAAW,CAAeF,EAAWG,EAAO,KACnDJ,EAAWC,CAAM,EACZA,EAEF,OAAO,iBACZ,OAAO,OAAO,EAAE,EAChB,OAAO,QAAQA,CAAM,EAAE,OACrB,CAACI,EAAQ,CAACC,EAAKC,CAAK,IAAM,CACxB,MAAMC,EAAIF,EACJG,EAAQ,OAAO,yBAAyBR,EAAQK,CAAG,EACnDI,EAAaD,EAAM,UAAY,GAC/BE,EAAMC,EAAAA,OAAO,QAAQL,CAAK,EAChC,IAAIM,EACAC,EAEJ,GAAIH,EAAK,CACP,MAAMI,EAAQR,EACdO,EAAMC,EAAM,IAAI,KAAKA,CAAK,EAC1BF,EAAME,EAAM,IAAI,KAAKA,CAAK,CAC5B,MAAWC,IAAST,CAAK,GACvBO,EAAOG,GAAchB,EAAOO,CAAC,EAAIS,EACjCJ,EAAMT,EACF,IAAMD,EAASF,EAAOO,CAAC,EAASJ,CAAI,EACpC,IAAMH,EAAOO,CAAC,IAElBM,EAAOG,GAAchB,EAAOO,CAAC,EAAIS,EACjCJ,EAAM,IAAMZ,EAAOO,CAAC,GAGtB,cAAOC,EAAM,SACb,OAAOA,EAAM,MAEbJ,EAAOC,CAAG,EAAI,CACZ,WAAYG,EAAM,YAAc,GAChC,IAAAI,EACA,IAAKH,EAAaI,EAAM,MAAA,EAEnBT,CACT,EACA,CACE,CAACH,GAAsB,EAAG,CACxB,MAAOA,EAAAA,EACP,WAAY,GACZ,SAAU,GACV,aAAc,EAAA,CAChB,CACF,CACF,EAEJ,QAAA,YAAAb,EAAA,EAAA,QAAA,eAAAA,EAAA,EAAA,QAAA,eAAAA,EAAA,EAAA,QAAA,gBAAAA,EAAA,EAAA,QAAA,eAAAA,EAAA,EAAA,QAAA,SAAAA,EAAA,EAAA,QAAA,UAAAA,EAAA,EAAA,QAAA,aAAAA,EAAA,EAAA,QAAA,UAAAA,EAAA,EAAA,QAAA,cAAAM,EAAA,QAAA,WAAAK,EAAA,QAAA,SAAAG"}