@dadan-mvp/record-sdk-react 0.1.1 → 0.1.3

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.tsx","../src/DadanMark.tsx","../src/injectButtonStyles.ts"],"sourcesContent":["import { oembed } from \"@dadan-mvp/embed\";\r\nimport {\r\n createInstance,\r\n isSupported,\r\n type CreateInstanceArgs,\r\n type DadanVideo,\r\n type SDKResult,\r\n} from \"@dadan-mvp/record-sdk-ui\";\r\nimport {\r\n useCallback,\r\n useEffect,\r\n useRef,\r\n useState,\r\n type ButtonHTMLAttributes,\r\n type ReactNode,\r\n} from \"react\";\r\nimport { DadanMark } from \"./DadanMark\";\r\nimport { injectDadanRecordButtonStyles } from \"./injectButtonStyles\";\r\n\r\nexport {\r\n createInstance,\r\n createRecorder,\r\n isSupported,\r\n StudioSession,\r\n RecorderHost,\r\n defineDadanRecorder,\r\n type CreateInstanceArgs,\r\n type DadanVideo,\r\n type SdkBackdrop,\r\n type SDKResult,\r\n type RecordingMode,\r\n} from \"@dadan-mvp/record-sdk-ui\";\r\nexport { oembed } from \"@dadan-mvp/embed\";\r\nexport { DadanMark } from \"./DadanMark\";\r\n\r\nexport function useDadanRecorder(args: CreateInstanceArgs) {\r\n const [ready, setReady] = useState(false);\r\n const [supported, setSupported] = useState(true);\r\n const [supportError, setSupportError] = useState<string | undefined>();\r\n const [lastVideo, setLastVideo] = useState<DadanVideo | undefined>();\r\n const [embedHtml, setEmbedHtml] = useState<string | undefined>();\r\n const instanceRef = useRef<SDKResult | null>(null);\r\n\r\n useEffect(() => {\r\n let cancelled = false;\r\n (async () => {\r\n const support = await isSupported();\r\n if (cancelled) return;\r\n setSupported(support.supported);\r\n setSupportError(support.error);\r\n if (!support.supported) return;\r\n const instance = await createInstance(args);\r\n if (cancelled) {\r\n instance.teardown();\r\n return;\r\n }\r\n instanceRef.current = instance;\r\n const button = instance.configureButton();\r\n button.on(\"insert-click\", async (video) => {\r\n setLastVideo(video);\r\n try {\r\n const { html } = await oembed(video.sharedUrl, {\r\n width: 640,\r\n fallback: true,\r\n });\r\n setEmbedHtml(html);\r\n } catch {\r\n setEmbedHtml(undefined);\r\n }\r\n });\r\n setReady(true);\r\n })();\r\n return () => {\r\n cancelled = true;\r\n instanceRef.current?.teardown();\r\n instanceRef.current = null;\r\n setReady(false);\r\n };\r\n }, [args.mode, args.publicAppId, args.uploadToken, args.jws, args.apiBase]);\r\n\r\n return {\r\n ready,\r\n supported,\r\n supportError,\r\n lastVideo,\r\n embedHtml,\r\n open: useCallback(() => instanceRef.current?.open(), []),\r\n close: useCallback(() => instanceRef.current?.close(), []),\r\n instance: instanceRef.current,\r\n };\r\n}\r\n\r\nexport interface DadanRecordButtonProps\r\n extends ButtonHTMLAttributes<HTMLButtonElement> {\r\n sdk: CreateInstanceArgs;\r\n children?: ReactNode;\r\n label?: string;\r\n onInsert?: (video: DadanVideo) => void;\r\n}\r\n\r\nexport function DadanRecordButton({\r\n sdk,\r\n children,\r\n label = \"Record with Dadan\",\r\n onInsert,\r\n disabled,\r\n className,\r\n ...rest\r\n}: DadanRecordButtonProps) {\r\n const buttonEl = useRef<HTMLButtonElement>(null);\r\n const instanceRef = useRef<SDKResult | null>(null);\r\n const [supported, setSupported] = useState(true);\r\n const [supportError, setSupportError] = useState<string | undefined>();\r\n const onInsertRef = useRef(onInsert);\r\n onInsertRef.current = onInsert;\r\n\r\n useEffect(() => {\r\n injectDadanRecordButtonStyles();\r\n }, []);\r\n\r\n useEffect(() => {\r\n let cancelled = false;\r\n (async () => {\r\n const support = await isSupported();\r\n if (cancelled) return;\r\n setSupported(support.supported);\r\n setSupportError(support.error);\r\n if (!support.supported || !buttonEl.current) return;\r\n const instance = await createInstance(sdk);\r\n if (cancelled) {\r\n instance.teardown();\r\n return;\r\n }\r\n instanceRef.current = instance;\r\n instance\r\n .configureButton({ element: buttonEl.current })\r\n .on(\"insert-click\", (video) => onInsertRef.current?.(video));\r\n })();\r\n return () => {\r\n cancelled = true;\r\n instanceRef.current?.teardown();\r\n instanceRef.current = null;\r\n };\r\n }, [sdk.mode, sdk.publicAppId, sdk.uploadToken, sdk.jws, sdk.apiBase]);\r\n\r\n const classes = [\"dadan-record-btn\", className].filter(Boolean).join(\" \");\r\n\r\n return (\r\n <button\r\n ref={buttonEl}\r\n type=\"button\"\r\n className={classes}\r\n disabled={disabled || !supported}\r\n title={supportError || label}\r\n aria-label={label}\r\n {...rest}\r\n >\r\n {children ?? (\r\n <DadanMark className=\"dadan-record-btn__mark\" glyphOnly />\r\n )}\r\n </button>\r\n );\r\n}\r\n\r\n/** Full in-page recorder surface (always mounted host; open via props or ref). */\r\nexport function DadanRecorder({\r\n sdk,\r\n open,\r\n onInsert,\r\n className,\r\n}: {\r\n sdk: CreateInstanceArgs;\r\n open?: boolean;\r\n onInsert?: (video: DadanVideo) => void;\r\n className?: string;\r\n}) {\r\n const { instance, ready } = useDadanRecorder(sdk);\r\n const onInsertRef = useRef(onInsert);\r\n onInsertRef.current = onInsert;\r\n\r\n useEffect(() => {\r\n if (!instance) return;\r\n const handler = (v: DadanVideo) => {\r\n onInsertRef.current?.(v);\r\n };\r\n const button = instance.configureButton();\r\n button.on(\"insert-click\", handler);\r\n return () => button.off(\"insert-click\", handler);\r\n }, [instance]);\r\n\r\n useEffect(() => {\r\n if (!ready || !instance) return;\r\n if (open) instance.open();\r\n else instance.close();\r\n }, [open, ready, instance]);\r\n\r\n return className ? <div className={className} data-dadan-recorder=\"\" /> : null;\r\n}\r\n\r\nexport function DadanEmbed({\r\n sharedUrl,\r\n width = 640,\r\n className,\r\n}: {\r\n sharedUrl: string;\r\n width?: number;\r\n className?: string;\r\n}) {\r\n const [html, setHtml] = useState(\"\");\r\n useEffect(() => {\r\n let cancelled = false;\r\n oembed(sharedUrl, { width, fallback: true }).then((res) => {\r\n if (!cancelled) setHtml(res.html);\r\n });\r\n return () => {\r\n cancelled = true;\r\n };\r\n }, [sharedUrl, width]);\r\n if (!html) return null;\r\n return (\r\n <div className={className} dangerouslySetInnerHTML={{ __html: html }} />\r\n );\r\n}\r\n","/** Dadan logo mark — full badge or white glyph for purple buttons. */\r\nexport function DadanMark({\r\n className,\r\n glyphOnly = false,\r\n}: {\r\n className?: string;\r\n /** White paths only (for Dadan purple button backgrounds). */\r\n glyphOnly?: boolean;\r\n}) {\r\n return (\r\n <svg\r\n className={className}\r\n width=\"28\"\r\n height=\"28\"\r\n viewBox=\"0 0 36 36\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n aria-hidden\r\n >\r\n {!glyphOnly && <rect width=\"36\" height=\"36\" rx=\"10\" fill=\"#4A3CFA\" />}\r\n <path\r\n d=\"M28.3838 22.7653C28.1557 22.7658 27.937 22.8567 27.7757 23.0181C27.6144 23.1794 27.5235 23.398 27.5229 23.6261V24.4084C27.5229 24.6361 27.4324 24.8545 27.2714 25.0155C27.1104 25.1765 26.892 25.267 26.6643 25.267C26.4366 25.267 26.2181 25.1765 26.0571 25.0155C25.8961 24.8545 25.8056 24.6361 25.8056 24.4084V14.5542C25.8056 13.2361 25.3369 11.961 24.4831 10.9567C23.6294 9.95245 22.4463 9.28455 21.1453 9.07242C19.8444 8.86028 18.5104 9.11772 17.3819 9.79873C16.2533 10.4797 15.4037 11.5399 14.985 12.7898C14.0395 12.6946 13.0846 12.7986 12.1818 13.095C11.279 13.3914 10.4483 13.8735 9.74313 14.5105C9.03799 15.1474 8.47409 15.925 8.08775 16.7932C7.70141 17.6613 7.50119 18.6008 7.5 19.551V26.1189C7.50059 26.347 7.59149 26.5656 7.7528 26.727C7.91412 26.8883 8.13275 26.9792 8.36089 26.9798H20.247C20.4751 26.9792 20.6937 26.8883 20.855 26.727C21.0164 26.5656 21.1073 26.347 21.1078 26.1189V19.551C21.1078 19.4746 21.1078 19.3959 21.1078 19.3262C21.1078 19.2992 21.1078 19.2723 21.1078 19.2453C21.1076 19.1316 21.0849 19.0192 21.0411 18.9143C20.9974 18.8094 20.9334 18.7142 20.8528 18.634C20.7722 18.5539 20.6767 18.4904 20.5716 18.4472C20.4665 18.4039 20.3539 18.3819 20.2402 18.3821C19.4851 18.379 18.7479 18.1523 18.1216 17.7305C17.4953 17.3088 17.008 16.7109 16.7212 16.0124C16.4344 15.3139 16.3609 14.5461 16.5101 13.8059C16.6594 13.0657 17.0245 12.3863 17.5595 11.8535C18.0946 11.3207 18.7754 10.9583 19.5162 10.8121C20.2571 10.666 21.0245 10.7425 21.7219 11.0322C22.4192 11.3219 23.015 11.8117 23.4342 12.4397C23.8534 13.0677 24.0771 13.8059 24.0771 14.561V24.4151C24.0771 25.1007 24.3495 25.7581 24.8342 26.2429C25.319 26.7277 25.9765 27 26.662 27C27.3476 27 28.0051 26.7277 28.4898 26.2429C28.9746 25.7581 29.2469 25.1007 29.2469 24.4151V23.6329C29.2475 23.5192 29.2256 23.4064 29.1825 23.3012C29.1394 23.196 29.0759 23.1003 28.9957 23.0196C28.9155 22.939 28.8202 22.875 28.7151 22.8314C28.6101 22.7877 28.4975 22.7652 28.3838 22.7653ZM14.3084 21.5133C14.0803 21.5138 13.8617 21.6047 13.7003 21.7661C13.539 21.9274 13.4481 22.146 13.4475 22.3741V25.267H9.22402V19.551C9.22521 18.2039 9.76072 16.9122 10.7131 15.9595C11.6654 15.0067 12.9568 14.4706 14.3039 14.4688C14.4343 14.4688 14.5647 14.4688 14.695 14.4846V14.5452C14.6922 15.8715 15.1644 17.1549 16.0262 18.1631C16.888 19.1712 18.0823 19.8374 19.3928 20.041V25.267H15.1671V22.3741C15.1665 22.1456 15.0753 21.9266 14.9135 21.7653C14.7517 21.6039 14.5325 21.5133 14.3039 21.5133H14.3084Z\"\r\n fill={glyphOnly ? \"currentColor\" : \"white\"}\r\n />\r\n <path\r\n d=\"M21.7192 14.0935L19.8761 13.0348C19.7968 12.9763 19.7021 12.9423 19.6038 12.9369C19.5054 12.9315 19.4076 12.955 19.3223 13.0044C19.2371 13.0538 19.1682 13.127 19.124 13.2151C19.0798 13.3032 19.0623 13.4022 19.0736 13.5001V15.6107C19.0671 15.7079 19.0868 15.8051 19.1307 15.8921C19.1746 15.9791 19.2411 16.0527 19.3231 16.1052C19.3917 16.1442 19.4691 16.165 19.5479 16.1659C19.6603 16.1644 19.7704 16.1334 19.8671 16.076L21.7102 15.0173C21.8011 14.979 21.8787 14.9148 21.9332 14.8326C21.9878 14.7504 22.0168 14.654 22.0168 14.5554C22.0168 14.4568 21.9878 14.3603 21.9332 14.2782C21.8787 14.196 21.8011 14.1318 21.7102 14.0935H21.7192Z\"\r\n fill={glyphOnly ? \"currentColor\" : \"white\"}\r\n />\r\n </svg>\r\n );\r\n}\r\n","const STYLE_ID = \"dadan-record-btn-styles\";\r\n\r\nconst CSS = `\r\n.dadan-record-btn{\r\n --dadan-record-btn-bg: var(--dadan-sdk-btn-bg, #4A3CFA);\r\n --dadan-record-btn-bg-hover: var(--dadan-sdk-btn-bg-hover, #3527E0);\r\n --dadan-record-btn-fg: var(--dadan-sdk-btn-fg, #fff);\r\n --dadan-record-btn-radius: var(--dadan-sdk-btn-radius, 12px);\r\n --dadan-record-btn-shadow: var(--dadan-sdk-btn-shadow, 0 6px 16px rgba(74,60,250,.35));\r\n --dadan-record-btn-shadow-hover: var(--dadan-sdk-btn-shadow-hover, 0 10px 22px rgba(74,60,250,.42));\r\n display:inline-flex;\r\n align-items:center;\r\n justify-content:center;\r\n width:44px;\r\n height:44px;\r\n padding:0;\r\n border:none;\r\n border-radius:var(--dadan-record-btn-radius);\r\n background:var(--dadan-record-btn-bg);\r\n color:var(--dadan-record-btn-fg);\r\n cursor:pointer;\r\n box-sizing:border-box;\r\n box-shadow:var(--dadan-record-btn-shadow);\r\n transition:background-color .15s ease,transform .15s ease,box-shadow .15s ease;\r\n}\r\n.dadan-record-btn:hover:not(:disabled){\r\n background:var(--dadan-record-btn-bg-hover);\r\n transform:translateY(-1px);\r\n box-shadow:var(--dadan-record-btn-shadow-hover);\r\n}\r\n.dadan-record-btn:active:not(:disabled){transform:translateY(0)}\r\n.dadan-record-btn:disabled{opacity:.45;cursor:not-allowed;box-shadow:none}\r\n.dadan-record-btn__mark{width:26px;height:26px;flex-shrink:0;display:block;color:currentColor}\r\n`;\r\n\r\nexport function injectDadanRecordButtonStyles(): void {\r\n if (typeof document === \"undefined\") return;\r\n if (document.getElementById(STYLE_ID)) return;\r\n const el = document.createElement(\"style\");\r\n el.id = STYLE_ID;\r\n el.textContent = CSS;\r\n document.head.appendChild(el);\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAC,mBAAuB;AACxB,2BAMO;AACP,mBAOO;;;ACLH;AATG,SAAS,UAAU;AAAA,EACxB;AAAA,EACA,YAAY;AACd,GAIG;AACD,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACN,eAAW;AAAA,MAEV;AAAA,SAAC,aAAa,4CAAC,UAAK,OAAM,MAAK,QAAO,MAAK,IAAG,MAAK,MAAK,WAAU;AAAA,QACnE;AAAA,UAAC;AAAA;AAAA,YACC,GAAE;AAAA,YACF,MAAM,YAAY,iBAAiB;AAAA;AAAA,QACrC;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,GAAE;AAAA,YACF,MAAM,YAAY,iBAAiB;AAAA;AAAA,QACrC;AAAA;AAAA;AAAA,EACF;AAEJ;;;AC9BA,IAAM,WAAW;AAEjB,IAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiCL,SAAS,gCAAsC;AACpD,MAAI,OAAO,aAAa,YAAa;AACrC,MAAI,SAAS,eAAe,QAAQ,EAAG;AACvC,QAAM,KAAK,SAAS,cAAc,OAAO;AACzC,KAAG,KAAK;AACR,KAAG,cAAc;AACjB,WAAS,KAAK,YAAY,EAAE;AAC9B;;;AFvBA,IAAAA,wBAYO;AACP,IAAAC,gBAAuB;AA8Hf,IAAAC,sBAAA;AA3HD,SAAS,iBAAiB,MAA0B;AACzD,QAAM,CAAC,OAAO,QAAQ,QAAI,uBAAS,KAAK;AACxC,QAAM,CAAC,WAAW,YAAY,QAAI,uBAAS,IAAI;AAC/C,QAAM,CAAC,cAAc,eAAe,QAAI,uBAA6B;AACrE,QAAM,CAAC,WAAW,YAAY,QAAI,uBAAiC;AACnE,QAAM,CAAC,WAAW,YAAY,QAAI,uBAA6B;AAC/D,QAAM,kBAAc,qBAAyB,IAAI;AAEjD,8BAAU,MAAM;AACd,QAAI,YAAY;AAChB,KAAC,YAAY;AACX,YAAM,UAAU,UAAM,kCAAY;AAClC,UAAI,UAAW;AACf,mBAAa,QAAQ,SAAS;AAC9B,sBAAgB,QAAQ,KAAK;AAC7B,UAAI,CAAC,QAAQ,UAAW;AACxB,YAAM,WAAW,UAAM,qCAAe,IAAI;AAC1C,UAAI,WAAW;AACb,iBAAS,SAAS;AAClB;AAAA,MACF;AACA,kBAAY,UAAU;AACtB,YAAM,SAAS,SAAS,gBAAgB;AACxC,aAAO,GAAG,gBAAgB,OAAO,UAAU;AACzC,qBAAa,KAAK;AAClB,YAAI;AACF,gBAAM,EAAE,KAAK,IAAI,UAAM,qBAAO,MAAM,WAAW;AAAA,YAC7C,OAAO;AAAA,YACP,UAAU;AAAA,UACZ,CAAC;AACD,uBAAa,IAAI;AAAA,QACnB,QAAQ;AACN,uBAAa,MAAS;AAAA,QACxB;AAAA,MACF,CAAC;AACD,eAAS,IAAI;AAAA,IACf,GAAG;AACH,WAAO,MAAM;AACX,kBAAY;AACZ,kBAAY,SAAS,SAAS;AAC9B,kBAAY,UAAU;AACtB,eAAS,KAAK;AAAA,IAChB;AAAA,EACF,GAAG,CAAC,KAAK,MAAM,KAAK,aAAa,KAAK,aAAa,KAAK,KAAK,KAAK,OAAO,CAAC;AAE1E,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAM,0BAAY,MAAM,YAAY,SAAS,KAAK,GAAG,CAAC,CAAC;AAAA,IACvD,WAAO,0BAAY,MAAM,YAAY,SAAS,MAAM,GAAG,CAAC,CAAC;AAAA,IACzD,UAAU,YAAY;AAAA,EACxB;AACF;AAUO,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA2B;AACzB,QAAM,eAAW,qBAA0B,IAAI;AAC/C,QAAM,kBAAc,qBAAyB,IAAI;AACjD,QAAM,CAAC,WAAW,YAAY,QAAI,uBAAS,IAAI;AAC/C,QAAM,CAAC,cAAc,eAAe,QAAI,uBAA6B;AACrE,QAAM,kBAAc,qBAAO,QAAQ;AACnC,cAAY,UAAU;AAEtB,8BAAU,MAAM;AACd,kCAA8B;AAAA,EAChC,GAAG,CAAC,CAAC;AAEL,8BAAU,MAAM;AACd,QAAI,YAAY;AAChB,KAAC,YAAY;AACX,YAAM,UAAU,UAAM,kCAAY;AAClC,UAAI,UAAW;AACf,mBAAa,QAAQ,SAAS;AAC9B,sBAAgB,QAAQ,KAAK;AAC7B,UAAI,CAAC,QAAQ,aAAa,CAAC,SAAS,QAAS;AAC7C,YAAM,WAAW,UAAM,qCAAe,GAAG;AACzC,UAAI,WAAW;AACb,iBAAS,SAAS;AAClB;AAAA,MACF;AACA,kBAAY,UAAU;AACtB,eACG,gBAAgB,EAAE,SAAS,SAAS,QAAQ,CAAC,EAC7C,GAAG,gBAAgB,CAAC,UAAU,YAAY,UAAU,KAAK,CAAC;AAAA,IAC/D,GAAG;AACH,WAAO,MAAM;AACX,kBAAY;AACZ,kBAAY,SAAS,SAAS;AAC9B,kBAAY,UAAU;AAAA,IACxB;AAAA,EACF,GAAG,CAAC,IAAI,MAAM,IAAI,aAAa,IAAI,aAAa,IAAI,KAAK,IAAI,OAAO,CAAC;AAErE,QAAM,UAAU,CAAC,oBAAoB,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAExE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,MAAK;AAAA,MACL,WAAW;AAAA,MACX,UAAU,YAAY,CAAC;AAAA,MACvB,OAAO,gBAAgB;AAAA,MACvB,cAAY;AAAA,MACX,GAAG;AAAA,MAEH,sBACC,6CAAC,aAAU,WAAU,0BAAyB,WAAS,MAAC;AAAA;AAAA,EAE5D;AAEJ;AAGO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKG;AACD,QAAM,EAAE,UAAU,MAAM,IAAI,iBAAiB,GAAG;AAChD,QAAM,kBAAc,qBAAO,QAAQ;AACnC,cAAY,UAAU;AAEtB,8BAAU,MAAM;AACd,QAAI,CAAC,SAAU;AACf,UAAM,UAAU,CAAC,MAAkB;AACjC,kBAAY,UAAU,CAAC;AAAA,IACzB;AACA,UAAM,SAAS,SAAS,gBAAgB;AACxC,WAAO,GAAG,gBAAgB,OAAO;AACjC,WAAO,MAAM,OAAO,IAAI,gBAAgB,OAAO;AAAA,EACjD,GAAG,CAAC,QAAQ,CAAC;AAEb,8BAAU,MAAM;AACd,QAAI,CAAC,SAAS,CAAC,SAAU;AACzB,QAAI,KAAM,UAAS,KAAK;AAAA,QACnB,UAAS,MAAM;AAAA,EACtB,GAAG,CAAC,MAAM,OAAO,QAAQ,CAAC;AAE1B,SAAO,YAAY,6CAAC,SAAI,WAAsB,uBAAoB,IAAG,IAAK;AAC5E;AAEO,SAAS,WAAW;AAAA,EACzB;AAAA,EACA,QAAQ;AAAA,EACR;AACF,GAIG;AACD,QAAM,CAAC,MAAM,OAAO,QAAI,uBAAS,EAAE;AACnC,8BAAU,MAAM;AACd,QAAI,YAAY;AAChB,6BAAO,WAAW,EAAE,OAAO,UAAU,KAAK,CAAC,EAAE,KAAK,CAAC,QAAQ;AACzD,UAAI,CAAC,UAAW,SAAQ,IAAI,IAAI;AAAA,IAClC,CAAC;AACD,WAAO,MAAM;AACX,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,WAAW,KAAK,CAAC;AACrB,MAAI,CAAC,KAAM,QAAO;AAClB,SACE,6CAAC,SAAI,WAAsB,yBAAyB,EAAE,QAAQ,KAAK,GAAG;AAE1E;","names":["import_record_sdk_ui","import_embed","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../src/index.tsx","../src/DadanMark.tsx","../src/injectButtonStyles.ts"],"sourcesContent":["import { oembed } from \"@dadan-mvp/embed\";\r\nimport {\r\n createInstance,\r\n isSupported,\r\n type CreateInstanceArgs,\r\n type DadanVideo,\r\n type SDKResult,\r\n} from \"@dadan-mvp/record-sdk-ui\";\r\nimport {\r\n useCallback,\r\n useEffect,\r\n useRef,\r\n useState,\r\n type ButtonHTMLAttributes,\r\n type ReactNode,\r\n} from \"react\";\r\nimport { DadanMark } from \"./DadanMark\";\r\nimport { injectDadanRecordButtonStyles } from \"./injectButtonStyles\";\r\n\r\nexport {\r\n createInstance,\r\n createRecorder,\r\n isSupported,\r\n StudioSession,\r\n RecorderHost,\r\n defineDadanRecorder,\r\n type CreateInstanceArgs,\r\n type DadanVideo,\r\n type SdkBackdrop,\r\n type SdkCountdownProps,\r\n type SdkCountdownRenderer,\r\n type SDKResult,\r\n type RecordingMode,\r\n} from \"@dadan-mvp/record-sdk-ui\";\r\nexport { oembed } from \"@dadan-mvp/embed\";\r\nexport { DadanMark } from \"./DadanMark\";\r\n\r\nexport function useDadanRecorder(args: CreateInstanceArgs) {\r\n const [ready, setReady] = useState(false);\r\n const [supported, setSupported] = useState(true);\r\n const [supportError, setSupportError] = useState<string | undefined>();\r\n const [lastVideo, setLastVideo] = useState<DadanVideo | undefined>();\r\n const [embedHtml, setEmbedHtml] = useState<string | undefined>();\r\n const instanceRef = useRef<SDKResult | null>(null);\r\n\r\n useEffect(() => {\r\n let cancelled = false;\r\n (async () => {\r\n const support = await isSupported();\r\n if (cancelled) return;\r\n setSupported(support.supported);\r\n setSupportError(support.error);\r\n if (!support.supported) return;\r\n const instance = await createInstance(args);\r\n if (cancelled) {\r\n instance.teardown();\r\n return;\r\n }\r\n instanceRef.current = instance;\r\n const button = instance.configureButton();\r\n button.on(\"insert-click\", async (video) => {\r\n setLastVideo(video);\r\n try {\r\n const { html } = await oembed(video.sharedUrl, {\r\n width: 640,\r\n fallback: true,\r\n });\r\n setEmbedHtml(html);\r\n } catch {\r\n setEmbedHtml(undefined);\r\n }\r\n });\r\n setReady(true);\r\n })();\r\n return () => {\r\n cancelled = true;\r\n instanceRef.current?.teardown();\r\n instanceRef.current = null;\r\n setReady(false);\r\n };\r\n }, [args.mode, args.publicAppId, args.uploadToken, args.jws, args.apiBase]);\r\n\r\n return {\r\n ready,\r\n supported,\r\n supportError,\r\n lastVideo,\r\n embedHtml,\r\n open: useCallback(() => instanceRef.current?.open(), []),\r\n close: useCallback(() => instanceRef.current?.close(), []),\r\n instance: instanceRef.current,\r\n };\r\n}\r\n\r\nexport interface DadanRecordButtonProps\r\n extends ButtonHTMLAttributes<HTMLButtonElement> {\r\n sdk: CreateInstanceArgs;\r\n children?: ReactNode;\r\n label?: string;\r\n onInsert?: (video: DadanVideo) => void;\r\n}\r\n\r\nexport function DadanRecordButton({\r\n sdk,\r\n children,\r\n label = \"Record with Dadan\",\r\n onInsert,\r\n disabled,\r\n className,\r\n ...rest\r\n}: DadanRecordButtonProps) {\r\n const buttonEl = useRef<HTMLButtonElement>(null);\r\n const instanceRef = useRef<SDKResult | null>(null);\r\n const [supported, setSupported] = useState(true);\r\n const [supportError, setSupportError] = useState<string | undefined>();\r\n const onInsertRef = useRef(onInsert);\r\n onInsertRef.current = onInsert;\r\n\r\n useEffect(() => {\r\n injectDadanRecordButtonStyles();\r\n }, []);\r\n\r\n useEffect(() => {\r\n let cancelled = false;\r\n (async () => {\r\n const support = await isSupported();\r\n if (cancelled) return;\r\n setSupported(support.supported);\r\n setSupportError(support.error);\r\n if (!support.supported || !buttonEl.current) return;\r\n const instance = await createInstance(sdk);\r\n if (cancelled) {\r\n instance.teardown();\r\n return;\r\n }\r\n instanceRef.current = instance;\r\n instance\r\n .configureButton({ element: buttonEl.current })\r\n .on(\"insert-click\", (video) => onInsertRef.current?.(video));\r\n })();\r\n return () => {\r\n cancelled = true;\r\n instanceRef.current?.teardown();\r\n instanceRef.current = null;\r\n };\r\n }, [sdk.mode, sdk.publicAppId, sdk.uploadToken, sdk.jws, sdk.apiBase]);\r\n\r\n const classes = [\"dadan-record-btn\", className].filter(Boolean).join(\" \");\r\n\r\n return (\r\n <button\r\n ref={buttonEl}\r\n type=\"button\"\r\n className={classes}\r\n disabled={disabled || !supported}\r\n title={supportError || label}\r\n aria-label={label}\r\n {...rest}\r\n >\r\n {children ?? (\r\n <DadanMark className=\"dadan-record-btn__mark\" glyphOnly />\r\n )}\r\n </button>\r\n );\r\n}\r\n\r\n/** Full in-page recorder surface (always mounted host; open via props or ref). */\r\nexport function DadanRecorder({\r\n sdk,\r\n open,\r\n onInsert,\r\n className,\r\n}: {\r\n sdk: CreateInstanceArgs;\r\n open?: boolean;\r\n onInsert?: (video: DadanVideo) => void;\r\n className?: string;\r\n}) {\r\n const { instance, ready } = useDadanRecorder(sdk);\r\n const onInsertRef = useRef(onInsert);\r\n onInsertRef.current = onInsert;\r\n\r\n useEffect(() => {\r\n if (!instance) return;\r\n const handler = (v: DadanVideo) => {\r\n onInsertRef.current?.(v);\r\n };\r\n const button = instance.configureButton();\r\n button.on(\"insert-click\", handler);\r\n return () => button.off(\"insert-click\", handler);\r\n }, [instance]);\r\n\r\n useEffect(() => {\r\n if (!ready || !instance) return;\r\n if (open) instance.open();\r\n else instance.close();\r\n }, [open, ready, instance]);\r\n\r\n return className ? <div className={className} data-dadan-recorder=\"\" /> : null;\r\n}\r\n\r\nexport function DadanEmbed({\r\n sharedUrl,\r\n width = 640,\r\n className,\r\n}: {\r\n sharedUrl: string;\r\n width?: number;\r\n className?: string;\r\n}) {\r\n const [html, setHtml] = useState(\"\");\r\n useEffect(() => {\r\n let cancelled = false;\r\n oembed(sharedUrl, { width, fallback: true }).then((res) => {\r\n if (!cancelled) setHtml(res.html);\r\n });\r\n return () => {\r\n cancelled = true;\r\n };\r\n }, [sharedUrl, width]);\r\n if (!html) return null;\r\n return (\r\n <div className={className} dangerouslySetInnerHTML={{ __html: html }} />\r\n );\r\n}\r\n","/** Dadan logo mark — full badge or white glyph for purple buttons. */\r\nexport function DadanMark({\r\n className,\r\n glyphOnly = false,\r\n}: {\r\n className?: string;\r\n /** White paths only (for Dadan purple button backgrounds). */\r\n glyphOnly?: boolean;\r\n}) {\r\n return (\r\n <svg\r\n className={className}\r\n width=\"28\"\r\n height=\"28\"\r\n viewBox=\"0 0 36 36\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n aria-hidden\r\n >\r\n {!glyphOnly && <rect width=\"36\" height=\"36\" rx=\"10\" fill=\"#4A3CFA\" />}\r\n <path\r\n d=\"M28.3838 22.7653C28.1557 22.7658 27.937 22.8567 27.7757 23.0181C27.6144 23.1794 27.5235 23.398 27.5229 23.6261V24.4084C27.5229 24.6361 27.4324 24.8545 27.2714 25.0155C27.1104 25.1765 26.892 25.267 26.6643 25.267C26.4366 25.267 26.2181 25.1765 26.0571 25.0155C25.8961 24.8545 25.8056 24.6361 25.8056 24.4084V14.5542C25.8056 13.2361 25.3369 11.961 24.4831 10.9567C23.6294 9.95245 22.4463 9.28455 21.1453 9.07242C19.8444 8.86028 18.5104 9.11772 17.3819 9.79873C16.2533 10.4797 15.4037 11.5399 14.985 12.7898C14.0395 12.6946 13.0846 12.7986 12.1818 13.095C11.279 13.3914 10.4483 13.8735 9.74313 14.5105C9.03799 15.1474 8.47409 15.925 8.08775 16.7932C7.70141 17.6613 7.50119 18.6008 7.5 19.551V26.1189C7.50059 26.347 7.59149 26.5656 7.7528 26.727C7.91412 26.8883 8.13275 26.9792 8.36089 26.9798H20.247C20.4751 26.9792 20.6937 26.8883 20.855 26.727C21.0164 26.5656 21.1073 26.347 21.1078 26.1189V19.551C21.1078 19.4746 21.1078 19.3959 21.1078 19.3262C21.1078 19.2992 21.1078 19.2723 21.1078 19.2453C21.1076 19.1316 21.0849 19.0192 21.0411 18.9143C20.9974 18.8094 20.9334 18.7142 20.8528 18.634C20.7722 18.5539 20.6767 18.4904 20.5716 18.4472C20.4665 18.4039 20.3539 18.3819 20.2402 18.3821C19.4851 18.379 18.7479 18.1523 18.1216 17.7305C17.4953 17.3088 17.008 16.7109 16.7212 16.0124C16.4344 15.3139 16.3609 14.5461 16.5101 13.8059C16.6594 13.0657 17.0245 12.3863 17.5595 11.8535C18.0946 11.3207 18.7754 10.9583 19.5162 10.8121C20.2571 10.666 21.0245 10.7425 21.7219 11.0322C22.4192 11.3219 23.015 11.8117 23.4342 12.4397C23.8534 13.0677 24.0771 13.8059 24.0771 14.561V24.4151C24.0771 25.1007 24.3495 25.7581 24.8342 26.2429C25.319 26.7277 25.9765 27 26.662 27C27.3476 27 28.0051 26.7277 28.4898 26.2429C28.9746 25.7581 29.2469 25.1007 29.2469 24.4151V23.6329C29.2475 23.5192 29.2256 23.4064 29.1825 23.3012C29.1394 23.196 29.0759 23.1003 28.9957 23.0196C28.9155 22.939 28.8202 22.875 28.7151 22.8314C28.6101 22.7877 28.4975 22.7652 28.3838 22.7653ZM14.3084 21.5133C14.0803 21.5138 13.8617 21.6047 13.7003 21.7661C13.539 21.9274 13.4481 22.146 13.4475 22.3741V25.267H9.22402V19.551C9.22521 18.2039 9.76072 16.9122 10.7131 15.9595C11.6654 15.0067 12.9568 14.4706 14.3039 14.4688C14.4343 14.4688 14.5647 14.4688 14.695 14.4846V14.5452C14.6922 15.8715 15.1644 17.1549 16.0262 18.1631C16.888 19.1712 18.0823 19.8374 19.3928 20.041V25.267H15.1671V22.3741C15.1665 22.1456 15.0753 21.9266 14.9135 21.7653C14.7517 21.6039 14.5325 21.5133 14.3039 21.5133H14.3084Z\"\r\n fill={glyphOnly ? \"currentColor\" : \"white\"}\r\n />\r\n <path\r\n d=\"M21.7192 14.0935L19.8761 13.0348C19.7968 12.9763 19.7021 12.9423 19.6038 12.9369C19.5054 12.9315 19.4076 12.955 19.3223 13.0044C19.2371 13.0538 19.1682 13.127 19.124 13.2151C19.0798 13.3032 19.0623 13.4022 19.0736 13.5001V15.6107C19.0671 15.7079 19.0868 15.8051 19.1307 15.8921C19.1746 15.9791 19.2411 16.0527 19.3231 16.1052C19.3917 16.1442 19.4691 16.165 19.5479 16.1659C19.6603 16.1644 19.7704 16.1334 19.8671 16.076L21.7102 15.0173C21.8011 14.979 21.8787 14.9148 21.9332 14.8326C21.9878 14.7504 22.0168 14.654 22.0168 14.5554C22.0168 14.4568 21.9878 14.3603 21.9332 14.2782C21.8787 14.196 21.8011 14.1318 21.7102 14.0935H21.7192Z\"\r\n fill={glyphOnly ? \"currentColor\" : \"white\"}\r\n />\r\n </svg>\r\n );\r\n}\r\n","const STYLE_ID = \"dadan-record-btn-styles\";\r\n\r\nconst CSS = `\r\n.dadan-record-btn{\r\n --dadan-record-btn-bg: var(--dadan-sdk-btn-bg, #4A3CFA);\r\n --dadan-record-btn-bg-hover: var(--dadan-sdk-btn-bg-hover, #3527E0);\r\n --dadan-record-btn-fg: var(--dadan-sdk-btn-fg, #fff);\r\n --dadan-record-btn-radius: var(--dadan-sdk-btn-radius, 12px);\r\n --dadan-record-btn-shadow: var(--dadan-sdk-btn-shadow, 0 6px 16px rgba(74,60,250,.35));\r\n --dadan-record-btn-shadow-hover: var(--dadan-sdk-btn-shadow-hover, 0 10px 22px rgba(74,60,250,.42));\r\n display:inline-flex;\r\n align-items:center;\r\n justify-content:center;\r\n width:44px;\r\n height:44px;\r\n padding:0;\r\n border:none;\r\n border-radius:var(--dadan-record-btn-radius);\r\n background:var(--dadan-record-btn-bg);\r\n color:var(--dadan-record-btn-fg);\r\n cursor:pointer;\r\n box-sizing:border-box;\r\n box-shadow:var(--dadan-record-btn-shadow);\r\n transition:background-color .15s ease,transform .15s ease,box-shadow .15s ease;\r\n}\r\n.dadan-record-btn:hover:not(:disabled){\r\n background:var(--dadan-record-btn-bg-hover);\r\n transform:translateY(-1px);\r\n box-shadow:var(--dadan-record-btn-shadow-hover);\r\n}\r\n.dadan-record-btn:active:not(:disabled){transform:translateY(0)}\r\n.dadan-record-btn:disabled{opacity:.45;cursor:not-allowed;box-shadow:none}\r\n.dadan-record-btn__mark{width:26px;height:26px;flex-shrink:0;display:block;color:currentColor}\r\n`;\r\n\r\nexport function injectDadanRecordButtonStyles(): void {\r\n if (typeof document === \"undefined\") return;\r\n if (document.getElementById(STYLE_ID)) return;\r\n const el = document.createElement(\"style\");\r\n el.id = STYLE_ID;\r\n el.textContent = CSS;\r\n document.head.appendChild(el);\r\n}\r\n"],"mappings":"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","names":["import_record_sdk_ui","import_embed","import_jsx_runtime"]}
package/dist/index.d.cts CHANGED
@@ -2,7 +2,7 @@ import * as react from 'react';
2
2
  import { ButtonHTMLAttributes, ReactNode } from 'react';
