{"_id":"@caleidoscopioweb/readlygo","_rev":"4-f2879a91f8f3a806683026aeaca3af82","name":"@caleidoscopioweb/readlygo","dist-tags":{"latest":"0.1.3"},"versions":{"0.1.0":{"name":"@caleidoscopioweb/readlygo","version":"0.1.0","license":"GPL-3.0-or-later","_id":"@caleidoscopioweb/readlygo@0.1.0","maintainers":[{"name":"d4n1-dl","email":"webmaster.caleidoscopio@gmail.com"}],"dist":{"shasum":"9dd05aeffbb18ab61a370571e9d5c4d70698e63e","tarball":"https://registry.npmjs.org/@caleidoscopioweb/readlygo/-/readlygo-0.1.0.tgz","fileCount":10,"integrity":"sha512-fCgLZK77lAZbxYTPIG6Wr9p6USOMEOyJG4TQcBz9BvCvhpyTL6NsRwK0DRqtQNJwo/3u1AB2KM7fZce1EgbmzQ==","signatures":[{"sig":"MEYCIQC8GdYqkEWB2U57uve90/6Ex1nYefa25gb1ExGnqk/mTwIhAMJUpbsjcwXSN16YzN6imlDXimKjXJIuvO5r79ugxm6Z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":504919},"main":"dist/readlygo.umd.js","type":"module","unpkg":"dist/readlygo.umd.js","module":"dist/readlygo.esm.js","exports":{".":{"import":"./dist/readlygo.esm.js","default":"./dist/readlygo.umd.js"}},"scripts":{"build":"rollup -c","clean":"if exist dist rmdir /s /q dist","build:watch":"rollup -c -w","release:check":"npm run build && npm publish --dry-run","prepublishOnly":"npm run build"},"_npmUser":{"name":"d4n1-dl","email":"webmaster.caleidoscopio@gmail.com"},"jsdelivr":"dist/readlygo.umd.js","_npmVersion":"11.10.1","description":"ReadlyGo standalone accessibility toolkit for any HTML site.","directories":{},"_nodeVersion":"24.13.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^4.44.1"},"_npmOperationalInternal":{"tmp":"tmp/readlygo_0.1.0_1774060754155_0.7222285486396143","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@caleidoscopioweb/readlygo","version":"0.1.1","license":"GPL-3.0-or-later","_id":"@caleidoscopioweb/readlygo@0.1.1","maintainers":[{"name":"d4n1-dl","email":"webmaster.caleidoscopio@gmail.com"}],"dist":{"shasum":"35e58f5701bf61f729e65540d27c7e3872f5c222","tarball":"https://registry.npmjs.org/@caleidoscopioweb/readlygo/-/readlygo-0.1.1.tgz","fileCount":10,"integrity":"sha512-qfxWsChc78CX/c1nY/vX/NUD47gAKEmze/l+N3PDzaa6vf7b6QMGer8QGv9qsnvtzyB5K/UYeEaL4vC1PJJrIQ==","signatures":[{"sig":"MEQCIF0a+0vYNHvfPcuJuivxYRYnyxUYQFWLwK1n72vz9kcQAiBmIhrJi8RBiBzoQa/oWWrhXGIFChlk6u6FhbdQDV0mAw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":505081},"main":"dist/readlygo.umd.js","type":"module","unpkg":"dist/readlygo.umd.js","module":"dist/readlygo.esm.js","exports":{".":{"import":"./dist/readlygo.esm.js","default":"./dist/readlygo.umd.js"}},"scripts":{"build":"rollup -c","clean":"if exist dist rmdir /s /q dist","build:watch":"rollup -c -w","release:check":"npm run build && npm publish --dry-run","prepublishOnly":"npm run build"},"_npmUser":{"name":"d4n1-dl","email":"webmaster.caleidoscopio@gmail.com"},"jsdelivr":"dist/readlygo.umd.js","_npmVersion":"11.10.1","description":"ReadlyGo standalone accessibility toolkit for any HTML site.","directories":{},"_nodeVersion":"24.13.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^4.44.1"},"_npmOperationalInternal":{"tmp":"tmp/readlygo_0.1.1_1774061852871_0.9943501720745294","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@caleidoscopioweb/readlygo","version":"0.1.2","license":"GPL-3.0-or-later","_id":"@caleidoscopioweb/readlygo@0.1.2","maintainers":[{"name":"d4n1-dl","email":"webmaster.caleidoscopio@gmail.com"}],"dist":{"shasum":"aeb47e73e9d353861ec5a285e45666e216f66b4b","tarball":"https://registry.npmjs.org/@caleidoscopioweb/readlygo/-/readlygo-0.1.2.tgz","fileCount":10,"integrity":"sha512-5ys1jr1TabyJ2aFmxgUcUW+sHBqYnCFRgjf7c/0NNV7ujJhkWCoI9bSztz/RfItmIk4PmoVaqNh98SuQ/OpJlg==","signatures":[{"sig":"MEQCIH6/A2S1Klbdv2P4LKQsHjpTdAsRzRbNs3pQjflbnbH9AiAmBV0VCx2UKY1+5PA36K8A5RWXVzf/tZjIpqHJb8Gdhg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":504471},"main":"dist/readlygo.umd.js","type":"module","unpkg":"dist/readlygo.umd.js","module":"dist/readlygo.esm.js","exports":{".":{"import":"./dist/readlygo.esm.js","default":"./dist/readlygo.umd.js"}},"scripts":{"build":"rollup -c","clean":"if exist dist rmdir /s /q dist","build:watch":"rollup -c -w","release:check":"npm run build && npm publish --dry-run","prepublishOnly":"npm run build"},"_npmUser":{"name":"d4n1-dl","email":"webmaster.caleidoscopio@gmail.com"},"jsdelivr":"dist/readlygo.umd.js","_npmVersion":"11.10.1","description":"ReadlyGo standalone accessibility toolkit for any HTML site.","directories":{},"_nodeVersion":"24.13.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^4.44.1"},"_npmOperationalInternal":{"tmp":"tmp/readlygo_0.1.2_1774064416237_0.9313386064419105","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@caleidoscopioweb/readlygo","version":"0.1.3","description":"ReadlyGo standalone accessibility toolkit for any HTML site.","type":"module","main":"dist/readlygo.umd.js","module":"dist/readlygo.esm.js","unpkg":"dist/readlygo.umd.js","jsdelivr":"dist/readlygo.umd.js","exports":{".":{"import":"./dist/readlygo.esm.js","default":"./dist/readlygo.umd.js"}},"license":"GPL-3.0-or-later","publishConfig":{"access":"public"},"scripts":{"build":"rollup -c","build:watch":"rollup -c -w","clean":"if exist dist rmdir /s /q dist","prepublishOnly":"npm run build","release:check":"npm run build && npm publish --dry-run"},"devDependencies":{"rollup":"^4.44.1"},"_id":"@caleidoscopioweb/readlygo@0.1.3","_nodeVersion":"24.13.1","_npmVersion":"11.10.1","dist":{"integrity":"sha512-YWS/Pkygs02RLSLS31o2c4jey3zceKpRXdEGJgTJRNzaN+pJQquPXPvbsESVI5TC0lVosLWRcAU4ZO1n7Tysxg==","shasum":"74b9f0b03b916e8a34fde6eb78ee7e3876766676","tarball":"https://registry.npmjs.org/@caleidoscopioweb/readlygo/-/readlygo-0.1.3.tgz","fileCount":14,"unpackedSize":1310997,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDPQG47JB+7uMMaiH9ZyXloh1eGIPnzcNoxc4NCPnIb+gIgSrYACjBPyJ5iN2l4PnmtIA3OwQ2/pe0CJytMVTZ9xzk="}]},"_npmUser":{"name":"d4n1-dl","email":"webmaster.caleidoscopio@gmail.com"},"directories":{},"maintainers":[{"name":"d4n1-dl","email":"webmaster.caleidoscopio@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/readlygo_0.1.3_1774100869193_0.21949973814086987"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-21T02:39:14.098Z","modified":"2026-03-21T13:47:49.540Z","0.1.0":"2026-03-21T02:39:14.293Z","0.1.1":"2026-03-21T02:57:33.017Z","0.1.2":"2026-03-21T03:40:16.393Z","0.1.3":"2026-03-21T13:47:49.413Z"},"license":"GPL-3.0-or-later","description":"ReadlyGo standalone accessibility toolkit for any HTML site.","maintainers":[{"name":"d4n1-dl","email":"webmaster.caleidoscopio@gmail.com"}],"readme":"# ReadlyGo (MVP)\n\nReadlyGo is a standalone JavaScript accessibility widget designed to run on any HTML site.\n\nCreated and maintained by Caleidoscopio Web Agency.\n\nThis MVP is frontend-only and zero-backend.\n\n## Scope of this MVP\n\nImplemented in v1:\n- Visual and readability controls (contrast modes, font tweaks, spacing, alignment, highlights)\n- Orientation controls (hide images/emoji, reading mask, reading guide, cursor size)\n- Multilanguage UI (English/Italian) with flag switcher in the panel header\n- Popup UI + trigger button + local persistence\n- Public API + headless event compatibility (`readabler-headless`)\n\n## Install and build\n\n```bash\nnpm install\nnpm run build\n```\n\nOutput files:\n- `dist/readlygo.esm.js`\n- `dist/readlygo.umd.js`\n\n## CDN (Ready To Go)\n\nRecommended free stack:\n- Load it from jsDelivr in your projects\n\nCDN URLs after publish:\n- UMD latest (auto-update): `https://cdn.jsdelivr.net/npm/@caleidoscopioweb/readlygo@latest/dist/readlygo.umd.js`\n- UMD (pin version): `https://cdn.jsdelivr.net/npm/@caleidoscopioweb/readlygo@0.1.0/dist/readlygo.umd.js` (Check Version)\n- ESM (pin version): `https://cdn.jsdelivr.net/npm/@caleidoscopioweb/readlygo@0.1.0/dist/readlygo.esm.js` (Check Version)\n\nUse pinned versions in production to avoid unexpected breaking changes.\n\n## CDN snippet (UMD)\n\n```html\n<script>\n  window.__READLYGO_CONFIG__ = {\n    showButton: true,\n    defaultLanguage: \"en\",\n    rememberLanguage: true,\n    remember: true,\n    styleNonce: \"\",\n    assetsBaseUrl: \"https://cdn.jsdelivr.net/npm/@caleidoscopioweb/readlygo@latest/assets\",\n    languageSelector: {\n      enabled: true,\n      size: 18,\n      showCodes: false\n    },\n    localization: {\n      defaultLanguage: \"en\",\n      languages: [\"en\", \"it\"],\n      flags: {\n        en: \"https://cdn.jsdelivr.net/npm/@caleidoscopioweb/readlygo@latest/assets/flags/gb.svg\",\n        it: \"https://cdn.jsdelivr.net/npm/@caleidoscopioweb/readlygo@latest/assets/flags/it.svg\"\n      }\n    },\n    floatingButton: {\n      enabled: true,\n      position: \"bottom-left\",\n      variant: \"icon\",\n      iconUrl: \"https://cdn.jsdelivr.net/npm/@caleidoscopioweb/readlygo@latest/assets/icons/accessibility-icon.svg\",\n      iconSize: 22,\n      title: \"Open accessibility options\",\n      background: \"#b96cbd\",\n      textColor: \"#ffffff\",\n      iconColor: \"#ffffff\",\n      borderColor: \"#a75eab\",\n      boxShadow: \"0 10px 30px rgba(0, 16, 45, 0.28)\",\n      boxShadowHover: \"0 0 0 3px rgba(185, 108, 189, 0.4)\",\n      padding: \"0 10px\",\n      margin: 24,\n      offsetX: 24,\n      offsetY: 16\n    },\n    customTrigger: {\n      enabled: true,\n      selector: \"readlygo-trigger,[data-readlygo-trigger]\",\n      variant: \"icon-text\",\n      size: \"md\",\n      label: \"Accessibility\"\n    },\n    branding: {\n      enabled: true,\n      text: \"Created and maintained by Caleidoscopio Web Agency\",\n      url: \"\"\n    }\n  };\n</script>\n<script\n  src=\"https://cdn.jsdelivr.net/npm/@caleidoscopioweb/readlygo@latest/dist/readlygo.umd.js\"\n  defer\n  onload=\"window.ReadlyGo.init(window.__READLYGO_CONFIG__ || {})\"\n></script>\n```\n\n## ESM usage\n\n```html\n<script type=\"module\">\n  import ReadlyGo from \"https://cdn.jsdelivr.net/npm/@caleidoscopioweb/readlygo@latest/dist/readlygo.esm.js\";\n\n  ReadlyGo.init({\n    showButton: true,\n    defaultLanguage: \"it\",\n    rememberLanguage: true,\n    languageSelector: {\n      enabled: true\n    },\n    localization: {\n      flags: {\n        en: \"/assets/flags/gb.svg\",\n        it: \"/assets/flags/it.svg\"\n      }\n    },\n    floatingButton: {\n      position: \"bottom-left\",\n      variant: \"icon\",\n      title: \"Open accessibility options\",\n      background: \"#b96cbd\",\n      textColor: \"#ffffff\",\n      iconColor: \"#ffffff\",\n      borderColor: \"#a75eab\",\n      boxShadow: \"0 10px 30px rgba(0, 16, 45, 0.28)\",\n      boxShadowHover: \"0 0 0 3px rgba(185, 108, 189, 0.4)\",\n      padding: \"0 10px\",\n      margin: 24,\n      offsetX: 24,\n      offsetY: 16\n    },\n    openHotkey: \"alt+a\"\n  });\n</script>\n```\n\n## Multilanguage (EN/IT)\n\n- Built-in locales: English (`en`) and Italian (`it`)\n- Language switcher is shown in the widget header (flag buttons)\n- Change is applied live to title, subtitle, section names, controls, and footer actions\n- Set the startup language from script with `defaultLanguage: \"it\"` (or `en`)\n- If `rememberLanguage: true`, selected language is persisted\n\n## Custom trigger tag (menu/div)\n\nYou can place custom triggers anywhere in HTML:\n\n```html\n<readlygo-trigger\n  data-rg-variant=\"icon-text\"\n  data-rg-label=\"Accessibility\"\n  data-rg-size=\"md\"\n></readlygo-trigger>\n\n<div\n  data-readlygo-trigger\n  data-rg-variant=\"icon\"\n  data-rg-size=\"sm\"\n  data-rg-background=\"#b96cbd\"\n  data-rg-text-color=\"#ffffff\"\n  data-rg-icon-color=\"#ffffff\"\n  data-rg-padding=\"0 10px\"\n  data-rg-title=\"Open accessibility options\"\n></div>\n```\n\nSupported per-tag options (`data-rg-*`):\n- `variant`: `icon`, `text`, `icon-text`\n- `size`: `sm`, `md`, `lg`\n- `label`\n- `icon-url`\n- `icon-size`\n- `background`\n- `text-color` (or legacy `color`)\n- `icon-color`\n- `padding`\n- `border-color`\n- `box-shadow`\n- `box-shadow-hover` (or `hover-box-shadow`)\n- `title`\n- `aria-label`\n- `class-name`\n\n## Public API\n\n- `window.ReadlyGo.init(config)`\n- `window.ReadlyGo.dispatch(actionOrPayload, value?)`\n- `window.ReadlyGo.reset()`\n- `window.ReadlyGo.destroy()`\n- `window.ReadlyGo.getState()`\n- `window.ReadlyGo.isReady()`\n- `window.ReadlyGo.normalizeActionName(action)`\n\nExamples:\n\n```js\nReadlyGo.dispatch(\"highlightLinks\");\nReadlyGo.dispatch({ action: \"fontSizing\", value: 2 });\nReadlyGo.reset();\n```\n\n## Headless event compatibility\n\nDispatch from external scripts:\n\n```js\nwindow.dispatchEvent(\n  new CustomEvent(\"readabler-headless\", {\n    detail: { action: \"highlight-links\", value: true }\n  })\n);\n```\n\nAction names are normalized to camelCase, so kebab/snake prefixes are accepted (for example: `highlight-links`, `readlygo-action-highlight-links`, `mdp-action-highlight-links`).\n\nRuntime events:\n- `ReadlyGoActionChanged`\n- `ReadlyGoLanguageChanged`\n\n## Supported actions\n\nValue actions:\n- `contentScaling`\n- `fontSizing`\n- `lineHeight`\n- `letterSpacing`\n\nToggle actions:\n- `readableFont`\n- `dyslexiaFont`\n- `alignLeft`\n- `alignCenter`\n- `alignRight`\n- `darkContrast`\n- `lightContrast`\n- `monochrome`\n- `highSaturation`\n- `highContrast`\n- `lowSaturation`\n- `highlightTitles`\n- `highlightLinks`\n- `highlightHover`\n- `highlightFocus`\n- `hideImages`\n- `hideEmoji`\n- `readingMask`\n- `readingGuide`\n- `bigBlackCursor`\n- `bigWhiteCursor`\n\n## Key config options\n\n- `storageKey` (default: `readlygo`)\n- `remember` (default: `true`)\n- `showButton` (default: `true`)\n- `startOpen` (default: `false`)\n- `defaultLanguage` (`en` or `it`, default: `en`)\n- `language` (`en` or `it`, legacy alias of `defaultLanguage`)\n- `rememberLanguage` (default: `true`)\n- `languageSelector` (`enabled`, `size`, `showCodes`)\n- `localization` (`defaultLanguage`, `languages`, `flags`, `locales`)\n- `buttonLabel` (default: `ReadlyGo`)\n- `buttonPosition` (`bottom-left`, `bottom-right`, `top-right`, `top-left`)\n- `buttonVariant` (`icon`, `text`, `icon-text`, default: `icon`)\n- `buttonIconUrl` (default: built-in white accessibility icon)\n- `buttonIconSize` (default: `22`)\n- `buttonAriaLabel`\n- `buttonTitle`\n- `buttonBackground`\n- `buttonTextColor`\n- `buttonIconColor`\n- `buttonBorderColor`\n- `buttonBoxShadow`\n- `buttonBoxShadowHover`\n- `buttonPadding`\n- `buttonMargin` (distance from viewport, px or CSS value)\n- `buttonOffsetX` (horizontal floating offset; defaults to `buttonMargin` if not set)\n- `buttonOffsetY` (vertical floating offset; defaults to `buttonMargin` if not set)\n- `floatingButton` (`enabled`, `position`, `variant`, `iconUrl`, `iconSize`, `label`, `ariaLabel`, `title`, `background`, `textColor`, `iconColor`, `borderColor`, `boxShadow`, `boxShadowHover`, `padding`, `margin`, `offsetX`, `offsetY`, aliases `marginX`, `marginY`)\n- `popupTitle` (default: `ReadlyGo`)\n- `panelSubtitle` (default: `Accessibility Toolkit`)\n- `closeOnOverlay`\n- `openHotkey` (default: `alt+a`)\n- `theme` (`triggerBg`, `triggerText`, `triggerIcon`, `triggerBorder`, `triggerShadow`, `triggerShadowHover`, `triggerPadding`, `triggerMargin`, `triggerOffsetX`, `triggerOffsetY`)\n- `customTrigger` (`enabled`, `selector`, `variant`, `size`, `label`, `iconUrl`, `iconSize`, `background`, `textColor`, `iconColor`, `padding`, `borderColor`, `title`, `className`)\n- `branding` (`enabled`, `text`, `url`, `target`, `rel`)\n- `enable` (action visibility map)\n- `initialState`\n- `styleNonce` (for CSP nonce on injected `<style>` tags)\n- `assetsBaseUrl` (for OpenDyslexic files in `font-dislessici/`; if omitted, the runtime tries auto-detection from the script URL)\n\n## Browser fallback behavior\n\n- If `localStorage` is unavailable, state falls back to in-memory runtime storage.\n\n## Notes for SPA and dynamic pages\n\n- For route changes, keep a single instance and reuse `dispatch`/`reset`.\n\n## License\n\nThis project is licensed under the GNU General Public License v3.0 or later (`GPL-3.0-or-later`).\n\nCopyleft summary:\n- If you distribute modified versions of this software, you must keep them under GPL-compatible terms.\n- You must keep copyright and license notices.\n- You must provide source code of distributed modified versions under the same license terms.\n\nSee the [LICENSE](LICENSE) file for the full legal text.\n","readmeFilename":"README.md"}