neo.mjs 10.0.0-beta.5 → 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.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/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 +130 -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 +10 -8
- 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 -64
- 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 +217 -166
- package/src/Xhr.mjs +1 -0
- package/src/button/Base.mjs +13 -0
- package/src/button/Effect.mjs +16 -2
- 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 +7 -10
- package/src/collection/Filter.mjs +6 -0
- package/src/collection/Sorter.mjs +3 -0
- package/src/component/Base.mjs +104 -771
- 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 +7 -3
- 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 +55 -3
- package/src/core/Compare.mjs +4 -7
- package/src/core/Config.mjs +65 -52
- package/src/core/Effect.mjs +79 -13
- package/src/core/EffectBatchManager.mjs +18 -19
- package/src/core/EffectManager.mjs +25 -3
- 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 +50 -60
- 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/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 +98 -70
- package/src/state/createHierarchicalDataProxy.mjs +39 -25
- 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 +2 -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 +35 -23
- package/src/vdom/VNode.mjs +4 -6
- package/src/worker/App.mjs +1 -0
- 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 +5 -2
- package/test/siesta/tests/VdomCalendar.mjs +13 -9
- package/test/siesta/tests/core/Effect.mjs +10 -14
- package/test/siesta/tests/core/EffectBatching.mjs +25 -37
- package/test/siesta/tests/state/ProviderNestedDataConfigs.mjs +255 -0
- package/test/siesta/tests/state/createHierarchicalDataProxy.mjs +42 -55
- 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,191 @@
|
|
1
|
+
#!/usr/bin/env node
|
2
|
+
|
3
|
+
/**
|
4
|
+
* @file addReactiveTags.mjs
|
5
|
+
* @description This script automates the process of adding the `@reactive` JSDoc tag
|
6
|
+
* to reactive configuration properties in source files.
|
7
|
+
* It identifies reactive configs (considering inheritance) that are missing
|
8
|
+
* the tag and inserts it into their JSDoc comment blocks.
|
9
|
+
*
|
10
|
+
* This is an **automation tool** used to fix documentation.
|
11
|
+
*
|
12
|
+
* @usage `npm run add-reactive-tags`
|
13
|
+
* @requires `docs/output/all.json` to be up-to-date (run `npm run generate-docs-json` first).
|
14
|
+
* @warning After running this script, you **must** re-run your documentation build script
|
15
|
+
* (`npm run generate-docs-json`) to update `docs/output/all.json`.
|
16
|
+
* @author Gemini
|
17
|
+
*/
|
18
|
+
|
19
|
+
import fs from 'fs-extra';
|
20
|
+
import path from 'path';
|
21
|
+
|
22
|
+
const cwd = process.cwd();
|
23
|
+
|
24
|
+
const ALL_JSON_PATH = path.join(cwd, 'docs/output/all.json');
|
25
|
+
const MY_APPS_JSON_PATH_CWD = path.join(cwd, 'buildScripts/myApps.json');
|
26
|
+
const MY_APPS_JSON_PATH_WEBPACK = path.join(cwd, 'buildScripts/webpack/json/myApps.json');
|
27
|
+
const MY_APPS_JSON_PATH_TEMPLATE = path.join(cwd, 'buildScripts/webpack/json/myApps.template.json');
|
28
|
+
const PROGRAM_NAME = 'add-reactive-tags';
|
29
|
+
|
30
|
+
async function addReactiveTags() {
|
31
|
+
const startDate = new Date();
|
32
|
+
console.log(`
|
33
|
+
Starting ${PROGRAM_NAME}...`);
|
34
|
+
|
35
|
+
try {
|
36
|
+
const data = JSON.parse(fs.readFileSync(ALL_JSON_PATH, 'utf-8'));
|
37
|
+
|
38
|
+
let appJson;
|
39
|
+
if (fs.existsSync(MY_APPS_JSON_PATH_CWD)) {
|
40
|
+
appJson = JSON.parse(fs.readFileSync(MY_APPS_JSON_PATH_CWD, 'utf-8'));
|
41
|
+
} else if (fs.existsSync(MY_APPS_JSON_PATH_WEBPACK)) {
|
42
|
+
appJson = JSON.parse(fs.readFileSync(MY_APPS_JSON_PATH_WEBPACK, 'utf-8'));
|
43
|
+
} else {
|
44
|
+
appJson = JSON.parse(fs.readFileSync(MY_APPS_JSON_PATH_TEMPLATE, 'utf-8'));
|
45
|
+
}
|
46
|
+
const myAppsData = appJson;
|
47
|
+
|
48
|
+
const appNames = myAppsData.apps.filter(appName => appName !== 'Docs');
|
49
|
+
const validClassPrefixes = ['Neo.', ...appNames.map(name => `${name}.`)];
|
50
|
+
|
51
|
+
const classMap = new Map();
|
52
|
+
const memberMap = new Map();
|
53
|
+
|
54
|
+
for (const entry of data) {
|
55
|
+
if (entry.kind === 'class' && entry.neoClassName) {
|
56
|
+
classMap.set(entry.neoClassName, entry);
|
57
|
+
} else if (entry.kind === 'member' && entry.neoClassName) {
|
58
|
+
if (!memberMap.has(entry.neoClassName)) {
|
59
|
+
memberMap.set(entry.neoClassName, []);
|
60
|
+
}
|
61
|
+
memberMap.get(entry.neoClassName).push(entry);
|
62
|
+
}
|
63
|
+
}
|
64
|
+
|
65
|
+
const reactiveConfigsByClass = new Map();
|
66
|
+
|
67
|
+
function getAllReactiveConfigs(className) {
|
68
|
+
if (reactiveConfigsByClass.has(className)) {
|
69
|
+
return reactiveConfigsByClass.get(className);
|
70
|
+
}
|
71
|
+
|
72
|
+
const currentClassReactiveConfigs = new Set();
|
73
|
+
if (memberMap.has(className)) {
|
74
|
+
for (const member of memberMap.get(className)) {
|
75
|
+
if (member.kind === 'member' && member.name.endsWith('_')) {
|
76
|
+
currentClassReactiveConfigs.add(member.name.slice(0, -1));
|
77
|
+
}
|
78
|
+
}
|
79
|
+
}
|
80
|
+
|
81
|
+
const classEntry = classMap.get(className);
|
82
|
+
if (classEntry && classEntry.augments) {
|
83
|
+
for (const parentClassName of classEntry.augments) {
|
84
|
+
const isNeoOrAppClass = validClassPrefixes.some(prefix => parentClassName.startsWith(prefix));
|
85
|
+
if (isNeoOrAppClass) {
|
86
|
+
const inheritedReactive = getAllReactiveConfigs(parentClassName);
|
87
|
+
for (const configName of inheritedReactive) {
|
88
|
+
currentClassReactiveConfigs.add(configName);
|
89
|
+
}
|
90
|
+
}
|
91
|
+
}
|
92
|
+
}
|
93
|
+
|
94
|
+
reactiveConfigsByClass.set(className, currentClassReactiveConfigs);
|
95
|
+
return currentClassReactiveConfigs;
|
96
|
+
}
|
97
|
+
|
98
|
+
for (const className of classMap.keys()) {
|
99
|
+
getAllReactiveConfigs(className);
|
100
|
+
}
|
101
|
+
|
102
|
+
const filesToModify = new Map(); // filePath -> Array<{configName, jsdocStartLine, jsdocEndLine}>;
|
103
|
+
|
104
|
+
for (const [className, reactiveConfigNames] of reactiveConfigsByClass.entries()) {
|
105
|
+
if (memberMap.has(className)) {
|
106
|
+
for (const member of memberMap.get(className)) {
|
107
|
+
const baseName = member.name.endsWith('_') ? member.name.slice(0, -1) : member.name;
|
108
|
+
|
109
|
+
if (reactiveConfigNames.has(baseName)) {
|
110
|
+
if (member.defaultvalue !== undefined || member.name.endsWith('_')) {
|
111
|
+
if (!member.comment || !member.comment.includes('@reactive')) {
|
112
|
+
const filePath = path.join(member.meta.path, member.meta.filename);
|
113
|
+
if (!filesToModify.has(filePath)) {
|
114
|
+
filesToModify.set(filePath, []);
|
115
|
+
}
|
116
|
+
filesToModify.get(filePath).push({
|
117
|
+
configName: member.name,
|
118
|
+
jsdocStartLine: member.meta.lineno - 1, // JSDoc starts one line before the member definition
|
119
|
+
jsdocEndLine: member.meta.lineno - 1 + member.comment.split('\n').length // Approximate end line
|
120
|
+
});
|
121
|
+
}
|
122
|
+
}
|
123
|
+
}
|
124
|
+
}
|
125
|
+
}
|
126
|
+
}
|
127
|
+
|
128
|
+
let modifiedCount = 0;
|
129
|
+
for (const [filePath, configs] of filesToModify.entries()) {
|
130
|
+
let fileContent = fs.readFileSync(filePath, 'utf-8');
|
131
|
+
let lines = fileContent.split('\n');
|
132
|
+
|
133
|
+
// Sort configs by line number in descending order to avoid issues with line shifts
|
134
|
+
configs.sort((a, b) => b.jsdocStartLine - a.jsdocStartLine);
|
135
|
+
|
136
|
+
for (const config of configs) {
|
137
|
+
// Find the start of the JSDoc block (line with '/**')
|
138
|
+
let jsdocStartLine = -1;
|
139
|
+
for (let i = config.jsdocStartLine; i >= 0; i--) { // Search upwards from member definition
|
140
|
+
if (lines[i].includes('/**')) {
|
141
|
+
jsdocStartLine = i;
|
142
|
+
break;
|
143
|
+
}
|
144
|
+
}
|
145
|
+
|
146
|
+
// Find the actual end of the JSDoc block (line with '*/')
|
147
|
+
let actualJsdocEndLine = -1;
|
148
|
+
if (jsdocStartLine !== -1) {
|
149
|
+
for (let i = jsdocStartLine; i < lines.length; i++) {
|
150
|
+
if (lines[i].includes('*/')) {
|
151
|
+
actualJsdocEndLine = i;
|
152
|
+
break;
|
153
|
+
}
|
154
|
+
}
|
155
|
+
}
|
156
|
+
|
157
|
+
if (actualJsdocEndLine !== -1) {
|
158
|
+
// Get the indentation (leading whitespace and the asterisk) from the '*/' line.
|
159
|
+
// Example: " */" -> " *"
|
160
|
+
const indentationMatch = lines[actualJsdocEndLine].match(/^(\s*\*)/);
|
161
|
+
const indentation = indentationMatch ? indentationMatch[1] : ' *';
|
162
|
+
|
163
|
+
// Insert the @reactive tag on the line *before* the '*/'
|
164
|
+
lines.splice(actualJsdocEndLine, 0, `${indentation} @reactive`);
|
165
|
+
modifiedCount++;
|
166
|
+
} else {
|
167
|
+
console.warn(`Could not find JSDoc block for config ${config.configName} in ${filePath}`);
|
168
|
+
}
|
169
|
+
}
|
170
|
+
fs.writeFileSync(filePath, lines.join('\n'));
|
171
|
+
}
|
172
|
+
|
173
|
+
if (modifiedCount > 0) {
|
174
|
+
console.log(`\nSuccessfully added @reactive tag to ${modifiedCount} configs.`);
|
175
|
+
console.log("Please run your documentation build script again to update all.json.");
|
176
|
+
process.exit(0);
|
177
|
+
} else {
|
178
|
+
console.log("\nNo missing @reactive tags found. All reactive configs are already tagged. Well done!");
|
179
|
+
process.exit(0);
|
180
|
+
}
|
181
|
+
|
182
|
+
} catch (error) {
|
183
|
+
console.error(`\nError during ${PROGRAM_NAME}:`, error);
|
184
|
+
process.exit(1);
|
185
|
+
} finally {
|
186
|
+
const processTime = (new Date() - startDate) / 1000;
|
187
|
+
console.log(`Total time for ${PROGRAM_NAME}: ${processTime.toFixed(2)}s`);
|
188
|
+
}
|
189
|
+
}
|
190
|
+
|
191
|
+
addReactiveTags();
|
@@ -0,0 +1,160 @@
|
|
1
|
+
#!/usr/bin/env node
|
2
|
+
|
3
|
+
/**
|
4
|
+
* @file checkReactiveTags.mjs
|
5
|
+
* @description This script identifies and reports reactive configuration properties
|
6
|
+
* that are missing the `@reactive` JSDoc tag.
|
7
|
+
* It builds a class inheritance graph and determines reactivity based
|
8
|
+
* on direct definition (trailing underscore) or inheritance from a parent class.
|
9
|
+
*
|
10
|
+
* This is a **diagnostic tool** used to verify documentation completeness.
|
11
|
+
*
|
12
|
+
* @usage `npm run check-reactive-tags`
|
13
|
+
* @requires `docs/output/all.json` to be up-to-date (run `npm run generate-docs-json` first).
|
14
|
+
* @author Gemini
|
15
|
+
*/
|
16
|
+
|
17
|
+
import fs from 'fs-extra';
|
18
|
+
import path from 'path';
|
19
|
+
|
20
|
+
const cwd = process.cwd();
|
21
|
+
|
22
|
+
const ALL_JSON_PATH = path.join(cwd, 'docs/output/all.json');
|
23
|
+
const MY_APPS_JSON_PATH = path.join(cwd, 'buildScripts/webpack/json/myApps.json');
|
24
|
+
const PROGRAM_NAME = 'check-reactive-tags';
|
25
|
+
|
26
|
+
const MY_APPS_JSON_PATH_CWD = path.join(cwd, 'buildScripts/myApps.json');
|
27
|
+
const MY_APPS_JSON_PATH_WEBPACK = path.join(cwd, 'buildScripts/webpack/json/myApps.json');
|
28
|
+
const MY_APPS_JSON_PATH_TEMPLATE = path.join(cwd, 'buildScripts/webpack/json/myApps.template.json');
|
29
|
+
|
30
|
+
async function checkReactiveTags() {
|
31
|
+
const startDate = new Date();
|
32
|
+
console.log(`
|
33
|
+
Starting ${PROGRAM_NAME}...`);
|
34
|
+
|
35
|
+
try {
|
36
|
+
const data = JSON.parse(fs.readFileSync(ALL_JSON_PATH, 'utf-8'));
|
37
|
+
|
38
|
+
let appJson;
|
39
|
+
|
40
|
+
if (fs.existsSync(MY_APPS_JSON_PATH_CWD)) {
|
41
|
+
appJson = JSON.parse(fs.readFileSync(MY_APPS_JSON_PATH_CWD, 'utf-8'));
|
42
|
+
} else if (fs.existsSync(MY_APPS_JSON_PATH_WEBPACK)) {
|
43
|
+
appJson = JSON.parse(fs.readFileSync(MY_APPS_JSON_PATH_WEBPACK, 'utf-8'));
|
44
|
+
} else {
|
45
|
+
appJson = JSON.parse(fs.readFileSync(MY_APPS_JSON_PATH_TEMPLATE, 'utf-8'));
|
46
|
+
}
|
47
|
+
|
48
|
+
const myAppsData = appJson;
|
49
|
+
|
50
|
+
|
51
|
+
const appNames = myAppsData.apps.filter(appName => appName !== 'Docs'); // Docs is handled separately or implicitly Neo.
|
52
|
+
const validClassPrefixes = ['Neo.', ...appNames.map(name => `${name}.`)];
|
53
|
+
|
54
|
+
const classMap = new Map(); // neoClassName -> class_entry
|
55
|
+
const memberMap = new Map(); // neoClassName -> [member_entries]
|
56
|
+
|
57
|
+
for (const entry of data) {
|
58
|
+
if (entry.kind === 'class' && entry.neoClassName) {
|
59
|
+
classMap.set(entry.neoClassName, entry);
|
60
|
+
} else if (entry.kind === 'member' && entry.neoClassName) {
|
61
|
+
if (!memberMap.has(entry.neoClassName)) {
|
62
|
+
memberMap.set(entry.neoClassName, []);
|
63
|
+
}
|
64
|
+
memberMap.get(entry.neoClassName).push(entry);
|
65
|
+
}
|
66
|
+
}
|
67
|
+
|
68
|
+
const reactiveConfigsByClass = new Map(); // neoClassName -> Set<configNameWithoutUnderscore>
|
69
|
+
|
70
|
+
// Recursive function to get all reactive configs for a class, including inherited ones
|
71
|
+
function getAllReactiveConfigs(className) {
|
72
|
+
if (reactiveConfigsByClass.has(className)) {
|
73
|
+
return reactiveConfigsByClass.get(className);
|
74
|
+
}
|
75
|
+
|
76
|
+
const currentClassReactiveConfigs = new Set();
|
77
|
+
|
78
|
+
// Add directly defined reactive configs (ending with '_')
|
79
|
+
if (memberMap.has(className)) {
|
80
|
+
for (const member of memberMap.get(className)) {
|
81
|
+
if (member.kind === 'member' && member.name.endsWith('_')) {
|
82
|
+
currentClassReactiveConfigs.add(member.name.slice(0, -1)); // Add without underscore
|
83
|
+
}
|
84
|
+
}
|
85
|
+
}
|
86
|
+
|
87
|
+
// Add inherited reactive configs
|
88
|
+
const classEntry = classMap.get(className);
|
89
|
+
if (classEntry && classEntry.augments) {
|
90
|
+
for (const parentClassName of classEntry.augments) {
|
91
|
+
// Only consider Neo.mjs or app-specific classes for inheritance
|
92
|
+
const isNeoOrAppClass = validClassPrefixes.some(prefix => parentClassName.startsWith(prefix));
|
93
|
+
|
94
|
+
if (isNeoOrAppClass) {
|
95
|
+
const inheritedReactive = getAllReactiveConfigs(parentClassName);
|
96
|
+
for (const configName of inheritedReactive) {
|
97
|
+
currentClassReactiveConfigs.add(configName);
|
98
|
+
}
|
99
|
+
}
|
100
|
+
}
|
101
|
+
}
|
102
|
+
|
103
|
+
reactiveConfigsByClass.set(className, currentClassReactiveConfigs);
|
104
|
+
return currentClassReactiveConfigs;
|
105
|
+
}
|
106
|
+
|
107
|
+
// Populate reactiveConfigsByClass for all classes
|
108
|
+
for (const className of classMap.keys()) {
|
109
|
+
getAllReactiveConfigs(className);
|
110
|
+
}
|
111
|
+
|
112
|
+
const missingTags = [];
|
113
|
+
|
114
|
+
// Check for missing @reactive tags
|
115
|
+
for (const [className, reactiveConfigNames] of reactiveConfigsByClass.entries()) {
|
116
|
+
if (memberMap.has(className)) {
|
117
|
+
for (const member of memberMap.get(className)) {
|
118
|
+
const baseName = member.name.endsWith('_') ? member.name.slice(0, -1) : member.name;
|
119
|
+
|
120
|
+
// Check if this member is a reactive config (either directly or inherited)
|
121
|
+
if (reactiveConfigNames.has(baseName)) {
|
122
|
+
// Heuristic: if it has a defaultvalue, it's likely a config.
|
123
|
+
// Or if it's directly defined with an underscore.
|
124
|
+
if (member.defaultvalue !== undefined || member.name.endsWith('_')) {
|
125
|
+
if (!member.comment || !member.comment.includes('@reactive')) {
|
126
|
+
missingTags.push({
|
127
|
+
filePath: path.join(member.meta.path, member.meta.filename),
|
128
|
+
className: className,
|
129
|
+
configName: member.name,
|
130
|
+
isDirectlyDefinedReactive: member.name.endsWith('_')
|
131
|
+
});
|
132
|
+
}
|
133
|
+
}
|
134
|
+
}
|
135
|
+
}
|
136
|
+
}
|
137
|
+
}
|
138
|
+
|
139
|
+
if (missingTags.length > 0) {
|
140
|
+
console.log(`\nThe following ${missingTags.length} reactive configs are missing the @reactive JSDoc tag:`);
|
141
|
+
for (const item of missingTags) {
|
142
|
+
console.log(`- Class: ${item.className}, Config: ${item.configName} (Directly defined reactive: ${item.isDirectlyDefinedReactive})`);
|
143
|
+
console.log(` File: ${item.filePath}`);
|
144
|
+
}
|
145
|
+
process.exit(1); // Exit with error code if issues are found
|
146
|
+
} else {
|
147
|
+
console.log("\nAll reactive configs have the @reactive JSDoc tag. Well done!");
|
148
|
+
process.exit(0);
|
149
|
+
}
|
150
|
+
|
151
|
+
} catch (error) {
|
152
|
+
console.error(`\nError during ${PROGRAM_NAME}:`, error);
|
153
|
+
process.exit(1);
|
154
|
+
} finally {
|
155
|
+
const processTime = (new Date() - startDate) / 1000;
|
156
|
+
console.log(`Total time for ${PROGRAM_NAME}: ${processTime.toFixed(2)}s`);
|
157
|
+
}
|
158
|
+
}
|
159
|
+
|
160
|
+
checkReactiveTags();
|
package/docs/app/store/Api.mjs
CHANGED
@@ -35,6 +35,7 @@ class ContentTabContainer extends Container {
|
|
35
35
|
},
|
36
36
|
/**
|
37
37
|
* @member {Array} items=[//...]]
|
38
|
+
* @reactive
|
38
39
|
*/
|
39
40
|
items: [{
|
40
41
|
ntype: 'component',
|
@@ -48,6 +49,7 @@ class ContentTabContainer extends Container {
|
|
48
49
|
}],
|
49
50
|
/**
|
50
51
|
* @member {Boolean} sortable=true
|
52
|
+
* @reactive
|
51
53
|
*/
|
52
54
|
sortable: true
|
53
55
|
}
|
@@ -19,11 +19,13 @@ class ExamplesTreeList extends TreeList {
|
|
19
19
|
ntype: 'examples-treelist',
|
20
20
|
/**
|
21
21
|
* @member {String[]} cls=['docs-examples-treelist']
|
22
|
+
* @reactive
|
22
23
|
*/
|
23
24
|
cls: ['docs-examples-treelist'],
|
24
25
|
/**
|
25
26
|
* @member {Neo.data.Store|null} store=ExamplesStore
|
26
27
|
* @protected
|
28
|
+
* @reactive
|
27
29
|
*/
|
28
30
|
store: ExamplesStore
|
29
31
|
}
|
@@ -24,14 +24,17 @@ class HeaderContainer extends Container {
|
|
24
24
|
baseCls: ['neo-docs-header-container'],
|
25
25
|
/**
|
26
26
|
* @member {Number} height=55
|
27
|
+
* @reactive
|
27
28
|
*/
|
28
29
|
height: 55,
|
29
30
|
/**
|
30
31
|
* @member {Object} layout={ntype: 'hbox', align: 'stretch'}
|
32
|
+
* @reactive
|
31
33
|
*/
|
32
34
|
layout: {ntype: 'hbox', align: 'stretch'},
|
33
35
|
/**
|
34
36
|
* @member {Array} items=[//...]
|
37
|
+
* @reactive
|
35
38
|
*/
|
36
39
|
items: [{
|
37
40
|
module : SearchField,
|
@@ -32,23 +32,28 @@ class MainContainer extends Viewport {
|
|
32
32
|
baseCls: ['neo-docs-maincontainer', 'neo-viewport'],
|
33
33
|
/**
|
34
34
|
* @member {Neo.controller.Component} controller=MainContainerController
|
35
|
+
* @reactive
|
35
36
|
*/
|
36
37
|
controller: MainContainerController,
|
37
38
|
/**
|
38
39
|
* @member {Object} layout={ntype: 'vbox', align: 'stretch'}
|
40
|
+
* @reactive
|
39
41
|
*/
|
40
42
|
layout: {ntype: 'vbox', align: 'stretch'},
|
41
43
|
/**
|
42
44
|
* @member {Neo.collection.Base|null} store_=null
|
45
|
+
* @reactive
|
43
46
|
*/
|
44
47
|
store_: null,
|
45
48
|
/**
|
46
49
|
* Important for the Portal App, until the new theme fully supports it
|
47
50
|
* @member {String} theme='neo-theme-light'
|
51
|
+
* @reactive
|
48
52
|
*/
|
49
53
|
theme: 'neo-theme-light',
|
50
54
|
/**
|
51
55
|
* @member {Array} items=[//...]
|
56
|
+
* @reactive
|
52
57
|
*/
|
53
58
|
items: [HeaderContainer, {
|
54
59
|
ntype : 'container',
|
@@ -29,10 +29,12 @@ class MainContainer extends Container {
|
|
29
29
|
baseCls: ['neo-docs-classdetails-maincontainer', 'neo-container'],
|
30
30
|
/**
|
31
31
|
* @member {Neo.controller.Component} controller=MainContainerController
|
32
|
+
* @reactive
|
32
33
|
*/
|
33
34
|
controller: MainContainerController,
|
34
35
|
/**
|
35
36
|
* @member {Object} layout={ntype: 'vbox', align: 'stretch'}
|
37
|
+
* @reactive
|
36
38
|
*/
|
37
39
|
layout: {ntype: 'vbox', align: 'stretch'},
|
38
40
|
/**
|
@@ -41,6 +43,7 @@ class MainContainer extends Container {
|
|
41
43
|
structureData: null,
|
42
44
|
/**
|
43
45
|
* @member {Array} items=[//...]]
|
46
|
+
* @reactive
|
44
47
|
*/
|
45
48
|
items: [{
|
46
49
|
ntype : 'container',
|
@@ -24,22 +24,27 @@ class MembersList extends Base {
|
|
24
24
|
/**
|
25
25
|
* @member {String} filterMembersQuery_=''
|
26
26
|
* @protected
|
27
|
+
* @reactive
|
27
28
|
*/
|
28
29
|
filterMembersQuery_: '',
|
29
30
|
/**
|
30
31
|
* @member {Boolean} showPrivateMembers_=true
|
32
|
+
* @reactive
|
31
33
|
*/
|
32
34
|
showPrivateMembers_: true,
|
33
35
|
/**
|
34
36
|
* @member {Boolean} showProtectedMembers_=true
|
37
|
+
* @reactive
|
35
38
|
*/
|
36
39
|
showProtectedMembers_: true,
|
37
40
|
/**
|
38
41
|
* @member {Boolean} showStaticMembers_=true
|
42
|
+
* @reactive
|
39
43
|
*/
|
40
44
|
showStaticMembers_: true,
|
41
45
|
/**
|
42
46
|
* @member {Neo.collection.Base} store=null
|
47
|
+
* @reactive
|
43
48
|
*/
|
44
49
|
store: null,
|
45
50
|
/**
|
@@ -19,11 +19,13 @@ class SourceViewComponent extends Component {
|
|
19
19
|
/**
|
20
20
|
* @member {Boolean} isHighlighted_=false
|
21
21
|
* @protected
|
22
|
+
* @reactive
|
22
23
|
*/
|
23
24
|
isHighlighted_: false,
|
24
25
|
/**
|
25
26
|
* @member {Number|null} line_=null
|
26
27
|
* @protected
|
28
|
+
* @reactive
|
27
29
|
*/
|
28
30
|
line_: null,
|
29
31
|
/**
|
@@ -63,15 +63,19 @@ class ConfigurationViewport extends Viewport {
|
|
63
63
|
exampleComponentFlex: 2,
|
64
64
|
/**
|
65
65
|
* @member {Object} layout={ntype:'hbox', align:'stretch'}
|
66
|
+
* @reactive
|
66
67
|
*/
|
67
68
|
layout: {ntype: 'hbox', align: 'stretch'}
|
68
69
|
}
|
69
70
|
|
70
71
|
/**
|
71
|
-
* Override this method to create the components to show inside the configuration container
|
72
|
-
*
|
72
|
+
* Override this method to create the components to show inside the configuration container.
|
73
|
+
* The method can optionally be async => Use this for functional components,
|
74
|
+
* where you want to subscribe controls to "classic" components inside functional components.
|
75
|
+
* @see:Neo.examples.functional.hostComponent.MainContainer
|
76
|
+
* @returns {Promise<Object[]>|Object[]|null}
|
73
77
|
*/
|
74
|
-
createConfigurationComponents() {
|
78
|
+
async createConfigurationComponents() {
|
75
79
|
return null
|
76
80
|
}
|
77
81
|
|
@@ -101,10 +105,10 @@ class ConfigurationViewport extends Viewport {
|
|
101
105
|
/**
|
102
106
|
*
|
103
107
|
*/
|
104
|
-
onConstructed() {
|
108
|
+
async onConstructed() {
|
105
109
|
let me = this,
|
106
110
|
style = me.exampleContainerConfig?.style,
|
107
|
-
theme;
|
111
|
+
exampleComponentType, theme;
|
108
112
|
|
109
113
|
if (style) {
|
110
114
|
delete me.exampleContainerConfig.style
|
@@ -112,13 +116,15 @@ class ConfigurationViewport extends Viewport {
|
|
112
116
|
|
113
117
|
me.exampleComponent = me.createExampleComponent();
|
114
118
|
|
115
|
-
|
119
|
+
exampleComponentType = Neo.typeOf(me.exampleComponent);
|
120
|
+
|
121
|
+
if (exampleComponentType === 'NeoClass' || exampleComponentType === 'Object') {
|
116
122
|
me.exampleComponent = Neo.create(me.exampleComponent)
|
117
123
|
}
|
118
124
|
|
119
|
-
me.configurationComponents = me.createConfigurationComponents() || [];
|
125
|
+
me.configurationComponents = await me.createConfigurationComponents() || [];
|
120
126
|
|
121
|
-
theme = me.exampleComponent.getTheme();
|
127
|
+
theme = me.exampleComponent.getTheme?.() || 'neo-theme-light';
|
122
128
|
|
123
129
|
me.items = [{
|
124
130
|
module: Container,
|
@@ -16,6 +16,7 @@ class MainContainer extends Viewport {
|
|
16
16
|
/**
|
17
17
|
* Value for the container.Base layout_ config
|
18
18
|
* @member {Object} layout={ntype: 'fit'}
|
19
|
+
* @reactive
|
19
20
|
*/
|
20
21
|
layout: {ntype: 'fit'},
|
21
22
|
/**
|
@@ -25,6 +26,7 @@ class MainContainer extends Viewport {
|
|
25
26
|
* 1. Extend Neo.calendar.view.week.Component and add the configs and view model there.
|
26
27
|
* 2. Just drop them into a parent view.
|
27
28
|
* @member {Neo.calendar.view.MainContainerStateProvider} stateProvider=MainContainerStateProvider
|
29
|
+
* @reactive
|
28
30
|
*/
|
29
31
|
stateProvider: {
|
30
32
|
module: MainContainerStateProvider,
|
@@ -36,6 +38,7 @@ class MainContainer extends Viewport {
|
|
36
38
|
* Config options for Neo.calendar.store.Calendars.
|
37
39
|
* The calendar view model relies on it.
|
38
40
|
* @member {Object} calendarStoreConfig_
|
41
|
+
* @reactive
|
39
42
|
*/
|
40
43
|
calendarStoreConfig_: {
|
41
44
|
autoLoad: true,
|
@@ -45,6 +48,7 @@ class MainContainer extends Viewport {
|
|
45
48
|
* Config options for Neo.calendar.store.Events.
|
46
49
|
* The calendar view model relies on it.
|
47
50
|
* @member {Object} eventStoreConfig_
|
51
|
+
* @reactive
|
48
52
|
*/
|
49
53
|
eventStoreConfig_: {
|
50
54
|
autoLoad: true,
|
@@ -22,6 +22,7 @@ class CountryGallery extends Gallery {
|
|
22
22
|
className: 'Neo.examples.component.coronaGallery.CountryGallery',
|
23
23
|
/**
|
24
24
|
* @member {String[]} cls=['neo-country-gallery']
|
25
|
+
* @reactive
|
25
26
|
*/
|
26
27
|
cls: ['neo-country-gallery'],
|
27
28
|
/**
|
@@ -46,6 +47,7 @@ class CountryGallery extends Gallery {
|
|
46
47
|
selectOnMount: false,
|
47
48
|
/**
|
48
49
|
* @member {Neo.data.Store} store=CountryStore
|
50
|
+
* @reactive
|
49
51
|
*/
|
50
52
|
store: CountryStore
|
51
53
|
}
|
@@ -21,6 +21,7 @@ class Viewport extends BaseViewport {
|
|
21
21
|
baseCls: ['neo-gallery-viewport', 'neo-viewport'],
|
22
22
|
/**
|
23
23
|
* @member {Neo.controller.Component} controller=ViewportController
|
24
|
+
* @reactive
|
24
25
|
*/
|
25
26
|
controller: ViewportController,
|
26
27
|
/**
|
@@ -33,10 +34,12 @@ class Viewport extends BaseViewport {
|
|
33
34
|
galleryConfig: null,
|
34
35
|
/**
|
35
36
|
* @member {Object|null} layout={ntype: 'hbox', align: 'stretch'}
|
37
|
+
* @reactive
|
36
38
|
*/
|
37
39
|
layout: {ntype: 'hbox', align: 'stretch'},
|
38
40
|
/**
|
39
41
|
* @member {Boolean} showGitHubStarButton_=true
|
42
|
+
* @reactive
|
40
43
|
*/
|
41
44
|
showGitHubStarButton_: true,
|
42
45
|
/**
|