├── .changeset
└── config.json
├── .circleci
└── config.yml
├── .eslintignore
├── .eslintrc.js
├── .github
├── ISSUE_TEMPLATE
│ ├── SUPPORT.md
│ ├── bug_report.md
│ ├── custom.md
│ └── feature_request.md
├── PULL_REQUEST_TEMPLATE.md
└── workflows
│ ├── release.yaml
│ └── test-all-packages.yaml
├── .gitignore
├── .prettierignore
├── .prettierrc
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── benchmark
├── .env
├── README.md
├── benchmarks
│ ├── benchmarkManager.ts
│ ├── react
│ │ ├── 1000fields
│ │ │ ├── bench
│ │ │ │ ├── agilets
│ │ │ │ │ ├── collection.tsx
│ │ │ │ │ ├── nestedState.tsx
│ │ │ │ │ └── state.tsx
│ │ │ │ ├── hookstate.tsx
│ │ │ │ ├── jotai.tsx
│ │ │ │ ├── mobx.tsx
│ │ │ │ ├── nanostores.tsx
│ │ │ │ ├── pulsejs
│ │ │ │ │ ├── collection.tsx
│ │ │ │ │ ├── nestedState.tsx
│ │ │ │ │ └── state.tsx
│ │ │ │ ├── recoil.tsx
│ │ │ │ ├── redux.tsx
│ │ │ │ └── valtio.tsx
│ │ │ └── index.ts
│ │ ├── computed
│ │ │ ├── bench
│ │ │ │ ├── agilets
│ │ │ │ │ ├── autoTracking.tsx
│ │ │ │ │ └── hardCoded.tsx
│ │ │ │ ├── jotai.tsx
│ │ │ │ ├── nanostores.tsx
│ │ │ │ └── recoil.tsx
│ │ │ └── index.ts
│ │ └── counter
│ │ │ ├── bench
│ │ │ ├── agilets.tsx
│ │ │ ├── hookstate.tsx
│ │ │ ├── jotai.tsx
│ │ │ ├── mobx.tsx
│ │ │ ├── nanostores.tsx
│ │ │ ├── pulsejs.tsx
│ │ │ ├── recoil.tsx
│ │ │ ├── redux-toolkit.tsx
│ │ │ ├── redux.tsx
│ │ │ ├── valtio.tsx
│ │ │ └── zustand.tsx
│ │ │ └── index.ts
│ └── typescript
│ │ ├── cloneDeep
│ │ ├── bench
│ │ │ ├── lodash.ts
│ │ │ ├── looper.ts
│ │ │ └── stringify.ts
│ │ └── index.ts
│ │ └── defineConfig
│ │ ├── bench
│ │ ├── referencer.ts
│ │ ├── spreadReferencer.ts
│ │ └── spreader.ts
│ │ └── index.ts
├── lodash.ts
├── package.json
├── public
│ └── index.html
├── runtime
│ ├── benchmarkTypes.ts
│ └── run.ts
├── tsconfig.json
└── yarn.lock
├── examples
├── README.md
├── nextjs
│ └── develop
│ │ ├── clock
│ │ ├── .eslintrc
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── components
│ │ │ ├── Clock.tsx
│ │ │ ├── Counter.tsx
│ │ │ ├── Nav.tsx
│ │ │ └── Page.tsx
│ │ ├── next-env.d.ts
│ │ ├── next.config.js
│ │ ├── package.json
│ │ ├── pages
│ │ │ ├── _app.tsx
│ │ │ ├── index.tsx
│ │ │ ├── ssg.tsx
│ │ │ └── ssr.tsx
│ │ ├── public
│ │ │ ├── favicon.ico
│ │ │ └── vercel.svg
│ │ ├── src
│ │ │ ├── core.ts
│ │ │ └── useInterval.ts
│ │ ├── styles
│ │ │ └── globals.css
│ │ ├── tsconfig.json
│ │ └── yarn.lock
│ │ └── counter
│ │ ├── .eslintrc
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── components
│ │ └── Counter.tsx
│ │ ├── next-env.d.ts
│ │ ├── next.config.js
│ │ ├── package.json
│ │ ├── pages
│ │ ├── _app.tsx
│ │ └── index.tsx
│ │ ├── public
│ │ ├── favicon.ico
│ │ └── vercel.svg
│ │ ├── src
│ │ └── core.ts
│ │ ├── styles
│ │ └── globals.css
│ │ ├── tsconfig.json
│ │ └── yarn.lock
├── plainjs
│ └── develop
│ │ └── tree-shaking
│ │ ├── .gitignore
│ │ ├── package.json
│ │ ├── src
│ │ └── index.js
│ │ └── webpack.config.js
├── razzle
│ └── develop
│ │ └── counter
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── public
│ │ ├── favicon.ico
│ │ └── robots.txt
│ │ ├── sandbox.config.json
│ │ ├── src
│ │ ├── App.js
│ │ ├── client.js
│ │ ├── components
│ │ │ └── Counter.js
│ │ ├── core
│ │ │ └── index.js
│ │ ├── index.js
│ │ └── server.js
│ │ └── yarn.lock
├── react-native
│ ├── README.md
│ └── develop
│ │ └── AwesomeTSProject
│ │ ├── .buckconfig
│ │ ├── .eslintrc.js
│ │ ├── .gitattributes
│ │ ├── .gitignore
│ │ ├── .watchmanconfig
│ │ ├── App.tsx
│ │ ├── README.md
│ │ ├── android
│ │ ├── app
│ │ │ ├── _BUCK
│ │ │ ├── build.gradle
│ │ │ ├── build_defs.bzl
│ │ │ ├── debug.keystore
│ │ │ ├── proguard-rules.pro
│ │ │ └── src
│ │ │ │ ├── debug
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ └── java
│ │ │ │ │ └── com
│ │ │ │ │ └── awesometsproject
│ │ │ │ │ └── ReactNativeFlipper.java
│ │ │ │ └── main
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── java
│ │ │ │ └── com
│ │ │ │ │ └── awesometsproject
│ │ │ │ │ ├── MainActivity.java
│ │ │ │ │ └── MainApplication.java
│ │ │ │ └── res
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ └── values
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ ├── build.gradle
│ │ ├── gradle.properties
│ │ ├── gradle
│ │ │ └── wrapper
│ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ └── gradle-wrapper.properties
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ └── settings.gradle
│ │ ├── app.json
│ │ ├── babel.config.js
│ │ ├── core
│ │ └── index.ts
│ │ ├── index.js
│ │ ├── ios
│ │ ├── AwesomeTSProject-tvOS
│ │ │ └── Info.plist
│ │ ├── AwesomeTSProject-tvOSTests
│ │ │ └── Info.plist
│ │ ├── AwesomeTSProject.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ └── xcshareddata
│ │ │ │ └── xcschemes
│ │ │ │ ├── AwesomeTSProject-tvOS.xcscheme
│ │ │ │ └── AwesomeTSProject.xcscheme
│ │ ├── AwesomeTSProject.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ ├── AwesomeTSProject
│ │ │ ├── AppDelegate.h
│ │ │ ├── AppDelegate.m
│ │ │ ├── Images.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Contents.json
│ │ │ ├── Info.plist
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── main.m
│ │ ├── AwesomeTSProjectTests
│ │ │ ├── AwesomeTSProjectTests.m
│ │ │ └── Info.plist
│ │ ├── Podfile
│ │ └── Podfile.lock
│ │ ├── metro.config.js
│ │ ├── package.json
│ │ ├── tsconfig.json
│ │ └── yarn.lock
├── react
│ ├── README.md
│ ├── develop
│ │ ├── class-component-ts
│ │ │ ├── .env
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── package.json
│ │ │ ├── public
│ │ │ │ ├── favicon.ico
│ │ │ │ ├── index.html
│ │ │ │ ├── logo192.png
│ │ │ │ ├── logo512.png
│ │ │ │ ├── manifest.json
│ │ │ │ └── robots.txt
│ │ │ ├── src
│ │ │ │ ├── App.css
│ │ │ │ ├── App.tsx
│ │ │ │ ├── core
│ │ │ │ │ └── index.ts
│ │ │ │ ├── index.css
│ │ │ │ ├── index.tsx
│ │ │ │ └── react-app-env.d.ts
│ │ │ ├── tsconfig.json
│ │ │ └── yarn.lock
│ │ ├── fields
│ │ │ ├── .env
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── package.json
│ │ │ ├── public
│ │ │ │ ├── favicon.ico
│ │ │ │ ├── index.html
│ │ │ │ ├── logo192.png
│ │ │ │ ├── logo512.png
│ │ │ │ ├── manifest.json
│ │ │ │ └── robots.txt
│ │ │ └── src
│ │ │ │ ├── App.js
│ │ │ │ └── index.js
│ │ ├── functional-component-ts
│ │ │ ├── .env
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── package.json
│ │ │ ├── public
│ │ │ │ ├── favicon.ico
│ │ │ │ ├── index.html
│ │ │ │ ├── logo192.png
│ │ │ │ ├── logo512.png
│ │ │ │ ├── manifest.json
│ │ │ │ └── robots.txt
│ │ │ ├── src
│ │ │ │ ├── App.css
│ │ │ │ ├── App.tsx
│ │ │ │ ├── core
│ │ │ │ │ └── index.ts
│ │ │ │ ├── index.css
│ │ │ │ ├── index.tsx
│ │ │ │ └── react-app-env.d.ts
│ │ │ ├── tsconfig.json
│ │ │ └── yarn.lock
│ │ ├── multieditor-ts
│ │ │ ├── .env
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── package.json
│ │ │ ├── public
│ │ │ │ ├── favicon.ico
│ │ │ │ ├── index.html
│ │ │ │ ├── logo192.png
│ │ │ │ ├── logo512.png
│ │ │ │ ├── manifest.json
│ │ │ │ └── robots.txt
│ │ │ ├── src
│ │ │ │ ├── App.css
│ │ │ │ ├── App.tsx
│ │ │ │ ├── components
│ │ │ │ │ └── ErrorMessage.tsx
│ │ │ │ ├── core
│ │ │ │ │ ├── signUpEditor.ts
│ │ │ │ │ └── utils.ts
│ │ │ │ ├── index.css
│ │ │ │ ├── index.tsx
│ │ │ │ └── react-app-env.d.ts
│ │ │ ├── tsconfig.json
│ │ │ └── yarn.lock
│ │ ├── simple-counter
│ │ │ ├── .env
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── package.json
│ │ │ ├── public
│ │ │ │ ├── favicon.ico
│ │ │ │ ├── index.html
│ │ │ │ ├── manifest.json
│ │ │ │ └── robots.txt
│ │ │ ├── scripts
│ │ │ │ └── analyze.js
│ │ │ ├── src
│ │ │ │ ├── index.js
│ │ │ │ └── state-manager
│ │ │ │ │ ├── Agile.js
│ │ │ │ │ ├── Hookstate.js
│ │ │ │ │ ├── Jotai.js
│ │ │ │ │ ├── NanoStores.js
│ │ │ │ │ ├── Recoil.js
│ │ │ │ │ └── ReduxToolkit.js
│ │ │ └── yarn.lock
│ │ ├── simple-todo-list
│ │ │ ├── .env
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── package.json
│ │ │ ├── public
│ │ │ │ ├── favicon.ico
│ │ │ │ ├── index.html
│ │ │ │ ├── logo192.png
│ │ │ │ ├── logo512.png
│ │ │ │ ├── manifest.json
│ │ │ │ └── robots.txt
│ │ │ └── src
│ │ │ │ ├── App.js
│ │ │ │ ├── core.js
│ │ │ │ └── index.js
│ │ ├── spacex-graphql
│ │ │ ├── .env
│ │ │ ├── .eslintrc.js
│ │ │ ├── .gitignore
│ │ │ ├── .prettierignore
│ │ │ ├── .prettierrc
│ │ │ ├── package.json
│ │ │ ├── public
│ │ │ │ ├── favicon.ico
│ │ │ │ ├── index.html
│ │ │ │ ├── logo192.png
│ │ │ │ ├── logo512.png
│ │ │ │ ├── manifest.json
│ │ │ │ └── robots.txt
│ │ │ ├── src
│ │ │ │ ├── core
│ │ │ │ │ ├── apolloTest.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── global.css
│ │ │ │ ├── index.tsx
│ │ │ │ ├── pages
│ │ │ │ │ └── Home
│ │ │ │ │ │ ├── Home.module.css
│ │ │ │ │ │ └── index.tsx
│ │ │ │ └── react-app-env.d.ts
│ │ │ ├── tsconfig.json
│ │ │ └── yarn.lock
│ │ └── tree-shaking
│ │ │ ├── package.json
│ │ │ ├── src
│ │ │ ├── App.jsx
│ │ │ ├── core.js
│ │ │ └── index.js
│ │ │ └── webpack.config.js
│ └── release
│ │ ├── boxes
│ │ ├── .env
│ │ ├── .gitignore
│ │ ├── package.json
│ │ ├── public
│ │ │ ├── favicon.ico
│ │ │ ├── index.html
│ │ │ ├── logo192.png
│ │ │ ├── logo512.png
│ │ │ ├── manifest.json
│ │ │ └── robots.txt
│ │ ├── src
│ │ │ ├── App.tsx
│ │ │ ├── api.ts
│ │ │ ├── components
│ │ │ │ ├── BounceSpinner.tsx
│ │ │ │ ├── Rectangle
│ │ │ │ │ ├── components
│ │ │ │ │ │ ├── RectangleContainer.tsx
│ │ │ │ │ │ ├── RectangleInner.tsx
│ │ │ │ │ │ └── RectangleLoading.tsx
│ │ │ │ │ └── index.tsx
│ │ │ │ ├── Spacer.tsx
│ │ │ │ └── actionComponents
│ │ │ │ │ ├── Drag.tsx
│ │ │ │ │ └── Resize
│ │ │ │ │ ├── components
│ │ │ │ │ └── Handle.tsx
│ │ │ │ │ ├── controller.ts
│ │ │ │ │ └── index.tsx
│ │ │ ├── core
│ │ │ │ ├── app.ts
│ │ │ │ ├── entities
│ │ │ │ │ └── ui
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── ui.actions.ts
│ │ │ │ │ │ ├── ui.controller.ts
│ │ │ │ │ │ └── ui.interfaces.ts
│ │ │ │ └── index.ts
│ │ │ ├── global.css
│ │ │ ├── hooks
│ │ │ │ ├── useRandomBorderRadius.ts
│ │ │ │ └── useWindowSize.ts
│ │ │ ├── index.tsx
│ │ │ ├── react-app-env.d.ts
│ │ │ └── screens
│ │ │ │ └── Canvas
│ │ │ │ ├── components
│ │ │ │ ├── CanvasContainer.tsx
│ │ │ │ ├── EditProperties
│ │ │ │ │ ├── components
│ │ │ │ │ │ ├── Card.tsx
│ │ │ │ │ │ ├── ImageInfo
│ │ │ │ │ │ │ ├── components
│ │ │ │ │ │ │ │ └── Info.tsx
│ │ │ │ │ │ │ └── index.tsx
│ │ │ │ │ │ ├── Property
│ │ │ │ │ │ │ ├── components
│ │ │ │ │ │ │ │ └── PropertyInput.tsx
│ │ │ │ │ │ │ └── index.tsx
│ │ │ │ │ │ └── Section.tsx
│ │ │ │ │ └── index.tsx
│ │ │ │ └── Toolbar.tsx
│ │ │ │ └── index.tsx
│ │ ├── tsconfig.json
│ │ └── yarn.lock
│ │ └── stopwatch-query-url
│ │ ├── .env
│ │ ├── .eslintrc.js
│ │ ├── .gitignore
│ │ ├── .prettierignore
│ │ ├── .prettierrc
│ │ ├── package.json
│ │ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ └── robots.txt
│ │ ├── src
│ │ ├── components
│ │ │ └── Stopwatch
│ │ │ │ ├── Stopwatch.module.css
│ │ │ │ ├── components
│ │ │ │ └── Button
│ │ │ │ │ ├── Button.module.css
│ │ │ │ │ └── index.tsx
│ │ │ │ └── index.tsx
│ │ ├── core
│ │ │ └── index.ts
│ │ ├── global.css
│ │ ├── index.tsx
│ │ ├── pages
│ │ │ └── Home
│ │ │ │ ├── Home.module.css
│ │ │ │ └── index.tsx
│ │ └── react-app-env.d.ts
│ │ ├── tsconfig.json
│ │ └── yarn.lock
└── vue
│ └── develop
│ └── my-project
│ ├── .gitignore
│ ├── README.md
│ ├── babel.config.js
│ ├── package.json
│ ├── public
│ ├── favicon.ico
│ └── index.html
│ ├── src
│ ├── App.vue
│ ├── assets
│ │ └── logo.png
│ ├── components
│ │ └── HelloWorld.vue
│ ├── core.js
│ └── main.js
│ └── yarn.lock
├── jest.base.config.js
├── jest.config.js
├── lerna.json
├── package.json
├── packages
├── api
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── README.md
│ ├── jest.config.js
│ ├── package.json
│ ├── rollup.config.js
│ ├── src
│ │ └── index.ts
│ └── tsconfig.json
├── babel.config.js
├── core
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── jest.config.js
│ ├── package.json
│ ├── rollup.config.js
│ ├── scripts
│ │ └── prepublish.js
│ ├── src
│ │ ├── agile.ts
│ │ ├── collection
│ │ │ ├── collection.persistent.ts
│ │ │ ├── collection.ts
│ │ │ ├── group
│ │ │ │ ├── group.observer.ts
│ │ │ │ └── index.ts
│ │ │ ├── index.ts
│ │ │ ├── item
│ │ │ │ └── index.ts
│ │ │ ├── public
│ │ │ │ ├── createCollection.ts
│ │ │ │ └── index.ts
│ │ │ └── selector
│ │ │ │ └── index.ts
│ │ ├── computed
│ │ │ ├── computed.tracker.ts
│ │ │ ├── computed.ts
│ │ │ ├── index.ts
│ │ │ └── public
│ │ │ │ ├── createComputed.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── types.ts
│ │ ├── index.ts
│ │ ├── integrations
│ │ │ ├── index.ts
│ │ │ ├── integration.ts
│ │ │ └── integrations.ts
│ │ ├── logCodeManager.ts
│ │ ├── runtime
│ │ │ ├── index.ts
│ │ │ ├── observer.ts
│ │ │ ├── runtime.job.ts
│ │ │ ├── runtime.ts
│ │ │ └── subscription
│ │ │ │ ├── container
│ │ │ │ ├── CallbackSubscriptionContainer.ts
│ │ │ │ ├── ComponentSubscriptionContainer.ts
│ │ │ │ └── SubscriptionContainer.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── sub.controller.ts
│ │ ├── shared.ts
│ │ ├── state
│ │ │ ├── index.ts
│ │ │ ├── public
│ │ │ │ ├── createEnhancedState.ts
│ │ │ │ ├── createLightState.ts
│ │ │ │ ├── createState.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── types.ts
│ │ │ ├── state.enhanced.ts
│ │ │ ├── state.observer.ts
│ │ │ ├── state.persistent.ts
│ │ │ ├── state.runtime.job.ts
│ │ │ └── state.ts
│ │ ├── storages
│ │ │ ├── index.ts
│ │ │ ├── persistent.ts
│ │ │ ├── shared.ts
│ │ │ ├── storage.ts
│ │ │ └── storages.ts
│ │ └── utils.ts
│ ├── tests
│ │ ├── helper
│ │ │ ├── logMock.ts
│ │ │ └── test.integration.ts
│ │ ├── integration
│ │ │ └── collection.persistent.integration.test.ts
│ │ └── unit
│ │ │ ├── agile.test.ts
│ │ │ ├── collection
│ │ │ ├── collection.persistent.test.ts
│ │ │ ├── collection.test.ts
│ │ │ ├── group
│ │ │ │ ├── group.observer.test.ts
│ │ │ │ └── group.test.ts
│ │ │ ├── index.test.ts
│ │ │ ├── item.test.ts
│ │ │ └── selector.test.ts
│ │ │ ├── computed
│ │ │ ├── computed.test.ts
│ │ │ ├── computed.tracker.test.ts
│ │ │ └── index.test.ts
│ │ │ ├── integrations
│ │ │ ├── integration.test.ts
│ │ │ └── integrations.test.ts
│ │ │ ├── runtime
│ │ │ ├── observer.test.ts
│ │ │ ├── runtime.job.test.ts
│ │ │ ├── runtime.test.ts
│ │ │ └── subscription
│ │ │ │ ├── container
│ │ │ │ ├── CallbackSubscriptionContainer.test.ts
│ │ │ │ ├── ComponentSubscriptionContainer.test.ts
│ │ │ │ └── SubscriptionContainer.test.ts
│ │ │ │ └── sub.controller.test.ts
│ │ │ ├── shared.test.ts
│ │ │ ├── state
│ │ │ ├── index.test.ts
│ │ │ ├── state.enhanced.test.ts
│ │ │ ├── state.observer.test.ts
│ │ │ ├── state.persistent.test.ts
│ │ │ ├── state.runtime.job.test.ts
│ │ │ └── state.test.ts
│ │ │ ├── storages
│ │ │ ├── index.test.ts
│ │ │ ├── persistent.test.ts
│ │ │ ├── shared.test.ts
│ │ │ ├── storage.test.ts
│ │ │ └── storages.test.ts
│ │ │ └── utils.test.ts
│ └── tsconfig.json
├── cra-template-agile-typescript
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── package.json
│ ├── template.json
│ └── template
│ │ ├── .eslintrc.js
│ │ ├── .prettierignore
│ │ ├── .prettierrc
│ │ ├── gitignore
│ │ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ └── robots.txt
│ │ ├── src
│ │ ├── components
│ │ │ └── Stopwatch
│ │ │ │ ├── Stopwatch.module.css
│ │ │ │ ├── components
│ │ │ │ └── Button
│ │ │ │ │ ├── Button.module.css
│ │ │ │ │ └── index.tsx
│ │ │ │ └── index.tsx
│ │ ├── core
│ │ │ └── index.ts
│ │ ├── global.css
│ │ ├── index.tsx
│ │ ├── pages
│ │ │ └── Home
│ │ │ │ ├── Home.module.css
│ │ │ │ └── index.tsx
│ │ └── react-app-env.d.ts
│ │ └── tsconfig.json
├── cra-template-agile
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── package.json
│ ├── template.json
│ └── template
│ │ ├── .eslintrc.js
│ │ ├── .prettierignore
│ │ ├── .prettierrc
│ │ ├── gitignore
│ │ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ └── robots.txt
│ │ └── src
│ │ ├── components
│ │ └── Stopwatch
│ │ │ ├── Stopwatch.module.css
│ │ │ ├── components
│ │ │ └── Button
│ │ │ │ ├── Button.module.css
│ │ │ │ └── index.jsx
│ │ │ └── index.jsx
│ │ ├── core
│ │ └── index.js
│ │ ├── global.css
│ │ ├── index.jsx
│ │ └── pages
│ │ └── Home
│ │ ├── Home.module.css
│ │ └── index.jsx
├── event
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── README.md
│ ├── jest.config.js
│ ├── package.json
│ ├── rollup.config.js
│ ├── src
│ │ ├── event.observer.ts
│ │ ├── event.runtime.job.ts
│ │ ├── event.ts
│ │ └── index.ts
│ ├── tests
│ │ └── unit
│ │ │ └── event
│ │ │ ├── event.job.test.ts
│ │ │ ├── event.observer.test.ts
│ │ │ ├── event.test.ts
│ │ │ └── index.test.ts
│ └── tsconfig.json
├── logger
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── README.md
│ ├── jest.config.js
│ ├── package.json
│ ├── rollup.config.js
│ ├── src
│ │ ├── index.ts
│ │ ├── logger.ts
│ │ └── shared.ts
│ └── tsconfig.json
├── multieditor
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── README.md
│ ├── jest.config.js
│ ├── package.json
│ ├── rollup.config.js
│ ├── src
│ │ ├── index.ts
│ │ ├── item.ts
│ │ ├── logCodeManager.ts
│ │ ├── multieditor
│ │ │ ├── index.ts
│ │ │ ├── multieditor.ts
│ │ │ └── types.ts
│ │ ├── status
│ │ │ ├── index.ts
│ │ │ ├── status.tracker.ts
│ │ │ └── status.ts
│ │ ├── utils.ts
│ │ └── validator
│ │ │ ├── index.ts
│ │ │ ├── resolvers
│ │ │ ├── agile
│ │ │ │ └── index.ts
│ │ │ ├── index.ts
│ │ │ └── yup
│ │ │ │ └── index.ts
│ │ │ ├── validationMethods
│ │ │ ├── general.ts
│ │ │ ├── number.ts
│ │ │ └── string.ts
│ │ │ └── validator.ts
│ └── tsconfig.json
├── proxytree
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── README.md
│ ├── jest.config.js
│ ├── package.json
│ ├── rollup.config.js
│ ├── src
│ │ ├── index.ts
│ │ ├── tree
│ │ │ ├── branch.ts
│ │ │ └── index.ts
│ │ └── utils.ts
│ ├── static
│ │ └── pathTrackingImage.jpg
│ ├── tests
│ │ └── unit
│ │ │ └── tree.test.ts
│ └── tsconfig.json
├── react
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── README.md
│ ├── jest.config.js
│ ├── package.json
│ ├── rollup.config.js
│ ├── src
│ │ ├── core
│ │ │ ├── hocs
│ │ │ │ └── AgileHOC.ts
│ │ │ ├── hooks
│ │ │ │ ├── useAgile.ts
│ │ │ │ ├── useBaseAgile.ts
│ │ │ │ ├── useSelector.ts
│ │ │ │ ├── useValue.ts
│ │ │ │ └── useWatcher.ts
│ │ │ └── index.ts
│ │ ├── event
│ │ │ ├── eventPackage.ts
│ │ │ ├── hooks
│ │ │ │ └── useEvent.ts
│ │ │ └── index.ts
│ │ ├── index.ts
│ │ ├── logCodeManager.ts
│ │ ├── multieditor
│ │ │ ├── hooks
│ │ │ │ └── useMultieditor.ts
│ │ │ ├── index.ts
│ │ │ └── multieditorPackage.ts
│ │ ├── proxy
│ │ │ ├── hooks
│ │ │ │ └── useProxy.ts
│ │ │ ├── index.ts
│ │ │ └── proxyPackage.ts
│ │ ├── react.integration.ts
│ │ └── utils
│ │ │ ├── hooks
│ │ │ └── useIsomorphicLayoutEffect.ts
│ │ │ └── index.ts
│ ├── static
│ │ ├── contribute_header.png
│ │ ├── documentation_header.png
│ │ ├── header_background.png
│ │ ├── installation_header.png
│ │ └── what_does_this_integration_header.png
│ ├── tests
│ │ └── old
│ │ │ └── useAgile.spec.ts
│ └── tsconfig.json
├── rollup.config.default.js
├── tsconfig.default.json
├── utils
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── README.md
│ ├── jest.config.js
│ ├── package.json
│ ├── rollup.config.js
│ ├── src
│ │ └── index.ts
│ ├── tests
│ │ └── unit
│ │ │ └── utils.test.ts
│ └── tsconfig.json
└── vue
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── README.md
│ ├── jest.config.js
│ ├── package.json
│ ├── rollup.config.js
│ ├── src
│ ├── bindAgileInstances.ts
│ ├── index.ts
│ └── vue.integration.ts
│ ├── static
│ ├── contribute_header.png
│ ├── documentation_header.png
│ ├── header_background.png
│ ├── installation_header.png
│ └── what_does_this_integration_header.png
│ └── tsconfig.json
├── static
├── branch_organization.png
├── contribute_header.png
├── credits_header.png
├── documentation_header.png
├── header_background.png
├── how_to_create_state_header.png
├── installation_header.png
├── packages_of_agile.png
└── why_should_i_use_agile.png
└── yarn.lock
/.changeset/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://unpkg.com/@changesets/config@1.4.0/schema.json",
3 | "changelog": "@changesets/cli/changelog",
4 | "commit": false,
5 | "linked": [],
6 | "access": "restricted",
7 | "baseBranch": "master",
8 | "updateInternalDependencies": "patch",
9 | "ignore": []
10 | }
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | dist
2 | node_modules
3 | .eslintrc.js
4 | jest.config.js
5 | jest.base.config.js
6 | scripts/
7 | examples/
8 |
9 | # Ignore the templates (because otherwise it will try to lint with the eslint config of these packages)
10 | cra-template-agile-typescript/
11 | cra-template-agile/
12 |
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | const OFF = 0;
2 | const WARNING = 1;
3 | const ERROR = 2;
4 |
5 | module.exports = {
6 | root: true,
7 | env: {
8 | browser: true,
9 | commonjs: true,
10 | jest: true,
11 | node: true,
12 | },
13 | extends: [
14 | 'eslint:recommended',
15 | 'plugin:@typescript-eslint/recommended',
16 | 'prettier',
17 | ],
18 | plugins: ['@typescript-eslint', 'prettier'],
19 | parser: '@typescript-eslint/parser',
20 | parserOptions: {
21 | allowImportExportEverywhere: true,
22 | ecmaVersion: 12,
23 | sourceType: 'module',
24 | },
25 | ignorePatterns: ['.eslintrc.js'],
26 | rules: {
27 | 'func-names': OFF,
28 | '@typescript-eslint/no-explicit-any': OFF,
29 | '@typescript-eslint/explicit-module-boundary-types': OFF,
30 | '@typescript-eslint/ban-types': WARNING,
31 | '@typescript-eslint/ban-ts-comment': WARNING,
32 | },
33 | };
34 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/SUPPORT.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: 🆘 Support, Help, and Advice
3 | about: 👉🏽 Need help or tech support? Please don't open an issue! Head to https://github.com/agile-ts/agile/discussions or https://stackoverflow.com/questions/tagged/agile-ts.
4 | ---
5 |
6 | Hey there! If you need help or tech support then this is not the place to ask.
7 | Please head to the [AgileTs Discord](https://discord.com/T9GzreAwPH) instead
8 | or post a question to [Stackoverflow](https://stackoverflow.com/questions/tagged/agile-ts).
9 |
10 | If you arrived here because you think AgileTs's documentation is unclear,
11 | insufficient or wrong, please consider creating an issue for the documentation [here](https://github.com/agile-ts/documentation) instead.
12 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/custom.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: 🔨 Custom issue template
3 | about: Describe this issue template's purpose here.
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 |
11 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: 🆕 Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: 'Type: Enhancement'
6 | assignees: ''
7 |
8 | ---
9 |
10 | ## 🆕 Feature Request
11 |
12 | ### ❓ Is your feature request related to a problem?
13 |
14 |
15 | ### 📄 Describe the solution you'd like
16 |
17 |
18 | ### 📃 Describe alternatives you've considered
19 |
20 |
21 | ### ➕ Additional Notes
22 |
23 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## 📄 Description
4 |
5 |
6 | ## 🔴 Related Issue
7 |
8 |
9 |
10 | ## 📃 Context
11 |
12 |
13 |
14 | ## 🛠 How Has This Been Tested?
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/.github/workflows/release.yaml:
--------------------------------------------------------------------------------
1 | name: Release
2 | on:
3 | push:
4 | branches: [master]
5 |
6 | jobs:
7 | release:
8 | name: Release
9 | runs-on: ubuntu-latest
10 | steps:
11 | # Checkout Project
12 | - name: 📚 Checkout
13 | uses: actions/checkout@v2
14 |
15 | # Setup NodeJS
16 | - name: 🟢 Setup Node ${{ matrix.node_version }}
17 | uses: actions/setup-node@v1
18 | with:
19 | node-version: 12
20 |
21 | # Install Dependencies
22 | - name: ⏳ Install
23 | run: yarn install
24 |
25 | # Create Release Pull Request
26 | - name: 📤 Create Release Pull Request or Publish to NPM
27 | uses: changesets/action@master
28 | with:
29 | publish: yarn release:prepare
30 | commit: Version Release
31 | title: Next Release
32 | env:
33 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
34 | NPM_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }}
35 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 |
3 | # Differs on each engine
4 | yalc.lock
5 |
6 | # local env files
7 | .env.local
8 | .env.*.local
9 |
10 | # Log files
11 | npm-debug.log*
12 | yarn-debug.log*
13 | yarn-error.log*
14 | .eslintcache
15 | package-lock.json
16 |
17 | # Editor directories and files
18 | .idea
19 | .vscode
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw*
25 | sync.js
26 | *.log
27 |
28 | # Generated files from build
29 | src/*.js
30 | src/*.js.map
31 | *.tgz
32 | cache
33 | coverage
34 | .yalc
35 | dist
36 | .changelog
37 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | dist
2 | node_modules
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "_comment": "To apply prettier config to Webstorm https://intellij-support.jetbrains.com/hc/en-us/community/posts/360002745119-How-to-have-Reformat-Code-feature-behave-exactly-like-Prettier-",
3 | "arrowParens": "always",
4 | "bracketSpacing": true,
5 | "jsxBracketSameLine": true,
6 | "printWidth": 80,
7 | "tabWidth": 2,
8 | "proseWrap": "never",
9 | "singleQuote": true,
10 | "trailingComma": "es5",
11 | "endOfLine": "lf",
12 | "semi": true
13 | }
14 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Code of Conduct
2 |
3 | AgileTs has adopted a Code of Conduct that we expect project participants to follow.
4 | Please read the [read the full text](https://code.fb.com/codeofconduct/) so that you can understand what actions will and will not be tolerated.
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 bennodev19
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/benchmark/.env:
--------------------------------------------------------------------------------
1 | DEV=false
2 |
--------------------------------------------------------------------------------
/benchmark/benchmarks/react/computed/bench/agilets/autoTracking.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDom from 'react-dom';
3 | import {
4 | createComputed,
5 | createState,
6 | logCodeManager,
7 | shared,
8 | } from '@agile-ts/core';
9 | import reactIntegration, { useAgile } from '@agile-ts/react';
10 |
11 | logCodeManager.allowLogging = false;
12 | shared.integrate(reactIntegration);
13 |
14 | const COUNT = createState(0);
15 | const COMPUTED_COUNT = createComputed(() => {
16 | return COUNT.value * 5;
17 | });
18 |
19 | const CountView = () => {
20 | const count = useAgile(COUNT);
21 | return
COUNT.set((state) => state + 1)}>{count}
;
22 | };
23 |
24 | const ComputedCountView = () => {
25 | const computedCount = useAgile(COMPUTED_COUNT);
26 | return {computedCount}
;
27 | };
28 |
29 | const App = () => {
30 | return (
31 |
32 |
33 |
34 |
35 | );
36 | };
37 |
38 | export default function (target: HTMLElement) {
39 | ReactDom.render(, target);
40 | }
41 |
--------------------------------------------------------------------------------
/benchmark/benchmarks/react/computed/bench/agilets/hardCoded.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDom from 'react-dom';
3 | import {
4 | createComputed,
5 | createState,
6 | logCodeManager,
7 | shared,
8 | } from '@agile-ts/core';
9 | import reactIntegration, { useAgile } from '@agile-ts/react';
10 |
11 | logCodeManager.allowLogging = false;
12 | shared.integrate(reactIntegration);
13 |
14 | const COUNT = createState(0);
15 | const COMPUTED_COUNT = createComputed(
16 | () => {
17 | return COUNT.value * 5;
18 | },
19 | { autodetect: false, computedDeps: [COUNT] }
20 | );
21 |
22 | const CountView = () => {
23 | const count = useAgile(COUNT);
24 | return COUNT.set((state) => state + 1)}>{count}
;
25 | };
26 |
27 | const ComputedCountView = () => {
28 | const computedCount = useAgile(COMPUTED_COUNT);
29 | return {computedCount}
;
30 | };
31 |
32 | const App = () => {
33 | return (
34 |
35 |
36 |
37 |
38 | );
39 | };
40 |
41 | export default function (target: HTMLElement) {
42 | ReactDom.render(, target);
43 | }
44 |
--------------------------------------------------------------------------------
/benchmark/benchmarks/react/computed/bench/jotai.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDom from 'react-dom';
3 | import { atom, useAtom } from 'jotai';
4 |
5 | const countAtom = atom(0);
6 | const computedCountAtom = atom((get) => get(countAtom) * 5);
7 |
8 | const CountView = () => {
9 | const [count, setCount] = useAtom(countAtom);
10 | return setCount((v) => v + 1)}>{count}
;
11 | };
12 |
13 | const ComputedCountView = () => {
14 | const [computedCount] = useAtom(computedCountAtom);
15 | return {computedCount}
;
16 | };
17 |
18 | const App = () => {
19 | return (
20 |
21 |
22 |
23 |
24 | );
25 | };
26 |
27 | export default function (target: HTMLElement) {
28 | ReactDom.render(, target);
29 | }
30 |
--------------------------------------------------------------------------------
/benchmark/benchmarks/react/computed/bench/nanostores.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDom from 'react-dom';
3 | import { createDerived, createStore, getValue } from 'nanostores';
4 | import { useStore } from 'nanostores/react';
5 |
6 | const countStore = createStore(() => {
7 | countStore.set(0);
8 | });
9 | const computedStore = createDerived(countStore, (count) => {
10 | return count * 5;
11 | });
12 |
13 | const CountView = () => {
14 | const count = useStore(countStore);
15 | return (
16 | countStore.set(getValue(countStore) + 1)}>{count}
17 | );
18 | };
19 |
20 | const ComputedCountView = () => {
21 | const computedCount = useStore(computedStore);
22 | return {computedCount}
;
23 | };
24 |
25 | const App = () => {
26 | return (
27 |
28 |
29 |
30 |
31 | );
32 | };
33 |
34 | export default function (target: HTMLElement) {
35 | ReactDom.render(, target);
36 | }
37 |
--------------------------------------------------------------------------------
/benchmark/benchmarks/react/counter/bench/agilets.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDom from 'react-dom';
3 | import { createState, shared, logCodeManager } from '@agile-ts/core';
4 | import reactIntegration, { useAgile } from '@agile-ts/react';
5 |
6 | logCodeManager.allowLogging = false;
7 | shared.integrate(reactIntegration);
8 |
9 | const COUNT = createState(0);
10 |
11 | const App = () => {
12 | const count = useAgile(COUNT);
13 | return COUNT.set((state) => state + 1)}>{count}
;
14 | };
15 |
16 | export default function (target: HTMLElement) {
17 | ReactDom.render(, target);
18 | }
19 |
--------------------------------------------------------------------------------
/benchmark/benchmarks/react/counter/bench/hookstate.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDom from 'react-dom';
3 | import { createState, useHookstate } from '@hookstate/core';
4 |
5 | const counter = createState(0);
6 |
7 | const App = () => {
8 | const state = useHookstate(counter);
9 | return state.set((v) => v + 1)}>{state.get()}
;
10 | };
11 |
12 | export default function (target: HTMLElement) {
13 | ReactDom.render(, target);
14 | }
15 |
--------------------------------------------------------------------------------
/benchmark/benchmarks/react/counter/bench/jotai.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDom from 'react-dom';
3 | import { atom, useAtom } from 'jotai';
4 |
5 | const countAtom = atom(0);
6 |
7 | const App = () => {
8 | const [count, setCount] = useAtom(countAtom);
9 | return setCount((v) => v + 1)}>{count}
;
10 | };
11 |
12 | export default function (target: HTMLElement) {
13 | ReactDom.render(, target);
14 | }
15 |
--------------------------------------------------------------------------------
/benchmark/benchmarks/react/counter/bench/mobx.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDom from 'react-dom';
3 | import { action, observable } from 'mobx';
4 | import { observer } from 'mobx-react';
5 |
6 | const appState = observable({
7 | count: 0,
8 | increment: action(function () {
9 | appState.count += 1;
10 | }),
11 | });
12 |
13 | const App = observer(() => {
14 | return {appState.count}
;
15 | });
16 |
17 | export default function (target: HTMLElement) {
18 | ReactDom.render(, target);
19 | }
20 |
--------------------------------------------------------------------------------
/benchmark/benchmarks/react/counter/bench/nanostores.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDom from 'react-dom';
3 | import { createStore, getValue } from 'nanostores';
4 | import { useStore } from 'nanostores/react';
5 |
6 | const countStore = createStore(() => {
7 | countStore.set(0);
8 | });
9 |
10 | const App = () => {
11 | const count = useStore(countStore);
12 | return (
13 | countStore.set(getValue(countStore) + 1)}>{count}
14 | );
15 | };
16 |
17 | export default function (target: HTMLElement) {
18 | ReactDom.render(, target);
19 | }
20 |
--------------------------------------------------------------------------------
/benchmark/benchmarks/react/counter/bench/pulsejs.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDom from 'react-dom';
3 | import { state } from '@pulsejs/core';
4 | import { usePulse } from '@pulsejs/react';
5 |
6 | const COUNT = state(0);
7 |
8 | const App = () => {
9 | const count = usePulse(COUNT);
10 | return COUNT.set((state) => state + 1)}>{count}
;
11 | };
12 |
13 | export default function (target: HTMLElement) {
14 | ReactDom.render(, target);
15 | }
16 |
--------------------------------------------------------------------------------
/benchmark/benchmarks/react/counter/bench/recoil.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDom from 'react-dom';
3 | import { atom, RecoilRoot, useRecoilState } from 'recoil';
4 |
5 | const counterState = atom({
6 | key: 'counterState',
7 | default: 0,
8 | });
9 |
10 | const App = () => {
11 | const [count, setCount] = useRecoilState(counterState);
12 | return setCount((v) => v + 1)}>{count}
;
13 | };
14 |
15 | export default function (target: HTMLElement) {
16 | ReactDom.render(
17 |
18 |
19 | ,
20 | target
21 | );
22 | }
23 |
--------------------------------------------------------------------------------
/benchmark/benchmarks/react/counter/bench/redux-toolkit.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDom from 'react-dom';
3 | import { configureStore, createSlice } from '@reduxjs/toolkit';
4 | import { Provider, useDispatch, useSelector } from 'react-redux';
5 |
6 | const counterSlice = createSlice({
7 | name: 'counter',
8 | initialState: {
9 | count: 0,
10 | },
11 | reducers: {
12 | increment: (state) => {
13 | state.count += 1;
14 | },
15 | },
16 | });
17 |
18 | const store = configureStore({
19 | reducer: {
20 | counter: counterSlice.reducer,
21 | },
22 | });
23 |
24 | const App = () => {
25 | const count = useSelector((state: any) => state.counter.count);
26 | const dispatch = useDispatch();
27 |
28 | return (
29 | dispatch(counterSlice.actions.increment())}>{count}
30 | );
31 | };
32 |
33 | export default function (target: HTMLElement) {
34 | ReactDom.render(
35 |
36 |
37 | ,
38 | target
39 | );
40 | }
41 |
--------------------------------------------------------------------------------
/benchmark/benchmarks/react/counter/bench/redux.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDom from 'react-dom';
3 | import { combineReducers, createStore } from 'redux';
4 | import { Provider, useDispatch, useSelector } from 'react-redux';
5 |
6 | const increment = () => {
7 | return {
8 | type: 'INCREMENT',
9 | };
10 | };
11 |
12 | const counter = (state = 0, action: any) => {
13 | switch (action.type) {
14 | case 'INCREMENT':
15 | return state + 1;
16 | default:
17 | return state;
18 | }
19 | };
20 |
21 | const rootReducer = combineReducers({
22 | counter,
23 | });
24 |
25 | const store = createStore(rootReducer);
26 |
27 | const App = () => {
28 | const count = useSelector((state: any) => state.counter);
29 | const dispatch = useDispatch();
30 |
31 | return dispatch(increment())}>{count}
;
32 | };
33 |
34 | export default function (target: HTMLElement) {
35 | ReactDom.render(
36 |
37 |
38 | ,
39 | target
40 | );
41 | }
42 |
--------------------------------------------------------------------------------
/benchmark/benchmarks/react/counter/bench/valtio.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDom from 'react-dom';
3 | import { proxy, useSnapshot } from 'valtio';
4 |
5 | const state = proxy({ count: 0 });
6 |
7 | function App() {
8 | const snapshot = useSnapshot(state, { sync: true });
9 | return state.count++}>{snapshot.count}
;
10 | }
11 |
12 | export default function (target: HTMLElement) {
13 | ReactDom.render(, target);
14 | }
15 |
--------------------------------------------------------------------------------
/benchmark/benchmarks/react/counter/bench/zustand.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDom from 'react-dom';
3 | import create from 'zustand';
4 |
5 | const useStore = create((set) => ({
6 | count: 0,
7 | increment: () => set((state) => ({ count: state.count + 1 })),
8 | }));
9 |
10 | const App = () => {
11 | const count = useStore((state) => state.count);
12 | const increment = useStore((state) => state.increment);
13 |
14 | return {count}
;
15 | };
16 |
17 | export default function (target: HTMLElement) {
18 | ReactDom.render(, target);
19 | }
20 |
--------------------------------------------------------------------------------
/benchmark/benchmarks/typescript/cloneDeep/bench/lodash.ts:
--------------------------------------------------------------------------------
1 | // @ts-ignore
2 | import _ from 'lodash';
3 |
4 | export function cloneDeep(value: T): T {
5 | return _.cloneDeep(value);
6 | }
7 |
--------------------------------------------------------------------------------
/benchmark/benchmarks/typescript/cloneDeep/bench/looper.ts:
--------------------------------------------------------------------------------
1 | export function cloneDeep(value: T): T {
2 | // Extra checking 'value == null' because 'typeof null === object'
3 | if (value == null || typeof value !== 'object') return value;
4 |
5 | // Ignore everything that is no object or array but has the type of an object (e.g. classes)
6 | const valConstructorName =
7 | Object.getPrototypeOf(value).constructor.name.toLowerCase();
8 | if (valConstructorName !== 'object' && valConstructorName !== 'array')
9 | return value;
10 |
11 | let temp;
12 | const newObject: any = Array.isArray(value) ? [] : {};
13 | for (const property in value) {
14 | temp = value[property];
15 | newObject[property] = cloneDeep(temp);
16 | }
17 | return newObject as T;
18 | }
19 |
--------------------------------------------------------------------------------
/benchmark/benchmarks/typescript/cloneDeep/bench/stringify.ts:
--------------------------------------------------------------------------------
1 | export function cloneDeep(value: T): T {
2 | return JSON.parse(JSON.stringify(value));
3 | }
4 |
--------------------------------------------------------------------------------
/benchmark/benchmarks/typescript/defineConfig/bench/referencer.ts:
--------------------------------------------------------------------------------
1 | export function defineConfig(
2 | config: any,
3 | defaults: any,
4 | overwriteUndefinedProperties?: boolean
5 | ): void {
6 | if (overwriteUndefinedProperties === undefined)
7 | overwriteUndefinedProperties = true;
8 |
9 | for (const defaultKey in defaults) {
10 | if (
11 | !Object.prototype.hasOwnProperty.call(config, defaultKey) ||
12 | (overwriteUndefinedProperties && config[defaultKey] === undefined)
13 | )
14 | config[defaultKey] = defaults[defaultKey];
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/benchmark/benchmarks/typescript/defineConfig/bench/spreadReferencer.ts:
--------------------------------------------------------------------------------
1 | export function defineConfig(
2 | config: any,
3 | defaults: any,
4 | overwriteUndefinedProperties?: boolean
5 | ): any {
6 | if (overwriteUndefinedProperties === undefined)
7 | overwriteUndefinedProperties = true;
8 |
9 | const shallowCopiedConfig = { ...config };
10 |
11 | for (const defaultKey in defaults) {
12 | if (
13 | !Object.prototype.hasOwnProperty.call(shallowCopiedConfig, defaultKey) ||
14 | (overwriteUndefinedProperties &&
15 | shallowCopiedConfig[defaultKey] === undefined)
16 | )
17 | shallowCopiedConfig[defaultKey] = defaults[defaultKey];
18 | }
19 |
20 | return shallowCopiedConfig;
21 | }
22 |
--------------------------------------------------------------------------------
/benchmark/benchmarks/typescript/defineConfig/bench/spreader.ts:
--------------------------------------------------------------------------------
1 | export function defineConfig(
2 | config: any,
3 | defaults: any,
4 | overwriteUndefinedProperties?: boolean
5 | ): any {
6 | if (overwriteUndefinedProperties === undefined)
7 | overwriteUndefinedProperties = true;
8 |
9 | if (overwriteUndefinedProperties) {
10 | const finalConfig = { ...defaults, ...config };
11 | for (const key in finalConfig)
12 | if (finalConfig[key] === undefined) finalConfig[key] = defaults[key];
13 | return finalConfig;
14 | }
15 |
16 | return { ...defaults, ...config };
17 | }
18 |
--------------------------------------------------------------------------------
/benchmark/lodash.ts:
--------------------------------------------------------------------------------
1 | import _ from 'lodash';
2 |
3 | // Benchmark.js requires lodash globally
4 | window._ = _;
5 |
--------------------------------------------------------------------------------
/benchmark/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Benchmark
6 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/benchmark/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": [
5 | "dom",
6 | "dom.iterable",
7 | "esnext"
8 | ],
9 | "allowJs": true,
10 | "skipLibCheck": true,
11 | "esModuleInterop": true,
12 | "allowSyntheticDefaultImports": true,
13 | "strict": true,
14 | "forceConsistentCasingInFileNames": true,
15 | "module": "esnext",
16 | "moduleResolution": "node",
17 | "resolveJsonModule": true,
18 | "isolatedModules": true,
19 | "noEmit": true,
20 | "jsx": "react"
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/examples/README.md:
--------------------------------------------------------------------------------
1 | # Examples
2 |
3 | Here you find some examples related to AgileTs.
4 | We have tried to make them as simple as possible so that you get the most out of them.
5 | Feel free to clone and test them to get a better understanding of AgileTs. Have fun.
6 |
7 | The Examples are structured framework specific. So you can find React related examples in the `react` folder.
8 | Currently, we have examples for these frameworks:
9 |
10 | - [react](./react)
11 | - [react-native](./react-native)
12 |
13 | To find out more checkout our [documentation](https://agile-ts.org/examples).
--------------------------------------------------------------------------------
/examples/nextjs/develop/clock/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": ["next", "next/core-web-vitals"]
3 | }
4 |
--------------------------------------------------------------------------------
/examples/nextjs/develop/clock/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # next.js
12 | /.next/
13 | /out/
14 |
15 | # production
16 | /build
17 |
18 | # misc
19 | .DS_Store
20 | *.pem
21 |
22 | # debug
23 | npm-debug.log*
24 | yarn-debug.log*
25 | yarn-error.log*
26 |
27 | # local env files
28 | .env.local
29 | .env.development.local
30 | .env.test.local
31 | .env.production.local
32 |
33 | # vercel
34 | .vercel
35 |
--------------------------------------------------------------------------------
/examples/nextjs/develop/clock/components/Clock.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { useAgile } from '@agile-ts/react';
3 | import { LAST_UPDATED_TIMESTAMP, LIGHT } from '../src/core';
4 |
5 | const formatTime = (timestamp: number) => {
6 | // cut off except hh:mm:ss
7 | return new Date(timestamp).toJSON().slice(11, 19);
8 | };
9 |
10 | const Clock = () => {
11 | const [lastUpdatedTimestamp, light] = useAgile([
12 | LAST_UPDATED_TIMESTAMP,
13 | LIGHT,
14 | ]);
15 |
16 | return (
17 |
18 | {formatTime(lastUpdatedTimestamp)}
19 |
31 |
32 | );
33 | };
34 |
35 | export default Clock;
36 |
--------------------------------------------------------------------------------
/examples/nextjs/develop/clock/components/Counter.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { useAgile } from '@agile-ts/react';
3 | import {
4 | COUNTER,
5 | decrementCount,
6 | incrementCount,
7 | resetCount,
8 | } from '../src/core';
9 |
10 | const Counter = () => {
11 | const count = useAgile(COUNTER);
12 |
13 | return (
14 |
15 |
16 | Count: {count}
17 |
18 |
19 |
20 |
21 |
22 | );
23 | };
24 |
25 | export default Counter;
26 |
--------------------------------------------------------------------------------
/examples/nextjs/develop/clock/components/Nav.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Link from 'next/link';
3 |
4 | const Nav = () => {
5 | return (
6 |
24 | );
25 | };
26 |
27 | export default Nav;
28 |
--------------------------------------------------------------------------------
/examples/nextjs/develop/clock/components/Page.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import useInterval from '../src/useInterval';
3 | import Nav from './Nav';
4 | import Clock from './Clock';
5 | import Counter from './Counter';
6 | import { tick } from '../src/core';
7 |
8 | const Page = () => {
9 | // Tick the time every second
10 | useInterval(() => {
11 | tick(Date.now(), true);
12 | }, 1000);
13 |
14 | return (
15 | <>
16 |
17 |
18 |
19 | >
20 | );
21 | };
22 |
23 | export default Page;
24 |
--------------------------------------------------------------------------------
/examples/nextjs/develop/clock/next-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 | ///
4 |
--------------------------------------------------------------------------------
/examples/nextjs/develop/clock/next.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | reactStrictMode: true,
3 | };
4 |
--------------------------------------------------------------------------------
/examples/nextjs/develop/clock/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "clock",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build",
8 | "start": "next start",
9 | "lint": "next lint",
10 | "install:dev:agile": "yalc add @agile-ts/core @agile-ts/react @agile-ts/logger @agile-ts/utils & yarn install",
11 | "install:prod:agile": "yarn add @agile-ts/core @agile-ts/react @agile-ts/logger @agile-ts/utils & yarn install"
12 | },
13 | "dependencies": {
14 | "@agile-ts/core": "file:.yalc/@agile-ts/core",
15 | "@agile-ts/logger": "file:.yalc/@agile-ts/logger",
16 | "@agile-ts/react": "file:.yalc/@agile-ts/react",
17 | "@agile-ts/utils": "file:.yalc/@agile-ts/utils",
18 | "next": "11.0.1",
19 | "react": "17.0.2",
20 | "react-dom": "17.0.2"
21 | },
22 | "devDependencies": {
23 | "@types/react": "17.0.14",
24 | "eslint": "7.31.0",
25 | "eslint-config-next": "11.0.1",
26 | "typescript": "4.3.5"
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/examples/nextjs/develop/clock/pages/_app.tsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect } from 'react';
2 | import type { AppProps } from 'next/app';
3 | import { initializeCore } from '../src/core';
4 |
5 | const App: React.FC = (props) => {
6 | const { Component, pageProps } = props;
7 |
8 | useEffect(() => {
9 | initializeCore(pageProps.initialCore as any);
10 | }, []);
11 |
12 | return ;
13 | };
14 | export default App;
15 |
--------------------------------------------------------------------------------
/examples/nextjs/develop/clock/pages/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Page from '../components/Page';
3 |
4 | export default function Index() {
5 | return ;
6 | }
7 |
--------------------------------------------------------------------------------
/examples/nextjs/develop/clock/pages/ssg.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Page from '../components/Page';
3 | import { COUNTER, LAST_UPDATED_TIMESTAMP, LIGHT } from '../src/core';
4 |
5 | // SSG = Static Site Generation
6 | export default function SSG() {
7 | return ;
8 | }
9 |
10 | // If you build and start the app, the date returned here will have the same
11 | // value for all requests, as this method gets executed at build time. (see browser network tab)
12 | export function getStaticProps() {
13 | const initialCore = {
14 | light: LIGHT.value,
15 | counter: COUNTER.value,
16 | lastUpdatedTimestamp: LAST_UPDATED_TIMESTAMP.value,
17 | };
18 |
19 | console.log('getStaticProps()', initialCore);
20 |
21 | // Note that in this case we're returning the state directly, without creating
22 | // the store (core) first (like in /pages/ssr.js), this approach can be better and easier
23 | return {
24 | props: {
25 | initialCore,
26 | },
27 | };
28 | }
29 |
--------------------------------------------------------------------------------
/examples/nextjs/develop/clock/pages/ssr.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Page from '../components/Page';
3 | import { LIGHT, COUNTER, LAST_UPDATED_TIMESTAMP, tick } from '../src/core';
4 |
5 | // Server Side Rendering
6 | export default function SSR() {
7 | return ;
8 | }
9 |
10 | // The date returned here will be different for every request that hits the page,
11 | // that is because the page becomes a serverless function instead of being statically
12 | // exported when you use `getServerSideProps` or `getInitialProps`. (see browser network tab)
13 | export function getServerSideProps() {
14 | tick(Date.now(), false);
15 |
16 | const initialCore = {
17 | light: LIGHT.value,
18 | counter: COUNTER.value,
19 | lastUpdatedTimestamp: LAST_UPDATED_TIMESTAMP.value,
20 | };
21 |
22 | console.log('getServerSideProps()', initialCore);
23 |
24 | return {
25 | props: {
26 | initialCore,
27 | },
28 | };
29 | }
30 |
--------------------------------------------------------------------------------
/examples/nextjs/develop/clock/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/nextjs/develop/clock/public/favicon.ico
--------------------------------------------------------------------------------
/examples/nextjs/develop/clock/public/vercel.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/examples/nextjs/develop/clock/src/core.ts:
--------------------------------------------------------------------------------
1 | import { createState } from '@agile-ts/core';
2 |
3 | export const COUNTER = createState(0);
4 | export const LAST_UPDATED_TIMESTAMP = createState(0);
5 | export const LIGHT = createState(false);
6 |
7 | export const tick = (lastUpdatedTimestamp: number, light: boolean) => {
8 | LAST_UPDATED_TIMESTAMP.set(lastUpdatedTimestamp);
9 | LIGHT.set(light);
10 | };
11 |
12 | export const incrementCount = () => COUNTER.set((v) => v + 1);
13 | export const decrementCount = () => COUNTER.set((v) => v - 1);
14 | export const resetCount = () => COUNTER.reset();
15 |
16 | interface PreloadedStateInterface {
17 | counter: number;
18 | lastUpdatedTimestamp: number;
19 | light: boolean;
20 | }
21 |
22 | export const initializeCore = (preloadedState: PreloadedStateInterface) => {
23 | if (preloadedState != null) {
24 | COUNTER.set(preloadedState.counter);
25 | LAST_UPDATED_TIMESTAMP.set(preloadedState.lastUpdatedTimestamp);
26 | LIGHT.set(preloadedState.light);
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/examples/nextjs/develop/clock/src/useInterval.ts:
--------------------------------------------------------------------------------
1 | import { useEffect, useRef } from 'react';
2 |
3 | // https://overreacted.io/making-setinterval-declarative-with-react-hooks/
4 | const useInterval = (callback: () => void, delay: number) => {
5 | const activeCallback = useRef();
6 |
7 | useEffect(() => {
8 | activeCallback.current = callback as any;
9 | }, [callback]);
10 |
11 | useEffect(() => {
12 | // @ts-ignore
13 | const handler = (...args) => activeCallback.current(...args);
14 |
15 | if (delay !== null) {
16 | const id = setInterval(handler, delay);
17 | return () => clearInterval(id);
18 | }
19 | }, [delay]);
20 | };
21 |
22 | export default useInterval;
23 |
--------------------------------------------------------------------------------
/examples/nextjs/develop/clock/styles/globals.css:
--------------------------------------------------------------------------------
1 | html,
2 | body {
3 | padding: 0;
4 | margin: 0;
5 | font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
6 | Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
7 | }
8 |
9 | a {
10 | color: inherit;
11 | text-decoration: none;
12 | }
13 |
14 | * {
15 | box-sizing: border-box;
16 | }
17 |
--------------------------------------------------------------------------------
/examples/nextjs/develop/clock/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": ["dom", "dom.iterable", "esnext"],
5 | "allowJs": true,
6 | "skipLibCheck": true,
7 | "strict": true,
8 | "forceConsistentCasingInFileNames": true,
9 | "noEmit": true,
10 | "esModuleInterop": true,
11 | "module": "esnext",
12 | "moduleResolution": "node",
13 | "resolveJsonModule": true,
14 | "isolatedModules": true,
15 | "jsx": "preserve"
16 | },
17 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
18 | "exclude": ["node_modules"]
19 | }
20 |
--------------------------------------------------------------------------------
/examples/nextjs/develop/counter/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": ["next", "next/core-web-vitals"]
3 | }
4 |
--------------------------------------------------------------------------------
/examples/nextjs/develop/counter/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # next.js
12 | /.next/
13 | /out/
14 |
15 | # production
16 | /build
17 |
18 | # misc
19 | .DS_Store
20 | *.pem
21 |
22 | # debug
23 | npm-debug.log*
24 | yarn-debug.log*
25 | yarn-error.log*
26 |
27 | # local env files
28 | .env.local
29 | .env.development.local
30 | .env.test.local
31 | .env.production.local
32 |
33 | # vercel
34 | .vercel
35 |
--------------------------------------------------------------------------------
/examples/nextjs/develop/counter/components/Counter.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { useAgile } from '@agile-ts/react';
3 | import {
4 | COUNTER,
5 | incrementCount,
6 | decrementCount,
7 | resetCount,
8 | } from '../src/core';
9 |
10 | const Counter = () => {
11 | const count = useAgile(COUNTER);
12 |
13 | return (
14 |
15 |
16 | Count: {count}
17 |
18 |
19 |
20 |
21 |
22 | );
23 | };
24 |
25 | export default Counter;
26 |
--------------------------------------------------------------------------------
/examples/nextjs/develop/counter/next-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 | ///
4 |
--------------------------------------------------------------------------------
/examples/nextjs/develop/counter/next.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | reactStrictMode: true,
3 | };
4 |
--------------------------------------------------------------------------------
/examples/nextjs/develop/counter/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "counter",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build",
8 | "start": "next start",
9 | "lint": "next lint",
10 | "install:dev:agile": "yalc add @agile-ts/core @agile-ts/react @agile-ts/logger @agile-ts/utils & yarn install",
11 | "install:prod:agile": "yarn add @agile-ts/core @agile-ts/react @agile-ts/logger @agile-ts/utils & yarn install"
12 | },
13 | "dependencies": {
14 | "@agile-ts/core": "file:.yalc/@agile-ts/core",
15 | "@agile-ts/logger": "file:.yalc/@agile-ts/logger",
16 | "@agile-ts/react": "file:.yalc/@agile-ts/react",
17 | "@agile-ts/utils": "file:.yalc/@agile-ts/utils",
18 | "next": "11.0.1",
19 | "react": "17.0.2",
20 | "react-dom": "17.0.2"
21 | },
22 | "devDependencies": {
23 | "@types/react": "17.0.14",
24 | "eslint": "7.31.0",
25 | "eslint-config-next": "11.0.1",
26 | "typescript": "4.3.5"
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/examples/nextjs/develop/counter/pages/_app.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import type { AppProps } from 'next/app';
3 |
4 | import '../styles/globals.css';
5 |
6 | const App: React.FC = (props) => {
7 | const { Component, pageProps } = props;
8 | return ;
9 | };
10 | export default App;
11 |
--------------------------------------------------------------------------------
/examples/nextjs/develop/counter/pages/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Head from 'next/head';
3 | import Counter from '../components/Counter';
4 |
5 | const Home = () => {
6 | return (
7 |
8 |
9 |
Counter
10 |
11 |
12 |
13 |
14 | );
15 | };
16 |
17 | export default Home;
18 |
--------------------------------------------------------------------------------
/examples/nextjs/develop/counter/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/nextjs/develop/counter/public/favicon.ico
--------------------------------------------------------------------------------
/examples/nextjs/develop/counter/public/vercel.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/examples/nextjs/develop/counter/src/core.ts:
--------------------------------------------------------------------------------
1 | import { createState } from '@agile-ts/core';
2 |
3 | export const COUNTER = createState(0);
4 |
5 | export const incrementCount = () => COUNTER.set((v) => v + 1);
6 | export const decrementCount = () => COUNTER.set((v) => v - 1);
7 | export const resetCount = () => COUNTER.reset();
8 |
--------------------------------------------------------------------------------
/examples/nextjs/develop/counter/styles/globals.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/nextjs/develop/counter/styles/globals.css
--------------------------------------------------------------------------------
/examples/nextjs/develop/counter/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": ["dom", "dom.iterable", "esnext"],
5 | "allowJs": true,
6 | "skipLibCheck": true,
7 | "strict": true,
8 | "forceConsistentCasingInFileNames": true,
9 | "noEmit": true,
10 | "esModuleInterop": true,
11 | "module": "esnext",
12 | "moduleResolution": "node",
13 | "resolveJsonModule": true,
14 | "isolatedModules": true,
15 | "jsx": "preserve"
16 | },
17 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
18 | "exclude": ["node_modules"]
19 | }
20 |
--------------------------------------------------------------------------------
/examples/plainjs/develop/tree-shaking/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
3 | .yalc
4 | yalc.lock
5 |
--------------------------------------------------------------------------------
/examples/plainjs/develop/tree-shaking/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "tree-shiking-test",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "src/index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1",
8 | "build": "shx rm -rf dist && webpack",
9 | "install:dev:agile": "yalc add @agile-ts/core @agile-ts/logger & yarn install",
10 | "install:prod:agile": "yarn add @agile-ts/core @agile-ts/logger & yarn install"
11 | },
12 | "author": "",
13 | "license": "ISC",
14 | "devDependencies": {
15 | "webpack": "^5.47.0",
16 | "webpack-cli": "^4.8.0"
17 | },
18 | "dependencies": {
19 | "@agile-ts/core": "file:.yalc/@agile-ts/core",
20 | "@agile-ts/logger": "file:.yalc/@agile-ts/logger",
21 | "@agile-ts/react": "file:.yalc/@agile-ts/react"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/examples/plainjs/develop/tree-shaking/src/index.js:
--------------------------------------------------------------------------------
1 | import { createLightState } from '@agile-ts/core';
2 |
3 | const MY_STATE = createLightState('hi');
4 |
5 | console.log(MY_STATE.value);
6 |
--------------------------------------------------------------------------------
/examples/plainjs/develop/tree-shaking/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 |
3 | module.exports = {
4 | entry: './src/index.js',
5 | output: {
6 | filename: 'main.js',
7 | path: path.resolve(__dirname, 'dist'),
8 | },
9 | mode: 'development',
10 | optimization: {
11 | usedExports: true,
12 | innerGraph: true,
13 | sideEffects: true,
14 | },
15 | devtool: false,
16 | };
17 |
--------------------------------------------------------------------------------
/examples/razzle/develop/counter/.gitignore:
--------------------------------------------------------------------------------
1 | logs
2 | *.log
3 | npm-debug.log*
4 | .DS_Store
5 |
6 | coverage
7 | node_modules
8 | build
9 | .env.local
10 | .env.development.local
11 | .env.test.local
12 | .env.production.local
--------------------------------------------------------------------------------
/examples/razzle/develop/counter/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "my-razzle-app",
3 | "version": "4.0.5",
4 | "license": "MIT",
5 | "scripts": {
6 | "start": "razzle start",
7 | "build": "razzle build",
8 | "test": "razzle test --env=jsdom",
9 | "start:prod": "NODE_ENV=production node build/server.js"
10 | },
11 | "dependencies": {
12 | "@agile-ts/core": "^0.1.2",
13 | "@agile-ts/react": "^0.1.2",
14 | "axios": "^0.21.1",
15 | "express": "^4.17.1",
16 | "react": "^17.0.2",
17 | "react-dom": "^17.0.2",
18 | "react-router-dom": "^5.2.0"
19 | },
20 | "devDependencies": {
21 | "babel-preset-razzle": "4.0.5",
22 | "html-webpack-plugin": "^4.5.2",
23 | "mini-css-extract-plugin": "^0.9.0",
24 | "razzle": "^4.0.5",
25 | "razzle-dev-utils": "^4.0.5",
26 | "webpack": "^4.44.1",
27 | "webpack-dev-server": "^3.11.2"
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/examples/razzle/develop/counter/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/razzle/develop/counter/public/favicon.ico
--------------------------------------------------------------------------------
/examples/razzle/develop/counter/public/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 |
3 |
--------------------------------------------------------------------------------
/examples/razzle/develop/counter/sandbox.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "container": {
3 | "port": 3000
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/examples/razzle/develop/counter/src/App.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Counter from './components/Counter';
3 |
4 | const App = () => ;
5 |
6 | export default App;
7 |
--------------------------------------------------------------------------------
/examples/razzle/develop/counter/src/client.js:
--------------------------------------------------------------------------------
1 | import App from './App';
2 | import { BrowserRouter } from 'react-router-dom';
3 | import React from 'react';
4 | import { hydrate } from 'react-dom';
5 |
6 | hydrate(
7 |
8 |
9 | ,
10 | document.getElementById('root')
11 | );
12 |
13 | if (module.hot) {
14 | module.hot.accept();
15 | }
16 |
--------------------------------------------------------------------------------
/examples/razzle/develop/counter/src/components/Counter.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { useAgile } from '@agile-ts/react';
3 | import { COUNTER, incrementCount, decrementCount, resetCount } from '../core';
4 |
5 | const Counter = () => {
6 | const count = useAgile(COUNTER);
7 |
8 | return (
9 |
10 |
11 | Count: {count}
12 |
13 |
14 |
15 |
16 |
17 | );
18 | };
19 |
20 | export default Counter;
21 |
--------------------------------------------------------------------------------
/examples/razzle/develop/counter/src/core/index.js:
--------------------------------------------------------------------------------
1 | import { createState } from '@agile-ts/core';
2 |
3 | export const COUNTER = createState(0);
4 |
5 | export const incrementCount = () => COUNTER.set((v) => v + 1);
6 | export const decrementCount = () => COUNTER.set((v) => v - 1);
7 | export const resetCount = () => COUNTER.reset();
8 |
--------------------------------------------------------------------------------
/examples/razzle/develop/counter/src/index.js:
--------------------------------------------------------------------------------
1 | import express from 'express';
2 |
3 | let app = require('./server').default;
4 |
5 | if (module.hot) {
6 | module.hot.accept('./server', function () {
7 | console.log('🔁 HMR Reloading `./server`...');
8 | try {
9 | app = require('./server').default;
10 | } catch (error) {
11 | console.error(error);
12 | }
13 | });
14 | console.info('✅ Server-side HMR Enabled!');
15 | }
16 |
17 | const port = process.env.PORT || 3000;
18 |
19 | export default express()
20 | .use((req, res) => app.handle(req, res))
21 | .listen(port, function (err) {
22 | if (err) {
23 | console.error(err);
24 | return;
25 | }
26 | console.log(`> Started on port ${port}`);
27 | });
28 |
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/.buckconfig:
--------------------------------------------------------------------------------
1 |
2 | [android]
3 | target = Google Inc.:Google APIs:23
4 |
5 | [maven_repositories]
6 | central = https://repo1.maven.org/maven2
7 |
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: '@react-native-community',
4 | parser: '@typescript-eslint/parser',
5 | plugins: ['@typescript-eslint'],
6 | };
7 |
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/.gitattributes:
--------------------------------------------------------------------------------
1 | *.pbxproj -text
2 |
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/.gitignore:
--------------------------------------------------------------------------------
1 | # OSX
2 | #
3 | .DS_Store
4 |
5 | # Xcode
6 | #
7 | build/
8 | *.pbxuser
9 | !default.pbxuser
10 | *.mode1v3
11 | !default.mode1v3
12 | *.mode2v3
13 | !default.mode2v3
14 | *.perspectivev3
15 | !default.perspectivev3
16 | xcuserdata
17 | *.xccheckout
18 | *.moved-aside
19 | DerivedData
20 | *.hmap
21 | *.ipa
22 | *.xcuserstate
23 |
24 | # Android/IntelliJ
25 | #
26 | build/
27 | .idea
28 | .gradle
29 | local.properties
30 | *.iml
31 |
32 | # Visual Studio Code
33 | #
34 | .vscode/
35 |
36 | # node.js
37 | #
38 | node_modules/
39 | npm-debug.log
40 | yarn-error.log
41 |
42 | # BUCK
43 | buck-out/
44 | \.buckd/
45 | *.keystore
46 | !debug.keystore
47 |
48 | # fastlane
49 | #
50 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
51 | # screenshots whenever they are needed.
52 | # For more information about the recommended setup visit:
53 | # https://docs.fastlane.tools/best-practices/source-control/
54 |
55 | */fastlane/report.xml
56 | */fastlane/Preview.html
57 | */fastlane/screenshots
58 |
59 | # Bundle artifact
60 | *.jsbundle
61 |
62 | # CocoaPods
63 | /ios/Pods/
64 |
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/.watchmanconfig:
--------------------------------------------------------------------------------
1 | {}
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/App.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { SafeAreaView, Text, StatusBar, Button } from 'react-native';
3 | import { useAgile } from '@agile-ts/react';
4 | import { MY_EVENT, MY_STATE } from './core';
5 |
6 | const App = () => {
7 | const myState = useAgile(MY_STATE);
8 |
9 | return (
10 | <>
11 |
12 |
13 | {myState}
14 |
27 | >
28 | );
29 | };
30 |
31 | export default App;
32 |
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/android/app/build_defs.bzl:
--------------------------------------------------------------------------------
1 | """Helper definitions to glob .aar and .jar targets"""
2 |
3 | def create_aar_targets(aarfiles):
4 | for aarfile in aarfiles:
5 | name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")]
6 | lib_deps.append(":" + name)
7 | android_prebuilt_aar(
8 | name = name,
9 | aar = aarfile,
10 | )
11 |
12 | def create_jar_targets(jarfiles):
13 | for jarfile in jarfiles:
14 | name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")]
15 | lib_deps.append(":" + name)
16 | prebuilt_jar(
17 | name = name,
18 | binary_jar = jarfile,
19 | )
20 |
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/android/app/debug.keystore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react-native/develop/AwesomeTSProject/android/app/debug.keystore
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/android/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/android/app/src/main/java/com/awesometsproject/MainActivity.java:
--------------------------------------------------------------------------------
1 | package com.awesometsproject;
2 |
3 | import com.facebook.react.ReactActivity;
4 |
5 | public class MainActivity extends ReactActivity {
6 |
7 | /**
8 | * Returns the name of the main component registered from JavaScript. This is used to schedule
9 | * rendering of the component.
10 | */
11 | @Override
12 | protected String getMainComponentName() {
13 | return "AwesomeTSProject";
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react-native/develop/AwesomeTSProject/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react-native/develop/AwesomeTSProject/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react-native/develop/AwesomeTSProject/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react-native/develop/AwesomeTSProject/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react-native/develop/AwesomeTSProject/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react-native/develop/AwesomeTSProject/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react-native/develop/AwesomeTSProject/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react-native/develop/AwesomeTSProject/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react-native/develop/AwesomeTSProject/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react-native/develop/AwesomeTSProject/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/android/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | AwesomeTSProject
3 |
4 |
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/android/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react-native/develop/AwesomeTSProject/android/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.2-all.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/android/settings.gradle:
--------------------------------------------------------------------------------
1 | rootProject.name = 'AwesomeTSProject'
2 | apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
3 | include ':app'
4 |
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/app.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "AwesomeTSProject",
3 | "displayName": "AwesomeTSProject"
4 | }
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ['module:metro-react-native-babel-preset'],
3 | };
4 |
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/index.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @format
3 | */
4 |
5 | import { AppRegistry } from 'react-native';
6 | import App from './App';
7 | import { name as appName } from './app.json';
8 |
9 | AppRegistry.registerComponent(appName, () => App);
10 |
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/ios/AwesomeTSProject-tvOSTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/ios/AwesomeTSProject.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/ios/AwesomeTSProject.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/ios/AwesomeTSProject/AppDelegate.h:
--------------------------------------------------------------------------------
1 | #import
2 | #import
3 |
4 | @interface AppDelegate : UIResponder
5 |
6 | @property (nonatomic, strong) UIWindow *window;
7 |
8 | @end
9 |
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/ios/AwesomeTSProject/Images.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "29x29",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "29x29",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "40x40",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "40x40",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "60x60",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "60x60",
31 | "scale" : "3x"
32 | }
33 | ],
34 | "info" : {
35 | "version" : 1,
36 | "author" : "xcode"
37 | }
38 | }
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/ios/AwesomeTSProject/Images.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/ios/AwesomeTSProject/main.m:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | #import "AppDelegate.h"
4 |
5 | int main(int argc, char * argv[]) {
6 | @autoreleasepool {
7 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/ios/AwesomeTSProjectTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/ios/Podfile:
--------------------------------------------------------------------------------
1 | require_relative '../node_modules/react-native/scripts/react_native_pods'
2 | require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
3 |
4 | platform :ios, '10.0'
5 |
6 | target 'AwesomeTSProject' do
7 | config = use_native_modules!
8 |
9 | use_react_native!(:path => config["reactNativePath"])
10 |
11 | target 'AwesomeTSProjectTests' do
12 | inherit! :complete
13 | # Pods for testing
14 | end
15 |
16 | # Enables Flipper.
17 | #
18 | # Note that if you have use_frameworks! enabled, Flipper will not work and
19 | # you should disable these next few lines.
20 | use_flipper!
21 | post_install do |installer|
22 | flipper_post_install(installer)
23 | end
24 | end
25 |
26 | target 'AwesomeTSProject-tvOS' do
27 | # Pods for AwesomeTSProject-tvOS
28 |
29 | target 'AwesomeTSProject-tvOSTests' do
30 | inherit! :search_paths
31 | # Pods for testing
32 | end
33 | end
34 |
--------------------------------------------------------------------------------
/examples/react-native/develop/AwesomeTSProject/metro.config.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Metro configuration for React Native
3 | * https://github.com/facebook/react-native
4 | *
5 | * @format
6 | */
7 |
8 | module.exports = {
9 | transformer: {
10 | getTransformOptions: async () => ({
11 | transform: {
12 | experimentalImportSupport: false,
13 | inlineRequires: false,
14 | },
15 | }),
16 | },
17 | };
18 |
--------------------------------------------------------------------------------
/examples/react/develop/class-component-ts/.env:
--------------------------------------------------------------------------------
1 | SKIP_PREFLIGHT_CHECK=true
2 | BROWSER=chrome
--------------------------------------------------------------------------------
/examples/react/develop/class-component-ts/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/examples/react/develop/class-component-ts/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react/develop/class-component-ts/public/favicon.ico
--------------------------------------------------------------------------------
/examples/react/develop/class-component-ts/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react/develop/class-component-ts/public/logo192.png
--------------------------------------------------------------------------------
/examples/react/develop/class-component-ts/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react/develop/class-component-ts/public/logo512.png
--------------------------------------------------------------------------------
/examples/react/develop/class-component-ts/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/examples/react/develop/class-component-ts/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/examples/react/develop/class-component-ts/src/App.css:
--------------------------------------------------------------------------------
1 | .App {
2 | text-align: center;
3 | }
4 |
5 | .App-header {
6 | background-color: #282c34;
7 | display: flex;
8 | flex-direction: column;
9 | align-items: center;
10 | justify-content: center;
11 | font-size: 20px;
12 | color: white;
13 | }
14 |
15 | .Container {
16 | display: flex;
17 | flex-direction: row;
18 | align-items: center;
19 | }
20 |
21 | .Title {
22 | margin-right: 10px;
23 | }
24 |
--------------------------------------------------------------------------------
/examples/react/develop/class-component-ts/src/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
5 | sans-serif;
6 | -webkit-font-smoothing: antialiased;
7 | -moz-osx-font-smoothing: grayscale;
8 | }
9 |
10 | code {
11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
12 | monospace;
13 | }
14 |
--------------------------------------------------------------------------------
/examples/react/develop/class-component-ts/src/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import './index.css';
4 | import App from './App';
5 |
6 | ReactDOM.render(
7 |
8 |
9 | ,
10 | document.getElementById('root')
11 | );
12 |
--------------------------------------------------------------------------------
/examples/react/develop/class-component-ts/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/examples/react/develop/class-component-ts/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": [
5 | "dom",
6 | "dom.iterable",
7 | "esnext"
8 | ],
9 | "allowJs": true,
10 | "skipLibCheck": true,
11 | "esModuleInterop": true,
12 | "allowSyntheticDefaultImports": true,
13 | "strict": true,
14 | "forceConsistentCasingInFileNames": true,
15 | "module": "esnext",
16 | "moduleResolution": "node",
17 | "resolveJsonModule": true,
18 | "isolatedModules": true,
19 | "noEmit": true,
20 | "jsx": "react"
21 | },
22 | "include": [
23 | "src"
24 | ]
25 | }
26 |
--------------------------------------------------------------------------------
/examples/react/develop/fields/.env:
--------------------------------------------------------------------------------
1 | SKIP_PREFLIGHT_CHECK=true
2 |
--------------------------------------------------------------------------------
/examples/react/develop/fields/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/examples/react/develop/fields/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "fields",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "@agile-ts/core": "file:.yalc/@agile-ts/core",
7 | "@agile-ts/react": "file:.yalc/@agile-ts/react",
8 | "react": "^17.0.2",
9 | "react-dom": "^17.0.2",
10 | "react-scripts": "4.0.3"
11 | },
12 | "scripts": {
13 | "start": "react-scripts start",
14 | "build": "react-scripts build",
15 | "test": "react-scripts test",
16 | "eject": "react-scripts eject",
17 | "install:dev:agile": "yalc add @agile-ts/core @agile-ts/react & yarn install",
18 | "install:prod:agile": "yarn add @agile-ts/core @agile-ts/react & yarn install"
19 | },
20 | "eslintConfig": {
21 | "extends": [
22 | "react-app",
23 | "react-app/jest"
24 | ]
25 | },
26 | "browserslist": {
27 | "production": [
28 | ">0.2%",
29 | "not dead",
30 | "not op_mini all"
31 | ],
32 | "development": [
33 | "last 1 chrome version",
34 | "last 1 firefox version",
35 | "last 1 safari version"
36 | ]
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/examples/react/develop/fields/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react/develop/fields/public/favicon.ico
--------------------------------------------------------------------------------
/examples/react/develop/fields/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react/develop/fields/public/logo192.png
--------------------------------------------------------------------------------
/examples/react/develop/fields/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react/develop/fields/public/logo512.png
--------------------------------------------------------------------------------
/examples/react/develop/fields/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/examples/react/develop/fields/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/examples/react/develop/fields/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import App from './App';
4 |
5 | ReactDOM.render(
6 |
7 |
8 | ,
9 | document.getElementById('root')
10 | );
11 |
--------------------------------------------------------------------------------
/examples/react/develop/functional-component-ts/.env:
--------------------------------------------------------------------------------
1 | SKIP_PREFLIGHT_CHECK=true
2 |
--------------------------------------------------------------------------------
/examples/react/develop/functional-component-ts/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/examples/react/develop/functional-component-ts/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react/develop/functional-component-ts/public/favicon.ico
--------------------------------------------------------------------------------
/examples/react/develop/functional-component-ts/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react/develop/functional-component-ts/public/logo192.png
--------------------------------------------------------------------------------
/examples/react/develop/functional-component-ts/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react/develop/functional-component-ts/public/logo512.png
--------------------------------------------------------------------------------
/examples/react/develop/functional-component-ts/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/examples/react/develop/functional-component-ts/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/examples/react/develop/functional-component-ts/src/App.css:
--------------------------------------------------------------------------------
1 | .App {
2 | text-align: center;
3 | }
4 |
5 | .App-header {
6 | background-color: #282c34;
7 | display: flex;
8 | flex-direction: column;
9 | align-items: center;
10 | justify-content: center;
11 | font-size: 20px;
12 | color: white;
13 | }
14 |
15 | .Container {
16 | display: flex;
17 | flex-direction: row;
18 | align-items: center;
19 | }
20 |
21 | .Title {
22 | margin-right: 10px;
23 | }
24 |
--------------------------------------------------------------------------------
/examples/react/develop/functional-component-ts/src/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
5 | sans-serif;
6 | -webkit-font-smoothing: antialiased;
7 | -moz-osx-font-smoothing: grayscale;
8 | }
9 |
10 | code {
11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
12 | monospace;
13 | }
14 |
--------------------------------------------------------------------------------
/examples/react/develop/functional-component-ts/src/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import './index.css';
4 | import App from './App';
5 |
6 | ReactDOM.render(
7 |
8 |
9 | ,
10 | document.getElementById('root')
11 | );
12 |
--------------------------------------------------------------------------------
/examples/react/develop/functional-component-ts/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/examples/react/develop/functional-component-ts/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": [
5 | "dom",
6 | "dom.iterable",
7 | "esnext"
8 | ],
9 | "allowJs": true,
10 | "skipLibCheck": true,
11 | "esModuleInterop": true,
12 | "allowSyntheticDefaultImports": true,
13 | "strict": true,
14 | "forceConsistentCasingInFileNames": true,
15 | "module": "esnext",
16 | "moduleResolution": "node",
17 | "resolveJsonModule": true,
18 | "isolatedModules": true,
19 | "noEmit": true,
20 | "jsx": "react"
21 | },
22 | "include": [
23 | "src"
24 | ]
25 | }
26 |
--------------------------------------------------------------------------------
/examples/react/develop/multieditor-ts/.env:
--------------------------------------------------------------------------------
1 | SKIP_PREFLIGHT_CHECK=true
2 |
--------------------------------------------------------------------------------
/examples/react/develop/multieditor-ts/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/examples/react/develop/multieditor-ts/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react/develop/multieditor-ts/public/favicon.ico
--------------------------------------------------------------------------------
/examples/react/develop/multieditor-ts/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react/develop/multieditor-ts/public/logo192.png
--------------------------------------------------------------------------------
/examples/react/develop/multieditor-ts/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react/develop/multieditor-ts/public/logo512.png
--------------------------------------------------------------------------------
/examples/react/develop/multieditor-ts/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/examples/react/develop/multieditor-ts/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/examples/react/develop/multieditor-ts/src/components/ErrorMessage.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export interface Props {
4 | error?: string;
5 | }
6 |
7 | const ErrorMessage: React.FC = (props) => {
8 | if (props.error) return {props.error}
;
9 | return null;
10 | };
11 |
12 | export default ErrorMessage;
13 |
--------------------------------------------------------------------------------
/examples/react/develop/multieditor-ts/src/core/utils.ts:
--------------------------------------------------------------------------------
1 | export const generateColor = (): string => {
2 | return '#' + ((Math.random() * 0xffffff) << 0).toString(16).padStart(6, '0');
3 | };
4 |
5 | export const generateId = () => {
6 | const dateIntString = new Date(new Date().toString()).getTime().toString();
7 | const randomIntString = Math.floor(
8 | Math.random() * Math.floor(10000000)
9 | ).toString();
10 |
11 | return dateIntString + randomIntString;
12 | };
13 |
14 | export const isLight = (color: string): boolean => {
15 | const hex = color.replace('#', '');
16 | const c_r = parseInt(hex.substr(0, 2), 16);
17 | const c_g = parseInt(hex.substr(2, 2), 16);
18 | const c_b = parseInt(hex.substr(4, 2), 16);
19 | const brightness = (c_r * 299 + c_g * 587 + c_b * 114) / 1000;
20 | return brightness > 155;
21 | };
22 |
--------------------------------------------------------------------------------
/examples/react/develop/multieditor-ts/src/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
5 | sans-serif;
6 | -webkit-font-smoothing: antialiased;
7 | -moz-osx-font-smoothing: grayscale;
8 | }
9 |
10 | code {
11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
12 | monospace;
13 | }
14 |
--------------------------------------------------------------------------------
/examples/react/develop/multieditor-ts/src/index.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import ReactDOM from "react-dom";
3 | import "./index.css";
4 | import App from "./App";
5 |
6 | ReactDOM.render(
7 |
8 |
9 | ,
10 | document.getElementById("root")
11 | );
12 |
--------------------------------------------------------------------------------
/examples/react/develop/multieditor-ts/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/examples/react/develop/multieditor-ts/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": [
5 | "dom",
6 | "dom.iterable",
7 | "esnext"
8 | ],
9 | "allowJs": true,
10 | "skipLibCheck": true,
11 | "esModuleInterop": true,
12 | "allowSyntheticDefaultImports": true,
13 | "strict": true,
14 | "forceConsistentCasingInFileNames": true,
15 | "noFallthroughCasesInSwitch": true,
16 | "module": "esnext",
17 | "moduleResolution": "node",
18 | "resolveJsonModule": true,
19 | "isolatedModules": true,
20 | "noEmit": true,
21 | "jsx": "react"
22 | },
23 | "include": [
24 | "src"
25 | ]
26 | }
27 |
--------------------------------------------------------------------------------
/examples/react/develop/simple-counter/.env:
--------------------------------------------------------------------------------
1 | SKIP_PREFLIGHT_CHECK=true
2 |
--------------------------------------------------------------------------------
/examples/react/develop/simple-counter/.gitignore:
--------------------------------------------------------------------------------
1 | build
2 | node_modules
3 |
--------------------------------------------------------------------------------
/examples/react/develop/simple-counter/README.md:
--------------------------------------------------------------------------------
1 | ## Simple Counter
2 |
3 | This app was created to compare different bundle sizes of projects using a third party State-Manager.
4 | https://twitter.com/dai_shi/status/1396976791940595713?s=20
5 |
6 | - context: https://codesandbox.io/s/react-context-counters-eky4f
7 | - jotai: https://codesandbox.io/s/jotai-counters-zn16r
8 | - valtio: https://codesandbox.io/s/valtio-counters-y3632
9 | - zustand: https://codesandbox.io/s/zustand-counters-9k48i
10 |
--------------------------------------------------------------------------------
/examples/react/develop/simple-counter/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react/develop/simple-counter/public/favicon.ico
--------------------------------------------------------------------------------
/examples/react/develop/simple-counter/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/examples/react/develop/simple-counter/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/examples/react/develop/simple-counter/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 |
4 | import * as Agile from './state-manager/Agile';
5 | import * as Jotai from './state-manager/Jotai';
6 | import * as NanoStores from './state-manager/NanoStores';
7 | import * as Recoil from './state-manager/Recoil';
8 | import * as ReduxToolkit from './state-manager/ReduxToolkit';
9 | import * as Hookstate from './state-manager/Hookstate';
10 |
11 | ReactDOM.render(
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | ,
20 | document.getElementById('root')
21 | );
22 |
--------------------------------------------------------------------------------
/examples/react/develop/simple-counter/src/state-manager/Jotai.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { atom, useAtom } from 'jotai';
3 |
4 | const COUNTER_A = atom(1);
5 | const COUNTER_B = atom(2);
6 | const COUNTER_C = atom(3);
7 |
8 | const CounterA = () => {
9 | const [count, setCount] = useAtom(COUNTER_A);
10 | return (
11 |
12 | A: {count} setCount((c) => c + 1)}>+1
13 |
14 | );
15 | };
16 |
17 | const CounterB = () => {
18 | const [count, setCount] = useAtom(COUNTER_B);
19 | return (
20 |
21 | B: {count} setCount((c) => c + 1)}>+1
22 |
23 | );
24 | };
25 |
26 | const CounterC = () => {
27 | const [count, setCount] = useAtom(COUNTER_C);
28 | return (
29 |
30 | C: {count} setCount((c) => c + 1)}>+1
31 |
32 | );
33 | };
34 |
35 | export const App = () => (
36 |
37 |
Jotai
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 | );
46 |
--------------------------------------------------------------------------------
/examples/react/develop/simple-todo-list/.env:
--------------------------------------------------------------------------------
1 | SKIP_PREFLIGHT_CHECK=true
2 |
--------------------------------------------------------------------------------
/examples/react/develop/simple-todo-list/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/examples/react/develop/simple-todo-list/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react/develop/simple-todo-list/public/favicon.ico
--------------------------------------------------------------------------------
/examples/react/develop/simple-todo-list/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react/develop/simple-todo-list/public/logo192.png
--------------------------------------------------------------------------------
/examples/react/develop/simple-todo-list/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react/develop/simple-todo-list/public/logo512.png
--------------------------------------------------------------------------------
/examples/react/develop/simple-todo-list/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/examples/react/develop/simple-todo-list/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/examples/react/develop/simple-todo-list/src/core.js:
--------------------------------------------------------------------------------
1 | import { createCollection, globalBind } from '@agile-ts/core';
2 | import { assignSharedLogger, createLogger, Logger } from '@agile-ts/logger';
3 |
4 | assignSharedLogger(createLogger({ level: Logger.level.DEBUG }));
5 |
6 | // Create Collection
7 | export const TODOS = createCollection({
8 | initialData: [{ id: 1, name: 'Clean Bathroom' }],
9 | }).persist('todos'); // persist does store the Collection in the Local Storage
10 |
11 | globalBind('__core__', { TODOS });
12 |
--------------------------------------------------------------------------------
/examples/react/develop/simple-todo-list/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import App from './App';
4 |
5 | ReactDOM.render(
6 |
7 |
8 | ,
9 | document.getElementById('root')
10 | );
11 |
--------------------------------------------------------------------------------
/examples/react/develop/spacex-graphql/.env:
--------------------------------------------------------------------------------
1 | SKIP_PREFLIGHT_CHECK=true
2 |
--------------------------------------------------------------------------------
/examples/react/develop/spacex-graphql/.eslintrc.js:
--------------------------------------------------------------------------------
1 | const OFF = 0;
2 | const WARNING = 1;
3 | const ERROR = 2;
4 |
5 | module.exports = {
6 | extends: ['airbnb-typescript', 'prettier'],
7 | plugins: ['@typescript-eslint', 'prettier'],
8 | parser: '@typescript-eslint/parser',
9 | parserOptions: {
10 | project: ['./tsconfig.json'],
11 | },
12 | ignorePatterns: ['.eslintrc.js'], // https://stackoverflow.com/questions/63002127/parsing-error-parseroptions-project-has-been-set-for-typescript-eslint-parser
13 | rules: {
14 | 'react/prop-types': OFF,
15 | 'import/prefer-default-export': OFF,
16 | },
17 | };
18 |
--------------------------------------------------------------------------------
/examples/react/develop/spacex-graphql/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 | .idea
21 |
22 | npm-debug.log*
23 | yarn-debug.log*
24 | yarn-error.log*
25 |
--------------------------------------------------------------------------------
/examples/react/develop/spacex-graphql/.prettierignore:
--------------------------------------------------------------------------------
1 | build/
2 | node_modules/
3 | package-lock.json
4 | yarn.lock
5 | package.json
6 |
--------------------------------------------------------------------------------
/examples/react/develop/spacex-graphql/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "printWidth": 80,
3 | "tabWidth": 2,
4 | "useTabs": false,
5 | "semi": true,
6 | "singleQuote": true,
7 | "trailingComma": "all"
8 | }
9 |
--------------------------------------------------------------------------------
/examples/react/develop/spacex-graphql/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react/develop/spacex-graphql/public/favicon.ico
--------------------------------------------------------------------------------
/examples/react/develop/spacex-graphql/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react/develop/spacex-graphql/public/logo192.png
--------------------------------------------------------------------------------
/examples/react/develop/spacex-graphql/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react/develop/spacex-graphql/public/logo512.png
--------------------------------------------------------------------------------
/examples/react/develop/spacex-graphql/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/examples/react/develop/spacex-graphql/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/examples/react/develop/spacex-graphql/src/core/apolloTest.ts:
--------------------------------------------------------------------------------
1 | import { gql, ApolloClient, InMemoryCache } from '@apollo/client';
2 | import { endpoint } from './index';
3 |
4 | const client = new ApolloClient({
5 | uri: endpoint,
6 | cache: new InMemoryCache(),
7 | connectToDevTools: true,
8 | });
9 |
10 | const query = gql`
11 | query GetLaunches {
12 | launchesPast(limit: 10) {
13 | id
14 | mission_name
15 | rocket {
16 | rocket_name
17 | rocket {
18 | id
19 | height {
20 | feet
21 | }
22 | }
23 | }
24 | }
25 | }
26 | `;
27 |
28 | const query2 = gql`
29 | query GetLaunches {
30 | launches(limit: 5) {
31 | id
32 | launch_year
33 | mission_id
34 | }
35 | }
36 | `;
37 |
38 | export const fetchLaunchesWithApollo = async () => {
39 | const response = await client.query({
40 | // @ts-ignore
41 | query,
42 | });
43 |
44 | const response2 = await client.query({
45 | // @ts-ignore
46 | query: query2,
47 | });
48 |
49 | console.log('Apollo', client, response.data, response2.data);
50 | };
51 |
--------------------------------------------------------------------------------
/examples/react/develop/spacex-graphql/src/core/index.ts:
--------------------------------------------------------------------------------
1 | import { gql, GraphQLClient } from 'graphql-request';
2 |
3 | // SpaceX API
4 | export const endpoint = 'https://api.spacex.land/graphql/';
5 |
6 | // TODO basic caching based on the requested parameters and endpoint
7 | // because the reference caching as apollo does is to complex (for now)
8 | // https://logaretm.com/blog/2020-02-24-caching-graphql-requests/
9 |
10 | const graphQLClient = new GraphQLClient(endpoint);
11 |
12 | const query = gql`
13 | query GetLaunches {
14 | launchesPast(limit: 10) {
15 | id
16 | mission_name
17 | launch_date_local
18 | launch_site {
19 | site_name_long
20 | }
21 | links {
22 | article_link
23 | video_link
24 | }
25 | rocket {
26 | rocket_name
27 | }
28 | }
29 | }
30 | `;
31 |
32 | export const fetchLaunches = async () => {
33 | const data = await graphQLClient.request(query);
34 | console.log('Custom', data);
35 | };
36 |
--------------------------------------------------------------------------------
/examples/react/develop/spacex-graphql/src/global.css:
--------------------------------------------------------------------------------
1 | html,
2 | body {
3 | padding: 0;
4 | margin: 0;
5 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
6 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
7 | sans-serif;
8 | -webkit-font-smoothing: antialiased;
9 | -moz-osx-font-smoothing: grayscale;
10 | }
11 |
12 | * {
13 | box-sizing: border-box;
14 | }
15 |
--------------------------------------------------------------------------------
/examples/react/develop/spacex-graphql/src/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import Home from './pages/Home';
4 |
5 | import './global.css';
6 |
7 | ReactDOM.render(
8 |
9 |
10 | ,
11 | document.getElementById('root'),
12 | );
13 |
--------------------------------------------------------------------------------
/examples/react/develop/spacex-graphql/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/examples/react/develop/spacex-graphql/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": [
5 | "dom",
6 | "dom.iterable",
7 | "esnext"
8 | ],
9 | "allowJs": true,
10 | "skipLibCheck": true,
11 | "esModuleInterop": true,
12 | "allowSyntheticDefaultImports": true,
13 | "strict": true,
14 | "forceConsistentCasingInFileNames": true,
15 | "noFallthroughCasesInSwitch": true,
16 | "module": "esnext",
17 | "moduleResolution": "node",
18 | "resolveJsonModule": true,
19 | "isolatedModules": true,
20 | "noEmit": true,
21 | "jsx": "react-jsx"
22 | },
23 | "include": [
24 | "src"
25 | ]
26 | }
27 |
--------------------------------------------------------------------------------
/examples/react/develop/tree-shaking/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "tree-shaking",
3 | "version": "1.0.0",
4 | "main": "src/index.js",
5 | "license": "MIT",
6 | "scripts": {
7 | "build": "npx webpack --config webpack.config.js",
8 | "install:dev:agile": "yalc add @agile-ts/core @agile-ts/react @agile-ts/logger & yarn install",
9 | "install:prod:agile": "yarn add @agile-ts/core @agile-ts/react @agile-ts/logger & yarn install"
10 | },
11 | "devDependencies": {
12 | "babel-core": "^6.26.3",
13 | "babel-loader": "^8.2.2",
14 | "babel-preset-env": "^1.7.0",
15 | "babel-preset-react": "^6.24.1",
16 | "webpack": "^5.51.1",
17 | "webpack-cli": "^4.8.0"
18 | },
19 | "dependencies": {
20 | "@agile-ts/core": "file:.yalc/@agile-ts/core",
21 | "@agile-ts/logger": "file:.yalc/@agile-ts/logger",
22 | "@agile-ts/react": "file:.yalc/@agile-ts/react",
23 | "react": "^17.0.2"
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/examples/react/develop/tree-shaking/src/App.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | export const FooComponent = ({ name }) => (
4 | Hello from FooComponent, {name ?? 'unknown'}!
5 | );
6 |
7 | export const BarComponent = ({ name }) => (
8 | Hello from BarComponent, {name ?? 'unknown'}!
9 | );
10 |
--------------------------------------------------------------------------------
/examples/react/develop/tree-shaking/src/core.js:
--------------------------------------------------------------------------------
1 | import { createLightState } from '@agile-ts/core';
2 |
3 | export const MY_STATE = createLightState('jeff');
4 |
--------------------------------------------------------------------------------
/examples/react/develop/tree-shaking/src/index.js:
--------------------------------------------------------------------------------
1 | import { BarComponent } from './App';
2 | import { MY_STATE } from './core';
3 |
4 | MY_STATE.set('jeff');
5 |
6 | // we could do something with BarComponent here,
7 | // like ReactDOM.render, but let's just dump it to
8 | // console for simplicity
9 | console.log(BarComponent);
10 |
--------------------------------------------------------------------------------
/examples/react/develop/tree-shaking/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 |
3 | module.exports = {
4 | mode: 'development',
5 | entry: './src/index.js',
6 | output: {
7 | path: path.resolve(__dirname, 'dist'),
8 | filename: 'app.js',
9 | },
10 | resolve: { extensions: ['.js', '.jsx'] },
11 | module: {
12 | rules: [
13 | {
14 | test: /\.jsx?$/,
15 | exclude: /node_modules/,
16 | use: {
17 | loader: 'babel-loader',
18 | options: {
19 | presets: [['@babel/env', { modules: false }], '@babel/react'],
20 | },
21 | },
22 | },
23 | ],
24 | },
25 | optimization: {
26 | usedExports: true,
27 | innerGraph: true,
28 | sideEffects: true,
29 | },
30 | devtool: false,
31 | };
32 |
--------------------------------------------------------------------------------
/examples/react/release/boxes/.env:
--------------------------------------------------------------------------------
1 | SKIP_PREFLIGHT_CHECK=true
2 |
--------------------------------------------------------------------------------
/examples/react/release/boxes/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 | .idea
21 |
22 | npm-debug.log*
23 | yarn-debug.log*
24 | yarn-error.log*
25 |
--------------------------------------------------------------------------------
/examples/react/release/boxes/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react/release/boxes/public/favicon.ico
--------------------------------------------------------------------------------
/examples/react/release/boxes/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react/release/boxes/public/logo192.png
--------------------------------------------------------------------------------
/examples/react/release/boxes/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react/release/boxes/public/logo512.png
--------------------------------------------------------------------------------
/examples/react/release/boxes/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/examples/react/release/boxes/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/examples/react/release/boxes/src/App.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
3 |
4 | import Canvas from './screens/Canvas';
5 |
6 | function App() {
7 | return (
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | );
16 | }
17 |
18 | export default App;
19 |
--------------------------------------------------------------------------------
/examples/react/release/boxes/src/api.ts:
--------------------------------------------------------------------------------
1 | import queryString, { ParsedUrlQueryInput } from 'querystring';
2 |
3 | type RequestOptions = {
4 | queryParams?: ParsedUrlQueryInput;
5 | method?: 'GET' | 'POST';
6 | body?: object | string;
7 | };
8 |
9 | export const apiUrl = (lambda: string, queryParams?: ParsedUrlQueryInput) => {
10 | let url = `https://f10adraov8.execute-api.us-east-1.amazonaws.com/dev/${lambda}`;
11 | if (queryParams) url += '?' + queryString.stringify(queryParams);
12 |
13 | return url;
14 | };
15 |
16 | export const callApi = (lambda: string, options?: RequestOptions) => {
17 | const { queryParams, body, method } = options || {};
18 | const url = apiUrl(lambda, queryParams);
19 |
20 | let bodyString = body;
21 | if (typeof bodyString === 'object') {
22 | bodyString = JSON.stringify(body);
23 | }
24 |
25 | return fetch(url, { body: bodyString, method }).then((res) => res.json());
26 | };
27 |
--------------------------------------------------------------------------------
/examples/react/release/boxes/src/components/Rectangle/components/RectangleContainer.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { ElementStyleInterface } from '../../../core/entities/ui/ui.interfaces';
3 | import styled from 'styled-components';
4 |
5 | type RectangleContainerProps = {
6 | position: ElementStyleInterface['position'];
7 | size: ElementStyleInterface['size'];
8 | onSelect: () => void;
9 | };
10 |
11 | const RectangleContainer: React.FC = (props) => {
12 | const { children, size, position, onSelect } = props;
13 |
14 | return (
15 | onSelect()}
18 | onClick={(e) => e.stopPropagation()}>
19 | {children}
20 |
21 | );
22 | };
23 |
24 | export default RectangleContainer;
25 |
26 | const Container = styled.div`
27 | position: absolute;
28 | `;
29 |
--------------------------------------------------------------------------------
/examples/react/release/boxes/src/components/Rectangle/components/RectangleLoading.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import styled from 'styled-components';
3 | import BounceSpinner from '../../BounceSpinner';
4 |
5 | export interface RectangleLoadingProps {
6 | borderRadius: string;
7 | }
8 |
9 | const RectangleLoading: React.FC = (props) => {
10 | const { borderRadius } = props;
11 |
12 | return (
13 |
14 |
15 |
16 | );
17 | };
18 |
19 | export default RectangleLoading;
20 |
21 | const Container = styled.div<{ borderRadius: string }>`
22 | display: flex;
23 | flex: 1;
24 | border: 3px dashed #101010;
25 | border-radius: ${(props) => props.borderRadius};
26 | align-items: center;
27 | justify-content: center;
28 | background: #ffffff;
29 | `;
30 |
--------------------------------------------------------------------------------
/examples/react/release/boxes/src/components/Spacer.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | export type Props = { height: number };
4 |
5 | const Spacer: React.FC = (props) => {
6 | const height = props.height ?? 100; // '??' because props.height can also be 0 and 0 is false
7 |
8 | return ;
9 | };
10 |
11 | export default Spacer;
12 |
--------------------------------------------------------------------------------
/examples/react/release/boxes/src/components/actionComponents/Drag.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { DraggableCore } from 'react-draggable';
3 | import { ElementStyleInterface } from '../../core/entities/ui/ui.interfaces';
4 |
5 | type DragProps = {
6 | position: ElementStyleInterface['position'];
7 | onDrag: (position: ElementStyleInterface['position']) => void;
8 | };
9 |
10 | const Drag: React.FC = (props) => {
11 | const { position, onDrag, children } = props;
12 |
13 | return (
14 | {
16 | onDrag({
17 | left: e.movementX + position.left,
18 | top: e.movementY + position.top,
19 | });
20 | }}>
21 | {children}
22 |
23 | );
24 | };
25 |
26 | export default Drag;
27 |
--------------------------------------------------------------------------------
/examples/react/release/boxes/src/components/actionComponents/Resize/controller.ts:
--------------------------------------------------------------------------------
1 | import { ResizeHandle as ResizeHandleType } from 'react-resizable';
2 | import { ElementStyleInterface } from '../../../core/entities/ui/ui.interfaces';
3 |
4 | export const handlePlacements: ResizeHandleType[] = [
5 | 'n',
6 | 's',
7 | 'e',
8 | 'w',
9 | 'ne',
10 | 'nw',
11 | 'se',
12 | 'sw',
13 | ];
14 |
15 | export const calculateResize = (
16 | size: ElementStyleInterface['size'],
17 | newSize: ElementStyleInterface['size'],
18 | position: ElementStyleInterface['position'],
19 | handle: string
20 | ): ElementStyleInterface => {
21 | let topDiff = 0;
22 | if (handle.includes('n')) {
23 | topDiff = size.height - newSize.height;
24 | }
25 |
26 | let leftDiff = 0;
27 | if (handle.includes('w')) {
28 | leftDiff = size.width - newSize.width;
29 | }
30 |
31 | return {
32 | size: {
33 | width: Math.round(newSize.width),
34 | height: Math.round(newSize.height),
35 | },
36 | position: {
37 | top: Math.round(position.top + topDiff),
38 | left: Math.round(position.left + leftDiff),
39 | },
40 | };
41 | };
42 |
--------------------------------------------------------------------------------
/examples/react/release/boxes/src/core/app.ts:
--------------------------------------------------------------------------------
1 | import { Agile, assignSharedAgileInstance } from '@agile-ts/core';
2 | import { assignSharedLogger, createLogger, Logger } from '@agile-ts/logger';
3 |
4 | // Configure logging behaviour
5 | assignSharedLogger(createLogger({ level: Logger.level.WARN }));
6 |
7 | // Configure Agile Instance
8 | export const App = new Agile({ key: 'boxes', bucket: true });
9 | assignSharedAgileInstance(App);
10 |
--------------------------------------------------------------------------------
/examples/react/release/boxes/src/core/entities/ui/index.ts:
--------------------------------------------------------------------------------
1 | import * as actions from './ui.actions';
2 | import * as controller from './ui.controller';
3 | import * as interfaces from './ui.interfaces';
4 |
5 | export default {
6 | ...actions,
7 | ...controller,
8 | ...interfaces,
9 | };
10 |
--------------------------------------------------------------------------------
/examples/react/release/boxes/src/core/entities/ui/ui.controller.ts:
--------------------------------------------------------------------------------
1 | import {
2 | CanvasInterface,
3 | ElementInterface,
4 | ScreenInterface,
5 | } from './ui.interfaces';
6 | import { createCollection, createState } from '@agile-ts/core';
7 |
8 | export const defaultElementStyle = {
9 | position: { top: 0, left: 0 },
10 | size: { width: 200, height: 200 },
11 | };
12 |
13 | export const CANVAS = createState({
14 | width: 5000,
15 | height: 5000,
16 | });
17 | export const SCREEN = createState({ width: 0, height: 0 });
18 |
19 | export const ELEMENTS = createCollection();
20 |
21 | export const SELECTED_ELEMENT = ELEMENTS.createSelector(
22 | 'selectedElement',
23 | null
24 | );
25 |
--------------------------------------------------------------------------------
/examples/react/release/boxes/src/core/entities/ui/ui.interfaces.ts:
--------------------------------------------------------------------------------
1 | export interface ElementStyleInterface {
2 | position: { top: number; left: number };
3 | size: { width: number; height: number };
4 | }
5 |
6 | export interface ElementImageInterface {
7 | src: string;
8 | id: number;
9 | }
10 |
11 | export interface ElementInterface {
12 | id: string;
13 | style: ElementStyleInterface;
14 | image?: ElementImageInterface;
15 | }
16 |
17 | export interface CanvasInterface {
18 | width: number;
19 | height: number;
20 | }
21 |
22 | export interface ScreenInterface {
23 | width: number;
24 | height: number;
25 | }
26 |
--------------------------------------------------------------------------------
/examples/react/release/boxes/src/core/index.ts:
--------------------------------------------------------------------------------
1 | import ui from './entities/ui';
2 | import { globalBind } from '@agile-ts/core';
3 |
4 | const core = {
5 | ui: ui,
6 | };
7 |
8 | globalBind('__core__', core);
9 |
10 | export default core;
11 |
--------------------------------------------------------------------------------
/examples/react/release/boxes/src/global.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
5 | sans-serif;
6 | -webkit-font-smoothing: antialiased;
7 | -moz-osx-font-smoothing: grayscale;
8 | }
9 |
10 | code {
11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
12 | monospace;
13 | }
14 |
--------------------------------------------------------------------------------
/examples/react/release/boxes/src/hooks/useRandomBorderRadius.ts:
--------------------------------------------------------------------------------
1 | import { useEffect, useState } from 'react';
2 |
3 | export const useRandomBorderRadius = () => {
4 | const [randomBorder, setRandomBorder] = useState('');
5 |
6 | useEffect(() => {
7 | const random = (start: number, end: number) => {
8 | return Math.floor(Math.random() * end) + start;
9 | };
10 |
11 | setRandomBorder(
12 | `${random(10, 50)}px ${random(10, 50)}px ${random(10, 50)}px ${random(
13 | 10,
14 | 50
15 | )}px/${random(10, 50)}px ${random(10, 50)}px ${random(10, 50)}px ${random(
16 | 10,
17 | 50
18 | )}px`
19 | );
20 | }, []);
21 |
22 | return randomBorder;
23 | };
24 |
--------------------------------------------------------------------------------
/examples/react/release/boxes/src/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import App from './App';
4 |
5 | import './global.css';
6 |
7 | ReactDOM.render(
8 |
9 |
10 | ,
11 | document.getElementById('root')
12 | );
13 |
--------------------------------------------------------------------------------
/examples/react/release/boxes/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/examples/react/release/boxes/src/screens/Canvas/components/CanvasContainer.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import styled from 'styled-components';
3 | import { useAgile } from '@agile-ts/react';
4 | import core from '../../../core';
5 |
6 | interface PageContainerProps {
7 | onClick: () => void;
8 | }
9 |
10 | const CanvasContainer: React.FC = (props) => {
11 | const { onClick, children } = props;
12 | const canvas = useAgile(core.ui.CANVAS);
13 |
14 | return (
15 |
16 | {children}
17 |
18 | );
19 | };
20 |
21 | export default CanvasContainer;
22 |
23 | const Container = styled.div<{ width: number; height: number }>`
24 | display: flex;
25 | flex: 1;
26 | width: ${(props) => props.width}px;
27 | height: ${(props) => props.height}px;
28 | background-color: #8a8a8e;
29 | `;
30 |
--------------------------------------------------------------------------------
/examples/react/release/boxes/src/screens/Canvas/components/EditProperties/components/Card.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import styled from 'styled-components';
3 |
4 | const Card: React.FC = ({ children }) => (
5 | e.stopPropagation()}>{children}
6 | );
7 |
8 | export default Card;
9 |
10 | const Container = styled.div`
11 | position: fixed;
12 | top: 20px;
13 | right: 20px;
14 | background: #ffffff;
15 | padding: 5px 10px 0 10px;
16 | align-items: flex-start;
17 | justify-content: flex-start;
18 | box-shadow: rgba(99, 99, 99, 0.2) 0 2px 8px 0;
19 | border-radius: 4px;
20 | z-index: 1000;
21 | `;
22 |
--------------------------------------------------------------------------------
/examples/react/release/boxes/src/screens/Canvas/components/EditProperties/components/Property/index.tsx:
--------------------------------------------------------------------------------
1 | import core from '../../../../../../core';
2 | import { useProxy } from '@agile-ts/react';
3 | import lodash from 'lodash';
4 | import React from 'react';
5 | import PropertyInput from './components/PropertyInput';
6 |
7 | interface PropertyProps {
8 | label: string;
9 | path: string;
10 | id: number | string;
11 | onChange: (newValue: number) => void;
12 | }
13 |
14 | const Property: React.FC = (props) => {
15 | const { label, path, id, onChange } = props;
16 |
17 | const ELEMENT = core.ui.ELEMENTS.getItem(id);
18 | const element = useProxy(ELEMENT, { componentId: 'Property', deps: [id] });
19 |
20 | return (
21 |
26 | );
27 | };
28 |
29 | export default Property;
30 |
--------------------------------------------------------------------------------
/examples/react/release/boxes/src/screens/Canvas/components/EditProperties/components/Section.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import styled from 'styled-components';
3 |
4 | interface SectionProps {
5 | heading: string;
6 | }
7 |
8 | const Section: React.FC = (props) => {
9 | const { heading, children } = props;
10 |
11 | return (
12 |
13 |
14 | {children}
15 |
16 | );
17 | };
18 |
19 | export default Section;
20 |
21 | const Container = styled.div`
22 | display: flex;
23 | flex-direction: column;
24 | `;
25 |
26 | const Label = styled.div`
27 | font-weight: 500;
28 | margin-bottom: 10px;
29 | `;
30 |
--------------------------------------------------------------------------------
/examples/react/release/boxes/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": [
5 | "dom",
6 | "dom.iterable",
7 | "esnext"
8 | ],
9 | "allowJs": true,
10 | "skipLibCheck": true,
11 | "esModuleInterop": true,
12 | "allowSyntheticDefaultImports": true,
13 | "strict": true,
14 | "forceConsistentCasingInFileNames": true,
15 | "noFallthroughCasesInSwitch": true,
16 | "module": "esnext",
17 | "moduleResolution": "node",
18 | "resolveJsonModule": true,
19 | "isolatedModules": true,
20 | "noEmit": true,
21 | "jsx": "react-jsx"
22 | },
23 | "include": [
24 | "src"
25 | ]
26 | }
27 |
--------------------------------------------------------------------------------
/examples/react/release/stopwatch-query-url/.env:
--------------------------------------------------------------------------------
1 | SKIP_PREFLIGHT_CHECK=true
2 |
--------------------------------------------------------------------------------
/examples/react/release/stopwatch-query-url/.eslintrc.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react/release/stopwatch-query-url/.eslintrc.js
--------------------------------------------------------------------------------
/examples/react/release/stopwatch-query-url/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 | .idea
21 |
22 | npm-debug.log*
23 | yarn-debug.log*
24 | yarn-error.log*
25 |
--------------------------------------------------------------------------------
/examples/react/release/stopwatch-query-url/.prettierignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react/release/stopwatch-query-url/.prettierignore
--------------------------------------------------------------------------------
/examples/react/release/stopwatch-query-url/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "printWidth": 80,
3 | "tabWidth": 2,
4 | "useTabs": false,
5 | "semi": true,
6 | "singleQuote": true,
7 | "trailingComma": "all"
8 | }
9 |
--------------------------------------------------------------------------------
/examples/react/release/stopwatch-query-url/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react/release/stopwatch-query-url/public/favicon.ico
--------------------------------------------------------------------------------
/examples/react/release/stopwatch-query-url/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react/release/stopwatch-query-url/public/logo192.png
--------------------------------------------------------------------------------
/examples/react/release/stopwatch-query-url/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/react/release/stopwatch-query-url/public/logo512.png
--------------------------------------------------------------------------------
/examples/react/release/stopwatch-query-url/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/examples/react/release/stopwatch-query-url/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/examples/react/release/stopwatch-query-url/src/components/Stopwatch/Stopwatch.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | display: flex;
3 | align-items: center;
4 | justify-content: center;
5 | flex-direction: column;
6 | }
7 |
8 | .displayContainer {
9 | padding: 1rem 0;
10 | }
11 |
12 | .displayContainer span{
13 | background:#6C69A0;
14 | color: #ffffff;
15 | text-align: center;
16 | font-size: 1rem;
17 | padding: 1rem;
18 | border-radius: 5px;
19 | }
20 |
--------------------------------------------------------------------------------
/examples/react/release/stopwatch-query-url/src/components/Stopwatch/components/Button/Button.module.css:
--------------------------------------------------------------------------------
1 | .button {
2 | margin: 1rem 0.5rem;
3 | padding: 0.25rem 0.5rem;
4 | font-size: 1rem;
5 | text-transform: uppercase;
6 | width: 100px;
7 | border-radius: 5px;
8 | transition: background 1s;
9 | cursor: pointer;
10 | background: transparent;
11 | }
12 |
--------------------------------------------------------------------------------
/examples/react/release/stopwatch-query-url/src/components/Stopwatch/components/Button/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import styles from './Button.module.css';
4 |
5 | type ButtonProps = {
6 | color?: string;
7 | onClick: () => void;
8 | };
9 |
10 | const Button: React.FC = (props) => {
11 | const { color, children, onClick } = props;
12 |
13 | return (
14 |
20 | {children}
21 |
22 | );
23 | };
24 |
25 | export default Button;
26 |
27 | Button.defaultProps = {
28 | color: 'blue',
29 | };
30 |
--------------------------------------------------------------------------------
/examples/react/release/stopwatch-query-url/src/global.css:
--------------------------------------------------------------------------------
1 | html,
2 | body {
3 | padding: 0;
4 | margin: 0;
5 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
6 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
7 | sans-serif;
8 | -webkit-font-smoothing: antialiased;
9 | -moz-osx-font-smoothing: grayscale;
10 | }
11 |
12 | * {
13 | box-sizing: border-box;
14 | }
15 |
--------------------------------------------------------------------------------
/examples/react/release/stopwatch-query-url/src/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import Home from './pages/Home';
4 |
5 | import './global.css';
6 |
7 | ReactDOM.render(
8 |
9 |
10 | ,
11 | document.getElementById('root'),
12 | );
13 |
--------------------------------------------------------------------------------
/examples/react/release/stopwatch-query-url/src/pages/Home/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Stopwatch from '../../components/Stopwatch';
3 |
4 | import styles from './Home.module.css';
5 |
6 | const Home: React.FC = () => (
7 |
8 |
9 |
10 | );
11 |
12 | export default Home;
13 |
--------------------------------------------------------------------------------
/examples/react/release/stopwatch-query-url/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/examples/react/release/stopwatch-query-url/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": [
5 | "dom",
6 | "dom.iterable",
7 | "esnext"
8 | ],
9 | "allowJs": true,
10 | "skipLibCheck": true,
11 | "esModuleInterop": true,
12 | "allowSyntheticDefaultImports": true,
13 | "strict": true,
14 | "forceConsistentCasingInFileNames": true,
15 | "noFallthroughCasesInSwitch": true,
16 | "module": "esnext",
17 | "moduleResolution": "node",
18 | "resolveJsonModule": true,
19 | "isolatedModules": true,
20 | "noEmit": true,
21 | "jsx": "react-jsx"
22 | },
23 | "include": [
24 | "src"
25 | ]
26 | }
27 |
--------------------------------------------------------------------------------
/examples/vue/develop/my-project/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 |
6 | # local env files
7 | .env.local
8 | .env.*.local
9 |
10 | # Log files
11 | npm-debug.log*
12 | yarn-debug.log*
13 | yarn-error.log*
14 | pnpm-debug.log*
15 |
16 | # Editor directories and files
17 | .idea
18 | .vscode
19 | *.suo
20 | *.ntvs*
21 | *.njsproj
22 | *.sln
23 | *.sw?
24 |
--------------------------------------------------------------------------------
/examples/vue/develop/my-project/README.md:
--------------------------------------------------------------------------------
1 | # my-project
2 |
3 | ## Project setup
4 | ```
5 | yarn install
6 | ```
7 |
8 | ### Compiles and hot-reloads for development
9 | ```
10 | yarn serve
11 | ```
12 |
13 | ### Compiles and minifies for production
14 | ```
15 | yarn build
16 | ```
17 |
18 | ### Lints and fixes files
19 | ```
20 | yarn lint
21 | ```
22 |
23 | ### Customize configuration
24 | See [Configuration Reference](https://cli.vuejs.org/config/).
25 |
--------------------------------------------------------------------------------
/examples/vue/develop/my-project/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ['@vue/cli-plugin-babel/preset'],
3 | };
4 |
--------------------------------------------------------------------------------
/examples/vue/develop/my-project/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/vue/develop/my-project/public/favicon.ico
--------------------------------------------------------------------------------
/examples/vue/develop/my-project/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | <%= htmlWebpackPlugin.options.title %>
9 |
10 |
11 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/examples/vue/develop/my-project/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/examples/vue/develop/my-project/src/assets/logo.png
--------------------------------------------------------------------------------
/examples/vue/develop/my-project/src/main.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import App from './App.vue';
3 |
4 | Vue.config.productionTip = false;
5 |
6 | export default new Vue({
7 | render: (h) => h(App),
8 | }).$mount('#app');
9 |
--------------------------------------------------------------------------------
/jest.base.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | testEnvironment: 'node',
3 | coveragePathIgnorePatterns: ['(tests/.*.mock).(jsx?|tsx?)$'],
4 | modulePathIgnorePatterns: ['dist', 'examples', 'node_modules'],
5 | collectCoverageFrom: ['**/*.ts', '!**/node_modules/**', '!**/dist/**'],
6 | coverageDirectory: '/coverage/',
7 | testMatch: ['/packages/**/tests/**/*.test.ts'],
8 | transform: {
9 | '^.+\\.ts?$': 'ts-jest',
10 | },
11 | // https://github.com/bpedersen/jest-mock-console#readme
12 | setupFilesAfterEnv: ['jest-mock-console/dist/setupTestFramework.js'],
13 | /* https://stackoverflow.com/questions/63904196/esmoduleinterop-flag-set-still-getting-default-import-error */
14 | globals: {
15 | 'ts-jest': {
16 | tsconfig: '/packages/tsconfig.default.json',
17 | },
18 | __DEV__: true,
19 | },
20 | };
21 |
--------------------------------------------------------------------------------
/jest.config.js:
--------------------------------------------------------------------------------
1 | const baseConfig = require('./jest.base.config.js');
2 |
3 | module.exports = {
4 | ...baseConfig,
5 | // * = only one directory between (for instance packages/react/jest.config.js)
6 | // ** = x directories between (for instance packages/core/node_modules/@agile-ts/core/jest.config.js)
7 | projects: ['/packages/*/jest.config.js'],
8 | };
9 |
--------------------------------------------------------------------------------
/lerna.json:
--------------------------------------------------------------------------------
1 | {
2 | "packages": [
3 | "packages/*"
4 | ],
5 | "npmClient": "yarn",
6 | "useWorkspaces": true,
7 | "version": "independent",
8 | "changelog": {
9 | "repo": "agile-ts/agile",
10 | "labels": {
11 | "tag: new feature": ":rocket: New Feature",
12 | "tag: breaking change": ":boom: Breaking Change",
13 | "tag: bug fix": ":bug: Bug Fix",
14 | "tag: polish": ":nail_care: Polish"
15 | },
16 | "cacheDir": ".changelog"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/packages/api/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020-present bennodev19
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/packages/api/jest.config.js:
--------------------------------------------------------------------------------
1 | const baseConfig = require('../../jest.base.config.js');
2 | const packageJson = require('./package.json');
3 | const packageName = packageJson.name.split('@agile-ts/').pop();
4 |
5 | module.exports = {
6 | ...baseConfig,
7 | rootDir: '../..',
8 | roots: [`/packages/${packageName}`],
9 | name: packageName,
10 | displayName: packageName,
11 | };
12 |
--------------------------------------------------------------------------------
/packages/api/rollup.config.js:
--------------------------------------------------------------------------------
1 | import {
2 | createCommonJSConfig,
3 | createDeclarationConfig,
4 | createESMConfig,
5 | } from '../rollup.config.default';
6 |
7 | const packageRoot = process.cwd();
8 |
9 | // https://rollupjs.org/guide/en/#warning-treating-module-as-external-dependency
10 | // Checks whether the specified path is outside of this particular package
11 | function external(path) {
12 | return (
13 | !path.startsWith('.') && // Paths that doesn't start with a '.' (e.g. './agile.ts')
14 | !path.startsWith(packageRoot) // Paths that doesn't start with the package root path (e.g. 'path/to/package/agile.ts')
15 | );
16 | }
17 |
18 | // https://rollupjs.org/guide/en/#configuration-files
19 | export default function () {
20 | return [
21 | createDeclarationConfig({ external }),
22 | createCommonJSConfig({ external }),
23 | createESMConfig({ external, multiFileOutput: true }),
24 | ];
25 | }
26 |
--------------------------------------------------------------------------------
/packages/api/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.default.json",
3 | "compilerOptions": {
4 | "target": "esnext",
5 | "outDir": "dist",
6 | "rootDir": "src"
7 | },
8 | "include": [
9 | "./src/**/*" // Only include what is in src (-> dist, tests, .. will be excluded)
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/packages/core/.gitignore:
--------------------------------------------------------------------------------
1 | # Both are copied during the build
2 | # README.md
3 | LICENSE
--------------------------------------------------------------------------------
/packages/core/jest.config.js:
--------------------------------------------------------------------------------
1 | const baseConfig = require('../../jest.base.config.js');
2 | const packageJson = require('./package.json');
3 | const packageName = packageJson.name.split('@agile-ts/').pop();
4 |
5 | module.exports = {
6 | ...baseConfig,
7 | rootDir: '../..',
8 | roots: [`/packages/${packageName}`],
9 | name: packageName,
10 | displayName: packageName,
11 | };
12 |
--------------------------------------------------------------------------------
/packages/core/rollup.config.js:
--------------------------------------------------------------------------------
1 | import {
2 | createCommonJSConfig,
3 | createDeclarationConfig,
4 | createESMConfig,
5 | } from '../rollup.config.default';
6 |
7 | const packageRoot = process.cwd();
8 |
9 | // https://rollupjs.org/guide/en/#warning-treating-module-as-external-dependency
10 | // Checks whether the specified path is outside of this particular package
11 | function external(path) {
12 | return (
13 | !path.startsWith('.') && // Paths that doesn't start with a '.' (e.g. './agile.ts')
14 | !path.startsWith(packageRoot) // Paths that doesn't start with the package root path (e.g. 'path/to/package/agile.ts')
15 | );
16 | }
17 |
18 | // https://rollupjs.org/guide/en/#configuration-files
19 | export default function () {
20 | return [
21 | createDeclarationConfig({ external }),
22 | createCommonJSConfig({ external }),
23 | createESMConfig({ external, multiFileOutput: true }),
24 | ];
25 | }
26 |
--------------------------------------------------------------------------------
/packages/core/scripts/prepublish.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs-extra');
2 |
3 | const run = () => {
4 | fs.copySync('../../README.md', './README.md');
5 | fs.copySync('../../LICENSE', './LICENSE');
6 | };
7 |
8 | run();
9 |
--------------------------------------------------------------------------------
/packages/core/src/collection/index.ts:
--------------------------------------------------------------------------------
1 | export * from './collection';
2 | export * from './collection.persistent';
3 | export * from './group';
4 | export * from './group/group.observer';
5 | export * from './item';
6 | export * from './selector';
7 |
8 | // Outsourced from here because of tree shaking issues (See: https://github.com/agile-ts/agile/issues/196)
9 | export * from './public';
10 |
--------------------------------------------------------------------------------
/packages/core/src/collection/public/index.ts:
--------------------------------------------------------------------------------
1 | export * from './createCollection';
2 |
--------------------------------------------------------------------------------
/packages/core/src/computed/index.ts:
--------------------------------------------------------------------------------
1 | export * from './computed';
2 | export * from './computed.tracker';
3 |
4 | // Outsourced from here because of tree shaking issues (See: https://github.com/agile-ts/agile/issues/196)
5 | export * from './public';
6 |
--------------------------------------------------------------------------------
/packages/core/src/computed/public/index.ts:
--------------------------------------------------------------------------------
1 | export * from './createComputed';
2 |
--------------------------------------------------------------------------------
/packages/core/src/computed/public/types.ts:
--------------------------------------------------------------------------------
1 | import { CreateAgileSubInstanceInterface } from '../../shared';
2 | import { CreateComputedConfigInterface } from '../computed';
3 |
4 | export interface CreateComputedConfigInterfaceWithAgile
5 | extends CreateAgileSubInstanceInterface,
6 | CreateComputedConfigInterface {}
7 |
--------------------------------------------------------------------------------
/packages/core/src/index.ts:
--------------------------------------------------------------------------------
1 | import { Agile } from './agile';
2 |
3 | export * from '@agile-ts/utils';
4 | export * from './agile';
5 | export * from './utils';
6 | export * from './logCodeManager';
7 | export * from './integrations';
8 | export * from './runtime';
9 | export * from './storages';
10 | export * from './state';
11 | export * from './collection';
12 | export * from './computed';
13 | export * from './shared';
14 |
15 | export default Agile;
16 |
--------------------------------------------------------------------------------
/packages/core/src/integrations/index.ts:
--------------------------------------------------------------------------------
1 | export * from './integrations';
2 | export * from './integration';
3 |
--------------------------------------------------------------------------------
/packages/core/src/runtime/index.ts:
--------------------------------------------------------------------------------
1 | export * from './runtime';
2 | export * from './subscription';
3 | export * from './observer';
4 | export * from './runtime.job';
5 |
--------------------------------------------------------------------------------
/packages/core/src/runtime/subscription/index.ts:
--------------------------------------------------------------------------------
1 | export * from './container/SubscriptionContainer';
2 | export * from './container/CallbackSubscriptionContainer';
3 | export * from './container/ComponentSubscriptionContainer';
4 | export * from './sub.controller';
5 |
--------------------------------------------------------------------------------
/packages/core/src/state/index.ts:
--------------------------------------------------------------------------------
1 | export * from './state';
2 | export * from './state.observer';
3 | export * from './state.enhanced';
4 | export * from './state.persistent';
5 | export * from './state.runtime.job';
6 |
7 | // Outsourced from here because of tree shaking issues (See: https://github.com/agile-ts/agile/issues/196)
8 | export * from './public';
9 |
--------------------------------------------------------------------------------
/packages/core/src/state/public/createLightState.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from '@agile-ts/utils';
2 | import { shared } from '../../shared';
3 | import { State } from '../state';
4 | import { CreateStateConfigInterfaceWithAgile } from './types';
5 |
6 | /**
7 | * Returns a newly created State.
8 | *
9 | * A State manages a piece of Information
10 | * that we need to remember globally at a later point in time.
11 | * While providing a toolkit to use and mutate this piece of Information.
12 | *
13 | * You can create as many global States as you need.
14 | *
15 | * [Learn more..](https://agile-ts.org/docs/core/agile-instance/methods#createstate)
16 | *
17 | * @public
18 | * @param initialValue - Initial value of the State.
19 | * @param config - Configuration object
20 | */
21 | export function createLightState(
22 | initialValue: ValueType,
23 | config: CreateStateConfigInterfaceWithAgile = {}
24 | ): State {
25 | config = defineConfig(config, {
26 | agileInstance: shared,
27 | });
28 | return new State(
29 | config.agileInstance as any,
30 | initialValue,
31 | config
32 | );
33 | }
34 |
--------------------------------------------------------------------------------
/packages/core/src/state/public/index.ts:
--------------------------------------------------------------------------------
1 | export * from './createState';
2 | export * from './createEnhancedState';
3 | export * from './createLightState';
4 |
--------------------------------------------------------------------------------
/packages/core/src/state/public/types.ts:
--------------------------------------------------------------------------------
1 | import { CreateAgileSubInstanceInterface } from '../../shared';
2 | import { StateConfigInterface } from '../state';
3 |
4 | export interface CreateStateConfigInterfaceWithAgile
5 | extends CreateAgileSubInstanceInterface,
6 | StateConfigInterface {}
7 |
--------------------------------------------------------------------------------
/packages/core/src/storages/index.ts:
--------------------------------------------------------------------------------
1 | import { CreateStorageConfigInterface, Storage } from './storage';
2 |
3 | export * from './storages';
4 | export * from './storage';
5 | export * from './persistent';
6 | export * from './shared';
7 |
8 | /**
9 | * Returns a newly created Storage.
10 | *
11 | * A Storage Class serves as an interface to external storages,
12 | * such as the [Async Storage](https://github.com/react-native-async-storage/async-storage) or
13 | * [Local Storage](https://www.w3schools.com/html/html5_webstorage.asp).
14 | *
15 | * It creates the foundation to easily [`persist()`](https://agile-ts.org/docs/core/state/methods#persist) [Agile Sub Instances](https://agile-ts.org/docs/introduction/#agile-sub-instance)
16 | * (like States or Collections) in nearly any external storage.
17 | *
18 | * [Learn more..](https://agile-ts.org/docs/core/agile-instance/methods#createstorage)
19 | *
20 | * @public
21 | * @param config - Configuration object
22 | */
23 | export function createStorage(config: CreateStorageConfigInterface): Storage {
24 | return new Storage(config);
25 | }
26 |
--------------------------------------------------------------------------------
/packages/core/tests/helper/test.integration.ts:
--------------------------------------------------------------------------------
1 | import { Integration } from '../../src';
2 |
3 | const testIntegration = new Integration({
4 | key: 'test',
5 | });
6 |
7 | export default testIntegration;
8 |
--------------------------------------------------------------------------------
/packages/core/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.default.json",
3 | "compilerOptions": {
4 | "target": "esnext",
5 | "outDir": "dist",
6 | "rootDir": "src"
7 | },
8 | "include": [
9 | "./src/**/*" // Only include what is in src (-> dist, tests, .. will be excluded)
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/packages/cra-template-agile-typescript/template.json:
--------------------------------------------------------------------------------
1 | {
2 | "package": {
3 | "scripts": {
4 | "prettier": "prettier --config .prettierrc --write \"**/*.{js,ts}\"",
5 | "lint": "eslint --cache \"**/*.{js,jsx,ts,tsx}\""
6 | },
7 | "dependencies": {
8 | "@agile-ts/core": "^0.2.6",
9 | "@agile-ts/react": "^0.2.2",
10 | "react": "^17.0.2",
11 | "react-dom": "^17.0.2",
12 | "react-scripts": "^4.0.3"
13 | },
14 | "devDependencies": {
15 | "@types/node": "^12.0.0",
16 | "@types/react": "^17.0.0",
17 | "@types/react-dom": "^17.0.0",
18 | "@typescript-eslint/eslint-plugin": "^4.28.3",
19 | "@typescript-eslint/parser": "^4.28.3",
20 | "eslint": "^7.31.0",
21 | "eslint-config-airbnb-typescript": "^12.3.1",
22 | "eslint-config-prettier": "^8.3.0",
23 | "eslint-plugin-import": "^2.23.4",
24 | "eslint-plugin-jsx-a11y": "^6.4.1",
25 | "eslint-plugin-prettier": "^3.4.0",
26 | "eslint-plugin-react": "^7.24.0",
27 | "eslint-plugin-react-hooks": "^4.2.0",
28 | "prettier": "^2.3.2",
29 | "typescript": "^4.1.2"
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/packages/cra-template-agile-typescript/template/.eslintrc.js:
--------------------------------------------------------------------------------
1 | const OFF = 0;
2 | const WARNING = 1;
3 | const ERROR = 2;
4 |
5 | module.exports = {
6 | extends: ['airbnb-typescript', 'prettier'],
7 | plugins: ['@typescript-eslint', 'prettier'],
8 | parser: '@typescript-eslint/parser',
9 | parserOptions: {
10 | project: ['./tsconfig.json'],
11 | },
12 | ignorePatterns: ['.eslintrc.js'], // https://stackoverflow.com/questions/63002127/parsing-error-parseroptions-project-has-been-set-for-typescript-eslint-parser
13 | rules: {
14 | 'react/prop-types': OFF,
15 | 'import/prefer-default-export': OFF,
16 | },
17 | };
18 |
--------------------------------------------------------------------------------
/packages/cra-template-agile-typescript/template/.prettierignore:
--------------------------------------------------------------------------------
1 | build/
2 | node_modules/
3 | package-lock.json
4 | yarn.lock
5 | package.json
6 |
--------------------------------------------------------------------------------
/packages/cra-template-agile-typescript/template/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "printWidth": 80,
3 | "tabWidth": 2,
4 | "useTabs": false,
5 | "semi": true,
6 | "singleQuote": true,
7 | "trailingComma": "all"
8 | }
9 |
--------------------------------------------------------------------------------
/packages/cra-template-agile-typescript/template/gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 | .idea
21 |
22 | npm-debug.log*
23 | yarn-debug.log*
24 | yarn-error.log*
25 |
--------------------------------------------------------------------------------
/packages/cra-template-agile-typescript/template/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/packages/cra-template-agile-typescript/template/public/favicon.ico
--------------------------------------------------------------------------------
/packages/cra-template-agile-typescript/template/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/packages/cra-template-agile-typescript/template/public/logo192.png
--------------------------------------------------------------------------------
/packages/cra-template-agile-typescript/template/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/packages/cra-template-agile-typescript/template/public/logo512.png
--------------------------------------------------------------------------------
/packages/cra-template-agile-typescript/template/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/packages/cra-template-agile-typescript/template/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/packages/cra-template-agile-typescript/template/src/components/Stopwatch/Stopwatch.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | display: flex;
3 | align-items: center;
4 | justify-content: center;
5 | flex-direction: column;
6 | }
7 |
8 | .displayContainer {
9 | padding: 1rem 0;
10 | }
11 |
12 | .displayContainer span{
13 | background:#6C69A0;
14 | color: #ffffff;
15 | text-align: center;
16 | font-size: 1rem;
17 | padding: 1rem;
18 | border-radius: 5px;
19 | }
20 |
--------------------------------------------------------------------------------
/packages/cra-template-agile-typescript/template/src/components/Stopwatch/components/Button/Button.module.css:
--------------------------------------------------------------------------------
1 | .button {
2 | margin: 1rem 0.5rem;
3 | padding: 0.25rem 0.5rem;
4 | font-size: 1rem;
5 | text-transform: uppercase;
6 | width: 100px;
7 | border-radius: 5px;
8 | transition: background 1s;
9 | cursor: pointer;
10 | background: transparent;
11 | }
12 |
--------------------------------------------------------------------------------
/packages/cra-template-agile-typescript/template/src/components/Stopwatch/components/Button/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import styles from './Button.module.css';
4 |
5 | type ButtonProps = {
6 | color?: string;
7 | onClick: () => void;
8 | };
9 |
10 | const Button: React.FC = (props) => {
11 | const { color, children, onClick } = props;
12 |
13 | return (
14 |
20 | {children}
21 |
22 | );
23 | };
24 |
25 | export default Button;
26 |
27 | Button.defaultProps = {
28 | color: 'blue',
29 | };
30 |
--------------------------------------------------------------------------------
/packages/cra-template-agile-typescript/template/src/global.css:
--------------------------------------------------------------------------------
1 | html,
2 | body {
3 | padding: 0;
4 | margin: 0;
5 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
6 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
7 | sans-serif;
8 | -webkit-font-smoothing: antialiased;
9 | -moz-osx-font-smoothing: grayscale;
10 | }
11 |
12 | * {
13 | box-sizing: border-box;
14 | }
15 |
--------------------------------------------------------------------------------
/packages/cra-template-agile-typescript/template/src/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import Home from './pages/Home';
4 |
5 | import './global.css';
6 |
7 | ReactDOM.render(
8 |
9 |
10 | ,
11 | document.getElementById('root'),
12 | );
13 |
--------------------------------------------------------------------------------
/packages/cra-template-agile-typescript/template/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/packages/cra-template-agile-typescript/template/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": [
5 | "dom",
6 | "dom.iterable",
7 | "esnext"
8 | ],
9 | "allowJs": true,
10 | "skipLibCheck": true,
11 | "esModuleInterop": true,
12 | "allowSyntheticDefaultImports": true,
13 | "strict": true,
14 | "forceConsistentCasingInFileNames": true,
15 | "noFallthroughCasesInSwitch": true,
16 | "module": "esnext",
17 | "moduleResolution": "node",
18 | "resolveJsonModule": true,
19 | "isolatedModules": true,
20 | "noEmit": true,
21 | "jsx": "react-jsx"
22 | },
23 | "include": [
24 | "src"
25 | ]
26 | }
27 |
--------------------------------------------------------------------------------
/packages/cra-template-agile/template.json:
--------------------------------------------------------------------------------
1 | {
2 | "package": {
3 | "scripts": {
4 | "prettier": "prettier --config .prettierrc --write \"**/*.{js,ts}\"",
5 | "lint": "eslint --cache \"**/*.{js,jsx,ts,tsx}\""
6 | },
7 | "dependencies": {
8 | "@agile-ts/core": "^0.2.6",
9 | "@agile-ts/react": "^0.2.2",
10 | "react": "^17.0.2",
11 | "react-dom": "^17.0.2",
12 | "react-scripts": "4.0.3"
13 | },
14 | "devDependencies": {
15 | "eslint": "^7.31.0",
16 | "eslint-config-airbnb": "^18.2.1",
17 | "eslint-config-prettier": "^8.3.0",
18 | "eslint-plugin-import": "^2.23.4",
19 | "eslint-plugin-jsx-a11y": "^6.4.1",
20 | "eslint-plugin-prettier": "^3.4.0",
21 | "eslint-plugin-react": "^7.24.0",
22 | "eslint-plugin-react-hooks": "^4.2.0",
23 | "prettier": "^2.3.2"
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/packages/cra-template-agile/template/.eslintrc.js:
--------------------------------------------------------------------------------
1 | const OFF = 0;
2 | const WARNING = 1;
3 | const ERROR = 2;
4 |
5 | module.exports = {
6 | extends: ['airbnb', 'airbnb/hooks', 'prettier'],
7 | plugins: ['prettier'],
8 | ignorePatterns: ['.eslintrc.js'],
9 | rules: {
10 | 'react/prop-types': OFF,
11 | 'import/prefer-default-export': OFF,
12 | },
13 | };
14 |
--------------------------------------------------------------------------------
/packages/cra-template-agile/template/.prettierignore:
--------------------------------------------------------------------------------
1 | build/
2 | node_modules/
3 | package-lock.json
4 | yarn.lock
5 | package.json
6 |
--------------------------------------------------------------------------------
/packages/cra-template-agile/template/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "printWidth": 80,
3 | "tabWidth": 2,
4 | "useTabs": false,
5 | "semi": true,
6 | "singleQuote": true,
7 | "trailingComma": "all"
8 | }
9 |
--------------------------------------------------------------------------------
/packages/cra-template-agile/template/gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 | .idea
21 |
22 | npm-debug.log*
23 | yarn-debug.log*
24 | yarn-error.log*
25 |
--------------------------------------------------------------------------------
/packages/cra-template-agile/template/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/packages/cra-template-agile/template/public/favicon.ico
--------------------------------------------------------------------------------
/packages/cra-template-agile/template/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/packages/cra-template-agile/template/public/logo192.png
--------------------------------------------------------------------------------
/packages/cra-template-agile/template/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/packages/cra-template-agile/template/public/logo512.png
--------------------------------------------------------------------------------
/packages/cra-template-agile/template/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/packages/cra-template-agile/template/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/packages/cra-template-agile/template/src/components/Stopwatch/Stopwatch.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | display: flex;
3 | align-items: center;
4 | justify-content: center;
5 | flex-direction: column;
6 | }
7 |
8 | .displayContainer {
9 | padding: 1rem 0;
10 | }
11 |
12 | .displayContainer span{
13 | background:#6C69A0;
14 | color: #ffffff;
15 | text-align: center;
16 | font-size: 1rem;
17 | padding: 1rem;
18 | border-radius: 5px;
19 | }
20 |
--------------------------------------------------------------------------------
/packages/cra-template-agile/template/src/components/Stopwatch/components/Button/Button.module.css:
--------------------------------------------------------------------------------
1 | .button {
2 | margin: 1rem 0.5rem;
3 | padding: 0.25rem 0.5rem;
4 | font-size: 1rem;
5 | text-transform: uppercase;
6 | width: 100px;
7 | border-radius: 5px;
8 | transition: background 1s;
9 | cursor: pointer;
10 | background: transparent;
11 | }
12 |
--------------------------------------------------------------------------------
/packages/cra-template-agile/template/src/components/Stopwatch/components/Button/index.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import styles from './Button.module.css';
4 |
5 | const Button = (props) => {
6 | const { color, children, onClick } = props;
7 |
8 | return (
9 |
15 | {children}
16 |
17 | );
18 | };
19 |
20 | export default Button;
21 |
22 | Button.defaultProps = {
23 | color: 'blue',
24 | };
25 |
--------------------------------------------------------------------------------
/packages/cra-template-agile/template/src/global.css:
--------------------------------------------------------------------------------
1 | html,
2 | body {
3 | padding: 0;
4 | margin: 0;
5 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
6 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
7 | sans-serif;
8 | -webkit-font-smoothing: antialiased;
9 | -moz-osx-font-smoothing: grayscale;
10 | }
11 |
12 | * {
13 | box-sizing: border-box;
14 | }
15 |
--------------------------------------------------------------------------------
/packages/cra-template-agile/template/src/index.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import Home from './pages/Home';
4 |
5 | import './global.css';
6 |
7 | ReactDOM.render(
8 |
9 |
10 | ,
11 | document.getElementById('root'),
12 | );
13 |
--------------------------------------------------------------------------------
/packages/event/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020-present bennodev19
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/packages/event/jest.config.js:
--------------------------------------------------------------------------------
1 | const baseConfig = require('../../jest.base.config.js');
2 | const packageJson = require('./package.json');
3 | const packageName = packageJson.name.split('@agile-ts/').pop();
4 |
5 | module.exports = {
6 | ...baseConfig,
7 | rootDir: '../..',
8 | roots: [`/packages/${packageName}`],
9 | name: packageName,
10 | displayName: packageName,
11 | };
12 |
--------------------------------------------------------------------------------
/packages/event/rollup.config.js:
--------------------------------------------------------------------------------
1 | import {
2 | createCommonJSConfig,
3 | createDeclarationConfig,
4 | createESMConfig,
5 | } from '../rollup.config.default';
6 |
7 | const packageRoot = process.cwd();
8 |
9 | // https://rollupjs.org/guide/en/#warning-treating-module-as-external-dependency
10 | // Checks whether the specified path is outside of this particular package
11 | function external(path) {
12 | return (
13 | !path.startsWith('.') && // Paths that doesn't start with a '.' (e.g. './agile.ts')
14 | !path.startsWith(packageRoot) // Paths that doesn't start with the package root path (e.g. 'path/to/package/agile.ts')
15 | );
16 | }
17 |
18 | // https://rollupjs.org/guide/en/#configuration-files
19 | export default function () {
20 | return [
21 | createDeclarationConfig({ external }),
22 | createCommonJSConfig({ external }),
23 | createESMConfig({ external, multiFileOutput: true }),
24 | ];
25 | }
26 |
--------------------------------------------------------------------------------
/packages/event/src/event.runtime.job.ts:
--------------------------------------------------------------------------------
1 | export class EventRuntimeJob {
2 | public payload: PayloadType;
3 | public creationTimestamp: number;
4 | public keys?: string[];
5 |
6 | /**
7 | * @public
8 | * Event Job - Holds Payload and gets executed/performed by the Event
9 | * @param payload - Payload that is represented by this Job
10 | * @param keys - Keys of EventCallbacks that get executed with the passed payload
11 | */
12 | constructor(payload: PayloadType, keys?: string[]) {
13 | this.payload = payload;
14 | this.keys = keys;
15 | this.creationTimestamp = new Date().getTime();
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/packages/event/src/index.ts:
--------------------------------------------------------------------------------
1 | import { CreateAgileSubInstanceInterface, shared } from '@agile-ts/core';
2 | import { defineConfig } from '@agile-ts/utils';
3 | import {
4 | CreateEventConfigInterface,
5 | DefaultEventPayload,
6 | Event,
7 | } from './event';
8 |
9 | export * from './event';
10 | export * from './event.observer';
11 | export * from './event.runtime.job';
12 |
13 | export default Event;
14 |
15 | export function createEvent(
16 | config: CreateEventConfigInterfaceWithAgile = {}
17 | ): Event {
18 | config = defineConfig(config, {
19 | agileInstance: shared,
20 | });
21 | return new Event(config.agileInstance as any, config);
22 | }
23 |
24 | export interface CreateEventConfigInterfaceWithAgile
25 | extends CreateEventConfigInterface,
26 | CreateAgileSubInstanceInterface {}
27 |
--------------------------------------------------------------------------------
/packages/event/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.default.json",
3 | "compilerOptions": {
4 | "target": "esnext",
5 | "outDir": "dist",
6 | "rootDir": "src"
7 | },
8 | "include": [
9 | "./src/**/*" // Only include what is in src (-> dist, tests, .. will be excluded)
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/packages/logger/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020-present bennodev19
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/packages/logger/jest.config.js:
--------------------------------------------------------------------------------
1 | const baseConfig = require('../../jest.base.config.js');
2 | const packageJson = require('./package.json');
3 | const packageName = packageJson.name.split('@agile-ts/').pop();
4 |
5 | module.exports = {
6 | ...baseConfig,
7 | rootDir: '../..',
8 | roots: [`/packages/${packageName}`],
9 | name: packageName,
10 | displayName: packageName,
11 | };
12 |
--------------------------------------------------------------------------------
/packages/logger/rollup.config.js:
--------------------------------------------------------------------------------
1 | import {
2 | createCommonJSConfig,
3 | createDeclarationConfig,
4 | createESMConfig,
5 | } from '../rollup.config.default';
6 |
7 | const packageRoot = process.cwd();
8 |
9 | // https://rollupjs.org/guide/en/#warning-treating-module-as-external-dependency
10 | // Checks whether the specified path is outside of this particular package
11 | function external(path) {
12 | return (
13 | !path.startsWith('.') && // Paths that doesn't start with a '.' (e.g. './agile.ts')
14 | !path.startsWith(packageRoot) // Paths that doesn't start with the package root path (e.g. 'path/to/package/agile.ts')
15 | );
16 | }
17 |
18 | // https://rollupjs.org/guide/en/#configuration-files
19 | export default function () {
20 | return [
21 | createDeclarationConfig({ external }),
22 | createCommonJSConfig({ external }),
23 | createESMConfig({ external, multiFileOutput: true }),
24 | ];
25 | }
26 |
--------------------------------------------------------------------------------
/packages/logger/src/index.ts:
--------------------------------------------------------------------------------
1 | import { Logger } from './logger';
2 |
3 | export * from './logger';
4 | export * from './shared';
5 |
6 | export default Logger;
7 |
--------------------------------------------------------------------------------
/packages/logger/src/shared.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from '@agile-ts/utils';
2 | import { CreateLoggerConfigInterface, Logger } from './logger';
3 |
4 | export const defaultSharedLoggerConfig = {
5 | prefix: 'Agile',
6 | active: true,
7 | level: Logger.level.WARN,
8 | canUseCustomStyles: true,
9 | allowedTags: ['runtime', 'storage', 'subscription', 'multieditor'],
10 | };
11 |
12 | let sharedLogger = new Logger(defaultSharedLoggerConfig);
13 | export { sharedLogger };
14 |
15 | /**
16 | * Assigns the specified Logger as the shared Logger.
17 | *
18 | * @param logger - Logger to become the new shared Logger.
19 | */
20 | export function assignSharedLogger(logger: Logger): void {
21 | sharedLogger = logger;
22 | }
23 |
24 | /**
25 | * Returns a newly created Logger.
26 | *
27 | * The Logger is a practical class for handling advanced logging
28 | * with e.g. different types of logs or filtering.
29 | *
30 | * @param config - Configuration object
31 | */
32 | export function createLogger(config: CreateLoggerConfigInterface = {}): Logger {
33 | config = defineConfig(config, defaultSharedLoggerConfig);
34 | return new Logger(config);
35 | }
36 |
--------------------------------------------------------------------------------
/packages/logger/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.default.json",
3 | "compilerOptions": {
4 | "target": "esnext",
5 | "outDir": "dist",
6 | "rootDir": "src"
7 | },
8 | "include": [
9 | "./src/**/*" // Only include what is in src (-> dist, tests, .. will be excluded)
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/packages/multieditor/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020-present bennodev19
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/packages/multieditor/jest.config.js:
--------------------------------------------------------------------------------
1 | const baseConfig = require('../../jest.base.config.js');
2 | const packageJson = require('./package.json');
3 | const packageName = packageJson.name.split('@agile-ts/').pop();
4 |
5 | module.exports = {
6 | ...baseConfig,
7 | rootDir: '../..',
8 | roots: [`/packages/${packageName}`],
9 | name: packageName,
10 | displayName: packageName,
11 | };
12 |
--------------------------------------------------------------------------------
/packages/multieditor/rollup.config.js:
--------------------------------------------------------------------------------
1 | import {
2 | createCommonJSConfig,
3 | createDeclarationConfig,
4 | createESMConfig,
5 | } from '../rollup.config.default';
6 |
7 | const packageRoot = process.cwd();
8 |
9 | // https://rollupjs.org/guide/en/#warning-treating-module-as-external-dependency
10 | // Checks whether the specified path is outside of this particular package
11 | function external(path) {
12 | return (
13 | !path.startsWith('.') && // Paths that doesn't start with a '.' (e.g. './agile.ts')
14 | !path.startsWith(packageRoot) // Paths that doesn't start with the package root path (e.g. 'path/to/package/agile.ts')
15 | );
16 | }
17 |
18 | // https://rollupjs.org/guide/en/#configuration-files
19 | export default function () {
20 | return [
21 | createDeclarationConfig({ external }),
22 | createCommonJSConfig({ external }),
23 | createESMConfig({ external, multiFileOutput: true }),
24 | ];
25 | }
26 |
--------------------------------------------------------------------------------
/packages/multieditor/src/index.ts:
--------------------------------------------------------------------------------
1 | import { Multieditor } from './multieditor';
2 |
3 | export * from './multieditor';
4 | export * from './item';
5 | export * from './validator';
6 | export * from './status';
7 |
8 | export default Multieditor;
9 |
--------------------------------------------------------------------------------
/packages/multieditor/src/logCodeManager.ts:
--------------------------------------------------------------------------------
1 | import {
2 | logCodeManager as coreLogCodeManager,
3 | assignAdditionalLogs,
4 | } from '@agile-ts/core';
5 |
6 | const additionalLogs = {
7 | // Validator
8 | '41:03:00': "A validation method needs to be of the type 'function'!",
9 | '41:03:01': "Appending a Validator to itself isn't allowed!",
10 | };
11 |
12 | /**
13 | * The Log Code Manager keeps track
14 | * and manages all important Logs for the '@agile-ts/multieditor' package.
15 | *
16 | * @internal
17 | */
18 | export const logCodeManager = assignAdditionalLogs<
19 | typeof coreLogCodeManager.logCodeMessages & typeof additionalLogs,
20 | typeof coreLogCodeManager.logCodeMessages
21 | >(
22 | coreLogCodeManager,
23 | process.env.NODE_ENV !== 'production' ? additionalLogs : {}
24 | );
25 |
--------------------------------------------------------------------------------
/packages/multieditor/src/multieditor/index.ts:
--------------------------------------------------------------------------------
1 | import { Agile, shared } from '@agile-ts/core';
2 | import { Multieditor } from './multieditor';
3 | import { CreateEditorConfig, FieldData } from './types';
4 |
5 | export * from './multieditor';
6 | export * from './types';
7 |
8 | /**
9 | * Returns a newly created Multieditor.
10 | *
11 | * A Multieditor is a simple Form Handler.
12 | *
13 | * @public
14 | * @param config - Configuration object
15 | * @param agileInstance - Instance of Agile the Multieditor belongs to.
16 | */
17 | export function createMultieditor(
18 | config: CreateEditorConfig,
19 | agileInstance: Agile = shared
20 | ): Multieditor {
21 | return new Multieditor(config, agileInstance);
22 | }
23 |
--------------------------------------------------------------------------------
/packages/multieditor/src/status/index.ts:
--------------------------------------------------------------------------------
1 | export * from './status';
2 | export * from './status.tracker';
3 |
--------------------------------------------------------------------------------
/packages/multieditor/src/validator/index.ts:
--------------------------------------------------------------------------------
1 | export * from './validator';
2 |
3 | export * from './resolvers';
4 |
5 | export * from './validationMethods/general';
6 | export * from './validationMethods/number';
7 | export * from './validationMethods/string';
8 |
--------------------------------------------------------------------------------
/packages/multieditor/src/validator/resolvers/index.ts:
--------------------------------------------------------------------------------
1 | export * from './agile';
2 | export * from './yup';
3 |
--------------------------------------------------------------------------------
/packages/multieditor/src/validator/validationMethods/general.ts:
--------------------------------------------------------------------------------
1 | import { ValidationMethodObjectInterface } from '../resolvers/agile';
2 |
3 | export function isRequired(
4 | errorMessage?: string
5 | ): ValidationMethodObjectInterface {
6 | return {
7 | key: 'isRequired',
8 | method: (toValidateItemKey, value, editor): boolean => {
9 | const isValid = !!value;
10 | if (!isValid) {
11 | editor.setStatus(
12 | toValidateItemKey as any,
13 | 'error',
14 | errorMessage || `${toValidateItemKey} is a required field`
15 | );
16 | }
17 | return isValid;
18 | },
19 | };
20 | }
21 |
--------------------------------------------------------------------------------
/packages/multieditor/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.default.json",
3 | "compilerOptions": {
4 | "target": "esnext",
5 | "outDir": "dist",
6 | "rootDir": "src"
7 | },
8 | "include": [
9 | "./src/**/*" // Only include what is in src (-> dist, tests, .. will be excluded)
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/packages/proxytree/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020-present bennodev19
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/packages/proxytree/jest.config.js:
--------------------------------------------------------------------------------
1 | const baseConfig = require('../../jest.base.config.js');
2 | const packageJson = require('./package.json');
3 | const packageName = packageJson.name.split('@agile-ts/').pop();
4 |
5 | module.exports = {
6 | ...baseConfig,
7 | rootDir: '../..',
8 | roots: [`/packages/${packageName}`],
9 | name: packageName,
10 | displayName: packageName,
11 | };
12 |
--------------------------------------------------------------------------------
/packages/proxytree/rollup.config.js:
--------------------------------------------------------------------------------
1 | import {
2 | createCommonJSConfig,
3 | createDeclarationConfig,
4 | createESMConfig,
5 | } from '../rollup.config.default';
6 |
7 | const packageRoot = process.cwd();
8 |
9 | // https://rollupjs.org/guide/en/#warning-treating-module-as-external-dependency
10 | // Checks whether the specified path is outside of this particular package
11 | function external(path) {
12 | return (
13 | !path.startsWith('.') && // Paths that doesn't start with a '.' (e.g. './agile.ts')
14 | !path.startsWith(packageRoot) // Paths that doesn't start with the package root path (e.g. 'path/to/package/agile.ts')
15 | );
16 | }
17 |
18 | // https://rollupjs.org/guide/en/#configuration-files
19 | export default function () {
20 | return [
21 | createDeclarationConfig({ external }),
22 | createCommonJSConfig({ external }),
23 | createESMConfig({ external, multiFileOutput: true }),
24 | ];
25 | }
26 |
--------------------------------------------------------------------------------
/packages/proxytree/src/index.ts:
--------------------------------------------------------------------------------
1 | import { ProxyTree } from './tree';
2 |
3 | export * from './tree';
4 | export default ProxyTree;
5 |
--------------------------------------------------------------------------------
/packages/proxytree/src/utils.ts:
--------------------------------------------------------------------------------
1 | export const isObject = (x: unknown): x is object =>
2 | typeof x === 'object' && x !== null;
3 |
--------------------------------------------------------------------------------
/packages/proxytree/static/pathTrackingImage.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/packages/proxytree/static/pathTrackingImage.jpg
--------------------------------------------------------------------------------
/packages/proxytree/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.default.json",
3 | "compilerOptions": {
4 | "target": "esnext",
5 | "outDir": "dist",
6 | "rootDir": "src"
7 | },
8 | "include": [
9 | "./src/**/*" // Only include what is in src (-> dist, tests, .. will be excluded)
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/packages/react/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020-present bennodev19
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/packages/react/jest.config.js:
--------------------------------------------------------------------------------
1 | const baseConfig = require('../../jest.base.config.js');
2 | const packageJson = require('./package.json');
3 | const packageName = packageJson.name.split('@agile-ts/').pop();
4 |
5 | module.exports = {
6 | ...baseConfig,
7 | rootDir: '../..',
8 | roots: [`/packages/${packageName}`],
9 | name: packageName,
10 | displayName: packageName,
11 | };
12 |
--------------------------------------------------------------------------------
/packages/react/rollup.config.js:
--------------------------------------------------------------------------------
1 | import {
2 | createCommonJSConfig,
3 | createDeclarationConfig,
4 | createESMConfig,
5 | } from '../rollup.config.default';
6 |
7 | const packageRoot = process.cwd();
8 |
9 | // https://rollupjs.org/guide/en/#warning-treating-module-as-external-dependency
10 | // Checks whether the specified path is outside of this particular package
11 | function external(path) {
12 | return (
13 | !path.startsWith('.') && // Paths that doesn't start with a '.' (e.g. './agile.ts')
14 | !path.startsWith(packageRoot) // Paths that doesn't start with the package root path (e.g. 'path/to/package/agile.ts')
15 | );
16 | }
17 |
18 | // https://rollupjs.org/guide/en/#configuration-files
19 | export default function () {
20 | return [
21 | createDeclarationConfig({ external }),
22 | createCommonJSConfig({ external }),
23 | createESMConfig({ external, multiFileOutput: true }),
24 | ];
25 | }
26 |
--------------------------------------------------------------------------------
/packages/react/src/core/hooks/useWatcher.ts:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { StateWatcherCallback, EnhancedState } from '@agile-ts/core';
3 |
4 | export function useWatcher(
5 | state: EnhancedState,
6 | callback: StateWatcherCallback
7 | ): void {
8 | React.useEffect(() => {
9 | const generatedKey = state.watch(callback);
10 | return () => {
11 | state.removeWatcher(generatedKey);
12 | };
13 | }, []);
14 | }
15 |
--------------------------------------------------------------------------------
/packages/react/src/core/index.ts:
--------------------------------------------------------------------------------
1 | export * from './hocs/AgileHOC';
2 |
3 | export * from './hooks/useAgile';
4 | export * from './hooks/useWatcher';
5 | export * from './hooks/useValue';
6 | export * from './hooks/useSelector';
7 | export * from './hooks/useBaseAgile';
8 |
--------------------------------------------------------------------------------
/packages/react/src/event/eventPackage.ts:
--------------------------------------------------------------------------------
1 | // TODO https://stackoverflow.com/questions/68148235/require-module-inside-a-function-doesnt-work
2 | export let eventPackage: any = null;
3 | try {
4 | eventPackage = require('@agile-ts/event');
5 | } catch (e) {
6 | // empty catch block
7 | }
8 |
--------------------------------------------------------------------------------
/packages/react/src/event/index.ts:
--------------------------------------------------------------------------------
1 | export * from './hooks/useEvent';
2 |
--------------------------------------------------------------------------------
/packages/react/src/index.ts:
--------------------------------------------------------------------------------
1 | import reactIntegration from './react.integration';
2 |
3 | export * from './core';
4 | export * from './proxy';
5 | export * from './event';
6 | export * from './multieditor';
7 |
8 | export default reactIntegration;
9 |
--------------------------------------------------------------------------------
/packages/react/src/multieditor/index.ts:
--------------------------------------------------------------------------------
1 | export * from './hooks/useMultieditor';
2 |
--------------------------------------------------------------------------------
/packages/react/src/multieditor/multieditorPackage.ts:
--------------------------------------------------------------------------------
1 | // TODO https://stackoverflow.com/questions/68148235/require-module-inside-a-function-doesnt-work
2 | export let multieditorPackage: any = null;
3 | try {
4 | multieditorPackage = require('@agile-ts/multieditor');
5 | } catch (e) {
6 | // empty catch block
7 | }
8 |
--------------------------------------------------------------------------------
/packages/react/src/proxy/index.ts:
--------------------------------------------------------------------------------
1 | export * from './hooks/useProxy';
2 |
--------------------------------------------------------------------------------
/packages/react/src/proxy/proxyPackage.ts:
--------------------------------------------------------------------------------
1 | // TODO https://stackoverflow.com/questions/68148235/require-module-inside-a-function-doesnt-work
2 | export let proxyPackage: any = null;
3 | try {
4 | proxyPackage = require('@agile-ts/proxytree');
5 | } catch (e) {
6 | // empty catch block
7 | }
8 |
--------------------------------------------------------------------------------
/packages/react/src/react.integration.ts:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Integration, Integrations } from '@agile-ts/core';
3 | import { flatMerge } from '@agile-ts/utils';
4 | import { AgileReactComponent } from './core';
5 |
6 | const reactIntegration = new Integration({
7 | key: 'react',
8 | frameworkInstance: React,
9 | bind() {
10 | // Nothing to bind ;D
11 | return Promise.resolve(true);
12 | },
13 | updateMethod(componentInstance, updatedData: { [key: string]: any }) {
14 | // Merge changes into State if some Data updated otherwise force rerender
15 | if (Object.keys(updatedData).length !== 0) {
16 | componentInstance.agileProps = flatMerge(
17 | componentInstance.agileProps,
18 | updatedData
19 | );
20 | componentInstance.setState(
21 | flatMerge(componentInstance.state, updatedData)
22 | );
23 | } else {
24 | componentInstance.forceUpdate();
25 | }
26 | },
27 | });
28 | Integrations.addInitialIntegration(reactIntegration);
29 |
30 | export default reactIntegration;
31 |
--------------------------------------------------------------------------------
/packages/react/src/utils/hooks/useIsomorphicLayoutEffect.ts:
--------------------------------------------------------------------------------
1 | import { useEffect, useLayoutEffect } from 'react';
2 | import { runsOnServer } from '@agile-ts/core';
3 |
4 | // React currently throws a warning when using useLayoutEffect on the server.
5 | // To get around it, we can conditionally useEffect on the server (no-op) and
6 | // useLayoutEffect in the browser. We need useLayoutEffect to ensure the store
7 | // subscription callback always has the selector from the latest render commit
8 | // available, otherwise a store update may happen between render and the effect,
9 | // which may cause missed updates; we also must ensure the store subscription
10 | // is created synchronously, otherwise a store update may occur before the
11 | // subscription is created and an inconsistent state may be observed
12 |
13 | export const useIsomorphicLayoutEffect = !runsOnServer()
14 | ? useLayoutEffect
15 | : useEffect;
16 |
--------------------------------------------------------------------------------
/packages/react/src/utils/index.ts:
--------------------------------------------------------------------------------
1 | export * from './hooks/useIsomorphicLayoutEffect';
2 |
--------------------------------------------------------------------------------
/packages/react/static/contribute_header.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/packages/react/static/contribute_header.png
--------------------------------------------------------------------------------
/packages/react/static/documentation_header.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/packages/react/static/documentation_header.png
--------------------------------------------------------------------------------
/packages/react/static/header_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/packages/react/static/header_background.png
--------------------------------------------------------------------------------
/packages/react/static/installation_header.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/packages/react/static/installation_header.png
--------------------------------------------------------------------------------
/packages/react/static/what_does_this_integration_header.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/packages/react/static/what_does_this_integration_header.png
--------------------------------------------------------------------------------
/packages/react/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.default.json",
3 | "compilerOptions": {
4 | "target": "esnext",
5 | "outDir": "dist",
6 | "rootDir": "src"
7 | },
8 | "include": [
9 | "./src/**/*" // Only include what is in src (-> dist, tests, .. will be excluded)
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/packages/utils/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020-present bennodev19
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/packages/utils/jest.config.js:
--------------------------------------------------------------------------------
1 | const baseConfig = require('../../jest.base.config.js');
2 | const packageJson = require('./package.json');
3 | const packageName = packageJson.name.split('@agile-ts/').pop();
4 |
5 | module.exports = {
6 | ...baseConfig,
7 | rootDir: '../..',
8 | roots: [`/packages/${packageName}`],
9 | name: packageName,
10 | displayName: packageName,
11 | };
12 |
--------------------------------------------------------------------------------
/packages/utils/rollup.config.js:
--------------------------------------------------------------------------------
1 | import {
2 | createCommonJSConfig,
3 | createDeclarationConfig,
4 | createESMConfig,
5 | } from '../rollup.config.default';
6 |
7 | const packageRoot = process.cwd();
8 |
9 | // https://rollupjs.org/guide/en/#warning-treating-module-as-external-dependency
10 | // Checks whether the specified path is outside of this particular package
11 | function external(path) {
12 | return (
13 | !path.startsWith('.') && // Paths that doesn't start with a '.' (e.g. './agile.ts')
14 | !path.startsWith(packageRoot) // Paths that doesn't start with the package root path (e.g. 'path/to/package/agile.ts')
15 | );
16 | }
17 |
18 | // https://rollupjs.org/guide/en/#configuration-files
19 | export default function () {
20 | return [
21 | createDeclarationConfig({ external }),
22 | createCommonJSConfig({ external }),
23 | createESMConfig({ external, multiFileOutput: true }),
24 | ];
25 | }
26 |
--------------------------------------------------------------------------------
/packages/utils/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.default.json",
3 | "compilerOptions": {
4 | "target": "esnext",
5 | "outDir": "dist",
6 | "rootDir": "src"
7 | },
8 | "include": [
9 | "./src/**/*" // Only include what is in src (-> dist, tests, .. will be excluded)
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/packages/vue/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020-present bennodev19
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/packages/vue/jest.config.js:
--------------------------------------------------------------------------------
1 | const baseConfig = require('../../jest.base.config.js');
2 | const packageJson = require('./package.json');
3 | const packageName = packageJson.name.split('@agile-ts/').pop();
4 |
5 | module.exports = {
6 | ...baseConfig,
7 | rootDir: '../..',
8 | roots: [`/packages/${packageName}`],
9 | name: packageName,
10 | displayName: packageName,
11 | };
12 |
--------------------------------------------------------------------------------
/packages/vue/rollup.config.js:
--------------------------------------------------------------------------------
1 | import {
2 | createCommonJSConfig,
3 | createDeclarationConfig,
4 | createESMConfig,
5 | } from '../rollup.config.default';
6 |
7 | const packageRoot = process.cwd();
8 |
9 | // https://rollupjs.org/guide/en/#warning-treating-module-as-external-dependency
10 | // Checks whether the specified path is outside of this particular package
11 | function external(path) {
12 | return (
13 | !path.startsWith('.') && // Paths that doesn't start with a '.' (e.g. './agile.ts')
14 | !path.startsWith(packageRoot) // Paths that doesn't start with the package root path (e.g. 'path/to/package/agile.ts')
15 | );
16 | }
17 |
18 | // https://rollupjs.org/guide/en/#configuration-files
19 | export default function () {
20 | return [
21 | createDeclarationConfig({ external }),
22 | createCommonJSConfig({ external }),
23 | createESMConfig({ external, multiFileOutput: true }),
24 | ];
25 | }
26 |
--------------------------------------------------------------------------------
/packages/vue/src/index.ts:
--------------------------------------------------------------------------------
1 | import vueIntegration from './vue.integration';
2 |
3 | export default vueIntegration;
4 |
--------------------------------------------------------------------------------
/packages/vue/static/contribute_header.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/packages/vue/static/contribute_header.png
--------------------------------------------------------------------------------
/packages/vue/static/documentation_header.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/packages/vue/static/documentation_header.png
--------------------------------------------------------------------------------
/packages/vue/static/header_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/packages/vue/static/header_background.png
--------------------------------------------------------------------------------
/packages/vue/static/installation_header.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/packages/vue/static/installation_header.png
--------------------------------------------------------------------------------
/packages/vue/static/what_does_this_integration_header.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/packages/vue/static/what_does_this_integration_header.png
--------------------------------------------------------------------------------
/packages/vue/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.default.json",
3 | "compilerOptions": {
4 | "target": "esnext",
5 | "outDir": "dist",
6 | "rootDir": "src"
7 | },
8 | "include": [
9 | "./src/**/*" // Only include what is in src (-> dist, tests, .. will be excluded)
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/static/branch_organization.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/static/branch_organization.png
--------------------------------------------------------------------------------
/static/contribute_header.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/static/contribute_header.png
--------------------------------------------------------------------------------
/static/credits_header.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/static/credits_header.png
--------------------------------------------------------------------------------
/static/documentation_header.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/static/documentation_header.png
--------------------------------------------------------------------------------
/static/header_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/static/header_background.png
--------------------------------------------------------------------------------
/static/how_to_create_state_header.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/static/how_to_create_state_header.png
--------------------------------------------------------------------------------
/static/installation_header.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/static/installation_header.png
--------------------------------------------------------------------------------
/static/packages_of_agile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/static/packages_of_agile.png
--------------------------------------------------------------------------------
/static/why_should_i_use_agile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agile-ts/agile/780f3cfa55b2ee78411d3ab4637f4c5860356ce1/static/why_should_i_use_agile.png
--------------------------------------------------------------------------------