{"version":3,"file":"bound-component.cjs","names":["LitElement","GenericBinder","nothing"],"sources":["../../src/web-components/bound-component.ts"],"sourcesContent":["import { LitElement, nothing } from \"lit\";\nimport { GenericBinder } from \"@a2ui/web_core/v0_9\";\nimport type { ComponentApi, ComponentContext } from \"@a2ui/web_core/v0_9\";\nimport type { LitRenderable, LitRendererFn } from \"./types\";\n\nexport class CpkA2uiBoundComponent extends LitElement {\n  static properties = {\n    api: { attribute: false },\n    context: { attribute: false },\n    buildChild: { attribute: false },\n    renderFn: { attribute: false },\n    setupState: { attribute: false },\n  };\n\n  api?: ComponentApi;\n  context?: ComponentContext;\n  buildChild?: (id: string, basePath?: string) => LitRenderable;\n  renderFn?: LitRendererFn<any, any>;\n  setupState?: () => unknown;\n\n  private binder: GenericBinder<any> | null = null;\n  private binderContext: ComponentContext | null = null;\n  private propsSnapshot: Record<string, unknown> = {};\n  private stateInitialized = false;\n  private state: unknown;\n\n  protected createRenderRoot() {\n    return this;\n  }\n\n  connectedCallback(): void {\n    super.connectedCallback();\n    this.style.display = \"contents\";\n  }\n\n  disconnectedCallback(): void {\n    this.disposeBinder();\n    super.disconnectedCallback();\n  }\n\n  private disposeBinder(): void {\n    this.binder?.dispose();\n    this.binder = null;\n    this.binderContext = null;\n  }\n\n  private ensureBinder(): void {\n    if (!this.api || !this.context) return;\n    if (this.binder && this.binderContext === this.context) return;\n\n    this.disposeBinder();\n    this.binderContext = this.context;\n    this.binder = new GenericBinder(this.context, this.api.schema);\n    this.propsSnapshot = this.binder.snapshot ?? {};\n    this.binder.subscribe((props) => {\n      this.propsSnapshot = props ?? {};\n      this.requestUpdate();\n    });\n  }\n\n  private ensureState(): void {\n    if (this.stateInitialized) return;\n    this.stateInitialized = true;\n    this.state = this.setupState?.();\n  }\n\n  render() {\n    this.ensureBinder();\n    this.ensureState();\n    if (!this.renderFn || !this.context || !this.buildChild) return nothing;\n    return this.renderFn({\n      props: this.propsSnapshot,\n      buildChild: this.buildChild,\n      context: this.context,\n      state: this.state,\n      requestUpdate: () => this.requestUpdate(),\n    });\n  }\n}\n"],"mappings":";;;;AAKA,IAAa,wBAAb,cAA2CA,eAAW;;;gBAeR;uBACK;uBACA,EAAE;0BACxB;;;oBAjBP;GAClB,KAAK,EAAE,WAAW,OAAO;GACzB,SAAS,EAAE,WAAW,OAAO;GAC7B,YAAY,EAAE,WAAW,OAAO;GAChC,UAAU,EAAE,WAAW,OAAO;GAC9B,YAAY,EAAE,WAAW,OAAO;GACjC;;CAcD,AAAU,mBAAmB;AAC3B,SAAO;;CAGT,oBAA0B;AACxB,QAAM,mBAAmB;AACzB,OAAK,MAAM,UAAU;;CAGvB,uBAA6B;AAC3B,OAAK,eAAe;AACpB,QAAM,sBAAsB;;CAG9B,AAAQ,gBAAsB;AAC5B,OAAK,QAAQ,SAAS;AACtB,OAAK,SAAS;AACd,OAAK,gBAAgB;;CAGvB,AAAQ,eAAqB;AAC3B,MAAI,CAAC,KAAK,OAAO,CAAC,KAAK,QAAS;AAChC,MAAI,KAAK,UAAU,KAAK,kBAAkB,KAAK,QAAS;AAExD,OAAK,eAAe;AACpB,OAAK,gBAAgB,KAAK;AAC1B,OAAK,SAAS,IAAIC,kCAAc,KAAK,SAAS,KAAK,IAAI,OAAO;AAC9D,OAAK,gBAAgB,KAAK,OAAO,YAAY,EAAE;AAC/C,OAAK,OAAO,WAAW,UAAU;AAC/B,QAAK,gBAAgB,SAAS,EAAE;AAChC,QAAK,eAAe;IACpB;;CAGJ,AAAQ,cAAoB;AAC1B,MAAI,KAAK,iBAAkB;AAC3B,OAAK,mBAAmB;AACxB,OAAK,QAAQ,KAAK,cAAc;;CAGlC,SAAS;AACP,OAAK,cAAc;AACnB,OAAK,aAAa;AAClB,MAAI,CAAC,KAAK,YAAY,CAAC,KAAK,WAAW,CAAC,KAAK,WAAY,QAAOC;AAChE,SAAO,KAAK,SAAS;GACnB,OAAO,KAAK;GACZ,YAAY,KAAK;GACjB,SAAS,KAAK;GACd,OAAO,KAAK;GACZ,qBAAqB,KAAK,eAAe;GAC1C,CAAC"}