diff --git a/.gitignore b/.gitignore index 499710c..529df9c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,52 @@ -/node_modules/ -/dist/ -/build/ +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Maven files +target/ + +# Eclipse files +.project +.settings +.classpath +error-screenshots/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +*.logs +*.iml +.idea/ +.eclipse +.vscode + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +node +node_modules package-lock.json -analysis.json -/next/ \ No newline at end of file +package.json +webpack.config.js +webpack.generated.js + +autoselectcombobox-demo/frontend/index.html +autoselectcombobox-demo/frontend/generated/index.ts +autoselectcombobox-demo/frontend/generated/vaadin.ts +autoselectcombobox-demo/frontend/generated/vaadin-featureflags.ts +autoselectcombobox-demo/tsconfig.json +autoselectcombobox-demo/types.d.ts diff --git a/autoselectcombobox-demo/package.json b/autoselectcombobox-demo/package.json index aee28be..b5eae24 100644 --- a/autoselectcombobox-demo/package.json +++ b/autoselectcombobox-demo/package.json @@ -2,184 +2,408 @@ "name": "no-name", "license": "UNLICENSED", "dependencies": { - "@polymer/iron-a11y-announcer": "3.0.2", - "@polymer/iron-a11y-keys-behavior": "3.0.1", - "@polymer/iron-fit-behavior": "3.0.2", - "@polymer/iron-flex-layout": "3.0.1", "@polymer/iron-icon": "3.0.1", "@polymer/iron-iconset-svg": "3.0.1", "@polymer/iron-list": "3.1.0", - "@polymer/iron-media-query": "3.0.1", "@polymer/iron-meta": "3.0.1", - "@polymer/iron-overlay-behavior": "3.0.3", "@polymer/iron-resizable-behavior": "3.0.1", - "@polymer/iron-scroll-target-behavior": "3.0.1", - "@polymer/polymer": "3.2.0", - "@vaadin-component-factory/vcf-auto-select-combobox": "14.8.7", - "@vaadin/vaadin-accordion": "1.2.0", - "@vaadin/vaadin-app-layout": "2.2.0", - "@vaadin/vaadin-avatar": "1.0.4", - "@vaadin/vaadin-board": "2.2.0", - "@vaadin/vaadin-button": "2.4.0", - "@vaadin/vaadin-charts": "6.3.3", - "@vaadin/vaadin-checkbox": "2.5.1", - "@vaadin/vaadin-combo-box": "5.4.12", - "@vaadin/vaadin-confirm-dialog": "1.3.0", - "@vaadin/vaadin-context-menu": "4.6.0", - "@vaadin/vaadin-control-state-mixin": "2.2.6", - "@vaadin/vaadin-cookie-consent": "1.2.0", - "@vaadin/vaadin-core-shrinkwrap": "14.8.6", - "@vaadin/vaadin-crud": "1.3.1", - "@vaadin/vaadin-custom-field": "1.3.1", - "@vaadin/vaadin-date-picker": "4.4.2", - "@vaadin/vaadin-date-time-picker": "1.4.0", - "@vaadin/vaadin-details": "1.2.1", + "@polymer/polymer": "3.4.1", + "@vaadin-component-factory/vcf-auto-select-combobox": "15.0.0", + "@vaadin/accordion": "23.1.2", + "@vaadin/app-layout": "23.1.2", + "@vaadin/avatar": "23.1.2", + "@vaadin/avatar-group": "23.1.2", + "@vaadin/board": "23.1.2", + "@vaadin/bundles": "23.1.2", + "@vaadin/button": "23.1.2", + "@vaadin/charts": "23.1.2", + "@vaadin/checkbox": "23.1.2", + "@vaadin/checkbox-group": "23.1.2", + "@vaadin/combo-box": "23.1.2", + "@vaadin/common-frontend": "0.0.17", + "@vaadin/component-base": "23.1.2", + "@vaadin/confirm-dialog": "23.1.2", + "@vaadin/context-menu": "23.1.2", + "@vaadin/cookie-consent": "23.1.2", + "@vaadin/crud": "23.1.2", + "@vaadin/custom-field": "23.1.2", + "@vaadin/date-picker": "23.1.2", + "@vaadin/date-time-picker": "23.1.2", + "@vaadin/details": "23.1.2", + "@vaadin/dialog": "23.1.2", + "@vaadin/email-field": "23.1.2", + "@vaadin/field-base": "23.1.2", + "@vaadin/field-highlighter": "23.1.0", + "@vaadin/flow-frontend": "./target/flow-frontend", + "@vaadin/form-layout": "23.1.2", + "@vaadin/grid": "23.1.2", + "@vaadin/grid-pro": "23.1.2", + "@vaadin/horizontal-layout": "23.1.2", + "@vaadin/icon": "23.1.2", + "@vaadin/icons": "23.1.2", + "@vaadin/input-container": "23.1.2", + "@vaadin/integer-field": "23.1.2", + "@vaadin/item": "23.1.2", + "@vaadin/list-box": "23.1.2", + "@vaadin/lit-renderer": "23.1.2", + "@vaadin/login": "23.1.2", + "@vaadin/map": "23.1.2", + "@vaadin/menu-bar": "23.1.2", + "@vaadin/message-input": "23.1.2", + "@vaadin/message-list": "23.1.2", + "@vaadin/notification": "23.1.2", + "@vaadin/number-field": "23.1.2", + "@vaadin/password-field": "23.1.2", + "@vaadin/polymer-legacy-adapter": "23.1.2", + "@vaadin/progress-bar": "23.1.2", + "@vaadin/radio-group": "23.1.2", + "@vaadin/rich-text-editor": "23.1.2", + "@vaadin/router": "1.7.4", + "@vaadin/scroller": "23.1.2", + "@vaadin/select": "23.1.2", + "@vaadin/split-layout": "23.1.2", + "@vaadin/tabs": "23.1.2", + "@vaadin/text-area": "23.1.2", + "@vaadin/text-field": "23.1.2", + "@vaadin/time-picker": "23.1.2", + "@vaadin/upload": "23.1.2", + "@vaadin/vaadin-accordion": "23.1.2", + "@vaadin/vaadin-app-layout": "23.1.2", + "@vaadin/vaadin-avatar": "23.1.2", + "@vaadin/vaadin-board": "23.1.2", + "@vaadin/vaadin-button": "23.1.2", + "@vaadin/vaadin-charts": "23.1.2", + "@vaadin/vaadin-checkbox": "23.1.2", + "@vaadin/vaadin-combo-box": "23.1.2", + "@vaadin/vaadin-confirm-dialog": "23.1.2", + "@vaadin/vaadin-context-menu": "23.1.2", + "@vaadin/vaadin-cookie-consent": "23.1.2", + "@vaadin/vaadin-crud": "23.1.2", + "@vaadin/vaadin-custom-field": "23.1.2", + "@vaadin/vaadin-date-picker": "23.1.2", + "@vaadin/vaadin-date-time-picker": "23.1.2", + "@vaadin/vaadin-details": "23.1.2", "@vaadin/vaadin-development-mode-detector": "2.0.5", - "@vaadin/vaadin-dialog": "2.6.0", - "@vaadin/vaadin-element-mixin": "2.4.2", - "@vaadin/vaadin-form-layout": "2.3.0", - "@vaadin/vaadin-grid": "5.9.3", - "@vaadin/vaadin-grid-pro": "2.3.0", - "@vaadin/vaadin-icons": "4.3.2", - "@vaadin/vaadin-item": "2.3.0", - "@vaadin/vaadin-list-box": "1.4.0", - "@vaadin/vaadin-list-mixin": "2.5.1", - "@vaadin/vaadin-login": "1.2.0", - "@vaadin/vaadin-lumo-styles": "1.6.1", - "@vaadin/vaadin-material-styles": "1.3.2", - "@vaadin/vaadin-menu-bar": "1.3.0", - "@vaadin/vaadin-messages": "1.0.2", - "@vaadin/vaadin-notification": "1.6.2", - "@vaadin/vaadin-ordered-layout": "1.4.0", - "@vaadin/vaadin-overlay": "3.5.1", - "@vaadin/vaadin-progress-bar": "1.3.0", - "@vaadin/vaadin-radio-button": "1.5.4", - "@vaadin/vaadin-rich-text-editor": "1.3.1", - "@vaadin/vaadin-select": "2.4.3", - "@vaadin/vaadin-shrinkwrap": "14.8.6", - "@vaadin/vaadin-split-layout": "4.3.1", - "@vaadin/vaadin-tabs": "3.2.0", - "@vaadin/vaadin-text-field": "2.9.2", - "@vaadin/vaadin-themable-mixin": "1.6.2", - "@vaadin/vaadin-time-picker": "2.4.0", - "@vaadin/vaadin-upload": "4.4.3", + "@vaadin/vaadin-dialog": "23.1.2", + "@vaadin/vaadin-form-layout": "23.1.2", + "@vaadin/vaadin-grid": "23.1.2", + "@vaadin/vaadin-grid-pro": "23.1.2", + "@vaadin/vaadin-icon": "23.1.2", + "@vaadin/vaadin-icons": "23.1.2", + "@vaadin/vaadin-item": "23.1.2", + "@vaadin/vaadin-list-box": "23.1.2", + "@vaadin/vaadin-list-mixin": "23.1.2", + "@vaadin/vaadin-login": "23.1.2", + "@vaadin/vaadin-lumo-styles": "23.1.2", + "@vaadin/vaadin-material-styles": "23.1.2", + "@vaadin/vaadin-menu-bar": "23.1.2", + "@vaadin/vaadin-messages": "23.1.2", + "@vaadin/vaadin-notification": "23.1.2", + "@vaadin/vaadin-ordered-layout": "23.1.2", + "@vaadin/vaadin-overlay": "23.1.2", + "@vaadin/vaadin-progress-bar": "23.1.2", + "@vaadin/vaadin-radio-button": "23.1.2", + "@vaadin/vaadin-rich-text-editor": "23.1.2", + "@vaadin/vaadin-select": "23.1.2", + "@vaadin/vaadin-split-layout": "23.1.2", + "@vaadin/vaadin-tabs": "23.1.2", + "@vaadin/vaadin-template-renderer": "23.1.2", + "@vaadin/vaadin-text-field": "23.1.2", + "@vaadin/vaadin-themable-mixin": "23.1.2", + "@vaadin/vaadin-time-picker": "23.1.2", + "@vaadin/vaadin-upload": "23.1.2", "@vaadin/vaadin-usage-statistics": "2.1.2", - "@webcomponents/shadycss": "1.8.0", - "@webcomponents/webcomponentsjs": "^2.2.10", - "construct-style-sheets-polyfill": "3.0.4", - "lit-element": "2.5.1", - "lit-html": "1.4.1" + "@vaadin/vaadin-virtual-list": "23.1.2", + "@vaadin/vertical-layout": "23.1.2", + "@vaadin/virtual-list": "23.1.2", + "construct-style-sheets-polyfill": "3.1.0", + "date-fns": "2.28.0", + "lit": "2.2.3" }, "devDependencies": { - "babel-loader": "8.2.2", + "async": "3.2.2", "chokidar": "^3.5.0", "compression-webpack-plugin": "4.0.1", - "copy-webpack-plugin": "5.1.2", - "css-loader": "4.2.1", + "css-loader": "5.2.7", + "esbuild-loader": "2.19.0", "extra-watch-webpack-plugin": "1.0.3", "extract-loader": "5.1.0", - "file-loader": "6.1.0", - "html-webpack-plugin": "4.5.2", - "lit-css-loader": "0.0.4", - "raw-loader": "3.1.0", - "ts-loader": "8.0.12", - "typescript": "4.0.3", - "webpack": "4.42.0", - "webpack-babel-multi-target-plugin": "2.5.0", - "webpack-cli": "3.3.11", - "webpack-dev-server": "3.11.0", - "webpack-merge": "4.2.2" + "file-loader": "6.2.0", + "fork-ts-checker-webpack-plugin": "6.2.1", + "glob": "7.1.6", + "html-webpack-plugin": "4.5.1", + "lit-css-loader": "0.1.0", + "loader-utils": "2.0.0", + "typescript": "4.5.3", + "webpack": "4.46.0", + "webpack-cli": "4.10.0", + "webpack-dev-server": "4.9.2", + "webpack-merge": "4.2.2", + "workbox-core": "6.5.0", + "workbox-precaching": "6.5.0", + "workbox-webpack-plugin": "6.5.0" }, "vaadin": { "dependencies": { - "@polymer/iron-a11y-announcer": "3.0.2", - "@polymer/iron-a11y-keys-behavior": "3.0.1", - "@polymer/iron-fit-behavior": "3.0.2", - "@polymer/iron-flex-layout": "3.0.1", "@polymer/iron-icon": "3.0.1", "@polymer/iron-iconset-svg": "3.0.1", "@polymer/iron-list": "3.1.0", - "@polymer/iron-media-query": "3.0.1", "@polymer/iron-meta": "3.0.1", - "@polymer/iron-overlay-behavior": "3.0.3", "@polymer/iron-resizable-behavior": "3.0.1", - "@polymer/iron-scroll-target-behavior": "3.0.1", - "@polymer/polymer": "3.2.0", - "@vaadin-component-factory/vcf-auto-select-combobox": "14.8.7", - "@vaadin/vaadin-accordion": "1.2.0", - "@vaadin/vaadin-app-layout": "2.2.0", - "@vaadin/vaadin-avatar": "1.0.4", - "@vaadin/vaadin-board": "2.2.0", - "@vaadin/vaadin-button": "2.4.0", - "@vaadin/vaadin-charts": "6.3.3", - "@vaadin/vaadin-checkbox": "2.5.1", - "@vaadin/vaadin-combo-box": "5.4.12", - "@vaadin/vaadin-confirm-dialog": "1.3.0", - "@vaadin/vaadin-context-menu": "4.6.0", - "@vaadin/vaadin-control-state-mixin": "2.2.6", - "@vaadin/vaadin-cookie-consent": "1.2.0", - "@vaadin/vaadin-core-shrinkwrap": "14.8.6", - "@vaadin/vaadin-crud": "1.3.1", - "@vaadin/vaadin-custom-field": "1.3.1", - "@vaadin/vaadin-date-picker": "4.4.2", - "@vaadin/vaadin-date-time-picker": "1.4.0", - "@vaadin/vaadin-details": "1.2.1", + "@polymer/polymer": "3.4.1", + "@vaadin-component-factory/vcf-auto-select-combobox": "15.0.0", + "@vaadin/accordion": "23.1.2", + "@vaadin/app-layout": "23.1.2", + "@vaadin/avatar": "23.1.2", + "@vaadin/avatar-group": "23.1.2", + "@vaadin/board": "23.1.2", + "@vaadin/bundles": "23.1.2", + "@vaadin/button": "23.1.2", + "@vaadin/charts": "23.1.2", + "@vaadin/checkbox": "23.1.2", + "@vaadin/checkbox-group": "23.1.2", + "@vaadin/combo-box": "23.1.2", + "@vaadin/common-frontend": "0.0.17", + "@vaadin/component-base": "23.1.2", + "@vaadin/confirm-dialog": "23.1.2", + "@vaadin/context-menu": "23.1.2", + "@vaadin/cookie-consent": "23.1.2", + "@vaadin/crud": "23.1.2", + "@vaadin/custom-field": "23.1.2", + "@vaadin/date-picker": "23.1.2", + "@vaadin/date-time-picker": "23.1.2", + "@vaadin/details": "23.1.2", + "@vaadin/dialog": "23.1.2", + "@vaadin/email-field": "23.1.2", + "@vaadin/field-base": "23.1.2", + "@vaadin/field-highlighter": "23.1.0", + "@vaadin/form-layout": "23.1.2", + "@vaadin/grid": "23.1.2", + "@vaadin/grid-pro": "23.1.2", + "@vaadin/horizontal-layout": "23.1.2", + "@vaadin/icon": "23.1.2", + "@vaadin/icons": "23.1.2", + "@vaadin/input-container": "23.1.2", + "@vaadin/integer-field": "23.1.2", + "@vaadin/item": "23.1.2", + "@vaadin/list-box": "23.1.2", + "@vaadin/lit-renderer": "23.1.2", + "@vaadin/login": "23.1.2", + "@vaadin/map": "23.1.2", + "@vaadin/menu-bar": "23.1.2", + "@vaadin/message-input": "23.1.2", + "@vaadin/message-list": "23.1.2", + "@vaadin/notification": "23.1.2", + "@vaadin/number-field": "23.1.2", + "@vaadin/password-field": "23.1.2", + "@vaadin/polymer-legacy-adapter": "23.1.2", + "@vaadin/progress-bar": "23.1.2", + "@vaadin/radio-group": "23.1.2", + "@vaadin/rich-text-editor": "23.1.2", + "@vaadin/router": "1.7.4", + "@vaadin/scroller": "23.1.2", + "@vaadin/select": "23.1.2", + "@vaadin/split-layout": "23.1.2", + "@vaadin/tabs": "23.1.2", + "@vaadin/text-area": "23.1.2", + "@vaadin/text-field": "23.1.2", + "@vaadin/time-picker": "23.1.2", + "@vaadin/upload": "23.1.2", + "@vaadin/vaadin-accordion": "23.1.2", + "@vaadin/vaadin-app-layout": "23.1.2", + "@vaadin/vaadin-avatar": "23.1.2", + "@vaadin/vaadin-board": "23.1.2", + "@vaadin/vaadin-button": "23.1.2", + "@vaadin/vaadin-charts": "23.1.2", + "@vaadin/vaadin-checkbox": "23.1.2", + "@vaadin/vaadin-combo-box": "23.1.2", + "@vaadin/vaadin-confirm-dialog": "23.1.2", + "@vaadin/vaadin-context-menu": "23.1.2", + "@vaadin/vaadin-cookie-consent": "23.1.2", + "@vaadin/vaadin-crud": "23.1.2", + "@vaadin/vaadin-custom-field": "23.1.2", + "@vaadin/vaadin-date-picker": "23.1.2", + "@vaadin/vaadin-date-time-picker": "23.1.2", + "@vaadin/vaadin-details": "23.1.2", "@vaadin/vaadin-development-mode-detector": "2.0.5", - "@vaadin/vaadin-dialog": "2.6.0", - "@vaadin/vaadin-element-mixin": "2.4.2", - "@vaadin/vaadin-form-layout": "2.3.0", - "@vaadin/vaadin-grid": "5.9.3", - "@vaadin/vaadin-grid-pro": "2.3.0", - "@vaadin/vaadin-icons": "4.3.2", - "@vaadin/vaadin-item": "2.3.0", - "@vaadin/vaadin-list-box": "1.4.0", - "@vaadin/vaadin-list-mixin": "2.5.1", - "@vaadin/vaadin-login": "1.2.0", - "@vaadin/vaadin-lumo-styles": "1.6.1", - "@vaadin/vaadin-material-styles": "1.3.2", - "@vaadin/vaadin-menu-bar": "1.3.0", - "@vaadin/vaadin-messages": "1.0.2", - "@vaadin/vaadin-notification": "1.6.2", - "@vaadin/vaadin-ordered-layout": "1.4.0", - "@vaadin/vaadin-overlay": "3.5.1", - "@vaadin/vaadin-progress-bar": "1.3.0", - "@vaadin/vaadin-radio-button": "1.5.4", - "@vaadin/vaadin-rich-text-editor": "1.3.1", - "@vaadin/vaadin-select": "2.4.3", - "@vaadin/vaadin-shrinkwrap": "14.8.6", - "@vaadin/vaadin-split-layout": "4.3.1", - "@vaadin/vaadin-tabs": "3.2.0", - "@vaadin/vaadin-text-field": "2.9.2", - "@vaadin/vaadin-themable-mixin": "1.6.2", - "@vaadin/vaadin-time-picker": "2.4.0", - "@vaadin/vaadin-upload": "4.4.3", + "@vaadin/vaadin-dialog": "23.1.2", + "@vaadin/vaadin-form-layout": "23.1.2", + "@vaadin/vaadin-grid": "23.1.2", + "@vaadin/vaadin-grid-pro": "23.1.2", + "@vaadin/vaadin-icon": "23.1.2", + "@vaadin/vaadin-icons": "23.1.2", + "@vaadin/vaadin-item": "23.1.2", + "@vaadin/vaadin-list-box": "23.1.2", + "@vaadin/vaadin-list-mixin": "23.1.2", + "@vaadin/vaadin-login": "23.1.2", + "@vaadin/vaadin-lumo-styles": "23.1.2", + "@vaadin/vaadin-material-styles": "23.1.2", + "@vaadin/vaadin-menu-bar": "23.1.2", + "@vaadin/vaadin-messages": "23.1.2", + "@vaadin/vaadin-notification": "23.1.2", + "@vaadin/vaadin-ordered-layout": "23.1.2", + "@vaadin/vaadin-overlay": "23.1.2", + "@vaadin/vaadin-progress-bar": "23.1.2", + "@vaadin/vaadin-radio-button": "23.1.2", + "@vaadin/vaadin-rich-text-editor": "23.1.2", + "@vaadin/vaadin-select": "23.1.2", + "@vaadin/vaadin-split-layout": "23.1.2", + "@vaadin/vaadin-tabs": "23.1.2", + "@vaadin/vaadin-template-renderer": "23.1.2", + "@vaadin/vaadin-text-field": "23.1.2", + "@vaadin/vaadin-themable-mixin": "23.1.2", + "@vaadin/vaadin-time-picker": "23.1.2", + "@vaadin/vaadin-upload": "23.1.2", "@vaadin/vaadin-usage-statistics": "2.1.2", - "@webcomponents/shadycss": "1.8.0", - "@webcomponents/webcomponentsjs": "^2.2.10", - "construct-style-sheets-polyfill": "3.0.4", - "lit-element": "2.5.1", - "lit-html": "1.4.1" + "@vaadin/vaadin-virtual-list": "23.1.2", + "@vaadin/vertical-layout": "23.1.2", + "@vaadin/virtual-list": "23.1.2", + "construct-style-sheets-polyfill": "3.1.0", + "date-fns": "2.28.0", + "lit": "2.2.3" }, "devDependencies": { - "babel-loader": "8.2.2", + "async": "3.2.2", "chokidar": "^3.5.0", "compression-webpack-plugin": "4.0.1", - "copy-webpack-plugin": "5.1.2", - "css-loader": "4.2.1", + "css-loader": "5.2.7", + "esbuild-loader": "2.19.0", "extra-watch-webpack-plugin": "1.0.3", "extract-loader": "5.1.0", - "file-loader": "6.1.0", - "html-webpack-plugin": "4.5.2", - "lit-css-loader": "0.0.4", - "raw-loader": "3.1.0", - "ts-loader": "8.0.12", - "typescript": "4.0.3", - "webpack": "4.42.0", - "webpack-babel-multi-target-plugin": "2.5.0", - "webpack-cli": "3.3.11", - "webpack-dev-server": "3.11.0", - "webpack-merge": "4.2.2" + "file-loader": "6.2.0", + "fork-ts-checker-webpack-plugin": "6.2.1", + "glob": "7.1.6", + "html-webpack-plugin": "4.5.1", + "lit-css-loader": "0.1.0", + "loader-utils": "2.0.0", + "typescript": "4.5.3", + "webpack": "4.46.0", + "webpack-cli": "4.10.0", + "webpack-dev-server": "4.9.2", + "webpack-merge": "4.2.2", + "workbox-core": "6.5.0", + "workbox-precaching": "6.5.0", + "workbox-webpack-plugin": "6.5.0" }, - "hash": "25906e8f46c0b87e55e375f3e930017783c6a4a5b4965b9d34d9ce6127350c30" + "hash": "120307ee79c6c0f68522358da82a54ac06bcb9e90e5e739c2a6aaf9f6b10e178" + }, + "overrides": { + "@vaadin/bundles": "$@vaadin/bundles", + "@vaadin/accordion": "$@vaadin/accordion", + "@vaadin/app-layout": "$@vaadin/app-layout", + "@vaadin/avatar": "$@vaadin/avatar", + "@vaadin/avatar-group": "$@vaadin/avatar-group", + "@vaadin/button": "$@vaadin/button", + "@vaadin/checkbox": "$@vaadin/checkbox", + "@vaadin/checkbox-group": "$@vaadin/checkbox-group", + "@vaadin/combo-box": "$@vaadin/combo-box", + "@vaadin/component-base": "$@vaadin/component-base", + "@vaadin/context-menu": "$@vaadin/context-menu", + "@vaadin/custom-field": "$@vaadin/custom-field", + "@vaadin/date-picker": "$@vaadin/date-picker", + "@vaadin/date-time-picker": "$@vaadin/date-time-picker", + "@vaadin/details": "$@vaadin/details", + "@vaadin/dialog": "$@vaadin/dialog", + "@vaadin/email-field": "$@vaadin/email-field", + "@vaadin/field-base": "$@vaadin/field-base", + "@vaadin/field-highlighter": "$@vaadin/field-highlighter", + "@vaadin/form-layout": "$@vaadin/form-layout", + "@vaadin/grid": "$@vaadin/grid", + "@vaadin/horizontal-layout": "$@vaadin/horizontal-layout", + "@vaadin/icon": "$@vaadin/icon", + "@vaadin/icons": "$@vaadin/icons", + "@vaadin/input-container": "$@vaadin/input-container", + "@vaadin/integer-field": "$@vaadin/integer-field", + "@polymer/iron-icon": "$@polymer/iron-icon", + "@polymer/iron-iconset-svg": "$@polymer/iron-iconset-svg", + "@polymer/iron-list": "$@polymer/iron-list", + "@polymer/iron-meta": "$@polymer/iron-meta", + "@polymer/iron-resizable-behavior": "$@polymer/iron-resizable-behavior", + "@vaadin/item": "$@vaadin/item", + "@vaadin/list-box": "$@vaadin/list-box", + "@vaadin/lit-renderer": "$@vaadin/lit-renderer", + "@vaadin/login": "$@vaadin/login", + "@vaadin/menu-bar": "$@vaadin/menu-bar", + "@vaadin/message-input": "$@vaadin/message-input", + "@vaadin/message-list": "$@vaadin/message-list", + "@vaadin/notification": "$@vaadin/notification", + "@vaadin/number-field": "$@vaadin/number-field", + "@vaadin/password-field": "$@vaadin/password-field", + "@vaadin/polymer-legacy-adapter": "$@vaadin/polymer-legacy-adapter", + "@vaadin/progress-bar": "$@vaadin/progress-bar", + "@vaadin/radio-group": "$@vaadin/radio-group", + "@vaadin/scroller": "$@vaadin/scroller", + "@vaadin/select": "$@vaadin/select", + "@vaadin/split-layout": "$@vaadin/split-layout", + "@vaadin/tabs": "$@vaadin/tabs", + "@vaadin/text-area": "$@vaadin/text-area", + "@vaadin/text-field": "$@vaadin/text-field", + "@vaadin/time-picker": "$@vaadin/time-picker", + "@vaadin/upload": "$@vaadin/upload", + "@vaadin/vaadin-accordion": "$@vaadin/vaadin-accordion", + "@vaadin/vaadin-app-layout": "$@vaadin/vaadin-app-layout", + "@vaadin/vaadin-avatar": "$@vaadin/vaadin-avatar", + "@vaadin/vaadin-button": "$@vaadin/vaadin-button", + "@vaadin/vaadin-checkbox": "$@vaadin/vaadin-checkbox", + "@vaadin/vaadin-combo-box": "$@vaadin/vaadin-combo-box", + "@vaadin/vaadin-context-menu": "$@vaadin/vaadin-context-menu", + "@vaadin/vaadin-custom-field": "$@vaadin/vaadin-custom-field", + "@vaadin/vaadin-date-picker": "$@vaadin/vaadin-date-picker", + "@vaadin/vaadin-date-time-picker": "$@vaadin/vaadin-date-time-picker", + "@vaadin/vaadin-details": "$@vaadin/vaadin-details", + "@vaadin/vaadin-development-mode-detector": "$@vaadin/vaadin-development-mode-detector", + "@vaadin/vaadin-dialog": "$@vaadin/vaadin-dialog", + "@vaadin/vaadin-form-layout": "$@vaadin/vaadin-form-layout", + "@vaadin/vaadin-grid": "$@vaadin/vaadin-grid", + "@vaadin/vaadin-icon": "$@vaadin/vaadin-icon", + "@vaadin/vaadin-icons": "$@vaadin/vaadin-icons", + "@vaadin/vaadin-item": "$@vaadin/vaadin-item", + "@vaadin/vaadin-list-box": "$@vaadin/vaadin-list-box", + "@vaadin/vaadin-list-mixin": "$@vaadin/vaadin-list-mixin", + "@vaadin/vaadin-login": "$@vaadin/vaadin-login", + "@vaadin/vaadin-lumo-styles": "$@vaadin/vaadin-lumo-styles", + "@vaadin/vaadin-material-styles": "$@vaadin/vaadin-material-styles", + "@vaadin/vaadin-menu-bar": "$@vaadin/vaadin-menu-bar", + "@vaadin/vaadin-messages": "$@vaadin/vaadin-messages", + "@vaadin/vaadin-notification": "$@vaadin/vaadin-notification", + "@vaadin/vaadin-ordered-layout": "$@vaadin/vaadin-ordered-layout", + "@vaadin/vaadin-overlay": "$@vaadin/vaadin-overlay", + "@vaadin/vaadin-progress-bar": "$@vaadin/vaadin-progress-bar", + "@vaadin/vaadin-radio-button": "$@vaadin/vaadin-radio-button", + "@vaadin/router": "$@vaadin/router", + "@vaadin/vaadin-select": "$@vaadin/vaadin-select", + "@vaadin/vaadin-split-layout": "$@vaadin/vaadin-split-layout", + "@vaadin/vaadin-tabs": "$@vaadin/vaadin-tabs", + "@vaadin/vaadin-template-renderer": "$@vaadin/vaadin-template-renderer", + "@vaadin/vaadin-text-field": "$@vaadin/vaadin-text-field", + "@vaadin/vaadin-themable-mixin": "$@vaadin/vaadin-themable-mixin", + "@vaadin/vaadin-time-picker": "$@vaadin/vaadin-time-picker", + "@vaadin/vaadin-upload": "$@vaadin/vaadin-upload", + "@vaadin/vaadin-usage-statistics": "$@vaadin/vaadin-usage-statistics", + "@vaadin/vaadin-virtual-list": "$@vaadin/vaadin-virtual-list", + "@vaadin/vertical-layout": "$@vaadin/vertical-layout", + "@vaadin/virtual-list": "$@vaadin/virtual-list", + "@vaadin/board": "$@vaadin/board", + "@vaadin/charts": "$@vaadin/charts", + "@vaadin/confirm-dialog": "$@vaadin/confirm-dialog", + "@vaadin/cookie-consent": "$@vaadin/cookie-consent", + "@vaadin/crud": "$@vaadin/crud", + "@vaadin/grid-pro": "$@vaadin/grid-pro", + "@vaadin/map": "$@vaadin/map", + "@vaadin/rich-text-editor": "$@vaadin/rich-text-editor", + "@vaadin/vaadin-board": "$@vaadin/vaadin-board", + "@vaadin/vaadin-charts": "$@vaadin/vaadin-charts", + "@vaadin/vaadin-confirm-dialog": "$@vaadin/vaadin-confirm-dialog", + "@vaadin/vaadin-cookie-consent": "$@vaadin/vaadin-cookie-consent", + "@vaadin/vaadin-crud": "$@vaadin/vaadin-crud", + "@vaadin/vaadin-grid-pro": "$@vaadin/vaadin-grid-pro", + "@vaadin/vaadin-rich-text-editor": "$@vaadin/vaadin-rich-text-editor", + "@polymer/polymer": "$@polymer/polymer", + "@vaadin-component-factory/vcf-auto-select-combobox": "$@vaadin-component-factory/vcf-auto-select-combobox", + "construct-style-sheets-polyfill": "$construct-style-sheets-polyfill", + "@vaadin/common-frontend": "$@vaadin/common-frontend", + "lit": "$lit", + "chokidar": "$chokidar", + "date-fns": "$date-fns" } } diff --git a/autoselectcombobox-demo/pom.xml b/autoselectcombobox-demo/pom.xml index 63f7b53..6f0bcdb 100644 --- a/autoselectcombobox-demo/pom.xml +++ b/autoselectcombobox-demo/pom.xml @@ -6,16 +6,15 @@ org.vaadin.addons.componentfactory autoselectcombobox-demo - 1.0.5 + 2.0.0 war - 14.8.6 - - 1.8 - 1.8 + 23.1.2 + 11 + 11 UTF-8 UTF-8 - 2.7.13 + 9.0.1 9.4.28.v20200408 @@ -87,43 +86,20 @@ com.vaadin - - vaadin - - - - com.vaadin.webjar - * - - - org.webjars.bowergithub.insites - * - - - org.webjars.bowergithub.polymer - * - - - org.webjars.bowergithub.polymerelements - * - - - org.webjars.bowergithub.vaadin - * - - - org.webjars.bowergithub.webcomponents - * - - + vaadin org.slf4j slf4j-simple test + + + javax.servlet + javax.servlet-api + 3.1.0 + + com.vaadin vaadin-testbench @@ -142,18 +118,19 @@ + - com.vaadin - flow-component-demo-helpers - ${flow.version} - test + org.vaadin.addons.componentfactory + autoselectcombobox + ${project.version} + com.vaadin flow-component-demo-helpers - 2.7.13 - compile + ${flow.version} + @@ -214,10 +191,7 @@ 3 - true - - jar - + true diff --git a/autoselectcombobox-demo/src/test/java/org/vaadin/addons/autoselectcombobox/AutoSelectComboBox.java b/autoselectcombobox-demo/src/test/java/org/vaadin/addons/autoselectcombobox/AutoSelectComboBox.java deleted file mode 100644 index 4bed4ac..0000000 --- a/autoselectcombobox-demo/src/test/java/org/vaadin/addons/autoselectcombobox/AutoSelectComboBox.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.vaadin.addons.autoselectcombobox; - -import java.util.Collection; - -import com.vaadin.flow.component.Tag; -import com.vaadin.flow.component.combobox.ComboBox; -import com.vaadin.flow.component.dependency.JsModule; -import com.vaadin.flow.component.dependency.NpmPackage; - -@Tag("vcf-auto-select-combo-box") -@NpmPackage(value = "@vaadin-component-factory/vcf-auto-select-combobox", version="14.8.7") -@JsModule("@vaadin-component-factory/vcf-auto-select-combobox/src/vcf-auto-select-combobox.js") -public class AutoSelectComboBox extends ComboBox { - - public AutoSelectComboBox() { - super(); - } - - public AutoSelectComboBox(int pageSize) { - super(pageSize); - } - - public AutoSelectComboBox(String label, Collection items) { - super(label, items); - } - - public AutoSelectComboBox(String label, T... items) { - super(label, items); - } - - public AutoSelectComboBox(String label) { - super(label); - } - -} \ No newline at end of file diff --git a/autoselectcombobox-demo/webpack.generated.js b/autoselectcombobox-demo/webpack.generated.js index 01e6d4c..a2942b8 100644 --- a/autoselectcombobox-demo/webpack.generated.js +++ b/autoselectcombobox-demo/webpack.generated.js @@ -5,41 +5,57 @@ * This file will be overwritten on every run. Any custom changes should be made to webpack.config.js */ const fs = require('fs'); -const CopyWebpackPlugin = require('copy-webpack-plugin'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); const CompressionPlugin = require('compression-webpack-plugin'); -const {BabelMultiTargetPlugin} = require('webpack-babel-multi-target-plugin'); +const { InjectManifest } = require('workbox-webpack-plugin'); +const { DefinePlugin } = require('webpack'); const ExtraWatchWebpackPlugin = require('extra-watch-webpack-plugin'); - -// Flow plugins -const StatsPlugin = require('@vaadin/stats-plugin'); -const ThemeLiveReloadPlugin = require('@vaadin/theme-live-reload-plugin'); -const { ApplicationThemePlugin, processThemeResources, extractThemeName, findParentThemes } = require('@vaadin/application-theme-plugin'); +const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin'); const path = require('path'); -const baseDir = path.resolve(__dirname); -// the folder of app resources (main.js and flow templates) // this matches /themes/my-theme/ and is used to check css url handling and file path build. const themePartRegex = /(\\|\/)themes\1[\s\S]*?\1/; -const frontendFolder = require('path').resolve(__dirname, 'frontend'); - -const fileNameOfTheFlowGeneratedMainEntryPoint = require('path').resolve(__dirname, 'target/frontend/generated-flow-imports.js'); -const mavenOutputFolderForFlowBundledFiles = require('path').resolve(__dirname, 'target/classes/META-INF/VAADIN'); - -const devmodeGizmoJS = '@vaadin/flow-frontend/VaadinDevmodeGizmo.js' - +// the folder of app resources: +// - flow templates for classic Flow +// - client code with index.html and index.[ts/js] for CCDM +const frontendFolder = path.resolve(__dirname, 'frontend'); +const frontendGeneratedFolder = path.resolve(__dirname, 'frontend/generated'); +const fileNameOfTheFlowGeneratedMainEntryPoint = path.resolve(__dirname, 'target/frontend/generated-flow-imports.js'); +const mavenOutputFolderForFlowBundledFiles = path.resolve(__dirname, 'target/classes/META-INF/VAADIN/webapp'); +const mavenOutputFolderForResourceFiles = path.resolve(__dirname, 'target/classes/META-INF/VAADIN'); +const useClientSideIndexFileForBootstrapping = true; +const clientSideIndexHTML = './index.html'; +const clientSideIndexEntryPoint = path.resolve(__dirname, 'frontend', 'generated/', 'vaadin.ts');; +const pwaEnabled = false; +const offlineEnabled = false; +const offlinePath = 'offline.html'; +const clientServiceWorkerEntryPoint = path.resolve(__dirname, 'target/sw'); // public path for resources, must match Flow VAADIN_BUILD +const VAADIN = 'VAADIN'; const build = 'build'; // public path for resources, must match the request used in flow to get the /build/stats.json file const config = 'config'; -// folder for outputting index.js bundle, etc. -const buildFolder = `${mavenOutputFolderForFlowBundledFiles}/${build}`; +const outputFolder = mavenOutputFolderForFlowBundledFiles; +const indexHtmlPath = 'index.html'; +// folder for outputting vaadin-bundle and other fragments +const buildFolder = path.resolve(outputFolder, VAADIN, build); // folder for outputting stats.json -const confFolder = `${mavenOutputFolderForFlowBundledFiles}/${config}`; +const confFolder = path.resolve(mavenOutputFolderForResourceFiles, config); +const serviceWorkerPath = 'sw.js'; // file which is used by flow to read templates for server `@Id` binding const statsFile = `${confFolder}/stats.json`; +const buildDirectory = path.resolve(__dirname, 'target'); + +// Flow plugins +const BuildStatusPlugin = require(buildDirectory + '/plugins/build-status-plugin'); +const ThemeLiveReloadPlugin = require(buildDirectory + '/plugins/theme-live-reload-plugin'); +const { ApplicationThemePlugin, processThemeResources, extractThemeName, findParentThemes } = require(buildDirectory + + '/plugins/application-theme-plugin'); +const themeLoader = buildDirectory + '/plugins/theme-loader'; + // Folders in the project which can contain static assets. const projectStaticAssetsFolders = [ path.resolve(__dirname, 'src', 'main', 'resources', 'META-INF', 'resources'), @@ -47,39 +63,38 @@ const projectStaticAssetsFolders = [ frontendFolder ]; -const projectStaticAssetsOutputFolder = require('path').resolve(__dirname, 'target/classes/META-INF/VAADIN/static'); +const projectStaticAssetsOutputFolder = path.resolve(__dirname, 'target/classes/META-INF/VAADIN/webapp/VAADIN/static'); // Folders in the project which can contain application themes -const themeProjectFolders = projectStaticAssetsFolders.map((folder) => - path.resolve(folder, 'themes') -); +const themeProjectFolders = projectStaticAssetsFolders.map((folder) => path.resolve(folder, 'themes')); +const tsconfigJsonFile = path.resolve(__dirname, 'tsconfig.json'); +const enableTypeScript = fs.existsSync(tsconfigJsonFile); // Target flow-fronted auto generated to be the actual target folder -const flowFrontendFolder = require('path').resolve(__dirname, 'target/frontend'); - -// make sure that build folder exists before outputting anything -const mkdirp = require('mkdirp'); - -const devMode = process.argv.find(v => v.indexOf('webpack-dev-server') >= 0); - -!devMode && mkdirp(buildFolder); -mkdirp(confFolder); +const flowFrontendFolder = path.resolve(__dirname, 'target/flow-frontend'); + +const statsSetViaCLI = process.argv.find((v) => v.indexOf('--stats') >= 0); +const devMode = process.argv.find((v) => v.indexOf('webpack-dev-server') >= 0); +if (!devMode) { + // make sure that build folder exists before outputting anything + const mkdirp = require('mkdirp'); + mkdirp(buildFolder); + mkdirp(confFolder); +} let stats; -const transpile = !devMode || process.argv.find(v => v.indexOf('--transpile-es5') >= 0); - -const watchDogPrefix = '--watchDogPort='; -let watchDogPort = devMode && process.argv.find(v => v.indexOf(watchDogPrefix) >= 0); -let client; +// Open a connection with the Java dev-mode handler in order to finish +// webpack-dev-mode when it exits or crashes. +const watchDogPort = devMode && process.env.watchDogPort; +const watchDogHost = (devMode && process.env.watchDogHost) || 'localhost'; if (watchDogPort) { - watchDogPort = watchDogPort.substr(watchDogPrefix.length); const runWatchDog = () => { - client = new require('net').Socket(); + const client = new require('net').Socket(); client.setEncoding('utf8'); - client.on('error', function () { - console.log("Watchdog connection error. Terminating webpack process..."); + client.on('error', function (err) { + console.log('Watchdog connection error. Terminating webpack process...', err); client.destroy(); process.exit(0); }); @@ -87,19 +102,80 @@ if (watchDogPort) { client.destroy(); runWatchDog(); }); + client.connect(watchDogPort, watchDogHost); + }; + runWatchDog(); +} - client.connect(watchDogPort, 'localhost'); +// Compute the entries that webpack have to visit +const webPackEntries = {}; +if (useClientSideIndexFileForBootstrapping) { + webPackEntries.bundle = clientSideIndexEntryPoint; + const dirName = path.dirname(fileNameOfTheFlowGeneratedMainEntryPoint); + const baseName = path.basename(fileNameOfTheFlowGeneratedMainEntryPoint, '.js'); + if ( + fs + .readdirSync(dirName) + .filter((fileName) => !fileName.startsWith(baseName) && fileName.endsWith('.js') && fileName.includes('-')).length + ) { + // if there are vaadin exported views, add a second entry + webPackEntries.export = fileNameOfTheFlowGeneratedMainEntryPoint; } - - runWatchDog(); +} else { + webPackEntries.bundle = fileNameOfTheFlowGeneratedMainEntryPoint; } +const appShellUrl = '.'; +let appShellManifestEntry = undefined; + +const swManifestTransform = (manifestEntries) => { + const warnings = []; + const manifest = manifestEntries; + if (useClientSideIndexFileForBootstrapping) { + // `index.html` is a special case: in contrast with the JS bundles produced by webpack + // it's not served as-is directly from the webpack output at `/index.html`. + // It goes through IndexHtmlRequestHandler and is served at `/`. + // + // TODO: calculate the revision based on the IndexHtmlRequestHandler-processed content + // of the index.html file + const indexEntryIdx = manifest.findIndex((entry) => entry.url === 'index.html'); + if (indexEntryIdx !== -1) { + manifest[indexEntryIdx].url = appShellUrl; + appShellManifestEntry = manifest[indexEntryIdx]; + } else { + // Index entry is only emitted on first compilation. Make sure it is cached also for incremental builds + manifest.push(appShellManifestEntry); + } + } + return { manifest, warnings }; +}; + +const createServiceWorkerPlugin = function () { + return new InjectManifest({ + swSrc: clientServiceWorkerEntryPoint, + swDest: serviceWorkerPath, + manifestTransforms: [swManifestTransform], + maximumFileSizeToCacheInBytes: 100 * 1024 * 1024, + dontCacheBustURLsMatching: /.*-[a-z0-9]{20}\.cache\.js/, + include: [ + (chunk) => { + return true; + } + ], + webpackCompilationPlugins: [ + new DefinePlugin({ + VITE_ENABLED: 'false', + OFFLINE_PATH: JSON.stringify(offlinePath) + }) + ] + }); +}; + const flowFrontendThemesFolder = path.resolve(flowFrontendFolder, 'themes'); -const frontendGeneratedFolder = path.resolve(frontendFolder, "generated"); const themeOptions = { devMode: devMode, - // The following matches ./frontend/generated/theme.js - // and for theme in JAR that is copied to target/frontend/themes/ + // The following matches folder 'target/flow-frontend/themes/' + // (not 'frontend/themes') for theme in JAR that is copied there themeResourceFolder: flowFrontendThemesFolder, themeProjectFolders: themeProjectFolders, projectStaticAssetsOutputFolder: projectStaticAssetsOutputFolder, @@ -108,19 +184,21 @@ const themeOptions = { let themeName = undefined; let themeWatchFolders = undefined; if (devMode) { - // Current theme name is being extracted from theme.js located in - // frontend/generated folder + // Current theme name is being extracted from theme.js located in frontend + // generated folder themeName = extractThemeName(frontendGeneratedFolder); const parentThemePaths = findParentThemes(themeName, themeOptions); - const currentThemeFolders = [...projectStaticAssetsFolders - .map((folder) => path.resolve(folder, "themes", themeName)), - path.resolve(flowFrontendThemesFolder, themeName)]; + const currentThemeFolders = [ + ...projectStaticAssetsFolders.map((folder) => path.resolve(folder, 'themes', themeName)), + path.resolve(flowFrontendThemesFolder, themeName) + ]; // Watch the components folders for component styles update in both // current theme and parent themes. Other folders or CSS files except // 'styles.css' should be referenced from `styles.css` anyway, so no need // to watch them. - themeWatchFolders = [...currentThemeFolders, ...parentThemePaths] - .map((themeFolder) => path.resolve(themeFolder, "components")); + themeWatchFolders = [...currentThemeFolders, ...parentThemePaths].map((themeFolder) => + path.resolve(themeFolder, 'components') + ); } const processThemeResourcesCallback = (logger) => processThemeResources(themeOptions, logger); @@ -134,197 +212,185 @@ exports = { module.exports = { mode: 'production', context: frontendFolder, - entry: { - bundle: fileNameOfTheFlowGeneratedMainEntryPoint, - ...(devMode && { gizmo: devmodeGizmoJS }) - }, + entry: webPackEntries, output: { - filename: `${build}/vaadin-[name]-[contenthash].cache.js`, - path: mavenOutputFolderForFlowBundledFiles, - publicPath: 'VAADIN/', + filename: `${VAADIN}/${build}/vaadin-[name]-[contenthash].cache.js`, + path: outputFolder }, resolve: { // Search for import 'x/y' inside these folders, used at least for importing an application theme - modules: [ - 'node_modules', - flowFrontendFolder, - ...projectStaticAssetsFolders, - ], - extensions: ['.ts', '.js'], + modules: ['node_modules', flowFrontendFolder, ...projectStaticAssetsFolders], + extensions: [enableTypeScript && '.ts', '.js'].filter(Boolean), alias: { Frontend: frontendFolder } }, + stats: devMode && !statsSetViaCLI ? 'errors-warnings' : 'normal', // Unclutter output in dev mode + devServer: { - // webpack-dev-server serves ./ , webpack-generated, and java webapp - contentBase: [mavenOutputFolderForFlowBundledFiles, 'src/main/webapp'], - after: function(app, server) { - app.get(`/stats.json`, function(req, res) { - res.json(stats); - }); - app.get(`/stats.hash`, function(req, res) { - res.json(stats.hash.toString()); - }); - app.get(`/assetsByChunkName`, function(req, res) { + hot: false, // disable HMR + client: false, // disable wds client as we handle reloads and errors better + // webpack-dev-server serves ./, webpack-generated, and java webapp + static: [outputFolder, path.resolve(__dirname, 'src', 'main', 'webapp')], + setupMiddlewares: function (middlewares, devServer) { + devServer.app.get(`/assetsByChunkName`, function (req, res) { res.json(stats.assetsByChunkName); }); - app.get(`/stop`, function(req, res) { + devServer.app.get(`/stop`, function (req, res) { // eslint-disable-next-line no-console console.log("Stopped 'webpack-dev-server'"); process.exit(0); }); + return middlewares; } }, module: { rules: [ - ...(transpile ? [ - { - test: /\.tsx?$/, - use: [ BabelMultiTargetPlugin.loader(), 'ts-loader' ], - } - ] : [{ - test: /\.tsx?$/, - use: ['ts-loader'] - }]), - ...(transpile ? [{ // Files that Babel has to transpile - test: /\.js$/, - use: [BabelMultiTargetPlugin.loader()] - }] : []), + enableTypeScript && { + test: /\.ts$/, + loader: 'esbuild-loader', + options: { + loader: 'ts', + target: 'es2019' + } + }, { test: /\.css$/i, use: [ + { + loader: 'lit-css-loader', + options: { + import: 'lit' + } + }, + { + loader: 'extract-loader' + }, { loader: 'css-loader', options: { url: (url, resourcePath) => { - // css urls may contain query string or fragment identifiers - // that should removed before resolving real path - // e.g - // ../webfonts/fa-solid-900.svg#fontawesome - // ../webfonts/fa-brands-400.eot?#iefix - if(url.includes('?')) - url = url.substring(0, url.indexOf('?')); - if(url.includes('#')) - url = url.substring(0, url.indexOf('#')); - // Only translate files from node_modules - const resolve = resourcePath.match(/(\\|\/)node_modules\1/) - && fs.existsSync(path.resolve(path.dirname(resourcePath), url)); + const resolve = resourcePath.match(/(\\|\/)node_modules\1/); const themeResource = resourcePath.match(themePartRegex) && url.match(/^themes\/[\s\S]*?\//); return resolve || themeResource; }, // use theme-loader to also handle any imports in css files importLoaders: 1 - }, + } }, { // theme-loader will change any url starting with './' to start with 'VAADIN/static' instead // NOTE! this loader should be here so it's run before css-loader as loaders are applied Right-To-Left - loader: '@vaadin/theme-loader', + loader: themeLoader, options: { devMode: devMode } } - ], + ] }, { // File-loader only copies files used as imports in .js files or handled by css-loader test: /\.(png|gif|jpg|jpeg|svg|eot|woff|woff2|otf|ttf)$/, - use: [{ - loader: 'file-loader', - options: { - outputPath: 'static/', - name(resourcePath, resourceQuery) { - if (resourcePath.match(/(\\|\/)node_modules\1/)) { - return /(\\|\/)node_modules\1(?!.*node_modules)([\S]+)/.exec(resourcePath)[2].replace(/\\/g, "/"); - } - if (resourcePath.match(/(\\|\/)frontend\1/)) { - return /(\\|\/)frontend\1(?!.*frontend)([\S]+)/.exec(resourcePath)[2].replace(/\\/g, "/"); + use: [ + { + loader: 'file-loader', + options: { + outputPath: 'VAADIN/static/', + name(resourcePath, resourceQuery) { + if (resourcePath.match(/(\\|\/)node_modules\1/)) { + return /(\\|\/)node_modules\1(?!.*node_modules)([\S]+)/.exec(resourcePath)[2].replace(/\\/g, '/'); + } + if (resourcePath.match(/(\\|\/)flow-frontend\1/)) { + return /(\\|\/)flow-frontend\1(?!.*flow-frontend)([\S]+)/.exec(resourcePath)[2].replace(/\\/g, '/'); + } + return '[path][name].[ext]'; } - return '[path][name].[ext]'; } } - }], - }, - ] + ] + } + ].filter(Boolean) }, performance: { maxEntrypointSize: 2097152, // 2MB maxAssetSize: 2097152 // 2MB }, plugins: [ - // Generate compressed bundles when not devMode - ...(devMode ? [] : [new CompressionPlugin()]), - - // Transpile with babel, and produce different bundles per browser - ...(transpile ? [new BabelMultiTargetPlugin({ - babel: { - plugins: [ - // workaround for Safari 10 scope issue (https://bugs.webkit.org/show_bug.cgi?id=159270) - "@babel/plugin-transform-block-scoping", + new ApplicationThemePlugin(themeOptions), - // Edge does not support spread '...' syntax in object literals (#7321) - "@babel/plugin-proposal-object-rest-spread" - ], + ...(devMode && themeName + ? [ + new ExtraWatchWebpackPlugin({ + files: [], + dirs: themeWatchFolders + }), + new ThemeLiveReloadPlugin(processThemeResourcesCallback) + ] + : []), - presetOptions: { - useBuiltIns: false // polyfills are provided from webcomponents-loader.js - } - }, - targets: { - 'es6': { // Evergreen browsers - browsers: [ - // It guarantees that babel outputs pure es6 in bundle and in stats.json - // In the case of browsers no supporting certain feature it will be - // covered by the webcomponents-loader.js - 'last 1 Chrome major versions' - ], - }, - 'es5': { // IE11 - browsers: [ - 'ie 11' - ], - tagAssetsWithKey: true, // append a suffix to the file name + function (compiler) { + // V14 bootstrapping needs the bundle names + compiler.hooks.afterEmit.tapAsync('FlowStatsHelper', (compilation, done) => { + const st = compilation.getStats().toJson(); + const modules = st.modules; + const nodeModulesFolders = modules + .map((module) => module.identifier) + .filter((id) => id.includes('node_modules')); + const npmModules = nodeModulesFolders + .map((id) => id.replace(/.*node_modules./, '')) + .map((id) => { + const parts = id.split('/'); + if (id.startsWith('@')) { + return parts[0] + '/' + parts[1]; + } else { + return parts[0]; + } + }) + .sort() + .filter((value, index, self) => self.indexOf(value) === index); + + let miniStats = { + assetsByChunkName: st.assetsByChunkName, + npmModules: npmModules + }; + + if (!devMode) { + fs.writeFile(statsFile, JSON.stringify(miniStats, null, 1), () => done()); + } else { + stats = miniStats; + done(); } - } - })] : []), + }); + }, - new ApplicationThemePlugin(themeOptions), + // Includes JS output bundles into "index.html" + useClientSideIndexFileForBootstrapping && + new HtmlWebpackPlugin({ + template: clientSideIndexHTML, + filename: indexHtmlPath, + inject: 'head', + scriptLoading: 'defer', + chunks: ['bundle'] + }), - ...(devMode && themeName ? [new ExtraWatchWebpackPlugin({ - files: [], - dirs: themeWatchFolders - }), new ThemeLiveReloadPlugin(processThemeResourcesCallback)] : []), + // Service worker for offline + offlineEnabled && createServiceWorkerPlugin(), - new StatsPlugin({ - devMode: devMode, - statsFile: statsFile, - setResults: function (statsFile) { - stats = statsFile; - } - }), + // Generate compressed bundles when not devMode + !devMode && new CompressionPlugin(), - // Generates the stats file for flow `@Id` binding. - function (compiler) { - compiler.hooks.done.tapAsync('FlowIdPlugin', (compilation, done) => { - // trigger live reload via server - if (client) { - client.write('reload\n'); - } - done(); - }); - }, + enableTypeScript && + new ForkTsCheckerWebpackPlugin({ + typescript: { + configFile: tsconfigJsonFile + } + }), - // Copy webcomponents polyfills. They are not bundled because they - // have its own loader based on browser quirks. - new CopyWebpackPlugin([{ - from: `${baseDir}/node_modules/@webcomponents/webcomponentsjs`, - to: `${build}/webcomponentsjs/`, - ignore: ['*.md', '*.json'] - }]), - ] + new BuildStatusPlugin() + ].filter(Boolean) }; diff --git a/autoselectcombobox/pom.xml b/autoselectcombobox/pom.xml index 91ac778..8873d6d 100644 --- a/autoselectcombobox/pom.xml +++ b/autoselectcombobox/pom.xml @@ -3,17 +3,16 @@ org.vaadin.addons.componentfactory autoselectcombobox - 1.0.5 + 2.0.0 AutoSelectComboBox jar - 14.8.6 + 23.1.2 - 1.8 - 1.8 + 11 + 11 UTF-8 UTF-8 - 2.7.13 9.4.28.v20200408 @@ -86,80 +85,11 @@ com.vaadin - vaadin-core - - - - com.vaadin.webjar - * - - - org.webjars.bowergithub.insites - * - - - org.webjars.bowergithub.polymer - * - - - org.webjars.bowergithub.polymerelements - * - - - org.webjars.bowergithub.vaadin - * - - - org.webjars.bowergithub.webcomponents - * - - - - - org.slf4j - slf4j-simple - test - - - com.vaadin - vaadin-testbench - test - - - - io.github.bonigarcia - webdrivermanager - 3.8.1 - test - - - org.jsoup - jsoup - - - - - com.vaadin - flow-component-demo-helpers - ${flow.version} - test - + vaadin-core + - - jetty:run - - - src/test/java - false - - - src/test/resources - false - - + org.apache.maven.plugins @@ -178,40 +108,6 @@ - - com.vaadin - vaadin-maven-plugin - ${vaadin.version} - - - - prepare-frontend - - - - - - org.apache.maven.plugins - maven-war-plugin - 3.3.2 - - false - - - - org.eclipse.jetty - jetty-maven-plugin - ${jetty.version} - - 3 - - true - - jar - - - diff --git a/autoselectcombobox/src/main/java/org/vaadin/addons/autoselectcombobox/AutoSelectComboBox.java b/autoselectcombobox/src/main/java/org/vaadin/addons/autoselectcombobox/AutoSelectComboBox.java index 4bed4ac..ca70c0d 100644 --- a/autoselectcombobox/src/main/java/org/vaadin/addons/autoselectcombobox/AutoSelectComboBox.java +++ b/autoselectcombobox/src/main/java/org/vaadin/addons/autoselectcombobox/AutoSelectComboBox.java @@ -8,7 +8,7 @@ import com.vaadin.flow.component.dependency.NpmPackage; @Tag("vcf-auto-select-combo-box") -@NpmPackage(value = "@vaadin-component-factory/vcf-auto-select-combobox", version="14.8.7") +@NpmPackage(value = "@vaadin-component-factory/vcf-auto-select-combobox", version="15.0.0") @JsModule("@vaadin-component-factory/vcf-auto-select-combobox/src/vcf-auto-select-combobox.js") public class AutoSelectComboBox extends ComboBox { diff --git a/autoselectcombobox/webpack.generated.js b/autoselectcombobox/webpack.generated.js deleted file mode 100644 index 01e6d4c..0000000 --- a/autoselectcombobox/webpack.generated.js +++ /dev/null @@ -1,330 +0,0 @@ -/** - * NOTICE: this is an auto-generated file - * - * This file has been generated by the `flow:prepare-frontend` maven goal. - * This file will be overwritten on every run. Any custom changes should be made to webpack.config.js - */ -const fs = require('fs'); -const CopyWebpackPlugin = require('copy-webpack-plugin'); -const CompressionPlugin = require('compression-webpack-plugin'); -const {BabelMultiTargetPlugin} = require('webpack-babel-multi-target-plugin'); -const ExtraWatchWebpackPlugin = require('extra-watch-webpack-plugin'); - -// Flow plugins -const StatsPlugin = require('@vaadin/stats-plugin'); -const ThemeLiveReloadPlugin = require('@vaadin/theme-live-reload-plugin'); -const { ApplicationThemePlugin, processThemeResources, extractThemeName, findParentThemes } = require('@vaadin/application-theme-plugin'); - -const path = require('path'); -const baseDir = path.resolve(__dirname); -// the folder of app resources (main.js and flow templates) - -// this matches /themes/my-theme/ and is used to check css url handling and file path build. -const themePartRegex = /(\\|\/)themes\1[\s\S]*?\1/; - -const frontendFolder = require('path').resolve(__dirname, 'frontend'); - -const fileNameOfTheFlowGeneratedMainEntryPoint = require('path').resolve(__dirname, 'target/frontend/generated-flow-imports.js'); -const mavenOutputFolderForFlowBundledFiles = require('path').resolve(__dirname, 'target/classes/META-INF/VAADIN'); - -const devmodeGizmoJS = '@vaadin/flow-frontend/VaadinDevmodeGizmo.js' - -// public path for resources, must match Flow VAADIN_BUILD -const build = 'build'; -// public path for resources, must match the request used in flow to get the /build/stats.json file -const config = 'config'; -// folder for outputting index.js bundle, etc. -const buildFolder = `${mavenOutputFolderForFlowBundledFiles}/${build}`; -// folder for outputting stats.json -const confFolder = `${mavenOutputFolderForFlowBundledFiles}/${config}`; -// file which is used by flow to read templates for server `@Id` binding -const statsFile = `${confFolder}/stats.json`; - -// Folders in the project which can contain static assets. -const projectStaticAssetsFolders = [ - path.resolve(__dirname, 'src', 'main', 'resources', 'META-INF', 'resources'), - path.resolve(__dirname, 'src', 'main', 'resources', 'static'), - frontendFolder -]; - -const projectStaticAssetsOutputFolder = require('path').resolve(__dirname, 'target/classes/META-INF/VAADIN/static'); - -// Folders in the project which can contain application themes -const themeProjectFolders = projectStaticAssetsFolders.map((folder) => - path.resolve(folder, 'themes') -); - - -// Target flow-fronted auto generated to be the actual target folder -const flowFrontendFolder = require('path').resolve(__dirname, 'target/frontend'); - -// make sure that build folder exists before outputting anything -const mkdirp = require('mkdirp'); - -const devMode = process.argv.find(v => v.indexOf('webpack-dev-server') >= 0); - -!devMode && mkdirp(buildFolder); -mkdirp(confFolder); - -let stats; - -const transpile = !devMode || process.argv.find(v => v.indexOf('--transpile-es5') >= 0); - -const watchDogPrefix = '--watchDogPort='; -let watchDogPort = devMode && process.argv.find(v => v.indexOf(watchDogPrefix) >= 0); -let client; -if (watchDogPort) { - watchDogPort = watchDogPort.substr(watchDogPrefix.length); - const runWatchDog = () => { - client = new require('net').Socket(); - client.setEncoding('utf8'); - client.on('error', function () { - console.log("Watchdog connection error. Terminating webpack process..."); - client.destroy(); - process.exit(0); - }); - client.on('close', function () { - client.destroy(); - runWatchDog(); - }); - - client.connect(watchDogPort, 'localhost'); - } - - runWatchDog(); -} - -const flowFrontendThemesFolder = path.resolve(flowFrontendFolder, 'themes'); -const frontendGeneratedFolder = path.resolve(frontendFolder, "generated"); -const themeOptions = { - devMode: devMode, - // The following matches ./frontend/generated/theme.js - // and for theme in JAR that is copied to target/frontend/themes/ - themeResourceFolder: flowFrontendThemesFolder, - themeProjectFolders: themeProjectFolders, - projectStaticAssetsOutputFolder: projectStaticAssetsOutputFolder, - frontendGeneratedFolder: frontendGeneratedFolder -}; -let themeName = undefined; -let themeWatchFolders = undefined; -if (devMode) { - // Current theme name is being extracted from theme.js located in - // frontend/generated folder - themeName = extractThemeName(frontendGeneratedFolder); - const parentThemePaths = findParentThemes(themeName, themeOptions); - const currentThemeFolders = [...projectStaticAssetsFolders - .map((folder) => path.resolve(folder, "themes", themeName)), - path.resolve(flowFrontendThemesFolder, themeName)]; - // Watch the components folders for component styles update in both - // current theme and parent themes. Other folders or CSS files except - // 'styles.css' should be referenced from `styles.css` anyway, so no need - // to watch them. - themeWatchFolders = [...currentThemeFolders, ...parentThemePaths] - .map((themeFolder) => path.resolve(themeFolder, "components")); -} - -const processThemeResourcesCallback = (logger) => processThemeResources(themeOptions, logger); - -exports = { - frontendFolder: `${frontendFolder}`, - buildFolder: `${buildFolder}`, - confFolder: `${confFolder}` -}; - -module.exports = { - mode: 'production', - context: frontendFolder, - entry: { - bundle: fileNameOfTheFlowGeneratedMainEntryPoint, - ...(devMode && { gizmo: devmodeGizmoJS }) - }, - - output: { - filename: `${build}/vaadin-[name]-[contenthash].cache.js`, - path: mavenOutputFolderForFlowBundledFiles, - publicPath: 'VAADIN/', - }, - - resolve: { - // Search for import 'x/y' inside these folders, used at least for importing an application theme - modules: [ - 'node_modules', - flowFrontendFolder, - ...projectStaticAssetsFolders, - ], - extensions: ['.ts', '.js'], - alias: { - Frontend: frontendFolder - } - }, - - devServer: { - // webpack-dev-server serves ./ , webpack-generated, and java webapp - contentBase: [mavenOutputFolderForFlowBundledFiles, 'src/main/webapp'], - after: function(app, server) { - app.get(`/stats.json`, function(req, res) { - res.json(stats); - }); - app.get(`/stats.hash`, function(req, res) { - res.json(stats.hash.toString()); - }); - app.get(`/assetsByChunkName`, function(req, res) { - res.json(stats.assetsByChunkName); - }); - app.get(`/stop`, function(req, res) { - // eslint-disable-next-line no-console - console.log("Stopped 'webpack-dev-server'"); - process.exit(0); - }); - } - }, - - module: { - rules: [ - ...(transpile ? [ - { - test: /\.tsx?$/, - use: [ BabelMultiTargetPlugin.loader(), 'ts-loader' ], - } - ] : [{ - test: /\.tsx?$/, - use: ['ts-loader'] - }]), - ...(transpile ? [{ // Files that Babel has to transpile - test: /\.js$/, - use: [BabelMultiTargetPlugin.loader()] - }] : []), - { - test: /\.css$/i, - use: [ - { - loader: 'css-loader', - options: { - url: (url, resourcePath) => { - // css urls may contain query string or fragment identifiers - // that should removed before resolving real path - // e.g - // ../webfonts/fa-solid-900.svg#fontawesome - // ../webfonts/fa-brands-400.eot?#iefix - if(url.includes('?')) - url = url.substring(0, url.indexOf('?')); - if(url.includes('#')) - url = url.substring(0, url.indexOf('#')); - - // Only translate files from node_modules - const resolve = resourcePath.match(/(\\|\/)node_modules\1/) - && fs.existsSync(path.resolve(path.dirname(resourcePath), url)); - const themeResource = resourcePath.match(themePartRegex) && url.match(/^themes\/[\s\S]*?\//); - return resolve || themeResource; - }, - // use theme-loader to also handle any imports in css files - importLoaders: 1 - }, - }, - { - // theme-loader will change any url starting with './' to start with 'VAADIN/static' instead - // NOTE! this loader should be here so it's run before css-loader as loaders are applied Right-To-Left - loader: '@vaadin/theme-loader', - options: { - devMode: devMode - } - } - ], - }, - { - // File-loader only copies files used as imports in .js files or handled by css-loader - test: /\.(png|gif|jpg|jpeg|svg|eot|woff|woff2|otf|ttf)$/, - use: [{ - loader: 'file-loader', - options: { - outputPath: 'static/', - name(resourcePath, resourceQuery) { - if (resourcePath.match(/(\\|\/)node_modules\1/)) { - return /(\\|\/)node_modules\1(?!.*node_modules)([\S]+)/.exec(resourcePath)[2].replace(/\\/g, "/"); - } - if (resourcePath.match(/(\\|\/)frontend\1/)) { - return /(\\|\/)frontend\1(?!.*frontend)([\S]+)/.exec(resourcePath)[2].replace(/\\/g, "/"); - } - return '[path][name].[ext]'; - } - } - }], - }, - ] - }, - performance: { - maxEntrypointSize: 2097152, // 2MB - maxAssetSize: 2097152 // 2MB - }, - plugins: [ - // Generate compressed bundles when not devMode - ...(devMode ? [] : [new CompressionPlugin()]), - - // Transpile with babel, and produce different bundles per browser - ...(transpile ? [new BabelMultiTargetPlugin({ - babel: { - plugins: [ - // workaround for Safari 10 scope issue (https://bugs.webkit.org/show_bug.cgi?id=159270) - "@babel/plugin-transform-block-scoping", - - // Edge does not support spread '...' syntax in object literals (#7321) - "@babel/plugin-proposal-object-rest-spread" - ], - - presetOptions: { - useBuiltIns: false // polyfills are provided from webcomponents-loader.js - } - }, - targets: { - 'es6': { // Evergreen browsers - browsers: [ - // It guarantees that babel outputs pure es6 in bundle and in stats.json - // In the case of browsers no supporting certain feature it will be - // covered by the webcomponents-loader.js - 'last 1 Chrome major versions' - ], - }, - 'es5': { // IE11 - browsers: [ - 'ie 11' - ], - tagAssetsWithKey: true, // append a suffix to the file name - } - } - })] : []), - - new ApplicationThemePlugin(themeOptions), - - ...(devMode && themeName ? [new ExtraWatchWebpackPlugin({ - files: [], - dirs: themeWatchFolders - }), new ThemeLiveReloadPlugin(processThemeResourcesCallback)] : []), - - new StatsPlugin({ - devMode: devMode, - statsFile: statsFile, - setResults: function (statsFile) { - stats = statsFile; - } - }), - - // Generates the stats file for flow `@Id` binding. - function (compiler) { - compiler.hooks.done.tapAsync('FlowIdPlugin', (compilation, done) => { - // trigger live reload via server - if (client) { - client.write('reload\n'); - } - done(); - }); - }, - - // Copy webcomponents polyfills. They are not bundled because they - // have its own loader based on browser quirks. - new CopyWebpackPlugin([{ - from: `${baseDir}/node_modules/@webcomponents/webcomponentsjs`, - to: `${build}/webcomponentsjs/`, - ignore: ['*.md', '*.json'] - }]), - ] -}; diff --git a/pom.xml b/pom.xml index 406575f..ad0eb59 100644 --- a/pom.xml +++ b/pom.xml @@ -1,88 +1,89 @@ - - 4.0.0 - org.vaadin.addons.componentfactory - autoselectcombobox-root - pom - 1.0.5 - - autoselectcombobox - autoselectcombobox-demo - - autoselectcombobox-root - http://maven.apache.org - - 14.8.6 + + 4.0.0 + org.vaadin.addons.componentfactory + autoselectcombobox-root + pom + 2.0.0 + + autoselectcombobox + autoselectcombobox-demo + + autoselectcombobox-root + http://maven.apache.org + + 23.1.2 - 1.8 - 1.8 - UTF-8 - UTF-8 - 2.7.13 - 9.4.28.v20200408 - - - Vaadin Ltd - https://vaadin.com/ - - - - Apache 2 - http://www.apache.org/licenses/LICENSE-2.0.txt - repo - - - - - - com.vaadin - vaadin-bom - pom - import - ${vaadin.version} - - - - - - central - https://repo.maven.apache.org/maven2 - - false - - - - Vaadin Directory - https://maven.vaadin.com/vaadin-addons - - - - Vaadin prereleases - https://maven.vaadin.com/vaadin-prereleases - - - - vaadin-snapshots - https://oss.sonatype.org/content/repositories/vaadin-snapshots/ - - - - - central - https://repo.maven.apache.org/maven2 - - false - - - - - Vaadin prereleases - https://maven.vaadin.com/vaadin-prereleases - - - vaadin-snapshots - https://oss.sonatype.org/content/repositories/vaadin-snapshots/ - false - - - + 11 + 11 + UTF-8 + UTF-8 + 2.7.13 + 9.4.28.v20200408 + + + Vaadin Ltd + https://vaadin.com/ + + + + Apache 2 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + + + + + + com.vaadin + vaadin-bom + pom + import + ${vaadin.version} + + + + + + central + https://repo.maven.apache.org/maven2 + + false + + + + Vaadin Directory + https://maven.vaadin.com/vaadin-addons + + + + Vaadin prereleases + https://maven.vaadin.com/vaadin-prereleases + + + + vaadin-snapshots + https://oss.sonatype.org/content/repositories/vaadin-snapshots/ + + + + + central + https://repo.maven.apache.org/maven2 + + false + + + + + Vaadin prereleases + https://maven.vaadin.com/vaadin-prereleases + + + vaadin-snapshots + https://oss.sonatype.org/content/repositories/vaadin-snapshots/ + + false + + + + \ No newline at end of file