neo.mjs 10.0.0-beta.4 → 10.0.0-beta.6
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/.github/RELEASE_NOTES/v10.0.0-beta.4.md +2 -2
- package/.github/RELEASE_NOTES/v10.0.0-beta.5.md +70 -0
- package/.github/RELEASE_NOTES/v10.0.0-beta.6.md +48 -0
- package/.github/epic-functional-components.md +498 -0
- package/.github/ticket-asymmetric-vdom-updates.md +122 -0
- package/README.md +0 -3
- package/ServiceWorker.mjs +2 -2
- package/apps/colors/store/Colors.mjs +1 -0
- package/apps/colors/view/GridContainer.mjs +3 -0
- package/apps/colors/view/HeaderToolbar.mjs +2 -0
- package/apps/colors/view/Viewport.mjs +3 -0
- package/apps/covid/view/FooterContainer.mjs +3 -0
- package/apps/covid/view/GalleryContainer.mjs +2 -0
- package/apps/covid/view/GalleryContainerController.mjs +1 -0
- package/apps/covid/view/HeaderContainer.mjs +2 -0
- package/apps/covid/view/HelixContainer.mjs +2 -0
- package/apps/covid/view/HelixContainerController.mjs +1 -0
- package/apps/covid/view/MainContainer.mjs +3 -0
- package/apps/covid/view/TableContainer.mjs +3 -0
- package/apps/covid/view/TableContainerController.mjs +1 -0
- package/apps/covid/view/WorldMapContainer.mjs +2 -0
- package/apps/covid/view/country/Gallery.mjs +3 -0
- package/apps/covid/view/country/Helix.mjs +8 -0
- package/apps/covid/view/country/HistoricalDataTable.mjs +1 -0
- package/apps/covid/view/country/Table.mjs +2 -0
- package/apps/covid/view/mapboxGl/Component.mjs +1 -0
- package/apps/covid/view/mapboxGl/Container.mjs +2 -0
- package/apps/email/EPIC_PLAN.md +58 -0
- package/apps/email/neo-config.json +2 -2
- package/apps/email/store/Emails.mjs +11 -1
- package/apps/email/view/ComposeView.mjs +44 -0
- package/apps/email/view/MainView.mjs +89 -0
- package/apps/email/view/Viewport.mjs +4 -33
- package/apps/email/view/ViewportStateProvider.mjs +3 -3
- package/apps/form/store/SideNav.mjs +1 -0
- package/apps/form/view/FormContainer.mjs +1 -0
- package/apps/form/view/FormPageContainer.mjs +2 -0
- package/apps/form/view/SideNavList.mjs +1 -0
- package/apps/form/view/Viewport.mjs +3 -0
- package/apps/portal/childapps/preview/MainContainer.mjs +1 -0
- package/apps/portal/index.html +1 -1
- package/apps/portal/store/BlogPosts.mjs +2 -0
- package/apps/portal/store/Content.mjs +1 -0
- package/apps/portal/store/ContentSections.mjs +1 -0
- package/apps/portal/store/Examples.mjs +1 -0
- package/apps/portal/view/HeaderToolbar.mjs +1 -0
- package/apps/portal/view/Viewport.mjs +5 -0
- package/apps/portal/view/ViewportController.mjs +8 -2
- package/apps/portal/view/about/Container.mjs +2 -0
- package/apps/portal/view/about/MemberContainer.mjs +7 -0
- package/apps/portal/view/blog/Container.mjs +2 -0
- package/apps/portal/view/blog/List.mjs +2 -0
- package/apps/portal/view/examples/List.mjs +1 -0
- package/apps/portal/view/examples/TabContainer.mjs +4 -0
- package/apps/portal/view/home/ContentBox.mjs +3 -0
- package/apps/portal/view/home/FeatureSection.mjs +8 -0
- package/apps/portal/view/home/FooterContainer.mjs +4 -1
- package/apps/portal/view/home/MainContainer.mjs +2 -0
- package/apps/portal/view/home/parts/AfterMath.mjs +2 -0
- package/apps/portal/view/home/parts/BaseContainer.mjs +1 -0
- package/apps/portal/view/home/parts/Colors.mjs +4 -0
- package/apps/portal/view/home/parts/Features.mjs +2 -0
- package/apps/portal/view/home/parts/Helix.mjs +5 -0
- package/apps/portal/view/home/parts/How.mjs +4 -0
- package/apps/portal/view/home/parts/MainNeo.mjs +1 -0
- package/apps/portal/view/home/parts/References.mjs +2 -0
- package/apps/portal/view/learn/ContentComponent.mjs +11 -5
- package/apps/portal/view/learn/ContentTreeList.mjs +2 -0
- package/apps/portal/view/learn/CubeLayoutButton.mjs +1 -0
- package/apps/portal/view/learn/MainContainer.mjs +4 -0
- package/apps/portal/view/learn/PageContainer.mjs +2 -0
- package/apps/portal/view/learn/PageSectionsContainer.mjs +3 -0
- package/apps/portal/view/learn/PageSectionsList.mjs +1 -0
- package/apps/portal/view/services/Component.mjs +1 -0
- package/apps/realworld/api/Base.mjs +1 -0
- package/apps/realworld/view/HeaderComponent.mjs +4 -0
- package/apps/realworld/view/HomeComponent.mjs +7 -0
- package/apps/realworld/view/MainContainer.mjs +2 -0
- package/apps/realworld/view/MainContainerController.mjs +2 -0
- package/apps/realworld/view/article/CommentComponent.mjs +3 -0
- package/apps/realworld/view/article/Component.mjs +17 -10
- package/apps/realworld/view/article/CreateCommentComponent.mjs +2 -0
- package/apps/realworld/view/article/CreateComponent.mjs +5 -0
- package/apps/realworld/view/article/PreviewComponent.mjs +9 -0
- package/apps/realworld/view/article/TagListComponent.mjs +2 -0
- package/apps/realworld/view/user/ProfileComponent.mjs +7 -0
- package/apps/realworld/view/user/SettingsComponent.mjs +5 -0
- package/apps/realworld/view/user/SignUpComponent.mjs +3 -0
- package/apps/realworld2/api/Base.mjs +1 -0
- package/apps/realworld2/view/FooterComponent.mjs +1 -0
- package/apps/realworld2/view/HeaderToolbar.mjs +3 -0
- package/apps/realworld2/view/HomeContainer.mjs +1 -0
- package/apps/realworld2/view/MainContainer.mjs +2 -0
- package/apps/realworld2/view/MainContainerController.mjs +1 -0
- package/apps/realworld2/view/article/Helix.mjs +1 -0
- package/apps/realworld2/view/article/PreviewComponent.mjs +9 -0
- package/apps/realworld2/view/article/PreviewList.mjs +1 -0
- package/apps/realworld2/view/article/TagListComponent.mjs +2 -0
- package/apps/route/view/CenterContainer.mjs +1 -0
- package/apps/route/view/MainView.mjs +1 -0
- package/apps/sharedcovid/childapps/sharedcovidchart/MainContainer.mjs +1 -0
- package/apps/sharedcovid/childapps/sharedcovidgallery/MainContainer.mjs +1 -0
- package/apps/sharedcovid/childapps/sharedcovidhelix/MainContainer.mjs +1 -0
- package/apps/sharedcovid/childapps/sharedcovidmap/MainContainer.mjs +1 -0
- package/apps/sharedcovid/view/FooterContainer.mjs +3 -0
- package/apps/sharedcovid/view/GalleryContainer.mjs +2 -0
- package/apps/sharedcovid/view/GalleryContainerController.mjs +1 -0
- package/apps/sharedcovid/view/HeaderContainer.mjs +2 -0
- package/apps/sharedcovid/view/HelixContainer.mjs +2 -0
- package/apps/sharedcovid/view/HelixContainerController.mjs +1 -0
- package/apps/sharedcovid/view/MainContainer.mjs +3 -0
- package/apps/sharedcovid/view/TableContainer.mjs +3 -0
- package/apps/sharedcovid/view/TableContainerController.mjs +1 -0
- package/apps/sharedcovid/view/WorldMapContainer.mjs +2 -0
- package/apps/sharedcovid/view/country/Gallery.mjs +3 -0
- package/apps/sharedcovid/view/country/Helix.mjs +8 -0
- package/apps/sharedcovid/view/country/HistoricalDataTable.mjs +1 -0
- package/apps/sharedcovid/view/country/Table.mjs +2 -0
- package/apps/sharedcovid/view/mapboxGl/Component.mjs +1 -0
- package/apps/sharedcovid/view/mapboxGl/Container.mjs +2 -0
- package/apps/shareddialog/childapps/shareddialog2/view/MainContainer.mjs +2 -0
- package/apps/shareddialog/view/DemoDialog.mjs +2 -0
- package/apps/shareddialog/view/MainContainer.mjs +2 -0
- package/apps/shareddialog/view/MainContainerController.mjs +1 -0
- package/buildScripts/addReactiveTags.mjs +191 -0
- package/buildScripts/checkReactiveTags.mjs +160 -0
- package/docs/app/store/Api.mjs +1 -0
- package/docs/app/store/Examples.mjs +1 -0
- package/docs/app/view/ApiTreeList.mjs +1 -0
- package/docs/app/view/ContentTabContainer.mjs +2 -0
- package/docs/app/view/ExamplesTreeList.mjs +2 -0
- package/docs/app/view/HeaderContainer.mjs +3 -0
- package/docs/app/view/MainContainer.mjs +5 -0
- package/docs/app/view/classdetails/HeaderComponent.mjs +1 -0
- package/docs/app/view/classdetails/MainContainer.mjs +3 -0
- package/docs/app/view/classdetails/MembersList.mjs +5 -0
- package/docs/app/view/classdetails/SourceViewComponent.mjs +2 -0
- package/examples/ConfigurationViewport.mjs +14 -8
- package/examples/button/effect/MainContainer.mjs +207 -0
- package/examples/button/effect/app.mjs +6 -0
- package/examples/button/effect/index.html +11 -0
- package/examples/button/effect/neo-config.json +6 -0
- package/examples/calendar/weekview/MainContainer.mjs +4 -0
- package/examples/component/coronaGallery/CountryGallery.mjs +2 -0
- package/examples/component/coronaGallery/CountryStore.mjs +1 -0
- package/examples/component/coronaGallery/Viewport.mjs +3 -0
- package/examples/component/coronaGallery/ViewportController.mjs +1 -0
- package/examples/component/coronaHelix/CountryHelix.mjs +7 -0
- package/examples/component/coronaHelix/MainContainer.mjs +1 -0
- package/examples/component/gallery/ImageStore.mjs +1 -0
- package/examples/component/helix/ImageStore.mjs +1 -0
- package/examples/component/helix/Viewport.mjs +3 -0
- package/examples/component/helix/ViewportController.mjs +1 -0
- package/examples/component/multiWindowCoronaGallery/childapp/Viewport.mjs +1 -0
- package/examples/component/multiWindowHelix/childapp/Viewport.mjs +1 -0
- package/examples/component/wrapper/googleMaps/MapComponent.mjs +2 -0
- package/examples/core/config/MainContainer.mjs +2 -0
- package/examples/dialog/DemoDialog.mjs +2 -0
- package/examples/dialog/MainContainer.mjs +1 -0
- package/examples/form/field/color/MainStore.mjs +1 -0
- package/examples/functional/defineComponent/Component.mjs +18 -0
- package/examples/functional/defineComponent/MainContainer.mjs +41 -0
- package/examples/functional/defineComponent/app.mjs +6 -0
- package/examples/functional/defineComponent/index.html +11 -0
- package/examples/functional/defineComponent/neo-config.json +6 -0
- package/examples/functional/hostComponent/Component.mjs +32 -0
- package/examples/functional/hostComponent/MainContainer.mjs +48 -0
- package/examples/functional/hostComponent/app.mjs +6 -0
- package/examples/functional/hostComponent/index.html +11 -0
- package/examples/functional/hostComponent/neo-config.json +6 -0
- package/examples/grid/animatedRowSorting/Viewport.mjs +1 -1
- package/examples/grid/bigData/ControlsContainer.mjs +3 -0
- package/examples/grid/bigData/GridContainer.mjs +4 -2
- package/examples/grid/bigData/MainContainer.mjs +2 -0
- package/examples/grid/bigData/MainModel.mjs +1 -0
- package/examples/grid/bigData/MainStore.mjs +3 -0
- package/examples/grid/cellEditing/MainContainer.mjs +1 -1
- package/examples/grid/container/MainContainer.mjs +1 -1
- package/examples/grid/covid/GridContainer.mjs +3 -0
- package/examples/grid/covid/MainContainer.mjs +2 -0
- package/examples/grid/covid/Store.mjs +1 -0
- package/examples/grid/nestedRecordFields/EditUserDialog.mjs +3 -0
- package/examples/grid/nestedRecordFields/Viewport.mjs +3 -1
- package/examples/list/animate/List.mjs +4 -0
- package/examples/list/animate/MainContainer.mjs +2 -0
- package/examples/list/circle/MainStore.mjs +1 -0
- package/examples/list/color/MainStore.mjs +1 -0
- package/examples/preloadingAssets/view/MainContainer.mjs +2 -0
- package/examples/stateProvider/advanced/MainContainer.mjs +1 -0
- package/examples/stateProvider/dialog/EditUserDialog.mjs +2 -0
- package/examples/stateProvider/dialog/MainContainer.mjs +1 -0
- package/examples/stateProvider/extendedClass/MainContainer.mjs +2 -0
- package/examples/stateProvider/inline/MainContainer.mjs +1 -0
- package/examples/stateProvider/inlineNoStateProvider/MainContainer.mjs +1 -0
- package/examples/stateProvider/inlineNoStateProvider/MainContainerController.mjs +2 -0
- package/examples/stateProvider/multiWindow/EditUserDialog.mjs +3 -0
- package/examples/stateProvider/multiWindow/MainContainer.mjs +1 -0
- package/examples/stateProvider/multiWindow/Viewport.mjs +1 -0
- package/examples/stateProvider/nestedData/MainContainer.mjs +1 -0
- package/examples/stateProvider/table/MainContainer.mjs +1 -0
- package/examples/table/covid/MainContainer.mjs +2 -0
- package/examples/table/covid/Store.mjs +1 -0
- package/examples/table/covid/TableContainer.mjs +3 -0
- package/examples/table/nestedRecordFields/EditUserDialog.mjs +3 -0
- package/examples/table/nestedRecordFields/Viewport.mjs +1 -0
- package/examples/todoList/version1/MainComponent.mjs +1 -1
- package/examples/toolbar/breadcrumb/view/MainContainer.mjs +2 -0
- package/examples/toolbar/paging/store/Users.mjs +1 -0
- package/examples/toolbar/paging/view/AddUserDialog.mjs +3 -0
- package/examples/toolbar/paging/view/MainContainer.mjs +3 -0
- package/examples/treeAccordion/MainContainer.mjs +2 -2
- package/examples/worker/task/MainContainer.mjs +1 -0
- package/learn/Glossary.md +1 -0
- package/learn/UsingTheseTopics.md +1 -0
- package/learn/benefits/ConfigSystem.md +2 -0
- package/learn/benefits/Effort.md +1 -0
- package/learn/benefits/Features.md +1 -0
- package/learn/benefits/FormsEngine.md +1 -0
- package/learn/benefits/FourEnvironments.md +2 -0
- package/learn/benefits/Introduction.md +2 -0
- package/learn/benefits/MultiWindow.md +3 -1
- package/learn/benefits/OffTheMainThread.md +2 -0
- package/learn/benefits/Quick.md +2 -0
- package/learn/benefits/RPCLayer.md +2 -0
- package/learn/benefits/Speed.md +2 -0
- package/learn/comparisons/NeoVsAngular.md +90 -0
- package/learn/comparisons/NeoVsExtJs.md +178 -0
- package/learn/comparisons/NeoVsNextJs.md +124 -0
- package/learn/comparisons/NeoVsReact.md +95 -0
- package/learn/comparisons/NeoVsSolid.md +78 -0
- package/learn/comparisons/NeoVsVue.md +92 -0
- package/learn/comparisons/Overview.md +46 -0
- package/learn/gettingstarted/ComponentModels.md +2 -0
- package/learn/gettingstarted/Config.md +2 -0
- package/learn/gettingstarted/DescribingTheUI.md +2 -0
- package/learn/gettingstarted/Events.md +2 -0
- package/learn/gettingstarted/Extending.md +2 -0
- package/learn/gettingstarted/References.md +2 -0
- package/learn/gettingstarted/Setup.md +3 -2
- package/learn/gettingstarted/Workspaces.md +2 -0
- package/learn/guides/datahandling/Collections.md +1 -0
- package/learn/guides/datahandling/Records.md +1 -0
- package/learn/guides/datahandling/StateProviders.md +131 -16
- package/learn/guides/datahandling/Tables.md +1 -1
- package/learn/guides/fundamentals/ConfigSystemDeepDive.md +1 -0
- package/learn/guides/fundamentals/DeclarativeComponentTreesVsImperativeVdom.md +2 -0
- package/learn/guides/fundamentals/DeclarativeVDOMWithEffects.md +168 -0
- package/learn/guides/fundamentals/ExtendingNeoClasses.md +1 -0
- package/learn/guides/fundamentals/InstanceLifecycle.md +3 -1
- package/learn/guides/fundamentals/MainThreadAddons.md +2 -0
- package/learn/guides/specificfeatures/Mixins.md +3 -1
- package/learn/guides/specificfeatures/MultiWindow.md +3 -1
- package/learn/guides/specificfeatures/PortalApp.md +2 -0
- package/learn/guides/uibuildingblocks/ComponentsAndContainers.md +2 -0
- package/learn/guides/uibuildingblocks/CustomComponents.md +2 -0
- package/learn/guides/uibuildingblocks/Layouts.md +2 -0
- package/learn/guides/uibuildingblocks/WorkingWithVDom.md +2 -0
- package/learn/guides/userinteraction/Forms.md +2 -0
- package/learn/guides/userinteraction/events/CustomEvents.md +2 -1
- package/learn/guides/userinteraction/events/DomEvents.md +2 -0
- package/learn/javascript/ClassFeatures.md +4 -3
- package/learn/javascript/Classes.md +10 -13
- package/learn/javascript/Overrides.md +10 -6
- package/learn/javascript/Super.md +12 -8
- package/learn/tree.json +71 -63
- package/learn/tutorials/Earthquakes.md +2 -0
- package/learn/tutorials/RSP.md +3 -1
- package/learn/tutorials/TodoList.md +103 -7
- package/package.json +6 -4
- package/resources/scss/src/apps/email/ComposeView.scss +16 -0
- package/resources/scss/src/apps/email/MainView.scss +5 -0
- package/resources/scss/src/apps/portal/learn/ContentComponent.scss +5 -4
- package/src/DefaultConfig.mjs +12 -2
- package/src/Main.mjs +1 -0
- package/src/Neo.mjs +377 -178
- package/src/Xhr.mjs +1 -0
- package/src/button/Base.mjs +13 -0
- package/src/button/Effect.mjs +449 -0
- package/src/button/Split.mjs +2 -0
- package/src/calendar/store/Calendars.mjs +1 -0
- package/src/calendar/store/Colors.mjs +1 -0
- package/src/calendar/store/Events.mjs +1 -0
- package/src/calendar/view/DayComponent.mjs +2 -0
- package/src/calendar/view/EditEventContainer.mjs +4 -1
- package/src/calendar/view/MainContainer.mjs +13 -0
- package/src/calendar/view/MainContainerStateProvider.mjs +14 -28
- package/src/calendar/view/SettingsContainer.mjs +1 -0
- package/src/calendar/view/YearComponent.mjs +16 -0
- package/src/calendar/view/calendars/ColorsList.mjs +2 -0
- package/src/calendar/view/calendars/Container.mjs +2 -0
- package/src/calendar/view/calendars/EditContainer.mjs +1 -0
- package/src/calendar/view/month/Component.mjs +11 -0
- package/src/calendar/view/settings/GeneralContainer.mjs +1 -0
- package/src/calendar/view/settings/MonthContainer.mjs +1 -0
- package/src/calendar/view/settings/WeekContainer.mjs +1 -0
- package/src/calendar/view/settings/YearContainer.mjs +1 -0
- package/src/calendar/view/week/Component.mjs +15 -1
- package/src/calendar/view/week/TimeAxisComponent.mjs +4 -0
- package/src/code/LivePreview.mjs +51 -23
- package/src/collection/Base.mjs +14 -12
- package/src/collection/Filter.mjs +6 -0
- package/src/collection/Sorter.mjs +3 -0
- package/src/component/Base.mjs +156 -802
- package/src/component/Canvas.mjs +1 -0
- package/src/component/Chip.mjs +4 -0
- package/src/component/Circle.mjs +14 -0
- package/src/component/Clock.mjs +4 -0
- package/src/component/DateSelector.mjs +12 -0
- package/src/component/Gallery.mjs +11 -0
- package/src/component/Helix.mjs +24 -0
- package/src/component/Label.mjs +1 -0
- package/src/component/Legend.mjs +3 -0
- package/src/component/MagicMoveText.mjs +4 -0
- package/src/component/Progress.mjs +3 -0
- package/src/component/Splitter.mjs +3 -0
- package/src/component/StatusBadge.mjs +6 -0
- package/src/component/Timer.mjs +4 -0
- package/src/component/Toast.mjs +6 -0
- package/src/component/Video.mjs +1 -0
- package/src/component/mwc/Button.mjs +7 -0
- package/src/component/mwc/TextField.mjs +9 -0
- package/src/component/wrapper/AmChart.mjs +2 -0
- package/src/component/wrapper/GoogleMaps.mjs +3 -0
- package/src/component/wrapper/MapboxGL.mjs +5 -0
- package/src/component/wrapper/MonacoEditor.mjs +12 -0
- package/src/container/Accordion.mjs +2 -0
- package/src/container/Base.mjs +34 -26
- package/src/container/Panel.mjs +1 -0
- package/src/container/Viewport.mjs +1 -0
- package/src/controller/Application.mjs +1 -0
- package/src/controller/Base.mjs +1 -0
- package/src/controller/Component.mjs +1 -0
- package/src/core/Base.mjs +193 -22
- package/src/core/Compare.mjs +4 -7
- package/src/core/Config.mjs +137 -33
- package/src/core/Effect.mjs +193 -0
- package/src/core/EffectBatchManager.mjs +67 -0
- package/src/core/EffectManager.mjs +60 -0
- package/src/core/IdGenerator.mjs +13 -44
- package/src/data/Model.mjs +2 -0
- package/src/data/Store.mjs +7 -0
- package/src/data/connection/WebSocket.mjs +2 -0
- package/src/date/DayViewComponent.mjs +2 -0
- package/src/date/SelectorContainer.mjs +14 -0
- package/src/dialog/Base.mjs +8 -0
- package/src/draggable/DragZone.mjs +5 -0
- package/src/draggable/tree/DragZone.mjs +1 -0
- package/src/filter/BooleanContainer.mjs +2 -0
- package/src/filter/NumberContainer.mjs +3 -0
- package/src/filter/ToggleOperatorsButton.mjs +2 -0
- package/src/form/Fieldset.mjs +6 -0
- package/src/form/field/Base.mjs +7 -0
- package/src/form/field/CheckBox.mjs +18 -0
- package/src/form/field/Chip.mjs +1 -0
- package/src/form/field/ComboBox.mjs +8 -0
- package/src/form/field/Country.mjs +1 -0
- package/src/form/field/Currency.mjs +2 -0
- package/src/form/field/Date.mjs +4 -0
- package/src/form/field/Display.mjs +1 -0
- package/src/form/field/Email.mjs +1 -0
- package/src/form/field/FileUpload.mjs +7 -0
- package/src/form/field/Hidden.mjs +1 -0
- package/src/form/field/Number.mjs +7 -0
- package/src/form/field/Password.mjs +1 -0
- package/src/form/field/Phone.mjs +3 -0
- package/src/form/field/Picker.mjs +2 -0
- package/src/form/field/Radio.mjs +1 -0
- package/src/form/field/Range.mjs +3 -0
- package/src/form/field/Search.mjs +2 -0
- package/src/form/field/Text.mjs +32 -0
- package/src/form/field/TextArea.mjs +7 -0
- package/src/form/field/Time.mjs +6 -0
- package/src/form/field/Url.mjs +3 -0
- package/src/form/field/ZipCode.mjs +2 -0
- package/src/form/field/trigger/Base.mjs +3 -0
- package/src/form/field/trigger/Clear.mjs +2 -0
- package/src/form/field/trigger/CopyToClipboard.mjs +2 -0
- package/src/form/field/trigger/Date.mjs +1 -0
- package/src/form/field/trigger/Picker.mjs +1 -0
- package/src/form/field/trigger/Search.mjs +1 -0
- package/src/form/field/trigger/SpinDown.mjs +2 -0
- package/src/form/field/trigger/SpinUp.mjs +1 -0
- package/src/form/field/trigger/Time.mjs +2 -0
- package/src/functional/_export.mjs +6 -0
- package/src/functional/component/Base.mjs +499 -0
- package/src/functional/defineComponent.mjs +102 -0
- package/src/functional/useConfig.mjs +52 -0
- package/src/functional/useEvent.mjs +43 -0
- package/src/grid/Body.mjs +20 -1
- package/src/grid/Container.mjs +57 -63
- package/src/grid/ScrollManager.mjs +2 -0
- package/src/grid/VerticalScrollbar.mjs +2 -0
- package/src/grid/column/Base.mjs +2 -0
- package/src/grid/column/Component.mjs +1 -1
- package/src/grid/header/Button.mjs +7 -0
- package/src/grid/header/Toolbar.mjs +6 -0
- package/src/grid/plugin/AnimateRows.mjs +2 -0
- package/src/layout/Base.mjs +3 -0
- package/src/layout/Card.mjs +1 -0
- package/src/layout/Cube.mjs +11 -1
- package/src/layout/Fit.mjs +1 -0
- package/src/layout/Flexbox.mjs +7 -0
- package/src/layout/Form.mjs +2 -0
- package/src/layout/Grid.mjs +1 -0
- package/src/layout/HBox.mjs +1 -0
- package/src/layout/VBox.mjs +1 -0
- package/src/list/Base.mjs +13 -0
- package/src/list/Chip.mjs +1 -0
- package/src/list/Circle.mjs +2 -0
- package/src/list/Color.mjs +1 -0
- package/src/list/plugin/Animate.mjs +2 -0
- package/src/main/DeltaUpdates.mjs +1 -0
- package/src/main/DomEvents.mjs +2 -0
- package/src/main/addon/CloneNode.mjs +1 -0
- package/src/main/addon/Cookie.mjs +1 -0
- package/src/main/addon/GoogleMaps.mjs +1 -0
- package/src/main/addon/LocalStorage.mjs +1 -0
- package/src/main/addon/MapboxGL.mjs +1 -0
- package/src/main/addon/Markdown.mjs +1 -0
- package/src/main/addon/Navigator.mjs +1 -0
- package/src/main/addon/Popover.mjs +1 -0
- package/src/main/addon/Stylesheet.mjs +1 -0
- package/src/main/addon/WindowPosition.mjs +1 -0
- package/src/manager/Component.mjs +0 -71
- package/src/manager/VDomUpdate.mjs +235 -0
- package/src/menu/List.mjs +6 -0
- package/src/menu/Model.mjs +1 -0
- package/src/menu/Panel.mjs +3 -0
- package/src/menu/Store.mjs +1 -0
- package/src/mixin/DomEvents.mjs +130 -0
- package/src/mixin/VdomLifecycle.mjs +667 -0
- package/src/plugin/Base.mjs +1 -0
- package/src/plugin/Resizable.mjs +2 -0
- package/src/selection/Model.mjs +15 -18
- package/src/selection/grid/BaseModel.mjs +1 -0
- package/src/sitemap/Component.mjs +1 -0
- package/src/state/Provider.mjs +376 -457
- package/src/state/createHierarchicalDataProxy.mjs +138 -0
- package/src/tab/Container.mjs +6 -0
- package/src/tab/Strip.mjs +1 -0
- package/src/tab/header/Button.mjs +2 -0
- package/src/tab/header/EffectButton.mjs +77 -0
- package/src/tab/header/Toolbar.mjs +1 -0
- package/src/table/Body.mjs +3 -0
- package/src/table/Container.mjs +10 -0
- package/src/table/header/Button.mjs +8 -0
- package/src/table/header/Toolbar.mjs +5 -0
- package/src/table/plugin/CellEditing.mjs +1 -0
- package/src/toolbar/Base.mjs +4 -0
- package/src/toolbar/Breadcrumb.mjs +3 -0
- package/src/toolbar/Paging.mjs +5 -0
- package/src/tooltip/Base.mjs +2 -0
- package/src/tree/List.mjs +3 -0
- package/src/util/HashHistory.mjs +1 -0
- package/src/util/KeyNavigation.mjs +2 -0
- package/src/util/Matrix.mjs +1 -0
- package/src/util/VDom.mjs +7 -1
- package/src/util/VNode.mjs +7 -1
- package/src/util/vdom/TreeBuilder.mjs +129 -0
- package/src/vdom/Helper.mjs +44 -33
- package/src/vdom/VNode.mjs +5 -7
- package/src/worker/App.mjs +1 -5
- package/src/worker/Base.mjs +2 -0
- package/src/worker/Manager.mjs +2 -0
- package/src/worker/ServiceBase.mjs +6 -1
- package/test/siesta/siesta.js +36 -1
- package/test/siesta/tests/CollectionBase.mjs +10 -10
- package/test/siesta/tests/VdomCalendar.mjs +13 -9
- package/test/siesta/tests/VdomHelper.mjs +22 -59
- package/test/siesta/tests/config/AfterSetConfig.mjs +100 -0
- package/test/siesta/tests/{ReactiveConfigs.mjs → config/Basic.mjs} +58 -21
- package/test/siesta/tests/config/CircularDependencies.mjs +166 -0
- package/test/siesta/tests/config/CustomFunctions.mjs +69 -0
- package/test/siesta/tests/config/Hierarchy.mjs +94 -0
- package/test/siesta/tests/config/MemoryLeak.mjs +92 -0
- package/test/siesta/tests/config/MultiLevelHierarchy.mjs +85 -0
- package/test/siesta/tests/core/Effect.mjs +127 -0
- package/test/siesta/tests/core/EffectBatching.mjs +310 -0
- package/test/siesta/tests/neo/MixinStaticConfig.mjs +138 -0
- package/test/siesta/tests/state/Provider.mjs +537 -0
- package/test/siesta/tests/state/ProviderNestedDataConfigs.mjs +255 -0
- package/test/siesta/tests/state/createHierarchicalDataProxy.mjs +204 -0
- package/test/siesta/tests/vdom/VdomAsymmetricUpdates.mjs +366 -0
- package/test/siesta/tests/vdom/VdomRealWorldUpdates.mjs +249 -0
- package/learn/javascript/NewNode.md +0 -31
@@ -0,0 +1,129 @@
|
|
1
|
+
import Base from '../../core/Base.mjs';
|
2
|
+
import ComponentManager from '../../manager/Component.mjs';
|
3
|
+
|
4
|
+
/**
|
5
|
+
* A singleton utility class responsible for recursively building VDOM and VNode trees.
|
6
|
+
* It can expand component references within a tree structure into their full VDOM/VNode representations,
|
7
|
+
* supporting selective (asymmetric) tree expansion for optimized updates.
|
8
|
+
* @class Neo.util.vdom.TreeBuilder
|
9
|
+
* @extends Neo.core.Base
|
10
|
+
* @singleton
|
11
|
+
*/
|
12
|
+
class TreeBuilder extends Base {
|
13
|
+
static config = {
|
14
|
+
/**
|
15
|
+
* @member {String} className='Neo.util.vdom.TreeBuilder'
|
16
|
+
* @protected
|
17
|
+
*/
|
18
|
+
className: 'Neo.util.vdom.TreeBuilder',
|
19
|
+
/**
|
20
|
+
* @member {Boolean} singleton=true
|
21
|
+
* @protected
|
22
|
+
*/
|
23
|
+
singleton: true
|
24
|
+
}
|
25
|
+
|
26
|
+
/**
|
27
|
+
* Copies a given vdom tree and replaces child component references with the vdom of their matching components
|
28
|
+
* @param {Object} vdom
|
29
|
+
* @param {Number} [depth=-1]
|
30
|
+
* The component replacement depth.
|
31
|
+
* -1 will parse the full tree, 1 top level only, 2 include children, 3 include grandchildren
|
32
|
+
* @param {Set<String>|null} [mergedChildIds=null] A set of component IDs to selectively expand.
|
33
|
+
* @returns {Object}
|
34
|
+
*/
|
35
|
+
getVdomTree(vdom, depth = -1, mergedChildIds = null) {
|
36
|
+
if (!Neo.isObject(vdom)) {
|
37
|
+
return vdom
|
38
|
+
}
|
39
|
+
|
40
|
+
let output = {...vdom}; // Shallow copy
|
41
|
+
|
42
|
+
if (vdom.cn) {
|
43
|
+
output.cn = [];
|
44
|
+
|
45
|
+
vdom.cn.forEach(item => {
|
46
|
+
let currentItem = item,
|
47
|
+
childDepth;
|
48
|
+
|
49
|
+
if (currentItem.componentId) {
|
50
|
+
// Prune the branch only if we are at the boundary AND the child is not part of a merged update
|
51
|
+
if (depth === 1 && !mergedChildIds?.has(currentItem.componentId)) {
|
52
|
+
output.cn.push({componentId: 'neo-ignore', id: item.id || item.componentId});
|
53
|
+
// Stop processing this branch
|
54
|
+
return
|
55
|
+
}
|
56
|
+
// Expand the branch if it's part of a merged update, or if the depth requires it
|
57
|
+
else if (depth > 1 || depth === -1 || mergedChildIds?.has(currentItem.componentId)) {
|
58
|
+
const component = ComponentManager.get(currentItem.componentId);
|
59
|
+
if (component?.vdom) {
|
60
|
+
currentItem = component.vdom
|
61
|
+
}
|
62
|
+
}
|
63
|
+
}
|
64
|
+
|
65
|
+
if (item.componentId) {
|
66
|
+
childDepth = (depth === -1) ? -1 : Math.max(0, depth - 1)
|
67
|
+
} else {
|
68
|
+
childDepth = depth
|
69
|
+
}
|
70
|
+
|
71
|
+
output.cn.push(this.getVdomTree(currentItem, childDepth, mergedChildIds))
|
72
|
+
})
|
73
|
+
}
|
74
|
+
|
75
|
+
return output
|
76
|
+
}
|
77
|
+
|
78
|
+
/**
|
79
|
+
* Copies a given vnode tree and replaces child component references with the vnode of their matching components
|
80
|
+
* @param {Object} vnode
|
81
|
+
* @param {Number} [depth=-1]
|
82
|
+
* The component replacement depth.
|
83
|
+
* -1 will parse the full tree, 1 top level only, 2 include children, 3 include grandchildren
|
84
|
+
* @param {Set<String>|null} [mergedChildIds=null] A set of component IDs to selectively expand.
|
85
|
+
* @returns {Object}
|
86
|
+
*/
|
87
|
+
getVnodeTree(vnode, depth = -1, mergedChildIds = null) {
|
88
|
+
let output = {...vnode}; // Shallow copy
|
89
|
+
|
90
|
+
if (vnode.childNodes) {
|
91
|
+
output.childNodes = [];
|
92
|
+
|
93
|
+
vnode.childNodes.forEach(item => {
|
94
|
+
let currentItem = item,
|
95
|
+
childDepth, component;
|
96
|
+
|
97
|
+
if (currentItem.componentId) {
|
98
|
+
// Prune the branch only if we are at the boundary AND the child is not part of a merged update
|
99
|
+
if (depth === 1 && !mergedChildIds?.has(currentItem.componentId)) {
|
100
|
+
output.childNodes.push({componentId: 'neo-ignore', id: item.id || item.componentId});
|
101
|
+
// Stop processing this branch
|
102
|
+
return
|
103
|
+
}
|
104
|
+
// Expand the branch if it's part of a merged update, or if the depth requires it
|
105
|
+
else if (depth > 1 || depth === -1 || mergedChildIds?.has(currentItem.componentId)) {
|
106
|
+
component = ComponentManager.get(currentItem.componentId);
|
107
|
+
|
108
|
+
// Keep references in case there is no vnode (e.g. component not mounted yet)
|
109
|
+
if (component?.vnode) {
|
110
|
+
currentItem = component.vnode
|
111
|
+
}
|
112
|
+
}
|
113
|
+
}
|
114
|
+
|
115
|
+
if (item.componentId) {
|
116
|
+
childDepth = (depth === -1) ? -1 : Math.max(0, depth - 1)
|
117
|
+
} else {
|
118
|
+
childDepth = depth
|
119
|
+
}
|
120
|
+
|
121
|
+
output.childNodes.push(this.getVnodeTree(currentItem, childDepth, mergedChildIds))
|
122
|
+
})
|
123
|
+
}
|
124
|
+
|
125
|
+
return output
|
126
|
+
}
|
127
|
+
}
|
128
|
+
|
129
|
+
export default Neo.setupClass(TreeBuilder);
|
package/src/vdom/Helper.mjs
CHANGED
@@ -23,6 +23,7 @@ class Helper extends Base {
|
|
23
23
|
* Remote method access for other workers
|
24
24
|
* @member {Object} remote={app:['create','update']}
|
25
25
|
* @protected
|
26
|
+
* @reactive
|
26
27
|
*/
|
27
28
|
remote: {
|
28
29
|
app: [
|
@@ -47,19 +48,21 @@ class Helper extends Base {
|
|
47
48
|
* @protected
|
48
49
|
*/
|
49
50
|
compareAttributes({deltas, oldVnode, vnode, vnodeMap}) {
|
50
|
-
//
|
51
|
-
|
52
|
-
|
51
|
+
// If either vnode is a component placeholder (indicated by the presence of componentId),
|
52
|
+
// we must not compare element attributes.
|
53
|
+
if (vnode.componentId || oldVnode.componentId) {
|
54
|
+
return deltas;
|
53
55
|
}
|
54
56
|
|
55
|
-
let
|
57
|
+
let delta = {},
|
58
|
+
attributes, value, keys, styles, add, remove;
|
56
59
|
|
57
|
-
if (vnode.vtype === 'text' && vnode.
|
60
|
+
if (vnode.vtype === 'text' && vnode.textContent !== oldVnode.textContent) {
|
58
61
|
deltas.default.push({
|
59
62
|
action : 'updateVtext',
|
60
63
|
id : vnode.id,
|
61
64
|
parentId: vnodeMap.get(vnode.id).parentNode.id,
|
62
|
-
value : vnode.
|
65
|
+
value : vnode.textContent
|
63
66
|
})
|
64
67
|
} else {
|
65
68
|
keys = Object.keys(vnode);
|
@@ -77,7 +80,6 @@ class Helper extends Base {
|
|
77
80
|
});
|
78
81
|
|
79
82
|
keys.forEach(prop => {
|
80
|
-
delta = {};
|
81
83
|
value = vnode[prop];
|
82
84
|
|
83
85
|
switch (prop) {
|
@@ -143,12 +145,12 @@ class Helper extends Base {
|
|
143
145
|
}
|
144
146
|
break
|
145
147
|
}
|
148
|
+
});
|
146
149
|
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
})
|
150
|
+
if (Object.keys(delta).length > 0) {
|
151
|
+
delta.id = vnode.id;
|
152
|
+
deltas.default.push(delta)
|
153
|
+
}
|
152
154
|
}
|
153
155
|
|
154
156
|
return deltas
|
@@ -200,12 +202,11 @@ class Helper extends Base {
|
|
200
202
|
*/
|
201
203
|
createDeltas(config) {
|
202
204
|
let {deltas={default: [], remove: []}, oldVnode, vnode} = config,
|
203
|
-
|
204
|
-
vnodeId = vnode?.id;
|
205
|
+
vnodeId = vnode?.id;
|
205
206
|
|
206
207
|
// Edge case: setting `removeDom: true` on a top-level vdom node
|
207
|
-
if (!vnode &&
|
208
|
-
deltas.remove.push({action: 'removeNode', id:
|
208
|
+
if (!vnode && (oldVnode?.id || oldVnode?.componentId)) {
|
209
|
+
deltas.remove.push({action: 'removeNode', id: oldVnode.id || oldVnode.componentId});
|
209
210
|
return deltas
|
210
211
|
}
|
211
212
|
|
@@ -213,8 +214,10 @@ class Helper extends Base {
|
|
213
214
|
return deltas
|
214
215
|
}
|
215
216
|
|
216
|
-
|
217
|
-
|
217
|
+
// The top-level nodes passed to createDeltas must be the same logical node. The VdomLifecycle
|
218
|
+
// mixin ensures symmetric trees, so IDs and types (component vs element) must match.
|
219
|
+
if (vnode.id !== oldVnode.id || vnode.componentId !== oldVnode.componentId) {
|
220
|
+
throw new Error(`createDeltas() must be called for the same node. new: {id: ${vnode.id}, cId: ${vnode.componentId}}, old: {id: ${oldVnode.id}, cId: ${oldVnode.componentId}}`);
|
218
221
|
}
|
219
222
|
|
220
223
|
let me = this,
|
@@ -243,11 +246,19 @@ class Helper extends Base {
|
|
243
246
|
break
|
244
247
|
}
|
245
248
|
|
246
|
-
//
|
249
|
+
// A "match" requires nodes to be of the same type (placeholder or element) and have
|
250
|
+
// the same identifier. The VdomLifecycle mixin ensures that both the old (vnode)
|
251
|
+
// and new (vdom) trees are expanded to the same symmetric depth before diffing.
|
247
252
|
if (childNode && oldChildNode && (
|
248
|
-
|
249
|
-
(childNode.componentId &&
|
250
|
-
|
253
|
+
// Case 1: Both nodes are elements with the same ID
|
254
|
+
(!childNode.componentId && !oldChildNode.componentId && childNode.id === oldChildNode.id) ||
|
255
|
+
// Case 2: Both nodes are placeholders for the same component
|
256
|
+
(childNode.componentId && childNode.componentId === oldChildNode.componentId)
|
257
|
+
)) {
|
258
|
+
if (childNode.componentId === 'neo-ignore') {
|
259
|
+
continue
|
260
|
+
}
|
261
|
+
|
251
262
|
me.createDeltas({deltas, oldVnode: oldChildNode, oldVnodeMap, vnode: childNode, vnodeMap});
|
252
263
|
continue
|
253
264
|
}
|
@@ -334,7 +345,7 @@ class Helper extends Base {
|
|
334
345
|
|
335
346
|
newValue = [];
|
336
347
|
|
337
|
-
value.forEach(item => {
|
348
|
+
value.filter(Boolean).forEach(item => {
|
338
349
|
if (item.removeDom !== true) {
|
339
350
|
delete item.removeDom; // could be false
|
340
351
|
potentialNode = me.createVnode(item);
|
@@ -371,6 +382,7 @@ class Helper extends Base {
|
|
371
382
|
case 'componentId':
|
372
383
|
case 'id':
|
373
384
|
case 'static':
|
385
|
+
case 'vtype':
|
374
386
|
node[key] = value;
|
375
387
|
break
|
376
388
|
case 'style':
|
@@ -529,16 +541,15 @@ class Helper extends Base {
|
|
529
541
|
* @protected
|
530
542
|
*/
|
531
543
|
insertNode({deltas, index, oldVnodeMap, vnode, vnodeMap}) {
|
532
|
-
let details
|
533
|
-
{parentNode}
|
534
|
-
parentId
|
535
|
-
me
|
536
|
-
movedNodes
|
537
|
-
delta
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
Object.assign(delta, {hasLeadingTextChildren, index: physicalIndex});
|
544
|
+
let details = vnodeMap.get(vnode.id),
|
545
|
+
{parentNode} = details,
|
546
|
+
parentId = parentNode.id,
|
547
|
+
me = this,
|
548
|
+
movedNodes = me.findMovedNodes({oldVnodeMap, vnode, vnodeMap}),
|
549
|
+
delta = {action: 'insertNode', parentId};
|
550
|
+
|
551
|
+
// Processes the children of the *NEW* parent's VNode in the *current* state
|
552
|
+
delta.index = me.getPhysicalIndex(parentNode, index);
|
542
553
|
|
543
554
|
if (NeoConfig.useDomApiRenderer) {
|
544
555
|
// For direct DOM API mounting, pass the pruned VNode tree
|
package/src/vdom/VNode.mjs
CHANGED
@@ -71,14 +71,15 @@ class VNode {
|
|
71
71
|
});
|
72
72
|
|
73
73
|
if (isVText) {
|
74
|
-
//
|
75
|
-
|
74
|
+
// A vtext node represents a pure text node. It should not be created from an innerHTML property.
|
75
|
+
// For XSS Security, we escape the content when using the string-based renderer.
|
76
|
+
me.textContent = Neo.config.useDomApiRenderer ? textContent : StringUtil.escapeHtml(textContent);
|
76
77
|
} else {
|
77
78
|
Object.assign(me, {
|
78
79
|
attributes: config.attributes || {},
|
79
80
|
className : normalizeClassName(config.className),
|
80
81
|
nodeName : config.nodeName || 'div',
|
81
|
-
style : config.style
|
82
|
+
style : config.style || {}
|
82
83
|
});
|
83
84
|
|
84
85
|
// Use vdom.html on your own risk, it is not fully XSS secure.
|
@@ -135,7 +136,4 @@ function normalizeClassName(classNameInput) {
|
|
135
136
|
return [...new Set(normalizedClasses)]
|
136
137
|
}
|
137
138
|
|
138
|
-
|
139
|
-
ns.VNode = VNode;
|
140
|
-
|
141
|
-
export default VNode;
|
139
|
+
export default Neo.gatekeep(VNode, 'Neo.vdom.VNode');
|
package/src/worker/App.mjs
CHANGED
@@ -21,6 +21,7 @@ class App extends Base {
|
|
21
21
|
className: 'Neo.worker.App',
|
22
22
|
/**
|
23
23
|
* @member {Number} countLoadingThemeFiles_=0
|
24
|
+
* @reactive
|
24
25
|
*/
|
25
26
|
countLoadingThemeFiles_: 0,
|
26
27
|
/**
|
@@ -45,11 +46,6 @@ class App extends Base {
|
|
45
46
|
singleton: true
|
46
47
|
}
|
47
48
|
|
48
|
-
/**
|
49
|
-
* @member {Boolean} isUsingStateProviders=false
|
50
|
-
* @protected
|
51
|
-
*/
|
52
|
-
isUsingStateProviders = false
|
53
49
|
/**
|
54
50
|
* We are storing the params of insertThemeFiles() calls here, in case the method does get triggered
|
55
51
|
* before the json theme structure got loaded.
|
package/src/worker/Base.mjs
CHANGED
@@ -9,6 +9,8 @@ import RemoteMethodAccess from './mixin/RemoteMethodAccess.mjs';
|
|
9
9
|
* The abstract base class for e.g. the App, Data & VDom worker
|
10
10
|
* @class Neo.worker.Base
|
11
11
|
* @extends Neo.core.Base
|
12
|
+
* @mixes Neo.core.Observable
|
13
|
+
* @mixes Neo.worker.mixin.RemoteMethodAccess
|
12
14
|
* @abstract
|
13
15
|
*/
|
14
16
|
class Worker extends Base {
|
package/src/worker/Manager.mjs
CHANGED
@@ -18,6 +18,8 @@ navigator.serviceWorker?.addEventListener('controllerchange', function() {
|
|
18
18
|
* Also, responsible for sending messages from the main thread to the different workers.
|
19
19
|
* @class Neo.worker.Manager
|
20
20
|
* @extends Neo.core.Base
|
21
|
+
* @mixes Neo.core.Observable
|
22
|
+
* @mixes Neo.worker.mixin.RemoteMethodAccess
|
21
23
|
* @singleton
|
22
24
|
*/
|
23
25
|
class Manager extends Base {
|
@@ -16,6 +16,7 @@ class ServiceBase extends Base {
|
|
16
16
|
className: 'Neo.worker.ServiceBase',
|
17
17
|
/**
|
18
18
|
* @member {String} cacheName_='neo-runtime'
|
19
|
+
* @reactive
|
19
20
|
*/
|
20
21
|
cacheName_: 'neo-runtime',
|
21
22
|
/**
|
@@ -26,6 +27,7 @@ class ServiceBase extends Base {
|
|
26
27
|
* Remote method access for other workers
|
27
28
|
* @member {Object} remote={app: [//...]}
|
28
29
|
* @protected
|
30
|
+
* @reactive
|
29
31
|
*/
|
30
32
|
remote: {
|
31
33
|
app: [
|
@@ -175,6 +177,8 @@ class ServiceBase extends Base {
|
|
175
177
|
* @param {ExtendableMessageEvent} event
|
176
178
|
*/
|
177
179
|
async onActivate(event) {
|
180
|
+
await globalThis.clients.claim();
|
181
|
+
|
178
182
|
console.log('onActivate', event);
|
179
183
|
|
180
184
|
let me = this,
|
@@ -229,7 +233,8 @@ class ServiceBase extends Base {
|
|
229
233
|
* @param {ExtendableMessageEvent} event
|
230
234
|
*/
|
231
235
|
onInstall(event) {
|
232
|
-
console.log('onInstall', event)
|
236
|
+
console.log('onInstall', event);
|
237
|
+
globalThis.skipWaiting();
|
233
238
|
}
|
234
239
|
|
235
240
|
/**
|
package/test/siesta/siesta.js
CHANGED
@@ -17,8 +17,41 @@ project.configure({
|
|
17
17
|
});
|
18
18
|
|
19
19
|
project.plan(
|
20
|
+
{
|
21
|
+
group: 'neo',
|
22
|
+
items: [
|
23
|
+
'tests/neo/MixinStaticConfig.mjs'
|
24
|
+
]
|
25
|
+
},
|
20
26
|
'tests/ClassConfigsAndFields.mjs',
|
21
27
|
'tests/ClassSystem.mjs',
|
28
|
+
{
|
29
|
+
group: 'core',
|
30
|
+
items: [
|
31
|
+
'tests/core/Effect.mjs'
|
32
|
+
]
|
33
|
+
},
|
34
|
+
{
|
35
|
+
group: 'config',
|
36
|
+
items: [
|
37
|
+
'tests/config/Basic.mjs',
|
38
|
+
'tests/config/Hierarchy.mjs',
|
39
|
+
'tests/config/MultiLevelHierarchy.mjs',
|
40
|
+
'tests/config/CustomFunctions.mjs',
|
41
|
+
'tests/config/AfterSetConfig.mjs',
|
42
|
+
'tests/config/MemoryLeak.mjs',
|
43
|
+
'tests/config/CircularDependencies.mjs',
|
44
|
+
'tests/core/EffectBatching.mjs'
|
45
|
+
]
|
46
|
+
},
|
47
|
+
{
|
48
|
+
group: 'state',
|
49
|
+
items: [
|
50
|
+
'tests/state/createHierarchicalDataProxy.mjs',
|
51
|
+
'tests/state/Provider.mjs',
|
52
|
+
'tests/state/ProviderNestedDataConfigs.mjs'
|
53
|
+
]
|
54
|
+
},
|
22
55
|
'tests/CollectionBase.mjs',
|
23
56
|
'tests/ManagerInstance.mjs',
|
24
57
|
'tests/Rectangle.mjs',
|
@@ -37,7 +70,9 @@ project.plan(
|
|
37
70
|
'tests/vdom/table/Container.mjs'
|
38
71
|
]
|
39
72
|
},
|
40
|
-
'tests/vdom/Advanced.mjs'
|
73
|
+
'tests/vdom/Advanced.mjs',
|
74
|
+
'tests/vdom/VdomAsymmetricUpdates.mjs',
|
75
|
+
'tests/vdom/VdomRealWorldUpdates.mjs']
|
41
76
|
}
|
42
77
|
);
|
43
78
|
|
@@ -28,20 +28,20 @@ StartTest(t => {
|
|
28
28
|
]
|
29
29
|
});
|
30
30
|
|
31
|
-
t.isStrict(collection.
|
31
|
+
t.isStrict(collection.count, 6, 'Collection has 6 items');
|
32
32
|
t.isStrict(collection.map.size, 6, 'map has 6 items');
|
33
33
|
});
|
34
34
|
|
35
35
|
t.it('Modify collection items', t => {
|
36
36
|
collection.add({country: 'Germany', firstname: 'Bastian', githubId: 'bhaustein', lastname: 'Haustein'});
|
37
37
|
|
38
|
-
t.isStrict(collection.
|
38
|
+
t.isStrict(collection.count, 7, 'Collection has 7 items');
|
39
39
|
t.isStrict(collection.map.size, 7, 'map has 7 items');
|
40
40
|
|
41
41
|
|
42
42
|
collection.remove('bhaustein');
|
43
43
|
|
44
|
-
t.isStrict(collection.
|
44
|
+
t.isStrict(collection.count, 6, 'Collection has 6 items');
|
45
45
|
t.isStrict(collection.map.size, 6, 'map has 6 items');
|
46
46
|
|
47
47
|
collection.insert(1, [
|
@@ -49,12 +49,12 @@ StartTest(t => {
|
|
49
49
|
{country: 'Argentina', firstname: 'Max', githubId: 'elmasse', lastname: 'Fierro'}
|
50
50
|
]);
|
51
51
|
|
52
|
-
t.isStrict(collection.
|
52
|
+
t.isStrict(collection.count, 8, 'Collection has 8 items');
|
53
53
|
t.isStrict(collection.map.size, 8, 'map has 8 items');
|
54
54
|
|
55
55
|
collection.insert(1, {country: 'Croatia', firstname: 'Grgur', githubId: 'grgur', lastname: 'Grisogono'});
|
56
56
|
|
57
|
-
t.isStrict(collection.
|
57
|
+
t.isStrict(collection.count, 9, 'Collection has 9 items');
|
58
58
|
t.isStrict(collection.map.size, 9, 'map has 9 items');
|
59
59
|
|
60
60
|
t.isDeeplyStrict(collection.getRange(1, 4), [
|
@@ -227,7 +227,7 @@ StartTest(t => {
|
|
227
227
|
collection3.remove('mrsunshine');
|
228
228
|
collection3.remove('elmasse');
|
229
229
|
|
230
|
-
t.isStrict(collection3.
|
230
|
+
t.isStrict(collection3.count, 7, 'collection3 count is 7');
|
231
231
|
|
232
232
|
t.diag("filter by firstname, like, 'a'");
|
233
233
|
|
@@ -238,8 +238,8 @@ StartTest(t => {
|
|
238
238
|
value : 'a'
|
239
239
|
}];
|
240
240
|
|
241
|
-
t.isStrict(collection3.
|
242
|
-
t.isStrict(collection3.allItems.
|
241
|
+
t.isStrict(collection3.count, 4, 'collection3 count is 4');
|
242
|
+
t.isStrict(collection3.allItems.count, 7, 'collection3 allItems count is 7');
|
243
243
|
|
244
244
|
t.diag("Add Max & Nils back");
|
245
245
|
|
@@ -248,8 +248,8 @@ StartTest(t => {
|
|
248
248
|
{country: 'Germany', firstname: 'Nils', githubId: 'mrsunshine', lastname: 'Dehl'}
|
249
249
|
]);
|
250
250
|
|
251
|
-
t.isStrict(collection3.
|
252
|
-
t.isStrict(collection3.allItems.
|
251
|
+
t.isStrict(collection3.count, 5, 'collection3 count is 5');
|
252
|
+
t.isStrict(collection3.allItems.count, 9, 'collection3 allItems count is 9');
|
253
253
|
});
|
254
254
|
|
255
255
|
t.it('Add & remove at same time', t => {
|
@@ -7,6 +7,10 @@ import VDomUtil from '../../../src/util/VDom.mjs';
|
|
7
7
|
|
8
8
|
let deltas, output, vdom, vnode;
|
9
9
|
|
10
|
+
// tests are designed for this rendering mode
|
11
|
+
Neo.config.useDomApiRenderer = false;
|
12
|
+
VdomHelper.onNeoConfigChange({useDomApiRenderer: false})
|
13
|
+
|
10
14
|
StartTest(t => {
|
11
15
|
t.it('Week view: Infinite Scrolling', t => {
|
12
16
|
vdom =
|
@@ -23,7 +27,7 @@ StartTest(t => {
|
|
23
27
|
{id: 'col-15'}
|
24
28
|
]};
|
25
29
|
|
26
|
-
vnode = VdomHelper.create(vdom);
|
30
|
+
let vnode = VdomHelper.create({vdom}).vnode;
|
27
31
|
|
28
32
|
vdom =
|
29
33
|
{id: 'neo-vnode-1', cn: [
|
@@ -105,7 +109,7 @@ StartTest(t => {
|
|
105
109
|
]}
|
106
110
|
]};
|
107
111
|
|
108
|
-
vnode = VdomHelper.create(vdom);
|
112
|
+
let vnode = VdomHelper.create({vdom}).vnode;
|
109
113
|
|
110
114
|
vdom =
|
111
115
|
{id: 'neo-calendar-week', cn: [
|
@@ -165,7 +169,7 @@ StartTest(t => {
|
|
165
169
|
]}
|
166
170
|
]};
|
167
171
|
|
168
|
-
vnode = VdomHelper.create(vdom);
|
172
|
+
let vnode = VdomHelper.create({vdom}).vnode;
|
169
173
|
|
170
174
|
vdom =
|
171
175
|
{id: 'neo-calendar-week', cn: [
|
@@ -216,7 +220,7 @@ StartTest(t => {
|
|
216
220
|
]}
|
217
221
|
]};
|
218
222
|
|
219
|
-
vnode = VdomHelper.create(vdom);
|
223
|
+
let vnode = VdomHelper.create({vdom}).vnode;
|
220
224
|
|
221
225
|
vdom =
|
222
226
|
{id: 'neo-calendar-week', cn: [
|
@@ -268,7 +272,7 @@ StartTest(t => {
|
|
268
272
|
{id: 'neo-column-3'}
|
269
273
|
]};
|
270
274
|
|
271
|
-
vnode = VdomHelper.create(vdom);
|
275
|
+
let vnode = VdomHelper.create({vdom}).vnode;
|
272
276
|
|
273
277
|
vdom =
|
274
278
|
{id: 'neo-calendar-week', cn: [
|
@@ -333,7 +337,7 @@ StartTest(t => {
|
|
333
337
|
vdom =
|
334
338
|
{id: 'neo-1'};
|
335
339
|
|
336
|
-
vnode = VdomHelper.create(vdom);
|
340
|
+
vnode = VdomHelper.create({vdom}).vnode;
|
337
341
|
|
338
342
|
vdom =
|
339
343
|
{id: 'neo-1', removeDom: true};
|
@@ -358,7 +362,7 @@ StartTest(t => {
|
|
358
362
|
]}
|
359
363
|
]};
|
360
364
|
|
361
|
-
vnode = VdomHelper.create(vdom);
|
365
|
+
vnode = VdomHelper.create({vdom}).vnode;
|
362
366
|
|
363
367
|
vdom =
|
364
368
|
{id: 'neo-calendar-week', cn: [
|
@@ -403,7 +407,7 @@ StartTest(t => {
|
|
403
407
|
]}
|
404
408
|
]};
|
405
409
|
|
406
|
-
vnode = VdomHelper.create(vdom);
|
410
|
+
vnode = VdomHelper.create({vdom}).vnode;
|
407
411
|
|
408
412
|
vdom =
|
409
413
|
{tag: 'ul', id: 'neo-calendar-calendars-list-1', cn: [
|
@@ -1696,7 +1700,7 @@ StartTest(t => {
|
|
1696
1700
|
}], tag: 'div'
|
1697
1701
|
}
|
1698
1702
|
|
1699
|
-
vnode = VdomHelper.create(vdom);
|
1703
|
+
let vnode = VdomHelper.create({vdom}).vnode;
|
1700
1704
|
|
1701
1705
|
vdom =
|
1702
1706
|
{cls: ['neo-c-m-scrollcontainer', 'neo-scroll-shadows', 'neo-is-scrolling'], id: 'neo-vnode-150', cn: [
|