{"version":3,"file":"SmoothCornersFeature.mjs","sources":["../../../../../src/components/FeatureProvider/SmoothCornersFeature/SmoothCornersFeature.ts"],"sourcesContent":["// eslint-disable-next-line no-restricted-imports\nimport { type Feature, FeatureType } from '../FeatureProvider.types'\n\nimport { smoothCornersScript } from './smoothCornersScript'\n\n/**\n * @see {@link https://fetch.spec.whatwg.org/#requestcredentials}\n */\ntype RequestCredentials = 'omit' | 'same-origin' | 'include'\n\ntype WorkletOptions = {\n  credentials: RequestCredentials\n}\n\n/**\n * @see {@link https://html.spec.whatwg.org/multipage/worklets.html#worklets-worklet}\n */\ninterface Worklet {\n  addModule: (moduleURL: string, options?: WorkletOptions) => Promise<void>\n}\n\ndeclare global {\n  namespace CSS {\n    export const paintWorklet: Worklet\n  }\n}\n\n/**\n * 🚨 This is an experimental feature! It may not be suitable for use in production.\n *\n * Instead of CSS border-radius, Use *Superellipse* masking using the CSS Houdini API.\n * When enabled, the feature will be applied to components with the `smoothCorners` property set to `true`.\n */\nclass SmoothCornersFeature implements Feature {\n  readonly name = FeatureType.SmoothCorners\n\n  private globalObject: typeof globalThis | null = null\n\n  private activated: WeakMap<typeof globalThis, boolean> = new WeakMap([\n    [globalThis, false],\n  ])\n\n  private updateCurrentGlobalObject(globalObject: typeof globalThis) {\n    this.globalObject = globalObject\n  }\n\n  private isGlobalObjectIdentical(globalObject: typeof globalThis) {\n    return Object.is(this.globalObject, globalObject)\n  }\n\n  private supportCSSPaintWorklet(globalObject: typeof globalThis) {\n    return (\n      typeof globalObject.CSS !== 'undefined' &&\n      'paintWorklet' in globalObject.CSS\n    )\n  }\n\n  async activate(globalObject: typeof globalThis = globalThis) {\n    if (\n      !this.isGlobalObjectIdentical(globalObject) &&\n      this.supportCSSPaintWorklet(globalObject)\n    ) {\n      const workletURL = URL.createObjectURL(\n        new Blob([smoothCornersScript], { type: 'application/javascript' })\n      )\n\n      try {\n        await globalObject.CSS.paintWorklet.addModule(workletURL)\n        this.activated.set(globalObject, true)\n      } catch {\n        this.activated.set(globalObject, false)\n      }\n    }\n\n    this.updateCurrentGlobalObject(globalObject)\n\n    return this.activated.get(globalObject) as boolean\n  }\n}\n\nexport default new SmoothCornersFeature()\n"],"names":["SmoothCornersFeature","name","FeatureType","SmoothCorners","globalObject","activated","WeakMap","globalThis","updateCurrentGlobalObject","isGlobalObjectIdentical","Object","is","supportCSSPaintWorklet","CSS","activate","workletURL","URL","createObjectURL","Blob","smoothCornersScript","type","paintWorklet","addModule","set","get"],"mappings":";;;AAAA;;AAKA;AACA;AACA;;AAOA;AACA;AACA;;AAWA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,oBAAoB,CAAoB;EACnCC,IAAI,GAAA,CAAA,MAAGC,WAAW,CAACC,aAAa,GAAA;AAEjCC,EAAAA,YAAY,GAA6B,IAAI;EAE7CC,SAAS,GAAA,CAAA,MAAwC,IAAIC,OAAO,CAAC,CACnE,CAACC,UAAU,EAAE,KAAK,CAAC,CACpB,CAAC,GAAA;EAEMC,yBAAyBA,CAACJ,YAA+B,EAAE;IACjE,IAAI,CAACA,YAAY,GAAGA,YAAY;AAClC;EAEQK,uBAAuBA,CAACL,YAA+B,EAAE;IAC/D,OAAOM,MAAM,CAACC,EAAE,CAAC,IAAI,CAACP,YAAY,EAAEA,YAAY,CAAC;AACnD;EAEQQ,sBAAsBA,CAACR,YAA+B,EAAE;IAC9D,OACE,OAAOA,YAAY,CAACS,GAAG,KAAK,WAAW,IACvC,cAAc,IAAIT,YAAY,CAACS,GAAG;AAEtC;AAEA,EAAA,MAAMC,QAAQA,CAACV,YAA+B,GAAGG,UAAU,EAAE;AAC3D,IAAA,IACE,CAAC,IAAI,CAACE,uBAAuB,CAACL,YAAY,CAAC,IAC3C,IAAI,CAACQ,sBAAsB,CAACR,YAAY,CAAC,EACzC;AACA,MAAA,MAAMW,UAAU,GAAGC,GAAG,CAACC,eAAe,CACpC,IAAIC,IAAI,CAAC,CAACC,mBAAmB,CAAC,EAAE;AAAEC,QAAAA,IAAI,EAAE;AAAyB,OAAC,CACpE,CAAC;MAED,IAAI;QACF,MAAMhB,YAAY,CAACS,GAAG,CAACQ,YAAY,CAACC,SAAS,CAACP,UAAU,CAAC;QACzD,IAAI,CAACV,SAAS,CAACkB,GAAG,CAACnB,YAAY,EAAE,IAAI,CAAC;AACxC,OAAC,CAAC,MAAM;QACN,IAAI,CAACC,SAAS,CAACkB,GAAG,CAACnB,YAAY,EAAE,KAAK,CAAC;AACzC;AACF;AAEA,IAAA,IAAI,CAACI,yBAAyB,CAACJ,YAAY,CAAC;AAE5C,IAAA,OAAO,IAAI,CAACC,SAAS,CAACmB,GAAG,CAACpB,YAAY,CAAC;AACzC;AACF;AAEA,6BAAe,IAAIJ,oBAAoB,EAAE;;;;"}