diff --git a/.npmrc b/.npmrc index 14312ab8..0c14e38c 100644 --- a/.npmrc +++ b/.npmrc @@ -1,2 +1 @@ -enable-pre-post-scripts=true registry-url=https://registry.npmjs.org/ \ No newline at end of file diff --git a/package.json b/package.json index a76052ca..32473fc6 100644 --- a/package.json +++ b/package.json @@ -27,12 +27,10 @@ "scripts": { "are-types-wrong": "pnpm -r --stream --filter=\"{packages/multiple-select-vanilla/**}\" are-types-wrong", "clean": "remove --glob **/dist --glob **/tsconfig.tsbuildinfo", - "prebuild": "pnpm clean && pnpm biome:lint:write && pnpm biome:format:write", - "build": "pnpm -r --stream build", + "build": "pnpm clean && pnpm biome:lint:write && pnpm biome:format:write && pnpm -r --stream build", "build:demo": "pnpm -r --stream --filter=\"{packages/demo/**}\" build", "build:lib": "pnpm -r --stream --filter=\"{packages/multiple-select-vanilla/**}\" build", - "predev": "pnpm -r dev:init", - "dev": "run-p dev:watch build:watch --npm-path pnpm", + "dev": "pnpm -r dev:init && run-p dev:watch build:watch --npm-path pnpm", "dev:watch": "pnpm -r --parallel --stream dev", "build:watch": "lerna watch --no-bail --file-delimiter=\",\" --glob=\"src/**/*.{ts,scss}\" -- cross-env-shell pnpm -r --filter $LERNA_PACKAGE_NAME build:watch --files=$LERNA_FILE_CHANGES", "dev:demo": "pnpm -r --stream --filter=\"{packages/demo/**}\" dev", @@ -45,11 +43,9 @@ "preview:publish": "lerna publish from-package --dry-run", "new-version": "lerna version", "new-publish": "lerna publish from-package", - "preroll-new-release": "echo Please update getting-started lib version before pushing a release. ⚠️", "roll-new-release": "pnpm build && pnpm new-version && pnpm new-publish", "serve:demo": "pnpm -r --stream --filter=\"{packages/demo/**}\" dev", - "pretest:e2e": "remove playwright-report", - "test:e2e": "playwright test --config playwright/playwright.config.ts", + "test:e2e": "remove playwright-report && playwright test --config playwright/playwright.config.ts", "test:e2e:debug": "playwright test --config playwright/playwright.config.ts --ui --debug", "test:e2e:ui": "playwright test --config playwright/playwright.config.ts --ui", "test:report": "playwright show-report", diff --git a/packages/demo/src/app-routing.ts b/packages/demo/src/app-routing.ts index 7b3afd42..e7865844 100644 --- a/packages/demo/src/app-routing.ts +++ b/packages/demo/src/app-routing.ts @@ -15,6 +15,7 @@ import Example13 from './examples/example13.js'; import Example14 from './examples/example14.js'; import Example15 from './examples/example15.js'; import Example16 from './examples/example16.js'; +import Example17 from './examples/example17.js'; import GettingStarted from './getting-started.js'; import I18n from './i18n/i18n.js'; import Methods01 from './methods/methods01.js'; @@ -98,6 +99,7 @@ export const exampleRouting = [ { name: 'example14', view: '/src/examples/example14.html', viewModel: Example14, title: 'The Divider' }, { name: 'example15', view: '/src/examples/example15.html', viewModel: Example15, title: 'Dark Mode' }, { name: 'example16', view: '/src/examples/example16.html', viewModel: Example16, title: 'Template with Images' }, + { name: 'example17', view: '/src/examples/example17.html', viewModel: Example17, title: 'Bug' }, ], }, { diff --git a/packages/demo/src/examples/example17.html b/packages/demo/src/examples/example17.html new file mode 100644 index 00000000..12cd5c82 --- /dev/null +++ b/packages/demo/src/examples/example17.html @@ -0,0 +1,20 @@ + + + + + diff --git a/packages/demo/src/examples/example17.ts b/packages/demo/src/examples/example17.ts new file mode 100644 index 00000000..b960102b --- /dev/null +++ b/packages/demo/src/examples/example17.ts @@ -0,0 +1,22 @@ +import { type MultipleSelectInstance, multipleSelect } from 'multiple-select-vanilla'; + +export default class Example { + ms!: MultipleSelectInstance; + + mount() { + this.ms = multipleSelect('#activities', { + selectAll: false, + }) as MultipleSelectInstance; + + document.getElementById('trigger')?.addEventListener('click', () => { + // 💥 Repro du bug avec optgroup + setSelects + this.ms.setSelects(['515']); + }); + } + + unmount() { + // destroy ms instance(s) to avoid DOM leaks + this.ms.destroy(); + this.ms = null as any; + } +} diff --git a/packages/multiple-select-vanilla/package.json b/packages/multiple-select-vanilla/package.json index 2d6d1d7b..7401994a 100644 --- a/packages/multiple-select-vanilla/package.json +++ b/packages/multiple-select-vanilla/package.json @@ -51,8 +51,7 @@ "scripts": { "are-types-wrong": "pnpx @arethetypeswrong/cli --pack .", "clean": "remove dist", - "build": "pnpm build:all && pnpm build:types:prod", - "postbuild": "pnpm sass:build && pnpm sass:copy", + "build": "pnpm build:all && pnpm build:types:prod && pnpm sass:build && pnpm sass:copy", "dev:init": "pnpm sass:build && pnpm sass:copy && pnpm build:all && pnpm build:types:prod", "build:all": "node build-prod.mjs", "build:watch": "cross-env NODE_ENV=development node build-watch.mjs", @@ -60,8 +59,8 @@ "build:esm": "esbuild src/index.ts --bundle --minify --format=esm --target=es2021 --sourcemap --outfile=dist/index.js", "build:types": "tsc --emitDeclarationOnly --incremental --declarationMap false --outDir dist", "build:types:prod": "tsc --emitDeclarationOnly --incremental --declarationMap --outDir dist", - "sass:build": "sass src/styles:dist/styles/css --style=compressed --quiet-deps --no-source-map", - "postsass:build": "postcss dist/styles/css/**/* --dir dist/styles/css --base dist/styles/css --no-map --use cssnano --use autoprefixer --style=compressed", + "sass:build": "sass src/styles:dist/styles/css --style=compressed --quiet-deps --no-source-map && pnpm sass:build:closing", + "sass:build:closing": "postcss dist/styles/css/**/* --dir dist/styles/css --base dist/styles/css --no-map --use cssnano --use autoprefixer --style=compressed", "sass:watch": "sass src/styles:dist/styles/css --watch --style=compressed --quiet-deps --no-source-map", "sass:copy": "copyfiles \"./src/styles/**/*.scss\" dist/styles/sass --up 2 --stat" },