@qaiddev/thumbs-embed 1.5.0 → 1.5.1

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.
package/README.md CHANGED
@@ -26,13 +26,21 @@ const feedback = new QaidEmbed({
26
26
 
27
27
  ```html
28
28
  <script
29
- src="https://unpkg.com/@qaiddev/thumbs-embed/dist/qaid.umd.cjs"
29
+ src="https://unpkg.com/@qaiddev/thumbs-embed/dist/embed.js"
30
30
  data-endpoint="https://qaid.dev/api/feedback"
31
31
  data-api-key="YOUR_API_KEY"
32
32
  ></script>
33
33
  ```
34
34
 
35
- The embed auto-initializes when it detects a `data-endpoint` attribute on its script tag.
35
+ `embed.js` is a tiny classic loader that works in every browser: it feature-detects
36
+ ES-module support and pulls in the right build automatically — the **progressive
37
+ loader** (`loader.js`, a small core with screenshot/video/annotation/targeting loading
38
+ on demand) on modern browsers, or the all-in-one UMD bundle (`qaid.umd.cjs`) on older
39
+ ones. The injected build auto-initializes when it detects a `data-endpoint` attribute.
40
+
41
+ > Prefer to skip the loader's feature-detect hop? Point straight at
42
+ > `dist/loader.js` with `type="module"` (modern browsers only), or
43
+ > `dist/qaid.umd.cjs` as a classic script (works everywhere, no code-splitting).
36
44
 
37
45
  ### JSON Config (Script Tag)
38
46
 
@@ -55,7 +63,7 @@ For complex configurations, use a separate JSON config element:
55
63
  }
56
64
  }
57
65
  </script>