3
3
  import * as _dadan_mvp_record_sdk from '@dadan-mvp/record-sdk';
4
4
  import { CreateInstanceArgs, DadanVideo } from '@dadan-mvp/record-sdk-ui';
5
- export { CreateInstanceArgs, DadanVideo, RecorderHost, RecordingMode, SDKResult, SdkBackdrop, StudioSession, createInstance, createRecorder, defineDadanRecorder, isSupported } from '@dadan-mvp/record-sdk-ui';
5
+ export { CreateInstanceArgs, DadanVideo, RecorderHost, RecordingMode, SDKResult, SdkBackdrop, SdkCountdownProps, SdkCountdownRenderer, StudioSession, createInstance, createRecorder, defineDadanRecorder, isSupported } from '@dadan-mvp/record-sdk-ui';
6
6
  export { oembed } from '@dadan-mvp/embed';
7
7
 
8
8
  /** Dadan logo mark — full badge or white glyph for purple buttons. */
package/dist/index.d.ts CHANGED
@@ -2,7 +2,7 @@ import * as react from 'react';
2
2
  import { ButtonHTMLAttributes, ReactNode } from 'react';
3
3
  import * as _dadan_mvp_record_sdk from '@dadan-mvp/record-sdk';
4
4
  import { CreateInstanceArgs, DadanVideo } from '@dadan-mvp/record-sdk-ui';
