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,193 @@
|
|
1
|
+
import Config from './Config.mjs';
|
2
|
+
import EffectManager from './EffectManager.mjs';
|
3
|
+
import EffectBatchManager from './EffectBatchManager.mjs';
|
4
|
+
import IdGenerator from './IdGenerator.mjs';
|
5
|
+
|
6
|
+
/**
|
7
|
+
* Creates a reactive effect that automatically tracks its dependencies and re-runs when any of them change.
|
8
|
+
* This is a lightweight, plain JavaScript class for performance.
|
9
|
+
* It serves as a core reactive primitive, enabling automatic and dynamic dependency tracking.
|
10
|
+
* @class Neo.core.Effect
|
11
|
+
*/
|
12
|
+
class Effect {
|
13
|
+
/**
|
14
|
+
* The optional component id this effect belongs to.
|
15
|
+
* @member {String|null} componentId=null
|
16
|
+
*/
|
17
|
+
componentId = null
|
18
|
+
/**
|
19
|
+
* A Map containing Config instances as keys and their cleanup functions as values.
|
20
|
+
* @member {Map} dependencies=new Map()
|
21
|
+
* @protected
|
22
|
+
*/
|
23
|
+
dependencies = new Map()
|
24
|
+
/**
|
25
|
+
* The function to execute.
|
26
|
+
* @member {Function|null} _fn=null
|
27
|
+
*/
|
28
|
+
_fn = null
|
29
|
+
/**
|
30
|
+
* The unique identifier for this effect instance.
|
31
|
+
* @member {String|null}
|
32
|
+
*/
|
33
|
+
id = IdGenerator.getId('effect')
|
34
|
+
/**
|
35
|
+
* @member {Boolean}
|
36
|
+
* @protected
|
37
|
+
*/
|
38
|
+
isDestroyed = false
|
39
|
+
/**
|
40
|
+
* @member {Neo.core.Config}
|
41
|
+
* @protected
|
42
|
+
*/
|
43
|
+
isRunning = null
|
44
|
+
|
45
|
+
/**
|
46
|
+
* @member fn
|
47
|
+
*/
|
48
|
+
get fn() {
|
49
|
+
return this._fn
|
50
|
+
}
|
51
|
+
set fn(value) {
|
52
|
+
this._fn = value;
|
53
|
+
// Assigning a new function to `fn` automatically triggers a re-run.
|
54
|
+
// This ensures that the effect immediately re-evaluates its dependencies
|
55
|
+
// based on the new function's logic, clearing old dependencies and establishing new ones.
|
56
|
+
this.run()
|
57
|
+
}
|
58
|
+
|
59
|
+
/**
|
60
|
+
* @param {Function|Object} fn - The function to execute, or a config object for the effect.
|
61
|
+
* @param {Function} [fn.fn] - The function to execute for the effect (if the first argument is an object).
|
62
|
+
* @param {String} [fn.componentId] - The component id this effect belongs to.
|
63
|
+
* @param {Boolean} [fn.lazy=false] - If true, the effect will not run immediately upon creation.
|
64
|
+
* @param {Object|Object[]} [fn.subscriber] - A single subscriber or an array of subscribers for the isRunning config.
|
65
|
+
* @param {Object} [options={}] - Optional. Used if the first argument is a function, this object contains the options.
|
66
|
+
* @example
|
67
|
+
* // Signature 1: Function and Options
|
68
|
+
* const myEffect = new Effect(() => console.log('Run'), {lazy: true});
|
69
|
+
* @example
|
70
|
+
* // Signature 2: Single Config Object
|
71
|
+
* const myEffect = new Effect({fn: () => console.log('Run'), lazy: true});
|
72
|
+
*/
|
73
|
+
constructor(fn, options={}) {
|
74
|
+
const me = this;
|
75
|
+
|
76
|
+
// This single statement handles both (fn, options) and ({...}) signatures
|
77
|
+
// by normalizing them into a single object that we can destructure.
|
78
|
+
const {
|
79
|
+
fn: effectFn,
|
80
|
+
componentId,
|
81
|
+
lazy = false,
|
82
|
+
subscriber
|
83
|
+
} = (typeof fn === 'function') ? { ...options, fn } : (fn || {});
|
84
|
+
|
85
|
+
if (componentId) {
|
86
|
+
me.componentId = componentId
|
87
|
+
}
|
88
|
+
|
89
|
+
me.isRunning = new Config(false);
|
90
|
+
|
91
|
+
// The subscriber(s) must be added *before* the first run is triggered.
|
92
|
+
// This is critical for consumers like functional components, which need to process
|
93
|
+
// the initial VDOM synchronously within the constructor lifecycle.
|
94
|
+
if (subscriber) {
|
95
|
+
// A concise way to handle both single and array subscribers.
|
96
|
+
[].concat(subscriber).forEach(sub => me.isRunning.subscribe(sub))
|
97
|
+
}
|
98
|
+
|
99
|
+
// If lazy, just store the function without running it.
|
100
|
+
// Otherwise, use the setter to trigger the initial run.
|
101
|
+
if (lazy) {
|
102
|
+
me._fn = effectFn
|
103
|
+
} else {
|
104
|
+
me.fn = effectFn
|
105
|
+
}
|
106
|
+
}
|
107
|
+
|
108
|
+
/**
|
109
|
+
* Cleans up all subscriptions and destroys the effect.
|
110
|
+
*/
|
111
|
+
destroy() {
|
112
|
+
const me = this;
|
113
|
+
|
114
|
+
me.dependencies.forEach(cleanup => cleanup());
|
115
|
+
me.dependencies.clear();
|
116
|
+
me.isDestroyed = true
|
117
|
+
}
|
118
|
+
|
119
|
+
/**
|
120
|
+
* Executes the effect function, tracking its dependencies.
|
121
|
+
* This is called automatically on creation and whenever a dependency changes.
|
122
|
+
* The dynamic re-tracking ensures the effect always reflects its current dependencies,
|
123
|
+
* even if the logic within `fn` changes conditionally.
|
124
|
+
* @protected
|
125
|
+
*/
|
126
|
+
run() {
|
127
|
+
const me = this;
|
128
|
+
|
129
|
+
EffectManager.pause(); // Pause dependency tracking for isRunning.get()
|
130
|
+
if (me.isDestroyed || me.isRunning.get()) {
|
131
|
+
EffectManager.resume(); // Resume if we return early
|
132
|
+
return
|
133
|
+
}
|
134
|
+
|
135
|
+
if (EffectBatchManager.isBatchActive()) {
|
136
|
+
EffectBatchManager.queueEffect(me);
|
137
|
+
return
|
138
|
+
}
|
139
|
+
|
140
|
+
me.isRunning.set(true);
|
141
|
+
|
142
|
+
me.dependencies.forEach(cleanup => cleanup());
|
143
|
+
me.dependencies.clear();
|
144
|
+
|
145
|
+
EffectManager.push(me);
|
146
|
+
EffectManager.resume();
|
147
|
+
|
148
|
+
try {
|
149
|
+
me.fn()
|
150
|
+
} finally {
|
151
|
+
EffectManager.pop();
|
152
|
+
EffectManager.pause(); // Pause dependency tracking for isRunning.set(false)
|
153
|
+
me.isRunning.set(false);
|
154
|
+
EffectManager.resume() // Resume after isRunning.set(false)
|
155
|
+
}
|
156
|
+
}
|
157
|
+
|
158
|
+
/**
|
159
|
+
* Adds a `Neo.core.Config` instance as a dependency for this effect.
|
160
|
+
* @param {Neo.core.Config} config The config instance to subscribe to.
|
161
|
+
* @protected
|
162
|
+
*/
|
163
|
+
addDependency(config) {
|
164
|
+
const me = this;
|
165
|
+
|
166
|
+
// Only add if not already a dependency. Map uses strict equality (===) for object keys.
|
167
|
+
if (!me.dependencies.has(config)) {
|
168
|
+
const cleanup = config.subscribe({
|
169
|
+
id: me.id,
|
170
|
+
fn: me.run.bind(me)
|
171
|
+
});
|
172
|
+
|
173
|
+
me.dependencies.set(config, cleanup)
|
174
|
+
}
|
175
|
+
}
|
176
|
+
}
|
177
|
+
|
178
|
+
Neo.core ??= {};
|
179
|
+
|
180
|
+
if (!Neo.core.Effect) {
|
181
|
+
Neo.core.Effect = Effect;
|
182
|
+
|
183
|
+
/**
|
184
|
+
* Factory shortcut to create a new Neo.core.Effect instance.
|
185
|
+
* @function Neo.effect
|
186
|
+
* @param {Function|Object} fn - The function to execute, or a config object for the effect.
|
187
|
+
* @param {Object} [options] - Optional. Used if the first argument is a function.
|
188
|
+
* @returns {Neo.core.Effect}
|
189
|
+
*/
|
190
|
+
Neo.effect = (fn, options) => new Effect(fn, options)
|
191
|
+
}
|
192
|
+
|
193
|
+
export default Neo.core.Effect;
|
@@ -0,0 +1,67 @@
|
|
1
|
+
/**
|
2
|
+
* A singleton manager responsible for batching `Neo.core.Effect` executions.
|
3
|
+
* This ensures that effects triggered by multiple config changes within a single
|
4
|
+
* synchronous operation (e.g., `Neo.core.Base#set()`) are executed only once
|
5
|
+
* per batch, after all changes have been applied.
|
6
|
+
* @class Neo.core.EffectBatchManager
|
7
|
+
* @singleton
|
8
|
+
*/
|
9
|
+
const EffectBatchManager = {
|
10
|
+
/**
|
11
|
+
* The current count of active batch operations.
|
12
|
+
* Incremented by `startBatch()`, decremented by `endBatch()`.
|
13
|
+
* @member {Number} batchCount=0
|
14
|
+
*/
|
15
|
+
batchCount: 0,
|
16
|
+
/**
|
17
|
+
* A Set of `Neo.core.Effect` instances that are pending execution within the current batch.
|
18
|
+
* @member {Set<Neo.core.Effect>} pendingEffects=new Set()
|
19
|
+
*/
|
20
|
+
pendingEffects: new Set(),
|
21
|
+
|
22
|
+
/**
|
23
|
+
* Decrements the batch counter. If `batchCount` reaches 0, all queued effects
|
24
|
+
* are executed and the `pendingEffects` Set is cleared.
|
25
|
+
*/
|
26
|
+
endBatch() {
|
27
|
+
const me = this;
|
28
|
+
|
29
|
+
me.batchCount--;
|
30
|
+
|
31
|
+
if (me.batchCount === 0) {
|
32
|
+
const effectsToRun = [...me.pendingEffects]; // Create a snapshot
|
33
|
+
me.pendingEffects.clear();
|
34
|
+
|
35
|
+
effectsToRun.forEach(effect => {
|
36
|
+
effect.run()
|
37
|
+
})
|
38
|
+
}
|
39
|
+
},
|
40
|
+
|
41
|
+
/**
|
42
|
+
* Checks if there is an active batch operation.
|
43
|
+
* @returns {Boolean}
|
44
|
+
*/
|
45
|
+
isBatchActive() {
|
46
|
+
return this.batchCount > 0
|
47
|
+
},
|
48
|
+
|
49
|
+
/**
|
50
|
+
* Queues an effect for execution at the end of the current batch.
|
51
|
+
* If the effect is already queued, it will not be added again.
|
52
|
+
* @param {Neo.core.Effect} effect The effect to queue.
|
53
|
+
*/
|
54
|
+
queueEffect(effect) {
|
55
|
+
this.pendingEffects.add(effect)
|
56
|
+
},
|
57
|
+
|
58
|
+
/**
|
59
|
+
* Increments the batch counter. When `batchCount` is greater than 0,
|
60
|
+
* effects will be queued instead of running immediately.
|
61
|
+
*/
|
62
|
+
startBatch() {
|
63
|
+
this.batchCount++
|
64
|
+
}
|
65
|
+
};
|
66
|
+
|
67
|
+
export default Neo.gatekeep(EffectBatchManager, 'Neo.core.EffectBatchManager');
|
@@ -0,0 +1,60 @@
|
|
1
|
+
/**
|
2
|
+
* A singleton manager to track the currently running effect.
|
3
|
+
* This allows reactive properties to know which effect to subscribe to.
|
4
|
+
* @class Neo.core.EffectManager
|
5
|
+
* @singleton
|
6
|
+
*/
|
7
|
+
const EffectManager = {
|
8
|
+
effectStack: [],
|
9
|
+
isPaused : false,
|
10
|
+
|
11
|
+
/**
|
12
|
+
* Adds a `Neo.core.Config` instance as a dependency for the currently active effect.
|
13
|
+
* This method checks if the EffectManager is paused before adding the dependency.
|
14
|
+
* @param {Neo.core.Config} config The config instance to add as a dependency.
|
15
|
+
*/
|
16
|
+
addDependency(config) {
|
17
|
+
!this.isPaused && this.getActiveEffect()?.addDependency(config)
|
18
|
+
},
|
19
|
+
|
20
|
+
/**
|
21
|
+
* Returns the effect currently at the top of the stack (i.e., the one currently running).
|
22
|
+
* @returns {Neo.core.Effect|null}
|
23
|
+
*/
|
24
|
+
getActiveEffect() {
|
25
|
+
return this.effectStack[this.effectStack.length - 1]
|
26
|
+
},
|
27
|
+
|
28
|
+
/**
|
29
|
+
* Pauses dependency tracking for effects. While paused, calls to `addDependency` will be ignored.
|
30
|
+
*/
|
31
|
+
pause() {
|
32
|
+
this.isPaused = true;
|
33
|
+
},
|
34
|
+
|
35
|
+
/**
|
36
|
+
* Pops the current effect from the stack, returning to the previous effect (if any).
|
37
|
+
* @returns {Neo.core.Effect|null}
|
38
|
+
*/
|
39
|
+
pop() {
|
40
|
+
return this.effectStack.pop()
|
41
|
+
},
|
42
|
+
|
43
|
+
/**
|
44
|
+
* Pushes an effect onto the stack, marking it as the currently running effect.
|
45
|
+
* @param {Neo.core.Effect} effect The effect to push.
|
46
|
+
*/
|
47
|
+
push(effect) {
|
48
|
+
this.effectStack.push(effect)
|
49
|
+
},
|
50
|
+
|
51
|
+
/**
|
52
|
+
* Resumes dependency tracking for effects.
|
53
|
+
*/
|
54
|
+
resume() {
|
55
|
+
this.isPaused = false;
|
56
|
+
}
|
57
|
+
};
|
58
|
+
|
59
|
+
export default Neo.gatekeep(EffectManager, 'Neo.core.EffectManager');
|
60
|
+
|
package/src/core/IdGenerator.mjs
CHANGED
@@ -1,44 +1,17 @@
|
|
1
1
|
/**
|
2
|
-
*
|
3
|
-
*
|
4
|
-
* @class Neo.core.IdGenerator
|
5
|
-
* @singleton
|
2
|
+
* Provides a singleton utility for generating unique IDs.
|
3
|
+
* @namespace Neo.core.IdGenerator
|
6
4
|
*/
|
7
|
-
|
8
|
-
static config = {
|
9
|
-
/**
|
10
|
-
* @member {String} className='Neo.core.IdGenerator'
|
11
|
-
* @protected
|
12
|
-
*/
|
13
|
-
className: 'Neo.core.IdGenerator',
|
14
|
-
/**
|
15
|
-
* @member {String} ntype='id-generator'
|
16
|
-
* @protected
|
17
|
-
*/
|
18
|
-
ntype: 'id-generator',
|
19
|
-
/**
|
20
|
-
* The default prefix for neo instance ids
|
21
|
-
* @member {String} base='neo-'
|
22
|
-
*/
|
23
|
-
base: 'neo-',
|
24
|
-
/**
|
25
|
-
* @member {Boolean} singleton='true
|
26
|
-
* @protected
|
27
|
-
*/
|
28
|
-
singleton: true
|
29
|
-
}
|
30
|
-
|
5
|
+
const IdGenerator = {
|
31
6
|
/**
|
32
|
-
*
|
7
|
+
* The default prefix for neo instance ids
|
8
|
+
* @member {String} base='neo-'
|
33
9
|
*/
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
// alias
|
40
|
-
Neo.getId = me.getId.bind(me);
|
41
|
-
}
|
10
|
+
base: 'neo-',
|
11
|
+
/**
|
12
|
+
* @member {Object} idCounter={}
|
13
|
+
*/
|
14
|
+
idCounter: {},
|
42
15
|
|
43
16
|
/**
|
44
17
|
* @param name
|
@@ -55,12 +28,8 @@ class IdGenerator {
|
|
55
28
|
|
56
29
|
return me.base + (name === 'neo' ? '' : name + '-') + count;
|
57
30
|
}
|
58
|
-
|
59
|
-
init() {}
|
60
|
-
|
61
|
-
onAfterConstructed() {}
|
62
|
-
|
63
|
-
onConstructed() {}
|
64
31
|
}
|
65
32
|
|
66
|
-
export default Neo.
|
33
|
+
export default Neo.gatekeep(IdGenerator, 'Neo.core.IdGenerator', () => {
|
34
|
+
Neo.getId = IdGenerator.getId.bind(IdGenerator);
|
35
|
+
});
|
package/src/data/Model.mjs
CHANGED
package/src/data/Store.mjs
CHANGED
@@ -7,6 +7,7 @@ import RecordFactory from './RecordFactory.mjs';
|
|
7
7
|
/**
|
8
8
|
* @class Neo.data.Store
|
9
9
|
* @extends Neo.collection.Base
|
10
|
+
* @mixes Neo.core.Observable
|
10
11
|
*/
|
11
12
|
class Store extends Base {
|
12
13
|
/**
|
@@ -42,6 +43,7 @@ class Store extends Base {
|
|
42
43
|
* @example
|
43
44
|
* api: 'MyApp.backend.UserService'
|
44
45
|
* @member {Object|String|null} api_=null
|
46
|
+
* @reactive
|
45
47
|
*/
|
46
48
|
api_: null,
|
47
49
|
/**
|
@@ -50,14 +52,17 @@ class Store extends Base {
|
|
50
52
|
autoLoad: false,
|
51
53
|
/**
|
52
54
|
* @member {Number} currentPage_=1
|
55
|
+
* @reactive
|
53
56
|
*/
|
54
57
|
currentPage_: 1,
|
55
58
|
/**
|
56
59
|
* @member {Array|null} data_=null
|
60
|
+
* @reactive
|
57
61
|
*/
|
58
62
|
data_: null,
|
59
63
|
/**
|
60
64
|
* @member {Array|null} initialData_=null
|
65
|
+
* @reactive
|
61
66
|
*/
|
62
67
|
initialData_: null,
|
63
68
|
/**
|
@@ -74,11 +79,13 @@ class Store extends Base {
|
|
74
79
|
isLoading: false,
|
75
80
|
/**
|
76
81
|
* @member {Neo.data.Model} model_=null
|
82
|
+
* @reactive
|
77
83
|
*/
|
78
84
|
model_: null,
|
79
85
|
/**
|
80
86
|
* Use a value of 0 to not limit the pageSize
|
81
87
|
* @member {Number} pageSize_=0
|
88
|
+
* @reactive
|
82
89
|
*/
|
83
90
|
pageSize_: 0,
|
84
91
|
/**
|
@@ -5,6 +5,7 @@ import Observable from '../../core/Observable.mjs';
|
|
5
5
|
/**
|
6
6
|
* @class Neo.data.connection.WebSocket
|
7
7
|
* @extends Neo.core.Base
|
8
|
+
* @mixes Neo.core.Observable
|
8
9
|
*/
|
9
10
|
class Socket extends Base {
|
10
11
|
/**
|
@@ -28,6 +29,7 @@ class Socket extends Base {
|
|
28
29
|
/**
|
29
30
|
* @member {WebSocket|null} socket_=null
|
30
31
|
* @protected
|
32
|
+
* @reactive
|
31
33
|
*/
|
32
34
|
socket_: null
|
33
35
|
}
|
@@ -41,6 +41,7 @@ class DayViewComponent extends Base {
|
|
41
41
|
/**
|
42
42
|
* @member {Date|null} currentDate_=null
|
43
43
|
* @protected
|
44
|
+
* @reactive
|
44
45
|
*/
|
45
46
|
currentDate_: null,
|
46
47
|
/**
|
@@ -51,6 +52,7 @@ class DayViewComponent extends Base {
|
|
51
52
|
/**
|
52
53
|
* 0-6 => Sun-Sat
|
53
54
|
* @member {Number} weekStartDay_=0
|
55
|
+
* @reactive
|
54
56
|
*/
|
55
57
|
weekStartDay_: 0,
|
56
58
|
/**
|
@@ -40,6 +40,7 @@ class SelectorContainer extends Container {
|
|
40
40
|
* Date object created on the value config
|
41
41
|
* @member {Date|null} currentDate_=null
|
42
42
|
* @protected
|
43
|
+
* @reactive
|
43
44
|
*/
|
44
45
|
currentDate_: null,
|
45
46
|
/**
|
@@ -50,17 +51,20 @@ class SelectorContainer extends Container {
|
|
50
51
|
* The format of the column headers.
|
51
52
|
* Valid values are: narrow, short & long
|
52
53
|
* @member {String} dayNameFormat_='short'
|
54
|
+
* @reactive
|
53
55
|
*/
|
54
56
|
dayNameFormat_: 'short',
|
55
57
|
/**
|
56
58
|
* @member {Intl.DateTimeFormat|null} intlFormatDay_=null
|
57
59
|
* @protected
|
60
|
+
* @reactive
|
58
61
|
*/
|
59
62
|
intlFormatDay_: null,
|
60
63
|
/**
|
61
64
|
* Internal flag to prevent changing the date while change animations are still running
|
62
65
|
* @member {Boolean} isUpdating_=false
|
63
66
|
* @protected
|
67
|
+
* @reactive
|
64
68
|
*/
|
65
69
|
isUpdating_: false,
|
66
70
|
/**
|
@@ -104,14 +108,17 @@ class SelectorContainer extends Container {
|
|
104
108
|
keys: {},
|
105
109
|
/**
|
106
110
|
* @member {String} locale_=Neo.config.locale
|
111
|
+
* @reactive
|
107
112
|
*/
|
108
113
|
locale_: Neo.config.locale,
|
109
114
|
/**
|
110
115
|
* @member {String|null} maxValue_=null
|
116
|
+
* @reactive
|
111
117
|
*/
|
112
118
|
maxValue_: null,
|
113
119
|
/**
|
114
120
|
* @member {String|null} minValue_=null
|
121
|
+
* @reactive
|
115
122
|
*/
|
116
123
|
minValue_: null,
|
117
124
|
/**
|
@@ -129,24 +136,29 @@ class SelectorContainer extends Container {
|
|
129
136
|
/**
|
130
137
|
* Either pass a selection.Model module, an instance or a config object
|
131
138
|
* @member {Object|Neo.selection.Model} selectionModel_=null
|
139
|
+
* @reactive
|
132
140
|
*/
|
133
141
|
selectionModel_: null,
|
134
142
|
/**
|
135
143
|
* True to show inner cell & header cell borders
|
136
144
|
* @member {Boolean} showCellBorders_=true
|
145
|
+
* @reactive
|
137
146
|
*/
|
138
147
|
showCellBorders_: false,
|
139
148
|
/**
|
140
149
|
* True to show the days of the previous or next month (not selectable)
|
141
150
|
* @member {Boolean} showDisabledDays_=true
|
151
|
+
* @reactive
|
142
152
|
*/
|
143
153
|
showDisabledDays_: true,
|
144
154
|
/**
|
145
155
|
* @member {Boolean} showWeekends_=true
|
156
|
+
* @reactive
|
146
157
|
*/
|
147
158
|
showWeekends_: true,
|
148
159
|
/**
|
149
160
|
* @member {Neo.state.Provider} stateProvider=SelectorContainerStateProvider
|
161
|
+
* @reactive
|
150
162
|
*/
|
151
163
|
stateProvider: SelectorContainerStateProvider,
|
152
164
|
/**
|
@@ -156,11 +168,13 @@ class SelectorContainer extends Container {
|
|
156
168
|
useAnimations: true,
|
157
169
|
/**
|
158
170
|
* @member {String} value_=DateUtil.convertToyyyymmdd(new Date())
|
171
|
+
* @reactive
|
159
172
|
*/
|
160
173
|
value_: DateUtil.convertToyyyymmdd(todayDate),
|
161
174
|
/**
|
162
175
|
* 0-6 => Sun-Sat
|
163
176
|
* @member {Number} weekStartDay_=0
|
177
|
+
* @reactive
|
164
178
|
*/
|
165
179
|
weekStartDay_: 0
|
166
180
|
}
|
package/src/dialog/Base.mjs
CHANGED
@@ -35,6 +35,7 @@ class Dialog extends Panel {
|
|
35
35
|
animateOnDragEnd: false,
|
36
36
|
/**
|
37
37
|
* @member {String|null} animateTargetId_=null
|
38
|
+
* @reactive
|
38
39
|
*/
|
39
40
|
animateTargetId_: null,
|
40
41
|
/**
|
@@ -68,6 +69,7 @@ class Dialog extends Panel {
|
|
68
69
|
closeAction: 'close',
|
69
70
|
/**
|
70
71
|
* @member {Boolean} draggable_=true
|
72
|
+
* @reactive
|
71
73
|
*/
|
72
74
|
draggable_: true,
|
73
75
|
/**
|
@@ -102,6 +104,7 @@ class Dialog extends Panel {
|
|
102
104
|
isDragging: false,
|
103
105
|
/**
|
104
106
|
* @member {Object} keys={Escape:'onKeyDownEscape'}
|
107
|
+
* @reactive
|
105
108
|
*/
|
106
109
|
keys: {
|
107
110
|
Escape: 'onKeyDownEscape'
|
@@ -112,6 +115,7 @@ class Dialog extends Panel {
|
|
112
115
|
maximizeCls: 'far fa-window-maximize',
|
113
116
|
/**
|
114
117
|
* @member {Boolean} maximized_=false
|
118
|
+
* @reactive
|
115
119
|
*/
|
116
120
|
maximized_: false,
|
117
121
|
/**
|
@@ -120,10 +124,12 @@ class Dialog extends Panel {
|
|
120
124
|
minimizeCls: 'far fa-window-minimize',
|
121
125
|
/**
|
122
126
|
* @member {Boolean} modal_=false
|
127
|
+
* @reactive
|
123
128
|
*/
|
124
129
|
modal_: false,
|
125
130
|
/**
|
126
131
|
* @member {Boolean} resizable_=true
|
132
|
+
* @reactive
|
127
133
|
*/
|
128
134
|
resizable_: true,
|
129
135
|
/**
|
@@ -132,12 +138,14 @@ class Dialog extends Panel {
|
|
132
138
|
resizablePluginConfig: null,
|
133
139
|
/**
|
134
140
|
* @member {String|null} title_=null
|
141
|
+
* @reactive
|
135
142
|
*/
|
136
143
|
title_: null,
|
137
144
|
/**
|
138
145
|
* Set to `true` to have tabbing wrap within this Dialog.
|
139
146
|
* Should be used with `modal`.
|
140
147
|
* @member {Boolean} trapFocus_=false
|
148
|
+
* @reactive
|
141
149
|
*/
|
142
150
|
trapFocus_: false
|
143
151
|
}
|
@@ -7,6 +7,7 @@ import VDomUtil from '../util/VDom.mjs';
|
|
7
7
|
/**
|
8
8
|
* @class Neo.draggable.DragZone
|
9
9
|
* @extends Neo.core.Base
|
10
|
+
* @mixes Neo.core.Observable
|
10
11
|
*/
|
11
12
|
class DragZone extends Base {
|
12
13
|
/**
|
@@ -42,6 +43,7 @@ class DragZone extends Base {
|
|
42
43
|
/**
|
43
44
|
* The name of the App this instance belongs to
|
44
45
|
* @member {String|null} appName_=null
|
46
|
+
* @reactive
|
45
47
|
*/
|
46
48
|
appName_: null,
|
47
49
|
/**
|
@@ -85,6 +87,7 @@ class DragZone extends Base {
|
|
85
87
|
dragProxy: null,
|
86
88
|
/**
|
87
89
|
* @member {Object|null} dragProxyConfig_=null
|
90
|
+
* @reactive
|
88
91
|
*/
|
89
92
|
dragProxyConfig_: null,
|
90
93
|
/**
|
@@ -135,6 +138,7 @@ class DragZone extends Base {
|
|
135
138
|
owner: null,
|
136
139
|
/**
|
137
140
|
* @member {String} proxyParentId_='document.body'
|
141
|
+
* @reactive
|
138
142
|
*/
|
139
143
|
proxyParentId_: 'document.body',
|
140
144
|
/**
|
@@ -156,6 +160,7 @@ class DragZone extends Base {
|
|
156
160
|
useProxyWrapper: true,
|
157
161
|
/**
|
158
162
|
* @member {Number|null} windowId_=null
|
163
|
+
* @reactive
|
159
164
|
*/
|
160
165
|
windowId_: null
|
161
166
|
}
|
@@ -23,6 +23,7 @@ class BooleanContainer extends Container {
|
|
23
23
|
baseCls: ['neo-filter-booleancontainer'],
|
24
24
|
/**
|
25
25
|
* @member {Object} layout={ntype: 'hbox', align: 'center'}
|
26
|
+
* @reactive
|
26
27
|
*/
|
27
28
|
layout: {ntype: 'hbox', align: 'center'},
|
28
29
|
/**
|
@@ -32,6 +33,7 @@ class BooleanContainer extends Container {
|
|
32
33
|
radioConfig: null,
|
33
34
|
/**
|
34
35
|
* @member {Boolean|null} value_=null
|
36
|
+
* @reactive
|
35
37
|
*/
|
36
38
|
value_: null
|
37
39
|
}
|