58
- <script src="https://unpkg.com/@qaiddev/thumbs-embed/dist/qaid.umd.cjs"></script>
66
+ <script src="https://unpkg.com/@qaiddev/thumbs-embed/dist/embed.js"></script>
59
67
  ```
60
68
 
61
69
  ## How It Works
@@ -1,22 +1,25 @@
1
1
  /**
2
- * Single-tag auto-loader (`dist/auto.js`).
2
+ * Single-tag embed loader (`dist/embed.js`).
3
3
  *
4
4
  * A drop-in classic `<script>` that works in every browser. It feature-detects
5
- * ES-module support and injects the right entry, so the page author never has
5
+ * ES-module support and injects the right build, so the page author never has
6
6
  * to think about compatibility:
7
7
  *
8
8
  * - modern browsers → the progressive ESM loader (`loader.js`): a small core,
9
9
  * with screenshot / video / annotation / targeting loading on demand.
10
10
  * - older browsers → the all-in-one UMD bundle (`qaid.umd.cjs`).
11
11
  *
12
- * The injected entry auto-initializes from the `data-*` attributes copied
12
+ * The injected build initializes itself from the `data-*` attributes copied
13
13
  * across from this tag (or from a `<script type="application/json">` config
14
14
  * block already on the page), so exactly one embed is created either way.
15
15
  *
16
16
  * Usage:
17
- * <script src="https://unpkg.com/@qaiddev/thumbs-embed/dist/auto.js"
17
+ * <script src="https://unpkg.com/@qaiddev/thumbs-embed/dist/embed.js"
18
18
  * data-endpoint="/api/feedback"></script>
19
19
  *
20
+ * (Distinct from `loader.ts`/`loader.js`, the ESM-only progressive entry this
21
+ * one delegates to on modern browsers.)
22
+ *
20
23
  * IMPORTANT: this file must stay ES5-clean and dependency-free. It is the one
21
24
  * script that also runs on the legacy browsers we fall back for, so it can't
22
25
  * use syntax (arrow fns, const/let, template literals) they'd choke on before
package/dist/embed.js ADDED
@@ -0,0 +1,2 @@
1
+ (function(){"use strict";(function(){if(typeof document=="undefined")return;function o(){var s=document.currentScript;if(s&&s.src)return s;for(var c=document.getElementsByTagName("script"),r=c.length-1;r>=0;r--){var i=c[r].src||"";if(i.indexOf("thumbs-embed")!==-1&&/\/embed(\.min)?\.js(\?|#|$)/.test(i))return c[r]}return null}var t=o();if(!(!t||!t.src)){for(var d=t.src.substring(0,t.src.lastIndexOf("/")+1),f=("noModule"in HTMLScriptElement.prototype),e=document.createElement("script"),a=t.attributes,n=0;n<a.length;n++){var u=a[n];u.name.indexOf("data-")===0&&e.setAttribute(u.name,u.value)}f?(e.type="module",e.src=d+"loader.js"):(e.defer=!0,e.src=d+"qaid.umd.cjs"),(document.head||document.documentElement).appendChild(e)}})()})();
2
+ //# sourceMappingURL=embed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embed.js","sources":["../src/embed-loader.ts"],"sourcesContent":["/**\n * Single-tag embed loader (`dist/embed.js`).\n *\n * A drop-in classic `<script>` that works in every browser. It feature-detects\n * ES-module support and injects the right build, so the page author never has\n * to think about compatibility:\n *\n * - modern browsers → the progressive ESM loader (`loader.js`): a small core,\n * with screenshot / video / annotation / targeting loading on demand.\n * - older browsers → the all-in-one UMD bundle (`qaid.umd.cjs`).\n *\n * The injected build initializes itself from the `data-*` attributes copied\n * across from this tag (or from a `<script type=\"application/json\">` config\n * block already on the page), so exactly one embed is created either way.\n *\n * Usage:\n * <script src=\"https://unpkg.com/@qaiddev/thumbs-embed/dist/embed.js\"\n * data-endpoint=\"/api/feedback\"></script>\n *\n * (Distinct from `loader.ts`/`loader.js`, the ESM-only progressive entry this\n * one delegates to on modern browsers.)\n *\n * IMPORTANT: this file must stay ES5-clean and dependency-free. It is the one\n * script that also runs on the legacy browsers we fall back for, so it can't\n * use syntax (arrow fns, const/let, template literals) they'd choke on before\n * the fallback ever loads. Written with var/function on purpose.\n */\n\n(function () {\n if (typeof document === \"undefined\") return;\n\n // Locate this script tag: prefer document.currentScript (valid for a plain\n // classic script), else find the last <script> whose src looks like embed.js.\n function findSelf(): HTMLScriptElement | null {\n var cur = document.currentScript as HTMLScriptElement | null;\n if (cur && cur.src) return cur;\n var scripts = document.getElementsByTagName(\"script\");\n for (var i = scripts.length - 1; i >= 0; i--) {\n var src = scripts[i].src || \"\";\n if (src.indexOf(\"thumbs-embed\") !== -1 && /\\/embed(\\.min)?\\.js(\\?|#|$)/.test(src)) {\n return scripts[i];\n }\n }\n return null;\n }\n\n var self = findSelf();\n if (!self || !self.src) return;\n\n // Base = the directory that holds embed.js, e.g.\n // \"https://unpkg.com/@qaiddev/thumbs-embed/dist/\". loader.js's own relative\n // chunk imports then resolve against the same (CDN-versioned) base.\n var base = self.src.substring(0, self.src.lastIndexOf(\"/\") + 1);\n\n var supportsModules = \"noModule\" in HTMLScriptElement.prototype;\n\n var entry = document.createElement(\"script\");\n\n // Carry the config across so the injected build's auto-init sees it.\n var attrs = self.attributes;\n for (var j = 0; j < attrs.length; j++) {\n var a = attrs[j];\n if (a.name.indexOf(\"data-\") === 0) entry.setAttribute(a.name, a.value);\n }\n\n if (supportsModules) {\n entry.type = \"module\";\n entry.src = base + \"loader.js\";\n } else {\n // Classic bundle: defer so it runs after the document is parsed, matching\n // the module entry's deferred timing.\n entry.defer = true;\n entry.src = base + \"qaid.umd.cjs\";\n }\n\n (document.head || document.documentElement).appendChild(entry);\n})();\n"],"names":["findSelf","cur","scripts","i","src","self","base","supportsModules","entry","attrs","j","a"],"mappings":"0BA4BC,UAAY,CACX,GAAI,OAAO,UAAa,YAAa,OAIrC,SAASA,GAAqC,CAC5C,IAAIC,EAAM,SAAS,cACnB,GAAIA,GAAOA,EAAI,IAAK,OAAOA,EAE3B,QADIC,EAAU,SAAS,qBAAqB,QAAQ,EAC3CC,EAAID,EAAQ,OAAS,EAAGC,GAAK,EAAGA,IAAK,CAC5C,IAAIC,EAAMF,EAAQC,CAAC,EAAE,KAAO,GAC5B,GAAIC,EAAI,QAAQ,cAAc,IAAM,IAAM,8BAA8B,KAAKA,CAAG,EAC9E,OAAOF,EAAQC,CAAC,CAEpB,CACA,OAAO,IACT,CAEA,IAAIE,EAAOL,EAAA,EACX,GAAI,GAACK,GAAQ,CAACA,EAAK,KAanB,SARIC,EAAOD,EAAK,IAAI,UAAU,EAAGA,EAAK,IAAI,YAAY,GAAG,EAAI,CAAC,EAE1DE,GAAkB,aAAc,kBAAkB,WAElDC,EAAQ,SAAS,cAAc,QAAQ,EAGvCC,EAAQJ,EAAK,WACRK,EAAI,EAAGA,EAAID,EAAM,OAAQC,IAAK,CACrC,IAAIC,EAAIF,EAAMC,CAAC,EACXC,EAAE,KAAK,QAAQ,OAAO,IAAM,GAAGH,EAAM,aAAaG,EAAE,KAAMA,EAAE,KAAK,CACvE,CAEIJ,GACFC,EAAM,KAAO,SACbA,EAAM,IAAMF,EAAO,cAInBE,EAAM,MAAQ,GACdA,EAAM,IAAMF,EAAO,iBAGpB,SAAS,MAAQ,SAAS,iBAAiB,YAAYE,CAAK,EAC/D,GAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qaiddev/thumbs-embed",
3
- "version": "1.5.0",
3
+ "version": "1.5.1",
4
4
  "description": "Precision User Feedback",