5
- export { CreateInstanceArgs, DadanVideo, RecorderHost, RecordingMode, SDKResult, SdkBackdrop, StudioSession, createInstance, createRecorder, defineDadanRecorder, isSupported } from '@dadan-mvp/record-sdk-ui';
5
+ export { CreateInstanceArgs, DadanVideo, RecorderHost, RecordingMode, SDKResult, SdkBackdrop, SdkCountdownProps, SdkCountdownRenderer, StudioSession, createInstance, createRecorder, defineDadanRecorder, isSupported } from '@dadan-mvp/record-sdk-ui';
6
6
  export { oembed } from '@dadan-mvp/embed';
7
7
 
8
8
  /** Dadan logo mark — full badge or white glyph for purple buttons. */
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.tsx","../src/DadanMark.tsx","../src/injectButtonStyles.ts"],"sourcesContent":["import { oembed } from \"@dadan-mvp/embed\";\r\nimport {\r\n createInstance,\r\n isSupported,\r\n type CreateInstanceArgs,\r\n type DadanVideo,\r\n type SDKResult,\r\n} from \"@dadan-mvp/record-sdk-ui\";\r\nimport {\r\n useCallback,\r\n useEffect,\r\n useRef,\r\n useState,\r\n type ButtonHTMLAttributes,\r\n type ReactNode,\r\n} from \"react\";\r\nimport { DadanMark } from \"./DadanMark\";\r\nimport { injectDadanRecordButtonStyles } from \"./injectButtonStyles\";\r\n\r\nexport {\r\n createInstance,\r\n createRecorder,\r\n isSupported,\r\n StudioSession,\r\n RecorderHost,\r\n defineDadanRecorder,\r\n type CreateInstanceArgs,\r\n type DadanVideo,\r\n type SdkBackdrop,\r\n type SDKResult,\r\n type RecordingMode,\r\n} from \"@dadan-mvp/record-sdk-ui\";\r\nexport { oembed } from \"@dadan-mvp/embed\";\r\nexport { DadanMark } from \"./DadanMark\";\r\n\r\nexport function useDadanRecorder(args: CreateInstanceArgs) {\r\n const [ready, setReady] = useState(false);\r\n const [supported, setSupported] = useState(true);\r\n const [supportError, setSupportError] = useState<string | undefined>();\r\n const [lastVideo, setLastVideo] = useState<DadanVideo | undefined>();\r\n const [embedHtml, setEmbedHtml] = useState<string | undefined>();\r\n const instanceRef = useRef<SDKResult | null>(null);\r\n\r\n useEffect(() => {\r\n let cancelled = false;\r\n (async () => {\r\n const support = await isSupported();\r\n if (cancelled) return;\r\n setSupported(support.supported);\r\n setSupportError(support.error);\r\n if (!support.supported) return;\r\n const instance = await createInstance(args);\r\n if (cancelled) {\r\n instance.teardown();\r\n return;\r\n }\r\n instanceRef.current = instance;\r\n const button = instance.configureButton();\r\n button.on(\"insert-click\", async (video) => {\r\n setLastVideo(video);\r\n try {\r\n const { html } = await oembed(video.sharedUrl, {\r\n width: 640,\r\n fallback: true,\r\n });\r\n setEmbedHtml(html);\r\n } catch {\r\n setEmbedHtml(undefined);\r\n }\r\n });\r\n setReady(true);\r\n })();\r\n return () => {\r\n cancelled = true;\r\n instanceRef.current?.teardown();\r\n instanceRef.current = null;\r\n setReady(false);\r\n };\r\n }, [args.mode, args.publicAppId, args.uploadToken, args.jws, args.apiBase]);\r\n\r\n return {\r\n ready,\r\n supported,\r\n supportError,\r\n lastVideo,\r\n embedHtml,\r\n open: useCallback(() => instanceRef.current?.open(), []),\r\n close: useCallback(() => instanceRef.current?.close(), []),\r\n instance: instanceRef.current,\r\n };\r\n}\r\n\r\nexport interface DadanRecordButtonProps\r\n extends ButtonHTMLAttributes<HTMLButtonElement> {\r\n sdk: CreateInstanceArgs;\r\n children?: ReactNode;\r\n label?: string;\r\n onInsert?: (video: DadanVideo) => void;\r\n}\r\n\r\nexport function DadanRecordButton({\r\n sdk,\r\n children,\r\n label = \"Record with Dadan\",\r\n onInsert,\r\n disabled,\r\n className,\r\n ...rest\r\n}: DadanRecordButtonProps) {\r\n const buttonEl = useRef<HTMLButtonElement>(null);\r\n const instanceRef = useRef<SDKResult | null>(null);\r\n const [supported, setSupported] = useState(true);\r\n const [supportError, setSupportError] = useState<string | undefined>();\r\n const onInsertRef = useRef(onInsert);\r\n onInsertRef.current = onInsert;\r\n\r\n useEffect(() => {\r\n injectDadanRecordButtonStyles();\r\n }, []);\r\n\r\n useEffect(() => {\r\n let cancelled = false;\r\n (async () => {\r\n const support = await isSupported();\r\n if (cancelled) return;\r\n setSupported(support.supported);\r\n setSupportError(support.error);\r\n if (!support.supported || !buttonEl.current) return;\r\n const instance = await createInstance(sdk);\r\n if (cancelled) {\r\n instance.teardown();\r\n return;\r\n }\r\n instanceRef.current = instance;\r\n instance\r\n .configureButton({ element: buttonEl.current })\r\n .on(\"insert-click\", (video) => onInsertRef.current?.(video));\r\n })();\r\n return () => {\r\n cancelled = true;\r\n instanceRef.current?.teardown();\r\n instanceRef.current = null;\r\n };\r\n }, [sdk.mode, sdk.publicAppId, sdk.uploadToken, sdk.jws, sdk.apiBase]);\r\n\r\n const classes = [\"dadan-record-btn\", className].filter(Boolean).join(\" \");\r\n\r\n return (\r\n <button\r\n ref={buttonEl}\r\n type=\"button\"\r\n className={classes}\r\n disabled={disabled || !supported}\r\n title={supportError || label}\r\n aria-label={label}\r\n {...rest}\r\n >\r\n {children ?? (\r\n <DadanMark className=\"dadan-record-btn__mark\" glyphOnly />\r\n )}\r\n </button>\r\n );\r\n}\r\n\r\n/** Full in-page recorder surface (always mounted host; open via props or ref). */\r\nexport function DadanRecorder({\r\n sdk,\r\n open,\r\n onInsert,\r\n className,\r\n}: {\r\n sdk: CreateInstanceArgs;\r\n open?: boolean;\r\n onInsert?: (video: DadanVideo) => void;\r\n className?: string;\r\n}) {\r\n const { instance, ready } = useDadanRecorder(sdk);\r\n const onInsertRef = useRef(onInsert);\r\n onInsertRef.current = onInsert;\r\n\r\n useEffect(() => {\r\n if (!instance) return;\r\n const handler = (v: DadanVideo) => {\r\n onInsertRef.current?.(v);\r\n };\r\n const button = instance.configureButton();\r\n button.on(\"insert-click\", handler);\r\n return () => button.off(\"insert-click\", handler);\r\n }, [instance]);\r\n\r\n useEffect(() => {\r\n if (!ready || !instance) return;\r\n if (open) instance.open();\r\n else instance.close();\r\n }, [open, ready, instance]);\r\n\r\n return className ? <div className={className} data-dadan-recorder=\"\" /> : null;\r\n}\r\n\r\nexport function DadanEmbed({\r\n sharedUrl,\r\n width = 640,\r\n className,\r\n}: {\r\n sharedUrl: string;\r\n width?: number;\r\n className?: string;\r\n}) {\r\n const [html, setHtml] = useState(\"\");\r\n useEffect(() => {\r\n let cancelled = false;\r\n oembed(sharedUrl, { width, fallback: true }).then((res) => {\r\n if (!cancelled) setHtml(res.html);\r\n });\r\n return () => {\r\n cancelled = true;\r\n };\r\n }, [sharedUrl, width]);\r\n if (!html) return null;\r\n return (\r\n <div className={className} dangerouslySetInnerHTML={{ __html: html }} />\r\n );\r\n}\r\n","/** Dadan logo mark — full badge or white glyph for purple buttons. */\r\nexport function DadanMark({\r\n className,\r\n glyphOnly = false,\r\n}: {\r\n className?: string;\r\n /** White paths only (for Dadan purple button backgrounds). */\r\n glyphOnly?: boolean;\r\n}) {\r\n return (\r\n <svg\r\n className={className}\r\n width=\"28\"\r\n height=\"28\"\r\n viewBox=\"0 0 36 36\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n aria-hidden\r\n >\r\n {!glyphOnly && <rect width=\"36\" height=\"36\" rx=\"10\" fill=\"#4A3CFA\" />}\r\n <path\r\n d=\"M28.3838 22.7653C28.1557 22.7658 27.937 22.8567 27.7757 23.0181C27.6144 23.1794 27.5235 23.398 27.5229 23.6261V24.4084C27.5229 24.6361 27.4324 24.8545 27.2714 25.0155C27.1104 25.1765 26.892 25.267 26.6643 25.267C26.4366 25.267 26.2181 25.1765 26.0571 25.0155C25.8961 24.8545 25.8056 24.6361 25.8056 24.4084V14.5542C25.8056 13.2361 25.3369 11.961 24.4831 10.9567C23.6294 9.95245 22.4463 9.28455 21.1453 9.07242C19.8444 8.86028 18.5104 9.11772 17.3819 9.79873C16.2533 10.4797 15.4037 11.5399 14.985 12.7898C14.0395 12.6946 13.0846 12.7986 12.1818 13.095C11.279 13.3914 10.4483 13.8735 9.74313 14.5105C9.03799 15.1474 8.47409 15.925 8.08775 16.7932C7.70141 17.6613 7.50119 18.6008 7.5 19.551V26.1189C7.50059 26.347 7.59149 26.5656 7.7528 26.727C7.91412 26.8883 8.13275 26.9792 8.36089 26.9798H20.247C20.4751 26.9792 20.6937 26.8883 20.855 26.727C21.0164 26.5656 21.1073 26.347 21.1078 26.1189V19.551C21.1078 19.4746 21.1078 19.3959 21.1078 19.3262C21.1078 19.2992 21.1078 19.2723 21.1078 19.2453C21.1076 19.1316 21.0849 19.0192 21.0411 18.9143C20.9974 18.8094 20.9334 18.7142 20.8528 18.634C20.7722 18.5539 20.6767 18.4904 20.5716 18.4472C20.4665 18.4039 20.3539 18.3819 20.2402 18.3821C19.4851 18.379 18.7479 18.1523 18.1216 17.7305C17.4953 17.3088 17.008 16.7109 16.7212 16.0124C16.4344 15.3139 16.3609 14.5461 16.5101 13.8059C16.6594 13.0657 17.0245 12.3863 17.5595 11.8535C18.0946 11.3207 18.7754 10.9583 19.5162 10.8121C20.2571 10.666 21.0245 10.7425 21.7219 11.0322C22.4192 11.3219 23.015 11.8117 23.4342 12.4397C23.8534 13.0677 24.0771 13.8059 24.0771 14.561V24.4151C24.0771 25.1007 24.3495 25.7581 24.8342 26.2429C25.319 26.7277 25.9765 27 26.662 27C27.3476 27 28.0051 26.7277 28.4898 26.2429C28.9746 25.7581 29.2469 25.1007 29.2469 24.4151V23.6329C29.2475 23.5192 29.2256 23.4064 29.1825 23.3012C29.1394 23.196 29.0759 23.1003 28.9957 23.0196C28.9155 22.939 28.8202 22.875 28.7151 22.8314C28.6101 22.7877 28.4975 22.7652 28.3838 22.7653ZM14.3084 21.5133C14.0803 21.5138 13.8617 21.6047 13.7003 21.7661C13.539 21.9274 13.4481 22.146 13.4475 22.3741V25.267H9.22402V19.551C9.22521 18.2039 9.76072 16.9122 10.7131 15.9595C11.6654 15.0067 12.9568 14.4706 14.3039 14.4688C14.4343 14.4688 14.5647 14.4688 14.695 14.4846V14.5452C14.6922 15.8715 15.1644 17.1549 16.0262 18.1631C16.888 19.1712 18.0823 19.8374 19.3928 20.041V25.267H15.1671V22.3741C15.1665 22.1456 15.0753 21.9266 14.9135 21.7653C14.7517 21.6039 14.5325 21.5133 14.3039 21.5133H14.3084Z\"\r\n fill={glyphOnly ? \"currentColor\" : \"white\"}\r\n />\r\n <path\r\n d=\"M21.7192 14.0935L19.8761 13.0348C19.7968 12.9763 19.7021 12.9423 19.6038 12.9369C19.5054 12.9315 19.4076 12.955 19.3223 13.0044C19.2371 13.0538 19.1682 13.127 19.124 13.2151C19.0798 13.3032 19.0623 13.4022 19.0736 13.5001V15.6107C19.0671 15.7079 19.0868 15.8051 19.1307 15.8921C19.1746 15.9791 19.2411 16.0527 19.3231 16.1052C19.3917 16.1442 19.4691 16.165 19.5479 16.1659C19.6603 16.1644 19.7704 16.1334 19.8671 16.076L21.7102 15.0173C21.8011 14.979 21.8787 14.9148 21.9332 14.8326C21.9878 14.7504 22.0168 14.654 22.0168 14.5554C22.0168 14.4568 21.9878 14.3603 21.9332 14.2782C21.8787 14.196 21.8011 14.1318 21.7102 14.0935H21.7192Z\"\r\n fill={glyphOnly ? \"currentColor\" : \"white\"}\r\n />\r\n </svg>\r\n );\r\n}\r\n","const STYLE_ID = \"dadan-record-btn-styles\";\r\n\r\nconst CSS = `\r\n.dadan-record-btn{\r\n --dadan-record-btn-bg: var(--dadan-sdk-btn-bg, #4A3CFA);\r\n --dadan-record-btn-bg-hover: var(--dadan-sdk-btn-bg-hover, #3527E0);\r\n --dadan-record-btn-fg: var(--dadan-sdk-btn-fg, #fff);\r\n --dadan-record-btn-radius: var(--dadan-sdk-btn-radius, 12px);\r\n --dadan-record-btn-shadow: var(--dadan-sdk-btn-shadow, 0 6px 16px rgba(74,60,250,.35));\r\n --dadan-record-btn-shadow-hover: var(--dadan-sdk-btn-shadow-hover, 0 10px 22px rgba(74,60,250,.42));\r\n display:inline-flex;\r\n align-items:center;\r\n justify-content:center;\r\n width:44px;\r\n height:44px;\r\n padding:0;\r\n border:none;\r\n border-radius:var(--dadan-record-btn-radius);\r\n background:var(--dadan-record-btn-bg);\r\n color:var(--dadan-record-btn-fg);\r\n cursor:pointer;\r\n box-sizing:border-box;\r\n box-shadow:var(--dadan-record-btn-shadow);\r\n transition:background-color .15s ease,transform .15s ease,box-shadow .15s ease;\r\n}\r\n.dadan-record-btn:hover:not(:disabled){\r\n background:var(--dadan-record-btn-bg-hover);\r\n transform:translateY(-1px);\r\n box-shadow:var(--dadan-record-btn-shadow-hover);\r\n}\r\n.dadan-record-btn:active:not(:disabled){transform:translateY(0)}\r\n.dadan-record-btn:disabled{opacity:.45;cursor:not-allowed;box-shadow:none}\r\n.dadan-record-btn__mark{width:26px;height:26px;flex-shrink:0;display:block;color:currentColor}\r\n`;\r\n\r\nexport function injectDadanRecordButtonStyles(): void {\r\n if (typeof document === \"undefined\") return;\r\n if (document.getElementById(STYLE_ID)) return;\r\n const el = document.createElement(\"style\");\r\n el.id = STYLE_ID;\r\n el.textContent = CSS;\r\n document.head.appendChild(el);\r\n}\r\n"],"mappings":"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","names":["createInstance","isSupported","oembed","jsx"]}
1
+ {"version":3,"sources":["../src/index.tsx","../src/DadanMark.tsx","../src/injectButtonStyles.ts"],"sourcesContent":["import { oembed } from \"@dadan-mvp/embed\";\r\nimport {\r\n createInstance,\r\n isSupported,\r\n type CreateInstanceArgs,\r\n type DadanVideo,\r\n type SDKResult,\r\n} from \"@dadan-mvp/record-sdk-ui\";\r\nimport {\r\n useCallback,\r\n useEffect,\r\n useRef,\r\n useState,\r\n type ButtonHTMLAttributes,\r\n type ReactNode,\r\n} from \"react\";\r\nimport { DadanMark } from \"./DadanMark\";\r\nimport { injectDadanRecordButtonStyles } from \"./injectButtonStyles\";\r\n\r\nexport {\r\n createInstance,\r\n createRecorder,\r\n isSupported,\r\n StudioSession,\r\n RecorderHost,\r\n defineDadanRecorder,\r\n type CreateInstanceArgs,\r\n type DadanVideo,\r\n type SdkBackdrop,\r\n type SdkCountdownProps,\r\n type SdkCountdownRenderer,\r\n type SDKResult,\r\n type RecordingMode,\r\n} from \"@dadan-mvp/record-sdk-ui\";\r\nexport { oembed } from \"@dadan-mvp/embed\";\r\nexport { DadanMark } from \"./DadanMark\";\r\n\r\nexport function useDadanRecorder(args: CreateInstanceArgs) {\r\n const [ready, setReady] = useState(false);\r\n const [supported, setSupported] = useState(true);\r\n const [supportError, setSupportError] = useState<string | undefined>();\r\n const [lastVideo, setLastVideo] = useState<DadanVideo | undefined>();\r\n const [embedHtml, setEmbedHtml] = useState<string | undefined>();\r\n const instanceRef = useRef<SDKResult | null>(null);\r\n\r\n useEffect(() => {\r\n let cancelled = false;\r\n (async () => {\r\n const support = await isSupported();\r\n if (cancelled) return;\r\n setSupported(support.supported);\r\n setSupportError(support.error);\r\n if (!support.supported) return;\r\n const instance = await createInstance(args);\r\n if (cancelled) {\r\n instance.teardown();\r\n return;\r\n }\r\n instanceRef.current = instance;\r\n const button = instance.configureButton();\r\n button.on(\"insert-click\", async (video) => {\r\n setLastVideo(video);\r\n try {\r\n const { html } = await oembed(video.sharedUrl, {\r\n width: 640,\r\n fallback: true,\r\n });\r\n setEmbedHtml(html);\r\n } catch {\r\n setEmbedHtml(undefined);\r\n }\r\n });\r\n setReady(true);\r\n })();\r\n return () => {\r\n cancelled = true;\r\n instanceRef.current?.teardown();\r\n instanceRef.current = null;\r\n setReady(false);\r\n };\r\n }, [args.mode, args.publicAppId, args.uploadToken, args.jws, args.apiBase]);\r\n\r\n return {\r\n ready,\r\n supported,\r\n supportError,\r\n lastVideo,\r\n embedHtml,\r\n open: useCallback(() => instanceRef.current?.open(), []),\r\n close: useCallback(() => instanceRef.current?.close(), []),\r\n instance: instanceRef.current,\r\n };\r\n}\r\n\r\nexport interface DadanRecordButtonProps\r\n extends ButtonHTMLAttributes<HTMLButtonElement> {\r\n sdk: CreateInstanceArgs;\r\n children?: ReactNode;\r\n label?: string;\r\n onInsert?: (video: DadanVideo) => void;\r\n}\r\n\r\nexport function DadanRecordButton({\r\n sdk,\r\n children,\r\n label = \"Record with Dadan\",\r\n onInsert,\r\n disabled,\r\n className,\r\n ...rest\r\n}: DadanRecordButtonProps) {\r\n const buttonEl = useRef<HTMLButtonElement>(null);\r\n const instanceRef = useRef<SDKResult | null>(null);\r\n const [supported, setSupported] = useState(true);\r\n const [supportError, setSupportError] = useState<string | undefined>();\r\n const onInsertRef = useRef(onInsert);\r\n onInsertRef.current = onInsert;\r\n\r\n useEffect(() => {\r\n injectDadanRecordButtonStyles();\r\n }, []);\r\n\r\n useEffect(() => {\r\n let cancelled = false;\r\n (async () => {\r\n const support = await isSupported();\r\n if (cancelled) return;\r\n setSupported(support.supported);\r\n setSupportError(support.error);\r\n if (!support.supported || !buttonEl.current) return;\r\n const instance = await createInstance(sdk);\r\n if (cancelled) {\r\n instance.teardown();\r\n return;\r\n }\r\n instanceRef.current = instance;\r\n instance\r\n .configureButton({ element: buttonEl.current })\r\n .on(\"insert-click\", (video) => onInsertRef.current?.(video));\r\n })();\r\n return () => {\r\n cancelled = true;\r\n instanceRef.current?.teardown();\r\n instanceRef.current = null;\r\n };\r\n }, [sdk.mode, sdk.publicAppId, sdk.uploadToken, sdk.jws, sdk.apiBase]);\r\n\r\n const classes = [\"dadan-record-btn\", className].filter(Boolean).join(\" \");\r\n\r\n return (\r\n <button\r\n ref={buttonEl}\r\n type=\"button\"\r\n className={classes}\r\n disabled={disabled || !supported}\r\n title={supportError || label}\r\n aria-label={label}\r\n {...rest}\r\n >\r\n {children ?? (\r\n <DadanMark className=\"dadan-record-btn__mark\" glyphOnly />\r\n )}\r\n </button>\r\n );\r\n}\r\n\r\n/** Full in-page recorder surface (always mounted host; open via props or ref). */\r\nexport function DadanRecorder({\r\n sdk,\r\n open,\r\n onInsert,\r\n className,\r\n}: {\r\n sdk: CreateInstanceArgs;\r\n open?: boolean;\r\n onInsert?: (video: DadanVideo) => void;\r\n className?: string;\r\n}) {\r\n const { instance, ready } = useDadanRecorder(sdk);\r\n const onInsertRef = useRef(onInsert);\r\n onInsertRef.current = onInsert;\r\n\r\n useEffect(() => {\r\n if (!instance) return;\r\n const handler = (v: DadanVideo) => {\r\n onInsertRef.current?.(v);\r\n };\r\n const button = instance.configureButton();\r\n button.on(\"insert-click\", handler);\r\n return () => button.off(\"insert-click\", handler);\r\n }, [instance]);\r\n\r\n useEffect(() => {\r\n if (!ready || !instance) return;\r\n if (open) instance.open();\r\n else instance.close();\r\n }, [open, ready, instance]);\r\n\r\n return className ? <div className={className} data-dadan-recorder=\"\" /> : null;\r\n}\r\n\r\nexport function DadanEmbed({\r\n sharedUrl,\r\n width = 640,\r\n className,\r\n}: {\r\n sharedUrl: string;\r\n width?: number;\r\n className?: string;\r\n}) {\r\n const [html, setHtml] = useState(\"\");\r\n useEffect(() => {\r\n let cancelled = false;\r\n oembed(sharedUrl, { width, fallback: true }).then((res) => {\r\n if (!cancelled) setHtml(res.html);\r\n });\r\n return () => {\r\n cancelled = true;\r\n };\r\n }, [sharedUrl, width]);\r\n if (!html) return null;\r\n return (\r\n <div className={className} dangerouslySetInnerHTML={{ __html: html }} />\r\n );\r\n}\r\n","/** Dadan logo mark — full badge or white glyph for purple buttons. */\r\nexport function DadanMark({\r\n className,\r\n glyphOnly = false,\r\n}: {\r\n className?: string;\r\n /** White paths only (for Dadan purple button backgrounds). */\r\n glyphOnly?: boolean;\r\n}) {\r\n return (\r\n <svg\r\n className={className}\r\n width=\"28\"\r\n height=\"28\"\r\n viewBox=\"0 0 36 36\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n aria-hidden\r\n >\r\n {!glyphOnly && <rect width=\"36\" height=\"36\" rx=\"10\" fill=\"#4A3CFA\" />}\r\n <path\r\n d=\"M28.3838 22.7653C28.1557 22.7658 27.937 22.8567 27.7757 23.0181C27.6144 23.1794 27.5235 23.398 27.5229 23.6261V24.4084C27.5229 24.6361 27.4324 24.8545 27.2714 25.0155C27.1104 25.1765 26.892 25.267 26.6643 25.267C26.4366 25.267 26.2181 25.1765 26.0571 25.0155C25.8961 24.8545 25.8056 24.6361 25.8056 24.4084V14.5542C25.8056 13.2361 25.3369 11.961 24.4831 10.9567C23.6294 9.95245 22.4463 9.28455 21.1453 9.07242C19.8444 8.86028 18.5104 9.11772 17.3819 9.79873C16.2533 10.4797 15.4037 11.5399 14.985 12.7898C14.0395 12.6946 13.0846 12.7986 12.1818 13.095C11.279 13.3914 10.4483 13.8735 9.74313 14.5105C9.03799 15.1474 8.47409 15.925 8.08775 16.7932C7.70141 17.6613 7.50119 18.6008 7.5 19.551V26.1189C7.50059 26.347 7.59149 26.5656 7.7528 26.727C7.91412 26.8883 8.13275 26.9792 8.36089 26.9798H20.247C20.4751 26.9792 20.6937 26.8883 20.855 26.727C21.0164 26.5656 21.1073 26.347 21.1078 26.1189V19.551C21.1078 19.4746 21.1078 19.3959 21.1078 19.3262C21.1078 19.2992 21.1078 19.2723 21.1078 19.2453C21.1076 19.1316 21.0849 19.0192 21.0411 18.9143C20.9974 18.8094 20.9334 18.7142 20.8528 18.634C20.7722 18.5539 20.6767 18.4904 20.5716 18.4472C20.4665 18.4039 20.3539 18.3819 20.2402 18.3821C19.4851 18.379 18.7479 18.1523 18.1216 17.7305C17.4953 17.3088 17.008 16.7109 16.7212 16.0124C16.4344 15.3139 16.3609 14.5461 16.5101 13.8059C16.6594 13.0657 17.0245 12.3863 17.5595 11.8535C18.0946 11.3207 18.7754 10.9583 19.5162 10.8121C20.2571 10.666 21.0245 10.7425 21.7219 11.0322C22.4192 11.3219 23.015 11.8117 23.4342 12.4397C23.8534 13.0677 24.0771 13.8059 24.0771 14.561V24.4151C24.0771 25.1007 24.3495 25.7581 24.8342 26.2429C25.319 26.7277 25.9765 27 26.662 27C27.3476 27 28.0051 26.7277 28.4898 26.2429C28.9746 25.7581 29.2469 25.1007 29.2469 24.4151V23.6329C29.2475 23.5192 29.2256 23.4064 29.1825 23.3012C29.1394 23.196 29.0759 23.1003 28.9957 23.0196C28.9155 22.939 28.8202 22.875 28.7151 22.8314C28.6101 22.7877 28.4975 22.7652 28.3838 22.7653ZM14.3084 21.5133C14.0803 21.5138 13.8617 21.6047 13.7003 21.7661C13.539 21.9274 13.4481 22.146 13.4475 22.3741V25.267H9.22402V19.551C9.22521 18.2039 9.76072 16.9122 10.7131 15.9595C11.6654 15.0067 12.9568 14.4706 14.3039 14.4688C14.4343 14.4688 14.5647 14.4688 14.695 14.4846V14.5452C14.6922 15.8715 15.1644 17.1549 16.0262 18.1631C16.888 19.1712 18.0823 19.8374 19.3928 20.041V25.267H15.1671V22.3741C15.1665 22.1456 15.0753 21.9266 14.9135 21.7653C14.7517 21.6039 14.5325 21.5133 14.3039 21.5133H14.3084Z\"\r\n fill={glyphOnly ? \"currentColor\" : \"white\"}\r\n />\r\n <path\r\n d=\"M21.7192 14.0935L19.8761 13.0348C19.7968 12.9763 19.7021 12.9423 19.6038 12.9369C19.5054 12.9315 19.4076 12.955 19.3223 13.0044C19.2371 13.0538 19.1682 13.127 19.124 13.2151C19.0798 13.3032 19.0623 13.4022 19.0736 13.5001V15.6107C19.0671 15.7079 19.0868 15.8051 19.1307 15.8921C19.1746 15.9791 19.2411 16.0527 19.3231 16.1052C19.3917 16.1442 19.4691 16.165 19.5479 16.1659C19.6603 16.1644 19.7704 16.1334 19.8671 16.076L21.7102 15.0173C21.8011 14.979 21.8787 14.9148 21.9332 14.8326C21.9878 14.7504 22.0168 14.654 22.0168 14.5554C22.0168 14.4568 21.9878 14.3603 21.9332 14.2782C21.8787 14.196 21.8011 14.1318 21.7102 14.0935H21.7192Z\"\r\n fill={glyphOnly ? \"currentColor\" : \"white\"}\r\n />\r\n </svg>\r\n );\r\n}\r\n","const STYLE_ID = \"dadan-record-btn-styles\";\r\n\r\nconst CSS = `\r\n.dadan-record-btn{\r\n --dadan-record-btn-bg: var(--dadan-sdk-btn-bg, #4A3CFA);\r\n --dadan-record-btn-bg-hover: var(--dadan-sdk-btn-bg-hover, #3527E0);\r\n --dadan-record-btn-fg: var(--dadan-sdk-btn-fg, #fff);\r\n --dadan-record-btn-radius: var(--dadan-sdk-btn-radius, 12px);\r\n --dadan-record-btn-shadow: var(--dadan-sdk-btn-shadow, 0 6px 16px rgba(74,60,250,.35));\r\n --dadan-record-btn-shadow-hover: var(--dadan-sdk-btn-shadow-hover, 0 10px 22px rgba(74,60,250,.42));\r\n display:inline-flex;\r\n align-items:center;\r\n justify-content:center;\r\n width:44px;\r\n height:44px;\r\n padding:0;\r\n border:none;\r\n border-radius:var(--dadan-record-btn-radius);\r\n background:var(--dadan-record-btn-bg);\r\n color:var(--dadan-record-btn-fg);\r\n cursor:pointer;\r\n box-sizing:border-box;\r\n box-shadow:var(--dadan-record-btn-shadow);\r\n transition:background-color .15s ease,transform .15s ease,box-shadow .15s ease;\r\n}\r\n.dadan-record-btn:hover:not(:disabled){\r\n background:var(--dadan-record-btn-bg-hover);\r\n transform:translateY(-1px);\r\n box-shadow:var(--dadan-record-btn-shadow-hover);\r\n}\r\n.dadan-record-btn:active:not(:disabled){transform:translateY(0)}\r\n.dadan-record-btn:disabled{opacity:.45;cursor:not-allowed;box-shadow:none}\r\n.dadan-record-btn__mark{width:26px;height:26px;flex-shrink:0;display:block;color:currentColor}\r\n`;\r\n\r\nexport function injectDadanRecordButtonStyles(): void {\r\n if (typeof document === \"undefined\") return;\r\n if (document.getElementById(STYLE_ID)) return;\r\n const el = document.createElement(\"style\");\r\n el.id = STYLE_ID;\r\n el.textContent = CSS;\r\n document.head.appendChild(el);\r\n}\r\n"],"mappings":"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","names":["createInstance","isSupported","oembed","jsx"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dadan-mvp/record-sdk-react",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "Dadan Record SDK React bindings (in-page UI)",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",
@@ -27,9 +27,9 @@
27
27
  "build": "tsup src/index.tsx --format esm,cjs --dts --sourcemap --clean --external react --external react-dom --external react/jsx-runtime"
28
28
  },
29
29
  "dependencies": {
30
- "@dadan-mvp/embed": "0.1.1",
31
- "@dadan-mvp/record-sdk": "0.1.1",
32
- "@dadan-mvp/record-sdk-ui": "0.1.1"
30
+ "@dadan-mvp/embed": "0.1.3",
31
+ "@dadan-mvp/record-sdk": "0.1.3",
32
+ "@dadan-mvp/record-sdk-ui": "0.1.3"
33
33
  },
34
34
  "peerDependencies": {
35
35
  "react": ">=17",