## @arbocollab/arbo-ckeditor-custom-build

Custom CKEditor 5 build with:
* ESM entry (tree‑shakable)  -> `dist/esm/main.js`
* IIFE (CDN/global)          -> `dist/umd/ckeditor.js` (global: `window.ArboCKEditor`)
* Duplicate‑load protection (prevents two distinct CKEditor 5 engine graphs on the same page)

> NOTE: A CommonJS build is NOT currently emitted. Existing `package.json` fields that point at `dist/cjs/*` will need adjusting if you truly need CJS; otherwise consumers should use ESM or the IIFE. See "Package JSON alignment" below.

---
### Install (ESM / bundlers)
```sh
npm install @arbocollab/arbo-ckeditor-custom-build
```

### Use (ESM)
```ts
import { ClassicEditor } from '@arbocollab/arbo-ckeditor-custom-build';
ClassicEditor.create(document.querySelector('#editor')!);
```

### CDN (Global IIFE)
```html
<script src="https://cdn.jsdelivr.net/npm/@arbocollab/arbo-ckeditor-custom-build@1.0.46/dist/umd/ckeditor.js"></script>
<script>
  ArboCKEditor.ClassicEditor.create(document.getElementById('editor'));
  // ArboCKEditor exports: ClassicEditor, BalloonEditor, createClassicEditor, createBalloonEditor
}</script>
```

### CDN (ESM import)
```html
<script type="module">
  import { ClassicEditor } from 'https://cdn.jsdelivr.net/npm/@arbocollab/arbo-ckeditor-custom-build@1.0.46/dist/esm/main.js';
  ClassicEditor.create(document.querySelector('#editor'));
</script>
```

### Avoid double loading
Do NOT both import the ESM bundle and include the IIFE script; the guard in `index.ts` will abort the second copy to prevent `ckeditor-duplicated-modules` errors.

### Duplicate build protection
If a second distinct CKEditor 5 engine instance is detected, this build logs an error and throws early to keep the page stable.

### Package JSON alignment
Current repo build emits:
```
dist/
  esm/main.js
  umd/ckeditor.js
```
If you do not produce `dist/cjs/*`, remove or update the `main` / `exports.require` fields before publishing to avoid broken "require()" consumers. Simplest minimal export map (ESM + CDN) could be:
```jsonc
{
  "main": "dist/umd/ckeditor.js", // optional legacy entry
  "module": "dist/esm/main.js",
  "exports": { ".": { "import": "./dist/esm/main.js", "default": "./dist/esm/main.js" } },
  "unpkg": "dist/umd/ckeditor.js",
  "jsdelivr": "dist/umd/ckeditor.js"
}
```
Only add CJS paths back if you reinstate the commented CJS build in `rollup.config.mjs`.

### Publishing (summary)
```sh
npm version patch -w @arbocollab/arbo-ckeditor-custom-build
TARGET=ckeditor npx rollup -c      # or your build script
npm publish -w @arbocollab/arbo-ckeditor-custom-build --access public
```

### Troubleshooting
| Issue | Fix |
|-------|-----|
| 404 / ENEEDAUTH | Re-login: `npm whoami`; ensure npmjs registry for this scope |
| Duplicate build error | Remove extra CKEditor bundle / script tag |
| Missing CJS file | Adjust `package.json` (see above) or enable CJS build |

### License
Includes CKEditor 5 (GPL-2.0-or-later). Commercial license holders may apply their terms. Ensure redistribution complies with CKEditor licensing.