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
@@ -1,3 +1,5 @@
|
|
1
|
+
# Super
|
2
|
+
|
1
3
|
To call a super-class method use the `super` keyword.
|
2
4
|
|
3
5
|
```javascript readonly
|
@@ -11,7 +13,7 @@ class Mammal extends Base {
|
|
11
13
|
console.log(`${this.name} is doing something mammals do`)
|
12
14
|
}
|
13
15
|
}
|
14
|
-
Neo.setupClass(Mammal);
|
16
|
+
export default Neo.setupClass(Mammal);
|
15
17
|
```
|
16
18
|
|
17
19
|
```javascript readonly
|
@@ -20,17 +22,18 @@ class Human extends Mammal {
|
|
20
22
|
className: 'Simple.example.Human',
|
21
23
|
}
|
22
24
|
doSomething(){
|
23
|
-
|
25
|
+
super.doSomething();
|
24
26
|
console.log(`${this.name} is doing something humans do`)
|
25
27
|
}
|
26
28
|
}
|
27
29
|
|
30
|
+
Human = Neo.setupClass(Human);
|
31
|
+
|
28
32
|
const myPerson = Neo.create(Human, {
|
29
33
|
name: 'Herbert'
|
30
34
|
});
|
31
|
-
myPerson.doSomething();
|
32
35
|
|
33
|
-
|
36
|
+
myPerson.doSomething();
|
34
37
|
```
|
35
38
|
|
36
39
|
Sometimes you aren't sure if a super class has a method. In that case use the
|
@@ -47,7 +50,7 @@ class Mammal extends Base {
|
|
47
50
|
console.log(`${this.name} is doing something mammals do`)
|
48
51
|
}
|
49
52
|
}
|
50
|
-
Neo.setupClass(Mammal);
|
53
|
+
export default Neo.setupClass(Mammal);
|
51
54
|
```
|
52
55
|
|
53
56
|
```javascript readonly
|
@@ -56,15 +59,16 @@ class Human extends Mammal {
|
|
56
59
|
className: 'Simple.example.Human',
|
57
60
|
}
|
58
61
|
doSomething(){
|
59
|
-
|
62
|
+
super.doSomething?.();
|
60
63
|
console.log(`${this.name} is doing something humans do`)
|
61
64
|
}
|
62
65
|
}
|
63
66
|
|
67
|
+
Human = Neo.setupClass(Human);
|
68
|
+
|
64
69
|
const myPerson = Neo.create(Human, {
|
65
70
|
name: 'Herbert'
|
66
71
|
});
|
67
|
-
myPerson.doSomething();
|
68
72
|
|
69
|
-
|
73
|
+
myPerson.doSomething();
|
70
74
|
```
|
package/learn/tree.json
CHANGED
@@ -1,66 +1,73 @@
|
|
1
1
|
{"data": [
|
2
|
-
{"name": "Using These Topics",
|
3
|
-
{"name": "Benefits",
|
4
|
-
{"name": "Introduction
|
5
|
-
{"name": "Off the Main Thread",
|
6
|
-
{"name": "4 Environments",
|
7
|
-
{"name": "Unified Config System",
|
8
|
-
{"name": "RPC Layer",
|
9
|
-
{"name": "Extreme Speed",
|
10
|
-
{"name": "Multi-Window Applications",
|
11
|
-
{"name": "Quick Application Development",
|
12
|
-
{"name": "Complexity and Effort",
|
13
|
-
{"name": "Forms Engine",
|
14
|
-
{"name": "Features and Benefits Summary",
|
15
|
-
{"name": "
|
16
|
-
{"name": "
|
17
|
-
{"name": "
|
18
|
-
{"name": "
|
19
|
-
{"name": "
|
20
|
-
{"name": "
|
21
|
-
{"name": "
|
22
|
-
{"name": "
|
23
|
-
|
24
|
-
|
25
|
-
{"name": "
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
{"name": "
|
34
|
-
{"name": "
|
35
|
-
{"name": "
|
36
|
-
{"name": "
|
37
|
-
{"name": "
|
38
|
-
|
39
|
-
{"name": "
|
40
|
-
{"name": "
|
41
|
-
|
42
|
-
{"name": "
|
43
|
-
{"name": "
|
44
|
-
|
45
|
-
{"name": "
|
46
|
-
|
47
|
-
|
48
|
-
{"name": "
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
{"name": "
|
54
|
-
{"name": "
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
{"name": "
|
65
|
-
|
2
|
+
{"name": "Using These Topics", "parentId": null, "id": "UsingTheseTopics" },
|
3
|
+
{"name": "Benefits", "parentId": null, "isLeaf": false, "id": "Benefits"},
|
4
|
+
{"name": "Introduction", "parentId": "Benefits", "id": "benefits/Introduction"},
|
5
|
+
{"name": "Off the Main Thread", "parentId": "Benefits", "id": "benefits/OffTheMainThread"},
|
6
|
+
{"name": "4 Environments", "parentId": "Benefits", "id": "benefits/FourEnvironments"},
|
7
|
+
{"name": "Unified Config System", "parentId": "Benefits", "id": "benefits/ConfigSystem"},
|
8
|
+
{"name": "RPC Layer", "parentId": "Benefits", "id": "benefits/RPCLayer"},
|
9
|
+
{"name": "Extreme Speed", "parentId": "Benefits", "id": "benefits/Speed"},
|
10
|
+
{"name": "Multi-Window Applications", "parentId": "Benefits", "id": "benefits/MultiWindow"},
|
11
|
+
{"name": "Quick Application Development", "parentId": "Benefits", "id": "benefits/Quick"},
|
12
|
+
{"name": "Complexity and Effort", "parentId": "Benefits", "id": "benefits/Effort"},
|
13
|
+
{"name": "Forms Engine", "parentId": "Benefits", "id": "benefits/FormsEngine"},
|
14
|
+
{"name": "Features and Benefits Summary", "parentId": "Benefits", "id": "benefits/Features"},
|
15
|
+
{"name": "Comparisons", "parentId": null, "isLeaf": false, "id": "comparisons", "collapsed": true},
|
16
|
+
{"name": "Overview", "parentId": "comparisons", "id": "comparisons/Overview"},
|
17
|
+
{"name": "Neo.mjs vs React.js", "parentId": "comparisons", "id": "comparisons/NeoVsReact"},
|
18
|
+
{"name": "Neo.mjs vs Angular", "parentId": "comparisons", "id": "comparisons/NeoVsAngular"},
|
19
|
+
{"name": "Neo.mjs vs Vue.js", "parentId": "comparisons", "id": "comparisons/NeoVsVue"},
|
20
|
+
{"name": "Neo.mjs vs Solid.js", "parentId": "comparisons", "id": "comparisons/NeoVsSolid"},
|
21
|
+
{"name": "Neo.mjs vs Next.js", "parentId": "comparisons", "id": "comparisons/NeoVsNextJs"},
|
22
|
+
{"name": "Neo.mjs vs Ext.js", "parentId": "comparisons", "id": "comparisons/NeoVsExtJs"},
|
23
|
+
{"name": "Getting Started", "parentId": null, "isLeaf": false, "id": "GettingStarted", "collapsed": true},
|
24
|
+
{"name": "Setup", "parentId": "GettingStarted", "id": "gettingstarted/Setup"},
|
25
|
+
{"name": "Workspaces and Applications", "parentId": "GettingStarted", "id": "gettingstarted/Workspaces"},
|
26
|
+
{"name": "Describing a View", "parentId": "GettingStarted", "id": "gettingstarted/DescribingTheUI"},
|
27
|
+
{"name": "Events", "parentId": "GettingStarted", "id": "gettingstarted/Events"},
|
28
|
+
{"name": "Component References", "parentId": "GettingStarted", "id": "gettingstarted/References"},
|
29
|
+
{"name": "Extending Classes", "parentId": "GettingStarted", "id": "gettingstarted/Extending"},
|
30
|
+
{"name": "Config", "parentId": "GettingStarted", "id": "gettingstarted/Config"},
|
31
|
+
{"name": "Shared Bindable Data", "parentId": "GettingStarted", "id": "gettingstarted/ComponentModels"},
|
32
|
+
{"name": "Guides", "parentId": null, "isLeaf": false, "id": "guides", "collapsed": true},
|
33
|
+
{"name": "Fundamentals & Core Concepts", "parentId": "guides", "isLeaf": false, "id": "guides/fundamentals", "collapsed": true},
|
34
|
+
{"name": "Application Bootstrap", "parentId": "guides/fundamentals", "id": "guides/fundamentals/ApplicationBootstrap"},
|
35
|
+
{"name": "Instance Lifecycle", "parentId": "guides/fundamentals", "id": "guides/fundamentals/InstanceLifecycle"},
|
36
|
+
{"name": "Declarative Component Trees VS Imperative Vdom", "parentId": "guides/fundamentals", "id": "guides/fundamentals/DeclarativeComponentTreesVsImperativeVdom"},
|
37
|
+
{"name": "Declarative VDOM with Effects", "parentId": "guides/fundamentals", "id": "guides/fundamentals/DeclarativeVDOMWithEffects"},
|
38
|
+
{"name": "Config System Deep Dive", "parentId": "guides/fundamentals", "id": "guides/fundamentals/ConfigSystemDeepDive"},
|
39
|
+
{"name": "Extending Neo Classes", "parentId": "guides/fundamentals", "id": "guides/fundamentals/ExtendingNeoClasses"},
|
40
|
+
{"name": "Main Thread Addons", "parentId": "guides/fundamentals", "id": "guides/fundamentals/MainThreadAddons"},
|
41
|
+
{"name": "UI Building Blocks", "parentId": "guides", "isLeaf": false, "id": "guides/uibuildingblocks", "collapsed": true},
|
42
|
+
{"name": "Component and Container Basics", "parentId": "guides/uibuildingblocks", "id": "guides/uibuildingblocks/ComponentsAndContainers"},
|
43
|
+
{"name": "Layouts", "parentId": "guides/uibuildingblocks", "id": "guides/uibuildingblocks/Layouts"},
|
44
|
+
{"name": "Custom Components", "parentId": "guides/uibuildingblocks", "id": "guides/uibuildingblocks/CustomComponents"},
|
45
|
+
{"name": "Working with VDom", "parentId": "guides/uibuildingblocks", "id": "guides/uibuildingblocks/WorkingWithVDom"},
|
46
|
+
{"name": "Data Handling", "parentId": "guides", "isLeaf": false, "id": "guides/datahandling", "collapsed": true},
|
47
|
+
{"name": "Collections", "parentId": "guides/datahandling", "id": "guides/datahandling/Collections"},
|
48
|
+
{"name": "Records", "parentId": "guides/datahandling", "id": "guides/datahandling/Records"},
|
49
|
+
{"name": "Grids", "parentId": "guides/datahandling", "id": "guides/datahandling/Grids"},
|
50
|
+
{"name": "Tables (Stores)", "parentId": "guides/datahandling", "id": "guides/datahandling/Tables", "hidden": true},
|
51
|
+
{"name": "Shared Bindable Data (State Providers)", "parentId": "guides/datahandling", "id": "guides/datahandling/StateProviders"},
|
52
|
+
{"name": "User Interaction & Advanced Features", "parentId": "guides", "isLeaf": false, "id": "guides/userinteraction", "collapsed": true},
|
53
|
+
{"name": "User Input (Forms)", "parentId": "guides/userinteraction", "id": "guides/userinteraction/Forms"},
|
54
|
+
{"name": "Form Fields", "parentId": "guides/userinteraction", "isLeaf": false, "id": "guides/userinteraction/form_fields"},
|
55
|
+
{"name": "ComboBox", "parentId": "guides/userinteraction/form_fields", "id": "guides/userinteraction/form_fields/ComboBox"},
|
56
|
+
{"name": "Events", "parentId": "guides/userinteraction", "isLeaf": false, "id": "guides/userinteraction/events"},
|
57
|
+
{"name": "Custom Events", "parentId": "guides/userinteraction/events", "id": "guides/userinteraction/events/CustomEvents"},
|
58
|
+
{"name": "DOM Events", "parentId": "guides/userinteraction/events", "id": "guides/userinteraction/events/DomEvents"},
|
59
|
+
{"name": "Specific Applications/Features", "parentId": "guides", "isLeaf": false, "id": "guides/specificfeatures", "collapsed": true},
|
60
|
+
{"name": "Multi-Window Applications", "parentId": "guides/specificfeatures", "id": "guides/specificfeatures/MultiWindow", "hidden": true},
|
61
|
+
{"name": "Mixins", "parentId": "guides/specificfeatures", "id": "guides/specificfeatures/Mixins", "hidden": true},
|
62
|
+
{"name": "Portal App", "parentId": "guides/specificfeatures", "id": "guides/specificfeatures/PortalApp"},
|
63
|
+
{"name": "Tutorials", "parentId": null, "isLeaf": false, "id": "Tutorials", "collapsed": true},
|
64
|
+
{"name": "Rock Scissors Paper", "parentId": "Tutorials", "id": "tutorials/RSP", "hidden": true},
|
65
|
+
{"name": "Earthquakes", "parentId": "Tutorials", "id": "tutorials/Earthquakes"},
|
66
|
+
{"name": "Todo List", "parentId": "Tutorials", "id": "tutorials/TodoList"},
|
67
|
+
{"name": "JavaScript Classes", "parentId": null, "isLeaf": false, "id": "JavaScript", "collapsed": true},
|
68
|
+
{"name": "Classes, Properties, and Methods", "parentId": "JavaScript", "id": "javascript/Classes"},
|
69
|
+
{"name": "Overriding Methods", "parentId": "JavaScript", "id": "javascript/Overrides"},
|
70
|
+
{"name": "Other JavaScript Class Features", "parentId": "JavaScript", "id": "javascript/ClassFeatures"},
|
71
|
+
{"name": "Super", "parentId": "JavaScript", "id": "javascript/Super"},
|
72
|
+
{"name": "Glossary", "parentId": null, "id": "Glossary"}
|
66
73
|
]}
|
package/learn/tutorials/RSP.md
CHANGED
@@ -1,7 +1,15 @@
|
|
1
|
-
|
1
|
+
# Todo List
|
2
2
|
|
3
|
-
|
4
|
-
you
|
3
|
+
This tutorial guides you through creating the same simple Todo List application using three different coding styles
|
4
|
+
available in Neo.mjs. This will help you understand the flexibility of the framework and choose the approach that best
|
5
|
+
fits your project or personal preference.
|
6
|
+
|
7
|
+
## 1. HTML Style
|
8
|
+
|
9
|
+
This first version demonstrates how you can build a component in a way that might feel familiar if you have a background
|
10
|
+
in traditional HTML and JavaScript. It directly constructs and manipulates a `vdom` (Virtual DOM) object that mirrors an
|
11
|
+
HTML structure. Event handling is set up manually using DOM listeners. This approach offers fine-grained control and is
|
12
|
+
useful for understanding the fundamentals of Neo.mjs's vdom system.
|
5
13
|
|
6
14
|
```javascript live-preview
|
7
15
|
import Component from '../component/Base.mjs';
|
@@ -67,9 +75,9 @@ class MainComponent extends Component {
|
|
67
75
|
tag: 'li',
|
68
76
|
cn : [
|
69
77
|
{tag: 'span', cls, style: {cursor: 'pointer', width: '20px'}},
|
70
|
-
{vtype: 'text',
|
78
|
+
{vtype: 'text', text: item.text}
|
71
79
|
]
|
72
|
-
})
|
80
|
+
})
|
73
81
|
});
|
74
82
|
|
75
83
|
me.update()
|
@@ -112,9 +120,96 @@ class MainComponent extends Component {
|
|
112
120
|
MainComponent = Neo.setupClass(MainComponent);
|
113
121
|
```
|
114
122
|
|
115
|
-
##
|
123
|
+
## 2. Functional Style
|
124
|
+
|
125
|
+
This second version showcases a more modern and concise way to build components using a functional approach. It
|
126
|
+
leverages hooks like `useConfig` for state management and `useEvent` for handling DOM events, resulting in more
|
127
|
+
declarative and readable code. This style is heavily inspired by concepts like React Hooks and is ideal for creating
|
128
|
+
self-contained, stateful components with minimal boilerplate.
|
129
|
+
|
130
|
+
```javascript live-preview
|
131
|
+
import {defineComponent, useConfig, useEvent} from '../functional/_export.mjs';
|
132
|
+
|
133
|
+
let MainContainer = defineComponent({
|
134
|
+
config: {
|
135
|
+
className: 'Neo.examples.todoList.version3.MainContainer'
|
136
|
+
},
|
137
|
+
createVdom() {
|
138
|
+
const [items, setItems] = useConfig([
|
139
|
+
{id: 1, done: true, text: 'Todo Item 1'},
|
140
|
+
{id: 2, done: false, text: 'Todo Item 2'},
|
141
|
+
{id: 3, done: false, text: 'Todo Item 3'}
|
142
|
+
]);
|
143
|
+
|
144
|
+
const [inputValue, setInputValue] = useConfig('');
|
145
|
+
const [inputVdomValue, setInputVdomValue] = useConfig('');
|
146
|
+
|
147
|
+
useEvent('click', data => {
|
148
|
+
if (inputValue) {
|
149
|
+
const newItem = {
|
150
|
+
id : (items.length > 0 ? Math.max(...items.map(i => i.id)) : 0) + 1,
|
151
|
+
done: false,
|
152
|
+
text: inputValue
|
153
|
+
};
|
154
|
+
setItems([...items, newItem]);
|
155
|
+
setInputValue('');
|
156
|
+
setInputVdomValue('');
|
157
|
+
}
|
158
|
+
}, '.todo-add-button');
|
159
|
+
|
160
|
+
useEvent('click', data => {
|
161
|
+
const liNode = data.path[1];
|
162
|
+
const clickedItemId = parseInt(liNode.data.id);
|
163
|
+
|
164
|
+
setItems(items => items.map(item =>
|
165
|
+
item.id === clickedItemId ? {...item, done: !item.done} : item
|
166
|
+
));
|
167
|
+
}, '.todo-item');
|
168
|
+
|
169
|
+
useEvent('input', data => {
|
170
|
+
setInputValue(data.value);
|
171
|
+
setInputVdomValue(undefined);
|
172
|
+
}, '.todo-input');
|
173
|
+
|
174
|
+
return {
|
175
|
+
style: {border: '1px solid #000', margin: '20px', padding: '10px', maxWidth: '300px'},
|
176
|
+
cn: [
|
177
|
+
{tag: 'h3', html: 'Todo List'},
|
178
|
+
{tag: 'ol', cn: items.map(item => ({
|
179
|
+
tag : 'li',
|
180
|
+
'data-id': item.id,
|
181
|
+
cn : [
|
182
|
+
{
|
183
|
+
tag : 'span',
|
184
|
+
cls : ['todo-item', item.done ? 'fa fa-check' : 'far fa-square'],
|
185
|
+
style: {cursor: 'pointer', width: '20px', marginRight: '5px'}
|
186
|
+
},
|
187
|
+
{vtype: 'text', html: item.text}
|
188
|
+
]
|
189
|
+
}))},
|
190
|
+
{cn: [{
|
191
|
+
tag: 'input',
|
192
|
+
cls: ['todo-input'],
|
193
|
+
value: inputVdomValue
|
194
|
+
}, {
|
195
|
+
tag: 'button',
|
196
|
+
cls: ['todo-add-button'],
|
197
|
+
html: 'Add Item',
|
198
|
+
style: {marginLeft: '1em'}
|
199
|
+
}]}
|
200
|
+
]
|
201
|
+
};
|
202
|
+
}
|
203
|
+
});
|
204
|
+
```
|
205
|
+
|
206
|
+
## 3. Classic Neo Style
|
116
207
|
|
117
|
-
|
208
|
+
This final version illustrates the classic, object-oriented approach to building UIs in Neo.mjs. It separates concerns
|
209
|
+
by using dedicated classes for different parts of the application: a `Store` to manage the data, a `Model` to define
|
210
|
+
the data structure, and `Container` with child components (`List`, `Toolbar`, `TextField`) to create the view.
|
211
|
+
This powerful, structured approach is well-suited for larger, more complex applications where a clear separation of data,
|
212
|
+
logic, and presentation is beneficial.
|
118
213
|
|
119
214
|
```javascript live-preview
|
120
215
|
import Container from '../container/Base.mjs';
|
@@ -229,3 +324,4 @@ class MainContainer extends Container {
|
|
229
324
|
|
230
325
|
MainContainer = Neo.setupClass(MainContainer);
|
231
326
|
```
|
327
|
+
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name" : "neo.mjs",
|
3
|
-
"version" : "10.0.0-beta.
|
3
|
+
"version" : "10.0.0-beta.6",
|
4
4
|
"description" : "Neo.mjs: The multi-threaded UI framework for building ultra-fast, desktop-like web applications with uncompromised responsiveness, inherent security, and a transpilation-free dev mode.",
|
5
5
|
"type" : "module",
|
6
6
|
"repository" : {
|
@@ -12,11 +12,13 @@
|
|
12
12
|
},
|
13
13
|
"scripts" : {
|
14
14
|
"add-config" : "node ./buildScripts/addConfig.mjs",
|
15
|
+
"add-reactive-tags" : "node ./buildScripts/addReactiveTags.mjs",
|
15
16
|
"build-all" : "node ./buildScripts/buildAll.mjs -f -n",
|
16
17
|
"build-all-questions" : "node ./buildScripts/buildAll.mjs -f",
|
17
18
|
"build-es-modules" : "node ./buildScripts/buildESModules.mjs",
|
18
19
|
"build-themes" : "node ./buildScripts/buildThemes.mjs -f",
|
19
20
|
"build-threads" : "node ./buildScripts/webpack/buildThreads.mjs -f",
|
21
|
+
"check-reactive-tags" : "node ./buildScripts/checkReactiveTags.mjs",
|
20
22
|
"convert-design-tokens" : "node ./buildScripts/convertDesignTokens.mjs",
|
21
23
|
"create-app" : "node ./buildScripts/createApp.mjs",
|
22
24
|
"create-app-minimal" : "node ./buildScripts/createAppMinimal.mjs",
|
@@ -81,13 +83,13 @@
|
|
81
83
|
"chalk" : "^5.4.1",
|
82
84
|
"clean-webpack-plugin" : "^4.0.0",
|
83
85
|
"commander" : "^14.0.0",
|
84
|
-
"cssnano" : "^7.0
|
86
|
+
"cssnano" : "^7.1.0",
|
85
87
|
"envinfo" : "^7.14.0",
|
86
88
|
"fs-extra" : "^11.3.0",
|
87
89
|
"highlightjs-line-numbers.js" : "^2.9.0",
|
88
90
|
"html-minifier-terser" : "^7.2.0",
|
89
91
|
"inquirer" : "^12.7.0",
|
90
|
-
"marked" : "^16.
|
92
|
+
"marked" : "^16.1.1",
|
91
93
|
"monaco-editor" : "0.50.0",
|
92
94
|
"neo-jsdoc" : "1.0.1",
|
93
95
|
"neo-jsdoc-x" : "1.0.5",
|
@@ -96,7 +98,7 @@
|
|
96
98
|
"siesta-lite" : "5.5.2",
|
97
99
|
"terser" : "^5.43.1",
|
98
100
|
"url" : "^0.11.4",
|
99
|
-
"webpack" : "^5.100.
|
101
|
+
"webpack" : "^5.100.2",
|
100
102
|
"webpack-cli" : "^6.0.1",
|
101
103
|
"webpack-dev-server" : "^5.2.2",
|
102
104
|
"webpack-hook-plugin" : "^1.0.7",
|
@@ -0,0 +1,16 @@
|
|
1
|
+
.email-compose-view {
|
2
|
+
align-items : stretch;
|
3
|
+
background-color: #323232;
|
4
|
+
border : 1px solid #ccc;
|
5
|
+
box-shadow : 0 4px 8px rgba(0,0,0,0.1);
|
6
|
+
display : flex;
|
7
|
+
flex-direction : column;
|
8
|
+
justify-content : center;
|
9
|
+
left : 50%;
|
10
|
+
padding : 20px;
|
11
|
+
position : absolute;
|
12
|
+
top : 50%;
|
13
|
+
transform : translate(-50%, -50%);
|
14
|
+
width : 600px;
|
15
|
+
z-index : 1000
|
16
|
+
}
|
@@ -106,10 +106,11 @@
|
|
106
106
|
}
|
107
107
|
|
108
108
|
pre[data-javascript] {
|
109
|
-
border
|
110
|
-
border-radius: 4px;
|
111
|
-
|
112
|
-
|
109
|
+
border : thin solid lightgray;
|
110
|
+
border-radius : 4px;
|
111
|
+
letter-spacing: 0;
|
112
|
+
overflow-x : scroll;
|
113
|
+
padding : 12px;
|
113
114
|
}
|
114
115
|
|
115
116
|
summary::-webkit-details-marker {
|
package/src/DefaultConfig.mjs
CHANGED
@@ -192,6 +192,16 @@ const DefaultConfig = {
|
|
192
192
|
* @type Boolean
|
193
193
|
*/
|
194
194
|
unitTestMode: false,
|
195
|
+
/**
|
196
|
+
* When unitTestMode is true, this flag can be enabled to allow VDOM-related
|
197
|
+
* operations like render() and update() to proceed. This is useful for integration-style
|
198
|
+
* tests that need to verify component lifecycle and DOM output.
|
199
|
+
* @default false
|
200
|
+
* @memberOf! module:Neo
|
201
|
+
* @name config.allowVdomUpdatesInTests
|
202
|
+
* @type Boolean
|
203
|
+
*/
|
204
|
+
allowVdomUpdatesInTests: false,
|
195
205
|
/**
|
196
206
|
* Experimental flag if an offscreen canvas worker should get created.
|
197
207
|
* @default false
|
@@ -289,12 +299,12 @@ const DefaultConfig = {
|
|
289
299
|
useVdomWorker: true,
|
290
300
|
/**
|
291
301
|
* buildScripts/injectPackageVersion.mjs will update this value
|
292
|
-
* @default '10.0.0-beta.
|
302
|
+
* @default '10.0.0-beta.6'
|
293
303
|
* @memberOf! module:Neo
|
294
304
|
* @name config.version
|
295
305
|
* @type String
|
296
306
|
*/
|
297
|
-
version: '10.0.0-beta.
|
307
|
+
version: '10.0.0-beta.6'
|
298
308
|
};
|
299
309
|
|
300
310
|
Object.assign(DefaultConfig, {
|