5
5
  "type": "module",
6
6
  "main": "./dist/qaid.umd.cjs",
@@ -16,8 +16,8 @@
16
16
  "types": "./dist/loader.d.ts",
17
17
  "import": "./dist/loader.js"
18
18
  },
19
- "./auto": {
20
- "default": "./dist/auto.js"
19
+ "./embed": {
20
+ "default": "./dist/embed.js"
21
21
  }
22
22
  },
23
23
  "files": [
@@ -33,7 +33,7 @@
33
33
  },
34
34
  "scripts": {
35
35
  "dev": "vite build --watch --config vite.config.esm.ts",
36
- "build": "vite build && vite build --config vite.config.esm.ts && vite build --config vite.config.auto.ts && tsc -p tsconfig.build.json",
36
+ "build": "vite build && vite build --config vite.config.esm.ts && vite build --config vite.config.embed.ts && tsc -p tsconfig.build.json",
37
37
  "preview": "vite preview",
38
38
  "test": "vitest",
39
39
  "test:run": "vitest run",
package/dist/auto.js DELETED
@@ -1,2 +0,0 @@
1
- (function(){"use strict";(function(){if(typeof document=="undefined")return;function o(){var s=document.currentScript;if(s&&s.src)return s;for(var a=document.getElementsByTagName("script"),r=a.length-1;r>=0;r--){var i=a[r].src||"";if(i.indexOf("thumbs-embed")!==-1&&/\/auto(\.min)?\.js(\?|#|$)/.test(i))return a[r]}return null}var t=o();if(!(!t||!t.src)){for(var c=t.src.substring(0,t.src.lastIndexOf("/")+1),f=("noModule"in HTMLScriptElement.prototype),e=document.createElement("script"),d=t.attributes,n=0;n<d.length;n++){var u=d[n];u.name.indexOf("data-")===0&&e.setAttribute(u.name,u.value)}f?(e.type="module",e.src=c+"loader.js"):(e.defer=!0,e.src=c+"qaid.umd.cjs"),(document.head||document.documentElement).appendChild(e)}})()})();
2
- //# sourceMappingURL=auto.js.map
package/dist/auto.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"auto.js","sources":["../src/auto.ts"],"sourcesContent":["/**\n * Single-tag auto-loader (`dist/auto.js`).\n *\n * A drop-in classic `<script>` that works in every browser. It feature-detects\n * ES-module support and injects the right entry, so the page author never has\n * to think about compatibility:\n *\n * - modern browsers → the progressive ESM loader (`loader.js`): a small core,\n * with screenshot / video / annotation / targeting loading on demand.\n * - older browsers → the all-in-one UMD bundle (`qaid.umd.cjs`).\n *\n * The injected entry auto-initializes from the `data-*` attributes copied\n * across from this tag (or from a `<script type=\"application/json\">` config\n * block already on the page), so exactly one embed is created either way.\n *\n * Usage:\n * <script src=\"https://unpkg.com/@qaiddev/thumbs-embed/dist/auto.js\"\n * data-endpoint=\"/api/feedback\"></script>\n *\n * IMPORTANT: this file must stay ES5-clean and dependency-free. It is the one\n * script that also runs on the legacy browsers we fall back for, so it can't\n * use syntax (arrow fns, const/let, template literals) they'd choke on before\n * the fallback ever loads. Written with var/function on purpose.\n */\n\n(function () {\n if (typeof document === \"undefined\") return;\n\n // Locate this script tag: prefer document.currentScript (valid for a plain\n // classic script), else find the last <script> whose src looks like auto.js.\n function findSelf(): HTMLScriptElement | null {\n var cur = document.currentScript as HTMLScriptElement | null;\n if (cur && cur.src) return cur;\n var scripts = document.getElementsByTagName(\"script\");\n for (var i = scripts.length - 1; i >= 0; i--) {\n var src = scripts[i].src || \"\";\n if (src.indexOf(\"thumbs-embed\") !== -1 && /\\/auto(\\.min)?\\.js(\\?|#|$)/.test(src)) {\n return scripts[i];\n }\n }\n return null;\n }\n\n var self = findSelf();\n if (!self || !self.src) return;\n\n // Base = the directory that holds auto.js, e.g.\n // \"https://unpkg.com/@qaiddev/thumbs-embed/dist/\". loader.js's own relative\n // chunk imports then resolve against the same (CDN-versioned) base.\n var base = self.src.substring(0, self.src.lastIndexOf(\"/\") + 1);\n\n var supportsModules = \"noModule\" in HTMLScriptElement.prototype;\n\n var entry = document.createElement(\"script\");\n\n // Carry the config across so the injected entry's auto-init sees it.\n var attrs = self.attributes;\n for (var j = 0; j < attrs.length; j++) {\n var a = attrs[j];\n if (a.name.indexOf(\"data-\") === 0) entry.setAttribute(a.name, a.value);\n }\n\n if (supportsModules) {\n entry.type = \"module\";\n entry.src = base + \"loader.js\";\n } else {\n // Classic bundle: defer so it runs after the document is parsed, matching\n // the module entry's deferred timing.\n entry.defer = true;\n entry.src = base + \"qaid.umd.cjs\";\n }\n\n (document.head || document.documentElement).appendChild(entry);\n})();\n"],"names":["findSelf","cur","scripts","i","src","self","base","supportsModules","entry","attrs","j","a"],"mappings":"0BAyBC,UAAY,CACX,GAAI,OAAO,UAAa,YAAa,OAIrC,SAASA,GAAqC,CAC5C,IAAIC,EAAM,SAAS,cACnB,GAAIA,GAAOA,EAAI,IAAK,OAAOA,EAE3B,QADIC,EAAU,SAAS,qBAAqB,QAAQ,EAC3CC,EAAID,EAAQ,OAAS,EAAGC,GAAK,EAAGA,IAAK,CAC5C,IAAIC,EAAMF,EAAQC,CAAC,EAAE,KAAO,GAC5B,GAAIC,EAAI,QAAQ,cAAc,IAAM,IAAM,6BAA6B,KAAKA,CAAG,EAC7E,OAAOF,EAAQC,CAAC,CAEpB,CACA,OAAO,IACT,CAEA,IAAIE,EAAOL,EAAA,EACX,GAAI,GAACK,GAAQ,CAACA,EAAK,KAanB,SARIC,EAAOD,EAAK,IAAI,UAAU,EAAGA,EAAK,IAAI,YAAY,GAAG,EAAI,CAAC,EAE1DE,GAAkB,aAAc,kBAAkB,WAElDC,EAAQ,SAAS,cAAc,QAAQ,EAGvCC,EAAQJ,EAAK,WACRK,EAAI,EAAGA,EAAID,EAAM,OAAQC,IAAK,CACrC,IAAIC,EAAIF,EAAMC,CAAC,EACXC,EAAE,KAAK,QAAQ,OAAO,IAAM,GAAGH,EAAM,aAAaG,EAAE,KAAMA,EAAE,KAAK,CACvE,CAEIJ,GACFC,EAAM,KAAO,SACbA,EAAM,IAAMF,EAAO,cAInBE,EAAM,MAAQ,GACdA,EAAM,IAAMF,EAAO,iBAGpB,SAAS,MAAQ,SAAS,iBAAiB,YAAYE,CAAK,EAC/D,GAAA"}