{"version":3,"names":["createContext","createSignal","useContext","SNAPSHOT_KEYS","snapshotKeys","AvatarContext","useAvatar","ctx","Error","createAvatar","imageLoadingStatus","setImageLoadingStatus","showFallback","isLoaded","api","Provider","props","children","AVATAR_SNAPSHOT_KEYS"],"sources":["create-avatar.tsx"],"sourcesContent":["import type { JSX } from \"@solidjs/web\";\nimport {\n\ttype Accessor,\n\tcreateContext,\n\tcreateSignal,\n\tuseContext,\n} from \"solid-js\";\nimport {\n\tSNAPSHOT_KEYS,\n\ttype Snapshottable,\n\tsnapshotKeys,\n} from \"../internals/observability/snapshot\";\nimport type { ImageLoadingStatus } from \"./avatar-root-context\";\n\nexport type { ImageLoadingStatus };\n\n/**\n * Public api returned by {@link createAvatar}. Exposes the live\n * image-loading status and the setter that `<Avatar.Image>` calls from its\n * `load` / `error` handlers.\n */\nexport interface AvatarApi {\n\t/** Reactive accessor for the image-loading status. */\n\timageLoadingStatus: Accessor<ImageLoadingStatus>;\n\t/** Setter — called from image load/error handlers. */\n\tsetImageLoadingStatus: (next: ImageLoadingStatus) => void;\n\t/** Whether the fallback should render (`status !== \"loaded\"`). */\n\tshowFallback: Accessor<boolean>;\n\t/** Whether the image is fully loaded. */\n\tisLoaded: Accessor<boolean>;\n\n\t/** Context provider — pair with {@link useAvatar}. */\n\tProvider: (props: { children: JSX.Element }) => JSX.Element;\n}\n\nconst AvatarContext = createContext<AvatarApi | null>(null);\n\n/**\n * Read the nearest {@link AvatarApi} provided by `c.Provider`. Throws if\n * called outside a Provider.\n */\nexport function useAvatar(): AvatarApi {\n\tconst ctx = useContext(AvatarContext);\n\tif (ctx == null) {\n\t\tthrow new Error(\n\t\t\t\"Base UI: useAvatar() must be called inside a <c.Provider>.\",\n\t\t);\n\t}\n\treturn ctx;\n}\n\n/**\n * Solid-native headless avatar primitive. Owns the `imageLoadingStatus`\n * signal that consumers (or `<Avatar.Image>`) write into from their\n * `load`/`error` handlers; exposes derived `showFallback` / `isLoaded`\n * accessors for the typical avatar UI flow.\n */\nexport function createAvatar(): AvatarApi {\n\t// Status writes happen from DOM event handlers (`<img>` load/error),\n\t// outside any tracking scope — a plain createSignal is correct here.\n\tconst [imageLoadingStatus, setImageLoadingStatus] =\n\t\tcreateSignal<ImageLoadingStatus>(\"idle\");\n\n\tconst showFallback: Accessor<boolean> = () =>\n\t\timageLoadingStatus() !== \"loaded\";\n\tconst isLoaded: Accessor<boolean> = () => imageLoadingStatus() === \"loaded\";\n\n\tconst api: AvatarApi = {\n\t\timageLoadingStatus,\n\t\tsetImageLoadingStatus,\n\t\tshowFallback,\n\t\tisLoaded,\n\t\tProvider: (props) => (\n\t\t\t<AvatarContext value={api}>{props.children}</AvatarContext>\n\t\t),\n\t};\n\t(api as AvatarApi & Snapshottable)[SNAPSHOT_KEYS] = AVATAR_SNAPSHOT_KEYS;\n\treturn api;\n}\n\nconst AVATAR_SNAPSHOT_KEYS = snapshotKeys<AvatarApi>(\n\t\"imageLoadingStatus\",\n\t\"showFallback\",\n\t\"isLoaded\",\n);\n"],"mappings":"AACA,SAECA,aAAa,EACbC,YAAY,EACZC,UAAU,QACJ,UAAU;AACjB,SACCC,aAAa,EAEbC,YAAY,QACN,qCAAqC;;AAK5C;AACA;AACA;AACA;AACA;;AAeA,MAAMC,aAAa,GAAGL,aAAa,CAAmB,IAAI,CAAC;;AAE3D;AACA;AACA;AACA;AACA,OAAO,SAASM,SAASA,CAAA,EAAc;EACtC,MAAMC,GAAG,GAAGL,UAAU,CAACG,aAAa,CAAC;EACrC,IAAIE,GAAG,IAAI,IAAI,EAAE;IAChB,MAAM,IAAIC,KAAK,CACd,4DACD,CAAC;EACF;EACA,OAAOD,GAAG;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASE,YAAYA,CAAA,EAAc;EACzC;EACA;EACA,MAAM,CAACC,kBAAkB,EAAEC,qBAAqB,CAAC,GAChDV,YAAY,CAAqB,MAAM,CAAC;EAEzC,MAAMW,YAA+B,GAAGA,CAAA,KACvCF,kBAAkB,CAAC,CAAC,KAAK,QAAQ;EAClC,MAAMG,QAA2B,GAAGA,CAAA,KAAMH,kBAAkB,CAAC,CAAC,KAAK,QAAQ;EAE3E,MAAMI,GAAc,GAAG;IACtBJ,kBAAkB;IAClBC,qBAAqB;IACrBC,YAAY;IACZC,QAAQ;IACRE,QAAQ,EAAGC,KAAK,IACf,CAAC,aAAa,CAAC,KAAK,CAAC,CAACF,GAAG,CAAC,CAAC,CAACE,KAAK,CAACC,QAAQ,CAAC,EAAE,aAAa;EAE5D,CAAC;EACAH,GAAG,CAA+BX,aAAa,CAAC,GAAGe,oBAAoB;EACxE,OAAOJ,GAAG;AACX;AAEA,MAAMI,oBAAoB,GAAGd,YAAY,CACxC,oBAAoB,EACpB,cAAc,EACd,UACD,CAAC","ignoreList":[]}